@canonical/pragma-cli 0.33.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +293 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +83 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +66 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +53 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +168 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +193 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +334 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +263 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +195 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +82 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +25 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +197 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +85 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +25 -24
- package/pragma.conf.ts +853 -0
- package/src/bin.ts +276 -82
- package/src/capabilities/block.parity.test.ts +253 -0
- package/src/capabilities/capabilities/capabilities.render.ts +4 -3
- package/src/capabilities/capabilities/capabilities.verb.ts +32 -14
- package/src/capabilities/capabilities/catalog.ts +20 -12
- package/src/capabilities/capabilities/hints.ts +43 -24
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +50 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +9 -5
- package/src/capabilities/colophon/types.ts +16 -7
- package/src/capabilities/config/collectConfigShow.test.ts +58 -0
- package/src/capabilities/config/collectConfigShow.ts +43 -6
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -37
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +14 -9
- package/src/capabilities/config/show.render.test.ts +77 -5
- package/src/capabilities/config/show.render.ts +8 -13
- package/src/capabilities/config/show.verb.ts +13 -9
- package/src/capabilities/config/types.ts +26 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +95 -103
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +50 -0
- package/src/capabilities/create/create.mcp.test.ts +91 -7
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +523 -162
- package/src/capabilities/create/create.verb.ts +361 -321
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +9 -14
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +40 -46
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +29 -5
- package/src/capabilities/{standard/parity.test.ts → distribution.parity.test.ts} +24 -14
- package/src/capabilities/distribution.test.ts +122 -0
- package/src/capabilities/distribution.ts +54 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +9 -7
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +82 -46
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +5 -4
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +125 -30
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +113 -27
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +24 -13
- package/src/capabilities/doctor/doctor.render.ts +45 -20
- package/src/capabilities/doctor/doctor.test.ts +158 -40
- package/src/capabilities/doctor/doctor.verb.ts +9 -5
- package/src/capabilities/doctor/runChecks.ts +65 -66
- package/src/capabilities/doctor/types.ts +21 -5
- package/src/capabilities/emptyRecovery.test.ts +44 -22
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -5
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +5 -4
- package/src/capabilities/graph/runQuery.ts +9 -7
- package/src/capabilities/index.ts +25 -19
- package/src/capabilities/info/collectInfo.ts +15 -10
- package/src/capabilities/info/info.render.ts +4 -3
- package/src/capabilities/info/info.verb.ts +4 -3
- package/src/capabilities/lazy.test.ts +125 -2
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +42 -83
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/prompt.test.ts +12 -6
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +26 -14
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +367 -91
- package/src/capabilities/resources/resources.test.ts +411 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +397 -320
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +233 -74
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +166 -14
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +47 -9
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +14 -14
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +9 -10
- package/src/capabilities/sources/collectStatus.ts +61 -51
- package/src/capabilities/sources/index.ts +2 -2
- package/src/capabilities/sources/installSkills.ts +86 -9
- package/src/capabilities/sources/runUpdate.ts +164 -141
- package/src/capabilities/sources/sources.test.ts +265 -119
- package/src/capabilities/sources/status.render.test.ts +53 -24
- package/src/capabilities/sources/status.render.ts +25 -30
- package/src/capabilities/sources/status.verb.ts +16 -9
- package/src/capabilities/sources/types.ts +18 -25
- package/src/capabilities/sources/update.render.ts +10 -3
- package/src/capabilities/sources/update.verb.ts +13 -24
- package/src/capabilities/surface.test.ts +165 -25
- package/src/capabilities/tier.parity.test.ts +144 -0
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +8 -4
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.test.ts +8 -6
- package/src/constants.ts +78 -22
- package/src/identity.test.ts +348 -0
- package/src/index.ts +2 -2
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +20 -15
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.test.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +5 -3
- package/src/kernel/completion/entitySource.test.ts +185 -41
- package/src/kernel/completion/entitySource.ts +133 -110
- package/src/kernel/completion/model.test.ts +165 -13
- package/src/kernel/completion/model.ts +105 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +104 -50
- package/src/kernel/completion/shellDrive.test.ts +611 -0
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/fish.ts +28 -6
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +10 -3
- package/src/kernel/config/defaults.test.ts +108 -0
- package/src/kernel/config/defaults.ts +13 -23
- package/src/kernel/config/evaluateProjectConfig.ts +33 -11
- package/src/kernel/config/findProjectConfig.ts +4 -3
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -81
- package/src/kernel/config/globalConfig.ts +2 -2
- package/src/kernel/config/index.ts +5 -6
- package/src/kernel/config/paths.ts +17 -17
- package/src/kernel/config/readConfig.test.ts +246 -7
- package/src/kernel/config/readConfig.ts +8 -8
- package/src/kernel/config/schema.test.ts +50 -0
- package/src/kernel/config/schema.ts +100 -11
- package/src/kernel/config/types.ts +75 -19
- package/src/kernel/copy.test.ts +483 -0
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +6 -3
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -4
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/index.ts +1 -1
- package/src/kernel/error/recovery.test.ts +22 -45
- package/src/kernel/error/recovery.ts +36 -27
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +25 -4
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.test.ts +195 -11
- package/src/kernel/packs/collect.ts +212 -61
- package/src/kernel/packs/compile.test.ts +293 -8
- package/src/kernel/packs/compile.ts +108 -15
- package/src/kernel/packs/disclosure.test.ts +5 -2
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +13 -13
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/graphqlSource.test.ts +6 -3
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +70 -20
- package/src/kernel/packs/renderPack.ts +28 -7
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +132 -34
- package/src/kernel/packs/runBodies.ts +16 -16
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +114 -11
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +104 -10
- package/src/kernel/packs/sparql/runSelect.ts +75 -37
- package/src/kernel/packs/toolDescription.test.ts +52 -5
- package/src/kernel/packs/types.ts +52 -4
- package/src/kernel/packs/uniqueness.ts +5 -5
- package/src/kernel/project/cli/buildProgram.test.ts +157 -17
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +227 -3
- package/src/kernel/project/cli/dispatch.ts +250 -48
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +130 -30
- package/src/kernel/project/cli/helpFormat.ts +14 -1
- package/src/kernel/project/cli/rootHelp.ts +140 -111
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +18 -10
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +12 -7
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +42 -1
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +120 -5
- package/src/kernel/project/mcp/prompts/provider.ts +22 -8
- package/src/kernel/project/mcp/prompts/source.ts +69 -68
- package/src/kernel/project/mcp/registerVerb.ts +56 -11
- package/src/kernel/project/mcp/serve.ts +13 -5
- package/src/kernel/project/mcp/toolDescriptions.test.ts +6 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/disclosure.ts +4 -2
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/prefixes.test.ts +36 -0
- package/src/kernel/render/prefixes.ts +40 -13
- package/src/kernel/render/renderers.test.ts +244 -7
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/build.ts +29 -3
- package/src/kernel/runtime/graphpack/buildIndex.test.ts +46 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +53 -18
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -5
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.stories.generated.ts +3 -0
- package/src/kernel/runtime/graphpack/embedded.ts +39 -13
- package/src/kernel/runtime/graphpack/graphpack.test.ts +205 -5
- package/src/kernel/runtime/graphpack/hash.ts +3 -2
- package/src/kernel/runtime/graphpack/index.ts +1 -1
- package/src/kernel/runtime/graphpack/manifest.ts +114 -12
- package/src/kernel/runtime/graphpack/read.ts +5 -11
- package/src/kernel/runtime/graphpack/schemas.ts +74 -0
- package/src/kernel/runtime/graphpack/stories.ts +84 -0
- package/src/kernel/runtime/graphpack/types.ts +61 -48
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/paths.ts +64 -15
- package/src/kernel/runtime/probe.test.ts +8 -4
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +477 -32
- package/src/kernel/runtime/refs/gitOps.ts +1 -19
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +8 -8
- package/src/kernel/runtime/refs/resolve.ts +82 -66
- package/src/kernel/runtime/resolveSources.test.ts +63 -24
- package/src/kernel/runtime/resolveSources.ts +36 -25
- package/src/kernel/runtime/storeReadiness.ts +10 -10
- package/src/kernel/runtime/storeless.test.ts +1 -1
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +56 -55
- package/src/kernel/spec/emitReference.test.ts +3 -3
- package/src/kernel/spec/emitReference.ts +242 -34
- package/src/kernel/spec/emitSurface.ts +57 -11
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/surfaceConformance.ts +8 -0
- package/src/kernel/spec/types.ts +277 -13
- package/src/kernel/spec/validate.ts +2 -1
- package/src/kernel/vocabulary.test.ts +164 -0
- package/src/kernel/vocabulary.ts +146 -0
- package/src/testing/PARITY_GAPS.ts +8 -2
- package/src/testing/behavioral/README.md +3 -3
- package/src/testing/behavioral/completion.test.ts +19 -6
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +6 -5
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +1 -1
- package/src/testing/behavioral/exitCodes.e2e.test.ts +6 -5
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/harness.foundation.test.ts +14 -5
- package/src/testing/behavioral/journeys.cli.test.ts +117 -76
- package/src/testing/behavioral/journeys.defaultPack.test.ts +88 -182
- package/src/testing/behavioral/journeys.firstInstall.test.ts +167 -0
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +9 -6
- package/src/testing/behavioral/journeys.packageStories.test.ts +188 -0
- package/src/testing/behavioral/liveReadSurface.ts +4 -3
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +10 -5
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/behavioral/staleCommands.test.ts +10 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +7 -7
- package/src/testing/eval/cases/assembly.ts +13 -6
- package/src/testing/eval/cases/effectful.ts +28 -15
- package/src/testing/eval/cases/readNouns.ts +22 -20
- package/src/testing/eval/cases/stable.ts +5 -1
- package/src/testing/eval/eval.test.ts +7 -1
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/fixtureCapability.ts +45 -1
- package/src/testing/fixtures/graph/canonical.ts +94 -5
- package/src/testing/fixtures/graph/defaultPack.ts +7 -6
- package/src/testing/fixtures/graph/owlExport.ts +7 -5
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/fixtureGraph.ts +33 -16
- package/src/testing/helpers/packRuntime.ts +2 -3
- package/src/testing/helpers/projectCli.ts +2 -1
- package/src/testing/helpers/projectMcp.ts +38 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +24 -9
- package/src/testing/perf/budgets.ts +76 -12
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +611 -14
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/src/types.ts +2 -2
- package/dist/pragma +0 -0
- package/src/capabilities/block/blockList.test.ts +0 -79
- package/src/capabilities/block/blockList.verb.ts +0 -163
- package/src/capabilities/block/index.ts +0 -25
- package/src/capabilities/block/pack.ts +0 -166
- package/src/capabilities/block/parity.test.ts +0 -187
- package/src/capabilities/block/tierChain.ts +0 -78
- package/src/capabilities/colophon/pragmaColophon.ts +0 -66
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -152
- package/src/capabilities/create/templates.embedded.generated.ts +0 -53
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -41
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -67
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -60
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/capabilities/modifier/index.ts +0 -15
- package/src/capabilities/modifier/pack.ts +0 -64
- package/src/capabilities/standard/index.ts +0 -18
- package/src/capabilities/standard/pack.ts +0 -128
- package/src/capabilities/tier/index.ts +0 -19
- package/src/capabilities/tier/lookup.render.test.ts +0 -72
- package/src/capabilities/tier/lookup.render.ts +0 -59
- package/src/capabilities/tier/lookup.test.ts +0 -83
- package/src/capabilities/tier/lookup.verb.ts +0 -44
- package/src/capabilities/tier/pack.ts +0 -28
- package/src/capabilities/tier/runLookup.ts +0 -87
- package/src/capabilities/token/addConfig.render.ts +0 -27
- package/src/capabilities/token/addConfig.test.ts +0 -62
- package/src/capabilities/token/addConfig.verb.ts +0 -40
- package/src/capabilities/token/index.ts +0 -19
- package/src/capabilities/token/pack.ts +0 -58
- package/src/capabilities/token/runAddConfig.ts +0 -95
- package/src/kernel/completion/bashDrive.test.ts +0 -73
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +0 -39
- package/src/kernel/runtime/lock.ts +0 -90
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { buildOptionInfo } from "@canonical/summon-core/projection";
|
|
3
4
|
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { MCP_SERVER_NAME, VERSION } from "../constants.js";
|
|
4
6
|
import { emitSurface } from "../kernel/spec/emitSurface.js";
|
|
5
7
|
import {
|
|
6
8
|
assertConforms,
|
|
7
9
|
type Covenant,
|
|
8
10
|
} from "../kernel/spec/surfaceConformance.js";
|
|
11
|
+
import { projectMcp } from "../testing/helpers/projectMcp.js";
|
|
12
|
+
import { CREATE_SURFACE } from "./create/createSurface.generated.js";
|
|
9
13
|
import { capabilities } from "./index.js";
|
|
10
14
|
|
|
11
15
|
/** The committed covenant, read from disk exactly as a consumer would. */
|
|
@@ -23,34 +27,52 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
23
27
|
expect(() => assertConforms(emitted, golden)).not.toThrow();
|
|
24
28
|
});
|
|
25
29
|
|
|
26
|
-
it("emits config
|
|
30
|
+
it("emits the four config verbs — show, get, set, unset — in covenant order", () => {
|
|
27
31
|
// AV-228 B3 retired the per-field `tier`/`channel`/`detail` setters; the
|
|
28
|
-
// config noun is
|
|
32
|
+
// config noun is the `show` dump, the `get <key>` single read, the
|
|
33
|
+
// `set <key> <value>` writer, and the `unset <key>` clearer. Reading one
|
|
34
|
+
// value and clearing one field are commands of their own — neither hides
|
|
35
|
+
// inside `show --format json` nor inside a reserved `set` value.
|
|
29
36
|
expect(emitted.nouns.config?.verbs).toEqual([
|
|
30
37
|
{ v: "show", mcp: "config_show" },
|
|
38
|
+
{ v: "get", args: ["<key>"], mcp: "config_get" },
|
|
31
39
|
{
|
|
32
40
|
v: "set",
|
|
33
41
|
args: ["<key>", "<value>"],
|
|
34
42
|
mutates: true,
|
|
35
43
|
mcp: "config_set",
|
|
36
44
|
},
|
|
45
|
+
{
|
|
46
|
+
v: "unset",
|
|
47
|
+
args: ["<key>"],
|
|
48
|
+
mutates: true,
|
|
49
|
+
mcp: "config_unset",
|
|
50
|
+
},
|
|
37
51
|
]);
|
|
38
52
|
// info stays a data-only enrichment — its emitted verb is unchanged.
|
|
39
53
|
expect(emitted.nouns.info?.verbs).toEqual([{ v: "info", mcp: "info" }]);
|
|
40
|
-
//
|
|
41
|
-
|
|
54
|
+
// `version` is the command form of `--version`: one value, two spellings
|
|
55
|
+
// of the same read, and no tool — the version already rides `info`.
|
|
56
|
+
expect(emitted.nouns.version?.verbs).toEqual([
|
|
57
|
+
{ v: "version", mcp: false },
|
|
58
|
+
]);
|
|
59
|
+
// The server entry is a real noun/verb pair, emitted like any other and
|
|
60
|
+
// carrying no tool — it serves a protocol, it is not an agent tool.
|
|
61
|
+
expect(emitted.nouns.mcp?.verbs).toEqual([{ v: "serve", mcp: false }]);
|
|
62
|
+
// The completion resolver stays hidden — it is a protocol between the
|
|
63
|
+
// shell script and the bin, not a command anyone types.
|
|
42
64
|
expect(emitted.nouns.__complete).toBeUndefined();
|
|
43
65
|
});
|
|
44
66
|
|
|
45
|
-
it("emits the read nouns/verbs the packs add (
|
|
67
|
+
it("emits the read nouns/verbs the packs add (sample only where declared)", () => {
|
|
46
68
|
expect(emitted.nouns.standard?.verbs.map((v) => v.v)).toEqual([
|
|
47
69
|
"list",
|
|
48
70
|
"categories",
|
|
49
71
|
"lookup",
|
|
50
72
|
"sample",
|
|
51
73
|
]);
|
|
52
|
-
// PR7
|
|
53
|
-
//
|
|
74
|
+
// PR7 completed the surface; block/modifier/token carry no-argument
|
|
75
|
+
// samples (fixedCount), tier declares no sample.
|
|
54
76
|
expect(emitted.nouns.tier?.verbs.map((v) => v.v)).toEqual([
|
|
55
77
|
"list",
|
|
56
78
|
"lookup",
|
|
@@ -60,16 +82,18 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
60
82
|
"lookup",
|
|
61
83
|
"sample",
|
|
62
84
|
]);
|
|
85
|
+
// `token` is purely declarative since L-OPEN-9 removed `add-config`: the
|
|
86
|
+
// three read verbs its story compiles, and no mutation.
|
|
63
87
|
expect(emitted.nouns.token?.verbs.map((v) => v.v)).toEqual([
|
|
64
88
|
"list",
|
|
65
89
|
"lookup",
|
|
66
90
|
"sample",
|
|
67
|
-
"add-config",
|
|
68
91
|
]);
|
|
92
|
+
// block list is the story's compiled, unfiltered list (L-OPEN-9): no
|
|
93
|
+
// flags — the `--all-tiers` escape died with the hand-written filtering.
|
|
69
94
|
expect(emitted.nouns.block?.verbs).toEqual([
|
|
70
95
|
{
|
|
71
96
|
v: "list",
|
|
72
|
-
flags: ["--all-tiers"],
|
|
73
97
|
needsStore: true,
|
|
74
98
|
mcp: "block_list",
|
|
75
99
|
},
|
|
@@ -81,11 +105,11 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
81
105
|
},
|
|
82
106
|
{ v: "sample", needsStore: true, mcp: "block_sample" },
|
|
83
107
|
]);
|
|
84
|
-
// The
|
|
85
|
-
//
|
|
108
|
+
// The tier lookup is the story's compiled lookup (L-OPEN-9), so it emits
|
|
109
|
+
// the variadic `<name...>` positional every pack lookup emits.
|
|
86
110
|
expect(emitted.nouns.tier?.verbs).toContainEqual({
|
|
87
111
|
v: "lookup",
|
|
88
|
-
args: ["<name
|
|
112
|
+
args: ["<name...>"],
|
|
89
113
|
needsStore: true,
|
|
90
114
|
mcp: "tier_lookup",
|
|
91
115
|
});
|
|
@@ -101,15 +125,8 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
101
125
|
needsStore: true,
|
|
102
126
|
mcp: "ontology_lookup",
|
|
103
127
|
},
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
{
|
|
107
|
-
v: "show",
|
|
108
|
-
args: ["<prefix>"],
|
|
109
|
-
flags: ["--properties", "--full-uris", "--class"],
|
|
110
|
-
needsStore: true,
|
|
111
|
-
mcp: "ontology_show",
|
|
112
|
-
},
|
|
128
|
+
// One job, one spelling: `lookup` is the by-name read, and nothing
|
|
129
|
+
// else answers to it.
|
|
113
130
|
]);
|
|
114
131
|
// skill discovery is storeless (filesystem) — no needsStore.
|
|
115
132
|
expect(emitted.nouns.skill?.verbs).toEqual([
|
|
@@ -133,6 +150,92 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
133
150
|
]);
|
|
134
151
|
});
|
|
135
152
|
|
|
153
|
+
it("emits the L-CIS create noun — projected grammar, deep-equal to the covenant", () => {
|
|
154
|
+
// The create surface DERIVES from the generators' prompts (L-CIS): the
|
|
155
|
+
// framework tree segment is a required positional enum, component's flags
|
|
156
|
+
// are the framework union (incl. the svelte-only --use-ts-stories), and
|
|
157
|
+
// every flag AND positional token is the REGISTERED spelling (L-CIS-2) —
|
|
158
|
+
// a default-true confirm registers ONLY its `--no-<kebab>` form, and the
|
|
159
|
+
// args carry the kebab positional the usage line prints, so the covenant
|
|
160
|
+
// names `--no-with-styles` and `[component-path]`, never a
|
|
161
|
+
// `--with-styles` the CLI rejects or a `[componentPath]` its help never
|
|
162
|
+
// prints. Pin the three entries verbatim so a prompt edit that moves the
|
|
163
|
+
// covenant is SEEN.
|
|
164
|
+
expect(emitted.nouns.create?.verbs).toEqual([
|
|
165
|
+
{
|
|
166
|
+
v: "component",
|
|
167
|
+
args: ["<framework>", "[component-path]"],
|
|
168
|
+
flags: [
|
|
169
|
+
"--no-with-styles",
|
|
170
|
+
"--no-with-stories",
|
|
171
|
+
"--no-with-ssr-tests",
|
|
172
|
+
"--use-ts-stories",
|
|
173
|
+
],
|
|
174
|
+
mutates: true,
|
|
175
|
+
mcp: "create_component",
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
v: "package",
|
|
179
|
+
flags: [
|
|
180
|
+
"--name",
|
|
181
|
+
"--type",
|
|
182
|
+
"--description",
|
|
183
|
+
"--with-react",
|
|
184
|
+
"--with-storybook",
|
|
185
|
+
"--with-cli",
|
|
186
|
+
"--with-pr-template",
|
|
187
|
+
"--no-run-install",
|
|
188
|
+
],
|
|
189
|
+
mutates: true,
|
|
190
|
+
mcp: "create_package",
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
v: "application",
|
|
194
|
+
args: ["[app-path]"],
|
|
195
|
+
// ssr/router are GONE: always-on facts, not prompts — the pair had no
|
|
196
|
+
// reachable explicit form (only `--no-` spellings the generator's own
|
|
197
|
+
// guard rejected), so the projection no longer carries them.
|
|
198
|
+
flags: ["--no-forms", "--intl", "--relay", "--no-run-install"],
|
|
199
|
+
mutates: true,
|
|
200
|
+
mcp: "create_application",
|
|
201
|
+
},
|
|
202
|
+
]);
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
it("every create covenant flag token is buildOptionInfo's primary registered long form (L-CIS-2)", () => {
|
|
206
|
+
// The derivation tie: the covenant's create tokens must be EXACTLY the
|
|
207
|
+
// long forms the single flag-shape authority yields for the projected
|
|
208
|
+
// prompts — the same expression both binaries register from — so the
|
|
209
|
+
// covenant can never again teach a spelling the CLI rejects (the
|
|
210
|
+
// round-15 F2 defect: kebab-cased param names blessed `--with-styles`
|
|
211
|
+
// and rejected the real `--no-with-styles`).
|
|
212
|
+
const registered = new Map<string, string>();
|
|
213
|
+
for (const surface of Object.values(CREATE_SURFACE)) {
|
|
214
|
+
for (const prompt of surface.prompts) {
|
|
215
|
+
if (prompt.positional === true) continue;
|
|
216
|
+
registered.set(
|
|
217
|
+
prompt.name,
|
|
218
|
+
buildOptionInfo(prompt).flags.split(" ")[0] as string,
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
for (const verb of emitted.nouns.create?.verbs ?? []) {
|
|
223
|
+
expect(verb.flags?.length ?? 0).toBeGreaterThan(0);
|
|
224
|
+
for (const token of verb.flags ?? []) {
|
|
225
|
+
expect([...registered.values()]).toContain(token);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// …and every non-positional projected prompt is named by some entry.
|
|
229
|
+
const covenantTokens = new Set(
|
|
230
|
+
(emitted.nouns.create?.verbs ?? []).flatMap((verb) => verb.flags ?? []),
|
|
231
|
+
);
|
|
232
|
+
for (const [name, token] of registered) {
|
|
233
|
+
expect(covenantTokens.has(token), `${name} → ${token} missing`).toBe(
|
|
234
|
+
true,
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
|
|
136
239
|
it("emits the PR6 effect/diagnostic self-verbs (doctor, upgrade)", () => {
|
|
137
240
|
// doctor is a storeless read self-verb — no args, no flags, no needsStore.
|
|
138
241
|
expect(emitted.nouns.doctor?.verbs).toEqual([
|
|
@@ -163,20 +266,36 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
163
266
|
mutates: true,
|
|
164
267
|
mcp: "setup",
|
|
165
268
|
},
|
|
269
|
+
{
|
|
270
|
+
v: "config",
|
|
271
|
+
flags: ["--scope", "--global", "--local"],
|
|
272
|
+
mutates: true,
|
|
273
|
+
mcp: false,
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
v: "completions",
|
|
277
|
+
flags: ["--scope", "--global", "--local"],
|
|
278
|
+
mutates: true,
|
|
279
|
+
mcp: false,
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
v: "lsp",
|
|
283
|
+
flags: ["--scope", "--global", "--local"],
|
|
284
|
+
mutates: true,
|
|
285
|
+
mcp: false,
|
|
286
|
+
},
|
|
166
287
|
{
|
|
167
288
|
v: "mcp",
|
|
168
289
|
flags: ["--scope", "--global", "--local"],
|
|
169
290
|
mutates: true,
|
|
170
291
|
mcp: false,
|
|
171
292
|
},
|
|
172
|
-
{ v: "completions", mutates: true, mcp: false },
|
|
173
293
|
{
|
|
174
294
|
v: "skills",
|
|
175
295
|
flags: ["--scope", "--global", "--local"],
|
|
176
296
|
mutates: true,
|
|
177
297
|
mcp: false,
|
|
178
298
|
},
|
|
179
|
-
{ v: "lsp", mutates: true, mcp: false },
|
|
180
299
|
]);
|
|
181
300
|
});
|
|
182
301
|
|
|
@@ -196,6 +315,8 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
196
315
|
"standard_sample",
|
|
197
316
|
"tier_list",
|
|
198
317
|
"config_show",
|
|
318
|
+
"config_get",
|
|
319
|
+
"config_unset",
|
|
199
320
|
"colophon",
|
|
200
321
|
]) {
|
|
201
322
|
expect(tools).toContain(tool);
|
|
@@ -209,14 +330,14 @@ describe("surface COMPLETE — emitted == covenant (PROTECTED)", () => {
|
|
|
209
330
|
// The CLOSING direction: assertConforms already proves emitted ⊆ covenant;
|
|
210
331
|
// this proves covenant ⊆ emitted, so together the tool sets are EQUAL — the
|
|
211
332
|
// surface-complete milestone. After PR7, every covenant tool is realized.
|
|
212
|
-
it("emits every covenant tool (all
|
|
333
|
+
it("emits every covenant tool (all 42) — set equality with the covenant", () => {
|
|
213
334
|
const emittedTools = new Set(emitted.mcpSurface.tools);
|
|
214
335
|
const missing = golden.mcpSurface.tools.filter((t) => !emittedTools.has(t));
|
|
215
336
|
expect(missing).toEqual([]);
|
|
216
337
|
expect([...emitted.mcpSurface.tools].sort()).toEqual(
|
|
217
338
|
[...golden.mcpSurface.tools].sort(),
|
|
218
339
|
);
|
|
219
|
-
expect(emitted.mcpSurface.tools).toHaveLength(
|
|
340
|
+
expect(emitted.mcpSurface.tools).toHaveLength(42);
|
|
220
341
|
});
|
|
221
342
|
|
|
222
343
|
// The covenant edit: the non-tool MCP surface is frozen too.
|
|
@@ -230,4 +351,23 @@ describe("surface COMPLETE — emitted == covenant (PROTECTED)", () => {
|
|
|
230
351
|
golden.mcpSurface.instructions,
|
|
231
352
|
);
|
|
232
353
|
});
|
|
354
|
+
|
|
355
|
+
// The L-PR6 covenant edit (PRA-107 ruling): the wire-identity RULE. The
|
|
356
|
+
// covenant states serverInfo as placeholders — a PROJECTION, deliberately not
|
|
357
|
+
// live values, so a release does not churn the covenant — and the live
|
|
358
|
+
// handshake is asserted to follow it: the server introduces itself with the
|
|
359
|
+
// distribution's declared name and the package version. The fork half of the
|
|
360
|
+
// same rule (a renamed distribution introduces itself under ITS name) is
|
|
361
|
+
// pinned in identity.test.ts, where the conf is mocked.
|
|
362
|
+
it("states the serverInfo projection rule and serves it on the wire", async () => {
|
|
363
|
+
expect(golden.mcpSurface.serverInfo).toEqual({
|
|
364
|
+
name: "<the declared distribution name>",
|
|
365
|
+
version: "<the package version>",
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
const mcp = await projectMcp([]);
|
|
369
|
+
const wire = mcp.serverInfo();
|
|
370
|
+
await mcp.cleanup();
|
|
371
|
+
expect(wire).toEqual({ name: MCP_SERVER_NAME, version: VERSION });
|
|
372
|
+
});
|
|
233
373
|
});
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tier-noun semantic parity (PROTECTED) — the `tier` story `pragma.conf.ts`
|
|
3
|
+
* declares, over a tier/block fixture graph (the standard-noun pattern).
|
|
4
|
+
*
|
|
5
|
+
* The hand-written `tier lookup` is gone (L-OPEN-9): both verbs compile from
|
|
6
|
+
* the declared story, so parity is asserted directly against the graph — every
|
|
7
|
+
* tier is reachable through list/lookup with the same names, addressable by
|
|
8
|
+
* name AND by prefixed IRI (the candidates completion now offers, D9-A), the
|
|
9
|
+
* `blocks` expand resolves the INVERSE path `^ds:tier` (the members scoped
|
|
10
|
+
* directly to the tier), a memberless tier still resolves, and a miss carries
|
|
11
|
+
* "did you mean?" suggestions like every declared lookup.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
15
|
+
import { compilePack } from "../kernel/packs/compile.js";
|
|
16
|
+
import type { LookupOutput } from "../kernel/packs/resolveEntity.js";
|
|
17
|
+
import type { PackRow } from "../kernel/packs/types.js";
|
|
18
|
+
import { verbKey } from "../kernel/packs/uniqueness.js";
|
|
19
|
+
import { DEFAULT_PREFIX_MAP } from "../kernel/render/prefixes.js";
|
|
20
|
+
import type { PragmaRuntime } from "../kernel/runtime/types.js";
|
|
21
|
+
import type { VerbSpec } from "../kernel/spec/types.js";
|
|
22
|
+
import { buildFixtureRuntime } from "../testing/helpers/packRuntime.js";
|
|
23
|
+
import { declaredStories } from "./distribution.js";
|
|
24
|
+
|
|
25
|
+
const tierPack = declaredStories.get("tier");
|
|
26
|
+
if (!tierPack) {
|
|
27
|
+
throw new Error('pragma.conf.ts declares no story for "tier"');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const DS = "https://ds.canonical.com/";
|
|
31
|
+
const PREFIXES = {
|
|
32
|
+
ds: DS,
|
|
33
|
+
owl: "http://www.w3.org/2002/07/owl#",
|
|
34
|
+
rdfs: "http://www.w3.org/2000/01/rdf-schema#",
|
|
35
|
+
xsd: "http://www.w3.org/2001/XMLSchema#",
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const TTL = `
|
|
39
|
+
@prefix ds: <${DS}> .
|
|
40
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#> .
|
|
41
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
42
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
43
|
+
|
|
44
|
+
ds:Tier a owl:Class .
|
|
45
|
+
ds:Component a owl:Class .
|
|
46
|
+
ds:name a owl:DatatypeProperty ; rdfs:range xsd:string .
|
|
47
|
+
ds:tier a owl:ObjectProperty ; rdfs:range ds:Tier .
|
|
48
|
+
|
|
49
|
+
ds:global a ds:Tier ; ds:name "global" .
|
|
50
|
+
ds:apps a ds:Tier ; ds:name "apps" .
|
|
51
|
+
ds:apps_lxd a ds:Tier ; ds:name "apps/lxd" .
|
|
52
|
+
|
|
53
|
+
ds:button a ds:Component ; ds:name "Button" ; ds:tier ds:global .
|
|
54
|
+
ds:modal a ds:Component ; ds:name "Modal" ; ds:tier ds:global .
|
|
55
|
+
ds:lxdPanel a ds:Component ; ds:name "LXD Panel" ; ds:tier ds:apps_lxd .
|
|
56
|
+
`;
|
|
57
|
+
|
|
58
|
+
const verbs = () => compilePack(tierPack, "pragma.conf.ts", DEFAULT_PREFIX_MAP);
|
|
59
|
+
const verb = (label: string) =>
|
|
60
|
+
verbs().find((v) => verbKey(v.path) === `tier ${label}`) as VerbSpec;
|
|
61
|
+
|
|
62
|
+
let rt: PragmaRuntime;
|
|
63
|
+
beforeAll(async () => {
|
|
64
|
+
({ rt } = await buildFixtureRuntime({ ttl: TTL, prefixes: PREFIXES }));
|
|
65
|
+
});
|
|
66
|
+
afterAll(async () => {
|
|
67
|
+
(await rt.store.get()).store.dispose();
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
async function lookup(name: string): Promise<Record<string, unknown>> {
|
|
71
|
+
const out = (await verb("lookup").run({ name: [name] }, rt)) as LookupOutput;
|
|
72
|
+
expect(out.errors).toEqual([]);
|
|
73
|
+
return out.results.at(0) as Record<string, unknown>;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** The `blocks` expand's child names, sorted (the sub-SELECT is unordered). */
|
|
77
|
+
function blockNames(entity: Record<string, unknown>): string[] {
|
|
78
|
+
return (entity.blocks as { name: string }[]).map((b) => b.name).sort();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
describe("tier list parity", () => {
|
|
82
|
+
it("lists every tier, name-ordered, with the uniform row shape", async () => {
|
|
83
|
+
const rows = (await verb("list").run({}, rt)) as PackRow[];
|
|
84
|
+
expect(rows.map((r) => r.name)).toEqual(["apps", "apps/lxd", "global"]);
|
|
85
|
+
for (const row of rows) {
|
|
86
|
+
expect(row.uri).toBeTruthy();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
describe("tier lookup parity — the declared story's compiled lookup", () => {
|
|
92
|
+
it("resolves a tier by name and expands the blocks scoped directly to it", async () => {
|
|
93
|
+
const tier = await lookup("apps/lxd");
|
|
94
|
+
expect(tier.uri).toBe(`${DS}apps_lxd`);
|
|
95
|
+
expect(tier.name).toBe("apps/lxd");
|
|
96
|
+
// The `blocks` expand walks the INVERSE `^ds:tier` path (contract:
|
|
97
|
+
// `PackExpand.relation` admits property paths), so only the DIRECT
|
|
98
|
+
// members appear — no chain inheritance.
|
|
99
|
+
expect(blockNames(tier)).toEqual(["LXD Panel"]);
|
|
100
|
+
const global = await lookup("global");
|
|
101
|
+
expect(blockNames(global)).toEqual(["Button", "Modal"]);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("a memberless tier still resolves, with an empty blocks expand", async () => {
|
|
105
|
+
const apps = await lookup("apps");
|
|
106
|
+
expect(apps.name).toBe("apps");
|
|
107
|
+
expect(apps.blocks).toEqual([]);
|
|
108
|
+
// The empty expand renders as an OMITTED section (the generic renderers'
|
|
109
|
+
// behavior for every declared noun), not a placeholder line.
|
|
110
|
+
const out = (await verb("lookup").run({ name: ["apps"] }, rt)) as never;
|
|
111
|
+
expect(verb("lookup").output.formatters.llm(out)).not.toContain("Blocks");
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it("resolves the same tier by prefixed IRI — the candidates completion offers (D9-A)", async () => {
|
|
115
|
+
// Completion for the declared lookup serves index entity NAMES (prefixed
|
|
116
|
+
// IRIs); a candidate is only honest if the lookup resolves it.
|
|
117
|
+
const byIri = await lookup("ds:apps_lxd");
|
|
118
|
+
expect(byIri.name).toBe("apps/lxd");
|
|
119
|
+
expect(byIri.uri).toBe(`${DS}apps_lxd`);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it("resolves a variadic batch in one call", async () => {
|
|
123
|
+
const out = (await verb("lookup").run(
|
|
124
|
+
{ name: ["global", "apps"] },
|
|
125
|
+
rt,
|
|
126
|
+
)) as LookupOutput;
|
|
127
|
+
expect(out.results.map((r) => r.name)).toEqual(["global", "apps"]);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it("a miss fails ENTITY_NOT_FOUND with a near-miss suggestion (B6 parity kept)", async () => {
|
|
131
|
+
// The bespoke lookup earned "did you mean?" in B6; the declared path keeps
|
|
132
|
+
// it — suggestions come from the same name list every declared lookup uses.
|
|
133
|
+
let caught: unknown;
|
|
134
|
+
try {
|
|
135
|
+
await verb("lookup").run({ name: ["apps/lxdd"] }, rt);
|
|
136
|
+
} catch (error) {
|
|
137
|
+
caught = error;
|
|
138
|
+
}
|
|
139
|
+
expect(caught).toMatchObject({ code: "ENTITY_NOT_FOUND" });
|
|
140
|
+
expect((caught as { suggestions: string[] }).suggestions).toContain(
|
|
141
|
+
"apps/lxd",
|
|
142
|
+
);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
@@ -21,13 +21,15 @@
|
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
import { $, exec, gen, info, type Task, warn } from "@canonical/task";
|
|
24
|
-
import type { PragmaRuntime } from "../../kernel/runtime/
|
|
25
|
-
import { assertExecOk, guardMissingBinary } from "../shared/assertExecOk.js";
|
|
24
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
26
25
|
import {
|
|
26
|
+
assertExecOk,
|
|
27
|
+
checkRegistryVersion,
|
|
27
28
|
detectInstallSource,
|
|
29
|
+
guardMissingBinary,
|
|
30
|
+
PRAGMA_PACKAGE,
|
|
28
31
|
pmUpdateCommand,
|
|
29
|
-
} from "../shared/
|
|
30
|
-
import { checkRegistryVersion, PRAGMA_PACKAGE } from "../shared/registry.js";
|
|
32
|
+
} from "../shared/index.js";
|
|
31
33
|
import type { UpgradeData } from "./types.js";
|
|
32
34
|
|
|
33
35
|
/**
|
|
@@ -61,9 +63,7 @@ export async function runUpgrade(
|
|
|
61
63
|
executed: false,
|
|
62
64
|
};
|
|
63
65
|
return gen(function* () {
|
|
64
|
-
yield* $(
|
|
65
|
-
warn("Could not reach the registry — skipped the update check."),
|
|
66
|
-
);
|
|
66
|
+
yield* $(warn("Cannot reach the registry — skipped the update check."));
|
|
67
67
|
return data;
|
|
68
68
|
});
|
|
69
69
|
}
|
|
@@ -97,7 +97,7 @@ export async function runUpgrade(
|
|
|
97
97
|
const bin = parts[0] ?? "npm";
|
|
98
98
|
const args = parts.slice(1);
|
|
99
99
|
// Guard the spawn: an absent package manager (`bin` not on PATH) REJECTS the
|
|
100
|
-
// exec with ENOENT, which would collapse to INTERNAL_ERROR ("
|
|
100
|
+
// exec with ENOENT, which would collapse to INTERNAL_ERROR ("report
|
|
101
101
|
// this issue"). Surface it as a named "`<pm>` not found on PATH" instead.
|
|
102
102
|
return guardMissingBinary(
|
|
103
103
|
bin,
|
|
@@ -7,15 +7,15 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import chalk from "chalk";
|
|
10
|
-
import type { Formatters } from "../../kernel/spec/
|
|
11
|
-
import { PRAGMA_PACKAGE } from "../shared/
|
|
10
|
+
import type { Formatters } from "../../kernel/spec/index.js";
|
|
11
|
+
import { PRAGMA_PACKAGE } from "../shared/index.js";
|
|
12
12
|
import type { UpgradeData } from "./types.js";
|
|
13
13
|
|
|
14
14
|
export const upgradeFormatters: Formatters<UpgradeData> = {
|
|
15
15
|
plain(data) {
|
|
16
16
|
const lines = [`Installed via: ${data.pm}`];
|
|
17
17
|
if (data.offline) {
|
|
18
|
-
lines.push("
|
|
18
|
+
lines.push("Cannot reach the registry — try again later.");
|
|
19
19
|
return lines.join("\n");
|
|
20
20
|
}
|
|
21
21
|
if (data.alreadyLatest) {
|
|
@@ -40,8 +40,7 @@ export const upgradeFormatters: Formatters<UpgradeData> = {
|
|
|
40
40
|
},
|
|
41
41
|
|
|
42
42
|
llm(data) {
|
|
43
|
-
if (data.offline)
|
|
44
|
-
return "Upgrade check failed: could not reach the registry.";
|
|
43
|
+
if (data.offline) return "Upgrade check failed: cannot reach the registry.";
|
|
45
44
|
if (data.alreadyLatest) {
|
|
46
45
|
return `Already at the latest version (${data.current}).`;
|
|
47
46
|
}
|
|
@@ -199,10 +199,10 @@ describe("assertExecOk — the exec-exitCode guard", () => {
|
|
|
199
199
|
}
|
|
200
200
|
const err = asPragmaError(thrown);
|
|
201
201
|
// A denied `npm i -g` is user-fixable, NOT a bug — so it must not tell the
|
|
202
|
-
// user to "
|
|
202
|
+
// user to "report this issue" (that is INTERNAL_ERROR's recovery).
|
|
203
203
|
expect(err.code).toBe("UNSUPPORTED");
|
|
204
204
|
expect(err.recovery?.message).not.toContain("report this issue");
|
|
205
|
-
expect(err.recovery?.message).toMatch(/
|
|
205
|
+
expect(err.recovery?.message).toMatch(/elevated privileges/i);
|
|
206
206
|
// Surfaces the command + exit code + the captured stderr (trimmed).
|
|
207
207
|
expect(err.message).toContain("npm i -g @canonical/pragma-cli");
|
|
208
208
|
expect(err.message).toContain("code 13");
|
|
@@ -276,7 +276,7 @@ describe("upgrade — a failed exec maps to an actionable runtime error (exit 1)
|
|
|
276
276
|
|
|
277
277
|
it("a missing-binary spawn (ENOENT) at a guarded site is a named UNSUPPORTED, not INTERNAL_ERROR", async () => {
|
|
278
278
|
// The same wrapper `runUpgrade`/`setupLsp` apply: a spawn ENOENT REJECTS the
|
|
279
|
-
// exec, which used to collapse to INTERNAL_ERROR ("
|
|
279
|
+
// exec, which used to collapse to INTERNAL_ERROR ("report this issue").
|
|
280
280
|
// `guardMissingBinary` names it instead.
|
|
281
281
|
const thrown = await runToError(
|
|
282
282
|
failVerbWith((_p, rt) =>
|
|
@@ -14,20 +14,24 @@
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
import type { Task } from "@canonical/task";
|
|
17
|
+
import { BIN_NAME } from "../../constants.js";
|
|
17
18
|
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
18
|
-
import type { CapabilityModule, VerbSpec } from "../../kernel/spec/
|
|
19
|
+
import type { CapabilityModule, VerbSpec } from "../../kernel/spec/index.js";
|
|
19
20
|
import type { UpgradeData } from "./types.js";
|
|
20
21
|
import { upgradeFormatters } from "./upgrade.render.js";
|
|
21
22
|
|
|
22
23
|
const upgradeVerb: VerbSpec<Record<string, unknown>, UpgradeData> = {
|
|
23
24
|
path: ["upgrade"],
|
|
24
|
-
summary:
|
|
25
|
+
summary: `Upgrade the ${BIN_NAME} CLI to the latest version.`,
|
|
25
26
|
doc: "Checks the registry for the active channel's latest release and runs your package manager's global-update command. Preview the update before applying it.",
|
|
26
27
|
params: [],
|
|
27
28
|
output: { formatters: upgradeFormatters },
|
|
28
29
|
examples: [
|
|
29
|
-
{ cmd:
|
|
30
|
-
{
|
|
30
|
+
{ cmd: `${BIN_NAME} upgrade` },
|
|
31
|
+
{
|
|
32
|
+
cmd: `${BIN_NAME} upgrade --dry-run`,
|
|
33
|
+
note: "show the delta and the command",
|
|
34
|
+
},
|
|
31
35
|
],
|
|
32
36
|
capability: {
|
|
33
37
|
needsStore: false,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `version` capability barrel — the command form of `--version`.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { CapabilityModule } from "../../kernel/spec/index.js";
|
|
6
|
+
import { versionVerbSpec } from "./version.verb.js";
|
|
7
|
+
|
|
8
|
+
/** The `version` capability module. */
|
|
9
|
+
export const versionModule: CapabilityModule = {
|
|
10
|
+
name: "version",
|
|
11
|
+
verbs: [versionVerbSpec],
|
|
12
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `pragma version` — the command form of `--version`.
|
|
3
|
+
*
|
|
4
|
+
* The verb exists because users type it; the ONLY thing worth pinning is that
|
|
5
|
+
* it is not a second answer to the same question. The process-boundary cell
|
|
6
|
+
* compares the two spellings byte for byte through the shipped entry, so a
|
|
7
|
+
* change to either one that does not change the other reddens here. The rest
|
|
8
|
+
* pins the covenant slice and the storeless, tool-free shape.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { describe, expect, it } from "vitest";
|
|
12
|
+
import { VERSION } from "../../constants.js";
|
|
13
|
+
import { executeVerb } from "../../kernel/project/cli/dispatch.js";
|
|
14
|
+
import { bootRuntime } from "../../kernel/runtime/boot.js";
|
|
15
|
+
import type { GlobalFlags } from "../../kernel/runtime/types.js";
|
|
16
|
+
import { emitVerb } from "../../kernel/spec/emitSurface.js";
|
|
17
|
+
import { runCli } from "../../testing/helpers/runCli.js";
|
|
18
|
+
import { versionModule } from "./index.js";
|
|
19
|
+
|
|
20
|
+
const FLAGS: GlobalFlags = {
|
|
21
|
+
llm: false,
|
|
22
|
+
autoLlm: false,
|
|
23
|
+
format: "plain",
|
|
24
|
+
verbose: false,
|
|
25
|
+
};
|
|
26
|
+
const REAL = { dryRun: false, undo: false, yes: false };
|
|
27
|
+
const versionVerb = versionModule.verbs[0];
|
|
28
|
+
|
|
29
|
+
describe("version — covenant-exact emission (PROTECTED)", () => {
|
|
30
|
+
it("emits a no-argument self-verb with NO tool", () => {
|
|
31
|
+
// The version already rides `info` and the MCP handshake's serverInfo, so
|
|
32
|
+
// a tool here would be a third way to ask one question.
|
|
33
|
+
expect(emitVerb(versionVerb)).toEqual({ v: "version", mcp: false });
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
describe("version — one value, two spellings of the same read", () => {
|
|
38
|
+
it("prints the version and never boots the store", async () => {
|
|
39
|
+
const rt = bootRuntime(FLAGS, process.cwd());
|
|
40
|
+
const outcome = await executeVerb(versionVerb, {}, REAL, rt);
|
|
41
|
+
expect(outcome.stdout).toBe(`${VERSION}\n`);
|
|
42
|
+
expect(outcome.exitCode).toBe(0);
|
|
43
|
+
expect(rt.store.booted).toBe(false);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("json carries the value under a named field, not a bare scalar", async () => {
|
|
47
|
+
const outcome = await executeVerb(
|
|
48
|
+
versionVerb,
|
|
49
|
+
{},
|
|
50
|
+
REAL,
|
|
51
|
+
bootRuntime({ ...FLAGS, format: "json" }, process.cwd()),
|
|
52
|
+
);
|
|
53
|
+
expect(JSON.parse(outcome.stdout ?? "").data).toEqual({
|
|
54
|
+
version: VERSION,
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("the verb and the flag print the SAME bytes through the shipped entry", () => {
|
|
59
|
+
const fromVerb = runCli(["version"]);
|
|
60
|
+
const fromFlag = runCli(["--version"]);
|
|
61
|
+
expect(fromVerb.exitCode).toBe(0);
|
|
62
|
+
expect(fromFlag.exitCode).toBe(0);
|
|
63
|
+
expect(fromVerb.stdout).toBe(fromFlag.stdout);
|
|
64
|
+
expect(fromVerb.stdout).toBe(`${VERSION}\n`);
|
|
65
|
+
});
|
|
66
|
+
});
|