feat(core): agent-config registry data path — configList for skills + rules (T-401, ADR-050)#62
Merged
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Wire the dead
agent-config-walker.ts::indexByKind(unit-tested, zero live callers) as a new read-onlyconfigListprotocol method on a dedicatedConfigHandler. 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.indexByKindis exactly the grouping helper that path needs.configList {kind?, limit?}→{items: ConfigSummary[], total}, whereConfigSummary {kind, name, description, path}. Absentkind→ every artifact (skills → rules → commands, alphabetical within each as the walker sorts); akind→ that kind only.totalis the count before aMAX_CONFIG_LIST_RESULTS=100clamp. MirrorscommandList's flat+total shape and the established "Core returns data, the IDE renders" pattern. It is the offline/local-walker authority sibling of the MCPlist_skills(T-1102) — exactly ascommandListrelates to the MCPcommand_read.Why this seam
Fresh Explore seam-hunt + independent caller verification:
indexByKindis the one genuinely-dead, non-artificial core export. Rejected on cross-check:phaseRunsInMode(IDE-gated),sortAndDedup(live atreview/pipeline.ts:308),dismissalFor(live inreview/dismissals.ts).Council
gemini-cli 0.41.2answered Q0–Q7 = A/B/A/B/A/A/A/A.codex-cli 0.134.0was 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
ConfigHandlerinstead of extendingCommandHandler. 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
ConfigKind/ConfigSummary/ConfigListRequest/ConfigListResponseschemas +configListin the method registry; +3 Kotlin DTOs (codegen 64→67).ConfigHandler(own fail-open walk cache) wiringindexByKind; registered inbuildCoreDispatcher+ on the dispatcher behindrequireConfig()→config_not_configured.ConfigHandlerunit tests + abuildCoreDispatcherlive-wiring proof.Verification
task ciexit 0 — lint, format, build, typecheck, test (protocol 55, shared 5, vscode 40, core 1132 pass / 1 skip).task jetbrains:checkBUILD SUCCESSFUL (the +3 Kotlin DTOs compile).Scope
No behaviour change to any existing path;
CommandHandleruntouched. No roadmap checkbox flip — the skill picker / rules viewer render remains the IDE last-mile; this PR ships the headless data path it calls.