@canonical/pragma-cli 0.33.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +293 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +83 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +66 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +53 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +168 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +193 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +334 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +263 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +195 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +82 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +25 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +197 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +85 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +25 -24
- package/pragma.conf.ts +853 -0
- package/src/bin.ts +276 -82
- package/src/capabilities/block.parity.test.ts +253 -0
- package/src/capabilities/capabilities/capabilities.render.ts +4 -3
- package/src/capabilities/capabilities/capabilities.verb.ts +32 -14
- package/src/capabilities/capabilities/catalog.ts +20 -12
- package/src/capabilities/capabilities/hints.ts +43 -24
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +50 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +9 -5
- package/src/capabilities/colophon/types.ts +16 -7
- package/src/capabilities/config/collectConfigShow.test.ts +58 -0
- package/src/capabilities/config/collectConfigShow.ts +43 -6
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -37
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +14 -9
- package/src/capabilities/config/show.render.test.ts +77 -5
- package/src/capabilities/config/show.render.ts +8 -13
- package/src/capabilities/config/show.verb.ts +13 -9
- package/src/capabilities/config/types.ts +26 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +95 -103
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +50 -0
- package/src/capabilities/create/create.mcp.test.ts +91 -7
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +523 -162
- package/src/capabilities/create/create.verb.ts +361 -321
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +9 -14
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +40 -46
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +29 -5
- package/src/capabilities/{standard/parity.test.ts → distribution.parity.test.ts} +24 -14
- package/src/capabilities/distribution.test.ts +122 -0
- package/src/capabilities/distribution.ts +54 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +9 -7
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +82 -46
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +5 -4
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +125 -30
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +113 -27
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +24 -13
- package/src/capabilities/doctor/doctor.render.ts +45 -20
- package/src/capabilities/doctor/doctor.test.ts +158 -40
- package/src/capabilities/doctor/doctor.verb.ts +9 -5
- package/src/capabilities/doctor/runChecks.ts +65 -66
- package/src/capabilities/doctor/types.ts +21 -5
- package/src/capabilities/emptyRecovery.test.ts +44 -22
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -5
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +5 -4
- package/src/capabilities/graph/runQuery.ts +9 -7
- package/src/capabilities/index.ts +25 -19
- package/src/capabilities/info/collectInfo.ts +15 -10
- package/src/capabilities/info/info.render.ts +4 -3
- package/src/capabilities/info/info.verb.ts +4 -3
- package/src/capabilities/lazy.test.ts +125 -2
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +42 -83
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/prompt.test.ts +12 -6
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +26 -14
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +367 -91
- package/src/capabilities/resources/resources.test.ts +411 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +397 -320
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +233 -74
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +166 -14
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +47 -9
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +14 -14
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +9 -10
- package/src/capabilities/sources/collectStatus.ts +61 -51
- package/src/capabilities/sources/index.ts +2 -2
- package/src/capabilities/sources/installSkills.ts +86 -9
- package/src/capabilities/sources/runUpdate.ts +164 -141
- package/src/capabilities/sources/sources.test.ts +265 -119
- package/src/capabilities/sources/status.render.test.ts +53 -24
- package/src/capabilities/sources/status.render.ts +25 -30
- package/src/capabilities/sources/status.verb.ts +16 -9
- package/src/capabilities/sources/types.ts +18 -25
- package/src/capabilities/sources/update.render.ts +10 -3
- package/src/capabilities/sources/update.verb.ts +13 -24
- package/src/capabilities/surface.test.ts +165 -25
- package/src/capabilities/tier.parity.test.ts +144 -0
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +8 -4
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.test.ts +8 -6
- package/src/constants.ts +78 -22
- package/src/identity.test.ts +348 -0
- package/src/index.ts +2 -2
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +20 -15
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.test.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +5 -3
- package/src/kernel/completion/entitySource.test.ts +185 -41
- package/src/kernel/completion/entitySource.ts +133 -110
- package/src/kernel/completion/model.test.ts +165 -13
- package/src/kernel/completion/model.ts +105 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +104 -50
- package/src/kernel/completion/shellDrive.test.ts +611 -0
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/fish.ts +28 -6
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +10 -3
- package/src/kernel/config/defaults.test.ts +108 -0
- package/src/kernel/config/defaults.ts +13 -23
- package/src/kernel/config/evaluateProjectConfig.ts +33 -11
- package/src/kernel/config/findProjectConfig.ts +4 -3
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -81
- package/src/kernel/config/globalConfig.ts +2 -2
- package/src/kernel/config/index.ts +5 -6
- package/src/kernel/config/paths.ts +17 -17
- package/src/kernel/config/readConfig.test.ts +246 -7
- package/src/kernel/config/readConfig.ts +8 -8
- package/src/kernel/config/schema.test.ts +50 -0
- package/src/kernel/config/schema.ts +100 -11
- package/src/kernel/config/types.ts +75 -19
- package/src/kernel/copy.test.ts +483 -0
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +6 -3
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -4
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/index.ts +1 -1
- package/src/kernel/error/recovery.test.ts +22 -45
- package/src/kernel/error/recovery.ts +36 -27
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +25 -4
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.test.ts +195 -11
- package/src/kernel/packs/collect.ts +212 -61
- package/src/kernel/packs/compile.test.ts +293 -8
- package/src/kernel/packs/compile.ts +108 -15
- package/src/kernel/packs/disclosure.test.ts +5 -2
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +13 -13
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/graphqlSource.test.ts +6 -3
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +70 -20
- package/src/kernel/packs/renderPack.ts +28 -7
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +132 -34
- package/src/kernel/packs/runBodies.ts +16 -16
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +114 -11
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +104 -10
- package/src/kernel/packs/sparql/runSelect.ts +75 -37
- package/src/kernel/packs/toolDescription.test.ts +52 -5
- package/src/kernel/packs/types.ts +52 -4
- package/src/kernel/packs/uniqueness.ts +5 -5
- package/src/kernel/project/cli/buildProgram.test.ts +157 -17
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +227 -3
- package/src/kernel/project/cli/dispatch.ts +250 -48
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +130 -30
- package/src/kernel/project/cli/helpFormat.ts +14 -1
- package/src/kernel/project/cli/rootHelp.ts +140 -111
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +18 -10
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +12 -7
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +42 -1
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +120 -5
- package/src/kernel/project/mcp/prompts/provider.ts +22 -8
- package/src/kernel/project/mcp/prompts/source.ts +69 -68
- package/src/kernel/project/mcp/registerVerb.ts +56 -11
- package/src/kernel/project/mcp/serve.ts +13 -5
- package/src/kernel/project/mcp/toolDescriptions.test.ts +6 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/disclosure.ts +4 -2
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/prefixes.test.ts +36 -0
- package/src/kernel/render/prefixes.ts +40 -13
- package/src/kernel/render/renderers.test.ts +244 -7
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/build.ts +29 -3
- package/src/kernel/runtime/graphpack/buildIndex.test.ts +46 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +53 -18
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -5
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.stories.generated.ts +3 -0
- package/src/kernel/runtime/graphpack/embedded.ts +39 -13
- package/src/kernel/runtime/graphpack/graphpack.test.ts +205 -5
- package/src/kernel/runtime/graphpack/hash.ts +3 -2
- package/src/kernel/runtime/graphpack/index.ts +1 -1
- package/src/kernel/runtime/graphpack/manifest.ts +114 -12
- package/src/kernel/runtime/graphpack/read.ts +5 -11
- package/src/kernel/runtime/graphpack/schemas.ts +74 -0
- package/src/kernel/runtime/graphpack/stories.ts +84 -0
- package/src/kernel/runtime/graphpack/types.ts +61 -48
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/paths.ts +64 -15
- package/src/kernel/runtime/probe.test.ts +8 -4
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +477 -32
- package/src/kernel/runtime/refs/gitOps.ts +1 -19
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +8 -8
- package/src/kernel/runtime/refs/resolve.ts +82 -66
- package/src/kernel/runtime/resolveSources.test.ts +63 -24
- package/src/kernel/runtime/resolveSources.ts +36 -25
- package/src/kernel/runtime/storeReadiness.ts +10 -10
- package/src/kernel/runtime/storeless.test.ts +1 -1
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +56 -55
- package/src/kernel/spec/emitReference.test.ts +3 -3
- package/src/kernel/spec/emitReference.ts +242 -34
- package/src/kernel/spec/emitSurface.ts +57 -11
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/surfaceConformance.ts +8 -0
- package/src/kernel/spec/types.ts +277 -13
- package/src/kernel/spec/validate.ts +2 -1
- package/src/kernel/vocabulary.test.ts +164 -0
- package/src/kernel/vocabulary.ts +146 -0
- package/src/testing/PARITY_GAPS.ts +8 -2
- package/src/testing/behavioral/README.md +3 -3
- package/src/testing/behavioral/completion.test.ts +19 -6
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +6 -5
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +1 -1
- package/src/testing/behavioral/exitCodes.e2e.test.ts +6 -5
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/harness.foundation.test.ts +14 -5
- package/src/testing/behavioral/journeys.cli.test.ts +117 -76
- package/src/testing/behavioral/journeys.defaultPack.test.ts +88 -182
- package/src/testing/behavioral/journeys.firstInstall.test.ts +167 -0
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +9 -6
- package/src/testing/behavioral/journeys.packageStories.test.ts +188 -0
- package/src/testing/behavioral/liveReadSurface.ts +4 -3
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +10 -5
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/behavioral/staleCommands.test.ts +10 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +7 -7
- package/src/testing/eval/cases/assembly.ts +13 -6
- package/src/testing/eval/cases/effectful.ts +28 -15
- package/src/testing/eval/cases/readNouns.ts +22 -20
- package/src/testing/eval/cases/stable.ts +5 -1
- package/src/testing/eval/eval.test.ts +7 -1
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/fixtureCapability.ts +45 -1
- package/src/testing/fixtures/graph/canonical.ts +94 -5
- package/src/testing/fixtures/graph/defaultPack.ts +7 -6
- package/src/testing/fixtures/graph/owlExport.ts +7 -5
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/fixtureGraph.ts +33 -16
- package/src/testing/helpers/packRuntime.ts +2 -3
- package/src/testing/helpers/projectCli.ts +2 -1
- package/src/testing/helpers/projectMcp.ts +38 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +24 -9
- package/src/testing/perf/budgets.ts +76 -12
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +611 -14
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/src/types.ts +2 -2
- package/dist/pragma +0 -0
- package/src/capabilities/block/blockList.test.ts +0 -79
- package/src/capabilities/block/blockList.verb.ts +0 -163
- package/src/capabilities/block/index.ts +0 -25
- package/src/capabilities/block/pack.ts +0 -166
- package/src/capabilities/block/parity.test.ts +0 -187
- package/src/capabilities/block/tierChain.ts +0 -78
- package/src/capabilities/colophon/pragmaColophon.ts +0 -66
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -152
- package/src/capabilities/create/templates.embedded.generated.ts +0 -53
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -41
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -67
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -60
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/capabilities/modifier/index.ts +0 -15
- package/src/capabilities/modifier/pack.ts +0 -64
- package/src/capabilities/standard/index.ts +0 -18
- package/src/capabilities/standard/pack.ts +0 -128
- package/src/capabilities/tier/index.ts +0 -19
- package/src/capabilities/tier/lookup.render.test.ts +0 -72
- package/src/capabilities/tier/lookup.render.ts +0 -59
- package/src/capabilities/tier/lookup.test.ts +0 -83
- package/src/capabilities/tier/lookup.verb.ts +0 -44
- package/src/capabilities/tier/pack.ts +0 -28
- package/src/capabilities/tier/runLookup.ts +0 -87
- package/src/capabilities/token/addConfig.render.ts +0 -27
- package/src/capabilities/token/addConfig.test.ts +0 -62
- package/src/capabilities/token/addConfig.verb.ts +0 -40
- package/src/capabilities/token/index.ts +0 -19
- package/src/capabilities/token/pack.ts +0 -58
- package/src/capabilities/token/runAddConfig.ts +0 -95
- package/src/kernel/completion/bashDrive.test.ts +0 -73
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +0 -39
- package/src/kernel/runtime/lock.ts +0 -90
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `pragma doctor` — the
|
|
2
|
+
* `pragma doctor` — the environment checks plus the banded target rows.
|
|
3
3
|
*
|
|
4
4
|
* Runs against isolated HOME/cwd/XDG so the harness/config/completion checks are
|
|
5
5
|
* deterministic (no harnesses, no config, no rc files). Covers the shape, a
|
|
6
|
-
* representative pass/fail/skip spread, the store check (down via an
|
|
7
|
-
* throwing store; up via the canonical fixture), exit 0 despite
|
|
8
|
-
* the MCP read-only envelope.
|
|
6
|
+
* representative pass/fail/available/skip spread, the store check (down via an
|
|
7
|
+
* injected throwing store; up via the canonical fixture), exit 0 despite
|
|
8
|
+
* failures, and the MCP read-only envelope.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
chmodSync,
|
|
13
|
+
mkdirSync,
|
|
14
|
+
mkdtempSync,
|
|
15
|
+
rmSync,
|
|
16
|
+
writeFileSync,
|
|
17
|
+
} from "node:fs";
|
|
12
18
|
import { tmpdir } from "node:os";
|
|
13
19
|
import { join } from "node:path";
|
|
14
20
|
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
@@ -28,7 +34,7 @@ import {
|
|
|
28
34
|
} from "../../testing/fixtures/graph/canonical.js";
|
|
29
35
|
import { bootFixtureRuntime } from "../../testing/helpers/fixtureGraph.js";
|
|
30
36
|
import { projectMcp } from "../../testing/helpers/projectMcp.js";
|
|
31
|
-
import {
|
|
37
|
+
import { bandedChecks } from "./checks/targetHealth.js";
|
|
32
38
|
import { doctorModule } from "./index.js";
|
|
33
39
|
import { runChecks } from "./runChecks.js";
|
|
34
40
|
import type { DoctorData } from "./types.js";
|
|
@@ -79,10 +85,9 @@ const defaultLayers: ConfigLayers = {
|
|
|
79
85
|
tier: "default",
|
|
80
86
|
channel: "default",
|
|
81
87
|
detail: "default",
|
|
82
|
-
|
|
88
|
+
packs: "default",
|
|
83
89
|
stories: "default",
|
|
84
90
|
prefixes: "default",
|
|
85
|
-
prompts: "default",
|
|
86
91
|
},
|
|
87
92
|
global: { path: "", exists: false },
|
|
88
93
|
project: { exists: false },
|
|
@@ -113,37 +118,92 @@ const byName = (data: DoctorData, name: string) =>
|
|
|
113
118
|
data.checks.find((c) => c.name === name);
|
|
114
119
|
|
|
115
120
|
describe("doctor — shape & spread", () => {
|
|
116
|
-
it("returns
|
|
121
|
+
it("returns the environment checks plus one row per banded target", async () => {
|
|
117
122
|
const data = await runChecks(bootRuntime(FLAGS, tmp("pragma-proj-")));
|
|
118
|
-
|
|
119
|
-
|
|
123
|
+
// Four unbanded environment checks, then the target table in both bands:
|
|
124
|
+
// all five targets are global, mcp and skills are also project.
|
|
125
|
+
expect(data.checks).toHaveLength(11);
|
|
126
|
+
expect(data.passed + data.failed + data.available + data.skipped).toBe(11);
|
|
120
127
|
for (const check of data.checks) {
|
|
121
|
-
expect(["pass", "fail", "skip"]).toContain(check.status);
|
|
128
|
+
expect(["pass", "fail", "available", "skip"]).toContain(check.status);
|
|
122
129
|
}
|
|
123
130
|
// Deterministic under the isolated env.
|
|
124
131
|
expect(byName(data, "Node version")?.status).toBe("pass");
|
|
125
|
-
//
|
|
126
|
-
//
|
|
127
|
-
const pkgRefs = byName(data, "
|
|
132
|
+
// Nothing built, but the packs are the distribution's own — so the embedded
|
|
133
|
+
// snapshot answers reads and the check passes, naming what it is reading.
|
|
134
|
+
const pkgRefs = byName(data, "pack refs");
|
|
135
|
+
expect(pkgRefs?.status).toBe("pass");
|
|
136
|
+
expect(pkgRefs?.detail).toContain("embedded snapshot @ ");
|
|
137
|
+
expect(pkgRefs?.remedy).toBeUndefined();
|
|
138
|
+
|
|
139
|
+
// The banded rows carry the TARGET IDS verbatim — `mcp`, not "MCP
|
|
140
|
+
// configured" — because the row name IS the fix command's argument. The
|
|
141
|
+
// environment checks stay unbanded.
|
|
142
|
+
const banded = data.checks.filter((c) => c.band !== undefined);
|
|
143
|
+
expect(banded.map((c) => `${c.band}:${c.name}`)).toEqual([
|
|
144
|
+
"global:config",
|
|
145
|
+
"global:completions",
|
|
146
|
+
"global:lsp",
|
|
147
|
+
"global:mcp",
|
|
148
|
+
"global:skills",
|
|
149
|
+
"project:mcp",
|
|
150
|
+
"project:skills",
|
|
151
|
+
]);
|
|
152
|
+
// Every row that wants action names the exact command that repairs it,
|
|
153
|
+
// band included — the bijection, derived rather than authored.
|
|
154
|
+
for (const check of banded) {
|
|
155
|
+
if (check.status === "fail" || check.status === "available") {
|
|
156
|
+
expect(check.remedy).toBeDefined();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// No harnesses in an empty HOME/cwd, so both mcp rows skip; the project
|
|
160
|
+
// band is opt-in, so its absence is never a fault.
|
|
161
|
+
expect(
|
|
162
|
+
banded.find((c) => c.band === "project" && c.name === "mcp")?.status,
|
|
163
|
+
).toBe("skip");
|
|
164
|
+
// No global config in the isolated XDG — an opt-in that is not set up yet.
|
|
165
|
+
expect(byName(data, "config")?.status).toBe("available");
|
|
166
|
+
expect(byName(data, "config")?.remedy).toBe("pragma setup config");
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
describe("doctor — the pack-refs check", () => {
|
|
171
|
+
it("a project with its OWN packs and nothing built is an attributable fail", async () => {
|
|
172
|
+
// The install that must never read healthy: `origins.packs` is "project",
|
|
173
|
+
// so the embedded snapshot is a DIFFERENT graph and every read throws
|
|
174
|
+
// STORE_UNAVAILABLE. Doctor has to say so and name the fix, rather than
|
|
175
|
+
// pass by listing packs it is not actually reading from.
|
|
176
|
+
const cwd = tmp("pragma-unbuilt-");
|
|
177
|
+
writeFileSync(
|
|
178
|
+
join(cwd, "pragma.config.ts"),
|
|
179
|
+
'export default { packs: [{ name: "unbuilt", source: "file:///pragma-never-built" }] };\n',
|
|
180
|
+
);
|
|
181
|
+
const data = await runChecks(bootRuntime(FLAGS, cwd));
|
|
182
|
+
const pkgRefs = byName(data, "pack refs");
|
|
128
183
|
expect(pkgRefs?.status).toBe("fail");
|
|
184
|
+
expect(pkgRefs?.detail).toContain("the store has not been built");
|
|
129
185
|
expect(pkgRefs?.remedy).toBe("pragma sources update");
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
expect(
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it("a project pointed at its own built pack passes, naming that pack", async () => {
|
|
189
|
+
const fixture = await bootFixtureRuntime({ ttl: CANONICAL_TTL });
|
|
190
|
+
const data = await runChecks(fixture.runtime);
|
|
191
|
+
const pkgRefs = byName(data, "pack refs");
|
|
192
|
+
expect(pkgRefs?.status).toBe("pass");
|
|
193
|
+
// The fixture pack's own provenance label, not the embedded snapshot's.
|
|
194
|
+
expect(pkgRefs?.detail).toContain("fixture");
|
|
195
|
+
expect(pkgRefs?.detail).not.toContain("embedded snapshot");
|
|
196
|
+
await fixture.dispose();
|
|
137
197
|
});
|
|
138
198
|
});
|
|
139
199
|
|
|
140
200
|
describe("doctor — the store check", () => {
|
|
141
201
|
it("a store that fails to boot is an attributable fail, not a crash", async () => {
|
|
142
202
|
const data = await runChecks(throwingStoreRuntime(tmp("pragma-proj-")));
|
|
143
|
-
expect(data.checks).toHaveLength(
|
|
144
|
-
const
|
|
145
|
-
expect(
|
|
146
|
-
expect(
|
|
203
|
+
expect(data.checks).toHaveLength(11);
|
|
204
|
+
const store = byName(data, "store");
|
|
205
|
+
expect(store?.status).toBe("fail");
|
|
206
|
+
expect(store?.remedy).toBeTruthy();
|
|
147
207
|
});
|
|
148
208
|
|
|
149
209
|
it("a booted store passes with an entity total", async () => {
|
|
@@ -152,9 +212,9 @@ describe("doctor — the store check", () => {
|
|
|
152
212
|
config: ALL_VISIBLE_CONFIG,
|
|
153
213
|
});
|
|
154
214
|
const data = await runChecks(fixture.runtime);
|
|
155
|
-
const
|
|
156
|
-
expect(
|
|
157
|
-
expect(
|
|
215
|
+
const store = byName(data, "store");
|
|
216
|
+
expect(store?.status).toBe("pass");
|
|
217
|
+
expect(store?.detail).toMatch(/entities/);
|
|
158
218
|
await fixture.dispose();
|
|
159
219
|
});
|
|
160
220
|
});
|
|
@@ -182,28 +242,86 @@ describe("doctor — dispatch & MCP", () => {
|
|
|
182
242
|
const envelope = await mcp.callTool("doctor");
|
|
183
243
|
await mcp.cleanup();
|
|
184
244
|
expect(envelope.ok).toBe(true);
|
|
185
|
-
expect((envelope.data as DoctorData).checks).toHaveLength(
|
|
245
|
+
expect((envelope.data as DoctorData).checks).toHaveLength(11);
|
|
186
246
|
});
|
|
187
247
|
});
|
|
188
248
|
|
|
189
|
-
describe("doctor —
|
|
190
|
-
it("
|
|
191
|
-
//
|
|
192
|
-
//
|
|
193
|
-
//
|
|
249
|
+
describe("doctor — the banded rows can see the GLOBAL band", () => {
|
|
250
|
+
it("reports a configured global-band entry as configured, not missing", async () => {
|
|
251
|
+
// The regression this closes: detection recorded only each harness's
|
|
252
|
+
// DEFAULT band, so a server registered by `setup mcp --global` was invisible
|
|
253
|
+
// and doctor reported it not-configured forever. The rows now come from the
|
|
254
|
+
// same target table `setup` writes through, enumerated in BOTH bands, so the
|
|
255
|
+
// two surfaces cannot disagree about what they looked at.
|
|
194
256
|
const cwd = tmp("pragma-doctor-proj-");
|
|
195
257
|
mkdirSync(join(cwd, ".windsurf"), { recursive: true }); // ⇒ Windsurf detected
|
|
196
258
|
const home = process.env.HOME ?? "";
|
|
197
259
|
const wsDir = join(home, ".codeium", "windsurf");
|
|
198
260
|
mkdirSync(wsDir, { recursive: true });
|
|
261
|
+
// Exactly what a global-band `setup mcp` writes: no `cwd`, so the entry is
|
|
262
|
+
// not pinned to whatever directory the registration ran from.
|
|
199
263
|
writeFileSync(
|
|
200
264
|
join(wsDir, "mcp_config.json"),
|
|
201
|
-
JSON.stringify({
|
|
265
|
+
JSON.stringify({
|
|
266
|
+
mcpServers: { pragma: { command: "pragma", args: ["mcp", "serve"] } },
|
|
267
|
+
}),
|
|
268
|
+
);
|
|
269
|
+
// The row also verifies the command BOOTS, so put a `pragma` on the
|
|
270
|
+
// isolated PATH — otherwise the row correctly fails for a second reason.
|
|
271
|
+
const binDir = process.env.PATH as string;
|
|
272
|
+
writeFileSync(join(binDir, "pragma"), "#!/bin/sh\nexit 0\n");
|
|
273
|
+
chmodSync(join(binDir, "pragma"), 0o755);
|
|
274
|
+
|
|
275
|
+
const rows = await bandedChecks(bootRuntime(FLAGS, cwd), "pragma");
|
|
276
|
+
const global = rows.find((r) => r.name === "mcp" && r.band === "global");
|
|
277
|
+
expect(global?.status).toBe("pass");
|
|
278
|
+
expect(
|
|
279
|
+
global?.items?.some((i) => i.label.includes("mcp_config.json")),
|
|
280
|
+
).toBe(true);
|
|
281
|
+
// ...and the project band stays an opt-in skip, never a fault.
|
|
282
|
+
const project = rows.find((r) => r.name === "mcp" && r.band === "project");
|
|
283
|
+
expect(project?.status).toBe("skip");
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
describe("doctor — a blocked skill link path is never reported as current", () => {
|
|
288
|
+
it("distinguishes a hand-placed real directory from a link that is correct", async () => {
|
|
289
|
+
// Detection marks both `skipped` — there is nothing to do to either — so
|
|
290
|
+
// the row counted the blocked path as healthy and said "links current"
|
|
291
|
+
// where no link exists at all.
|
|
292
|
+
const cwd = tmp("pragma-doctor-proj-");
|
|
293
|
+
const skillDir = join(cwd, ".pragma", "skills", "my-skill");
|
|
294
|
+
mkdirSync(skillDir, { recursive: true });
|
|
295
|
+
writeFileSync(
|
|
296
|
+
join(skillDir, "SKILL.md"),
|
|
297
|
+
"---\nname: my-skill\ndescription: A test skill.\n---\n",
|
|
202
298
|
);
|
|
299
|
+
// A hand-placed directory sitting exactly where the link would go.
|
|
300
|
+
mkdirSync(join(cwd, ".agents", "skills", "my-skill"), { recursive: true });
|
|
301
|
+
|
|
302
|
+
const rows = await bandedChecks(bootRuntime(FLAGS, cwd), "pragma");
|
|
303
|
+
const row = rows.find((r) => r.name === "skills" && r.band === "project");
|
|
304
|
+
expect(row?.status).not.toBe("pass");
|
|
305
|
+
expect(row?.detail).toContain("real directory");
|
|
306
|
+
// And the remedy is the one that settles it — rerunning setup skips it.
|
|
307
|
+
expect(row?.remedy).toMatch(/Move or delete/);
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
describe("doctor — an unconfigured opt-in integration is available, not a fault", () => {
|
|
312
|
+
it("a detected harness with no MCP entry reports available with the setup command", async () => {
|
|
313
|
+
// Windsurf is detected (project signal) but nothing is configured. A fresh
|
|
314
|
+
// install lands exactly here, and a fresh install is healthy — so this is
|
|
315
|
+
// the `available` tier, keeping its actionable setup command, and it must
|
|
316
|
+
// never inflate the failure count.
|
|
317
|
+
const cwd = tmp("pragma-doctor-proj-");
|
|
318
|
+
mkdirSync(join(cwd, ".windsurf"), { recursive: true }); // ⇒ Windsurf detected
|
|
203
319
|
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
expect(check
|
|
207
|
-
expect(check
|
|
320
|
+
const rows = await bandedChecks(bootRuntime(FLAGS, cwd), "pragma");
|
|
321
|
+
const check = rows.find((r) => r.name === "mcp" && r.band === "global");
|
|
322
|
+
expect(check?.status).toBe("available");
|
|
323
|
+
expect(check?.detail).toContain("not configured");
|
|
324
|
+
// The fix is the target's own invocation, derived from the row's id + band.
|
|
325
|
+
expect(check?.remedy).toBe("pragma setup mcp");
|
|
208
326
|
});
|
|
209
327
|
});
|
|
@@ -12,20 +12,24 @@
|
|
|
12
12
|
* `doctor-exit-zero-with-failures`.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
+
import { BIN_NAME } from "../../constants.js";
|
|
15
16
|
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
16
|
-
import type { CapabilityModule, VerbSpec } from "../../kernel/spec/
|
|
17
|
+
import type { CapabilityModule, VerbSpec } from "../../kernel/spec/index.js";
|
|
17
18
|
import { doctorFormatters } from "./doctor.render.js";
|
|
18
19
|
import type { DoctorData } from "./types.js";
|
|
19
20
|
|
|
20
21
|
const doctorVerb: VerbSpec<Record<string, unknown>, DoctorData> = {
|
|
21
22
|
path: ["doctor"],
|
|
22
|
-
summary: "Check environment health
|
|
23
|
-
doc: "
|
|
23
|
+
summary: "Check environment health and every setup target, in both bands.",
|
|
24
|
+
doc: "Reports the environment checks and then one row per setup target in each band, as pass, fail, available (an opt-in integration not yet set up), or skip, with inline remedies. Every banded row is named after the setup target that repairs it. Storeless by default; the store check boots lazily and never fails the run.",
|
|
24
25
|
params: [],
|
|
25
26
|
output: { formatters: doctorFormatters },
|
|
26
27
|
examples: [
|
|
27
|
-
{ cmd:
|
|
28
|
-
{
|
|
28
|
+
{ cmd: `${BIN_NAME} doctor` },
|
|
29
|
+
{
|
|
30
|
+
cmd: `${BIN_NAME} doctor --format json`,
|
|
31
|
+
note: "machine-readable checks",
|
|
32
|
+
},
|
|
29
33
|
],
|
|
30
34
|
capability: {
|
|
31
35
|
needsStore: false,
|
|
@@ -1,100 +1,99 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `doctor` run body:
|
|
2
|
+
* The `doctor` run body: the unbanded environment checks plus the banded rows
|
|
3
|
+
* the setup target table derives.
|
|
4
|
+
*
|
|
5
|
+
* Two kinds of finding live in one report and they are not the same kind. The
|
|
6
|
+
* ENVIRONMENT checks — the Node version, this CLI's own version, pack refs, the
|
|
7
|
+
* store — diagnose things `setup` cannot install; they carry no band and stay
|
|
8
|
+
* their own section. The BANDED rows are exactly the setup targets, in both
|
|
9
|
+
* bands, named with the target ids verbatim and repaired by the target's own
|
|
10
|
+
* command. Adding a target adds its rows here for free.
|
|
3
11
|
*
|
|
4
12
|
* Checks are started eagerly (they run concurrently) and collected in
|
|
5
13
|
* declaration order for a deterministic report. Each is guarded so a thrown
|
|
6
|
-
* check becomes an attributable `fail` rather than aborting the whole run
|
|
7
|
-
*
|
|
8
|
-
*
|
|
14
|
+
* check becomes an attributable `fail` rather than aborting the whole run.
|
|
15
|
+
* Lazily imported by `doctor.verb.ts`, so neither the checks nor
|
|
16
|
+
* `@canonical/harnesses` land on the fast path.
|
|
9
17
|
*/
|
|
10
18
|
|
|
11
|
-
import
|
|
12
|
-
import {
|
|
19
|
+
import { BIN_NAME } from "../../constants.js";
|
|
20
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
13
21
|
import { checkKeStore } from "./checks/checkKeStore.js";
|
|
14
|
-
import { checkMcpCommands } from "./checks/checkMcpCommands.js";
|
|
15
|
-
import { checkMcpConfigured } from "./checks/checkMcpConfigured.js";
|
|
16
22
|
import { checkNodeVersion } from "./checks/checkNodeVersion.js";
|
|
17
23
|
import { checkPackageRefs } from "./checks/checkPackageRefs.js";
|
|
18
24
|
import { checkPragmaVersion } from "./checks/checkPragmaVersion.js";
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import type { CheckResult, DoctorData, ScopeBand } from "./types.js";
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* The band a check statically concerns, by name — for checks whose band is
|
|
25
|
-
* fixed by construction: skills always symlink into the per-repo project dir
|
|
26
|
-
* (`skillsPath` is project-rooted), and completions install into the user/home
|
|
27
|
-
* shell dir. The MCP checks are NOT here: they detect harnesses across BOTH
|
|
28
|
-
* bands, so each derives its own band from what it found (see `deriveBand`) and
|
|
29
|
-
* sets it on its own result — {@link attachBand} preserves that.
|
|
30
|
-
*/
|
|
31
|
-
const CHECK_BANDS: Record<string, ScopeBand> = {
|
|
32
|
-
"Skills symlinked": "project",
|
|
33
|
-
"Shell completions": "global",
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Attach a band tag to a check result. A check that already set its own band
|
|
38
|
-
* (the harness-derived MCP checks) keeps it; otherwise the static
|
|
39
|
-
* {@link CHECK_BANDS} map fills one in by name, if defined.
|
|
40
|
-
*/
|
|
41
|
-
function attachBand(result: CheckResult): CheckResult {
|
|
42
|
-
if (result.band !== undefined) return result;
|
|
43
|
-
const band = CHECK_BANDS[result.name];
|
|
44
|
-
return band ? { ...result, band } : result;
|
|
45
|
-
}
|
|
25
|
+
import { bandedChecks } from "./checks/targetHealth.js";
|
|
26
|
+
import type { CheckResult, DoctorData } from "./types.js";
|
|
46
27
|
|
|
47
28
|
/**
|
|
48
|
-
*
|
|
49
|
-
* matches the `name` each check returns on success,
|
|
50
|
-
* the same label and stays correlatable.
|
|
51
|
-
* order.
|
|
29
|
+
* The unbanded environment checks, each paired with the display name used if it
|
|
30
|
+
* rejects. The fallback name matches the `name` each check returns on success,
|
|
31
|
+
* so a thrown check reports the same label and stays correlatable.
|
|
52
32
|
*/
|
|
53
|
-
function
|
|
33
|
+
function buildEnvironmentChecks(
|
|
54
34
|
rt: PragmaRuntime,
|
|
55
35
|
): readonly [string, Promise<CheckResult>][] {
|
|
56
36
|
return [
|
|
57
37
|
["Node version", checkNodeVersion()],
|
|
58
|
-
[
|
|
59
|
-
["
|
|
60
|
-
["
|
|
61
|
-
["ke store", checkKeStore(rt)],
|
|
62
|
-
["Shell completions", checkShellCompletions(rt.cwd)],
|
|
63
|
-
["MCP configured", checkMcpConfigured(rt.cwd)],
|
|
64
|
-
["MCP commands", checkMcpCommands(rt.cwd)],
|
|
65
|
-
["Skills symlinked", checkSkillsSymlinked(rt.cwd)],
|
|
38
|
+
[`${BIN_NAME} version`, checkPragmaVersion(rt)],
|
|
39
|
+
["pack refs", checkPackageRefs(rt)],
|
|
40
|
+
["store", checkKeStore(rt)],
|
|
66
41
|
];
|
|
67
42
|
}
|
|
68
43
|
|
|
44
|
+
/** Turn a rejected check into an attributable failure rather than a crash. */
|
|
45
|
+
async function guarded(
|
|
46
|
+
name: string,
|
|
47
|
+
promise: Promise<CheckResult>,
|
|
48
|
+
): Promise<CheckResult> {
|
|
49
|
+
try {
|
|
50
|
+
return await promise;
|
|
51
|
+
} catch (error) {
|
|
52
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
53
|
+
return {
|
|
54
|
+
name,
|
|
55
|
+
status: "fail",
|
|
56
|
+
detail: `Check threw an unexpected error: ${reason}`,
|
|
57
|
+
remedy: `Re-run \`${BIN_NAME} doctor\`; if it persists, report this as a bug.`,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
69
62
|
/**
|
|
70
|
-
* Run every
|
|
63
|
+
* Run every health check and aggregate the results.
|
|
71
64
|
*
|
|
72
65
|
* @param rt - The per-invocation runtime.
|
|
73
|
-
* @returns The `{ checks, passed, failed, skipped }` summary.
|
|
66
|
+
* @returns The `{ checks, passed, failed, available, skipped }` summary.
|
|
74
67
|
* @note Impure — the checks read the fs, boot the store, and detect harnesses.
|
|
75
68
|
*/
|
|
76
69
|
export async function runChecks(rt: PragmaRuntime): Promise<DoctorData> {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
70
|
+
// The banded rows come back as a batch (one detection pass over the table),
|
|
71
|
+
// so they are guarded as a batch: a detection that throws becomes one
|
|
72
|
+
// attributable failure instead of taking the environment section with it.
|
|
73
|
+
const [environmentResults, bandedResults] = await Promise.all([
|
|
74
|
+
Promise.all(
|
|
75
|
+
buildEnvironmentChecks(rt).map(([name, promise]) =>
|
|
76
|
+
guarded(name, promise),
|
|
77
|
+
),
|
|
78
|
+
),
|
|
79
|
+
bandedChecks(rt, BIN_NAME).catch((error: unknown): CheckResult[] => [
|
|
80
|
+
{
|
|
81
|
+
name: "setup targets",
|
|
82
|
+
status: "fail",
|
|
83
|
+
detail: `Detection threw an unexpected error: ${
|
|
84
|
+
error instanceof Error ? error.message : String(error)
|
|
85
|
+
}`,
|
|
86
|
+
remedy: `Re-run \`${BIN_NAME} doctor\`; if it persists, report this as a bug.`,
|
|
87
|
+
},
|
|
88
|
+
]),
|
|
89
|
+
]);
|
|
93
90
|
|
|
91
|
+
const checks: CheckResult[] = [...environmentResults, ...bandedResults];
|
|
94
92
|
return {
|
|
95
93
|
checks,
|
|
96
94
|
passed: checks.filter((c) => c.status === "pass").length,
|
|
97
95
|
failed: checks.filter((c) => c.status === "fail").length,
|
|
96
|
+
available: checks.filter((c) => c.status === "available").length,
|
|
98
97
|
skipped: checks.filter((c) => c.status === "skip").length,
|
|
99
98
|
};
|
|
100
99
|
}
|
|
@@ -9,12 +9,23 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export type ScopeBand = "project" | "global";
|
|
11
11
|
|
|
12
|
-
/**
|
|
13
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Status of a doctor check or one of its sub-items.
|
|
14
|
+
*
|
|
15
|
+
* `available` is the tier between fail and skip that keeps the report honest:
|
|
16
|
+
* an opt-in integration (MCP registration, skills symlinks, a completion
|
|
17
|
+
* script) that is detected and installable but that the user has not set up.
|
|
18
|
+
* Nothing is broken — a fresh install is HEALTHY with several availables — so
|
|
19
|
+
* reporting these as `fail` would teach users that the failure count is noise.
|
|
20
|
+
* `fail` stays reserved for a real fault: something set up that no longer
|
|
21
|
+
* works, or an environment the CLI cannot run correctly in. `skip` remains
|
|
22
|
+
* "nothing to check here" (no shell detected, no harnesses present).
|
|
23
|
+
*/
|
|
24
|
+
export type CheckStatus = "pass" | "fail" | "available" | "skip";
|
|
14
25
|
|
|
15
26
|
/**
|
|
16
27
|
* A structured sub-item under a check — e.g. one resolved package under
|
|
17
|
-
* `
|
|
28
|
+
* `pack refs`, or one unresolvable server under `MCP commands`. Lets the
|
|
18
29
|
* formatter render an indented, aligned breakdown instead of cramming
|
|
19
30
|
* everything into a single `detail` string.
|
|
20
31
|
*/
|
|
@@ -35,7 +46,10 @@ export interface CheckResult {
|
|
|
35
46
|
readonly detail: string;
|
|
36
47
|
/** Optional structured breakdown, rendered as indented sub-items. */
|
|
37
48
|
readonly items?: readonly CheckItem[];
|
|
38
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Remedial instruction shown inline under the check: for `fail` the fix,
|
|
51
|
+
* for `available` the setup command that enables the integration.
|
|
52
|
+
*/
|
|
39
53
|
readonly remedy?: string;
|
|
40
54
|
/**
|
|
41
55
|
* Which config band the check concerns, if any: `global` for the user/home
|
|
@@ -47,10 +61,12 @@ export interface CheckResult {
|
|
|
47
61
|
readonly band?: ScopeBand;
|
|
48
62
|
}
|
|
49
63
|
|
|
50
|
-
/** Aggregated results from all doctor checks. */
|
|
64
|
+
/** Aggregated results from all doctor checks — one count per status tier. */
|
|
51
65
|
export interface DoctorData {
|
|
52
66
|
readonly checks: readonly CheckResult[];
|
|
53
67
|
readonly passed: number;
|
|
54
68
|
readonly failed: number;
|
|
69
|
+
/** Opt-in integrations detected but not set up — counted apart from failures. */
|
|
70
|
+
readonly available: number;
|
|
55
71
|
readonly skipped: number;
|
|
56
72
|
}
|
|
@@ -3,24 +3,34 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Listing zero rows is a calm SUCCESS, not an error. The run body returns `[]`
|
|
5
5
|
* (no throw), dispatch renders a non-blank message and exits 0, and JSON stays
|
|
6
|
-
* `[]`. A
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* `[]`. A story's declared `emptyRecovery` becomes that message's HINT — but as
|
|
7
|
+
* guidance on the success path, never a thrown EMPTY_RESULTS (which maps to
|
|
8
|
+
* exit 1 and would break the uniform `ok:true` list contract).
|
|
9
|
+
*
|
|
10
|
+
* The story declares the command WITHOUT a binary name (`sources update`); the
|
|
11
|
+
* renderer prepends the CONSUMING distribution's. The hints asserted below are
|
|
12
|
+
* therefore the JOINED string, which is what a user reads — a story that named
|
|
13
|
+
* a binary itself would render it twice, and the grammar now refuses one.
|
|
10
14
|
*/
|
|
11
15
|
|
|
12
16
|
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
13
17
|
import { compilePack } from "../kernel/packs/compile.js";
|
|
14
18
|
import type { PackDefinition } from "../kernel/packs/types.js";
|
|
19
|
+
import { distributionSource } from "../kernel/packs/types.js";
|
|
15
20
|
import { verbKey } from "../kernel/packs/uniqueness.js";
|
|
16
21
|
import { executeVerb } from "../kernel/project/cli/dispatch.js";
|
|
17
22
|
import { DEFAULT_PREFIX_MAP } from "../kernel/render/prefixes.js";
|
|
18
23
|
import type { PragmaRuntime } from "../kernel/runtime/types.js";
|
|
19
24
|
import type { VerbSpec } from "../kernel/spec/types.js";
|
|
20
25
|
import { buildFixtureRuntime } from "../testing/helpers/packRuntime.js";
|
|
21
|
-
import {
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
import { declaredStories } from "./distribution.js";
|
|
27
|
+
|
|
28
|
+
/** A story `pragma.conf.ts` declares — absent means it was renamed or dropped. */
|
|
29
|
+
function storyFor(noun: string): PackDefinition {
|
|
30
|
+
const story = declaredStories.get(noun);
|
|
31
|
+
if (!story) throw new Error(`pragma.conf.ts declares no story for "${noun}"`);
|
|
32
|
+
return story;
|
|
33
|
+
}
|
|
24
34
|
|
|
25
35
|
const PREFIXES = {
|
|
26
36
|
ds: "https://ds.canonical.com/",
|
|
@@ -61,19 +71,21 @@ afterAll(async () => {
|
|
|
61
71
|
});
|
|
62
72
|
|
|
63
73
|
const listVerb = (pack: PackDefinition): VerbSpec =>
|
|
64
|
-
compilePack(
|
|
65
|
-
|
|
66
|
-
|
|
74
|
+
compilePack(
|
|
75
|
+
pack,
|
|
76
|
+
distributionSource("pragma.conf.ts"),
|
|
77
|
+
DEFAULT_PREFIX_MAP,
|
|
78
|
+
).find((v) => verbKey(v.path) === `${pack.noun} list`) as VerbSpec;
|
|
67
79
|
|
|
68
80
|
/**
|
|
69
|
-
* Every
|
|
81
|
+
* Every declared story's list verb, with the hint expected in its empty message:
|
|
70
82
|
* an authored `emptyRecovery` surfaces `pragma sources update`; the others fall
|
|
71
83
|
* back to the generic build/broaden hint.
|
|
72
84
|
*/
|
|
73
85
|
const PACK_LISTS: readonly { pack: PackDefinition; hint: RegExp }[] = [
|
|
74
|
-
{ pack:
|
|
75
|
-
{ pack:
|
|
76
|
-
{ pack:
|
|
86
|
+
{ pack: storyFor("modifier"), hint: /pragma sources update/ },
|
|
87
|
+
{ pack: storyFor("token"), hint: /pragma sources update/ },
|
|
88
|
+
{ pack: storyFor("standard"), hint: /broaden the filter/ },
|
|
77
89
|
];
|
|
78
90
|
|
|
79
91
|
const REAL = { dryRun: false, undo: false, yes: false };
|
|
@@ -89,24 +101,34 @@ describe("pack list empty-state (U5, PROTECTED)", () => {
|
|
|
89
101
|
|
|
90
102
|
it.each(
|
|
91
103
|
PACK_LISTS,
|
|
92
|
-
)("$pack.noun list
|
|
104
|
+
)("$pack.noun list declares a non-blank empty notice (+ hint), JSON stays []", ({
|
|
93
105
|
pack,
|
|
94
106
|
hint,
|
|
95
107
|
}) => {
|
|
96
108
|
const { formatters } = listVerb(pack).output;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
109
|
+
// The message + runnable hint live on the empty-state seam — the
|
|
110
|
+
// dispatcher routes them to stderr, keeping plain stdout pure data.
|
|
111
|
+
const notice = formatters.emptyNotice?.([]);
|
|
112
|
+
expect(notice).toContain(`No ${pack.noun} entries found.`);
|
|
113
|
+
expect(notice).toMatch(hint);
|
|
100
114
|
// JSON is the uniform empty array — unchanged by the message.
|
|
101
115
|
expect(formatters.json([])).toBe("[]");
|
|
102
116
|
// The llm view stays non-blank too (the `(0)` heading plus the message).
|
|
103
117
|
expect(formatters.llm([]).trim().length).toBeGreaterThan(0);
|
|
104
118
|
});
|
|
105
119
|
|
|
106
|
-
it("dispatch
|
|
107
|
-
const outcome = await executeVerb(
|
|
120
|
+
it("dispatch routes the empty message to stderr and exits 0 (end-to-end)", async () => {
|
|
121
|
+
const outcome = await executeVerb(
|
|
122
|
+
listVerb(storyFor("modifier")),
|
|
123
|
+
{},
|
|
124
|
+
REAL,
|
|
125
|
+
rt,
|
|
126
|
+
);
|
|
108
127
|
expect(outcome.exitCode).toBe(0);
|
|
109
|
-
|
|
110
|
-
|
|
128
|
+
// stdout carries no prose a pipe would read as a record; the calm notice
|
|
129
|
+
// and its hint reach the human on stderr.
|
|
130
|
+
expect(outcome.stdout ?? "").not.toContain("No modifier entries found.");
|
|
131
|
+
expect(outcome.stderr).toContain("No modifier entries found.");
|
|
132
|
+
expect(outcome.stderr).toContain("pragma sources update");
|
|
111
133
|
});
|
|
112
134
|
});
|