@canonical/pragma-cli 0.33.0 → 0.35.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 +153 -30
- package/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +293 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +83 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +66 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +53 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +168 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +193 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +334 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +263 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +195 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +82 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +25 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +197 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +85 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +25 -24
- package/pragma.conf.ts +853 -0
- package/src/bin.ts +276 -82
- package/src/capabilities/block.parity.test.ts +253 -0
- package/src/capabilities/capabilities/capabilities.render.ts +4 -3
- package/src/capabilities/capabilities/capabilities.verb.ts +32 -14
- package/src/capabilities/capabilities/catalog.ts +20 -12
- package/src/capabilities/capabilities/hints.ts +43 -24
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +50 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +9 -5
- package/src/capabilities/colophon/types.ts +16 -7
- package/src/capabilities/config/collectConfigShow.test.ts +58 -0
- package/src/capabilities/config/collectConfigShow.ts +43 -6
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -37
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +14 -9
- package/src/capabilities/config/show.render.test.ts +77 -5
- package/src/capabilities/config/show.render.ts +8 -13
- package/src/capabilities/config/show.verb.ts +13 -9
- package/src/capabilities/config/types.ts +26 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +95 -103
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +50 -0
- package/src/capabilities/create/create.mcp.test.ts +91 -7
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +523 -162
- package/src/capabilities/create/create.verb.ts +361 -321
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +9 -14
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +40 -46
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +29 -5
- package/src/capabilities/{standard/parity.test.ts → distribution.parity.test.ts} +24 -14
- package/src/capabilities/distribution.test.ts +122 -0
- package/src/capabilities/distribution.ts +54 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +9 -7
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +82 -46
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +5 -4
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +125 -30
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +113 -27
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +24 -13
- package/src/capabilities/doctor/doctor.render.ts +45 -20
- package/src/capabilities/doctor/doctor.test.ts +158 -40
- package/src/capabilities/doctor/doctor.verb.ts +9 -5
- package/src/capabilities/doctor/runChecks.ts +65 -66
- package/src/capabilities/doctor/types.ts +21 -5
- package/src/capabilities/emptyRecovery.test.ts +44 -22
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -5
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +5 -4
- package/src/capabilities/graph/runQuery.ts +9 -7
- package/src/capabilities/index.ts +25 -19
- package/src/capabilities/info/collectInfo.ts +15 -10
- package/src/capabilities/info/info.render.ts +4 -3
- package/src/capabilities/info/info.verb.ts +4 -3
- package/src/capabilities/lazy.test.ts +125 -2
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +42 -83
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/prompt.test.ts +12 -6
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +26 -14
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +367 -91
- package/src/capabilities/resources/resources.test.ts +411 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +397 -320
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +233 -74
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +166 -14
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +47 -9
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +14 -14
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +9 -10
- package/src/capabilities/sources/collectStatus.ts +61 -51
- package/src/capabilities/sources/index.ts +2 -2
- package/src/capabilities/sources/installSkills.ts +86 -9
- package/src/capabilities/sources/runUpdate.ts +164 -141
- package/src/capabilities/sources/sources.test.ts +265 -119
- package/src/capabilities/sources/status.render.test.ts +53 -24
- package/src/capabilities/sources/status.render.ts +25 -30
- package/src/capabilities/sources/status.verb.ts +16 -9
- package/src/capabilities/sources/types.ts +18 -25
- package/src/capabilities/sources/update.render.ts +10 -3
- package/src/capabilities/sources/update.verb.ts +13 -24
- package/src/capabilities/surface.test.ts +165 -25
- package/src/capabilities/tier.parity.test.ts +144 -0
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +8 -4
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.test.ts +8 -6
- package/src/constants.ts +78 -22
- package/src/identity.test.ts +348 -0
- package/src/index.ts +2 -2
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +20 -15
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.test.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +5 -3
- package/src/kernel/completion/entitySource.test.ts +185 -41
- package/src/kernel/completion/entitySource.ts +133 -110
- package/src/kernel/completion/model.test.ts +165 -13
- package/src/kernel/completion/model.ts +105 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +104 -50
- package/src/kernel/completion/shellDrive.test.ts +611 -0
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/fish.ts +28 -6
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +10 -3
- package/src/kernel/config/defaults.test.ts +108 -0
- package/src/kernel/config/defaults.ts +13 -23
- package/src/kernel/config/evaluateProjectConfig.ts +33 -11
- package/src/kernel/config/findProjectConfig.ts +4 -3
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -81
- package/src/kernel/config/globalConfig.ts +2 -2
- package/src/kernel/config/index.ts +5 -6
- package/src/kernel/config/paths.ts +17 -17
- package/src/kernel/config/readConfig.test.ts +246 -7
- package/src/kernel/config/readConfig.ts +8 -8
- package/src/kernel/config/schema.test.ts +50 -0
- package/src/kernel/config/schema.ts +100 -11
- package/src/kernel/config/types.ts +75 -19
- package/src/kernel/copy.test.ts +483 -0
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +6 -3
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -4
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/index.ts +1 -1
- package/src/kernel/error/recovery.test.ts +22 -45
- package/src/kernel/error/recovery.ts +36 -27
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +25 -4
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.test.ts +195 -11
- package/src/kernel/packs/collect.ts +212 -61
- package/src/kernel/packs/compile.test.ts +293 -8
- package/src/kernel/packs/compile.ts +108 -15
- package/src/kernel/packs/disclosure.test.ts +5 -2
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +13 -13
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/graphqlSource.test.ts +6 -3
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +70 -20
- package/src/kernel/packs/renderPack.ts +28 -7
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +132 -34
- package/src/kernel/packs/runBodies.ts +16 -16
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +114 -11
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +104 -10
- package/src/kernel/packs/sparql/runSelect.ts +75 -37
- package/src/kernel/packs/toolDescription.test.ts +52 -5
- package/src/kernel/packs/types.ts +52 -4
- package/src/kernel/packs/uniqueness.ts +5 -5
- package/src/kernel/project/cli/buildProgram.test.ts +157 -17
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +227 -3
- package/src/kernel/project/cli/dispatch.ts +250 -48
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +130 -30
- package/src/kernel/project/cli/helpFormat.ts +14 -1
- package/src/kernel/project/cli/rootHelp.ts +140 -111
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +18 -10
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +12 -7
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +42 -1
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +120 -5
- package/src/kernel/project/mcp/prompts/provider.ts +22 -8
- package/src/kernel/project/mcp/prompts/source.ts +69 -68
- package/src/kernel/project/mcp/registerVerb.ts +56 -11
- package/src/kernel/project/mcp/serve.ts +13 -5
- package/src/kernel/project/mcp/toolDescriptions.test.ts +6 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/disclosure.ts +4 -2
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/prefixes.test.ts +36 -0
- package/src/kernel/render/prefixes.ts +40 -13
- package/src/kernel/render/renderers.test.ts +244 -7
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/build.ts +29 -3
- package/src/kernel/runtime/graphpack/buildIndex.test.ts +46 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +53 -18
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -5
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.stories.generated.ts +3 -0
- package/src/kernel/runtime/graphpack/embedded.ts +39 -13
- package/src/kernel/runtime/graphpack/graphpack.test.ts +205 -5
- package/src/kernel/runtime/graphpack/hash.ts +3 -2
- package/src/kernel/runtime/graphpack/index.ts +1 -1
- package/src/kernel/runtime/graphpack/manifest.ts +114 -12
- package/src/kernel/runtime/graphpack/read.ts +5 -11
- package/src/kernel/runtime/graphpack/schemas.ts +74 -0
- package/src/kernel/runtime/graphpack/stories.ts +84 -0
- package/src/kernel/runtime/graphpack/types.ts +61 -48
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/paths.ts +64 -15
- package/src/kernel/runtime/probe.test.ts +8 -4
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +477 -32
- package/src/kernel/runtime/refs/gitOps.ts +1 -19
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +8 -8
- package/src/kernel/runtime/refs/resolve.ts +82 -66
- package/src/kernel/runtime/resolveSources.test.ts +63 -24
- package/src/kernel/runtime/resolveSources.ts +36 -25
- package/src/kernel/runtime/storeReadiness.ts +10 -10
- package/src/kernel/runtime/storeless.test.ts +1 -1
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +56 -55
- package/src/kernel/spec/emitReference.test.ts +3 -3
- package/src/kernel/spec/emitReference.ts +242 -34
- package/src/kernel/spec/emitSurface.ts +57 -11
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/surfaceConformance.ts +8 -0
- package/src/kernel/spec/types.ts +277 -13
- package/src/kernel/spec/validate.ts +2 -1
- package/src/kernel/vocabulary.test.ts +164 -0
- package/src/kernel/vocabulary.ts +146 -0
- package/src/testing/PARITY_GAPS.ts +8 -2
- package/src/testing/behavioral/README.md +3 -3
- package/src/testing/behavioral/completion.test.ts +19 -6
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +6 -5
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +1 -1
- package/src/testing/behavioral/exitCodes.e2e.test.ts +6 -5
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/harness.foundation.test.ts +14 -5
- package/src/testing/behavioral/journeys.cli.test.ts +117 -76
- package/src/testing/behavioral/journeys.defaultPack.test.ts +88 -182
- package/src/testing/behavioral/journeys.firstInstall.test.ts +167 -0
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +9 -6
- package/src/testing/behavioral/journeys.packageStories.test.ts +188 -0
- package/src/testing/behavioral/liveReadSurface.ts +4 -3
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +10 -5
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/behavioral/staleCommands.test.ts +10 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +7 -7
- package/src/testing/eval/cases/assembly.ts +13 -6
- package/src/testing/eval/cases/effectful.ts +28 -15
- package/src/testing/eval/cases/readNouns.ts +22 -20
- package/src/testing/eval/cases/stable.ts +5 -1
- package/src/testing/eval/eval.test.ts +7 -1
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/fixtureCapability.ts +45 -1
- package/src/testing/fixtures/graph/canonical.ts +94 -5
- package/src/testing/fixtures/graph/defaultPack.ts +7 -6
- package/src/testing/fixtures/graph/owlExport.ts +7 -5
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/fixtureGraph.ts +33 -16
- package/src/testing/helpers/packRuntime.ts +2 -3
- package/src/testing/helpers/projectCli.ts +2 -1
- package/src/testing/helpers/projectMcp.ts +38 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +24 -9
- package/src/testing/perf/budgets.ts +76 -12
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +611 -14
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/src/types.ts +2 -2
- package/dist/pragma +0 -0
- package/src/capabilities/block/blockList.test.ts +0 -79
- package/src/capabilities/block/blockList.verb.ts +0 -163
- package/src/capabilities/block/index.ts +0 -25
- package/src/capabilities/block/pack.ts +0 -166
- package/src/capabilities/block/parity.test.ts +0 -187
- package/src/capabilities/block/tierChain.ts +0 -78
- package/src/capabilities/colophon/pragmaColophon.ts +0 -66
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -152
- package/src/capabilities/create/templates.embedded.generated.ts +0 -53
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -41
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -67
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -60
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/capabilities/modifier/index.ts +0 -15
- package/src/capabilities/modifier/pack.ts +0 -64
- package/src/capabilities/standard/index.ts +0 -18
- package/src/capabilities/standard/pack.ts +0 -128
- package/src/capabilities/tier/index.ts +0 -19
- package/src/capabilities/tier/lookup.render.test.ts +0 -72
- package/src/capabilities/tier/lookup.render.ts +0 -59
- package/src/capabilities/tier/lookup.test.ts +0 -83
- package/src/capabilities/tier/lookup.verb.ts +0 -44
- package/src/capabilities/tier/pack.ts +0 -28
- package/src/capabilities/tier/runLookup.ts +0 -87
- package/src/capabilities/token/addConfig.render.ts +0 -27
- package/src/capabilities/token/addConfig.test.ts +0 -62
- package/src/capabilities/token/addConfig.verb.ts +0 -40
- package/src/capabilities/token/index.ts +0 -19
- package/src/capabilities/token/pack.ts +0 -58
- package/src/capabilities/token/runAddConfig.ts +0 -95
- package/src/kernel/completion/bashDrive.test.ts +0 -73
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +0 -39
- package/src/kernel/runtime/lock.ts +0 -90
|
@@ -1,48 +1,73 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `setup` verbs — the run-all self-verb plus the
|
|
3
|
-
* (`
|
|
2
|
+
* The `setup` verbs — the run-all self-verb plus the five CLI-only sub-verbs
|
|
3
|
+
* (`config`/`completions`/`lsp`/`mcp`/`skills`), every one of them derived from
|
|
4
|
+
* the target table.
|
|
4
5
|
*
|
|
5
6
|
* `setup` is the ONE covenant noun that is BOTH directly runnable and has
|
|
6
|
-
* sub-verbs
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* the
|
|
10
|
-
* advertising the `setup` tool as destructive.
|
|
7
|
+
* sub-verbs. All of them are storeless, interactive mutations. The sub-verbs are
|
|
8
|
+
* `mcp: false` (`buildServer` skips them, `buildProgram` still registers them);
|
|
9
|
+
* only the self-verb is an MCP tool. `destructive: false` keeps MCP from
|
|
10
|
+
* advertising the tool as destructive.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* and
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
12
|
+
* THE BAND DEFAULT IS GLOBAL. `--scope` used to default to `both`, and `both`
|
|
13
|
+
* runs each harness's own default band — which is `project` for most of the
|
|
14
|
+
* registry — so a bare `setup` scattered `.mcp.json`, `.gemini/settings.json`
|
|
15
|
+
* and `opencode.json` into whatever directory you happened to be standing in.
|
|
16
|
+
* The user band is what a machine-level installer configures; the project band
|
|
17
|
+
* is a deliberate, checked-in, team-shared choice, and is now chosen with
|
|
18
|
+
* `--local` rather than assumed.
|
|
19
|
+
*
|
|
20
|
+
* Every sub-verb registers the scope flags UNIFORMLY. That is what lets the band
|
|
21
|
+
* answer come from the table instead of per-verb flag wiring — previously
|
|
22
|
+
* `setup completions --local` died as an unknown option, while `setup mcp
|
|
23
|
+
* --local` worked, for no reason a user could see. Asking a target for a band it
|
|
24
|
+
* cannot honour is a usage error (exit 2) with the corrected command; asking the
|
|
25
|
+
* RUN-ALL for such a band merely filters, and the out-of-band target still shows
|
|
26
|
+
* as a named row.
|
|
27
|
+
*
|
|
28
|
+
* summon-core + the generator ops stay behind a LAZY dynamic import (mirroring
|
|
29
|
+
* `create`'s `loadCreateRuntime`), so building the command tree / `--help` /
|
|
30
|
+
* `__complete` — and `setup --yes` — load no React/Ink.
|
|
20
31
|
*/
|
|
21
32
|
|
|
22
33
|
import type { GeneratorResult } from "@canonical/summon-core";
|
|
23
|
-
import { $, gen, type Task } from "@canonical/task";
|
|
24
|
-
import
|
|
34
|
+
import { $, gen, pure, type Task } from "@canonical/task";
|
|
35
|
+
import { BIN_NAME } from "../../constants.js";
|
|
36
|
+
import { PragmaError } from "../../kernel/error/index.js";
|
|
37
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
25
38
|
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
26
39
|
import type {
|
|
27
40
|
CapabilityModule,
|
|
28
41
|
ParamSpec,
|
|
29
42
|
VerbSpec,
|
|
30
|
-
} from "../../kernel/spec/
|
|
31
|
-
import {
|
|
32
|
-
import
|
|
43
|
+
} from "../../kernel/spec/index.js";
|
|
44
|
+
import { resolveSetupMode, setupModeInput } from "./mode.js";
|
|
45
|
+
import {
|
|
46
|
+
planExitFailed,
|
|
47
|
+
planTally,
|
|
48
|
+
type SetupPlan,
|
|
49
|
+
TARGET_IDS,
|
|
50
|
+
} from "./plan.js";
|
|
51
|
+
import { renderProgressLine, renderRecap } from "./plan.render.js";
|
|
52
|
+
import { renderDryRun, setupFormatters } from "./setup.render.js";
|
|
53
|
+
import type { ScopeBand, ScopeSelection, SetupMode } from "./types.js";
|
|
33
54
|
|
|
34
55
|
/**
|
|
35
|
-
* The `--scope` flag + its `--global`/`--local` boolean sugars
|
|
36
|
-
* band
|
|
37
|
-
*
|
|
56
|
+
* The `--scope` flag + its `--global`/`--local` boolean sugars. Registered by
|
|
57
|
+
* EVERY setup verb, including the single-band ones: a flag that exists on some
|
|
58
|
+
* sub-verbs and not others is a grammar the user has to memorise, and the band
|
|
59
|
+
* a single-band target can honour is a question the target table answers.
|
|
60
|
+
*
|
|
61
|
+
* `--global` is a synonym of the default; it stays for scripts and for symmetry
|
|
62
|
+
* with `--local`.
|
|
38
63
|
*/
|
|
39
64
|
const SCOPE_PARAMS: readonly ParamSpec[] = [
|
|
40
65
|
{
|
|
41
66
|
kind: "enum",
|
|
42
67
|
name: "scope",
|
|
43
|
-
doc: "Which config band(s) to configure:
|
|
68
|
+
doc: "Which config band(s) to configure: global (the default), project, or both.",
|
|
44
69
|
values: ["project", "global", "both"],
|
|
45
|
-
default: "
|
|
70
|
+
default: "global",
|
|
46
71
|
},
|
|
47
72
|
{
|
|
48
73
|
kind: "boolean",
|
|
@@ -61,13 +86,46 @@ const SCOPE_PARAMS: readonly ParamSpec[] = [
|
|
|
61
86
|
* The boolean sugars win over `--scope`; `--global` wins over `--local`.
|
|
62
87
|
*
|
|
63
88
|
* @param params - The coerced param bag.
|
|
64
|
-
* @returns The resolved scope selection (defaults to `
|
|
89
|
+
* @returns The resolved scope selection (defaults to `global`).
|
|
65
90
|
*/
|
|
66
91
|
function resolveScope(params: Record<string, unknown>): ScopeSelection {
|
|
67
92
|
if (params.global === true) return "global";
|
|
68
93
|
if (params.local === true) return "project";
|
|
69
94
|
const scope = params.scope;
|
|
70
|
-
return scope === "
|
|
95
|
+
return scope === "project" || scope === "both" ? scope : "global";
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Reject a sub-verb asked for a band its target cannot hold.
|
|
100
|
+
*
|
|
101
|
+
* This is a usage error, not a skip: the user typed a contradiction, and
|
|
102
|
+
* correcting it is exactly what exit 2 means. The message names the band the
|
|
103
|
+
* target DOES have and prints the command that works, so the correction is one
|
|
104
|
+
* paste rather than one manual page.
|
|
105
|
+
*
|
|
106
|
+
* @param mode - The sub-verb's target, or `all`.
|
|
107
|
+
* @param scope - The resolved selection.
|
|
108
|
+
* @throws PragmaError INVALID_INPUT when the target has no such band.
|
|
109
|
+
*/
|
|
110
|
+
async function assertBandIsPossible(
|
|
111
|
+
mode: SetupMode,
|
|
112
|
+
scope: ScopeSelection,
|
|
113
|
+
): Promise<void> {
|
|
114
|
+
if (mode === "all" || scope === "both") return;
|
|
115
|
+
const { findTarget } = await import("./targets.js");
|
|
116
|
+
const target = findTarget(mode);
|
|
117
|
+
if (target === undefined || target.bands.includes(scope as ScopeBand)) return;
|
|
118
|
+
const only = target.bands[0] as ScopeBand;
|
|
119
|
+
const level = only === "global" ? "user-level" : "project-level";
|
|
120
|
+
const corrected =
|
|
121
|
+
only === "global"
|
|
122
|
+
? `${BIN_NAME} setup ${mode}`
|
|
123
|
+
: `${BIN_NAME} setup ${mode} --local`;
|
|
124
|
+
throw new PragmaError({
|
|
125
|
+
code: "INVALID_INPUT",
|
|
126
|
+
message: `${mode} is ${level} — it has no ${scope} band.`,
|
|
127
|
+
recovery: { message: `Run: ${corrected}` },
|
|
128
|
+
});
|
|
71
129
|
}
|
|
72
130
|
|
|
73
131
|
/** The exposed-to-MCP capability the run-all self-verb declares. */
|
|
@@ -100,38 +158,59 @@ const SUB_CAPABILITY = {
|
|
|
100
158
|
|
|
101
159
|
/**
|
|
102
160
|
* The one summon↔pragma seam per setup invocation: lazily load summon-core + the
|
|
103
|
-
* generator ops,
|
|
104
|
-
*
|
|
105
|
-
* {@link SetupResult}.
|
|
161
|
+
* generator ops, detect and plan, resolve the interaction mode, wire `rt.exec`,
|
|
162
|
+
* and return the plan with its outcomes filled in.
|
|
106
163
|
*
|
|
107
164
|
* NOTE: `rt.exec` carries NO per-call `cwd`. Unlike `create` (whose generator
|
|
108
|
-
* emits RELATIVE paths jailed to `rt.cwd`), setup's
|
|
109
|
-
* paths themselves
|
|
110
|
-
*
|
|
111
|
-
*
|
|
165
|
+
* emits RELATIVE paths jailed to `rt.cwd`), setup's targets build ABSOLUTE
|
|
166
|
+
* effect paths themselves; the interpreter leaves absolute paths unchanged, so
|
|
167
|
+
* no per-call write root is threaded. No stamping either — setup writes
|
|
168
|
+
* symlinks, config and scripts, not generated source.
|
|
112
169
|
*
|
|
113
|
-
* @param mode - Which entry point (`all` or one
|
|
114
|
-
* @param rt - The per-invocation runtime (mutated: `rt.exec`
|
|
115
|
-
* @
|
|
116
|
-
* @
|
|
117
|
-
*
|
|
170
|
+
* @param mode - Which entry point (`all` or one target).
|
|
171
|
+
* @param rt - The per-invocation runtime (mutated: `rt.exec` and `rt.planData`).
|
|
172
|
+
* @param scope - The resolved band selection.
|
|
173
|
+
* @returns The `Task<SetupPlan>` the dispatcher/MCP handler interprets.
|
|
174
|
+
* @note Impure — runs every target's real detection before returning a Task.
|
|
118
175
|
*/
|
|
119
176
|
async function runSetup(
|
|
120
177
|
mode: SetupMode,
|
|
121
178
|
rt: PragmaRuntime,
|
|
122
179
|
scope: ScopeSelection,
|
|
123
|
-
): Promise<Task<
|
|
124
|
-
|
|
180
|
+
): Promise<Task<SetupPlan>> {
|
|
181
|
+
await assertBandIsPossible(mode, scope);
|
|
182
|
+
|
|
183
|
+
// Lazy dynamic imports (lazy-React discipline): summon-core's barrel is
|
|
125
184
|
// React-free, and the non-TTY branch picks autoPrompt/mcpPrompt (never mounts
|
|
126
185
|
// Ink), so `setup --yes` loads no React — the guard test enforces this.
|
|
127
|
-
const [summon, ops] = await Promise.all([
|
|
186
|
+
const [summon, projection, ops] = await Promise.all([
|
|
128
187
|
import("@canonical/summon-core"),
|
|
188
|
+
import("@canonical/summon-core/projection"),
|
|
129
189
|
import("./operations/setupGenerator.js"),
|
|
130
190
|
]);
|
|
131
191
|
|
|
132
|
-
const
|
|
192
|
+
const input = setupModeInput(rt);
|
|
193
|
+
const run = await ops.buildSetupRun(rt, mode, scope, input.undo);
|
|
194
|
+
const interactionMode = resolveSetupMode(input, projection.decideInteraction);
|
|
195
|
+
|
|
196
|
+
// The dry-run seam: the kernel's `--dry-run` branch renders THIS instead of
|
|
197
|
+
// the raw effect dump, while its honest preview still runs underneath and
|
|
198
|
+
// still fails exactly when the real run would.
|
|
199
|
+
rt.planData = { ...run.plan, preview: true };
|
|
200
|
+
|
|
201
|
+
// Whether this invocation only PREVIEWS. The task below is driven either way
|
|
202
|
+
// — that is what makes the preview honest — so anything it says out loud has
|
|
203
|
+
// to know which of the two it is.
|
|
204
|
+
const previewing = interactionMode === "batch-dry-run";
|
|
133
205
|
|
|
134
|
-
|
|
206
|
+
// Adaptation (b): a non-interactive run without `--yes` previews rather than
|
|
207
|
+
// mutating. It is the same plan the dry-run prints, plus one hint line, at
|
|
208
|
+
// exit 0 — the invocation completed a real read-only unit of work.
|
|
209
|
+
if (interactionMode === "refuse") {
|
|
210
|
+
return pure<SetupPlan>({ ...run.plan, preview: true });
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
const { transport, yes, signal, abort } = rt.interaction ?? {
|
|
135
214
|
isTTY: false,
|
|
136
215
|
transport: "cli" as const,
|
|
137
216
|
yes: true,
|
|
@@ -139,10 +218,14 @@ async function runSetup(
|
|
|
139
218
|
|
|
140
219
|
// TTY without --yes → the Ink wizard (recap + live progress). Its callbacks
|
|
141
220
|
// ride rt.exec; `onCancel` threads the run's abort in so an in-Ink Ctrl-C
|
|
142
|
-
// during execution actually stops the writes
|
|
221
|
+
// during execution actually stops the writes.
|
|
143
222
|
let task: Task<GeneratorResult>;
|
|
144
|
-
|
|
145
|
-
|
|
223
|
+
const wizard = interactionMode === "wizard";
|
|
224
|
+
if (wizard) {
|
|
225
|
+
const session = summon.inkPrompt(run.generator, {
|
|
226
|
+
signal,
|
|
227
|
+
onCancel: abort,
|
|
228
|
+
});
|
|
146
229
|
rt.exec = {
|
|
147
230
|
promptHandler: session.promptHandler,
|
|
148
231
|
onEffectStart: session.onEffectStart,
|
|
@@ -151,7 +234,7 @@ async function runSetup(
|
|
|
151
234
|
dispose: session.dispose,
|
|
152
235
|
signal,
|
|
153
236
|
};
|
|
154
|
-
task = summon.execute(generator, {
|
|
237
|
+
task = summon.execute(run.generator, {
|
|
155
238
|
prompt: session.promptHandler,
|
|
156
239
|
params: {},
|
|
157
240
|
signal,
|
|
@@ -165,65 +248,138 @@ async function runSetup(
|
|
|
165
248
|
onLog: (_level, message) => process.stderr.write(`${message}\n`),
|
|
166
249
|
signal,
|
|
167
250
|
};
|
|
168
|
-
task = summon.execute(generator, { prompt, params: {}, signal });
|
|
251
|
+
task = summon.execute(run.generator, { prompt, params: {}, signal });
|
|
169
252
|
}
|
|
170
253
|
|
|
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
254
|
return gen(function* () {
|
|
176
255
|
const result = yield* $(task);
|
|
177
|
-
|
|
256
|
+
const applied = run.applied(result.answers);
|
|
257
|
+
|
|
258
|
+
// Progress: one line per row on stderr for an unattended run (the Ink
|
|
259
|
+
// session already draws them for the wizard). stdout stays the data stream.
|
|
260
|
+
//
|
|
261
|
+
// A dry run reports NOTHING here. Its honest preview drives this very task
|
|
262
|
+
// with writes recorded, so the progress lines ran for real and announced
|
|
263
|
+
// "✓ config — installed" above a plan that had installed nothing.
|
|
264
|
+
if (!previewing && (!wizard || yes)) {
|
|
265
|
+
const width = Math.max(...applied.rows.map((row) => row.target.length));
|
|
266
|
+
for (const row of applied.rows) {
|
|
267
|
+
if (row.outcome === undefined) continue;
|
|
268
|
+
rt.report?.(renderProgressLine(row, width));
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// A failed row exits 1, and the recap is still shown — partial success is
|
|
273
|
+
// first class, so the run reports every row before naming the ones that did
|
|
274
|
+
// not happen. The recap goes to stderr here because the error renderer owns
|
|
275
|
+
// stdout on a failing run.
|
|
276
|
+
if (planExitFailed(applied)) {
|
|
277
|
+
rt.report?.(renderRecap(applied));
|
|
278
|
+
const failed = applied.rows.filter(
|
|
279
|
+
(row) => row.outcome?.status === "failed",
|
|
280
|
+
);
|
|
281
|
+
|
|
282
|
+
// ONE failure reports itself. The row already carries the cause it was
|
|
283
|
+
// given ("`bun` is not found on your PATH") and a remedy that runs on
|
|
284
|
+
// this machine; replacing them with a count would throw away the only
|
|
285
|
+
// two sentences that say what is wrong and what to do about it.
|
|
286
|
+
const only = failed.length === 1 ? failed[0] : undefined;
|
|
287
|
+
if (only?.outcome !== undefined) {
|
|
288
|
+
throw new PragmaError({
|
|
289
|
+
code: "UNSUPPORTED",
|
|
290
|
+
message: `${only.target}: ${only.outcome.note ?? "the step did not complete"}`,
|
|
291
|
+
...(only.outcome.remedy === undefined
|
|
292
|
+
? {}
|
|
293
|
+
: { recovery: { message: only.outcome.remedy } }),
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Several failures: name every one with its own cause, then point at the
|
|
298
|
+
// recap above. A bare list of target names would make the reader re-run
|
|
299
|
+
// each one to find out why it failed.
|
|
300
|
+
const named = failed
|
|
301
|
+
.map(
|
|
302
|
+
(row) =>
|
|
303
|
+
`${row.target} (${row.outcome?.note ?? "no cause recorded"})`,
|
|
304
|
+
)
|
|
305
|
+
.join("; ");
|
|
306
|
+
throw new PragmaError({
|
|
307
|
+
code: "UNSUPPORTED",
|
|
308
|
+
message: `${failed.length} of ${planTally(applied).accountable} targets did not complete: ${named}.`,
|
|
309
|
+
recovery: {
|
|
310
|
+
message: `The other targets are configured. Re-run the ones that did not complete: ${failed
|
|
311
|
+
.map((row) => `\`${BIN_NAME} setup ${row.target}\``)
|
|
312
|
+
.join(", ")}.`,
|
|
313
|
+
},
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
return applied;
|
|
178
317
|
});
|
|
179
318
|
}
|
|
180
319
|
|
|
181
320
|
/** Build a setup verb bound to its {@link SetupMode}. */
|
|
182
321
|
function setupVerb(
|
|
183
|
-
path: VerbSpec<Record<string, unknown>,
|
|
322
|
+
path: VerbSpec<Record<string, unknown>, SetupPlan>["path"],
|
|
184
323
|
summary: string,
|
|
185
324
|
mode: SetupMode,
|
|
186
325
|
capability: typeof SELF_CAPABILITY | typeof SUB_CAPABILITY,
|
|
187
|
-
extras: Partial<VerbSpec<Record<string, unknown>,
|
|
188
|
-
): VerbSpec<Record<string, unknown>,
|
|
326
|
+
extras: Partial<VerbSpec<Record<string, unknown>, SetupPlan>> = {},
|
|
327
|
+
): VerbSpec<Record<string, unknown>, SetupPlan> {
|
|
189
328
|
return {
|
|
190
329
|
path,
|
|
191
330
|
summary,
|
|
192
|
-
params:
|
|
193
|
-
output: {
|
|
331
|
+
params: SCOPE_PARAMS,
|
|
332
|
+
output: {
|
|
333
|
+
formatters: setupFormatters,
|
|
334
|
+
// The kernel's dry-run branch renders the plan through this seam instead
|
|
335
|
+
// of dumping raw effects. Absent on every other verb, so nothing else
|
|
336
|
+
// changes shape.
|
|
337
|
+
formatPlan: (planData) => renderDryRun(planData as SetupPlan),
|
|
338
|
+
},
|
|
194
339
|
capability,
|
|
195
340
|
...extras,
|
|
196
341
|
run: (params, rt) =>
|
|
197
|
-
runSetup(mode, rt, resolveScope(params)) as unknown as Task<
|
|
342
|
+
runSetup(mode, rt, resolveScope(params)) as unknown as Task<SetupPlan>,
|
|
198
343
|
};
|
|
199
344
|
}
|
|
200
345
|
|
|
201
346
|
const setupAllVerb = setupVerb(
|
|
202
347
|
["setup"],
|
|
203
|
-
"Configure
|
|
348
|
+
"Configure the global config, completions, the LSP, MCP, and skills.",
|
|
204
349
|
"all",
|
|
205
350
|
SELF_CAPABILITY,
|
|
206
351
|
{
|
|
207
|
-
|
|
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.",
|
|
352
|
+
doc: "Plans every target in the selected band, then applies the ones you keep. The user/home band is the default; the scope option chooses the per-project band, or both. A run with no attended terminal prints the plan and applies nothing unless the run is confirmed.",
|
|
209
353
|
examples: [
|
|
210
|
-
{ cmd:
|
|
211
|
-
{ cmd: "pragma setup --dry-run", note: "preview every step's effects" },
|
|
354
|
+
{ cmd: `${BIN_NAME} setup` },
|
|
212
355
|
{
|
|
213
|
-
cmd:
|
|
214
|
-
note: "
|
|
356
|
+
cmd: `${BIN_NAME} setup --dry-run`,
|
|
357
|
+
note: "print the plan, write nothing",
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
cmd: `${BIN_NAME} setup --local`,
|
|
361
|
+
note: "configure the project band instead",
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
cmd: `${BIN_NAME} setup mcp`,
|
|
365
|
+
note: "just the MCP server registration",
|
|
215
366
|
},
|
|
216
|
-
{ cmd: "pragma setup mcp", note: "just the MCP server registration" },
|
|
217
367
|
],
|
|
218
368
|
},
|
|
219
369
|
);
|
|
220
370
|
|
|
371
|
+
const configVerb = setupVerb(
|
|
372
|
+
["setup", "config"],
|
|
373
|
+
"Create the global config file with its defaults.",
|
|
374
|
+
"config",
|
|
375
|
+
SUB_CAPABILITY,
|
|
376
|
+
);
|
|
377
|
+
|
|
221
378
|
const mcpVerb = setupVerb(
|
|
222
379
|
["setup", "mcp"],
|
|
223
|
-
|
|
380
|
+
`Register the ${BIN_NAME} MCP server in detected AI harnesses.`,
|
|
224
381
|
"mcp",
|
|
225
382
|
SUB_CAPABILITY,
|
|
226
|
-
{ params: SCOPE_PARAMS },
|
|
227
383
|
);
|
|
228
384
|
|
|
229
385
|
const completionsVerb = setupVerb(
|
|
@@ -238,7 +394,6 @@ const skillsVerb = setupVerb(
|
|
|
238
394
|
"Symlink discovered skills into each AI harness.",
|
|
239
395
|
"skills",
|
|
240
396
|
SUB_CAPABILITY,
|
|
241
|
-
{ params: SCOPE_PARAMS },
|
|
242
397
|
);
|
|
243
398
|
|
|
244
399
|
const lspVerb = setupVerb(
|
|
@@ -248,14 +403,18 @@ const lspVerb = setupVerb(
|
|
|
248
403
|
SUB_CAPABILITY,
|
|
249
404
|
);
|
|
250
405
|
|
|
251
|
-
/** The `setup` capability module (run-all self-verb +
|
|
406
|
+
/** The `setup` capability module (run-all self-verb + five CLI-only sub-verbs). */
|
|
252
407
|
export const setupModule: CapabilityModule = {
|
|
253
408
|
name: "setup",
|
|
254
409
|
verbs: [
|
|
255
410
|
asVerb(setupAllVerb),
|
|
256
|
-
asVerb(
|
|
411
|
+
asVerb(configVerb),
|
|
257
412
|
asVerb(completionsVerb),
|
|
258
|
-
asVerb(skillsVerb),
|
|
259
413
|
asVerb(lspVerb),
|
|
414
|
+
asVerb(mcpVerb),
|
|
415
|
+
asVerb(skillsVerb),
|
|
260
416
|
],
|
|
261
417
|
};
|
|
418
|
+
|
|
419
|
+
/** Re-exported so the covenant emitter and tests can name the target set. */
|
|
420
|
+
export { TARGET_IDS };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell detection — the shell the user is RUNNING, not the one `/etc/passwd`
|
|
3
|
+
* records.
|
|
4
|
+
*
|
|
5
|
+
* The defect these pin: `$SHELL` is the LOGIN shell. It does not change when
|
|
6
|
+
* you start a different shell, so a user whose account says bash but who works
|
|
7
|
+
* in zsh was handed a bash completion script — and doctor then reported it
|
|
8
|
+
* green, for a shell they never open, while zsh had nothing. The failure is
|
|
9
|
+
* invisible until TAB does nothing months later, which is exactly why an
|
|
10
|
+
* unresolved shell must be reported rather than guessed.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
14
|
+
import { detectShell, type ProcessEntry } from "./shell.js";
|
|
15
|
+
|
|
16
|
+
/** A fake process tree: pid → entry, walked exactly as /proc would be. */
|
|
17
|
+
const tree = (entries: Record<number, ProcessEntry>) => (pid: number) =>
|
|
18
|
+
entries[pid];
|
|
19
|
+
|
|
20
|
+
const prevShell = process.env.SHELL;
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
process.env.SHELL = prevShell;
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
describe("the running shell wins over $SHELL", () => {
|
|
26
|
+
it("reports the shell that actually started this process", () => {
|
|
27
|
+
// The case from a real machine: login shell bash, working shell zsh.
|
|
28
|
+
process.env.SHELL = "/bin/bash";
|
|
29
|
+
const read = tree({
|
|
30
|
+
[process.ppid]: { name: "zsh", ppid: 100 },
|
|
31
|
+
100: { name: "systemd", ppid: 1 },
|
|
32
|
+
});
|
|
33
|
+
expect(detectShell(read)).toEqual({ kind: "detected", shell: "zsh" });
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("walks past the wrappers a CLI is usually reached through", () => {
|
|
37
|
+
// `npm run` / `bunx` / a shim script put node or sh between the shell and
|
|
38
|
+
// us, so the immediate parent is almost never the answer.
|
|
39
|
+
process.env.SHELL = "/bin/bash";
|
|
40
|
+
const read = tree({
|
|
41
|
+
[process.ppid]: { name: "node", ppid: 200 },
|
|
42
|
+
200: { name: "npm", ppid: 300 },
|
|
43
|
+
300: { name: "fish", ppid: 400 },
|
|
44
|
+
});
|
|
45
|
+
expect(detectShell(read)).toEqual({ kind: "detected", shell: "fish" });
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("strips the login dash and any path", () => {
|
|
49
|
+
const read = tree({ [process.ppid]: { name: "-zsh", ppid: 1 } });
|
|
50
|
+
expect(detectShell(read)).toEqual({ kind: "detected", shell: "zsh" });
|
|
51
|
+
const path = tree({ [process.ppid]: { name: "/usr/bin/bash", ppid: 1 } });
|
|
52
|
+
expect(detectShell(path)).toEqual({ kind: "detected", shell: "bash" });
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
describe("an unresolved shell is reported, never guessed", () => {
|
|
57
|
+
it("is ambiguous when only $SHELL has an opinion", () => {
|
|
58
|
+
// No shell in the ancestry — a CI runner, an editor task, a daemon. The
|
|
59
|
+
// login shell names a session that may not exist, so it is not an answer.
|
|
60
|
+
process.env.SHELL = "/bin/bash";
|
|
61
|
+
const read = tree({
|
|
62
|
+
[process.ppid]: { name: "node", ppid: 900 },
|
|
63
|
+
900: { name: "containerd", ppid: 1 },
|
|
64
|
+
});
|
|
65
|
+
expect(detectShell(read)).toEqual({ kind: "ambiguous", login: "bash" });
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("is unknown when nothing names a supported shell", () => {
|
|
69
|
+
process.env.SHELL = "/usr/bin/nu";
|
|
70
|
+
const read = tree({ [process.ppid]: { name: "init", ppid: 1 } });
|
|
71
|
+
expect(detectShell(read)).toEqual({ kind: "unknown" });
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("is unknown when $SHELL is unset and the tree is silent", () => {
|
|
75
|
+
process.env.SHELL = "";
|
|
76
|
+
const read = tree({ [process.ppid]: { name: "init", ppid: 1 } });
|
|
77
|
+
expect(detectShell(read)).toEqual({ kind: "unknown" });
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it("gives up rather than walking an unbounded tree", () => {
|
|
81
|
+
// A cycle (or a very deep tree) must terminate.
|
|
82
|
+
process.env.SHELL = "";
|
|
83
|
+
const read = (pid: number): ProcessEntry => ({ name: "node", ppid: pid });
|
|
84
|
+
expect(detectShell(read)).toEqual({ kind: "unknown" });
|
|
85
|
+
});
|
|
86
|
+
});
|