@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,21 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Synthesize
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* cancel fixes
|
|
6
|
-
* `promptStrategy` + `setupAll`.
|
|
2
|
+
* Synthesize a setup invocation as a summon `GeneratorDefinition` driven by the
|
|
3
|
+
* TARGET TABLE, so the run-all and every sub-verb flow through the same
|
|
4
|
+
* `execute` seam `create` uses — inheriting the Ink wizard, the recap/confirm
|
|
5
|
+
* gate, live progress, colours, and the shared cancel fixes by construction.
|
|
7
6
|
*
|
|
8
|
-
* The shape mirrors `create`: detection runs FOR REAL up front (
|
|
9
|
-
* `
|
|
10
|
-
*
|
|
11
|
-
* it more than once (the confirm-gate preview
|
|
12
|
-
*
|
|
7
|
+
* The shape mirrors `create`: detection runs FOR REAL up front (once per
|
|
8
|
+
* target/band, in `detectTargets`), then a PURE `generate` composes only the
|
|
9
|
+
* effects for the SELECTED rows. `generate` must stay re-interpretable —
|
|
10
|
+
* `execute` invokes it more than once (the confirm-gate preview and the build) —
|
|
11
|
+
* so it is composed from combinators and does no reads of its own.
|
|
13
12
|
*
|
|
14
|
-
* The
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* configures every deduped file.
|
|
13
|
+
* The wizard is the PLAN'S EDITOR, not a parallel path: its choices are the plan
|
|
14
|
+
* rows, and what it edits is each row's `selected` flag. There is exactly one
|
|
15
|
+
* list of things this command can do, and the preview, the wizard, the progress
|
|
16
|
+
* lines and the recap are four views of it.
|
|
19
17
|
*
|
|
20
18
|
* This module carries NO static import of `@canonical/summon-core` VALUES or of
|
|
21
19
|
* React/Ink — it only `import type`s the generator shape and builds plain object
|
|
@@ -27,96 +25,148 @@ import type {
|
|
|
27
25
|
GeneratorDefinition,
|
|
28
26
|
PromptDefinition,
|
|
29
27
|
} from "@canonical/summon-core";
|
|
30
|
-
import { sequence_, type Task, when } from "@canonical/task";
|
|
31
|
-
import type { PragmaRuntime } from "../../../kernel/runtime/types.js";
|
|
32
|
-
import { guardMissingBinary } from "../../shared/assertExecOk.js";
|
|
33
|
-
import type {
|
|
34
|
-
LspState,
|
|
35
|
-
ScopeSelection,
|
|
36
|
-
SetupMode,
|
|
37
|
-
SetupResult,
|
|
38
|
-
} from "../types.js";
|
|
39
28
|
import {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
29
|
+
flatMap,
|
|
30
|
+
pure,
|
|
31
|
+
recover,
|
|
32
|
+
sequence_,
|
|
33
|
+
type Task,
|
|
34
|
+
type TaskError,
|
|
35
|
+
warn,
|
|
36
|
+
} from "@canonical/task";
|
|
37
|
+
import { BIN_NAME } from "../../../constants.js";
|
|
38
|
+
import { PragmaError } from "../../../kernel/error/index.js";
|
|
39
|
+
import type { PragmaRuntime } from "../../../kernel/runtime/index.js";
|
|
45
40
|
import {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
} from "./setupMcp.js";
|
|
41
|
+
buildPlan,
|
|
42
|
+
type DetectedRow,
|
|
43
|
+
detectionFailure,
|
|
44
|
+
detectTargets,
|
|
45
|
+
draftFor,
|
|
46
|
+
resolveRoots,
|
|
47
|
+
} from "../buildPlan.js";
|
|
54
48
|
import {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
type
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
49
|
+
isActionable,
|
|
50
|
+
type PlanChildRow,
|
|
51
|
+
type PlanOutcome,
|
|
52
|
+
type PlanRow,
|
|
53
|
+
type SetupPlan,
|
|
54
|
+
TARGET_IDS,
|
|
55
|
+
type TargetId,
|
|
56
|
+
withRows,
|
|
57
|
+
} from "../plan.js";
|
|
58
|
+
import type { ScopeBand, ScopeSelection, SetupMode } from "../types.js";
|
|
59
|
+
|
|
60
|
+
/** The answer key the run-all's row multiselect writes. */
|
|
61
|
+
const ROWS_ANSWER = "targets";
|
|
61
62
|
|
|
62
|
-
/** The
|
|
63
|
-
|
|
63
|
+
/** The answer key the opt-in per-file MCP narrowing writes. */
|
|
64
|
+
const MCP_FILES_ANSWER = "mcpTargets";
|
|
65
|
+
|
|
66
|
+
/** The answer key the opt-in per-editor LSP narrowing writes. */
|
|
67
|
+
const LSP_EDITORS_ANSWER = "lspEditors";
|
|
68
|
+
|
|
69
|
+
/** Which answer key carries a target's per-child selection, if it has one. */
|
|
70
|
+
const CHILD_ANSWER: Partial<Record<TargetId, string>> = {
|
|
71
|
+
mcp: MCP_FILES_ANSWER,
|
|
72
|
+
lsp: LSP_EDITORS_ANSWER,
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/** A row's identity in an answer bag: band-qualified, so `both` stays unambiguous. */
|
|
76
|
+
const rowKey = (band: ScopeBand, target: TargetId): string =>
|
|
77
|
+
`${band}:${target}`;
|
|
64
78
|
|
|
65
79
|
/**
|
|
66
|
-
* A ready-to-run setup
|
|
67
|
-
*
|
|
68
|
-
*
|
|
80
|
+
* A ready-to-run setup invocation: the plan as detected, the synthesized
|
|
81
|
+
* generator, and a projection from the completed answers back onto the plan with
|
|
82
|
+
* outcomes filled in — the recap, and the `--format json` body.
|
|
69
83
|
*/
|
|
70
|
-
export interface
|
|
84
|
+
export interface SetupRun {
|
|
85
|
+
readonly plan: SetupPlan;
|
|
71
86
|
readonly generator: GeneratorDefinition;
|
|
72
|
-
|
|
87
|
+
/** The plan with the wizard's selection and the run's outcomes applied. */
|
|
88
|
+
applied(answers: Record<string, unknown>): SetupPlan;
|
|
73
89
|
}
|
|
74
90
|
|
|
75
|
-
/**
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Where a failed row's error lands during interpretation.
|
|
93
|
+
*
|
|
94
|
+
* Per-row failure isolation needs somewhere to put "row X failed with Y", and
|
|
95
|
+
* `execute` yields only the generator's answers and effects — the value of the
|
|
96
|
+
* composed task is discarded. So the recover handlers record here, and the head
|
|
97
|
+
* of the sequence CLEARS it: `generate` is invoked fresh per interpretation, so
|
|
98
|
+
* the clear runs first on every drive and the last drive (the real one, which
|
|
99
|
+
* follows `execute`'s mocked preview) is the one whose records survive. The
|
|
100
|
+
* composition itself stays pure and re-interpretable — nothing is captured in
|
|
101
|
+
* the task, only written while it runs.
|
|
102
|
+
*/
|
|
103
|
+
class OutcomeSink {
|
|
104
|
+
private readonly errors = new Map<string, TaskError>();
|
|
82
105
|
|
|
83
|
-
/**
|
|
84
|
-
|
|
85
|
-
|
|
106
|
+
/** Forget every recorded failure — run at the head of each interpretation. */
|
|
107
|
+
clear(): void {
|
|
108
|
+
this.errors.clear();
|
|
109
|
+
}
|
|
86
110
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
answers: Record<string, unknown>,
|
|
91
|
-
): string[] =>
|
|
92
|
-
Array.isArray(answers.mcpTargets)
|
|
93
|
-
? (answers.mcpTargets as string[])
|
|
94
|
-
: d.groups.map((g) => g.path);
|
|
111
|
+
record(key: string, error: TaskError): void {
|
|
112
|
+
this.errors.set(key, error);
|
|
113
|
+
}
|
|
95
114
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
115
|
+
get(key: string): TaskError | undefined {
|
|
116
|
+
return this.errors.get(key);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
get failureCount(): number {
|
|
120
|
+
return this.errors.size;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** The {@link PragmaError} a row failure carries, or a wrapper around it. */
|
|
125
|
+
const rowPragmaError = (error: TaskError): PragmaError =>
|
|
126
|
+
error.cause instanceof PragmaError
|
|
127
|
+
? error.cause
|
|
128
|
+
: new PragmaError({ code: "UNSUPPORTED", message: error.message });
|
|
101
129
|
|
|
102
130
|
/**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
131
|
+
* Run the chosen rows with per-row failure isolation. The rows are independent
|
|
132
|
+
* installers, so one unsatisfiable prerequisite must not consume the others: a
|
|
133
|
+
* sequenced composition let a failing editor sideload abort the run before MCP
|
|
134
|
+
* or skills ever executed, so on every machine without a usable editor CLI the
|
|
135
|
+
* single advertised onboarding command configured nothing that mattered.
|
|
136
|
+
*
|
|
137
|
+
* Each row runs under a `recover` frame: the failure is reported inline (a
|
|
138
|
+
* `warn` right where it happened), recorded on the sink, and the remaining rows
|
|
139
|
+
* still run. The aggregate outcome is decided afterwards by the caller reading
|
|
140
|
+
* the sink — a run whose every failure is recorded does NOT rethrow, because the
|
|
141
|
+
* recap is the report and the exit code comes from the plan's own rule.
|
|
142
|
+
*
|
|
143
|
+
* Only failures travelling the task FAILURE CHANNEL are isolable — a synchronous
|
|
144
|
+
* throw bypasses the trampoline's recovery frames — which is why the row bodies
|
|
145
|
+
* raise via `checkExecOk`/`failPragma`, never a bare throw. Interruption bypasses
|
|
146
|
+
* recovery by interpreter invariant, so Ctrl-C still stops the whole run.
|
|
110
147
|
*/
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
148
|
+
const runRowsIsolated = (
|
|
149
|
+
sink: OutcomeSink,
|
|
150
|
+
rows: readonly { key: string; task: Task<void> }[],
|
|
151
|
+
): Task<void> =>
|
|
152
|
+
flatMap(pure(undefined), (): Task<void> => {
|
|
153
|
+
sink.clear();
|
|
154
|
+
return sequence_(
|
|
155
|
+
rows.map(({ key, task }) =>
|
|
156
|
+
recover(task, (error) =>
|
|
157
|
+
flatMap(
|
|
158
|
+
warn(
|
|
159
|
+
`The ${key.split(":")[1]} step did not complete — continuing with the remaining targets.`,
|
|
160
|
+
),
|
|
161
|
+
() => {
|
|
162
|
+
sink.record(key, error);
|
|
163
|
+
return pure(undefined);
|
|
164
|
+
},
|
|
165
|
+
),
|
|
166
|
+
),
|
|
167
|
+
),
|
|
168
|
+
);
|
|
169
|
+
});
|
|
120
170
|
|
|
121
171
|
/** Build a generator's `meta` (no stamping — the version is just header text). */
|
|
122
172
|
const buildMeta = (
|
|
@@ -125,279 +175,306 @@ const buildMeta = (
|
|
|
125
175
|
): GeneratorDefinition["meta"] => ({
|
|
126
176
|
name: title,
|
|
127
177
|
displayName: title,
|
|
128
|
-
description:
|
|
178
|
+
description: `Configure ${BIN_NAME} on this machine`,
|
|
129
179
|
version: rt.version,
|
|
130
180
|
});
|
|
131
181
|
|
|
132
|
-
/**
|
|
182
|
+
/** Read a multiselect answer as a string array. */
|
|
183
|
+
const readList = (
|
|
184
|
+
answers: Record<string, unknown>,
|
|
185
|
+
key: string,
|
|
186
|
+
): string[] | undefined =>
|
|
187
|
+
Array.isArray(answers[key]) ? (answers[key] as string[]) : undefined;
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* The wizard's row multiselect — its choices ARE the plan rows. Actionable rows
|
|
191
|
+
* are pre-selected; an already-current row is offered DE-selected, so a re-run
|
|
192
|
+
* never proposes to rewrite what is already correct. A skip row is not a choice
|
|
193
|
+
* at all (summon's choice shape has no disabled state) but stays a visible row
|
|
194
|
+
* in the plan and the recap, carrying its reason.
|
|
195
|
+
*/
|
|
196
|
+
const buildRowsPrompt = (plan: SetupPlan): PromptDefinition => {
|
|
197
|
+
const choices = plan.rows
|
|
198
|
+
.filter((row) => row.action !== "skip")
|
|
199
|
+
.map((row) => ({
|
|
200
|
+
label: `${row.target} — ${row.detail}${row.action === "none" ? " (already configured)" : ""}`,
|
|
201
|
+
value: rowKey(row.band, row.target),
|
|
202
|
+
}));
|
|
203
|
+
return {
|
|
204
|
+
name: ROWS_ANSWER,
|
|
205
|
+
type: "multiselect",
|
|
206
|
+
message: "Which targets would you like to configure?",
|
|
207
|
+
choices,
|
|
208
|
+
default: plan.rows
|
|
209
|
+
.filter((row) => row.selected)
|
|
210
|
+
.map((row) => rowKey(row.band, row.target)),
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
/** The opt-in "customize which files" gate — defaults to false. */
|
|
133
215
|
const buildCustomizePrompt = (
|
|
134
216
|
when?: PromptDefinition["when"],
|
|
135
217
|
): PromptDefinition => ({
|
|
136
218
|
name: "customize",
|
|
137
219
|
type: "confirm",
|
|
138
|
-
message:
|
|
220
|
+
message: `Customize which files ${BIN_NAME} configures?`,
|
|
139
221
|
default: false,
|
|
140
222
|
when,
|
|
141
223
|
});
|
|
142
224
|
|
|
143
|
-
/** The suffix a group's prior state adds to its multiselect label. */
|
|
144
|
-
const mcpStateSuffix = (d: McpDetection, path: string): string => {
|
|
145
|
-
switch (mcpGroupState(d, path)) {
|
|
146
|
-
case "configured":
|
|
147
|
-
return " — already configured";
|
|
148
|
-
case "drifted":
|
|
149
|
-
return " — needs update";
|
|
150
|
-
default:
|
|
151
|
-
return "";
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
|
|
155
225
|
/**
|
|
156
|
-
* The per-file MCP multiselect — one row per
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
226
|
+
* The per-file MCP multiselect — one row per deduplicated config file, across
|
|
227
|
+
* every band the run covers. An already-current file is DEFAULT-DESELECTED; a
|
|
228
|
+
* file that is absent or drifted stays selected. Retained unchanged from the
|
|
229
|
+
* landed opt-in narrowing: it is row-level CHILD selection, which is exactly
|
|
230
|
+
* what the plan's child rows are.
|
|
160
231
|
*/
|
|
161
|
-
const
|
|
162
|
-
|
|
232
|
+
const buildChildPrompt = (
|
|
233
|
+
plan: SetupPlan,
|
|
234
|
+
target: TargetId,
|
|
235
|
+
message: string,
|
|
163
236
|
when?: PromptDefinition["when"],
|
|
164
|
-
): PromptDefinition =>
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
237
|
+
): PromptDefinition => {
|
|
238
|
+
const children = childrenOf(plan, target);
|
|
239
|
+
return {
|
|
240
|
+
name: CHILD_ANSWER[target] as string,
|
|
241
|
+
type: "multiselect",
|
|
242
|
+
message,
|
|
243
|
+
when,
|
|
244
|
+
choices: children.map((child) => ({
|
|
245
|
+
label: `${child.label} — ${child.action}`,
|
|
246
|
+
value: child.key,
|
|
247
|
+
})),
|
|
248
|
+
default: children
|
|
249
|
+
.filter((child) => child.action !== "unchanged")
|
|
250
|
+
.map((child) => child.key),
|
|
251
|
+
};
|
|
252
|
+
};
|
|
177
253
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
254
|
+
/** Every child row a target contributes, across the bands in the plan. */
|
|
255
|
+
const childrenOf = (
|
|
256
|
+
plan: SetupPlan,
|
|
257
|
+
target: TargetId,
|
|
258
|
+
): readonly PlanChildRow[] =>
|
|
259
|
+
plan.rows
|
|
260
|
+
.filter((row) => row.target === target)
|
|
261
|
+
.flatMap((row) => row.children ?? []);
|
|
181
262
|
|
|
182
|
-
/**
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
):
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
detectSkills(rt),
|
|
192
|
-
]);
|
|
193
|
-
return { completions, lsp, mcp, skills };
|
|
194
|
-
}
|
|
263
|
+
/** Whether a row was chosen: by the wizard's answer, else by its own default. */
|
|
264
|
+
const isChosen = (
|
|
265
|
+
row: PlanRow,
|
|
266
|
+
chosen: readonly string[] | undefined,
|
|
267
|
+
): boolean =>
|
|
268
|
+
row.action !== "skip" &&
|
|
269
|
+
(chosen === undefined
|
|
270
|
+
? row.selected
|
|
271
|
+
: chosen.includes(rowKey(row.band, row.target)));
|
|
195
272
|
|
|
196
273
|
/**
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
274
|
+
* What a row DID, as a past-tense word. The row's detail says what and where;
|
|
275
|
+
* the note says what happened to it, so a progress line and a recap line read
|
|
276
|
+
* as sentences rather than as two halves of one.
|
|
277
|
+
*/
|
|
278
|
+
const ACTION_NOTES: Record<string, string> = {
|
|
279
|
+
install: "installed",
|
|
280
|
+
update: "updated",
|
|
281
|
+
link: "linked",
|
|
282
|
+
remove: "removed",
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* The `2 added, 1 updated` note a row's children produce — counted over the
|
|
287
|
+
* children the run KEPT, not the ones it was offered.
|
|
288
|
+
*
|
|
289
|
+
* `kept` is the row's own child answer: the MCP files, or the LSP editors, the
|
|
290
|
+
* wizard narrowed to. Counting the plan's children instead recapped `2 added`
|
|
291
|
+
* for a run the user had just narrowed to one file, so the plan and the result
|
|
292
|
+
* described different work. Absent (`undefined`) means the narrowing prompt was
|
|
293
|
+
* never answered, which is the same thing the compose bodies read as "all".
|
|
204
294
|
*
|
|
205
|
-
* @param
|
|
206
|
-
* @param
|
|
207
|
-
* @returns The
|
|
295
|
+
* @param row - The plan row.
|
|
296
|
+
* @param kept - The child keys the run retained, or `undefined` for all.
|
|
297
|
+
* @returns The counts note, or `undefined` when the row has no children.
|
|
208
298
|
*/
|
|
209
|
-
function
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
):
|
|
213
|
-
const
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
if (
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
if (detected.mcp.groups.length > 0) {
|
|
226
|
-
choices.push({
|
|
227
|
-
label: `MCP config (${detected.mcp.groups.length} file(s))`,
|
|
228
|
-
value: "mcp",
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
if (detected.skills.available && hasProject) {
|
|
232
|
-
choices.push({
|
|
233
|
-
label: `Link skills (${detected.skills.skillCount})`,
|
|
234
|
-
value: "skills",
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
return choices;
|
|
299
|
+
function childNote(
|
|
300
|
+
row: PlanRow,
|
|
301
|
+
kept: readonly string[] | undefined,
|
|
302
|
+
): string | undefined {
|
|
303
|
+
const children = (row.children ?? []).filter(
|
|
304
|
+
(child) => kept === undefined || kept.includes(child.key),
|
|
305
|
+
);
|
|
306
|
+
if (children.length === 0) return undefined;
|
|
307
|
+
const count = (action: string): number =>
|
|
308
|
+
children.filter((child) => child.action === action).length;
|
|
309
|
+
const parts = [
|
|
310
|
+
count("add") > 0 ? `${count("add")} added` : "",
|
|
311
|
+
count("update") > 0 ? `${count("update")} updated` : "",
|
|
312
|
+
count("unchanged") > 0 ? `${count("unchanged")} unchanged` : "",
|
|
313
|
+
].filter((part) => part.length > 0);
|
|
314
|
+
return parts.length > 0 ? parts.join(", ") : undefined;
|
|
238
315
|
}
|
|
239
316
|
|
|
240
|
-
// =============================================================================
|
|
241
|
-
// Plan builders
|
|
242
|
-
// =============================================================================
|
|
243
|
-
|
|
244
317
|
/**
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
318
|
+
* Build one invocation: detect, plan, synthesize the generator, and expose the
|
|
319
|
+
* projection back onto the plan.
|
|
320
|
+
*
|
|
321
|
+
* @param rt - The per-invocation runtime.
|
|
322
|
+
* @param mode - The entry point: the run-all, or one target.
|
|
323
|
+
* @param scope - The resolved band selection.
|
|
324
|
+
* @param removal - Compose the removal (`--undo`) instead of the install.
|
|
325
|
+
* @returns The plan, the generator, and the answers-to-plan projection.
|
|
326
|
+
* @note Impure — runs every selected target's real detection.
|
|
249
327
|
*/
|
|
250
|
-
function
|
|
328
|
+
export async function buildSetupRun(
|
|
251
329
|
rt: PragmaRuntime,
|
|
252
|
-
|
|
330
|
+
mode: SetupMode,
|
|
253
331
|
scope: ScopeSelection,
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
const
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
//
|
|
266
|
-
//
|
|
267
|
-
//
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
)
|
|
332
|
+
removal = false,
|
|
333
|
+
): Promise<SetupRun> {
|
|
334
|
+
const ids: TargetId[] = mode === "all" ? [...TARGET_IDS] : [mode as TargetId];
|
|
335
|
+
const roots = await resolveRoots(rt);
|
|
336
|
+
const detected = await detectTargets(rt, ids, scope);
|
|
337
|
+
const plan = buildPlan(scope, roots, detected, ids, removal);
|
|
338
|
+
const sink = new OutcomeSink();
|
|
339
|
+
|
|
340
|
+
const prompts: PromptDefinition[] = [];
|
|
341
|
+
if (mode === "all") prompts.push(buildRowsPrompt(plan));
|
|
342
|
+
// A target is worth narrowing only when it has more than one child to choose
|
|
343
|
+
// between. `mcp` offers its config files; `lsp` offers the editors on PATH —
|
|
344
|
+
// a machine with several VS Code forks should not have the extension pushed
|
|
345
|
+
// into all of them just because they are installed.
|
|
346
|
+
const narrowable = (
|
|
347
|
+
[
|
|
348
|
+
["mcp", "Configure MCP for which files?"],
|
|
349
|
+
["lsp", "Install the extension into which editors?"],
|
|
350
|
+
] as const
|
|
351
|
+
).filter(([target]) => !removal && childrenOf(plan, target).length > 1);
|
|
352
|
+
|
|
353
|
+
if (narrowable.length > 0) {
|
|
354
|
+
const anyChosen = (answers: Record<string, unknown>): boolean => {
|
|
355
|
+
const chosen = readList(answers, ROWS_ANSWER);
|
|
356
|
+
return narrowable.some(([target]) =>
|
|
357
|
+
plan.rows.some((row) => row.target === target && isChosen(row, chosen)),
|
|
358
|
+
);
|
|
359
|
+
};
|
|
360
|
+
prompts.push(buildCustomizePrompt(anyChosen));
|
|
361
|
+
for (const [target, message] of narrowable) {
|
|
362
|
+
const rowChosen = (answers: Record<string, unknown>): boolean => {
|
|
363
|
+
const chosen = readList(answers, ROWS_ANSWER);
|
|
364
|
+
return plan.rows.some(
|
|
365
|
+
(row) => row.target === target && isChosen(row, chosen),
|
|
366
|
+
);
|
|
367
|
+
};
|
|
368
|
+
prompts.push(
|
|
369
|
+
buildChildPrompt(
|
|
370
|
+
plan,
|
|
371
|
+
target,
|
|
372
|
+
message,
|
|
373
|
+
(answers) => answers.customize === true && rowChosen(answers),
|
|
374
|
+
),
|
|
375
|
+
);
|
|
376
|
+
}
|
|
277
377
|
}
|
|
278
378
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
// `when(false, …)` discards the (side-effect-free) task it was handed.
|
|
379
|
+
/** The detection behind a row, for composing and for re-reading its draft. */
|
|
380
|
+
const detectionFor = (row: PlanRow): DetectedRow | undefined =>
|
|
381
|
+
detected.find((d) => d.target.id === row.target && d.band === row.band);
|
|
382
|
+
|
|
284
383
|
const generator: GeneratorDefinition = {
|
|
285
|
-
meta: buildMeta(
|
|
384
|
+
meta: buildMeta(
|
|
385
|
+
rt,
|
|
386
|
+
mode === "all" ? `${BIN_NAME} setup` : `${BIN_NAME} setup ${mode}`,
|
|
387
|
+
),
|
|
286
388
|
prompts,
|
|
287
389
|
generate: (answers) => {
|
|
288
|
-
const chosen =
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
390
|
+
const chosen = readList(answers, ROWS_ANSWER);
|
|
391
|
+
const tasks = plan.rows.flatMap((row) => {
|
|
392
|
+
if (!isChosen(row, chosen)) return [];
|
|
393
|
+
const hit = detectionFor(row);
|
|
394
|
+
if (hit === undefined) return [];
|
|
395
|
+
// Each target reads ITS OWN child answer. One shared list was handing
|
|
396
|
+
// MCP file paths to every other target's compose.
|
|
397
|
+
const key = CHILD_ANSWER[row.target];
|
|
398
|
+
const children = key === undefined ? undefined : readList(answers, key);
|
|
399
|
+
const task = removal
|
|
400
|
+
? hit.target.composeRemoval(hit.detection)
|
|
401
|
+
: hit.target.compose(hit.detection, children);
|
|
402
|
+
return [{ key: rowKey(row.band, row.target), task }];
|
|
403
|
+
});
|
|
404
|
+
return runRowsIsolated(sink, tasks);
|
|
301
405
|
},
|
|
302
406
|
};
|
|
303
407
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
):
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* Build the plan for an entry point. Detection runs here (up front); the
|
|
322
|
-
* returned generator's `generate` is pure. The `skills` sub-verb throws
|
|
323
|
-
* EMPTY_RESULTS before returning a plan when nothing is discoverable (its direct
|
|
324
|
-
* contract), whereas the run-all simply omits an undetectable step.
|
|
325
|
-
*
|
|
326
|
-
* @param rt - The per-invocation runtime.
|
|
327
|
-
* @param mode - The entry point (`all` or one sub-verb).
|
|
328
|
-
* @param scope - The resolved `--scope` selection (project/global/both).
|
|
329
|
-
* @returns The generator + result mapper.
|
|
330
|
-
* @throws PragmaError EMPTY_RESULTS for a direct `setup skills` with no skills.
|
|
331
|
-
* @note Impure — performs each step's real detection.
|
|
332
|
-
*/
|
|
333
|
-
export async function buildSetupPlan(
|
|
334
|
-
rt: PragmaRuntime,
|
|
335
|
-
mode: SetupMode,
|
|
336
|
-
scope: ScopeSelection,
|
|
337
|
-
): Promise<SetupPlan> {
|
|
338
|
-
switch (mode) {
|
|
339
|
-
case "all":
|
|
340
|
-
return buildRunAllPlan(rt, await gatherDetection(rt, scope), scope);
|
|
341
|
-
|
|
342
|
-
case "completions": {
|
|
343
|
-
const d = await detectCompletions(rt.cwd);
|
|
408
|
+
/** The outcome one row ended in, read off the sink and its own draft. */
|
|
409
|
+
const outcomeFor = (
|
|
410
|
+
row: PlanRow,
|
|
411
|
+
chosen: readonly string[] | undefined,
|
|
412
|
+
answers: Record<string, unknown>,
|
|
413
|
+
): PlanOutcome | undefined => {
|
|
414
|
+
const hit = detectionFor(row);
|
|
415
|
+
// A row whose DETECTION threw has no draft to read and nothing to compose,
|
|
416
|
+
// and it is not a skip: the target was requested and did not happen. It
|
|
417
|
+
// reports `failed` with its own cause, exactly as a failed compose does, so
|
|
418
|
+
// the run names it instead of reporting a clean sweep over its siblings.
|
|
419
|
+
const failure = hit === undefined ? undefined : detectionFailure(hit);
|
|
420
|
+
if (failure !== undefined) return { status: "failed", note: failure };
|
|
421
|
+
const draft = hit === undefined ? undefined : draftFor(hit, roots, removal);
|
|
422
|
+
if (row.action === "skip") {
|
|
344
423
|
return {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
),
|
|
348
|
-
toResult: () => ({
|
|
349
|
-
kind: "completions",
|
|
350
|
-
shell: d.shell,
|
|
351
|
-
path: d.path,
|
|
352
|
-
installed: d.shell !== null,
|
|
353
|
-
state: d.state,
|
|
354
|
-
}),
|
|
424
|
+
status: "skipped",
|
|
425
|
+
...(draft?.remedy === undefined ? {} : { remedy: draft.remedy }),
|
|
355
426
|
};
|
|
356
427
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
428
|
+
// An already-current row reports `noop` whether or not it was selected. It
|
|
429
|
+
// is offered DE-selected (there is nothing to do to it), and returning no
|
|
430
|
+
// outcome at all left a converged re-run with a plan-shaped output that
|
|
431
|
+
// claimed nothing had run — while the row still rendered a bare green ✓.
|
|
432
|
+
// Convergence is a real result: one quiet line per row, zero writes.
|
|
433
|
+
if (row.action === "none") return { status: "noop", note: "unchanged" };
|
|
434
|
+
if (!isChosen(row, chosen)) return undefined;
|
|
435
|
+
const error = sink.get(rowKey(row.band, row.target));
|
|
436
|
+
if (error !== undefined) {
|
|
437
|
+
const pragma = rowPragmaError(error);
|
|
360
438
|
return {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
439
|
+
status: "failed",
|
|
440
|
+
note: pragma.message,
|
|
441
|
+
...(pragma.recovery?.message === undefined
|
|
442
|
+
? {}
|
|
443
|
+
: { remedy: pragma.recovery.message }),
|
|
365
444
|
};
|
|
366
445
|
}
|
|
446
|
+
if (!isActionable(row.action)) return { status: "noop" };
|
|
447
|
+
// A removal never borrows the forward child summary: its children are the
|
|
448
|
+
// files the entry is being taken OUT of, and counting them as "1 updated"
|
|
449
|
+
// described the opposite of what the run had just done.
|
|
450
|
+
const childKey = CHILD_ANSWER[row.target];
|
|
451
|
+
const kept =
|
|
452
|
+
childKey === undefined ? undefined : readList(answers, childKey);
|
|
453
|
+
const note = removal
|
|
454
|
+
? ACTION_NOTES[row.action]
|
|
455
|
+
: (childNote(row, kept) ?? ACTION_NOTES[row.action]);
|
|
456
|
+
return {
|
|
457
|
+
status: removal ? "removed" : "done",
|
|
458
|
+
...(note === undefined ? {} : { note }),
|
|
459
|
+
};
|
|
460
|
+
};
|
|
367
461
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
return {
|
|
378
|
-
generator: buildSingleStep(rt, "pragma setup mcp", prompts, (answers) =>
|
|
379
|
-
composeMcp(d, selectChosenGroups(d, answers)),
|
|
380
|
-
),
|
|
381
|
-
toResult: (answers) => {
|
|
382
|
-
const sel = selectChosenGroups(d, answers);
|
|
462
|
+
return {
|
|
463
|
+
plan,
|
|
464
|
+
generator,
|
|
465
|
+
applied: (answers) => {
|
|
466
|
+
const chosen = readList(answers, ROWS_ANSWER);
|
|
467
|
+
return withRows(
|
|
468
|
+
plan,
|
|
469
|
+
plan.rows.map((row): PlanRow => {
|
|
470
|
+
const outcome = outcomeFor(row, chosen, answers);
|
|
383
471
|
return {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
472
|
+
...row,
|
|
473
|
+
selected: isChosen(row, chosen),
|
|
474
|
+
...(outcome === undefined ? {} : { outcome }),
|
|
387
475
|
};
|
|
388
|
-
},
|
|
389
|
-
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
case "skills": {
|
|
393
|
-
const d = await detectSkills(rt);
|
|
394
|
-
if (!d.available) throw skillsEmptyError();
|
|
395
|
-
return {
|
|
396
|
-
generator: buildSingleStep(rt, "pragma setup skills", [], () =>
|
|
397
|
-
composeSkills(d),
|
|
398
|
-
),
|
|
399
|
-
toResult: () => ({ kind: "skills", result: toSkillsResult(d) }),
|
|
400
|
-
};
|
|
401
|
-
}
|
|
402
|
-
}
|
|
476
|
+
}),
|
|
477
|
+
);
|
|
478
|
+
},
|
|
479
|
+
};
|
|
403
480
|
}
|