Commit Graph

974 Commits

Author SHA1 Message Date
ce2640c9af chore(tickets): sync miroir #183 post-merge (statut QA verte) 2026-08-11 15:47:48 +02:00
54e97f144f merge(slash-commands): route /clean et /help en commandes natives IdeA (#183, QA verte) 2026-08-11 15:46:59 +02:00
06bc8bdf1b chore(tickets): sync miroir #183 (QA verte) + maj carnets #182 2026-08-11 15:46:59 +02:00
5609c6a7a8 fix(slash-commands): route /clean et /help en commandes natives IdeA avant dispatch plugin (#183) 2026-08-11 15:46:59 +02:00
5dc605fe88 chore(ideai): sync contextes agents + miroir tickets #179-#183 2026-08-11 15:36:09 +02:00
5269315421 chore(tickets): sync miroir — #157/#171 + clôture #173 à #178
- counter.json : nextNumber 173 -> 179
- index.json : ajoute #173 à #178 (tous closed)
- dirs tickets/173-178 (carnet + issue)
- carnets/issues #157 #171 mis à jour

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-11 12:29:32 +02:00
ed58afa034 docs(memory): nettoie la mémoire projet obsolète (#178)
- MEMORY.md : index des notes recentré
- remaining-work-idea-agent-control-ide.md : réécriture alignée sur l'app actuelle
- ui-rework-sprint-scoping-contracts.md : mise à jour
- supprime 3 notes périmées : cycle-151-167-155-git-topology, develop-realigned-to-cli-ui-baseline-2026-07-02, ticket4-restart-on-develop-ebd992e

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-11 12:29:32 +02:00
f5aabaacce merge(ui): supprime le popup de reprise par cellule — #177 (QA verte) 2026-08-11 12:25:13 +02:00
215bc16f21 refactor(ui): supprime le popup de reprise par cellule (#177)
Retire la surface utilisateur de reprise par cellule :
- supprime ResumeConversationPopup et son test (resumeConversationPopup.test.tsx)
- débranche l'appel dans LayoutGrid et retire l'export terminals/index
- ajuste les tests dépendants (libellé « Terminé » dans LayoutGrid.chat.test, refitEpoch)
- commentaire affiné dans ResumeProjectPanel

La reprise implicite éventuelle sera rediscutée ultérieurement (objectif immédiat : retirer la surface).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-11 12:24:57 +02:00
30442d05fe merge(agents): ajustements UI/UX conversation et tools MCP — #176 (QA verte) 2026-08-11 11:24:44 +02:00
84fd3547a9 feat(cli): aligne les Final à droite, tools MCP « qui parle à qui », icône animée seulement pendant l'exécution (started→done), supprime le message de fin de tool redondant — #176 (QA verte) 2026-08-11 11:24:44 +02:00
66afd3584a merge(agents): repense la timeline de conversation — tools MCP centrés, progress à droite, tours compacts — #174 (QA verte) 2026-08-11 10:28:12 +02:00
ae3c55a13d feat(cli): repense la timeline de conversation (tools MCP centrés, progress à droite, tours compacts) — #174 (QA verte)
- ToolProgressCard: tools/MCP/délégations centrés, extrait succinct de la demande inter-agent

- ProgressBubble: progress non-outil alignés à droite, clamp 4 lignes (fourLineClamp)

- TurnMarker: marqueurs turn.started/turn.completed compacts et centrés

- Délégations explicites (« Demande à <target> », « Appel inter-agent ») + libellés FR (Terminé)
2026-08-11 10:28:04 +02:00
d9894e0a28 merge(projects): viewer de conversation persistant au changement layout/projet (#172, QA vert) 2026-08-11 09:42:52 +02:00
0c61b912b8 chore(tickets): clôture #172 — sync miroir index/counter
Ajoute l'entrée #172 (fermé) au miroir local, avance le counter à 173. Index porte aussi les flips #157/#171 -> qa (état réel, déjà en place côté IdeA).
2026-08-11 09:42:42 +02:00
a943f0cf8b fix(projects): le viewer de conversation persiste au changement de layout/projet (#172)
Le viewer (CLI custom) se vidait au changement de layout/projet car l'etat viewerConversationId etait reset sur le changement de projet actif. Remplace par un etat viewerConversation {projectId, conversationId} lie a la conversation elle-meme, rendu contre le projectId de la conversation: la conversation persiste tant que la session headless existe, a l'instar de la TUI native.
2026-08-11 09:42:23 +02:00
fa6136745d merge(codex/cli): cycle #157 #171 — dedup cartes tool/MCP + intention pré-MCP live
Backend: agent_message d'intention avant MCP reclassé en Announcement (non avalé comme faux Final); doublon ToolActivity supprimé à la source. Frontend: dédup métier des cartes progress par entité+stage; idea_ask_agent(s) rendus comme Délégation une fois. QA verte ciblée (codex 41, chat_bridge 25, CustomAgentChatView 26, vitest 1133, tsc 0). #167 reste closed. Réserve: E2E AppImage live non rejouée. Rouge préexistant hors scope: mcp_server.rs:777 (38 vs 37 tools).
2026-08-10 18:38:13 +02:00
1beeed8cac chore(tickets): sync miroir #157 #171 — QA verte ciblée (AppImage en attente) 2026-08-10 18:37:32 +02:00
9fe87a8664 fix(cli): déduplication métier des cartes progress + délégations rendues une fois (#157 #171)
appendProgress déduplique par entité (tool/mcp/delegation) + bucket de stage sur l'ensemble du tour, évitant le doublon entre tap live et flux autoritatif. idea_ask_agent/idea_ask_agents rendus comme Délégation. completeRunningProgress marque les entités complétées (settled) pour stopper l'animation. 2 nouveaux tests: ordre pre-MCP avant la première carte MCP, et dédup -> exactement 2 cartes Délégation pour 2 délégations.
2026-08-10 18:37:25 +02:00
d6306bb513 fix(codex): intention pré-MCP reclassée en Announcement + doublon ToolActivity supprimé (#157 #171)
Un agent_message d'intention arrivant avant un tool (ex idea_ask_agent) n'est plus avalé comme faux candidat Final: tamponné puis reclassé en Announcement dès qu'un événement le détrône (helper event_supersedes_pending_final), sur le tap live comme sur le flux autoritatif. Les items reasoning/command n'émettent plus de ToolActivity de compatibilité en doublon du Progress canonique Completed -> supprime les doubles cartes tool/MCP à la source. Tests mod.rs alignés + nouveau cas agent_message_before_tool_becomes_announcement_before_tool_progress.
2026-08-10 18:37:17 +02:00
a8f7184589 chore(tickets): rouverture #58/#93 + création #171 (observabilité conversationnelle)
Miroir local des statuts IdeA : #58 et #93 rouverts, #171 créé (ticket transverse, relie #58 et #93 par relatesTo), compteur bumpé 171 -> 172.
2026-08-10 16:46:24 +02:00
c5a38df2af fix(codex): activité tool/MCP émise en live pendant le tour (#58 #93 #171)
L'adaptateur Codex n'émettait Progress/ToolActivity qu'à item.completed. On capte désormais conversation.item.added / item.started / response.output_item.added (stage Started), item.updated (Delta) et conversation.item.done / response.output_item.done (Completed), en préservant le nom réel de l'outil (name / function.name / function_call.name).

Les outils idea_* sont taggés ReplyProgressSource::IdeaLocal / Kind::Mcp pour les distinguer du tooling provider. Corrige #93 (l'activité MCP idea_ask_agent devient visible avant le Final, nom non corrompu) et #171 (pipeline progress -> UI temps réel) ; base du rendu live #58.

Tests : 3 unitaires (started live, tag IdeaLocal/Mcp, done avec nom) + assertion d'intégration (MCP started tapé avant le Final). QA : verte (live).
2026-08-10 16:46:17 +02:00
47bc2c4fb6 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>
2026-08-10 09:30:39 +02:00
fe7f521f83 chore(repo): ignore les artefacts AppImage (*.AppImage)
Une copie parasite de l'AppImage bâtie peut atterrir à la racine du dépôt
lors de tests manuels (le build légitime vit sous target/, déjà ignoré).
Règle *.AppImage pour ne jamais la committer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-10 09:30:29 +02:00
7ec320cac3 merge(opencode): intègre le streaming progress + bulle MCP CLI custom (#157, QA live vert)
Backend validé en live sur l'AppImage : streaming des progress/activité MCP pendant le tour confirmé fonctionnel (profil OpenCode/GLM). Branche fix/ticket157 (1 commit 836137a3, parent direct de develop).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-10 09:29:45 +02:00
836137a36d fix(opencode): streaming progress + bulle MCP pour la CLI custom (#157)
Override send_with_tap: progress/text/tool désormais projetés en live via LiveTurnProjector (au lieu d'un batch en EOF), en suivant le pattern de codex.rs.

Tagging des tool_use idea_* en Progress Mcp/IdeaLocal/Completed (tool_progress) pour faire apparaître la bulle MCP IdeA locale au moment de l'invocation.

Protection anti-replay de session continuée: hold_until_new_message + buffer pending n'émet que le message courant, jamais l'historique rejoué.

send() batch inchangé: stream_events ne filtre le Final que lorsqu'un tap est présent.
2026-08-09 23:06:41 +02:00
a3d94d4d5e fix(layout): barre supérieure CLI custom cliquable — stacking context du corps de leaf
Le corps d'une leaf (layout-leaf-body) crée désormais son propre stacking context (z-index 0). Les vues CLI custom peuvent comporter des enfants à haut z local (toolbar z-20) qui restaient au-dessus des contrôles de cellule (CELL_Z 5) et captaient les clics ; ils restent désormais sous les contrôles. Test de layering dédié ajouté dans LayoutGrid.cellControlsLayering.test.tsx.
2026-08-06 21:57:48 +02:00
bbcb303061 merge(cli): lot CLI/TUI 2026-08-06 — #168 #169 #170 (QA verte) + #155 (contrat vert, e2e AppImage fichier non-image en attente) 2026-08-06 20:00:51 +02:00
b5b360c266 chore(tickets): QA verte lot CLI/TUI #168/#169/#170 + #155 (contrat vert, e2e AppImage fichier non-image en attente) 2026-08-06 20:00:36 +02:00
8e97da57c9 fix(cli): bouton Send↔Stop #168 + collage clipboard fichier générique #155 2026-08-06 20:00:36 +02:00
292a81ee60 fix(backend): disponibilité session user + hand-off CLI↔TUI sans collision — #169 #170 2026-08-06 20:00:36 +02:00
c50b6c5388 chore(tickets): sync miroir — lot CLI/TUI #155/#168/#169/#170 (+ clôture #151/#167)
(cherry picked from commit d7c4505bacdb9bc03145f12267ae281ad6a35739)
2026-08-06 19:40:46 +02:00
31976d6ed8 fix(cli): collage presse-papiers image/fichier via clipboardData.files — #155 (partiel : logique+tests verts, e2e AppImage clipboard en attente)
(cherry picked from commit 2f39a5ce17b9895e683c0d48f0d9e034e701ed19)
2026-08-06 19:40:46 +02:00
d1e6ae1a22 chore(memory): màj note topologie cycle #151/#167/#155 (issue finale) 2026-08-06 19:16:30 +02:00
0390d18214 chore(tickets): clôture #151 #167 (QA verte) — sync miroir; #155 reste ouvert (e2e AppImage en attente) 2026-08-06 19:14:12 +02:00
9f05ad6aa6 merge(cli): intègre #151 #167 (QA verte) — z-order Cancel + projection live événements avant Final 2026-08-06 19:10:02 +02:00
b45deabe6d fix(cli): z-order Cancel #151 + projection live événements avant Final #167 (+ alignement fixture plugin #165/#166) — QA verte 2026-08-06 19:09:07 +02:00
3d4ea6859e chore(tickets): rouverture #151 #155 + création #167 — sync miroir tickets 2026-08-06 18:50:52 +02:00
e148d3cc5e chore(tickets): clôture #165 #166 + épic #161 — sync miroir tickets
#165 (seam plugin slash-commands) et #166 (dispatch e2e du callback plugin)
fermés après merge de feature/165-plugin-slash-commands dans develop.
L'épic #161 (commandes slash custom CLI) est entièrement terminé : tous ses
sous-tickets (#162 fondation, #163 autocomplete, #164 /profile, #165 seam
plugin) plus le dispatch e2e (#166) sont intégrés.
Sync du miroir local + counter (#166 créé).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 15:47:46 +02:00
f6d2a37a97 merge(plugins): intègre feature/165 — seam #165 + dispatch e2e #166 (QA verte)
Clôture l'épic slash-commands #161 : avec le seam plugin (#165) et le dispatch
end-to-end du callback (#166), tous les sous-tickets natifs + plugin sont livrés.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 15:47:19 +02:00
b0be5f04e4 feat(cli): dispatch du callback plugin slash-command vers le runtime registry — #166 (QA verte)
Boucle le gap end-to-end de #165 : à l'exécution d'une commande slash plugin
depuis le composer custom, l'UI traite l'effet pluginCallback et le dispatche
au PluginRuntimeRegistry pour que la callback du plugin s'exécute réellement.

- runtime/registry: runCommandStrict (échec explicite si handler absent) +
  propagation de la valeur de retour ; élargit les types de retour (unknown).
- runtime/loader: chargement de contributes.slashCommands au registre +
  propagation du retour du handler.
- features/plugins/usePluginMenus: runCommand retourne unknown.
- features/agents/CustomAgentChatView: handler de l'effet pluginCallback ->
  pluginRuntime.registry.runCommandStrict, avec retour utilisateur en cas
  d'échec (commande indisponible / callback absente).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 15:47:04 +02:00
fbaca9d5cc feat(plugins): seam slash-commands contribuées par plugin via callback — #165 (QA verte)
Permet à un plugin de contribuer des commandes slash adossées à une callback,
transitant par le registry/contrat unifié (#162) :

- sdk/IdeaSDK: manifeste contributes.slashCommands (déclaratif) — pointer bumpé.
- domain: source Plugin étendue + effet PluginCallback (la commande ne
  s'exécute pas directement : elle renvoie une référence à la callback du plugin).
- application: registration des commandes plugin dans le registry + exécution
  renvoyant l'effet PluginCallback ; métadonnées UI suffisantes pour l'autocomplete.
- backend + app-tauri: DTO + commandes Tauri listant/invoquant les commandes plugin.
- frontend (contrat): types adapters/domain/ports/mock pour pluginCallback et
  l'invocation avec arguments.

L'exécution effective de la callback côté runtime UI est livrée par #166.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 15:46:52 +02:00
ff7696b724 chore(tickets): clôture #164 (QA verte) — sync miroir tickets
#164 (/profile + reset de session confirmé) fermé après merge de
feature/164-profile-command dans develop. Sync du miroir local.
Reste #165 (seam plugins) pour clore l'épic #161.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 15:12:24 +02:00
4ebf125ec6 merge(cli): intègre feature/164-profile-command — /profile + reset confirmé #164 (QA verte)
Commande /profile first-class avec reset de session explicite et confirmé,
séparée de la palette slash générique. Dernier sous-ticket de l'épic #161
avant #165 (seam plugins).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 15:12:07 +02:00
2cd8df4a4e feat(cli): commande /profile + sélection de profil avec reset de session confirmé — #164 (QA verte)
Ajoute /profile comme commande slash first-class dont la sémantique de reset
de session reste explicite et testable, séparée de la palette générique :

- domain + application: /profile est enregistrée et renvoie un effet
  SlashCommandEffect::ProfileSwitch { session_id }. La commande ne reset pas
  directement : elle délègue l'effet au frontend pour imposer une confirmation.
- frontend (CustomAgentChatView): à l'exécution de /profile, ouverture d'un
  popup de sélection de profil informant que la validation reset la session,
  avec confirmation explicite (confirmedReset) requise avant changeAgentProfile.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 15:12:00 +02:00
a6ba3ff6e1 chore(tickets): clôture #163 (QA verte) — sync miroir tickets
#163 (UX autocomplete slash-commands) fermé après merge de
feature/163-slash-command-autocomplete dans develop. Sync du miroir local.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 15:03:04 +02:00
c42ba63c28 merge(cli): intègre feature/163-slash-command-autocomplete — menu slash-commands #163 (QA verte)
UX d'autocomplétion slash dans le composer custom, consommant le contrat
unifié de #162 (aucune liste codée en dur). Débloque #164 (/profile).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 15:02:49 +02:00
853d8229f2 feat(cli): menu contextuel d'autocomplétion des slash-commands dans le composer — #163 (QA verte)
À la saisie d'un « / » en début de draft (sans espace), ouverture d'un menu
contextuel listant les commandes matchant le préfixe, via le contrat unifié
listSlashCommands — aucune liste codée en dur côté UI. Rafinement incrémental
des suggestions à la frappe, navigation clavier + sélection, exécution par
executeSlashCommand.

- adapters/agent: listSlashCommands(prefix?) + executeSlashCommand (invoke Tauri).
- domain + ports: types SlashCommand / ExecuteSlashCommandResult.
- mock: données de test.
- CustomAgentChatView: détection de préfixe (/ sans espace), fetch avec séquence
  anti-retard, gestion ouverture/active index, navigation clavier, fermeture
  quand le préfixe cesse d'être éligible.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 15:02:40 +02:00
b51011d206 chore(tickets): clôture #162 (QA verte) — sync miroir tickets
#162 (fondation slash-commands) fermé après merge de
feature/162-slash-commands-foundation dans develop. Sync du miroir local.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 14:53:04 +02:00
6c558cc0af merge(slash): intègre feature/162-slash-commands-foundation — fondation commandes slash #162 (QA verte)
Contrat unifié slash-command (domain + application registry + wiring
backend/app-tauri) avec /help et /clean natifs. Débloque #163, #164, #165.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-06 14:52:44 +02:00