@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
|
@@ -11,30 +11,29 @@
|
|
|
11
11
|
* exit code.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import { describeEffect,
|
|
15
|
-
import { runTask, runUndo } from "@canonical/task/node";
|
|
14
|
+
import { describeEffect, type Effect, type Task } from "@canonical/task";
|
|
15
|
+
import { runPreview, runTask, runUndo } from "@canonical/task/node";
|
|
16
16
|
import {
|
|
17
17
|
asPragmaError,
|
|
18
18
|
CANCELLED_MESSAGE,
|
|
19
19
|
isCancellation,
|
|
20
20
|
isInterruption,
|
|
21
21
|
} from "../../error/fromTaskError.js";
|
|
22
|
-
import { PragmaError } from "../../error/PragmaError.js";
|
|
23
22
|
import {
|
|
23
|
+
PragmaError,
|
|
24
24
|
renderErrorJson,
|
|
25
25
|
renderErrorLlm,
|
|
26
26
|
renderErrorPlain,
|
|
27
|
-
} from "../../error/
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import { bootRuntime } from "../../runtime/boot.js";
|
|
27
|
+
} from "../../error/index.js";
|
|
28
|
+
import type { RenderContext } from "../../render/contracts.js";
|
|
29
|
+
import { successEnvelope, writeStdout } from "../../render/index.js";
|
|
30
|
+
import { bootRuntime } from "../../runtime/index.js";
|
|
32
31
|
import type {
|
|
33
32
|
GlobalFlags,
|
|
34
33
|
InteractionRuntime,
|
|
35
34
|
PragmaRuntime,
|
|
36
35
|
} from "../../runtime/types.js";
|
|
37
|
-
import type { ParamSpec, VerbSpec } from "../../spec/
|
|
36
|
+
import type { ParamSpec, VerbSpec } from "../../spec/index.js";
|
|
38
37
|
import { EXIT, mapExitCode } from "./exitCodes.js";
|
|
39
38
|
|
|
40
39
|
/** The CLI-only mutation flags auto-injected onto every mutating verb. */
|
|
@@ -44,6 +43,18 @@ export interface MutationFlags {
|
|
|
44
43
|
readonly yes: boolean;
|
|
45
44
|
}
|
|
46
45
|
|
|
46
|
+
/**
|
|
47
|
+
* THE CLI interactivity gate (H3): stdin AND stderr are TTYs. The Ink wizard
|
|
48
|
+
* renders to stderr and reads stdin, so `<verb> 2>/dev/null` must be
|
|
49
|
+
* non-interactive — gating on stdout would mount an invisible render that
|
|
50
|
+
* blocks on stdin. One exported fact: the kernel's interaction context and a
|
|
51
|
+
* mounted subtree's own decision both read it here, so the two callers can
|
|
52
|
+
* never disagree about what "a TTY" means.
|
|
53
|
+
*/
|
|
54
|
+
export function cliIsTTY(): boolean {
|
|
55
|
+
return process.stdin.isTTY === true && process.stderr.isTTY === true;
|
|
56
|
+
}
|
|
57
|
+
|
|
47
58
|
/**
|
|
48
59
|
* Route a Task's log effects to stderr. The interpreter otherwise falls back to
|
|
49
60
|
* `console.log` (stdout), which would corrupt the `--format json` / MCP stdio
|
|
@@ -53,6 +64,18 @@ const logToStderr = (_level: string, message: string): void => {
|
|
|
53
64
|
process.stderr.write(`${message}\n`);
|
|
54
65
|
};
|
|
55
66
|
|
|
67
|
+
/** A silenced log sink — `--quiet` drops progress; errors render elsewhere. */
|
|
68
|
+
const logNowhere = (_level: string, _message: string): void => {};
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The interpreter log sink for this invocation: stderr, or — under `--quiet`
|
|
72
|
+
* — nothing. Progress/stage lines are success-path output; error rendering
|
|
73
|
+
* never routes through this sink, so muting it cannot hide a failure.
|
|
74
|
+
*/
|
|
75
|
+
function logSink(flags: GlobalFlags): (level: string, message: string) => void {
|
|
76
|
+
return flags.quiet === true ? logNowhere : logToStderr;
|
|
77
|
+
}
|
|
78
|
+
|
|
56
79
|
/** The result of running a verb: what to write where, and the exit code. */
|
|
57
80
|
export interface DispatchOutcome {
|
|
58
81
|
readonly stdout?: string;
|
|
@@ -62,6 +85,15 @@ export interface DispatchOutcome {
|
|
|
62
85
|
|
|
63
86
|
/** Coerce one raw arg into the type its {@link ParamSpec} declares. */
|
|
64
87
|
function coerceParam(param: ParamSpec, raw: unknown): unknown {
|
|
88
|
+
// A repeatable flag's collector hands over an array of occurrences; coerce
|
|
89
|
+
// each element so an enum still validates every value.
|
|
90
|
+
if (
|
|
91
|
+
Array.isArray(raw) &&
|
|
92
|
+
(param.kind === "string" || param.kind === "enum") &&
|
|
93
|
+
param.repeatable === true
|
|
94
|
+
) {
|
|
95
|
+
return raw.map((value) => coerceParam(param, value));
|
|
96
|
+
}
|
|
65
97
|
switch (param.kind) {
|
|
66
98
|
case "number": {
|
|
67
99
|
const value = typeof raw === "number" ? raw : Number(raw);
|
|
@@ -128,7 +160,19 @@ export function extractParams(
|
|
|
128
160
|
return result;
|
|
129
161
|
}
|
|
130
162
|
|
|
131
|
-
/**
|
|
163
|
+
/**
|
|
164
|
+
* Render a read/execute result through the verb's formatters.
|
|
165
|
+
*
|
|
166
|
+
* The plain branch owns two ROUTING decisions (the rendering itself stays in
|
|
167
|
+
* the formatters): it threads the presentation context (`--no-headers`,
|
|
168
|
+
* stdout's TTY-ness) into the plain formatter, and it routes a declared
|
|
169
|
+
* empty-state notice to STDERR with exit 0 — a zero-record result is a calm
|
|
170
|
+
* success, and stdout (the data stream) must not carry a human sentence a
|
|
171
|
+
* pipe would read as a record. `llm` and `json` keep their own empty shapes
|
|
172
|
+
* on stdout: both are machine contracts whose consumers read one stream.
|
|
173
|
+
*
|
|
174
|
+
* @note Impure — reads `process.stdout.isTTY` for the render context.
|
|
175
|
+
*/
|
|
132
176
|
function renderData(
|
|
133
177
|
verb: VerbSpec,
|
|
134
178
|
flags: GlobalFlags,
|
|
@@ -142,21 +186,81 @@ function renderData(
|
|
|
142
186
|
exitCode: 0,
|
|
143
187
|
};
|
|
144
188
|
}
|
|
145
|
-
|
|
146
|
-
|
|
189
|
+
if (flags.llm) {
|
|
190
|
+
const text = verb.output.formatters.llm(data);
|
|
191
|
+
return { stdout: text ? `${text}\n` : "", exitCode: 0 };
|
|
192
|
+
}
|
|
193
|
+
const context: RenderContext = {
|
|
194
|
+
headers: flags.noHeaders !== true,
|
|
195
|
+
stdoutIsTty: process.stdout.isTTY === true,
|
|
196
|
+
};
|
|
197
|
+
const text = verb.output.formatters.plain(data, context);
|
|
198
|
+
// The calm zero-record notice is success-path guidance — `--quiet` mutes it.
|
|
199
|
+
const notice =
|
|
200
|
+
flags.quiet === true
|
|
201
|
+
? undefined
|
|
202
|
+
: verb.output.formatters.emptyNotice?.(data);
|
|
203
|
+
return {
|
|
204
|
+
stdout: text ? `${text}\n` : "",
|
|
205
|
+
...(notice ? { stderr: `${notice}\n` } : {}),
|
|
206
|
+
exitCode: 0,
|
|
207
|
+
};
|
|
147
208
|
}
|
|
148
209
|
|
|
149
|
-
/**
|
|
150
|
-
|
|
210
|
+
/**
|
|
211
|
+
* Render a dry-run plan.
|
|
212
|
+
*
|
|
213
|
+
* The default render is the effect dump — one described effect per line — which
|
|
214
|
+
* is what every verb without a plan of its own gets, byte for byte as before.
|
|
215
|
+
* A verb that declares `output.formatPlan` renders that instead: the dump is
|
|
216
|
+
* debug material (interpreter log effects, a repeated absolute path prefix on
|
|
217
|
+
* every line), and a preview is something a user is meant to read.
|
|
218
|
+
*
|
|
219
|
+
* The JSON envelope is decided by the STASHED DATA, not by the seam: `plan` is
|
|
220
|
+
* the same string array it always was, and `targets` appears only for a verb
|
|
221
|
+
* that stashed a structured plan beside it. So a verb whose renderer works off
|
|
222
|
+
* the effects alone leaves the machine-readable shape exactly as it found it.
|
|
223
|
+
*
|
|
224
|
+
* @param flags - The global flags (format selection, verbosity).
|
|
225
|
+
* @param plan - The described effects the mutation would perform.
|
|
226
|
+
* @param effects - Those same effects, unformatted, for the verb's renderer.
|
|
227
|
+
* @param seam - The verb's plan renderer + whatever it stashed, when it has one.
|
|
228
|
+
* @returns The dispatch outcome.
|
|
229
|
+
*/
|
|
230
|
+
async function renderPlan(
|
|
151
231
|
flags: GlobalFlags,
|
|
152
232
|
plan: readonly string[],
|
|
153
|
-
|
|
233
|
+
effects: readonly Effect[],
|
|
234
|
+
seam?: {
|
|
235
|
+
format: (
|
|
236
|
+
planData: unknown,
|
|
237
|
+
effects: readonly Effect[],
|
|
238
|
+
verbose: boolean,
|
|
239
|
+
) => string | Promise<string>;
|
|
240
|
+
planData: unknown;
|
|
241
|
+
},
|
|
242
|
+
): Promise<DispatchOutcome> {
|
|
154
243
|
if (flags.format === "json") {
|
|
244
|
+
const body =
|
|
245
|
+
seam?.planData === undefined
|
|
246
|
+
? { plan }
|
|
247
|
+
: { plan, targets: seam.planData };
|
|
155
248
|
return {
|
|
156
|
-
stdout: `${JSON.stringify(successEnvelope(
|
|
249
|
+
stdout: `${JSON.stringify(successEnvelope(body, { dryRun: true }))}\n`,
|
|
157
250
|
exitCode: 0,
|
|
158
251
|
};
|
|
159
252
|
}
|
|
253
|
+
if (seam !== undefined) {
|
|
254
|
+
// Awaited: the seam MAY be async, so a renderer can load formatting rules
|
|
255
|
+
// that live in another package behind a dynamic `import()` instead of
|
|
256
|
+
// charging every `--help` spawn for them (see `VerbSpec.output.formatPlan`).
|
|
257
|
+
const rendered = await seam.format(
|
|
258
|
+
seam.planData,
|
|
259
|
+
effects,
|
|
260
|
+
flags.verbose === true,
|
|
261
|
+
);
|
|
262
|
+
return { stdout: `${rendered}\n`, exitCode: 0 };
|
|
263
|
+
}
|
|
160
264
|
const body =
|
|
161
265
|
plan.length > 0
|
|
162
266
|
? `Dry run — planned effects:\n${plan.map((p) => ` - ${p}`).join("\n")}`
|
|
@@ -221,14 +325,15 @@ export async function executeVerb(
|
|
|
221
325
|
// Also hand it the interaction context so an interactive verb can pick its
|
|
222
326
|
// prompt strategy. The verb's `run` sets `mutationRuntime.exec` (the runner
|
|
223
327
|
// options) as its last act; the projector reads it back on the real-run
|
|
224
|
-
// branch
|
|
225
|
-
//
|
|
328
|
+
// branch AND on the dry-run branch, which takes `cwd` (so the preview reads
|
|
329
|
+
// the tree the run would write into) and `onEffectStart` (so the stamping
|
|
330
|
+
// transform runs, and planned byte counts match written ones). It never
|
|
331
|
+
// takes the prompt handler: a preview auto-answers prompts and so can never
|
|
332
|
+
// block on input. `--undo` stays handler-free and untouched by this seam.
|
|
226
333
|
const controller = new AbortController();
|
|
227
334
|
const interaction: InteractionRuntime = {
|
|
228
|
-
//
|
|
229
|
-
|
|
230
|
-
// mount an invisible render that blocks on stdin.
|
|
231
|
-
isTTY: process.stdin.isTTY === true && process.stderr.isTTY === true,
|
|
335
|
+
// The shared H3 gate (see cliIsTTY): stderr, never stdout.
|
|
336
|
+
isTTY: cliIsTTY(),
|
|
232
337
|
transport: "cli",
|
|
233
338
|
yes: mutation.yes,
|
|
234
339
|
signal: controller.signal,
|
|
@@ -239,12 +344,15 @@ export async function executeVerb(
|
|
|
239
344
|
};
|
|
240
345
|
const mutationRuntime: PragmaRuntime = {
|
|
241
346
|
...runtime,
|
|
242
|
-
mutation: { preview: mutation.dryRun },
|
|
347
|
+
mutation: { preview: mutation.dryRun, undo: mutation.undo },
|
|
243
348
|
interaction,
|
|
244
349
|
// Progress seam (U7): a long mutation's eager resolve/build runs before its
|
|
245
350
|
// Task is returned, so `onLog` can't reach it — stream stage lines straight
|
|
246
351
|
// to stderr instead, keeping stdout (the JSON/data stream) clean.
|
|
247
|
-
report:
|
|
352
|
+
report:
|
|
353
|
+
flags.quiet === true
|
|
354
|
+
? () => {}
|
|
355
|
+
: (message: string) => process.stderr.write(`${message}\n`),
|
|
248
356
|
};
|
|
249
357
|
const task = await Promise.resolve(
|
|
250
358
|
verb.run(params, mutationRuntime) as
|
|
@@ -252,17 +360,62 @@ export async function executeVerb(
|
|
|
252
360
|
| Promise<Task<unknown>>,
|
|
253
361
|
);
|
|
254
362
|
if (mutation.dryRun) {
|
|
255
|
-
//
|
|
256
|
-
//
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
363
|
+
// The HONEST preview (PR7): reads hit the real filesystem, writes are
|
|
364
|
+
// recorded and never executed. A mutation whose real run would die on its
|
|
365
|
+
// first template read now fails HERE too, so `--dry-run` exits nonzero
|
|
366
|
+
// exactly when the run would — the plan is a prediction, not a wish.
|
|
367
|
+
// `exec.cwd` is the same write root the real run resolves paths against,
|
|
368
|
+
// and `exec.onEffectStart` carries summon's stamping transform, so the
|
|
369
|
+
// planned byte counts are the bytes the run would actually write.
|
|
370
|
+
//
|
|
371
|
+
// NO `onLog`, deliberately. A preview that PERFORMS an effect is not a
|
|
372
|
+
// preview of that effect: routing the recorded `Log`s to stderr printed
|
|
373
|
+
// the generator's whole commentary on the way through, and the plan then
|
|
374
|
+
// listed the very same lines as rows. The interpreter prints nothing of
|
|
375
|
+
// its own when `onLog` is absent, so a log is now planned once and
|
|
376
|
+
// performed never.
|
|
377
|
+
const previewExec = mutationRuntime.exec ?? {};
|
|
378
|
+
try {
|
|
379
|
+
const { effects } = await runPreview(task, {
|
|
380
|
+
cwd: previewExec.cwd,
|
|
381
|
+
onEffectStart: previewExec.onEffectStart,
|
|
382
|
+
});
|
|
383
|
+
// A plan is the effects a mutation WOULD apply — a `Prompt` is not one,
|
|
384
|
+
// so the interactive confirm gate / answer prompts never clutter it.
|
|
385
|
+
const planned = effects.filter((effect) => effect._tag !== "Prompt");
|
|
386
|
+
// The DESCRIBED plan — what `--format json` carries and what a verb
|
|
387
|
+
// with no renderer of its own is dumped as — passes the same
|
|
388
|
+
// visibility filter the MCP payload and the human preview use. It is
|
|
389
|
+
// the filter, not the row format, that this seam shares: `plan` is
|
|
390
|
+
// structured description, so it stays `describeEffect` strings rather
|
|
391
|
+
// than terminal rows, and the two surfaces can be compared string for
|
|
392
|
+
// string (`testing/behavioral/parity.test.ts`, A6).
|
|
393
|
+
//
|
|
394
|
+
// Loaded lazily from the LIGHT `/format` subpath. A dry run is already
|
|
395
|
+
// several filesystem reads deep here; a `--help` spawn never reaches
|
|
396
|
+
// this branch, and the kernel keeps summon-core off its static graph.
|
|
397
|
+
const { visiblePlanEffects } = await import(
|
|
398
|
+
"@canonical/summon-core/format"
|
|
399
|
+
);
|
|
400
|
+
const format = verb.output.formatPlan;
|
|
401
|
+
return await renderPlan(
|
|
402
|
+
flags,
|
|
403
|
+
visiblePlanEffects(planned, flags.verbose === true).map(
|
|
404
|
+
describeEffect,
|
|
405
|
+
),
|
|
406
|
+
planned,
|
|
407
|
+
format === undefined
|
|
408
|
+
? undefined
|
|
409
|
+
: { format, planData: mutationRuntime.planData },
|
|
410
|
+
);
|
|
411
|
+
} finally {
|
|
412
|
+
// A verb that mounted an interactive session before returning its Task
|
|
413
|
+
// must be torn down on this branch too, exactly as on the real run.
|
|
414
|
+
await previewExec.dispose?.();
|
|
415
|
+
}
|
|
263
416
|
}
|
|
264
417
|
if (mutation.undo) {
|
|
265
|
-
const { undoCount } = await runUndo(task, { onLog:
|
|
418
|
+
const { undoCount } = await runUndo(task, { onLog: logSink(flags) });
|
|
266
419
|
return renderUndo(flags, undoCount);
|
|
267
420
|
}
|
|
268
421
|
// Real execution: spread the verb's runner options into the node
|
|
@@ -272,7 +425,7 @@ export async function executeVerb(
|
|
|
272
425
|
const onSigint = (): void => controller.abort();
|
|
273
426
|
process.once("SIGINT", onSigint);
|
|
274
427
|
try {
|
|
275
|
-
const value = await runTask(task, { onLog:
|
|
428
|
+
const value = await runTask(task, { onLog: logSink(flags), ...exec });
|
|
276
429
|
return renderData(verb, flags, value, {});
|
|
277
430
|
} finally {
|
|
278
431
|
process.removeListener("SIGINT", onSigint);
|
|
@@ -287,30 +440,29 @@ export async function executeVerb(
|
|
|
287
440
|
}
|
|
288
441
|
|
|
289
442
|
/**
|
|
290
|
-
*
|
|
443
|
+
* Run a verb whose params are already prepared, then perform the output I/O —
|
|
444
|
+
* the shared tail of {@link dispatch} and of a mounted subtree's own
|
|
445
|
+
* dispatcher, which extracts its params by its own rules but reuses every
|
|
446
|
+
* piece of the kernel machinery from here down: dry-run/undo/real-run
|
|
447
|
+
* interpretation, error rendering, exit codes, SIGINT.
|
|
291
448
|
*
|
|
292
|
-
* @param verb - The
|
|
293
|
-
* @param
|
|
294
|
-
*
|
|
449
|
+
* @param verb - The verb spec to run.
|
|
450
|
+
* @param getParams - Produces the coerced param bag (may throw a usage error;
|
|
451
|
+
* it is rendered exactly like a run error).
|
|
452
|
+
* @param mutation - The mutation flags.
|
|
295
453
|
* @param globalFlags - The parsed global flags.
|
|
296
454
|
* @note Impure — writes stdout/stderr and sets `process.exitCode`.
|
|
297
455
|
*/
|
|
298
|
-
|
|
456
|
+
async function runPrepared(
|
|
299
457
|
verb: VerbSpec,
|
|
300
|
-
|
|
301
|
-
|
|
458
|
+
getParams: () => Record<string, unknown>,
|
|
459
|
+
mutation: MutationFlags,
|
|
302
460
|
globalFlags: GlobalFlags,
|
|
303
461
|
): Promise<void> {
|
|
304
462
|
const runtime = bootRuntime(globalFlags);
|
|
305
463
|
let outcome: DispatchOutcome;
|
|
306
464
|
try {
|
|
307
|
-
|
|
308
|
-
const mutation: MutationFlags = {
|
|
309
|
-
dryRun: opts.dryRun === true,
|
|
310
|
-
undo: opts.undo === true,
|
|
311
|
-
yes: opts.yes === true,
|
|
312
|
-
};
|
|
313
|
-
outcome = await executeVerb(verb, params, mutation, runtime);
|
|
465
|
+
outcome = await executeVerb(verb, getParams(), mutation, runtime);
|
|
314
466
|
} catch (error) {
|
|
315
467
|
// Two clean, non-bug outcomes print the same "Cancelled." line but exit
|
|
316
468
|
// differently — both set DIRECTLY here, out-of-band from `mapExitCode`'s
|
|
@@ -332,3 +484,53 @@ export async function dispatch(
|
|
|
332
484
|
if (outcome.stderr) process.stderr.write(outcome.stderr);
|
|
333
485
|
if (outcome.exitCode !== 0) process.exitCode = outcome.exitCode;
|
|
334
486
|
}
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Dispatch a matched verb: coerce, run, and perform the output I/O.
|
|
490
|
+
*
|
|
491
|
+
* @param verb - The matched verb spec.
|
|
492
|
+
* @param positionals - Positional args from Commander.
|
|
493
|
+
* @param opts - Commander's parsed option values (incl. mutation flags).
|
|
494
|
+
* @param globalFlags - The parsed global flags.
|
|
495
|
+
* @note Impure — writes stdout/stderr and sets `process.exitCode`.
|
|
496
|
+
*/
|
|
497
|
+
export async function dispatch(
|
|
498
|
+
verb: VerbSpec,
|
|
499
|
+
positionals: readonly string[],
|
|
500
|
+
opts: Record<string, unknown>,
|
|
501
|
+
globalFlags: GlobalFlags,
|
|
502
|
+
): Promise<void> {
|
|
503
|
+
const mutation: MutationFlags = {
|
|
504
|
+
dryRun: opts.dryRun === true,
|
|
505
|
+
undo: opts.undo === true,
|
|
506
|
+
yes: opts.yes === true,
|
|
507
|
+
};
|
|
508
|
+
await runPrepared(
|
|
509
|
+
verb,
|
|
510
|
+
() => extractParams(verb.params, positionals, opts),
|
|
511
|
+
mutation,
|
|
512
|
+
globalFlags,
|
|
513
|
+
);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Dispatch a verb whose params were ALREADY extracted by the caller — the
|
|
518
|
+
* seam a mounted subtree drives: its leaf specs carry no Commander defaults
|
|
519
|
+
* (explicit stays distinguishable from default), so the mount extracts the
|
|
520
|
+
* explicit answers itself and hands them here, reusing the whole kernel tail
|
|
521
|
+
* (interpreters, rendering, exit codes, SIGINT) byte-for-byte.
|
|
522
|
+
*
|
|
523
|
+
* @param verb - The (possibly synthesized) verb spec to run.
|
|
524
|
+
* @param params - The prepared param bag.
|
|
525
|
+
* @param mutation - The mutation flags.
|
|
526
|
+
* @param globalFlags - The parsed global flags.
|
|
527
|
+
* @note Impure — writes stdout/stderr and sets `process.exitCode`.
|
|
528
|
+
*/
|
|
529
|
+
export async function dispatchPrepared(
|
|
530
|
+
verb: VerbSpec,
|
|
531
|
+
params: Record<string, unknown>,
|
|
532
|
+
mutation: MutationFlags,
|
|
533
|
+
globalFlags: GlobalFlags,
|
|
534
|
+
): Promise<void> {
|
|
535
|
+
await runPrepared(verb, () => params, mutation, globalFlags);
|
|
536
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import {
|
|
3
|
+
findValuedVerbose,
|
|
3
4
|
parseGlobalFlags,
|
|
5
|
+
readRawDetail,
|
|
4
6
|
readRawFormat,
|
|
5
7
|
stripGlobalFlags,
|
|
6
8
|
} from "./globalFlags.js";
|
|
@@ -30,7 +32,7 @@ describe("parseGlobalFlags", () => {
|
|
|
30
32
|
expect(parseGlobalFlags(["--format=json"], TTY).format).toBe("json");
|
|
31
33
|
});
|
|
32
34
|
|
|
33
|
-
it("
|
|
35
|
+
it("maps an unrecognized --format value to plain (the bin rejects it first)", () => {
|
|
34
36
|
expect(parseGlobalFlags(["--format", "text"], PIPE).format).toBe("plain");
|
|
35
37
|
});
|
|
36
38
|
|
|
@@ -68,6 +70,55 @@ describe("parseGlobalFlags", () => {
|
|
|
68
70
|
it("reads --verbose", () => {
|
|
69
71
|
expect(parseGlobalFlags(["--verbose"], TTY).verbose).toBe(true);
|
|
70
72
|
});
|
|
73
|
+
|
|
74
|
+
it("reports the raw --detail value for validation, including valueless", () => {
|
|
75
|
+
expect(readRawDetail(["--detail", "detailed"])).toBe("detailed");
|
|
76
|
+
expect(readRawDetail(["--detail=bogus"])).toBe("bogus");
|
|
77
|
+
// "" so a valueless flag is rejected, never silently defaulted.
|
|
78
|
+
expect(readRawDetail(["--detail", "--category"])).toBe("");
|
|
79
|
+
expect(readRawDetail(["block", "list"])).toBeUndefined();
|
|
80
|
+
// Past the terminator it is data, not a flag of this program.
|
|
81
|
+
expect(readRawDetail(["lookup", "--", "--detail=x"])).toBeUndefined();
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("finds a valued --verbose token so the bin can reject it", () => {
|
|
85
|
+
expect(findValuedVerbose(["--verbose=true"])).toBe("--verbose=true");
|
|
86
|
+
expect(findValuedVerbose(["--verbose"])).toBeUndefined();
|
|
87
|
+
expect(findValuedVerbose(["lookup", "--", "--verbose=x"])).toBeUndefined();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("reads --no-headers anywhere and strips it before Commander", () => {
|
|
91
|
+
expect(parseGlobalFlags(["--no-headers"], TTY).noHeaders).toBe(true);
|
|
92
|
+
expect(
|
|
93
|
+
parseGlobalFlags(["block", "list", "--no-headers"], TTY).noHeaders,
|
|
94
|
+
).toBe(true);
|
|
95
|
+
expect(parseGlobalFlags(["block", "list"], TTY).noHeaders).toBeUndefined();
|
|
96
|
+
expect(stripGlobalFlags(["block", "list", "--no-headers"])).toEqual([
|
|
97
|
+
"block",
|
|
98
|
+
"list",
|
|
99
|
+
]);
|
|
100
|
+
// Past the terminator it is the user's data, not this program's flag.
|
|
101
|
+
expect(
|
|
102
|
+
parseGlobalFlags(["block", "lookup", "--", "--no-headers"], TTY)
|
|
103
|
+
.noHeaders,
|
|
104
|
+
).toBeUndefined();
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it("reads --quiet anywhere and strips it before Commander", () => {
|
|
108
|
+
expect(parseGlobalFlags(["--quiet"], TTY).quiet).toBe(true);
|
|
109
|
+
expect(parseGlobalFlags(["sources", "update", "--quiet"], TTY).quiet).toBe(
|
|
110
|
+
true,
|
|
111
|
+
);
|
|
112
|
+
expect(parseGlobalFlags(["sources", "update"], TTY).quiet).toBeUndefined();
|
|
113
|
+
expect(stripGlobalFlags(["sources", "update", "--quiet"])).toEqual([
|
|
114
|
+
"sources",
|
|
115
|
+
"update",
|
|
116
|
+
]);
|
|
117
|
+
// Past the terminator it is the user's data, not this program's flag.
|
|
118
|
+
expect(
|
|
119
|
+
parseGlobalFlags(["graph", "query", "--", "--quiet"], TTY).quiet,
|
|
120
|
+
).toBeUndefined();
|
|
121
|
+
});
|
|
71
122
|
});
|
|
72
123
|
|
|
73
124
|
describe("stripGlobalFlags", () => {
|
|
@@ -105,3 +156,68 @@ describe("readRawFormat", () => {
|
|
|
105
156
|
expect(readRawFormat(["block", "list"])).toBeUndefined();
|
|
106
157
|
});
|
|
107
158
|
});
|
|
159
|
+
|
|
160
|
+
describe("the option terminator bounds every scan (PROTECTED)", () => {
|
|
161
|
+
// `--` means the rest is the user's data. A scanner that ignored it would
|
|
162
|
+
// both misread a flag and STRIP it, so a lookup for a block literally named
|
|
163
|
+
// `--format` would lose its own argument and change how the error rendered.
|
|
164
|
+
it("does not read a flag that appears after `--`", () => {
|
|
165
|
+
expect(readRawFormat(["block", "lookup", "--", "--format", "json"])).toBe(
|
|
166
|
+
undefined,
|
|
167
|
+
);
|
|
168
|
+
expect(
|
|
169
|
+
parseGlobalFlags(["block", "lookup", "--", "--verbose"], TTY).verbose,
|
|
170
|
+
).toBe(false);
|
|
171
|
+
expect(
|
|
172
|
+
parseGlobalFlags(["block", "lookup", "--", "--detail", "detailed"], TTY)
|
|
173
|
+
.detail,
|
|
174
|
+
).toBe(undefined);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it("hands everything from `--` onward through untouched", () => {
|
|
178
|
+
expect(
|
|
179
|
+
stripGlobalFlags(["block", "lookup", "--", "--format", "json"]),
|
|
180
|
+
).toEqual(["block", "lookup", "--", "--format", "json"]);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it("still reads a flag that appears before `--`", () => {
|
|
184
|
+
expect(
|
|
185
|
+
readRawFormat(["--format", "json", "block", "lookup", "--", "x"]),
|
|
186
|
+
).toBe("json");
|
|
187
|
+
expect(
|
|
188
|
+
stripGlobalFlags(["--format", "json", "block", "lookup", "--", "x"]),
|
|
189
|
+
).toEqual(["block", "lookup", "--", "x"]);
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
describe("a flag's value is never another flag (PROTECTED)", () => {
|
|
194
|
+
// The defect this pins: a valueless `--detail` consumed the NEXT flag as its
|
|
195
|
+
// value and stripped it, so `--detail --category css` silently answered over
|
|
196
|
+
// the whole set instead of the filtered one — a wrong answer, no diagnostic.
|
|
197
|
+
it("leaves a following flag standing when the value is absent", () => {
|
|
198
|
+
expect(
|
|
199
|
+
stripGlobalFlags(["standard", "list", "--detail", "--category", "css"]),
|
|
200
|
+
).toEqual(["standard", "list", "--category", "css"]);
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it("reports no detail for a valueless --detail", () => {
|
|
204
|
+
expect(
|
|
205
|
+
parseGlobalFlags(["standard", "list", "--detail", "--category"], TTY)
|
|
206
|
+
.detail,
|
|
207
|
+
).toBe(undefined);
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
it("still consumes a real value", () => {
|
|
211
|
+
expect(
|
|
212
|
+
stripGlobalFlags(["standard", "list", "--detail", "summary"]),
|
|
213
|
+
).toEqual(["standard", "list"]);
|
|
214
|
+
expect(
|
|
215
|
+
parseGlobalFlags(["standard", "list", "--detail", "summary"], TTY).detail,
|
|
216
|
+
).toBe("summary");
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
it("reports a valueless --format as empty so the caller rejects it", () => {
|
|
220
|
+
// `""`, not `undefined` — `undefined` would fall through to the default.
|
|
221
|
+
expect(readRawFormat(["--format", "--verbose"])).toBe("");
|
|
222
|
+
});
|
|
223
|
+
});
|