@canonical/pragma-cli 0.34.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 +20 -22
- package/pragma.conf.ts +249 -60
- package/src/bin.ts +267 -82
- package/src/capabilities/block.parity.test.ts +6 -3
- package/src/capabilities/capabilities/capabilities.render.ts +1 -1
- package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
- package/src/capabilities/capabilities/catalog.ts +3 -3
- package/src/capabilities/capabilities/hints.ts +32 -7
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +35 -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 +4 -4
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/config/collectConfigShow.ts +3 -3
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -10
- 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 +8 -7
- package/src/capabilities/config/show.render.ts +1 -1
- package/src/capabilities/config/show.verb.ts +9 -6
- package/src/capabilities/config/types.ts +18 -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 +25 -11
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +36 -61
- package/src/capabilities/create/create.mcp.test.ts +89 -5
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +433 -219
- package/src/capabilities/create/create.verb.ts +297 -328
- 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 +7 -4
- 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 +23 -35
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +20 -0
- package/src/capabilities/distribution.test.ts +3 -1
- package/src/capabilities/distribution.ts +10 -15
- package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +6 -4
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
- 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 +18 -7
- package/src/capabilities/doctor/doctor.render.ts +43 -19
- package/src/capabilities/doctor/doctor.test.ts +123 -34
- package/src/capabilities/doctor/doctor.verb.ts +3 -3
- package/src/capabilities/doctor/runChecks.ts +62 -63
- package/src/capabilities/doctor/types.ts +20 -4
- package/src/capabilities/emptyRecovery.test.ts +13 -8
- 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 -6
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +3 -3
- package/src/capabilities/graph/runQuery.ts +2 -3
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/info/collectInfo.ts +5 -4
- package/src/capabilities/info/info.render.ts +1 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/lazy.test.ts +32 -0
- 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 +27 -68
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +4 -5
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -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 +396 -326
- 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 +223 -71
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- 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 +37 -5
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +3 -4
- package/src/capabilities/sources/collectStatus.ts +7 -2
- package/src/capabilities/sources/index.ts +1 -1
- package/src/capabilities/sources/installSkills.ts +84 -7
- package/src/capabilities/sources/runUpdate.ts +53 -21
- package/src/capabilities/sources/sources.test.ts +154 -2
- package/src/capabilities/sources/status.render.ts +1 -1
- package/src/capabilities/sources/status.verb.ts +1 -1
- package/src/capabilities/sources/update.render.ts +1 -1
- package/src/capabilities/sources/update.verb.ts +1 -1
- package/src/capabilities/surface.test.ts +134 -17
- 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 +1 -1
- 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.ts +31 -1
- package/src/identity.test.ts +40 -25
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +1 -1
- package/src/kernel/completion/entitySource.test.ts +1 -1
- package/src/kernel/completion/entitySource.ts +21 -8
- package/src/kernel/completion/model.test.ts +164 -12
- package/src/kernel/completion/model.ts +94 -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 +34 -26
- package/src/kernel/completion/shellDrive.test.ts +28 -9
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +7 -0
- package/src/kernel/config/defaults.test.ts +25 -2
- package/src/kernel/config/defaults.ts +4 -3
- package/src/kernel/config/evaluateProjectConfig.ts +31 -8
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -88
- package/src/kernel/config/index.ts +1 -1
- package/src/kernel/config/readConfig.test.ts +6 -3
- package/src/kernel/config/readConfig.ts +1 -1
- package/src/kernel/config/schema.ts +3 -1
- package/src/kernel/config/types.ts +3 -1
- package/src/kernel/copy.test.ts +34 -4
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +5 -2
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -5
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/recovery.ts +14 -0
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +21 -1
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +130 -1
- package/src/kernel/packs/compile.ts +93 -3
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +66 -14
- package/src/kernel/packs/renderPack.ts +24 -5
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +112 -18
- package/src/kernel/packs/runBodies.ts +2 -3
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +18 -1
- 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 +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +42 -3
- package/src/kernel/packs/types.ts +13 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +147 -12
- 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 +160 -3
- package/src/kernel/project/cli/dispatch.ts +222 -42
- 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 +13 -0
- package/src/kernel/project/cli/rootHelp.ts +41 -12
- 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 +7 -4
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +2 -2
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +5 -2
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/source.ts +2 -2
- package/src/kernel/project/mcp/registerVerb.ts +35 -9
- package/src/kernel/project/mcp/serve.ts +2 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/renderers.test.ts +243 -6
- 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/buildIndex.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded.ts +3 -3
- package/src/kernel/runtime/graphpack/manifest.ts +1 -1
- package/src/kernel/runtime/graphpack/read.ts +1 -2
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +472 -28
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +2 -2
- package/src/kernel/runtime/refs/resolve.ts +4 -4
- package/src/kernel/runtime/storeReadiness.ts +1 -2
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
- package/src/kernel/spec/emitReference.ts +105 -30
- package/src/kernel/spec/emitSurface.ts +48 -6
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/types.ts +248 -4
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/journeys.cli.test.ts +1 -1
- package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
- 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.packageStories.test.ts +4 -4
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +1 -1
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/graph/canonical.ts +88 -2
- package/src/testing/fixtures/graph/defaultPack.ts +1 -1
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/projectMcp.ts +32 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +20 -9
- package/src/testing/perf/budgets.ts +58 -9
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +505 -23
- 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/dist/pragma +0 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
- package/src/capabilities/create/templates.embedded.generated.ts +0 -28
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -31,22 +31,24 @@ import {
|
|
|
31
31
|
writeFile,
|
|
32
32
|
} from "@canonical/task";
|
|
33
33
|
import { VERSION } from "../../constants.js";
|
|
34
|
-
import { PragmaError } from "../../kernel/error/
|
|
35
|
-
|
|
34
|
+
import { cliRecovery, PragmaError } from "../../kernel/error/index.js";
|
|
35
|
+
// DIRECT LEAF IMPORT, not `graphpack/index.js`. The barrel re-exports
|
|
36
|
+
// `embedded.ts`, which statically imports the ~1.9 MB generated pack — and
|
|
37
|
+
// with per-file `tsc` output ESM evaluates that re-export when this module
|
|
38
|
+
// loads. `sources update` builds a USER pack; it must not pay the embedded
|
|
39
|
+
// pack's cost to do it.
|
|
36
40
|
import { buildPack } from "../../kernel/runtime/graphpack/build.js";
|
|
41
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
37
42
|
import { activePackPath, readActivePack } from "../../kernel/runtime/paths.js";
|
|
38
|
-
import type { PackageRef } from "../../kernel/runtime/refs/
|
|
39
|
-
import {
|
|
40
|
-
parsePackDeclaration,
|
|
41
|
-
redactUrl,
|
|
42
|
-
} from "../../kernel/runtime/refs/parseRef.js";
|
|
43
|
+
import type { PackageRef } from "../../kernel/runtime/refs/index.js";
|
|
43
44
|
import {
|
|
44
45
|
detectPrefixClashes,
|
|
45
46
|
harvestPrefixes,
|
|
47
|
+
parsePackDeclaration,
|
|
46
48
|
type ResolvedPackage,
|
|
49
|
+
redactUrl,
|
|
47
50
|
resolvePackage,
|
|
48
|
-
} from "../../kernel/runtime/refs/
|
|
49
|
-
import type { PragmaRuntime } from "../../kernel/runtime/types.js";
|
|
51
|
+
} from "../../kernel/runtime/refs/index.js";
|
|
50
52
|
import { installedSkillsDir } from "../skill/discover.js";
|
|
51
53
|
import { planSkillInstall } from "./installSkills.js";
|
|
52
54
|
import type { SourcesUpdateData } from "./types.js";
|
|
@@ -209,17 +211,17 @@ export async function buildUpdateTask(
|
|
|
209
211
|
// prefix. Display-only, so a warning (not a hard failure) is the right call.
|
|
210
212
|
for (const clash of detectPrefixClashes(inputs)) {
|
|
211
213
|
report?.(
|
|
212
|
-
`Prefix "${clash.label}:" is declared with conflicting IRIs across
|
|
214
|
+
`Prefix "${clash.label}:" is declared with conflicting IRIs across packs (${clash.iris.join(" vs ")}); last wins, so some entities may compact to the wrong prefix.`,
|
|
213
215
|
);
|
|
214
216
|
}
|
|
215
217
|
|
|
216
218
|
report?.(`Building store from ${inputs.length} source(s)`);
|
|
217
219
|
if (verbose) for (const input of inputs) report?.(` parse ${input.path}`);
|
|
218
220
|
if (stories.length > 0)
|
|
219
|
-
report?.(`Carrying ${stories.length}
|
|
221
|
+
report?.(`Carrying ${stories.length} pack read story file(s)`);
|
|
220
222
|
|
|
221
223
|
// Build the pack. On a parse/build failure, classify it as a NAMED data error
|
|
222
|
-
// (U6) — not INTERNAL_ERROR's "
|
|
224
|
+
// (U6) — not INTERNAL_ERROR's "report this issue" — identifying the
|
|
223
225
|
// offending package source, since ke's parser error carries only line/column.
|
|
224
226
|
// With `--skip-invalid`, drop the unparseable sources (warning LOUDLY about
|
|
225
227
|
// each — never a silent partial graph) and build from the rest instead of
|
|
@@ -262,7 +264,7 @@ export async function buildUpdateTask(
|
|
|
262
264
|
);
|
|
263
265
|
if (usableInputs.length === 0)
|
|
264
266
|
throw PragmaError.configError(
|
|
265
|
-
`
|
|
267
|
+
`None of the ${inputs.length} configured source(s) can be parsed — nothing to build.`,
|
|
266
268
|
{
|
|
267
269
|
recovery: cliRecovery(
|
|
268
270
|
"sources update --verbose",
|
|
@@ -299,7 +301,7 @@ export async function buildUpdateTask(
|
|
|
299
301
|
{
|
|
300
302
|
recovery: cliRecovery(
|
|
301
303
|
"sources update --verbose",
|
|
302
|
-
"Check that the
|
|
304
|
+
"Check that the pack sources actually contain RDF triples, then re-run.",
|
|
303
305
|
),
|
|
304
306
|
},
|
|
305
307
|
);
|
|
@@ -322,13 +324,24 @@ export async function buildUpdateTask(
|
|
|
322
324
|
|
|
323
325
|
// Install package-provided skills (U10): symlink each resolved package's
|
|
324
326
|
// `skills/*` into the installed-skills root, so `skill list` / `setup skills`
|
|
325
|
-
// see them after an update
|
|
326
|
-
//
|
|
327
|
-
|
|
328
|
-
|
|
327
|
+
// see them after an update — and RETIRE the links of skills those packages
|
|
328
|
+
// have since dropped, which the same plan reports as `pruned`. Kept in this
|
|
329
|
+
// Task (reversible: a created link carries an unlink undo, a pruned one a
|
|
330
|
+
// re-link undo) so `sources update --undo` restores the root as it was.
|
|
331
|
+
//
|
|
332
|
+
// The two are split, not counted together: a prune is a deletion, so folding
|
|
333
|
+
// it into "Installing N skill(s)" would report a removal as an install.
|
|
334
|
+
const skillPlan = planSkillInstall(resolved);
|
|
335
|
+
const skillLinks = skillPlan.filter(
|
|
336
|
+
(link) => link.action === "created" || link.action === "replaced",
|
|
329
337
|
);
|
|
338
|
+
const staleLinks = skillPlan.filter((link) => link.action === "pruned");
|
|
330
339
|
if (skillLinks.length > 0)
|
|
331
340
|
report?.(`Installing ${skillLinks.length} skill(s)`);
|
|
341
|
+
if (staleLinks.length > 0)
|
|
342
|
+
report?.(
|
|
343
|
+
`Removing ${staleLinks.length} skill link(s) no longer provided by any package`,
|
|
344
|
+
);
|
|
332
345
|
|
|
333
346
|
report?.(`Pointing ${runtime.cwd} at pack ${built.contentHash.slice(0, 12)}`);
|
|
334
347
|
return gen(function* () {
|
|
@@ -344,6 +357,25 @@ export async function buildUpdateTask(
|
|
|
344
357
|
);
|
|
345
358
|
}
|
|
346
359
|
}
|
|
360
|
+
// No `mkdir` guard here: a stale link can only have been enumerated FROM
|
|
361
|
+
// the installed root, so the root necessarily exists.
|
|
362
|
+
//
|
|
363
|
+
// The undo re-creates the link exactly as found — dangling target and all —
|
|
364
|
+
// because undo's job is to restore the prior state, not to improve on it. It
|
|
365
|
+
// clears the path first because the undo interpreter MOCKS forward effects
|
|
366
|
+
// when collecting: the delete above may never have run, and `fs.symlink`
|
|
367
|
+
// refuses a path that already exists. Same delete-then-link shape the
|
|
368
|
+
// `replaced` branch above uses, for the same reason.
|
|
369
|
+
for (const stale of staleLinks) {
|
|
370
|
+
yield* $(
|
|
371
|
+
deleteFile(stale.linkPath, {
|
|
372
|
+
undo: gen(function* () {
|
|
373
|
+
yield* $(deleteFile(stale.linkPath));
|
|
374
|
+
yield* $(symlink(stale.target, stale.linkPath));
|
|
375
|
+
}),
|
|
376
|
+
}),
|
|
377
|
+
);
|
|
378
|
+
}
|
|
347
379
|
return data;
|
|
348
380
|
});
|
|
349
381
|
}
|
|
@@ -385,12 +417,12 @@ export async function classifySourceBuildError(
|
|
|
385
417
|
const culprit = await isolateBadSource(inputs);
|
|
386
418
|
const detail = culprit?.message ?? parserMessage;
|
|
387
419
|
const where = culprit
|
|
388
|
-
? `
|
|
389
|
-
: "The configured
|
|
420
|
+
? `Pack source "${culprit.path}" cannot be parsed`
|
|
421
|
+
: "The configured packs cannot be built into a store";
|
|
390
422
|
return PragmaError.configError(`${where}: ${detail}`, {
|
|
391
423
|
recovery: cliRecovery(
|
|
392
424
|
"sources update --verbose",
|
|
393
|
-
"Re-run with --verbose to see each file as it parses. If a
|
|
425
|
+
"Re-run with --verbose to see each file as it parses. If a pack ships malformed RDF, report it to that pack's maintainer.",
|
|
394
426
|
),
|
|
395
427
|
});
|
|
396
428
|
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { execFileSync } from "node:child_process";
|
|
2
2
|
import {
|
|
3
3
|
existsSync,
|
|
4
|
+
lstatSync,
|
|
4
5
|
mkdirSync,
|
|
5
6
|
mkdtempSync,
|
|
7
|
+
readdirSync,
|
|
6
8
|
readFileSync,
|
|
9
|
+
readlinkSync,
|
|
7
10
|
rmSync,
|
|
8
11
|
symlinkSync,
|
|
9
12
|
writeFileSync,
|
|
@@ -200,7 +203,7 @@ describe("sources update round-trip (PROTECTED)", () => {
|
|
|
200
203
|
it("does not recurse into a symlinked directory cycle (L6 safety)", async () => {
|
|
201
204
|
// The L6 fix follows symlinked FILES but must NOT recurse into a symlinked
|
|
202
205
|
// DIRECTORY: a link to an ancestor dir is a cycle that, if walked, recurses
|
|
203
|
-
// without bound → a stack-overflow RangeError (an INTERNAL "
|
|
206
|
+
// without bound → a stack-overflow RangeError (an INTERNAL "report").
|
|
204
207
|
// The real `.ttl` is still ingested and the build completes.
|
|
205
208
|
const pkg = tmp("pragma-symlink-cycle-");
|
|
206
209
|
mkdirSync(join(pkg, "definitions"), { recursive: true });
|
|
@@ -499,7 +502,7 @@ describe("sources update — data-failure classification (U6)", () => {
|
|
|
499
502
|
expect(err.message).toContain("bad-pkg/definitions/broken.ttl");
|
|
500
503
|
// … carries the parser's own detail …
|
|
501
504
|
expect(err.message.toLowerCase()).toContain("parser error");
|
|
502
|
-
// … and is NOT the internal-bug "
|
|
505
|
+
// … and is NOT the internal-bug "report this issue" path.
|
|
503
506
|
expect(err.message).not.toContain("Internal error");
|
|
504
507
|
expect(err.recovery?.message ?? "").not.toContain("report this issue");
|
|
505
508
|
// The recovery points the user at a runnable, useful next step.
|
|
@@ -768,6 +771,155 @@ describe("sources update — installs package skills (U10)", () => {
|
|
|
768
771
|
|
|
769
772
|
expect(existsSync(join(dataHome, "pragma", "skills", "bar"))).toBe(false);
|
|
770
773
|
});
|
|
774
|
+
|
|
775
|
+
/** The installed-skills root, created so a prior install can be seeded into it. */
|
|
776
|
+
function installedRoot(): string {
|
|
777
|
+
const root = join(dataHome, "pragma", "skills");
|
|
778
|
+
mkdirSync(root, { recursive: true });
|
|
779
|
+
return root;
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
/** A symlink at `<installedRoot>/<name>` whose target does not exist. */
|
|
783
|
+
function danglingLink(root: string, name: string): string {
|
|
784
|
+
const target = join(tmp("pragma-uninstalled-"), "skills", name);
|
|
785
|
+
symlinkSync(target, join(root, name));
|
|
786
|
+
return target;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
// The `@canonical/design-system` 0.2.0 regression: 0.1.2 shipped
|
|
790
|
+
// `component-specifier`, 0.2.0 deleted it in favour of `specify-component`,
|
|
791
|
+
// and every machine that had updated against 0.1.2 kept a symlink into a
|
|
792
|
+
// package directory that no longer exists.
|
|
793
|
+
it("prunes a link whose package dropped the skill", async () => {
|
|
794
|
+
const pkg = skillPackage("specify-component"); // the 0.2.0 shape
|
|
795
|
+
const root = installedRoot();
|
|
796
|
+
danglingLink(root, "component-specifier"); // what 0.1.2 left behind
|
|
797
|
+
|
|
798
|
+
const cwd = tmp("pragma-proj-");
|
|
799
|
+
const runtime = runtimeFor(cwd, [
|
|
800
|
+
{ name: "design-system", source: `file://${pkg}` },
|
|
801
|
+
]);
|
|
802
|
+
await runTask(await buildUpdateTask(runtime));
|
|
803
|
+
|
|
804
|
+
expect(readdirSync(root)).toEqual(["specify-component"]);
|
|
805
|
+
expect(discoverSkills(cwd).map((s) => s.name)).not.toContain(
|
|
806
|
+
"component-specifier",
|
|
807
|
+
);
|
|
808
|
+
});
|
|
809
|
+
|
|
810
|
+
it("spares a manually-installed skill and a foreign link that still resolves", async () => {
|
|
811
|
+
const pkg = skillPackage("specify-component");
|
|
812
|
+
const root = installedRoot();
|
|
813
|
+
danglingLink(root, "component-specifier");
|
|
814
|
+
|
|
815
|
+
// A hand-installed skill: a REAL directory, belonging to no package. The
|
|
816
|
+
// install pass already refuses to clobber these; so must the prune pass.
|
|
817
|
+
const manual = join(root, "hand-written");
|
|
818
|
+
mkdirSync(manual, { recursive: true });
|
|
819
|
+
writeFileSync(
|
|
820
|
+
join(manual, "SKILL.md"),
|
|
821
|
+
"---\nname: hand-written\ndescription: Mine.\n---\n",
|
|
822
|
+
);
|
|
823
|
+
// Someone's own link into a checkout this update knows nothing about, and
|
|
824
|
+
// which still resolves. Deliberately RELATIVE: a relative target is stored
|
|
825
|
+
// relative to the LINK's directory, so resolving it against anything else
|
|
826
|
+
// (the cwd, say) would read as broken and eat a perfectly live link.
|
|
827
|
+
const foreign = join(dataHome, "elsewhere", "my-own");
|
|
828
|
+
mkdirSync(foreign, { recursive: true });
|
|
829
|
+
writeFileSync(
|
|
830
|
+
join(foreign, "SKILL.md"),
|
|
831
|
+
"---\nname: my-own\ndescription: Theirs.\n---\n",
|
|
832
|
+
);
|
|
833
|
+
symlinkSync(join("..", "..", "elsewhere", "my-own"), join(root, "my-own"));
|
|
834
|
+
|
|
835
|
+
const cwd = tmp("pragma-proj-");
|
|
836
|
+
const runtime = runtimeFor(cwd, [
|
|
837
|
+
{ name: "design-system", source: `file://${pkg}` },
|
|
838
|
+
]);
|
|
839
|
+
await runTask(await buildUpdateTask(runtime));
|
|
840
|
+
|
|
841
|
+
// Only the dangling link went.
|
|
842
|
+
expect(readdirSync(root).sort()).toEqual([
|
|
843
|
+
"hand-written",
|
|
844
|
+
"my-own",
|
|
845
|
+
"specify-component",
|
|
846
|
+
]);
|
|
847
|
+
expect(lstatSync(manual).isDirectory()).toBe(true);
|
|
848
|
+
expect(existsSync(join(manual, "SKILL.md"))).toBe(true);
|
|
849
|
+
expect(lstatSync(join(root, "my-own")).isSymbolicLink()).toBe(true);
|
|
850
|
+
expect(existsSync(join(root, "my-own"))).toBe(true); // still resolves
|
|
851
|
+
const found = discoverSkills(cwd).map((s) => s.name);
|
|
852
|
+
expect(found).toEqual(
|
|
853
|
+
expect.arrayContaining(["hand-written", "my-own", "specify-component"]),
|
|
854
|
+
);
|
|
855
|
+
});
|
|
856
|
+
|
|
857
|
+
it("re-points, rather than prunes, a dangling link the package still provides", async () => {
|
|
858
|
+
const pkg = skillPackage("foo");
|
|
859
|
+
const root = installedRoot();
|
|
860
|
+
danglingLink(root, "foo"); // e.g. the package moved to a new cache dir
|
|
861
|
+
|
|
862
|
+
const cwd = tmp("pragma-proj-");
|
|
863
|
+
const runtime = runtimeFor(cwd, [
|
|
864
|
+
{ name: "pkg-a", source: `file://${pkg}` },
|
|
865
|
+
]);
|
|
866
|
+
await runTask(await buildUpdateTask(runtime));
|
|
867
|
+
|
|
868
|
+
// `replaced`, never `pruned`: the prune pass skips every name this run
|
|
869
|
+
// planned, or it would delete the link the install pass just created.
|
|
870
|
+
expect(readlinkSync(join(root, "foo"))).toBe(join(pkg, "skills", "foo"));
|
|
871
|
+
expect(discoverSkills(cwd).map((s) => s.name)).toContain("foo");
|
|
872
|
+
});
|
|
873
|
+
|
|
874
|
+
it("is reversible — undo restores a pruned link, dangling target and all", async () => {
|
|
875
|
+
const pkg = skillPackage("specify-component");
|
|
876
|
+
const root = installedRoot();
|
|
877
|
+
const staleTarget = danglingLink(root, "component-specifier");
|
|
878
|
+
const link = join(root, "component-specifier");
|
|
879
|
+
|
|
880
|
+
const cwd = tmp("pragma-proj-");
|
|
881
|
+
const runtime = runtimeFor(cwd, [
|
|
882
|
+
{ name: "design-system", source: `file://${pkg}` },
|
|
883
|
+
]);
|
|
884
|
+
// The plan is made while the stale link is still there; `runUndo` MOCKS the
|
|
885
|
+
// forward effects, so stand in for the delete it would have performed.
|
|
886
|
+
const task = await buildUpdateTask(runtime);
|
|
887
|
+
rmSync(link);
|
|
888
|
+
|
|
889
|
+
const { runUndo } = await import("@canonical/task/node");
|
|
890
|
+
await runUndo(task);
|
|
891
|
+
|
|
892
|
+
expect(lstatSync(link).isSymbolicLink()).toBe(true);
|
|
893
|
+
expect(readlinkSync(link)).toBe(staleTarget); // the target it always had
|
|
894
|
+
});
|
|
895
|
+
|
|
896
|
+
it("undoes a prune whose forward delete never ran, rather than failing EEXIST", async () => {
|
|
897
|
+
const pkg = skillPackage("specify-component");
|
|
898
|
+
const root = installedRoot();
|
|
899
|
+
const staleTarget = danglingLink(root, "component-specifier");
|
|
900
|
+
|
|
901
|
+
const cwd = tmp("pragma-proj-");
|
|
902
|
+
const runtime = runtimeFor(cwd, [
|
|
903
|
+
{ name: "design-system", source: `file://${pkg}` },
|
|
904
|
+
]);
|
|
905
|
+
// No `rmSync` this time: the link is still in place when the undo re-links,
|
|
906
|
+
// and `fs.symlink` refuses an existing path — so the undo must clear it.
|
|
907
|
+
const { runUndo } = await import("@canonical/task/node");
|
|
908
|
+
await expect(runUndo(await buildUpdateTask(runtime))).resolves.toBeTruthy();
|
|
909
|
+
|
|
910
|
+
expect(readlinkSync(join(root, "component-specifier"))).toBe(staleTarget);
|
|
911
|
+
});
|
|
912
|
+
|
|
913
|
+
it("plans no prunes when nothing was ever installed", async () => {
|
|
914
|
+
const pkg = skillPackage("foo"); // $XDG_DATA_HOME/pragma/skills absent
|
|
915
|
+
const cwd = tmp("pragma-proj-");
|
|
916
|
+
const runtime = runtimeFor(cwd, [
|
|
917
|
+
{ name: "pkg-a", source: `file://${pkg}` },
|
|
918
|
+
]);
|
|
919
|
+
await runTask(await buildUpdateTask(runtime));
|
|
920
|
+
|
|
921
|
+
expect(readdirSync(join(dataHome, "pragma", "skills"))).toEqual(["foo"]);
|
|
922
|
+
});
|
|
771
923
|
});
|
|
772
924
|
|
|
773
925
|
describe("sources status — entityCount from the manifest (A10)", () => {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { BIN_NAME } from "../../constants.js";
|
|
6
6
|
import { defaultStyle, type RenderStyle } from "../../kernel/render/style.js";
|
|
7
|
-
import type { Formatters } from "../../kernel/spec/
|
|
7
|
+
import type { Formatters } from "../../kernel/spec/index.js";
|
|
8
8
|
import type { SourcesStatusData } from "./types.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { BIN_NAME } from "../../constants.js";
|
|
12
|
-
import type { VerbSpec } from "../../kernel/spec/
|
|
12
|
+
import type { VerbSpec } from "../../kernel/spec/index.js";
|
|
13
13
|
import { statusFormatters } from "./status.render.js";
|
|
14
14
|
import type { SourcesStatusData } from "./types.js";
|
|
15
15
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Formatters for `pragma sources update` — plain, llm, json.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import type { Formatters } from "../../kernel/spec/
|
|
5
|
+
import type { Formatters } from "../../kernel/spec/index.js";
|
|
6
6
|
import type { SourcesUpdateData } from "./types.js";
|
|
7
7
|
|
|
8
8
|
export const updateFormatters: Formatters<SourcesUpdateData> = {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
import type { Task } from "@canonical/task";
|
|
16
16
|
import { BIN_NAME } from "../../constants.js";
|
|
17
|
-
import type { VerbSpec } from "../../kernel/spec/
|
|
17
|
+
import type { VerbSpec } from "../../kernel/spec/index.js";
|
|
18
18
|
import type { SourcesUpdateData } from "./types.js";
|
|
19
19
|
import { updateFormatters } from "./update.render.js";
|
|
20
20
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { buildOptionInfo } from "@canonical/summon-core/projection";
|
|
3
4
|
import { describe, expect, it } from "vitest";
|
|
4
5
|
import { MCP_SERVER_NAME, VERSION } from "../constants.js";
|
|
5
6
|
import { emitSurface } from "../kernel/spec/emitSurface.js";
|
|
@@ -8,6 +9,7 @@ import {
|
|
|
8
9
|
type Covenant,
|
|
9
10
|
} from "../kernel/spec/surfaceConformance.js";
|
|
10
11
|
import { projectMcp } from "../testing/helpers/projectMcp.js";
|
|
12
|
+
import { CREATE_SURFACE } from "./create/createSurface.generated.js";
|
|
11
13
|
import { capabilities } from "./index.js";
|
|
12
14
|
|
|
13
15
|
/** The committed covenant, read from disk exactly as a consumer would. */
|
|
@@ -25,22 +27,40 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
25
27
|
expect(() => assertConforms(emitted, golden)).not.toThrow();
|
|
26
28
|
});
|
|
27
29
|
|
|
28
|
-
it("emits config
|
|
30
|
+
it("emits the four config verbs — show, get, set, unset — in covenant order", () => {
|
|
29
31
|
// AV-228 B3 retired the per-field `tier`/`channel`/`detail` setters; the
|
|
30
|
-
// config noun is
|
|
32
|
+
// config noun is the `show` dump, the `get <key>` single read, the
|
|
33
|
+
// `set <key> <value>` writer, and the `unset <key>` clearer. Reading one
|
|
34
|
+
// value and clearing one field are commands of their own — neither hides
|
|
35
|
+
// inside `show --format json` nor inside a reserved `set` value.
|
|
31
36
|
expect(emitted.nouns.config?.verbs).toEqual([
|
|
32
37
|
{ v: "show", mcp: "config_show" },
|
|
38
|
+
{ v: "get", args: ["<key>"], mcp: "config_get" },
|
|
33
39
|
{
|
|
34
40
|
v: "set",
|
|
35
41
|
args: ["<key>", "<value>"],
|
|
36
42
|
mutates: true,
|
|
37
43
|
mcp: "config_set",
|
|
38
44
|
},
|
|
45
|
+
{
|
|
46
|
+
v: "unset",
|
|
47
|
+
args: ["<key>"],
|
|
48
|
+
mutates: true,
|
|
49
|
+
mcp: "config_unset",
|
|
50
|
+
},
|
|
39
51
|
]);
|
|
40
52
|
// info stays a data-only enrichment — its emitted verb is unchanged.
|
|
41
53
|
expect(emitted.nouns.info?.verbs).toEqual([{ v: "info", mcp: "info" }]);
|
|
42
|
-
//
|
|
43
|
-
|
|
54
|
+
// `version` is the command form of `--version`: one value, two spellings
|
|
55
|
+
// of the same read, and no tool — the version already rides `info`.
|
|
56
|
+
expect(emitted.nouns.version?.verbs).toEqual([
|
|
57
|
+
{ v: "version", mcp: false },
|
|
58
|
+
]);
|
|
59
|
+
// The server entry is a real noun/verb pair, emitted like any other and
|
|
60
|
+
// carrying no tool — it serves a protocol, it is not an agent tool.
|
|
61
|
+
expect(emitted.nouns.mcp?.verbs).toEqual([{ v: "serve", mcp: false }]);
|
|
62
|
+
// The completion resolver stays hidden — it is a protocol between the
|
|
63
|
+
// shell script and the bin, not a command anyone types.
|
|
44
64
|
expect(emitted.nouns.__complete).toBeUndefined();
|
|
45
65
|
});
|
|
46
66
|
|
|
@@ -105,15 +125,8 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
105
125
|
needsStore: true,
|
|
106
126
|
mcp: "ontology_lookup",
|
|
107
127
|
},
|
|
108
|
-
//
|
|
109
|
-
//
|
|
110
|
-
{
|
|
111
|
-
v: "show",
|
|
112
|
-
args: ["<prefix>"],
|
|
113
|
-
flags: ["--properties", "--full-uris", "--class"],
|
|
114
|
-
needsStore: true,
|
|
115
|
-
mcp: "ontology_show",
|
|
116
|
-
},
|
|
128
|
+
// One job, one spelling: `lookup` is the by-name read, and nothing
|
|
129
|
+
// else answers to it.
|
|
117
130
|
]);
|
|
118
131
|
// skill discovery is storeless (filesystem) — no needsStore.
|
|
119
132
|
expect(emitted.nouns.skill?.verbs).toEqual([
|
|
@@ -137,6 +150,92 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
137
150
|
]);
|
|
138
151
|
});
|
|
139
152
|
|
|
153
|
+
it("emits the L-CIS create noun — projected grammar, deep-equal to the covenant", () => {
|
|
154
|
+
// The create surface DERIVES from the generators' prompts (L-CIS): the
|
|
155
|
+
// framework tree segment is a required positional enum, component's flags
|
|
156
|
+
// are the framework union (incl. the svelte-only --use-ts-stories), and
|
|
157
|
+
// every flag AND positional token is the REGISTERED spelling (L-CIS-2) —
|
|
158
|
+
// a default-true confirm registers ONLY its `--no-<kebab>` form, and the
|
|
159
|
+
// args carry the kebab positional the usage line prints, so the covenant
|
|
160
|
+
// names `--no-with-styles` and `[component-path]`, never a
|
|
161
|
+
// `--with-styles` the CLI rejects or a `[componentPath]` its help never
|
|
162
|
+
// prints. Pin the three entries verbatim so a prompt edit that moves the
|
|
163
|
+
// covenant is SEEN.
|
|
164
|
+
expect(emitted.nouns.create?.verbs).toEqual([
|
|
165
|
+
{
|
|
166
|
+
v: "component",
|
|
167
|
+
args: ["<framework>", "[component-path]"],
|
|
168
|
+
flags: [
|
|
169
|
+
"--no-with-styles",
|
|
170
|
+
"--no-with-stories",
|
|
171
|
+
"--no-with-ssr-tests",
|
|
172
|
+
"--use-ts-stories",
|
|
173
|
+
],
|
|
174
|
+
mutates: true,
|
|
175
|
+
mcp: "create_component",
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
v: "package",
|
|
179
|
+
flags: [
|
|
180
|
+
"--name",
|
|
181
|
+
"--type",
|
|
182
|
+
"--description",
|
|
183
|
+
"--with-react",
|
|
184
|
+
"--with-storybook",
|
|
185
|
+
"--with-cli",
|
|
186
|
+
"--with-pr-template",
|
|
187
|
+
"--no-run-install",
|
|
188
|
+
],
|
|
189
|
+
mutates: true,
|
|
190
|
+
mcp: "create_package",
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
v: "application",
|
|
194
|
+
args: ["[app-path]"],
|
|
195
|
+
// ssr/router are GONE: always-on facts, not prompts — the pair had no
|
|
196
|
+
// reachable explicit form (only `--no-` spellings the generator's own
|
|
197
|
+
// guard rejected), so the projection no longer carries them.
|
|
198
|
+
flags: ["--no-forms", "--intl", "--relay", "--no-run-install"],
|
|
199
|
+
mutates: true,
|
|
200
|
+
mcp: "create_application",
|
|
201
|
+
},
|
|
202
|
+
]);
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
it("every create covenant flag token is buildOptionInfo's primary registered long form (L-CIS-2)", () => {
|
|
206
|
+
// The derivation tie: the covenant's create tokens must be EXACTLY the
|
|
207
|
+
// long forms the single flag-shape authority yields for the projected
|
|
208
|
+
// prompts — the same expression both binaries register from — so the
|
|
209
|
+
// covenant can never again teach a spelling the CLI rejects (the
|
|
210
|
+
// round-15 F2 defect: kebab-cased param names blessed `--with-styles`
|
|
211
|
+
// and rejected the real `--no-with-styles`).
|
|
212
|
+
const registered = new Map<string, string>();
|
|
213
|
+
for (const surface of Object.values(CREATE_SURFACE)) {
|
|
214
|
+
for (const prompt of surface.prompts) {
|
|
215
|
+
if (prompt.positional === true) continue;
|
|
216
|
+
registered.set(
|
|
217
|
+
prompt.name,
|
|
218
|
+
buildOptionInfo(prompt).flags.split(" ")[0] as string,
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
for (const verb of emitted.nouns.create?.verbs ?? []) {
|
|
223
|
+
expect(verb.flags?.length ?? 0).toBeGreaterThan(0);
|
|
224
|
+
for (const token of verb.flags ?? []) {
|
|
225
|
+
expect([...registered.values()]).toContain(token);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// …and every non-positional projected prompt is named by some entry.
|
|
229
|
+
const covenantTokens = new Set(
|
|
230
|
+
(emitted.nouns.create?.verbs ?? []).flatMap((verb) => verb.flags ?? []),
|
|
231
|
+
);
|
|
232
|
+
for (const [name, token] of registered) {
|
|
233
|
+
expect(covenantTokens.has(token), `${name} → ${token} missing`).toBe(
|
|
234
|
+
true,
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
|
|
140
239
|
it("emits the PR6 effect/diagnostic self-verbs (doctor, upgrade)", () => {
|
|
141
240
|
// doctor is a storeless read self-verb — no args, no flags, no needsStore.
|
|
142
241
|
expect(emitted.nouns.doctor?.verbs).toEqual([
|
|
@@ -167,20 +266,36 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
167
266
|
mutates: true,
|
|
168
267
|
mcp: "setup",
|
|
169
268
|
},
|
|
269
|
+
{
|
|
270
|
+
v: "config",
|
|
271
|
+
flags: ["--scope", "--global", "--local"],
|
|
272
|
+
mutates: true,
|
|
273
|
+
mcp: false,
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
v: "completions",
|
|
277
|
+
flags: ["--scope", "--global", "--local"],
|
|
278
|
+
mutates: true,
|
|
279
|
+
mcp: false,
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
v: "lsp",
|
|
283
|
+
flags: ["--scope", "--global", "--local"],
|
|
284
|
+
mutates: true,
|
|
285
|
+
mcp: false,
|
|
286
|
+
},
|
|
170
287
|
{
|
|
171
288
|
v: "mcp",
|
|
172
289
|
flags: ["--scope", "--global", "--local"],
|
|
173
290
|
mutates: true,
|
|
174
291
|
mcp: false,
|
|
175
292
|
},
|
|
176
|
-
{ v: "completions", mutates: true, mcp: false },
|
|
177
293
|
{
|
|
178
294
|
v: "skills",
|
|
179
295
|
flags: ["--scope", "--global", "--local"],
|
|
180
296
|
mutates: true,
|
|
181
297
|
mcp: false,
|
|
182
298
|
},
|
|
183
|
-
{ v: "lsp", mutates: true, mcp: false },
|
|
184
299
|
]);
|
|
185
300
|
});
|
|
186
301
|
|
|
@@ -200,6 +315,8 @@ describe("surface conformance — capabilities ⊆ covenant (PROTECTED)", () =>
|
|
|
200
315
|
"standard_sample",
|
|
201
316
|
"tier_list",
|
|
202
317
|
"config_show",
|
|
318
|
+
"config_get",
|
|
319
|
+
"config_unset",
|
|
203
320
|
"colophon",
|
|
204
321
|
]) {
|
|
205
322
|
expect(tools).toContain(tool);
|
|
@@ -213,14 +330,14 @@ describe("surface COMPLETE — emitted == covenant (PROTECTED)", () => {
|
|
|
213
330
|
// The CLOSING direction: assertConforms already proves emitted ⊆ covenant;
|
|
214
331
|
// this proves covenant ⊆ emitted, so together the tool sets are EQUAL — the
|
|
215
332
|
// surface-complete milestone. After PR7, every covenant tool is realized.
|
|
216
|
-
it("emits every covenant tool (all
|
|
333
|
+
it("emits every covenant tool (all 42) — set equality with the covenant", () => {
|
|
217
334
|
const emittedTools = new Set(emitted.mcpSurface.tools);
|
|
218
335
|
const missing = golden.mcpSurface.tools.filter((t) => !emittedTools.has(t));
|
|
219
336
|
expect(missing).toEqual([]);
|
|
220
337
|
expect([...emitted.mcpSurface.tools].sort()).toEqual(
|
|
221
338
|
[...golden.mcpSurface.tools].sort(),
|
|
222
339
|
);
|
|
223
|
-
expect(emitted.mcpSurface.tools).toHaveLength(
|
|
340
|
+
expect(emitted.mcpSurface.tools).toHaveLength(42);
|
|
224
341
|
});
|
|
225
342
|
|
|
226
343
|
// The covenant edit: the non-tool MCP surface is frozen too.
|
|
@@ -21,13 +21,15 @@
|
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
import { $, exec, gen, info, type Task, warn } from "@canonical/task";
|
|
24
|
-
import type { PragmaRuntime } from "../../kernel/runtime/
|
|
25
|
-
import { assertExecOk, guardMissingBinary } from "../shared/assertExecOk.js";
|
|
24
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
26
25
|
import {
|
|
26
|
+
assertExecOk,
|
|
27
|
+
checkRegistryVersion,
|
|
27
28
|
detectInstallSource,
|
|
29
|
+
guardMissingBinary,
|
|
30
|
+
PRAGMA_PACKAGE,
|
|
28
31
|
pmUpdateCommand,
|
|
29
|
-
} from "../shared/
|
|
30
|
-
import { checkRegistryVersion, PRAGMA_PACKAGE } from "../shared/registry.js";
|
|
32
|
+
} from "../shared/index.js";
|
|
31
33
|
import type { UpgradeData } from "./types.js";
|
|
32
34
|
|
|
33
35
|
/**
|
|
@@ -61,9 +63,7 @@ export async function runUpgrade(
|
|
|
61
63
|
executed: false,
|
|
62
64
|
};
|
|
63
65
|
return gen(function* () {
|
|
64
|
-
yield* $(
|
|
65
|
-
warn("Could not reach the registry — skipped the update check."),
|
|
66
|
-
);
|
|
66
|
+
yield* $(warn("Cannot reach the registry — skipped the update check."));
|
|
67
67
|
return data;
|
|
68
68
|
});
|
|
69
69
|
}
|
|
@@ -97,7 +97,7 @@ export async function runUpgrade(
|
|
|
97
97
|
const bin = parts[0] ?? "npm";
|
|
98
98
|
const args = parts.slice(1);
|
|
99
99
|
// Guard the spawn: an absent package manager (`bin` not on PATH) REJECTS the
|
|
100
|
-
// exec with ENOENT, which would collapse to INTERNAL_ERROR ("
|
|
100
|
+
// exec with ENOENT, which would collapse to INTERNAL_ERROR ("report
|
|
101
101
|
// this issue"). Surface it as a named "`<pm>` not found on PATH" instead.
|
|
102
102
|
return guardMissingBinary(
|
|
103
103
|
bin,
|