diff --git a/.ideai/attachments/agent-chat/7293ea58-3ce4-4280-a6b7-ddaa2f78aaa1/16cf2489-b2c1-4038-8f2f-4d5011775430-clipboard-image-1788969852787.png b/.ideai/attachments/agent-chat/7293ea58-3ce4-4280-a6b7-ddaa2f78aaa1/16cf2489-b2c1-4038-8f2f-4d5011775430-clipboard-image-1788969852787.png new file mode 100644 index 00000000..fd6a1f9c Binary files /dev/null and b/.ideai/attachments/agent-chat/7293ea58-3ce4-4280-a6b7-ddaa2f78aaa1/16cf2489-b2c1-4038-8f2f-4d5011775430-clipboard-image-1788969852787.png differ diff --git a/.ideai/attachments/agent-chat/7293ea58-3ce4-4280-a6b7-ddaa2f78aaa1/16cf2489-b2c1-4038-8f2f-4d5011775430.json b/.ideai/attachments/agent-chat/7293ea58-3ce4-4280-a6b7-ddaa2f78aaa1/16cf2489-b2c1-4038-8f2f-4d5011775430.json new file mode 100644 index 00000000..6492b06d --- /dev/null +++ b/.ideai/attachments/agent-chat/7293ea58-3ce4-4280-a6b7-ddaa2f78aaa1/16cf2489-b2c1-4038-8f2f-4d5011775430.json @@ -0,0 +1,13 @@ +{ + "id": "16cf2489-b2c1-4038-8f2f-4d5011775430", + "projectId": "97b49ac2-8376-4aa3-8ea9-bf3ac81d0023", + "agentId": "a6c6ea12-bfc6-4bdc-8031-324102dfa34d", + "sessionId": "7293ea58-3ce4-4280-a6b7-ddaa2f78aaa1", + "filename": "clipboard-image-1788969852787.png", + "mime": "image/png", + "sizeBytes": 28204, + "sourceKind": "clipboard", + "storagePath": "agent-chat/7293ea58-3ce4-4280-a6b7-ddaa2f78aaa1/16cf2489-b2c1-4038-8f2f-4d5011775430-clipboard-image-1788969852787.png", + "readablePath": "/home/anthony/Documents/Projects/IdeA/.ideai/attachments/agent-chat/7293ea58-3ce4-4280-a6b7-ddaa2f78aaa1/16cf2489-b2c1-4038-8f2f-4d5011775430-clipboard-image-1788969852787.png", + "createdAt": 1788969926078 +} \ No newline at end of file diff --git a/.ideai/tickets/293/carnet.md b/.ideai/tickets/293/carnet.md new file mode 100644 index 00000000..36a7a305 --- /dev/null +++ b/.ideai/tickets/293/carnet.md @@ -0,0 +1,90 @@ +--- +issueRef: "#293" +version: 4 +updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} +updatedAt: 1788962603796 +--- + +## QA - 2026-09-09 - Validation doc-only SDK + +Périmètre vérifié dans le submodule `sdk/IdeaSDK`, branche `feature/293-mcp-tools-exposure-docs`. + +Diff relu : modifications limitées à `docs/activation-context.md`, `docs/manifest.md` et `docs/project-plugin-assignments.md`. + +Commandes exécutées : + +```bash +git status --short --branch +``` + +Sortie : + +```text +## feature/293-mcp-tools-exposure-docs + M docs/activation-context.md + M docs/manifest.md + M docs/project-plugin-assignments.md +``` + +```bash +git diff --stat +``` + +Sortie : + +```text + docs/activation-context.md | 11 ++++++++ + docs/manifest.md | 58 ++++++++++++++++++++++++++++++++++++++ + docs/project-plugin-assignments.md | 13 +++++++++ + 3 files changed, 82 insertions(+) +``` + +```bash +npm run check +``` + +Sortie essentielle : + +```text +> @idea/plugin-sdk@0.1.0 check +> npm run build && npm run typecheck:examples && npm run package:hello-plugin + +> @idea/plugin-sdk@0.1.0 build +> tsc -p tsconfig.json + +> @idea/plugin-sdk@0.1.0 typecheck:examples +> tsc -p examples/hello-plugin/tsconfig.json --noEmit + +> @idea/plugin-sdk@0.1.0 package:hello-plugin +> npm run build && npm run build:hello-plugin && node scripts/package-hello-plugin.mjs + +> @idea/plugin-sdk@0.1.0 build +> tsc -p tsconfig.json + +> @idea/plugin-sdk@0.1.0 build:hello-plugin +> tsc -p examples/hello-plugin/tsconfig.build.json + +created /home/anthony/Documents/Projects/IdeA/sdk/IdeaSDK/examples/hello-plugin/build/hello-plugin-0.1.0.zip +``` + +Lecture QA : la documentation clarifie bien que les tools agent MCP viennent de `contributes.mcpServers` via serveurs MCP stdio et `tools/list`, pas d'une API `activate(ctx)` ; elle couvre `ctx.pluginRoot`, `autoStart: true`, le triplet `pluginId`/`serverId`/`toolName`, et la recommandation skill -> MCP tool pour les scripts packagés. + +Verdict QA : VERT. + +## Git - 2026-09-09 - Intégration locale + +Git a intégré la branche dédiée du submodule SDK : + +- Submodule `sdk/IdeaSDK`: `develop` pointe sur `68fd612` (`merge(sdk): intègre feature/293-mcp-tools-exposure-docs`). +- Commit de feature SDK: `42567a5` (`docs(sdk): contrat d'exposition des tools MCP par les plugins`). +- Repo parent IdeA: `develop` pointe sur `1935e98` (`chore(sdk): pointe le submodule sur develop`). + +Aucune action distante effectuée. État parent restant hors périmètre : fichiers tickets locaux et répertoire `scripts/` déjà visibles/non liés à la doc SDK. + +## Réponse contractuelle pour UnityPlugin #11 + +1. Contrat manifest/runtime : exposer un serveur MCP stdio dans `idea-plugin.json` sous `contributes.mcpServers` avec `id`, `displayName`, `command`, `transport: "stdio"`, idéalement `autoStart: true`; l'agent reçoit les tools via assignation `pluginId`/`serverId`/`toolName` après activation projet et relance agent. +2. Pas de support SDK actuel pour enregistrer des tools MCP directement depuis `activate(ctx)`; seuls les serveurs MCP déclarés/externes sont le contrat agent-callable. +3. `ctx.pluginRoot` est l'API officielle pour résoudre la racine du package installé depuis le runtime. `import.meta.url` peut servir à de la résolution module JS, mais n'est pas le contrat host/plugin. Pour `contributes.mcpServers`, `${pluginRoot}` et `${appDataDir}` sont substitués au démarrage du serveur. +4. Recommandation court terme UnityPlugin : packager un serveur MCP stdio Node/script dans le plugin, le déclarer via `contributes.mcpServers`, assigner les tools aux agents, et modifier les skills pour demander l'appel des tools plutôt que référencer `../../scripts/...` depuis le Markdown. +5. Documentation SDK enrichie dans `manifest.md`, `activation-context.md`, `project-plugin-assignments.md`. diff --git a/.ideai/tickets/293/issue.md b/.ideai/tickets/293/issue.md new file mode 100644 index 00000000..fded8984 --- /dev/null +++ b/.ideai/tickets/293/issue.md @@ -0,0 +1,17 @@ +--- +id: "79792d0c-92a2-499d-8dc3-7b0e65d38dcc" +number: 293 +title: "Clarifier et documenter l’exposition de tools MCP par les plugins IdeA" +status: "closed" +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: 1788962113957 +updatedAt: 1788962603796 +version: 4 +--- +Demande entrante depuis Main du projet UnityPlugin, ticket #11. Clarifier le contrat SDK/manifest/runtime pour exposer des tools MCP depuis un plugin IdeA, vérifier si le SDK supporte les tools fournis directement par le runtime ou seulement des MCP servers déclarés/externes, préciser la résolution du répertoire d’installation plugin, et enrichir IdeaSDK/docs si le point est absent ou ambigu. \ No newline at end of file diff --git a/.ideai/tickets/294/carnet.md b/.ideai/tickets/294/carnet.md new file mode 100644 index 00000000..cce0e736 --- /dev/null +++ b/.ideai/tickets/294/carnet.md @@ -0,0 +1,112 @@ +--- +issueRef: "#294" +version: 4 +updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} +updatedAt: 1788963918771 +--- + +## QA - 2026-09-09 - Validation doc-only SDK + +Périmètre vérifié dans le submodule `sdk/IdeaSDK`, branche `feature/294-node-mcp-launch-docs`. + +Diff relu : modifications limitées à `docs/manifest.md`, `docs/services.md` et `docs/packaging-distribution.md`. + +Commandes exécutées : + +```bash +git status --short --branch +``` + +Sortie : + +```text +## feature/294-node-mcp-launch-docs + M docs/manifest.md + M docs/packaging-distribution.md + M docs/services.md +``` + +```bash +git diff --stat +``` + +Sortie : + +```text + docs/manifest.md | 56 ++++++++++++++++++++++++++++++++++++------ + docs/packaging-distribution.md | 19 ++++++++++++++ + docs/services.md | 9 ++++++- + 3 files changed, 76 insertions(+), 8 deletions(-) +``` + +```bash +rg -n "\\$\\{node\\}|\\$\\{runtimeNode\\}|\\$\\{hostNode\\}|runtime Node|plugin-scoped Node|command: \\\"node\\\"|allowAbsoluteCommand|shell|package-relative|runCommand\\(\\)|\\$\\{pluginRoot\\}|\\$\\{appDataDir\\}" docs/manifest.md docs/services.md docs/packaging-distribution.md +``` + +Sortie essentielle : + +```text +docs/packaging-distribution.md:49:starting the declared `command` directly. IdeA does not inject a shell and does +docs/packaging-distribution.md:50:not provide a plugin-scoped Node.js runtime. +docs/packaging-distribution.md:52:For a packaged MCP server, prefer a package-relative executable such as +docs/packaging-distribution.md:61:or declare an explicit absolute host dependency with `allowAbsoluteCommand: +docs/packaging-distribution.md:62:true`. Avoid relying on a bare `command: "node"` in distributed or multi-harness +docs/services.md:45:as read-only. Unlike manifest-declared MCP servers, `runCommand()` does not +docs/services.md:54: command: "node", +docs/services.md:63:[Manifest](manifest.md), where a bare `command: "node"` is package-relative +docs/manifest.md:313:and no `runtime` field. IdeA does not provide a plugin-scoped Node.js runtime +docs/manifest.md:321:`command` is not shell syntax. IdeA starts it directly and passes `args` +docs/manifest.md:351:Avoid `command: "node"` for a packaged MCP server. With +docs/manifest.md:352:`allowAbsoluteCommand: false`, it is treated as package-relative and resolves to +docs/manifest.md:353:`${pluginRoot}/node`. With `allowAbsoluteCommand: true`, it is passed as a host +``` + +```bash +npm run check +``` + +Sortie essentielle : + +```text +> @idea/plugin-sdk@0.1.0 check +> npm run build && npm run typecheck:examples && npm run package:hello-plugin + +> @idea/plugin-sdk@0.1.0 build +> tsc -p tsconfig.json + +> @idea/plugin-sdk@0.1.0 typecheck:examples +> tsc -p examples/hello-plugin/tsconfig.json --noEmit + +> @idea/plugin-sdk@0.1.0 package:hello-plugin +> npm run build && npm run build:hello-plugin && node scripts/package-hello-plugin.mjs + +> @idea/plugin-sdk@0.1.0 build +> tsc -p tsconfig.json + +> @idea/plugin-sdk@0.1.0 build:hello-plugin +> tsc -p examples/hello-plugin/tsconfig.build.json + +created /home/anthony/Documents/Projects/IdeA/sdk/IdeaSDK/examples/hello-plugin/build/hello-plugin-0.1.0.zip +``` + +Lecture QA : la documentation clarifie bien qu'il n'existe pas de substitution `${node}`, `${runtimeNode}`, `${hostNode}` ni de runtime Node plugin fourni par IdeA ; qu'un `command` MCP est lancé directement sans shell ; qu'un `command` relatif est résolu sous `${pluginRoot}` ; que `command: "node"` devient `${pluginRoot}/node` avec `allowAbsoluteCommand: false` ; qu'une dépendance host absolue requiert `allowAbsoluteCommand: true` ; et que les serveurs JS reproductibles doivent vendor/installer un runtime ou déclarer explicitement une dépendance absolue. + +Verdict QA : VERT. + +## Git - 2026-09-09 - Intégration locale + +Cycle Git terminé, sans push. + +- SDK submodule `sdk/IdeaSDK` : commit feature `b5a3556` (`docs(sdk): clarifie le lancement Node des serveurs MCP plugins`) puis merge local `fdb3a90` sur `develop`. +- Repo parent IdeA : commit `b1c173f` sur `develop` (`chore(sdk): bump du pointeur IdeaSDK pour #294`). +- Vérification reconfirmée par Git : `npm run check` vert. + +Réserves : le submodule SDK est en avance sur origin avec les travaux #293/#294, et le parent `develop` est en avance localement. Aucune action distante effectuée. Fichiers `.ideai/tickets/*` et `scripts/` hors périmètre laissés tels quels. + +## Réponse contractuelle pour UnityPlugin #12 + +1. Pour un serveur MCP stdio JavaScript packagé, le contrat actuel est de lancer un `command` manifest direct, sans shell. Pour ne pas dépendre du PATH shell utilisateur, il faut pointer `command` vers un exécutable reproductible : package-relative sous `${pluginRoot}` ou géré sous `${appDataDir}`. Un `.mjs` avec shebang `#!/usr/bin/env node` reste dépendant du Node visible par le process IdeA, pas du shell interactif. +2. Il n'existe pas de substitution officielle `${node}`, `${runtimeNode}`, `${hostNode}` ni de champ `runtime`. IdeA ne fournit pas actuellement de runtime Node plugin-scoped. +3. `allowAbsoluteCommand: false` rejette les commandes absolues littérales dans le manifest, mais n'interdit pas un `command` qui devient absolu après substitution `${pluginRoot}`/`${appDataDir}`. `command: "bash"` est relatif et devient `${pluginRoot}/bash`; `/bin/bash` exige `allowAbsoluteCommand: true`. Préférer `command: "scripts/wrapper"` pour un wrapper packagé exécutable. +4. Solution compatible aujourd'hui : packager un exécutable MCP autonome ou installer/vendor un runtime sous le package/appData et pointer dessus. À défaut, déclarer explicitement une dépendance host absolue (`/usr/bin/node` ou `/bin/bash`) avec `allowAbsoluteCommand: true`. Un wrapper de résolution Node peut améliorer le diagnostic, mais ne supprime pas la dépendance si aucun runtime n'est fourni. +5. Documentation SDK enrichie dans `docs/manifest.md`, `docs/services.md`, `docs/packaging-distribution.md`. diff --git a/.ideai/tickets/294/issue.md b/.ideai/tickets/294/issue.md new file mode 100644 index 00000000..63e0f180 --- /dev/null +++ b/.ideai/tickets/294/issue.md @@ -0,0 +1,17 @@ +--- +id: "5ec58e6e-29f1-4f22-95bd-c5e24da5bbc3" +number: 294 +title: "Clarifier le lancement de serveurs MCP JavaScript packagés par les plugins IdeA" +status: "closed" +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: 1788963442298 +updatedAt: 1788963918771 +version: 4 +--- +Demande entrante depuis Main UnityPlugin, ticket #12. Après fix #11, le plugin com.idea.unity-developer-tools recharge avec changed=true/restartRequired=false mais le serveur MCP déclaré command:"node" échoue ENOENT. Clarifier le contrat de lancement Node/runtime pour contributes.mcpServers, l'existence ou non d'une substitution ${node}/${runtimeNode}, l'effet de allowAbsoluteCommand, et documenter la solution compatible directory plugin/multi-harness. \ No newline at end of file diff --git a/.ideai/tickets/295/carnet.md b/.ideai/tickets/295/carnet.md new file mode 100644 index 00000000..231dc6c7 --- /dev/null +++ b/.ideai/tickets/295/carnet.md @@ -0,0 +1,156 @@ +--- +issueRef: "#295" +version: 2 +updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} +updatedAt: 1788971880464 +--- + +## QA - 2026-09-09 - Validation post-restart chat transcript + +Branche vérifiée : `fix/295-custom-chat-transcript-after-restart`. + +Diff relu sur les zones déclarées : + +- `crates/app-tauri/src/chat.rs`, `crates/app-tauri/src/commands.rs` +- `crates/app-tauri/tests/chat_bridge.rs`, `crates/app-tauri/tests/dto_chat.rs` +- `crates/backend/src/dto.rs`, `crates/backend/src/stream.rs` +- `crates/web-server/src/lib.rs` +- `frontend/src/adapters/agent.ts`, `frontend/src/adapters/http/*`, `frontend/src/ports/index.ts` +- `frontend/src/features/agents/CustomAgentChatView.tsx`, `CustomAgentChatView.test.tsx` + +Lecture QA : le fix couvre bien le contrat attendu. Côté Tauri, `ChatBridge` conserve/rekey scrollback, sink et propriétaire stable, et `reattach_agent_chat` peut récupérer une session vivante par `projectId`/`agentId` en renvoyant `sessionId` effectif et `conversationId`. Côté backend partagé, le DTO expose l'id effectif et `ReplayOutputBridge::rekey` préserve le flux logique. Côté web-server, `chat.attach` accepte le fallback stable et enregistre le sink sous le nouveau `sessionId`. Côté frontend, la vue réconcilie `agentRestartCompleted`, retente un stale `NOT_FOUND` avec identité stable, applique le scrollback, met à jour les ids effectifs et évite l'écran vide quand une conversation/run/workstate lié existe. + +Commandes exécutées : + +```bash +git status --short --branch +``` + +Sortie essentielle : + +```text +## fix/295-custom-chat-transcript-after-restart + M crates/app-tauri/src/chat.rs + M crates/app-tauri/src/commands.rs + M crates/app-tauri/tests/chat_bridge.rs + M crates/app-tauri/tests/dto_chat.rs + M crates/backend/src/dto.rs + M crates/backend/src/stream.rs + M crates/web-server/src/lib.rs + M frontend/src/adapters/agent.ts + M frontend/src/adapters/http/agentGateway.test.ts + M frontend/src/adapters/http/frames.ts + M frontend/src/adapters/http/streamGateways.ts + M frontend/src/features/agents/CustomAgentChatView.test.tsx + M frontend/src/features/agents/CustomAgentChatView.tsx + M frontend/src/ports/index.ts +``` + +```bash +git diff --check +``` + +Sortie : aucune. + +```bash +cargo fmt --all --check +``` + +Sortie : aucune. + +```bash +cargo test -p app-tauri --test chat_bridge --test dto_chat +``` + +Sortie essentielle : + +```text +Running tests/chat_bridge.rs +running 34 tests +... +test result: ok. 34 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out + +Running tests/dto_chat.rs +running 24 tests +... +test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out +``` + +```bash +cargo check -p app-tauri +``` + +Sortie essentielle : + +```text +Finished `dev` profile [unoptimized + debuginfo] target(s) in 11.14s +``` + +```bash +cargo test -p backend && cargo check -p backend +``` + +Sortie essentielle : + +```text +Running unittests src/lib.rs +running 98 tests +... +test result: ok. 91 passed; 0 failed; 7 ignored; 0 measured; 0 filtered out + +Doc-tests backend +running 0 tests +test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out + +Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.13s +``` + +Note : les 7 tests backend ignorés sont déclarés `ignored` car ils requièrent une permission de bind socket local ; ce n'est pas un échec et ce n'est pas bloquant pour #295. + +```bash +cargo test -p web-server websocket_chat_attach && cargo check -p web-server +``` + +Sortie essentielle : + +```text +running 3 tests +test tests::websocket_chat_attach_emits_chat_attached_and_registers_sink ... ok +test tests::websocket_chat_attach_recovers_stale_session_from_live_project_agent ... ok +test tests::websocket_chat_attach_stale_session_without_fallback_stays_not_found ... ok + +test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 109 filtered out + +Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.13s +``` + +```bash +npm test -- CustomAgentChatView.test.tsx agentGateway.test.ts +``` + +Sortie essentielle : + +```text +Test Files 2 passed (2) +Tests 77 passed (77) +``` + +Note : Vite a émis deux warnings de dépréciation de configuration `esbuild`/`oxc`; non bloquant pour #295. + +```bash +npm run build +``` + +Sortie essentielle : + +```text +> idea-frontend@0.3.0 build +> tsc --noEmit && vite build + +✓ 515 modules transformed. +✓ built in 2.61s +``` + +Note : Vite signale un chunk minifié > 500 kB ; avertissement existant/non bloquant pour #295. + +Verdict QA : VERT. diff --git a/.ideai/tickets/295/issue.md b/.ideai/tickets/295/issue.md new file mode 100644 index 00000000..b68da93e --- /dev/null +++ b/.ideai/tickets/295/issue.md @@ -0,0 +1,17 @@ +--- +id: "bc0fe5e4-8398-4c47-aeca-2c2e93a0d1d3" +number: 295 +title: "Corriger l’affichage du transcript après redémarrage automatique d’un agent" +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: 1788969948217 +updatedAt: 1788971880464 +version: 2 +--- +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/counter.json b/.ideai/tickets/counter.json index c631140c..7dd3cefb 100644 --- a/.ideai/tickets/counter.json +++ b/.ideai/tickets/counter.json @@ -1,3 +1,3 @@ { - "nextNumber": 293 + "nextNumber": 296 } \ No newline at end of file diff --git a/.ideai/tickets/index.json b/.ideai/tickets/index.json index 3b79826f..efe3ab9c 100644 --- a/.ideai/tickets/index.json +++ b/.ideai/tickets/index.json @@ -4009,6 +4009,48 @@ "agent_id": "a6c6ea12-bfc6-4bdc-8031-324102dfa34d" }, "updatedAt": 1788956518862 + }, + { + "issueRef": "#293", + "path": "293", + "title": "Clarifier et documenter l’exposition de tools MCP par les plugins IdeA", + "status": "closed", + "priority": "high", + "sprint": null, + "assignedAgentIds": [], + "createdBy": { + "kind": "agent", + "agent_id": "a6c6ea12-bfc6-4bdc-8031-324102dfa34d" + }, + "updatedAt": 1788962603796 + }, + { + "issueRef": "#294", + "path": "294", + "title": "Clarifier le lancement de serveurs MCP JavaScript packagés par les plugins IdeA", + "status": "closed", + "priority": "high", + "sprint": null, + "assignedAgentIds": [], + "createdBy": { + "kind": "agent", + "agent_id": "a6c6ea12-bfc6-4bdc-8031-324102dfa34d" + }, + "updatedAt": 1788963918771 + }, + { + "issueRef": "#295", + "path": "295", + "title": "Corriger l’affichage du transcript après redémarrage automatique d’un agent", + "status": "qa", + "priority": "high", + "sprint": null, + "assignedAgentIds": [], + "createdBy": { + "kind": "agent", + "agent_id": "a6c6ea12-bfc6-4bdc-8031-324102dfa34d" + }, + "updatedAt": 1788971880464 } ] } \ No newline at end of file