chore(tickets): sync miroir #157 (backend live vert, rouvert pour delta frontend) + #155 (rouvert inProgress)
- #157: status closed→inProgress ; description régressée au cas profil OpenCode/GLM
(aucun progress ni bulle MCP pendant le tour) ; carnet itération 2 (cause racine
send_with_tap + tagging MCP, correctif livré au commit 836137a3, QA backend vert
puis validé en live sur AppImage).
- #155: status qa→inProgress (collage clipboard custom CLI toujours KO au runtime,
requalifié fichier/image via le pipeline d'attachments existant).
- mémoire: note projet opencode-streaming-progress-mcp-surfacing-157 + index.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -1,8 +1,8 @@
|
||||
---
|
||||
issueRef: "#155"
|
||||
version: 12
|
||||
version: 13
|
||||
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
updatedAt: 1786039145667
|
||||
updatedAt: 1786346556578
|
||||
---
|
||||
## 2026-08-06 — Reopened from user validation on AppImage
|
||||
- User reports that clipboard paste in the custom CLI chat still does not work in practice.
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
id: "620bc08f-835c-483c-a9f1-59690ebf8ab5"
|
||||
number: 155
|
||||
title: "Custom chat: paste image/fichier depuis le clipboard dans le composer"
|
||||
status: "qa"
|
||||
status: "inProgress"
|
||||
priority: "medium"
|
||||
sprint: null
|
||||
links: [{"target":"#154","kind":"dependsOn"}]
|
||||
@ -11,7 +11,7 @@ attachments: []
|
||||
createdBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
createdAt: 1785964740363
|
||||
updatedAt: 1786039145667
|
||||
version: 12
|
||||
updatedAt: 1786346556578
|
||||
version: 13
|
||||
---
|
||||
Demande utilisateur requalifiée le 2026-08-06: la custom CLI ne permet toujours pas de coller un fichier dans la barre de chat, comme dans une TUI native Claude Code ou Codex. Le scope ne doit pas rester limité au seul collage d'image: il faut couvrir au minimum les fichiers/images exposés par le clipboard et les convertir en attachments utilisables dans le composer custom, via le pipeline d'attachments existant.
|
||||
@ -1,9 +1,47 @@
|
||||
---
|
||||
issueRef: "#157"
|
||||
version: 12
|
||||
updatedBy: {"kind":"agent","agent_id":"1ff94b51-3e17-4a39-8543-7715d1ff0f80"}
|
||||
updatedAt: 1786019394609
|
||||
version: 16
|
||||
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
updatedAt: 1786346556578
|
||||
---
|
||||
# Journal d'itération (le plus récent en haut)
|
||||
|
||||
## Itération 2 — 2026-08-09 — Régression profil OpenCode/GLM (pas de progress, pas de bulle MCP)
|
||||
|
||||
**Remontée user** : sur la CLI custom avec un profil OpenCode/GLM, aucun message de progress pendant le traitement de l'agent, et aucune bulle d'appel de tool MCP quand l'agent invoque un outil.
|
||||
|
||||
### Cause racine (vérifiée en source opencode v1.17.18)
|
||||
|
||||
J'ai lu `packages/opencode/src/cli/cmd/run.ts` (sst/opencode). `opencode run --format json` émet chaque événement JSONL **en temps réel** sur stdout (`{type, timestamp, sessionID, ...data}`). Types émis : `step_start`, `step_finish`, `text` (part textuelle finalisée, pas un delta token), `tool_use` (**seulement à** `part.state.status=completed|error`, pas de start), `reasoning`, `error`. Le parser IdeA `opencode.rs::parse_jsonl_record` reconnaît déjà ces types correctement — **le parser n'était pas cassé**.
|
||||
|
||||
Les deux vraies causes :
|
||||
1. `OpenCodeSession` ne surchargeait **pas** `send_with_tap` (défaut `domain/ports.rs:1380` ignore le tap). Son `send` bufferisait TOUT le stdout jusqu'à l'EOF puis parsait en bloc → le tap live (`commands.rs:2301`) recevait zéro event pendant le tour (silence total), tout arrivait en burst à la fin.
|
||||
2. La bulle `kind:Mcp`/`source:IdeaLocal` n'était émise que par `openai_compat.rs::apply_tool_calls` (où IdeA orchestre les outils). Pour OpenCode, les outils tournent **dans** opencode ; les `tool_use` étaient taggés `kind:Tool` générique.
|
||||
|
||||
### Correctif livré (backend-only)
|
||||
|
||||
Branche `fix/ticket157-opencode-progress-mcp-surfacing`, commit `836137a3` (base `develop` `a3d94d4d`). Fichier unique : `crates/infrastructure/src/session/opencode.rs` (+408/−69).
|
||||
|
||||
- **`send_with_tap` override** (pattern codex.rs/claude.rs) : lecture stdout ligne par ligne, projection live au tap des events non-terminaux (Progress/TextDelta/ToolActivity/Heartbeat), Final assemblé à la fin (jamais envoyé au tap). `send()` sans tap reste batch (inchangé).
|
||||
- **Tagging MCP** : `tool_use` préfixé `idea_` → `ReplyProgress{source:IdeaLocal, kind:Mcp, stage:Completed, tool_name}` (remplace la Progress Tool provider-native, pas de double card). Les autres outils restent `ProviderNative/Tool`.
|
||||
- **Protection replay** : sur session continuée (`--session`), le premier messageID est tamponné puis supprimé si un nouveau messageID arrive (évite de projeter l'historique rejoué).
|
||||
|
||||
### Tests & QA
|
||||
|
||||
- 3 nouveaux tests : `parse_jsonl_turn_tags_idea_tools_as_mcp_progress`, `send_with_tap_emits_progress_live_before_final_and_tags_idea_tool_as_mcp`, `send_with_tap_does_not_replay_previous_message_into_live_stream`.
|
||||
- `cargo test -p infrastructure session::opencode` → **20 passed**. `cargo check -p infrastructure -p application` → OK. `cargo fmt --check` → OK.
|
||||
- QA verdict **VERT** : ciblé conforme au contrat, pas de régression. Les échecs larges (`mcp_server tools_list...` 38 vs 37 ; `orchestrator_service` 39 hangs/spawn) reproduisent **à l'identique sur la base `a3d94d4d`** → pré-existants, hors périmètre du fix.
|
||||
|
||||
### Restes / points pour les prochaines itérations
|
||||
|
||||
- **Réserve replay (tradeoff UX)** : sur une session continuée avec un **seul** messageID et aucun replay observable, le tap peut rester muet jusqu'à l'EOF (`hold_until_new_message`) pour éviter d'afficher un historique non rétractable. Cas frais = streaming immédiat. À retravailler si la reprise de session devient prioritaire.
|
||||
- **`reasoning` non mappé** (dette) : opencode émet des events `reasoning` (thinking) que le parser ignore (`Ignored`). Hors périmètre de ce fix ; ticket dédié à créer si on veut afficher le thinking OpenCode.
|
||||
- **Granularité honnête** : opencode JSON ne donne ni deltas de tokens ni tool-start — seulement step_start/step_finish + text(finalisé) + tool_use(completed). Le fix reste honnête (pas de faux stream simulé), conforme aux critères d'acceptation sur profils pauvres.
|
||||
- **Vérif live en attente** : build AppImage lancé (artefact `target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage`). Le user doit remplacer l'AppImage installée + relancer IdeA pour valider en live (⚠️ relance = tue l'orchestrateur courant). Branche non mergée dans `develop` en attente de vérif live verte (Git ferait le fast-forward ensuite).
|
||||
- **Frontend** : aucun changement requis (`CustomAgentChatView`/`ProgressBubble` gèrent déjà `Progress{Tool|Mcp}` + délégations). Si le rendu live révèle un souci visuel (spinner qui ne s'arrête pas — cf. description initiale du ticket), ce sera un delta frontend ciblé.
|
||||
|
||||
---
|
||||
|
||||
# Objectif
|
||||
|
||||
Améliorer la CLI custom / chat agent pour afficher **un maximum de progress intermédiaires réellement disponibles** au lieu d'un silence jusqu'au `Final`, avec une UX différenciée pour :
|
||||
|
||||
@ -2,16 +2,16 @@
|
||||
id: "d49aaae5-0d03-43fe-a51c-2ab5e921045c"
|
||||
number: 157
|
||||
title: "CLI custom: surface all available agent progress, MCP activity, and inter-agent delegation flow"
|
||||
status: "closed"
|
||||
status: "inProgress"
|
||||
priority: "high"
|
||||
sprint: null
|
||||
links: [{"target":"#156","kind":"dependsOn"}]
|
||||
agentRefs: [{"agentId":"8f7da528-58df-4315-97e9-0562230ecc19","role":"assigned"}]
|
||||
attachments: []
|
||||
createdBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
updatedBy: {"kind":"agent","agent_id":"1ff94b51-3e17-4a39-8543-7715d1ff0f80"}
|
||||
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
createdAt: 1785965383914
|
||||
updatedAt: 1786019394609
|
||||
version: 12
|
||||
updatedAt: 1786346556578
|
||||
version: 16
|
||||
---
|
||||
Suivi UX sur la custom CLI après livraison du flux Progress/MCP/inter-agent: l'affichage des messages de Progress est jugé correct, mais l'animation du rond/spinner affichée à côté du libellé Progress doit disparaître une fois l'événement terminé. Attendu: à la transition vers l'état terminal (done), la ligne Progress conserve éventuellement son contenu statique utile, mais n'affiche plus d'animation de chargement.
|
||||
Régression/remontée utilisateur (profil OpenCode/GLM) sur la CLI custom : aucun message de progress ne s'affiche pendant le traitement de l'agent, et aucune bulle/carte d'appel de tool MCP n'apparaît quand l'agent invoque un outil MCP. Périmètre initial (surfacer progress + activité MCP + délégations inter-agent) à valider à nouveau sur le profil OpenCode.
|
||||
@ -2025,7 +2025,7 @@
|
||||
"issueRef": "#155",
|
||||
"path": "155",
|
||||
"title": "Custom chat: paste image/fichier depuis le clipboard dans le composer",
|
||||
"status": "qa",
|
||||
"status": "inProgress",
|
||||
"priority": "medium",
|
||||
"sprint": null,
|
||||
"assignedAgentIds": [
|
||||
@ -2036,7 +2036,7 @@
|
||||
"kind": "agent",
|
||||
"agent_id": "a6c6ea12-bfc6-4bdc-8031-324102dfa34d"
|
||||
},
|
||||
"updatedAt": 1786039145667
|
||||
"updatedAt": 1786346556578
|
||||
},
|
||||
{
|
||||
"issueRef": "#156",
|
||||
@ -2058,7 +2058,7 @@
|
||||
"issueRef": "#157",
|
||||
"path": "157",
|
||||
"title": "CLI custom: surface all available agent progress, MCP activity, and inter-agent delegation flow",
|
||||
"status": "closed",
|
||||
"status": "inProgress",
|
||||
"priority": "high",
|
||||
"sprint": null,
|
||||
"assignedAgentIds": [
|
||||
@ -2068,7 +2068,7 @@
|
||||
"kind": "agent",
|
||||
"agent_id": "a6c6ea12-bfc6-4bdc-8031-324102dfa34d"
|
||||
},
|
||||
"updatedAt": 1786019394609
|
||||
"updatedAt": 1786346556578
|
||||
},
|
||||
{
|
||||
"issueRef": "#158",
|
||||
|
||||
Reference in New Issue
Block a user