@canonical/pragma-cli 0.34.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 +20 -22
- package/pragma.conf.ts +249 -60
- package/src/bin.ts +267 -82
- package/src/capabilities/block.parity.test.ts +6 -3
- package/src/capabilities/capabilities/capabilities.render.ts +1 -1
- package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
- package/src/capabilities/capabilities/catalog.ts +3 -3
- package/src/capabilities/capabilities/hints.ts +32 -7
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +35 -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 +4 -4
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/config/collectConfigShow.ts +3 -3
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -10
- 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 +8 -7
- package/src/capabilities/config/show.render.ts +1 -1
- package/src/capabilities/config/show.verb.ts +9 -6
- package/src/capabilities/config/types.ts +18 -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 +25 -11
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +36 -61
- package/src/capabilities/create/create.mcp.test.ts +89 -5
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +433 -219
- package/src/capabilities/create/create.verb.ts +297 -328
- 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 +7 -4
- 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 +23 -35
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +20 -0
- package/src/capabilities/distribution.test.ts +3 -1
- package/src/capabilities/distribution.ts +10 -15
- package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +6 -4
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
- 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 +18 -7
- package/src/capabilities/doctor/doctor.render.ts +43 -19
- package/src/capabilities/doctor/doctor.test.ts +123 -34
- package/src/capabilities/doctor/doctor.verb.ts +3 -3
- package/src/capabilities/doctor/runChecks.ts +62 -63
- package/src/capabilities/doctor/types.ts +20 -4
- package/src/capabilities/emptyRecovery.test.ts +13 -8
- 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 -6
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +3 -3
- package/src/capabilities/graph/runQuery.ts +2 -3
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/info/collectInfo.ts +5 -4
- package/src/capabilities/info/info.render.ts +1 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/lazy.test.ts +32 -0
- 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 +27 -68
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +4 -5
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -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 +396 -326
- 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 +223 -71
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- 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 +37 -5
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +3 -4
- package/src/capabilities/sources/collectStatus.ts +7 -2
- package/src/capabilities/sources/index.ts +1 -1
- package/src/capabilities/sources/installSkills.ts +84 -7
- package/src/capabilities/sources/runUpdate.ts +53 -21
- package/src/capabilities/sources/sources.test.ts +154 -2
- package/src/capabilities/sources/status.render.ts +1 -1
- package/src/capabilities/sources/status.verb.ts +1 -1
- package/src/capabilities/sources/update.render.ts +1 -1
- package/src/capabilities/sources/update.verb.ts +1 -1
- package/src/capabilities/surface.test.ts +134 -17
- 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 +1 -1
- 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.ts +31 -1
- package/src/identity.test.ts +40 -25
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +1 -1
- package/src/kernel/completion/entitySource.test.ts +1 -1
- package/src/kernel/completion/entitySource.ts +21 -8
- package/src/kernel/completion/model.test.ts +164 -12
- package/src/kernel/completion/model.ts +94 -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 +34 -26
- package/src/kernel/completion/shellDrive.test.ts +28 -9
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +7 -0
- package/src/kernel/config/defaults.test.ts +25 -2
- package/src/kernel/config/defaults.ts +4 -3
- package/src/kernel/config/evaluateProjectConfig.ts +31 -8
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -88
- package/src/kernel/config/index.ts +1 -1
- package/src/kernel/config/readConfig.test.ts +6 -3
- package/src/kernel/config/readConfig.ts +1 -1
- package/src/kernel/config/schema.ts +3 -1
- package/src/kernel/config/types.ts +3 -1
- package/src/kernel/copy.test.ts +34 -4
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +5 -2
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -5
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/recovery.ts +14 -0
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +21 -1
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +130 -1
- package/src/kernel/packs/compile.ts +93 -3
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +66 -14
- package/src/kernel/packs/renderPack.ts +24 -5
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +112 -18
- package/src/kernel/packs/runBodies.ts +2 -3
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +18 -1
- 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 +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +42 -3
- package/src/kernel/packs/types.ts +13 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +147 -12
- 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 +160 -3
- package/src/kernel/project/cli/dispatch.ts +222 -42
- 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 +13 -0
- package/src/kernel/project/cli/rootHelp.ts +41 -12
- 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 +7 -4
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +2 -2
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +5 -2
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/source.ts +2 -2
- package/src/kernel/project/mcp/registerVerb.ts +35 -9
- package/src/kernel/project/mcp/serve.ts +2 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/renderers.test.ts +243 -6
- 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/buildIndex.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded.ts +3 -3
- package/src/kernel/runtime/graphpack/manifest.ts +1 -1
- package/src/kernel/runtime/graphpack/read.ts +1 -2
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +472 -28
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +2 -2
- package/src/kernel/runtime/refs/resolve.ts +4 -4
- package/src/kernel/runtime/storeReadiness.ts +1 -2
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
- package/src/kernel/spec/emitReference.ts +105 -30
- package/src/kernel/spec/emitSurface.ts +48 -6
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/types.ts +248 -4
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/journeys.cli.test.ts +1 -1
- package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
- 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.packageStories.test.ts +4 -4
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +1 -1
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/graph/canonical.ts +88 -2
- package/src/testing/fixtures/graph/defaultPack.ts +1 -1
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/projectMcp.ts +32 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +20 -9
- package/src/testing/perf/budgets.ts +58 -9
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +505 -23
- 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/dist/pragma +0 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
- package/src/capabilities/create/templates.embedded.generated.ts +0 -28
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -105,6 +105,121 @@ describe("buildProgram — default-true boolean negation (B9)", () => {
|
|
|
105
105
|
});
|
|
106
106
|
});
|
|
107
107
|
|
|
108
|
+
describe("buildProgram — one spelling per flag", () => {
|
|
109
|
+
it("registers no short option anywhere in the tree", () => {
|
|
110
|
+
const program = projectCli([fixtureModule]);
|
|
111
|
+
const walk = (cmd: import("commander").Command): void => {
|
|
112
|
+
expect(cmd.options.some((o) => o.short !== undefined)).toBe(false);
|
|
113
|
+
for (const child of cmd.commands) walk(child);
|
|
114
|
+
};
|
|
115
|
+
walk(program);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it("still answers --help while -v/-h reject as unknown options", async () => {
|
|
119
|
+
const spyErr = vi
|
|
120
|
+
.spyOn(process.stderr, "write")
|
|
121
|
+
.mockImplementation(() => true);
|
|
122
|
+
const spyOut = vi
|
|
123
|
+
.spyOn(process.stdout, "write")
|
|
124
|
+
.mockImplementation(() => true);
|
|
125
|
+
await expect(
|
|
126
|
+
projectCli([fixtureModule]).parseAsync(["widget", "--help"], {
|
|
127
|
+
from: "user",
|
|
128
|
+
}),
|
|
129
|
+
).rejects.toMatchObject({ code: "commander.helpDisplayed" });
|
|
130
|
+
await expect(
|
|
131
|
+
projectCli([fixtureModule]).parseAsync(["widget", "list", "-h"], {
|
|
132
|
+
from: "user",
|
|
133
|
+
}),
|
|
134
|
+
).rejects.toMatchObject({ code: "commander.unknownOption" });
|
|
135
|
+
await expect(
|
|
136
|
+
projectCli([fixtureModule]).parseAsync(["widget", "list", "-v"], {
|
|
137
|
+
from: "user",
|
|
138
|
+
}),
|
|
139
|
+
).rejects.toMatchObject({ code: "commander.unknownOption" });
|
|
140
|
+
spyErr.mockRestore();
|
|
141
|
+
spyOut.mockRestore();
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
describe("buildProgram — repeatable filter flags", () => {
|
|
146
|
+
/** A verb with a repeatable enum filter and a repeatable string filter. */
|
|
147
|
+
const filterVerb: VerbSpec = {
|
|
148
|
+
path: ["thing", "list"],
|
|
149
|
+
summary: "thing list summary",
|
|
150
|
+
params: [
|
|
151
|
+
{
|
|
152
|
+
kind: "enum",
|
|
153
|
+
name: "category",
|
|
154
|
+
doc: "Filter by category.",
|
|
155
|
+
values: ["css", "git"],
|
|
156
|
+
repeatable: true,
|
|
157
|
+
},
|
|
158
|
+
{ kind: "string", name: "tag", doc: "Filter by tag.", repeatable: true },
|
|
159
|
+
],
|
|
160
|
+
output: {
|
|
161
|
+
formatters: {
|
|
162
|
+
plain: (d) => JSON.stringify(d),
|
|
163
|
+
llm: (d) => JSON.stringify(d),
|
|
164
|
+
json: (d) => JSON.stringify(d),
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
capability: { needsStore: false, mutates: false, mcp: { expose: true } },
|
|
168
|
+
run: async (params) => params,
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
/** Parse argv and capture the option bag the action receives. */
|
|
172
|
+
async function optsFor(argv: string[]): Promise<Record<string, unknown>> {
|
|
173
|
+
let seen: Record<string, unknown> = {};
|
|
174
|
+
const program = projectCli([
|
|
175
|
+
{
|
|
176
|
+
name: "thing",
|
|
177
|
+
verbs: [
|
|
178
|
+
{
|
|
179
|
+
...filterVerb,
|
|
180
|
+
run: async (params) => {
|
|
181
|
+
seen = params;
|
|
182
|
+
return null;
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
],
|
|
186
|
+
},
|
|
187
|
+
]);
|
|
188
|
+
await program.parseAsync(["thing", "list", ...argv], { from: "user" });
|
|
189
|
+
return seen;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
it("accumulates a repeated filter into the union, never last-wins", async () => {
|
|
193
|
+
const params = await optsFor([
|
|
194
|
+
"--category",
|
|
195
|
+
"css",
|
|
196
|
+
"--category",
|
|
197
|
+
"git",
|
|
198
|
+
"--tag",
|
|
199
|
+
"a",
|
|
200
|
+
"--tag",
|
|
201
|
+
"b",
|
|
202
|
+
]);
|
|
203
|
+
expect(params.category).toEqual(["css", "git"]);
|
|
204
|
+
expect(params.tag).toEqual(["a", "b"]);
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it("keeps a single occurrence a one-element array and validates enum values", async () => {
|
|
208
|
+
const params = await optsFor(["--category", "css"]);
|
|
209
|
+
expect(params.category).toEqual(["css"]);
|
|
210
|
+
const program = projectCli([{ name: "thing", verbs: [filterVerb] }]);
|
|
211
|
+
const spy = vi
|
|
212
|
+
.spyOn(process.stderr, "write")
|
|
213
|
+
.mockImplementation(() => true);
|
|
214
|
+
await expect(
|
|
215
|
+
program.parseAsync(["thing", "list", "--category", "bogus"], {
|
|
216
|
+
from: "user",
|
|
217
|
+
}),
|
|
218
|
+
).rejects.toMatchObject({ code: "commander.invalidArgument" });
|
|
219
|
+
spy.mockRestore();
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
|
|
108
223
|
describe("buildProgram — early exits", () => {
|
|
109
224
|
it("throws commander.version for --version, writing the version", async () => {
|
|
110
225
|
const program = projectCli([fixtureModule]);
|
|
@@ -372,11 +487,17 @@ describe("buildProgram — sub-verb-only noun invoked bare (U2)", () => {
|
|
|
372
487
|
});
|
|
373
488
|
|
|
374
489
|
describe("formatRootHelp — grouping", () => {
|
|
375
|
-
const help = formatRootHelp(
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
490
|
+
const help = formatRootHelp(
|
|
491
|
+
"pragma",
|
|
492
|
+
"pragma test",
|
|
493
|
+
[
|
|
494
|
+
makeVerb(["info"]),
|
|
495
|
+
makeVerb(["config", "show"]),
|
|
496
|
+
makeVerb(["block", "list"]),
|
|
497
|
+
],
|
|
498
|
+
"1.2.3",
|
|
499
|
+
"https://example.test/issues",
|
|
500
|
+
);
|
|
380
501
|
|
|
381
502
|
it("leads with the uncurated nouns, untitled, under the usage line", () => {
|
|
382
503
|
// `block` is not in the kernel's curated table, so it leads the page with
|
|
@@ -389,11 +510,13 @@ describe("formatRootHelp — grouping", () => {
|
|
|
389
510
|
expect(help.match(/pragma test/g)).toHaveLength(1);
|
|
390
511
|
});
|
|
391
512
|
|
|
392
|
-
it("lists the live nouns and
|
|
513
|
+
it("lists the live nouns, and only those", () => {
|
|
393
514
|
expect(help).toContain("block");
|
|
394
515
|
expect(help).toContain("config");
|
|
395
516
|
expect(help).toContain("info");
|
|
396
|
-
|
|
517
|
+
// `mcp` is curated for PLACEMENT, not conjured into existence: a registry
|
|
518
|
+
// without an mcp verb has no mcp row.
|
|
519
|
+
expect(help).not.toContain("mcp");
|
|
397
520
|
});
|
|
398
521
|
|
|
399
522
|
it("drops nouns that are not present", () => {
|
|
@@ -410,7 +533,20 @@ describe("formatRootHelp — grouping", () => {
|
|
|
410
533
|
|
|
411
534
|
it("renders the unified root page (restyle golden)", () => {
|
|
412
535
|
expect(help).toMatchInlineSnapshot(`
|
|
413
|
-
"
|
|
536
|
+
" _
|
|
537
|
+
/' \`\\
|
|
538
|
+
/' )
|
|
539
|
+
/' (___,/'____ ____ ____ ,__________ ____
|
|
540
|
+
/' )' )--/' ) /' ) /' ) ) /' )
|
|
541
|
+
/' /' /' /' /' /' /' /' /' /' /'
|
|
542
|
+
(,/' /' (___,/(__(___,/(__/' /' /(__(___,/(__
|
|
543
|
+
/'
|
|
544
|
+
/ /'
|
|
545
|
+
(___,/'
|
|
546
|
+
|
|
547
|
+
pragma v1.2.3 — pragma test
|
|
548
|
+
|
|
549
|
+
This is a preview version. Issues and suggestions: https://example.test/issues
|
|
414
550
|
|
|
415
551
|
Usage: pragma <command> [subcommand] [flags]
|
|
416
552
|
|
|
@@ -420,13 +556,12 @@ describe("formatRootHelp — grouping", () => {
|
|
|
420
556
|
config Read and write pragma configuration
|
|
421
557
|
info Show version, config, and update status
|
|
422
558
|
|
|
423
|
-
For AI agents
|
|
424
|
-
mcp Start the MCP server over stdio
|
|
425
|
-
|
|
426
559
|
Global flags
|
|
427
560
|
--format <plain|llm|json> Select output format (llm = condensed Markdown for agents)
|
|
428
561
|
--detail <level> Progressive-disclosure level (summary, standard, detailed)
|
|
429
|
-
--
|
|
562
|
+
--no-headers Hide the table header row in plain output
|
|
563
|
+
--quiet Suppress success and progress output (errors still print)
|
|
564
|
+
--verbose Diagnostic output on stderr (sources update)
|
|
430
565
|
--help Show help (works on any command)
|
|
431
566
|
--version Show the CLI version
|
|
432
567
|
|
|
@@ -11,11 +11,17 @@
|
|
|
11
11
|
* the v1 cli-core `registerAll`, retargeted at the grammar.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import { Command, Option } from "commander";
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
import { Command, InvalidArgumentError, Option } from "commander";
|
|
15
|
+
import {
|
|
16
|
+
BIN_NAME,
|
|
17
|
+
ISSUES_URL,
|
|
18
|
+
PROGRAM_DESCRIPTION,
|
|
19
|
+
VERSION,
|
|
20
|
+
} from "../../../constants.js";
|
|
21
|
+
import type { GlobalFlags } from "../../runtime/index.js";
|
|
22
|
+
import { kebabCase } from "../../spec/index.js";
|
|
23
|
+
import type { CliProjection, ParamSpec, VerbSpec } from "../../spec/types.js";
|
|
24
|
+
import { MUTATION_FLAG_DOCS, negationFlagDoc } from "./constants.js";
|
|
19
25
|
import { dispatch } from "./dispatch.js";
|
|
20
26
|
import { formatRootHelp } from "./rootHelp.js";
|
|
21
27
|
import { formatNounHelp, formatVerbHelp } from "./verbHelp.js";
|
|
@@ -30,6 +36,15 @@ export interface BuildProgramOptions {
|
|
|
30
36
|
readonly description?: string;
|
|
31
37
|
/** Version string for `--version`. */
|
|
32
38
|
readonly version?: string;
|
|
39
|
+
/** Where root help's preview notice sends feedback. */
|
|
40
|
+
readonly issuesUrl?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Module-owned noun mounts (see `CapabilityModule.cliProjection`), keyed by
|
|
43
|
+
* noun. A mounted noun's parent command is created here exactly once and
|
|
44
|
+
* handed to the module's `mount` — the module owns everything beneath it;
|
|
45
|
+
* its verbs stay the binding-level grammar for help/surface/completion.
|
|
46
|
+
*/
|
|
47
|
+
readonly mounts?: ReadonlyMap<string, CliProjection>;
|
|
33
48
|
}
|
|
34
49
|
|
|
35
50
|
/** The positional usage token for a param (`<name>` / `[name]`, variadic `...`). */
|
|
@@ -61,7 +76,30 @@ function registerParams(command: Command, verb: VerbSpec): void {
|
|
|
61
76
|
for (const param of verb.params) {
|
|
62
77
|
if (param.positional) continue;
|
|
63
78
|
const spec = flagSpec(param);
|
|
64
|
-
if (
|
|
79
|
+
if (
|
|
80
|
+
(param.kind === "enum" || param.kind === "string") &&
|
|
81
|
+
param.repeatable === true
|
|
82
|
+
) {
|
|
83
|
+
// A repeatable flag ACCUMULATES — Commander's default keeps only the
|
|
84
|
+
// last occurrence, which silently drops data. The collector validates
|
|
85
|
+
// an enum's values itself, since a custom parser replaces the parser
|
|
86
|
+
// `.choices()` would install.
|
|
87
|
+
command.addOption(
|
|
88
|
+
new Option(spec, param.doc).argParser(
|
|
89
|
+
(value: string, previous: string[] | undefined) => {
|
|
90
|
+
if (
|
|
91
|
+
param.kind === "enum" &&
|
|
92
|
+
!(param.values as readonly string[]).includes(value)
|
|
93
|
+
) {
|
|
94
|
+
throw new InvalidArgumentError(
|
|
95
|
+
`Allowed choices are ${param.values.join(", ")}.`,
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
return [...(previous ?? []), value];
|
|
99
|
+
},
|
|
100
|
+
),
|
|
101
|
+
);
|
|
102
|
+
} else if (param.kind === "enum") {
|
|
65
103
|
const option = new Option(spec, param.doc).choices([...param.values]);
|
|
66
104
|
if (param.default !== undefined) option.default(param.default);
|
|
67
105
|
command.addOption(option);
|
|
@@ -70,23 +108,28 @@ function registerParams(command: Command, verb: VerbSpec): void {
|
|
|
70
108
|
} else {
|
|
71
109
|
command.option(spec, param.doc);
|
|
72
110
|
}
|
|
73
|
-
// B9: a default-`true` boolean is otherwise undisableable — the grammar
|
|
74
|
-
// no negation form, so
|
|
75
|
-
//
|
|
111
|
+
// B9: a default-`true` boolean is otherwise undisableable — the grammar
|
|
112
|
+
// has no negation form, so a kernel-registered default-true boolean could
|
|
113
|
+
// never be turned off. Register a paired `--no-<flag>` so it can:
|
|
76
114
|
// Commander keeps the `true` default and lets `--no-<flag>` set it false
|
|
77
|
-
// (verified: an unset default-false boolean is left alone).
|
|
78
|
-
// PARSE convenience, never a ParamSpec —
|
|
79
|
-
//
|
|
115
|
+
// (verified: an unset default-false boolean is left alone). For verbs
|
|
116
|
+
// registered HERE this is a CLI PARSE convenience, never a ParamSpec —
|
|
117
|
+
// `emitSurface`/MCP/the covenant keep the positive kebab token and
|
|
118
|
+
// negation stays additive. A MOUNTED noun (`create`) never reaches this
|
|
119
|
+
// loop: its leaves register through the projection's `buildOptionInfo`,
|
|
120
|
+
// where a default-true confirm registers ONLY the `--no-` form — so its
|
|
121
|
+
// covenant/reference tokens come from the module's registered-syntax
|
|
122
|
+
// seam, not this convention (L-CIS-2).
|
|
80
123
|
if (param.kind === "boolean" && param.default === true) {
|
|
81
124
|
const flag = kebabCase(param.name);
|
|
82
|
-
command.option(`--no-${flag}`,
|
|
125
|
+
command.option(`--no-${flag}`, negationFlagDoc(flag));
|
|
83
126
|
}
|
|
84
127
|
}
|
|
85
128
|
|
|
86
129
|
if (verb.capability.mutates) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
130
|
+
for (const { flag, doc } of MUTATION_FLAG_DOCS) {
|
|
131
|
+
command.option(flag, doc);
|
|
132
|
+
}
|
|
90
133
|
}
|
|
91
134
|
}
|
|
92
135
|
|
|
@@ -241,15 +284,21 @@ export function buildProgram(
|
|
|
241
284
|
const programName = options.programName ?? BIN_NAME;
|
|
242
285
|
const description = options.description ?? PROGRAM_DESCRIPTION;
|
|
243
286
|
const version = options.version ?? VERSION;
|
|
287
|
+
const issuesUrl = options.issuesUrl ?? ISSUES_URL;
|
|
244
288
|
const live = verbs.filter((verb) => !verb.hidden);
|
|
245
289
|
|
|
246
290
|
const program = new Command();
|
|
247
291
|
program.name(programName).description(description);
|
|
248
|
-
|
|
292
|
+
// One spelling per flag: no shorts. `--version` drops `-v` (which reads as
|
|
293
|
+
// *verbose* everywhere else), and the help option is `--help` alone —
|
|
294
|
+
// subcommands created from here on inherit it (Commander copies the help
|
|
295
|
+
// option into children at creation), including a mounted subtree's.
|
|
296
|
+
program.version(version, "--version");
|
|
297
|
+
program.helpOption("--help", "Show help (works on any command)");
|
|
249
298
|
program.enablePositionalOptions();
|
|
250
299
|
program.exitOverride();
|
|
251
300
|
useDesignedHelp(program, () =>
|
|
252
|
-
formatRootHelp(programName, description, live),
|
|
301
|
+
formatRootHelp(programName, description, live, version, issuesUrl),
|
|
253
302
|
);
|
|
254
303
|
|
|
255
304
|
const groups = new Map<string, VerbSpec[]>();
|
|
@@ -264,6 +313,16 @@ export function buildProgram(
|
|
|
264
313
|
const selfVerbs = bucket.filter((v) => v.path.length === 1);
|
|
265
314
|
const subVerbs = bucket.filter((v) => v.path.length > 1);
|
|
266
315
|
|
|
316
|
+
// A module-owned mount replaces the generic per-verb attachment for its
|
|
317
|
+
// noun: create the parent once, hand it over, move on.
|
|
318
|
+
const mounted = options.mounts?.get(noun);
|
|
319
|
+
if (mounted) {
|
|
320
|
+
const parent = program.command(noun);
|
|
321
|
+
parent.enablePositionalOptions();
|
|
322
|
+
mounted.mount(parent, { globalFlags: options.globalFlags, programName });
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
|
|
267
326
|
// Pure self-verb noun(s) — attach each leaf directly to the root, as before.
|
|
268
327
|
if (subVerbs.length === 0) {
|
|
269
328
|
for (const verb of selfVerbs) {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI projector constants — the flag/doc pairs that must read identically
|
|
3
|
+
* wherever they surface.
|
|
4
|
+
*
|
|
5
|
+
* The mutation flags are auto-injected onto every mutating verb by
|
|
6
|
+
* `registerParams` (and by the mounted create subtree's own registration),
|
|
7
|
+
* and `formatVerbHelp` renders them in the Flags block; a default-true
|
|
8
|
+
* boolean's `--no-` negation is likewise both registered and rendered. Help
|
|
9
|
+
* and registration deriving from the SAME rows here is what keeps a page
|
|
10
|
+
* from denying a flag that parses — the defect this file exists to prevent.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** One auto-injected flag: the token and the doc both surfaces print. */
|
|
14
|
+
export interface FlagDoc {
|
|
15
|
+
readonly flag: string;
|
|
16
|
+
readonly doc: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** The three mutation flags every mutating verb accepts, in display order. */
|
|
20
|
+
export const MUTATION_FLAG_DOCS: readonly FlagDoc[] = [
|
|
21
|
+
{ flag: "--dry-run", doc: "Preview effects without applying them" },
|
|
22
|
+
{ flag: "--undo", doc: "Reverse a previous run of this command" },
|
|
23
|
+
{ flag: "--yes", doc: "Apply without an interactive confirmation" },
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The doc for the `--no-<flag>` negation a default-true boolean registers.
|
|
28
|
+
*
|
|
29
|
+
* @param kebab - The positive flag's kebab token (no dashes).
|
|
30
|
+
* @returns The doc string registration and help share.
|
|
31
|
+
*/
|
|
32
|
+
export function negationFlagDoc(kebab: string): string {
|
|
33
|
+
return `Disable --${kebab} (on by default).`;
|
|
34
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { existsSync, mkdtempSync, readdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { fail, succeed } from "@canonical/task";
|
|
4
|
+
import { $, fail, gen, log, mkdir, succeed, writeFile } from "@canonical/task";
|
|
5
5
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
6
6
|
import { fixturePreviewModule } from "../../../testing/fixtures/fixtureCapability.js";
|
|
7
7
|
import { PragmaError } from "../../error/PragmaError.js";
|
|
8
8
|
import { bootRuntime } from "../../runtime/boot.js";
|
|
9
9
|
import type { GlobalFlags } from "../../runtime/types.js";
|
|
10
10
|
import type { ParamSpec, VerbSpec } from "../../spec/types.js";
|
|
11
|
-
import { dispatch, executeVerb, extractParams } from "./dispatch.js";
|
|
11
|
+
import { cliIsTTY, dispatch, executeVerb, extractParams } from "./dispatch.js";
|
|
12
12
|
|
|
13
13
|
/** The read-then-write mutation the honest-preview guards drive. */
|
|
14
14
|
const graft = fixturePreviewModule.verbs[0] as VerbSpec;
|
|
@@ -150,6 +150,46 @@ describe("executeVerb — mutations", () => {
|
|
|
150
150
|
expect(outcome.stdout).toContain("Dry run");
|
|
151
151
|
});
|
|
152
152
|
|
|
153
|
+
it("a verb with NO formatPlan renders the effect dump, byte for byte", async () => {
|
|
154
|
+
// The `formatPlan` seam is opt-in, and opting out is the majority case.
|
|
155
|
+
// These are the exact bytes the kernel produced before any verb had a
|
|
156
|
+
// renderer of its own — the whole literal, not a substring — so a verb
|
|
157
|
+
// that declares nothing can never be re-rendered by accident.
|
|
158
|
+
const dumped: VerbSpec = {
|
|
159
|
+
...make,
|
|
160
|
+
run: () =>
|
|
161
|
+
gen(function* () {
|
|
162
|
+
yield* $(log("info", "starting"));
|
|
163
|
+
yield* $(mkdir("out"));
|
|
164
|
+
yield* $(writeFile("out/thing.txt", "hello"));
|
|
165
|
+
return { dumped: true };
|
|
166
|
+
}),
|
|
167
|
+
};
|
|
168
|
+
const outcome = await executeVerb(
|
|
169
|
+
dumped,
|
|
170
|
+
{},
|
|
171
|
+
{ dryRun: true, undo: false, yes: false },
|
|
172
|
+
bootRuntime(PLAIN, mkdtempSync(join(tmpdir(), "pragma-dump-"))),
|
|
173
|
+
);
|
|
174
|
+
expect(outcome.stdout).toBe(
|
|
175
|
+
"Dry run — planned effects:\n" +
|
|
176
|
+
" - Log [info]: starting\n" +
|
|
177
|
+
" - Created out/\n" +
|
|
178
|
+
" - Write file: out/thing.txt (5 bytes)\n",
|
|
179
|
+
);
|
|
180
|
+
expect(outcome.exitCode).toBe(0);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it("an empty plan renders the no-effects line, byte for byte", async () => {
|
|
184
|
+
const outcome = await executeVerb(
|
|
185
|
+
make,
|
|
186
|
+
{},
|
|
187
|
+
{ dryRun: true, undo: false, yes: false },
|
|
188
|
+
bootRuntime(PLAIN),
|
|
189
|
+
);
|
|
190
|
+
expect(outcome.stdout).toBe("Dry run — no effects.\n");
|
|
191
|
+
});
|
|
192
|
+
|
|
153
193
|
it("reports undo count under --undo", async () => {
|
|
154
194
|
const outcome = await executeVerb(
|
|
155
195
|
make,
|
|
@@ -161,6 +201,104 @@ describe("executeVerb — mutations", () => {
|
|
|
161
201
|
});
|
|
162
202
|
});
|
|
163
203
|
|
|
204
|
+
describe("--quiet — success is silent, failure is not", () => {
|
|
205
|
+
// The rule the flag has to keep: everything muted is success-path narration
|
|
206
|
+
// (the calm zero-record notice, a mutation's stage lines). Error rendering
|
|
207
|
+
// does not route through either seam, so no failure can hide behind it.
|
|
208
|
+
const QUIET: GlobalFlags = { ...PLAIN, quiet: true };
|
|
209
|
+
const savedExit = process.exitCode;
|
|
210
|
+
afterEach(() => {
|
|
211
|
+
process.exitCode = savedExit;
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
const emptyList: VerbSpec = {
|
|
215
|
+
...echo,
|
|
216
|
+
params: [],
|
|
217
|
+
output: {
|
|
218
|
+
formatters: {
|
|
219
|
+
...passthroughFormatters,
|
|
220
|
+
plain: () => "",
|
|
221
|
+
emptyNotice: () => "No results.",
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
run: async () => [],
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
it("mutes the empty-state notice but keeps stdout and the exit code", async () => {
|
|
228
|
+
const loud = await executeVerb(
|
|
229
|
+
emptyList,
|
|
230
|
+
{},
|
|
231
|
+
{ dryRun: false, undo: false, yes: false },
|
|
232
|
+
bootRuntime(PLAIN),
|
|
233
|
+
);
|
|
234
|
+
expect(loud.stderr).toBe("No results.\n");
|
|
235
|
+
|
|
236
|
+
const quiet = await executeVerb(
|
|
237
|
+
emptyList,
|
|
238
|
+
{},
|
|
239
|
+
{ dryRun: false, undo: false, yes: false },
|
|
240
|
+
bootRuntime(QUIET),
|
|
241
|
+
);
|
|
242
|
+
expect(quiet.stderr).toBeUndefined();
|
|
243
|
+
expect(quiet.stdout).toBe(loud.stdout);
|
|
244
|
+
expect(quiet.exitCode).toBe(0);
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
it("mutes a mutation's progress lines", async () => {
|
|
248
|
+
const reporting: VerbSpec = {
|
|
249
|
+
...make,
|
|
250
|
+
run: (_params, runtime) => {
|
|
251
|
+
runtime.report?.("Resolving the pack…");
|
|
252
|
+
return succeed({ made: true });
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
const errs: string[] = [];
|
|
256
|
+
const spy = vi
|
|
257
|
+
.spyOn(process.stderr, "write")
|
|
258
|
+
.mockImplementation((chunk: string | Uint8Array) => {
|
|
259
|
+
errs.push(String(chunk));
|
|
260
|
+
return true;
|
|
261
|
+
});
|
|
262
|
+
await executeVerb(
|
|
263
|
+
reporting,
|
|
264
|
+
{},
|
|
265
|
+
{ dryRun: false, undo: false, yes: true },
|
|
266
|
+
bootRuntime(PLAIN),
|
|
267
|
+
);
|
|
268
|
+
const loud = errs.join("");
|
|
269
|
+
errs.length = 0;
|
|
270
|
+
await executeVerb(
|
|
271
|
+
reporting,
|
|
272
|
+
{},
|
|
273
|
+
{ dryRun: false, undo: false, yes: true },
|
|
274
|
+
bootRuntime(QUIET),
|
|
275
|
+
);
|
|
276
|
+
spy.mockRestore();
|
|
277
|
+
expect(loud).toContain("Resolving the pack…");
|
|
278
|
+
expect(errs.join("")).toBe("");
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
it("still renders the error, with its exit code", async () => {
|
|
282
|
+
const failing: VerbSpec = {
|
|
283
|
+
...echo,
|
|
284
|
+
run: async () => {
|
|
285
|
+
throw PragmaError.notFound("thing", "Nope");
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
const errs: string[] = [];
|
|
289
|
+
const spy = vi
|
|
290
|
+
.spyOn(process.stderr, "write")
|
|
291
|
+
.mockImplementation((chunk: string | Uint8Array) => {
|
|
292
|
+
errs.push(String(chunk));
|
|
293
|
+
return true;
|
|
294
|
+
});
|
|
295
|
+
await dispatch(failing, ["x"], {}, QUIET);
|
|
296
|
+
spy.mockRestore();
|
|
297
|
+
expect(errs.join("")).toContain('thing "Nope" not found.');
|
|
298
|
+
expect(process.exitCode).toBe(1);
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
|
|
164
302
|
describe("dispatch — errors", () => {
|
|
165
303
|
const savedExit = process.exitCode;
|
|
166
304
|
afterEach(() => {
|
|
@@ -190,7 +328,7 @@ describe("dispatch — errors", () => {
|
|
|
190
328
|
it("renders a declined confirm gate as a clean cancellation, not a bug report", async () => {
|
|
191
329
|
// A TTY user declining execute()'s "Proceed?" gate fails the task with
|
|
192
330
|
// GENERATOR_CANCELLED; the boundary must treat it as a clean cancel, never
|
|
193
|
-
// the scary INTERNAL_ERROR "
|
|
331
|
+
// the scary INTERNAL_ERROR "report this issue" / exit 1.
|
|
194
332
|
const cancelling: VerbSpec = {
|
|
195
333
|
...make,
|
|
196
334
|
run: () => fail({ code: "GENERATOR_CANCELLED", message: "Cancelled." }),
|
|
@@ -352,4 +490,23 @@ describe("executeVerb — interactivity gate (H3)", () => {
|
|
|
352
490
|
);
|
|
353
491
|
expect(sink.isTTY).toBe(true);
|
|
354
492
|
});
|
|
493
|
+
|
|
494
|
+
it("cliIsTTY IS the stdin+stderr conjunction — the one gate both callers read", () => {
|
|
495
|
+
// The mount's create decision reads the same exported function this
|
|
496
|
+
// describe drives through executeVerb, so pinning the truth table here
|
|
497
|
+
// pins BOTH callers (nothing is left to keep two copies in step).
|
|
498
|
+
const cases: Array<[boolean, boolean, boolean, boolean]> = [
|
|
499
|
+
[true, true, false, true], // stdout is irrelevant…
|
|
500
|
+
[true, true, true, true],
|
|
501
|
+
[false, true, true, false], // …stdin is required…
|
|
502
|
+
[true, false, true, false], // …and so is stderr.
|
|
503
|
+
[false, false, false, false],
|
|
504
|
+
];
|
|
505
|
+
for (const [stdin, stderr, stdout, expected] of cases) {
|
|
506
|
+
setTTY(process.stdin, stdin);
|
|
507
|
+
setTTY(process.stderr, stderr);
|
|
508
|
+
setTTY(process.stdout, stdout);
|
|
509
|
+
expect(cliIsTTY(), `stdin=${stdin} stderr=${stderr}`).toBe(expected);
|
|
510
|
+
}
|
|
511
|
+
});
|
|
355
512
|
});
|