@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
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
* via a command substitution — fish treats substitution results as literal
|
|
9
9
|
* candidates (split on newlines, never evaluated). Each name rule ANDs a
|
|
10
10
|
* `__<bin>_minchars` guard into its condition, so the exec waits for `minChars`
|
|
11
|
-
* typed chars
|
|
11
|
+
* typed chars, and a name-source POSITIONAL also ANDs `__<bin>_notflag` — fish
|
|
12
|
+
* evaluates every matching rule rather than one exclusive branch, so without it
|
|
13
|
+
* a structural `--<TAB>` would spawn the delegate too. No `eval`, no backticks.
|
|
12
14
|
*
|
|
13
15
|
* Static-tier coarseness (the resolver is exact): positional value rules are
|
|
14
16
|
* not index-gated, and a mixed self-verb + sub-verb noun only offers its
|
|
@@ -23,6 +25,11 @@ function fnBase(binName: string): string {
|
|
|
23
25
|
return `__${binName.replace(/[^A-Za-z0-9_]/g, "_")}`;
|
|
24
26
|
}
|
|
25
27
|
|
|
28
|
+
/** AND a guard into a rule's condition (or start one with it). */
|
|
29
|
+
function and(condition: string | undefined, guard: string): string {
|
|
30
|
+
return condition ? `${condition}; and ${guard}` : guard;
|
|
31
|
+
}
|
|
32
|
+
|
|
26
33
|
/** AND a `minChars` guard into a name rule's condition (or start one). */
|
|
27
34
|
function withMinChars(
|
|
28
35
|
fn: string,
|
|
@@ -30,8 +37,7 @@ function withMinChars(
|
|
|
30
37
|
minChars: number,
|
|
31
38
|
): string | undefined {
|
|
32
39
|
if (minChars <= 0) return condition;
|
|
33
|
-
|
|
34
|
-
return condition ? `${condition}; and ${guard}` : guard;
|
|
40
|
+
return and(condition, `${fn}_minchars ${minChars}`);
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
/** The rule fragment completing one flag of a view (or a global flag). */
|
|
@@ -93,9 +99,20 @@ function positionalRule(
|
|
|
93
99
|
if (positional.source.kind === "names") names = true;
|
|
94
100
|
if (positional.source.kind === "files") files = true;
|
|
95
101
|
}
|
|
96
|
-
// A name source gates its exec on `minChars
|
|
97
|
-
//
|
|
98
|
-
|
|
102
|
+
// A name source gates its exec on `minChars` AND on the current token not
|
|
103
|
+
// being a flag; a values/files positional keeps the bare position condition
|
|
104
|
+
// so it still completes on bare TAB.
|
|
105
|
+
//
|
|
106
|
+
// The `_notflag` half is what keeps a purely STRUCTURAL `--<TAB>` free of
|
|
107
|
+
// exec. fish evaluates every `complete` rule matching a position, so without
|
|
108
|
+
// it this positional rule fires alongside the flag-name rules the moment the
|
|
109
|
+
// token clears `minChars` — and `--` is two characters. That cost a process
|
|
110
|
+
// spawn per TAB on a flag name AND put the delegate's answer in the user's
|
|
111
|
+
// candidate list. bash and zsh route the same context through one exclusive
|
|
112
|
+
// `case` arm and exec nothing; this is how fish joins them.
|
|
113
|
+
const cond = names
|
|
114
|
+
? withMinChars(fn, and(condition, `${fn}_notflag`), minChars)
|
|
115
|
+
: condition;
|
|
99
116
|
const parts = [`complete -c ${binName} -n "${cond}"`];
|
|
100
117
|
if (names) {
|
|
101
118
|
parts.push(`-a "(${binName} __complete -- (${fn}_words) 2>/dev/null)"`);
|
|
@@ -147,6 +164,11 @@ export function fishScript(
|
|
|
147
164
|
"end",
|
|
148
165
|
]
|
|
149
166
|
: []),
|
|
167
|
+
// True when the token being completed is not a flag, so a name-source
|
|
168
|
+
// positional rule stays out of a structural `--<TAB>`.
|
|
169
|
+
`function ${fn}_notflag`,
|
|
170
|
+
" not string match -q -- '-*' (commandline -ct)",
|
|
171
|
+
"end",
|
|
150
172
|
`function ${fn}_at`,
|
|
151
173
|
" set -l cmd (commandline -opc)",
|
|
152
174
|
" set -l noun ''",
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The static shell-completion templates — one emitter per shell, all fed by
|
|
3
|
+
* the same completion model.
|
|
4
|
+
*
|
|
5
|
+
* The three exports are the domain: each takes the model and returns the text
|
|
6
|
+
* of a script `setup completions` writes to disk. They are grouped because
|
|
7
|
+
* they are interchangeable answers to one question — which shell is this — and
|
|
8
|
+
* because they must stay in step: a fact the model carries has to be
|
|
9
|
+
* expressible in all three, so a change to one is a change to all three.
|
|
10
|
+
*
|
|
11
|
+
* What the barrel does NOT expose is the rendering layer underneath
|
|
12
|
+
* (`shared.ts`): the per-verb views, the token allowlist re-assertion, the
|
|
13
|
+
* name/flag list derivations. Those exist so the scripts cannot disagree about
|
|
14
|
+
* structure, and they are safe only in the emit context they were built for —
|
|
15
|
+
* every token they return has been re-checked against the safety allowlist on
|
|
16
|
+
* its way into script text. Offering them across the domain boundary would
|
|
17
|
+
* offer a way to compose that text without that check, which is the one thing
|
|
18
|
+
* this domain exists to make impossible.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
export { bashScript } from "./bash.js";
|
|
22
|
+
export { fishScript } from "./fish.js";
|
|
23
|
+
export { zshScript } from "./zsh.js";
|
|
@@ -26,7 +26,7 @@ export type CompletionSource =
|
|
|
26
26
|
/** A closed value set (enum params) — inlined by the static tier. */
|
|
27
27
|
| { readonly kind: "values"; readonly values: readonly string[] }
|
|
28
28
|
/**
|
|
29
|
-
* Names of a storeless source (index/skills/
|
|
29
|
+
* Names of a storeless source (index/skills/prefixes) — the
|
|
30
30
|
* dynamic tier reads them via the seam and ranks them with `match`/case. The
|
|
31
31
|
* static scripts exec `__complete` for every name source, one code path.
|
|
32
32
|
*/
|
|
@@ -77,6 +77,13 @@ export interface VerbEntry {
|
|
|
77
77
|
readonly flags: readonly FlagEntry[];
|
|
78
78
|
/** The verb's positionals, in declared order. */
|
|
79
79
|
readonly positionals: readonly PositionalEntry[];
|
|
80
|
+
/**
|
|
81
|
+
* Segment pseudo-verbs beneath this verb (a module-mounted subtree, from
|
|
82
|
+
* `CapabilityModule.cliProjection.completionChildren`), each with its own
|
|
83
|
+
* flags/positionals/children. The parse walk descends into a matching
|
|
84
|
+
* child before flag/positional resolution.
|
|
85
|
+
*/
|
|
86
|
+
readonly children?: readonly VerbEntry[];
|
|
80
87
|
}
|
|
81
88
|
|
|
82
89
|
/** One noun with its self-verb (if any) and sub-verbs. */
|
|
@@ -135,8 +142,8 @@ export interface CompletionRequest {
|
|
|
135
142
|
|
|
136
143
|
/**
|
|
137
144
|
* The dynamic-tier seam: reads candidate names for a `{kind:"names"}` source.
|
|
138
|
-
* One source-dispatched reader serves every family — index, skills,
|
|
139
|
-
*
|
|
145
|
+
* One source-dispatched reader serves every family — index, skills, prefixes —
|
|
146
|
+
* so the resolver ranks them uniformly. The default
|
|
140
147
|
* ({@link import("./entitySource.js").emptyNameSource}) yields nothing, so
|
|
141
148
|
* structural completion never pays a read; {@link
|
|
142
149
|
* import("./entitySource.js").indexCompletionEnv} wires the storeless sources.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import defaults from "./defaults.js";
|
|
3
|
+
|
|
4
|
+
describe("defaults — the validated distribution config (pragma.conf.ts)", () => {
|
|
5
|
+
it("ships the distribution identity", () => {
|
|
6
|
+
expect(defaults.name).toBe("pragma");
|
|
7
|
+
expect(defaults.help).toBe("Explore the design system");
|
|
8
|
+
expect(defaults.issuesUrl).toBe(
|
|
9
|
+
"https://github.com/canonical/pragma/issues",
|
|
10
|
+
);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it("declares the toolchain colophon as content (markdown body + summary)", () => {
|
|
14
|
+
// The narrative is a DECLARATION the `colophon` verb renders, not code:
|
|
15
|
+
// `collectColophon` reads exactly this object. Pin the shape and the two
|
|
16
|
+
// stable fragments — the story's own subject and the maker line the old
|
|
17
|
+
// one-line `colophon` string carried (folded in when the field went live).
|
|
18
|
+
//
|
|
19
|
+
// DOMAIN FIRST: this section is deliberately a one-liner that hands off to
|
|
20
|
+
// `docs/architecture.md`. `pragma colophon` renders it ABOVE the active
|
|
21
|
+
// pack's domain colophon, and a reader reaching for the colophon wants the
|
|
22
|
+
// design system, not the toolchain that serves it. The length pin is the
|
|
23
|
+
// ruling: architecture prose belongs in the docs, not in front of the
|
|
24
|
+
// domain every reader came for.
|
|
25
|
+
expect(defaults.colophon?.markdown).toContain("domain-based toolchain");
|
|
26
|
+
expect(defaults.colophon?.markdown).toContain(
|
|
27
|
+
"Made by the Canonical Webteam — https://canonical.com.",
|
|
28
|
+
);
|
|
29
|
+
expect(defaults.colophon?.summary).toContain("domain-based toolchain");
|
|
30
|
+
// Bodies, not documents: the renderer supplies the H1 from the name.
|
|
31
|
+
expect(defaults.colophon?.markdown.startsWith("#")).toBe(false);
|
|
32
|
+
expect(defaults.colophon?.summary?.startsWith("#")).toBe(false);
|
|
33
|
+
// The handoff, and the brevity that makes it honest (see the note above).
|
|
34
|
+
// It is a URL, not a repo path: `docs/` is outside the package's `files`
|
|
35
|
+
// allowlist and is not copied into `dist`, so a path would name a file no
|
|
36
|
+
// installed user has. A bare `docs/architecture.md` must fail here.
|
|
37
|
+
expect(defaults.colophon?.markdown).toContain(
|
|
38
|
+
"https://github.com/canonical/pragma/blob/main/packages/cli/pragma/docs/architecture.md",
|
|
39
|
+
);
|
|
40
|
+
expect(defaults.colophon?.summary).toContain(
|
|
41
|
+
"https://github.com/canonical/pragma/blob/main/packages/cli/pragma/docs/architecture.md",
|
|
42
|
+
);
|
|
43
|
+
expect(defaults.colophon?.markdown.length).toBeLessThan(400);
|
|
44
|
+
expect(defaults.colophon?.summary?.length).toBeLessThan(400);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("ships the four canonical default packs (git+https sources)", () => {
|
|
48
|
+
expect(
|
|
49
|
+
defaults.packs?.map((pack) =>
|
|
50
|
+
typeof pack === "string"
|
|
51
|
+
? pack
|
|
52
|
+
: { name: pack.name, source: pack.source },
|
|
53
|
+
),
|
|
54
|
+
).toEqual([
|
|
55
|
+
{
|
|
56
|
+
name: "@canonical/design-system",
|
|
57
|
+
source: "git+https://github.com/canonical/design-system.git#main",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: "@canonical/anatomy-dsl",
|
|
61
|
+
source: "git+https://github.com/canonical/anatomy-dsl.git#main",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "@canonical/code-standards",
|
|
65
|
+
source: "git+https://github.com/canonical/web-code-standards.git#main",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: "@canonical/ds-implementations",
|
|
69
|
+
source: "git+https://github.com/canonical/pragma.git#main",
|
|
70
|
+
},
|
|
71
|
+
]);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("carries the declared read stories through validation, on their packs", () => {
|
|
75
|
+
// The zod layer must not strip `stories` (unknown keys ARE stripped for
|
|
76
|
+
// forward compatibility). Content is owned by `capabilities/distribution.test.ts`;
|
|
77
|
+
// this pins only that the field survives `parseRawConfig` on the right pack.
|
|
78
|
+
const storyCounts = defaults.packs?.map((pack) =>
|
|
79
|
+
typeof pack === "string" ? 0 : (pack.stories?.length ?? 0),
|
|
80
|
+
);
|
|
81
|
+
expect(storyCounts).toEqual([5, 0, 1, 1]);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("declares no removed field — the validator would refuse to load one", () => {
|
|
85
|
+
// `generators` was deleted (L-OPEN-1 ruling): validated, layered, and read
|
|
86
|
+
// by nothing. The distribution config goes through the same strict
|
|
87
|
+
// `parseRawConfig` as every layer, so a `generators:` reintroduced here
|
|
88
|
+
// would fail the eager validation at import — this pins the honest state.
|
|
89
|
+
expect(defaults).not.toHaveProperty("generators");
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it("declares the domain namespaces the store is built with and the CLI resolves", () => {
|
|
93
|
+
// Two consumers, one declaration. (1) The config layer wins every prefix
|
|
94
|
+
// harvest, so this is what keeps `ds:` entity names stable when the design
|
|
95
|
+
// system declares `ds:` with two IRIs. (2) It is the domain half of
|
|
96
|
+
// `DEFAULT_PREFIX_MAP`, so it also decides which prefixed names a lookup
|
|
97
|
+
// can expand — `cs:` is here for that reader.
|
|
98
|
+
expect(defaults.prefixes).toEqual({
|
|
99
|
+
ds: "https://ds.canonical.com/",
|
|
100
|
+
cs: "http://pragma.canonical.com/codestandards#",
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("ships the normal channel and standard detail level", () => {
|
|
105
|
+
expect(defaults.channel).toBe("normal");
|
|
106
|
+
expect(defaults.detail).toBe("standard");
|
|
107
|
+
});
|
|
108
|
+
});
|
|
@@ -1,28 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Built-in configuration defaults
|
|
2
|
+
* Built-in configuration defaults — the validated distribution config.
|
|
3
3
|
*
|
|
4
|
-
* The lowest config layer
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* The lowest config layer is the distribution's own `pragma.conf.ts` (package
|
|
5
|
+
* root), STATICALLY imported so it travels with the emitted modules (no fs read
|
|
6
|
+
* — `evaluateProjectConfig` stats/imports from disk, which is right for a
|
|
7
|
+
* consumer's config and wrong for the distribution's own) and validated through
|
|
8
|
+
* the same `parseRawConfig` as every
|
|
9
|
+
* other layer. Statically imported by `readConfig` (itself dynamic-imported,
|
|
10
|
+
* off the `--help`/`__complete` fast path) and by its own test, so the eager
|
|
11
|
+
* validation and the zod import here add nothing to the storeless surfaces —
|
|
12
|
+
* the lazy.test.ts module-graph probe covers that boundary.
|
|
7
13
|
*/
|
|
8
14
|
|
|
9
|
-
import
|
|
15
|
+
import rawConfig from "../../../pragma.conf.js";
|
|
16
|
+
import { parseRawConfig } from "./schema.js";
|
|
10
17
|
|
|
11
|
-
export default
|
|
12
|
-
channel: "normal",
|
|
13
|
-
detail: "standard",
|
|
14
|
-
packages: [
|
|
15
|
-
{
|
|
16
|
-
name: "@canonical/design-system",
|
|
17
|
-
source: "git+https://github.com/canonical/design-system.git#main",
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
name: "@canonical/anatomy-dsl",
|
|
21
|
-
source: "git+https://github.com/canonical/anatomy-dsl.git#main",
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
name: "@canonical/code-standards",
|
|
25
|
-
source: "git+https://github.com/canonical/web-code-standards.git#main",
|
|
26
|
-
},
|
|
27
|
-
],
|
|
28
|
-
} satisfies PragmaConfig;
|
|
18
|
+
export default parseRawConfig(rawConfig, "pragma.conf.ts");
|
|
@@ -16,11 +16,19 @@
|
|
|
16
16
|
*
|
|
17
17
|
* LIMITATION (accepted, per the review fold): a *transitively*-imported file
|
|
18
18
|
* (e.g. `./pkgs.ts`) edited without touching the entry's mtime is not detected
|
|
19
|
-
* across processes. The fix that would catch it —
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
19
|
+
* across processes. The fix that would catch it — bundling the config and keying
|
|
20
|
+
* on the bundle hash — would blow the warm-load budget on every load. Touch the
|
|
21
|
+
* entry (or bump VERSION) to force a rebuild.
|
|
22
|
+
*
|
|
23
|
+
* THE CONFIG IS THE CONSUMER'S OWN TYPESCRIPT, and this is the one place the
|
|
24
|
+
* distribution executes code it did not author. `pragma` ships on a `node`
|
|
25
|
+
* shebang, so that import is served by node's type STRIPPING — which erases
|
|
26
|
+
* annotations and refuses syntax that would need real emit (`enum`, `namespace`,
|
|
27
|
+
* parameter properties). Those are rejected with `ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`,
|
|
28
|
+
* which {@link evaluateProjectConfig} names specifically rather than letting it
|
|
29
|
+
* arrive as an anonymous load failure. The `engines` floor (node >= 22.18) is what
|
|
30
|
+
* makes stripping default-on — and the range excludes 23.0-23.5, which satisfy
|
|
31
|
+
* a bare `>=22.18` but predate the 23.x line's own default-on release (23.6).
|
|
24
32
|
*/
|
|
25
33
|
|
|
26
34
|
import { createHash } from "node:crypto";
|
|
@@ -33,8 +41,8 @@ import {
|
|
|
33
41
|
} from "node:fs";
|
|
34
42
|
import { join } from "node:path";
|
|
35
43
|
import { pathToFileURL } from "node:url";
|
|
36
|
-
import { VERSION } from "../../constants.js";
|
|
37
|
-
import { PragmaError } from "../error/
|
|
44
|
+
import { PROJECT_CONFIG_FILENAME, VERSION } from "../../constants.js";
|
|
45
|
+
import { PragmaError } from "../error/index.js";
|
|
38
46
|
import { configCacheDir } from "./paths.js";
|
|
39
47
|
import { parseRawConfig } from "./schema.js";
|
|
40
48
|
import type { RawConfig } from "./types.js";
|
|
@@ -94,7 +102,7 @@ export async function evaluateProjectConfig(path: string): Promise<RawConfig> {
|
|
|
94
102
|
const url = `${pathToFileURL(path).href}?v=${key}`;
|
|
95
103
|
// Evaluating real TypeScript can throw for reasons `parseRawConfig` never sees:
|
|
96
104
|
// a syntax error, a bad import, or a top-level throw in the config module. Left
|
|
97
|
-
// unwrapped, that raw throw collapses to INTERNAL_ERROR ("
|
|
105
|
+
// unwrapped, that raw throw collapses to INTERNAL_ERROR ("report this
|
|
98
106
|
// issue") on EVERY command that reads config. Name it: a CONFIG_ERROR that
|
|
99
107
|
// identifies the offending file and the underlying reason.
|
|
100
108
|
let module: { default?: unknown };
|
|
@@ -103,12 +111,26 @@ export async function evaluateProjectConfig(path: string): Promise<RawConfig> {
|
|
|
103
111
|
} catch (error) {
|
|
104
112
|
if (error instanceof PragmaError) throw error;
|
|
105
113
|
const reason = error instanceof Error ? error.message : String(error);
|
|
114
|
+
// Node strips types rather than compiling them, so a config using syntax that
|
|
115
|
+
// needs real emit fails here with a message naming neither the constraint nor
|
|
116
|
+
// the fix. Say both — this is a supported config that simply must be written
|
|
117
|
+
// in erasable TypeScript, and the author has no other way to learn that.
|
|
118
|
+
const { code } = (error ?? {}) as { code?: unknown };
|
|
119
|
+
if (code === "ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX") {
|
|
120
|
+
throw PragmaError.configError(
|
|
121
|
+
`Your ${PROJECT_CONFIG_FILENAME} uses TypeScript syntax that cannot be erased: ${reason}`,
|
|
122
|
+
{
|
|
123
|
+
recovery: {
|
|
124
|
+
message: `Rewrite it in erasable TypeScript — types, interfaces and \`satisfies\` are fine; \`enum\`, \`namespace\` and constructor parameter properties are not. A plain object literal with a \`default\` export always works.`,
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
);
|
|
128
|
+
}
|
|
106
129
|
throw PragmaError.configError(
|
|
107
|
-
`
|
|
130
|
+
`Cannot load project config ${path}: ${reason}`,
|
|
108
131
|
{
|
|
109
132
|
recovery: {
|
|
110
|
-
message:
|
|
111
|
-
"Fix the error in your pragma.config.ts (it must evaluate to a default export), then try again.",
|
|
133
|
+
message: `Fix the error in your ${PROJECT_CONFIG_FILENAME} (it must evaluate to a default export), then try again.`,
|
|
112
134
|
},
|
|
113
135
|
},
|
|
114
136
|
);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Locate the nearest project config by walking up from `cwd`.
|
|
3
3
|
*
|
|
4
|
-
* Looks for
|
|
5
|
-
*
|
|
4
|
+
* Looks for `<bin>.config.ts` (or, as a compiled-binary fallback,
|
|
5
|
+
* `<bin>.config.js`) at or above `cwd`. The walk is bounded: it stops after
|
|
6
6
|
* the first directory containing `.git` (the repo root), after the home
|
|
7
7
|
* directory, and at the filesystem root — a config outside the repo or home
|
|
8
8
|
* never leaks in. Ported from the v1 `findProjectConfigPath`.
|
|
@@ -11,9 +11,10 @@
|
|
|
11
11
|
import { existsSync } from "node:fs";
|
|
12
12
|
import { homedir } from "node:os";
|
|
13
13
|
import { dirname, join, resolve } from "node:path";
|
|
14
|
+
import { BIN_NAME, PROJECT_CONFIG_FILENAME } from "../../constants.js";
|
|
14
15
|
|
|
15
16
|
/** Candidate project-config filenames, in preference order. */
|
|
16
|
-
const CANDIDATES = [
|
|
17
|
+
const CANDIDATES = [PROJECT_CONFIG_FILENAME, `${BIN_NAME}.config.js`] as const;
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Find the nearest project config file at or above `cwd`.
|
|
@@ -1,60 +1,66 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The setup hint — the read-only replacement for first-run seeding.
|
|
3
|
+
*
|
|
4
|
+
* Onboarding used to WRITE: a pipeline step ran before dispatch on every
|
|
5
|
+
* non-help invocation and created the global config, so `skill list` — a read —
|
|
6
|
+
* mutated the machine before the user had consented to anything. Seeding is now
|
|
7
|
+
* the `config` setup target, created inside a consented run. What is left is a
|
|
8
|
+
* stateless hint, and the property that matters most about it is the one these
|
|
9
|
+
* tests pin: reading it writes nothing.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
existsSync,
|
|
14
|
+
mkdirSync,
|
|
15
|
+
mkdtempSync,
|
|
16
|
+
readdirSync,
|
|
17
|
+
writeFileSync,
|
|
18
|
+
} from "node:fs";
|
|
2
19
|
import { tmpdir } from "node:os";
|
|
3
|
-
import { join } from "node:path";
|
|
20
|
+
import { dirname, join } from "node:path";
|
|
4
21
|
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
-
import {
|
|
22
|
+
import { setupHintLines } from "./firstRun.js";
|
|
6
23
|
import { globalConfigPath } from "./paths.js";
|
|
7
24
|
|
|
8
25
|
const originalConfigHome = process.env.XDG_CONFIG_HOME;
|
|
9
26
|
|
|
10
|
-
function freshConfigHome():
|
|
11
|
-
|
|
27
|
+
function freshConfigHome(): string {
|
|
28
|
+
const dir = mkdtempSync(join(tmpdir(), "pragma-first-"));
|
|
29
|
+
process.env.XDG_CONFIG_HOME = dir;
|
|
30
|
+
return dir;
|
|
12
31
|
}
|
|
13
32
|
|
|
14
33
|
afterEach(() => {
|
|
15
34
|
process.env.XDG_CONFIG_HOME = originalConfigHome;
|
|
16
35
|
});
|
|
17
36
|
|
|
18
|
-
describe("
|
|
19
|
-
it("
|
|
37
|
+
describe("the setup hint", () => {
|
|
38
|
+
it("names the pre-release and the command that configures the machine", () => {
|
|
20
39
|
freshConfigHome();
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
await ensureFirstRun((line) => lines.push(line));
|
|
25
|
-
|
|
26
|
-
expect(existsSync(path)).toBe(true);
|
|
27
|
-
expect(readFileSync(path, "utf-8")).toBe("{}\n");
|
|
28
|
-
expect(lines[0]).toContain("Hello!");
|
|
29
|
-
expect(lines.some((line) => line.includes(path))).toBe(true);
|
|
30
|
-
// Snapshot the note with the volatile path masked.
|
|
31
|
-
expect(
|
|
32
|
-
lines.map((line) => line.replace(path, "<CONFIG>")),
|
|
33
|
-
).toMatchSnapshot();
|
|
40
|
+
const lines = setupHintLines();
|
|
41
|
+
expect(lines.some((line) => line.includes("pre-release"))).toBe(true);
|
|
42
|
+
expect(lines.some((line) => line.includes("pragma setup"))).toBe(true);
|
|
34
43
|
});
|
|
35
44
|
|
|
36
|
-
it("
|
|
37
|
-
|
|
38
|
-
|
|
45
|
+
it("writes NOTHING — presence of the config is the state, not a marker", () => {
|
|
46
|
+
// A marker file would itself be a pre-consent write, which is the exact
|
|
47
|
+
// defect being removed. The probe must leave the config home untouched.
|
|
48
|
+
const dir = freshConfigHome();
|
|
49
|
+
expect(existsSync(globalConfigPath())).toBe(false);
|
|
39
50
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
expect(second).toEqual([]);
|
|
51
|
+
setupHintLines();
|
|
52
|
+
setupHintLines();
|
|
43
53
|
|
|
44
|
-
|
|
45
|
-
expect(
|
|
54
|
+
expect(readdirSync(dir)).toEqual([]);
|
|
55
|
+
expect(existsSync(globalConfigPath())).toBe(false);
|
|
46
56
|
});
|
|
47
57
|
|
|
48
|
-
it("
|
|
58
|
+
it("goes quiet once the config exists", () => {
|
|
49
59
|
freshConfigHome();
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
ensureFirstRun((line) => lines.push(line)),
|
|
56
|
-
).resolves.toBeUndefined();
|
|
57
|
-
expect(lines).toHaveLength(1);
|
|
58
|
-
expect(lines[0]).toContain("Warning: could not create");
|
|
60
|
+
const path = globalConfigPath();
|
|
61
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
62
|
+
writeFileSync(path, "{}\n");
|
|
63
|
+
|
|
64
|
+
expect(setupHintLines()).toEqual([]);
|
|
59
65
|
});
|
|
60
66
|
});
|
|
@@ -1,91 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The setup hint — the read-only replacement for first-run seeding.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* first-run pipeline; runs before dispatch and tolerates every failure.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { dirname } from "node:path";
|
|
14
|
-
import {
|
|
15
|
-
$,
|
|
16
|
-
exists,
|
|
17
|
-
gen,
|
|
18
|
-
info,
|
|
19
|
-
mkdir,
|
|
20
|
-
type Task,
|
|
21
|
-
writeFile,
|
|
22
|
-
} from "@canonical/task";
|
|
23
|
-
import { runTask } from "@canonical/task/node";
|
|
24
|
-
import { globalConfigPath } from "./paths.js";
|
|
25
|
-
|
|
26
|
-
/** Seed content: an empty object, so nothing is pinned the user did not choose. */
|
|
27
|
-
const SEED_CONFIG = "{}\n";
|
|
28
|
-
|
|
29
|
-
/** Build the welcome note; the resolved path is shown so it is copyable. */
|
|
30
|
-
function welcomeLines(path: string): string[] {
|
|
31
|
-
return [
|
|
32
|
-
"Hello! Thanks for taking the time to try the pre-release pragma CLI.",
|
|
33
|
-
"Please file issues and feedback at https://github.com/canonical/pragma/issues.",
|
|
34
|
-
`Pragma stores its configuration in ${path} (just created with defaults).`,
|
|
35
|
-
"A `pragma.config.ts` in this directory or above it overrides it per project.",
|
|
36
|
-
"",
|
|
37
|
-
];
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* The first-run task: create the global config, announcing it on first run.
|
|
4
|
+
* Onboarding used to WRITE. A pipeline step ran before dispatch on every
|
|
5
|
+
* non-help invocation and created `$XDG_CONFIG_HOME/<bin>/config.json`, so
|
|
6
|
+
* `skill list` — a read — mutated the machine before the user had consented to
|
|
7
|
+
* anything, and a banner interleaved itself into the output of runs that were
|
|
8
|
+
* mutating something else entirely. The config layers already treat the missing
|
|
9
|
+
* file as "every field at its built-in default", so the write bought nothing.
|
|
42
10
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
11
|
+
* Seeding is now a setup target, created inside a consented run. What is left
|
|
12
|
+
* here is a STATELESS hint: shown when the global config file is absent, on
|
|
13
|
+
* read-only surfaces only. There is no marker file — a marker is itself a
|
|
14
|
+
* pre-consent write, which is the exact defect being removed — because the
|
|
15
|
+
* presence of the config IS the state.
|
|
45
16
|
*/
|
|
46
|
-
export function firstRunTask(): Task<{ created: boolean; path: string }> {
|
|
47
|
-
return gen(function* () {
|
|
48
|
-
const path = globalConfigPath();
|
|
49
|
-
|
|
50
|
-
if (yield* $(exists(path))) {
|
|
51
|
-
return { created: false, path };
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Create first, then greet: if creation fails the effects throw before any
|
|
55
|
-
// line is emitted, so onboarding degrades to the single stderr warning
|
|
56
|
-
// rather than a "just created" banner alongside a failure.
|
|
57
|
-
yield* $(mkdir(dirname(path), true));
|
|
58
|
-
yield* $(writeFile(path, SEED_CONFIG));
|
|
59
17
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return { created: true, path };
|
|
65
|
-
});
|
|
66
|
-
}
|
|
18
|
+
import { existsSync } from "node:fs";
|
|
19
|
+
import { BIN_NAME, ISSUES_URL } from "../../constants.js";
|
|
20
|
+
import { globalConfigPath } from "./paths.js";
|
|
67
21
|
|
|
68
22
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* Onboarding must never break an invocation: a read-only home or a race with a
|
|
72
|
-
* concurrent first run degrades to a single stderr warning and the invocation
|
|
73
|
-
* proceeds (the config layers treat a missing global file as defaults anyway).
|
|
23
|
+
* The hint lines for a machine that has not been set up, or none when it has.
|
|
74
24
|
*
|
|
75
|
-
* @
|
|
76
|
-
* @note Impure —
|
|
25
|
+
* @returns The lines to print, or an empty array.
|
|
26
|
+
* @note Impure — probes the global config path.
|
|
77
27
|
*/
|
|
78
|
-
export
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
// this is a greeting, not diagnostics.
|
|
85
|
-
onLog: (_level, message) => write(message),
|
|
86
|
-
});
|
|
87
|
-
} catch (error) {
|
|
88
|
-
const reason = error instanceof Error ? error.message : String(error);
|
|
89
|
-
write(`Warning: could not create the global pragma config — ${reason}`);
|
|
90
|
-
}
|
|
28
|
+
export function setupHintLines(): string[] {
|
|
29
|
+
if (existsSync(globalConfigPath())) return [];
|
|
30
|
+
return [
|
|
31
|
+
`${BIN_NAME} is pre-release — report issues at ${ISSUES_URL}.`,
|
|
32
|
+
`Run \`${BIN_NAME} setup\` to configure this machine.`,
|
|
33
|
+
];
|
|
91
34
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Read the global machine config: `$XDG_CONFIG_HOME/pragma/config.json`.
|
|
3
3
|
*
|
|
4
|
-
* The global layer holds cross-project machine state (channel, detail, tier
|
|
5
|
-
*
|
|
4
|
+
* The global layer holds cross-project machine state (channel, detail, tier).
|
|
5
|
+
* A missing or empty file contributes no values — the layer simply
|
|
6
6
|
* does not participate in the merge. A *malformed* file (a torn write) must
|
|
7
7
|
* never brick every command (the old loud `CONFIG_ERROR` throw) nor be silently
|
|
8
8
|
* discarded (writeConfigField's old reset-to-`{}`): it is backed up to a
|
|
@@ -3,17 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* `schema.ts` (zod) is intentionally not re-exported here: it is imported
|
|
5
5
|
* directly and lazily by the readers, keeping this barrel — and any storeless
|
|
6
|
-
* consumer — off the zod fast path.
|
|
6
|
+
* consumer — off the zod fast path. `defaults` is likewise not re-exported:
|
|
7
|
+
* it statically imports the distribution config and the validating schema.
|
|
7
8
|
*/
|
|
8
9
|
|
|
9
|
-
export { default as defaults } from "./defaults.js";
|
|
10
10
|
export { evaluateProjectConfig } from "./evaluateProjectConfig.js";
|
|
11
11
|
export { findProjectConfig } from "./findProjectConfig.js";
|
|
12
|
-
export {
|
|
12
|
+
export { setupHintLines } from "./firstRun.js";
|
|
13
13
|
export type { GlobalConfigRead } from "./globalConfig.js";
|
|
14
14
|
export { readGlobalConfig } from "./globalConfig.js";
|
|
15
15
|
export {
|
|
16
|
-
cacheDir,
|
|
17
16
|
configCacheDir,
|
|
18
17
|
configDir,
|
|
19
18
|
globalConfigPath,
|
|
@@ -26,8 +25,8 @@ export type {
|
|
|
26
25
|
ConfigLayers,
|
|
27
26
|
ConfigOrigin,
|
|
28
27
|
ConfigOrigins,
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
PackDeclaration,
|
|
29
|
+
PackSource,
|
|
31
30
|
PragmaConfig,
|
|
32
31
|
RawConfig,
|
|
33
32
|
} from "./types.js";
|