Initialize #1
Merged@k33g wants to merge
feature/initialize into mainMerged as
b625b0f0f26f.163 files changed
added
.claude/skills/drawio-fancy-diagram/generator/examples/sidekicks_packages.py +52 -0 | new file mode 100644 | ||
| @@ -0,0 +1,52 @@ | ||
| 1 | +"""The description of docs/diagrams/packages.{drawio,svg} (Sidekicks, ADR 0003). | |
| 2 | + | |
| 3 | + python3 .claude/skills/drawio-fancy-diagram/generator/examples/sidekicks_packages.py docs/diagrams | |
| 4 | + rsvg-convert -w 1200 -h 780 -o docs/diagrams/packages.png docs/diagrams/packages.svg | |
| 5 | +""" | |
| 6 | +import os | |
| 7 | +import sys | |
| 8 | + | |
| 9 | +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) | |
| 10 | +from flowgen import Diagram | |
| 11 | + | |
| 12 | +OUT = sys.argv[1] if len(sys.argv) > 1 else "docs/diagrams" | |
| 13 | + | |
| 14 | +d = Diagram("packages", "Sidekicks — packages and dependencies", | |
| 15 | + "arrows are imports · the frontend only talks to internal/app · nothing outside internal/acp sees the ACP SDK", height=780) | |
| 16 | + | |
| 17 | +# Row 1: the entry points. | |
| 18 | +d.box(40, 100, 250, 115, "user", "💻", "frontend/", ["Svelte 5 · panels · Markdown", "CodeMirror · xterm.js"]) | |
| 19 | +d.box(475, 100, 250, 115, "decider", "🔀", "internal/app", ["Wails services bound to the UI", "typed events to the UI"], badge="★ only API of the UI") | |
| 20 | +d.box(910, 100, 250, 115, "data", "⚙️", "cmd/sidekicks", ["main: reads flags, wires", "the services, runs Wails"]) | |
| 21 | +d.edge([(290, 157), (475, 157)], "bindings · events", at=(382, 157), lw=130, both=True) | |
| 22 | +d.edge([(910, 157), (725, 157)], "creates", at=(817, 157), lw=70) | |
| 23 | + | |
| 24 | +# Row 2: the domain packages, all used by internal/app. | |
| 25 | +d.box(40, 300, 250, 110, "agent", "💬", "internal/channels", ["channels, members, routing", "@mentions · /agent:command"]) | |
| 26 | +d.box(330, 300, 250, 110, "agent", "🤖", "internal/agents", ["agent processes: lazy start,", "idle stop, limit, logs"]) | |
| 27 | +d.box(620, 300, 250, 110, "agent", "📋", "internal/config", ["load · validate · watch", "save with comments"]) | |
| 28 | +d.box(910, 300, 250, 110, "agent", "🧰", "internal/workspace", ["files + exec: local,", "container, sbx"]) | |
| 29 | +for cx in (165, 455, 745, 1035): | |
| 30 | + d.edge([(600, 215), (600, 255), (cx, 255), (cx, 300)]) | |
| 31 | +d.edge([(290, 355), (330, 355)]) | |
| 32 | +d.edge([(580, 355), (620, 355)]) | |
| 33 | + | |
| 34 | +# Row 3: what the domain packages build on. | |
| 35 | +d.box(40, 480, 250, 105, "agent", "📥", "internal/store", ["Pebble: channels, messages,", "session ids"]) | |
| 36 | +d.box(330, 480, 250, 105, "agent", "🔧", "internal/acp", ["ACP v1 client wrapper", "SDK types stay inside"]) | |
| 37 | +d.box(620, 480, 250, 105, "agent", "🛡️", "schema", ["config JSON Schema", "ValidateConfig()"]) | |
| 38 | +d.edge([(165, 410), (165, 480)]) | |
| 39 | +d.edge([(455, 410), (455, 480)]) | |
| 40 | +d.edge([(745, 410), (745, 480)]) | |
| 41 | + | |
| 42 | +# Row 4: third-party modules and external processes. | |
| 43 | +d.chip(40, 655, 250, 50, "cockroachdb/pebble/v2") | |
| 44 | +d.chip(330, 655, 250, 50, "coder/acp-go-sdk → mm -acp") | |
| 45 | +d.chip(620, 655, 250, 50, "jsonschema/v6 · yaml/v3") | |
| 46 | +d.chip(910, 655, 250, 50, "creack/pty · docker · sbx") | |
| 47 | +d.edge([(165, 585), (165, 655)]) | |
| 48 | +d.edge([(455, 585), (455, 655)], "stdio", at=(500, 620), lw=50) | |
| 49 | +d.edge([(745, 585), (745, 655)]) | |
| 50 | +d.edge([(1035, 410), (1035, 655)]) | |
| 51 | +d.text(600, 750, "Third-party modules in grey. Wails v3 is imported by cmd/sidekicks and internal/app only.", 12.5, italic=True) | |
| 52 | +d.write(OUT) | |
| new file mode 100644 | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | +"""The description of docs/diagrams/packages.{drawio,svg} (Sidekicks, ADR 0003). | ||
| 2 | + | ||
| 3 | + python3 .claude/skills/drawio-fancy-diagram/generator/examples/sidekicks_packages.py docs/diagrams | ||
| 4 | + rsvg-convert -w 1200 -h 780 -o docs/diagrams/packages.png docs/diagrams/packages.svg | ||
| 5 | +""" | ||
| 6 | +import os | ||
| 7 | +import sys | ||
| 8 | + | ||
| 9 | +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) | ||
| 10 | +from flowgen import Diagram | ||
| 11 | + | ||
| 12 | +OUT = sys.argv[1] if len(sys.argv) > 1 else "docs/diagrams" | ||
| 13 | + | ||
| 14 | +d = Diagram("packages", "Sidekicks — packages and dependencies", | ||
| 15 | + "arrows are imports · the frontend only talks to internal/app · nothing outside internal/acp sees the ACP SDK", height=780) | ||
| 16 | + | ||
| 17 | +# Row 1: the entry points. | ||
| 18 | +d.box(40, 100, 250, 115, "user", "💻", "frontend/", ["Svelte 5 · panels · Markdown", "CodeMirror · xterm.js"]) | ||
| 19 | +d.box(475, 100, 250, 115, "decider", "🔀", "internal/app", ["Wails services bound to the UI", "typed events to the UI"], badge="★ only API of the UI") | ||
| 20 | +d.box(910, 100, 250, 115, "data", "⚙️", "cmd/sidekicks", ["main: reads flags, wires", "the services, runs Wails"]) | ||
| 21 | +d.edge([(290, 157), (475, 157)], "bindings · events", at=(382, 157), lw=130, both=True) | ||
| 22 | +d.edge([(910, 157), (725, 157)], "creates", at=(817, 157), lw=70) | ||
| 23 | + | ||
| 24 | +# Row 2: the domain packages, all used by internal/app. | ||
| 25 | +d.box(40, 300, 250, 110, "agent", "💬", "internal/channels", ["channels, members, routing", "@mentions · /agent:command"]) | ||
| 26 | +d.box(330, 300, 250, 110, "agent", "🤖", "internal/agents", ["agent processes: lazy start,", "idle stop, limit, logs"]) | ||
| 27 | +d.box(620, 300, 250, 110, "agent", "📋", "internal/config", ["load · validate · watch", "save with comments"]) | ||
| 28 | +d.box(910, 300, 250, 110, "agent", "🧰", "internal/workspace", ["files + exec: local,", "container, sbx"]) | ||
| 29 | +for cx in (165, 455, 745, 1035): | ||
| 30 | + d.edge([(600, 215), (600, 255), (cx, 255), (cx, 300)]) | ||
| 31 | +d.edge([(290, 355), (330, 355)]) | ||
| 32 | +d.edge([(580, 355), (620, 355)]) | ||
| 33 | + | ||
| 34 | +# Row 3: what the domain packages build on. | ||
| 35 | +d.box(40, 480, 250, 105, "agent", "📥", "internal/store", ["Pebble: channels, messages,", "session ids"]) | ||
| 36 | +d.box(330, 480, 250, 105, "agent", "🔧", "internal/acp", ["ACP v1 client wrapper", "SDK types stay inside"]) | ||
| 37 | +d.box(620, 480, 250, 105, "agent", "🛡️", "schema", ["config JSON Schema", "ValidateConfig()"]) | ||
| 38 | +d.edge([(165, 410), (165, 480)]) | ||
| 39 | +d.edge([(455, 410), (455, 480)]) | ||
| 40 | +d.edge([(745, 410), (745, 480)]) | ||
| 41 | + | ||
| 42 | +# Row 4: third-party modules and external processes. | ||
| 43 | +d.chip(40, 655, 250, 50, "cockroachdb/pebble/v2") | ||
| 44 | +d.chip(330, 655, 250, 50, "coder/acp-go-sdk → mm -acp") | ||
| 45 | +d.chip(620, 655, 250, 50, "jsonschema/v6 · yaml/v3") | ||
| 46 | +d.chip(910, 655, 250, 50, "creack/pty · docker · sbx") | ||
| 47 | +d.edge([(165, 585), (165, 655)]) | ||
| 48 | +d.edge([(455, 585), (455, 655)], "stdio", at=(500, 620), lw=50) | ||
| 49 | +d.edge([(745, 585), (745, 655)]) | ||
| 50 | +d.edge([(1035, 410), (1035, 655)]) | ||
| 51 | +d.text(600, 750, "Third-party modules in grey. Wails v3 is imported by cmd/sidekicks and internal/app only.", 12.5, italic=True) | ||
| 52 | +d.write(OUT) | ||
added
.gitignore +4 -0 | new file mode 100644 | ||
| @@ -0,0 +1,4 @@ | ||
| 1 | +# Slots of the test agents started by scripts/agents.sh | |
| 2 | +.run/ | |
| 3 | +# macOS | |
| 4 | +.DS_Store | |
| new file mode 100644 | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | +# Slots of the test agents started by scripts/agents.sh | ||
| 2 | +.run/ | ||
| 3 | +# macOS | ||
| 4 | +.DS_Store | ||
added
.memory/README.md +11 -0 | new file mode 100644 | ||
| @@ -0,0 +1,11 @@ | ||
| 1 | +# .memory — the project record | |
| 2 | + | |
| 3 | +For whoever continues building Sidekicks (a person or an agent, possibly in a fresh sandbox). Users read `docs/`; builders read this first. | |
| 4 | + | |
| 5 | +| File | What it is | How it changes | | |
| 6 | +| --- | --- | --- | | |
| 7 | +| `summary.md` | Snapshot of the project now: what it is, decisions in force, real commands, unknowns. | Edited in place; only what a session verified; unknowns under "Not yet established". | | |
| 8 | +| `history.md` | One dated entry per session. | Append only; past entries are never rewritten. | | |
| 9 | +| `handoffs/YYYY-MM-DD-<slug>.md` | Where a session stopped: state, work in flight, next steps, blockers, traps. | One per session/topic; never overwrite another session's handoff. | | |
| 10 | + | |
| 11 | +The backlog itself lives in `.tickets/` (IssueSpec); decisions in `docs/adr/`. | |
| new file mode 100644 | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | +# .memory — the project record | ||
| 2 | + | ||
| 3 | +For whoever continues building Sidekicks (a person or an agent, possibly in a fresh sandbox). Users read `docs/`; builders read this first. | ||
| 4 | + | ||
| 5 | +| File | What it is | How it changes | | ||
| 6 | +| --- | --- | --- | | ||
| 7 | +| `summary.md` | Snapshot of the project now: what it is, decisions in force, real commands, unknowns. | Edited in place; only what a session verified; unknowns under "Not yet established". | | ||
| 8 | +| `history.md` | One dated entry per session. | Append only; past entries are never rewritten. | | ||
| 9 | +| `handoffs/YYYY-MM-DD-<slug>.md` | Where a session stopped: state, work in flight, next steps, blockers, traps. | One per session/topic; never overwrite another session's handoff. | | ||
| 10 | + | ||
| 11 | +The backlog itself lives in `.tickets/` (IssueSpec); decisions in `docs/adr/`. | ||
added
.memory/handoffs/2026-10-29-milestone-initialize.md +36 -0 | new file mode 100644 | ||
| @@ -0,0 +1,36 @@ | ||
| 1 | +# Handoff — 2026-10-29 — milestone Initialize | |
| 2 | + | |
| 3 | +## State | |
| 4 | + | |
| 5 | +Initialize is implemented on branch `feature/initialize` (not committed by the agent). Decisions are in `docs/adr/0001..0003`; the config format, its schema and tests, the test-agent tooling, wireframes and bilingual docs exist. `make test` passes. | |
| 6 | + | |
| 7 | +## In flight | |
| 8 | + | |
| 9 | +- Nothing. #3 was verified on macOS by the owner and closed; milestone "Initialize" is closed. The owner commits, opens a merge request for `feature/initialize` and merges it. | |
| 10 | + | |
| 11 | +## Next steps | |
| 12 | + | |
| 13 | +1. Owner: merge `feature/initialize`, then create the M1 branch. | |
| 14 | +2. Owner: decide whether to run the qlty gate (needs a sandbox with the dev-toolkit kit) before M1. | |
| 15 | +3. Start M1 with #8 (project from `wails3 init -t svelte`, merged into the existing root `go.mod`; keep the Makefile as entry point; licence headers), then #9 (loader on top of `schema`), #10 (`internal/acp` wrapping coder/acp-go-sdk; `realagents` build tag), #11, #12, #13. | |
| 16 | + | |
| 17 | +## Open questions / blockers | |
| 18 | + | |
| 19 | +- qlty missing in this sandbox (skill says: report and stop, do not install by hand) → no quality report yet. | |
| 20 | +- `sbx`: how to exec and read files inside a sandbox is unknown (#28). | |
| 21 | +- Should `.claude/skills/` be committed? (they are kit files; the package-diagram description was added under `.claude/skills/drawio-fancy-diagram/generator/examples/`). | |
| 22 | + | |
| 23 | +## Watch out for | |
| 24 | + | |
| 25 | +- `pkill -f <pattern>` kills the Bash tool's own shell when the pattern appears in the command line: list pids with `ps -eo pid,args | awk …` and exclude awk instead. | |
| 26 | +- Shell tests: background jobs started inside a test subshell must be waited for **in that subshell** (`trap stop_all_agents EXIT`), otherwise `make test | tail` hangs on the inherited pipe. `set -e` is ignored inside an `if` condition — the harness runs tests outside `if` on purpose. | |
| 27 | +- The model is unloaded after the slot is freed: wait for the `agents.sh run` process (not the slot file) before asserting on unloads. | |
| 28 | +- `git mv -k` on an untracked file silently does nothing (exit 0). | |
| 29 | +- `wails3 init -d X` creates `X/<name>/`: move the content up. | |
| 30 | +- Wails v3 bindings: `wails3 generate bindings -ts` (the build task uses `-ts -i`). | |
| 31 | +- Running the Wails app headless: Xvfb + `GDK_BACKEND=x11 WEBKIT_DISABLE_DMABUF_RENDERER=1 dbus-launch`; drive with `xdotool`, capture with `import -window root`. | |
| 32 | +- rsvg collapses spaces in SVG text: the wireframe generator sets `xml:space="preserve"`. | |
| 33 | +- `make` prints "Clock skew detected" on the shared folder; harmless. | |
| 34 | +- The repository folder is shared with the owner's Mac: after `npm install` on macOS, `spikes/wails-ui/frontend/node_modules` holds darwin-only native bindings (rolldown, lightningcss) and the frontend build fails in the Linux sandbox ("Cannot find native binding"). Do not reinstall there (it would break the Mac); build a copy in the scratchpad (`tar --exclude=frontend/node_modules …`, `npm ci`). | |
| 35 | +- macOS hidden-inset title bar: the left dock is padded by `--titlebar-inset` (38px under `:root.macos`, set from `System.IsMac()`), which must match `InvisibleTitleBarHeight` in `spikes/wails-ui/main.go`. The real Sidekicks shell (#12) must keep this. | |
| 36 | +- The ACP traces of Riker (`riker-reject.jsonl`, ~470 kB) are large on purpose: they document the retry loop. | |
| new file mode 100644 | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | +# Handoff — 2026-10-29 — milestone Initialize | ||
| 2 | + | ||
| 3 | +## State | ||
| 4 | + | ||
| 5 | +Initialize is implemented on branch `feature/initialize` (not committed by the agent). Decisions are in `docs/adr/0001..0003`; the config format, its schema and tests, the test-agent tooling, wireframes and bilingual docs exist. `make test` passes. | ||
| 6 | + | ||
| 7 | +## In flight | ||
| 8 | + | ||
| 9 | +- Nothing. #3 was verified on macOS by the owner and closed; milestone "Initialize" is closed. The owner commits, opens a merge request for `feature/initialize` and merges it. | ||
| 10 | + | ||
| 11 | +## Next steps | ||
| 12 | + | ||
| 13 | +1. Owner: merge `feature/initialize`, then create the M1 branch. | ||
| 14 | +2. Owner: decide whether to run the qlty gate (needs a sandbox with the dev-toolkit kit) before M1. | ||
| 15 | +3. Start M1 with #8 (project from `wails3 init -t svelte`, merged into the existing root `go.mod`; keep the Makefile as entry point; licence headers), then #9 (loader on top of `schema`), #10 (`internal/acp` wrapping coder/acp-go-sdk; `realagents` build tag), #11, #12, #13. | ||
| 16 | + | ||
| 17 | +## Open questions / blockers | ||
| 18 | + | ||
| 19 | +- qlty missing in this sandbox (skill says: report and stop, do not install by hand) → no quality report yet. | ||
| 20 | +- `sbx`: how to exec and read files inside a sandbox is unknown (#28). | ||
| 21 | +- Should `.claude/skills/` be committed? (they are kit files; the package-diagram description was added under `.claude/skills/drawio-fancy-diagram/generator/examples/`). | ||
| 22 | + | ||
| 23 | +## Watch out for | ||
| 24 | + | ||
| 25 | +- `pkill -f <pattern>` kills the Bash tool's own shell when the pattern appears in the command line: list pids with `ps -eo pid,args | awk …` and exclude awk instead. | ||
| 26 | +- Shell tests: background jobs started inside a test subshell must be waited for **in that subshell** (`trap stop_all_agents EXIT`), otherwise `make test | tail` hangs on the inherited pipe. `set -e` is ignored inside an `if` condition — the harness runs tests outside `if` on purpose. | ||
| 27 | +- The model is unloaded after the slot is freed: wait for the `agents.sh run` process (not the slot file) before asserting on unloads. | ||
| 28 | +- `git mv -k` on an untracked file silently does nothing (exit 0). | ||
| 29 | +- `wails3 init -d X` creates `X/<name>/`: move the content up. | ||
| 30 | +- Wails v3 bindings: `wails3 generate bindings -ts` (the build task uses `-ts -i`). | ||
| 31 | +- Running the Wails app headless: Xvfb + `GDK_BACKEND=x11 WEBKIT_DISABLE_DMABUF_RENDERER=1 dbus-launch`; drive with `xdotool`, capture with `import -window root`. | ||
| 32 | +- rsvg collapses spaces in SVG text: the wireframe generator sets `xml:space="preserve"`. | ||
| 33 | +- `make` prints "Clock skew detected" on the shared folder; harmless. | ||
| 34 | +- The repository folder is shared with the owner's Mac: after `npm install` on macOS, `spikes/wails-ui/frontend/node_modules` holds darwin-only native bindings (rolldown, lightningcss) and the frontend build fails in the Linux sandbox ("Cannot find native binding"). Do not reinstall there (it would break the Mac); build a copy in the scratchpad (`tar --exclude=frontend/node_modules …`, `npm ci`). | ||
| 35 | +- macOS hidden-inset title bar: the left dock is padded by `--titlebar-inset` (38px under `:root.macos`, set from `System.IsMac()`), which must match `InvisibleTitleBarHeight` in `spikes/wails-ui/main.go`. The real Sidekicks shell (#12) must keep this. | ||
| 36 | +- The ACP traces of Riker (`riker-reject.jsonl`, ~470 kB) are large on purpose: they document the retry loop. | ||
added
.memory/history.md +36 -0 | new file mode 100644 | ||
| @@ -0,0 +1,36 @@ | ||
| 1 | +# History | |
| 2 | + | |
| 3 | +## 2026-10-29 — Backlog, licence, and milestone Initialize | |
| 4 | + | |
| 5 | +- **Goal**: turn the draft (#1) into a backlog; propose a protective licence; implement milestone Initialize (issues #2–#7), "all the way". | |
| 6 | +- **Changes**: | |
| 7 | + - `.tickets/`: 36 issues (#2–#37), 8 epics, 5 milestones, 13 labels; comment on #1 explaining the plan. After Initialize: #2, #4, #5, #6, #7 closed with result comments; #3 kept open (macOS check); notes added to #8, #9, #10, #17, #24, #25. | |
| 8 | + - `LICENSE` (custom source-available), licence-header convention recorded in #8. | |
| 9 | + - #7: `scripts/agents.sh`, `scripts/agents_test.sh`, `Makefile`, `.gitignore`. | |
| 10 | + - #2: `spikes/acp-trace`, `docs/spikes/acp/traces/*.jsonl`, `docs/adr/0001-acp.md`. | |
| 11 | + - #3: `spikes/wails-ui` (Wails v3 + Svelte), `docs/spikes/ui/*.png`, `docs/adr/0002-ui-stack.md`. | |
| 12 | + - #4: root `go.mod`, `schema/` (JSON Schema + `ValidateConfig` + tests), `examples/test-agents.yaml`, configuration reference. | |
| 13 | + - #5: `docs/adr/0003-architecture.md`, `docs/diagrams/packages.{drawio,svg,png}` (+ generator description in `.claude/skills/drawio-fancy-diagram/generator/examples/sidekicks_packages.py`). | |
| 14 | + - #6: `docs/design/` (generator `wireframes.py`, `wireframes.drawio` with 6 pages, SVG/PNG). | |
| 15 | +- **Decisions**: ACP v1 + coder/acp-go-sdk (rejected: hand-written JSON-RPC, other young Go SDKs, waiting for v2); Wails v3.0.0 (rejected v2: would need migration soon); Svelte 5 (React/Vue not needed); CodeMirror over Monaco; Shiki over highlight.js; Pebble v2; channels only in Pebble; `agents.sh run` with stdio pass-through instead of start/stop (so it is usable as an ACP agent command); config `runtime` via if/then instead of oneOf (readable errors); config spec moved to `docs/en/reference/configuration.md` (no duplicate spec). | |
| 16 | +- **Tests**: `make test` — Go schema tests (4 valid + 12 invalid documents, example) and 14 shell tests; all pass, stable over 8 runs. Real-agent captures with Alice, Riker (allow/reject), Garfield (cancel, command), one agent at a time, models unloaded. | |
| 17 | +- **Quality**: qlty unavailable in this sandbox → gate **not measured**. Substitutes run: gofmt, go vet (3 modules), bash -n, svelte-check (0/0), make test. | |
| 18 | +- **Docs**: `docs/README.md` selector; `docs/en` and `docs/fr`: tutorial (first ACP exchange), how-to (run tests, run a test agent), reference (configuration + schema package, agents.sh), explanation (why ACP, UI stack, architecture, memory and local models). | |
| 19 | + | |
| 20 | +## 2026-10-29 — macOS test guide for milestone Initialize | |
| 21 | + | |
| 22 | +- **Goal**: a guide to test what Initialize produced when the owner is on a Mac. | |
| 23 | +- **Changes**: `docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md`, `docs/en/how-to/test-milestone-initialize-on-macos.md`, both indexes; comment on #3. Fixed `spikes/wails-ui/README.md`: the `.app` comes from `wails3 package`, not `wails3 build`. | |
| 24 | +- **Tests**: guide commands cross-checked against the sandbox runs and the Wails v3 CLI (`wails3 package` exists, darwin Taskfile creates `bin/wails-ui.app`); not run on a Mac. | |
| 25 | +- **Docs**: how-to in EN and FR. | |
| 26 | + | |
| 27 | +## 2026-10-29 — macOS check feedback: traffic lights over "CHANNELS" | |
| 28 | + | |
| 29 | +- **Goal**: the owner ran the macOS guide; everything works except the traffic lights overlapping the "CHANNELS" heading. | |
| 30 | +- **Changes**: `spikes/wails-ui`: `--titlebar-inset` CSS variable (0, 38px under `:root.macos`), `macos` class set from `System.IsMac()` in `main.ts`, left dock padded by it; comment linking it to `InvisibleTitleBarHeight` in `main.go`. Guide point 7 updated (EN/FR). | |
| 31 | +- **Tests**: shared `node_modules` now holds the Mac's darwin bindings, so the build was verified on a scratchpad copy (`npm ci`, `npm run build`, `svelte-check` 0/0, `go vet`), and the layout checked under Xvfb with the class forced on. Not re-checked on the Mac yet. | |
| 32 | + | |
| 33 | +## 2026-10-29 — Milestone Initialize closed | |
| 34 | + | |
| 35 | +- **Goal**: after the owner's successful macOS check, close #3 and the milestone. | |
| 36 | +- **Changes**: #3 last task closed + result comment, issue closed; milestone `Initialize` → closed; ADR 0002 status "verified on macOS"; prototype README updated; `.memory/` summary and handoff updated. No commit by the agent (the owner commits and merges). | |
| new file mode 100644 | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | +# History | ||
| 2 | + | ||
| 3 | +## 2026-10-29 — Backlog, licence, and milestone Initialize | ||
| 4 | + | ||
| 5 | +- **Goal**: turn the draft (#1) into a backlog; propose a protective licence; implement milestone Initialize (issues #2–#7), "all the way". | ||
| 6 | +- **Changes**: | ||
| 7 | + - `.tickets/`: 36 issues (#2–#37), 8 epics, 5 milestones, 13 labels; comment on #1 explaining the plan. After Initialize: #2, #4, #5, #6, #7 closed with result comments; #3 kept open (macOS check); notes added to #8, #9, #10, #17, #24, #25. | ||
| 8 | + - `LICENSE` (custom source-available), licence-header convention recorded in #8. | ||
| 9 | + - #7: `scripts/agents.sh`, `scripts/agents_test.sh`, `Makefile`, `.gitignore`. | ||
| 10 | + - #2: `spikes/acp-trace`, `docs/spikes/acp/traces/*.jsonl`, `docs/adr/0001-acp.md`. | ||
| 11 | + - #3: `spikes/wails-ui` (Wails v3 + Svelte), `docs/spikes/ui/*.png`, `docs/adr/0002-ui-stack.md`. | ||
| 12 | + - #4: root `go.mod`, `schema/` (JSON Schema + `ValidateConfig` + tests), `examples/test-agents.yaml`, configuration reference. | ||
| 13 | + - #5: `docs/adr/0003-architecture.md`, `docs/diagrams/packages.{drawio,svg,png}` (+ generator description in `.claude/skills/drawio-fancy-diagram/generator/examples/sidekicks_packages.py`). | ||
| 14 | + - #6: `docs/design/` (generator `wireframes.py`, `wireframes.drawio` with 6 pages, SVG/PNG). | ||
| 15 | +- **Decisions**: ACP v1 + coder/acp-go-sdk (rejected: hand-written JSON-RPC, other young Go SDKs, waiting for v2); Wails v3.0.0 (rejected v2: would need migration soon); Svelte 5 (React/Vue not needed); CodeMirror over Monaco; Shiki over highlight.js; Pebble v2; channels only in Pebble; `agents.sh run` with stdio pass-through instead of start/stop (so it is usable as an ACP agent command); config `runtime` via if/then instead of oneOf (readable errors); config spec moved to `docs/en/reference/configuration.md` (no duplicate spec). | ||
| 16 | +- **Tests**: `make test` — Go schema tests (4 valid + 12 invalid documents, example) and 14 shell tests; all pass, stable over 8 runs. Real-agent captures with Alice, Riker (allow/reject), Garfield (cancel, command), one agent at a time, models unloaded. | ||
| 17 | +- **Quality**: qlty unavailable in this sandbox → gate **not measured**. Substitutes run: gofmt, go vet (3 modules), bash -n, svelte-check (0/0), make test. | ||
| 18 | +- **Docs**: `docs/README.md` selector; `docs/en` and `docs/fr`: tutorial (first ACP exchange), how-to (run tests, run a test agent), reference (configuration + schema package, agents.sh), explanation (why ACP, UI stack, architecture, memory and local models). | ||
| 19 | + | ||
| 20 | +## 2026-10-29 — macOS test guide for milestone Initialize | ||
| 21 | + | ||
| 22 | +- **Goal**: a guide to test what Initialize produced when the owner is on a Mac. | ||
| 23 | +- **Changes**: `docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md`, `docs/en/how-to/test-milestone-initialize-on-macos.md`, both indexes; comment on #3. Fixed `spikes/wails-ui/README.md`: the `.app` comes from `wails3 package`, not `wails3 build`. | ||
| 24 | +- **Tests**: guide commands cross-checked against the sandbox runs and the Wails v3 CLI (`wails3 package` exists, darwin Taskfile creates `bin/wails-ui.app`); not run on a Mac. | ||
| 25 | +- **Docs**: how-to in EN and FR. | ||
| 26 | + | ||
| 27 | +## 2026-10-29 — macOS check feedback: traffic lights over "CHANNELS" | ||
| 28 | + | ||
| 29 | +- **Goal**: the owner ran the macOS guide; everything works except the traffic lights overlapping the "CHANNELS" heading. | ||
| 30 | +- **Changes**: `spikes/wails-ui`: `--titlebar-inset` CSS variable (0, 38px under `:root.macos`), `macos` class set from `System.IsMac()` in `main.ts`, left dock padded by it; comment linking it to `InvisibleTitleBarHeight` in `main.go`. Guide point 7 updated (EN/FR). | ||
| 31 | +- **Tests**: shared `node_modules` now holds the Mac's darwin bindings, so the build was verified on a scratchpad copy (`npm ci`, `npm run build`, `svelte-check` 0/0, `go vet`), and the layout checked under Xvfb with the class forced on. Not re-checked on the Mac yet. | ||
| 32 | + | ||
| 33 | +## 2026-10-29 — Milestone Initialize closed | ||
| 34 | + | ||
| 35 | +- **Goal**: after the owner's successful macOS check, close #3 and the milestone. | ||
| 36 | +- **Changes**: #3 last task closed + result comment, issue closed; milestone `Initialize` → closed; ADR 0002 status "verified on macOS"; prototype README updated; `.memory/` summary and handoff updated. No commit by the agent (the owner commits and merges). | ||
added
.memory/summary.md +49 -0 | new file mode 100644 | ||
| @@ -0,0 +1,49 @@ | ||
| 1 | +# Sidekicks — summary | |
| 2 | + | |
| 3 | +## What it is | |
| 4 | + | |
| 5 | +A desktop application (Go + Wails) to talk with AI agents in channels, for non-technical ("citizen") users. Agent-agnostic: every agent is reached over the Agent Client Protocol (ACP, JSON-RPC on stdio). Full brief: `.tickets/issues/0001-draft.yaml`; backlog of 36 issues, 9 epics, 6 milestones in `.tickets/` (IssueSpec format, see `.claude/skills/issuespec`). | |
| 6 | + | |
| 7 | +## State (2026-10-29) | |
| 8 | + | |
| 9 | +Milestone **Initialize** is closed (issues #2–#7 closed; the UI prototype was verified on macOS by the owner). There is **no application code yet**; M1 (issues #8–#13) starts it. | |
| 10 | + | |
| 11 | +What exists: | |
| 12 | + | |
| 13 | +- `scripts/agents.sh` — the only way to start test agents: `run <agent>` (stdio pass-through, max 2 simultaneous, unloads the model at exit), `ps`, `unload`, `model`, `list`. | |
| 14 | +- `schema/` — Go package (`git.rickub.com/bots-garden/sidekicks/schema`): configuration JSON Schema + `ValidateConfig`. | |
| 15 | +- `examples/test-agents.yaml` — a valid configuration with the 4 test agents (through `scripts/agents.sh`). | |
| 16 | +- `spikes/acp-trace` (ACP trace client), `spikes/wails-ui` (Wails v3 + Svelte prototype) — throwaway, separate Go modules. | |
| 17 | +- `docs/adr/0001..0003`, `docs/design/` (6 wireframes, draw.io), `docs/diagrams/packages.drawio`, `docs/en|fr/` (Diátaxis). | |
| 18 | + | |
| 19 | +## Decisions in force | |
| 20 | + | |
| 21 | +- ACP **v1**, via `github.com/coder/acp-go-sdk` v0.13.5, wrapped in `internal/acp` (ADR 0001). One ACP session per (channel, agent). | |
| 22 | +- **Wails v3.0.0**, Svelte 5 + TS, paneforge, markdown-it + Shiki (JS engine) + DOMPurify, CodeMirror 6, xterm.js + creack/pty (ADR 0002). Markdown rendered at most once per animation frame. macOS hidden-inset title bar: content near the top-left is padded by `--titlebar-inset` (38px under `:root.macos`, = `InvisibleTitleBarHeight`). | |
| 23 | +- Packages and data model: ADR 0003. YAML = what exists; Pebble v2 = what happens, one DB per config file; channels live only in Pebble (YAML-declared ones are created once). Messages written at end of turn. | |
| 24 | +- Config format v1: `docs/en/reference/configuration.md`; unknown keys are errors; cross-entry rules belong to the loader (#9). | |
| 25 | +- Licence: custom source-available (`LICENSE`). Every hand-written source file starts with the one-line header `Copyright (c) 2026 Philippe Charrière — Sidekicks Source-Available License 1.0, see LICENSE` (comment syntax of the language); not on generated files nor on the owner's root scripts (`git.sh`, `new.*.sh`, `tag-step.sh`). | |
| 26 | +- ADRs and specs in English; docs bilingual EN + FR; tickets in French. | |
| 27 | + | |
| 28 | +## Commands | |
| 29 | + | |
| 30 | +| | | | |
| 31 | +| --- | --- | | |
| 32 | +| All tests | `make test` (Go `go test ./...` + `scripts/agents_test.sh`; no network, no real agent) | | |
| 33 | +| Test agents | `scripts/agents.sh run alice` · `ps` · `unload --all` (needs `mm` on PATH or `MM_BIN`, llmman on 127.0.0.1:17434 or host.docker.internal:17434) | | |
| 34 | +| ACP trace | `cd spikes/acp-trace && go run . -agent alice -prompt "…" -out /tmp/t.jsonl` | | |
| 35 | +| UI prototype | `cd spikes/wails-ui && wails3 dev` (macOS) ; Linux build needs `pkg-config libgtk-4-dev libwebkitgtk-6.0-dev` | | |
| 36 | +| Wireframes | `python3 docs/design/wireframes.py` then `rsvg-convert` each SVG | | |
| 37 | +| Package diagram | `python3 .claude/skills/drawio-fancy-diagram/generator/examples/sidekicks_packages.py docs/diagrams` then `rsvg-convert -w 1200 -h 780` | | |
| 38 | + | |
| 39 | +## Facts about the test agents (mm v1.0.3) | |
| 40 | + | |
| 41 | +- Alice (gemma E2B), Bob and Riker (same Qwen3.5 2B), Garfield (gemma E4B, skills). Never more than 2 at once (MacBook Air 32 GB). | |
| 42 | +- mm: protocolVersion 1, no `loadSession`, commands = `compact`/`new`/`unload` + skills, sent right after `session/new`; `/skill args` as prompt text runs a skill; ignores `mcpServers`; reads AGENTS.md/skills from the session cwd. | |
| 43 | +- Riker loops ~40 times after `reject_once`, then the turn ends with JSON-RPC error -32603. | |
| 44 | + | |
| 45 | +## Not yet established | |
| 46 | + | |
| 47 | +- How to exec a shell / read files inside an `sbx` sandbox (issue #28). | |
| 48 | +- Quality gate: `qlty` was not installed in the 2026-10-29 sandbox, so no qlty measurement exists yet (`.quality/` absent). | |
| 49 | +- Whether `.claude/skills/*` (kit files) should be committed with the project is the owner's call. | |
| new file mode 100644 | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | +# Sidekicks — summary | ||
| 2 | + | ||
| 3 | +## What it is | ||
| 4 | + | ||
| 5 | +A desktop application (Go + Wails) to talk with AI agents in channels, for non-technical ("citizen") users. Agent-agnostic: every agent is reached over the Agent Client Protocol (ACP, JSON-RPC on stdio). Full brief: `.tickets/issues/0001-draft.yaml`; backlog of 36 issues, 9 epics, 6 milestones in `.tickets/` (IssueSpec format, see `.claude/skills/issuespec`). | ||
| 6 | + | ||
| 7 | +## State (2026-10-29) | ||
| 8 | + | ||
| 9 | +Milestone **Initialize** is closed (issues #2–#7 closed; the UI prototype was verified on macOS by the owner). There is **no application code yet**; M1 (issues #8–#13) starts it. | ||
| 10 | + | ||
| 11 | +What exists: | ||
| 12 | + | ||
| 13 | +- `scripts/agents.sh` — the only way to start test agents: `run <agent>` (stdio pass-through, max 2 simultaneous, unloads the model at exit), `ps`, `unload`, `model`, `list`. | ||
| 14 | +- `schema/` — Go package (`git.rickub.com/bots-garden/sidekicks/schema`): configuration JSON Schema + `ValidateConfig`. | ||
| 15 | +- `examples/test-agents.yaml` — a valid configuration with the 4 test agents (through `scripts/agents.sh`). | ||
| 16 | +- `spikes/acp-trace` (ACP trace client), `spikes/wails-ui` (Wails v3 + Svelte prototype) — throwaway, separate Go modules. | ||
| 17 | +- `docs/adr/0001..0003`, `docs/design/` (6 wireframes, draw.io), `docs/diagrams/packages.drawio`, `docs/en|fr/` (Diátaxis). | ||
| 18 | + | ||
| 19 | +## Decisions in force | ||
| 20 | + | ||
| 21 | +- ACP **v1**, via `github.com/coder/acp-go-sdk` v0.13.5, wrapped in `internal/acp` (ADR 0001). One ACP session per (channel, agent). | ||
| 22 | +- **Wails v3.0.0**, Svelte 5 + TS, paneforge, markdown-it + Shiki (JS engine) + DOMPurify, CodeMirror 6, xterm.js + creack/pty (ADR 0002). Markdown rendered at most once per animation frame. macOS hidden-inset title bar: content near the top-left is padded by `--titlebar-inset` (38px under `:root.macos`, = `InvisibleTitleBarHeight`). | ||
| 23 | +- Packages and data model: ADR 0003. YAML = what exists; Pebble v2 = what happens, one DB per config file; channels live only in Pebble (YAML-declared ones are created once). Messages written at end of turn. | ||
| 24 | +- Config format v1: `docs/en/reference/configuration.md`; unknown keys are errors; cross-entry rules belong to the loader (#9). | ||
| 25 | +- Licence: custom source-available (`LICENSE`). Every hand-written source file starts with the one-line header `Copyright (c) 2026 Philippe Charrière — Sidekicks Source-Available License 1.0, see LICENSE` (comment syntax of the language); not on generated files nor on the owner's root scripts (`git.sh`, `new.*.sh`, `tag-step.sh`). | ||
| 26 | +- ADRs and specs in English; docs bilingual EN + FR; tickets in French. | ||
| 27 | + | ||
| 28 | +## Commands | ||
| 29 | + | ||
| 30 | +| | | | ||
| 31 | +| --- | --- | | ||
| 32 | +| All tests | `make test` (Go `go test ./...` + `scripts/agents_test.sh`; no network, no real agent) | | ||
| 33 | +| Test agents | `scripts/agents.sh run alice` · `ps` · `unload --all` (needs `mm` on PATH or `MM_BIN`, llmman on 127.0.0.1:17434 or host.docker.internal:17434) | | ||
| 34 | +| ACP trace | `cd spikes/acp-trace && go run . -agent alice -prompt "…" -out /tmp/t.jsonl` | | ||
| 35 | +| UI prototype | `cd spikes/wails-ui && wails3 dev` (macOS) ; Linux build needs `pkg-config libgtk-4-dev libwebkitgtk-6.0-dev` | | ||
| 36 | +| Wireframes | `python3 docs/design/wireframes.py` then `rsvg-convert` each SVG | | ||
| 37 | +| Package diagram | `python3 .claude/skills/drawio-fancy-diagram/generator/examples/sidekicks_packages.py docs/diagrams` then `rsvg-convert -w 1200 -h 780` | | ||
| 38 | + | ||
| 39 | +## Facts about the test agents (mm v1.0.3) | ||
| 40 | + | ||
| 41 | +- Alice (gemma E2B), Bob and Riker (same Qwen3.5 2B), Garfield (gemma E4B, skills). Never more than 2 at once (MacBook Air 32 GB). | ||
| 42 | +- mm: protocolVersion 1, no `loadSession`, commands = `compact`/`new`/`unload` + skills, sent right after `session/new`; `/skill args` as prompt text runs a skill; ignores `mcpServers`; reads AGENTS.md/skills from the session cwd. | ||
| 43 | +- Riker loops ~40 times after `reject_once`, then the turn ends with JSON-RPC error -32603. | ||
| 44 | + | ||
| 45 | +## Not yet established | ||
| 46 | + | ||
| 47 | +- How to exec a shell / read files inside an `sbx` sandbox (issue #28). | ||
| 48 | +- Quality gate: `qlty` was not installed in the 2026-10-29 sandbox, so no qlty measurement exists yet (`.quality/` absent). | ||
| 49 | +- Whether `.claude/skills/*` (kit files) should be committed with the project is the owner's call. | ||
modified
.tickets/issues/0002-spike-maitriser-le-protocole-acp-et-le-valider-a.yaml +49 -12 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 2 |
| 3 | 3 | title: "Spike : maîtriser le protocole ACP et le valider avec mm" |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-29T07:20:00.000Z |
| 9 | -updatedAt: 2026-10-29T07:20:00.000Z | |
| 9 | +updatedAt: 2026-10-29T08:51:00.000Z | |
| 10 | 10 | labels: |
| 11 | 11 | - "kind::spike" |
| 12 | 12 | - "area::acp" |
| @@ -39,74 +39,111 @@ body: | | ||
| 39 | 39 | tasks: |
| 40 | 40 | - id: 1 |
| 41 | 41 | title: "Lire la spec ACP : initialize, session/new, session/prompt, session/update, session/cancel" |
| 42 | - state: open | |
| 42 | + state: closed | |
| 43 | 43 | priority: high |
| 44 | 44 | author: |
| 45 | 45 | name: k33g |
| 46 | 46 | email: ph.charriere@gmail.com |
| 47 | 47 | createdAt: 2026-10-29T07:20:00.000Z |
| 48 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 49 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 48 | 50 | - id: 2 |
| 49 | 51 | title: "Lire la partie permissions (session/request_permission) et tool calls" |
| 50 | - state: open | |
| 52 | + state: closed | |
| 51 | 53 | priority: high |
| 52 | 54 | author: |
| 53 | 55 | name: k33g |
| 54 | 56 | email: ph.charriere@gmail.com |
| 55 | 57 | createdAt: 2026-10-29T07:20:00.000Z |
| 58 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 59 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 56 | 60 | - id: 3 |
| 57 | 61 | title: "Lire les capacités client fs/* et terminal/*" |
| 58 | - state: open | |
| 62 | + state: closed | |
| 59 | 63 | priority: medium |
| 60 | 64 | author: |
| 61 | 65 | name: k33g |
| 62 | 66 | email: ph.charriere@gmail.com |
| 63 | 67 | createdAt: 2026-10-29T07:20:00.000Z |
| 68 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 69 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 64 | 70 | - id: 4 |
| 65 | 71 | title: "Lire available_commands_update (commandes slash) et session/load" |
| 66 | - state: open | |
| 72 | + state: closed | |
| 67 | 73 | priority: medium |
| 68 | 74 | author: |
| 69 | 75 | name: k33g |
| 70 | 76 | email: ph.charriere@gmail.com |
| 71 | 77 | createdAt: 2026-10-29T07:20:00.000Z |
| 78 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 79 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 72 | 80 | - id: 5 |
| 73 | 81 | title: "Évaluer les SDK Go existants (maintenance, licence, couverture du protocole)" |
| 74 | - state: open | |
| 82 | + state: closed | |
| 75 | 83 | priority: high |
| 76 | 84 | author: |
| 77 | 85 | name: k33g |
| 78 | 86 | email: ph.charriere@gmail.com |
| 79 | 87 | createdAt: 2026-10-29T07:20:00.000Z |
| 88 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 89 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 80 | 90 | - id: 6 |
| 81 | 91 | title: "Capturer une trace JSON-RPC réelle avec Alice (mm -acp)" |
| 82 | - state: open | |
| 92 | + state: closed | |
| 83 | 93 | priority: medium |
| 84 | 94 | author: |
| 85 | 95 | name: k33g |
| 86 | 96 | email: ph.charriere@gmail.com |
| 87 | 97 | createdAt: 2026-10-29T07:20:00.000Z |
| 98 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 99 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 88 | 100 | - id: 7 |
| 89 | 101 | title: "Capturer une trace avec Riker (tool call + demande de permission)" |
| 90 | - state: open | |
| 102 | + state: closed | |
| 91 | 103 | priority: medium |
| 92 | 104 | author: |
| 93 | 105 | name: k33g |
| 94 | 106 | email: ph.charriere@gmail.com |
| 95 | 107 | createdAt: 2026-10-29T07:20:00.000Z |
| 108 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 109 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 96 | 110 | - id: 8 |
| 97 | 111 | title: "Capturer une trace avec Garfield (commandes/skills exposés)" |
| 98 | - state: open | |
| 112 | + state: closed | |
| 99 | 113 | priority: medium |
| 100 | 114 | author: |
| 101 | 115 | name: k33g |
| 102 | 116 | email: ph.charriere@gmail.com |
| 103 | 117 | createdAt: 2026-10-29T07:20:00.000Z |
| 118 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 119 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 104 | 120 | - id: 9 |
| 105 | 121 | title: "Rédiger l'ADR ACP" |
| 106 | - state: open | |
| 122 | + state: closed | |
| 107 | 123 | priority: high |
| 108 | 124 | author: |
| 109 | 125 | name: k33g |
| 110 | 126 | email: ph.charriere@gmail.com |
| 111 | 127 | createdAt: 2026-10-29T07:20:00.000Z |
| 112 | -comments: [] | |
| 128 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 129 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 130 | +comments: | |
| 131 | + - id: 1 | |
| 132 | + author: | |
| 133 | + name: k33g | |
| 134 | + email: ph.charriere@gmail.com | |
| 135 | + createdAt: 2026-10-29T08:51:00.000Z | |
| 136 | + body: | | |
| 137 | + ## Résultat — spike terminé | |
| 138 | + | |
| 139 | + Décision et constats : [ADR 0001 — ACP](docs/adr/0001-acp.md). Client de capture : [spikes/acp-trace](spikes/acp-trace/README.md). Traces réelles : [docs/spikes/acp](docs/spikes/acp/README.md). | |
| 140 | + | |
| 141 | + - **Protocole v1** : mm v1.0.3 répond `protocolVersion: 1` ; la v2 documentée sur le site est écartée pour l'instant. | |
| 142 | + - **SDK** : `github.com/coder/acp-go-sdk` v0.13.5 (Apache-2.0, généré depuis le schéma officiel), encapsulé dans `internal/acp`. | |
| 143 | + - **Une session ACP par (channel, agent)**. | |
| 144 | + - **Pas de `loadSession` chez mm** → la reprise (#25) devra réinjecter le contexte. | |
| 145 | + - **Commandes** = commandes intégrées de mm + skills (Garfield), envoyées comme texte `/idioms …` → validé. | |
| 146 | + - **Permissions** : options `allow`, `allow_always`, `reject`, `never`. Après un refus `reject_once`, Riker a réessayé 40 fois puis le tour a fini en **erreur JSON-RPC** → impacts sur #17. | |
| 147 | + - **Annulation** : `session/cancel` → `stopReason: cancelled`, vérifié avec Garfield. | |
| 148 | + | |
| 149 | + Traces capturées un agent à la fois, via `scripts/agents.sh run`, modèle déchargé après chaque capture. | |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 2 | 2 | id: 2 |
| 3 | title: "Spike : maîtriser le protocole ACP et le valider avec mm" | 3 | title: "Spike : maîtriser le protocole ACP et le valider avec mm" |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-29T07:20:00.000Z | 8 | createdAt: 2026-10-29T07:20:00.000Z |
| 9 | -updatedAt: 2026-10-29T07:20:00.000Z | 9 | +updatedAt: 2026-10-29T08:51:00.000Z |
| 10 | labels: | 10 | labels: |
| 11 | - "kind::spike" | 11 | - "kind::spike" |
| 12 | - "area::acp" | 12 | - "area::acp" |
| @@ -39,74 +39,111 @@ body: | | |||
| 39 | tasks: | 39 | tasks: |
| 40 | - id: 1 | 40 | - id: 1 |
| 41 | title: "Lire la spec ACP : initialize, session/new, session/prompt, session/update, session/cancel" | 41 | title: "Lire la spec ACP : initialize, session/new, session/prompt, session/update, session/cancel" |
| 42 | - state: open | 42 | + state: closed |
| 43 | priority: high | 43 | priority: high |
| 44 | author: | 44 | author: |
| 45 | name: k33g | 45 | name: k33g |
| 46 | email: ph.charriere@gmail.com | 46 | email: ph.charriere@gmail.com |
| 47 | createdAt: 2026-10-29T07:20:00.000Z | 47 | createdAt: 2026-10-29T07:20:00.000Z |
| 48 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 49 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 48 | - id: 2 | 50 | - id: 2 |
| 49 | title: "Lire la partie permissions (session/request_permission) et tool calls" | 51 | title: "Lire la partie permissions (session/request_permission) et tool calls" |
| 50 | - state: open | 52 | + state: closed |
| 51 | priority: high | 53 | priority: high |
| 52 | author: | 54 | author: |
| 53 | name: k33g | 55 | name: k33g |
| 54 | email: ph.charriere@gmail.com | 56 | email: ph.charriere@gmail.com |
| 55 | createdAt: 2026-10-29T07:20:00.000Z | 57 | createdAt: 2026-10-29T07:20:00.000Z |
| 58 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 59 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 56 | - id: 3 | 60 | - id: 3 |
| 57 | title: "Lire les capacités client fs/* et terminal/*" | 61 | title: "Lire les capacités client fs/* et terminal/*" |
| 58 | - state: open | 62 | + state: closed |
| 59 | priority: medium | 63 | priority: medium |
| 60 | author: | 64 | author: |
| 61 | name: k33g | 65 | name: k33g |
| 62 | email: ph.charriere@gmail.com | 66 | email: ph.charriere@gmail.com |
| 63 | createdAt: 2026-10-29T07:20:00.000Z | 67 | createdAt: 2026-10-29T07:20:00.000Z |
| 68 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 69 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 64 | - id: 4 | 70 | - id: 4 |
| 65 | title: "Lire available_commands_update (commandes slash) et session/load" | 71 | title: "Lire available_commands_update (commandes slash) et session/load" |
| 66 | - state: open | 72 | + state: closed |
| 67 | priority: medium | 73 | priority: medium |
| 68 | author: | 74 | author: |
| 69 | name: k33g | 75 | name: k33g |
| 70 | email: ph.charriere@gmail.com | 76 | email: ph.charriere@gmail.com |
| 71 | createdAt: 2026-10-29T07:20:00.000Z | 77 | createdAt: 2026-10-29T07:20:00.000Z |
| 78 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 79 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 72 | - id: 5 | 80 | - id: 5 |
| 73 | title: "Évaluer les SDK Go existants (maintenance, licence, couverture du protocole)" | 81 | title: "Évaluer les SDK Go existants (maintenance, licence, couverture du protocole)" |
| 74 | - state: open | 82 | + state: closed |
| 75 | priority: high | 83 | priority: high |
| 76 | author: | 84 | author: |
| 77 | name: k33g | 85 | name: k33g |
| 78 | email: ph.charriere@gmail.com | 86 | email: ph.charriere@gmail.com |
| 79 | createdAt: 2026-10-29T07:20:00.000Z | 87 | createdAt: 2026-10-29T07:20:00.000Z |
| 88 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 89 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 80 | - id: 6 | 90 | - id: 6 |
| 81 | title: "Capturer une trace JSON-RPC réelle avec Alice (mm -acp)" | 91 | title: "Capturer une trace JSON-RPC réelle avec Alice (mm -acp)" |
| 82 | - state: open | 92 | + state: closed |
| 83 | priority: medium | 93 | priority: medium |
| 84 | author: | 94 | author: |
| 85 | name: k33g | 95 | name: k33g |
| 86 | email: ph.charriere@gmail.com | 96 | email: ph.charriere@gmail.com |
| 87 | createdAt: 2026-10-29T07:20:00.000Z | 97 | createdAt: 2026-10-29T07:20:00.000Z |
| 98 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 99 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 88 | - id: 7 | 100 | - id: 7 |
| 89 | title: "Capturer une trace avec Riker (tool call + demande de permission)" | 101 | title: "Capturer une trace avec Riker (tool call + demande de permission)" |
| 90 | - state: open | 102 | + state: closed |
| 91 | priority: medium | 103 | priority: medium |
| 92 | author: | 104 | author: |
| 93 | name: k33g | 105 | name: k33g |
| 94 | email: ph.charriere@gmail.com | 106 | email: ph.charriere@gmail.com |
| 95 | createdAt: 2026-10-29T07:20:00.000Z | 107 | createdAt: 2026-10-29T07:20:00.000Z |
| 108 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 109 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 96 | - id: 8 | 110 | - id: 8 |
| 97 | title: "Capturer une trace avec Garfield (commandes/skills exposés)" | 111 | title: "Capturer une trace avec Garfield (commandes/skills exposés)" |
| 98 | - state: open | 112 | + state: closed |
| 99 | priority: medium | 113 | priority: medium |
| 100 | author: | 114 | author: |
| 101 | name: k33g | 115 | name: k33g |
| 102 | email: ph.charriere@gmail.com | 116 | email: ph.charriere@gmail.com |
| 103 | createdAt: 2026-10-29T07:20:00.000Z | 117 | createdAt: 2026-10-29T07:20:00.000Z |
| 118 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 119 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 104 | - id: 9 | 120 | - id: 9 |
| 105 | title: "Rédiger l'ADR ACP" | 121 | title: "Rédiger l'ADR ACP" |
| 106 | - state: open | 122 | + state: closed |
| 107 | priority: high | 123 | priority: high |
| 108 | author: | 124 | author: |
| 109 | name: k33g | 125 | name: k33g |
| 110 | email: ph.charriere@gmail.com | 126 | email: ph.charriere@gmail.com |
| 111 | createdAt: 2026-10-29T07:20:00.000Z | 127 | createdAt: 2026-10-29T07:20:00.000Z |
| 112 | -comments: [] | 128 | + updatedAt: 2026-10-29T08:51:00.000Z |
| 129 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 130 | +comments: | ||
| 131 | + - id: 1 | ||
| 132 | + author: | ||
| 133 | + name: k33g | ||
| 134 | + email: ph.charriere@gmail.com | ||
| 135 | + createdAt: 2026-10-29T08:51:00.000Z | ||
| 136 | + body: | | ||
| 137 | + ## Résultat — spike terminé | ||
| 138 | + | ||
| 139 | + Décision et constats : [ADR 0001 — ACP](docs/adr/0001-acp.md). Client de capture : [spikes/acp-trace](spikes/acp-trace/README.md). Traces réelles : [docs/spikes/acp](docs/spikes/acp/README.md). | ||
| 140 | + | ||
| 141 | + - **Protocole v1** : mm v1.0.3 répond `protocolVersion: 1` ; la v2 documentée sur le site est écartée pour l'instant. | ||
| 142 | + - **SDK** : `github.com/coder/acp-go-sdk` v0.13.5 (Apache-2.0, généré depuis le schéma officiel), encapsulé dans `internal/acp`. | ||
| 143 | + - **Une session ACP par (channel, agent)**. | ||
| 144 | + - **Pas de `loadSession` chez mm** → la reprise (#25) devra réinjecter le contexte. | ||
| 145 | + - **Commandes** = commandes intégrées de mm + skills (Garfield), envoyées comme texte `/idioms …` → validé. | ||
| 146 | + - **Permissions** : options `allow`, `allow_always`, `reject`, `never`. Après un refus `reject_once`, Riker a réessayé 40 fois puis le tour a fini en **erreur JSON-RPC** → impacts sur #17. | ||
| 147 | + - **Annulation** : `session/cancel` → `stopReason: cancelled`, vérifié avec Garfield. | ||
| 148 | + | ||
| 149 | + Traces capturées un agent à la fois, via `scripts/agents.sh run`, modèle déchargé après chaque capture. | ||
modified
.tickets/issues/0003-spike-choisir-la-stack-wails-et-frontend.yaml +67 -10 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 3 |
| 3 | 3 | title: "Spike : choisir la stack Wails et frontend" |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-29T07:20:01.000Z |
| 9 | -updatedAt: 2026-10-29T07:20:01.000Z | |
| 9 | +updatedAt: 2026-10-29T09:30:00.000Z | |
| 10 | 10 | labels: |
| 11 | 11 | - "kind::spike" |
| 12 | 12 | - "area::ui" |
| @@ -42,58 +42,115 @@ body: | | ||
| 42 | 42 | tasks: |
| 43 | 43 | - id: 1 |
| 44 | 44 | title: "Comparer Wails v2 et v3 (stabilité, API events, multi-fenêtres)" |
| 45 | - state: open | |
| 45 | + state: closed | |
| 46 | 46 | priority: high |
| 47 | 47 | author: |
| 48 | 48 | name: k33g |
| 49 | 49 | email: ph.charriere@gmail.com |
| 50 | 50 | createdAt: 2026-10-29T07:20:01.000Z |
| 51 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 52 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 51 | 53 | - id: 2 |
| 52 | 54 | title: "Comparer CodeMirror 6 et Monaco (poids, YAML, thèmes)" |
| 53 | - state: open | |
| 55 | + state: closed | |
| 54 | 56 | priority: medium |
| 55 | 57 | author: |
| 56 | 58 | name: k33g |
| 57 | 59 | email: ph.charriere@gmail.com |
| 58 | 60 | createdAt: 2026-10-29T07:20:01.000Z |
| 61 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 62 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 59 | 63 | - id: 3 |
| 60 | 64 | title: "Valider xterm.js + PTY Go (creack/pty)" |
| 61 | - state: open | |
| 65 | + state: closed | |
| 62 | 66 | priority: medium |
| 63 | 67 | author: |
| 64 | 68 | name: k33g |
| 65 | 69 | email: ph.charriere@gmail.com |
| 66 | 70 | createdAt: 2026-10-29T07:20:01.000Z |
| 71 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 72 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 67 | 73 | - id: 4 |
| 68 | 74 | title: "Choisir la lib Markdown + coloration compatible streaming" |
| 69 | - state: open | |
| 75 | + state: closed | |
| 70 | 76 | priority: medium |
| 71 | 77 | author: |
| 72 | 78 | name: k33g |
| 73 | 79 | email: ph.charriere@gmail.com |
| 74 | 80 | createdAt: 2026-10-29T07:20:01.000Z |
| 81 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 82 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 75 | 83 | - id: 5 |
| 76 | 84 | title: "Choisir le framework frontend" |
| 77 | - state: open | |
| 85 | + state: closed | |
| 78 | 86 | priority: high |
| 79 | 87 | author: |
| 80 | 88 | name: k33g |
| 81 | 89 | email: ph.charriere@gmail.com |
| 82 | 90 | createdAt: 2026-10-29T07:20:01.000Z |
| 91 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 92 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 83 | 93 | - id: 6 |
| 84 | 94 | title: "Prototype jetable : panels + éditeur + terminal" |
| 85 | - state: open | |
| 95 | + state: closed | |
| 86 | 96 | priority: medium |
| 87 | 97 | author: |
| 88 | 98 | name: k33g |
| 89 | 99 | email: ph.charriere@gmail.com |
| 90 | 100 | createdAt: 2026-10-29T07:20:01.000Z |
| 101 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 102 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 91 | 103 | - id: 7 |
| 92 | 104 | title: "Rédiger l'ADR stack UI" |
| 93 | - state: open | |
| 105 | + state: closed | |
| 94 | 106 | priority: high |
| 95 | 107 | author: |
| 96 | 108 | name: k33g |
| 97 | 109 | email: ph.charriere@gmail.com |
| 98 | 110 | createdAt: 2026-10-29T07:20:01.000Z |
| 99 | -comments: [] | |
| 111 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 112 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 113 | + - id: 8 | |
| 114 | + title: "Lancer le prototype sur macOS (wails3 dev) et confirmer l'ADR 0002" | |
| 115 | + state: closed | |
| 116 | + priority: high | |
| 117 | + author: | |
| 118 | + name: k33g | |
| 119 | + email: ph.charriere@gmail.com | |
| 120 | + createdAt: 2026-10-29T08:51:00.000Z | |
| 121 | + updatedAt: 2026-10-29T09:30:00.000Z | |
| 122 | + closedAt: 2026-10-29T09:30:00.000Z | |
| 123 | +comments: | |
| 124 | + - id: 1 | |
| 125 | + author: | |
| 126 | + name: k33g | |
| 127 | + email: ph.charriere@gmail.com | |
| 128 | + createdAt: 2026-10-29T08:51:00.000Z | |
| 129 | + body: | | |
| 130 | + ## Résultat — décision prise, une vérification reste à faire sur macOS | |
| 131 | + | |
| 132 | + [ADR 0002 — UI stack](docs/adr/0002-ui-stack.md), prototype [spikes/wails-ui](spikes/wails-ui/README.md). | |
| 133 | + | |
| 134 | + - **Wails v3.0.0** (stable depuis le 26/10/2026) : services, événements typés, bindings TypeScript générés avec les commentaires Go, packaging macOS intégré. | |
| 135 | + - **Svelte 5 + TypeScript**, **paneforge** (panels), **markdown-it + Shiki + DOMPurify**, **CodeMirror 6**, **xterm.js + creack/pty**. | |
| 136 | + - Prototype compilé et lancé sous Linux (GTK4/WebKitGTK 6, Xvfb) : layout, streaming à 50 et 500 chunks/s (rendu une fois par frame), coloration pendant le streaming, HTML injecté non exécuté, vrai shell dans le terminal. Captures : `docs/spikes/ui/`. | |
| 137 | + | |
| 138 | + **Reste ouvert** : la sandbox n'a pas de SDK macOS. Le prototype doit être lancé sur le Mac (`cd spikes/wails-ui && wails3 dev`) — tâche ajoutée ci-dessous. L'issue reste ouverte jusque-là. | |
| 139 | + - id: 2 | |
| 140 | + author: | |
| 141 | + name: k33g | |
| 142 | + email: ph.charriere@gmail.com | |
| 143 | + createdAt: 2026-10-29T09:05:00.000Z | |
| 144 | + body: | | |
| 145 | + Guide pas à pas pour la vérification sur Mac : [docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md](docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md) (EN : [docs/en/how-to/test-milestone-initialize-on-macos.md](docs/en/how-to/test-milestone-initialize-on-macos.md)). Les parties 4 et 5 couvrent cette issue ; elles expliquent aussi comment la fermer, ainsi que la milestone Initialize. | |
| 146 | + - id: 3 | |
| 147 | + author: | |
| 148 | + name: k33g | |
| 149 | + email: ph.charriere@gmail.com | |
| 150 | + createdAt: 2026-10-29T09:30:00.000Z | |
| 151 | + body: | | |
| 152 | + ## Vérifié sur macOS — issue fermée | |
| 153 | + | |
| 154 | + Le propriétaire a déroulé le [guide de test macOS](docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md) : `wails3 dev` et `wails3 package` fonctionnent (panels, streaming, coloration, terminal, éditeur, thèmes). Seul écart constaté : les boutons de fenêtre macOS recouvraient « CHANNELS » ; corrigé par une marge `--titlebar-inset` (38 px sous macOS, alignée sur `InvisibleTitleBarHeight`), à reprendre dans le vrai shell UI (#12). | |
| 155 | + | |
| 156 | + [ADR 0002](docs/adr/0002-ui-stack.md) confirmé. | |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 3 | 2 | id: 3 |
| 3 | title: "Spike : choisir la stack Wails et frontend" | 3 | title: "Spike : choisir la stack Wails et frontend" |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-29T07:20:01.000Z | 8 | createdAt: 2026-10-29T07:20:01.000Z |
| 9 | -updatedAt: 2026-10-29T07:20:01.000Z | 9 | +updatedAt: 2026-10-29T09:30:00.000Z |
| 10 | labels: | 10 | labels: |
| 11 | - "kind::spike" | 11 | - "kind::spike" |
| 12 | - "area::ui" | 12 | - "area::ui" |
| @@ -42,58 +42,115 @@ body: | | |||
| 42 | tasks: | 42 | tasks: |
| 43 | - id: 1 | 43 | - id: 1 |
| 44 | title: "Comparer Wails v2 et v3 (stabilité, API events, multi-fenêtres)" | 44 | title: "Comparer Wails v2 et v3 (stabilité, API events, multi-fenêtres)" |
| 45 | - state: open | 45 | + state: closed |
| 46 | priority: high | 46 | priority: high |
| 47 | author: | 47 | author: |
| 48 | name: k33g | 48 | name: k33g |
| 49 | email: ph.charriere@gmail.com | 49 | email: ph.charriere@gmail.com |
| 50 | createdAt: 2026-10-29T07:20:01.000Z | 50 | createdAt: 2026-10-29T07:20:01.000Z |
| 51 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 52 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 51 | - id: 2 | 53 | - id: 2 |
| 52 | title: "Comparer CodeMirror 6 et Monaco (poids, YAML, thèmes)" | 54 | title: "Comparer CodeMirror 6 et Monaco (poids, YAML, thèmes)" |
| 53 | - state: open | 55 | + state: closed |
| 54 | priority: medium | 56 | priority: medium |
| 55 | author: | 57 | author: |
| 56 | name: k33g | 58 | name: k33g |
| 57 | email: ph.charriere@gmail.com | 59 | email: ph.charriere@gmail.com |
| 58 | createdAt: 2026-10-29T07:20:01.000Z | 60 | createdAt: 2026-10-29T07:20:01.000Z |
| 61 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 62 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 59 | - id: 3 | 63 | - id: 3 |
| 60 | title: "Valider xterm.js + PTY Go (creack/pty)" | 64 | title: "Valider xterm.js + PTY Go (creack/pty)" |
| 61 | - state: open | 65 | + state: closed |
| 62 | priority: medium | 66 | priority: medium |
| 63 | author: | 67 | author: |
| 64 | name: k33g | 68 | name: k33g |
| 65 | email: ph.charriere@gmail.com | 69 | email: ph.charriere@gmail.com |
| 66 | createdAt: 2026-10-29T07:20:01.000Z | 70 | createdAt: 2026-10-29T07:20:01.000Z |
| 71 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 72 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 67 | - id: 4 | 73 | - id: 4 |
| 68 | title: "Choisir la lib Markdown + coloration compatible streaming" | 74 | title: "Choisir la lib Markdown + coloration compatible streaming" |
| 69 | - state: open | 75 | + state: closed |
| 70 | priority: medium | 76 | priority: medium |
| 71 | author: | 77 | author: |
| 72 | name: k33g | 78 | name: k33g |
| 73 | email: ph.charriere@gmail.com | 79 | email: ph.charriere@gmail.com |
| 74 | createdAt: 2026-10-29T07:20:01.000Z | 80 | createdAt: 2026-10-29T07:20:01.000Z |
| 81 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 82 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 75 | - id: 5 | 83 | - id: 5 |
| 76 | title: "Choisir le framework frontend" | 84 | title: "Choisir le framework frontend" |
| 77 | - state: open | 85 | + state: closed |
| 78 | priority: high | 86 | priority: high |
| 79 | author: | 87 | author: |
| 80 | name: k33g | 88 | name: k33g |
| 81 | email: ph.charriere@gmail.com | 89 | email: ph.charriere@gmail.com |
| 82 | createdAt: 2026-10-29T07:20:01.000Z | 90 | createdAt: 2026-10-29T07:20:01.000Z |
| 91 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 92 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 83 | - id: 6 | 93 | - id: 6 |
| 84 | title: "Prototype jetable : panels + éditeur + terminal" | 94 | title: "Prototype jetable : panels + éditeur + terminal" |
| 85 | - state: open | 95 | + state: closed |
| 86 | priority: medium | 96 | priority: medium |
| 87 | author: | 97 | author: |
| 88 | name: k33g | 98 | name: k33g |
| 89 | email: ph.charriere@gmail.com | 99 | email: ph.charriere@gmail.com |
| 90 | createdAt: 2026-10-29T07:20:01.000Z | 100 | createdAt: 2026-10-29T07:20:01.000Z |
| 101 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 102 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 91 | - id: 7 | 103 | - id: 7 |
| 92 | title: "Rédiger l'ADR stack UI" | 104 | title: "Rédiger l'ADR stack UI" |
| 93 | - state: open | 105 | + state: closed |
| 94 | priority: high | 106 | priority: high |
| 95 | author: | 107 | author: |
| 96 | name: k33g | 108 | name: k33g |
| 97 | email: ph.charriere@gmail.com | 109 | email: ph.charriere@gmail.com |
| 98 | createdAt: 2026-10-29T07:20:01.000Z | 110 | createdAt: 2026-10-29T07:20:01.000Z |
| 99 | -comments: [] | 111 | + updatedAt: 2026-10-29T08:51:00.000Z |
| 112 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 113 | + - id: 8 | ||
| 114 | + title: "Lancer le prototype sur macOS (wails3 dev) et confirmer l'ADR 0002" | ||
| 115 | + state: closed | ||
| 116 | + priority: high | ||
| 117 | + author: | ||
| 118 | + name: k33g | ||
| 119 | + email: ph.charriere@gmail.com | ||
| 120 | + createdAt: 2026-10-29T08:51:00.000Z | ||
| 121 | + updatedAt: 2026-10-29T09:30:00.000Z | ||
| 122 | + closedAt: 2026-10-29T09:30:00.000Z | ||
| 123 | +comments: | ||
| 124 | + - id: 1 | ||
| 125 | + author: | ||
| 126 | + name: k33g | ||
| 127 | + email: ph.charriere@gmail.com | ||
| 128 | + createdAt: 2026-10-29T08:51:00.000Z | ||
| 129 | + body: | | ||
| 130 | + ## Résultat — décision prise, une vérification reste à faire sur macOS | ||
| 131 | + | ||
| 132 | + [ADR 0002 — UI stack](docs/adr/0002-ui-stack.md), prototype [spikes/wails-ui](spikes/wails-ui/README.md). | ||
| 133 | + | ||
| 134 | + - **Wails v3.0.0** (stable depuis le 26/10/2026) : services, événements typés, bindings TypeScript générés avec les commentaires Go, packaging macOS intégré. | ||
| 135 | + - **Svelte 5 + TypeScript**, **paneforge** (panels), **markdown-it + Shiki + DOMPurify**, **CodeMirror 6**, **xterm.js + creack/pty**. | ||
| 136 | + - Prototype compilé et lancé sous Linux (GTK4/WebKitGTK 6, Xvfb) : layout, streaming à 50 et 500 chunks/s (rendu une fois par frame), coloration pendant le streaming, HTML injecté non exécuté, vrai shell dans le terminal. Captures : `docs/spikes/ui/`. | ||
| 137 | + | ||
| 138 | + **Reste ouvert** : la sandbox n'a pas de SDK macOS. Le prototype doit être lancé sur le Mac (`cd spikes/wails-ui && wails3 dev`) — tâche ajoutée ci-dessous. L'issue reste ouverte jusque-là. | ||
| 139 | + - id: 2 | ||
| 140 | + author: | ||
| 141 | + name: k33g | ||
| 142 | + email: ph.charriere@gmail.com | ||
| 143 | + createdAt: 2026-10-29T09:05:00.000Z | ||
| 144 | + body: | | ||
| 145 | + Guide pas à pas pour la vérification sur Mac : [docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md](docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md) (EN : [docs/en/how-to/test-milestone-initialize-on-macos.md](docs/en/how-to/test-milestone-initialize-on-macos.md)). Les parties 4 et 5 couvrent cette issue ; elles expliquent aussi comment la fermer, ainsi que la milestone Initialize. | ||
| 146 | + - id: 3 | ||
| 147 | + author: | ||
| 148 | + name: k33g | ||
| 149 | + email: ph.charriere@gmail.com | ||
| 150 | + createdAt: 2026-10-29T09:30:00.000Z | ||
| 151 | + body: | | ||
| 152 | + ## Vérifié sur macOS — issue fermée | ||
| 153 | + | ||
| 154 | + Le propriétaire a déroulé le [guide de test macOS](docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md) : `wails3 dev` et `wails3 package` fonctionnent (panels, streaming, coloration, terminal, éditeur, thèmes). Seul écart constaté : les boutons de fenêtre macOS recouvraient « CHANNELS » ; corrigé par une marge `--titlebar-inset` (38 px sous macOS, alignée sur `InvisibleTitleBarHeight`), à reprendre dans le vrai shell UI (#12). | ||
| 155 | + | ||
| 156 | + [ADR 0002](docs/adr/0002-ui-stack.md) confirmé. | ||
modified
.tickets/issues/0004-specifier-le-format-du-fichier-de-configuration.yaml +35 -9 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 4 |
| 3 | 3 | title: "Spécifier le format du fichier de configuration YAML" |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-29T07:20:02.000Z |
| 9 | -updatedAt: 2026-10-29T07:20:02.000Z | |
| 9 | +updatedAt: 2026-10-29T08:51:00.000Z | |
| 10 | 10 | labels: |
| 11 | 11 | - "kind::chore" |
| 12 | 12 | - "documentation" |
| @@ -55,50 +55,76 @@ body: | | ||
| 55 | 55 | tasks: |
| 56 | 56 | - id: 1 |
| 57 | 57 | title: "Lister les clés agents / channels / ui / runtime" |
| 58 | - state: open | |
| 58 | + state: closed | |
| 59 | 59 | priority: high |
| 60 | 60 | author: |
| 61 | 61 | name: k33g |
| 62 | 62 | email: ph.charriere@gmail.com |
| 63 | 63 | createdAt: 2026-10-29T07:20:02.000Z |
| 64 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 65 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 64 | 66 | - id: 2 |
| 65 | 67 | title: "Définir les règles de nommage (nom technique pour @ vs titre affiché)" |
| 66 | - state: open | |
| 68 | + state: closed | |
| 67 | 69 | priority: medium |
| 68 | 70 | author: |
| 69 | 71 | name: k33g |
| 70 | 72 | email: ph.charriere@gmail.com |
| 71 | 73 | createdAt: 2026-10-29T07:20:02.000Z |
| 74 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 75 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 72 | 76 | - id: 3 |
| 73 | 77 | title: "Définir l'emplacement par défaut et l'ordre de priorité des surcharges" |
| 74 | - state: open | |
| 78 | + state: closed | |
| 75 | 79 | priority: high |
| 76 | 80 | author: |
| 77 | 81 | name: k33g |
| 78 | 82 | email: ph.charriere@gmail.com |
| 79 | 83 | createdAt: 2026-10-29T07:20:02.000Z |
| 84 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 85 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 80 | 86 | - id: 4 |
| 81 | 87 | title: "Définir la résolution des chemins relatifs" |
| 82 | - state: open | |
| 88 | + state: closed | |
| 83 | 89 | priority: medium |
| 84 | 90 | author: |
| 85 | 91 | name: k33g |
| 86 | 92 | email: ph.charriere@gmail.com |
| 87 | 93 | createdAt: 2026-10-29T07:20:02.000Z |
| 94 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 95 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 88 | 96 | - id: 5 |
| 89 | 97 | title: "Écrire le JSON Schema" |
| 90 | - state: open | |
| 98 | + state: closed | |
| 91 | 99 | priority: medium |
| 92 | 100 | author: |
| 93 | 101 | name: k33g |
| 94 | 102 | email: ph.charriere@gmail.com |
| 95 | 103 | createdAt: 2026-10-29T07:20:02.000Z |
| 104 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 105 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 96 | 106 | - id: 6 |
| 97 | 107 | title: "Écrire l'exemple avec Alice, Bob, Riker, Garfield" |
| 98 | - state: open | |
| 108 | + state: closed | |
| 99 | 109 | priority: medium |
| 100 | 110 | author: |
| 101 | 111 | name: k33g |
| 102 | 112 | email: ph.charriere@gmail.com |
| 103 | 113 | createdAt: 2026-10-29T07:20:02.000Z |
| 104 | -comments: [] | |
| 114 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 115 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 116 | +comments: | |
| 117 | + - id: 1 | |
| 118 | + author: | |
| 119 | + name: k33g | |
| 120 | + email: ph.charriere@gmail.com | |
| 121 | + createdAt: 2026-10-29T08:51:00.000Z | |
| 122 | + body: | | |
| 123 | + ## Résultat | |
| 124 | + | |
| 125 | + - Référence (EN/FR) : [docs/en/reference/configuration.md](docs/en/reference/configuration.md), [docs/fr/reference/configuration.md](docs/fr/reference/configuration.md). | |
| 126 | + - JSON Schema : [schema/config.schema.json](schema/config.schema.json), embarqué par le package Go `schema` (`ValidateConfig`), réutilisable par #9 et #18. | |
| 127 | + - Exemple avec les 4 agents de test : [examples/test-agents.yaml](examples/test-agents.yaml) — les agents passent par `scripts/agents.sh run`, donc la limite de 2 s'applique aussi à Sidekicks en dev. | |
| 128 | + - Tests : 4 documents valides, 12 invalides (chacun rejeté pour la bonne raison) — `make test`. | |
| 129 | + | |
| 130 | + Choix notables : clés inconnues = erreurs (fautes de frappe signalées), `limits.maxRunningAgents` / `stopIdleAgentsAfter`, `runtime` en `if/then` plutôt que `oneOf` pour des erreurs lisibles, les règles inter-entrées (noms uniques, membres existants) relèvent du chargeur (#9). | |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 4 | 2 | id: 4 |
| 3 | title: "Spécifier le format du fichier de configuration YAML" | 3 | title: "Spécifier le format du fichier de configuration YAML" |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-29T07:20:02.000Z | 8 | createdAt: 2026-10-29T07:20:02.000Z |
| 9 | -updatedAt: 2026-10-29T07:20:02.000Z | 9 | +updatedAt: 2026-10-29T08:51:00.000Z |
| 10 | labels: | 10 | labels: |
| 11 | - "kind::chore" | 11 | - "kind::chore" |
| 12 | - "documentation" | 12 | - "documentation" |
| @@ -55,50 +55,76 @@ body: | | |||
| 55 | tasks: | 55 | tasks: |
| 56 | - id: 1 | 56 | - id: 1 |
| 57 | title: "Lister les clés agents / channels / ui / runtime" | 57 | title: "Lister les clés agents / channels / ui / runtime" |
| 58 | - state: open | 58 | + state: closed |
| 59 | priority: high | 59 | priority: high |
| 60 | author: | 60 | author: |
| 61 | name: k33g | 61 | name: k33g |
| 62 | email: ph.charriere@gmail.com | 62 | email: ph.charriere@gmail.com |
| 63 | createdAt: 2026-10-29T07:20:02.000Z | 63 | createdAt: 2026-10-29T07:20:02.000Z |
| 64 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 65 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 64 | - id: 2 | 66 | - id: 2 |
| 65 | title: "Définir les règles de nommage (nom technique pour @ vs titre affiché)" | 67 | title: "Définir les règles de nommage (nom technique pour @ vs titre affiché)" |
| 66 | - state: open | 68 | + state: closed |
| 67 | priority: medium | 69 | priority: medium |
| 68 | author: | 70 | author: |
| 69 | name: k33g | 71 | name: k33g |
| 70 | email: ph.charriere@gmail.com | 72 | email: ph.charriere@gmail.com |
| 71 | createdAt: 2026-10-29T07:20:02.000Z | 73 | createdAt: 2026-10-29T07:20:02.000Z |
| 74 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 75 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 72 | - id: 3 | 76 | - id: 3 |
| 73 | title: "Définir l'emplacement par défaut et l'ordre de priorité des surcharges" | 77 | title: "Définir l'emplacement par défaut et l'ordre de priorité des surcharges" |
| 74 | - state: open | 78 | + state: closed |
| 75 | priority: high | 79 | priority: high |
| 76 | author: | 80 | author: |
| 77 | name: k33g | 81 | name: k33g |
| 78 | email: ph.charriere@gmail.com | 82 | email: ph.charriere@gmail.com |
| 79 | createdAt: 2026-10-29T07:20:02.000Z | 83 | createdAt: 2026-10-29T07:20:02.000Z |
| 84 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 85 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 80 | - id: 4 | 86 | - id: 4 |
| 81 | title: "Définir la résolution des chemins relatifs" | 87 | title: "Définir la résolution des chemins relatifs" |
| 82 | - state: open | 88 | + state: closed |
| 83 | priority: medium | 89 | priority: medium |
| 84 | author: | 90 | author: |
| 85 | name: k33g | 91 | name: k33g |
| 86 | email: ph.charriere@gmail.com | 92 | email: ph.charriere@gmail.com |
| 87 | createdAt: 2026-10-29T07:20:02.000Z | 93 | createdAt: 2026-10-29T07:20:02.000Z |
| 94 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 95 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 88 | - id: 5 | 96 | - id: 5 |
| 89 | title: "Écrire le JSON Schema" | 97 | title: "Écrire le JSON Schema" |
| 90 | - state: open | 98 | + state: closed |
| 91 | priority: medium | 99 | priority: medium |
| 92 | author: | 100 | author: |
| 93 | name: k33g | 101 | name: k33g |
| 94 | email: ph.charriere@gmail.com | 102 | email: ph.charriere@gmail.com |
| 95 | createdAt: 2026-10-29T07:20:02.000Z | 103 | createdAt: 2026-10-29T07:20:02.000Z |
| 104 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 105 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 96 | - id: 6 | 106 | - id: 6 |
| 97 | title: "Écrire l'exemple avec Alice, Bob, Riker, Garfield" | 107 | title: "Écrire l'exemple avec Alice, Bob, Riker, Garfield" |
| 98 | - state: open | 108 | + state: closed |
| 99 | priority: medium | 109 | priority: medium |
| 100 | author: | 110 | author: |
| 101 | name: k33g | 111 | name: k33g |
| 102 | email: ph.charriere@gmail.com | 112 | email: ph.charriere@gmail.com |
| 103 | createdAt: 2026-10-29T07:20:02.000Z | 113 | createdAt: 2026-10-29T07:20:02.000Z |
| 104 | -comments: [] | 114 | + updatedAt: 2026-10-29T08:51:00.000Z |
| 115 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 116 | +comments: | ||
| 117 | + - id: 1 | ||
| 118 | + author: | ||
| 119 | + name: k33g | ||
| 120 | + email: ph.charriere@gmail.com | ||
| 121 | + createdAt: 2026-10-29T08:51:00.000Z | ||
| 122 | + body: | | ||
| 123 | + ## Résultat | ||
| 124 | + | ||
| 125 | + - Référence (EN/FR) : [docs/en/reference/configuration.md](docs/en/reference/configuration.md), [docs/fr/reference/configuration.md](docs/fr/reference/configuration.md). | ||
| 126 | + - JSON Schema : [schema/config.schema.json](schema/config.schema.json), embarqué par le package Go `schema` (`ValidateConfig`), réutilisable par #9 et #18. | ||
| 127 | + - Exemple avec les 4 agents de test : [examples/test-agents.yaml](examples/test-agents.yaml) — les agents passent par `scripts/agents.sh run`, donc la limite de 2 s'applique aussi à Sidekicks en dev. | ||
| 128 | + - Tests : 4 documents valides, 12 invalides (chacun rejeté pour la bonne raison) — `make test`. | ||
| 129 | + | ||
| 130 | + Choix notables : clés inconnues = erreurs (fautes de frappe signalées), `limits.maxRunningAgents` / `stopIdleAgentsAfter`, `runtime` en `if/then` plutôt que `oneOf` pour des erreurs lisibles, les règles inter-entrées (noms uniques, membres existants) relèvent du chargeur (#9). | ||
modified
.tickets/issues/0005-definir-l-architecture-et-le-modele-de-donnees.yaml +32 -8 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 5 |
| 3 | 3 | title: "Définir l'architecture et le modèle de données" |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-29T07:20:03.000Z |
| 9 | -updatedAt: 2026-10-29T07:20:03.000Z | |
| 9 | +updatedAt: 2026-10-29T08:51:00.000Z | |
| 10 | 10 | labels: |
| 11 | 11 | - "kind::chore" |
| 12 | 12 | - "documentation" |
| @@ -49,42 +49,66 @@ body: | | ||
| 49 | 49 | tasks: |
| 50 | 50 | - id: 1 |
| 51 | 51 | title: "Découpage en packages et responsabilités" |
| 52 | - state: open | |
| 52 | + state: closed | |
| 53 | 53 | priority: high |
| 54 | 54 | author: |
| 55 | 55 | name: k33g |
| 56 | 56 | email: ph.charriere@gmail.com |
| 57 | 57 | createdAt: 2026-10-29T07:20:03.000Z |
| 58 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 59 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 58 | 60 | - id: 2 |
| 59 | 61 | title: "Modèle de données et schéma de clés Pebble" |
| 60 | - state: open | |
| 62 | + state: closed | |
| 61 | 63 | priority: high |
| 62 | 64 | author: |
| 63 | 65 | name: k33g |
| 64 | 66 | email: ph.charriere@gmail.com |
| 65 | 67 | createdAt: 2026-10-29T07:20:03.000Z |
| 68 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 69 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 66 | 70 | - id: 3 |
| 67 | 71 | title: "Décider : 1 session ACP par (channel, agent)" |
| 68 | - state: open | |
| 72 | + state: closed | |
| 69 | 73 | priority: medium |
| 70 | 74 | author: |
| 71 | 75 | name: k33g |
| 72 | 76 | email: ph.charriere@gmail.com |
| 73 | 77 | createdAt: 2026-10-29T07:20:03.000Z |
| 78 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 79 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 74 | 80 | - id: 4 |
| 75 | 81 | title: "Catalogue des événements Wails backend → frontend" |
| 76 | - state: open | |
| 82 | + state: closed | |
| 77 | 83 | priority: medium |
| 78 | 84 | author: |
| 79 | 85 | name: k33g |
| 80 | 86 | email: ph.charriere@gmail.com |
| 81 | 87 | createdAt: 2026-10-29T07:20:03.000Z |
| 88 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 89 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 82 | 90 | - id: 5 |
| 83 | 91 | title: "Schéma d'architecture" |
| 84 | - state: open | |
| 92 | + state: closed | |
| 85 | 93 | priority: medium |
| 86 | 94 | author: |
| 87 | 95 | name: k33g |
| 88 | 96 | email: ph.charriere@gmail.com |
| 89 | 97 | createdAt: 2026-10-29T07:20:03.000Z |
| 90 | -comments: [] | |
| 98 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 99 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 100 | +comments: | |
| 101 | + - id: 1 | |
| 102 | + author: | |
| 103 | + name: k33g | |
| 104 | + email: ph.charriere@gmail.com | |
| 105 | + createdAt: 2026-10-29T08:51:00.000Z | |
| 106 | + body: | | |
| 107 | + ## Résultat | |
| 108 | + | |
| 109 | + [ADR 0003 — architecture](docs/adr/0003-architecture.md) et schéma [docs/diagrams/packages.drawio](docs/diagrams/packages.drawio) (+ SVG/PNG). | |
| 110 | + | |
| 111 | + - Packages : `cmd/sidekicks`, `internal/app` (seule API vue par l'UI), `channels`, `agents`, `acp`, `config`, `store`, `workspace`, `schema`. | |
| 112 | + - YAML = ce qui existe ; Pebble v2 = ce qui se passe (une base par fichier de config) ; les channels n'ont qu'une maison : Pebble. | |
| 113 | + - Modèle de données (ULID), clés Pebble, catalogue de 12 événements, flux d'un message. | |
| 114 | + - Un message est écrit à la fin du tour, pas à chaque chunk. | |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 5 | 2 | id: 5 |
| 3 | title: "Définir l'architecture et le modèle de données" | 3 | title: "Définir l'architecture et le modèle de données" |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-29T07:20:03.000Z | 8 | createdAt: 2026-10-29T07:20:03.000Z |
| 9 | -updatedAt: 2026-10-29T07:20:03.000Z | 9 | +updatedAt: 2026-10-29T08:51:00.000Z |
| 10 | labels: | 10 | labels: |
| 11 | - "kind::chore" | 11 | - "kind::chore" |
| 12 | - "documentation" | 12 | - "documentation" |
| @@ -49,42 +49,66 @@ body: | | |||
| 49 | tasks: | 49 | tasks: |
| 50 | - id: 1 | 50 | - id: 1 |
| 51 | title: "Découpage en packages et responsabilités" | 51 | title: "Découpage en packages et responsabilités" |
| 52 | - state: open | 52 | + state: closed |
| 53 | priority: high | 53 | priority: high |
| 54 | author: | 54 | author: |
| 55 | name: k33g | 55 | name: k33g |
| 56 | email: ph.charriere@gmail.com | 56 | email: ph.charriere@gmail.com |
| 57 | createdAt: 2026-10-29T07:20:03.000Z | 57 | createdAt: 2026-10-29T07:20:03.000Z |
| 58 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 59 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 58 | - id: 2 | 60 | - id: 2 |
| 59 | title: "Modèle de données et schéma de clés Pebble" | 61 | title: "Modèle de données et schéma de clés Pebble" |
| 60 | - state: open | 62 | + state: closed |
| 61 | priority: high | 63 | priority: high |
| 62 | author: | 64 | author: |
| 63 | name: k33g | 65 | name: k33g |
| 64 | email: ph.charriere@gmail.com | 66 | email: ph.charriere@gmail.com |
| 65 | createdAt: 2026-10-29T07:20:03.000Z | 67 | createdAt: 2026-10-29T07:20:03.000Z |
| 68 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 69 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 66 | - id: 3 | 70 | - id: 3 |
| 67 | title: "Décider : 1 session ACP par (channel, agent)" | 71 | title: "Décider : 1 session ACP par (channel, agent)" |
| 68 | - state: open | 72 | + state: closed |
| 69 | priority: medium | 73 | priority: medium |
| 70 | author: | 74 | author: |
| 71 | name: k33g | 75 | name: k33g |
| 72 | email: ph.charriere@gmail.com | 76 | email: ph.charriere@gmail.com |
| 73 | createdAt: 2026-10-29T07:20:03.000Z | 77 | createdAt: 2026-10-29T07:20:03.000Z |
| 78 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 79 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 74 | - id: 4 | 80 | - id: 4 |
| 75 | title: "Catalogue des événements Wails backend → frontend" | 81 | title: "Catalogue des événements Wails backend → frontend" |
| 76 | - state: open | 82 | + state: closed |
| 77 | priority: medium | 83 | priority: medium |
| 78 | author: | 84 | author: |
| 79 | name: k33g | 85 | name: k33g |
| 80 | email: ph.charriere@gmail.com | 86 | email: ph.charriere@gmail.com |
| 81 | createdAt: 2026-10-29T07:20:03.000Z | 87 | createdAt: 2026-10-29T07:20:03.000Z |
| 88 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 89 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 82 | - id: 5 | 90 | - id: 5 |
| 83 | title: "Schéma d'architecture" | 91 | title: "Schéma d'architecture" |
| 84 | - state: open | 92 | + state: closed |
| 85 | priority: medium | 93 | priority: medium |
| 86 | author: | 94 | author: |
| 87 | name: k33g | 95 | name: k33g |
| 88 | email: ph.charriere@gmail.com | 96 | email: ph.charriere@gmail.com |
| 89 | createdAt: 2026-10-29T07:20:03.000Z | 97 | createdAt: 2026-10-29T07:20:03.000Z |
| 90 | -comments: [] | 98 | + updatedAt: 2026-10-29T08:51:00.000Z |
| 99 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 100 | +comments: | ||
| 101 | + - id: 1 | ||
| 102 | + author: | ||
| 103 | + name: k33g | ||
| 104 | + email: ph.charriere@gmail.com | ||
| 105 | + createdAt: 2026-10-29T08:51:00.000Z | ||
| 106 | + body: | | ||
| 107 | + ## Résultat | ||
| 108 | + | ||
| 109 | + [ADR 0003 — architecture](docs/adr/0003-architecture.md) et schéma [docs/diagrams/packages.drawio](docs/diagrams/packages.drawio) (+ SVG/PNG). | ||
| 110 | + | ||
| 111 | + - Packages : `cmd/sidekicks`, `internal/app` (seule API vue par l'UI), `channels`, `agents`, `acp`, `config`, `store`, `workspace`, `schema`. | ||
| 112 | + - YAML = ce qui existe ; Pebble v2 = ce qui se passe (une base par fichier de config) ; les channels n'ont qu'une maison : Pebble. | ||
| 113 | + - Modèle de données (ULID), clés Pebble, catalogue de 12 événements, flux d'un message. | ||
| 114 | + - Un message est écrit à la fin du tour, pas à chaque chunk. | ||
modified
.tickets/issues/0006-maquettes-ux-des-panels-pour-le-citizen-user.yaml +34 -9 | @@ -1,12 +1,12 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | id: 6 |
| 3 | 3 | title: "Maquettes UX des panels pour le citizen user" |
| 4 | -state: open | |
| 4 | +state: closed | |
| 5 | 5 | author: |
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-29T07:20:04.000Z |
| 9 | -updatedAt: 2026-10-29T07:20:04.000Z | |
| 9 | +updatedAt: 2026-10-29T08:51:00.000Z | |
| 10 | 10 | labels: |
| 11 | 11 | - "kind::chore" |
| 12 | 12 | - "area::ui" |
| @@ -38,50 +38,75 @@ body: | | ||
| 38 | 38 | tasks: |
| 39 | 39 | - id: 1 |
| 40 | 40 | title: "Layout global et docks" |
| 41 | - state: open | |
| 41 | + state: closed | |
| 42 | 42 | priority: medium |
| 43 | 43 | author: |
| 44 | 44 | name: k33g |
| 45 | 45 | email: ph.charriere@gmail.com |
| 46 | 46 | createdAt: 2026-10-29T07:20:04.000Z |
| 47 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 48 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 47 | 49 | - id: 2 |
| 48 | 50 | title: "Vue conversation multi-agents" |
| 49 | - state: open | |
| 51 | + state: closed | |
| 50 | 52 | priority: medium |
| 51 | 53 | author: |
| 52 | 54 | name: k33g |
| 53 | 55 | email: ph.charriere@gmail.com |
| 54 | 56 | createdAt: 2026-10-29T07:20:04.000Z |
| 57 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 58 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 55 | 59 | - id: 3 |
| 56 | 60 | title: "Popups @ et /" |
| 57 | - state: open | |
| 61 | + state: closed | |
| 58 | 62 | priority: medium |
| 59 | 63 | author: |
| 60 | 64 | name: k33g |
| 61 | 65 | email: ph.charriere@gmail.com |
| 62 | 66 | createdAt: 2026-10-29T07:20:04.000Z |
| 67 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 68 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 63 | 69 | - id: 4 |
| 64 | 70 | title: "Dialogue de permission" |
| 65 | - state: open | |
| 71 | + state: closed | |
| 66 | 72 | priority: high |
| 67 | 73 | author: |
| 68 | 74 | name: k33g |
| 69 | 75 | email: ph.charriere@gmail.com |
| 70 | 76 | createdAt: 2026-10-29T07:20:04.000Z |
| 77 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 78 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 71 | 79 | - id: 5 |
| 72 | 80 | title: "Panel Agents (treeview + terminal)" |
| 73 | - state: open | |
| 81 | + state: closed | |
| 74 | 82 | priority: medium |
| 75 | 83 | author: |
| 76 | 84 | name: k33g |
| 77 | 85 | email: ph.charriere@gmail.com |
| 78 | 86 | createdAt: 2026-10-29T07:20:04.000Z |
| 87 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 88 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 79 | 89 | - id: 6 |
| 80 | 90 | title: "Écran de premier lancement" |
| 81 | - state: open | |
| 91 | + state: closed | |
| 82 | 92 | priority: medium |
| 83 | 93 | author: |
| 84 | 94 | name: k33g |
| 85 | 95 | email: ph.charriere@gmail.com |
| 86 | 96 | createdAt: 2026-10-29T07:20:04.000Z |
| 87 | -comments: [] | |
| 97 | + updatedAt: 2026-10-29T08:51:00.000Z | |
| 98 | + closedAt: 2026-10-29T08:51:00.000Z | |
| 99 | +comments: | |
| 100 | + - id: 1 | |
| 101 | + author: | |
| 102 | + name: k33g | |
| 103 | + email: ph.charriere@gmail.com | |
| 104 | + createdAt: 2026-10-29T08:51:00.000Z | |
| 105 | + body: | | |
| 106 | + ## Résultat | |
| 107 | + | |
| 108 | + 6 écrans en draw.io (une page par écran) : [docs/design](docs/design/README.md) — `wireframes.drawio` + SVG/PNG, générés par `docs/design/wireframes.py` pour que le .drawio et les images ne divergent pas. | |
| 109 | + | |
| 110 | + Décisions visibles dans les maquettes : seuls la conversation et le dock gauche sont visibles par défaut ; la permission est attachée à la conversation et propose toujours « Ne plus jamais » et « Arrêter l'agent » (conséquence du spike #2) ; l'arrivée d'un agent dans un channel est annoncée ; le premier lancement ne montre jamais de YAML. | |
| 111 | + | |
| 112 | + À valider par toi : le parcours « je crée un channel, j'invite Alice, je lui pose une question » (critère d'acceptation). | |
| @@ -1,12 +1,12 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | id: 6 | 2 | id: 6 |
| 3 | title: "Maquettes UX des panels pour le citizen user" | 3 | title: "Maquettes UX des panels pour le citizen user" |
| 4 | -state: open | 4 | +state: closed |
| 5 | author: | 5 | author: |
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-29T07:20:04.000Z | 8 | createdAt: 2026-10-29T07:20:04.000Z |
| 9 | -updatedAt: 2026-10-29T07:20:04.000Z | 9 | +updatedAt: 2026-10-29T08:51:00.000Z |
| 10 | labels: | 10 | labels: |
| 11 | - "kind::chore" | 11 | - "kind::chore" |
| 12 | - "area::ui" | 12 | - "area::ui" |
| @@ -38,50 +38,75 @@ body: | | |||
| 38 | tasks: | 38 | tasks: |
| 39 | - id: 1 | 39 | - id: 1 |
| 40 | title: "Layout global et docks" | 40 | title: "Layout global et docks" |
| 41 | - state: open | 41 | + state: closed |
| 42 | priority: medium | 42 | priority: medium |
| 43 | author: | 43 | author: |
| 44 | name: k33g | 44 | name: k33g |
| 45 | email: ph.charriere@gmail.com | 45 | email: ph.charriere@gmail.com |
| 46 | createdAt: 2026-10-29T07:20:04.000Z | 46 | createdAt: 2026-10-29T07:20:04.000Z |
| 47 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 48 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 47 | - id: 2 | 49 | - id: 2 |
| 48 | title: "Vue conversation multi-agents" | 50 | title: "Vue conversation multi-agents" |
| 49 | - state: open | 51 | + state: closed |
| 50 | priority: medium | 52 | priority: medium |
| 51 | author: | 53 | author: |
| 52 | name: k33g | 54 | name: k33g |
| 53 | email: ph.charriere@gmail.com | 55 | email: ph.charriere@gmail.com |
| 54 | createdAt: 2026-10-29T07:20:04.000Z | 56 | createdAt: 2026-10-29T07:20:04.000Z |
| 57 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 58 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 55 | - id: 3 | 59 | - id: 3 |
| 56 | title: "Popups @ et /" | 60 | title: "Popups @ et /" |
| 57 | - state: open | 61 | + state: closed |
| 58 | priority: medium | 62 | priority: medium |
| 59 | author: | 63 | author: |
| 60 | name: k33g | 64 | name: k33g |
| 61 | email: ph.charriere@gmail.com | 65 | email: ph.charriere@gmail.com |
| 62 | createdAt: 2026-10-29T07:20:04.000Z | 66 | createdAt: 2026-10-29T07:20:04.000Z |
| 67 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 68 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 63 | - id: 4 | 69 | - id: 4 |
| 64 | title: "Dialogue de permission" | 70 | title: "Dialogue de permission" |
| 65 | - state: open | 71 | + state: closed |
| 66 | priority: high | 72 | priority: high |
| 67 | author: | 73 | author: |
| 68 | name: k33g | 74 | name: k33g |
| 69 | email: ph.charriere@gmail.com | 75 | email: ph.charriere@gmail.com |
| 70 | createdAt: 2026-10-29T07:20:04.000Z | 76 | createdAt: 2026-10-29T07:20:04.000Z |
| 77 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 78 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 71 | - id: 5 | 79 | - id: 5 |
| 72 | title: "Panel Agents (treeview + terminal)" | 80 | title: "Panel Agents (treeview + terminal)" |
| 73 | - state: open | 81 | + state: closed |
| 74 | priority: medium | 82 | priority: medium |
| 75 | author: | 83 | author: |
| 76 | name: k33g | 84 | name: k33g |
| 77 | email: ph.charriere@gmail.com | 85 | email: ph.charriere@gmail.com |
| 78 | createdAt: 2026-10-29T07:20:04.000Z | 86 | createdAt: 2026-10-29T07:20:04.000Z |
| 87 | + updatedAt: 2026-10-29T08:51:00.000Z | ||
| 88 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 79 | - id: 6 | 89 | - id: 6 |
| 80 | title: "Écran de premier lancement" | 90 | title: "Écran de premier lancement" |
| 81 | - state: open | 91 | + state: closed |
| 82 | priority: medium | 92 | priority: medium |
| 83 | author: | 93 | author: |
| 84 | name: k33g | 94 | name: k33g |
| 85 | email: ph.charriere@gmail.com | 95 | email: ph.charriere@gmail.com |
| 86 | createdAt: 2026-10-29T07:20:04.000Z | 96 | createdAt: 2026-10-29T07:20:04.000Z |
| 87 | -comments: [] | 97 | + updatedAt: 2026-10-29T08:51:00.000Z |
| 98 | + closedAt: 2026-10-29T08:51:00.000Z | ||
| 99 | +comments: | ||
| 100 | + - id: 1 | ||
| 101 | + author: | ||
| 102 | + name: k33g | ||
| 103 | + email: ph.charriere@gmail.com | ||
| 104 | + createdAt: 2026-10-29T08:51:00.000Z | ||
| 105 | + body: | | ||
| 106 | + ## Résultat | ||
| 107 | + | ||
| 108 | + 6 écrans en draw.io (une page par écran) : [docs/design](docs/design/README.md) — `wireframes.drawio` + SVG/PNG, générés par `docs/design/wireframes.py` pour que le .drawio et les images ne divergent pas. | ||
| 109 | + | ||
| 110 | + Décisions visibles dans les maquettes : seuls la conversation et le dock gauche sont visibles par défaut ; la permission est attachée à la conversation et propose toujours « Ne plus jamais » et « Arrêter l'agent » (conséquence du spike #2) ; l'arrivée d'un agent dans un channel est annoncée ; le premier lancement ne montre jamais de YAML. | ||
| 111 | + | ||
| 112 | + À valider par toi : le parcours « je crée un channel, j'invite Alice, je lui pose une question » (critère d'acceptation). | ||
modified
.tickets/issues/0007-outillage-de-test-avec-les-agents-reels-2-agents.yaml +34 -8 Large diff collapsed to keep the page fast — load it when you need it.
modified
.tickets/issues/0008-initialiser-le-projet-go-wails.yaml +12 -1 | @@ -6,7 +6,7 @@ author: | ||
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-29T07:20:06.000Z |
| 9 | -updatedAt: 2026-10-29T08:10:00.000Z | |
| 9 | +updatedAt: 2026-10-29T08:51:00.000Z | |
| 10 | 10 | labels: |
| 11 | 11 | - "kind::chore" |
| 12 | 12 | - "area::infra" |
| @@ -127,3 +127,14 @@ comments: | ||
| 127 | 127 | - Les fichiers générés (bindings `wailsjs/`, `go.sum`, lockfiles) et les fichiers de config tiers ne portent pas d'en-tête. |
| 128 | 128 | - Les scripts personnels à la racine (`git.sh`, `new.*.sh`, `tag-step.sh`) sont hors convention : ce sont des outils de l'auteur, pas du code du projet. |
| 129 | 129 | - L'année reste celle de la création du fichier. |
| 130 | + - id: 2 | |
| 131 | + author: | |
| 132 | + name: k33g | |
| 133 | + email: ph.charriere@gmail.com | |
| 134 | + createdAt: 2026-10-29T08:51:00.000Z | |
| 135 | + body: | | |
| 136 | + Apports de la milestone Initialize : | |
| 137 | + | |
| 138 | + - `go.mod` existe déjà à la racine (`git.rickub.com/bots-garden/sidekicks`, go 1.26) avec le package `schema`. `wails3 init` génère son propre go.mod : partir du template Svelte dans un dossier temporaire et reporter `main.go`, `frontend/`, `build/`, `Taskfile.yml` à la racine. | |
| 139 | + - Le `Makefile` est le point d'entrée unique (`make test`) ; ses cibles délèguent à la Taskfile de Wails (ADR 0002). | |
| 140 | + - Build Linux : `pkg-config`, `libgtk-4-dev`, `libwebkitgtk-6.0-dev`. Le prototype [spikes/wails-ui](spikes/wails-ui/README.md) sert de modèle. | |
| @@ -6,7 +6,7 @@ author: | |||
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-29T07:20:06.000Z | 8 | createdAt: 2026-10-29T07:20:06.000Z |
| 9 | -updatedAt: 2026-10-29T08:10:00.000Z | 9 | +updatedAt: 2026-10-29T08:51:00.000Z |
| 10 | labels: | 10 | labels: |
| 11 | - "kind::chore" | 11 | - "kind::chore" |
| 12 | - "area::infra" | 12 | - "area::infra" |
| @@ -127,3 +127,14 @@ comments: | |||
| 127 | - Les fichiers générés (bindings `wailsjs/`, `go.sum`, lockfiles) et les fichiers de config tiers ne portent pas d'en-tête. | 127 | - Les fichiers générés (bindings `wailsjs/`, `go.sum`, lockfiles) et les fichiers de config tiers ne portent pas d'en-tête. |
| 128 | - Les scripts personnels à la racine (`git.sh`, `new.*.sh`, `tag-step.sh`) sont hors convention : ce sont des outils de l'auteur, pas du code du projet. | 128 | - Les scripts personnels à la racine (`git.sh`, `new.*.sh`, `tag-step.sh`) sont hors convention : ce sont des outils de l'auteur, pas du code du projet. |
| 129 | - L'année reste celle de la création du fichier. | 129 | - L'année reste celle de la création du fichier. |
| 130 | + - id: 2 | ||
| 131 | + author: | ||
| 132 | + name: k33g | ||
| 133 | + email: ph.charriere@gmail.com | ||
| 134 | + createdAt: 2026-10-29T08:51:00.000Z | ||
| 135 | + body: | | ||
| 136 | + Apports de la milestone Initialize : | ||
| 137 | + | ||
| 138 | + - `go.mod` existe déjà à la racine (`git.rickub.com/bots-garden/sidekicks`, go 1.26) avec le package `schema`. `wails3 init` génère son propre go.mod : partir du template Svelte dans un dossier temporaire et reporter `main.go`, `frontend/`, `build/`, `Taskfile.yml` à la racine. | ||
| 139 | + - Le `Makefile` est le point d'entrée unique (`make test`) ; ses cibles délèguent à la Taskfile de Wails (ADR 0002). | ||
| 140 | + - Build Linux : `pkg-config`, `libgtk-4-dev`, `libwebkitgtk-6.0-dev`. Le prototype [spikes/wails-ui](spikes/wails-ui/README.md) sert de modèle. | ||
modified
.tickets/issues/0009-charger-valider-et-sauvegarder-la-configuration.yaml +9 -2 Large diff collapsed to keep the page fast — load it when you need it.
modified
.tickets/issues/0010-client-acp-transport-stdio-et-handshake-initiali.yaml +17 -2 Large diff collapsed to keep the page fast — load it when you need it.
modified
.tickets/issues/0017-afficher-les-tool-calls-et-gerer-les-demandes-de.yaml +9 -2 Large diff collapsed to keep the page fast — load it when you need it.
modified
.tickets/issues/0024-commandes-slash-exposees-par-les-agents.yaml +9 -2 Large diff collapsed to keep the page fast — load it when you need it.
modified
.tickets/issues/0025-reprendre-les-conversations-apres-redemarrage.yaml +9 -2 Large diff collapsed to keep the page fast — load it when you need it.
modified
.tickets/milestones.yaml +1 -1 | @@ -1,7 +1,7 @@ | ||
| 1 | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | 2 | milestones: |
| 3 | 3 | - title: Initialize |
| 4 | - state: open | |
| 4 | + state: closed | |
| 5 | 5 | description: Specification of the project, settings, definition of tools |
| 6 | 6 | dueOn: 2026-10-30 |
| 7 | 7 | - title: "M1 · Fondations" |
| @@ -1,7 +1,7 @@ | |||
| 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | 1 | # Managed by IssueSpec. Hand edits are welcome; keep the schema valid. |
| 2 | milestones: | 2 | milestones: |
| 3 | - title: Initialize | 3 | - title: Initialize |
| 4 | - state: open | 4 | + state: closed |
| 5 | description: Specification of the project, settings, definition of tools | 5 | description: Specification of the project, settings, definition of tools |
| 6 | dueOn: 2026-10-30 | 6 | dueOn: 2026-10-30 |
| 7 | - title: "M1 · Fondations" | 7 | - title: "M1 · Fondations" |
added
Makefile +16 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/README.md +6 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/adr/0001-acp.md +79 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/adr/0002-ui-stack.md +75 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/adr/0003-architecture.md +114 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/01-layout.png +0 -0 | new file mode 100644 | ||
| Binary files /dev/null and b/docs/design/01-layout.png differ | ||
| new file mode 100644 | |||
| Binary files /dev/null and b/docs/design/01-layout.png differ | Binary files /dev/null and b/docs/design/01-layout.png differ | ||
added
docs/design/01-layout.svg +101 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/02-conversation.png +0 -0 | new file mode 100644 | ||
| Binary files /dev/null and b/docs/design/02-conversation.png differ | ||
| new file mode 100644 | |||
| Binary files /dev/null and b/docs/design/02-conversation.png differ | Binary files /dev/null and b/docs/design/02-conversation.png differ | ||
added
docs/design/02-conversation.svg +100 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/03-mentions-commands.png +0 -0 | new file mode 100644 | ||
| Binary files /dev/null and b/docs/design/03-mentions-commands.png differ | ||
| new file mode 100644 | |||
| Binary files /dev/null and b/docs/design/03-mentions-commands.png differ | Binary files /dev/null and b/docs/design/03-mentions-commands.png differ | ||
added
docs/design/03-mentions-commands.svg +102 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/04-permission.png +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/04-permission.svg +97 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/05-agents-panel.png +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/05-agents-panel.svg +111 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/06-first-launch.png +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/06-first-launch.svg +73 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/README.md +34 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/wireframes.drawio +546 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/design/wireframes.py +411 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/diagrams/packages.drawio +45 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/diagrams/packages.png +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/diagrams/packages.svg +97 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/en/README.md +21 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/en/explanation/architecture.md +36 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/en/explanation/memory-and-local-models.md +29 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/en/explanation/ui-stack.md +29 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/en/explanation/why-acp.md +28 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/en/how-to/run-a-test-agent.md +61 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/en/how-to/run-the-tests.md +36 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/en/how-to/test-milestone-initialize-on-macos.md +201 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/en/reference/agents-script.md +48 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/en/reference/configuration.md +183 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/en/tutorials/first-acp-exchange.md +104 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/fr/README.md +21 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/fr/explanation/architecture.md +36 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/fr/explanation/memoire-et-modeles-locaux.md +29 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/fr/explanation/pourquoi-acp.md +28 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/fr/explanation/stack-interface.md +29 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/fr/how-to/lancer-les-tests.md +36 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/fr/how-to/lancer-un-agent-de-test.md +61 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/fr/how-to/tester-la-milestone-initialize-sous-macos.md +201 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/fr/reference/configuration.md +183 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/fr/reference/script-agents.md +48 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/fr/tutorials/premier-echange-acp.md +104 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/spikes/acp/README.md +17 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/spikes/acp/traces/alice.jsonl +56 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/spikes/acp/traces/garfield-command.jsonl +21 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/spikes/acp/traces/garfield.jsonl +22 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/spikes/acp/traces/riker-allow.jsonl +139 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/spikes/acp/traces/riker-reject.jsonl +1985 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/spikes/ui/prototype-linux.png +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
docs/spikes/ui/prototype-streaming.png +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
examples/test-agents.yaml +54 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
go.mod +10 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
go.sum +8 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/config.schema.json +251 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/schema.go +91 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/schema_test.go +96 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/agent-without-command.yaml +3 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/bad-duration.yaml +4 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/container-without-name.yaml +6 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/duplicate-channel-member.yaml +5 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/local-with-sandbox.yaml +7 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/missing-version.yaml +3 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/name-with-uppercase-and-space.yaml +4 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/unknown-key.yaml +5 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/unknown-runtime.yaml +6 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/unknown-theme.yaml +4 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/unknown-version.yaml +2 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/invalid/zero-agents-limit.yaml +4 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/valid/minimal.yaml +4 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/valid/runtimes.yaml +30 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
schema/testdata/valid/spec-example.yaml +41 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
scripts/agents.sh +224 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
scripts/agents_test.sh +215 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/README.md +8 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/acp-trace/README.md +19 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/acp-trace/go.mod +5 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/acp-trace/go.sum +2 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/acp-trace/main.go +257 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/.gitignore +11 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/README.md +34 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/Taskfile.yml +68 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/Taskfile.yml +398 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/appicon.icon/Assets/wails_icon_vector.svg +9 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/appicon.icon/icon.json +51 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/appicon.png +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/config.yml +87 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/darwin/Assets.car +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/darwin/Info.dev.plist +34 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/darwin/Info.plist +29 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/darwin/Taskfile.yml +230 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/darwin/dmg-background.png +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/darwin/dmg-file-icon.icns +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/darwin/dmg-file-icon.png +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/darwin/icons.icns +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/docker/Dockerfile.cross +225 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/docker/Dockerfile.server +67 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/linux/Taskfile.yml +220 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/linux/appimage/build.sh +35 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/linux/desktop +13 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/linux/nfpm/nfpm.yaml +80 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/linux/nfpm/scripts/postinstall.sh +21 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/linux/nfpm/scripts/postremove.sh +1 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/linux/nfpm/scripts/preinstall.sh +1 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/linux/nfpm/scripts/preremove.sh +1 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/windows/Taskfile.yml +195 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/windows/icon.ico +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/windows/info.json +15 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/windows/msix/app_manifest.xml +55 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/windows/msix/template.xml +54 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/windows/nsis/project.nsi +119 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/windows/nsis/wails_tools.nsh +261 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/build/windows/wails.exe.manifest +22 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/.npmrc +5 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/Inter Font License.txt +93 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/bindings/events/index.ts +20 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/bindings/git.rickub.com/bots-garden/sidekicks/spikes/wails-ui/index.ts +13 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/bindings/git.rickub.com/bots-garden/sidekicks/spikes/wails-ui/models.ts +11 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/bindings/git.rickub.com/bots-garden/sidekicks/spikes/wails-ui/streamservice.ts +20 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/bindings/git.rickub.com/bots-garden/sidekicks/spikes/wails-ui/terminalservice.ts +35 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/bindings/github.com/wailsapp/wails/v3/internal/eventcreate.ts +9 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/bindings/github.com/wailsapp/wails/v3/internal/eventdata.d.ts +19 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/index.html +14 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/package-lock.json +2007 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/package.json +35 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/public/Inter-Medium.ttf +0 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/public/style.css +57 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/src/App.svelte +55 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/src/lib/Conversation.svelte +105 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/src/lib/Terminal.svelte +43 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/src/lib/YamlEditor.svelte +46 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/src/lib/markdown.ts +59 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/src/main.ts +11 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/src/vite-env.d.ts +2 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/svelte.config.js +7 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/tsconfig.json +19 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/frontend/vite.config.ts +13 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/go.mod +18 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/go.sum +34 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/main.go +55 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/stream.go +91 -0 Large diff collapsed to keep the page fast — load it when you need it.
added
spikes/wails-ui/terminal.go +103 -0 Large diff collapsed to keep the page fast — load it when you need it.