From 2c3234e84f3718dea4efda399a552463ec411b30 Mon Sep 17 00:00:00 2001 From: Blomios Date: Wed, 9 Sep 2026 19:52:45 +0200 Subject: [PATCH] =?UTF-8?q?chore(tickets):=20sync=20store=20local=20?= =?UTF-8?q?=E2=80=94=20#296=20passage=20qa=20apr=C3=A8s=20QA=20verte=20(ca?= =?UTF-8?q?rnet=20complet=20surface=20unifi=C3=A9e=20Capacit=C3=A9s=20agen?= =?UTF-8?q?t=20+=20classification=20suites=20rouges=20non=20bloquantes;=20?= =?UTF-8?q?index/counter)=20+=20#295=20mise=20=C3=A0=20jour=20carnet/statu?= =?UTF-8?q?t=20par=20Main;=20scripts/=20hors=20p=C3=A9rim=C3=A8tre;=20aucu?= =?UTF-8?q?n=20push?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .ideai/tickets/295/carnet.md | 41 +++++++- .ideai/tickets/295/issue.md | 6 +- .ideai/tickets/296/carnet.md | 195 +++++++++++++++++++++++++++++++++++ .ideai/tickets/296/issue.md | 17 +++ .ideai/tickets/counter.json | 2 +- .ideai/tickets/index.json | 16 ++- 6 files changed, 270 insertions(+), 7 deletions(-) create mode 100644 .ideai/tickets/296/carnet.md create mode 100644 .ideai/tickets/296/issue.md diff --git a/.ideai/tickets/295/carnet.md b/.ideai/tickets/295/carnet.md index 231dc6c7..57abf380 100644 --- a/.ideai/tickets/295/carnet.md +++ b/.ideai/tickets/295/carnet.md @@ -1,8 +1,8 @@ --- issueRef: "#295" -version: 2 +version: 4 updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} -updatedAt: 1788971880464 +updatedAt: 1788972545852 --- ## QA - 2026-09-09 - Validation post-restart chat transcript @@ -154,3 +154,40 @@ Sortie essentielle : Note : Vite signale un chunk minifié > 500 kB ; avertissement existant/non bloquant pour #295. Verdict QA : VERT. + +## Git - 2026-09-09 - Intégration locale + +Cycle Git terminé, sans push. + +- Branche de travail : `fix/295-custom-chat-transcript-after-restart`. +- Commit applicatif : `1b1476d` (`fix(chat)`), 14 fichiers applicatifs. +- Commit ticket : `8482fc5` (`chore(tickets)`), carnet #295 + capture + rattrapage store #293/#294. +- Merge local vers `develop` : `6e4d9eb` (`merge --no-ff`). + +QA reconfirmée par Git avant commit : `git diff --check`, `cargo fmt --all --check`, app-tauri chat/dto, backend, web-server `websocket_chat_attach`, frontend tests ciblés, `npm run build`. + +Réserves Git : aucun push; `develop` local reste en avance sur origin. `scripts/` non suivi reste hors périmètre. + +## AppImage - 2026-09-09 - Build local + +Workflow `build-appimage` exécuté après merge pour produire un artefact installable/testable. + +Commandes : + +```bash +npm --prefix frontend run build +cd crates/app-tauri +mkdir -p /tmp/idea-cargo-home +CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage +``` + +Résultat : + +```text +Finished 1 bundle at: +/home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage +``` + +Artefact : `target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage`, 114M, sha256 `b7c41857977279facef5259c3c3345b8a3430ed007e54d9374f4081e41802137`. + +Remplacement de l'AppImage installée et relance IdeA non automatisés volontairement: cela tuerait la session d'orchestration active. Validation live du scénario UnitySoundTool à faire après installation manuelle de cet artefact. diff --git a/.ideai/tickets/295/issue.md b/.ideai/tickets/295/issue.md index b68da93e..7276c1ca 100644 --- a/.ideai/tickets/295/issue.md +++ b/.ideai/tickets/295/issue.md @@ -2,7 +2,7 @@ id: "bc0fe5e4-8398-4c47-aeca-2c2e93a0d1d3" number: 295 title: "Corriger l’affichage du transcript après redémarrage automatique d’un agent" -status: "qa" +status: "closed" priority: "high" sprint: null links: [] @@ -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: 1788969948217 -updatedAt: 1788971880464 -version: 2 +updatedAt: 1788972545852 +version: 4 --- Bug utilisateur observé sur UnitySoundTool: après redémarrage automatique de l'agent Main, l'agent continue réellement à travailler et les workstates changent, mais aucun message ne s'affiche après le message indiquant que l'agent a bien redémarré. Après changement de projet puis retour, l'affichage se nettoie et ne montre plus que des bandeaux/progress d'agents sollicités par Main en haut de la cellule. Contexte: le redémarrage est survenu après appel à Main UnityPlugin pour recharger un plugin modifié. Capture jointe dans la conversation utilisateur. \ No newline at end of file diff --git a/.ideai/tickets/296/carnet.md b/.ideai/tickets/296/carnet.md new file mode 100644 index 00000000..21d737a0 --- /dev/null +++ b/.ideai/tickets/296/carnet.md @@ -0,0 +1,195 @@ +--- +issueRef: "#296" +version: 2 +updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} +updatedAt: 1788976061895 +--- + +## QA - 2026-09-09 - Validation unified agent capabilities + +Branche vérifiée : `feature/296-unified-agent-capabilities`. + +Périmètre relu : + +- Backend/application : catalogue MCP natif structuré, mutation atomique `SetAgentMcpToolAllowed`, validation metadata plugin `mcpServers[].tools`. +- Backend DTO/Tauri/web-server : DTO additive `catalogue.tools`, request `set_agent_mcp_tool_allowed`, wiring commande Tauri et invoke web-server. +- SDK `sdk/IdeaSDK` : type exporté `IdeAPluginMcpToolMetadata`, validation manifest, script `test:manifest`, doc `docs/manifest.md`. +- Frontend : `AgentPluginCapabilities` devient la surface unifiée Skills/Tools MCP natifs et plugins ; `AgentsPanel` retire l'ancienne assignation skills séparée ; `ProjectPluginsPanel` recentré sur enable/disable ; adapters Tauri/HTTP/mock pour la mutation native. + +Diff vérifié : les 6 fichiers web en échec dans la suite complète ne sont pas modifiés par ce ticket (`git diff --name-only | rg '^(frontend/src/features/web/|frontend/src/features/projects/ProjectsView|frontend/src/features/web/tickets/)'` ne retourne rien). + +Commandes vertes exécutées : + +```bash +git diff --check +cargo fmt --all --check +``` + +Sortie : aucune. + +```bash +cargo test -p application mcp_tool_permissions --lib +cargo test -p application plugin::tests:: --lib +``` + +Sortie essentielle : + +```text +test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 170 filtered out +test result: ok. 37 passed; 0 failed; 0 ignored; 0 measured; 138 filtered out +``` + +```bash +cargo test -p backend mcp_tool_permissions --lib +cargo test -p backend backend_core_exposes_structured_native_mcp_catalogue_with_descriptions --lib +cargo test -p backend dto::tests::project_mcp_tool_permissions_dto_uses_stable_camel_case_contract --lib +cargo check -p backend +cargo check -p application +cargo check -p domain +``` + +Sortie essentielle : + +```text +test dto::tests::project_mcp_tool_permissions_dto_uses_stable_camel_case_contract ... ok +test backend_core_build_tests::backend_core_exposes_structured_native_mcp_catalogue_with_descriptions ... ok +Finished `dev` profile [unoptimized + debuginfo] +``` + +```bash +cargo check -p app-tauri +cargo test -p app-tauri --test dto --test dto_plugins --test dto_agents +``` + +Sortie essentielle : + +```text +Finished `dev` profile [unoptimized + debuginfo] +test result: ok. 33 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out +test result: ok. 30 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out +test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out +``` + +```bash +cargo test -p web-server set_agent_mcp_tool_allowed --lib +cargo check -p web-server +``` + +Sortie essentielle : + +```text +running 0 tests +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 112 filtered out +Finished `dev` profile [unoptimized + debuginfo] +``` + +Note : aucun test web-server ne cible directement le nom `set_agent_mcp_tool_allowed`; la commande n'est donc pas probante en test, mais le routage apparaît dans la suite `web_invoke_routes_permission_commands` de la lib complète, qui passe en exécution série avant les échecs PTY hors périmètre listés plus bas. + +```bash +npm --prefix sdk/IdeaSDK run check +``` + +Sortie essentielle : + +```text +> @idea/plugin-sdk@0.1.0 check +> npm run test:manifest && npm run typecheck:examples && npm run package:hello-plugin + +> @idea/plugin-sdk@0.1.0 test:manifest +> npm run build && node scripts/check-manifest-tools.mjs + +created /home/anthony/Documents/Projects/IdeA/sdk/IdeaSDK/examples/hello-plugin/build/hello-plugin-0.1.0.zip +``` + +```bash +npm test -- ProjectPluginSettings.test.tsx skills.test.tsx permission.test.ts httpInvoker.test.ts +npm test -- agents.test.tsx plugins.test.tsx plugin.test.ts McpToolPermissionsPanel.test.tsx +``` + +Sortie essentielle : + +```text +Test Files 4 passed (4) +Tests 35 passed (35) + +Test Files 4 passed (4) +Tests 65 passed (65) +``` + +```bash +npm run build +npm run build:web +``` + +Sortie essentielle : + +```text +✓ 515 modules transformed. +✓ built in 2.75s + +✓ 515 modules transformed. +✓ built in 2.56s +``` + +Notes : warnings Vite de configuration `esbuild`/`oxc`, warning `HTMLCanvasElement.getContext()` jsdom dans des tests, et warning chunk > 500 kB au build ; non bloquants pour #296. + +Suites rouges exécutées et classification : + +```bash +cargo test -p web-server --lib +``` + +Sortie essentielle parallèle : + +```text +test result: FAILED. 72 passed; 40 failed; 0 ignored; 0 measured; 0 filtered out +premier échec: Failed building the Runtime: Os { code: 24, message: "Too many open files" } +``` + +Classification : échec environnemental par limite de fichiers ouverts sous forte parallélisation, non bloquant pour #296. Relance série : + +```bash +cargo test -p web-server --lib -- --test-threads=1 +``` + +Sortie essentielle : + +```text +test result: FAILED. 105 passed; 7 failed; 0 ignored; 0 measured; 0 filtered out +``` + +Les 7 échecs série sont tous des scénarios terminal/agent launch attendant `terminal.attached` et recevant `error` : + +- `websocket_attach_terminal_replays_scrollback_in_attached_ack` +- `websocket_close_terminal_emits_exited_status_and_releases_session` +- `websocket_launch_agent_different_cell_is_refused_by_singleton_guard` +- `websocket_launch_agent_emits_attached_with_assigned_conversation_id` +- `websocket_launch_agent_reattach_replays_scrollback_without_respawn` +- `websocket_launch_agent_same_cell_is_idempotent_singleton` +- `websocket_open_terminal_emits_attached_with_empty_scrollback` + +Ces 7 tests passent individuellement avec `cargo test -p web-server --lib`. Classification : instabilité/interférence de suite web-server PTY existante, hors périmètre #296. Non bloquant pour #296. + +```bash +npm test +``` + +Sortie essentielle : + +```text +Test Files 6 failed | 120 passed (126) +Tests 32 failed | 1223 passed (1255) +``` + +Classification précise des 32 échecs frontend complets : hors périmètre #296, car ils sont dans des fichiers web non modifiés par ce ticket et ne concernent pas la surface `Capacités de l'agent`, les adapters de capabilities, ni le contrat backend/SDK MCP. + +- `frontend/src/features/projects/ProjectsView.ls7.test.tsx` : 3 échecs LS7 conversation viewer, bouton `open conversation conversation-open-me` introuvable. +- `frontend/src/features/web/WebAgentCell.test.tsx` : 1 échec, le message mobile custom CLI contient `invalid node id` alors que le test attend son masquage. +- `frontend/src/features/web/WebApp.test.tsx` : 3 échecs pairing routing, requête `getByText("Projets")` ambiguë car plusieurs éléments correspondent. +- `frontend/src/features/web/WebDesktopWorkspace.test.tsx` : 1 échec, bouton `Project context` introuvable. +- `frontend/src/features/web/WebMenus.test.tsx` : 8 échecs, attentes d'ancienne navigation/testids (`web-desktop-shell`, `Panneaux : ...`, `Surface ...`) non alignées avec l'UI rendue. +- `frontend/src/features/web/tickets/WebTicketsSprints.test.tsx` : 16 échecs, attentes `Panneaux : ...`/navigation tickets-sprints web non alignées avec l'UI rendue. + +Relance des 6 fichiers web seuls reproduite avec les mêmes 32 échecs (`32 failed | 24 passed`), et relance isolée de `WebAgentCell.test.tsx`, `WebMenus.test.tsx`, `ProjectsView.ls7.test.tsx` confirme que ces familles échouent indépendamment de #296. Non bloquant pour #296. + +Verdict QA : VERT pour le périmètre #296, avec dette de tests web hors périmètre confirmée. diff --git a/.ideai/tickets/296/issue.md b/.ideai/tickets/296/issue.md new file mode 100644 index 00000000..844e9995 --- /dev/null +++ b/.ideai/tickets/296/issue.md @@ -0,0 +1,17 @@ +--- +id: "f6760649-4f0f-41bf-956a-ebc6444c5597" +number: 296 +title: "Unifier l’attribution des skills et tools MCP natifs/plugins aux agents" +status: "qa" +priority: "high" +sprint: null +links: [] +agentRefs: [] +attachments: [] +createdBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} +updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} +createdAt: 1788973181342 +updatedAt: 1788976061895 +version: 2 +--- +Demande utilisateur: pouvoir attribuer un tool MCP de plugin directement depuis l'interface, comme pour les skills, et regrouper l'attribution des skills/tools MCP provenant des plugins au même endroit que les skills et tools MCP natifs d'IdeA. Objectif UX: réduire les surfaces dispersées et rendre l'attribution des capacités agent plus instinctive. \ No newline at end of file diff --git a/.ideai/tickets/counter.json b/.ideai/tickets/counter.json index 7dd3cefb..21ea1074 100644 --- a/.ideai/tickets/counter.json +++ b/.ideai/tickets/counter.json @@ -1,3 +1,3 @@ { - "nextNumber": 296 + "nextNumber": 297 } \ No newline at end of file diff --git a/.ideai/tickets/index.json b/.ideai/tickets/index.json index efe3ab9c..64de70f2 100644 --- a/.ideai/tickets/index.json +++ b/.ideai/tickets/index.json @@ -4042,6 +4042,20 @@ "issueRef": "#295", "path": "295", "title": "Corriger l’affichage du transcript après redémarrage automatique d’un agent", + "status": "closed", + "priority": "high", + "sprint": null, + "assignedAgentIds": [], + "createdBy": { + "kind": "agent", + "agent_id": "a6c6ea12-bfc6-4bdc-8031-324102dfa34d" + }, + "updatedAt": 1788972545852 + }, + { + "issueRef": "#296", + "path": "296", + "title": "Unifier l’attribution des skills et tools MCP natifs/plugins aux agents", "status": "qa", "priority": "high", "sprint": null, @@ -4050,7 +4064,7 @@ "kind": "agent", "agent_id": "a6c6ea12-bfc6-4bdc-8031-324102dfa34d" }, - "updatedAt": 1788971880464 + "updatedAt": 1788976061895 } ] } \ No newline at end of file