@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,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PROTECTED — the shipped-entry `create` guard.
|
|
3
|
+
*
|
|
4
|
+
* Spawns the EMITTED entry the published package points at
|
|
5
|
+
* (`node dist/src/bin.js`) and asserts every `create` noun writes a tree
|
|
6
|
+
* BYTE-IDENTICAL to a source run of the same generator (`bun src/bin.ts …`).
|
|
7
|
+
* The source run is the reference: it reads the `.ejs` templates from disk with
|
|
8
|
+
* no indirection.
|
|
9
|
+
*
|
|
10
|
+
* WHAT THIS REPLACES. Until the distribution stopped shipping a
|
|
11
|
+
* `bun build --compile` executable, this guard covered `create component` only,
|
|
12
|
+
* and its sibling describe pinned the REFUSAL of `create package` /
|
|
13
|
+
* `create application`: those generators call `template({ source })`, summon-core
|
|
14
|
+
* fell through to `readFile(options.source)`, and inside the binary's virtual
|
|
15
|
+
* filesystem that died with `ENOENT … /$bunfs/templates/package.json.ejs` after
|
|
16
|
+
* `mkdir` had already run — a half-made package on the user's disk. The gate
|
|
17
|
+
* existed to turn that crash into a clean refusal.
|
|
18
|
+
*
|
|
19
|
+
* There is no virtual filesystem now. Every generator's templates are real
|
|
20
|
+
* files under its own package, so all three nouns run from the shipped entry and
|
|
21
|
+
* all three are asserted here. THE REFUSAL CASES ARE GONE ON PURPOSE: a test
|
|
22
|
+
* asserting `create package` refuses would now be asserting a defect.
|
|
23
|
+
*
|
|
24
|
+
* The svelte + lit cases stay load-bearing: `types.ts.ejs` / `index.ts.ejs` /
|
|
25
|
+
* `styles.css.ejs` / `stories.ts.ejs` exist in react/, svelte/ AND lit/, so a
|
|
26
|
+
* basename-matching regression could emit the WRONG framework's file. A wrong
|
|
27
|
+
* file differs from the source run → red here.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { execFileSync, spawnSync } from "node:child_process";
|
|
31
|
+
import { mkdtempSync, readdirSync, readFileSync } from "node:fs";
|
|
32
|
+
import { tmpdir } from "node:os";
|
|
33
|
+
import { dirname, join, resolve } from "node:path";
|
|
34
|
+
import { fileURLToPath } from "node:url";
|
|
35
|
+
import { describe, expect, it } from "vitest";
|
|
36
|
+
|
|
37
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
38
|
+
const repoRoot = resolve(here, "../../../../../..");
|
|
39
|
+
const cliNextDir = join(repoRoot, "packages/cli/pragma");
|
|
40
|
+
const sourceEntry = join(cliNextDir, "src/bin.ts");
|
|
41
|
+
const shippedEntry = join(cliNextDir, "dist/src/bin.js");
|
|
42
|
+
const freshCwd = (): string => mkdtempSync(join(tmpdir(), "pragma-shipped-"));
|
|
43
|
+
|
|
44
|
+
// `dist/` is provisioned by `testing/perf/globalSetup.ts`, which re-emits it
|
|
45
|
+
// whenever it is missing or older than `src/**`, `scripts/**`, `pragma.conf.ts`
|
|
46
|
+
// or `package.json` — so these tests exercise the current emit without a second
|
|
47
|
+
// `beforeAll` writing `dist/` in place while another worker is spawning it.
|
|
48
|
+
|
|
49
|
+
/** Read a directory tree into a sorted map of relative path → contents. */
|
|
50
|
+
function snapshot(dir: string): Map<string, string> {
|
|
51
|
+
const out = new Map<string, string>();
|
|
52
|
+
const walk = (d: string, base: string): void => {
|
|
53
|
+
for (const entry of readdirSync(d, { withFileTypes: true }).sort((a, b) =>
|
|
54
|
+
a.name.localeCompare(b.name),
|
|
55
|
+
)) {
|
|
56
|
+
const rel = base ? `${base}/${entry.name}` : entry.name;
|
|
57
|
+
if (entry.isDirectory()) walk(join(d, entry.name), rel);
|
|
58
|
+
else out.set(rel, readFileSync(join(d, entry.name), "utf-8"));
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
walk(dir, "");
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The create invocations under guard — a LITERAL table, deliberately not derived
|
|
67
|
+
* from `create`'s own declaration, so dropping a noun from the surface turns
|
|
68
|
+
* this red rather than silently shrinking the guard.
|
|
69
|
+
*
|
|
70
|
+
* No case installs dependencies (`runInstall` defaults false), so every tree is
|
|
71
|
+
* generator output alone and byte-comparable.
|
|
72
|
+
*/
|
|
73
|
+
const CASES: ReadonlyArray<{ label: string; args: readonly string[] }> = [
|
|
74
|
+
...(["react", "svelte", "lit"] as const).map((framework) => ({
|
|
75
|
+
label: `component ${framework}`,
|
|
76
|
+
// The framework is a PATH SEGMENT, not a flag — `create` mirrors summon's
|
|
77
|
+
// own tree (`summon component react <path>`), so the two CLIs take the
|
|
78
|
+
// same argv.
|
|
79
|
+
args: ["create", "component", framework, "src/components/Widget", "--yes"],
|
|
80
|
+
})),
|
|
81
|
+
{
|
|
82
|
+
label: "package",
|
|
83
|
+
args: ["create", "package", "--name", "@canonical/probe", "--yes"],
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
label: "application",
|
|
87
|
+
// `react` is a path segment here too — the declared binding is
|
|
88
|
+
// `application/react`, and the tree mirrors summon's.
|
|
89
|
+
args: ["create", "application", "react", "probeapp", "--yes"],
|
|
90
|
+
},
|
|
91
|
+
];
|
|
92
|
+
|
|
93
|
+
/** Run one create invocation in its own cwd and snapshot what it wrote. */
|
|
94
|
+
function create(
|
|
95
|
+
command: string,
|
|
96
|
+
prefix: readonly string[],
|
|
97
|
+
args: readonly string[],
|
|
98
|
+
): Map<string, string> {
|
|
99
|
+
const dir = freshCwd();
|
|
100
|
+
execFileSync(command, [...prefix, ...args], { cwd: dir, stdio: "pipe" });
|
|
101
|
+
return snapshot(dir);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
describe("shipped pragma create (PROTECTED)", () => {
|
|
105
|
+
for (const { label, args } of CASES) {
|
|
106
|
+
it(`${label}: shipped entry ≡ source run, byte-for-byte`, () => {
|
|
107
|
+
// (1) The shipped entry, exactly as a consumer's `pragma` runs it.
|
|
108
|
+
const shipped = create(process.execPath, [shippedEntry], args);
|
|
109
|
+
// (2) A source run — the reference output.
|
|
110
|
+
const source = create("bun", [sourceEntry], args);
|
|
111
|
+
|
|
112
|
+
// Wrote something. Before the distribution stopped shipping a compiled
|
|
113
|
+
// binary, `package` and `application` wrote NOTHING here — they refused.
|
|
114
|
+
expect(shipped.size).toBeGreaterThan(0);
|
|
115
|
+
// Same file set …
|
|
116
|
+
expect([...shipped.keys()].sort()).toEqual([...source.keys()].sort());
|
|
117
|
+
// … and byte-identical contents.
|
|
118
|
+
for (const [path, content] of shipped) {
|
|
119
|
+
expect(source.get(path), `content of ${path}`).toBe(content);
|
|
120
|
+
}
|
|
121
|
+
}, 180_000);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* PROTECTED — the shipped-entry READ guard (U1-orig).
|
|
127
|
+
*
|
|
128
|
+
* A READ command (`block list`, `--help`) never calls a generator's
|
|
129
|
+
* `generate()`, so — with the generators loading their templates LAZILY on first
|
|
130
|
+
* `generate()` rather than at module-eval — it must never touch a `.ejs` at all.
|
|
131
|
+
* This is the exact gap the create-only smoke above missed: the component
|
|
132
|
+
* generators used to load templates via a top-level `await`, so a READ crashed
|
|
133
|
+
* with `Template not found`. The lazy load makes a READ template-free, and this
|
|
134
|
+
* pins it at the process boundary where an eager load would resurface.
|
|
135
|
+
*/
|
|
136
|
+
describe("shipped pragma READ smoke (PROTECTED)", () => {
|
|
137
|
+
// A cold store cleanly reports STORE_UNAVAILABLE (exit 3); `--help` never needs
|
|
138
|
+
// a store (exit 0). Both fully exercise startup + dispatch — the phase where an
|
|
139
|
+
// eager generator template load would have crashed — without a store or writes.
|
|
140
|
+
const READS: ReadonlyArray<{
|
|
141
|
+
args: readonly string[];
|
|
142
|
+
okExit: readonly number[];
|
|
143
|
+
}> = [
|
|
144
|
+
{ args: ["block", "list"], okExit: [0, 3] },
|
|
145
|
+
{ args: ["--help"], okExit: [0] },
|
|
146
|
+
];
|
|
147
|
+
|
|
148
|
+
for (const { args, okExit } of READS) {
|
|
149
|
+
it(`\`${args.join(" ")}\` runs without a Template-not-found crash`, () => {
|
|
150
|
+
const result = spawnSync(process.execPath, [shippedEntry, ...args], {
|
|
151
|
+
cwd: freshCwd(),
|
|
152
|
+
stdio: "pipe",
|
|
153
|
+
encoding: "utf-8",
|
|
154
|
+
});
|
|
155
|
+
const output = `${result.stdout ?? ""}${result.stderr ?? ""}`;
|
|
156
|
+
// The exact crash the lazy-template fix closes.
|
|
157
|
+
expect(output).not.toMatch(/Template not found/);
|
|
158
|
+
// Nor does it collapse to the internal-bug path (the crash's other tell).
|
|
159
|
+
expect(output).not.toMatch(/Internal error/);
|
|
160
|
+
// It reaches a clean dispatch outcome, not an uncaught startup crash.
|
|
161
|
+
expect(okExit).toContain(result.status);
|
|
162
|
+
}, 30_000);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
@@ -1,8 +1,32 @@
|
|
|
1
|
+
import type { CREATE_GENERATORS } from "./constants.js";
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
4
|
+
* The `create` nouns — one per declared generator binding (path capped at two
|
|
5
|
+
* segments). Derived from {@link CREATE_GENERATORS} so the union cannot drift
|
|
6
|
+
* from the bindings.
|
|
7
|
+
*
|
|
8
|
+
* Deliberately free of any summon-core / generator import, so a module that only
|
|
9
|
+
* needs this type (e.g. `create.verb`) does not drag `pickGenerator` — and its
|
|
10
|
+
* heavy generator imports — into the static graph.
|
|
5
11
|
*/
|
|
12
|
+
export type CreateKind = keyof typeof CREATE_GENERATORS;
|
|
6
13
|
|
|
7
|
-
/**
|
|
8
|
-
|
|
14
|
+
/**
|
|
15
|
+
* The REGISTERED CLI spelling of one generator prompt, baked into
|
|
16
|
+
* `createSurface.generated.ts` at build time (the build derives it with the
|
|
17
|
+
* same summon-core helpers the mount registers through). Consumers that need
|
|
18
|
+
* only the spelling — completion tokens, the reference's usage lines — read
|
|
19
|
+
* this baked record instead of calling the projection, which keeps the
|
|
20
|
+
* `--help`/`__complete` fast paths free of the registration machinery.
|
|
21
|
+
*/
|
|
22
|
+
export interface PromptCliSyntax {
|
|
23
|
+
/**
|
|
24
|
+
* The registered flag token (`--component-path`; a default-true confirm
|
|
25
|
+
* registers ONLY its `--no-<kebab>` form).
|
|
26
|
+
*/
|
|
27
|
+
readonly flag: string;
|
|
28
|
+
/** Whether the registered flag takes a value (`--styles` does not). */
|
|
29
|
+
readonly takesValue: boolean;
|
|
30
|
+
/** The prompt name's kebab-case CLI spelling (`componentPath` → `component-path`). */
|
|
31
|
+
readonly kebabName: string;
|
|
32
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Standard-noun semantic parity (PROTECTED) — the
|
|
3
|
-
* code-standards fixture graph.
|
|
2
|
+
* Standard-noun semantic parity (PROTECTED) — the `standard` story
|
|
3
|
+
* `pragma.conf.ts` declares, over a code-standards fixture graph.
|
|
4
4
|
*
|
|
5
5
|
* The hand-written standard domain is gone, so parity is asserted directly
|
|
6
6
|
* against the graph: every standard is reachable through list/lookup/categories/
|
|
@@ -10,16 +10,22 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
13
|
-
import { compilePack } from "
|
|
14
|
-
import type { LookupOutput } from "
|
|
15
|
-
import { parsePackDefinition } from "
|
|
16
|
-
import type { PackRow } from "
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import
|
|
20
|
-
import type {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
13
|
+
import { compilePack } from "../kernel/packs/compile.js";
|
|
14
|
+
import type { LookupOutput } from "../kernel/packs/resolveEntity.js";
|
|
15
|
+
import { parsePackDefinition } from "../kernel/packs/schema.js";
|
|
16
|
+
import type { PackRow } from "../kernel/packs/types.js";
|
|
17
|
+
import { distributionSource } 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 standardPack = declaredStories.get("standard");
|
|
26
|
+
if (!standardPack) {
|
|
27
|
+
throw new Error('pragma.conf.ts declares no story for "standard"');
|
|
28
|
+
}
|
|
23
29
|
|
|
24
30
|
const CS = "http://pragma.canonical.com/codestandards#";
|
|
25
31
|
const PREFIXES = {
|
|
@@ -72,7 +78,11 @@ cs:code.function.purity a cs:CodeStandard ;
|
|
|
72
78
|
`;
|
|
73
79
|
|
|
74
80
|
const verbs = () =>
|
|
75
|
-
compilePack(
|
|
81
|
+
compilePack(
|
|
82
|
+
standardPack,
|
|
83
|
+
distributionSource("pragma.conf.ts"),
|
|
84
|
+
DEFAULT_PREFIX_MAP,
|
|
85
|
+
);
|
|
76
86
|
const verb = (label: string) =>
|
|
77
87
|
verbs().find((v) => verbKey(v.path) === `standard ${label}`) as VerbSpec;
|
|
78
88
|
|
|
@@ -98,7 +108,7 @@ async function lookupAt(
|
|
|
98
108
|
return out.results.at(0) as Record<string, unknown>;
|
|
99
109
|
}
|
|
100
110
|
|
|
101
|
-
describe("standard
|
|
111
|
+
describe("standard story definition (PROTECTED)", () => {
|
|
102
112
|
it("round-trips as declarative JSON and validates", () => {
|
|
103
113
|
expect(
|
|
104
114
|
parsePackDefinition(JSON.parse(JSON.stringify(standardPack)), "t"),
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The distribution's own declared read stories (PROTECTED).
|
|
3
|
+
*
|
|
4
|
+
* `pragma.conf.ts` is hand-authored data that the TypeScript compiler checks
|
|
5
|
+
* against `PackDefinition`; `kernel/packs/schema.ts` is an independently written
|
|
6
|
+
* zod grammar that every config- and package-declared story must pass. Nothing
|
|
7
|
+
* forced the two to agree until the distribution started coming through the same
|
|
8
|
+
* door — and the first thing that comparison found was `sample.fixedCount`,
|
|
9
|
+
* documented and used by three of these five stories yet missing from the
|
|
10
|
+
* `.strict()` sample schema, which made any third-party story declaring it die
|
|
11
|
+
* with a fatal CONFIG_ERROR. Round-tripping ALL five is what keeps that shut.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { describe, expect, it } from "vitest";
|
|
15
|
+
import { compilePack } from "../kernel/packs/compile.js";
|
|
16
|
+
import { parsePackDefinition } from "../kernel/packs/schema.js";
|
|
17
|
+
import { DEFAULT_PREFIX_MAP } from "../kernel/render/prefixes.js";
|
|
18
|
+
import type { VerbSpec } from "../kernel/spec/types.js";
|
|
19
|
+
import { VOCABULARY } from "../kernel/vocabulary.js";
|
|
20
|
+
import { declaredStories, storyModules } from "./distribution.js";
|
|
21
|
+
import { capabilities } from "./index.js";
|
|
22
|
+
|
|
23
|
+
/** A verb's DECLARED shape — everything but the closures a compile mints fresh. */
|
|
24
|
+
function declaredShape(verb: VerbSpec): Record<string, unknown> {
|
|
25
|
+
return {
|
|
26
|
+
path: verb.path.join(" "),
|
|
27
|
+
summary: verb.summary,
|
|
28
|
+
doc: verb.doc,
|
|
29
|
+
params: verb.params,
|
|
30
|
+
capability: verb.capability,
|
|
31
|
+
examples: verb.examples,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
describe("the distribution's declared stories (PROTECTED)", () => {
|
|
36
|
+
it("declares exactly the seven domain nouns", () => {
|
|
37
|
+
// Every domain noun is now nothing BUT its story (L-OPEN-9), so a renamed
|
|
38
|
+
// or dropped noun deletes a whole command rather than shrinking one — it
|
|
39
|
+
// must fail HERE.
|
|
40
|
+
expect([...declaredStories.keys()].sort()).toEqual([
|
|
41
|
+
"block",
|
|
42
|
+
"concept",
|
|
43
|
+
"implementation",
|
|
44
|
+
"modifier",
|
|
45
|
+
"standard",
|
|
46
|
+
"tier",
|
|
47
|
+
"token",
|
|
48
|
+
]);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it.each([
|
|
52
|
+
...declaredStories.keys(),
|
|
53
|
+
])("the %s story validates against the pack grammar, unchanged", (noun) => {
|
|
54
|
+
const story = declaredStories.get(noun);
|
|
55
|
+
expect(
|
|
56
|
+
parsePackDefinition(JSON.parse(JSON.stringify(story)), "pragma.conf.ts"),
|
|
57
|
+
).toEqual(story);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("every declared noun reaches the registry as an overridable module", () => {
|
|
61
|
+
for (const noun of declaredStories.keys()) {
|
|
62
|
+
const module = capabilities.find((entry) => entry.name === noun);
|
|
63
|
+
expect(module, `no capability module for "${noun}"`).toBeDefined();
|
|
64
|
+
// `story: true` is what lets a project's own story REPLACE it at
|
|
65
|
+
// dispatch; without it the noun would be treated as authored CLI.
|
|
66
|
+
expect(module?.story).toBe(true);
|
|
67
|
+
expect(module?.verbs.length).toBeGreaterThan(0);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it("ZERO hand-written data commands: a registered noun IS its compiled story", () => {
|
|
72
|
+
// The machine form of L-OPEN-9's end state — "a fork defines its entire
|
|
73
|
+
// read surface in pragma.conf.ts". Prose can go stale; this cannot. Every
|
|
74
|
+
// declared noun's REGISTERED module (what the CLI, the MCP server and the
|
|
75
|
+
// generated reference all project) must be verb-for-verb what recompiling
|
|
76
|
+
// its story alone produces. Re-introducing a composite — an authored module
|
|
77
|
+
// that prepends or appends a hand-written verb beside the story, which is
|
|
78
|
+
// exactly how `block`, `token` and `tier` used to be built — fails here,
|
|
79
|
+
// whatever the docblocks say.
|
|
80
|
+
for (const [noun, story] of declaredStories) {
|
|
81
|
+
const registered = capabilities.find((entry) => entry.name === noun);
|
|
82
|
+
const compiled = compilePack(story, "pragma.conf.ts", DEFAULT_PREFIX_MAP);
|
|
83
|
+
// Two halves, because a spec carries closures a fresh compile cannot
|
|
84
|
+
// reproduce by identity. (1) SHAPE: recompiling the story alone must
|
|
85
|
+
// yield the same verbs, declared the same way — an extra verb or an extra
|
|
86
|
+
// flag beside the story fails here.
|
|
87
|
+
expect(
|
|
88
|
+
registered?.verbs.map(declaredShape),
|
|
89
|
+
`"${noun}" registers verbs its story does not declare`,
|
|
90
|
+
).toEqual(compiled.map(declaredShape));
|
|
91
|
+
// (2) IDENTITY: each registered verb must BE the compiled story's verb
|
|
92
|
+
// object, not a look-alike. A composite module — the `[...story.verbs,
|
|
93
|
+
// handWrittenVerb]` shape `block`, `token` and `tier` used to be built
|
|
94
|
+
// with — constructs new objects, so it cannot pass this even if its
|
|
95
|
+
// shapes happen to match.
|
|
96
|
+
const fromStory = storyModules.get(noun)?.verbs ?? [];
|
|
97
|
+
expect(registered?.verbs.length).toBe(fromStory.length);
|
|
98
|
+
registered?.verbs.forEach((verb, index) => {
|
|
99
|
+
expect(verb, `"${noun}" verb ${index} is not the story's`).toBe(
|
|
100
|
+
fromStory[index],
|
|
101
|
+
);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("the tier story is internally coherent, and coherent with the vocabulary", () => {
|
|
107
|
+
// Both tier verbs are declared data now (L-OPEN-9), so the noun can no
|
|
108
|
+
// longer disagree with ITSELF in code — but the list query spells its
|
|
109
|
+
// class and property literally (`pragma.conf.ts` is inert data and imports
|
|
110
|
+
// nothing) while the lookup declares them as fields, and the vocabulary
|
|
111
|
+
// declares the addressing property once more for the index builder. This
|
|
112
|
+
// holds all three to one class and one property, so a candidate that
|
|
113
|
+
// completes still resolves and the index projects the names the lookup
|
|
114
|
+
// matches.
|
|
115
|
+
const story = declaredStories.get("tier");
|
|
116
|
+
const query = story?.list?.query ?? "";
|
|
117
|
+
expect(story?.lookup?.type).toBe("ds:Tier");
|
|
118
|
+
expect(query).toContain(`a ${story?.lookup?.type}`);
|
|
119
|
+
expect(story?.lookup?.by).toBe(VOCABULARY.altName);
|
|
120
|
+
expect(query).toContain(`${VOCABULARY.altName} ?name`);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The distribution's own read stories, compiled at module load.
|
|
3
|
+
*
|
|
4
|
+
* `pragma.conf.ts` declares them on the packs that supply them; this is the ONE
|
|
5
|
+
* place those declarations become capabilities. They come through the SAME door
|
|
6
|
+
* a third-party story does — {@link compileStoryModule} — so the mechanism the CLI
|
|
7
|
+
* offers forks is the mechanism the CLI itself runs on.
|
|
8
|
+
*
|
|
9
|
+
* They are compiled STATICALLY rather than merged at dispatch on purpose: the
|
|
10
|
+
* `--help` / `__complete` fast paths read the static capability set, and
|
|
11
|
+
* `surface/surface.v2.json` freezes the emitted surface, so a noun that only
|
|
12
|
+
* arrived at dispatch would vanish from help and completion on a fresh install.
|
|
13
|
+
* That is affordable because this module is zod-free and pure — `pragma.conf.ts`
|
|
14
|
+
* is inert data and the compiler builds specs without touching the store.
|
|
15
|
+
*
|
|
16
|
+
* Config- and package-declared stories still OVERRIDE these at dispatch; the
|
|
17
|
+
* `story` marker on each module is what tells `assembleEffectiveModules` which
|
|
18
|
+
* modules may be replaced.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import conf from "../../pragma.conf.js";
|
|
22
|
+
import { compileStoryModule } from "../kernel/packs/compile.js";
|
|
23
|
+
import {
|
|
24
|
+
distributionSource,
|
|
25
|
+
type PackDefinition,
|
|
26
|
+
} from "../kernel/packs/types.js";
|
|
27
|
+
import { DEFAULT_PREFIX_MAP } from "../kernel/render/index.js";
|
|
28
|
+
import type { CapabilityModule } from "../kernel/spec/index.js";
|
|
29
|
+
|
|
30
|
+
/** The read stories `pragma.conf.ts` declares on its packs, by noun. */
|
|
31
|
+
export const declaredStories: ReadonlyMap<string, PackDefinition> = new Map(
|
|
32
|
+
conf.packs
|
|
33
|
+
.flatMap((pack) => pack.stories ?? [])
|
|
34
|
+
.map((story): readonly [string, PackDefinition] => [story.noun, story]),
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Those stories compiled to capability modules, by noun.
|
|
39
|
+
*
|
|
40
|
+
* `capabilities/index.ts` appends every module no authored one claims — and
|
|
41
|
+
* since L-OPEN-9 that is every one of them: no data noun is authored, so a
|
|
42
|
+
* declared story IS the whole noun. `distribution.test.ts` holds that shut by
|
|
43
|
+
* asserting each registered module's verbs deep-equal its compiled story's.
|
|
44
|
+
*/
|
|
45
|
+
export const storyModules: ReadonlyMap<string, CapabilityModule> = new Map(
|
|
46
|
+
[...declaredStories].map(([noun, story]) => [
|
|
47
|
+
noun,
|
|
48
|
+
compileStoryModule(
|
|
49
|
+
story,
|
|
50
|
+
distributionSource("pragma.conf.ts"),
|
|
51
|
+
DEFAULT_PREFIX_MAP,
|
|
52
|
+
),
|
|
53
|
+
]),
|
|
54
|
+
);
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { BIN_NAME } from "../../../constants.js";
|
|
1
2
|
import { entityTotal } from "../../../kernel/completion/entitySource.js";
|
|
2
|
-
import type { PragmaRuntime } from "../../../kernel/runtime/
|
|
3
|
+
import type { PragmaRuntime } from "../../../kernel/runtime/index.js";
|
|
3
4
|
import type { CheckResult } from "../types.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
|
-
* Check that the
|
|
7
|
+
* Check that the local store boots, reporting the entity total and boot time.
|
|
8
|
+
* The check is NAMED "store" in the report — the same word every other surface
|
|
9
|
+
* uses for it; the ke library it boots through is an implementation detail.
|
|
7
10
|
*
|
|
8
11
|
* This is the ONE check that touches the store — it boots the shared lazy store
|
|
9
12
|
* inside a try/catch, so doctor stays storeless-by-default at the dispatch level
|
|
@@ -23,17 +26,16 @@ export async function checkKeStore(rt: PragmaRuntime): Promise<CheckResult> {
|
|
|
23
26
|
const total = entityTotal(session.index);
|
|
24
27
|
const elapsed = Math.round(performance.now() - start);
|
|
25
28
|
return {
|
|
26
|
-
name: "
|
|
29
|
+
name: "store",
|
|
27
30
|
status: "pass",
|
|
28
31
|
detail: `${total.toLocaleString()} entities in ${elapsed}ms`,
|
|
29
32
|
};
|
|
30
33
|
} catch {
|
|
31
34
|
return {
|
|
32
|
-
name: "
|
|
35
|
+
name: "store",
|
|
33
36
|
status: "fail",
|
|
34
|
-
detail: "
|
|
35
|
-
remedy:
|
|
36
|
-
"Ensure design-system packages are installed and run `pragma sources update`.",
|
|
37
|
+
detail: "cannot boot",
|
|
38
|
+
remedy: `Ensure design-system packs are configured and run \`${BIN_NAME} sources update\`.`,
|
|
37
39
|
};
|
|
38
40
|
}
|
|
39
41
|
}
|
|
@@ -1,73 +1,109 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Doctor check: report
|
|
2
|
+
* Doctor check: report which pack answers this project's reads.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* It switches on the ONE boot decision ({@link resolveSources}) rather than
|
|
5
|
+
* re-deriving it from config, so doctor can never call an install healthy that
|
|
6
|
+
* every read would fail. That is the whole point of the check: a project that
|
|
7
|
+
* configured its own packs and never built them reports `fail` with the update
|
|
8
|
+
* remedy — not a pass listing the distribution's packs it is not reading.
|
|
9
|
+
* Storeless throughout: the pointer, the manifest, and the entity index are
|
|
10
|
+
* read off disk, never through a store session.
|
|
11
|
+
*
|
|
12
|
+
* It also names every read story that pack carries but cannot use. Those are
|
|
13
|
+
* DROPPED at dispatch rather than thrown (a third-party story must never break
|
|
14
|
+
* a command), so doctor is where the user finds out — and it goes through the
|
|
15
|
+
* same `validateStories` the dispatch path uses, so the two can never disagree.
|
|
9
16
|
*/
|
|
10
17
|
|
|
18
|
+
import { BIN_NAME } from "../../../constants.js";
|
|
11
19
|
import {
|
|
12
20
|
entityTotal,
|
|
13
21
|
readPackIndex,
|
|
14
22
|
} from "../../../kernel/completion/entitySource.js";
|
|
15
|
-
import
|
|
16
|
-
import {
|
|
17
|
-
|
|
23
|
+
import { validateStories } from "../../../kernel/packs/index.js";
|
|
24
|
+
import {
|
|
25
|
+
embeddedManifest,
|
|
26
|
+
readManifest,
|
|
27
|
+
} from "../../../kernel/runtime/graphpack/index.js";
|
|
28
|
+
import { activeStories } from "../../../kernel/runtime/graphpack/stories.js";
|
|
29
|
+
import type { PragmaRuntime } from "../../../kernel/runtime/index.js";
|
|
30
|
+
import type { SourcesDecision } from "../../../kernel/runtime/resolveSources.js";
|
|
31
|
+
import { resolveSources } from "../../../kernel/runtime/resolveSources.js";
|
|
18
32
|
import type { CheckItem, CheckResult } from "../types.js";
|
|
19
33
|
|
|
20
|
-
|
|
21
|
-
|
|
34
|
+
/**
|
|
35
|
+
* The stories the answering pack carries but cannot use, as check items.
|
|
36
|
+
*
|
|
37
|
+
* The registry is reached through a RUNTIME dynamic import (as
|
|
38
|
+
* `collectColophon` does) so the static `capabilities/index → doctorModule →
|
|
39
|
+
* checkPackageRefs → capabilities/index` cycle can never form.
|
|
40
|
+
*
|
|
41
|
+
* @param decision - The boot decision the check already resolved.
|
|
42
|
+
* @returns One failing item per ignored story, in declaration order.
|
|
43
|
+
* @note Impure — reads the answering pack's `stories.json`.
|
|
44
|
+
*/
|
|
45
|
+
async function ignoredStoryItems(
|
|
46
|
+
decision: SourcesDecision,
|
|
47
|
+
): Promise<CheckItem[]> {
|
|
48
|
+
const { capabilities } = await import("../../index.js");
|
|
49
|
+
const { problems } = validateStories(activeStories(decision), capabilities);
|
|
50
|
+
return problems.map((problem) => ({
|
|
51
|
+
label: problem.source,
|
|
52
|
+
detail: problem.message,
|
|
53
|
+
status: "fail" as const,
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** ` · N story/ies ignored` for a headline, or nothing when all are usable. */
|
|
58
|
+
function ignoredSuffix(items: readonly CheckItem[]): string {
|
|
59
|
+
if (items.length === 0) return "";
|
|
60
|
+
return ` · ${items.length} ${items.length === 1 ? "story" : "stories"} ignored`;
|
|
61
|
+
}
|
|
22
62
|
|
|
23
63
|
/**
|
|
24
|
-
* Report
|
|
64
|
+
* Report which pack answers reads, its provenance, and its entity total.
|
|
25
65
|
*
|
|
26
66
|
* @param rt - The per-invocation runtime.
|
|
27
|
-
* @returns A CheckResult
|
|
28
|
-
* @note Impure — reads config, the
|
|
67
|
+
* @returns A CheckResult naming the answering pack, or the failure to build one.
|
|
68
|
+
* @note Impure — reads config, the active-pack pointer, and the pack index.
|
|
29
69
|
*/
|
|
30
70
|
export async function checkPackageRefs(
|
|
31
71
|
rt: PragmaRuntime,
|
|
32
72
|
): Promise<CheckResult> {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
73
|
+
const decision = resolveSources(await rt.loadConfig(), rt.cwd);
|
|
74
|
+
// The display says "packs" (config declarations); the file/function keep
|
|
75
|
+
// "Package" (npm/git resolution vocabulary).
|
|
76
|
+
const name = "pack refs";
|
|
37
77
|
|
|
38
|
-
if (
|
|
78
|
+
if (decision.kind === "unavailable") {
|
|
39
79
|
return {
|
|
40
|
-
name
|
|
41
|
-
status: "
|
|
42
|
-
detail:
|
|
80
|
+
name,
|
|
81
|
+
status: "fail",
|
|
82
|
+
detail: decision.reason,
|
|
83
|
+
remedy: `${BIN_NAME} sources update`,
|
|
43
84
|
};
|
|
44
85
|
}
|
|
45
86
|
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
items.
|
|
59
|
-
|
|
60
|
-
}
|
|
87
|
+
const index = readPackIndex(decision);
|
|
88
|
+
const entities = (index ? entityTotal(index) : 0).toLocaleString();
|
|
89
|
+
// The pack DOES answer reads, so the check itself passes; the ignored stories
|
|
90
|
+
// are failing sub-items under it. (A `warn` status would ripple through the
|
|
91
|
+
// renderer and the DoctorData counts to buy an icon.)
|
|
92
|
+
const items = await ignoredStoryItems(decision);
|
|
93
|
+
const suffix = ignoredSuffix(items);
|
|
94
|
+
if (decision.kind === "embedded") {
|
|
95
|
+
return {
|
|
96
|
+
name,
|
|
97
|
+
status: "pass",
|
|
98
|
+
detail: `embedded snapshot @ ${embeddedManifest().sourceRef} — ${entities} entities${suffix} · \`${BIN_NAME} sources update\` to build from the configured packs`,
|
|
99
|
+
...(items.length > 0 ? { items } : {}),
|
|
100
|
+
};
|
|
61
101
|
}
|
|
62
|
-
|
|
63
|
-
const ok = lock !== undefined && unresolved === 0;
|
|
102
|
+
const manifest = readManifest(decision.dir);
|
|
64
103
|
return {
|
|
65
|
-
name
|
|
66
|
-
status:
|
|
67
|
-
detail:
|
|
68
|
-
|
|
69
|
-
: `${unresolved} of ${entries.length} package(s) not resolved`,
|
|
70
|
-
items,
|
|
71
|
-
...(ok ? {} : { remedy: "pragma sources update" }),
|
|
104
|
+
name,
|
|
105
|
+
status: "pass",
|
|
106
|
+
detail: `${manifest?.sourceRef ?? decision.contentHash.slice(0, 12)} — ${entities} entities, built ${manifest?.createdAt ?? "?"}${suffix}`,
|
|
107
|
+
...(items.length > 0 ? { items } : {}),
|
|
72
108
|
};
|
|
73
109
|
}
|