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/LICENSE +674 -0
- package/PRD.md +213 -0
- package/README.md +139 -0
- package/assets/logo-favicon.svg +9 -0
- package/assets/logo-gallery.html +150 -0
- package/assets/logo-lockup-reversed.svg +19 -0
- package/assets/logo-lockup.svg +19 -0
- package/assets/logo-mark-reversed.svg +8 -0
- package/assets/logo-mark.svg +8 -0
- package/assets/logo-mono-black.svg +18 -0
- package/assets/logo-mono-white.svg +18 -0
- package/assets/logo-tile.svg +10 -0
- package/assets/logo-wordmark.svg +10 -0
- package/bin/aio.js +93 -0
- package/docs/CONFIG.md +86 -0
- package/docs/SCREENSHOTS.md +142 -0
- package/docs/flow.md +94 -0
- package/docs/flow.svg +69 -0
- package/docs/logo.svg +10 -0
- package/package.json +47 -0
- package/src/banner.js +34 -0
- package/src/paths.js +70 -0
- package/src/rollback.js +41 -0
- package/src/scan.js +177 -0
- package/src/setup.js +119 -0
- package/src/update.js +26 -0
- package/src/write.js +298 -0
- package/test/selfcheck.js +129 -0
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 & 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 & 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 & 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>
|