bots-garden/sidekickspublic Fork
⑂ feature/file-preview
Commits
⬇ Clone ▾
git clone https://git.rickub.com/bots-garden/sidekicks.git
git clone ssh://git@rickub.com/bots-garden/sidekicks.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP
0002-spike-maitriser-le-protocole-acp-et-le-valider-a.yaml · 149 lines · 6.4 KBYAML Blame HistoryRaw
  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
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# Managed by IssueSpec. Hand edits are welcome; keep the schema valid.
id: 2
title: "Spike : maîtriser le protocole ACP et le valider avec mm"
state: closed
author:
  name: k33g
  email: ph.charriere@gmail.com
createdAt: 2026-10-29T07:20:00.000Z
updatedAt: 2026-10-29T08:51:00.000Z
labels:
  - "kind::spike"
  - "area::acp"
  - "priority::urgent"
  - "size::M"
  - "real-agents"
milestone: "Initialize"
epic: "Specifications"
body: |
  ## Contexte
  Sidekicks est un **client ACP** (Agent Client Protocol, https://agentclientprotocol.com) : c'est ce qui le rend agnostique de l'agent (cf. [#1 — draft](.tickets/issues/0001-draft.yaml)). Tout le reste du projet repose sur notre compréhension de ce protocole.

  ## Pourquoi un spike en premier
  - C'est le **risque technique n°1** : si on se trompe sur le modèle (sessions, streaming, permissions, commandes), on refait l'architecture.
  - Le draft contient des exigences qui dépendent directement d'ACP : commandes `/` (≈ `available_commands_update`), permissions (≈ `session/request_permission`), fichiers/terminal (capacités client `fs/*` et `terminal/*`). Il faut vérifier ce que le protocole offre réellement **et ce que `mm` implémente**.
  - Un SDK Go existe-t-il et est-il maintenu ? (à vérifier, ex. `github.com/coder/acp-go-sdk`). L'utiliser ou non change la charge de [#10 — Client ACP : transport stdio et handshake initialize](.tickets/issues/0010-client-acp-transport-stdio-et-handshake-initiali.yaml).

  ## Livrable
  Un document `docs/adr/0001-acp.md` (ou équivalent) contenant :
  - la liste des méthodes/notifications utilisées par Sidekicks et celles ignorées (avec la raison) ;
  - le choix SDK vs implémentation maison du JSON-RPC sur stdio ;
  - des traces JSON-RPC réelles capturées avec Alice (simple) et Riker (tools + permissions).

  ## Critères d'acceptation
  - [ ] On sait répondre : une session = un channel ? un agent ? les deux ?
  - [ ] On sait si `mm` supporte `session/load` (reprise de conversation, utile pour [#25 — Reprendre les conversations après redémarrage](.tickets/issues/0025-reprendre-les-conversations-apres-redemarrage.yaml)).
  - [ ] On sait quelles commandes `mm` expose (skills de Garfield ?).

  ⚠️ Jamais plus de 2 agents lancés en même temps (voir [#7 — Outillage de test avec les agents réels (2 agents max)](.tickets/issues/0007-outillage-de-test-avec-les-agents-reels-2-agents.yaml)).
tasks:
  - id: 1
    title: "Lire la spec ACP : initialize, session/new, session/prompt, session/update, session/cancel"
    state: closed
    priority: high
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:00.000Z
    updatedAt: 2026-10-29T08:51:00.000Z
    closedAt: 2026-10-29T08:51:00.000Z
  - id: 2
    title: "Lire la partie permissions (session/request_permission) et tool calls"
    state: closed
    priority: high
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:00.000Z
    updatedAt: 2026-10-29T08:51:00.000Z
    closedAt: 2026-10-29T08:51:00.000Z
  - id: 3
    title: "Lire les capacités client fs/* et terminal/*"
    state: closed
    priority: medium
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:00.000Z
    updatedAt: 2026-10-29T08:51:00.000Z
    closedAt: 2026-10-29T08:51:00.000Z
  - id: 4
    title: "Lire available_commands_update (commandes slash) et session/load"
    state: closed
    priority: medium
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:00.000Z
    updatedAt: 2026-10-29T08:51:00.000Z
    closedAt: 2026-10-29T08:51:00.000Z
  - id: 5
    title: "Évaluer les SDK Go existants (maintenance, licence, couverture du protocole)"
    state: closed
    priority: high
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:00.000Z
    updatedAt: 2026-10-29T08:51:00.000Z
    closedAt: 2026-10-29T08:51:00.000Z
  - id: 6
    title: "Capturer une trace JSON-RPC réelle avec Alice (mm -acp)"
    state: closed
    priority: medium
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:00.000Z
    updatedAt: 2026-10-29T08:51:00.000Z
    closedAt: 2026-10-29T08:51:00.000Z
  - id: 7
    title: "Capturer une trace avec Riker (tool call + demande de permission)"
    state: closed
    priority: medium
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:00.000Z
    updatedAt: 2026-10-29T08:51:00.000Z
    closedAt: 2026-10-29T08:51:00.000Z
  - id: 8
    title: "Capturer une trace avec Garfield (commandes/skills exposés)"
    state: closed
    priority: medium
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:00.000Z
    updatedAt: 2026-10-29T08:51:00.000Z
    closedAt: 2026-10-29T08:51:00.000Z
  - id: 9
    title: "Rédiger l'ADR ACP"
    state: closed
    priority: high
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T07:20:00.000Z
    updatedAt: 2026-10-29T08:51:00.000Z
    closedAt: 2026-10-29T08:51:00.000Z
comments:
  - id: 1
    author:
      name: k33g
      email: ph.charriere@gmail.com
    createdAt: 2026-10-29T08:51:00.000Z
    body: |
      ## Résultat — spike terminé

      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).

      - **Protocole v1** : mm v1.0.3 répond `protocolVersion: 1` ; la v2 documentée sur le site est écartée pour l'instant.
      - **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`.
      - **Une session ACP par (channel, agent)**.
      - **Pas de `loadSession` chez mm** → la reprise (#25) devra réinjecter le contexte.
      - **Commandes** = commandes intégrées de mm + skills (Garfield), envoyées comme texte `/idioms …` → validé.
      - **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.
      - **Annulation** : `session/cancel` → `stopReason: cancelled`, vérifié avec Garfield.

      Traces capturées un agent à la fois, via `scripts/agents.sh run`, modèle déchargé après chaque capture.