@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
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `pragma version` — the command form of `--version`.
|
|
3
|
+
*
|
|
4
|
+
* Users type it reflexively, so it exists and prints exactly the bytes the
|
|
5
|
+
* flag prints: the bare semver on stdout, storeless, no store or network
|
|
6
|
+
* touched. Withheld from MCP — the version already rides `info` and the
|
|
7
|
+
* server handshake's `serverInfo`.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { BIN_NAME, VERSION } from "../../constants.js";
|
|
11
|
+
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
12
|
+
import type { VerbSpec } from "../../kernel/spec/index.js";
|
|
13
|
+
|
|
14
|
+
const versionVerb: VerbSpec<Record<string, unknown>, string> = {
|
|
15
|
+
path: ["version"],
|
|
16
|
+
summary: "Print the CLI version.",
|
|
17
|
+
doc: "Prints the version `--version` prints — one value, two spellings of the same read.",
|
|
18
|
+
params: [],
|
|
19
|
+
output: {
|
|
20
|
+
formatters: {
|
|
21
|
+
plain: (version) => version,
|
|
22
|
+
llm: (version) => version,
|
|
23
|
+
json: (version) => JSON.stringify({ version }),
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
examples: [{ cmd: `${BIN_NAME} version` }],
|
|
27
|
+
capability: {
|
|
28
|
+
needsStore: false,
|
|
29
|
+
mutates: false,
|
|
30
|
+
mcp: {
|
|
31
|
+
expose: false,
|
|
32
|
+
reason: "the version rides `info` and the MCP handshake's serverInfo",
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
run: async () => VERSION,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/** The `version` verb. */
|
|
39
|
+
export const versionVerbSpec = asVerb(versionVerb);
|
package/src/constants.test.ts
CHANGED
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
BIN_NAME,
|
|
4
4
|
DEFAULT_DETAIL_LEVEL,
|
|
5
5
|
DETAIL_LEVELS,
|
|
6
|
+
ISSUES_URL,
|
|
6
7
|
MCP_SERVER_NAME,
|
|
7
8
|
OUTPUT_FORMATS,
|
|
8
9
|
PROGRAM_DESCRIPTION,
|
|
@@ -11,23 +12,24 @@ import {
|
|
|
11
12
|
} from "./constants.js";
|
|
12
13
|
|
|
13
14
|
describe("constants", () => {
|
|
14
|
-
it("
|
|
15
|
+
it("projects the shipped distribution's identity", () => {
|
|
16
|
+
// Every value here is read from `pragma.conf.ts`, so this pins what THIS
|
|
17
|
+
// distribution ships. That the projection is real — a fork changing the
|
|
18
|
+
// config changes the CLI — is proven by `src/identity.test.ts`.
|
|
15
19
|
expect(BIN_NAME).toBe("pragma");
|
|
16
20
|
expect(MCP_SERVER_NAME).toBe("pragma");
|
|
21
|
+
expect(PROGRAM_DESCRIPTION).toBe("Explore the design system");
|
|
22
|
+
expect(RECOVERY_CLI_PREFIX).toBe("pragma ");
|
|
23
|
+
expect(ISSUES_URL).toBe("https://github.com/canonical/pragma/issues");
|
|
17
24
|
});
|
|
18
25
|
|
|
19
26
|
it("reads a semver version from package.json", () => {
|
|
20
27
|
expect(VERSION).toMatch(/^\d+\.\d+\.\d+/);
|
|
21
28
|
});
|
|
22
29
|
|
|
23
|
-
it("keeps the recovery prefix on the stable command name (D5)", () => {
|
|
24
|
-
expect(RECOVERY_CLI_PREFIX).toBe("pragma ");
|
|
25
|
-
});
|
|
26
|
-
|
|
27
30
|
it("exposes the stable output formats and detail levels", () => {
|
|
28
31
|
expect(OUTPUT_FORMATS).toEqual(["plain", "llm", "json"]);
|
|
29
32
|
expect(DETAIL_LEVELS).toEqual(["summary", "standard", "detailed"]);
|
|
30
33
|
expect(DETAIL_LEVELS).toContain(DEFAULT_DETAIL_LEVEL);
|
|
31
|
-
expect(PROGRAM_DESCRIPTION.length).toBeGreaterThan(0);
|
|
32
34
|
});
|
|
33
35
|
});
|
package/src/constants.ts
CHANGED
|
@@ -1,59 +1,115 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Package-level constants
|
|
2
|
+
* Package-level constants — the distribution's identity, projected.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The bin name, MCP server name, description and issues URL are NOT authored
|
|
5
|
+
* here: they are read from the distribution config (`pragma.conf.ts`), so a fork
|
|
6
|
+
* changes values, not code. The import is static because the surfaces that need
|
|
7
|
+
* identity — `--help`, `__complete`, first-run onboarding, the MCP handshake —
|
|
8
|
+
* all run before or without the config layer. That is safe precisely because
|
|
9
|
+
* `pragma.conf.ts` is inert data: a plain object literal whose only import is a
|
|
10
|
+
* type. It reaches no zod schema, no fs, no evaluator. `capabilities/lazy.test.ts`
|
|
11
|
+
* pins that boundary, and `src/identity.test.ts` proves the projection.
|
|
12
|
+
*
|
|
13
|
+
* Also holds the stable cross-cutting enums: output formats here, and the
|
|
14
|
+
* detail levels re-exported from `kernel/config/types.ts`, where the config
|
|
15
|
+
* validator closes the `detail` field over them.
|
|
8
16
|
*/
|
|
9
17
|
|
|
10
18
|
import pkg from "../package.json" with { type: "json" };
|
|
19
|
+
import identity from "../pragma.conf.js";
|
|
20
|
+
import type { RawConfig } from "./kernel/config/types.js";
|
|
21
|
+
import { DETAIL_LEVELS, type DetailLevel } from "./kernel/config/types.js";
|
|
11
22
|
|
|
12
|
-
/** CLI binary name
|
|
13
|
-
const BIN_NAME =
|
|
23
|
+
/** CLI binary name — the distribution's `name`. */
|
|
24
|
+
const BIN_NAME = identity.name;
|
|
14
25
|
|
|
15
26
|
/**
|
|
16
|
-
* MCP server identity —
|
|
17
|
-
*
|
|
27
|
+
* MCP server identity — the same name as the CLI bin, so agents already pointed
|
|
28
|
+
* at the server resolve it unchanged. Also the `serverInfo.name` the server
|
|
29
|
+
* introduces itself with on the wire (paired with {@link VERSION} by
|
|
30
|
+
* `buildServer`), so a peer reads the distribution's declared name, never a
|
|
31
|
+
* hardcoded one.
|
|
18
32
|
*/
|
|
19
|
-
const MCP_SERVER_NAME =
|
|
33
|
+
const MCP_SERVER_NAME = identity.name;
|
|
20
34
|
|
|
21
35
|
/** One-line program description for help and server metadata. */
|
|
22
|
-
const PROGRAM_DESCRIPTION =
|
|
36
|
+
const PROGRAM_DESCRIPTION = identity.help;
|
|
37
|
+
|
|
38
|
+
/** Where the distribution asks users to file issues and feedback. */
|
|
39
|
+
const ISSUES_URL = identity.issuesUrl;
|
|
23
40
|
|
|
24
41
|
/** Semver version string read from package.json. */
|
|
25
42
|
const VERSION: string = pkg.version;
|
|
26
43
|
|
|
27
44
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
45
|
+
* The project config filename the walker looks for and every surface that
|
|
46
|
+
* quotes it — diagnostics, the onboarding note, the generated reference, the
|
|
47
|
+
* surface covenant — names. It lives HERE rather than beside the walker so the
|
|
48
|
+
* quoting surfaces do not have to import `kernel/config/**`: the storeless
|
|
49
|
+
* `--help`/`__complete` graph is asserted to reach no config module, and
|
|
50
|
+
* `completion/safety.test.ts` fails the moment one arrives.
|
|
51
|
+
*/
|
|
52
|
+
const PROJECT_CONFIG_FILENAME = `${identity.name}.config.ts`;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The distribution's name plus a space: the prefix a `recovery.cli` hint carries
|
|
56
|
+
* so it quotes a command the installed binary answers to (D5). Kernel hints are
|
|
57
|
+
* authored through `cliRecovery`, which prepends it; `packs/schema.ts` REJECTS
|
|
58
|
+
* it in a user-authored pack's `emptyRecovery.cli`, because the CONSUMING
|
|
59
|
+
* distribution's renderer supplies its own. Use {@link BIN_NAME} for prose —
|
|
60
|
+
* this constant's trailing space belongs to the recovery invariant, not to
|
|
61
|
+
* sentences.
|
|
31
62
|
*/
|
|
32
|
-
const RECOVERY_CLI_PREFIX =
|
|
63
|
+
const RECOVERY_CLI_PREFIX = `${identity.name} `;
|
|
33
64
|
|
|
34
65
|
/** The output formats the renderer selects between (`llm` = condensed Markdown). */
|
|
35
66
|
const OUTPUT_FORMATS = ["plain", "llm", "json"] as const;
|
|
36
67
|
|
|
37
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* A selected output format. The set is CLOSED — no alias normalises into it,
|
|
70
|
+
* so a `--format` value outside {@link OUTPUT_FORMATS} is rejected at the
|
|
71
|
+
* entry point rather than quietly becoming `plain`.
|
|
72
|
+
*/
|
|
38
73
|
type OutputFormat = (typeof OUTPUT_FORMATS)[number];
|
|
39
74
|
|
|
40
|
-
/** Progressive-disclosure levels, least to most detail. */
|
|
41
|
-
const DETAIL_LEVELS = ["summary", "standard", "detailed"] as const;
|
|
42
|
-
|
|
43
|
-
/** A progressive-disclosure level. */
|
|
44
|
-
type DetailLevel = (typeof DETAIL_LEVELS)[number];
|
|
45
|
-
|
|
46
75
|
/** Default detail level when neither flag, config, nor spec pins one. */
|
|
47
76
|
const DEFAULT_DETAIL_LEVEL: DetailLevel = "standard";
|
|
48
77
|
|
|
78
|
+
/**
|
|
79
|
+
* The wordmark `--help` opens with, as raw ASCII-art lines.
|
|
80
|
+
*
|
|
81
|
+
* PROJECTED from the distribution config, exactly like {@link BIN_NAME} and
|
|
82
|
+
* {@link PROGRAM_DESCRIPTION} — a wordmark spells a name, so it is identity, and
|
|
83
|
+
* `kernel/copy.test.ts` forbids any kernel string from naming the distribution.
|
|
84
|
+
* Authoring the art here would have branded a fork's front door with someone
|
|
85
|
+
* else's logo; declaring it as data means a fork ships its own or none.
|
|
86
|
+
*
|
|
87
|
+
* Lines rather than one string because the art contains a backtick and
|
|
88
|
+
* backslashes: a template literal would need every one of them escaped, which is
|
|
89
|
+
* how a character gets lost the next time someone edits it.
|
|
90
|
+
*/
|
|
91
|
+
// Read through the DECLARED type, not the literal's inferred one. The
|
|
92
|
+
// distribution config is `satisfies RawConfig`, which narrows to exactly the
|
|
93
|
+
// keys that file writes — so `identity.logo` does not typecheck in a fork that
|
|
94
|
+
// omits the field, which is precisely the fork this feature promises a bare
|
|
95
|
+
// header. The assignment (not a cast) is what `satisfies` already guarantees,
|
|
96
|
+
// and it makes every OPTIONAL field readable here. The other constants keep
|
|
97
|
+
// reading `identity` directly, so their literal types are untouched.
|
|
98
|
+
const declared: RawConfig = identity;
|
|
99
|
+
|
|
100
|
+
const PROGRAM_LOGO: readonly string[] = declared.logo ?? [];
|
|
101
|
+
|
|
49
102
|
export type { DetailLevel, OutputFormat };
|
|
50
103
|
export {
|
|
51
104
|
BIN_NAME,
|
|
52
105
|
DEFAULT_DETAIL_LEVEL,
|
|
53
106
|
DETAIL_LEVELS,
|
|
107
|
+
ISSUES_URL,
|
|
54
108
|
MCP_SERVER_NAME,
|
|
55
109
|
OUTPUT_FORMATS,
|
|
56
110
|
PROGRAM_DESCRIPTION,
|
|
111
|
+
PROGRAM_LOGO,
|
|
112
|
+
PROJECT_CONFIG_FILENAME,
|
|
57
113
|
RECOVERY_CLI_PREFIX,
|
|
58
114
|
VERSION,
|
|
59
115
|
};
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { mkdtempSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { basename, join } from "node:path";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { afterAll, afterEach, describe, expect, it, vi } from "vitest";
|
|
6
|
+
import type { VerbSpec } from "./kernel/spec/types.js";
|
|
7
|
+
|
|
8
|
+
// A fork's distribution config. Everything the kernel says about itself must
|
|
9
|
+
// follow from THIS object — that is the whole claim under test.
|
|
10
|
+
vi.mock("../pragma.conf.js", () => ({
|
|
11
|
+
default: {
|
|
12
|
+
name: "recipes",
|
|
13
|
+
help: "Explore the recipe graph",
|
|
14
|
+
colophon: {
|
|
15
|
+
markdown: "Made by the kitchen, one dish at a time.",
|
|
16
|
+
summary: "Kitchen-made.",
|
|
17
|
+
},
|
|
18
|
+
issuesUrl: "https://example.invalid/recipes/issues",
|
|
19
|
+
packs: [],
|
|
20
|
+
prefixes: { rcp: "https://example.invalid/recipes/" },
|
|
21
|
+
channel: "normal",
|
|
22
|
+
detail: "standard",
|
|
23
|
+
},
|
|
24
|
+
// The fork's domain vocabulary, declared beside its identity. Every read of
|
|
25
|
+
// a domain term must follow from THIS object, which the last case below
|
|
26
|
+
// asserts by capturing the SPARQL the readers actually emit.
|
|
27
|
+
vocabulary: {
|
|
28
|
+
altName: "rcp:name",
|
|
29
|
+
prompt: {
|
|
30
|
+
type: "rcp:Prompt",
|
|
31
|
+
body: "rcp:promptBody",
|
|
32
|
+
argument: "rcp:promptArgument",
|
|
33
|
+
argName: "rcp:argName",
|
|
34
|
+
argRequired: "rcp:argRequired",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
}));
|
|
38
|
+
|
|
39
|
+
/** Anything that would betray THIS distribution leaking through the kernel. */
|
|
40
|
+
const THIS_DISTRIBUTION = /pragma|canonical|design[- ]system/i;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* THIS distribution's name alone. The generated reference legitimately carries
|
|
44
|
+
* bundled-pack CONTENT a fork owns and edits — `@canonical/…` package names in
|
|
45
|
+
* `create` examples, `ds:`/`cs:` entity values — so the reference probe below
|
|
46
|
+
* is scoped to the one token that must never survive a rename.
|
|
47
|
+
*/
|
|
48
|
+
const THIS_NAME = /\bpragma\b/i;
|
|
49
|
+
|
|
50
|
+
// chalk paints ANSI when GITHUB_ACTIONS is set even off a TTY, which would
|
|
51
|
+
// break the plain-text structure assertions below.
|
|
52
|
+
const prevChalkLevel = chalk.level;
|
|
53
|
+
chalk.level = 0;
|
|
54
|
+
afterAll(() => {
|
|
55
|
+
chalk.level = prevChalkLevel;
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const originalConfigHome = process.env.XDG_CONFIG_HOME;
|
|
59
|
+
const originalDataHome = process.env.XDG_DATA_HOME;
|
|
60
|
+
afterEach(() => {
|
|
61
|
+
process.env.XDG_CONFIG_HOME = originalConfigHome;
|
|
62
|
+
process.env.XDG_DATA_HOME = originalDataHome;
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
/** A pack-contributed noun the kernel has never heard of. */
|
|
66
|
+
const dishList: VerbSpec = {
|
|
67
|
+
path: ["dish", "list"],
|
|
68
|
+
summary: "List every dish in the graph.",
|
|
69
|
+
params: [],
|
|
70
|
+
output: {
|
|
71
|
+
formatters: {
|
|
72
|
+
plain: (d) => String(d),
|
|
73
|
+
llm: (d) => String(d),
|
|
74
|
+
json: (d) => JSON.stringify(d),
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
capability: { needsStore: false, mutates: false, mcp: { expose: true } },
|
|
78
|
+
run: async () => null,
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
describe("identity projection — a fork changes values, not code (PROTECTED)", () => {
|
|
82
|
+
it("names the bin, the MCP server, and the recovery prefix from the distribution", async () => {
|
|
83
|
+
const c = await import("./constants.js");
|
|
84
|
+
expect(c.BIN_NAME).toBe("recipes");
|
|
85
|
+
expect(c.MCP_SERVER_NAME).toBe("recipes");
|
|
86
|
+
expect(c.RECOVERY_CLI_PREFIX).toBe("recipes ");
|
|
87
|
+
expect(c.PROGRAM_DESCRIPTION).toBe("Explore the recipe graph");
|
|
88
|
+
expect(c.ISSUES_URL).toBe("https://example.invalid/recipes/issues");
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it("installs its completion script under the fork's name, in all three shells", async () => {
|
|
92
|
+
// The basename is load-bearing, not cosmetic — `shell.ts` records what each
|
|
93
|
+
// shell measurably does with it (fish and bash-completion autoload BY the
|
|
94
|
+
// command's name; zsh binds by the `#compdef` tag but autoloads a function
|
|
95
|
+
// named after the file). A mismatch installs a file the shell never loads
|
|
96
|
+
// while `setup completions` prints success, `doctor` passes, and TAB does
|
|
97
|
+
// nothing. It can only be pinned from a fork: with the distribution named
|
|
98
|
+
// `pragma` a hardcoded literal and `BIN_NAME` agree by construction, so a
|
|
99
|
+
// test in `setup.test.ts` cannot fail. Here they cannot agree by accident.
|
|
100
|
+
const { completionScriptPath } = await import(
|
|
101
|
+
"./capabilities/setup/shell.js"
|
|
102
|
+
);
|
|
103
|
+
expect(basename(completionScriptPath("zsh"))).toBe("_recipes");
|
|
104
|
+
expect(basename(completionScriptPath("bash"))).toBe("recipes");
|
|
105
|
+
expect(basename(completionScriptPath("fish"))).toBe("recipes.fish");
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it("renders a front door that names only the fork", async () => {
|
|
109
|
+
const { BIN_NAME, PROGRAM_DESCRIPTION } = await import("./constants.js");
|
|
110
|
+
const { formatRootHelp } = await import("./kernel/project/cli/rootHelp.js");
|
|
111
|
+
const { configModule } = await import("./capabilities/config/index.js");
|
|
112
|
+
const { upgradeModule } = await import("./capabilities/upgrade/index.js");
|
|
113
|
+
const { colophonModule } = await import("./capabilities/colophon/index.js");
|
|
114
|
+
|
|
115
|
+
const help = formatRootHelp(
|
|
116
|
+
BIN_NAME,
|
|
117
|
+
PROGRAM_DESCRIPTION,
|
|
118
|
+
[
|
|
119
|
+
dishList,
|
|
120
|
+
...configModule.verbs,
|
|
121
|
+
...upgradeModule.verbs,
|
|
122
|
+
...colophonModule.verbs,
|
|
123
|
+
],
|
|
124
|
+
"9.9.9",
|
|
125
|
+
"https://recipes.test/issues",
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
expect(help).not.toMatch(THIS_DISTRIBUTION);
|
|
129
|
+
// The fork's own name and its own version — the header stamps the build
|
|
130
|
+
// exactly as `--version` reports it, and neither half names this
|
|
131
|
+
// distribution.
|
|
132
|
+
expect(help).toMatch(/^recipes v9\.9\.9 — Explore the recipe graph$/m);
|
|
133
|
+
// The pack noun leads the page untitled, and the blurb is not repeated as
|
|
134
|
+
// a heading three lines under the header that already carries it.
|
|
135
|
+
expect(help).toMatch(/^Usage: recipes .*\n\n {2}dish\b/m);
|
|
136
|
+
expect(help.match(/Explore the recipe graph/g)).toHaveLength(1);
|
|
137
|
+
expect(help).toContain("Read and write recipes configuration");
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it("orients an MCP agent with the fork's identity", async () => {
|
|
141
|
+
const { buildInstructions } = await import(
|
|
142
|
+
"./kernel/project/mcp/instructions.js"
|
|
143
|
+
);
|
|
144
|
+
const { emitSurface } = await import("./kernel/spec/emitSurface.js");
|
|
145
|
+
const { capabilities } = await import("./capabilities/index.js");
|
|
146
|
+
|
|
147
|
+
// The `pragma:` resource scheme is covenant-frozen PROTOCOL identity
|
|
148
|
+
// (surface.v2.json), not copy. The orientation DERIVES it from the emitted
|
|
149
|
+
// surface, so mask exactly what the surface declares — a leak the kernel
|
|
150
|
+
// authored itself would survive this substitution and fail below.
|
|
151
|
+
const { resources } = emitSurface(capabilities).mcpSurface;
|
|
152
|
+
expect(resources.length).toBeGreaterThan(0);
|
|
153
|
+
const text = resources.reduce(
|
|
154
|
+
(orientation, template) => orientation.replace(template, "<resource>"),
|
|
155
|
+
buildInstructions(capabilities),
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
expect(text).not.toMatch(THIS_DISTRIBUTION);
|
|
159
|
+
// No punctuation is appended to the fork's `help` phrase.
|
|
160
|
+
expect(text.startsWith("recipes — Explore the recipe graph (")).toBe(true);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
it("hints at a first-time user in the fork's own name", async () => {
|
|
164
|
+
process.env.XDG_CONFIG_HOME = mkdtempSync(join(tmpdir(), "identity-"));
|
|
165
|
+
const { setupHintLines } = await import("./kernel/config/firstRun.js");
|
|
166
|
+
const { globalConfigPath } = await import("./kernel/config/paths.js");
|
|
167
|
+
|
|
168
|
+
const hint = setupHintLines().join("\n");
|
|
169
|
+
|
|
170
|
+
// The hint names the fork's issues URL and its own setup command; the XDG
|
|
171
|
+
// namespace has to follow the fork's name too or the path assertion fails.
|
|
172
|
+
expect(hint).not.toMatch(THIS_DISTRIBUTION);
|
|
173
|
+
expect(globalConfigPath()).toContain("/recipes/");
|
|
174
|
+
expect(hint).toContain("https://example.invalid/recipes/issues");
|
|
175
|
+
expect(hint).toContain("recipes setup");
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it("narrates the colophon the fork declares, titled with the fork's name", async () => {
|
|
179
|
+
// The toolchain colophon is DECLARED content (`pragma.conf.ts#colophon`),
|
|
180
|
+
// not authored code: the collector must render the fork's declaration
|
|
181
|
+
// under the fork's own name. This is also where the FALLBACK is pinned —
|
|
182
|
+
// the toolchain's own section prints when no pack tells a domain story,
|
|
183
|
+
// and a fork with no packs is the distribution that has none.
|
|
184
|
+
// `kind: "pragma"` is asserted AS the literal:
|
|
185
|
+
// it is the frozen JSON discriminant every distribution serves (wire
|
|
186
|
+
// compatibility, like the resource scheme), deliberately NOT derived.
|
|
187
|
+
process.env.XDG_CONFIG_HOME = mkdtempSync(join(tmpdir(), "identity-"));
|
|
188
|
+
const { collectColophon } = await import(
|
|
189
|
+
"./capabilities/colophon/collectColophon.js"
|
|
190
|
+
);
|
|
191
|
+
const { bootRuntime } = await import("./kernel/runtime/boot.js");
|
|
192
|
+
|
|
193
|
+
const runtime = bootRuntime(
|
|
194
|
+
{ llm: false, autoLlm: false, format: "plain", verbose: false },
|
|
195
|
+
mkdtempSync(join(tmpdir(), "identity-colophon-")),
|
|
196
|
+
);
|
|
197
|
+
const { sections } = await collectColophon(runtime);
|
|
198
|
+
|
|
199
|
+
expect(sections).toHaveLength(1);
|
|
200
|
+
const own = sections[0];
|
|
201
|
+
expect(own?.kind).toBe("pragma");
|
|
202
|
+
expect(own?.title).toBe("recipes");
|
|
203
|
+
expect(own?.markdown).toBe("Made by the kitchen, one dish at a time.");
|
|
204
|
+
expect(own?.summary).toBe("Kitchen-made.");
|
|
205
|
+
expect(own?.source).toBe("built-in");
|
|
206
|
+
for (const text of [own?.title, own?.markdown, own?.summary]) {
|
|
207
|
+
expect(text).not.toMatch(THIS_DISTRIBUTION);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it("owns its own on-disk skills namespace", async () => {
|
|
212
|
+
// Config, state and cache were namespaced by the bin name; the SKILLS roots
|
|
213
|
+
// were not. Two distributions installed side by side therefore shared one
|
|
214
|
+
// `$XDG_DATA_HOME/pragma/skills` and one `<cwd>/.pragma/skills`, so a fork
|
|
215
|
+
// read the other's skills and could not install its own without collision.
|
|
216
|
+
process.env.XDG_DATA_HOME = join(tmpdir(), "identity-data");
|
|
217
|
+
const { skillRoots, installedSkillsDir } = await import(
|
|
218
|
+
"./capabilities/skill/discover.js"
|
|
219
|
+
);
|
|
220
|
+
expect(installedSkillsDir().endsWith(join("recipes", "skills"))).toBe(true);
|
|
221
|
+
expect(skillRoots("/work")).toEqual([
|
|
222
|
+
join("/work", ".recipes", "skills"),
|
|
223
|
+
installedSkillsDir(),
|
|
224
|
+
]);
|
|
225
|
+
for (const root of skillRoots("/work")) {
|
|
226
|
+
expect(root).not.toMatch(THIS_DISTRIBUTION);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
it("introduces its MCP server on the wire under the fork's name", async () => {
|
|
231
|
+
// The wire half of the identity rule the covenant records
|
|
232
|
+
// (mcpSurface.serverInfo): serverInfo PROJECTS — name from the declared
|
|
233
|
+
// distribution, version from the package. Asserted through a real
|
|
234
|
+
// initialize handshake (in-memory transport), not on the constant, so a
|
|
235
|
+
// hardcoded serverInfo in buildServer would fail here even while
|
|
236
|
+
// MCP_SERVER_NAME projects correctly.
|
|
237
|
+
const { projectMcp } = await import("./testing/helpers/projectMcp.js");
|
|
238
|
+
const { VERSION } = await import("./constants.js");
|
|
239
|
+
|
|
240
|
+
const mcp = await projectMcp([]);
|
|
241
|
+
const wire = mcp.serverInfo();
|
|
242
|
+
await mcp.cleanup();
|
|
243
|
+
|
|
244
|
+
expect(wire).toEqual({ name: "recipes", version: VERSION });
|
|
245
|
+
expect(wire?.name).not.toMatch(THIS_DISTRIBUTION);
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
it("registers an MCP server entry the fork's own binary answers to", async () => {
|
|
249
|
+
// The entry `setup mcp` writes is what a harness later EXECUTES. It was
|
|
250
|
+
// hardcoded while the key it is stored under derived from the same
|
|
251
|
+
// identity, so a fork registered a `recipes` server that ran `pragma` —
|
|
252
|
+
// and `doctor`'s `MCP configured` check, which re-derived the key by hand,
|
|
253
|
+
// could never see its own registration.
|
|
254
|
+
const { pragmaMcpEntry } = await import(
|
|
255
|
+
"./capabilities/setup/operations/setupMcp.js"
|
|
256
|
+
);
|
|
257
|
+
expect(pragmaMcpEntry("/work", "project")).toEqual({
|
|
258
|
+
command: "recipes",
|
|
259
|
+
args: ["mcp", "serve"],
|
|
260
|
+
cwd: "/work",
|
|
261
|
+
});
|
|
262
|
+
// The global band omits `cwd` (a per-user server is not project-pinned)
|
|
263
|
+
// but still runs the fork's own binary.
|
|
264
|
+
expect(pragmaMcpEntry("/work", "global")).toEqual({
|
|
265
|
+
command: "recipes",
|
|
266
|
+
args: ["mcp", "serve"],
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
it("generates a reference that never names this distribution", async () => {
|
|
271
|
+
// `docs/reference/` is the surface this package PUBLISHES as machine-derived
|
|
272
|
+
// truth, so it is the surface a fork's rename must reach in full. Every
|
|
273
|
+
// command a page quotes, every page title and every prose mention is
|
|
274
|
+
// composed from `BIN_NAME`. The failure names `page: line`, so it is a
|
|
275
|
+
// worklist and not just a count.
|
|
276
|
+
//
|
|
277
|
+
// ONE exemption, the same one the MCP orientation case above makes and for
|
|
278
|
+
// the same reason: the `pragma:` resource scheme is covenant-frozen PROTOCOL
|
|
279
|
+
// identity (`surface.v2.json`), inherited by a fork along with the
|
|
280
|
+
// `pragma/box`, `pragma/instanceCount` and `pragma/type` `_meta` keys it
|
|
281
|
+
// travels with, and `tools.md` reports it truthfully. Masked from the
|
|
282
|
+
// emitted surface, not by a literal, so a leak the kernel authored itself
|
|
283
|
+
// still fails here.
|
|
284
|
+
const { emitReference } = await import("./kernel/spec/emitReference.js");
|
|
285
|
+
const { emitSurface } = await import("./kernel/spec/emitSurface.js");
|
|
286
|
+
const { capabilities } = await import("./capabilities/index.js");
|
|
287
|
+
|
|
288
|
+
const { resources } = emitSurface(capabilities).mcpSurface;
|
|
289
|
+
expect(resources.length).toBeGreaterThan(0);
|
|
290
|
+
const unmask = (line: string): string =>
|
|
291
|
+
resources.reduce((text, template) => text.replace(template, ""), line);
|
|
292
|
+
|
|
293
|
+
const offenders: string[] = [];
|
|
294
|
+
for (const [page, content] of emitReference(capabilities)) {
|
|
295
|
+
for (const line of content.split("\n")) {
|
|
296
|
+
if (THIS_NAME.test(unmask(line))) offenders.push(`${page}: ${line}`);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
expect(offenders).toEqual([]);
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
it("reads the graph with the fork's declared terms, not this distribution's", async () => {
|
|
303
|
+
// The couplings this tranche removed were all hardcoded terms, and a
|
|
304
|
+
// hardcoded term still passes every other test in this suite: the fixtures
|
|
305
|
+
// on both sides would simply agree. So capture what the readers EMIT.
|
|
306
|
+
const { DEFAULT_PREFIX_MAP } = await import("./kernel/render/prefixes.js");
|
|
307
|
+
const { VOCABULARY } = await import("./kernel/vocabulary.js");
|
|
308
|
+
const { readPrompts } = await import(
|
|
309
|
+
"./kernel/project/mcp/prompts/source.js"
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
// The display/expansion map: the fork's namespaces, none of ours, and the
|
|
313
|
+
// W3C half the kernel owns unchanged.
|
|
314
|
+
expect(DEFAULT_PREFIX_MAP.rcp).toBe("https://example.invalid/recipes/");
|
|
315
|
+
expect(DEFAULT_PREFIX_MAP.ds).toBeUndefined();
|
|
316
|
+
expect(DEFAULT_PREFIX_MAP.rdfs).toBe(
|
|
317
|
+
"http://www.w3.org/2000/01/rdf-schema#",
|
|
318
|
+
);
|
|
319
|
+
|
|
320
|
+
// The tier noun is no longer code AT ALL (L-OPEN-9): both its verbs are a
|
|
321
|
+
// story the distribution declares, so a fork writes its own terms into the
|
|
322
|
+
// declaration directly and there is nothing left in the kernel for a
|
|
323
|
+
// hardcoded tier term to hide in. `distribution.test.ts` holds this
|
|
324
|
+
// distribution's declaration coherent with the vocabulary. What the KERNEL
|
|
325
|
+
// still reads domain terms with is the vocabulary projection (the index
|
|
326
|
+
// builder interpolates `VOCABULARY.altName`) and the prompts reader —
|
|
327
|
+
// captured below.
|
|
328
|
+
expect(VOCABULARY.altName).toBe("rcp:name");
|
|
329
|
+
|
|
330
|
+
// The generated prompt read, captured off a stub facade.
|
|
331
|
+
const queries: string[] = [];
|
|
332
|
+
const recorder = {
|
|
333
|
+
query: {
|
|
334
|
+
sparql: (query: string) => {
|
|
335
|
+
queries.push(query);
|
|
336
|
+
return Promise.resolve({ type: "select", bindings: [] });
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
} as never;
|
|
340
|
+
|
|
341
|
+
await expect(readPrompts(recorder)).resolves.toEqual([]);
|
|
342
|
+
|
|
343
|
+
const emitted = queries.join("\n");
|
|
344
|
+
expect(emitted).toContain("rcp:Prompt");
|
|
345
|
+
expect(emitted).toContain("rcp:promptBody");
|
|
346
|
+
expect(emitted).not.toMatch(THIS_DISTRIBUTION);
|
|
347
|
+
});
|
|
348
|
+
});
|