docs: ultra README (icon, badges, features, screenshots, install/build), LICENSE, macOS/Xcode .gitignore, product screenshots
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
8 changed files +391 −41
modified
.gitignore
+40 −8
@@ -1,21 +1,53 @@ | |||||
| 1 | −# Secrets — never commit API keys | 1 | +# ─── Secrets — never commit API keys or vault data ─── | ||
| 2 | .env.keys | 2 | .env.keys | ||
| 3 | *.env | 3 | *.env | ||
| 4 | +*.key | ||||
| 5 | +vault.zq | ||||
| 4 | 6 | ||||
| 5 | −# Swift Package Manager | 7 | +# ─── Swift Package Manager ─── | ||
| 6 | .build/ | 8 | .build/ | ||
| 7 | .swiftpm/ | 9 | .swiftpm/ | ||
| 8 | 10 | ||||
| 9 | −# Build products & distribution | 11 | +# ─── Xcode ─── | ||
| 12 | +DerivedData/ | ||||
| 13 | +build/ | ||||
| 14 | +xcuserdata/ | ||||
| 15 | +*.xcuserstate | ||||
| 16 | +*.xcscmblueprint | ||||
| 17 | +*.xccheckout | ||||
| 18 | +*.moved-aside | ||||
| 19 | +*.hmap | ||||
| 20 | +*.ipa | ||||
| 21 | +*.dSYM.zip | ||||
| 22 | +*.dSYM | ||||
| 23 | +*.pbxuser | ||||
| 24 | +*.mode1v3 | ||||
| 25 | +*.mode2v3 | ||||
| 26 | +*.perspectivev3 | ||||
| 27 | + | ||||
| 28 | +# ─── CocoaPods / Carthage (defensive) ─── | ||||
| 29 | +Pods/ | ||||
| 30 | +Carthage/Build/ | ||||
| 31 | +Carthage/Checkouts/ | ||||
| 32 | + | ||||
| 33 | +# ─── Build products & distribution artifacts ─── | ||||
| 10 | dist/ | 34 | dist/ | ||
| 11 | *.zip | 35 | *.zip | ||
| 12 | *.dmg | 36 | *.dmg | ||
| 37 | +*.app | ||||
| 38 | +*.icns.tmp | ||||
| 13 | 39 | ||||
| 14 | −# macOS | 40 | +# ─── macOS ─── | ||
| 15 | .DS_Store | 41 | .DS_Store | ||
| 42 | +.AppleDouble | ||||
| 43 | +.LSOverride | ||||
| 44 | +Icon? | ||||
| 45 | +._* | ||||
| 46 | +.Spotlight-V100 | ||||
| 47 | +.Trashes | ||||
| 48 | +.fseventsd | ||||
| 16 | 49 | ||||
| 17 | −# Temporary | 50 | +# ─── Temporary ─── | ||
| 18 | *.log | 51 | *.log | ||
| 19 | − | 52 | +*.swp | ||
| 20 | −# SwiftPM | 53 | +*~ | ||
| 21 | −.swiftpm/ | ||||
added
LICENSE
+26 −0
@@ -0,0 +1,26 @@ | |||||
| 1 | +Zyquo Atlas — License | ||||
| 2 | + | ||||
| 3 | +Copyright © 2026 Simon-Pierre Boucher. All rights reserved. | ||||
| 4 | + | ||||
| 5 | +This source code is made publicly available for reference, evaluation, and | ||||
| 6 | +transparency. It is NOT released under an open-source license. No permission is | ||||
| 7 | +granted to copy, modify, redistribute, sublicense, or create derivative works | ||||
| 8 | +from this software or its source code, in whole or in part, without the prior | ||||
| 9 | +written permission of the copyright holder. | ||||
| 10 | + | ||||
| 11 | +The compiled application (including the notarized .dmg attached to GitHub | ||||
| 12 | +Releases) is provided free of charge for personal use. | ||||
| 13 | + | ||||
| 14 | +Third-party components retain their own licenses: | ||||
| 15 | + • Mozilla Readability (Sources/ZyquoAtlas/Content/Readability.js, | ||||
| 16 | + Readability-readerable.js) — Apache License 2.0, Copyright (c) 2010 Arc90 | ||||
| 17 | + Inc. See Sources/ZyquoAtlas/Content/LICENSE-Readability.txt. | ||||
| 18 | + • swift-markdown (Swift Package dependency) — Apache License 2.0. | ||||
| 19 | + | ||||
| 20 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| 21 | +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS | ||||
| 22 | +FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR BE | ||||
| 23 | +LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM THE USE OF THE | ||||
| 24 | +SOFTWARE. | ||||
| 25 | + | ||||
| 26 | +Contact: contact@spboucher.ai | ||||
modified
README.md
+325 −33
@@ -5,48 +5,340 @@ | |||||
| 5 | Mail: contact@spboucher.ai | 5 | Mail: contact@spboucher.ai | ||
| 6 | --> | 6 | --> | ||
| 7 | 7 | ||||
| 8 | +<div align="center"> | ||||
| 9 | + | ||||
| 10 | +<img src="assets/app-icon.png" width="168" height="168" alt="Zyquo Atlas app icon" /> | ||||
| 11 | + | ||||
| 8 | # Zyquo Atlas | 12 | # Zyquo Atlas | ||
| 9 | 13 | ||||
| 10 | −A legendary, native macOS **web browser** written in Swift + SwiftUI on WebKit | 14 | +### The AI-native macOS web browser — every surface, intelligent. | ||
| 11 | −(`WKWebView`), built **without the Xcode IDE** (Swift Package Manager + the | 15 | + | ||
| 12 | −command-line toolchain). Part of the **Zyquo** family. AI is woven into every | 16 | +*A fast, radically customizable, privacy-first browser where AI is woven into the omnibox, | ||
| 13 | −surface, powered by the same providers/models and encrypted key vault as | 17 | +the page, your selection, and your tabs — powered by **your** keys across **12 providers** and **169 models**.* | ||
| 14 | −**Zyquo Cloud**. | 18 | + | ||
| 19 | +<br/> | ||||
| 20 | + | ||||
| 21 | +[](https://github.com/spboucher-ai/zyquo-atlas/releases/latest) | ||||
| 22 | +[](https://www.apple.com/macos/) | ||||
| 23 | +[](https://swift.org) | ||||
| 24 | +[-1FA9A0)](https://webkit.org) | ||||
| 25 | +[-4E63E0)](#-building-from-source) | ||||
| 26 | +[](#-installation) | ||||
| 27 | +[](https://github.com/spboucher-ai/zyquo-atlas/releases) | ||||
| 28 | +[](LICENSE) | ||||
| 29 | + | ||||
| 30 | +<br/> | ||||
| 31 | + | ||||
| 32 | +[**⬇︎ Download the latest .dmg**](https://github.com/spboucher-ai/zyquo-atlas/releases/latest/download/ZyquoAtlas.dmg) · [Features](#-features) · [Screenshots](#-screenshots) · [Install](#-installation) · [Build](#-building-from-source) | ||||
| 33 | + | ||||
| 34 | +</div> | ||||
| 35 | + | ||||
| 36 | +--- | ||||
| 37 | + | ||||
| 38 | +## 📑 Table of Contents | ||||
| 39 | + | ||||
| 40 | +- [Overview](#-overview) | ||||
| 41 | +- [Screenshots](#-screenshots) | ||||
| 42 | +- [Features](#-features) | ||||
| 43 | + - [Browser core](#browser-core) | ||||
| 44 | + - [AI everywhere](#ai-everywhere) | ||||
| 45 | + - [Massive customization](#massive-customization) | ||||
| 46 | + - [Privacy & security](#privacy--security) | ||||
| 47 | + - [Keyboard shortcuts](#keyboard-shortcuts) | ||||
| 48 | +- [Supported AI providers & models](#-supported-ai-providers--models) | ||||
| 49 | +- [Requirements](#-requirements) | ||||
| 50 | +- [Installation](#-installation) | ||||
| 51 | +- [Usage](#-usage) | ||||
| 52 | +- [Building from source](#-building-from-source) | ||||
| 53 | +- [Architecture](#-architecture) | ||||
| 54 | +- [Verification](#-verification) | ||||
| 55 | +- [Roadmap](#-roadmap) | ||||
| 56 | +- [Contributing](#-contributing) | ||||
| 57 | +- [License](#-license) | ||||
| 58 | +- [Author](#-author) | ||||
| 59 | + | ||||
| 60 | +--- | ||||
| 61 | + | ||||
| 62 | +## 🧭 Overview | ||||
| 63 | + | ||||
| 64 | +**Zyquo Atlas** is a native macOS web browser built in **Swift + SwiftUI** on Apple's | ||||
| 65 | +**WebKit (`WKWebView`)** engine — compiled entirely with the Swift Package Manager and the | ||||
| 66 | +command-line toolchain, **without the Xcode IDE**. It is the web-browser member of the | ||||
| 67 | +**Zyquo** family. | ||||
| 68 | + | ||||
| 69 | +Unlike browsers that bolt a chatbot onto a sidebar, Atlas weaves AI into every surface — | ||||
| 70 | +the omnibox, the current page, your text selection, and across your open tabs — and it does | ||||
| 71 | +so on **your** terms: you bring your own API keys, stored in a machine-bound, AES-256-GCM | ||||
| 72 | +encrypted vault (no Keychain), and page content is sent to a provider **only** when you | ||||
| 73 | +invoke an AI action. | ||||
| 74 | + | ||||
| 75 | +- **~8,300 lines** of Swift across **58 files**, zero build warnings. | ||||
| 76 | +- **12 AI providers · 169 models** — the same catalog and provider layer as Zyquo Cloud. | ||||
| 77 | +- **Universal** (Apple Silicon + Intel), **Developer ID–signed, notarized, and stapled**. | ||||
| 78 | + | ||||
| 79 | +--- | ||||
| 80 | + | ||||
| 81 | +## 📸 Screenshots | ||||
| 82 | + | ||||
| 83 | +<div align="center"> | ||||
| 84 | + | ||||
| 85 | +**Customizable start page — flagship light theme** | ||||
| 86 | + | ||||
| 87 | +<img src="assets/screenshot-startpage.png" width="820" alt="Zyquo Atlas start page (light theme)" /> | ||||
| 88 | + | ||||
| 89 | +<br/><br/> | ||||
| 90 | + | ||||
| 91 | +**Live browsing with the bookmarks bar** | ||||
| 92 | + | ||||
| 93 | +<img src="assets/screenshot-browsing.png" width="820" alt="Zyquo Atlas rendering a web page with the bookmarks bar" /> | ||||
| 94 | + | ||||
| 95 | +<br/><br/> | ||||
| 96 | + | ||||
| 97 | +**Midnight dark theme with left vertical tabs** | ||||
| 98 | + | ||||
| 99 | +<img src="assets/screenshot-dark.png" width="820" alt="Zyquo Atlas dark theme with left vertical tab sidebar" /> | ||||
| 100 | + | ||||
| 101 | +</div> | ||||
| 102 | + | ||||
| 103 | +--- | ||||
| 104 | + | ||||
| 105 | +## ✨ Features | ||||
| 106 | + | ||||
| 107 | +Every feature below is implemented in this repository — nothing aspirational. | ||||
| 108 | + | ||||
| 109 | +### Browser core | ||||
| 110 | + | ||||
| 111 | +- 🗂️ **Real multi-tab WKWebView browsing** — each tab owns its web view and navigation | ||||
| 112 | + state, with a determinate progress bar, back/forward/reload/stop, and links that open in | ||||
| 113 | + new tabs (`target=_blank`, ⌘-click, `window.open`). | ||||
| 114 | +- 📌 **Tab pinning**, **background-tab suspension** (dims + frees memory), and **session | ||||
| 115 | + restore** per profile on relaunch. | ||||
| 116 | +- ↕️ **Top horizontal tabs OR a left vertical tab sidebar** (Arc-style) — switch live. | ||||
| 117 | +- 🧭 **Smart omnibox** — resolves your input into **navigate** (URL), **web search**, or | ||||
| 118 | + **Ask AI**, with a security indicator and reader toggle. | ||||
| 119 | +- 🕵️ **Private windows** (⌘⇧N) using a non-persistent data store — no history, no session, | ||||
| 120 | + no saved data. | ||||
| 121 | +- 📖 **Reader mode** — a clean, themeable article view with an optional AI summary at the top. | ||||
| 122 | +- ⬇️ **Downloads** — routed to `~/Downloads` with live progress, reveal-in-Finder, and open. | ||||
| 123 | +- 🔎 **Find-in-page** (⌘F) — native WebKit find with next/previous and wrap. | ||||
| 124 | +- ⭐ **Favorites** — a toggleable bookmarks bar, a full manager (edit title/URL/tags/notes, | ||||
| 125 | + show-on-bar), search, and **Netscape HTML import/export** (interchange with other browsers). | ||||
| 126 | +- 🕘 **Full-text history** — searchable, grouped by day, with delete-range/clear controls. | ||||
| 127 | +- 👤 **Profiles** — a persistent personal profile and a private profile, each with isolated | ||||
| 128 | + WebKit data stores. | ||||
| 129 | + | ||||
| 130 | +### AI everywhere | ||||
| 131 | + | ||||
| 132 | +- 💬 **Chat-with-page sidebar** — a per-tab, multi-turn conversation grounded in the page's | ||||
| 133 | + extracted content, with an in-panel **model picker across all 169 models**. | ||||
| 134 | +- ⚡ **Quick actions** — one-click **Summarize**, **Key points**, and **Translate**, plus | ||||
| 135 | + long-page **map-reduce** summarization for articles that exceed the model's context. | ||||
| 136 | +- 🖱️ **Selection floating toolbar** — select any text on a page and get **Explain / | ||||
| 137 | + Summarize / Translate / Rewrite / Ask** right at the cursor. | ||||
| 138 | +- 🔮 **Ask AI from the omnibox** — get a streamed, grounded answer without leaving the page. | ||||
| 139 | +- 🪟 **Multi-tab reasoning** — "compare these open tabs" gathers several pages and answers | ||||
| 140 | + across them. | ||||
| 141 | +- 🎚️ **Per-action model tiers** — pick a fast/cheap model for quick actions and a strong one | ||||
| 142 | + for deep chat; choices persist. | ||||
| 143 | +- 🧱 **Grounded & injection-safe** — page content is extracted with Mozilla Readability in | ||||
| 144 | + an isolated JavaScript world (visible text only), wrapped as untrusted data in every | ||||
| 145 | + prompt, and streamed responses **cancel automatically on navigation**. | ||||
| 146 | + | ||||
| 147 | +### Massive customization | ||||
| 148 | + | ||||
| 149 | +- 🎨 **Theming engine** — **10 built-in themes** (light & dark, including the flagship | ||||
| 150 | + teal-indigo *Atlas Light* and *Midnight*), plus a **custom theme editor** (native color | ||||
| 151 | + wells for accent / background / chrome) that applies **live**. | ||||
| 152 | +- 🖼️ **Backgrounds** — solid, gradient, or image behind the chrome and start page. | ||||
| 153 | +- 🧩 **Layout** — top or left tabs, **compact/comfortable density**, bookmarks-bar toggle, | ||||
| 154 | + and a **UI-size slider**. | ||||
| 155 | +- 🏠 **Customizable start page** — greeting, a prominent search / Ask-AI box, and a favorites | ||||
| 156 | + grid. | ||||
| 157 | +- 💾 **Per-profile persistence** and **theme import/export** as small JSON files. | ||||
| 158 | + | ||||
| 159 | +### Privacy & security | ||||
| 160 | + | ||||
| 161 | +- 🔐 **Encrypted key vault** — API keys are stored with **AES-256-GCM** (CryptoKit), | ||||
| 162 | + bound to the machine via `IOPlatformUUID` + HKDF, in `~/Library/Application | ||||
| 163 | + Support/ZyquoAtlas/vault.zq` — **not** the Keychain, decrypted on demand and never logged. | ||||
| 164 | +- 🛡️ **Content leaves the device only on a user-invoked AI action**, always to the provider | ||||
| 165 | + you chose, via your own key — **never to Zyquo**. | ||||
| 166 | +- 🧯 **Prompt-injection hardening** — extraction drops hidden/`aria-hidden`/off-screen text; | ||||
| 167 | + page content is delimited and labelled untrusted; the AI layer has no navigation or tool | ||||
| 168 | + access, so even a hostile page can only produce a bad summary, never an action. | ||||
| 169 | +- 🍎 **Hardened Runtime, Developer ID–signed, notarized & stapled** — `spctl` reports | ||||
| 170 | + *Notarized Developer ID*. | ||||
| 171 | + | ||||
| 172 | +### Keyboard shortcuts | ||||
| 173 | + | ||||
| 174 | +| Shortcut | Action | Shortcut | Action | | ||||
| 175 | +|---|---|---|---| | ||||
| 176 | +| `⌘T` | New tab | `⌘Y` | History | | ||||
| 177 | +| `⌘W` | Close tab | `⌥⌘B` | Bookmarks manager | | ||||
| 178 | +| `⌘L` | Focus omnibox | `⌘⇧J` | Downloads | | ||||
| 179 | +| `⌘⇧A` | Toggle AI sidebar | `⌘⇧N` | Private window | | ||||
| 180 | +| `⌘F` | Find in page | `⌘1`–`⌘8`, `⌘9` | Switch tab / last tab | | ||||
| 181 | +| `⌘D` | Bookmark page | `⌥Space` | Quick AI ask | | ||||
| 182 | +| `⌘R` | Reload | `⌘[` / `⌘]` | Back / forward | | ||||
| 183 | +| `⌘,` | Customize | | | | ||||
| 184 | + | ||||
| 185 | +--- | ||||
| 15 | 186 | ||||
| 16 | −## Build | 187 | +## 🤖 Supported AI providers & models | ||
| 188 | + | ||||
| 189 | +Atlas speaks to **12 providers** and ships a catalog of **169 chat models**, calling each | ||||
| 190 | +provider exactly as Zyquo Cloud does (OpenAI-compatible or native Anthropic Messages API, | ||||
| 191 | +streaming SSE, reasoning-token aware). Bring your own key per provider. | ||||
| 192 | + | ||||
| 193 | +| Provider | Provider | Provider | | ||||
| 194 | +|---|---|---| | ||||
| 195 | +| OpenAI | Anthropic (Claude) | xAI (Grok) | | ||||
| 196 | +| Mistral | Google Gemini | Alibaba Qwen (DashScope) | | ||||
| 197 | +| DeepSeek | Kimi (Moonshot) | Perplexity | | ||||
| 198 | +| Together AI | DeepInfra | Cerebras | | ||||
| 199 | + | ||||
| 200 | +Every provider/model was live-verified end-to-end — see [Verification](#-verification). | ||||
| 201 | + | ||||
| 202 | +--- | ||||
| 203 | + | ||||
| 204 | +## 💻 Requirements | ||||
| 205 | + | ||||
| 206 | +- **macOS 13.0 (Ventura) or later** — Apple Silicon or Intel. | ||||
| 207 | +- An **API key** for at least one supported provider to use the AI features (browsing works | ||||
| 208 | + without any key). | ||||
| 209 | +- To build from source: the **Swift 5.9+ toolchain** (Command Line Tools or Xcode). | ||||
| 210 | + | ||||
| 211 | +--- | ||||
| 212 | + | ||||
| 213 | +## 📦 Installation | ||||
| 214 | + | ||||
| 215 | +1. **[Download `ZyquoAtlas.dmg`](https://github.com/spboucher-ai/zyquo-atlas/releases/latest/download/ZyquoAtlas.dmg)** from the latest release. | ||||
| 216 | +2. Open the DMG and **drag *Zyquo Atlas* into Applications**. | ||||
| 217 | +3. Launch it. The app is **notarized by Apple**, so Gatekeeper opens it without warnings. | ||||
| 218 | +4. Add your API keys in **Customize / Settings** (or import them) to enable AI features. | ||||
| 219 | + | ||||
| 220 | +> Verify authenticity yourself: `spctl -a -vv "/Applications/Zyquo Atlas.app"` → | ||||
| 221 | +> `source=Notarized Developer ID`. | ||||
| 222 | + | ||||
| 223 | +--- | ||||
| 224 | + | ||||
| 225 | +## 🚀 Usage | ||||
| 226 | + | ||||
| 227 | +- **Browse** — type a URL or search terms in the omnibox; press Enter. | ||||
| 228 | +- **Ask AI** — click **Ask AI** in the omnibox, or open the sidebar with `⌘⇧A`, to ask about | ||||
| 229 | + the current page with cited, grounded answers. | ||||
| 230 | +- **Summarize** — open the AI sidebar and hit **Summarize** (works on long articles via | ||||
| 231 | + map-reduce), or use **Reader mode** for a clean read + summary. | ||||
| 232 | +- **Selection actions** — select text on any page and choose **Explain / Translate / Rewrite | ||||
| 233 | + / Ask** from the floating toolbar. | ||||
| 234 | +- **Compare tabs** — open several pages and click **Compare tabs** in the sidebar. | ||||
| 235 | +- **Customize** — press `⌘,` to switch themes, move tabs to a left sidebar, tune density, and | ||||
| 236 | + edit a custom theme with live preview. | ||||
| 237 | + | ||||
| 238 | +--- | ||||
| 239 | + | ||||
| 240 | +## 🛠️ Building from source | ||||
| 241 | + | ||||
| 242 | +Zyquo Atlas builds with the Swift Package Manager — **no Xcode project required**. | ||||
| 17 | 243 | ||||
| 18 | ```sh | 244 | ```sh | ||
| 19 | −make dev # release build → dist/Zyquo Atlas.app, ad-hoc signed (local iteration) | 245 | +git clone https://github.com/spboucher-ai/zyquo-atlas.git | ||
| 20 | −make run # make dev, then launch the app | 246 | +cd zyquo-atlas | ||
| 21 | −make test # run the test suite | 247 | + | ||
| 22 | −make release # universal (arm64+x86_64), Developer ID signed, notarized, stapled | 248 | +make dev # release build → dist/Zyquo Atlas.app (ad-hoc signed), for local iteration | ||
| 23 | −make dmg # signed + notarized + stapled dist/ZyquoAtlas.dmg (run after make release) | 249 | +make run # build + launch | ||
| 24 | −make icon # regenerate AppIcon.icns from assets/icon/zyquo-atlas.svg | 250 | +make test # run the test suite | ||
| 25 | −make verify # API verification with real keys (source .env.keys) | 251 | +make icon # regenerate AppIcon.icns from assets/icon/zyquo-atlas.svg | ||
| 26 | −make clean | 252 | + | ||
| 253 | +# Distribution (requires a Developer ID certificate + notarytool profile): | ||||
| 254 | +make release # universal (arm64 + x86_64), Developer ID signed, notarized, stapled | ||||
| 255 | +make dmg # signed + notarized + stapled dist/ZyquoAtlas.dmg | ||||
| 256 | +``` | ||||
| 257 | + | ||||
| 258 | +Dependencies: Apple frameworks only — **SwiftUI, WebKit, CryptoKit, AppKit, Foundation, | ||||
| 259 | +Combine, Security, IOKit** — plus Apple's **swift-markdown**. Mozilla **Readability** | ||||
| 260 | +(Apache-2.0) is vendored for content extraction. No third-party HTTP libraries. | ||||
| 261 | + | ||||
| 262 | +--- | ||||
| 263 | + | ||||
| 264 | +## 🏗️ Architecture | ||||
| 265 | + | ||||
| 266 | +``` | ||||
| 267 | +Sources/ZyquoAtlas/ | ||||
| 268 | +├── App/ @main entry, scene + commands, per-window state, app environment | ||||
| 269 | +├── DesignSystem/ ZyquoTheme tokens · AtlasTheme + 10 built-in themes · ThemeEngine | ||||
| 270 | +├── Models/ Tab · Profile · Bookmark · HistoryEntry · AIModel · Message · … | ||||
| 271 | +├── Browser/ WebView (WKWebView wrapper) · TabManager · ProfileStore · | ||||
| 272 | +│ OmniIntent · DownloadManager | ||||
| 273 | +├── Content/ ContentExtractor + Readability.js + AtlasExtractor.js · PageContext · | ||||
| 274 | +│ Chunker (isolated WKContentWorld, visible-text-only) | ||||
| 275 | +├── AI/ AIService (streaming, cancel-on-nav) · AIActions · Summarizer | ||||
| 276 | +├── Providers/ ProviderProtocol · OpenAICompatibleClient · AnthropicClient · Registry | ||||
| 277 | +├── Services/ ModelCatalog (169) · SecureKeyStore (AES-256-GCM) · StreamingService (SSE) | ||||
| 278 | +├── Features/ BookmarksService · HistoryService | ||||
| 279 | +├── ViewModels/ KeyVaultStore | ||||
| 280 | +└── Views/ Browser chrome, AI sidebar + selection toolbar, feature panels | ||||
| 27 | ``` | 281 | ``` | ||
| 28 | 282 | ||||
| 29 | −`make release` produces a **Notarized Developer ID** `Zyquo Atlas.app` (verified: | 283 | +--- | ||
| 30 | −`spctl -a -vv` → `source=Notarized Developer ID`), universal, built without the | 284 | + | ||
| 31 | −Xcode IDE. Signing identity, Team ID, and the `notarytool` keychain profile are | 285 | +## ✅ Verification | ||
| 32 | −reused from the Zyquo family pipeline; no secrets live in this repo. | 286 | + | ||
| 287 | +A built-in harness (`--verify`) exercises the real stack — content extraction, then a | ||||
| 288 | +grounded summarize across **every one of the 169 models**, the full AI-action matrix, and | ||||
| 289 | +cancel-on-navigation / privacy invariants — against live APIs. | ||||
| 290 | + | ||||
| 291 | +**Latest result: 183 / 183 checks green.** Full table in | ||||
| 292 | +[`docs/VERIFICATION.md`](docs/VERIFICATION.md). | ||||
| 293 | + | ||||
| 294 | +--- | ||||
| 295 | + | ||||
| 296 | +## 🗺️ Roadmap | ||||
| 297 | + | ||||
| 298 | +Planned enhancements (tracked in [`docs/PLAN.md`](docs/PLAN.md)): | ||||
| 299 | + | ||||
| 300 | +- Tab groups / "spaces" and drag-to-reorder | ||||
| 301 | +- Hover thumbnail previews for tabs and links | ||||
| 302 | +- AI writing assist that types back into web text fields | ||||
| 303 | +- Opt-in auto-summaries and link hover-summaries | ||||
| 304 | +- Inline source-link and section-citation chips in answers | ||||
| 305 | +- A menu-bar quick-ask extra | ||||
| 306 | + | ||||
| 307 | +--- | ||||
| 308 | + | ||||
| 309 | +## 🤝 Contributing | ||||
| 310 | + | ||||
| 311 | +Issues and feature suggestions are welcome via | ||||
| 312 | +[GitHub Issues](https://github.com/spboucher-ai/zyquo-atlas/issues). This is a source-available | ||||
| 313 | +project (see [License](#-license)); please open an issue to discuss substantial changes before | ||||
| 314 | +submitting a pull request. | ||||
| 315 | + | ||||
| 316 | +Engineering standards: Swift 5.9+, zero warnings, every source file carries the project | ||||
| 317 | +header, design tokens over magic numbers, and the provider layer stays byte-compatible with | ||||
| 318 | +the Zyquo family. | ||||
| 319 | + | ||||
| 320 | +--- | ||||
| 321 | + | ||||
| 322 | +## 📄 License | ||||
| 323 | + | ||||
| 324 | +Copyright © 2026 Simon-Pierre Boucher. **All rights reserved.** The source is public for | ||||
| 325 | +reference and transparency; the compiled app (the notarized `.dmg`) is free for personal use. | ||||
| 326 | +See [`LICENSE`](LICENSE). Vendored Mozilla Readability and swift-markdown are Apache-2.0. | ||||
| 327 | + | ||||
| 328 | +--- | ||||
| 329 | + | ||||
| 330 | +## 👤 Author | ||||
| 331 | + | ||||
| 332 | +<div align="center"> | ||||
| 333 | + | ||||
| 334 | +**Simon-Pierre Boucher** | ||||
| 33 | 335 | ||||
| 34 | −### Toolchain note | 336 | +📧 [contact@spboucher.ai](mailto:contact@spboucher.ai) | ||
| 35 | 337 | ||||
| 36 | −The Command Line Tools' default SDK (macOS 27 beta) declares SwiftUI's `@State` | 338 | +<br/> | ||
| 37 | −& co. as macros whose `SwiftUIMacros` plugin ships only with Xcode, so every | ||||
| 38 | −SwiftUI build fails against it. All builds therefore pin | ||||
| 39 | −`SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX26.sdk` (set in the | ||||
| 40 | −`Makefile`). Build directly with `swift build -c release` only if you export the | ||||
| 41 | −same `SDKROOT`. | ||||
| 42 | 339 | ||||
| 43 | −## Layout | 340 | +*Part of the **Zyquo** family — Cloud · Local · Agent · Atlas.* | ||
| 44 | 341 | ||||
| 45 | −- `Sources/ZyquoAtlas/` — the app (App, DesignSystem, Models, Browser, Content, | 342 | +<sub>Built with Swift, SwiftUI & WebKit — no Xcode IDE. 🗺️</sub> | ||
| 46 | − AI, Providers, Features, Services, ViewModels, Views). | ||||
| 47 | −- `Sources/ZyquoVerify/` — thin launcher that execs the app's `--verify` harness. | ||||
| 48 | −- `docs/` — `PLAN.md` (phase progress), `AI-BROWSER-RESEARCH.md` (Phase 0.A), | ||||
| 49 | − `PROVIDER-REUSE.md` (Phase 0.B). | ||||
| 50 | −- `Resources/`, `scripts/`, `assets/` — bundle resources, build scripts, icon source. | ||||
| 51 | 343 | ||||
| 52 | −Requires macOS 13.0+. | 344 | +</div> | ||
added
assets/app-icon.png
+0 −0
Binary file not shown.
added
assets/app-icon@512.png
+0 −0
Binary file not shown.
added
assets/screenshot-browsing.png
+0 −0
Binary file not shown.
added
assets/screenshot-dark.png
+0 −0
Binary file not shown.
added
assets/screenshot-startpage.png
+0 −0
Binary file not shown.