aio-connect 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/PRD.md ADDED
@@ -0,0 +1,213 @@
1
+ # PRD — aio (all-in-one-repo)
2
+
3
+ | | |
4
+ |---|---|
5
+ | **Product** | `aio` — All-In-One auto-connect layer for AI coding agents |
6
+ | **Package** | `aio-connect` (npm registry; GitHub repo `MRaihan-XXL/all-in-one-repo`) |
7
+ | **Version** | 1.1.0 |
8
+ | **Status** | Approved for implementation |
9
+ | **License** | GPL-3.0 |
10
+ | **Docs language** | English (international) |
11
+
12
+ ---
13
+
14
+ ## 1. Background
15
+
16
+ Developers increasingly run several AI coding agents side by side (opencode,
17
+ Claude Code, Kimi Code, jcode, freebuff, Hermes, Codex, Gemini — plus whatever
18
+ comes next).
19
+ Each agent keeps its own session, its own config, and its own way of loading
20
+ context. Locally cloned repositories, installed CLI tools, and agent skills
21
+ live in separate places, so every new session starts "cold": the agent does not
22
+ know what is on the machine, and the user has to re-explain context or type
23
+ slash-commands (`/skill`, `/mcp-tool`, …) to reach the right capability.
24
+
25
+ `aio` solves this with a single command: it scans the machine, writes one
26
+ generated **context manifest** (repositories + tools + skills), injects a small
27
+ idempotent **auto-use rule block** into every supported agent's instruction
28
+ file, and keeps everything fresh on later runs. After setup the user opens any
29
+ agent directly and prompts in plain language — no slash commands.
30
+
31
+ ## 2. Goals
32
+
33
+ - **G1** One command (`aio`) wires every installed AI agent to the local
34
+ repositories, tools, and skills — permanently (config survives until changed).
35
+ - **G2** Zero slash-commands: routing decisions are made by the agent from the
36
+ manifest, from plain-language prompts.
37
+ - **G3** The manifest covers **repositories AND tools** (commands, versions,
38
+ locations, links, descriptions) — not just code folders.
39
+ - **G4** Stays correct over time: adding repositories or updating features only
40
+ requires re-running `aio` (rescan + block regeneration).
41
+ - **G5** Every agent reply that uses a local repo/tool **discloses it**: tool
42
+ name, kind, and function (see FR6).
43
+ - **G6** Self-updatable (`aio update`), rollback-able (`aio rollback`), and
44
+ safe to publish (public repo, no local/sensitive data).
45
+
46
+ ## 3. Users
47
+
48
+ 1. **Primary** — the owner: power user running 8 agents + 97 cloned repos +
49
+ a local tools database on one Windows machine.
50
+ 2. **Secondary** — public GitHub users: anyone installing
51
+ `npm install -g aio-connect` on their own machine with
52
+ their own repos/agents (data folder optional).
53
+
54
+ ## 4. Functional requirements
55
+
56
+ ### FR1 — Agent detection & permanent wiring
57
+ `aio` detects installed agents by `PATH` binary **or** their configuration
58
+ directory (minimum set: `opencode`, `claude`, `kimi`, `jcode`, `freebuff`,
59
+ `hermes`, `codex`, `gemini`) and writes the auto-use block into each
60
+ agent's canonical instruction file (`AGENTS.md` / `CLAUDE.md` / `GEMINI.md`,
61
+ global `~/AGENTS.md` as fallback). Configuration
62
+ persists: after one run, every later agent session is already wired.
63
+
64
+ **Acceptance:** running `aio` reports per-agent status
65
+ (detected / instruction file / block / MCP / fallback).
66
+
67
+ ### FR2 — No slash-commands (auto-use)
68
+ The injected block tells the agent: match the user's prompt against the
69
+ manifest and route itself to the right repository/tool/skill automatically.
70
+ The user never types `/…` for routing.
71
+
72
+ **Acceptance:** block content contains explicit "never ask the user to type
73
+ a slash-command" rule.
74
+
75
+ ### FR3 — Manifest = repositories + tools + skills
76
+ Generated file `aio-context.md` with three sections:
77
+ - **REPOS** — name, URL (from real `.git/config`), local path, category.
78
+ - **TOOLS** — name, command/access, version, location, link, description.
79
+ Source: local `ai-tools.db` (SQLite) first, `TOOLS-INDEX.md` parse as
80
+ fallback, nothing if both absent.
81
+ - **SKILLS** — names + locations of global agent skill directories.
82
+
83
+ **Acceptance:** after setup the manifest lists all three sections with correct
84
+ counts for the machine.
85
+
86
+ ### FR4 — Update resilience (repos & features)
87
+ - `aio` **rescans** on every run: a repository added to the repos directory
88
+ appears in the manifest after a re-run.
89
+ - The injected block is marker-delimited (`aio:auto-config:v1`) and
90
+ **regenerated** from the running package version: updating `aio` and
91
+ re-running replaces block content in place — never duplicated, never stale.
92
+
93
+ **Acceptance:** run `aio` twice → block appears exactly once; add a dummy repo
94
+ folder → re-run → manifest count increases.
95
+
96
+ ### FR5 — Auto-update
97
+ `aio update` reinstalls the package from npm (`npm install -g aio-connect`;
98
+ GitHub `github:<owner>/all-in-one-repo` remains a fallback source) and then
99
+ automatically re-runs setup with the new code, so rules/manifest pick up the
100
+ new version.
101
+
102
+ **Acceptance:** `aio update` exits 0 on success, prints new version + setup
103
+ report; offline → clear error, exit 1, no partial damage.
104
+
105
+ ### FR6 — Usage disclosure in agent output
106
+ The injected block mandates: whenever an agent uses a repository or tool from
107
+ the manifest, it must start that step with:
108
+
109
+ ```
110
+ [aio] Using <name> (<type>) — <function>
111
+ ```
112
+
113
+ where `<function>` is the manifest description (what the tool/repo does).
114
+
115
+ **Acceptance:** rule present in block with that exact format **and** emitted
116
+ by real agents in live sessions (proven on this machine: claude, jcode via
117
+ antigravity, and opencode all printed the line unprompted).
118
+
119
+ ### FR7 — Backup & rollback
120
+ Every file is backed up to `~/.aio/backups/` before first modification.
121
+ `aio rollback` surgically removes the auto-use block and any MCP entry `aio`
122
+ added (recorded in a ledger) — user edits outside the block are preserved.
123
+
124
+ **Acceptance:** `node --test` proves inject-twice idempotency and exact
125
+ rollback restore.
126
+
127
+ ### FR8 — Publication without local/sensitive data
128
+ Public GitHub repository; `.gitignore` excludes the local tools database,
129
+ screenshots, tracking/registry logs, generated context manifest, and env
130
+ files. No machine-specific absolute paths or secrets in committed code —
131
+ paths are resolved at runtime (env var / config / discovery), README examples
132
+ use placeholders.
133
+
134
+ **Acceptance:** `git ls-files` contains none of the excluded files; secret
135
+ scan (tokens/passwords/usernames) on tracked files passes.
136
+
137
+ ## 5. Non-functional requirements
138
+
139
+ - **NFR1** Idempotent: any run may be repeated without duplication.
140
+ - **NFR2** Zero runtime dependencies (Node.js standard library only);
141
+ Node ≥ 22 (uses `node:sqlite` when present, degrades gracefully otherwise).
142
+ - **NFR3** Fail loudly: non-zero exit codes and explicit messages; never
143
+ silently swallow errors.
144
+ - **NFR4** Windows-first, cross-platform-friendly (PATH/PATHEXT detection,
145
+ `os.homedir()`).
146
+ - **NFR5** Backups before mutation; rollback available.
147
+ - **NFR6** Branding: `aio` prints a logo banner; README shows logo +
148
+ animated flowchart (see §7).
149
+
150
+ ## 6. Commands (CLI surface)
151
+
152
+ | Command | Behavior |
153
+ |---|---|
154
+ | `aio` | Full setup: scan → manifest → inject → MCP ensure → path fix → status table |
155
+ | `aio update` | Reinstall latest from npm → re-run setup automatically |
156
+ | `aio rollback` | Remove injected block + reverse MCP additions from ledger |
157
+ | `aio --help` | Usage + branding |
158
+ | `aio --version` | Print package version |
159
+
160
+ Options: `--repos <dir>` (repositories directory), `--home <dir>` (data folder
161
+ containing `ai-tools.db` / `TOOLS-INDEX.md`). Environment overrides:
162
+ `AIO_REPOS_DIR`, `AIO_HOME`.
163
+
164
+ ## 7. Branding & documentation deliverables
165
+
166
+ - **Logo system** `assets/` — "three streams, one node" motif: tile, mark,
167
+ wordmark, lockups, monochrome, favicon + presentation page
168
+ `assets/logo-gallery.html`; `docs/logo.svg` mirrors the tile for README.
169
+ - **Animated flowchart** `docs/flow.svg` — SMIL-animated diagram:
170
+ prompt → agent → manifest (repos/tools/skills) → disclosed output;
171
+ explained in `docs/flow.md`.
172
+ - **Banner** — strict-grid ASCII wordmark printed by every `aio` command
173
+ (regression-tested for alignment).
174
+ - **README.md** (English) — badges, logo, flowchart, quick start, commands,
175
+ update & privacy sections.
176
+ - **docs/CONFIG.md** — every file `aio` touches, rollback, troubleshooting.
177
+ - **docs/SCREENSHOTS.md** — homepage screenshot evidence, method + 97-row index.
178
+
179
+ ## 8. Out of scope
180
+
181
+ - Background daemon / autostart service (config-only persistence by decision).
182
+ - ~~Publishing to the public npm registry~~ — **superseded**: v1.1.0 publishes
183
+ as `aio-connect` (the name `aio` was taken).
184
+ - Cloud sync of the manifest; web UI; per-prompt live version checks.
185
+
186
+ ## 9. Acceptance checklist
187
+
188
+ - [x] `node --test` passes (idempotency, rollback, scan, tool fallback,
189
+ disclosure format, TOML/JSON ensure, banner grid) — 9/9.
190
+ - [x] On the owner machine: block in **7** instruction files (exactly 1× each),
191
+ MCP entries unchanged/complete, 2 stale registry paths repaired.
192
+ - [x] Manifest shows REPOS + TOOLS + SKILLS with counts (97 · 23 · 67).
193
+ - [x] Re-run `aio` → no duplicates (FR4); setup → rollback → setup cycle
194
+ removes/restores 7/7 blocks.
195
+ - [x] Public repo pushed; tracked-files secret scan clean (FR8).
196
+ - [x] Fresh install → `aio --help` works; `aio update` exits 0 (FR5).
197
+ - [x] FR6 emitted by real agents in live sessions (claude, jcode, opencode).
198
+ - [ ] npm publish of `aio-connect@1.1.0` (blocked on interactive `npm login`)
199
+ + fresh-install verification from the registry.
200
+
201
+ Verified 2026-09-28: tests 9/9; setup → rollback → setup cycle proven on the
202
+ owner machine (blocks removed/restored **7/7**, pre-existing MCP entries never
203
+ touched, ledger-driven MCP reversal for the entries aio created); manifest
204
+ `REPOS 97 · TOOLS 23 · SKILLS 67`; 97/97 homepage screenshots; repo
205
+ `MRaihan-XXL/all-in-one-repo` public; FR6 live-tested on three agents.
206
+
207
+ ## 10. Revision history
208
+
209
+ | Date | Change |
210
+ |---|---|
211
+ | 2026-09-14 | v1 — initial PRD (FR1–FR8, branding, auto-update, disclosure) |
212
+ | 2026-09-28 | v1.1 — acceptance checklist signed off after end-to-end verification |
213
+ | 2026-09-28 | v1.2 — 8 agents (codex/gemini, dir-based detection, 6 MCP formats), npm `aio-connect`, FR6 live proof, brand kit, screenshot evidence index |
package/README.md ADDED
@@ -0,0 +1,139 @@
1
+ <p align="center">
2
+ <img src="./docs/logo.svg" width="110" alt="aio logo">
3
+ </p>
4
+
5
+ <h1 align="center">aio — all-in-one-repo</h1>
6
+
7
+ <p align="center">
8
+ <b>Auto-connect your AI coding agents to your local repos, tools &amp; skills.</b><br>
9
+ No slash-commands. No manual config. One command.
10
+ </p>
11
+
12
+ <p align="center">
13
+ <img src="https://img.shields.io/badge/license-GPL--3.0-blue.svg" alt="license: GPL-3.0">
14
+ <img src="https://img.shields.io/badge/node-%3E%3D22-brightgreen.svg" alt="node >= 22">
15
+ <img src="https://img.shields.io/badge/npm-aio--connect-orange.svg" alt="npm: aio-connect">
16
+ <img src="https://img.shields.io/badge/agents-8-orange.svg" alt="8 agents supported">
17
+ <img src="https://img.shields.io/badge/zero%20runtime%20deps-stdlib-lightgrey.svg" alt="zero runtime dependencies">
18
+ </p>
19
+
20
+ <p align="center">
21
+ <img src="./docs/flow.svg" width="100%" alt="How aio works: your prompt → AI agent (fed by the aio manifest) → answer with disclosed usage">
22
+ </p>
23
+
24
+ ---
25
+
26
+ ## Why
27
+
28
+ Local AI agents (opencode, claude, kimi, …) know nothing about your machine:
29
+ which repositories you cloned, which tools you installed, which skills you
30
+ collected. You end up explaining it every session — or wiring MCP servers and
31
+ instruction files by hand.
32
+
33
+ `aio` does the wiring once, then keeps it fresh:
34
+
35
+ 1. **Scan** — detects installed agents, your repos directory, your tools
36
+ catalog, and your global skills.
37
+ 2. **Generate** — writes a context manifest (`aio-context.md`) listing
38
+ `REPOS · TOOLS · SKILLS`.
39
+ 3. **Inject** — appends a marker-delimited *auto-use block* to each agent's
40
+ instruction file (idempotent — always exactly one copy).
41
+ 4. **Ensure** — adds `codebase-memory-mcp` to opencode / claude / kimi /
42
+ jcode / codex / gemini configs when the binary exists and the entry is
43
+ missing.
44
+ 5. **Repair** — fixes stale path references after folder renames.
45
+
46
+ Then you just open an agent and write normal, plain-language prompts. The agent
47
+ routes itself through the manifest and **must disclose what it used**:
48
+
49
+ ```text
50
+ [aio] Using <name> (<type>) — <function>
51
+ ```
52
+
53
+ ## Install
54
+
55
+ ```bash
56
+ npm install -g aio-connect
57
+ ```
58
+
59
+ > The npm name `aio` was already taken — the package is published as
60
+ > **`aio-connect`**, the binary stays `aio`. (Installing straight from GitHub
61
+ > with `npm install -g github:MRaihan-XXL/all-in-one-repo` also works.)
62
+
63
+ Requires **Node.js ≥ 22** (uses the built-in `node:sqlite`, optional).
64
+
65
+ ## Usage
66
+
67
+ ```bash
68
+ aio # scan + generate + inject (default command)
69
+ aio update # update from npm, then re-run setup
70
+ aio rollback # surgically remove everything aio injected
71
+ aio --help # full help
72
+ ```
73
+
74
+ Options:
75
+
76
+ | Option | Env | Default |
77
+ |---|---|---|
78
+ | `--repos <dir>` | `AIO_REPOS_DIR` | `D:\Tools\github` (if it exists) |
79
+ | `--home <dir>` | `AIO_HOME` | persisted state → walk up from cwd |
80
+
81
+ ## What changes on your machine
82
+
83
+ Everything aio writes is documented in **[docs/CONFIG.md](./docs/CONFIG.md)**.
84
+ Short version:
85
+
86
+ - `aio-context.md` — generated manifest (yours to delete anytime)
87
+ - one `AIO AUTO-CONTEXT` block in each agent's instruction file
88
+ (`~/.config/opencode/AGENTS.md`, `~/.claude/CLAUDE.md`,
89
+ `~/.kimi-code/AGENTS.md`, `~/.jcode/AGENTS.md`, `~/.codex/AGENTS.md`,
90
+ `~/.gemini/GEMINI.md`, `~/AGENTS.md`)
91
+ - MCP entry for `codebase-memory-mcp` — only if missing, only if detected
92
+ - a file backup of every file before it is modified → `~/.aio/backups/`
93
+
94
+ Nothing else is touched. Local data (`ai-tools.db`, `TOOLS-INDEX.md`,
95
+ `TRACKING.md`, screenshots) is **git-ignored** and never uploaded.
96
+
97
+ ## Keeping it fresh
98
+
99
+ - **Clone a new repo?** Run `aio` again — it rescans on every run, so new
100
+ repositories and tools appear in the manifest automatically.
101
+ - **Agent updated its config format?** `aio update` pulls the latest rules
102
+ from npm and re-runs setup.
103
+ - **Want your machine back?** `aio rollback` removes the injected block and
104
+ any MCP entry that *aio itself* added (your own entries are never touched;
105
+ file backups are kept as a safety net).
106
+
107
+ ## Supported agents
108
+
109
+ | Agent | Where the auto-use block lands | MCP ensured |
110
+ |---|---|---|
111
+ | `opencode` | `~/.config/opencode/AGENTS.md` | ✅ `opencode.jsonc` |
112
+ | `claude` | `~/.claude/CLAUDE.md` | ✅ `~/.claude.json` |
113
+ | `kimi` | `~/.kimi-code/AGENTS.md` | ✅ `~/.kimi-code/mcp.json` |
114
+ | `jcode` | `~/.jcode/AGENTS.md` (fallback `~/AGENTS.md`) | ✅ `~/.jcode/mcp.json` |
115
+ | `codex` | `~/.codex/AGENTS.md` | ✅ `~/.codex/config.toml` |
116
+ | `gemini` | `~/.gemini/GEMINI.md` | ✅ `~/.gemini/settings.json` |
117
+ | `freebuff` | `~/AGENTS.md` (fallback) | — |
118
+ | `hermes` | `~/AGENTS.md` | — |
119
+
120
+ Detection is by `PATH` binary **or** the agent's config directory — codex and
121
+ gemini are wired even without a shell wrapper.
122
+
123
+ ## Brand kit
124
+
125
+ The identity ("three streams, one node"), palette, favicon sizes, CLI banner
126
+ grid and usage rules live in
127
+ **[assets/logo-gallery.html](./assets/logo-gallery.html)** (open it in a
128
+ browser); source SVGs are in [`assets/`](./assets/).
129
+
130
+ ## Development
131
+
132
+ ```bash
133
+ npm test # node --test — self-checks for injection/rollback/scan
134
+ node bin/aio.js # run from a checkout without installing
135
+ ```
136
+
137
+ ## License
138
+
139
+ [GPL-3.0](./LICENSE) © MRaihan-XXL
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" role="img" aria-label="aio favicon">
2
+ <rect width="32" height="32" rx="7" fill="#101418"/>
3
+ <g fill="none" stroke="#F7F5F2" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
4
+ <path d="M4.5 8 L11.5 13.5 Q15.5 16 21 16"/>
5
+ <path d="M3.5 16 H21"/>
6
+ <path d="M4.5 24 L11.5 18.5 Q15.5 16 21 16"/>
7
+ </g>
8
+ <circle cx="25.7" cy="16" r="3.1" fill="#FF4A1C"/>
9
+ </svg>
@@ -0,0 +1,150 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>aio — brand kit</title>
7
+ <style>
8
+ :root{
9
+ --ink:#101418; --paper:#F7F5F2; --accent:#FF4A1C;
10
+ --line:#E4E0DA; --mute:#6B6862;
11
+ }
12
+ *{box-sizing:border-box}
13
+ body{margin:0;background:var(--paper);color:var(--ink);
14
+ font:15px/1.6 ui-sans-serif,system-ui,"Segoe UI",sans-serif}
15
+ .wrap{max-width:1080px;margin:0 auto;padding:64px 40px 96px}
16
+ .kicker{font:600 11px/1 ui-monospace,Consolas,monospace;letter-spacing:.16em;
17
+ text-transform:uppercase;color:var(--accent)}
18
+ h1{font-size:44px;line-height:1.05;letter-spacing:-.02em;margin:14px 0 10px;font-weight:680}
19
+ h2{font-size:20px;letter-spacing:-.01em;margin:56px 0 6px;font-weight:640}
20
+ .sub{color:var(--mute);margin:0 0 8px;max-width:64ch}
21
+ .rule{border:0;border-top:1px solid var(--line);margin:56px 0 0}
22
+ .grid{display:grid;gap:16px;margin-top:20px}
23
+ .g2{grid-template-columns:1fr 1fr}
24
+ .g4{grid-template-columns:repeat(4,1fr)}
25
+ .card{background:#fff;border:1px solid var(--line);border-radius:14px;
26
+ padding:28px;display:flex;align-items:center;justify-content:center;min-height:170px}
27
+ .card.dark{background:var(--ink);border-color:var(--ink)}
28
+ .card.tall{min-height:230px}
29
+ .cap{font:600 11px/1.5 ui-monospace,Consolas,monospace;color:var(--mute);
30
+ letter-spacing:.08em;text-transform:uppercase;margin-top:8px}
31
+ .sizes{display:flex;align-items:flex-end;gap:24px;padding:8px 0}
32
+ .sizes figure{margin:0;text-align:center}
33
+ .swatches{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:20px}
34
+ .sw{border:1px solid var(--line);border-radius:14px;overflow:hidden;background:#fff}
35
+ .sw .chip{height:92px}
36
+ .sw .meta{padding:12px 14px;font:13px/1.5 ui-monospace,Consolas,monospace}
37
+ .sw .meta b{display:block;font-family:ui-sans-serif,system-ui,sans-serif;font-size:13px}
38
+ .sw .meta span{color:var(--mute)}
39
+ pre.cli{background:var(--ink);color:var(--paper);border-radius:14px;
40
+ padding:26px 30px;overflow:auto;font:14px/1.45 ui-monospace,Consolas,monospace}
41
+ pre.cli .a{color:#FF6A45}
42
+ pre.cli .d{color:#8A9099}
43
+ .rules{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:20px}
44
+ .rules ul{margin:0;padding:18px 18px 18px 38px;background:#fff;border:1px solid var(--line);
45
+ border-radius:14px}
46
+ .rules li{margin:6px 0}
47
+ .rules .no li::marker{content:"✗ ";color:var(--accent)}
48
+ .rules .yes li::marker{content:"✓ ";color:#1B7F4B}
49
+ code{font:13px ui-monospace,Consolas,monospace;background:#EEEAE4;padding:1px 6px;border-radius:6px}
50
+ </style>
51
+ </head>
52
+ <body>
53
+ <div class="wrap">
54
+
55
+ <div class="kicker">Brand kit · v1.1.0</div>
56
+ <h1>aio — all-in-one-repo</h1>
57
+ <p class="sub">Identity system for the auto-connect layer of AI coding agents.
58
+ Motif: <b>three streams, one node</b> — many agents, repos and tools converging
59
+ into a single context. Flat, geometric, no gradients.</p>
60
+
61
+ <hr class="rule">
62
+
63
+ <h2>Lockup</h2>
64
+ <p class="sub">Primary horizontal lockup: app tile + geometric wordmark. The i-dot
65
+ carries the accent, echoing the convergence node.</p>
66
+ <div class="grid g2">
67
+ <div class="card tall"><img src="logo-lockup.svg" alt="aio lockup" width="420"></div>
68
+ <div class="card dark tall"><img src="logo-lockup-reversed.svg" alt="aio lockup on dark" width="420"></div>
69
+ </div>
70
+ <div class="cap">left: paper background · right: ink background (reversed treatment)</div>
71
+
72
+ <h2>Mark &amp; tile</h2>
73
+ <div class="grid g4">
74
+ <div class="card"><img src="logo-tile.svg" alt="tile" width="112"></div>
75
+ <div class="card"><img src="logo-mark.svg" alt="mark" width="112"></div>
76
+ <div class="card dark"><img src="logo-mark-reversed.svg" alt="mark reversed" width="112"></div>
77
+ <div class="card"><img src="logo-favicon.svg" alt="favicon" width="112"></div>
78
+ </div>
79
+ <div class="cap">app tile · mark on light · mark on ink · favicon (same geometry, tuned for 32 px)</div>
80
+
81
+ <h2>Wordmark</h2>
82
+ <div class="grid g2">
83
+ <div class="card"><img src="logo-wordmark.svg" alt="wordmark" width="300"></div>
84
+ <div class="card"><img src="logo-mono-black.svg" alt="mono black" width="400"></div>
85
+ </div>
86
+ <div class="cap">single-color letterforms (constructed paths — no font dependency)</div>
87
+
88
+ <h2>Monochrome</h2>
89
+ <div class="grid g2">
90
+ <div class="card"><img src="logo-mono-black.svg" alt="mono black" width="400"></div>
91
+ <div class="card dark"><img src="logo-mono-white.svg" alt="mono white" width="400"></div>
92
+ </div>
93
+ <div class="cap">single-ink fallbacks for embossing, fax-grade contexts and print</div>
94
+
95
+ <h2>Real sizes</h2>
96
+ <div class="card" style="justify-content:flex-start">
97
+ <div class="sizes">
98
+ <figure><img src="logo-favicon.svg" width="16" height="16" alt="16"><figcaption class="cap">16</figcaption></figure>
99
+ <figure><img src="logo-favicon.svg" width="32" height="32" alt="32"><figcaption class="cap">32</figcaption></figure>
100
+ <figure><img src="logo-tile.svg" width="48" height="48" alt="48"><figcaption class="cap">48</figcaption></figure>
101
+ <figure><img src="logo-tile.svg" width="64" height="64" alt="64"><figcaption class="cap">64</figcaption></figure>
102
+ <figure><img src="logo-tile.svg" width="96" height="96" alt="96"><figcaption class="cap">96</figcaption></figure>
103
+ </div>
104
+ </div>
105
+
106
+ <h2>Palette</h2>
107
+ <div class="swatches">
108
+ <div class="sw"><div class="chip" style="background:#101418"></div>
109
+ <div class="meta"><b>Ink</b><span>#101418 · surfaces, type</span></div></div>
110
+ <div class="sw"><div class="chip" style="background:#FF4A1C"></div>
111
+ <div class="meta"><b>Vermilion</b><span>#FF4A1C · the node, accents only</span></div></div>
112
+ <div class="sw"><div class="chip" style="background:#F7F5F2;border-bottom:1px solid var(--line)"></div>
113
+ <div class="meta"><b>Paper</b><span>#F7F5F2 · background, reversed mark</span></div></div>
114
+ </div>
115
+
116
+ <h2>CLI banner</h2>
117
+ <p class="sub">Console identity: strict 22-column grid — glyphs are joined
118
+ row-by-row from fixed-width parts, so the letters can never drift out of alignment.</p>
119
+ <pre class="cli"><span class="a"> ██████ ████ ██████
120
+ ██ ██ ██ ██ ██
121
+ ██ ██ ██ ██ ██
122
+ ████████ ██ ██ ██
123
+ ██ ██ ██ ██ ██
124
+ ██ ██ ████ ██████ </span>
125
+ <span class="d"> all-in-one-repo v1.1.0 — auto-connect AI agents to your repos, tools &amp; skills
126
+ GPL-3.0 · https://github.com/MRaihan-XXL/all-in-one-repo</span></pre>
127
+
128
+ <h2>Usage rules</h2>
129
+ <div class="rules">
130
+ <div class="yes">
131
+ <ul>
132
+ <li>Keep clear space equal to the node diameter around the mark.</li>
133
+ <li>Use the accent only for the node / i-dot — never for body text.</li>
134
+ <li>Reverse to paper-on-ink on dark surfaces.</li>
135
+ <li>Scale the favicon geometry below 64 px; full mark above.</li>
136
+ </ul>
137
+ </div>
138
+ <div class="no">
139
+ <ul>
140
+ <li>No gradients, glows, or starbursts on the mark.</li>
141
+ <li>Don’t stretch, rotate, or recolor the streams.</li>
142
+ <li>Don’t outline the tile or add drop shadows.</li>
143
+ <li>Don’t place the ink mark on busy photos.</li>
144
+ </ul>
145
+ </div>
146
+ </div>
147
+
148
+ </div>
149
+ </body>
150
+ </html>
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 128" width="480" height="128" role="img" aria-label="aio lockup reversed">
2
+ <!-- reversed lockup for ink backgrounds: paper tile, ink streams, paper wordmark -->
3
+ <rect width="128" height="128" rx="28" fill="#F7F5F2"/>
4
+ <g fill="none" stroke="#101418" stroke-width="11" stroke-linecap="round" stroke-linejoin="round">
5
+ <path d="M18 32 L46 54 Q62 64 84 64"/>
6
+ <path d="M14 64 H84"/>
7
+ <path d="M18 96 L46 74 Q62 64 84 64"/>
8
+ </g>
9
+ <circle cx="103" cy="64" r="9.5" fill="#FF4A1C"/>
10
+ <g transform="translate(168,0)">
11
+ <g fill="none" stroke="#F7F5F2" stroke-width="12" stroke-linecap="round" stroke-linejoin="round">
12
+ <circle cx="44" cy="70" r="26"/>
13
+ <path d="M70 44 V100"/>
14
+ <path d="M110 44 V100"/>
15
+ <circle cx="164" cy="70" r="26"/>
16
+ </g>
17
+ <circle cx="110" cy="24" r="8" fill="#FF4A1C"/>
18
+ </g>
19
+ </svg>
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 128" width="480" height="128" role="img" aria-label="aio lockup">
2
+ <!-- tile + wordmark lockup -->
3
+ <rect width="128" height="128" rx="28" fill="#101418"/>
4
+ <g fill="none" stroke="#F7F5F2" stroke-width="11" stroke-linecap="round" stroke-linejoin="round">
5
+ <path d="M18 32 L46 54 Q62 64 84 64"/>
6
+ <path d="M14 64 H84"/>
7
+ <path d="M18 96 L46 74 Q62 64 84 64"/>
8
+ </g>
9
+ <circle cx="103" cy="64" r="9.5" fill="#FF4A1C"/>
10
+ <g transform="translate(168,0)">
11
+ <g fill="none" stroke="#101418" stroke-width="12" stroke-linecap="round" stroke-linejoin="round">
12
+ <circle cx="44" cy="70" r="26"/>
13
+ <path d="M70 44 V100"/>
14
+ <path d="M110 44 V100"/>
15
+ <circle cx="164" cy="70" r="26"/>
16
+ </g>
17
+ <circle cx="110" cy="24" r="8" fill="#FF4A1C"/>
18
+ </g>
19
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128" role="img" aria-label="aio mark reversed">
2
+ <g fill="none" stroke="#F7F5F2" stroke-width="11" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M18 32 L46 54 Q62 64 84 64"/>
4
+ <path d="M14 64 H84"/>
5
+ <path d="M18 96 L46 74 Q62 64 84 64"/>
6
+ </g>
7
+ <circle cx="103" cy="64" r="9.5" fill="#FF4A1C"/>
8
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128" role="img" aria-label="aio mark">
2
+ <g fill="none" stroke="#101418" stroke-width="11" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M18 32 L46 54 Q62 64 84 64"/>
4
+ <path d="M14 64 H84"/>
5
+ <path d="M18 96 L46 74 Q62 64 84 64"/>
6
+ </g>
7
+ <circle cx="103" cy="64" r="9.5" fill="#FF4A1C"/>
8
+ </svg>
@@ -0,0 +1,18 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 128" width="480" height="128" role="img" aria-label="aio lockup mono black">
2
+ <rect width="128" height="128" rx="28" fill="#000000"/>
3
+ <g fill="none" stroke="#FFFFFF" stroke-width="11" stroke-linecap="round" stroke-linejoin="round">
4
+ <path d="M18 32 L46 54 Q62 64 84 64"/>
5
+ <path d="M14 64 H84"/>
6
+ <path d="M18 96 L46 74 Q62 64 84 64"/>
7
+ </g>
8
+ <circle cx="103" cy="64" r="9.5" fill="#FFFFFF"/>
9
+ <g transform="translate(168,0)">
10
+ <g fill="none" stroke="#000000" stroke-width="12" stroke-linecap="round" stroke-linejoin="round">
11
+ <circle cx="44" cy="70" r="26"/>
12
+ <path d="M70 44 V100"/>
13
+ <path d="M110 44 V100"/>
14
+ <circle cx="164" cy="70" r="26"/>
15
+ </g>
16
+ <circle cx="110" cy="24" r="8" fill="#000000"/>
17
+ </g>
18
+ </svg>
@@ -0,0 +1,18 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 128" width="480" height="128" role="img" aria-label="aio lockup mono white">
2
+ <rect width="128" height="128" rx="28" fill="#FFFFFF"/>
3
+ <g fill="none" stroke="#000000" stroke-width="11" stroke-linecap="round" stroke-linejoin="round">
4
+ <path d="M18 32 L46 54 Q62 64 84 64"/>
5
+ <path d="M14 64 H84"/>
6
+ <path d="M18 96 L46 74 Q62 64 84 64"/>
7
+ </g>
8
+ <circle cx="103" cy="64" r="9.5" fill="#000000"/>
9
+ <g transform="translate(168,0)">
10
+ <g fill="none" stroke="#FFFFFF" stroke-width="12" stroke-linecap="round" stroke-linejoin="round">
11
+ <circle cx="44" cy="70" r="26"/>
12
+ <path d="M70 44 V100"/>
13
+ <path d="M110 44 V100"/>
14
+ <circle cx="164" cy="70" r="26"/>
15
+ </g>
16
+ <circle cx="110" cy="24" r="8" fill="#FFFFFF"/>
17
+ </g>
18
+ </svg>
@@ -0,0 +1,10 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128" role="img" aria-label="aio app tile">
2
+ <!-- motif: three streams converging into one node (all-in-one) -->
3
+ <rect width="128" height="128" rx="28" fill="#101418"/>
4
+ <g fill="none" stroke="#F7F5F2" stroke-width="11" stroke-linecap="round" stroke-linejoin="round">
5
+ <path d="M18 32 L46 54 Q62 64 84 64"/>
6
+ <path d="M14 64 H84"/>
7
+ <path d="M18 96 L46 74 Q62 64 84 64"/>
8
+ </g>
9
+ <circle cx="103" cy="64" r="9.5" fill="#FF4A1C"/>
10
+ </svg>
@@ -0,0 +1,10 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 210 128" width="210" height="128" role="img" aria-label="aio wordmark">
2
+ <!-- geometric single-story letterforms: constructed paths, no fonts -->
3
+ <g fill="none" stroke="#101418" stroke-width="12" stroke-linecap="round" stroke-linejoin="round">
4
+ <circle cx="44" cy="70" r="26"/> <!-- a: bowl -->
5
+ <path d="M70 44 V100"/> <!-- a: stem -->
6
+ <path d="M110 44 V100"/> <!-- i -->
7
+ <circle cx="164" cy="70" r="26"/> <!-- o -->
8
+ </g>
9
+ <circle cx="110" cy="24" r="8" fill="#FF4A1C"/> <!-- i: dot = accent -->
10
+ </svg>