@canonical/pragma-cli 0.31.0 → 0.33.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/README.md +35 -421
- package/dist/pragma +0 -0
- package/package.json +28 -42
- package/src/bin.ts +292 -11
- package/src/capabilities/block/blockList.test.ts +79 -0
- package/src/capabilities/block/blockList.verb.ts +163 -0
- package/src/capabilities/block/index.ts +25 -0
- package/src/capabilities/block/pack.ts +166 -0
- package/src/capabilities/block/parity.test.ts +187 -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 +140 -0
- package/src/capabilities/capabilities/capabilities.verb.ts +48 -0
- package/src/capabilities/capabilities/catalog.ts +148 -0
- package/src/capabilities/capabilities/hints.ts +212 -0
- package/src/capabilities/capabilities/index.ts +13 -0
- package/src/capabilities/capabilities/types.ts +60 -0
- package/src/capabilities/colophon/collectColophon.ts +68 -0
- package/src/capabilities/colophon/colophon.render.test.ts +114 -0
- package/src/capabilities/colophon/colophon.render.ts +47 -0
- package/src/capabilities/colophon/colophon.test.ts +241 -0
- package/src/capabilities/colophon/colophon.verb.ts +44 -0
- package/src/capabilities/colophon/index.ts +6 -0
- package/src/capabilities/colophon/markdownTerminal.test.ts +50 -0
- package/src/capabilities/colophon/markdownTerminal.ts +104 -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/fields.ts +81 -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.test.ts +65 -0
- package/src/capabilities/config/show.render.ts +107 -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 +225 -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 +432 -0
- package/src/capabilities/create/create.verb.ts +493 -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 +114 -0
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +67 -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/checks/deriveBand.test.ts +42 -0
- package/src/capabilities/doctor/checks/deriveBand.ts +28 -0
- package/src/capabilities/doctor/doctor.render.test.ts +170 -0
- package/src/capabilities/doctor/doctor.render.ts +198 -0
- package/src/capabilities/doctor/doctor.test.ts +209 -0
- package/src/capabilities/doctor/doctor.verb.ts +46 -0
- package/src/capabilities/doctor/index.ts +6 -0
- package/src/capabilities/doctor/runChecks.ts +100 -0
- package/src/capabilities/doctor/types.ts +56 -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 +19 -0
- package/src/capabilities/ontology/ontology.test.ts +246 -0
- package/src/capabilities/ontology/queries.ts +197 -0
- package/src/capabilities/ontology/render.ts +87 -0
- package/src/capabilities/ontology/verbs.ts +269 -0
- package/src/capabilities/prompt/index.ts +18 -0
- package/src/capabilities/prompt/prompt.render.test.ts +94 -0
- package/src/capabilities/prompt/prompt.render.ts +87 -0
- package/src/capabilities/prompt/prompt.test.ts +180 -0
- package/src/capabilities/prompt/types.ts +30 -0
- package/src/capabilities/prompt/verbs.ts +93 -0
- package/src/capabilities/reference.test.ts +32 -0
- package/src/capabilities/resources/index.ts +15 -0
- package/src/capabilities/resources/provider.ts +245 -0
- package/src/capabilities/resources/resources.test.ts +213 -0
- package/src/capabilities/roundtrip.test.ts +107 -0
- package/src/capabilities/scopeTypeSync.test.ts +37 -0
- package/src/capabilities/setup/index.ts +12 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +141 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +403 -0
- package/src/capabilities/setup/operations/setupLsp.ts +105 -0
- package/src/capabilities/setup/operations/setupMcp.ts +262 -0
- package/src/capabilities/setup/operations/setupSkills.ts +205 -0
- package/src/capabilities/setup/setup.render.test.ts +109 -0
- package/src/capabilities/setup/setup.render.ts +96 -0
- package/src/capabilities/setup/setup.test.ts +702 -0
- package/src/capabilities/setup/setup.verb.ts +261 -0
- package/src/capabilities/setup/shell.ts +85 -0
- package/src/capabilities/setup/types.ts +99 -0
- package/src/capabilities/shared/assertExecOk.ts +106 -0
- package/src/capabilities/shared/bands.ts +16 -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 +102 -0
- package/src/capabilities/sources/index.ts +15 -0
- package/src/capabilities/sources/installSkills.ts +124 -0
- package/src/capabilities/sources/runUpdate.ts +464 -0
- package/src/capabilities/sources/sources.test.ts +828 -0
- package/src/capabilities/sources/status.render.test.ts +65 -0
- package/src/capabilities/sources/status.render.ts +83 -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 +233 -0
- package/src/capabilities/tier/index.ts +19 -0
- package/src/capabilities/tier/lookup.render.test.ts +72 -0
- package/src/capabilities/tier/lookup.render.ts +59 -0
- package/src/capabilities/tier/lookup.test.ts +83 -0
- package/src/capabilities/tier/lookup.verb.ts +44 -0
- package/src/capabilities/tier/pack.ts +28 -0
- package/src/capabilities/tier/runLookup.ts +87 -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 -70
- package/src/index.ts +27 -122
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +339 -0
- package/src/kernel/completion/bashDrive.test.ts +73 -0
- package/src/kernel/completion/complete.test.ts +99 -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 +277 -0
- package/src/kernel/completion/index.ts +42 -0
- package/src/kernel/completion/model.test.ts +405 -0
- package/src/kernel/completion/model.ts +258 -0
- package/src/kernel/completion/parse.test.ts +336 -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 +431 -0
- package/src/kernel/project/cli/buildProgram.ts +291 -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 +107 -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 +220 -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/mcpError.ts +52 -0
- package/src/kernel/project/mcp/parity.test.ts +72 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +104 -0
- package/src/kernel/project/mcp/prompts/provider.ts +104 -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 +31 -0
- package/src/kernel/render/index.ts +30 -0
- package/src/kernel/render/prefixes.ts +21 -0
- package/src/kernel/render/renderers.test.ts +205 -0
- package/src/kernel/render/renderers.ts +447 -0
- package/src/kernel/render/style.test.ts +31 -0
- package/src/kernel/render/style.ts +74 -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 +176 -0
- package/src/kernel/runtime/graphpack/buildIndex.test.ts +103 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +317 -0
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -0
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -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 +221 -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 +117 -0
- package/src/kernel/runtime/graphpack/types.ts +125 -0
- package/src/kernel/runtime/index.ts +15 -0
- package/src/kernel/runtime/loadSession.ts +48 -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 +380 -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/storeReadiness.ts +61 -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 +144 -0
- package/src/kernel/spec/asVerb.ts +23 -0
- package/src/kernel/spec/emitReference.test.ts +196 -0
- package/src/kernel/spec/emitReference.ts +491 -0
- package/src/kernel/spec/emitSurface.test.ts +65 -0
- package/src/kernel/spec/emitSurface.ts +225 -0
- package/src/kernel/spec/index.ts +36 -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 +54 -0
- package/src/testing/behavioral/completion.test.ts +132 -0
- package/src/testing/behavioral/disclosure.test.ts +115 -0
- package/src/testing/behavioral/docExamples.test.ts +283 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +120 -0
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +124 -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 +131 -0
- package/src/testing/behavioral/journeys.defaultPack.test.ts +571 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +66 -0
- package/src/testing/behavioral/journeys.livePack.e2e.test.ts +129 -0
- package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +176 -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/behavioral/staleCommands.test.ts +76 -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 +248 -0
- package/src/testing/eval/cases/readNouns.ts +235 -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 +331 -0
- package/src/testing/fixtures/graph/canonical.ts +184 -0
- package/src/testing/fixtures/graph/defaultPack.ts +178 -0
- package/src/testing/fixtures/graph/owlExport.ts +95 -0
- package/src/testing/fixtures/packs/recipe.ts +78 -0
- package/src/testing/helpers/extractSnippets.ts +29 -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 +13 -12
- package/src/types.ts +42 -0
- 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 -25
- package/src/completions/handleQuery.test.ts +0 -125
- package/src/completions/handleQuery.ts +0 -49
- package/src/completions/index.ts +0 -14
- package/src/completions/queryCompletions.test.ts +0 -105
- package/src/completions/queryCompletions.ts +0 -75
- package/src/completions/querySocket.test.ts +0 -101
- package/src/completions/querySocket.ts +0 -71
- 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 -217
- package/src/config/readConfig.test.ts +0 -395
- package/src/config/readConfig.ts +0 -21
- package/src/config/readConfigLayers.test.ts +0 -109
- package/src/config/readConfigLayers.ts +0 -118
- 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 -128
- 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 -56
- 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 -44
- 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 -260
- package/src/domains/block/types.ts +0 -30
- package/src/domains/config/commands/channel.test.ts +0 -128
- package/src/domains/config/commands/channel.ts +0 -99
- package/src/domains/config/commands/configScope.ts +0 -46
- package/src/domains/config/commands/framework.test.ts +0 -119
- package/src/domains/config/commands/framework.ts +0 -103
- 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 -102
- package/src/domains/config/commands/tier.ts +0 -97
- 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 -65
- package/src/domains/config/operations/validateTier.ts +0 -43
- 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/generatorPack/bundled.ts +0 -49
- package/src/domains/create/generatorPack/compileGeneratorPack.test.ts +0 -159
- package/src/domains/create/generatorPack/compileGeneratorPack.ts +0 -312
- package/src/domains/create/index.ts +0 -21
- package/src/domains/create/mcp/index.ts +0 -2
- package/src/domains/create/mcp/specs.ts +0 -13
- package/src/domains/create/renderGeneratorUi.test.ts +0 -103
- package/src/domains/create/renderGeneratorUi.ts +0 -65
- 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 -165
- package/src/domains/doctor/formatters/doctor.ts +0 -136
- 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 -133
- 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 -76
- 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 -307
- 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 -42
- 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 -94
- 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.test.ts +0 -87
- package/src/domains/graph/formatters/query.ts +0 -74
- 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 -46
- package/src/domains/graphql/commands/serve.ts +0 -141
- 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 -65
- package/src/domains/graphql/helpers/resolveSourceFiles.ts +0 -66
- 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/ensureSchemaArtifact.test.ts +0 -167
- package/src/domains/graphql/operations/ensureSchemaArtifact.ts +0 -178
- package/src/domains/graphql/operations/index.ts +0 -17
- 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 -136
- package/src/domains/info/formatters/upgrade.ts +0 -70
- 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/collectEntityCounts.test.ts +0 -156
- package/src/domains/info/operations/collectEntityCounts.ts +0 -123
- 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 -6
- package/src/domains/info/types.test-d.ts +0 -35
- package/src/domains/info/types.ts +0 -67
- package/src/domains/llm/capabilities.test.ts +0 -111
- package/src/domains/llm/commands/capabilities.ts +0 -37
- package/src/domains/llm/commands/index.ts +0 -4
- package/src/domains/llm/commands/llm.ts +0 -41
- package/src/domains/llm/data/commandReference.ts +0 -106
- package/src/domains/llm/data/decisionTrees.ts +0 -55
- package/src/domains/llm/data/index.ts +0 -6
- package/src/domains/llm/data/toolCatalog.ts +0 -221
- 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 -57
- package/src/domains/llm/index.ts +0 -9
- package/src/domains/llm/llmCommand.test.ts +0 -101
- package/src/domains/llm/mcp/index.ts +0 -2
- package/src/domains/llm/mcp/specs.ts +0 -93
- package/src/domains/llm/operations/collectContext.test.ts +0 -64
- package/src/domains/llm/operations/collectContext.ts +0 -37
- 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 -54
- 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 -69
- 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 -86
- 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 -84
- package/src/domains/ontology/commands/list.ts +0 -11
- package/src/domains/ontology/commands/show.test.ts +0 -179
- package/src/domains/ontology/commands/show.ts +0 -14
- package/src/domains/ontology/formatters/index.ts +0 -5
- package/src/domains/ontology/formatters/list.ts +0 -64
- package/src/domains/ontology/formatters/show.ts +0 -396
- package/src/domains/ontology/helpers/buildClassTree.ts +0 -89
- package/src/domains/ontology/helpers/completeClassNames.ts +0 -43
- package/src/domains/ontology/helpers/expandOntologyIris.ts +0 -79
- package/src/domains/ontology/helpers/findNamespace.ts +0 -23
- package/src/domains/ontology/helpers/index.ts +0 -21
- package/src/domains/ontology/helpers/queryClasses.ts +0 -66
- package/src/domains/ontology/helpers/queryProperties.ts +0 -90
- package/src/domains/ontology/helpers/queryTboxFacts.ts +0 -160
- 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 -122
- package/src/domains/ontology/operations/listOntologies.ts +0 -197
- package/src/domains/ontology/operations/showOntology.test.ts +0 -184
- package/src/domains/ontology/operations/showOntology.ts +0 -323
- package/src/domains/ontology/operations/showOntologyRaw.test.ts +0 -41
- 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 -153
- 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 -180
- 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 -7
- package/src/domains/setup/commands/lsp.ts +0 -49
- package/src/domains/setup/commands/mcp.ts +0 -119
- package/src/domains/setup/commands/setup.ts +0 -70
- 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 -37
- 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 -30
- package/src/domains/setup/operations/setupLsp.ts +0 -22
- 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.bareCore.test.ts +0 -63
- package/src/domains/shared/bootStore.test.ts +0 -82
- package/src/domains/shared/bootStore.ts +0 -171
- 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 -106
- 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 -103
- package/src/domains/shared/listTiers.ts +0 -40
- package/src/domains/shared/loaders/bundledLoader.test.ts +0 -248
- package/src/domains/shared/loaders/bundledLoader.ts +0 -254
- package/src/domains/shared/loaders/gitLoader.ts +0 -30
- package/src/domains/shared/loaders/index.ts +0 -9
- package/src/domains/shared/loaders/localLoader.ts +0 -71
- package/src/domains/shared/loaders/readPackageDir.test.ts +0 -58
- package/src/domains/shared/loaders/readPackageDir.ts +0 -185
- 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 -135
- package/src/domains/shared/lookupMany.ts +0 -101
- package/src/domains/shared/mergeAndParseRefs.test.ts +0 -89
- package/src/domains/shared/mergeAndParseRefs.ts +0 -44
- package/src/domains/shared/namespaces.ts +0 -26
- package/src/domains/shared/packages.ts +0 -20
- package/src/domains/shared/parseSampleCount.test.ts +0 -47
- package/src/domains/shared/parseSampleCount.ts +0 -45
- package/src/domains/shared/pickRandom.ts +0 -22
- package/src/domains/shared/prefixes.test.ts +0 -211
- package/src/domains/shared/prefixes.ts +0 -204
- 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/resolveLookupExitCode.test.ts +0 -48
- package/src/domains/shared/resolveLookupExitCode.ts +0 -42
- package/src/domains/shared/runtime.ts +0 -61
- package/src/domains/shared/sampleFormatters.ts +0 -47
- package/src/domains/shared/semanticPackage.test.ts +0 -89
- package/src/domains/shared/semanticPackage.ts +0 -127
- package/src/domains/shared/stories/compileLookupCommand.test.ts +0 -145
- package/src/domains/shared/stories/compileLookupCommand.ts +0 -102
- 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 -151
- package/src/domains/shared/stories/pack/applyPackFilters.ts +0 -111
- package/src/domains/shared/stories/pack/applyPackSearch.test.ts +0 -57
- package/src/domains/shared/stories/pack/applyPackSearch.ts +0 -41
- package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +0 -81
- package/src/domains/shared/stories/pack/buildLookupQuery.ts +0 -154
- package/src/domains/shared/stories/pack/bundled/index.ts +0 -23
- package/src/domains/shared/stories/pack/bundled/standardPack.ts +0 -164
- package/src/domains/shared/stories/pack/bundled/tierPack.ts +0 -50
- package/src/domains/shared/stories/pack/collectPackStories.test.ts +0 -406
- package/src/domains/shared/stories/pack/collectPackStories.ts +0 -158
- package/src/domains/shared/stories/pack/compilePackCommands.ts +0 -50
- package/src/domains/shared/stories/pack/compilePackStories.test.ts +0 -751
- package/src/domains/shared/stories/pack/compilePackStories.ts +0 -724
- package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +0 -55
- package/src/domains/shared/stories/pack/index.ts +0 -42
- package/src/domains/shared/stories/pack/reservedVerbs.test.ts +0 -213
- package/src/domains/shared/stories/pack/reservedVerbs.ts +0 -170
- package/src/domains/shared/stories/pack/runSelectQuery.ts +0 -31
- package/src/domains/shared/stories/pack/standardParity.test.ts +0 -381
- package/src/domains/shared/stories/pack/types.ts +0 -224
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +0 -742
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +0 -859
- 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 -179
- 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 -46
- package/src/domains/shared/types/modifier.ts +0 -22
- package/src/domains/shared/types/ontology.ts +0 -145
- 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 -21
- 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/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 -133
- package/src/domains/token/commands/lookup.ts +0 -107
- package/src/domains/token/commands/sample.ts +0 -54
- package/src/domains/token/featureFlag.ts +0 -17
- 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 -45
- package/src/domains/token/mcp/index.ts +0 -2
- package/src/domains/token/mcp/specs.ts +0 -207
- 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/resolveTraceLimit.test.ts +0 -31
- package/src/domains/trace/commands/sessions.ts +0 -32
- package/src/domains/trace/commands/show.ts +0 -171
- 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 -74
- package/src/mcp/tools/registerFromSpec.ts +0 -97
- package/src/mcp/tools/registerTools.test.ts +0 -1277
- 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 -187
- package/src/pipeline/collectCommands.ts +0 -75
- package/src/pipeline/constants.ts +0 -14
- package/src/pipeline/createProgram.test.ts +0 -116
- package/src/pipeline/createProgram.ts +0 -89
- package/src/pipeline/firstRun.test.ts +0 -80
- package/src/pipeline/firstRun.ts +0 -99
- 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 -193
- package/src/pipeline/parseGlobalFlags.ts +0 -135
- package/src/pipeline/renderError.test.ts +0 -151
- package/src/pipeline/renderError.ts +0 -129
- package/src/pipeline/resolveCommandKind.test.ts +0 -80
- package/src/pipeline/resolveCommandKind.ts +0 -82
- package/src/pipeline/rootHelp.test.ts +0 -87
- package/src/pipeline/rootHelp.ts +0 -265
- package/src/pipeline/runCli.orchestration.test.ts +0 -435
- package/src/pipeline/runCli.test.ts +0 -83
- package/src/pipeline/runCli.ts +0 -411
- package/src/pipeline/types.ts +0 -17
- package/src/testing/cli.ts +0 -71
- package/src/testing/createTestMcpClient.ts +0 -68
- package/src/testing/dsFixtures.ts +0 -523
- 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 -22
- 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 -261
- package/src/testing/integration/cross-binary-byte-equality.test.ts +0 -129
- package/src/testing/integration/edge-cases.test.ts +0 -275
- package/src/testing/integration/executor-execution.test.ts +0 -103
- package/src/testing/integration/executor-golden.test.ts +0 -145
- package/src/testing/integration/mcp-surface.test.ts +0 -605
- package/src/testing/integration/parity.test.ts +0 -596
- package/src/testing/regression/0001-skill-discovery-granularity.test.ts +0 -71
- package/src/testing/standardParityFixtures.ts +0 -35
- 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,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tier lookup <name>` — the covenant `tier_lookup` tool.
|
|
3
|
+
*
|
|
4
|
+
* Bespoke store-backed lookup with a SINGLE `<name>` positional (a pack lookup
|
|
5
|
+
* would emit the variadic `<name...>`), so it emits
|
|
6
|
+
* `{ v: "lookup", args: ["<name>"], needsStore: true, mcp: "tier_lookup" }`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
10
|
+
import type { VerbSpec } from "../../kernel/spec/types.js";
|
|
11
|
+
import { type TierLookupData, tierLookupFormatters } from "./lookup.render.js";
|
|
12
|
+
|
|
13
|
+
const tierLookupSpec: VerbSpec<Record<string, unknown>, TierLookupData> = {
|
|
14
|
+
path: ["tier", "lookup"],
|
|
15
|
+
summary: "Show one tier by name, with the blocks scoped to it.",
|
|
16
|
+
doc: "Look up a single tier by its name (e.g. apps/lxd) and list the blocks scoped directly to it.",
|
|
17
|
+
params: [
|
|
18
|
+
{
|
|
19
|
+
kind: "string",
|
|
20
|
+
name: "name",
|
|
21
|
+
doc: "The tier name (e.g. apps/lxd).",
|
|
22
|
+
positional: true,
|
|
23
|
+
required: true,
|
|
24
|
+
complete: { kind: "names", source: { from: "tiers" } },
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
output: { formatters: tierLookupFormatters },
|
|
28
|
+
examples: [{ cmd: "pragma tier lookup apps/lxd" }],
|
|
29
|
+
capability: {
|
|
30
|
+
needsStore: true,
|
|
31
|
+
mutates: false,
|
|
32
|
+
mcp: {
|
|
33
|
+
expose: true,
|
|
34
|
+
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
run: (params, rt) =>
|
|
38
|
+
import("./runLookup.js").then((m) =>
|
|
39
|
+
m.runTierLookup(rt, String(params.name)),
|
|
40
|
+
),
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/** The `tier lookup` verb, widened for registry composition. */
|
|
44
|
+
export const tierLookupVerb = asVerb(tierLookupSpec);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bundled `tier` pack — a flat, name-ordered list story.
|
|
3
|
+
*
|
|
4
|
+
* Tier hierarchy is encoded in the slash-separated path string (`apps/lxd`), not
|
|
5
|
+
* in graph edges, so `tier list` is a flat list; the ordered-inheritance logic
|
|
6
|
+
* lives in the block list's tier chain. SPARQL-sourced (a flat-ordered list).
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { PackDefinition } from "../../kernel/packs/types.js";
|
|
10
|
+
|
|
11
|
+
export const tierPack: PackDefinition = {
|
|
12
|
+
noun: "tier",
|
|
13
|
+
description: "List all tiers in the design system ontology.",
|
|
14
|
+
toolDescription:
|
|
15
|
+
"List all tiers in the design-system ontology. Use when understanding the tier hierarchy before setting a tier filter. Example: tier_list {}.",
|
|
16
|
+
list: {
|
|
17
|
+
query: [
|
|
18
|
+
"SELECT ?uri ?name WHERE {",
|
|
19
|
+
" ?uri a ds:Tier ;",
|
|
20
|
+
" ds:name ?name .",
|
|
21
|
+
"} ORDER BY ?name",
|
|
22
|
+
].join("\n"),
|
|
23
|
+
columns: [
|
|
24
|
+
{ field: "uri", label: "IRI" },
|
|
25
|
+
{ field: "name", label: "Name" },
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `tier lookup` run body (lazily imported, off the fast path).
|
|
3
|
+
*
|
|
4
|
+
* Bespoke (not a pack lookup): the covenant freezes `tier_lookup` with a SINGLE
|
|
5
|
+
* `<name>` positional, whereas a pack lookup emits the variadic `<name...>`.
|
|
6
|
+
* Resolves the tier by its `ds:name` and returns the blocks scoped directly to
|
|
7
|
+
* it (a joined OPTIONAL, so a tier with no direct members still resolves).
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { PragmaError } from "../../kernel/error/PragmaError.js";
|
|
11
|
+
import { runSelect } from "../../kernel/packs/sparql/runSelect.js";
|
|
12
|
+
import { suggestNames } from "../../kernel/project/cli/suggestNames.js";
|
|
13
|
+
import { compactUri } from "../../kernel/render/compactUri.js";
|
|
14
|
+
import { DEFAULT_PREFIX_MAP } from "../../kernel/render/prefixes.js";
|
|
15
|
+
import type { PragmaRuntime } from "../../kernel/runtime/types.js";
|
|
16
|
+
import type { TierLookupData } from "./lookup.render.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Read every tier name in the store (its `ds:name`), ordered.
|
|
20
|
+
*
|
|
21
|
+
* The bespoke lookup already holds the machinery to reach the store, so a
|
|
22
|
+
* name-not-found can rank "did you mean?" candidates the same way every other
|
|
23
|
+
* entity lookup does — the tier list is a single cheap SELECT away.
|
|
24
|
+
*
|
|
25
|
+
* @param rt - The runtime (its store is booted by the projector for needsStore).
|
|
26
|
+
* @returns The tier names, ordered.
|
|
27
|
+
* @note Impure — queries the store through `runSelect`.
|
|
28
|
+
*/
|
|
29
|
+
async function selectTierNames(rt: PragmaRuntime): Promise<string[]> {
|
|
30
|
+
const rows = await runSelect(
|
|
31
|
+
rt,
|
|
32
|
+
"SELECT ?name WHERE { ?tier a ds:Tier ; ds:name ?name } ORDER BY ?name",
|
|
33
|
+
"tier",
|
|
34
|
+
);
|
|
35
|
+
return rows
|
|
36
|
+
.map((row) => row.name as string | undefined)
|
|
37
|
+
.filter((name): name is string => Boolean(name));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Look up one tier by name.
|
|
42
|
+
*
|
|
43
|
+
* @param rt - The runtime (its store is booted by the projector for needsStore).
|
|
44
|
+
* @param name - The tier name (its `ds:name`, e.g. `apps/lxd`).
|
|
45
|
+
* @returns The tier's IRI, name, and directly-scoped block names.
|
|
46
|
+
* @throws PragmaError ENTITY_NOT_FOUND when no tier has that name;
|
|
47
|
+
* STORE_UNAVAILABLE (exit 3) when the store is unseeded for this project.
|
|
48
|
+
*/
|
|
49
|
+
export async function runTierLookup(
|
|
50
|
+
rt: PragmaRuntime,
|
|
51
|
+
name: string,
|
|
52
|
+
): Promise<TierLookupData> {
|
|
53
|
+
const query = [
|
|
54
|
+
"SELECT ?uri ?blockName WHERE {",
|
|
55
|
+
" ?uri a ds:Tier ; ds:name ?tierName .",
|
|
56
|
+
` FILTER(STR(?tierName) = ${JSON.stringify(name)})`,
|
|
57
|
+
" OPTIONAL { ?block ds:tier ?uri ; ds:name ?blockName }",
|
|
58
|
+
"}",
|
|
59
|
+
"ORDER BY ?blockName",
|
|
60
|
+
].join("\n");
|
|
61
|
+
|
|
62
|
+
// Route through `runSelect` (not `rt.query.sparql` directly) so a cold/unseeded
|
|
63
|
+
// store — a generated `ds:` query hitting an unknown prefix — is remapped to an
|
|
64
|
+
// actionable STORE_UNAVAILABLE with `pragma sources update` recovery, instead of
|
|
65
|
+
// a raw "Prefix not found" collapsing to INTERNAL_ERROR at the boundary.
|
|
66
|
+
const rows = await runSelect(rt, query, "tier");
|
|
67
|
+
const uri = rows[0]?.uri;
|
|
68
|
+
if (!uri) {
|
|
69
|
+
// Rank "did you mean?" candidates from the full tier list — the only entity
|
|
70
|
+
// lookup that used to omit suggestions, though (like the others) it has the
|
|
71
|
+
// names in hand. The suggestion query runs only on this cold, not-found path.
|
|
72
|
+
const suggestions = suggestNames(name, await selectTierNames(rt));
|
|
73
|
+
throw PragmaError.notFound("tier", name, {
|
|
74
|
+
suggestions,
|
|
75
|
+
recovery: {
|
|
76
|
+
message: "List available tiers.",
|
|
77
|
+
cli: "pragma tier list",
|
|
78
|
+
mcp: { tool: "tier_list" },
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
const blocks = rows
|
|
83
|
+
// `blockName` rides an OPTIONAL, so the key is absent for a memberless tier.
|
|
84
|
+
.map((row) => row.blockName as string | undefined)
|
|
85
|
+
.filter((block): block is string => Boolean(block));
|
|
86
|
+
return { uri: compactUri(uri, DEFAULT_PREFIX_MAP), name, blocks };
|
|
87
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatters for `token add-config` — plain, llm, json.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { Formatters } from "../../kernel/spec/types.js";
|
|
6
|
+
import type { AddConfigResult } from "./runAddConfig.js";
|
|
7
|
+
|
|
8
|
+
export const addConfigFormatters: Formatters<AddConfigResult> = {
|
|
9
|
+
plain(data) {
|
|
10
|
+
const lines = [
|
|
11
|
+
`${data.alreadyExisted ? "Updated" : "Wrote"} ${data.path}`,
|
|
12
|
+
` ${data.tokenCount} token${data.tokenCount === 1 ? "" : "s"} in the active graph`,
|
|
13
|
+
` sources: ${data.sources.join(", ")}`,
|
|
14
|
+
];
|
|
15
|
+
return lines.join("\n");
|
|
16
|
+
},
|
|
17
|
+
llm(data) {
|
|
18
|
+
return [
|
|
19
|
+
`${data.alreadyExisted ? "Updated" : "Wrote"} \`${data.path}\` for the terrazzo token pipeline.`,
|
|
20
|
+
`- ${data.tokenCount} token(s) in the active graph`,
|
|
21
|
+
`- sources: ${data.sources.map((source) => `\`${source}\``).join(", ")}`,
|
|
22
|
+
].join("\n");
|
|
23
|
+
},
|
|
24
|
+
json(data) {
|
|
25
|
+
return JSON.stringify(data);
|
|
26
|
+
},
|
|
27
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { existsSync, readFileSync, rmSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
|
4
|
+
import { CANONICAL_TTL } from "../../testing/fixtures/graph/canonical.js";
|
|
5
|
+
import {
|
|
6
|
+
bootFixtureRuntime,
|
|
7
|
+
type FixtureGraph,
|
|
8
|
+
} from "../../testing/helpers/fixtureGraph.js";
|
|
9
|
+
import type { McpHarness } from "../../testing/helpers/projectMcp.js";
|
|
10
|
+
import { projectMcp } from "../../testing/helpers/projectMcp.js";
|
|
11
|
+
import { capabilities } from "../index.js";
|
|
12
|
+
|
|
13
|
+
let fixture: FixtureGraph;
|
|
14
|
+
let mcp: McpHarness;
|
|
15
|
+
let configPath: string;
|
|
16
|
+
|
|
17
|
+
beforeAll(async () => {
|
|
18
|
+
fixture = await bootFixtureRuntime({ ttl: CANONICAL_TTL });
|
|
19
|
+
mcp = await projectMcp(capabilities, fixture.cwd);
|
|
20
|
+
configPath = join(fixture.cwd, "tokens.config.mjs");
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
afterAll(async () => {
|
|
24
|
+
await mcp.cleanup();
|
|
25
|
+
await fixture.dispose();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
beforeEach(() => {
|
|
29
|
+
rmSync(configPath, { force: true });
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe("token_add-config — plan-first mutation (PROTECTED)", () => {
|
|
33
|
+
it("without confirm, returns a plan and writes NOTHING", async () => {
|
|
34
|
+
const result = await mcp.callTool("token_add-config");
|
|
35
|
+
expect(result.ok).toBe(true);
|
|
36
|
+
const meta = result.meta as {
|
|
37
|
+
planOnly?: boolean;
|
|
38
|
+
confirmRequired?: boolean;
|
|
39
|
+
};
|
|
40
|
+
expect(meta.planOnly).toBe(true);
|
|
41
|
+
expect(meta.confirmRequired).toBe(true);
|
|
42
|
+
const data = result.data as { plan: string[] };
|
|
43
|
+
expect(data.plan.join("\n")).toMatch(/tokens\.config\.mjs/);
|
|
44
|
+
expect(existsSync(configPath)).toBe(false);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("with confirm, writes a terrazzo config reflecting the store token count", async () => {
|
|
48
|
+
const result = await mcp.callTool("token_add-config", { confirm: true });
|
|
49
|
+
expect(result.ok).toBe(true);
|
|
50
|
+
const data = result.data as {
|
|
51
|
+
path: string;
|
|
52
|
+
tokenCount: number;
|
|
53
|
+
sources: string[];
|
|
54
|
+
};
|
|
55
|
+
expect(existsSync(configPath)).toBe(true);
|
|
56
|
+
// The canonical fixture holds 2 ds:Token entities.
|
|
57
|
+
expect(data.tokenCount).toBe(2);
|
|
58
|
+
const written = readFileSync(configPath, "utf-8");
|
|
59
|
+
expect(written).toContain("defineConfig");
|
|
60
|
+
expect(written).toContain("@canonical/terrazzo");
|
|
61
|
+
});
|
|
62
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `token add-config` — generate a terrazzo `tokens.config.mjs` (the one `token`
|
|
3
|
+
* mutation). Store-backed (needsStore, per covenant) so it can report the token
|
|
4
|
+
* count; plan-first through the uniform mutation seam (a tool call without
|
|
5
|
+
* `confirm` returns the write plan; `--dry-run`/`--yes` on the CLI). No params —
|
|
6
|
+
* the covenant emits `{ v: "add-config", mutates: true, needsStore: true }`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { Task } from "@canonical/task";
|
|
10
|
+
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
11
|
+
import type { VerbSpec } from "../../kernel/spec/types.js";
|
|
12
|
+
import { addConfigFormatters } from "./addConfig.render.js";
|
|
13
|
+
import type { AddConfigResult } from "./runAddConfig.js";
|
|
14
|
+
|
|
15
|
+
const addConfigVerb: VerbSpec<Record<string, unknown>, AddConfigResult> = {
|
|
16
|
+
path: ["token", "add-config"],
|
|
17
|
+
summary: "Generate a tokens.config.mjs for the terrazzo token pipeline.",
|
|
18
|
+
doc: "Writes a terrazzo `defineConfig` at the project root, sourcing token JSON from the configured design-system packages. Store-backed so it reports how many tokens the active graph holds. Plan-first: returns the write plan until you confirm.",
|
|
19
|
+
params: [],
|
|
20
|
+
output: { formatters: addConfigFormatters },
|
|
21
|
+
examples: [
|
|
22
|
+
{ cmd: "pragma token add-config --dry-run", note: "preview the write" },
|
|
23
|
+
{ cmd: "pragma token add-config --yes", note: "write the config" },
|
|
24
|
+
],
|
|
25
|
+
capability: {
|
|
26
|
+
needsStore: true,
|
|
27
|
+
mutates: true,
|
|
28
|
+
mcp: {
|
|
29
|
+
expose: true,
|
|
30
|
+
annotations: { readOnlyHint: false, openWorldHint: false },
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
run: (_params, rt) =>
|
|
34
|
+
import("./runAddConfig.js").then((m) =>
|
|
35
|
+
m.runAddConfig(rt),
|
|
36
|
+
) as unknown as Task<AddConfigResult>,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/** The `token add-config` verb, widened for registry composition. */
|
|
40
|
+
export const tokenAddConfigVerb = asVerb(addConfigVerb);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `token` capability module — the bundled SPARQL pack compiled to verbs.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { compilePack } from "../../kernel/packs/compile.js";
|
|
6
|
+
import { DEFAULT_PREFIX_MAP } from "../../kernel/render/prefixes.js";
|
|
7
|
+
import type { CapabilityModule } from "../../kernel/spec/types.js";
|
|
8
|
+
import { tokenAddConfigVerb } from "./addConfig.verb.js";
|
|
9
|
+
import { tokenPack } from "./pack.js";
|
|
10
|
+
|
|
11
|
+
/** The `token` capability module — the bundled read pack plus the `add-config`
|
|
12
|
+
* mutation (hand-written; the pack compiler emits reads only). */
|
|
13
|
+
export const tokenModule: CapabilityModule = {
|
|
14
|
+
name: "token",
|
|
15
|
+
verbs: [
|
|
16
|
+
...compilePack(tokenPack, "bundled:token", DEFAULT_PREFIX_MAP),
|
|
17
|
+
tokenAddConfigVerb,
|
|
18
|
+
],
|
|
19
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bundled `token` pack — design tokens as data.
|
|
3
|
+
*
|
|
4
|
+
* SPARQL-sourced on both verbs: there is no `ds:Token` GraphQL type to project
|
|
5
|
+
* against when the graph ships no tokens, and the lookup reads a property path
|
|
6
|
+
* (`ds:tokenType/rdfs:label`) only SPARQL can express. `token add-config` (a
|
|
7
|
+
* mutation) is out of PR3; the `emptyRecovery` install hint is the story users
|
|
8
|
+
* see on an empty store.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { PackDefinition } from "../../kernel/packs/types.js";
|
|
12
|
+
|
|
13
|
+
export const tokenPack: PackDefinition = {
|
|
14
|
+
noun: "token",
|
|
15
|
+
description: "List all design tokens.",
|
|
16
|
+
toolDescription:
|
|
17
|
+
"List all design tokens with their type. Use when browsing which tokens exist under the active scope. Example: token_list {}.",
|
|
18
|
+
list: {
|
|
19
|
+
query: [
|
|
20
|
+
"SELECT ?uri ?name ?category WHERE {",
|
|
21
|
+
" ?uri a ds:Token ;",
|
|
22
|
+
" ds:tokenId ?name .",
|
|
23
|
+
" OPTIONAL {",
|
|
24
|
+
" ?uri ds:tokenType ?type .",
|
|
25
|
+
" ?type rdfs:label ?category .",
|
|
26
|
+
" }",
|
|
27
|
+
"}",
|
|
28
|
+
"ORDER BY ?name",
|
|
29
|
+
].join("\n"),
|
|
30
|
+
columns: [
|
|
31
|
+
{ field: "uri", label: "IRI" },
|
|
32
|
+
{ field: "name", label: "Name" },
|
|
33
|
+
{ field: "category", label: "Type" },
|
|
34
|
+
],
|
|
35
|
+
emptyRecovery: {
|
|
36
|
+
message:
|
|
37
|
+
"No tokens in the store. Build it from the configured design-system packages.",
|
|
38
|
+
cli: "pragma sources update",
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
lookup: {
|
|
42
|
+
source: "sparql",
|
|
43
|
+
by: "ds:tokenId",
|
|
44
|
+
type: "ds:Token",
|
|
45
|
+
toolDescription:
|
|
46
|
+
'Get type and theme values for one or more design tokens by name. Use when resolving specific tokens\' light/dark values. Example: token_lookup { names: ["color.primary"] }.',
|
|
47
|
+
fields: [
|
|
48
|
+
{ name: "category", property: "ds:tokenType/rdfs:label", label: "Type" },
|
|
49
|
+
{ name: "valueLight", property: "ds:valueLight", label: "Light value" },
|
|
50
|
+
{ name: "valueDark", property: "ds:valueDark", label: "Dark value" },
|
|
51
|
+
],
|
|
52
|
+
sample: {
|
|
53
|
+
fixedCount: true,
|
|
54
|
+
toolDescription:
|
|
55
|
+
"Return randomly selected complete design tokens (with theme values) as exemplars. Use BEFORE writing queries to see actual data shapes.",
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `token add-config` write body (lazily imported, off the fast path).
|
|
3
|
+
*
|
|
4
|
+
* A store-backed mutation: it counts the design tokens in the active graph (so
|
|
5
|
+
* the plan reports how many tokens the config will cover) and derives the
|
|
6
|
+
* terrazzo token-source globs from the configured design-system packages, then
|
|
7
|
+
* returns a Task that writes `tokens.config.mjs`. The store read happens in the
|
|
8
|
+
* async setup; the file write is the Task's single `WriteFile` effect, so a
|
|
9
|
+
* plan-only preview (`mutation.preview`) describes the write without performing
|
|
10
|
+
* it. Ported from the old shell's `token add-config` (terrazzo `defineConfig`).
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { resolve } from "node:path";
|
|
14
|
+
import { $, exists, gen, type Task, writeFile } from "@canonical/task";
|
|
15
|
+
import type { PragmaRuntime } from "../../kernel/runtime/types.js";
|
|
16
|
+
|
|
17
|
+
/** The default token source when no design-system packages are configured. */
|
|
18
|
+
const DEFAULT_TOKEN_SOURCE =
|
|
19
|
+
"node_modules/@canonical/ds-global/tokens/**/*.json";
|
|
20
|
+
|
|
21
|
+
/** The result of generating a terrazzo tokens config. */
|
|
22
|
+
export interface AddConfigResult {
|
|
23
|
+
/** The absolute path written. */
|
|
24
|
+
readonly path: string;
|
|
25
|
+
/** How many `ds:Token` entities the active graph holds. */
|
|
26
|
+
readonly tokenCount: number;
|
|
27
|
+
/** The token-source globs written into the config. */
|
|
28
|
+
readonly sources: readonly string[];
|
|
29
|
+
/** Whether a `tokens.config.mjs` already existed (it is overwritten). */
|
|
30
|
+
readonly alreadyExisted: boolean;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Count the `ds:Token` entities in the booted store (best-effort). */
|
|
34
|
+
async function countTokens(rt: PragmaRuntime): Promise<number> {
|
|
35
|
+
try {
|
|
36
|
+
const result = (await rt.query.sparql(
|
|
37
|
+
"SELECT (COUNT(DISTINCT ?token) AS ?count) WHERE { ?token a ds:Token }",
|
|
38
|
+
)) as { type?: string; bindings?: { count?: string }[] };
|
|
39
|
+
const raw = result.bindings?.[0]?.count;
|
|
40
|
+
return raw ? Number(raw) : 0;
|
|
41
|
+
} catch {
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Derive the terrazzo token-source globs from the configured packages. */
|
|
47
|
+
async function resolveSources(rt: PragmaRuntime): Promise<string[]> {
|
|
48
|
+
const { config } = await rt.loadConfig();
|
|
49
|
+
const packages = config.packages ?? [];
|
|
50
|
+
if (packages.length === 0) return [DEFAULT_TOKEN_SOURCE];
|
|
51
|
+
return packages.map((pkg) => {
|
|
52
|
+
const name = typeof pkg === "string" ? pkg : pkg.name;
|
|
53
|
+
return `node_modules/${name}/tokens/**/*.json`;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Render the terrazzo `tokens.config.mjs` content. */
|
|
58
|
+
function generateConfig(sources: readonly string[]): string {
|
|
59
|
+
const sourceList = sources
|
|
60
|
+
.map((source) => ` ${JSON.stringify(source)}`)
|
|
61
|
+
.join(",\n");
|
|
62
|
+
return `// tokens.config.mjs — generated by \`pragma token add-config\`
|
|
63
|
+
import { defineConfig } from "@canonical/terrazzo";
|
|
64
|
+
|
|
65
|
+
export default defineConfig({
|
|
66
|
+
tokens: [
|
|
67
|
+
${sourceList},
|
|
68
|
+
],
|
|
69
|
+
outDir: "./tokens/",
|
|
70
|
+
plugins: [],
|
|
71
|
+
});
|
|
72
|
+
`;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Build the Task that writes `tokens.config.mjs` for the terrazzo pipeline.
|
|
77
|
+
*
|
|
78
|
+
* @param rt - The runtime (its store is booted by the projector for needsStore).
|
|
79
|
+
* @returns A Task yielding the write outcome.
|
|
80
|
+
* @note Impure — reads the store + config; the write is the Task's effect.
|
|
81
|
+
*/
|
|
82
|
+
export async function runAddConfig(
|
|
83
|
+
rt: PragmaRuntime,
|
|
84
|
+
): Promise<Task<AddConfigResult>> {
|
|
85
|
+
const tokenCount = await countTokens(rt);
|
|
86
|
+
const sources = await resolveSources(rt);
|
|
87
|
+
const path = resolve(rt.cwd, "tokens.config.mjs");
|
|
88
|
+
const content = generateConfig(sources);
|
|
89
|
+
|
|
90
|
+
return gen(function* () {
|
|
91
|
+
const alreadyExisted = yield* $(exists(path));
|
|
92
|
+
yield* $(writeFile(path, content));
|
|
93
|
+
return { path, tokenCount, sources, alreadyExisted };
|
|
94
|
+
});
|
|
95
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the `upgrade` Task (lazily imported, off the fast path).
|
|
3
|
+
*
|
|
4
|
+
* Async-setup then compose: read the channel, detect the install source, and
|
|
5
|
+
* check the registry (a preview-safe READ — no side effect), then return a Task
|
|
6
|
+
* shaped by the outcome. The `exec` effect is the SOLE mutation, so the effect
|
|
7
|
+
* seam does the rest for free:
|
|
8
|
+
*
|
|
9
|
+
* - `--dry-run` (dispatcher `dryRun`) MOCKS the exec and describes the plan —
|
|
10
|
+
* both the `Log` version-delta line AND the `Execute: <command>` line show,
|
|
11
|
+
* and nothing runs.
|
|
12
|
+
* - `--yes` / MCP `confirm` runs the exec for real; a nonzero exit is surfaced
|
|
13
|
+
* by `assertExecOk` as an actionable UNSUPPORTED (exit 1) — the interpreter
|
|
14
|
+
* RESOLVES on a nonzero exit, so the check is the consumer's job.
|
|
15
|
+
* - offline / already-latest carry NO exec — a real run just returns the status.
|
|
16
|
+
*
|
|
17
|
+
* The whole registry read is preview-safe, so no `mutation.preview` gating is
|
|
18
|
+
* needed here (unlike `sources update`, whose heavy resolve must be gated).
|
|
19
|
+
* `run` returns `Promise<Task<R>>`, presented through the `Task<R>` arm by the
|
|
20
|
+
* honest cast at the verb (the `update.verb.ts` precedent).
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import { $, exec, gen, info, type Task, warn } from "@canonical/task";
|
|
24
|
+
import type { PragmaRuntime } from "../../kernel/runtime/types.js";
|
|
25
|
+
import { assertExecOk, guardMissingBinary } from "../shared/assertExecOk.js";
|
|
26
|
+
import {
|
|
27
|
+
detectInstallSource,
|
|
28
|
+
pmUpdateCommand,
|
|
29
|
+
} from "../shared/packageManager.js";
|
|
30
|
+
import { checkRegistryVersion, PRAGMA_PACKAGE } from "../shared/registry.js";
|
|
31
|
+
import type { UpgradeData } from "./types.js";
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the upgrade state and compose the corresponding Task.
|
|
35
|
+
*
|
|
36
|
+
* @param rt - The per-invocation runtime.
|
|
37
|
+
* @returns A Task yielding the upgrade outcome (its exec runs only on a real,
|
|
38
|
+
* update-needed execution).
|
|
39
|
+
* @note Impure — reads the config + the registry (the exec is the only mutation,
|
|
40
|
+
* and it runs only under a real, update-needed execution).
|
|
41
|
+
*/
|
|
42
|
+
export async function runUpgrade(
|
|
43
|
+
rt: PragmaRuntime,
|
|
44
|
+
): Promise<Task<UpgradeData>> {
|
|
45
|
+
const { channel } = (await rt.loadConfig()).config;
|
|
46
|
+
const install = detectInstallSource();
|
|
47
|
+
const command = pmUpdateCommand(install.pm, PRAGMA_PACKAGE);
|
|
48
|
+
const pm = install.label;
|
|
49
|
+
const current = rt.version;
|
|
50
|
+
|
|
51
|
+
const registry = await checkRegistryVersion(PRAGMA_PACKAGE, channel);
|
|
52
|
+
|
|
53
|
+
if (registry === undefined) {
|
|
54
|
+
const data: UpgradeData = {
|
|
55
|
+
pm,
|
|
56
|
+
current,
|
|
57
|
+
latest: undefined,
|
|
58
|
+
command,
|
|
59
|
+
offline: true,
|
|
60
|
+
alreadyLatest: false,
|
|
61
|
+
executed: false,
|
|
62
|
+
};
|
|
63
|
+
return gen(function* () {
|
|
64
|
+
yield* $(
|
|
65
|
+
warn("Could not reach the registry — skipped the update check."),
|
|
66
|
+
);
|
|
67
|
+
return data;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (registry.latest === current) {
|
|
72
|
+
const data: UpgradeData = {
|
|
73
|
+
pm,
|
|
74
|
+
current,
|
|
75
|
+
latest: registry.latest,
|
|
76
|
+
command,
|
|
77
|
+
offline: false,
|
|
78
|
+
alreadyLatest: true,
|
|
79
|
+
executed: false,
|
|
80
|
+
};
|
|
81
|
+
return gen(function* () {
|
|
82
|
+
yield* $(info(`Already at the latest version (${current}).`));
|
|
83
|
+
return data;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const data: UpgradeData = {
|
|
88
|
+
pm,
|
|
89
|
+
current,
|
|
90
|
+
latest: registry.latest,
|
|
91
|
+
command,
|
|
92
|
+
offline: false,
|
|
93
|
+
alreadyLatest: false,
|
|
94
|
+
executed: true,
|
|
95
|
+
};
|
|
96
|
+
const parts = command.split(" ");
|
|
97
|
+
const bin = parts[0] ?? "npm";
|
|
98
|
+
const args = parts.slice(1);
|
|
99
|
+
// Guard the spawn: an absent package manager (`bin` not on PATH) REJECTS the
|
|
100
|
+
// exec with ENOENT, which would collapse to INTERNAL_ERROR ("please report
|
|
101
|
+
// this issue"). Surface it as a named "`<pm>` not found on PATH" instead.
|
|
102
|
+
return guardMissingBinary(
|
|
103
|
+
bin,
|
|
104
|
+
{
|
|
105
|
+
message: `Install ${pm} (or your package manager) and ensure it is on your PATH, then try again.`,
|
|
106
|
+
},
|
|
107
|
+
gen(function* () {
|
|
108
|
+
// The version-delta rides a Log effect, so `--dry-run` describes it too.
|
|
109
|
+
yield* $(info(`${current} → ${registry.latest}`));
|
|
110
|
+
// The one mutation — mocked under dry-run, run for real under --yes/confirm.
|
|
111
|
+
// The interpreter RESOLVES on a nonzero exit (only a spawn error rejects),
|
|
112
|
+
// so inspect the result: a failed install (e.g. EACCES on a global
|
|
113
|
+
// `npm i -g`) must fail loudly, not report a silent success.
|
|
114
|
+
const result = yield* $(exec(bin, args, rt.cwd));
|
|
115
|
+
assertExecOk(command, result);
|
|
116
|
+
return data;
|
|
117
|
+
}),
|
|
118
|
+
);
|
|
119
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data shape for `pragma upgrade`.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/** The outcome of an upgrade run (or its plan). */
|
|
6
|
+
export interface UpgradeData {
|
|
7
|
+
/** The install-source label (e.g. `bun (global)`). */
|
|
8
|
+
readonly pm: string;
|
|
9
|
+
/** The currently-installed version. */
|
|
10
|
+
readonly current: string;
|
|
11
|
+
/** The latest published version, or `undefined` when offline. */
|
|
12
|
+
readonly latest: string | undefined;
|
|
13
|
+
/** The package-manager command that applies the update. */
|
|
14
|
+
readonly command: string;
|
|
15
|
+
/** True when the registry could not be reached. */
|
|
16
|
+
readonly offline: boolean;
|
|
17
|
+
/** True when the installed version is already the latest. */
|
|
18
|
+
readonly alreadyLatest: boolean;
|
|
19
|
+
/** True when the update command was actually executed (a real run). */
|
|
20
|
+
readonly executed: boolean;
|
|
21
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatters for `pragma upgrade` — plain (chalk), llm, json.
|
|
3
|
+
*
|
|
4
|
+
* Renders the REAL-run outcome (the `--dry-run` plan is rendered by the
|
|
5
|
+
* dispatcher's plan renderer, not here), so there is no "would run" branch: a
|
|
6
|
+
* needed run always carries `executed: true`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
import type { Formatters } from "../../kernel/spec/types.js";
|
|
11
|
+
import { PRAGMA_PACKAGE } from "../shared/registry.js";
|
|
12
|
+
import type { UpgradeData } from "./types.js";
|
|
13
|
+
|
|
14
|
+
export const upgradeFormatters: Formatters<UpgradeData> = {
|
|
15
|
+
plain(data) {
|
|
16
|
+
const lines = [`Installed via: ${data.pm}`];
|
|
17
|
+
if (data.offline) {
|
|
18
|
+
lines.push("Could not reach the registry — try again later.");
|
|
19
|
+
return lines.join("\n");
|
|
20
|
+
}
|
|
21
|
+
if (data.alreadyLatest) {
|
|
22
|
+
lines.push(`Already at the latest version (${data.current}).`);
|
|
23
|
+
return lines.join("\n");
|
|
24
|
+
}
|
|
25
|
+
lines.push(
|
|
26
|
+
"",
|
|
27
|
+
`${PRAGMA_PACKAGE} ${data.current} → ${chalk.green(String(data.latest))}`,
|
|
28
|
+
"",
|
|
29
|
+
);
|
|
30
|
+
if (data.executed) {
|
|
31
|
+
lines.push(
|
|
32
|
+
`Ran: ${chalk.cyan(data.command)}`,
|
|
33
|
+
"",
|
|
34
|
+
`Updated to ${data.latest}.`,
|
|
35
|
+
);
|
|
36
|
+
} else {
|
|
37
|
+
lines.push(`Run: ${chalk.cyan(data.command)}`);
|
|
38
|
+
}
|
|
39
|
+
return lines.join("\n");
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
llm(data) {
|
|
43
|
+
if (data.offline)
|
|
44
|
+
return "Upgrade check failed: could not reach the registry.";
|
|
45
|
+
if (data.alreadyLatest) {
|
|
46
|
+
return `Already at the latest version (${data.current}).`;
|
|
47
|
+
}
|
|
48
|
+
if (data.executed) return `Upgraded: ${data.current} → ${data.latest}`;
|
|
49
|
+
return `Update available: ${data.current} → ${data.latest} (\`${data.command}\`)`;
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
json(data) {
|
|
53
|
+
return JSON.stringify(data);
|
|
54
|
+
},
|
|
55
|
+
};
|