1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
# Managed by IssueSpec. Hand edits are welcome; keep the schema valid.
id: 5
title: "Définir l'architecture et le modèle de données"
state: open
author:
name: k33g
email: ph.charriere@gmail.com
createdAt: 2026-10-29T07:20:03.000Z
updatedAt: 2026-10-29T07:20:03.000Z
labels:
- "kind::chore"
- "documentation"
- "priority::high"
- "size::M"
milestone: "Initialize"
epic: "Specifications"
related:
- 2
- 3
- 4
body: |
## Contexte
Une fois ACP ([#2 — Spike : maîtriser le protocole ACP et le valider avec mm](.tickets/issues/0002-spike-maitriser-le-protocole-acp-et-le-valider-a.yaml)) et la stack ([#3 — Spike : choisir la stack Wails et frontend](.tickets/issues/0003-spike-choisir-la-stack-wails-et-frontend.yaml)) compris, il faut fixer le découpage du code avant d'écrire la première ligne de prod.
## Pourquoi
- Plusieurs features se recouvrent (un agent est partagé entre plusieurs channels, une même session ACP alimente le chat et le panel Agents) : sans modèle clair on obtient du couplage frontend ↔ processus agents.
- La persistance Pebble est « si besoin » dans le draft : cette issue doit **décider où elle est nécessaire** (channels, historique, mapping channel ↔ session ACP) et où elle ne l'est pas (la config reste en YAML, source de vérité éditable).
## Proposition de découpage Go
```
cmd/sidekicks/ point d'entrée Wails
internal/config/ chargement / validation / watch du YAML
internal/acp/ client JSON-RPC ACP (transport stdio)
internal/agents/ cycle de vie des processus agents
internal/channels/ channels, membres, routage des messages
internal/store/ Pebble (messages, sessions)
internal/workspace/ fichiers + exec (local, sbx, container)
frontend/ UI
```
Règle : le frontend ne parle **qu'aux services Wails** ; il ne connaît pas ACP.
## Modèle de données (première version)
- `Agent` (vient de la config) — `Channel` — `Membership(channel, agent, acpSessionId)` — `Message(channel, author: user|agent, parts[], createdAt)`.
## Critères d'acceptation
- [ ] ADR architecture rédigé, avec un schéma (draw.io).
- [ ] Modèle de données et clés Pebble définis.
- [ ] Liste des événements backend → frontend (cf. [#13 — Pont d'événements entre Go et le frontend](.tickets/issues/0013-pont-d-evenements-entre-go-et-le-frontend.yaml)).
tasks:
- id: 1
title: "Découpage en packages et responsabilités"
state: open
priority: high
author:
name: k33g
email: ph.charriere@gmail.com
createdAt: 2026-10-29T07:20:03.000Z
- id: 2
title: "Modèle de données et schéma de clés Pebble"
state: open
priority: high
author:
name: k33g
email: ph.charriere@gmail.com
createdAt: 2026-10-29T07:20:03.000Z
- id: 3
title: "Décider : 1 session ACP par (channel, agent)"
state: open
priority: medium
author:
name: k33g
email: ph.charriere@gmail.com
createdAt: 2026-10-29T07:20:03.000Z
- id: 4
title: "Catalogue des événements Wails backend → frontend"
state: open
priority: medium
author:
name: k33g
email: ph.charriere@gmail.com
createdAt: 2026-10-29T07:20:03.000Z
- id: 5
title: "Schéma d'architecture"
state: open
priority: medium
author:
name: k33g
email: ph.charriere@gmail.com
createdAt: 2026-10-29T07:20:03.000Z
comments: []
|