@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,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `setup` verbs — the run-all self-verb plus the four CLI-only sub-verbs
|
|
3
|
+
* (`mcp`/`completions`/`skills`/`lsp`).
|
|
4
|
+
*
|
|
5
|
+
* `setup` is the ONE covenant noun that is BOTH directly runnable and has
|
|
6
|
+
* sub-verbs (see the buildProgram mixed-noun change). All five are storeless,
|
|
7
|
+
* interactive mutations. The sub-verbs are `mcp: false` (the covenant marks
|
|
8
|
+
* them so — `buildServer` skips them, `buildProgram` still registers them); only
|
|
9
|
+
* the self-verb `setup` is an MCP tool. `destructive: false` (D4) keeps MCP from
|
|
10
|
+
* advertising the `setup` tool as destructive.
|
|
11
|
+
*
|
|
12
|
+
* ALL FIVE now flow through the SAME summon `execute` seam `create` uses: each
|
|
13
|
+
* `run` synthesizes a `GeneratorDefinition` (detection up front, a pure
|
|
14
|
+
* `generate`), picks the Ink wizard / auto / MCP strategy off `rt.interaction`,
|
|
15
|
+
* and returns `execute` — so setup inherits the recap, live progress, colours,
|
|
16
|
+
* and the shared cancel fixes. summon-core + the generator ops stay behind a
|
|
17
|
+
* LAZY dynamic import (mirroring `create`'s `loadCreateRuntime`), so building the
|
|
18
|
+
* command tree / `--help` / `__complete` — and `setup --yes` — load no
|
|
19
|
+
* React/Ink. `params: []` on every verb keeps the command surface frozen.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import type { GeneratorResult } from "@canonical/summon-core";
|
|
23
|
+
import { $, gen, type Task } from "@canonical/task";
|
|
24
|
+
import type { PragmaRuntime } from "../../kernel/runtime/types.js";
|
|
25
|
+
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
26
|
+
import type {
|
|
27
|
+
CapabilityModule,
|
|
28
|
+
ParamSpec,
|
|
29
|
+
VerbSpec,
|
|
30
|
+
} from "../../kernel/spec/types.js";
|
|
31
|
+
import { setupFormatters } from "./setup.render.js";
|
|
32
|
+
import type { ScopeSelection, SetupMode, SetupResult } from "./types.js";
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The `--scope` flag + its `--global`/`--local` boolean sugars, shared by the
|
|
36
|
+
* band-aware verbs (`setup`/`mcp`/`skills`). `completions`/`lsp` never carry
|
|
37
|
+
* them — they are single-band installers.
|
|
38
|
+
*/
|
|
39
|
+
const SCOPE_PARAMS: readonly ParamSpec[] = [
|
|
40
|
+
{
|
|
41
|
+
kind: "enum",
|
|
42
|
+
name: "scope",
|
|
43
|
+
doc: "Which config band(s) to configure: project, global, or both.",
|
|
44
|
+
values: ["project", "global", "both"],
|
|
45
|
+
default: "both",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
kind: "boolean",
|
|
49
|
+
name: "global",
|
|
50
|
+
doc: "Shorthand for --scope global (configure the user/home band).",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
kind: "boolean",
|
|
54
|
+
name: "local",
|
|
55
|
+
doc: "Shorthand for --scope project (configure the per-project band).",
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Resolve the `--scope`/`--global`/`--local` params into a single selection.
|
|
61
|
+
* The boolean sugars win over `--scope`; `--global` wins over `--local`.
|
|
62
|
+
*
|
|
63
|
+
* @param params - The coerced param bag.
|
|
64
|
+
* @returns The resolved scope selection (defaults to `both`).
|
|
65
|
+
*/
|
|
66
|
+
function resolveScope(params: Record<string, unknown>): ScopeSelection {
|
|
67
|
+
if (params.global === true) return "global";
|
|
68
|
+
if (params.local === true) return "project";
|
|
69
|
+
const scope = params.scope;
|
|
70
|
+
return scope === "global" || scope === "project" ? scope : "both";
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** The exposed-to-MCP capability the run-all self-verb declares. */
|
|
74
|
+
const SELF_CAPABILITY = {
|
|
75
|
+
needsStore: false,
|
|
76
|
+
mutates: true,
|
|
77
|
+
interactive: true,
|
|
78
|
+
destructive: false,
|
|
79
|
+
mcp: {
|
|
80
|
+
expose: true as const,
|
|
81
|
+
annotations: {
|
|
82
|
+
readOnlyHint: false,
|
|
83
|
+
destructiveHint: false,
|
|
84
|
+
openWorldHint: false,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/** The CLI-only capability every sub-verb declares (not an MCP tool). */
|
|
90
|
+
const SUB_CAPABILITY = {
|
|
91
|
+
needsStore: false,
|
|
92
|
+
mutates: true,
|
|
93
|
+
interactive: true,
|
|
94
|
+
destructive: false,
|
|
95
|
+
mcp: {
|
|
96
|
+
expose: false as const,
|
|
97
|
+
reason: "CLI-only environment installer",
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* The one summon↔pragma seam per setup invocation: lazily load summon-core + the
|
|
103
|
+
* generator ops, build the plan (detection up front), pick the prompt strategy
|
|
104
|
+
* off `rt.interaction`, wire `rt.exec`, and return `execute` mapped back onto
|
|
105
|
+
* {@link SetupResult}.
|
|
106
|
+
*
|
|
107
|
+
* NOTE: `rt.exec` carries NO per-call `cwd`. Unlike `create` (whose generator
|
|
108
|
+
* emits RELATIVE paths jailed to `rt.cwd`), setup's ops build ABSOLUTE effect
|
|
109
|
+
* paths themselves ($HOME/…, resolve(cwd,…)); the interpreter leaves absolute
|
|
110
|
+
* paths unchanged, so no per-call write root is threaded. No stamping either —
|
|
111
|
+
* setup writes symlinks / config / scripts, not generated source.
|
|
112
|
+
*
|
|
113
|
+
* @param mode - Which entry point (`all` or one sub-verb).
|
|
114
|
+
* @param rt - The per-invocation runtime (mutated: `rt.exec` is set).
|
|
115
|
+
* @returns The `Task<SetupResult>` the dispatcher/MCP handler interprets.
|
|
116
|
+
* @note Impure — runs each step's real detection; may throw EMPTY_RESULTS
|
|
117
|
+
* (direct `setup skills` with no skills) before returning a Task.
|
|
118
|
+
*/
|
|
119
|
+
async function runSetup(
|
|
120
|
+
mode: SetupMode,
|
|
121
|
+
rt: PragmaRuntime,
|
|
122
|
+
scope: ScopeSelection,
|
|
123
|
+
): Promise<Task<SetupResult>> {
|
|
124
|
+
// Lazy dynamic imports (R1 lazy-React discipline): summon-core's barrel is
|
|
125
|
+
// React-free, and the non-TTY branch picks autoPrompt/mcpPrompt (never mounts
|
|
126
|
+
// Ink), so `setup --yes` loads no React — the guard test enforces this.
|
|
127
|
+
const [summon, ops] = await Promise.all([
|
|
128
|
+
import("@canonical/summon-core"),
|
|
129
|
+
import("./operations/setupGenerator.js"),
|
|
130
|
+
]);
|
|
131
|
+
|
|
132
|
+
const { generator, toResult } = await ops.buildSetupPlan(rt, mode, scope);
|
|
133
|
+
|
|
134
|
+
const { isTTY, transport, yes, signal, abort } = rt.interaction ?? {
|
|
135
|
+
isTTY: false,
|
|
136
|
+
transport: "cli" as const,
|
|
137
|
+
yes: true,
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// TTY without --yes → the Ink wizard (recap + live progress). Its callbacks
|
|
141
|
+
// ride rt.exec; `onCancel` threads the run's abort in so an in-Ink Ctrl-C
|
|
142
|
+
// during execution actually stops the writes (H2). No stamping (A5).
|
|
143
|
+
let task: Task<GeneratorResult>;
|
|
144
|
+
if (isTTY && !yes) {
|
|
145
|
+
const session = summon.inkPrompt(generator, { signal, onCancel: abort });
|
|
146
|
+
rt.exec = {
|
|
147
|
+
promptHandler: session.promptHandler,
|
|
148
|
+
onEffectStart: session.onEffectStart,
|
|
149
|
+
onEffectComplete: session.onEffectComplete,
|
|
150
|
+
onLog: session.onLog,
|
|
151
|
+
dispose: session.dispose,
|
|
152
|
+
signal,
|
|
153
|
+
};
|
|
154
|
+
task = summon.execute(generator, {
|
|
155
|
+
prompt: session.promptHandler,
|
|
156
|
+
params: {},
|
|
157
|
+
signal,
|
|
158
|
+
});
|
|
159
|
+
} else {
|
|
160
|
+
// Non-interactive: MCP → params-or-error; CLI/--yes/CI → defaults.
|
|
161
|
+
const prompt =
|
|
162
|
+
transport === "mcp" ? summon.mcpPrompt({}) : summon.autoPrompt({});
|
|
163
|
+
rt.exec = {
|
|
164
|
+
promptHandler: prompt,
|
|
165
|
+
onLog: (_level, message) => process.stderr.write(`${message}\n`),
|
|
166
|
+
signal,
|
|
167
|
+
};
|
|
168
|
+
task = summon.execute(generator, { prompt, params: {}, signal });
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// execute yields a GeneratorResult; map it back onto setup's tagged result
|
|
172
|
+
// union (its --format json shape is frozen). The completion view is driven by
|
|
173
|
+
// controller phase, not this value, so mapping after execute is invisible to
|
|
174
|
+
// the wizard.
|
|
175
|
+
return gen(function* () {
|
|
176
|
+
const result = yield* $(task);
|
|
177
|
+
return toResult(result.answers);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/** Build a setup verb bound to its {@link SetupMode}. */
|
|
182
|
+
function setupVerb(
|
|
183
|
+
path: VerbSpec<Record<string, unknown>, SetupResult>["path"],
|
|
184
|
+
summary: string,
|
|
185
|
+
mode: SetupMode,
|
|
186
|
+
capability: typeof SELF_CAPABILITY | typeof SUB_CAPABILITY,
|
|
187
|
+
extras: Partial<VerbSpec<Record<string, unknown>, SetupResult>> = {},
|
|
188
|
+
): VerbSpec<Record<string, unknown>, SetupResult> {
|
|
189
|
+
return {
|
|
190
|
+
path,
|
|
191
|
+
summary,
|
|
192
|
+
params: [],
|
|
193
|
+
output: { formatters: setupFormatters },
|
|
194
|
+
capability,
|
|
195
|
+
...extras,
|
|
196
|
+
run: (params, rt) =>
|
|
197
|
+
runSetup(mode, rt, resolveScope(params)) as unknown as Task<SetupResult>,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const setupAllVerb = setupVerb(
|
|
202
|
+
["setup"],
|
|
203
|
+
"Configure MCP, completions, skills, and the LSP for this project.",
|
|
204
|
+
"all",
|
|
205
|
+
SELF_CAPABILITY,
|
|
206
|
+
{
|
|
207
|
+
params: SCOPE_PARAMS,
|
|
208
|
+
doc: "Runs the shell-completions, LSP, MCP, and skills installers as a single wizard: pick the steps, review the recap, then apply. The scope option targets the project band, the user/home band, or both.",
|
|
209
|
+
examples: [
|
|
210
|
+
{ cmd: "pragma setup" },
|
|
211
|
+
{ cmd: "pragma setup --dry-run", note: "preview every step's effects" },
|
|
212
|
+
{
|
|
213
|
+
cmd: "pragma setup --global",
|
|
214
|
+
note: "configure only the user/home band",
|
|
215
|
+
},
|
|
216
|
+
{ cmd: "pragma setup mcp", note: "just the MCP server registration" },
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
const mcpVerb = setupVerb(
|
|
222
|
+
["setup", "mcp"],
|
|
223
|
+
"Register the pragma MCP server in detected AI harnesses.",
|
|
224
|
+
"mcp",
|
|
225
|
+
SUB_CAPABILITY,
|
|
226
|
+
{ params: SCOPE_PARAMS },
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
const completionsVerb = setupVerb(
|
|
230
|
+
["setup", "completions"],
|
|
231
|
+
"Install the shell-completion script for your shell.",
|
|
232
|
+
"completions",
|
|
233
|
+
SUB_CAPABILITY,
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
const skillsVerb = setupVerb(
|
|
237
|
+
["setup", "skills"],
|
|
238
|
+
"Symlink discovered skills into each AI harness.",
|
|
239
|
+
"skills",
|
|
240
|
+
SUB_CAPABILITY,
|
|
241
|
+
{ params: SCOPE_PARAMS },
|
|
242
|
+
);
|
|
243
|
+
|
|
244
|
+
const lspVerb = setupVerb(
|
|
245
|
+
["setup", "lsp"],
|
|
246
|
+
"Ensure the Terrazzo LSP VS Code extension is installed.",
|
|
247
|
+
"lsp",
|
|
248
|
+
SUB_CAPABILITY,
|
|
249
|
+
);
|
|
250
|
+
|
|
251
|
+
/** The `setup` capability module (run-all self-verb + four CLI-only sub-verbs). */
|
|
252
|
+
export const setupModule: CapabilityModule = {
|
|
253
|
+
name: "setup",
|
|
254
|
+
verbs: [
|
|
255
|
+
asVerb(setupAllVerb),
|
|
256
|
+
asVerb(mcpVerb),
|
|
257
|
+
asVerb(completionsVerb),
|
|
258
|
+
asVerb(skillsVerb),
|
|
259
|
+
asVerb(lspVerb),
|
|
260
|
+
],
|
|
261
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell detection + completion-script install paths (ported from the old
|
|
3
|
+
* shell's `setup/helpers/detectShell` + `completionScripts` path helpers).
|
|
4
|
+
*
|
|
5
|
+
* The covenant `setup completions` sub-verb carries NO flags, so shell selection
|
|
6
|
+
* is detection-only (the old `--zsh`/`--bash`/`--fish` force-flags are dropped).
|
|
7
|
+
* `$HOME` is read at call time so tests can isolate it.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { homedir } from "node:os";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
|
|
13
|
+
/** The shells `setup completions` can install for. */
|
|
14
|
+
export type ShellId = "zsh" | "bash" | "fish";
|
|
15
|
+
|
|
16
|
+
const SHELL_MAP: Record<string, ShellId> = {
|
|
17
|
+
zsh: "zsh",
|
|
18
|
+
bash: "bash",
|
|
19
|
+
fish: "fish",
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Detect the user's shell from `$SHELL`.
|
|
24
|
+
*
|
|
25
|
+
* @returns The detected shell, or `null` when `$SHELL` is unset/unrecognized.
|
|
26
|
+
* @note Impure — reads `process.env.SHELL`.
|
|
27
|
+
*/
|
|
28
|
+
export function detectShell(): ShellId | null {
|
|
29
|
+
const shell = process.env.SHELL ?? "";
|
|
30
|
+
const basename = shell.split("/").pop() ?? "";
|
|
31
|
+
return SHELL_MAP[basename] ?? null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The standard install path for a shell's completion script.
|
|
36
|
+
*
|
|
37
|
+
* @param shell - The target shell.
|
|
38
|
+
* @returns The absolute path the completion script is written to.
|
|
39
|
+
* @note Impure — reads the home directory.
|
|
40
|
+
*/
|
|
41
|
+
export function completionScriptPath(shell: ShellId): string {
|
|
42
|
+
const home = homedir();
|
|
43
|
+
switch (shell) {
|
|
44
|
+
case "zsh":
|
|
45
|
+
return join(home, ".zfunc", "_pragma");
|
|
46
|
+
case "bash":
|
|
47
|
+
return join(
|
|
48
|
+
home,
|
|
49
|
+
".local",
|
|
50
|
+
"share",
|
|
51
|
+
"bash-completion",
|
|
52
|
+
"completions",
|
|
53
|
+
"pragma",
|
|
54
|
+
);
|
|
55
|
+
case "fish":
|
|
56
|
+
return join(home, ".config", "fish", "completions", "pragma.fish");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The post-install activation hint for a shell.
|
|
62
|
+
*
|
|
63
|
+
* bash and fish install into directories their completion systems auto-load, so
|
|
64
|
+
* the only step left is a fresh shell. zsh's `~/.zfunc` is NOT auto-loaded: the
|
|
65
|
+
* script never loads unless `~/.zfunc` is on `$fpath` BEFORE `compinit` runs —
|
|
66
|
+
* the single trap every zsh user hits, so we spell out the exact `.zshrc` lines.
|
|
67
|
+
*
|
|
68
|
+
* @param shell - The shell the script was installed for.
|
|
69
|
+
* @returns A one-or-more-line activation instruction.
|
|
70
|
+
*/
|
|
71
|
+
export function activationHint(shell: ShellId): string {
|
|
72
|
+
switch (shell) {
|
|
73
|
+
case "zsh":
|
|
74
|
+
return (
|
|
75
|
+
"To activate, ensure ~/.zfunc is on your fpath BEFORE compinit. Add to ~/.zshrc:\n" +
|
|
76
|
+
" fpath=(~/.zfunc $fpath)\n" +
|
|
77
|
+
" autoload -Uz compinit && compinit\n" +
|
|
78
|
+
"Then restart your shell (or run `exec zsh`)."
|
|
79
|
+
);
|
|
80
|
+
case "bash":
|
|
81
|
+
return "To activate, restart your shell (bash-completion auto-loads the script).";
|
|
82
|
+
case "fish":
|
|
83
|
+
return "To activate, restart your shell (fish auto-loads the script).";
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data shapes for `pragma setup` and its sub-verbs.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { ShellId } from "./shell.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Which setup entry point is running: the run-all self-verb or one sub-verb.
|
|
9
|
+
* Lives here (a leaf type module) so `setup.verb.ts` can name it WITHOUT a
|
|
10
|
+
* static import of the generator ops — keeping them dynamic-only (lazy-React).
|
|
11
|
+
*/
|
|
12
|
+
export type SetupMode = "all" | "completions" | "lsp" | "mcp" | "skills";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* One of the two config bands: the per-user/home `global` band or the per-repo
|
|
16
|
+
* `project` band. Mirrors `@canonical/harnesses`' `ScopeBand` structurally, but
|
|
17
|
+
* is redeclared here so this statically-reachable type module never pulls the
|
|
18
|
+
* harnesses runtime into the fast-path module graph (the lazy-dispatch invariant).
|
|
19
|
+
*/
|
|
20
|
+
export type ScopeBand = "project" | "global";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The resolved `--scope` selection: which config band(s) a run touches. `both`
|
|
24
|
+
* (the default) runs each detected harness's default band; `global`/`project`
|
|
25
|
+
* run only that band. Structurally mirrors the harnesses `ScopeSelection`.
|
|
26
|
+
*/
|
|
27
|
+
export type ScopeSelection = "project" | "global" | "both";
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The prior state of an MCP target file, read up front by `detectMcp`:
|
|
31
|
+
* `absent` (no pragma entry yet), `configured` (a matching pragma entry already
|
|
32
|
+
* present in every write — a re-run skips it), or `drifted` (a pragma entry
|
|
33
|
+
* exists but differs, so a write updates it). Mirrors the skills step's
|
|
34
|
+
* created/skipped/replaced idempotency at the file grain.
|
|
35
|
+
*/
|
|
36
|
+
export type McpTargetState = "absent" | "configured" | "drifted";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* One configured MCP target in a result: the file that was written, which band
|
|
40
|
+
* it belongs to, the harness name(s) that share it, and its prior
|
|
41
|
+
* {@link McpTargetState} (so the recap can report new vs updated vs unchanged).
|
|
42
|
+
*/
|
|
43
|
+
export interface ConfiguredTarget {
|
|
44
|
+
readonly name: string;
|
|
45
|
+
readonly band: ScopeBand;
|
|
46
|
+
readonly path: string;
|
|
47
|
+
readonly state: McpTargetState;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The prior on-disk state of the shell-completion script, read up front by
|
|
52
|
+
* `detectCompletions`: `absent` (no script), `installed` (a byte-identical
|
|
53
|
+
* script is already present — a re-run skips it), or `stale` (a different
|
|
54
|
+
* script is present, so a write updates it).
|
|
55
|
+
*/
|
|
56
|
+
export type CompletionsState = "absent" | "installed" | "stale";
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The detected state of the Terrazzo LSP VS Code extension, probed up front by
|
|
60
|
+
* `detectLsp`: `installed` (already present — a re-run skips it), `absent` (not
|
|
61
|
+
* present, so the installer runs), or `unknown` (the `code` CLI is not on PATH,
|
|
62
|
+
* so we cannot enumerate and the installer runs regardless).
|
|
63
|
+
*/
|
|
64
|
+
export type LspState = "installed" | "absent" | "unknown";
|
|
65
|
+
|
|
66
|
+
/** One symlink create/skip/replace action performed during skill setup. */
|
|
67
|
+
export interface SymlinkAction {
|
|
68
|
+
readonly skillName: string;
|
|
69
|
+
readonly target: string;
|
|
70
|
+
readonly linkPath: string;
|
|
71
|
+
readonly action: "created" | "skipped" | "replaced";
|
|
72
|
+
readonly harnessName: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Aggregate result of `pragma setup skills`. */
|
|
76
|
+
export interface SetupSkillsResult {
|
|
77
|
+
readonly actions: readonly SymlinkAction[];
|
|
78
|
+
readonly harnessCount: number;
|
|
79
|
+
readonly skillCount: number;
|
|
80
|
+
readonly warnings: readonly string[];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** The result of one setup verb, tagged by which verb produced it. */
|
|
84
|
+
export type SetupResult =
|
|
85
|
+
| {
|
|
86
|
+
readonly kind: "completions";
|
|
87
|
+
readonly shell: ShellId | null;
|
|
88
|
+
readonly path: string | null;
|
|
89
|
+
readonly installed: boolean;
|
|
90
|
+
readonly state: CompletionsState;
|
|
91
|
+
}
|
|
92
|
+
| { readonly kind: "lsp"; readonly state: LspState }
|
|
93
|
+
| {
|
|
94
|
+
readonly kind: "mcp";
|
|
95
|
+
readonly configured: readonly string[];
|
|
96
|
+
readonly targets: readonly ConfiguredTarget[];
|
|
97
|
+
}
|
|
98
|
+
| { readonly kind: "skills"; readonly result: SetupSkillsResult }
|
|
99
|
+
| { readonly kind: "all"; readonly steps: readonly string[] };
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guard an `exec`-composing Task against a silently-swallowed nonzero exit.
|
|
3
|
+
*
|
|
4
|
+
* The `@canonical/task` interpreter RESOLVES the `exec` effect on a nonzero exit
|
|
5
|
+
* code — it only REJECTS on a spawn error (e.g. ENOENT). A consumer that yields
|
|
6
|
+
* `exec` and ignores `ExecResult.exitCode` therefore reports a failed command
|
|
7
|
+
* (the common case being an EACCES-denied global `npm i -g`) as a silent
|
|
8
|
+
* success, discarding the subprocess's own stderr. Every `exec` consumer in
|
|
9
|
+
* `next/src` (`upgrade`, `setup lsp`) calls this immediately after its `exec`
|
|
10
|
+
* yield, so a failed subprocess surfaces as UNSUPPORTED (exit 1) carrying the
|
|
11
|
+
* command and the captured stderr instead of being reported as done.
|
|
12
|
+
*
|
|
13
|
+
* A denied `npm i -g` (EACCES), a registry/network failure, or any other
|
|
14
|
+
* nonzero exit is a fixable ENVIRONMENT condition — NOT a pragma bug — so it is
|
|
15
|
+
* classified UNSUPPORTED with an actionable recovery, never INTERNAL_ERROR's
|
|
16
|
+
* "please report this issue". (A spawn error like ENOENT REJECTS the effect
|
|
17
|
+
* instead of resolving, so it never reaches here.)
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { type ExecResult, fail, recover, type Task } from "@canonical/task";
|
|
21
|
+
import { PragmaError } from "../../kernel/error/PragmaError.js";
|
|
22
|
+
import type { Recovery } from "../../kernel/error/types.js";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Raise UNSUPPORTED when an `exec` result carries a nonzero exit code.
|
|
26
|
+
*
|
|
27
|
+
* @param command - Human-readable command, surfaced in the error message.
|
|
28
|
+
* @param result - The {@link ExecResult} the `exec` effect yielded.
|
|
29
|
+
* @throws PragmaError UNSUPPORTED (exit 1) when `result.exitCode !== 0`,
|
|
30
|
+
* including the trimmed stderr when the subprocess emitted any, plus an
|
|
31
|
+
* actionable recovery (a permissions/network failure the user can retry).
|
|
32
|
+
*/
|
|
33
|
+
export function assertExecOk(command: string, result: ExecResult): void {
|
|
34
|
+
if (result.exitCode === 0) return;
|
|
35
|
+
const stderr = result.stderr.trim();
|
|
36
|
+
throw new PragmaError({
|
|
37
|
+
code: "UNSUPPORTED",
|
|
38
|
+
message: `\`${command}\` exited with code ${result.exitCode}.${
|
|
39
|
+
stderr ? `\n${stderr}` : ""
|
|
40
|
+
}`,
|
|
41
|
+
recovery: {
|
|
42
|
+
message:
|
|
43
|
+
"The command failed — often a permissions or network issue. Check the output above and retry (for a global install, try elevated privileges).",
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* True when a rejected/normalised `exec` error is a missing-binary spawn failure.
|
|
50
|
+
*
|
|
51
|
+
* A spawn `ENOENT` (the command is absent from PATH) REJECTS the `exec` effect —
|
|
52
|
+
* unlike a nonzero exit, which RESOLVES it (see {@link assertExecOk}). The task
|
|
53
|
+
* interpreter normalises that reject into a `FILE_NOT_FOUND` TaskError carrying
|
|
54
|
+
* the raw spawn error as `.cause`, so this unwraps one level to recognise both
|
|
55
|
+
* the raw and normalised shapes.
|
|
56
|
+
*
|
|
57
|
+
* @param error - The thrown/rejected value (raw spawn error or its TaskError).
|
|
58
|
+
* @returns Whether it denotes a binary missing from PATH.
|
|
59
|
+
*/
|
|
60
|
+
export function isMissingBinaryError(error: unknown): boolean {
|
|
61
|
+
const codeOf = (value: unknown): unknown =>
|
|
62
|
+
value && typeof value === "object" && "code" in value
|
|
63
|
+
? (value as { code: unknown }).code
|
|
64
|
+
: undefined;
|
|
65
|
+
if (codeOf(error) === "ENOENT") return true;
|
|
66
|
+
const cause = (error as { cause?: unknown } | null | undefined)?.cause;
|
|
67
|
+
return codeOf(cause) === "ENOENT";
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Wrap an `exec`-composing Task so a missing-binary spawn (ENOENT) surfaces as a
|
|
72
|
+
* named UNSUPPORTED "`<bin>` not found on PATH" error with actionable recovery,
|
|
73
|
+
* rather than the interpreter's raw reject collapsing to INTERNAL_ERROR ("please
|
|
74
|
+
* report this issue") at the CLI/MCP boundary. Every spawn site that may hit an
|
|
75
|
+
* absent binary (`upgrade`'s package manager, `setup lsp`'s `bunx`) wraps its
|
|
76
|
+
* Task with this so they never reach the catch-all.
|
|
77
|
+
*
|
|
78
|
+
* Only real execution can trip it: a dry-run/plan mocks `exec` (exit 0, no
|
|
79
|
+
* spawn), so the guard is transparent to the preview. A nonzero exit RESOLVES
|
|
80
|
+
* the effect and is still {@link assertExecOk}'s job (its throw is a synchronous
|
|
81
|
+
* generator-body throw, not an effect failure, so it bypasses this handler); any
|
|
82
|
+
* other effect failure re-raises unchanged.
|
|
83
|
+
*
|
|
84
|
+
* @param bin - The binary name surfaced in the error message.
|
|
85
|
+
* @param recovery - The install/PATH recovery hint.
|
|
86
|
+
* @param task - The Task whose `exec` effect may reject with ENOENT.
|
|
87
|
+
* @returns The Task, guarded against a missing-binary spawn.
|
|
88
|
+
*/
|
|
89
|
+
export function guardMissingBinary<A>(
|
|
90
|
+
bin: string,
|
|
91
|
+
recovery: Recovery,
|
|
92
|
+
task: Task<A>,
|
|
93
|
+
): Task<A> {
|
|
94
|
+
return recover(task, (error) => {
|
|
95
|
+
if (isMissingBinaryError(error)) {
|
|
96
|
+
throw new PragmaError({
|
|
97
|
+
code: "UNSUPPORTED",
|
|
98
|
+
message: `\`${bin}\` was not found on your PATH.`,
|
|
99
|
+
recovery,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// Not a missing binary — re-raise unchanged (the interpreter rethrows it as
|
|
103
|
+
// a TaskExecutionError, exactly as it would with no guard installed).
|
|
104
|
+
return fail(error);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-facing labels for the two config bands, shared by the setup recap
|
|
3
|
+
* ({@link ../setup/setup.render}) and the doctor report
|
|
4
|
+
* ({@link ../doctor/doctor.render}) so ONE consistent vocabulary appears across
|
|
5
|
+
* both. The pair matches the CLI grammar users already meet elsewhere: the
|
|
6
|
+
* `--global`/`--local` flags, the `--scope project|global|both` enum, config
|
|
7
|
+
* show's `[global]`/`[project]` origin markers, and the `setup` manifest's
|
|
8
|
+
* `[global]`/`[project]` lines. (Earlier these two surfaces said MACHINE/PROJECT
|
|
9
|
+
* — a third term for the same bands; this is the single source that unifies it.)
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** The user-facing display label for each of the two config bands. */
|
|
13
|
+
export const BAND_LABELS: Record<"project" | "global", string> = {
|
|
14
|
+
global: "Global",
|
|
15
|
+
project: "Project",
|
|
16
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storeless install-source heuristic, shared by `info`, `upgrade`, and
|
|
3
|
+
* `doctor`'s `pragma version` check.
|
|
4
|
+
*
|
|
5
|
+
* Promotes the detector that lived inline in `info/collectInfo.ts`: the package
|
|
6
|
+
* manager comes from npm's `npm_config_user_agent` (set by npm/pnpm/yarn/bun
|
|
7
|
+
* when they run a script), the scope from whether the binary sits under
|
|
8
|
+
* `node_modules`. With no agent we report the honest runtime rather than
|
|
9
|
+
* guessing. The old shell's full package.json walk (`#package-manager`) is
|
|
10
|
+
* dropped — only this heuristic and the update-command map survive.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** The install source: package manager and a display label. */
|
|
14
|
+
export interface InstallSource {
|
|
15
|
+
/** Package-manager name (`bun`/`npm`/`pnpm`/`yarn`), else the honest runtime. */
|
|
16
|
+
readonly pm: string;
|
|
17
|
+
/** `${pm} (${scope})` — the string `info`/`doctor` display. */
|
|
18
|
+
readonly label: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** The package manager from npm's user-agent, else the honest runtime. */
|
|
22
|
+
function packageManager(): string {
|
|
23
|
+
const agent = process.env.npm_config_user_agent;
|
|
24
|
+
const name = agent?.split("/")[0];
|
|
25
|
+
if (name) return name;
|
|
26
|
+
return process.versions.bun ? "bun" : "node";
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Detect how the binary was installed — package manager and scope.
|
|
31
|
+
*
|
|
32
|
+
* @returns The install source (pm, label).
|
|
33
|
+
* @note Impure — reads `process.argv`/`process.env`.
|
|
34
|
+
*/
|
|
35
|
+
export function detectInstallSource(): InstallSource {
|
|
36
|
+
const bin = process.argv[1] ?? "";
|
|
37
|
+
const scope = bin.includes("node_modules") ? "local" : "global";
|
|
38
|
+
const pm = packageManager();
|
|
39
|
+
return { pm, label: `${pm} (${scope})` };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** The npm global-update command — also the fallback for an unknown manager. */
|
|
43
|
+
const npmUpdateCommand = (pkg: string): string => `npm i -g ${pkg}`;
|
|
44
|
+
|
|
45
|
+
/** The global-update command per package manager (install-style). */
|
|
46
|
+
const PM_UPDATE_COMMAND: Record<string, (pkg: string) => string> = {
|
|
47
|
+
bun: (pkg) => `bun add -g ${pkg}`,
|
|
48
|
+
npm: npmUpdateCommand,
|
|
49
|
+
pnpm: (pkg) => `pnpm add -g ${pkg}`,
|
|
50
|
+
yarn: (pkg) => `yarn global add ${pkg}`,
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The command that updates `pkg` globally for a package manager.
|
|
55
|
+
*
|
|
56
|
+
* @param pm - The package-manager name (`bun`/`npm`/`pnpm`/`yarn`).
|
|
57
|
+
* @param pkg - The package to update.
|
|
58
|
+
* @returns The shell command; falls back to npm for an unknown manager.
|
|
59
|
+
*/
|
|
60
|
+
export function pmUpdateCommand(pm: string, pkg: string): string {
|
|
61
|
+
return (PM_UPDATE_COMMAND[pm] ?? npmUpdateCommand)(pkg);
|
|
62
|
+
}
|