70998a30bc
merge(frontend): fix #370 — le changement d'onglet préserve la conversation active, reprise réservée à la sélection explicite (QA verte)
2026-09-17 15:23:12 +02:00
db7e3d3dce
fix(frontend): le changement d'onglet ne déclenche plus de reprise de la conversation active — au remontage d'une cellule avec conversationId, réattache d'abord la session structurée vivante (sessionId du cache de conversation, puis registre listLiveAgents/attachLiveAgent avec rebinding de node) via reattachStructuredSession preserveViewOnEmptyScrollback avant tout chargement d'historique durable ; le transcript persisté (conversation.readPage) n'est consulté qu'en l'absence de runtime live et la bannière « Conversation reprise » reste réservée à la reprise explicite depuis le menu Conversations — éviction du cache de session morte (chatSessionViewCache.delete) réconciliée avec le cache de conversation pour ne pas rejouer un transcript obsolète ; tests: réattach live au remontage sans readPage ni bannière ( #370 ), retour depuis une vue non conversationnelle = replay live complet (second reattach, pas de readPage, pas de bannière) — #370 (QA verte: npm ci, npm run typecheck, npx vitest run src/features/agents/CustomAgentChatView.test.tsx src/features/layout/LayoutGrid.chat.test.tsx, git diff --check ; fichiers .ideai/* et scripts/ hors périmètre ; aucun push)
2026-09-17 15:23:04 +02:00
f849360444
chore(appimage): rebuild AppImage develop — commit dédié v0.75.0 #367 #368 #369 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 121096696 octets, mode 755, sha256 001f8857015c7e5cf078cc3a5223ce6f4224724d51d43cfc43fa7fe9dbc8deee, produit depuis develop @ 99192925 incluant les merges du feature batch #367 #368 — groupes repliables par plugin pour skills et tools MCP, bouton Joindre harmonisé avec Envoyer, 59817d2b/5d48a39b, et du fix #369 — libère l'état busy et le ticket médiatisé avant le Final visible, 99192925/2d95e20d ; commandes: npm --prefix frontend run build puis depuis crates/app-tauri CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage ; build OK, warning Vite chunk > 500k habituel ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.74.0 -> v0.75.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitignoré et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée — #367 : repliage/dépliage skills et tools MCP par plugin avec plugins non loadés repliés par défaut, #368 : bouton Joindre au même format visuel qu'Envoyer y compris en busy et cellules étroites 600/360/240, #369 : Final détecté immédiatement (LED projet repasse neutre, queue drainée automatiquement vers le message suivant) sans régression #357/#362/#363/#366 ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
2026-09-17 09:51:00 +02:00
991929256b
merge(application,backend,web-server,app-tauri,frontend): fix #369 — libère l'état busy avant le Final visible (QA verte)
2026-09-17 09:46:31 +02:00
59817d2b69
merge(frontend): feature #367 #368 — groupes repliables par plugin et bouton Joindre harmonisé (QA verte)
2026-09-17 09:46:31 +02:00
2d95e20d91
fix(application,backend,web-server,app-tauri,frontend): libère l'état busy et le ticket médiatisé avant le Final visible — web-server ws_send_chat: guard.finish() sur Complete et Failed avant l'émission des frames terminales client, et sur l'absence d'ack, pour qu'un read workstate déclenché par Final/Error ne puisse plus voir le tour comme Busy ; app-tauri agent_send: dès la transition Complete, retire le ticket médiatisé exact (guard.finish) et termine le tour structuré (finish_turn) avant send_output_settled, opérations idempotentes et clôturées contre un successeur, épilogue conservé en backstop drop/error — corrige LED projet orange persistante et queue non drainée après Final ; frontend CustomAgentChatView: terminalWorkStatePending maintient effectiveBusy jusqu'à la résolution du refresh workstate post-Final au lieu de forcer busy=false et stopTerminalOverride (plus d'état busy fantôme ni de Stop incorrectement neutralisé) — #369 (QA verte: cargo fmt --all --check OK, cargo test application structured OK, web-server websocket_chat_send_releases_busy_before_visible_final et websocket_chat_send --test-threads=1 OK, app-tauri chat_bridge 36 tests OK, application drain_with_readiness_lot1/session_limit_t4/send_blocking_d1/cancel_agent_chat OK, backend human_turn OK, npm test CustomAgentChatView 92 OK, npm run build OK)
2026-09-17 09:46:21 +02:00
5d48a39b18
feat(frontend): groupes repliables par plugin pour skills et tools MCP, bouton Joindre harmonisé avec Envoyer — nouveau composant PluginContributionGroup (en-tête cliquable aria-expanded/aria-controls, badge Chargé/Non chargé, compteur de contributions, replié par défaut pour les plugins non loadés, dépliage forcé pendant la recherche) adopté par SkillsPanel et McpToolPermissionsPanel avec déduplication des plugins — #367 ; bouton Joindre du chat aligné sur le format d'Envoyer (size md, variante secondary, état loading « Ajout… », aria-label dédié, conteneur custom-agent-chat-composer-actions avec data-busy, Stop aligné md, container queries 419.99px en colonne et 279.99px wrap puis pleine largeur en busy) — #368 (QA verte: npm test ciblé ProjectPluginSettings + skills + McpToolPermissionsPanel + CustomAgentChatView + visibleSourceScan 5 fichiers 152 tests OK, Firefox headless layout 600/360/240 et busy 240 PASS, npm run build OK, git diff --check OK)
2026-09-17 09:46:21 +02:00
4c86f9bb6f
chore(appimage): rebuild AppImage develop — commit dédié v0.74.0 #365 #366 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 121108984 octets, mode 755, sha256 00897a3ece76d6100c0f1ebac38eebb0ef6a27063135db154a122ceba2831028, produit depuis develop @ 48870ae1 incluant les merges du fix #365 — repositionne le bouton Conversations de CustomAgentChatView hors des contrôles de choix d'agents, 5afb2b1c/db121bbe, et du fix #366 — restaure l'historique durable au retour sur une conversation existante sans session live, e118a34c ; commandes: npm --prefix frontend run build puis depuis crates/app-tauri CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage ; build OK, warning Vite chunk > 500k habituel ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.73.0 -> v0.74.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitignoré et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée — #365 : bouton Conversations visible et non chevauchant avec les contrôles de choix d'agents aux largeurs 600/360/240, #366 : retour projet/cellule restaure l'historique durable sans fausse « Nouvelle conversation », bannière annonces absente sans session rattachée, absence de régression sur /clean, reprise via menu Conversations et #357/#362/#363 ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
2026-09-17 08:56:09 +02:00
48870ae1a9
merge(frontend): fix #366 — restaure l'historique durable au retour sur une conversation existante sans session live (QA verte)
2026-09-17 08:51:34 +02:00
e118a34c64
fix(frontend): restaure l'historique durable au retour sur une conversation existante sans session live — freshOnOpen réservé au reset explicite (retiré de LayoutGrid et WebAgentCell), conversationId persistant de la cellule réutilisé au remontage ordinaire avec chargement de l'historique via conversation.readPage (machine savedConversationLoadState idle/loading/loaded/error/notFound, pagination ancrée conservée, écran vide faussement « Nouvelle conversation » éliminé), bannière d'annonces live et fallback de délégation masqués sans session réellement rattachée (liveSessionAttached), /clean et le reset ouvrent explicitement une nouvelle conversation (conversationId: null), erreurs de chargement traitées avec réessai et bouton « Nouvelle conversation » à la place du déliage, composer et pièces jointes désactivés en échec de chargement — #366 (QA verte: npm test ciblé CustomAgentChatView + LayoutGrid.chat + WebAgentCell 3 fichiers 119 tests OK, npm run build OK, git diff --check OK; warning jsdom/canvas connu non bloquant, npm audit: vulnérabilités préexistantes non liées)
2026-09-17 08:51:26 +02:00
5afb2b1c65
merge(frontend): fix #365 — repositionne le bouton Conversations de CustomAgentChatView hors des contrôles de choix d'agents (QA verte)
2026-09-17 08:29:24 +02:00
db121bbe23
fix(frontend): repositionne le bouton Conversations de CustomAgentChatView hors des contrôles de choix d'agents — header custom-agent-chat-header repoussé sous la bande des contrôles de cellule (padding haut 2.25rem) dans le contexte d'empilement local du chat, menu Conversations borné à la cellule (droite 22rem, max-width 100cqw), repli en colonne aligné à gauche sous 419.99px puis cible pleine largeur sous 279.99px via container queries, testids custom-agent-chat-header/identity/conversations/menu, tests de non-chevauchement à 600/360/240px et garde-fous dans LayoutGrid.cellControlsLayering — #365 (QA verte: npm test ciblé CustomAgentChatView + LayoutGrid.cellControlsLayering 2 fichiers 106 tests OK, Firefox headless layout check 600/360/240 PASS, npm run build OK, git diff --check OK; npm audit: 9 vulnérabilités préexistantes non liées)
2026-09-17 08:29:11 +02:00
6a1a74621a
chore(appimage): rebuild AppImage develop — commit dédié v0.73.0 #363 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 121100792 octets, mode 755, sha256 adf1ef1ae5ff3f56068077c84309e09cd53126bf0eaab2cc267be83b48891525, produit depuis develop @ 72f8d37e incluant le merge de la feature #363 — persistance et reprise des conversations de CLI custom par agent: index durable <projet>/.ideai/conversations/custom-index.json borné aux conversations non vides par agent, port CustomConversationIndex + adaptateur FsCustomConversationIndex, persistence des messages utilisateur et finals agent dans le log de conversation existant, DTO/commandes app-tauri et routes web-server lister/rouvrir, CustomAgentChatView: ouverture par défaut sur une nouvelle conversation, menu reprise d'une conversation passée, replay historique user+finals, /clean ouvre une nouvelle conversation, injection historique différée au premier nouveau message après reprise, 943c4525, QA verte) ; commandes: npm --prefix frontend run build puis depuis crates/app-tauri CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage ; build OK, warning Vite chunk > 500k habituel (frontend et beforeBuildCommand dist/dist-web) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.72.0 -> v0.73.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitignoré et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée — reprise d'une conversation passée d'une CLI custom par agent (replay user+finals), nouveaux messages ajoutés après reprise, /clean ouvre une nouvelle conversation, aucune entrée créée pour une conversation vide, absence de régression sur les conversations non persistées et sur #357/#362 ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
2026-09-17 07:54:40 +02:00
72f8d37ec3
merge(domain,application,infrastructure,backend,web-server,app-tauri,frontend): feature #363 — persistance et reprise des conversations de CLI custom par agent (QA verte)
2026-09-16 23:20:38 +02:00
943c4525d7
feat(domain,application,infrastructure,backend,web-server,app-tauri,frontend): persistance et reprise des conversations de CLI custom par agent — index durable <projet>/.ideai/conversations/custom-index.json borné aux conversations non vides par agent (conversation_id logique, titre dérivé de la première invite, created/updated_at_ms), port CustomConversationIndex + adaptateur FsCustomConversationIndex, persistence des messages utilisateur et finals agent dans le log de conversation existant, DTO/commandes app-tauri et routes web-server pour lister/rouvrir, CustomAgentChatView: ouverture par défaut sur une nouvelle conversation, menu reprise d'une conversation passée ou nouvelle conversation, replay de l'historique sauvegardé (user+finals) à la réouverture, affichage normal des nouveaux messages après reprise, /clean ouvre une nouvelle conversation, aucune entrée créée si la conversation courante est vide, injection de l'historique dans le contexte agent différée au premier nouveau message après reprise — #363 (QA verte: git diff --check, cargo fmt --all -- --check, cargo tests ciblés infrastructure/application/web-server/app-tauri/backend, npm run typecheck, tests frontend ciblés et CustomAgentChatView, npm run build)
2026-09-16 23:20:31 +02:00
83b78f438f
chore(appimage): rebuild AppImage develop — commit dédié v0.72.0 #362 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 121055736 octets, mode 755, sha256 ec367ead4eb9bc60f93cb17cea98035910c34a52c62e8f8ff59feac7d8b8713a, produit depuis develop @ 41a32d82 incluant le merge du fix #362 — libère l'état busy après Final et draine la queue des messages agents: Final/Error terminent immédiatement le pump structuré, release busy/FIFO idempotente bornée au ticket, cleanup tardif sans libérer un successeur, régression #357 préservée, 12f7272f, QA verte) ; commandes: npm --prefix frontend run build puis depuis crates/app-tauri CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage ; build OK, warning Vite chunk > 500k habituel ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.71.0 -> v0.72.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitignoré et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée — Final affiché libère la LED busy en état idle sans manipulation, prochain message de la queue FIFO lancé automatiquement, absence de régression sur Stop ( #357 ), restart et cascade cancel ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
2026-09-16 20:51:18 +02:00
41a32d8243
merge(application,backend,app-tauri): fix #362 — libère l'état busy après Final et draine la queue des messages agents (QA verte)
2026-09-16 20:46:45 +02:00
12f7272fbe
fix(application,backend,app-tauri): libère l'état busy après Final et draine la queue des messages agents — Final/Error terminent immédiatement le pump structuré via reply_event_ends_turn (le provider n'est pas tenu de fermer son itérateur), release busy/FIFO idempotente bornée au ticket observé (release_turn_accounting: cancel_head + mark_idle seulement si le ticket appartient toujours au tour), cleanup tardif Final/close/timeout/cancel sans libérer un tour successeur, factoring CancelAgentChat sur la même primitive, régression #357 préservée — #362 (QA verte: cargo fmt --check, chat_bridge 36 tests, cancel_agent_chat 4 tests, backend 106 tests, drain_with_readiness_lot1 7 tests)
2026-09-16 20:46:38 +02:00
208e14961b
chore(appimage): rebuild AppImage develop — commit dédié v0.71.0 #361 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 121051640 octets, mode 755, sha256 bd2dee28ee2a4594d8e2b72e393f63e1bcdd20bcb8be6560e91ff4de9ff45f56, produit depuis develop @ b55ed520 incluant le merge du fix #361 — refresh immédiat de la liste des agents après ajout d'un agent: bus d'événements agent-roster CustomEvent + BroadcastChannel multi-fenêtres, 1cc842fd, QA verte) ; commandes: npm --prefix frontend run build puis depuis crates/app-tauri CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage ; build OK, warning Vite chunk > 500k habituel ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.70.0 -> v0.71.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitignoré et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée — ajout d'un agent au projet avec rafraîchissement immédiat de la liste visible sans manipulation de layout/cellule, cohérence des autres panneaux abonnés au roster (skills/permissions/tâches planifiées/templates/tickets/workstate), absence de régression multi-fenêtres ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
2026-09-16 20:18:50 +02:00
b55ed52012
merge(frontend): fix #361 — refresh immédiat de la liste des agents après ajout (QA verte)
2026-09-16 20:15:01 +02:00
1cc842fd8b
fix(frontend): refresh immédiat de la liste des agents après ajout — bus d'événements agent-roster (CustomEvent + BroadcastChannel multi-fenêtres) publié à la création d'un agent et écouté par useAgents, LayoutGrid et les panneaux skills/permissions/tâches planifiées/templates/tickets/workstate, plus besoin d'ajouter-retirer une cellule pour forcer le refresh — #361 (QA verte: typecheck OK, vitest agents/singletonAgent OK, npm test 1416 tests OK)
2026-09-16 20:14:51 +02:00
3f6beb149b
chore(appimage): rebuild AppImage develop — commit dédié v0.70.0 #360 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 121043448 octets, mode 755, sha256 53cc8403281bcacd290785af1554c7dc93d5eaaa3b50fea4282dc3a8a5467db5, produit depuis develop @ 65284c21 incluant le merge du fix #360 — TUI native noire: route PTY explicite + replay du scrollback pré-attach ( 65284c21, QA verte)) ; commandes: npm --prefix frontend run build puis depuis crates/app-tauri CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage ; build OK, warning Vite chunk > 500k habituel ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.69.0 -> v0.70.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitignoré et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée — premier draw TUI native visible au lancement, plus d'écran noir sur les sessions TUI natives, absence de régression CLI custom et attach/reveal ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
2026-09-16 19:13:35 +02:00
65284c21b8
merge(domain,infrastructure,web-server,app-tauri,frontend): fix #360 — TUI native noire (QA verte)
2026-09-16 19:08:11 +02:00
355a482fee
fix(domain,infrastructure,web-server,app-tauri,frontend): TUI native noire — route PTY explicite et replay du scrollback pré-attach sans perte — #360 (QA verte)
2026-09-16 19:08:01 +02:00
a833af0fb5
chore(appimage): rebuild AppImage develop — commit dédié v0.69.0 #359 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 121047544 octets, mode 755, sha256 81b0c8b15ce579ce8a5b0c6b376656acc511ae0c91c18c58f5ff4c423bf9d292, produit depuis develop @ dff12a39 incluant le fix #359 — la fenêtre Tâches planifiées s'affiche en mode détaché ( 31ca03c2, merge dff12a39, QA verte) ; commandes: npm --prefix frontend run build puis depuis 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 ; build réussi par Main avec le skill build-appimage, warning Vite chunk > 500k habituel) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.68.0 -> v0.69.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitignoré et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.69.0 — détachement de la fenêtre Tâches planifiées, absence de régression sur la fenêtre intégrée et sur les autres panneaux détachables ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
2026-09-15 09:24:55 +02:00
dff12a395b
merge(app-tauri,frontend): fix #359 — la fenêtre Tâches planifiées s'affiche en mode détaché (QA verte)
2026-09-15 09:20:34 +02:00
31ca03c29b
fix(app-tauri,frontend): la fenêtre Tâches planifiées s'affiche en mode détaché — #359 (QA verte)
...
cause: le panneau Tâches planifiées n'avait aucune variante dans l'enum ViewPanel, open_view_window("scheduledTasks") rejetait INVALID et detachPanel ne touchait le placement qu'en cas de succès — même famille que #299 , aucun effet visible ni message.
fix: variante ViewPanel::ScheduledTasks avec contrat stable label view-scheduledTasks / url index.html?panel=scheduledTasks / titre « Scheduled tasks », identité persistée des fenêtres view-scheduledTasks acceptée à la restauration #50 ; frontend ViewWindow rend le ScheduledTasksPanel du projet focalisé et ProjectsView expose le placement Fenêtre détachée via WindowGateway; retrait de la variante Projects devenue morte après #315 — le panneau Projects (coquille de la fenêtre principale) n'est plus détachable, refus INVALID gardé par tests.
QA verte: view_window_tests dont scheduled_tasks_view_window_contract_is_stable et projects_panel_is_not_detachable, persisted_identity_accepts_scheduled_tasks_view_labels, frontend ViewWindow/window gateway/ProjectsView.detach verts.
2026-09-15 09:20:28 +02:00
7de1d0afbe
merge(domain,application,infrastructure,backend,web-server,app-tauri,frontend): feature #358 — bibliothèque d'icônes projet personnalisées importées par l'utilisateur (QA verte)
2026-09-15 07:58:01 +02:00
0f01d1f9b1
feat(domain,application,infrastructure,backend,web-server,app-tauri,frontend): bibliothèque d'icônes projet personnalisées importées par l'utilisateur — #358 (QA verte)
...
domain: variante ProjectIconSet::Custom, métadonnées CustomProjectIconAsset (id opaque, media type png/jpeg/webp, byte_size, dimensions décodées, sha256, nom de fichier original sans chemin, created_at), CustomProjectIconContent et port CustomProjectIconAssetStore (list/read/exists/create/delete) avec CustomProjectIconStoreError dédiée.
application: use case project_icon_assets — import validé png/jpeg/webp avec rejet du contenu SVG, dimensionnement et digest sha256, bibliothèque partagée à l'instance indépendante de tout projet, suppression refusée tant que l'asset est référencé par un projet.
infrastructure: store fichier store/project_icon_asset.rs — index canonique + octets, création atomique sous extension validée.
backend/web-server: contrat HTTP /api/project-icon-assets (GET liste, POST import, GET lecture, GET /usage, DELETE) avec prévol OPTIONS et tests contrat incluant le rejet SVG.
app-tauri: commandes import/list/read/get_usage/delete_custom_project_icon_asset exposées au frontend.
frontend: port ProjectIconAssetGateway (list/import/delete/getUrl sans exposer de chemin filesystem), gateways http+mock avec tests, DI, section Icônes personnalisées du ProjectIconPicker (import fichier accept png/jpeg/webp, sélection role=option, suppression avec retrait de sélection, erreurs lisibles i18n FR/EN), tests projectIcons étendus.
QA verte: contrats HTTP et Tauri identiques, suites cargo et npm ciblées vertes.
2026-09-15 07:57:51 +02:00
a082b55c75
chore(appimage): rebuild AppImage develop — commit dédié v0.68.0 #357 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 120871416 octets, mode 755, sha256 028286e2d9be65e145db6e17071f1b579c30ee5b580c77699e7a2ecdae9667ae, produit depuis develop @ 959f635a incluant le fix #357 — réconcilie l'état idle et les Finals après Stop ( 50e395b6, merge 959f635a, QA verte) ; commandes: npm --prefix frontend run build puis depuis 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 ; build réussi, réalisé par Main avec le skill validé) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.67.0 -> v0.68.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.68.0 — après Stop d'un tour, bouton Stop disparu et Finals des tours suivants affichés ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
2026-09-14 15:17:53 +02:00
959f635abc
merge(application,backend,app-tauri,frontend): fix #357 — réconcilie l'état idle et les Finals après Stop (QA verte)
2026-09-14 15:13:12 +02:00
50e395b602
fix(application,backend,app-tauri,frontend): réconcilie l'état idle et les Finals après Stop — #357 (QA verte)
...
Cause: après un cancel manuel de tour, le ticket médié busy/FIFO n'était pas
retiré (l'agent restait Busy, bouton Stop persistant) et un terminal tardif du
tour annulé pouvait bloquer le tour suivant (Final non affiché).
Backend: StructuredSessions lie chaque génération de tour à son ticket médié
(bind_turn_accounting) et request_turn_cancel restitue l'identité (agent,
ticket) exacte observée avant annulation; CancelAgentChat.with_turn_accounting
retire le ticket exact (cancel_head + mark_idle) seulement s'il est toujours
le ticket courant — jamais un successeur déjà remplacé;
StructuredHumanTurnGuard expose accounting_identity et agent_send (app-tauri)
lie la comptabilité au démarrage du tour humain.
Frontend: CustomAgentChatView réconcilie l'interaction active depuis le
work-state (agent idle sans délégation -> interaction terminée, fallback
« Tour terminé sans réponse finale. ») au lieu de laisser un agentBusyChanged
sans tour-id clore un tour plus récent; les terminaux tardifs (final/error) du
tour read-model-settled remplacent le fallback; tour suivant isolé des
callbacks tardifs de la génération précédente.
Tests: cancel_agent_chat (retrait du ticket exact avant le prompt suivant,
nettoyage tardif sans idle sur ticket successeur), CustomAgentChatView
(isolation tour suivant, réconciliation work-state + remplacement fallback par
Final tardif).
Réserve non bloquante: alignement fixture skills préexistant porté par le
commit test dédié 83659d9a .
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-14 15:13:03 +02:00
83659d9a09
test(application): aligne les assertions d'affordances skills de la fixture convention file
...
launch_conventionfile_injects_assigned_skills_in_order était rouge en
préexistant (réserves #281/#287): la source projette déjà les refs stables
`skill:global:<id>` et le suffixe (workflow) que les assertions ne suivaient
pas. Alignement pur de fixture, aucun changement de source — cycle #357 .
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-14 15:12:51 +02:00
a21d6675bd
merge(frontend): fix #356 — restaure le suivi automatique du scroll des fils de messages (QA verte)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-14 11:15:19 +02:00
ec941d1af6
fix(frontend): restaure le suivi automatique du scroll des fils de messages — hook partagé useThreadScrollController — #356 (QA verte)
...
Cause: la logique de suivi du bas de fil était dupliquée et ad-hoc dans chaque surface (scrollRef, followsLatestRef, showLatestButton dans CustomAgentChatView), et dérivait dans certains cas — le fil ne suivait plus les nouveaux messages.
Fix: nouveau hook partagé shared/lib/useThreadScrollController (resté collé au bas quand l'utilisateur est déjà en bas, position préservée pendant la consultation de l'historique, notice latest sinon) câblé dans CustomAgentChatView, ConversationViewer et TicketAssistantPanel.
QA verte: npm run typecheck exit 0; tests ciblés useThreadScrollController, CustomAgentChatView, ConversationViewer/useConversationThread et tickets verts; npm test 1400/1400 verts (137 fichiers); git diff --check.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-14 11:15:10 +02:00
7eb501e013
chore(appimage): rebuild AppImage develop — commit dédié v0.67.0 #354 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 116M / 120855032 octets, mode 755, sha256 2c829c23fcb402f508759dbf8b9c785332878dc85accbbc97ce1da2b02df4ac5, produit depuis develop @ 9eb3926a incluant le fix #354 — grant /dev/null RO|RW dans workspace_exec_sandbox pour les CLI type git via workspace.execTool ( 28bb706c, merge 9eb3926a, QA verte) ; commandes: npm --prefix frontend run build puis depuis 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 ; build réussi, réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.66.0 -> v0.67.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.67.0 — commandes CLI sandboxées via workspace.execTool (git ouvrant /dev/null en O_RDWR) ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
2026-09-14 09:30:05 +02:00
9eb3926aaa
merge(application,infrastructure): fix #354 — /dev/null grant RO|RW dans workspace_exec_sandbox pour les CLI type git via workspace.execTool (QA verte)
2026-09-14 09:25:51 +02:00
28bb706c61
fix(application,infrastructure): grant /dev/null RO|RW in workspace_exec_sandbox so CLIs can open it O_RDWR — #354 (QA verte)
...
Cause: the workspace.execTool sandbox only granted the project root
plus read-only system roots, so CLI tools like git failed when opening
/dev/null with O_RDWR (redirect/exec 3<>/dev/null) inside sandboxed
runs.
Fix: workspace_exec_sandbox pushes one precise /dev/null PathGrant with
RO|RW access; project read effect stays RO|EXEC and no blanket /dev
grant is added, so the widening is limited to the null device;
GitPlugin untouched. Tests: application asserts the read sandbox keeps
project RO|EXEC while granting /dev/null RO|RW
(workspace_exec_read_sandbox_grants_dev_null_without_widening_project_access);
infrastructure proves the local runner executes exec 3<>/dev/null
(local_runner_allows_cli_to_open_dev_null_for_read_and_write).
QA verte reconfirmée par Git: cargo test -p application workspace_exec
5/5, -p infrastructure local_runner_allows_cli_to_open_dev_null 1/1,
-p infrastructure workspace_tool::tests 5/5, cargo fmt --all --check,
git diff --check.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-14 09:25:34 +02:00
325e5656fa
chore(appimage): rebuild AppImage develop — commit dédié v0.66.0 #353 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 116M / 120867320 octets, mode 755, sha256 590291a3fdc7568beeb1b4e70592a41e5011501e200b9ab832d5b15d86040979, produit depuis develop @ 30e75a3d incluant le fix #353 — icônes projet watermark plein espace et niveaux de gris détaillés préservant les éléments internes ( 4581470f, merge 30e75a3d, QA verte) ; commandes: npm --prefix frontend run build puis depuis 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 ; build réussi, réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.65.0 -> v0.66.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.66.0 — icônes projet occupant tout l'espace au-dessus du composer, détails internes visibles en niveaux de gris (fantôme avec langue et yeux) ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
2026-09-14 07:35:53 +02:00
30e75a3d4f
merge(frontend): fix #353 — icônes projet watermark plein espace et niveaux de gris préservant les détails internes (QA verte)
2026-09-14 07:31:56 +02:00
4581470fb3
fix(frontend): render project watermark icons full-size above the composer with detail-preserving grayscale — #353 (QA verte)
...
Cause: the monochrome-first treatment from #351 flattened the emoji
artwork through an alpha mask (transparent fill + zero-offset
text-shadow), dropping internal details (the ghost lost its tongue and
eyes), and the watermark box did not occupy the full space available
above the chat composer.
Fix: new .project-cell-illustration-area container (container-type:
size) wrapping the scroll zone so the absolute watermark spans the
whole region between the agent toolbar and the composer; glyph keeps
the OS full-colour emoji artwork as source and is neutralised with a
non-destructive CSS filter (grayscale(1) contrast(0.92)) so internal
tones and details stay visible in black and white; glyph sized to
min(100cqw - 8px, 100cqh - 12px); text-variation selector U+FE0E
stripping removed (full emoji preserved) and project-theme tint
plumbing (accessibleProjectAccent/onProjectThemeChanged) dropped as
superseded by grayscale; empty label and overlay z-layering untouched.
QA verte reconfirmée par Git: npm test -- CustomAgentChatView.test.tsx
projectIcons.test.tsx 96/96, npm run typecheck OK, npm run build OK,
npm test 1396/1396, git diff --check OK.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-14 07:31:44 +02:00
3413664d3d
chore(appimage): rebuild AppImage develop — commit dédié v0.65.0 #352 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 116M / 120871416 octets, mode 755, sha256 5e32a200e2c44f0bfa77342878710bd450f936fb44cf6a412c5891687392bf3d, produit depuis develop @ 1ba3fc95 incluant la feature #352 — file d'attente des messages CLI custom pendant busy et navigation Final précédent / dernier message ( 76d91c34, merge 1ba3fc95, QA verte) ; commandes: npm --prefix frontend run build puis depuis 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 ; build réussi, réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.64.0 -> v0.65.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.65.0 — composer actif pendant busy avec mise en file, panneau En attente · N (modifier/supprimer/undo/tout supprimer), drain après Final, conservation après Stop/error avec relance, flèches Final précédent / dernier message ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-13 23:01:44 +02:00
1ba3fc9568
merge(frontend): feature #352 — file d'attente des messages CLI custom pendant busy et navigation Final précédent / dernier message (QA verte)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-13 22:58:36 +02:00
76d91c3487
feat(frontend): queue custom CLI messages while agent is busy and add Final/latest-message navigation — #352 (QA verte)
...
Custom CLI composer stays active during busy turns: submitting while the
agent works enqueues the message instead of sending it. Local FIFO queue
scoped per cell (projectId+agentId+layoutId+nodeId), entries carry id,
text, attachments snapshot and createdAtMs; single in-flight
transmission, entry removed at send time, auto-drain only on final
chunk, queue preserved on error/Stop with 'Relancer l'agent' action on
stopped cells. 'En attente · N' panel anchored above the composer:
order, 2-line preview, per-entry edit/delete with transient undo, clear
all with confirmation; main button switches Send / 'Mettre en attente'
with live announcement; layout contract updated (CLI visible while
busy, textarea enabled, Stop available). Chat navigation: round up-arrow
under the agent bar jumps to previous Final, round down-arrow above the
composer appears when not at bottom to jump to latest message,
auto-scroll suspended while reading history, prefers-reduced-motion and
44px a11y targets respected.
Ports unchanged (AgentGateway send/cancel/reattach, restartCellAgentRuntime).
QA verte reconfirmée par Git: targeted suites 115/115
(CustomAgentChatView/LayoutGrid/LayoutGrid.chat), git diff --check;
QA: npm run typecheck OK, npm run build OK.
Réserves documentées: queue renderer-local (non persistée après restart
complet), validation visuelle cellules très étroites restante.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-13 22:58:27 +02:00
4ec196b988
chore(appimage): rebuild AppImage develop — commit dédié v0.64.0 #351 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 116M / 120863224 octets, mode 755, sha256 1867428962841b403d7bf8c79cc17fc41b8f9e865f358b9ee18d73df166f56dc, produit depuis develop @ 0d62a654 incluant le fix #351 — fantôme empty-state plein-cellule et icônes projet monochromes teintées par la couleur projet ( 08c05c18, merge 0d62a654, QA verte) ; commandes: npm --prefix frontend run build puis depuis 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 ; build réussi, réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.63.0 -> v0.64.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.64.0 — fantôme plein-cellule dans la cellule agent vide, icônes projet monochromes teintées couleur projet, libellé vide masqué en cellule contrainte ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-13 19:08:26 +02:00
0d62a6540d
merge(frontend): correction #351 — fantôme empty-state plein-cellule et icônes projet monochromes teintées par la couleur projet (QA verte)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-13 19:04:44 +02:00
08c05c1841
fix(frontend): expand empty-state watermark to full cell and tint monochrome project icons by project color — #351 (QA verte)
...
Cause: the empty-state watermark filled only 92% of a centered box and
kept residual palette colors from host emoji fonts, non-compliant with
the monochrome-first project icon rule (#351 user capture).
Fix: illustration spans the cell with 6px/4px insets and an unclipped
glyph at min(88cqw, 88cqh); emoji painted as monochrome silhouettes via
transparent fill + zero-offset text-shadow tint
(--project-illustration-tint) derived from accessibleProjectAccent when
a project color exists, neutral muted fallback otherwise; empty label
anchored bottom-center and hidden first on constrained containers
(@container 280px width / 240px height); overlay priorities, composer
and z-layering untouched.
QA verte reconfirmée par Git: npm test -- CustomAgentChatView.test.tsx
80/80, git diff --check; QA: ProjectSettingsPanel 12/12, typecheck,
build OK (warning Vite chunk >500 kB préexistant).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-09-13 19:04:32 +02:00
64da043a8e
chore(appimage): rebuild AppImage develop — commit dédié v0.63.0 #350 (artefact target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage, 116M / 120863224 octets, mode 755, sha256 a6b57a6f1ef17ec482f0c4e16aed72059b3b19d6c82e4a956cd4fffc21586b5d, produit depuis develop @ b6b79dd9 incluant le lot #350 — animation d'écartement des onglets lors du drag/reorder pour matérialiser l'emplacement de drop, icônes projet noir et blanc colorisées par couleur projet occupant la cellule et visibles derrière les messages avec transparence légère, tools/skills plugin autorisés utilisables par les agents en headless sans seconde approbation sous approval_policy=never via allowlist authorized_tools projetée vers les runtimes, refs stables des skills assignées plugin:<pluginId>:<skillId> avec idea_skill_read(ref=...) canonique et erreur ambiguousSkillName, dédoublonnage du skill plugin android-build-install ( 92d0dce2, merge b6b79dd9, QA verte) ; commandes: npm --prefix frontend run build puis depuis 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 ; build réussi, réalisé par Main) ; convention de tag respectée: y incrémenté pour un rebuild committé sur develop, v0.62.0 -> v0.63.0, tag annoté posé sur ce commit ; commit --allow-empty: l'artefact vit sous target/ gitigné et le bookkeeping carnet/index/counter reste hors périmètre — ce message est la trace durable in-repo du rebuild ; restant: validation live depuis l'app installée v0.63.0 — animation de drop des onglets, icônes projet derrière les messages, tools/skills plugin sans approbation additionnelle en headless, skill plugin dédoublonné ; l'AppImage installée n'est pas remplacée par cette opération ; aucun push.
2026-09-13 14:16:01 +02:00
b6b79dd9e1
merge(domain,application,infrastructure,backend,app-tauri,frontend): lot utilisateur #350 — animation d'écartement des onglets au drag, icônes projet N&B colorisées derrière les messages, tools/skills plugin autorisés utilisables en headless sans seconde approbation, refs stables des skills assignés et dédoublonnage (QA verte)
2026-09-13 14:11:42 +02:00
92d0dce2b7
feat(domain,application,infrastructure,backend,app-tauri,frontend): lot utilisateur #350 — animation d'écartement des onglets au drag/reorder, icônes projet N&B colorisées derrière les messages, tools/skills plugin utilisables par les agents autorisés en headless, refs stables des skills assignés (QA verte)
...
- Tabs (shared/ui): cible de drop matérialisée par écartement before/after pendant le drag/reorder, reset via rAF sans reliquat, clavier et annonces préservés.
- projectIcons: icônes projet en noir et blanc par défaut, colorisées avec la couleur du projet, occupant la cellule et visibles derrière les messages rendus légèrement transparents.
- Permissions plugin headless: PluginMcpServerSpec transporte l'allowlist exacte authorized_tools regroupée par (pluginId, serverId) depuis les PluginToolRef; projection Codex enabled_tools + default_tools_approval_mode="approve" — une permission déjà accordée au niveau projet/template ne déclenche pas de seconde approbation, un tool non assigné reste hors surface appelable; réserves orchestrator/mcp server+tools alignées, dto backend + dto_agents app-tauri.
- Skills: ref stable plugin:<pluginId>:<skillId> exposée dans le contexte agent, idea_skill_read(ref=...) canonique via read_assigned_by_ref, erreur structurée ambiguousSkillName avec candidates; SkillsPanel dédoublonné (android-build-install); agents-dev/L12-skills.md à jour.
- Docs: ARCHITECTURE.md section 22.3 (projection des autorisations agent vers les runtimes plugin).
- QA verte #350 reconfirmée avant commit.
2026-09-13 14:11:31 +02:00