@canonical/pragma-cli 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pragma +0 -0
- package/package.json +27 -42
- package/src/bin.ts +292 -11
- package/src/capabilities/block/blockList.verb.ts +150 -0
- package/src/capabilities/block/index.ts +25 -0
- package/src/capabilities/block/pack.ts +155 -0
- package/src/capabilities/block/parity.test.ts +180 -0
- package/src/capabilities/block/tierChain.ts +78 -0
- package/src/capabilities/capabilities/capabilities.render.ts +89 -0
- package/src/capabilities/capabilities/capabilities.test.ts +131 -0
- package/src/capabilities/capabilities/capabilities.verb.ts +48 -0
- package/src/capabilities/capabilities/catalog.ts +144 -0
- package/src/capabilities/capabilities/hints.ts +221 -0
- package/src/capabilities/capabilities/index.ts +13 -0
- package/src/capabilities/capabilities/types.ts +58 -0
- package/src/capabilities/colophon/collectColophon.ts +68 -0
- package/src/capabilities/colophon/colophon.render.test.ts +87 -0
- package/src/capabilities/colophon/colophon.render.ts +38 -0
- package/src/capabilities/colophon/colophon.test.ts +241 -0
- package/src/capabilities/colophon/colophon.verb.ts +41 -0
- package/src/capabilities/colophon/index.ts +6 -0
- package/src/capabilities/colophon/markdownTerminal.test.ts +50 -0
- package/src/capabilities/colophon/markdownTerminal.ts +85 -0
- package/src/capabilities/colophon/pragmaColophon.ts +66 -0
- package/src/capabilities/colophon/types.ts +29 -0
- package/src/capabilities/config/collectConfigShow.ts +32 -0
- package/src/capabilities/config/field.render.ts +28 -0
- package/src/capabilities/config/field.test.ts +188 -0
- package/src/capabilities/config/fields.ts +152 -0
- package/src/capabilities/config/index.ts +6 -0
- package/src/capabilities/config/runField.ts +59 -0
- package/src/capabilities/config/runSet.ts +38 -0
- package/src/capabilities/config/set.test.ts +207 -0
- package/src/capabilities/config/set.verb.ts +70 -0
- package/src/capabilities/config/show.render.ts +61 -0
- package/src/capabilities/config/show.verb.ts +45 -0
- package/src/capabilities/config/types.ts +27 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +88 -0
- package/src/capabilities/create/byteEquality.test.ts +222 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +152 -0
- package/src/capabilities/create/create.mcp.test.ts +139 -0
- package/src/capabilities/create/create.render.ts +50 -0
- package/src/capabilities/create/create.test.ts +403 -0
- package/src/capabilities/create/create.verb.ts +435 -0
- package/src/capabilities/create/cwdJail.test.ts +129 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +111 -0
- package/src/capabilities/create/index.ts +25 -0
- package/src/capabilities/create/pathJail.ts +73 -0
- package/src/capabilities/create/pickGenerator.ts +63 -0
- package/src/capabilities/create/templates.embedded.generated.ts +53 -0
- package/src/capabilities/create/types.ts +8 -0
- package/src/capabilities/doctor/checks/checkConfigFile.ts +41 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +39 -0
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +108 -0
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +61 -0
- package/src/capabilities/doctor/checks/checkNodeVersion.ts +25 -0
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +73 -0
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +22 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +111 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +131 -0
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +60 -0
- package/src/capabilities/doctor/doctor.render.ts +116 -0
- package/src/capabilities/doctor/doctor.test.ts +179 -0
- package/src/capabilities/doctor/doctor.verb.ts +46 -0
- package/src/capabilities/doctor/index.ts +6 -0
- package/src/capabilities/doctor/runChecks.ts +76 -0
- package/src/capabilities/doctor/types.ts +41 -0
- package/src/capabilities/emptyRecovery.test.ts +112 -0
- package/src/capabilities/graph/index.ts +21 -0
- package/src/capabilities/graph/inspect.render.ts +38 -0
- package/src/capabilities/graph/inspect.test.ts +80 -0
- package/src/capabilities/graph/inspect.verb.ts +51 -0
- package/src/capabilities/graph/query.render.ts +77 -0
- package/src/capabilities/graph/query.test.ts +156 -0
- package/src/capabilities/graph/query.verb.ts +58 -0
- package/src/capabilities/graph/runQuery.ts +49 -0
- package/src/capabilities/index.ts +54 -0
- package/src/capabilities/info/collectInfo.ts +76 -0
- package/src/capabilities/info/index.ts +6 -0
- package/src/capabilities/info/info.render.ts +72 -0
- package/src/capabilities/info/info.test.ts +127 -0
- package/src/capabilities/info/info.verb.ts +46 -0
- package/src/capabilities/info/types.ts +42 -0
- package/src/capabilities/lazy.test.ts +89 -0
- package/src/capabilities/meta/complete.verb.ts +52 -0
- package/src/capabilities/meta/index.ts +15 -0
- package/src/capabilities/meta/mcp.verb.ts +35 -0
- package/src/capabilities/modifier/index.ts +15 -0
- package/src/capabilities/modifier/pack.ts +64 -0
- package/src/capabilities/ontology/index.ts +12 -0
- package/src/capabilities/ontology/ontology.test.ts +94 -0
- package/src/capabilities/ontology/queries.ts +197 -0
- package/src/capabilities/ontology/render.ts +87 -0
- package/src/capabilities/ontology/verbs.ts +170 -0
- package/src/capabilities/prompt/index.ts +18 -0
- package/src/capabilities/prompt/prompt.render.ts +70 -0
- package/src/capabilities/prompt/prompt.test.ts +119 -0
- package/src/capabilities/prompt/types.ts +30 -0
- package/src/capabilities/prompt/verbs.ts +93 -0
- package/src/capabilities/resources/index.ts +15 -0
- package/src/capabilities/resources/provider.ts +231 -0
- package/src/capabilities/resources/resources.test.ts +114 -0
- package/src/capabilities/roundtrip.test.ts +107 -0
- package/src/capabilities/setup/index.ts +6 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +108 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +307 -0
- package/src/capabilities/setup/operations/setupLsp.ts +61 -0
- package/src/capabilities/setup/operations/setupMcp.ts +85 -0
- package/src/capabilities/setup/operations/setupSkills.ts +199 -0
- package/src/capabilities/setup/setup.render.ts +49 -0
- package/src/capabilities/setup/setup.test.ts +351 -0
- package/src/capabilities/setup/setup.verb.ts +209 -0
- package/src/capabilities/setup/shell.ts +85 -0
- package/src/capabilities/setup/types.ts +42 -0
- package/src/capabilities/shared/assertExecOk.ts +106 -0
- package/src/capabilities/shared/packageManager.ts +62 -0
- package/src/capabilities/shared/registry.ts +70 -0
- package/src/capabilities/skill/discover.ts +178 -0
- package/src/capabilities/skill/index.ts +12 -0
- package/src/capabilities/skill/render.ts +60 -0
- package/src/capabilities/skill/skill.test.ts +142 -0
- package/src/capabilities/skill/verbs.ts +100 -0
- package/src/capabilities/sources/collectStatus.ts +87 -0
- package/src/capabilities/sources/index.ts +15 -0
- package/src/capabilities/sources/installSkills.ts +124 -0
- package/src/capabilities/sources/runUpdate.ts +407 -0
- package/src/capabilities/sources/sources.test.ts +642 -0
- package/src/capabilities/sources/status.render.ts +56 -0
- package/src/capabilities/sources/status.verb.ts +42 -0
- package/src/capabilities/sources/types.ts +51 -0
- package/src/capabilities/sources/update.render.ts +35 -0
- package/src/capabilities/sources/update.verb.ts +76 -0
- package/src/capabilities/standard/index.ts +18 -0
- package/src/capabilities/standard/pack.ts +128 -0
- package/src/capabilities/standard/parity.test.ts +208 -0
- package/src/capabilities/surface.test.ts +208 -0
- package/src/capabilities/tier/index.ts +19 -0
- package/src/capabilities/tier/lookup.render.ts +34 -0
- package/src/capabilities/tier/lookup.test.ts +68 -0
- package/src/capabilities/tier/lookup.verb.ts +44 -0
- package/src/capabilities/tier/pack.ts +28 -0
- package/src/capabilities/tier/runLookup.ts +59 -0
- package/src/capabilities/token/addConfig.render.ts +27 -0
- package/src/capabilities/token/addConfig.test.ts +62 -0
- package/src/capabilities/token/addConfig.verb.ts +40 -0
- package/src/capabilities/token/index.ts +19 -0
- package/src/capabilities/token/pack.ts +58 -0
- package/src/capabilities/token/runAddConfig.ts +95 -0
- package/src/capabilities/upgrade/index.ts +6 -0
- package/src/capabilities/upgrade/runUpgrade.ts +119 -0
- package/src/capabilities/upgrade/types.ts +21 -0
- package/src/capabilities/upgrade/upgrade.render.ts +55 -0
- package/src/capabilities/upgrade/upgrade.test.ts +372 -0
- package/src/capabilities/upgrade/upgrade.verb.ts +56 -0
- package/src/constants.test.ts +33 -0
- package/src/constants.ts +38 -70
- package/src/index.ts +27 -122
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +340 -0
- package/src/kernel/completion/bashDrive.test.ts +73 -0
- package/src/kernel/completion/complete.test.ts +101 -0
- package/src/kernel/completion/complete.ts +77 -0
- package/src/kernel/completion/emitScripts.test.ts +173 -0
- package/src/kernel/completion/emitScripts.ts +122 -0
- package/src/kernel/completion/entitySource.test.ts +198 -0
- package/src/kernel/completion/entitySource.ts +269 -0
- package/src/kernel/completion/index.ts +42 -0
- package/src/kernel/completion/model.test.ts +405 -0
- package/src/kernel/completion/model.ts +259 -0
- package/src/kernel/completion/parse.test.ts +338 -0
- package/src/kernel/completion/parse.ts +294 -0
- package/src/kernel/completion/rank.test.ts +100 -0
- package/src/kernel/completion/rank.ts +118 -0
- package/src/kernel/completion/resolve.test.ts +204 -0
- package/src/kernel/completion/resolve.ts +133 -0
- package/src/kernel/completion/safety.test.ts +374 -0
- package/src/kernel/completion/templates/bash.ts +249 -0
- package/src/kernel/completion/templates/fish.ts +245 -0
- package/src/kernel/completion/templates/shared.ts +134 -0
- package/src/kernel/completion/templates/zsh.ts +246 -0
- package/src/kernel/completion/types.ts +153 -0
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +11 -0
- package/src/kernel/config/defaults.ts +28 -0
- package/src/kernel/config/evaluateProjectConfig.ts +119 -0
- package/src/kernel/config/findProjectConfig.ts +45 -0
- package/src/kernel/config/firstRun.test.ts +60 -0
- package/src/kernel/config/firstRun.ts +91 -0
- package/src/kernel/config/globalConfig.ts +94 -0
- package/src/kernel/config/index.ts +35 -0
- package/src/kernel/config/paths.ts +39 -0
- package/src/kernel/config/readConfig.test.ts +245 -0
- package/src/kernel/config/readConfig.ts +94 -0
- package/src/kernel/config/schema.ts +56 -0
- package/src/kernel/config/types.ts +106 -0
- package/src/kernel/config/writeConfigField.ts +82 -0
- package/src/kernel/error/PragmaError.test.ts +119 -0
- package/src/kernel/error/PragmaError.ts +182 -0
- package/src/kernel/error/constants.ts +38 -0
- package/src/kernel/error/fromTaskError.test.ts +83 -0
- package/src/kernel/error/fromTaskError.ts +80 -0
- package/src/kernel/error/index.ts +23 -0
- package/src/kernel/error/recovery.test.ts +60 -0
- package/src/kernel/error/recovery.ts +49 -0
- package/src/kernel/error/renderError.ts +101 -0
- package/src/kernel/error/serialize.ts +28 -0
- package/src/kernel/error/types.ts +62 -0
- package/src/kernel/packs/collect.test.ts +138 -0
- package/src/kernel/packs/collect.ts +108 -0
- package/src/kernel/packs/compile.test.ts +229 -0
- package/src/kernel/packs/compile.ts +315 -0
- package/src/kernel/packs/disclosure.test.ts +200 -0
- package/src/kernel/packs/disclosure.ts +98 -0
- package/src/kernel/packs/glob.ts +39 -0
- package/src/kernel/packs/graphql/buildLookupDocument.ts +397 -0
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +217 -0
- package/src/kernel/packs/graphql/nameMap.ts +67 -0
- package/src/kernel/packs/graphqlSource.test.ts +383 -0
- package/src/kernel/packs/iri.ts +78 -0
- package/src/kernel/packs/renderPack.ts +196 -0
- package/src/kernel/packs/resolveEntity.ts +232 -0
- package/src/kernel/packs/runBodies.ts +157 -0
- package/src/kernel/packs/sample.ts +60 -0
- package/src/kernel/packs/schema.ts +328 -0
- package/src/kernel/packs/sparql/applyFilters.ts +83 -0
- package/src/kernel/packs/sparql/applySearch.ts +33 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +180 -0
- package/src/kernel/packs/sparql/escape.ts +22 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +80 -0
- package/src/kernel/packs/sparql/runSelect.ts +84 -0
- package/src/kernel/packs/toolDescription.test.ts +81 -0
- package/src/kernel/packs/types.ts +337 -0
- package/src/kernel/packs/uniqueness.ts +35 -0
- package/src/kernel/project/cli/buildProgram.test.ts +387 -0
- package/src/kernel/project/cli/buildProgram.ts +280 -0
- package/src/kernel/project/cli/dispatch.test.ts +288 -0
- package/src/kernel/project/cli/dispatch.ts +334 -0
- package/src/kernel/project/cli/exitCodes.test.ts +59 -0
- package/src/kernel/project/cli/exitCodes.ts +68 -0
- package/src/kernel/project/cli/globalFlags.test.ts +99 -0
- package/src/kernel/project/cli/globalFlags.ts +149 -0
- package/src/kernel/project/cli/helpFormat.ts +58 -0
- package/src/kernel/project/cli/index.ts +21 -0
- package/src/kernel/project/cli/interactionSeam.test.ts +99 -0
- package/src/kernel/project/cli/rootHelp.ts +218 -0
- package/src/kernel/project/cli/suggest.test.ts +54 -0
- package/src/kernel/project/cli/suggest.ts +67 -0
- package/src/kernel/project/cli/suggestNames.ts +122 -0
- package/src/kernel/project/cli/verbHelp.test.ts +138 -0
- package/src/kernel/project/cli/verbHelp.ts +144 -0
- package/src/kernel/project/mcp/buildServer.ts +70 -0
- package/src/kernel/project/mcp/envelope.ts +44 -0
- package/src/kernel/project/mcp/index.ts +8 -0
- package/src/kernel/project/mcp/instructions.ts +48 -0
- package/src/kernel/project/mcp/parity.test.ts +72 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +96 -0
- package/src/kernel/project/mcp/prompts/provider.ts +74 -0
- package/src/kernel/project/mcp/prompts/source.ts +194 -0
- package/src/kernel/project/mcp/registerVerb.test.ts +238 -0
- package/src/kernel/project/mcp/registerVerb.ts +296 -0
- package/src/kernel/project/mcp/serve.ts +34 -0
- package/src/kernel/project/mcp/toolDescriptions.test.ts +80 -0
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +127 -0
- package/src/kernel/render/compactUri.ts +25 -0
- package/src/kernel/render/contracts.ts +72 -0
- package/src/kernel/render/disclosure.ts +44 -0
- package/src/kernel/render/envelope.ts +50 -0
- package/src/kernel/render/formatters.ts +30 -0
- package/src/kernel/render/index.ts +30 -0
- package/src/kernel/render/prefixes.ts +21 -0
- package/src/kernel/render/renderers.test.ts +171 -0
- package/src/kernel/render/renderers.ts +429 -0
- package/src/kernel/render/writeStdout.test.ts +43 -0
- package/src/kernel/render/writeStdout.ts +49 -0
- package/src/kernel/runtime/boot.test.ts +69 -0
- package/src/kernel/runtime/boot.ts +59 -0
- package/src/kernel/runtime/facade.test.ts +125 -0
- package/src/kernel/runtime/facade.ts +47 -0
- package/src/kernel/runtime/graphpack/build.ts +148 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +229 -0
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +8 -0
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +4 -0
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +39 -0
- package/src/kernel/runtime/graphpack/embedded.ts +70 -0
- package/src/kernel/runtime/graphpack/graphpack.test.ts +153 -0
- package/src/kernel/runtime/graphpack/hash.ts +46 -0
- package/src/kernel/runtime/graphpack/index.ts +21 -0
- package/src/kernel/runtime/graphpack/manifest.ts +55 -0
- package/src/kernel/runtime/graphpack/read.ts +102 -0
- package/src/kernel/runtime/graphpack/types.ts +111 -0
- package/src/kernel/runtime/index.ts +15 -0
- package/src/kernel/runtime/loadSession.ts +56 -0
- package/src/kernel/runtime/lock.ts +90 -0
- package/src/kernel/runtime/paths.ts +37 -0
- package/src/kernel/runtime/probe.test.ts +16 -0
- package/src/kernel/runtime/probe.ts +39 -0
- package/src/kernel/runtime/readEntity.ts +83 -0
- package/src/kernel/runtime/refs/gitOps.ts +88 -0
- package/src/kernel/runtime/refs/parseRef.test.ts +34 -0
- package/src/kernel/runtime/refs/parseRef.ts +103 -0
- package/src/kernel/runtime/refs/resolve.ts +320 -0
- package/src/kernel/runtime/resolveSources.test.ts +154 -0
- package/src/kernel/runtime/resolveSources.ts +66 -0
- package/src/kernel/runtime/store.test.ts +94 -0
- package/src/kernel/runtime/store.ts +90 -0
- package/src/kernel/runtime/storeless.test.ts +86 -0
- package/src/kernel/runtime/types.ts +210 -0
- package/src/kernel/runtime/wasmEmbed.test.ts +142 -0
- package/src/kernel/spec/asVerb.ts +23 -0
- package/src/kernel/spec/emitSurface.test.ts +65 -0
- package/src/kernel/spec/emitSurface.ts +223 -0
- package/src/kernel/spec/index.ts +34 -0
- package/src/kernel/spec/surfaceConformance.test.ts +94 -0
- package/src/kernel/spec/surfaceConformance.ts +135 -0
- package/src/kernel/spec/types.ts +233 -0
- package/src/kernel/spec/validate.test.ts +81 -0
- package/src/kernel/spec/validate.ts +125 -0
- package/src/testing/PARITY_GAPS.test.ts +32 -0
- package/src/testing/PARITY_GAPS.ts +179 -0
- package/src/testing/behavioral/README.md +164 -0
- package/src/testing/behavioral/agentSession.mcp.test.ts +160 -0
- package/src/testing/behavioral/autoLlm.e2e.test.ts +44 -0
- package/src/testing/behavioral/completion.test.ts +132 -0
- package/src/testing/behavioral/disclosure.test.ts +103 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +120 -0
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +123 -0
- package/src/testing/behavioral/exitCodes.e2e.test.ts +53 -0
- package/src/testing/behavioral/firstRun.e2e.test.ts +40 -0
- package/src/testing/behavioral/harness.foundation.test.ts +136 -0
- package/src/testing/behavioral/journeys.cli.test.ts +129 -0
- package/src/testing/behavioral/liveReadSurface.ts +80 -0
- package/src/testing/behavioral/mcpServe.e2e.test.ts +21 -0
- package/src/testing/behavioral/mcpSurface.test.ts +139 -0
- package/src/testing/behavioral/parity.test.ts +224 -0
- package/src/testing/behavioral/rootCli.e2e.test.ts +62 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +201 -0
- package/src/testing/eval/cases/assembly.ts +195 -0
- package/src/testing/eval/cases/effectful.ts +245 -0
- package/src/testing/eval/cases/readNouns.ts +232 -0
- package/src/testing/eval/cases/stable.ts +163 -0
- package/src/testing/eval/eval.test.ts +74 -0
- package/src/testing/eval/harness.ts +91 -0
- package/src/testing/eval/report.ts +58 -0
- package/src/testing/fixtures/blockGraph.ts +112 -0
- package/src/testing/fixtures/completionFixture.ts +239 -0
- package/src/testing/fixtures/fixtureCapability.ts +175 -0
- package/src/testing/fixtures/graph/canonical.ts +184 -0
- package/src/testing/fixtures/packs/recipe.ts +78 -0
- package/src/testing/helpers/fixtureGraph.ts +148 -0
- package/src/testing/helpers/golden.ts +45 -0
- package/src/testing/helpers/packRuntime.ts +118 -0
- package/src/testing/helpers/parity.ts +86 -0
- package/src/testing/helpers/projectCli.ts +35 -0
- package/src/testing/helpers/projectMcp.ts +145 -0
- package/src/testing/helpers/runCli.ts +128 -0
- package/src/testing/perf/budgets.test.ts +164 -0
- package/src/testing/perf/budgets.ts +37 -0
- package/src/testing/perf/globalSetup.ts +30 -0
- package/src/testing/perf/measure.ts +97 -0
- package/src/testing/setupXdgIsolation.ts +13 -12
- package/src/types.ts +42 -0
- package/README.md +0 -458
- 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,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synthesize `setup` (and each sub-verb) as a summon `GeneratorDefinition`, so
|
|
3
|
+
* they all flow through the SAME `execute` seam `create` uses — inheriting the
|
|
4
|
+
* Ink wizard, the recap/confirm gate, live progress, colours, and the shared
|
|
5
|
+
* cancel fixes (H1/H2/H3/M1) by construction. Replaces the old readline
|
|
6
|
+
* `promptStrategy` + `setupAll`.
|
|
7
|
+
*
|
|
8
|
+
* The shape mirrors `create`: detection runs FOR REAL up front (in each
|
|
9
|
+
* `detectX`), then a PURE `generate` composes only the effects for the SELECTED
|
|
10
|
+
* steps. `generate` must stay side-effect-free — `execute` and the wizard invoke
|
|
11
|
+
* it more than once (the confirm-gate preview + the build), so all real reads
|
|
12
|
+
* belong in detection, never in `generate`.
|
|
13
|
+
*
|
|
14
|
+
* This module carries NO static import of `@canonical/summon-core` VALUES or of
|
|
15
|
+
* React/Ink — it only `import type`s the generator shape and builds plain object
|
|
16
|
+
* literals over `@canonical/task`. It is itself reached only through the verb's
|
|
17
|
+
* lazy dynamic import, so the fast paths stay free of it.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import type {
|
|
21
|
+
GeneratorDefinition,
|
|
22
|
+
PromptDefinition,
|
|
23
|
+
} from "@canonical/summon-core";
|
|
24
|
+
import { sequence_, type Task, when } from "@canonical/task";
|
|
25
|
+
import type { PragmaRuntime } from "../../../kernel/runtime/types.js";
|
|
26
|
+
import { guardMissingBinary } from "../../shared/assertExecOk.js";
|
|
27
|
+
import type { SetupMode, SetupResult } from "../types.js";
|
|
28
|
+
import {
|
|
29
|
+
type CompletionsDetection,
|
|
30
|
+
composeCompletions,
|
|
31
|
+
detectCompletions,
|
|
32
|
+
} from "./setupCompletions.js";
|
|
33
|
+
import { composeLsp } from "./setupLsp.js";
|
|
34
|
+
import {
|
|
35
|
+
composeMcp,
|
|
36
|
+
detectMcp,
|
|
37
|
+
type McpDetection,
|
|
38
|
+
mcpConfigured,
|
|
39
|
+
} from "./setupMcp.js";
|
|
40
|
+
import {
|
|
41
|
+
composeSkills,
|
|
42
|
+
detectSkills,
|
|
43
|
+
type SkillsDetection,
|
|
44
|
+
skillsEmptyError,
|
|
45
|
+
toSkillsResult,
|
|
46
|
+
} from "./setupSkills.js";
|
|
47
|
+
|
|
48
|
+
/** The run-all steps, in composition (and display) order. */
|
|
49
|
+
type StepId = "completions" | "lsp" | "mcp" | "skills";
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* A ready-to-run setup plan: the synthesized generator (fed to `inkPrompt` /
|
|
53
|
+
* `execute`) plus a mapper from the completed answers back onto setup's tagged
|
|
54
|
+
* {@link SetupResult} output union (its `--format json` shape is frozen).
|
|
55
|
+
*/
|
|
56
|
+
export interface SetupPlan {
|
|
57
|
+
readonly generator: GeneratorDefinition;
|
|
58
|
+
readonly toResult: (answers: Record<string, unknown>) => SetupResult;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** The union of every step's detection, gathered up front for the run-all. */
|
|
62
|
+
interface SetupDetection {
|
|
63
|
+
readonly completions: CompletionsDetection;
|
|
64
|
+
readonly mcp: McpDetection;
|
|
65
|
+
readonly skills: SkillsDetection;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Read `answers.steps` (the run-all multiselect) as a string array. */
|
|
69
|
+
const stepsOf = (answers: Record<string, unknown>): string[] =>
|
|
70
|
+
Array.isArray(answers.steps) ? (answers.steps as string[]) : [];
|
|
71
|
+
|
|
72
|
+
/** Read `answers.mcpHarnesses`, falling back to ALL detected ids. */
|
|
73
|
+
const mcpSelection = (
|
|
74
|
+
d: McpDetection,
|
|
75
|
+
answers: Record<string, unknown>,
|
|
76
|
+
): string[] =>
|
|
77
|
+
Array.isArray(answers.mcpHarnesses)
|
|
78
|
+
? (answers.mcpHarnesses as string[])
|
|
79
|
+
: d.harnesses.map((h) => h.harness.id);
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* The LSP-install step, guarded at its use site. An absent `bunx` (no Bun on
|
|
83
|
+
* PATH) REJECTS the exec with ENOENT, which would otherwise collapse to
|
|
84
|
+
* INTERNAL_ERROR ("please report this issue") at the CLI/MCP boundary;
|
|
85
|
+
* `guardMissingBinary` names it a UNSUPPORTED "`bunx` not found on PATH" with an
|
|
86
|
+
* actionable install recovery instead. Preview-transparent — a dry-run mocks the
|
|
87
|
+
* exec (no spawn) — and re-runnable (the guard is a `recover`, and `composeLsp`
|
|
88
|
+
* is combinator-built), so it survives `execute`'s double interpretation.
|
|
89
|
+
*/
|
|
90
|
+
const composeGuardedLsp = (rt: PragmaRuntime): Task<void> =>
|
|
91
|
+
guardMissingBinary(
|
|
92
|
+
"bunx",
|
|
93
|
+
{
|
|
94
|
+
message:
|
|
95
|
+
"Install Bun (https://bun.sh) to provide `bunx`, then run this again.",
|
|
96
|
+
},
|
|
97
|
+
composeLsp(rt.cwd),
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
/** Build a generator's `meta` (no stamping — the version is just header text). */
|
|
101
|
+
const metaFor = (
|
|
102
|
+
rt: PragmaRuntime,
|
|
103
|
+
title: string,
|
|
104
|
+
): GeneratorDefinition["meta"] => ({
|
|
105
|
+
name: title,
|
|
106
|
+
displayName: title,
|
|
107
|
+
description: "Configure pragma for this project",
|
|
108
|
+
version: rt.version,
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
/** The MCP-harness multiselect follow-up (offered only when harnesses exist). */
|
|
112
|
+
const mcpHarnessesPrompt = (
|
|
113
|
+
d: McpDetection,
|
|
114
|
+
when?: PromptDefinition["when"],
|
|
115
|
+
): PromptDefinition => ({
|
|
116
|
+
name: "mcpHarnesses",
|
|
117
|
+
type: "multiselect",
|
|
118
|
+
message: "Configure MCP for which harnesses?",
|
|
119
|
+
when,
|
|
120
|
+
choices: d.harnesses.map((h) => ({
|
|
121
|
+
label: h.harness.name,
|
|
122
|
+
value: h.harness.id,
|
|
123
|
+
})),
|
|
124
|
+
default: d.harnesses.map((h) => h.harness.id),
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
// =============================================================================
|
|
128
|
+
// Detection
|
|
129
|
+
// =============================================================================
|
|
130
|
+
|
|
131
|
+
/** Gather EVERY step's detection up front (real reads), for the run-all. */
|
|
132
|
+
async function gatherDetection(rt: PragmaRuntime): Promise<SetupDetection> {
|
|
133
|
+
const [completions, mcp, skills] = await Promise.all([
|
|
134
|
+
detectCompletions(rt.cwd),
|
|
135
|
+
detectMcp(rt),
|
|
136
|
+
detectSkills(rt),
|
|
137
|
+
]);
|
|
138
|
+
return { completions, mcp, skills };
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* The steps worth OFFERING, given detection — undetectable steps are omitted so
|
|
143
|
+
* the run-all degrades gracefully instead of throwing a mid-wizard
|
|
144
|
+
* EMPTY_RESULTS (skills with no skills, mcp with no harnesses, completions with
|
|
145
|
+
* no shell). LSP is always offered (its install is a self-contained exec).
|
|
146
|
+
*/
|
|
147
|
+
function availableSteps(
|
|
148
|
+
detected: SetupDetection,
|
|
149
|
+
): { label: string; value: StepId }[] {
|
|
150
|
+
const choices: { label: string; value: StepId }[] = [];
|
|
151
|
+
if (detected.completions.shell) {
|
|
152
|
+
choices.push({
|
|
153
|
+
label: `Shell completions (${detected.completions.shell})`,
|
|
154
|
+
value: "completions",
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
choices.push({ label: "Terrazzo LSP extension", value: "lsp" });
|
|
158
|
+
if (detected.mcp.harnesses.length > 0) {
|
|
159
|
+
choices.push({
|
|
160
|
+
label: `MCP config (${detected.mcp.harnesses.length} harness(es))`,
|
|
161
|
+
value: "mcp",
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
if (detected.skills.available) {
|
|
165
|
+
choices.push({
|
|
166
|
+
label: `Link skills (${detected.skills.skillCount})`,
|
|
167
|
+
value: "skills",
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
return choices;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// =============================================================================
|
|
174
|
+
// Plan builders
|
|
175
|
+
// =============================================================================
|
|
176
|
+
|
|
177
|
+
/** The run-all self-verb: a step multiselect + per-step composition. */
|
|
178
|
+
function runAllPlan(rt: PragmaRuntime, detected: SetupDetection): SetupPlan {
|
|
179
|
+
const steps = availableSteps(detected);
|
|
180
|
+
const prompts: PromptDefinition[] = [
|
|
181
|
+
{
|
|
182
|
+
name: "steps",
|
|
183
|
+
type: "multiselect",
|
|
184
|
+
message: "Which steps would you like to run?",
|
|
185
|
+
choices: steps,
|
|
186
|
+
default: steps.map((c) => c.value), // --yes / non-TTY ⇒ every step
|
|
187
|
+
},
|
|
188
|
+
];
|
|
189
|
+
if (detected.mcp.harnesses.length > 0) {
|
|
190
|
+
prompts.push(
|
|
191
|
+
mcpHarnessesPrompt(
|
|
192
|
+
detected.mcp,
|
|
193
|
+
(a) => stepsOf(a).includes("mcp"), // only when mcp is chosen
|
|
194
|
+
),
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// `generate` MUST be pure and re-runnable — `execute` interprets it twice (the
|
|
199
|
+
// confirm-gate preview + the build) — so it composes with `when`/`sequence_`
|
|
200
|
+
// (immutable) rather than a single-use `gen`, and does NO detection (all real
|
|
201
|
+
// reads already happened up front). Composing an unchosen step is harmless:
|
|
202
|
+
// `when(false, …)` discards the (side-effect-free) task it was handed.
|
|
203
|
+
const generator: GeneratorDefinition = {
|
|
204
|
+
meta: metaFor(rt, "pragma setup"),
|
|
205
|
+
prompts,
|
|
206
|
+
generate: (answers) => {
|
|
207
|
+
const chosen = stepsOf(answers);
|
|
208
|
+
return sequence_([
|
|
209
|
+
when(
|
|
210
|
+
chosen.includes("completions"),
|
|
211
|
+
composeCompletions(detected.completions),
|
|
212
|
+
),
|
|
213
|
+
when(chosen.includes("lsp"), composeGuardedLsp(rt)),
|
|
214
|
+
when(
|
|
215
|
+
chosen.includes("mcp"),
|
|
216
|
+
composeMcp(detected.mcp, mcpSelection(detected.mcp, answers)),
|
|
217
|
+
),
|
|
218
|
+
when(chosen.includes("skills"), composeSkills(detected.skills)),
|
|
219
|
+
]);
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
return {
|
|
224
|
+
generator,
|
|
225
|
+
toResult: (answers) => ({ kind: "all", steps: stepsOf(answers) }),
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/** A single-step generator (no run-all multiselect) for one sub-verb. */
|
|
230
|
+
function singleStep(
|
|
231
|
+
rt: PragmaRuntime,
|
|
232
|
+
title: string,
|
|
233
|
+
prompts: PromptDefinition[],
|
|
234
|
+
generate: (answers: Record<string, unknown>) => Task<void>,
|
|
235
|
+
): GeneratorDefinition {
|
|
236
|
+
return { meta: metaFor(rt, title), prompts, generate };
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Build the plan for an entry point. Detection runs here (up front); the
|
|
241
|
+
* returned generator's `generate` is pure. The `skills` sub-verb throws
|
|
242
|
+
* EMPTY_RESULTS before returning a plan when nothing is discoverable (its direct
|
|
243
|
+
* contract), whereas the run-all simply omits an undetectable step.
|
|
244
|
+
*
|
|
245
|
+
* @param rt - The per-invocation runtime.
|
|
246
|
+
* @param mode - The entry point (`all` or one sub-verb).
|
|
247
|
+
* @returns The generator + result mapper.
|
|
248
|
+
* @throws PragmaError EMPTY_RESULTS for a direct `setup skills` with no skills.
|
|
249
|
+
* @note Impure — performs each step's real detection.
|
|
250
|
+
*/
|
|
251
|
+
export async function buildSetupPlan(
|
|
252
|
+
rt: PragmaRuntime,
|
|
253
|
+
mode: SetupMode,
|
|
254
|
+
): Promise<SetupPlan> {
|
|
255
|
+
switch (mode) {
|
|
256
|
+
case "all":
|
|
257
|
+
return runAllPlan(rt, await gatherDetection(rt));
|
|
258
|
+
|
|
259
|
+
case "completions": {
|
|
260
|
+
const d = await detectCompletions(rt.cwd);
|
|
261
|
+
return {
|
|
262
|
+
generator: singleStep(rt, "pragma setup completions", [], () =>
|
|
263
|
+
composeCompletions(d),
|
|
264
|
+
),
|
|
265
|
+
toResult: () => ({
|
|
266
|
+
kind: "completions",
|
|
267
|
+
shell: d.shell,
|
|
268
|
+
path: d.path,
|
|
269
|
+
installed: d.shell !== null,
|
|
270
|
+
}),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
case "lsp":
|
|
275
|
+
return {
|
|
276
|
+
generator: singleStep(rt, "pragma setup lsp", [], () =>
|
|
277
|
+
composeGuardedLsp(rt),
|
|
278
|
+
),
|
|
279
|
+
toResult: () => ({ kind: "lsp" }),
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
case "mcp": {
|
|
283
|
+
const d = await detectMcp(rt);
|
|
284
|
+
const prompts = d.harnesses.length > 0 ? [mcpHarnessesPrompt(d)] : [];
|
|
285
|
+
return {
|
|
286
|
+
generator: singleStep(rt, "pragma setup mcp", prompts, (answers) =>
|
|
287
|
+
composeMcp(d, mcpSelection(d, answers)),
|
|
288
|
+
),
|
|
289
|
+
toResult: (answers) => ({
|
|
290
|
+
kind: "mcp",
|
|
291
|
+
configured: mcpConfigured(d, mcpSelection(d, answers)),
|
|
292
|
+
}),
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
case "skills": {
|
|
297
|
+
const d = await detectSkills(rt);
|
|
298
|
+
if (!d.available) throw skillsEmptyError();
|
|
299
|
+
return {
|
|
300
|
+
generator: singleStep(rt, "pragma setup skills", [], () =>
|
|
301
|
+
composeSkills(d),
|
|
302
|
+
),
|
|
303
|
+
toResult: () => ({ kind: "skills", result: toSkillsResult(d) }),
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `setup lsp` — ensure the Terrazzo LSP VS Code extension is installed.
|
|
3
|
+
*
|
|
4
|
+
* There is nothing to detect (the installer is a single idempotent `exec`), so
|
|
5
|
+
* `detectLsp` is a trivial marker and `composeLsp` holds the sole mutation —
|
|
6
|
+
* mocked under `--dry-run`, run for real otherwise. A successful run reports it
|
|
7
|
+
* installed (up to date), not a fresh install.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
type ExecResult,
|
|
12
|
+
exec,
|
|
13
|
+
flatMap,
|
|
14
|
+
info,
|
|
15
|
+
pure,
|
|
16
|
+
sequence_,
|
|
17
|
+
type Task,
|
|
18
|
+
} from "@canonical/task";
|
|
19
|
+
import { assertExecOk } from "../../shared/assertExecOk.js";
|
|
20
|
+
|
|
21
|
+
/** LSP has no real detection — the install is one idempotent subprocess. */
|
|
22
|
+
export interface LspDetection {
|
|
23
|
+
readonly available: true;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* "Detect" the LSP step. Always available — kept for symmetry with the other
|
|
28
|
+
* steps' detect phase (so the run-all can gather every step uniformly).
|
|
29
|
+
*/
|
|
30
|
+
export function detectLsp(): LspDetection {
|
|
31
|
+
return { available: true };
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Compose the LSP-install exec.
|
|
36
|
+
*
|
|
37
|
+
* Built from re-runnable combinators (NOT a single-use `gen`) because `execute`
|
|
38
|
+
* interprets the task twice (preview + perform). Under the dry-run preview the
|
|
39
|
+
* `exec` is MOCKED to `exitCode 0`, so `assertExecOk` passes there; a real run's
|
|
40
|
+
* nonzero exit still fails loudly.
|
|
41
|
+
*
|
|
42
|
+
* @param cwd - The directory to run the installer in.
|
|
43
|
+
* @returns A Task that execs the extension installer, failing loudly on nonzero.
|
|
44
|
+
*/
|
|
45
|
+
export function composeLsp(cwd: string): Task<void> {
|
|
46
|
+
return sequence_([
|
|
47
|
+
info("Ensuring the Terrazzo LSP VS Code extension is installed..."),
|
|
48
|
+
// The interpreter RESOLVES on a nonzero exit — a failed installer must fail
|
|
49
|
+
// loudly (surfacing its stderr), not report a false success.
|
|
50
|
+
flatMap(
|
|
51
|
+
exec("bunx", ["@canonical/terrazzo-lsp-extension"], cwd),
|
|
52
|
+
(result) => {
|
|
53
|
+
assertExecOk(
|
|
54
|
+
"bunx @canonical/terrazzo-lsp-extension",
|
|
55
|
+
result as ExecResult,
|
|
56
|
+
);
|
|
57
|
+
return pure(undefined);
|
|
58
|
+
},
|
|
59
|
+
),
|
|
60
|
+
]);
|
|
61
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `setup mcp` — register the pragma MCP server in detected AI harnesses.
|
|
3
|
+
*
|
|
4
|
+
* Split into `detectMcp` (harness detection runs FOR REAL up front, via
|
|
5
|
+
* `runTask` over safe reads, so the wizard recap and a `--dry-run` describe
|
|
6
|
+
* writes against the TRUE harness set) and `composeMcp` (a pure, re-runnable
|
|
7
|
+
* write body driven by the harnesses the user SELECTED — the per-harness confirm
|
|
8
|
+
* is gone; selection now comes from the wizard's multiselect). The covenant
|
|
9
|
+
* sub-verb carries no force-flags, so harness selection is detection-only.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { DetectedHarness } from "@canonical/harnesses";
|
|
13
|
+
import { info, sequence_, type Task, warn } from "@canonical/task";
|
|
14
|
+
import { MCP_SERVER_NAME } from "../../../constants.js";
|
|
15
|
+
import type { PragmaRuntime } from "../../../kernel/runtime/types.js";
|
|
16
|
+
|
|
17
|
+
/** The `writeMcpConfig` Task-builder, captured from the dynamic harness import. */
|
|
18
|
+
type WriteMcpConfig = typeof import("@canonical/harnesses").writeMcpConfig;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The detected MCP state: the harnesses found, the project root the config is
|
|
22
|
+
* written against, and the (dynamically imported) config-writer the pure
|
|
23
|
+
* `composeMcp` needs synchronously.
|
|
24
|
+
*/
|
|
25
|
+
export interface McpDetection {
|
|
26
|
+
readonly harnesses: readonly DetectedHarness[];
|
|
27
|
+
readonly cwd: string;
|
|
28
|
+
readonly writeMcpConfig: WriteMcpConfig;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Detect the AI harnesses present in the project (real reads, up front).
|
|
33
|
+
*
|
|
34
|
+
* @param rt - The per-invocation runtime.
|
|
35
|
+
* @returns The detected harnesses + the writer used to compose config writes.
|
|
36
|
+
* @note Impure — reads the filesystem via `detectHarnesses`.
|
|
37
|
+
*/
|
|
38
|
+
export async function detectMcp(rt: PragmaRuntime): Promise<McpDetection> {
|
|
39
|
+
const cwd = rt.cwd;
|
|
40
|
+
const [{ detectHarnesses, writeMcpConfig }, { runTask }] = await Promise.all([
|
|
41
|
+
import("@canonical/harnesses"),
|
|
42
|
+
import("@canonical/task/node"),
|
|
43
|
+
]);
|
|
44
|
+
const harnesses = await runTask(detectHarnesses(cwd));
|
|
45
|
+
return { harnesses, cwd, writeMcpConfig };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Compose the per-harness config writes for the SELECTED harnesses (pure —
|
|
50
|
+
* re-runnable; builds ABSOLUTE config paths itself).
|
|
51
|
+
*
|
|
52
|
+
* @param d - The detection gathered up front.
|
|
53
|
+
* @param selectedIds - Harness ids the user chose (a subset of `d.harnesses`).
|
|
54
|
+
* @returns A Task that writes the pragma MCP config into each chosen harness.
|
|
55
|
+
*/
|
|
56
|
+
export function composeMcp(
|
|
57
|
+
d: McpDetection,
|
|
58
|
+
selectedIds: readonly string[],
|
|
59
|
+
): Task<void> {
|
|
60
|
+
const chosen = d.harnesses.filter((h) => selectedIds.includes(h.harness.id));
|
|
61
|
+
if (chosen.length === 0) {
|
|
62
|
+
return warn("No AI harnesses selected — nothing to configure.");
|
|
63
|
+
}
|
|
64
|
+
const pragmaMcpConfig = { command: "pragma", args: ["mcp"], cwd: d.cwd };
|
|
65
|
+
// Re-runnable combinators (NOT a single-use `gen`): `execute` interprets the
|
|
66
|
+
// task twice (preview + perform).
|
|
67
|
+
const tasks: Task<unknown>[] = [];
|
|
68
|
+
for (const h of chosen) {
|
|
69
|
+
tasks.push(
|
|
70
|
+
d.writeMcpConfig(h.harness, d.cwd, MCP_SERVER_NAME, pragmaMcpConfig),
|
|
71
|
+
);
|
|
72
|
+
tasks.push(info(`✓ pragma MCP server added to ${h.configPath}`));
|
|
73
|
+
}
|
|
74
|
+
return sequence_(tasks);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** The harness names configured for a given selection (for the result shape). */
|
|
78
|
+
export function mcpConfigured(
|
|
79
|
+
d: McpDetection,
|
|
80
|
+
selectedIds: readonly string[],
|
|
81
|
+
): string[] {
|
|
82
|
+
return d.harnesses
|
|
83
|
+
.filter((h) => selectedIds.includes(h.harness.id))
|
|
84
|
+
.map((h) => h.harness.name);
|
|
85
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `setup skills` — symlink discovered skills into each harness skill directory
|
|
3
|
+
* and the cross-client `.agents/skills`.
|
|
4
|
+
*
|
|
5
|
+
* Split into `detectSkills` (skill discovery, harness detection, and the
|
|
6
|
+
* per-link create/skip/replace DECISION all run against REAL fs up front, so the
|
|
7
|
+
* wizard recap and a `--dry-run` plan reflect true state) and `composeSkills` (a
|
|
8
|
+
* pure, re-runnable body performing only the symlink/delete effects the dry-run
|
|
9
|
+
* interpreter mocks). Idempotent by construction.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { existsSync, readlinkSync } from "node:fs";
|
|
13
|
+
import { resolve } from "node:path";
|
|
14
|
+
import {
|
|
15
|
+
deleteFile,
|
|
16
|
+
info,
|
|
17
|
+
mkdir,
|
|
18
|
+
sequence_,
|
|
19
|
+
symlink,
|
|
20
|
+
type Task,
|
|
21
|
+
} from "@canonical/task";
|
|
22
|
+
import { RECOVERY_CLI_PREFIX } from "../../../constants.js";
|
|
23
|
+
import { PragmaError } from "../../../kernel/error/PragmaError.js";
|
|
24
|
+
import { cliRecovery } from "../../../kernel/error/recovery.js";
|
|
25
|
+
import type { PragmaRuntime } from "../../../kernel/runtime/types.js";
|
|
26
|
+
import type { SetupSkillsResult, SymlinkAction } from "../types.js";
|
|
27
|
+
|
|
28
|
+
/** Cross-client skill directory, shared across all harnesses. */
|
|
29
|
+
const CROSS_CLIENT_DIR = ".agents/skills";
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The detected skill-linking plan: the target directories, the decided per-link
|
|
33
|
+
* actions, and the counts/warnings the result surface reports. `available` is
|
|
34
|
+
* false when no skills were discovered.
|
|
35
|
+
*/
|
|
36
|
+
export interface SkillsDetection {
|
|
37
|
+
readonly available: boolean;
|
|
38
|
+
readonly targets: readonly { readonly dir: string; readonly name: string }[];
|
|
39
|
+
readonly actions: readonly SymlinkAction[];
|
|
40
|
+
readonly skillCount: number;
|
|
41
|
+
readonly harnessCount: number;
|
|
42
|
+
readonly warnings: readonly string[];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** The current target of a symlink, or `null` when absent / not a symlink. */
|
|
46
|
+
function currentLink(linkPath: string): string | null {
|
|
47
|
+
if (!existsSync(linkPath)) return null;
|
|
48
|
+
try {
|
|
49
|
+
return readlinkSync(linkPath);
|
|
50
|
+
} catch {
|
|
51
|
+
return "";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Discover skills, detect harnesses, and decide each link action (real fs, up
|
|
57
|
+
* front). Returns `available: false` (empty plan) when no skills exist — the
|
|
58
|
+
* run-all omits the step; the direct sub-verb turns it into {@link skillsEmptyError}.
|
|
59
|
+
*
|
|
60
|
+
* @param rt - The per-invocation runtime.
|
|
61
|
+
* @returns The link plan.
|
|
62
|
+
* @note Impure — reads the filesystem (skills + harnesses + existing links).
|
|
63
|
+
*/
|
|
64
|
+
export async function detectSkills(
|
|
65
|
+
rt: PragmaRuntime,
|
|
66
|
+
): Promise<SkillsDetection> {
|
|
67
|
+
const cwd = rt.cwd;
|
|
68
|
+
const [{ discoverSkills }, { detectHarnesses }, { runTask }] =
|
|
69
|
+
await Promise.all([
|
|
70
|
+
import("../../skill/discover.js"),
|
|
71
|
+
import("@canonical/harnesses"),
|
|
72
|
+
import("@canonical/task/node"),
|
|
73
|
+
]);
|
|
74
|
+
|
|
75
|
+
const skills = discoverSkills(cwd);
|
|
76
|
+
if (skills.length === 0) {
|
|
77
|
+
return {
|
|
78
|
+
available: false,
|
|
79
|
+
targets: [],
|
|
80
|
+
actions: [],
|
|
81
|
+
skillCount: 0,
|
|
82
|
+
harnessCount: 0,
|
|
83
|
+
warnings: [],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const detected = await runTask(detectHarnesses(cwd));
|
|
88
|
+
|
|
89
|
+
// Target dirs (harness skill dirs + the cross-client dir), first-seen wins.
|
|
90
|
+
const seen = new Set<string>();
|
|
91
|
+
const targets: { dir: string; name: string }[] = [];
|
|
92
|
+
for (const d of detected) {
|
|
93
|
+
const dir = d.harness.skillsPath(cwd);
|
|
94
|
+
if (!seen.has(dir)) {
|
|
95
|
+
seen.add(dir);
|
|
96
|
+
targets.push({ dir, name: d.harness.name });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const crossDir = resolve(cwd, CROSS_CLIENT_DIR);
|
|
100
|
+
if (!seen.has(crossDir)) {
|
|
101
|
+
seen.add(crossDir);
|
|
102
|
+
targets.push({ dir: crossDir, name: CROSS_CLIENT_DIR });
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Decide each action against REAL fs (so the preview is accurate).
|
|
106
|
+
const actions: SymlinkAction[] = [];
|
|
107
|
+
for (const { dir, name } of targets) {
|
|
108
|
+
for (const skill of skills) {
|
|
109
|
+
const linkPath = resolve(dir, skill.folderName);
|
|
110
|
+
const current = currentLink(linkPath);
|
|
111
|
+
const action: SymlinkAction["action"] =
|
|
112
|
+
current === null
|
|
113
|
+
? "created"
|
|
114
|
+
: current === skill.sourcePath
|
|
115
|
+
? "skipped"
|
|
116
|
+
: "replaced";
|
|
117
|
+
actions.push({
|
|
118
|
+
skillName: skill.name,
|
|
119
|
+
target: skill.sourcePath,
|
|
120
|
+
linkPath,
|
|
121
|
+
action,
|
|
122
|
+
harnessName: name,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const warnings = actions
|
|
128
|
+
.filter((a) => a.action === "replaced")
|
|
129
|
+
.map(
|
|
130
|
+
(a) => `Replaced stale symlink for ${a.skillName} in ${a.harnessName}`,
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
available: true,
|
|
135
|
+
targets,
|
|
136
|
+
actions,
|
|
137
|
+
skillCount: skills.length,
|
|
138
|
+
harnessCount: detected.length,
|
|
139
|
+
warnings,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Compose the (re)link effects from a detection (builds ABSOLUTE link paths
|
|
145
|
+
* itself).
|
|
146
|
+
*
|
|
147
|
+
* Built from re-runnable combinators (NOT a single-use `gen`) because `execute`
|
|
148
|
+
* interprets the task twice (preview + perform). `created` links carry an undo;
|
|
149
|
+
* a `replaced` link is delete-then-relink (idempotent); `skipped` is a no-op.
|
|
150
|
+
*
|
|
151
|
+
* @param d - The detection gathered up front.
|
|
152
|
+
* @returns A Task that mkdirs each target and creates/replaces each symlink.
|
|
153
|
+
*/
|
|
154
|
+
export function composeSkills(d: SkillsDetection): Task<void> {
|
|
155
|
+
if (!d.available) return sequence_([]);
|
|
156
|
+
const tasks: Task<unknown>[] = [];
|
|
157
|
+
for (const { dir } of d.targets) {
|
|
158
|
+
tasks.push(mkdir(dir, true));
|
|
159
|
+
}
|
|
160
|
+
for (const a of d.actions) {
|
|
161
|
+
if (a.action === "created") {
|
|
162
|
+
tasks.push(
|
|
163
|
+
symlink(a.target, a.linkPath, { undo: deleteFile(a.linkPath) }),
|
|
164
|
+
);
|
|
165
|
+
} else if (a.action === "replaced") {
|
|
166
|
+
tasks.push(deleteFile(a.linkPath));
|
|
167
|
+
tasks.push(symlink(a.target, a.linkPath));
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
tasks.push(
|
|
171
|
+
info(`Linked ${d.skillCount} skill(s) into ${d.targets.length} dir(s).`),
|
|
172
|
+
);
|
|
173
|
+
return sequence_(tasks);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** Project a detection onto the {@link SetupSkillsResult} output shape. */
|
|
177
|
+
export function toSkillsResult(d: SkillsDetection): SetupSkillsResult {
|
|
178
|
+
return {
|
|
179
|
+
actions: d.actions,
|
|
180
|
+
harnessCount: d.harnessCount,
|
|
181
|
+
skillCount: d.skillCount,
|
|
182
|
+
warnings: d.warnings,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* The EMPTY_RESULTS error the DIRECT `setup skills` sub-verb raises when no
|
|
188
|
+
* skills are discoverable (the run-all instead omits the step). Recovery points
|
|
189
|
+
* at where skills COME FROM (U8): package skills install on `sources update`.
|
|
190
|
+
*/
|
|
191
|
+
export function skillsEmptyError(): PragmaError {
|
|
192
|
+
return PragmaError.emptyResults("skill", {
|
|
193
|
+
message: "No skills found to link.",
|
|
194
|
+
recovery: cliRecovery(
|
|
195
|
+
`${RECOVERY_CLI_PREFIX}sources update`,
|
|
196
|
+
"Add a design-system package that ships skills to your config, then run `pragma sources update` to install them.",
|
|
197
|
+
),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatters for `pragma setup` and its sub-verbs — one shared formatter over
|
|
3
|
+
* the tagged {@link SetupResult} union (plain, llm, json).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Formatters } from "../../kernel/spec/types.js";
|
|
7
|
+
import type { SetupResult, SetupSkillsResult } from "./types.js";
|
|
8
|
+
|
|
9
|
+
/** Summarize a skills result: created / skipped / replaced counts. */
|
|
10
|
+
function skillsSummary(result: SetupSkillsResult): string {
|
|
11
|
+
const created = result.actions.filter((a) => a.action === "created").length;
|
|
12
|
+
const skipped = result.actions.filter((a) => a.action === "skipped").length;
|
|
13
|
+
const replaced = result.actions.filter((a) => a.action === "replaced").length;
|
|
14
|
+
return `${created} created, ${replaced} replaced, ${skipped} unchanged across ${result.harnessCount} harness(es)`;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Render a setup result to a single human line (shared by plain/llm). */
|
|
18
|
+
function line(data: SetupResult): string {
|
|
19
|
+
switch (data.kind) {
|
|
20
|
+
case "completions":
|
|
21
|
+
return data.installed
|
|
22
|
+
? `Installed ${data.shell} completions at ${data.path}.`
|
|
23
|
+
: "No shell detected — completions were not installed.";
|
|
24
|
+
case "lsp":
|
|
25
|
+
return "Terrazzo LSP extension is installed (up to date).";
|
|
26
|
+
case "mcp":
|
|
27
|
+
return data.configured.length > 0
|
|
28
|
+
? `Configured MCP for: ${data.configured.join(", ")}.`
|
|
29
|
+
: "No harnesses configured.";
|
|
30
|
+
case "skills":
|
|
31
|
+
return `Skills: ${skillsSummary(data.result)}.`;
|
|
32
|
+
case "all":
|
|
33
|
+
return data.steps.length > 0
|
|
34
|
+
? `Setup complete — ran: ${data.steps.join(", ")}.`
|
|
35
|
+
: "Setup complete — no steps selected.";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const setupFormatters: Formatters<SetupResult> = {
|
|
40
|
+
plain(data) {
|
|
41
|
+
return line(data);
|
|
42
|
+
},
|
|
43
|
+
llm(data) {
|
|
44
|
+
return `- ${line(data)}`;
|
|
45
|
+
},
|
|
46
|
+
json(data) {
|
|
47
|
+
return JSON.stringify(data);
|
|
48
|
+
},
|
|
49
|
+
};
|