SPB Git

spb/zyquo-cloud Public MIT

Native macOS AI chat client for 12 cloud providers — your keys, every cloud model, one beautiful chat.

Swift 97.4% Shell 1.7% Makefile 1%

docs: README; scripts: header audit sweep (all files pass)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
simon-pierre boucher committed 11 days ago (Jul 30, 2026) parent ae79ca3

Showing 2 changed files with +87 and −0

added README.md +62 −0
@@ -0,0 +1,62 @@
1 +<!--
2 + README.md
3 + Zyquo Cloud
4 + Author: Simon-Pierre Boucher
5 + Mail: contact@spboucher.ai
6 +-->
7 +
8 +# Zyquo Cloud
9 +
10 +**Zyquo Cloud** is a native macOS AI chat client — Swift + SwiftUI, built entirely without Xcode
11 +(Swift Package Manager + command-line toolchain). Bring your own API keys and chat with any model
12 +from **12 cloud AI providers**, switch models mid-conversation, compare models side by side, and
13 +manage everything from a fast, beautiful, truly native Mac interface.
14 +
15 +## Providers
16 +
17 +OpenAI · Anthropic · xAI · Mistral · Google Gemini · Alibaba Qwen (DashScope) · DeepSeek ·
18 +Kimi (Moonshot) · Perplexity · Together AI · DeepInfra · Cerebras — plus any custom
19 +OpenAI-compatible endpoint (OpenRouter, Groq, …). 170+ chat models built in, verified live against
20 +every provider (`docs/VERIFICATION.md`), with dynamic `/models` refresh.
21 +
22 +## Highlights
23 +
24 +- **Streaming chat** with stop, per-message model switching, regenerate-with-another-model
25 +- **Reasoning display** (DeepSeek, Qwen thinking, Claude extended thinking…) in a collapsible section
26 +- **Perplexity citations** as numbered source chips
27 +- **Vision**: drag & drop images to vision-capable models; text files inject inline
28 +- **Compare mode**: broadcast one prompt to 2–4 models in parallel columns
29 +- **Quick Chat**: ⌥Space Spotlight-style floating panel from anywhere
30 +- **Prompt library** (56 built-in templates + yours), **personas**, ⌘K command palette
31 +- **Export** conversations to Markdown or PDF; full-text search; auto-titles
32 +- Token usage + estimated cost per message and per conversation
33 +- **Custom key vault** — AES-256-GCM (CryptoKit), machine-bound via HKDF (hardware UUID + salt +
34 + compiled-in pepper). No Keychain. Keys never leave `~/Library/Application Support/ZyquoCloud/vault.zq`.
35 +
36 +## Build
37 +
38 +Requires macOS 13+ and the Swift toolchain (Command Line Tools are enough — no Xcode).
39 +
40 +```sh
41 +make # release build → dist/Zyquo Cloud.app (ad-hoc signed, for local use)
42 +make run # build + launch
43 +make test # unit tests (Swift Testing)
44 +make icon # regenerate AppIcon.icns from assets/icon/*.svg
45 +make release # universal binary, Developer ID signed, notarized, stapled + DMG
46 +make verify # live API verification across all providers (needs .env.keys)
47 +```
48 +
49 +`make release` uses the Developer ID identity and `notarytool` keychain profile configured on this
50 +machine (see `docs/SIGNING.md`).
51 +
52 +## Layout
53 +
54 +```
55 +Sources/ZyquoCloud/ # app target (App, DesignSystem, Models, Providers, Services, ViewModels, Views, Verify)
56 +Sources/ZyquoVerify/ # zyquo-verify — live API verification launcher
57 +Tests/ZyquoCloudTests/ # unit tests
58 +assets/icon/ # SVG icon sources (single source of truth)
59 +docs/ # PROVIDERS.md (API research), PLAN.md, VERIFICATION.md, SIGNING.md
60 +```
61 +
62 +© 2026 Simon-Pierre Boucher. All rights reserved.
added scripts/audit-headers.sh +25 −0
@@ -0,0 +1,25 @@
1 +#!/bin/bash
2 +#
3 +# audit-headers.sh
4 +# Zyquo Cloud
5 +#
6 +# Author: Simon-Pierre Boucher
7 +# Mail: contact@spboucher.ai
8 +#
9 +# Repository-wide sweep: every code file must carry the Author/Mail header.
10 +#
11 +set -uo pipefail
12 +cd "$(dirname "$0")/.."
13 +missing=0
14 +while IFS= read -r file; do
15 + if ! head -12 "$file" | grep -q "Author: Simon-Pierre Boucher"; then
16 + echo "MISSING HEADER: $file"
17 + missing=$((missing+1))
18 + fi
19 +done < <(find Sources Tests scripts -type f \( -name "*.swift" -o -name "*.sh" \) ; echo Package.swift; echo Makefile)
20 +if [ "$missing" -eq 0 ]; then
21 + echo "OK — all code files carry the mandatory header."
22 +else
23 + echo "$missing file(s) missing the header."
24 + exit 1
25 +fi
26