feat(marketplace): read_bundle_file — lecture read-only des docs d'un bundle accordé #29

Merged
kevin merged 1 commit from feat/bundle-read-file into main 2026-07-20 16:08:52 +00:00
Owner

Résurrection de feat/marketplace-bundle-read (27-06, jamais mergée), portée post-P2

L'agent peut désormais lire les fichiers d'un bundle qui lui est accordé — références, templates, ou le SKILL.md complet quand la version injectée dans le prompt est tronquée. Lecture seule, symétrique de run_bundle_script mais sans exécution.

Garde-fous

  • Gate RBAC fail-closed via bundle_access.user_can_use + bundle active requis.
  • Confinement _confined() sous install_path (anti-traversal, déjà testé).
  • Lecture bornée à 100k caractères (truncated signalé), audit log.
  • Pas d'allow-list : lire les docs d'un bundle accordé est sans danger (≠ exécution).

Archi

ToolDef dans tools/system.py avec read_only=True → dérivé automatiquement dans READ_ONLY_TOOLS (passe en mode restreint comme toute lecture). Vérifié à l'import : schéma + executor + read-only présents dans la façade wolf_tools.

Tests

Suite bundle complète verte en local : 35 passed (dont 2 nouveaux — validation d'entrée, refus RBAC par monkeypatch ; import paresseux dans la fonction pour que le patch prenne, pattern Valkyrie/Heimdall).

🤖 Generated with Claude Code

https://claude.ai/code/session_01F5SST5qru4jYV2NoCwPBu6

## Résurrection de `feat/marketplace-bundle-read` (27-06, jamais mergée), portée post-P2 L'agent peut désormais **lire** les fichiers d'un bundle qui lui est accordé — références, templates, ou le `SKILL.md` complet quand la version injectée dans le prompt est tronquée. Lecture seule, symétrique de `run_bundle_script` mais sans exécution. ### Garde-fous - Gate RBAC **fail-closed** via `bundle_access.user_can_use` + bundle `active` requis. - Confinement `_confined()` sous `install_path` (anti-traversal, déjà testé). - Lecture bornée à 100k caractères (`truncated` signalé), audit log. - Pas d'allow-list : lire les docs d'un bundle accordé est sans danger (≠ exécution). ### Archi `ToolDef` dans `tools/system.py` avec `read_only=True` → dérivé automatiquement dans `READ_ONLY_TOOLS` (passe en mode restreint comme toute lecture). Vérifié à l'import : schéma + executor + read-only présents dans la façade wolf_tools. ### Tests Suite bundle complète verte en local : 35 passed (dont 2 nouveaux — validation d'entrée, refus RBAC par monkeypatch ; import paresseux dans la fonction pour que le patch prenne, pattern Valkyrie/Heimdall). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01F5SST5qru4jYV2NoCwPBu6
feat(marketplace): read_bundle_file — lecture read-only des docs d'un bundle accordé
All checks were successful
CI / Backend — pytest (pull_request) Successful in 45s
CI / i18n — usage → locales (pull_request) Successful in 5s
e9c022bf4b
Ressuscite la branche feat/marketplace-bundle-read (jamais mergée),
portée sur le registre ToolDef post-P2 :

- bundle_exec.read_bundle_file : gate RBAC fail-closed (user_can_use),
  bundle actif requis, confinement _confined (anti-traversal), lecture
  bornée 100k chars, audit log.
- ToolDef read_bundle_file (tools/system.py, read_only=True → passe en
  mode restreint comme toute lecture) ; l'agent peut lire références,
  templates, ou le SKILL.md complet quand l'injection prompt le tronque.
- Bloc « Bundles disponibles » du system prompt mis à jour pour annoncer
  la lecture.
- 2 tests (validation d'entrée, refus RBAC via monkeypatch — import
  paresseux dans la fonction pour que le patch prenne).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F5SST5qru4jYV2NoCwPBu6
kevin merged commit 08ee8b20a7 into main 2026-07-20 16:08:52 +00:00
kevin deleted branch feat/bundle-read-file 2026-07-20 16:08:53 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
kevin/Gungnir!29
No description provided.