From ef747cd156fc7682fddf7bb5b17aeb937003bae6 Mon Sep 17 00:00:00 2001 From: Blomios Date: Thu, 23 Jul 2026 12:44:10 +0200 Subject: [PATCH] =?UTF-8?q?chore(ideai):=20=C3=A9tat=20runtime=20=E2=80=94?= =?UTF-8?q?=20permissions=20et=20t=C3=A2che=20de=20fond?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- .../97b49ac2-8376-4aa3-8ea9-bf3ac81d0023.json | 134 +++++++++++++++++- .ideai/permissions.json | 38 +++++ 2 files changed, 170 insertions(+), 2 deletions(-) diff --git a/.ideai/background-tasks/97b49ac2-8376-4aa3-8ea9-bf3ac81d0023.json b/.ideai/background-tasks/97b49ac2-8376-4aa3-8ea9-bf3ac81d0023.json index 7450570..cf217ab 100644 --- a/.ideai/background-tasks/97b49ac2-8376-4aa3-8ea9-bf3ac81d0023.json +++ b/.ideai/background-tasks/97b49ac2-8376-4aa3-8ea9-bf3ac81d0023.json @@ -12519,10 +12519,140 @@ "ticket_id": "661fe0c9-6313-45f0-939f-34f4fecf3df4", "conversation_id": "6bc594e8-a37c-0dbd-1de6-6e3b73002cb4" }, - "state": "running", + "state": "completed", "wakePolicy": "recordOnly", "createdAtMs": 1784789813681, - "updatedAtMs": 1784789813681, + "updatedAtMs": 1784789843631, + "deadlineMs": null, + "result": { + "outcome": "success", + "finished_at_ms": 1784789843631, + "exit_code": null, + "summary": "Headless rendezvous completed with Final", + "stdout_tail": "**Décision Git — ticket #92 (rouvert) :**\n\n- L'état runtime (tickets #7/#43/#64/#92, tâche de fond, compteur/index) a été committé directement sur `develop` : `162e3ae` — pas de code de feature dedans, cohérent avec l'usage déjà en place sur cette branche.\n- Le travail précédent (`feature/ticket92-opencode-provider-cloud`) est terminé et déjà mergé (`12c7d10`) ; la branche est supprimée. Ce nouveau lot est un complément post-livraison avec un scope distinct (catalogue dynamique via cache `~/.cache/opencode/models.json` + fallback statique, option \"provider personnalisé\" en saisie libre) → **nouvelle branche de feature** plutôt qu'une reprise, pour ne pas mélanger l'historique de la livraison initiale avec ce complément.\n- Créée depuis `develop` (à jour, contient le merge du ticket #92 initial) : **`feature/ticket92-opencode-provider-dynamic-catalog`**, checkout effectué.\n\nDevBackend et DevFrontend peuvent implémenter sur cette branche. Je repasserai commiter et statuer sur le merge une fois l'implémentation terminée et testée par QA.", + "stderr_tail": null + }, + "completionDelivered": false + }, + { + "id": "401e1617-1652-4da8-88d1-784347a871d6", + "projectId": "97b49ac2-8376-4aa3-8ea9-bf3ac81d0023", + "ownerAgentId": "73c853d1-c0fd-463b-ad17-1d24fefa371f", + "kind": { + "kind": "headlessRendezvous", + "requester_agent_id": "a6ced819-b893-4213-b003-9e9dc79b9641", + "target_agent_id": "73c853d1-c0fd-463b-ad17-1d24fefa371f", + "ticket_id": "f48b9320-8458-44bf-8505-22a7ee5955e8", + "conversation_id": "d5068bc8-786e-0428-1d14-83b93961a15e" + }, + "state": "completed", + "wakePolicy": "recordOnly", + "createdAtMs": 1784789862061, + "updatedAtMs": 1784789872415, + "deadlineMs": null, + "result": { + "outcome": "success", + "finished_at_ms": 1784789872415, + "exit_code": null, + "summary": "Headless rendezvous completed with Final", + "stdout_tail": "You've hit your session limit · resets 12:20pm (Europe/Paris)", + "stderr_tail": null + }, + "completionDelivered": false + }, + { + "id": "54bbad3a-894c-4114-bec1-79ddf862b30a", + "projectId": "97b49ac2-8376-4aa3-8ea9-bf3ac81d0023", + "ownerAgentId": "73c853d1-c0fd-463b-ad17-1d24fefa371f", + "kind": { + "kind": "headlessRendezvous", + "requester_agent_id": "a6ced819-b893-4213-b003-9e9dc79b9641", + "target_agent_id": "73c853d1-c0fd-463b-ad17-1d24fefa371f", + "ticket_id": "18b42fb1-2ce8-4151-a87f-d4106721d55d", + "conversation_id": "d5068bc8-786e-0428-1d14-83b93961a15e" + }, + "state": "completed", + "wakePolicy": "recordOnly", + "createdAtMs": 1784802330858, + "updatedAtMs": 1784802882874, + "deadlineMs": null, + "result": { + "outcome": "success", + "finished_at_ms": 1784802882874, + "exit_code": null, + "summary": "Headless rendezvous completed with Final", + "stdout_tail": "All 6 new targeted tests pass. Full workspace build and test suite (`--test-threads=1`) are green.\n\n## Summary\n\nOn `feature/ticket92-opencode-provider-dynamic-catalog`:\n\n**1. Dynamic provider catalogue** (`crates/application/src/agent/provider_catalogue.rs`)\n- `opencode_provider_catalogue()` now reads `/.cache/opencode/models.json` (via `dirs::home_dir()` + literal suffix, respecting `$XDG_CACHE_HOME` — never `dirs::cache_dir()`, per OpenCode's upstream issue #8235), parses the models.dev shape, and falls back permanently to the original 3-entry static catalogue on any absence/read/parse failure.\n- Split fallback logic into a pure `catalogue_from_cache_bytes` for testability; validated the parsing against the real local OpenCode cache (`~/.cache/opencode/models.json`, 170 providers) to confirm the schema.\n- `OpenCodeProviderCatalogEntry` changed from `&'static str`/`&'static [&'static str]` to owned `String`/`Vec` (no longer static data); updated `backend/src/dto.rs`'s `From` impl accordingly.\n- Added `dirs = \"6\"` as a workspace + `application` dependency (already resolved transitively, so no lockfile surprises).\n\n**2. Custom provider option**\n- `domain::profile::OpenCodeProviderConfig` gained an additive `custom: Option` field (`#[serde(default, skip_serializing_if = \"Option::is_none\")]`, backward-compatible), plus a new `CustomProviderConfig` value object (`npm`, `base_url`, optional `display_name`) and a `.with_custom()` builder.\n- `SaveOpenCodeProviderProfileInput`/`SaveOpenCodeProviderProfile` extended with the same optional `custom` field, wired through `backend/src/dto.rs`'s request DTO.\n- Both `opencode_provider_config_json` implementations (`infrastructure/src/assistant/mod.rs` and `application/src/agent/lifecycle.rs`) now emit `npm`, `options.baseURL`, and a `models` block when `custom` is set, leaving the known-provider path (just `options.apiKey`) untouched.\n\nAdded unit tests for cache parsing (present/absent/malformed/empty) and for standard-vs-custom JSON generation in both duplicated sites. `cargo build --workspace` and `cargo test --workspace -- --test-threads=1` are fully green.", + "stderr_tail": null + }, + "completionDelivered": false + }, + { + "id": "b8710867-a325-4966-9c42-d7fe73b5a651", + "projectId": "97b49ac2-8376-4aa3-8ea9-bf3ac81d0023", + "ownerAgentId": "af7f86da-76bc-48e1-9900-71f45a624800", + "kind": { + "kind": "headlessRendezvous", + "requester_agent_id": "a6ced819-b893-4213-b003-9e9dc79b9641", + "target_agent_id": "af7f86da-76bc-48e1-9900-71f45a624800", + "ticket_id": "2be17edc-f009-46ee-9a26-bf70632a4109", + "conversation_id": "09b15ec3-ce2f-0af2-2903-ef699df9de41" + }, + "state": "completed", + "wakePolicy": "recordOnly", + "createdAtMs": 1784802903931, + "updatedAtMs": 1784803232024, + "deadlineMs": null, + "result": { + "outcome": "success", + "finished_at_ms": 1784803232024, + "exit_code": null, + "summary": "Headless rendezvous completed with Final", + "stdout_tail": "Frontend complement of ticket #92 is implemented and green.\n\n**Summary of changes** (all in `frontend/src/`):\n- `domain/index.ts`: added `CustomProviderConfig` type and `custom?` field on `OpenCodeProviderConfig`.\n- `ports/index.ts`: added optional `custom?` to `SaveOpenCodeProviderProfileInput`.\n- `adapters/profile.ts`, `adapters/http/requestResponseGateways.ts`, `adapters/mock/index.ts`: pass `custom` through to the backend call / mock save.\n- `features/first-run/FirstRunWizard.tsx` (`OpenCodeProviderFields`): \n - Added a filter `` above the provider `` + separate filter `` rather than building a new combobox component — matches the codebase's existing \"no custom combobox\" convention and needed no new shared UI primitive.\n- Filter input only renders once the catalogue is ready (not during loading/error), reusing existing loading/error states.\n- Placed \"Autre / personnalisé…\" as the last `