Commit Graph

254 Commits

Author SHA1 Message Date
44dc67722c feat(plugins): soft refresh UI des contributions plugins après install/reload — frontend #279 (PluginRuntimeProvider refreshRuntime sur événements pluginInstalled/pluginReloaded, dispose de l'ancien registry, catalogue listRuntimeContributions, gateway mock; QA verte ré-exécutée: 35/35 tests features/plugins dont nouveau PluginRuntimeProvider.test, typecheck OK) 2026-09-08 13:08:54 +02:00
bf9ec9b358 fix(layout): retirer les affichages Busy et Cancel de la cellule agent au lancement sur une tâche — #277 (retrait badge Busy, bouton Cancel/interruptCurrentTurn et layer z turnActions; états inbox/tâches de fond et composer busy préservés; QA verte ré-exécutée: 25/25 tests LayoutGrid cellControlsLayering/chat) 2026-09-08 12:14:30 +02:00
fc3d124574 feat(cli): historique de messages navigable haut/bas dans la CLI custom + contrôles de cellule visibles pendant busy — persistance localStorage du transcript custom (CustomAgentChatView), layering des contrôles sous l'overlay busy (LayoutGrid), bump pointeur IdeaSDK (docs plugin minimal + hot reload) (QA verte: 65 tests CustomAgentChatView, 25 tests LayoutGrid chat/layering, npm build frontend OK) 2026-09-08 09:39:35 +02:00
cb5196fd69 feat(agents): role orchestrateur du contexte global expose et configurable par agent — isOrchestrator distinct des permissions MCP, DTO update_project_orchestrator (terminologie wire legacy conservee), refus idea_context_update explicite avec writer effectif + orientation idea_context_propose, surface AgentsPanel + adaptateurs frontend — #276 (QA verte: cargo fmt/check, tests cibles application/app-tauri/infrastructure/backend, npm typecheck, 69/69 tests frontend agents/adapters) 2026-09-07 22:49:12 +02:00
f6101a8249 fix(permissions): tools MCP inter-projets exposés (idea_project_*) + contactable agent/template persisté — update_agent_contactable (application/web-server/app-tauri), defaultContactable TemplateEditor save/reopen, groupes MCP 'IdeA inter-projets' avec fallback, permissions agent Contactable — #267 (QA verte) 2026-09-07 18:13:27 +02:00
8496507c09 feat(cross-project): surface UI des permissions contactables — PermissionsPanel et TemplateEditor exposent contactable/default_contactable, alignement httpInvoker — #260 (typecheck + 48 tests verts, QA en attente) 2026-09-07 16:31:22 +02:00
4d34adeab5 fix(templates): les permissions des templates survivent à la sauvegarde/réouverture — create/update_template envoient defaultSystemPermissions (alias DTO backend) et les réponses list/create/update sont normalisées (defaultSystemPermissions/defaultMcpToolPermissions → clés frontend) via templateNormalization — #259 (QA verte) 2026-09-03 14:31:57 +02:00
1aabc3d702 fix(custom-cli): le bouton Stop annule le tour courant sans fermer la session et cascade l'annulation aux agents délégués — stop_agent suit l'arbre des dépendances actives (cancel_current_turn + préemption runtime + enfants d'exécution), TurnCancel tue le process du tour en cours, autorisation requester/sous-arbre sur idea_stop_agent, fixtures DTO runtime_state/node_id alignées — #257 (QA verte) 2026-08-28 22:57:32 +02:00
69129a95ad fix(templates): mcpToolPermissions persisté via create/update_template — désérialisation par alias préférés (mcpToolPermissions > defaultMcpToolPermissions > defaultMcpToolPolicy) sur les DTO Create/UpdateTemplateRequestDto — #244 (QA verte) 2026-08-24 11:46:14 +02:00
4db264ea8c fix(custom-cli): cartes progress/tools visibles dès la 2e sollicitation malgré la réutilisation du progressId — la clé d'upsert borne le progressId au scope du tour au lieu d'un dédup global sur l'historique — #157 (QA verte) 2026-08-24 09:43:20 +02:00
23c47eac96 test(custom-cli): tests à deux callbacks couvrant le streaming progress/outils sur la seconde requête au même agent — #252 (QA verte) 2026-08-24 08:04:49 +02:00
7b7ab5b95a fix(custom-cli): affichage conversation stable au second tour — dédup du prompt et scope de progression par tour, sans reliquats du tour précédent — #251 (QA verte) 2026-08-23 17:51:50 +02:00
55dc7c9dad fix(custom-cli): masquage des contrôles d'overlay persistants sur la custom CLI pendant un tour occupé — #249 (QA verte) 2026-08-23 17:01:02 +02:00
fc923b7860 fix(custom-cli): retrait de l'overlay busy plein panneau — blocage du chat seul — #247 (QA verte)
Les cellules custom CLI ne rendent plus le TargetAnnouncementsOverlay quand
l'agent est busy : le badge busy canonique et le lock du composer (comportement
du chat après envoi d'un message) suffisent, la vue terminal/chat reste visible.
Les cellules TUI natives conservent le voile plein panneau.
2026-08-23 16:35:29 +02:00
a3b1c845ed feat(workstate): panneau Work state encore plus compact — intention tronquée + badge indicateur, ligne summary repliée supprimée — #235 (QA verte) 2026-08-23 15:38:41 +02:00
f1d85dfc5a fix(custom-cli): busy/progress/tools/chatbox bloqués après le premier appel — #245 (QA verte)
Backend : StructuredHumanTurnGuard pour partager la comptabilité busy/FIFO entre chat direct humain (agent_send, web chat.send) et asks inter-agents structurés, avec liveness mark_alive et retrait idempotent du tour. Web-server : tap d'événements sur chat.send pour le scrollback temps réel. Frontend : scoping des clés de progression par tour pour éviter la déduplication/ghosting des progress et outils entre appels.
2026-08-23 13:34:56 +02:00
f952807882 feat(ui): édition templates — nom d'agent par défaut, permissions système et MCP outils — #242
TemplateEditor/TemplatesPanel étendus aux nouveaux champs, projection
useTemplates/adapters/ports, panneau Agents aligné, templatePresentation.ts
extrait. Tests frontend étendus (templates, agents, routage chat WS).
2026-08-23 11:00:04 +02:00
738e15a09b fix(web): le client WS réattache les sessions chat structurées après reconnexion — #241
needsReconnect() couvre désormais les chatSinks et le cycle de reconnexion
renvoie un chat.attach par session active, un échec isolé n'empêchant pas
les autres abonnements de reprendre. Tests ciblés ajoutés.
2026-08-23 10:24:29 +02:00
41a850f2e9 fix(chat): bulles d'erreur étiquetées par type de session structurée — #240
L'erreur « La réponse du modèle n'a pas pu être finalisée. » indique désormais
l'adapter en cause (Session Codex / Claude / OpenCode / HTTP) pour lever
l'ambiguïté constatée sur GameTime entre session Codex et Claude.
2026-08-22 17:27:16 +02:00
cbfdfeb356 fix(chat): le contenu partiel streamé n'est plus masqué par l'erreur terminale de finalisation — #239
assistantFailureText conserve le texte déjà streamé puis classe l'échec
(sans contenu, tronqué, fin non reçue, transitoire) avec conseil de reprise
adapté, au lieu d'écraser la bulle par « Échec — … finalisée. ».
2026-08-22 16:38:55 +02:00
da911d5a9b fix(chat): états vides explicites et reroutage vers le fil actif quand Work state signale un agent busy — #238
ConversationViewer remplace « Aucun tour pour le moment » par un diagnostic
differentié (agent actif sans tour affichable, transcript non synchronisé,
activité sur un autre fil) avec action « Ouvrir le fil actif ». Le panneau
Work state affiche le résumé du fil du ticket actif et ProjectsView/WebWorkspace
câblent onOpenConversation.
2026-08-22 11:30:38 +02:00
8deaa1fd6c fix(cli): store annonces inter-agent borné par projectId avec reset et réhydratation busy au changement de projet — #236 2026-08-22 10:02:41 +02:00
aa85d4dfc8 fix(cli): les annonces MCP/inter-agent restent affichées pendant qu'un agent est busy — #232 2026-08-21 19:40:13 +02:00
8760ade168 feat(workstate): panneau Work state simplifié — état + intitulé simples, détails et background tasks repliés par défaut — #235 2026-08-21 17:52:44 +02:00
aaf628f1ff fix(cli): préserve l'affichage des progress legacy sans progressId via clés d'occurrence dédiées — #236 2026-08-21 17:47:05 +02:00
e20182fa5e feat(web): messages progress et usages MCP dépliables/repliables, repliés par défaut — #233 2026-08-21 16:09:25 +02:00
023d483ba2 fix(web): émet chat.attached pour les sessions agents structurées au lieu de UNSUPPORTED — #229 2026-08-20 15:10:41 +02:00
5fff70d156 fix(web): passe le nodeId réel à la custom CLI au lieu d'un id fabriqué — #225 2026-08-20 13:22:23 +02:00
9a3ca51f6b fix(web): démarre le serveur MCP custom CLI via idea-serve au lieu de node — #224 2026-08-20 12:49:00 +02:00
c547b71d0c feat(web): passage en custom CLI sur version téléphone avec UI mobile adaptée — #224 2026-08-17 17:56:47 +02:00
6a4787e814 fix(cli): normalise les timestamps chat secondes/ms pour l'heure des messages — #221 2026-08-15 22:21:00 +02:00
581063cf96 fix(cli): restaure la conversation au retour de layout via cache conversationId+sessionId — #217 2026-08-15 19:32:56 +02:00
3582b252bb fix(cli): affiche les progress reçus après Final sans rouvrir le tour — #216 2026-08-15 18:58:08 +02:00
86f6c7ebf8 fix(web): route la famille layout dans /api/invoke + fallback UX restauration — #212
Le web-server ne routait pas load_layout (UNKNOWN_COMMAND a l'ouverture
d'un projet web PC). Alignement de l'adapter web sur les contrats Tauri:
load_layout, mutate_layout, list_layouts, create_layout, rename_layout,
delete_layout, set_active_layout. useLayout ne propage plus l'erreur
brute: message utilisateur + fallback singleLeafTree.
2026-08-15 11:40:00 +02:00
79fc3d184d feat(web): panneau Fichiers — navigation projet + téléchargements fichier/dossier ZIP — #211 2026-08-15 10:38:53 +02:00
7f671dff01 feat(web): heure de réception des messages custom CLI — #210 2026-08-15 09:49:46 +02:00
7cdb97ae89 feat(web): parité layout AppImage desktop + switch TUI naïf/CLI custom — #208 2026-08-15 09:08:42 +02:00
a907586f41 feat(web): add mobile task flow shell — #206 2026-08-15 01:31:49 +02:00
3b8ce66e33 feat(web): persist workspace presentation across browser hosts — #205 2026-08-15 01:24:23 +02:00
0d543fb298 feat(web): open project surfaces in browser targets — #204 2026-08-15 01:16:23 +02:00
93dab2d961 test(web): align agent contract expectations — #203 2026-08-15 01:08:30 +02:00
ee2ee037f9 feat(web): add desktop parity shell — #203 2026-08-15 01:03:29 +02:00
2bbe7f63b0 feat(ui): colonne tags de versions à gauche du graph Git — #193 2026-08-14 09:33:05 +02:00
2b2da223d5 feat(chat): resize vertical du composer avec poignée haut-droit (modèle carnet ticket) — #193 2026-08-14 09:33:05 +02:00
4f38e1c506 feat(cli): références d'attachments [file n]/[image n] dans le transcript + zone chat redimensionnable — #188 (QA verte)
- Attachments: projection canonique ChatPromptAttachmentDto (référence [file n]/[image n] par compteur de type, ordre d'import) insérée dans le prompt modèle et transportée par ReplyChunk::UserPrompt (attachmentRefs) ; rendu compact côté CustomAgentChatView.
- Resize: la zone chat (LeafView/LayoutGrid) est redimensionnable, taille actuelle conservée par défaut, préférence locale persistée.
- Tests: commands (projection des refs), dto_chat, chat_bridge, CustomAgentChatView, LayoutGrid.chat.
2026-08-13 13:01:03 +02:00
a3ee2814d6 fix(cli): progress agent_message émis en live + anti-doublon running/done par progressId — #187 (QA verte)
- Codex: les items agent_message sont désormais tapés en live comme progress (Message/Delta) dès item.completed, au lieu d'être bufferisés dans pending_final jusqu'à l'événement tool/MCP suivant.
- Corrélation stable progressId (codex:item:<id>) ajoutée sur ReplyProgress, propagée jusqu'au DTO (ReplyProgressDto.progressId) et au frontend ; le ProgressSettler et la vue procèdent par upsert running -> done au lieu d'empiler des lignes dupliquées.
- Tests: chat_bridge (settler par progressId), dto_chat, session codex, CustomAgentChatView (upsert par progressId).
2026-08-13 12:45:32 +02:00
803e9de093 fix(runtime): cancel en cascade des tasks filles — stop agent / cancel parent (#200, QA verte)
Cancel transitif, idempotent et ownership-aware sur le graphe parent→enfants des background tasks:

- domain/background_task + ports: modèle parent/enfant (parent_task_id, rejet du self-parent), index children_by_parent, traversal des descendants en largeur.

- application/background + infrastructure/store: cascade cancel (annule les descendants running/open, laisse les terminaux), idempotente face aux double-cancel et ordres de terminaison non déterministes; respect de l'ownership (parent_task_link).

- orchestrator/service: stop agent → cascade cancel des tasks lancées par cet agent (relatesTo #196); cancel task parent → cascade de ses sous-tasks (dependsOn #199). Refactor unifiant le chemin de cancel, sans sémantique #196/#199 regreffée (tests hérités verts).

- frontend: projection parentTaskId (workstate normalization/domain/services).

Tests QA verts: domain background_task, application background_task_cancel (cascades_background_task_subtree, cascades_to_running_child, cascades_to_open_descendants_and_leaves_terminal_child, parent_task_link_roundtrips_and_rejects_self_parent), orchestrator_service, workstate_actions, workstate.test.tsx.
2026-08-12 16:02:17 +02:00
b167226179 feat(ui): LED projet — exploite les signaux d'interaction CLI custom (#198, QA verte)
Projette l'état d'interaction agent→projet sur la LED via des signaux explicites de la CLI custom:

- projectCliInteractionActivity: modèle d'activité d'interaction (InteractionStarted/Finished/Stopped, interactionId/seq, version).

- useProjectActivity + ProjectTabs: projection live « interaction en cours » → LED, retour immédiat à l'état attendu au stop ou à la fin réelle de l'échange (pas d'état collant).

- CustomAgentChatView: émet les signaux d'interaction CLI custom (début d'envoi, fin de tour, stop) consommés par l'activité projet — sans dériver la LED du texte streamé ou d'heuristiques.

Tout côté frontend: aucun signal runtime manquant (les signaux proviennent de la CLI custom).

Tests QA verts: projectActivity.test.ts, ProjectTabs.test.tsx (+ useProjectActivity.test.tsx, CustomAgentChatView.test.tsx).
2026-08-12 15:44:30 +02:00
cdb395307b feat(ui): cellule agent stoppé — état explicite + reopen from scratch (#197, QA verte)
Surface UI du LayoutGrid pour un agent de cellule stoppé:

- Affichage d'un état explicite quand runtimeState vaut « stopped » ou « failedStart », avec actions refresh / reopen from scratch (freshStart) et état restarting pendant la relance.

- theme.css: styles .stopped-agent-cell (boutons primary/secondary, états disabled).

Consomme le contrat runtime issu de #196 (AgentRuntimeState stopped/failedStart, freshStart) déjà présent dans develop; aucune modification runtime ici.

Tests QA verts: LayoutGrid.test.tsx, LayoutGrid.chat.test.tsx (rejoué aussi: agent_lifecycle launch_fresh_start_ignores_existing_conversation_id_and_mints_new_one).
2026-08-12 15:34:53 +02:00
46103397de fix(runtime): cancel de background task immédiat et fiable depuis le workstate (#199, QA verte)
Transforme l'annulation d'une background task en contrat immédiat, observable et non-best-effort:

- domain/background_task: états Cancelling/Cancelled/CancelFailed et transitions idempotentes; un kill PTY qui échoue est surfacé en CancelFailed plutôt qu'en succès silencieux.

- infrastructure/runner + store: cancel effectif de la task ciblée, reconcile marque Cancelling même sans live handle, et départage CancelFailed des tâches pending au boot.

- application/background + workstate + orchestrator/wake: chemin de cancel initié depuis le workstate, projection synchronisée de l'état (pas d'attente d'un cycle ambigu).

- frontend: projection workstate de l'état cancelled/cancelling/cancelFailed (cancellingRow/cancelFailedRow/cancelButtons), normalization et services.

Tests QA verts: background_task_cancel, background_task_runner cancel_wins_even_if_output_is_still_available, background_task_store reconcile_marks_cancelling_without_live_handle_cancel_failed_and_pending, workstate.test.tsx.
2026-08-12 15:18:38 +02:00