@canonical/pragma-cli 0.33.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +293 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +83 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +66 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +53 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +168 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +193 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +334 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +263 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +195 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +82 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +25 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +197 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +85 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +25 -24
- package/pragma.conf.ts +853 -0
- package/src/bin.ts +276 -82
- package/src/capabilities/block.parity.test.ts +253 -0
- package/src/capabilities/capabilities/capabilities.render.ts +4 -3
- package/src/capabilities/capabilities/capabilities.verb.ts +32 -14
- package/src/capabilities/capabilities/catalog.ts +20 -12
- package/src/capabilities/capabilities/hints.ts +43 -24
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +50 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +9 -5
- package/src/capabilities/colophon/types.ts +16 -7
- package/src/capabilities/config/collectConfigShow.test.ts +58 -0
- package/src/capabilities/config/collectConfigShow.ts +43 -6
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -37
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +14 -9
- package/src/capabilities/config/show.render.test.ts +77 -5
- package/src/capabilities/config/show.render.ts +8 -13
- package/src/capabilities/config/show.verb.ts +13 -9
- package/src/capabilities/config/types.ts +26 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +95 -103
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +50 -0
- package/src/capabilities/create/create.mcp.test.ts +91 -7
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +523 -162
- package/src/capabilities/create/create.verb.ts +361 -321
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +9 -14
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +40 -46
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +29 -5
- package/src/capabilities/{standard/parity.test.ts → distribution.parity.test.ts} +24 -14
- package/src/capabilities/distribution.test.ts +122 -0
- package/src/capabilities/distribution.ts +54 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +9 -7
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +82 -46
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +5 -4
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +125 -30
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +113 -27
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +24 -13
- package/src/capabilities/doctor/doctor.render.ts +45 -20
- package/src/capabilities/doctor/doctor.test.ts +158 -40
- package/src/capabilities/doctor/doctor.verb.ts +9 -5
- package/src/capabilities/doctor/runChecks.ts +65 -66
- package/src/capabilities/doctor/types.ts +21 -5
- package/src/capabilities/emptyRecovery.test.ts +44 -22
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -5
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +5 -4
- package/src/capabilities/graph/runQuery.ts +9 -7
- package/src/capabilities/index.ts +25 -19
- package/src/capabilities/info/collectInfo.ts +15 -10
- package/src/capabilities/info/info.render.ts +4 -3
- package/src/capabilities/info/info.verb.ts +4 -3
- package/src/capabilities/lazy.test.ts +125 -2
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +42 -83
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/prompt.test.ts +12 -6
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +26 -14
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +367 -91
- package/src/capabilities/resources/resources.test.ts +411 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +397 -320
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +233 -74
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +166 -14
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +47 -9
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +14 -14
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +9 -10
- package/src/capabilities/sources/collectStatus.ts +61 -51
- package/src/capabilities/sources/index.ts +2 -2
- package/src/capabilities/sources/installSkills.ts +86 -9
- package/src/capabilities/sources/runUpdate.ts +164 -141
- package/src/capabilities/sources/sources.test.ts +265 -119
- package/src/capabilities/sources/status.render.test.ts +53 -24
- package/src/capabilities/sources/status.render.ts +25 -30
- package/src/capabilities/sources/status.verb.ts +16 -9
- package/src/capabilities/sources/types.ts +18 -25
- package/src/capabilities/sources/update.render.ts +10 -3
- package/src/capabilities/sources/update.verb.ts +13 -24
- package/src/capabilities/surface.test.ts +165 -25
- package/src/capabilities/tier.parity.test.ts +144 -0
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +8 -4
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.test.ts +8 -6
- package/src/constants.ts +78 -22
- package/src/identity.test.ts +348 -0
- package/src/index.ts +2 -2
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +20 -15
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.test.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +5 -3
- package/src/kernel/completion/entitySource.test.ts +185 -41
- package/src/kernel/completion/entitySource.ts +133 -110
- package/src/kernel/completion/model.test.ts +165 -13
- package/src/kernel/completion/model.ts +105 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +104 -50
- package/src/kernel/completion/shellDrive.test.ts +611 -0
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/fish.ts +28 -6
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +10 -3
- package/src/kernel/config/defaults.test.ts +108 -0
- package/src/kernel/config/defaults.ts +13 -23
- package/src/kernel/config/evaluateProjectConfig.ts +33 -11
- package/src/kernel/config/findProjectConfig.ts +4 -3
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -81
- package/src/kernel/config/globalConfig.ts +2 -2
- package/src/kernel/config/index.ts +5 -6
- package/src/kernel/config/paths.ts +17 -17
- package/src/kernel/config/readConfig.test.ts +246 -7
- package/src/kernel/config/readConfig.ts +8 -8
- package/src/kernel/config/schema.test.ts +50 -0
- package/src/kernel/config/schema.ts +100 -11
- package/src/kernel/config/types.ts +75 -19
- package/src/kernel/copy.test.ts +483 -0
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +6 -3
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -4
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/index.ts +1 -1
- package/src/kernel/error/recovery.test.ts +22 -45
- package/src/kernel/error/recovery.ts +36 -27
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +25 -4
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.test.ts +195 -11
- package/src/kernel/packs/collect.ts +212 -61
- package/src/kernel/packs/compile.test.ts +293 -8
- package/src/kernel/packs/compile.ts +108 -15
- package/src/kernel/packs/disclosure.test.ts +5 -2
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +13 -13
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/graphqlSource.test.ts +6 -3
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +70 -20
- package/src/kernel/packs/renderPack.ts +28 -7
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +132 -34
- package/src/kernel/packs/runBodies.ts +16 -16
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +114 -11
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +104 -10
- package/src/kernel/packs/sparql/runSelect.ts +75 -37
- package/src/kernel/packs/toolDescription.test.ts +52 -5
- package/src/kernel/packs/types.ts +52 -4
- package/src/kernel/packs/uniqueness.ts +5 -5
- package/src/kernel/project/cli/buildProgram.test.ts +157 -17
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +227 -3
- package/src/kernel/project/cli/dispatch.ts +250 -48
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +130 -30
- package/src/kernel/project/cli/helpFormat.ts +14 -1
- package/src/kernel/project/cli/rootHelp.ts +140 -111
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +18 -10
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +12 -7
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +42 -1
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +120 -5
- package/src/kernel/project/mcp/prompts/provider.ts +22 -8
- package/src/kernel/project/mcp/prompts/source.ts +69 -68
- package/src/kernel/project/mcp/registerVerb.ts +56 -11
- package/src/kernel/project/mcp/serve.ts +13 -5
- package/src/kernel/project/mcp/toolDescriptions.test.ts +6 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/disclosure.ts +4 -2
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/prefixes.test.ts +36 -0
- package/src/kernel/render/prefixes.ts +40 -13
- package/src/kernel/render/renderers.test.ts +244 -7
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/build.ts +29 -3
- package/src/kernel/runtime/graphpack/buildIndex.test.ts +46 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +53 -18
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -5
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.stories.generated.ts +3 -0
- package/src/kernel/runtime/graphpack/embedded.ts +39 -13
- package/src/kernel/runtime/graphpack/graphpack.test.ts +205 -5
- package/src/kernel/runtime/graphpack/hash.ts +3 -2
- package/src/kernel/runtime/graphpack/index.ts +1 -1
- package/src/kernel/runtime/graphpack/manifest.ts +114 -12
- package/src/kernel/runtime/graphpack/read.ts +5 -11
- package/src/kernel/runtime/graphpack/schemas.ts +74 -0
- package/src/kernel/runtime/graphpack/stories.ts +84 -0
- package/src/kernel/runtime/graphpack/types.ts +61 -48
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/paths.ts +64 -15
- package/src/kernel/runtime/probe.test.ts +8 -4
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +477 -32
- package/src/kernel/runtime/refs/gitOps.ts +1 -19
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +8 -8
- package/src/kernel/runtime/refs/resolve.ts +82 -66
- package/src/kernel/runtime/resolveSources.test.ts +63 -24
- package/src/kernel/runtime/resolveSources.ts +36 -25
- package/src/kernel/runtime/storeReadiness.ts +10 -10
- package/src/kernel/runtime/storeless.test.ts +1 -1
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +56 -55
- package/src/kernel/spec/emitReference.test.ts +3 -3
- package/src/kernel/spec/emitReference.ts +242 -34
- package/src/kernel/spec/emitSurface.ts +57 -11
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/surfaceConformance.ts +8 -0
- package/src/kernel/spec/types.ts +277 -13
- package/src/kernel/spec/validate.ts +2 -1
- package/src/kernel/vocabulary.test.ts +164 -0
- package/src/kernel/vocabulary.ts +146 -0
- package/src/testing/PARITY_GAPS.ts +8 -2
- package/src/testing/behavioral/README.md +3 -3
- package/src/testing/behavioral/completion.test.ts +19 -6
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +6 -5
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +1 -1
- package/src/testing/behavioral/exitCodes.e2e.test.ts +6 -5
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/harness.foundation.test.ts +14 -5
- package/src/testing/behavioral/journeys.cli.test.ts +117 -76
- package/src/testing/behavioral/journeys.defaultPack.test.ts +88 -182
- package/src/testing/behavioral/journeys.firstInstall.test.ts +167 -0
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +9 -6
- package/src/testing/behavioral/journeys.packageStories.test.ts +188 -0
- package/src/testing/behavioral/liveReadSurface.ts +4 -3
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +10 -5
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/behavioral/staleCommands.test.ts +10 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +7 -7
- package/src/testing/eval/cases/assembly.ts +13 -6
- package/src/testing/eval/cases/effectful.ts +28 -15
- package/src/testing/eval/cases/readNouns.ts +22 -20
- package/src/testing/eval/cases/stable.ts +5 -1
- package/src/testing/eval/eval.test.ts +7 -1
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/fixtureCapability.ts +45 -1
- package/src/testing/fixtures/graph/canonical.ts +94 -5
- package/src/testing/fixtures/graph/defaultPack.ts +7 -6
- package/src/testing/fixtures/graph/owlExport.ts +7 -5
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/fixtureGraph.ts +33 -16
- package/src/testing/helpers/packRuntime.ts +2 -3
- package/src/testing/helpers/projectCli.ts +2 -1
- package/src/testing/helpers/projectMcp.ts +38 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +24 -9
- package/src/testing/perf/budgets.ts +76 -12
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +611 -14
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/src/types.ts +2 -2
- package/dist/pragma +0 -0
- package/src/capabilities/block/blockList.test.ts +0 -79
- package/src/capabilities/block/blockList.verb.ts +0 -163
- package/src/capabilities/block/index.ts +0 -25
- package/src/capabilities/block/pack.ts +0 -166
- package/src/capabilities/block/parity.test.ts +0 -187
- package/src/capabilities/block/tierChain.ts +0 -78
- package/src/capabilities/colophon/pragmaColophon.ts +0 -66
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -152
- package/src/capabilities/create/templates.embedded.generated.ts +0 -53
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -41
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -67
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -60
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/capabilities/modifier/index.ts +0 -15
- package/src/capabilities/modifier/pack.ts +0 -64
- package/src/capabilities/standard/index.ts +0 -18
- package/src/capabilities/standard/pack.ts +0 -128
- package/src/capabilities/tier/index.ts +0 -19
- package/src/capabilities/tier/lookup.render.test.ts +0 -72
- package/src/capabilities/tier/lookup.render.ts +0 -59
- package/src/capabilities/tier/lookup.test.ts +0 -83
- package/src/capabilities/tier/lookup.verb.ts +0 -44
- package/src/capabilities/tier/pack.ts +0 -28
- package/src/capabilities/tier/runLookup.ts +0 -87
- package/src/capabilities/token/addConfig.render.ts +0 -27
- package/src/capabilities/token/addConfig.test.ts +0 -62
- package/src/capabilities/token/addConfig.verb.ts +0 -40
- package/src/capabilities/token/index.ts +0 -19
- package/src/capabilities/token/pack.ts +0 -58
- package/src/capabilities/token/runAddConfig.ts +0 -95
- package/src/kernel/completion/bashDrive.test.ts +0 -73
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +0 -39
- package/src/kernel/runtime/lock.ts +0 -90
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* XDG base-directory resolution for config
|
|
2
|
+
* XDG base-directory resolution for config and state.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Every directory is namespaced by the distribution's own {@link BIN_NAME}, so a
|
|
5
|
+
* fork stores its state beside this one instead of colliding in it — the
|
|
6
|
+
* greeting that quotes the resolved path then names one program, not two. Config
|
|
7
|
+
* (the global JSON) lives under `$XDG_CONFIG_HOME/<bin>`; the evaluated
|
|
8
|
+
* project-config cache lives under `$XDG_STATE_HOME/<bin>/config-cache`. The
|
|
9
|
+
* store layer's cache root (`$XDG_CACHE_HOME/<bin>`) is resolved by
|
|
10
|
+
* `kernel/runtime/paths.ts` instead — it must stay leaf-clean for the storeless
|
|
11
|
+
* fast path. Tests point these env vars at per-run temp directories (see
|
|
12
|
+
* setupXdgIsolation) so they never touch the developer's real state.
|
|
8
13
|
*/
|
|
9
14
|
|
|
10
15
|
import { homedir } from "node:os";
|
|
11
16
|
import { join } from "node:path";
|
|
17
|
+
import { BIN_NAME } from "../../constants.js";
|
|
12
18
|
|
|
13
|
-
/** `$XDG_CONFIG_HOME
|
|
19
|
+
/** `$XDG_CONFIG_HOME/<bin>` (default `~/.config/<bin>`). */
|
|
14
20
|
export function configDir(): string {
|
|
15
21
|
const base = process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config");
|
|
16
|
-
return join(base,
|
|
22
|
+
return join(base, BIN_NAME);
|
|
17
23
|
}
|
|
18
24
|
|
|
19
|
-
/** `$
|
|
20
|
-
export function cacheDir(): string {
|
|
21
|
-
const base = process.env.XDG_CACHE_HOME ?? join(homedir(), ".cache");
|
|
22
|
-
return join(base, "pragma");
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/** `$XDG_STATE_HOME/pragma` (default `~/.local/state/pragma`). */
|
|
25
|
+
/** `$XDG_STATE_HOME/<bin>` (default `~/.local/state/<bin>`). */
|
|
26
26
|
export function stateDir(): string {
|
|
27
27
|
const base = process.env.XDG_STATE_HOME ?? join(homedir(), ".local", "state");
|
|
28
|
-
return join(base,
|
|
28
|
+
return join(base, BIN_NAME);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
/** The global config file: `$XDG_CONFIG_HOME
|
|
31
|
+
/** The global config file: `$XDG_CONFIG_HOME/<bin>/config.json`. */
|
|
32
32
|
export function globalConfigPath(): string {
|
|
33
33
|
return join(configDir(), "config.json");
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
/** The evaluated-project-config cache dir: `$XDG_STATE_HOME
|
|
36
|
+
/** The evaluated-project-config cache dir: `$XDG_STATE_HOME/<bin>/config-cache`. */
|
|
37
37
|
export function configCacheDir(): string {
|
|
38
38
|
return join(stateDir(), "config-cache");
|
|
39
39
|
}
|
|
@@ -10,6 +10,7 @@ import { tmpdir } from "node:os";
|
|
|
10
10
|
import { dirname, join } from "node:path";
|
|
11
11
|
import { runTask } from "@canonical/task/node";
|
|
12
12
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
13
|
+
import { BIN_NAME, PROGRAM_DESCRIPTION } from "../../constants.js";
|
|
13
14
|
import { evaluateProjectConfig } from "./evaluateProjectConfig.js";
|
|
14
15
|
import { findProjectConfig } from "./findProjectConfig.js";
|
|
15
16
|
import { readGlobalConfig } from "./globalConfig.js";
|
|
@@ -58,13 +59,13 @@ describe("readConfig — layering + provenance", () => {
|
|
|
58
59
|
expect(config.tier).toBe("core");
|
|
59
60
|
expect(config.channel).toBe("experimental");
|
|
60
61
|
expect(config.detail).toBe("detailed");
|
|
61
|
-
expect(config.
|
|
62
|
+
expect(config.packs).toHaveLength(4); // from defaults
|
|
62
63
|
|
|
63
64
|
expect(origins).toMatchObject({
|
|
64
65
|
tier: "project",
|
|
65
66
|
channel: "global",
|
|
66
67
|
detail: "project", // project wins over global
|
|
67
|
-
|
|
68
|
+
packs: "default",
|
|
68
69
|
});
|
|
69
70
|
expect(project.exists).toBe(true);
|
|
70
71
|
expect(global.exists).toBe(true);
|
|
@@ -81,14 +82,46 @@ describe("readConfig — layering + provenance", () => {
|
|
|
81
82
|
expect(project.exists).toBe(false);
|
|
82
83
|
});
|
|
83
84
|
|
|
84
|
-
it("replaces
|
|
85
|
+
it("replaces packs wholesale from the project layer", async () => {
|
|
85
86
|
freshXdg();
|
|
86
|
-
const dir = projectWith('export default {
|
|
87
|
+
const dir = projectWith('export default { packs: ["@acme/only"] };');
|
|
88
|
+
|
|
89
|
+
const { config, origins } = await readConfig(dir);
|
|
90
|
+
|
|
91
|
+
expect(config.packs).toEqual(["@acme/only"]);
|
|
92
|
+
expect(origins.packs).toBe("project");
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it("accepts a layer's identity fields and gives them NO effect", async () => {
|
|
96
|
+
// Identity is read from `pragma.conf.ts` by `src/constants.ts` at module
|
|
97
|
+
// load, so a layer declaring it can only ever be silent. The validator
|
|
98
|
+
// still accepts the keys (the distribution config shares the schema), and
|
|
99
|
+
// the merged config now carries neither the value nor a provenance for it
|
|
100
|
+
// — which is what `config show` used to report and did not honour.
|
|
101
|
+
freshXdg();
|
|
102
|
+
writeGlobal('{"help":"Global help"}');
|
|
103
|
+
const dir = projectWith(
|
|
104
|
+
'export default { name: "acme", logo: ["ACME"], colophon: { markdown: "By Acme." }, issuesUrl: "https://acme.test/issues", tier: "core" };',
|
|
105
|
+
);
|
|
87
106
|
|
|
88
107
|
const { config, origins } = await readConfig(dir);
|
|
89
108
|
|
|
90
|
-
expect(config
|
|
91
|
-
|
|
109
|
+
expect(config).not.toHaveProperty("name");
|
|
110
|
+
// `logo` is identity too: accepted by the shared schema, silent in a layer.
|
|
111
|
+
expect(config).not.toHaveProperty("logo");
|
|
112
|
+
expect(origins).not.toHaveProperty("logo");
|
|
113
|
+
expect(config).not.toHaveProperty("help");
|
|
114
|
+
expect(config).not.toHaveProperty("colophon");
|
|
115
|
+
expect(config).not.toHaveProperty("issuesUrl");
|
|
116
|
+
expect(origins).not.toHaveProperty("name");
|
|
117
|
+
// The positive control, from the SAME project file: a layerable field
|
|
118
|
+
// declared beside them IS merged and reported, so the assertions above
|
|
119
|
+
// cannot pass by the project layer having failed to load at all.
|
|
120
|
+
expect(config.tier).toBe("core");
|
|
121
|
+
expect(origins.tier).toBe("project");
|
|
122
|
+
// And the projected identity is unmoved by any of it.
|
|
123
|
+
expect(BIN_NAME).toBe("pragma");
|
|
124
|
+
expect(PROGRAM_DESCRIPTION).not.toBe("Global help");
|
|
92
125
|
});
|
|
93
126
|
|
|
94
127
|
it("merges the completion policy into the effective config", async () => {
|
|
@@ -106,6 +139,212 @@ describe("readConfig — layering + provenance", () => {
|
|
|
106
139
|
});
|
|
107
140
|
});
|
|
108
141
|
|
|
142
|
+
describe("`detail` — a closed enum at load", () => {
|
|
143
|
+
it("a project config declaring an unknown level throws CONFIG_ERROR naming the file and the three levels", async () => {
|
|
144
|
+
freshXdg();
|
|
145
|
+
// Before the enum, `detail: "banana"` passed validation, was reported as
|
|
146
|
+
// `[project]` by `config show`, and silently rendered at `standard`.
|
|
147
|
+
const dir = projectWith('export default { detail: "banana" };');
|
|
148
|
+
const path = join(dir, "pragma.config.ts");
|
|
149
|
+
|
|
150
|
+
let caught: unknown;
|
|
151
|
+
try {
|
|
152
|
+
await evaluateProjectConfig(path);
|
|
153
|
+
} catch (error) {
|
|
154
|
+
caught = error;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
expect(caught).toMatchObject({ code: "CONFIG_ERROR" });
|
|
158
|
+
const message = (caught as { message: string }).message;
|
|
159
|
+
expect(message).toContain(path);
|
|
160
|
+
expect(message).toContain("detail");
|
|
161
|
+
for (const level of ["summary", "standard", "detailed"]) {
|
|
162
|
+
expect(message).toContain(level);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it("a global JSON declaring an unknown level throws the same loud error", () => {
|
|
167
|
+
freshXdg();
|
|
168
|
+
writeGlobal('{"detail": "digest"}');
|
|
169
|
+
|
|
170
|
+
let caught: unknown;
|
|
171
|
+
try {
|
|
172
|
+
readGlobalConfig();
|
|
173
|
+
} catch (error) {
|
|
174
|
+
caught = error;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
expect(caught).toMatchObject({ code: "CONFIG_ERROR" });
|
|
178
|
+
const message = (caught as { message: string }).message;
|
|
179
|
+
expect(message).toContain(globalConfigPath());
|
|
180
|
+
for (const level of ["summary", "standard", "detailed"]) {
|
|
181
|
+
expect(message).toContain(level);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
describe("legacy config shapes — loud rename/removal errors", () => {
|
|
187
|
+
it("a project config declaring `packages` throws CONFIG_ERROR naming the rename", async () => {
|
|
188
|
+
freshXdg();
|
|
189
|
+
// Unknown keys are stripped by the schema, so the legacy key must be
|
|
190
|
+
// DETECTED — a silent ignore would boot the default packs while the user
|
|
191
|
+
// believes their own list is in force.
|
|
192
|
+
const dir = projectWith('export default { packages: ["@acme/only"] };');
|
|
193
|
+
const path = join(dir, "pragma.config.ts");
|
|
194
|
+
|
|
195
|
+
let caught: unknown;
|
|
196
|
+
try {
|
|
197
|
+
await evaluateProjectConfig(path);
|
|
198
|
+
} catch (error) {
|
|
199
|
+
caught = error;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
expect(caught).toMatchObject({ code: "CONFIG_ERROR" });
|
|
203
|
+
expect((caught as { message: string }).message).toContain(
|
|
204
|
+
`Invalid config in ${path}: the "packages" field was renamed to "packs". The entry shape is unchanged.`,
|
|
205
|
+
);
|
|
206
|
+
// The recovery carries the path; the message drops the instruction.
|
|
207
|
+
expect(
|
|
208
|
+
(caught as { recovery?: { message: string } }).recovery?.message,
|
|
209
|
+
).toBe(`In ${path}, rename "packages:" to "packs".`);
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
it("a legacy global JSON declaring `packages` throws the same rename error", () => {
|
|
213
|
+
freshXdg();
|
|
214
|
+
writeGlobal('{"packages": []}');
|
|
215
|
+
|
|
216
|
+
let caught: unknown;
|
|
217
|
+
try {
|
|
218
|
+
readGlobalConfig();
|
|
219
|
+
} catch (error) {
|
|
220
|
+
caught = error;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
expect(caught).toMatchObject({ code: "CONFIG_ERROR" });
|
|
224
|
+
expect((caught as { message: string }).message).toContain(
|
|
225
|
+
'the "packages" field was renamed to "packs". The entry shape is unchanged.',
|
|
226
|
+
);
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
it("a removed `generators` field throws CONFIG_ERROR naming the field", async () => {
|
|
230
|
+
freshXdg();
|
|
231
|
+
// Ruled dead (L-OPEN-1): `resolveSources` never read it, `create` resolves
|
|
232
|
+
// its generators statically, and its only consumers were the merge and
|
|
233
|
+
// `config show`'s name display. A config still declaring it must fail
|
|
234
|
+
// naming the file — the schema's unknown-key stripping would otherwise
|
|
235
|
+
// swallow the deletion in silence.
|
|
236
|
+
const dir = projectWith(
|
|
237
|
+
'export default { generators: [{ name: "@acme/gen", source: "npm:@acme/gen@^1.0.0" }] };',
|
|
238
|
+
);
|
|
239
|
+
const path = join(dir, "pragma.config.ts");
|
|
240
|
+
|
|
241
|
+
let caught: unknown;
|
|
242
|
+
try {
|
|
243
|
+
await evaluateProjectConfig(path);
|
|
244
|
+
} catch (error) {
|
|
245
|
+
caught = error;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
expect(caught).toMatchObject({ code: "CONFIG_ERROR" });
|
|
249
|
+
const message = (caught as { message: string }).message;
|
|
250
|
+
expect(message).toContain(path);
|
|
251
|
+
expect(message).toContain('"generators"');
|
|
252
|
+
expect(message).toContain("removed");
|
|
253
|
+
expect(
|
|
254
|
+
(caught as { recovery?: { message: string } }).recovery?.message,
|
|
255
|
+
).toBe(`In ${path}, delete the "generators" field.`);
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
it("a global JSON still declaring generators throws the same removal error", () => {
|
|
259
|
+
freshXdg();
|
|
260
|
+
writeGlobal('{"generators": []}');
|
|
261
|
+
|
|
262
|
+
let caught: unknown;
|
|
263
|
+
try {
|
|
264
|
+
readGlobalConfig();
|
|
265
|
+
} catch (error) {
|
|
266
|
+
caught = error;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
expect(caught).toMatchObject({ code: "CONFIG_ERROR" });
|
|
270
|
+
expect((caught as { message: string }).message).toContain('"generators"');
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
it("a removed `completion.caseSensitive` throws CONFIG_ERROR naming the field", async () => {
|
|
274
|
+
freshXdg();
|
|
275
|
+
// The field was validated and read by NOTHING. Removing it silently would
|
|
276
|
+
// leave a config author believing case-sensitivity is in force; the schema
|
|
277
|
+
// strips unknown keys, so the removal must be DETECTED before validation.
|
|
278
|
+
const dir = projectWith(
|
|
279
|
+
"export default { completion: { minChars: 3, caseSensitive: true } };",
|
|
280
|
+
);
|
|
281
|
+
const path = join(dir, "pragma.config.ts");
|
|
282
|
+
|
|
283
|
+
let caught: unknown;
|
|
284
|
+
try {
|
|
285
|
+
await evaluateProjectConfig(path);
|
|
286
|
+
} catch (error) {
|
|
287
|
+
caught = error;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
expect(caught).toMatchObject({ code: "CONFIG_ERROR" });
|
|
291
|
+
const message = (caught as { message: string }).message;
|
|
292
|
+
expect(message).toContain(path);
|
|
293
|
+
expect(message).toContain('"completion.caseSensitive"');
|
|
294
|
+
expect(message).toContain("removed");
|
|
295
|
+
expect(
|
|
296
|
+
(caught as { recovery?: { message: string } }).recovery?.message,
|
|
297
|
+
).toBe(`In ${path}, delete "caseSensitive" from "completion".`);
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
it("a global JSON still setting completion.caseSensitive throws the same removal error", () => {
|
|
301
|
+
freshXdg();
|
|
302
|
+
writeGlobal('{"completion": {"caseSensitive": false}}');
|
|
303
|
+
|
|
304
|
+
let caught: unknown;
|
|
305
|
+
try {
|
|
306
|
+
readGlobalConfig();
|
|
307
|
+
} catch (error) {
|
|
308
|
+
caught = error;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
expect(caught).toMatchObject({ code: "CONFIG_ERROR" });
|
|
312
|
+
expect((caught as { message: string }).message).toContain(
|
|
313
|
+
'"completion.caseSensitive"',
|
|
314
|
+
);
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
it("a TOP-LEVEL `caseSensitive` key is an ordinary unknown key, not the removed field", async () => {
|
|
318
|
+
freshXdg();
|
|
319
|
+
// The detection reads exactly `completion.caseSensitive` — a stray
|
|
320
|
+
// top-level key keeps the forward-compatible unknown-key stripping.
|
|
321
|
+
const dir = projectWith(
|
|
322
|
+
"export default { caseSensitive: true, tier: 'core' };",
|
|
323
|
+
);
|
|
324
|
+
const path = join(dir, "pragma.config.ts");
|
|
325
|
+
|
|
326
|
+
await expect(evaluateProjectConfig(path)).resolves.toEqual({
|
|
327
|
+
tier: "core",
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
it("a `packages` key NESTED under another field does NOT trip the detection", async () => {
|
|
332
|
+
freshXdg();
|
|
333
|
+
// The rename detection is deliberately SHALLOW (top-level keys only): a
|
|
334
|
+
// `packages` key inside `prefixes` is a namespace prefix named `packages`,
|
|
335
|
+
// not the legacy field. Pin that against a future "helpful" deep check,
|
|
336
|
+
// which would false-positive here.
|
|
337
|
+
const dir = projectWith(
|
|
338
|
+
'export default { prefixes: { packages: "https://example.com/packages/" } };',
|
|
339
|
+
);
|
|
340
|
+
const path = join(dir, "pragma.config.ts");
|
|
341
|
+
|
|
342
|
+
await expect(evaluateProjectConfig(path)).resolves.toEqual({
|
|
343
|
+
prefixes: { packages: "https://example.com/packages/" },
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
|
|
109
348
|
describe("global config — corrupt-file recovery", () => {
|
|
110
349
|
/** Backup siblings the recovery created next to the config file. */
|
|
111
350
|
function corruptBackups(): string[] {
|
|
@@ -225,7 +464,7 @@ describe("evaluateProjectConfig — mtime+VERSION cache", () => {
|
|
|
225
464
|
freshXdg();
|
|
226
465
|
// A malformed project config: references an undefined symbol → the module
|
|
227
466
|
// throws at evaluation. Left unwrapped this collapsed to INTERNAL_ERROR
|
|
228
|
-
// ("
|
|
467
|
+
// ("report this issue") on EVERY command that reads config.
|
|
229
468
|
const dir = projectWith("export default { tier: definitelyNotDefined };");
|
|
230
469
|
const path = join(dir, "pragma.config.ts");
|
|
231
470
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Layer order, least to most specific: the built-in {@link defaults}, the
|
|
5
5
|
* global XDG JSON, and the nearest evaluated `pragma.config.ts`. Merging is
|
|
6
|
-
* per field — a more specific layer wins wholesale (so `
|
|
6
|
+
* per field — a more specific layer wins wholesale (so `packs` *replaces*,
|
|
7
7
|
* preserving the "project pins exactly" semantics) — and each field records
|
|
8
8
|
* the layer that supplied it. Async because the project layer is evaluated
|
|
9
9
|
* (and content-hash cached).
|
|
@@ -37,7 +37,7 @@ export async function readConfig(
|
|
|
37
37
|
const project: RawConfig = projectPath
|
|
38
38
|
? await evaluateProjectConfig(projectPath)
|
|
39
39
|
: {};
|
|
40
|
-
const defaultValues = defaults
|
|
40
|
+
const defaultValues = defaults;
|
|
41
41
|
|
|
42
42
|
const pick = <K extends keyof RawConfig>(
|
|
43
43
|
field: K,
|
|
@@ -51,13 +51,15 @@ export async function readConfig(
|
|
|
51
51
|
return { value: defaultValues[field], origin: "default" };
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
+
// `name`/`help`/`logo`/`colophon`/`issuesUrl` are DELIBERATELY not picked: identity
|
|
55
|
+
// is read from `pragma.conf.ts` statically (`src/constants.ts`), so merging a
|
|
56
|
+
// layer's value here would report a provenance nothing honours.
|
|
54
57
|
const tier = pick("tier");
|
|
55
58
|
const channel = pick("channel");
|
|
56
59
|
const detail = pick("detail");
|
|
57
|
-
const
|
|
60
|
+
const packs = pick("packs");
|
|
58
61
|
const stories = pick("stories");
|
|
59
62
|
const prefixes = pick("prefixes");
|
|
60
|
-
const prompts = pick("prompts");
|
|
61
63
|
// `completion` is read at `setup completions` emit time (not on any fast
|
|
62
64
|
// path) and carries no `config show` provenance, so it merges into the
|
|
63
65
|
// effective config but is deliberately absent from ConfigOrigins.
|
|
@@ -67,10 +69,9 @@ export async function readConfig(
|
|
|
67
69
|
channel: (channel.value ?? defaults.channel) as Channel,
|
|
68
70
|
...(tier.value !== undefined ? { tier: tier.value } : {}),
|
|
69
71
|
...(detail.value !== undefined ? { detail: detail.value } : {}),
|
|
70
|
-
...(
|
|
72
|
+
...(packs.value !== undefined ? { packs: packs.value } : {}),
|
|
71
73
|
...(stories.value !== undefined ? { stories: stories.value } : {}),
|
|
72
74
|
...(prefixes.value !== undefined ? { prefixes: prefixes.value } : {}),
|
|
73
|
-
...(prompts.value !== undefined ? { prompts: prompts.value } : {}),
|
|
74
75
|
...(completion.value !== undefined ? { completion: completion.value } : {}),
|
|
75
76
|
};
|
|
76
77
|
|
|
@@ -80,10 +81,9 @@ export async function readConfig(
|
|
|
80
81
|
tier: tier.origin,
|
|
81
82
|
channel: channel.origin,
|
|
82
83
|
detail: detail.origin,
|
|
83
|
-
|
|
84
|
+
packs: packs.origin,
|
|
84
85
|
stories: stories.origin,
|
|
85
86
|
prefixes: prefixes.origin,
|
|
86
|
-
prompts: prompts.origin,
|
|
87
87
|
},
|
|
88
88
|
global: { path: global.path, exists: global.exists },
|
|
89
89
|
project: {
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The published configuration reference agrees with the validator a config
|
|
3
|
+
* actually hits.
|
|
4
|
+
*
|
|
5
|
+
* Two independently produced artifacts: `docs/reference/config.md` is rendered
|
|
6
|
+
* from an exhaustive `Record<keyof RawConfig, …>` (so `tsc` pins its row set to
|
|
7
|
+
* the TYPE), while `rawConfigSchema` is hand-written zod. `parseRawConfig`
|
|
8
|
+
* casts its result `as RawConfig`, so nothing else compares the two — a field
|
|
9
|
+
* the type declares and zod strips, or one zod accepts and the page never
|
|
10
|
+
* mentions, would be invisible.
|
|
11
|
+
*
|
|
12
|
+
* The page is parsed exactly as a reader would read it: the `Field` column of
|
|
13
|
+
* its `## Fields` table. Zod lives here already, so no new import crosses a
|
|
14
|
+
* boundary.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { describe, expect, it } from "vitest";
|
|
18
|
+
import { emitReference } from "../spec/emitReference.js";
|
|
19
|
+
import { rawConfigSchema } from "./schema.js";
|
|
20
|
+
|
|
21
|
+
/** The `field` cells of the generated page's Fields table, in page order. */
|
|
22
|
+
function readDocumentedFields(): string[] {
|
|
23
|
+
const page = emitReference([]).get("config.md") ?? "";
|
|
24
|
+
return [...page.matchAll(/^\| `([a-zA-Z]+)` \| /gm)].map((row) => row.at(1));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
describe("the configuration reference agrees with the validator", () => {
|
|
28
|
+
it("documents exactly the fields the validator accepts", () => {
|
|
29
|
+
expect(readDocumentedFields().sort()).toEqual(
|
|
30
|
+
Object.keys(rawConfigSchema.shape).sort(),
|
|
31
|
+
);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it("marks a field optional iff the validator lets a layer omit it", () => {
|
|
35
|
+
// Every layer field is optional — a layer declares only what it overrides,
|
|
36
|
+
// which is what makes per-field provenance possible. Stated as a derived
|
|
37
|
+
// correspondence rather than a constant so a required field added later
|
|
38
|
+
// fails here instead of quietly contradicting the page.
|
|
39
|
+
const page = emitReference([]).get("config.md") ?? "";
|
|
40
|
+
for (const [field, schema] of Object.entries(rawConfigSchema.shape)) {
|
|
41
|
+
const row = page
|
|
42
|
+
.split("\n")
|
|
43
|
+
.find((line) => line.startsWith(`| \`${field}\` |`));
|
|
44
|
+
expect(row, `no row for \`${field}\``).toBeDefined();
|
|
45
|
+
expect(row?.includes("(optional)"), `\`${field}\` optionality`).toBe(
|
|
46
|
+
schema.safeParse(undefined).success,
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
@@ -6,32 +6,81 @@
|
|
|
6
6
|
* path, which are storeless and config-free. Validates the raw shape a global
|
|
7
7
|
* JSON file or an evaluated `pragma.config.ts` declares; unknown keys are
|
|
8
8
|
* stripped for forward compatibility, and only present keys survive so layer
|
|
9
|
-
* merging keeps honest per-field provenance.
|
|
9
|
+
* merging keeps honest per-field provenance. Legacy shapes are NOT left to the
|
|
10
|
+
* unknown-key stripping: each is detected before validation and rejected with
|
|
11
|
+
* a loud CONFIG_ERROR naming the file and the fix, so an old config fails
|
|
12
|
+
* telling the user exactly what to change instead of silently ignoring the
|
|
13
|
+
* field. Three today: the `packages` key (renamed to `packs`), and the removed
|
|
14
|
+
* `completion.caseSensitive` and `generators` fields (each validated and read
|
|
15
|
+
* by nothing).
|
|
10
16
|
*/
|
|
11
17
|
|
|
12
18
|
import { z } from "zod";
|
|
13
|
-
import { PragmaError } from "../error/
|
|
14
|
-
import { CHANNELS, type RawConfig } from "./types.js";
|
|
19
|
+
import { PragmaError } from "../error/index.js";
|
|
20
|
+
import { CHANNELS, DETAIL_LEVELS, type RawConfig } from "./types.js";
|
|
15
21
|
|
|
16
|
-
const
|
|
22
|
+
const packDeclarationSchema = z.union([
|
|
17
23
|
z.string().min(1),
|
|
18
|
-
z.object({
|
|
24
|
+
z.object({
|
|
25
|
+
name: z.string().min(1),
|
|
26
|
+
source: z.string().optional(),
|
|
27
|
+
// Opaque here: the pack grammar is validated by `parsePackDefinition` at
|
|
28
|
+
// dispatch, not by the config layer. Without this key the object arm would
|
|
29
|
+
// STRIP declared stories silently (unknown keys are dropped for forward
|
|
30
|
+
// compatibility), so a pack's stories would vanish with no error.
|
|
31
|
+
stories: z.array(z.unknown()).optional(),
|
|
32
|
+
}),
|
|
19
33
|
]);
|
|
20
34
|
|
|
21
35
|
const completionSchema = z.object({
|
|
22
36
|
minChars: z.number().int().min(0).optional(),
|
|
23
|
-
caseSensitive: z.boolean().optional(),
|
|
24
37
|
families: z.record(z.string(), z.boolean()).optional(),
|
|
25
38
|
});
|
|
26
39
|
|
|
27
|
-
|
|
40
|
+
/**
|
|
41
|
+
* The `completion` object a raw layer declares, when it declares one — read
|
|
42
|
+
* WITHOUT validation, for the removed-field detection that must run before
|
|
43
|
+
* the schema's unknown-key stripping could hide the key.
|
|
44
|
+
*/
|
|
45
|
+
function declaredCompletion(value: unknown): Record<string, unknown> | null {
|
|
46
|
+
if (typeof value !== "object" || value === null) return null;
|
|
47
|
+
const { completion } = value as { completion?: unknown };
|
|
48
|
+
return typeof completion === "object" && completion !== null
|
|
49
|
+
? (completion as Record<string, unknown>)
|
|
50
|
+
: null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The validator every config layer passes through. EXPORTED for
|
|
55
|
+
* `schema.test.ts`, which compares its field set and each field's optionality
|
|
56
|
+
* against the generated `docs/reference/config.md` — the two are produced
|
|
57
|
+
* independently (the page from `keyof RawConfig`, this from hand-written zod)
|
|
58
|
+
* and `parseRawConfig`'s `as RawConfig` cast means `tsc` cannot catch them
|
|
59
|
+
* drifting apart.
|
|
60
|
+
*/
|
|
61
|
+
export const rawConfigSchema = z.object({
|
|
62
|
+
name: z.string().min(1).optional(),
|
|
63
|
+
help: z.string().min(1).optional(),
|
|
64
|
+
// Identity, like `name`/`help`: the wordmark root `--help` opens with.
|
|
65
|
+
logo: z.array(z.string()).optional(),
|
|
66
|
+
// Declared toolchain content: the `colophon` verb renders whatever the
|
|
67
|
+
// distribution declares here (markdown body + optional condensed summary).
|
|
68
|
+
colophon: z
|
|
69
|
+
.object({
|
|
70
|
+
markdown: z.string().min(1),
|
|
71
|
+
summary: z.string().min(1).optional(),
|
|
72
|
+
})
|
|
73
|
+
.optional(),
|
|
74
|
+
issuesUrl: z.string().url().optional(),
|
|
28
75
|
tier: z.string().optional(),
|
|
29
76
|
channel: z.enum(CHANNELS).optional(),
|
|
30
|
-
|
|
31
|
-
|
|
77
|
+
// Closed over the documented ladder, like `channel`: a level the renderer
|
|
78
|
+
// would silently degrade to `standard` is a config error naming the file and
|
|
79
|
+
// the three valid values, not a value `config show` reports as honoured.
|
|
80
|
+
detail: z.enum(DETAIL_LEVELS).optional(),
|
|
81
|
+
packs: z.array(packDeclarationSchema).optional(),
|
|
32
82
|
stories: z.array(z.unknown()).optional(),
|
|
33
83
|
prefixes: z.record(z.string(), z.string()).optional(),
|
|
34
|
-
prompts: z.record(z.string(), z.unknown()).optional(),
|
|
35
84
|
completion: completionSchema.optional(),
|
|
36
85
|
});
|
|
37
86
|
|
|
@@ -41,9 +90,49 @@ const rawConfigSchema = z.object({
|
|
|
41
90
|
* @param value - The parsed JSON or evaluated module default.
|
|
42
91
|
* @param source - The file path, used in error messages.
|
|
43
92
|
* @returns The validated layer values (only the keys actually present).
|
|
44
|
-
* @throws PragmaError with code `CONFIG_ERROR` on an invalid shape
|
|
93
|
+
* @throws PragmaError with code `CONFIG_ERROR` on an invalid shape, when the
|
|
94
|
+
* value declares the legacy `packages` key (renamed to `packs`), or when it
|
|
95
|
+
* still sets the removed `generators` or `completion.caseSensitive` fields.
|
|
45
96
|
*/
|
|
46
97
|
export function parseRawConfig(value: unknown, source: string): RawConfig {
|
|
98
|
+
// Rename detection must precede validation: unknown keys are stripped, so a
|
|
99
|
+
// legacy `packages` field would otherwise vanish silently.
|
|
100
|
+
if (typeof value === "object" && value !== null && "packages" in value) {
|
|
101
|
+
throw PragmaError.configError(
|
|
102
|
+
`Invalid config in ${source}: the "packages" field was renamed to "packs". The entry shape is unchanged.`,
|
|
103
|
+
{
|
|
104
|
+
recovery: {
|
|
105
|
+
message: `In ${source}, rename "packages:" to "packs".`,
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
// Removed-field detection, before validation for the same reason: each field
|
|
111
|
+
// was accepted and read by NOTHING, so a config still setting one gets a
|
|
112
|
+
// loud error naming the removed field, not silence. `generators` was ruled
|
|
113
|
+
// dead (L-OPEN-1): `resolveSources` never read it and the `create` verbs
|
|
114
|
+
// resolve their generators statically — declaring it only changed what
|
|
115
|
+
// `config show` printed.
|
|
116
|
+
if (typeof value === "object" && value !== null && "generators" in value) {
|
|
117
|
+
throw PragmaError.configError(
|
|
118
|
+
`Invalid config in ${source}: the "generators" field was removed — it was read by nothing. The create verbs resolve their generators statically.`,
|
|
119
|
+
{
|
|
120
|
+
recovery: {
|
|
121
|
+
message: `In ${source}, delete the "generators" field.`,
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
if ("caseSensitive" in (declaredCompletion(value) ?? {})) {
|
|
127
|
+
throw PragmaError.configError(
|
|
128
|
+
`Invalid config in ${source}: the "completion.caseSensitive" field was removed — it was read by nothing. Completion matching is declared by the grammar, not configured.`,
|
|
129
|
+
{
|
|
130
|
+
recovery: {
|
|
131
|
+
message: `In ${source}, delete "caseSensitive" from "completion".`,
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
);
|
|
135
|
+
}
|
|
47
136
|
const result = rawConfigSchema.safeParse(value ?? {});
|
|
48
137
|
if (!result.success) {
|
|
49
138
|
const issue = result.error.issues[0];
|