@canonical/pragma-cli 0.30.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pragma +0 -0
- package/package.json +27 -40
- package/src/bin.ts +292 -11
- package/src/capabilities/block/blockList.verb.ts +150 -0
- package/src/capabilities/block/index.ts +25 -0
- package/src/capabilities/block/pack.ts +155 -0
- package/src/capabilities/block/parity.test.ts +180 -0
- package/src/capabilities/block/tierChain.ts +78 -0
- package/src/capabilities/capabilities/capabilities.render.ts +89 -0
- package/src/capabilities/capabilities/capabilities.test.ts +131 -0
- package/src/capabilities/capabilities/capabilities.verb.ts +48 -0
- package/src/capabilities/capabilities/catalog.ts +144 -0
- package/src/capabilities/capabilities/hints.ts +221 -0
- package/src/capabilities/capabilities/index.ts +13 -0
- package/src/capabilities/capabilities/types.ts +58 -0
- package/src/capabilities/colophon/collectColophon.ts +68 -0
- package/src/capabilities/colophon/colophon.render.test.ts +87 -0
- package/src/capabilities/colophon/colophon.render.ts +38 -0
- package/src/capabilities/colophon/colophon.test.ts +241 -0
- package/src/capabilities/colophon/colophon.verb.ts +41 -0
- package/src/capabilities/colophon/index.ts +6 -0
- package/src/capabilities/colophon/markdownTerminal.test.ts +50 -0
- package/src/capabilities/colophon/markdownTerminal.ts +85 -0
- package/src/capabilities/colophon/pragmaColophon.ts +66 -0
- package/src/capabilities/colophon/types.ts +29 -0
- package/src/capabilities/config/collectConfigShow.ts +32 -0
- package/src/capabilities/config/field.render.ts +28 -0
- package/src/capabilities/config/field.test.ts +188 -0
- package/src/capabilities/config/fields.ts +152 -0
- package/src/capabilities/config/index.ts +6 -0
- package/src/capabilities/config/runField.ts +59 -0
- package/src/capabilities/config/runSet.ts +38 -0
- package/src/capabilities/config/set.test.ts +207 -0
- package/src/capabilities/config/set.verb.ts +70 -0
- package/src/capabilities/config/show.render.ts +61 -0
- package/src/capabilities/config/show.verb.ts +45 -0
- package/src/capabilities/config/types.ts +27 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +88 -0
- package/src/capabilities/create/byteEquality.test.ts +222 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +152 -0
- package/src/capabilities/create/create.mcp.test.ts +139 -0
- package/src/capabilities/create/create.render.ts +50 -0
- package/src/capabilities/create/create.test.ts +403 -0
- package/src/capabilities/create/create.verb.ts +435 -0
- package/src/capabilities/create/cwdJail.test.ts +129 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +111 -0
- package/src/capabilities/create/index.ts +25 -0
- package/src/capabilities/create/pathJail.ts +73 -0
- package/src/capabilities/create/pickGenerator.ts +63 -0
- package/src/capabilities/create/templates.embedded.generated.ts +53 -0
- package/src/capabilities/create/types.ts +8 -0
- package/src/capabilities/doctor/checks/checkConfigFile.ts +41 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +39 -0
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +108 -0
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +61 -0
- package/src/capabilities/doctor/checks/checkNodeVersion.ts +25 -0
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +73 -0
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +22 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +111 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +131 -0
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +60 -0
- package/src/capabilities/doctor/doctor.render.ts +116 -0
- package/src/capabilities/doctor/doctor.test.ts +179 -0
- package/src/capabilities/doctor/doctor.verb.ts +46 -0
- package/src/capabilities/doctor/index.ts +6 -0
- package/src/capabilities/doctor/runChecks.ts +76 -0
- package/src/capabilities/doctor/types.ts +41 -0
- package/src/capabilities/emptyRecovery.test.ts +112 -0
- package/src/capabilities/graph/index.ts +21 -0
- package/src/capabilities/graph/inspect.render.ts +38 -0
- package/src/capabilities/graph/inspect.test.ts +80 -0
- package/src/capabilities/graph/inspect.verb.ts +51 -0
- package/src/capabilities/graph/query.render.ts +77 -0
- package/src/capabilities/graph/query.test.ts +156 -0
- package/src/capabilities/graph/query.verb.ts +58 -0
- package/src/capabilities/graph/runQuery.ts +49 -0
- package/src/capabilities/index.ts +54 -0
- package/src/capabilities/info/collectInfo.ts +76 -0
- package/src/capabilities/info/index.ts +6 -0
- package/src/capabilities/info/info.render.ts +72 -0
- package/src/capabilities/info/info.test.ts +127 -0
- package/src/capabilities/info/info.verb.ts +46 -0
- package/src/capabilities/info/types.ts +42 -0
- package/src/capabilities/lazy.test.ts +89 -0
- package/src/capabilities/meta/complete.verb.ts +52 -0
- package/src/capabilities/meta/index.ts +15 -0
- package/src/capabilities/meta/mcp.verb.ts +35 -0
- package/src/capabilities/modifier/index.ts +15 -0
- package/src/capabilities/modifier/pack.ts +64 -0
- package/src/capabilities/ontology/index.ts +12 -0
- package/src/capabilities/ontology/ontology.test.ts +94 -0
- package/src/capabilities/ontology/queries.ts +197 -0
- package/src/capabilities/ontology/render.ts +87 -0
- package/src/capabilities/ontology/verbs.ts +170 -0
- package/src/capabilities/prompt/index.ts +18 -0
- package/src/capabilities/prompt/prompt.render.ts +70 -0
- package/src/capabilities/prompt/prompt.test.ts +119 -0
- package/src/capabilities/prompt/types.ts +30 -0
- package/src/capabilities/prompt/verbs.ts +93 -0
- package/src/capabilities/resources/index.ts +15 -0
- package/src/capabilities/resources/provider.ts +231 -0
- package/src/capabilities/resources/resources.test.ts +114 -0
- package/src/capabilities/roundtrip.test.ts +107 -0
- package/src/capabilities/setup/index.ts +6 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +108 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +307 -0
- package/src/capabilities/setup/operations/setupLsp.ts +61 -0
- package/src/capabilities/setup/operations/setupMcp.ts +85 -0
- package/src/capabilities/setup/operations/setupSkills.ts +199 -0
- package/src/capabilities/setup/setup.render.ts +49 -0
- package/src/capabilities/setup/setup.test.ts +351 -0
- package/src/capabilities/setup/setup.verb.ts +209 -0
- package/src/capabilities/setup/shell.ts +85 -0
- package/src/capabilities/setup/types.ts +42 -0
- package/src/capabilities/shared/assertExecOk.ts +106 -0
- package/src/capabilities/shared/packageManager.ts +62 -0
- package/src/capabilities/shared/registry.ts +70 -0
- package/src/capabilities/skill/discover.ts +178 -0
- package/src/capabilities/skill/index.ts +12 -0
- package/src/capabilities/skill/render.ts +60 -0
- package/src/capabilities/skill/skill.test.ts +142 -0
- package/src/capabilities/skill/verbs.ts +100 -0
- package/src/capabilities/sources/collectStatus.ts +87 -0
- package/src/capabilities/sources/index.ts +15 -0
- package/src/capabilities/sources/installSkills.ts +124 -0
- package/src/capabilities/sources/runUpdate.ts +407 -0
- package/src/capabilities/sources/sources.test.ts +642 -0
- package/src/capabilities/sources/status.render.ts +56 -0
- package/src/capabilities/sources/status.verb.ts +42 -0
- package/src/capabilities/sources/types.ts +51 -0
- package/src/capabilities/sources/update.render.ts +35 -0
- package/src/capabilities/sources/update.verb.ts +76 -0
- package/src/capabilities/standard/index.ts +18 -0
- package/src/capabilities/standard/pack.ts +128 -0
- package/src/capabilities/standard/parity.test.ts +208 -0
- package/src/capabilities/surface.test.ts +208 -0
- package/src/capabilities/tier/index.ts +19 -0
- package/src/capabilities/tier/lookup.render.ts +34 -0
- package/src/capabilities/tier/lookup.test.ts +68 -0
- package/src/capabilities/tier/lookup.verb.ts +44 -0
- package/src/capabilities/tier/pack.ts +28 -0
- package/src/capabilities/tier/runLookup.ts +59 -0
- package/src/capabilities/token/addConfig.render.ts +27 -0
- package/src/capabilities/token/addConfig.test.ts +62 -0
- package/src/capabilities/token/addConfig.verb.ts +40 -0
- package/src/capabilities/token/index.ts +19 -0
- package/src/capabilities/token/pack.ts +58 -0
- package/src/capabilities/token/runAddConfig.ts +95 -0
- package/src/capabilities/upgrade/index.ts +6 -0
- package/src/capabilities/upgrade/runUpgrade.ts +119 -0
- package/src/capabilities/upgrade/types.ts +21 -0
- package/src/capabilities/upgrade/upgrade.render.ts +55 -0
- package/src/capabilities/upgrade/upgrade.test.ts +372 -0
- package/src/capabilities/upgrade/upgrade.verb.ts +56 -0
- package/src/constants.test.ts +33 -0
- package/src/constants.ts +38 -68
- package/src/index.ts +27 -134
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +340 -0
- package/src/kernel/completion/bashDrive.test.ts +73 -0
- package/src/kernel/completion/complete.test.ts +101 -0
- package/src/kernel/completion/complete.ts +77 -0
- package/src/kernel/completion/emitScripts.test.ts +173 -0
- package/src/kernel/completion/emitScripts.ts +122 -0
- package/src/kernel/completion/entitySource.test.ts +198 -0
- package/src/kernel/completion/entitySource.ts +269 -0
- package/src/kernel/completion/index.ts +42 -0
- package/src/kernel/completion/model.test.ts +405 -0
- package/src/kernel/completion/model.ts +259 -0
- package/src/kernel/completion/parse.test.ts +338 -0
- package/src/kernel/completion/parse.ts +294 -0
- package/src/kernel/completion/rank.test.ts +100 -0
- package/src/kernel/completion/rank.ts +118 -0
- package/src/kernel/completion/resolve.test.ts +204 -0
- package/src/kernel/completion/resolve.ts +133 -0
- package/src/kernel/completion/safety.test.ts +374 -0
- package/src/kernel/completion/templates/bash.ts +249 -0
- package/src/kernel/completion/templates/fish.ts +245 -0
- package/src/kernel/completion/templates/shared.ts +134 -0
- package/src/kernel/completion/templates/zsh.ts +246 -0
- package/src/kernel/completion/types.ts +153 -0
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +11 -0
- package/src/kernel/config/defaults.ts +28 -0
- package/src/kernel/config/evaluateProjectConfig.ts +119 -0
- package/src/kernel/config/findProjectConfig.ts +45 -0
- package/src/kernel/config/firstRun.test.ts +60 -0
- package/src/kernel/config/firstRun.ts +91 -0
- package/src/kernel/config/globalConfig.ts +94 -0
- package/src/kernel/config/index.ts +35 -0
- package/src/kernel/config/paths.ts +39 -0
- package/src/kernel/config/readConfig.test.ts +245 -0
- package/src/kernel/config/readConfig.ts +94 -0
- package/src/kernel/config/schema.ts +56 -0
- package/src/kernel/config/types.ts +106 -0
- package/src/kernel/config/writeConfigField.ts +82 -0
- package/src/kernel/error/PragmaError.test.ts +119 -0
- package/src/kernel/error/PragmaError.ts +182 -0
- package/src/kernel/error/constants.ts +38 -0
- package/src/kernel/error/fromTaskError.test.ts +83 -0
- package/src/kernel/error/fromTaskError.ts +80 -0
- package/src/kernel/error/index.ts +23 -0
- package/src/kernel/error/recovery.test.ts +60 -0
- package/src/kernel/error/recovery.ts +49 -0
- package/src/kernel/error/renderError.ts +101 -0
- package/src/kernel/error/serialize.ts +28 -0
- package/src/kernel/error/types.ts +62 -0
- package/src/kernel/packs/collect.test.ts +138 -0
- package/src/kernel/packs/collect.ts +108 -0
- package/src/kernel/packs/compile.test.ts +229 -0
- package/src/kernel/packs/compile.ts +315 -0
- package/src/kernel/packs/disclosure.test.ts +200 -0
- package/src/kernel/packs/disclosure.ts +98 -0
- package/src/kernel/packs/glob.ts +39 -0
- package/src/kernel/packs/graphql/buildLookupDocument.ts +397 -0
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +217 -0
- package/src/kernel/packs/graphql/nameMap.ts +67 -0
- package/src/kernel/packs/graphqlSource.test.ts +383 -0
- package/src/kernel/packs/iri.ts +78 -0
- package/src/kernel/packs/renderPack.ts +196 -0
- package/src/kernel/packs/resolveEntity.ts +232 -0
- package/src/kernel/packs/runBodies.ts +157 -0
- package/src/kernel/packs/sample.ts +60 -0
- package/src/kernel/packs/schema.ts +328 -0
- package/src/kernel/packs/sparql/applyFilters.ts +83 -0
- package/src/kernel/packs/sparql/applySearch.ts +33 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +180 -0
- package/src/kernel/packs/sparql/escape.ts +22 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +80 -0
- package/src/kernel/packs/sparql/runSelect.ts +84 -0
- package/src/kernel/packs/toolDescription.test.ts +81 -0
- package/src/kernel/packs/types.ts +337 -0
- package/src/kernel/packs/uniqueness.ts +35 -0
- package/src/kernel/project/cli/buildProgram.test.ts +387 -0
- package/src/kernel/project/cli/buildProgram.ts +280 -0
- package/src/kernel/project/cli/dispatch.test.ts +288 -0
- package/src/kernel/project/cli/dispatch.ts +334 -0
- package/src/kernel/project/cli/exitCodes.test.ts +59 -0
- package/src/kernel/project/cli/exitCodes.ts +68 -0
- package/src/kernel/project/cli/globalFlags.test.ts +99 -0
- package/src/kernel/project/cli/globalFlags.ts +149 -0
- package/src/kernel/project/cli/helpFormat.ts +58 -0
- package/src/kernel/project/cli/index.ts +21 -0
- package/src/kernel/project/cli/interactionSeam.test.ts +99 -0
- package/src/kernel/project/cli/rootHelp.ts +218 -0
- package/src/kernel/project/cli/suggest.test.ts +54 -0
- package/src/kernel/project/cli/suggest.ts +67 -0
- package/src/kernel/project/cli/suggestNames.ts +122 -0
- package/src/kernel/project/cli/verbHelp.test.ts +138 -0
- package/src/kernel/project/cli/verbHelp.ts +144 -0
- package/src/kernel/project/mcp/buildServer.ts +70 -0
- package/src/kernel/project/mcp/envelope.ts +44 -0
- package/src/kernel/project/mcp/index.ts +8 -0
- package/src/kernel/project/mcp/instructions.ts +48 -0
- package/src/kernel/project/mcp/parity.test.ts +72 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +96 -0
- package/src/kernel/project/mcp/prompts/provider.ts +74 -0
- package/src/kernel/project/mcp/prompts/source.ts +194 -0
- package/src/kernel/project/mcp/registerVerb.test.ts +238 -0
- package/src/kernel/project/mcp/registerVerb.ts +296 -0
- package/src/kernel/project/mcp/serve.ts +34 -0
- package/src/kernel/project/mcp/toolDescriptions.test.ts +80 -0
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +127 -0
- package/src/kernel/render/compactUri.ts +25 -0
- package/src/kernel/render/contracts.ts +72 -0
- package/src/kernel/render/disclosure.ts +44 -0
- package/src/kernel/render/envelope.ts +50 -0
- package/src/kernel/render/formatters.ts +30 -0
- package/src/kernel/render/index.ts +30 -0
- package/src/kernel/render/prefixes.ts +21 -0
- package/src/kernel/render/renderers.test.ts +171 -0
- package/src/kernel/render/renderers.ts +429 -0
- package/src/kernel/render/writeStdout.test.ts +43 -0
- package/src/kernel/render/writeStdout.ts +49 -0
- package/src/kernel/runtime/boot.test.ts +69 -0
- package/src/kernel/runtime/boot.ts +59 -0
- package/src/kernel/runtime/facade.test.ts +125 -0
- package/src/kernel/runtime/facade.ts +47 -0
- package/src/kernel/runtime/graphpack/build.ts +148 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +229 -0
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +8 -0
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +4 -0
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +39 -0
- package/src/kernel/runtime/graphpack/embedded.ts +70 -0
- package/src/kernel/runtime/graphpack/graphpack.test.ts +153 -0
- package/src/kernel/runtime/graphpack/hash.ts +46 -0
- package/src/kernel/runtime/graphpack/index.ts +21 -0
- package/src/kernel/runtime/graphpack/manifest.ts +55 -0
- package/src/kernel/runtime/graphpack/read.ts +102 -0
- package/src/kernel/runtime/graphpack/types.ts +111 -0
- package/src/kernel/runtime/index.ts +15 -0
- package/src/kernel/runtime/loadSession.ts +56 -0
- package/src/kernel/runtime/lock.ts +90 -0
- package/src/kernel/runtime/paths.ts +37 -0
- package/src/kernel/runtime/probe.test.ts +16 -0
- package/src/kernel/runtime/probe.ts +39 -0
- package/src/kernel/runtime/readEntity.ts +83 -0
- package/src/kernel/runtime/refs/gitOps.ts +88 -0
- package/src/kernel/runtime/refs/parseRef.test.ts +34 -0
- package/src/kernel/runtime/refs/parseRef.ts +103 -0
- package/src/kernel/runtime/refs/resolve.ts +320 -0
- package/src/kernel/runtime/resolveSources.test.ts +154 -0
- package/src/kernel/runtime/resolveSources.ts +66 -0
- package/src/kernel/runtime/store.test.ts +94 -0
- package/src/kernel/runtime/store.ts +90 -0
- package/src/kernel/runtime/storeless.test.ts +86 -0
- package/src/kernel/runtime/types.ts +210 -0
- package/src/kernel/runtime/wasmEmbed.test.ts +142 -0
- package/src/kernel/spec/asVerb.ts +23 -0
- package/src/kernel/spec/emitSurface.test.ts +65 -0
- package/src/kernel/spec/emitSurface.ts +223 -0
- package/src/kernel/spec/index.ts +34 -0
- package/src/kernel/spec/surfaceConformance.test.ts +94 -0
- package/src/kernel/spec/surfaceConformance.ts +135 -0
- package/src/kernel/spec/types.ts +233 -0
- package/src/kernel/spec/validate.test.ts +81 -0
- package/src/kernel/spec/validate.ts +125 -0
- package/src/testing/PARITY_GAPS.test.ts +32 -0
- package/src/testing/PARITY_GAPS.ts +179 -0
- package/src/testing/behavioral/README.md +164 -0
- package/src/testing/behavioral/agentSession.mcp.test.ts +160 -0
- package/src/testing/behavioral/autoLlm.e2e.test.ts +44 -0
- package/src/testing/behavioral/completion.test.ts +132 -0
- package/src/testing/behavioral/disclosure.test.ts +103 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +120 -0
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +123 -0
- package/src/testing/behavioral/exitCodes.e2e.test.ts +53 -0
- package/src/testing/behavioral/firstRun.e2e.test.ts +40 -0
- package/src/testing/behavioral/harness.foundation.test.ts +136 -0
- package/src/testing/behavioral/journeys.cli.test.ts +129 -0
- package/src/testing/behavioral/liveReadSurface.ts +80 -0
- package/src/testing/behavioral/mcpServe.e2e.test.ts +21 -0
- package/src/testing/behavioral/mcpSurface.test.ts +139 -0
- package/src/testing/behavioral/parity.test.ts +224 -0
- package/src/testing/behavioral/rootCli.e2e.test.ts +62 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +201 -0
- package/src/testing/eval/cases/assembly.ts +195 -0
- package/src/testing/eval/cases/effectful.ts +245 -0
- package/src/testing/eval/cases/readNouns.ts +232 -0
- package/src/testing/eval/cases/stable.ts +163 -0
- package/src/testing/eval/eval.test.ts +74 -0
- package/src/testing/eval/harness.ts +91 -0
- package/src/testing/eval/report.ts +58 -0
- package/src/testing/fixtures/blockGraph.ts +112 -0
- package/src/testing/fixtures/completionFixture.ts +239 -0
- package/src/testing/fixtures/fixtureCapability.ts +175 -0
- package/src/testing/fixtures/graph/canonical.ts +184 -0
- package/src/testing/fixtures/packs/recipe.ts +78 -0
- package/src/testing/helpers/fixtureGraph.ts +148 -0
- package/src/testing/helpers/golden.ts +45 -0
- package/src/testing/helpers/packRuntime.ts +118 -0
- package/src/testing/helpers/parity.ts +86 -0
- package/src/testing/helpers/projectCli.ts +35 -0
- package/src/testing/helpers/projectMcp.ts +145 -0
- package/src/testing/helpers/runCli.ts +128 -0
- package/src/testing/perf/budgets.test.ts +164 -0
- package/src/testing/perf/budgets.ts +37 -0
- package/src/testing/perf/globalSetup.ts +30 -0
- package/src/testing/perf/measure.ts +97 -0
- package/src/testing/setupXdgIsolation.ts +17 -5
- package/src/types.ts +42 -0
- package/README.md +0 -429
- package/src/bin.test.ts +0 -54
- package/src/compile-validation.runner.ts +0 -137
- package/src/compile-validation.ts +0 -191
- package/src/completions/computeSocketPath.test.ts +0 -26
- package/src/completions/computeSocketPath.ts +0 -16
- package/src/completions/constants.ts +0 -18
- package/src/completions/handleQuery.test.ts +0 -93
- package/src/completions/handleQuery.ts +0 -30
- package/src/completions/index.ts +0 -14
- package/src/completions/queryCompletions.test.ts +0 -100
- package/src/completions/queryCompletions.ts +0 -61
- package/src/completions/querySocket.test.ts +0 -70
- package/src/completions/querySocket.ts +0 -44
- package/src/completions/startCompletionsServer.test.ts +0 -74
- package/src/completions/startCompletionsServer.ts +0 -75
- package/src/completions/startCompletionsServer.unit.test.ts +0 -131
- package/src/completions/waitForSocket.test.ts +0 -27
- package/src/completions/waitForSocket.ts +0 -27
- package/src/config/configExists.ts +0 -14
- package/src/config/defaultConfig.test.ts +0 -33
- package/src/config/defaultConfig.ts +0 -59
- package/src/config/defaults.json +0 -17
- package/src/config/findProjectConfigPath.test.ts +0 -53
- package/src/config/findProjectConfigPath.ts +0 -36
- package/src/config/index.ts +0 -21
- package/src/config/mergeConfigFileUpdate.ts +0 -58
- package/src/config/parseConfigValues.ts +0 -215
- package/src/config/readConfig.test.ts +0 -395
- package/src/config/readConfig.ts +0 -21
- package/src/config/readConfigLayers.test.ts +0 -107
- package/src/config/readConfigLayers.ts +0 -115
- package/src/config/resolveConfigPath.test.ts +0 -20
- package/src/config/resolveConfigPath.ts +0 -11
- package/src/config/resolveGlobalConfigPath.ts +0 -13
- package/src/config/resolveWriteConfigPath.test.ts +0 -53
- package/src/config/resolveWriteConfigPath.ts +0 -31
- package/src/config/types.ts +0 -121
- package/src/config/writeConfig.ts +0 -37
- package/src/domains/block/blockConfig.ts +0 -97
- package/src/domains/block/commands/index.ts +0 -5
- package/src/domains/block/commands/list.test.ts +0 -111
- package/src/domains/block/commands/list.ts +0 -11
- package/src/domains/block/commands/lookup.test.ts +0 -187
- package/src/domains/block/commands/lookup.ts +0 -14
- package/src/domains/block/commands/sample.ts +0 -55
- package/src/domains/block/formatters/index.ts +0 -5
- package/src/domains/block/formatters/list.test.ts +0 -107
- package/src/domains/block/formatters/list.ts +0 -50
- package/src/domains/block/formatters/lookup.test.ts +0 -318
- package/src/domains/block/formatters/lookup.ts +0 -149
- package/src/domains/block/formatters/sample.ts +0 -21
- package/src/domains/block/formatters/types.ts +0 -16
- package/src/domains/block/helpers/index.ts +0 -4
- package/src/domains/block/helpers/resolveAspects.test.ts +0 -64
- package/src/domains/block/helpers/resolveAspects.ts +0 -35
- package/src/domains/block/index.ts +0 -25
- package/src/domains/block/mcp/index.ts +0 -2
- package/src/domains/block/mcp/specs.ts +0 -67
- package/src/domains/block/operations/index.ts +0 -5
- package/src/domains/block/operations/list.test.ts +0 -80
- package/src/domains/block/operations/list.ts +0 -72
- package/src/domains/block/operations/lookup.test.ts +0 -129
- package/src/domains/block/operations/lookup.ts +0 -446
- package/src/domains/block/operations/sample.ts +0 -41
- package/src/domains/block/orchestration/blockEmptyError.test.ts +0 -26
- package/src/domains/block/orchestration/blockEmptyError.ts +0 -19
- package/src/domains/block/orchestration/buildBlockFilters.ts +0 -12
- package/src/domains/block/orchestration/enrichBlocks.ts +0 -41
- package/src/domains/block/orchestration/index.ts +0 -5
- package/src/domains/block/orchestration/resolveBlockList.ts +0 -39
- package/src/domains/block/orchestration/resolveBlockLookup.ts +0 -35
- package/src/domains/block/stories.test.ts +0 -28
- package/src/domains/block/stories.ts +0 -254
- package/src/domains/block/types.ts +0 -30
- package/src/domains/config/commands/channel.test.ts +0 -112
- package/src/domains/config/commands/channel.ts +0 -86
- package/src/domains/config/commands/configScope.ts +0 -46
- package/src/domains/config/commands/framework.test.ts +0 -105
- package/src/domains/config/commands/framework.ts +0 -91
- package/src/domains/config/commands/index.ts +0 -6
- package/src/domains/config/commands/show.test.ts +0 -61
- package/src/domains/config/commands/show.ts +0 -11
- package/src/domains/config/commands/tier.test.ts +0 -95
- package/src/domains/config/commands/tier.ts +0 -84
- package/src/domains/config/commands/trace.test.ts +0 -165
- package/src/domains/config/commands/trace.ts +0 -83
- package/src/domains/config/formatters/channel.test.ts +0 -70
- package/src/domains/config/formatters/channel.ts +0 -37
- package/src/domains/config/formatters/framework.ts +0 -37
- package/src/domains/config/formatters/index.ts +0 -6
- package/src/domains/config/formatters/show.test.ts +0 -153
- package/src/domains/config/formatters/show.ts +0 -89
- package/src/domains/config/formatters/tier.test.ts +0 -86
- package/src/domains/config/formatters/tier.ts +0 -48
- package/src/domains/config/formatters/trace.ts +0 -28
- package/src/domains/config/index.ts +0 -36
- package/src/domains/config/mcp/index.ts +0 -2
- package/src/domains/config/mcp/specs.ts +0 -100
- package/src/domains/config/operations/index.ts +0 -6
- package/src/domains/config/operations/show.test.ts +0 -78
- package/src/domains/config/operations/show.ts +0 -48
- package/src/domains/config/operations/types.ts +0 -20
- package/src/domains/config/operations/validateChannel.test.ts +0 -36
- package/src/domains/config/operations/validateChannel.ts +0 -24
- package/src/domains/config/operations/validateFramework.ts +0 -24
- package/src/domains/config/operations/validateTier.test.ts +0 -56
- package/src/domains/config/operations/validateTier.ts +0 -35
- package/src/domains/config/stories.ts +0 -42
- package/src/domains/config/tasks/index.ts +0 -6
- package/src/domains/config/tasks/setChannel.ts +0 -21
- package/src/domains/config/tasks/setFramework.ts +0 -21
- package/src/domains/config/tasks/setTier.ts +0 -20
- package/src/domains/config/tasks/setTrace.ts +0 -20
- package/src/domains/config/tasks/writeConfigField.ts +0 -41
- package/src/domains/create/commands/component.test.ts +0 -166
- package/src/domains/create/commands/component.ts +0 -123
- package/src/domains/create/commands/index.ts +0 -3
- package/src/domains/create/commands/package.test.ts +0 -35
- package/src/domains/create/commands/package.ts +0 -21
- package/src/domains/create/generators.ts +0 -8
- package/src/domains/create/index.ts +0 -15
- package/src/domains/create/mcp/index.ts +0 -2
- package/src/domains/create/mcp/specs.ts +0 -168
- package/src/domains/doctor/commands/doctor.test.ts +0 -75
- package/src/domains/doctor/commands/doctor.ts +0 -43
- package/src/domains/doctor/commands/index.ts +0 -2
- package/src/domains/doctor/formatters/doctor.test.ts +0 -117
- package/src/domains/doctor/formatters/doctor.ts +0 -84
- package/src/domains/doctor/formatters/index.ts +0 -2
- package/src/domains/doctor/index.ts +0 -9
- package/src/domains/doctor/mcp/index.ts +0 -2
- package/src/domains/doctor/mcp/specs.ts +0 -41
- package/src/domains/doctor/operations/checks/checkConfigFile.ts +0 -42
- package/src/domains/doctor/operations/checks/checkKeStore.ts +0 -38
- package/src/domains/doctor/operations/checks/checkMcpCommands.ts +0 -130
- package/src/domains/doctor/operations/checks/checkMcpConfigured.ts +0 -65
- package/src/domains/doctor/operations/checks/checkNodeVersion.ts +0 -25
- package/src/domains/doctor/operations/checks/checkPackageRefs.ts +0 -58
- package/src/domains/doctor/operations/checks/checkPragmaVersion.ts +0 -20
- package/src/domains/doctor/operations/checks/checkShellCompletions.ts +0 -42
- package/src/domains/doctor/operations/checks/checkSkillsSymlinked.ts +0 -64
- package/src/domains/doctor/operations/checks/index.ts +0 -10
- package/src/domains/doctor/operations/checks.test.ts +0 -305
- package/src/domains/doctor/operations/index.ts +0 -3
- package/src/domains/doctor/operations/runChecks.test.ts +0 -176
- package/src/domains/doctor/operations/runChecks.ts +0 -78
- package/src/domains/doctor/operations/types.ts +0 -20
- package/src/domains/graph/commands/index.ts +0 -4
- package/src/domains/graph/commands/inspect.test.ts +0 -94
- package/src/domains/graph/commands/inspect.ts +0 -63
- package/src/domains/graph/commands/query.test.ts +0 -92
- package/src/domains/graph/commands/query.ts +0 -60
- package/src/domains/graph/formatters/index.ts +0 -4
- package/src/domains/graph/formatters/inspect.ts +0 -50
- package/src/domains/graph/formatters/query.ts +0 -37
- package/src/domains/graph/helpers/index.ts +0 -3
- package/src/domains/graph/helpers/resolveUri.test.ts +0 -50
- package/src/domains/graph/helpers/resolveUri.ts +0 -77
- package/src/domains/graph/index.ts +0 -22
- package/src/domains/graph/mcp/index.ts +0 -2
- package/src/domains/graph/mcp/specs.ts +0 -82
- package/src/domains/graph/operations/executeQuery.test.ts +0 -68
- package/src/domains/graph/operations/executeQuery.ts +0 -32
- package/src/domains/graph/operations/index.ts +0 -4
- package/src/domains/graph/operations/inspectUri.test.ts +0 -101
- package/src/domains/graph/operations/inspectUri.ts +0 -64
- package/src/domains/graphql/commands/build.test.ts +0 -196
- package/src/domains/graphql/commands/build.ts +0 -117
- package/src/domains/graphql/commands/check.test.ts +0 -141
- package/src/domains/graphql/commands/check.ts +0 -81
- package/src/domains/graphql/commands/index.ts +0 -5
- package/src/domains/graphql/commands/serve.test.ts +0 -40
- package/src/domains/graphql/commands/serve.ts +0 -131
- package/src/domains/graphql/constants.ts +0 -10
- package/src/domains/graphql/formatters/index.ts +0 -3
- package/src/domains/graphql/formatters/report.ts +0 -78
- package/src/domains/graphql/helpers/gatherSources.test.ts +0 -92
- package/src/domains/graphql/helpers/gatherSources.ts +0 -58
- package/src/domains/graphql/helpers/index.ts +0 -6
- package/src/domains/graphql/helpers/parsePrefixes.test.ts +0 -44
- package/src/domains/graphql/helpers/parsePrefixes.ts +0 -38
- package/src/domains/graphql/helpers/resolveSourceFiles.test.ts +0 -56
- package/src/domains/graphql/helpers/resolveSourceFiles.ts +0 -45
- package/src/domains/graphql/helpers/routeGraphql.test.ts +0 -43
- package/src/domains/graphql/helpers/routeGraphql.ts +0 -28
- package/src/domains/graphql/index.ts +0 -24
- package/src/domains/graphql/operations/compileSchema.test.ts +0 -95
- package/src/domains/graphql/operations/compileSchema.ts +0 -107
- package/src/domains/graphql/operations/createSchemaServer.test.ts +0 -50
- package/src/domains/graphql/operations/createSchemaServer.ts +0 -75
- package/src/domains/graphql/operations/index.ts +0 -12
- package/src/domains/graphql/types.ts +0 -29
- package/src/domains/info/commands/index.ts +0 -4
- package/src/domains/info/commands/info.test.ts +0 -88
- package/src/domains/info/commands/info.ts +0 -47
- package/src/domains/info/commands/upgrade.test.ts +0 -183
- package/src/domains/info/commands/upgrade.ts +0 -153
- package/src/domains/info/constants.test.ts +0 -22
- package/src/domains/info/constants.ts +0 -15
- package/src/domains/info/formatters/index.ts +0 -8
- package/src/domains/info/formatters/info.test.ts +0 -207
- package/src/domains/info/formatters/info.ts +0 -131
- package/src/domains/info/formatters/upgrade.test.ts +0 -133
- package/src/domains/info/formatters/upgrade.ts +0 -68
- package/src/domains/info/index.ts +0 -9
- package/src/domains/info/mcp/index.ts +0 -2
- package/src/domains/info/mcp/specs.ts +0 -65
- package/src/domains/info/operations/checkRegistryVersion.test.ts +0 -124
- package/src/domains/info/operations/checkRegistryVersion.ts +0 -45
- package/src/domains/info/operations/collectInfo.test.ts +0 -122
- package/src/domains/info/operations/collectInfo.ts +0 -94
- package/src/domains/info/operations/collectStoreSummary.test.ts +0 -61
- package/src/domains/info/operations/collectStoreSummary.ts +0 -42
- package/src/domains/info/operations/index.ts +0 -5
- package/src/domains/info/types.test-d.ts +0 -35
- package/src/domains/info/types.ts +0 -54
- package/src/domains/llm/capabilities.test.ts +0 -91
- package/src/domains/llm/commands/capabilities.ts +0 -28
- package/src/domains/llm/commands/index.ts +0 -4
- package/src/domains/llm/commands/llm.ts +0 -37
- package/src/domains/llm/data/commandReference.ts +0 -97
- package/src/domains/llm/data/decisionTrees.ts +0 -50
- package/src/domains/llm/data/index.ts +0 -6
- package/src/domains/llm/data/toolCatalog.ts +0 -190
- package/src/domains/llm/formatters/capabilities.ts +0 -50
- package/src/domains/llm/formatters/index.ts +0 -4
- package/src/domains/llm/formatters/orientation.ts +0 -53
- package/src/domains/llm/index.ts +0 -9
- package/src/domains/llm/llmCommand.test.ts +0 -93
- package/src/domains/llm/mcp/index.ts +0 -2
- package/src/domains/llm/mcp/specs.ts +0 -94
- package/src/domains/llm/operations/collectContext.ts +0 -47
- package/src/domains/llm/operations/index.ts +0 -3
- package/src/domains/llm/types.ts +0 -72
- package/src/domains/modifier/commands/index.ts +0 -5
- package/src/domains/modifier/commands/list.test.ts +0 -57
- package/src/domains/modifier/commands/list.ts +0 -9
- package/src/domains/modifier/commands/lookup.test.ts +0 -91
- package/src/domains/modifier/commands/lookup.ts +0 -14
- package/src/domains/modifier/commands/sample.ts +0 -53
- package/src/domains/modifier/formatters/index.ts +0 -8
- package/src/domains/modifier/formatters/list.test.ts +0 -38
- package/src/domains/modifier/formatters/list.ts +0 -22
- package/src/domains/modifier/formatters/lookup.test.ts +0 -33
- package/src/domains/modifier/formatters/lookup.ts +0 -50
- package/src/domains/modifier/formatters/sample.ts +0 -15
- package/src/domains/modifier/index.ts +0 -27
- package/src/domains/modifier/mcp/index.ts +0 -2
- package/src/domains/modifier/mcp/specs.ts +0 -65
- package/src/domains/modifier/modifierConfig.ts +0 -36
- package/src/domains/modifier/operations/index.ts +0 -5
- package/src/domains/modifier/operations/list.test.ts +0 -39
- package/src/domains/modifier/operations/list.ts +0 -41
- package/src/domains/modifier/operations/lookup.test.ts +0 -37
- package/src/domains/modifier/operations/lookup.ts +0 -67
- package/src/domains/modifier/operations/sample.ts +0 -32
- package/src/domains/modifier/orchestration/index.ts +0 -3
- package/src/domains/modifier/orchestration/modifierEmptyError.test.ts +0 -26
- package/src/domains/modifier/orchestration/modifierEmptyError.ts +0 -15
- package/src/domains/modifier/orchestration/resolveModifierList.ts +0 -16
- package/src/domains/modifier/orchestration/resolveModifierLookup.ts +0 -33
- package/src/domains/modifier/stories.test.ts +0 -20
- package/src/domains/modifier/stories.ts +0 -77
- package/src/domains/modifier/types.ts +0 -5
- package/src/domains/ontology/commands/index.ts +0 -4
- package/src/domains/ontology/commands/list.test.ts +0 -82
- package/src/domains/ontology/commands/list.ts +0 -11
- package/src/domains/ontology/commands/show.test.ts +0 -103
- package/src/domains/ontology/commands/show.ts +0 -14
- package/src/domains/ontology/formatters/index.ts +0 -4
- package/src/domains/ontology/formatters/list.ts +0 -39
- package/src/domains/ontology/formatters/show.ts +0 -105
- package/src/domains/ontology/helpers/findNamespace.ts +0 -23
- package/src/domains/ontology/helpers/index.ts +0 -7
- package/src/domains/ontology/helpers/queryClasses.ts +0 -50
- package/src/domains/ontology/helpers/queryProperties.ts +0 -57
- package/src/domains/ontology/helpers/resolvePrefix.ts +0 -45
- package/src/domains/ontology/index.ts +0 -26
- package/src/domains/ontology/mcp/index.ts +0 -2
- package/src/domains/ontology/mcp/specs.ts +0 -16
- package/src/domains/ontology/operations/index.ts +0 -5
- package/src/domains/ontology/operations/listOntologies.test.ts +0 -45
- package/src/domains/ontology/operations/listOntologies.ts +0 -101
- package/src/domains/ontology/operations/showOntology.test.ts +0 -65
- package/src/domains/ontology/operations/showOntology.ts +0 -41
- package/src/domains/ontology/operations/showOntologyRaw.test.ts +0 -39
- package/src/domains/ontology/operations/showOntologyRaw.ts +0 -50
- package/src/domains/ontology/stories.test.ts +0 -36
- package/src/domains/ontology/stories.ts +0 -108
- package/src/domains/refs/commands/updateRefs.ts +0 -52
- package/src/domains/refs/formatters/updateRefs.ts +0 -27
- package/src/domains/refs/index.ts +0 -27
- package/src/domains/refs/operations/gitOps.test.ts +0 -155
- package/src/domains/refs/operations/gitOps.ts +0 -92
- package/src/domains/refs/operations/index.ts +0 -10
- package/src/domains/refs/operations/parseRef.test.ts +0 -157
- package/src/domains/refs/operations/parseRef.ts +0 -114
- package/src/domains/refs/operations/paths.test.ts +0 -98
- package/src/domains/refs/operations/paths.ts +0 -91
- package/src/domains/refs/operations/readGlobalRefs.test.ts +0 -63
- package/src/domains/refs/operations/readGlobalRefs.ts +0 -37
- package/src/domains/refs/operations/updateRefs.test.ts +0 -167
- package/src/domains/refs/operations/updateRefs.ts +0 -181
- package/src/domains/setup/commands/all.ts +0 -58
- package/src/domains/setup/commands/completions.ts +0 -85
- package/src/domains/setup/commands/entrypoints.test.ts +0 -170
- package/src/domains/setup/commands/index.ts +0 -6
- package/src/domains/setup/commands/lsp.ts +0 -49
- package/src/domains/setup/commands/mcp.ts +0 -119
- package/src/domains/setup/commands/skills.test.ts +0 -68
- package/src/domains/setup/commands/skills.ts +0 -110
- package/src/domains/setup/formatters/index.ts +0 -2
- package/src/domains/setup/formatters/skills.test.ts +0 -103
- package/src/domains/setup/formatters/skills.ts +0 -112
- package/src/domains/setup/formatters/types.ts +0 -7
- package/src/domains/setup/helpers/completionScripts.test.ts +0 -58
- package/src/domains/setup/helpers/completionScripts.ts +0 -92
- package/src/domains/setup/helpers/constants.ts +0 -2
- package/src/domains/setup/helpers/detectShell.test.ts +0 -48
- package/src/domains/setup/helpers/detectShell.ts +0 -20
- package/src/domains/setup/helpers/index.ts +0 -12
- package/src/domains/setup/helpers/runSetupTask.test.ts +0 -277
- package/src/domains/setup/helpers/runSetupTask.ts +0 -221
- package/src/domains/setup/index.ts +0 -33
- package/src/domains/setup/operations/index.ts +0 -6
- package/src/domains/setup/operations/setupAll.test.ts +0 -48
- package/src/domains/setup/operations/setupAll.ts +0 -41
- package/src/domains/setup/operations/setupCompletions.test.ts +0 -94
- package/src/domains/setup/operations/setupCompletions.ts +0 -54
- package/src/domains/setup/operations/setupLsp.test.ts +0 -29
- package/src/domains/setup/operations/setupLsp.ts +0 -17
- package/src/domains/setup/operations/setupMcp.test.ts +0 -120
- package/src/domains/setup/operations/setupMcp.ts +0 -108
- package/src/domains/setup/operations/setupSkills.test.ts +0 -191
- package/src/domains/setup/operations/setupSkills.ts +0 -160
- package/src/domains/setup/types.ts +0 -18
- package/src/domains/shared/ToolSpec.ts +0 -49
- package/src/domains/shared/bootStore.ts +0 -135
- package/src/domains/shared/buildQuery.ts +0 -18
- package/src/domains/shared/compactUri.test.ts +0 -32
- package/src/domains/shared/compactUri.ts +0 -21
- package/src/domains/shared/context.ts +0 -16
- package/src/domains/shared/contracts.ts +0 -164
- package/src/domains/shared/createInteractivePromptSession.test.ts +0 -439
- package/src/domains/shared/createInteractivePromptSession.ts +0 -236
- package/src/domains/shared/emptyErrorRecovery.test.ts +0 -109
- package/src/domains/shared/extractLocalName.test.ts +0 -21
- package/src/domains/shared/extractLocalName.ts +0 -14
- package/src/domains/shared/filters/buildChannelFilter.test.ts +0 -52
- package/src/domains/shared/filters/buildChannelFilter.ts +0 -41
- package/src/domains/shared/filters/buildFilterConfig.ts +0 -15
- package/src/domains/shared/filters/buildFilters.test.ts +0 -33
- package/src/domains/shared/filters/buildFilters.ts +0 -30
- package/src/domains/shared/filters/buildTierFilter.test.ts +0 -78
- package/src/domains/shared/filters/buildTierFilter.ts +0 -69
- package/src/domains/shared/filters/describeFilters.ts +0 -14
- package/src/domains/shared/filters/index.ts +0 -10
- package/src/domains/shared/formatters.ts +0 -82
- package/src/domains/shared/loaders/bundledLoader.test.ts +0 -248
- package/src/domains/shared/loaders/bundledLoader.ts +0 -206
- package/src/domains/shared/loaders/gitLoader.ts +0 -31
- package/src/domains/shared/loaders/index.ts +0 -9
- package/src/domains/shared/loaders/localLoader.ts +0 -87
- package/src/domains/shared/loaders/readPackageDir.ts +0 -147
- package/src/domains/shared/loaders/storyAssetsPlugin.test.ts +0 -84
- package/src/domains/shared/loaders/storyAssetsPlugin.ts +0 -46
- package/src/domains/shared/lookupMany.test.ts +0 -120
- package/src/domains/shared/lookupMany.ts +0 -85
- package/src/domains/shared/mergeAndParseRefs.test.ts +0 -89
- package/src/domains/shared/mergeAndParseRefs.ts +0 -44
- package/src/domains/shared/namespaces.ts +0 -18
- package/src/domains/shared/packages.ts +0 -20
- package/src/domains/shared/pickRandom.ts +0 -22
- package/src/domains/shared/prefixes.ts +0 -37
- package/src/domains/shared/renderers.ts +0 -410
- package/src/domains/shared/resolveConfiguredGraphs.test.ts +0 -27
- package/src/domains/shared/resolveConfiguredGraphs.ts +0 -41
- package/src/domains/shared/runtime.ts +0 -61
- package/src/domains/shared/sampleFormatters.ts +0 -47
- package/src/domains/shared/semanticPackage.ts +0 -112
- package/src/domains/shared/stories/compileLookupCommand.test.ts +0 -145
- package/src/domains/shared/stories/compileLookupCommand.ts +0 -100
- package/src/domains/shared/stories/compileLookupTool.test.ts +0 -105
- package/src/domains/shared/stories/compileLookupTool.ts +0 -96
- package/src/domains/shared/stories/compileReadCommand.test.ts +0 -121
- package/src/domains/shared/stories/compileReadCommand.ts +0 -48
- package/src/domains/shared/stories/compileReadTool.test.ts +0 -64
- package/src/domains/shared/stories/compileReadTool.ts +0 -38
- package/src/domains/shared/stories/condense.test.ts +0 -18
- package/src/domains/shared/stories/condense.ts +0 -15
- package/src/domains/shared/stories/index.ts +0 -20
- package/src/domains/shared/stories/normalizeNames.test.ts +0 -20
- package/src/domains/shared/stories/normalizeNames.ts +0 -22
- package/src/domains/shared/stories/pack/applyPackFilters.test.ts +0 -102
- package/src/domains/shared/stories/pack/applyPackFilters.ts +0 -76
- package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +0 -51
- package/src/domains/shared/stories/pack/buildLookupQuery.ts +0 -80
- package/src/domains/shared/stories/pack/collectPackStories.test.ts +0 -108
- package/src/domains/shared/stories/pack/collectPackStories.ts +0 -76
- package/src/domains/shared/stories/pack/compilePackCommands.ts +0 -40
- package/src/domains/shared/stories/pack/compilePackStories.test.ts +0 -146
- package/src/domains/shared/stories/pack/compilePackStories.ts +0 -253
- package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +0 -43
- package/src/domains/shared/stories/pack/index.ts +0 -28
- package/src/domains/shared/stories/pack/runSelectQuery.ts +0 -31
- package/src/domains/shared/stories/pack/standardParity.test.ts +0 -308
- package/src/domains/shared/stories/pack/types.ts +0 -104
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +0 -240
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +0 -408
- package/src/domains/shared/stories/projectCliParameters.test.ts +0 -59
- package/src/domains/shared/stories/projectCliParameters.ts +0 -57
- package/src/domains/shared/stories/projectToolParams.test.ts +0 -50
- package/src/domains/shared/stories/projectToolParams.ts +0 -32
- package/src/domains/shared/stories/requirePragmaContext.test.ts +0 -23
- package/src/domains/shared/stories/requirePragmaContext.ts +0 -23
- package/src/domains/shared/stories/resolveLookupDetailed.test.ts +0 -57
- package/src/domains/shared/stories/resolveLookupDetailed.ts +0 -27
- package/src/domains/shared/stories/types.ts +0 -171
- package/src/domains/shared/suggestions/detectCrossDomain.test.ts +0 -43
- package/src/domains/shared/suggestions/detectCrossDomain.ts +0 -116
- package/src/domains/shared/suggestions/expandGlob.test.ts +0 -92
- package/src/domains/shared/suggestions/expandGlob.ts +0 -52
- package/src/domains/shared/suggestions/expandLookupQueries.ts +0 -57
- package/src/domains/shared/suggestions/index.ts +0 -7
- package/src/domains/shared/suggestions/listDomainNames.ts +0 -61
- package/src/domains/shared/suggestions/suggestNames.test.ts +0 -70
- package/src/domains/shared/suggestions/suggestNames.ts +0 -130
- package/src/domains/shared/types/block.ts +0 -107
- package/src/domains/shared/types/common.ts +0 -33
- package/src/domains/shared/types/graph.ts +0 -17
- package/src/domains/shared/types/index.ts +0 -50
- package/src/domains/shared/types/modifier.ts +0 -22
- package/src/domains/shared/types/ontology.ts +0 -50
- package/src/domains/shared/types/runtime.ts +0 -24
- package/src/domains/shared/types/sample.ts +0 -17
- package/src/domains/shared/types/standard.ts +0 -64
- package/src/domains/shared/types/tier.ts +0 -15
- package/src/domains/shared/types/token.ts +0 -30
- package/src/domains/skill/commands/index.ts +0 -4
- package/src/domains/skill/commands/list.test.ts +0 -115
- package/src/domains/skill/commands/list.ts +0 -11
- package/src/domains/skill/commands/lookup.test.ts +0 -118
- package/src/domains/skill/commands/lookup.ts +0 -14
- package/src/domains/skill/formatters/index.ts +0 -3
- package/src/domains/skill/formatters/list.test.ts +0 -140
- package/src/domains/skill/formatters/list.ts +0 -119
- package/src/domains/skill/formatters/lookup.test.ts +0 -46
- package/src/domains/skill/formatters/lookup.ts +0 -57
- package/src/domains/skill/formatters/types.ts +0 -8
- package/src/domains/skill/helpers/index.ts +0 -6
- package/src/domains/skill/helpers/parseFrontmatter.test.ts +0 -122
- package/src/domains/skill/helpers/parseFrontmatter.ts +0 -112
- package/src/domains/skill/helpers/resolveSkillSources.ts +0 -70
- package/src/domains/skill/index.ts +0 -23
- package/src/domains/skill/mcp/index.ts +0 -2
- package/src/domains/skill/mcp/specs.ts +0 -19
- package/src/domains/skill/operations/discover.test.ts +0 -176
- package/src/domains/skill/operations/discover.ts +0 -59
- package/src/domains/skill/operations/index.ts +0 -5
- package/src/domains/skill/operations/list.test.ts +0 -76
- package/src/domains/skill/operations/list.ts +0 -47
- package/src/domains/skill/operations/lookup.test.ts +0 -91
- package/src/domains/skill/operations/lookup.ts +0 -70
- package/src/domains/skill/stories.test.ts +0 -43
- package/src/domains/skill/stories.ts +0 -103
- package/src/domains/skill/types.ts +0 -33
- package/src/domains/standard/commands/categories.test.ts +0 -70
- package/src/domains/standard/commands/categories.ts +0 -48
- package/src/domains/standard/commands/index.ts +0 -6
- package/src/domains/standard/commands/list.test.ts +0 -105
- package/src/domains/standard/commands/list.ts +0 -11
- package/src/domains/standard/commands/lookup.test.ts +0 -135
- package/src/domains/standard/commands/lookup.ts +0 -14
- package/src/domains/standard/commands/sample.ts +0 -57
- package/src/domains/standard/formatters/categories.test.ts +0 -44
- package/src/domains/standard/formatters/categories.ts +0 -38
- package/src/domains/standard/formatters/index.ts +0 -10
- package/src/domains/standard/formatters/list.test.ts +0 -169
- package/src/domains/standard/formatters/list.ts +0 -184
- package/src/domains/standard/formatters/lookup.test.ts +0 -95
- package/src/domains/standard/formatters/lookup.ts +0 -101
- package/src/domains/standard/formatters/sample.ts +0 -15
- package/src/domains/standard/formatters/types.ts +0 -31
- package/src/domains/standard/index.ts +0 -40
- package/src/domains/standard/mcp/index.ts +0 -2
- package/src/domains/standard/mcp/specs.ts +0 -89
- package/src/domains/standard/operations/categories.test.ts +0 -61
- package/src/domains/standard/operations/categories.ts +0 -38
- package/src/domains/standard/operations/index.ts +0 -6
- package/src/domains/standard/operations/list.test.ts +0 -75
- package/src/domains/standard/operations/list.ts +0 -64
- package/src/domains/standard/operations/lookup.test.ts +0 -58
- package/src/domains/standard/operations/lookup.ts +0 -151
- package/src/domains/standard/operations/sample.ts +0 -35
- package/src/domains/standard/orchestration/buildStandardFilters.ts +0 -11
- package/src/domains/standard/orchestration/index.ts +0 -4
- package/src/domains/standard/orchestration/resolveStandardList.ts +0 -45
- package/src/domains/standard/orchestration/resolveStandardLookup.ts +0 -33
- package/src/domains/standard/orchestration/standardEmptyError.test.ts +0 -33
- package/src/domains/standard/orchestration/standardEmptyError.ts +0 -29
- package/src/domains/standard/standardConfig.ts +0 -42
- package/src/domains/standard/stories.test.ts +0 -24
- package/src/domains/standard/stories.ts +0 -151
- package/src/domains/standard/types.ts +0 -15
- package/src/domains/tier/commands/index.ts +0 -3
- package/src/domains/tier/commands/list.test.ts +0 -67
- package/src/domains/tier/commands/list.ts +0 -9
- package/src/domains/tier/formatters/index.ts +0 -3
- package/src/domains/tier/formatters/list.test.ts +0 -33
- package/src/domains/tier/formatters/list.ts +0 -45
- package/src/domains/tier/index.ts +0 -17
- package/src/domains/tier/mcp/index.ts +0 -2
- package/src/domains/tier/mcp/specs.ts +0 -12
- package/src/domains/tier/operations/index.ts +0 -3
- package/src/domains/tier/operations/list.test.ts +0 -32
- package/src/domains/tier/operations/list.ts +0 -33
- package/src/domains/tier/stories.test.ts +0 -22
- package/src/domains/tier/stories.ts +0 -52
- package/src/domains/token/commands/add-config.test.ts +0 -68
- package/src/domains/token/commands/add-config.ts +0 -62
- package/src/domains/token/commands/index.ts +0 -6
- package/src/domains/token/commands/list.test.ts +0 -82
- package/src/domains/token/commands/list.ts +0 -54
- package/src/domains/token/commands/lookup.test.ts +0 -125
- package/src/domains/token/commands/lookup.ts +0 -95
- package/src/domains/token/commands/sample.ts +0 -53
- package/src/domains/token/formatters/index.ts +0 -8
- package/src/domains/token/formatters/list.test.ts +0 -37
- package/src/domains/token/formatters/list.ts +0 -24
- package/src/domains/token/formatters/lookup.test.ts +0 -61
- package/src/domains/token/formatters/lookup.ts +0 -107
- package/src/domains/token/formatters/sample.ts +0 -16
- package/src/domains/token/index.ts +0 -40
- package/src/domains/token/mcp/index.ts +0 -2
- package/src/domains/token/mcp/specs.ts +0 -195
- package/src/domains/token/operations/add-config.test.ts +0 -68
- package/src/domains/token/operations/add-config.ts +0 -61
- package/src/domains/token/operations/index.ts +0 -8
- package/src/domains/token/operations/list.test.ts +0 -50
- package/src/domains/token/operations/list.ts +0 -52
- package/src/domains/token/operations/lookup.test.ts +0 -42
- package/src/domains/token/operations/lookup.ts +0 -75
- package/src/domains/token/operations/sample.ts +0 -32
- package/src/domains/token/orchestration/index.ts +0 -3
- package/src/domains/token/orchestration/resolveTokenList.ts +0 -17
- package/src/domains/token/orchestration/resolveTokenLookup.ts +0 -33
- package/src/domains/token/orchestration/tokenEmptyError.test.ts +0 -33
- package/src/domains/token/orchestration/tokenEmptyError.ts +0 -20
- package/src/domains/token/tokenConfig.ts +0 -38
- package/src/domains/token/types.ts +0 -6
- package/src/domains/trace/commands/clear.ts +0 -71
- package/src/domains/trace/commands/index.ts +0 -5
- package/src/domains/trace/commands/sessions.ts +0 -32
- package/src/domains/trace/commands/show.ts +0 -145
- package/src/domains/trace/formatters/index.ts +0 -9
- package/src/domains/trace/formatters/sessions.ts +0 -80
- package/src/domains/trace/formatters/show.ts +0 -122
- package/src/domains/trace/index.ts +0 -17
- package/src/domains/trace/operations/index.ts +0 -8
- package/src/domains/trace/operations/listSessions.test.ts +0 -55
- package/src/domains/trace/operations/listSessions.ts +0 -52
- package/src/domains/trace/operations/readTraceLog.test.ts +0 -100
- package/src/domains/trace/operations/readTraceLog.ts +0 -104
- package/src/domains/trace/tracePlugin.test.ts +0 -171
- package/src/domains/trace/tracePlugin.ts +0 -159
- package/src/domains/trace/types.ts +0 -65
- package/src/embedWasm.ts +0 -42
- package/src/error/PragmaError.test.ts +0 -121
- package/src/error/PragmaError.ts +0 -177
- package/src/error/constants.ts +0 -12
- package/src/error/index.ts +0 -4
- package/src/error/types.ts +0 -55
- package/src/mcp/createMcpServer.test.ts +0 -41
- package/src/mcp/createMcpServer.ts +0 -53
- package/src/mcp/error/buildRecovery.test.ts +0 -37
- package/src/mcp/error/buildRecovery.ts +0 -17
- package/src/mcp/error/index.ts +0 -12
- package/src/mcp/error/serializeError.test.ts +0 -121
- package/src/mcp/error/serializeError.ts +0 -31
- package/src/mcp/error/serializeErrorPayload.test.ts +0 -38
- package/src/mcp/error/serializeErrorPayload.ts +0 -34
- package/src/mcp/error/types.ts +0 -59
- package/src/mcp/index.ts +0 -15
- package/src/mcp/registerResources.test.ts +0 -566
- package/src/mcp/registerResources.ts +0 -9
- package/src/mcp/resources/buildGraphIndex.ts +0 -167
- package/src/mcp/resources/buildResourceList.test.ts +0 -97
- package/src/mcp/resources/buildResourceList.ts +0 -176
- package/src/mcp/resources/classifyEntity.test.ts +0 -40
- package/src/mcp/resources/classifyEntity.ts +0 -27
- package/src/mcp/resources/constants.ts +0 -105
- package/src/mcp/resources/displayPredicates.ts +0 -62
- package/src/mcp/resources/pickFirstValue.test.ts +0 -29
- package/src/mcp/resources/pickFirstValue.ts +0 -26
- package/src/mcp/resources/pickPrimaryType.test.ts +0 -41
- package/src/mcp/resources/pickPrimaryType.ts +0 -26
- package/src/mcp/resources/rankUriCompletions.test.ts +0 -52
- package/src/mcp/resources/rankUriCompletions.ts +0 -64
- package/src/mcp/resources/readEntity.ts +0 -169
- package/src/mcp/resources/registerResources.ts +0 -126
- package/src/mcp/resources/types.ts +0 -128
- package/src/mcp/runMcpServer.test.ts +0 -66
- package/src/mcp/runMcpServer.ts +0 -24
- package/src/mcp/tools/index.ts +0 -66
- package/src/mcp/tools/registerFromSpec.ts +0 -97
- package/src/mcp/tools/registerTools.test.ts +0 -1201
- package/src/mcp/types.ts +0 -66
- package/src/mcp/utils/estimateTokens.test.ts +0 -14
- package/src/mcp/utils/estimateTokens.ts +0 -9
- package/src/mcp/utils/index.ts +0 -11
- package/src/mcp/utils/wrapTool.test.ts +0 -109
- package/src/mcp/utils/wrapTool.ts +0 -81
- package/src/package-manager/constants.ts +0 -29
- package/src/package-manager/detectInstallSource.test.ts +0 -23
- package/src/package-manager/detectInstallSource.ts +0 -111
- package/src/package-manager/detectLocalInstall.test.ts +0 -16
- package/src/package-manager/detectLocalInstall.ts +0 -43
- package/src/package-manager/detectPackageManager.test.ts +0 -81
- package/src/package-manager/detectPackageManager.ts +0 -30
- package/src/package-manager/index.ts +0 -6
- package/src/package-manager/types.ts +0 -10
- package/src/pipeline/collectCommands.test.ts +0 -37
- package/src/pipeline/collectCommands.ts +0 -60
- package/src/pipeline/constants.ts +0 -14
- package/src/pipeline/createProgram.test.ts +0 -112
- package/src/pipeline/createProgram.ts +0 -89
- package/src/pipeline/formatTerminal.test.ts +0 -43
- package/src/pipeline/formatTerminal.ts +0 -53
- package/src/pipeline/index.ts +0 -22
- package/src/pipeline/mapExitCode.test.ts +0 -41
- package/src/pipeline/mapExitCode.ts +0 -12
- package/src/pipeline/parseGlobalFlags.test.ts +0 -92
- package/src/pipeline/parseGlobalFlags.ts +0 -46
- package/src/pipeline/renderError.test.ts +0 -151
- package/src/pipeline/renderError.ts +0 -129
- package/src/pipeline/resolveCommandKind.test.ts +0 -68
- package/src/pipeline/resolveCommandKind.ts +0 -78
- package/src/pipeline/runCli.orchestration.test.ts +0 -419
- package/src/pipeline/runCli.test.ts +0 -70
- package/src/pipeline/runCli.ts +0 -268
- package/src/pipeline/types.ts +0 -17
- package/src/testing/cli.ts +0 -43
- package/src/testing/createTestMcpClient.ts +0 -68
- package/src/testing/dsFixtures.ts +0 -506
- package/src/testing/fixtures/canonical-config.json +0 -4
- package/src/testing/fixtures/canonical.ttl +0 -437
- package/src/testing/fixtures/filtered-config.json +0 -4
- package/src/testing/fixtures.ts +0 -34
- package/src/testing/graphqlFixtures.ts +0 -72
- package/src/testing/helpers/assertParity.ts +0 -28
- package/src/testing/helpers/createTestMcpClient.ts +0 -40
- package/src/testing/helpers/createTestRuntime.ts +0 -67
- package/src/testing/index.ts +0 -25
- package/src/testing/integration/__snapshots__/executor-golden.test.ts.snap +0 -1207
- package/src/testing/integration/agent-session.test.ts +0 -148
- package/src/testing/integration/boot.test.ts +0 -105
- package/src/testing/integration/cli-user-stories.test.ts +0 -198
- package/src/testing/integration/cross-binary-byte-equality.test.ts +0 -129
- package/src/testing/integration/edge-cases.test.ts +0 -263
- package/src/testing/integration/executor-execution.test.ts +0 -101
- package/src/testing/integration/executor-golden.test.ts +0 -145
- package/src/testing/integration/mcp-surface.test.ts +0 -580
- package/src/testing/integration/parity.test.ts +0 -547
- package/src/testing/regression/0001-skill-discovery-granularity.test.ts +0 -71
- package/src/testing/standardParityFixtures.ts +0 -92
- package/src/testing/store.ts +0 -39
- package/src/testing/storyFixtures.ts +0 -63
- package/src/testing/types.ts +0 -20
- package/src/tui/components/BulletList/BulletList.tsx +0 -46
- package/src/tui/components/BulletList/index.ts +0 -2
- package/src/tui/components/BulletList/types.ts +0 -6
- package/src/tui/components/Card/Card.tsx +0 -73
- package/src/tui/components/Card/index.ts +0 -1
- package/src/tui/components/Card/types.ts +0 -12
- package/src/tui/components/CodeBlock/CodeBlock.tsx +0 -37
- package/src/tui/components/CodeBlock/index.ts +0 -2
- package/src/tui/components/CodeBlock/types.ts +0 -6
- package/src/tui/components/DataRow/DataRow.tsx +0 -80
- package/src/tui/components/DataRow/index.ts +0 -2
- package/src/tui/components/DataRow/types.ts +0 -14
- package/src/tui/components/FieldRow/FieldRow.tsx +0 -24
- package/src/tui/components/FieldRow/index.ts +0 -2
- package/src/tui/components/FieldRow/types.ts +0 -10
- package/src/tui/components/HeaderRow/HeaderRow.tsx +0 -32
- package/src/tui/components/HeaderRow/index.ts +0 -2
- package/src/tui/components/HeaderRow/types.ts +0 -8
- package/src/tui/components/MarkdownText/MarkdownText.tsx +0 -19
- package/src/tui/components/MarkdownText/index.ts +0 -2
- package/src/tui/components/MarkdownText/types.ts +0 -4
- package/src/tui/components/MiniTable/MiniTable.tsx +0 -82
- package/src/tui/components/MiniTable/index.ts +0 -2
- package/src/tui/components/MiniTable/types.ts +0 -6
- package/src/tui/components/SectionRenderer/SectionRenderer.tsx +0 -91
- package/src/tui/components/SectionRenderer/index.ts +0 -2
- package/src/tui/components/SectionRenderer/types.ts +0 -15
- package/src/tui/components/TreeView/TreeView.tsx +0 -84
- package/src/tui/components/TreeView/index.ts +0 -2
- package/src/tui/components/TreeView/types.ts +0 -6
- package/src/tui/components/index.ts +0 -19
- package/src/tui/constants.ts +0 -39
- package/src/tui/createListView.ts +0 -23
- package/src/tui/createLookupView.ts +0 -26
- package/src/tui/helpers/computeWidths.ts +0 -53
- package/src/tui/helpers/fitColumns.ts +0 -33
- package/src/tui/helpers/formatMarkdown.ts +0 -19
- package/src/tui/helpers/getTerminalSize.ts +0 -16
- package/src/tui/helpers/index.ts +0 -6
- package/src/tui/helpers/syntaxColor.ts +0 -67
- package/src/tui/helpers/truncateText.ts +0 -12
- package/src/tui/hooks/index.ts +0 -3
- package/src/tui/hooks/types.ts +0 -7
- package/src/tui/hooks/useAutoExit.ts +0 -17
- package/src/tui/hooks/useTerminalSize.ts +0 -19
- package/src/tui/index.ts +0 -15
- package/src/tui/renderInk.tsx +0 -18
- package/src/tui/types.ts +0 -12
- package/src/tui/views/ListView/ListView.tsx +0 -104
- package/src/tui/views/ListView/index.ts +0 -2
- package/src/tui/views/ListView/types.ts +0 -14
- package/src/tui/views/LookupView/LookupView.tsx +0 -244
- package/src/tui/views/LookupView/index.ts +0 -2
- package/src/tui/views/LookupView/types.ts +0 -16
- package/src/tui/views/index.ts +0 -4
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter: {@link VerbSpec} → an MCP tool.
|
|
3
|
+
*
|
|
4
|
+
* This is the one seam where the grammar meets the MCP SDK — the only place a
|
|
5
|
+
* projector reaches for zod (to build the input schema the SDK validates). The
|
|
6
|
+
* tool name follows the grammar's naming rule, annotations derive from the
|
|
7
|
+
* capability, and a mutating verb gains the plan-first `confirm` flow: without
|
|
8
|
+
* `confirm`, the verb's `Task` is dry-run and a plan is returned
|
|
9
|
+
* (`{ planOnly: true, confirmRequired: true }`); with `confirm: true`, it runs
|
|
10
|
+
* for real.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { statSync } from "node:fs";
|
|
14
|
+
import { isAbsolute } from "node:path";
|
|
15
|
+
import { describeEffect, dryRun, type Task } from "@canonical/task";
|
|
16
|
+
import { runTask } from "@canonical/task/node";
|
|
17
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
18
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
19
|
+
import { z } from "zod";
|
|
20
|
+
import { asPragmaError } from "../../error/fromTaskError.js";
|
|
21
|
+
import { PragmaError } from "../../error/PragmaError.js";
|
|
22
|
+
import type { InteractionRuntime, PragmaRuntime } from "../../runtime/types.js";
|
|
23
|
+
import { toolName } from "../../spec/emitSurface.js";
|
|
24
|
+
import type { McpAnnotations, ParamSpec, VerbSpec } from "../../spec/types.js";
|
|
25
|
+
import { toolError, toolSuccess } from "./envelope.js";
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the effective per-call write root for a mutating tool call.
|
|
29
|
+
*
|
|
30
|
+
* The MCP-only injected `cwd` arg lets an agent target a project directory other
|
|
31
|
+
* than the server's launch dir. It MUST be an absolute, existing directory —
|
|
32
|
+
* this is the SINGLE cwd the SEC-2 jail validates AND the interpreter resolves
|
|
33
|
+
* effect paths against, so a write dir the jail never checked can never exist.
|
|
34
|
+
*
|
|
35
|
+
* @throws PragmaError INVALID_INPUT for a relative or non-directory `cwd`.
|
|
36
|
+
*/
|
|
37
|
+
function resolveEffectiveCwd(rawCwd: unknown, fallback: string): string {
|
|
38
|
+
if (typeof rawCwd !== "string" || rawCwd === "") return fallback;
|
|
39
|
+
if (!isAbsolute(rawCwd)) {
|
|
40
|
+
throw PragmaError.invalidInput("cwd", rawCwd, {
|
|
41
|
+
recovery: { message: "Provide an absolute project directory path." },
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
let isDir = false;
|
|
45
|
+
try {
|
|
46
|
+
isDir = statSync(rawCwd).isDirectory();
|
|
47
|
+
} catch {
|
|
48
|
+
isDir = false;
|
|
49
|
+
}
|
|
50
|
+
if (!isDir) {
|
|
51
|
+
throw PragmaError.invalidInput("cwd", rawCwd, {
|
|
52
|
+
recovery: { message: "The cwd must be an existing directory." },
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return rawCwd;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** The base zod type for a param, before `.describe()`/`.optional()`. */
|
|
59
|
+
function zodForParam(param: ParamSpec): z.ZodTypeAny {
|
|
60
|
+
switch (param.kind) {
|
|
61
|
+
case "string":
|
|
62
|
+
return z.string();
|
|
63
|
+
case "number":
|
|
64
|
+
return z.number();
|
|
65
|
+
case "boolean":
|
|
66
|
+
return z.boolean();
|
|
67
|
+
case "enum":
|
|
68
|
+
return z.enum(param.values as unknown as [string, ...string[]]);
|
|
69
|
+
case "string[]":
|
|
70
|
+
return z.array(z.string());
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Build the zod input shape for a verb's params.
|
|
76
|
+
*
|
|
77
|
+
* Each param becomes a described field; non-required params are optional. The
|
|
78
|
+
* returned raw shape is what the MCP SDK validates tool arguments against.
|
|
79
|
+
*
|
|
80
|
+
* @param params - The verb's parameter specs.
|
|
81
|
+
* @returns A zod raw shape keyed by param name.
|
|
82
|
+
*/
|
|
83
|
+
export function buildZodSchema(params: readonly ParamSpec[]): z.ZodRawShape {
|
|
84
|
+
const shape: z.ZodRawShape = {};
|
|
85
|
+
for (const param of params) {
|
|
86
|
+
let field = zodForParam(param);
|
|
87
|
+
if (param.doc) field = field.describe(param.doc);
|
|
88
|
+
// Apply a declared default so the MCP schema matches the CLI, which fills
|
|
89
|
+
// ParamSpec.default when a flag is omitted (dispatch.extractParams).
|
|
90
|
+
if ("default" in param && param.default !== undefined) {
|
|
91
|
+
field = field.default(param.default);
|
|
92
|
+
} else if (!param.required) {
|
|
93
|
+
field = field.optional();
|
|
94
|
+
}
|
|
95
|
+
shape[param.name] = field;
|
|
96
|
+
}
|
|
97
|
+
return shape;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** Derive the MCP annotations for a verb from its capability. */
|
|
101
|
+
function annotationsFor(verb: VerbSpec): McpAnnotations {
|
|
102
|
+
return {
|
|
103
|
+
readOnlyHint: !verb.capability.mutates,
|
|
104
|
+
...(verb.capability.destructive !== undefined
|
|
105
|
+
? { destructiveHint: verb.capability.destructive }
|
|
106
|
+
: {}),
|
|
107
|
+
openWorldHint: false,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** Pick just the verb's declared params out of the parsed tool arguments. */
|
|
112
|
+
function paramsFromArgs(
|
|
113
|
+
verb: VerbSpec,
|
|
114
|
+
args: Record<string, unknown>,
|
|
115
|
+
): Record<string, unknown> {
|
|
116
|
+
const params: Record<string, unknown> = {};
|
|
117
|
+
for (const param of verb.params) {
|
|
118
|
+
if (param.name in args) params[param.name] = args[param.name];
|
|
119
|
+
}
|
|
120
|
+
return params;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Apply the injected `detail` argument to a per-call runtime.
|
|
125
|
+
*
|
|
126
|
+
* A verb with a {@link DisclosureSpec} gains a `detail` enum tool param (see
|
|
127
|
+
* {@link registerVerb}); when the agent sets it, this seeds `globalFlags.detail`
|
|
128
|
+
* for THIS call so the verb's `run` resolves the level through the same uniform
|
|
129
|
+
* `resolveDetail` the CLI `--detail` flag feeds — no VerbSpec field, no
|
|
130
|
+
* Formatters-signature change, no MCP-opts-out asymmetry.
|
|
131
|
+
*/
|
|
132
|
+
function withDetail(
|
|
133
|
+
verb: VerbSpec,
|
|
134
|
+
runtime: PragmaRuntime,
|
|
135
|
+
args: Record<string, unknown>,
|
|
136
|
+
): PragmaRuntime {
|
|
137
|
+
if (!verb.disclosure || typeof args.detail !== "string") return runtime;
|
|
138
|
+
return {
|
|
139
|
+
...runtime,
|
|
140
|
+
globalFlags: { ...runtime.globalFlags, detail: args.detail as never },
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** The tool handler for a read verb: run, project, envelope. */
|
|
145
|
+
function readHandler(verb: VerbSpec, runtime: PragmaRuntime) {
|
|
146
|
+
return async (args: Record<string, unknown>): Promise<CallToolResult> => {
|
|
147
|
+
try {
|
|
148
|
+
if (verb.capability.needsStore) await runtime.store.get();
|
|
149
|
+
const params = paramsFromArgs(verb, args);
|
|
150
|
+
const result = await Promise.resolve(
|
|
151
|
+
verb.run(params, withDetail(verb, runtime, args)) as Promise<unknown>,
|
|
152
|
+
);
|
|
153
|
+
return toolSuccess(JSON.parse(verb.output.formatters.json(result)));
|
|
154
|
+
} catch (error) {
|
|
155
|
+
return toolError(asPragmaError(error));
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Route a Task's log effects to STDERR. The default interpreter logs to
|
|
162
|
+
* `console.log` (stdout), which would corrupt the MCP stdio JSON-RPC frame;
|
|
163
|
+
* diagnostics belong on stderr. Mirrors the CLI dispatcher's `logToStderr`.
|
|
164
|
+
*/
|
|
165
|
+
const logToStderr = (_level: string, message: string): void => {
|
|
166
|
+
process.stderr.write(`${message}\n`);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
/** The tool handler for a mutating verb: plan-first unless `confirm: true`. */
|
|
170
|
+
function mutateHandler(verb: VerbSpec, runtime: PragmaRuntime) {
|
|
171
|
+
return async (args: Record<string, unknown>): Promise<CallToolResult> => {
|
|
172
|
+
try {
|
|
173
|
+
// The SINGLE per-call write root: validated here (absolute + existing dir)
|
|
174
|
+
// and threaded as `rt.cwd`, so the SEC-2 jail and the interpreter's
|
|
175
|
+
// effect-path base are literally the same value — no jail bypass.
|
|
176
|
+
const effectiveCwd = resolveEffectiveCwd(args.cwd, runtime.cwd);
|
|
177
|
+
if (verb.capability.needsStore) await runtime.store.get();
|
|
178
|
+
const params = paramsFromArgs(verb, args);
|
|
179
|
+
// Without `confirm`, this is a plan-only preview: tell the verb so a
|
|
180
|
+
// network-touching mutation stays offline and never fetches on discovery.
|
|
181
|
+
const preview = args.confirm !== true;
|
|
182
|
+
// MCP has no interactive channel: transport "mcp" makes an interactive
|
|
183
|
+
// verb pick the params-or-error prompt strategy, so a tool call can never
|
|
184
|
+
// hang waiting for input.
|
|
185
|
+
const interaction: InteractionRuntime = {
|
|
186
|
+
isTTY: false,
|
|
187
|
+
transport: "mcp",
|
|
188
|
+
yes: args.confirm === true,
|
|
189
|
+
};
|
|
190
|
+
const mutationRuntime: PragmaRuntime = {
|
|
191
|
+
...runtime,
|
|
192
|
+
cwd: effectiveCwd,
|
|
193
|
+
mutation: { preview },
|
|
194
|
+
interaction,
|
|
195
|
+
};
|
|
196
|
+
const task = await Promise.resolve(
|
|
197
|
+
verb.run(params, mutationRuntime) as
|
|
198
|
+
| Task<unknown>
|
|
199
|
+
| Promise<Task<unknown>>,
|
|
200
|
+
);
|
|
201
|
+
if (preview) {
|
|
202
|
+
const plan = dryRun(task)
|
|
203
|
+
.effects.filter((effect) => effect._tag !== "Prompt")
|
|
204
|
+
.map(describeEffect);
|
|
205
|
+
return toolSuccess({ plan }, { planOnly: true, confirmRequired: true });
|
|
206
|
+
}
|
|
207
|
+
// Real execution: spread the verb's runner options (prompt handler,
|
|
208
|
+
// stamping) into the interpreter; run teardown afterwards.
|
|
209
|
+
const exec = mutationRuntime.exec ?? {};
|
|
210
|
+
try {
|
|
211
|
+
const result = await runTask(task, { onLog: logToStderr, ...exec });
|
|
212
|
+
return toolSuccess(JSON.parse(verb.output.formatters.json(result)));
|
|
213
|
+
} finally {
|
|
214
|
+
// A real mutation may have changed the pack/config on disk. This runtime
|
|
215
|
+
// is booted ONCE for the whole server lifetime and shared by every tool,
|
|
216
|
+
// so drop its server-lifetime caches (store session + the config memo the
|
|
217
|
+
// boot depends on) FIRST — before teardown, so a throwing `dispose` can
|
|
218
|
+
// never skip the cache-drop — then the next read re-boots against the new
|
|
219
|
+
// state instead of serving a stale pack/config. `mutationRuntime` spreads
|
|
220
|
+
// `runtime`, so this is the same shared LazyStore. Only reached on the
|
|
221
|
+
// real-run branch (`confirm: true`); the plan-only preview never mutates.
|
|
222
|
+
runtime.store.invalidate();
|
|
223
|
+
await exec.dispose?.();
|
|
224
|
+
}
|
|
225
|
+
} catch (error) {
|
|
226
|
+
return toolError(asPragmaError(error));
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Register one exposed verb as an MCP tool on the server.
|
|
233
|
+
*
|
|
234
|
+
* @param server - The MCP server to register onto.
|
|
235
|
+
* @param verb - The verb to expose (caller ensures `mcp.expose === true`).
|
|
236
|
+
* @param runtime - The runtime handed to the verb's `run`.
|
|
237
|
+
* @note Impure — mutates the server's tool registry.
|
|
238
|
+
*/
|
|
239
|
+
export function registerVerb(
|
|
240
|
+
server: McpServer,
|
|
241
|
+
verb: VerbSpec,
|
|
242
|
+
runtime: PragmaRuntime,
|
|
243
|
+
): void {
|
|
244
|
+
const shape = buildZodSchema(verb.params);
|
|
245
|
+
// A verb with progressive disclosure gains a `detail` enum param derived from
|
|
246
|
+
// its DisclosureSpec (Risk2 — NO new VerbSpec field). The handler seeds
|
|
247
|
+
// globalFlags.detail from it per call, so MCP and CLI share one resolveDetail.
|
|
248
|
+
if (verb.disclosure) {
|
|
249
|
+
shape.detail = z
|
|
250
|
+
.enum(verb.disclosure.levels as unknown as [string, ...string[]])
|
|
251
|
+
.optional()
|
|
252
|
+
.describe(
|
|
253
|
+
`Progressive-disclosure level (${verb.disclosure.levels.join(", ")}); default ${verb.disclosure.default}.`,
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
if (verb.capability.mutates) {
|
|
257
|
+
shape.confirm = z
|
|
258
|
+
.boolean()
|
|
259
|
+
.default(false)
|
|
260
|
+
.describe("Set true to execute; otherwise a plan is returned.");
|
|
261
|
+
// Injected MCP-only per-call write root — added to the zod shape but NOT to
|
|
262
|
+
// verb.params (like `confirm`/`detail`), so `emitVerb` never emits it and the
|
|
263
|
+
// surface golden is untouched. The handler validates it and threads it as the
|
|
264
|
+
// single `rt.cwd` the jail + interpreter share (SEC-2 atomicity).
|
|
265
|
+
shape.cwd = z
|
|
266
|
+
.string()
|
|
267
|
+
.optional()
|
|
268
|
+
.describe(
|
|
269
|
+
"Absolute project directory to write into; defaults to the server's working directory.",
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
const config: {
|
|
274
|
+
description: string;
|
|
275
|
+
inputSchema?: z.ZodRawShape;
|
|
276
|
+
annotations: McpAnnotations;
|
|
277
|
+
} = {
|
|
278
|
+
// The agent-facing tool description is the verb's richer `doc` when present
|
|
279
|
+
// (pack `toolDescription`s compile into it; hand-written verbs author it
|
|
280
|
+
// directly), falling back to the one-line `summary`. Tool descriptions are
|
|
281
|
+
// NOT part of the frozen surface, so this stays covenant-safe.
|
|
282
|
+
description: verb.doc ?? verb.summary,
|
|
283
|
+
annotations: annotationsFor(verb),
|
|
284
|
+
};
|
|
285
|
+
if (Object.keys(shape).length > 0) config.inputSchema = shape;
|
|
286
|
+
|
|
287
|
+
const handler = verb.capability.mutates
|
|
288
|
+
? mutateHandler(verb, runtime)
|
|
289
|
+
: readHandler(verb, runtime);
|
|
290
|
+
|
|
291
|
+
server.registerTool(
|
|
292
|
+
toolName(verb.path),
|
|
293
|
+
config,
|
|
294
|
+
handler as Parameters<McpServer["registerTool"]>[2],
|
|
295
|
+
);
|
|
296
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serve the MCP projector over stdio.
|
|
3
|
+
*
|
|
4
|
+
* The bin's `mcp` special-case (D9) and the hidden `mcp` meta verb both call
|
|
5
|
+
* this: build the server from the capabilities and connect it to a stdio
|
|
6
|
+
* transport. Kept separate from {@link buildServer} so tests can build a server
|
|
7
|
+
* without touching stdio.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
11
|
+
import { loadEffectiveModules } from "../../packs/collect.js";
|
|
12
|
+
import type { CapabilityModule } from "../../spec/types.js";
|
|
13
|
+
import { buildServer } from "./buildServer.js";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Build the MCP server and serve it over stdio until the transport closes.
|
|
17
|
+
*
|
|
18
|
+
* The server is a real invocation (not a fast path), so it merges config-declared
|
|
19
|
+
* story packs into the static capabilities before projecting the tool surface.
|
|
20
|
+
*
|
|
21
|
+
* @param modules - The static capability modules to project.
|
|
22
|
+
* @param cwd - The working directory for the server's runtime.
|
|
23
|
+
* @note Impure — reads config, connects to stdin/stdout.
|
|
24
|
+
*/
|
|
25
|
+
export async function serveMcp(
|
|
26
|
+
modules: readonly CapabilityModule[],
|
|
27
|
+
cwd?: string,
|
|
28
|
+
): Promise<void> {
|
|
29
|
+
const dir = cwd ?? process.cwd();
|
|
30
|
+
const effective = await loadEffectiveModules(modules, dir);
|
|
31
|
+
const server = await buildServer(effective, dir);
|
|
32
|
+
const transport = new StdioServerTransport();
|
|
33
|
+
await server.connect(transport);
|
|
34
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool descriptions carry NO CLI-syntax leaks (a PR8 doc→MCP residue).
|
|
3
|
+
*
|
|
4
|
+
* A verb's `doc` doubles as its MCP tool description (`registerVerb`), so a doc
|
|
5
|
+
* authored in CLI terms leaks flags an agent can't use — `--all-tiers`,
|
|
6
|
+
* `--dry-run`/`--yes`, or a `pragma …` shell command — into the agent-facing
|
|
7
|
+
* catalog. Tool descriptions are NOT frozen in the covenant, so this is the guard
|
|
8
|
+
* against the leak (and its recurrence). Storeless: listing tools never boots the
|
|
9
|
+
* store, so no fixture graph is needed.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
13
|
+
import { tmpdir } from "node:os";
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
16
|
+
import { capabilities } from "../../../capabilities/index.js";
|
|
17
|
+
import {
|
|
18
|
+
type McpHarness,
|
|
19
|
+
projectMcp,
|
|
20
|
+
} from "../../../testing/helpers/projectMcp.js";
|
|
21
|
+
|
|
22
|
+
let cwd: string;
|
|
23
|
+
let mcp: McpHarness;
|
|
24
|
+
let descriptions: { name: string; description: string }[];
|
|
25
|
+
|
|
26
|
+
beforeAll(async () => {
|
|
27
|
+
cwd = mkdtempSync(join(tmpdir(), "pragma-tooldesc-"));
|
|
28
|
+
mcp = await projectMcp(capabilities, cwd);
|
|
29
|
+
const tools = await mcp.listTools();
|
|
30
|
+
descriptions = tools.map((tool) => ({
|
|
31
|
+
name: tool.name,
|
|
32
|
+
description: tool.description ?? "",
|
|
33
|
+
}));
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
afterAll(async () => {
|
|
37
|
+
await mcp.cleanup();
|
|
38
|
+
rmSync(cwd, { recursive: true, force: true });
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe("MCP tool descriptions — no CLI-syntax leaks (doc→MCP residue)", () => {
|
|
42
|
+
it("has a description for every registered tool", () => {
|
|
43
|
+
expect(descriptions.length).toBeGreaterThan(0);
|
|
44
|
+
for (const { name, description } of descriptions) {
|
|
45
|
+
expect(description.length, name).toBeGreaterThan(0);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("no tool description embeds a CLI flag (`--flag`)", () => {
|
|
50
|
+
const leaks = descriptions.filter((tool) =>
|
|
51
|
+
/--[a-z]/.test(tool.description),
|
|
52
|
+
);
|
|
53
|
+
expect(leaks.map((tool) => `${tool.name}: ${tool.description}`)).toEqual(
|
|
54
|
+
[],
|
|
55
|
+
);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("no tool description embeds a backtick-quoted `pragma …` command", () => {
|
|
59
|
+
const leaks = descriptions.filter((tool) =>
|
|
60
|
+
/`pragma /.test(tool.description),
|
|
61
|
+
);
|
|
62
|
+
expect(leaks.map((tool) => `${tool.name}: ${tool.description}`)).toEqual(
|
|
63
|
+
[],
|
|
64
|
+
);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("the named leak sites are scrubbed but still substantive", () => {
|
|
68
|
+
const byName = new Map(
|
|
69
|
+
descriptions.map((tool) => [tool.name, tool.description]),
|
|
70
|
+
);
|
|
71
|
+
expect(byName.get("block_list")).not.toContain("--all-tiers");
|
|
72
|
+
expect(byName.get("graph_query")).not.toContain("pragma ontology list");
|
|
73
|
+
expect(byName.get("setup")).not.toMatch(/--dry-run|--yes/);
|
|
74
|
+
expect(byName.get("upgrade")).not.toContain("--dry-run");
|
|
75
|
+
// The scrub rephrases; it must not gut the description.
|
|
76
|
+
for (const tool of ["block_list", "graph_query", "setup", "upgrade"]) {
|
|
77
|
+
expect((byName.get(tool) ?? "").length, tool).toBeGreaterThan(20);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`error render matrix (× plain/llm/json) > renders each error across the three formats 1`] = `
|
|
4
|
+
{
|
|
5
|
+
"empty": {
|
|
6
|
+
"json": "{"ok":false,"error":{"code":"EMPTY_RESULTS","message":"No tokens found.","validOptions":["stable","beta"],"filters":{"channel":"stable","tier":"core"}}}",
|
|
7
|
+
"llm": "## Error: EMPTY_RESULTS
|
|
8
|
+
No tokens found.
|
|
9
|
+
Filters: channel=stable, tier=core
|
|
10
|
+
Valid options: stable, beta",
|
|
11
|
+
"plain": "Error: No tokens found.
|
|
12
|
+
|
|
13
|
+
Active filters:
|
|
14
|
+
channel: stable
|
|
15
|
+
tier: core
|
|
16
|
+
|
|
17
|
+
Valid options: stable, beta",
|
|
18
|
+
},
|
|
19
|
+
"notFound": {
|
|
20
|
+
"json": "{"ok":false,"error":{"code":"ENTITY_NOT_FOUND","message":"block \\"Buton\\" not found.","suggestions":["Button"],"recovery":{"message":"List available blocks.","cli":"pragma block list"}}}",
|
|
21
|
+
"llm": "## Error: ENTITY_NOT_FOUND
|
|
22
|
+
block "Buton" not found.
|
|
23
|
+
Suggestions: Button
|
|
24
|
+
Recovery: List available blocks. \`pragma block list\`",
|
|
25
|
+
"plain": "Error: block "Buton" not found.
|
|
26
|
+
|
|
27
|
+
Did you mean?
|
|
28
|
+
- Button
|
|
29
|
+
|
|
30
|
+
List available blocks. Run \`pragma block list\`",
|
|
31
|
+
},
|
|
32
|
+
}
|
|
33
|
+
`;
|
|
34
|
+
|
|
35
|
+
exports[`render matrix (list/lookup/empty × plain/llm/json × detail) > renders every scenario/format/detail combination 1`] = `
|
|
36
|
+
{
|
|
37
|
+
"detailed": {
|
|
38
|
+
"empty": {
|
|
39
|
+
"json": "[]",
|
|
40
|
+
"llm": "## Widgets (0)
|
|
41
|
+
",
|
|
42
|
+
"plain": "",
|
|
43
|
+
},
|
|
44
|
+
"list": {
|
|
45
|
+
"json": "[{"uri":"https://ds.canonical.com/Button","name":"Button","kind":"component","note":"Primary action"},{"uri":"https://ds.canonical.com/Card","name":"Card","kind":"pattern","note":""}]",
|
|
46
|
+
"llm": "## Widgets (2)
|
|
47
|
+
|
|
48
|
+
- \`ds:Button\` — **Button** component | Primary action
|
|
49
|
+
- \`ds:Card\` — **Card** pattern",
|
|
50
|
+
"plain": "ds:Button Button component Primary action
|
|
51
|
+
ds:Card Card pattern",
|
|
52
|
+
},
|
|
53
|
+
"lookup": {
|
|
54
|
+
"json": "{"uri":"https://ds.canonical.com/Button","name":"Button","kind":"component","note":"Primary action"}",
|
|
55
|
+
"llm": "## Button
|
|
56
|
+
|
|
57
|
+
- Kind: component
|
|
58
|
+
- URI: ds:Button
|
|
59
|
+
|
|
60
|
+
### Note
|
|
61
|
+
Primary action",
|
|
62
|
+
"plain": "Button
|
|
63
|
+
════════════════════════
|
|
64
|
+
|
|
65
|
+
Kind: component
|
|
66
|
+
URI: ds:Button
|
|
67
|
+
|
|
68
|
+
Note:
|
|
69
|
+
Primary action",
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
"standard": {
|
|
73
|
+
"empty": {
|
|
74
|
+
"json": "[]",
|
|
75
|
+
"llm": "## Widgets (0)
|
|
76
|
+
",
|
|
77
|
+
"plain": "",
|
|
78
|
+
},
|
|
79
|
+
"list": {
|
|
80
|
+
"json": "[{"name":"Button","kind":"component"},{"name":"Card","kind":"pattern"}]",
|
|
81
|
+
"llm": "## Widgets (2)
|
|
82
|
+
|
|
83
|
+
- **Button** component
|
|
84
|
+
- **Card** pattern",
|
|
85
|
+
"plain": "Button component
|
|
86
|
+
Card pattern",
|
|
87
|
+
},
|
|
88
|
+
"lookup": {
|
|
89
|
+
"json": "{"uri":"https://ds.canonical.com/Button","name":"Button","kind":"component","note":"Primary action"}",
|
|
90
|
+
"llm": "## Button
|
|
91
|
+
|
|
92
|
+
- Kind: component",
|
|
93
|
+
"plain": "Button
|
|
94
|
+
════════════════════════
|
|
95
|
+
|
|
96
|
+
Kind: component",
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
"summary": {
|
|
100
|
+
"empty": {
|
|
101
|
+
"json": "[]",
|
|
102
|
+
"llm": "## Widgets (0)
|
|
103
|
+
",
|
|
104
|
+
"plain": "",
|
|
105
|
+
},
|
|
106
|
+
"list": {
|
|
107
|
+
"json": "[{"name":"Button"},{"name":"Card"}]",
|
|
108
|
+
"llm": "## Widgets (2)
|
|
109
|
+
|
|
110
|
+
- **Button**
|
|
111
|
+
- **Card**",
|
|
112
|
+
"plain": "Button
|
|
113
|
+
Card",
|
|
114
|
+
},
|
|
115
|
+
"lookup": {
|
|
116
|
+
"json": "{"uri":"https://ds.canonical.com/Button","name":"Button","kind":"component","note":"Primary action"}",
|
|
117
|
+
"llm": "## Button
|
|
118
|
+
|
|
119
|
+
- Kind: component",
|
|
120
|
+
"plain": "Button
|
|
121
|
+
════════════════════════
|
|
122
|
+
|
|
123
|
+
Kind: component",
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
}
|
|
127
|
+
`;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact a full URI to its prefixed form using the longest matching
|
|
3
|
+
* namespace. When two registered namespaces both prefix the URI (a base
|
|
4
|
+
* namespace and a sub-namespace), the longer — more specific — one wins.
|
|
5
|
+
* Falls back to the original URI when no namespace matches.
|
|
6
|
+
*
|
|
7
|
+
* @param fullUri - The absolute URI to compact.
|
|
8
|
+
* @param prefixes - A map of prefix to namespace IRI.
|
|
9
|
+
* @returns The `prefix:local` form, or `fullUri` unchanged when none matches.
|
|
10
|
+
*/
|
|
11
|
+
export function compactUri(
|
|
12
|
+
fullUri: string,
|
|
13
|
+
prefixes: Readonly<Record<string, string>>,
|
|
14
|
+
): string {
|
|
15
|
+
let best: { prefix: string; namespace: string } | undefined;
|
|
16
|
+
for (const [prefix, namespace] of Object.entries(prefixes)) {
|
|
17
|
+
if (!fullUri.startsWith(namespace)) continue;
|
|
18
|
+
if (best === undefined || namespace.length > best.namespace.length) {
|
|
19
|
+
best = { prefix, namespace };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (best === undefined) return fullUri;
|
|
24
|
+
return `${best.prefix}:${fullUri.slice(best.namespace.length)}`;
|
|
25
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layout contracts for the generic list and lookup renderers.
|
|
3
|
+
*
|
|
4
|
+
* These describe *how* a domain's data is projected to text — which columns a
|
|
5
|
+
* list shows, which fields and sections a lookup renders — with no coupling to
|
|
6
|
+
* store shapes, filters, or effects. Domain formatters (PR2+) build these
|
|
7
|
+
* option bags and hand them to {@link renderers}.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** A single column in a list rendering. */
|
|
11
|
+
export interface ColumnDef<T> {
|
|
12
|
+
readonly key: keyof T & string;
|
|
13
|
+
readonly label: string;
|
|
14
|
+
readonly format?: (value: unknown) => string;
|
|
15
|
+
readonly showWhenEmpty?: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** The kinds of section a lookup can render. */
|
|
19
|
+
export type SectionKind =
|
|
20
|
+
| "field"
|
|
21
|
+
| "code"
|
|
22
|
+
| "list"
|
|
23
|
+
| "table"
|
|
24
|
+
| "nested-table"
|
|
25
|
+
| "tree";
|
|
26
|
+
|
|
27
|
+
/** A single section in a lookup rendering. */
|
|
28
|
+
export interface SectionDef<T> {
|
|
29
|
+
readonly key: keyof T & string;
|
|
30
|
+
readonly heading: string;
|
|
31
|
+
readonly kind: SectionKind;
|
|
32
|
+
readonly showWhenEmpty?: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** A single inline field rendered in a lookup heading block. */
|
|
36
|
+
export interface LookupField<T> {
|
|
37
|
+
readonly label: string;
|
|
38
|
+
readonly value: (entity: T) => unknown;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Per-mode override callbacks for a lookup section. */
|
|
42
|
+
export interface LookupSectionOverride<T> {
|
|
43
|
+
readonly plain?: (entity: T, section: SectionDef<T>) => string | null;
|
|
44
|
+
readonly llm?: (entity: T, section: SectionDef<T>) => string | null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Options controlling the generic list renderer. */
|
|
48
|
+
export interface RenderListOptions<T> {
|
|
49
|
+
readonly heading: string;
|
|
50
|
+
readonly columns: readonly ColumnDef<T>[];
|
|
51
|
+
readonly prefixes?: Readonly<Record<string, string>>;
|
|
52
|
+
/**
|
|
53
|
+
* The message shown when the list is empty, so zero results read as a calm,
|
|
54
|
+
* non-blank success (exit 0) rather than an empty screen. Omit to keep the
|
|
55
|
+
* bare-empty behavior (plain renders "", llm renders the `(0)` heading only).
|
|
56
|
+
*/
|
|
57
|
+
readonly emptyMessage?: string;
|
|
58
|
+
/** An optional second line under {@link emptyMessage} — how to get results. */
|
|
59
|
+
readonly emptyHint?: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Options controlling the generic lookup renderer. */
|
|
63
|
+
export interface RenderLookupOptions<T> {
|
|
64
|
+
readonly title: (entity: T) => string;
|
|
65
|
+
readonly fields: readonly LookupField<T>[];
|
|
66
|
+
readonly sections: readonly SectionDef<T>[];
|
|
67
|
+
readonly prefixes?: Readonly<Record<string, string>>;
|
|
68
|
+
readonly sectionOverrides?: Partial<
|
|
69
|
+
Record<keyof T & string, LookupSectionOverride<T>>
|
|
70
|
+
>;
|
|
71
|
+
readonly codeLanguage?: (section: SectionDef<T>, value: unknown) => string;
|
|
72
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progressive-disclosure resolution.
|
|
3
|
+
*
|
|
4
|
+
* A verb renders at one of {@link DETAIL_LEVELS}. The effective level is chosen
|
|
5
|
+
* from four sources, most specific first: the `--detail` flag, the resolved
|
|
6
|
+
* config's `detail`, the verb's own `disclosure.default`, and finally the
|
|
7
|
+
* built-in `"standard"`. Unknown values (a stale config, a typo) fall back to
|
|
8
|
+
* the default rather than erroring, so output never fails on disclosure.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
DEFAULT_DETAIL_LEVEL,
|
|
13
|
+
DETAIL_LEVELS,
|
|
14
|
+
type DetailLevel,
|
|
15
|
+
} from "../../constants.js";
|
|
16
|
+
|
|
17
|
+
export { DETAIL_LEVELS };
|
|
18
|
+
|
|
19
|
+
/** Type guard: is a string one of the recognized detail levels? */
|
|
20
|
+
function isDetailLevel(value: string): value is DetailLevel {
|
|
21
|
+
return (DETAIL_LEVELS as readonly string[]).includes(value);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Resolve the effective disclosure level from its ordered sources.
|
|
26
|
+
*
|
|
27
|
+
* @param sources - Candidate levels, applied most-specific first.
|
|
28
|
+
* @param sources.flag - The explicit `--detail` value, if any.
|
|
29
|
+
* @param sources.config - The resolved config's `detail`, if any.
|
|
30
|
+
* @param sources.specDefault - The verb's `disclosure.default`, if any.
|
|
31
|
+
* @returns The first recognized level, or `"standard"` when none matches.
|
|
32
|
+
*/
|
|
33
|
+
export function resolveDetail(sources: {
|
|
34
|
+
flag?: string | undefined;
|
|
35
|
+
config?: string | undefined;
|
|
36
|
+
specDefault?: string | undefined;
|
|
37
|
+
}): DetailLevel {
|
|
38
|
+
const candidate =
|
|
39
|
+
sources.flag ??
|
|
40
|
+
sources.config ??
|
|
41
|
+
sources.specDefault ??
|
|
42
|
+
DEFAULT_DETAIL_LEVEL;
|
|
43
|
+
return isDetailLevel(candidate) ? candidate : DEFAULT_DETAIL_LEVEL;
|
|
44
|
+
}
|