Skip to content

feat(core): agent-config registry data path — configList for skills + rules (T-401, ADR-050)#62

Merged
matze4u merged 3 commits into
mainfrom
feat/v1-0-config-list-skills-rules
Jun 2, 2026
Merged

feat(core): agent-config registry data path — configList for skills + rules (T-401, ADR-050)#62
matze4u merged 3 commits into
mainfrom
feat/v1-0-config-list-skills-rules

Conversation

@matze4u

@matze4u matze4u commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

What

Wire the dead agent-config-walker.ts::indexByKind (unit-tested, zero live callers) as a new read-only configList protocol method on a dedicated ConfigHandler. This is the local-walker data path the IDE's skill picker and rules viewer need — the artifact kinds the command palette (ADR-048) does not surface.

The walker discovers skills, rules, and commands, but the only shipped protocol path filtered the tree to kind === 'command'. Skills and rules — also walked, also indexed — had no protocol path. indexByKind is exactly the grouping helper that path needs.

configList {kind?, limit?}{items: ConfigSummary[], total}, where ConfigSummary {kind, name, description, path}. Absent kind → every artifact (skills → rules → commands, alphabetical within each as the walker sorts); a kind → that kind only. total is the count before a MAX_CONFIG_LIST_RESULTS=100 clamp. Mirrors commandList's flat+total shape and the established "Core returns data, the IDE renders" pattern. It is the offline/local-walker authority sibling of the MCP list_skills (T-1102) — exactly as commandList relates to the MCP command_read.

Why this seam

Fresh Explore seam-hunt + independent caller verification: indexByKind is the one genuinely-dead, non-artificial core export. Rejected on cross-check: phaseRunsInMode (IDE-gated), sortAndDedup (live at review/pipeline.ts:308), dismissalFor (live in review/dismissals.ts).

Council

gemini-cli 0.41.2 answered Q0–Q7 = A/B/A/B/A/A/A/A. codex-cli 0.134.0 was invoked with the same question set but hung >7 min producing zero output and was terminated (recurring codex-exec flakiness) — the second opinion is gemini + the host agent's own seam-hunt + caller verification.

One reasoned divergence from gemini, Q6: a dedicated ConfigHandler instead of extending CommandHandler. Rationale: (1) the codebase's one-handler-per-domain shape; (2) correctness — gemini's cache-reuse benefit needs a sidecar-level shared walk promise, which would cache a transient FS error for the whole session, defeating each handler's fail-open-and-retry cache. The marginal second walk is negligible (config trees are small — the same premise behind the Q7 cap).

Changes

  • protocol: ConfigKind / ConfigSummary / ConfigListRequest / ConfigListResponse schemas + configList in the method registry; +3 Kotlin DTOs (codegen 64→67).
  • core: new ConfigHandler (own fail-open walk cache) wiring indexByKind; registered in buildCoreDispatcher + on the dispatcher behind requireConfig()config_not_configured.
  • tests: +14 ConfigHandler unit tests + a buildCoreDispatcher live-wiring proof.
  • docs: ADR-050 + index row + a T-1102 local-walker-sibling annotation.

Verification

  • task ci exit 0 — lint, format, build, typecheck, test (protocol 55, shared 5, vscode 40, core 1132 pass / 1 skip).
  • task jetbrains:check BUILD SUCCESSFUL (the +3 Kotlin DTOs compile).

Scope

No behaviour change to any existing path; CommandHandler untouched. No roadmap checkbox flip — the skill picker / rules viewer render remains the IDE last-mile; this PR ships the headless data path it calls.

matze4u and others added 3 commits June 2, 2026 13:08
…R-050)

Wire contract for the agent-config registry data path: a read-only
configList {kind?, limit?} -> {items: ConfigSummary[], total} method, with
ConfigKind/ConfigSummary/ConfigListRequest/ConfigListResponse schemas and the
matching Kotlin DTOs (codegen 64->67). Sibling of commandList (ADR-048) for the
artifact kinds it does not surface — skills + rules.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…R-050)

Add a dedicated ConfigHandler that lists agent-config artifacts over the
live walkAgentConfig tree, wiring the previously-dead indexByKind. Skills and
rules — walked but never surfaced by the command-only palette (ADR-048) — now
have a headless, offline-capable data path; commands are included for a unified
registry, kind-filterable. Registered in buildCoreDispatcher (9th ctor arg) and
on the dispatcher behind requireConfig() -> config_not_configured.

Own fail-open walk cache (not shared with CommandHandler) so a transient FS
error can't disable the registry for the session. +14 ConfigHandler tests + a
buildCoreDispatcher live-wiring proof; core 1132 pass / 1 skip.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…note

Record the configList wiring decision (Q0-Q7 resolution, the Q6 reasoned
divergence to a dedicated handler, the codex-cli council non-response), add the
index row, and annotate road-to-v1-0 T-1102 with the local-walker authority
sibling. No checkbox flip — the skill picker / rules viewer render stays IDE.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@matze4u matze4u merged commit bf993ad into main Jun 2, 2026
8 checks passed
@matze4u matze4u deleted the feat/v1-0-config-list-skills-rules branch June 2, 2026 11:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant