@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
|
@@ -13,13 +13,66 @@
|
|
|
13
13
|
* A denied `npm i -g` (EACCES), a registry/network failure, or any other
|
|
14
14
|
* nonzero exit is a fixable ENVIRONMENT condition — NOT a pragma bug — so it is
|
|
15
15
|
* classified UNSUPPORTED with an actionable recovery, never INTERNAL_ERROR's
|
|
16
|
-
* "
|
|
16
|
+
* "report this issue". (A spawn error like ENOENT REJECTS the effect
|
|
17
17
|
* instead of resolving, so it never reaches here.)
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
import {
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
import {
|
|
21
|
+
type ExecResult,
|
|
22
|
+
fail,
|
|
23
|
+
pure,
|
|
24
|
+
recover,
|
|
25
|
+
type Task,
|
|
26
|
+
} from "@canonical/task";
|
|
27
|
+
import type { Recovery } from "../../kernel/error/index.js";
|
|
28
|
+
import { PragmaError } from "../../kernel/error/index.js";
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Route a {@link PragmaError} through the Task FAILURE CHANNEL (a `Fail` node
|
|
32
|
+
* carrying the error as `cause`) instead of a synchronous throw.
|
|
33
|
+
*
|
|
34
|
+
* The distinction is load-bearing: a synchronous throw from a bind/recover
|
|
35
|
+
* continuation ESCAPES the interpreter's trampoline entirely — no enclosing
|
|
36
|
+
* `recover` can see it — whereas a `Fail` node unwinds to the nearest recovery
|
|
37
|
+
* frame. Setup's run-all isolates each step with `recover` so one failed step
|
|
38
|
+
* cannot abort the rest (S1-1); that only works if step failures travel the
|
|
39
|
+
* failure channel. The boundary (`asPragmaError`) unwraps the carried cause,
|
|
40
|
+
* so a failure that escapes un-recovered still renders with its own code,
|
|
41
|
+
* message, and recovery — never the INTERNAL_ERROR catch-all.
|
|
42
|
+
*/
|
|
43
|
+
export function failPragma(error: PragmaError): Task<never> {
|
|
44
|
+
return fail({ code: error.code, message: error.message, cause: error });
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The failure-channel sibling of {@link assertExecOk}: yield `pure(undefined)`
|
|
49
|
+
* on exit 0, otherwise fail with an UNSUPPORTED {@link PragmaError} carrying
|
|
50
|
+
* the command, exit code, trimmed stderr, and the CALLER'S recovery — the
|
|
51
|
+
* recovery must name an action that works on this machine now, not the generic
|
|
52
|
+
* "permissions or network" guess.
|
|
53
|
+
*
|
|
54
|
+
* @param command - Human-readable command, surfaced in the error message.
|
|
55
|
+
* @param result - The {@link ExecResult} the `exec` effect yielded.
|
|
56
|
+
* @param recovery - The actionable, site-specific recovery.
|
|
57
|
+
* @returns A Task that succeeds on exit 0 and fails (recoverably) otherwise.
|
|
58
|
+
*/
|
|
59
|
+
export function checkExecOk(
|
|
60
|
+
command: string,
|
|
61
|
+
result: ExecResult,
|
|
62
|
+
recovery: Recovery,
|
|
63
|
+
): Task<void> {
|
|
64
|
+
if (result.exitCode === 0) return pure(undefined);
|
|
65
|
+
const stderr = result.stderr.trim();
|
|
66
|
+
return failPragma(
|
|
67
|
+
new PragmaError({
|
|
68
|
+
code: "UNSUPPORTED",
|
|
69
|
+
message: `\`${command}\` exited with code ${result.exitCode}.${
|
|
70
|
+
stderr ? `\n${stderr}` : ""
|
|
71
|
+
}`,
|
|
72
|
+
recovery,
|
|
73
|
+
}),
|
|
74
|
+
);
|
|
75
|
+
}
|
|
23
76
|
|
|
24
77
|
/**
|
|
25
78
|
* Raise UNSUPPORTED when an `exec` result carries a nonzero exit code.
|
|
@@ -40,7 +93,7 @@ export function assertExecOk(command: string, result: ExecResult): void {
|
|
|
40
93
|
}`,
|
|
41
94
|
recovery: {
|
|
42
95
|
message:
|
|
43
|
-
"
|
|
96
|
+
"Check the command's output above; a global install may need elevated privileges.",
|
|
44
97
|
},
|
|
45
98
|
});
|
|
46
99
|
}
|
|
@@ -93,11 +146,16 @@ export function guardMissingBinary<A>(
|
|
|
93
146
|
): Task<A> {
|
|
94
147
|
return recover(task, (error) => {
|
|
95
148
|
if (isMissingBinaryError(error)) {
|
|
96
|
-
throw
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
149
|
+
// Failure CHANNEL, not a synchronous throw: an enclosing recover (the
|
|
150
|
+
// run-all's per-step isolation, S1-1) must be able to catch this, and
|
|
151
|
+
// the boundary unwraps the carried PragmaError when nothing does.
|
|
152
|
+
return failPragma(
|
|
153
|
+
new PragmaError({
|
|
154
|
+
code: "UNSUPPORTED",
|
|
155
|
+
message: `\`${bin}\` was not found on your PATH.`,
|
|
156
|
+
recovery,
|
|
157
|
+
}),
|
|
158
|
+
);
|
|
101
159
|
}
|
|
102
160
|
// Not a missing binary — re-raise unchanged (the interpreter rethrows it as
|
|
103
161
|
// a TaskExecutionError, exactly as it would with no guard installed).
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The cross-capability shared surface — the few facts more than one capability
|
|
3
|
+
* needs and none of them owns.
|
|
4
|
+
*
|
|
5
|
+
* Everything here earned its place by being needed in two capabilities at
|
|
6
|
+
* once, and the cohesion principle is that shortness of the list. `shared/` is
|
|
7
|
+
* not a utility drawer: a helper used by exactly one capability belongs in
|
|
8
|
+
* that capability, and the moment something here has a single consumer again
|
|
9
|
+
* it should move back. What survives is the environment the CLI reports on but
|
|
10
|
+
* does not own — how it was installed, what the registry says about it,
|
|
11
|
+
* whether a subprocess it ran actually succeeded — plus the one piece of
|
|
12
|
+
* vocabulary (`BAND_LABELS`) that keeps `setup` and `doctor` calling the two
|
|
13
|
+
* config bands by the same names users meet in the flags.
|
|
14
|
+
*
|
|
15
|
+
* The exec guard is exported as the pair a caller needs together: `checkExecOk`
|
|
16
|
+
* to classify a result inside a Task and `assertExecOk` to throw on one
|
|
17
|
+
* outside, with `guardMissingBinary` wrapping the absent-binary case that
|
|
18
|
+
* neither should report as a pragma bug. The predicates they are built from
|
|
19
|
+
* stay internal — a caller reaching for the predicate instead of the guard is
|
|
20
|
+
* a caller about to reimplement the classification.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export {
|
|
24
|
+
assertExecOk,
|
|
25
|
+
checkExecOk,
|
|
26
|
+
guardMissingBinary,
|
|
27
|
+
} from "./assertExecOk.js";
|
|
28
|
+
export { BAND_LABELS } from "./bands.js";
|
|
29
|
+
export type { InstallSource } from "./packageManager.js";
|
|
30
|
+
export { detectInstallSource, pmUpdateCommand } from "./packageManager.js";
|
|
31
|
+
export type { RegistryCheckResult } from "./registry.js";
|
|
32
|
+
export { checkRegistryVersion, PRAGMA_PACKAGE } from "./registry.js";
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The install-scope heuristic's two path questions.
|
|
3
|
+
*
|
|
4
|
+
* `detectInstallSource` itself reads `import.meta.url` and the real working
|
|
5
|
+
* directory, so the decision it makes is exercised here through the two pure
|
|
6
|
+
* helpers it composes — which is where every case that has ever been wrong
|
|
7
|
+
* lives.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { describe, expect, it } from "vitest";
|
|
11
|
+
import { containsPath, findInstallRoot } from "./packageManager.js";
|
|
12
|
+
|
|
13
|
+
describe("findInstallRoot", () => {
|
|
14
|
+
it("yields the directory the package was installed into", () => {
|
|
15
|
+
expect(
|
|
16
|
+
findInstallRoot(
|
|
17
|
+
"/proj/node_modules/@canonical/pragma-cli/dist/src/bin.js",
|
|
18
|
+
),
|
|
19
|
+
).toBe("/proj");
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("takes the INNERMOST node_modules when they nest", () => {
|
|
23
|
+
expect(
|
|
24
|
+
findInstallRoot("/proj/node_modules/a/node_modules/b/dist/bin.js"),
|
|
25
|
+
).toBe("/proj/node_modules/a");
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it("reports no install root for a source checkout", () => {
|
|
29
|
+
expect(findInstallRoot("/work/pragma/packages/cli/pragma/src/bin.ts")).toBe(
|
|
30
|
+
undefined,
|
|
31
|
+
);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
describe("containsPath", () => {
|
|
36
|
+
it("counts a directory as containing itself", () => {
|
|
37
|
+
expect(containsPath("/proj", "/proj")).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// The case a literal cwd-prefix test got wrong: an ordinary local install run
|
|
41
|
+
// from a subdirectory — which in a monorepo is the usual way to run it — was
|
|
42
|
+
// reported as a GLOBAL install.
|
|
43
|
+
it("counts a subdirectory as contained", () => {
|
|
44
|
+
expect(containsPath("/proj", "/proj/packages/foo")).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("does not count a sibling that merely shares a prefix", () => {
|
|
48
|
+
expect(containsPath("/proj", "/proj-two")).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("does not count an ancestor or an unrelated tree", () => {
|
|
52
|
+
expect(containsPath("/proj/packages/foo", "/proj")).toBe(false);
|
|
53
|
+
expect(containsPath("/usr/lib", "/home/u/proj")).toBe(false);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
@@ -4,12 +4,15 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Promotes the detector that lived inline in `info/collectInfo.ts`: the package
|
|
6
6
|
* manager comes from npm's `npm_config_user_agent` (set by npm/pnpm/yarn/bun
|
|
7
|
-
* when they run a script), the scope from whether the
|
|
8
|
-
*
|
|
9
|
-
* guessing. The old shell's full package.json walk (`#package-manager`) is
|
|
7
|
+
* when they run a script), the scope from whether the installed entry sits
|
|
8
|
+
* under the CURRENT PROJECT. With no agent we report the honest runtime rather
|
|
9
|
+
* than guessing. The old shell's full package.json walk (`#package-manager`) is
|
|
10
10
|
* dropped — only this heuristic and the update-command map survive.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
14
|
+
import { fileURLToPath } from "node:url";
|
|
15
|
+
|
|
13
16
|
/** The install source: package manager and a display label. */
|
|
14
17
|
export interface InstallSource {
|
|
15
18
|
/** Package-manager name (`bun`/`npm`/`pnpm`/`yarn`), else the honest runtime. */
|
|
@@ -30,11 +33,64 @@ function packageManager(): string {
|
|
|
30
33
|
* Detect how the binary was installed — package manager and scope.
|
|
31
34
|
*
|
|
32
35
|
* @returns The install source (pm, label).
|
|
33
|
-
* @note Impure — reads `
|
|
36
|
+
* @note Impure — reads `import.meta.url`, the working directory, and `process.env`.
|
|
34
37
|
*/
|
|
38
|
+
/**
|
|
39
|
+
* The directory a package was installed INTO — the parent of the `node_modules`
|
|
40
|
+
* holding it, so `/proj/node_modules/@scope/x/dist/bin.js` yields `/proj`.
|
|
41
|
+
*
|
|
42
|
+
* The LAST occurrence, because nested `node_modules` mean the innermost one is
|
|
43
|
+
* the tree the entry actually lives in.
|
|
44
|
+
*
|
|
45
|
+
* @param entry - Absolute path to the running module.
|
|
46
|
+
* @returns The install root, or `undefined` when the entry is not installed at
|
|
47
|
+
* all (a source checkout, where no `node_modules` segment appears).
|
|
48
|
+
* @remarks Exported for its unit test; not part of the package's public surface.
|
|
49
|
+
*/
|
|
50
|
+
export function findInstallRoot(entry: string): string | undefined {
|
|
51
|
+
const segments = entry.split(sep);
|
|
52
|
+
const index = segments.lastIndexOf("node_modules");
|
|
53
|
+
return index === -1 ? undefined : segments.slice(0, index).join(sep);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Whether `directory` contains `candidate`, or is it.
|
|
58
|
+
*
|
|
59
|
+
* Compared through `relative()` rather than a string prefix: a prefix test needs
|
|
60
|
+
* a hard-coded separator (wrong on Windows) and would call `/proj-two` a child
|
|
61
|
+
* of `/proj`.
|
|
62
|
+
*
|
|
63
|
+
* @param directory - The containing directory.
|
|
64
|
+
* @param candidate - The path to test.
|
|
65
|
+
* @returns True when `candidate` is `directory` or sits beneath it.
|
|
66
|
+
* @remarks Exported for its unit test; not part of the package's public surface.
|
|
67
|
+
*/
|
|
68
|
+
export function containsPath(directory: string, candidate: string): boolean {
|
|
69
|
+
const offset = relative(directory, candidate);
|
|
70
|
+
return offset === "" || (!offset.startsWith("..") && !isAbsolute(offset));
|
|
71
|
+
}
|
|
72
|
+
|
|
35
73
|
export function detectInstallSource(): InstallSource {
|
|
36
|
-
|
|
37
|
-
|
|
74
|
+
// The entry's own location, NOT `process.argv[1]`. Under the compiled binary
|
|
75
|
+
// argv[1] was the user's FIRST ARGUMENT (the executable was argv[0]), so the
|
|
76
|
+
// old `includes("node_modules")` test read a command word and answered
|
|
77
|
+
// "global" for almost everything. Shipping `node dist/src/bin.js` moves the
|
|
78
|
+
// entry path INTO argv[1], where it always contains `node_modules` — which
|
|
79
|
+
// would answer "local" for everything, the same bug facing the other way.
|
|
80
|
+
// `import.meta.url` is the honest source either way.
|
|
81
|
+
const entry = fileURLToPath(import.meta.url);
|
|
82
|
+
// LOCAL means the working directory sits inside the project this package was
|
|
83
|
+
// installed into — not merely that the entry sits under the cwd. Asking the
|
|
84
|
+
// narrower question called a perfectly ordinary local install "global" the
|
|
85
|
+
// moment the user ran it from a subdirectory, which in a monorepo is the
|
|
86
|
+
// usual case. Going the other way, deriving the install root also settles the
|
|
87
|
+
// $HOME-nested global prefixes (nvm, `~/.npm-global`): their root is the
|
|
88
|
+
// prefix, which contains no user project.
|
|
89
|
+
const root = findInstallRoot(entry);
|
|
90
|
+
const scope =
|
|
91
|
+
root !== undefined && containsPath(root, resolve(process.cwd()))
|
|
92
|
+
? "local"
|
|
93
|
+
: "global";
|
|
38
94
|
const pm = packageManager();
|
|
39
95
|
return { pm, label: `${pm} (${scope})` };
|
|
40
96
|
}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
14
14
|
import { homedir } from "node:os";
|
|
15
15
|
import { basename, join } from "node:path";
|
|
16
|
+
import { BIN_NAME } from "../../constants.js";
|
|
16
17
|
|
|
17
18
|
/** Parsed SKILL.md frontmatter. */
|
|
18
19
|
export interface SkillFrontmatter {
|
|
@@ -103,26 +104,44 @@ export function parseFrontmatter(content: string): SkillFrontmatter | null {
|
|
|
103
104
|
}
|
|
104
105
|
|
|
105
106
|
/**
|
|
106
|
-
* The installed-skills root: `$XDG_DATA_HOME
|
|
107
|
+
* The installed-skills root: `$XDG_DATA_HOME/<bin>/skills`. This is where
|
|
107
108
|
* `sources update` INSTALLS package-provided skills (U10) — a symlink per skill
|
|
108
109
|
* — and the second discovery root below reads them back. The single source of
|
|
109
110
|
* truth for both, so the install target and the discovery root can never drift.
|
|
111
|
+
*
|
|
112
|
+
* Namespaced by {@link BIN_NAME}, like config, state and cache: two
|
|
113
|
+
* distributions installed side by side owned ONE skills root, so a `recipes`
|
|
114
|
+
* build served skills a `pragma` build had installed and could not install its
|
|
115
|
+
* own without colliding.
|
|
110
116
|
*/
|
|
111
117
|
export function installedSkillsDir(): string {
|
|
112
118
|
const dataHome =
|
|
113
119
|
process.env.XDG_DATA_HOME ?? join(homedir(), ".local", "share");
|
|
114
|
-
return join(dataHome,
|
|
120
|
+
return join(dataHome, BIN_NAME, "skills");
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* The project skills root: `<cwd>/.<bin>/skills` — skills that belong to THIS
|
|
125
|
+
* repository and travel with it. Named separately from {@link skillRoots}
|
|
126
|
+
* because the two roots are also the two setup BANDS: `setup skills --local`
|
|
127
|
+
* links this root into the project's harness directories, while the global band
|
|
128
|
+
* links {@link installedSkillsDir} into the user-level ones. Mixing them leaks
|
|
129
|
+
* machine state into a repository's directories, or applies one repository's
|
|
130
|
+
* skills machine-wide.
|
|
131
|
+
*/
|
|
132
|
+
export function projectSkillsDir(cwd: string): string {
|
|
133
|
+
return join(cwd, `.${BIN_NAME}`, "skills");
|
|
115
134
|
}
|
|
116
135
|
|
|
117
136
|
/**
|
|
118
137
|
* The conventional roots skills are discovered from, in PRECEDENCE order: the
|
|
119
|
-
* project root (`<cwd
|
|
138
|
+
* project root (`<cwd>/.<bin>/skills`) FIRST so a project-local skill overrides
|
|
120
139
|
* an installed skill of the same name (`discoverSkills` dedups first-seen-wins),
|
|
121
|
-
* then installed skills under `$XDG_DATA_HOME
|
|
140
|
+
* then installed skills under `$XDG_DATA_HOME/<bin>/skills` (where package
|
|
122
141
|
* skills land on `sources update`).
|
|
123
142
|
*/
|
|
124
143
|
export function skillRoots(cwd: string): string[] {
|
|
125
|
-
return [
|
|
144
|
+
return [projectSkillsDir(cwd), installedSkillsDir()];
|
|
126
145
|
}
|
|
127
146
|
|
|
128
147
|
/** Immediate subdirectories of `root` (each a candidate skill folder). */
|
|
@@ -143,16 +162,24 @@ function subdirs(root: string): string[] {
|
|
|
143
162
|
}
|
|
144
163
|
|
|
145
164
|
/**
|
|
146
|
-
* Discover every skill reachable from
|
|
165
|
+
* Discover every skill reachable from an EXPLICIT list of roots, in precedence
|
|
166
|
+
* order (first-seen wins on a duplicate name).
|
|
147
167
|
*
|
|
148
|
-
* @
|
|
168
|
+
* Split out of {@link discoverSkills} so a caller that owns one band can read
|
|
169
|
+
* exactly that band's root: `setup skills` links the project root into project
|
|
170
|
+
* harness directories and the installed root into user-level ones, and reading
|
|
171
|
+
* both roots for either band is what used to mix the two.
|
|
172
|
+
*
|
|
173
|
+
* @param roots - The roots to read, in precedence order.
|
|
149
174
|
* @returns Discovered skills, sorted by name; malformed ones are skipped.
|
|
150
175
|
* @note Impure — reads SKILL.md files.
|
|
151
176
|
*/
|
|
152
|
-
export function
|
|
177
|
+
export function discoverSkillsFrom(
|
|
178
|
+
roots: readonly string[],
|
|
179
|
+
): DiscoveredSkill[] {
|
|
153
180
|
const skills: DiscoveredSkill[] = [];
|
|
154
181
|
const seen = new Set<string>();
|
|
155
|
-
for (const root of
|
|
182
|
+
for (const root of roots) {
|
|
156
183
|
for (const dir of subdirs(root)) {
|
|
157
184
|
let content: string;
|
|
158
185
|
try {
|
|
@@ -176,3 +203,14 @@ export function discoverSkills(cwd: string): DiscoveredSkill[] {
|
|
|
176
203
|
a.name < b.name ? -1 : a.name > b.name ? 1 : 0,
|
|
177
204
|
);
|
|
178
205
|
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Discover every skill reachable from the conventional roots.
|
|
209
|
+
*
|
|
210
|
+
* @param cwd - The project directory (project skills root).
|
|
211
|
+
* @returns Discovered skills, sorted by name; malformed ones are skipped.
|
|
212
|
+
* @note Impure — reads SKILL.md files.
|
|
213
|
+
*/
|
|
214
|
+
export function discoverSkills(cwd: string): DiscoveredSkill[] {
|
|
215
|
+
return discoverSkillsFrom(skillRoots(cwd));
|
|
216
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The `skill` capability module — storeless filesystem discovery.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import type { CapabilityModule } from "../../kernel/spec/
|
|
5
|
+
import type { CapabilityModule } from "../../kernel/spec/index.js";
|
|
6
6
|
import { skillListVerb, skillLookupVerb } from "./verbs.js";
|
|
7
7
|
|
|
8
8
|
/** The `skill` capability module (`list`, `lookup`). */
|
|
@@ -2,26 +2,26 @@
|
|
|
2
2
|
* Formatters for `skill list` and `skill lookup`.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import { BIN_NAME } from "../../constants.js";
|
|
6
|
+
import type { Formatters } from "../../kernel/spec/index.js";
|
|
6
7
|
import type { DiscoveredSkill } from "./discover.js";
|
|
7
8
|
import type { SkillLookup } from "./verbs.js";
|
|
8
9
|
|
|
9
|
-
/** Empty-state guidance (U5) — where skills come from now that
|
|
10
|
-
const EMPTY_PLAIN =
|
|
11
|
-
|
|
12
|
-
const EMPTY_LLM =
|
|
13
|
-
"## Skills (0)\n\nNo skills found. Skills come from installed design-system packages — add one to the project config, run `pragma sources update`, then `pragma setup skills`.";
|
|
10
|
+
/** Empty-state guidance (U5) — where skills come from now that packs ship them. */
|
|
11
|
+
const EMPTY_PLAIN = `No skills found.\nSkills come from design-system packs — add one to your config's packs, run \`${BIN_NAME} sources update\`, then \`${BIN_NAME} setup skills\`.`;
|
|
12
|
+
const EMPTY_LLM = `## Skills (0)\n\nNo skills found. Skills come from design-system packs — add one to the project config's packs, run \`${BIN_NAME} sources update\`, then \`${BIN_NAME} setup skills\`.`;
|
|
14
13
|
|
|
15
14
|
export const skillListFormatters: Formatters<DiscoveredSkill[]> = {
|
|
15
|
+
// Zero skills: plain stdout stays empty — the guidance is `emptyNotice`,
|
|
16
|
+
// which the dispatcher routes to stderr (exit 0) so a pipe reads no prose.
|
|
16
17
|
plain: (skills) =>
|
|
17
|
-
skills
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
.join("\n"),
|
|
18
|
+
skills
|
|
19
|
+
.map(
|
|
20
|
+
(s) =>
|
|
21
|
+
`${s.name}${s.frontmatter.prompt ? " (prompt)" : ""} ${s.description}`,
|
|
22
|
+
)
|
|
23
|
+
.join("\n"),
|
|
24
|
+
emptyNotice: (skills) => (skills.length === 0 ? EMPTY_PLAIN : undefined),
|
|
25
25
|
llm: (skills) =>
|
|
26
26
|
skills.length === 0
|
|
27
27
|
? EMPTY_LLM
|
|
@@ -85,11 +85,13 @@ describe("skill lookup (storeless)", () => {
|
|
|
85
85
|
});
|
|
86
86
|
|
|
87
87
|
describe("skill list empty-state (U5)", () => {
|
|
88
|
-
it("
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
expect(plain).
|
|
92
|
-
|
|
88
|
+
it("the empty notice (stderr's text) guides toward package sources", () => {
|
|
89
|
+
// Zero skills: plain stdout is empty (a pipe reads no prose) and the
|
|
90
|
+
// guidance rides the dispatcher's stderr via `emptyNotice`.
|
|
91
|
+
expect(skillListFormatters.plain([])).toBe("");
|
|
92
|
+
const notice = skillListFormatters.emptyNotice?.([]);
|
|
93
|
+
expect(notice).toContain("No skills found");
|
|
94
|
+
expect(notice).toContain("pragma sources update");
|
|
93
95
|
});
|
|
94
96
|
|
|
95
97
|
it("llm output announces zero and guides, json stays []", () => {
|
|
@@ -8,11 +8,12 @@
|
|
|
8
8
|
|
|
9
9
|
import { readFileSync } from "node:fs";
|
|
10
10
|
import { join } from "node:path";
|
|
11
|
-
import {
|
|
11
|
+
import { BIN_NAME } from "../../constants.js";
|
|
12
|
+
import { cliRecovery, PragmaError } from "../../kernel/error/index.js";
|
|
12
13
|
import { suggestNames } from "../../kernel/project/cli/suggestNames.js";
|
|
13
|
-
import type { PragmaRuntime } from "../../kernel/runtime/
|
|
14
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
14
15
|
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
15
|
-
import type { VerbSpec } from "../../kernel/spec/
|
|
16
|
+
import type { VerbSpec } from "../../kernel/spec/index.js";
|
|
16
17
|
import { type DiscoveredSkill, discoverSkills } from "./discover.js";
|
|
17
18
|
import { skillListFormatters, skillLookupFormatters } from "./render.js";
|
|
18
19
|
|
|
@@ -26,7 +27,7 @@ const listVerb: VerbSpec<Record<string, unknown>, DiscoveredSkill[]> = {
|
|
|
26
27
|
summary: "List discovered skills (SKILL.md files under the skill roots).",
|
|
27
28
|
params: [],
|
|
28
29
|
output: { formatters: skillListFormatters },
|
|
29
|
-
examples: [{ cmd:
|
|
30
|
+
examples: [{ cmd: `${BIN_NAME} skill list` }],
|
|
30
31
|
capability: {
|
|
31
32
|
needsStore: false,
|
|
32
33
|
mutates: false,
|
|
@@ -53,7 +54,7 @@ const lookupVerb: VerbSpec<Record<string, unknown>, SkillLookup> = {
|
|
|
53
54
|
},
|
|
54
55
|
],
|
|
55
56
|
output: { formatters: skillLookupFormatters },
|
|
56
|
-
examples: [{ cmd:
|
|
57
|
+
examples: [{ cmd: `${BIN_NAME} skill lookup docx` }],
|
|
57
58
|
capability: {
|
|
58
59
|
needsStore: false,
|
|
59
60
|
mutates: false,
|
|
@@ -74,11 +75,9 @@ const lookupVerb: VerbSpec<Record<string, unknown>, SkillLookup> = {
|
|
|
74
75
|
name,
|
|
75
76
|
skills.map((skill) => skill.name),
|
|
76
77
|
),
|
|
77
|
-
recovery: {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
mcp: { tool: "skill_list" },
|
|
81
|
-
},
|
|
78
|
+
recovery: cliRecovery("skill list", "List discovered skills.", {
|
|
79
|
+
tool: "skill_list",
|
|
80
|
+
}),
|
|
82
81
|
});
|
|
83
82
|
}
|
|
84
83
|
return { ...match, instructions: readInstructions(match.sourcePath) };
|
|
@@ -1,35 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Collect the `sources status` payload — storeless.
|
|
3
3
|
*
|
|
4
|
-
* Reports the store's readiness without booting it
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
4
|
+
* Reports the store's readiness without booting it. The `store` field IS the
|
|
5
|
+
* boot decision ({@link resolveSources}) — status never re-derives which pack
|
|
6
|
+
* answers reads, so it can never disagree with what the next read actually
|
|
7
|
+
* loads. Everything else is provenance read straight off that pack's manifest
|
|
8
|
+
* (a plain `JSON.parse`, no store, no oxigraph). This is the capability that
|
|
9
|
+
* must stay off the store factory (the storeless-guarantee spy covers it). It
|
|
10
|
+
* absorbs the v1 `info store` summary.
|
|
10
11
|
*/
|
|
11
12
|
|
|
12
13
|
import { existsSync, readFileSync } from "node:fs";
|
|
13
14
|
import { join } from "node:path";
|
|
14
|
-
import type {
|
|
15
|
+
import type { PackDeclaration } from "../../kernel/config/index.js";
|
|
16
|
+
// DIRECT LEAF IMPORTS, not `graphpack/index.js`. The barrel re-exports
|
|
17
|
+
// `build.ts`/`read.ts` (pulling `@canonical/ke` and `@canonical/ke-graphql`)
|
|
18
|
+
// and `embedded.ts`, whose generated payload is ~1.9 MB. `sources status`
|
|
19
|
+
// reads two manifests and prints them; routing that through the barrel
|
|
20
|
+
// would make a status-only command initialise the whole pack stack.
|
|
21
|
+
import { embeddedManifest } from "../../kernel/runtime/graphpack/embedded.js";
|
|
15
22
|
import { readManifest } from "../../kernel/runtime/graphpack/manifest.js";
|
|
16
23
|
import { INDEX_FILE } from "../../kernel/runtime/graphpack/types.js";
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import type {
|
|
20
|
-
import type {
|
|
21
|
-
SourceStaleness,
|
|
22
|
-
SourceStatusEntry,
|
|
23
|
-
SourcesStatusData,
|
|
24
|
-
} from "./types.js";
|
|
24
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
25
|
+
import { resolveSources } from "../../kernel/runtime/resolveSources.js";
|
|
26
|
+
import type { SourcesStatusData } from "./types.js";
|
|
25
27
|
|
|
26
|
-
const entryName = (entry:
|
|
28
|
+
const entryName = (entry: PackDeclaration): string =>
|
|
27
29
|
typeof entry === "string" ? entry : entry.name;
|
|
28
|
-
const entrySource = (entry:
|
|
30
|
+
const entrySource = (entry: PackDeclaration): string =>
|
|
29
31
|
typeof entry === "string" ? entry : (entry.source ?? entry.name);
|
|
30
32
|
|
|
31
33
|
/**
|
|
32
|
-
* The distinct-abox entity count from a
|
|
34
|
+
* The distinct-abox entity count from a built pack's index.json (storeless).
|
|
33
35
|
*
|
|
34
36
|
* Only reached for LEGACY packs whose manifest predates the persisted
|
|
35
37
|
* `entityCount` (A10) — a current pack's count is read straight from the
|
|
@@ -59,44 +61,52 @@ function indexEntityCount(dir: string): number | null {
|
|
|
59
61
|
*
|
|
60
62
|
* @param runtime - The per-invocation runtime.
|
|
61
63
|
* @returns The storeless status payload.
|
|
62
|
-
* @note Impure — reads config, the
|
|
64
|
+
* @note Impure — reads config, the active-pack pointer, and the pack cache.
|
|
63
65
|
*/
|
|
64
66
|
export async function collectStatus(
|
|
65
67
|
runtime: PragmaRuntime,
|
|
66
68
|
): Promise<SourcesStatusData> {
|
|
67
69
|
const layers = await runtime.loadConfig();
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
+
const sources = (layers.config.packs ?? []).map((entry) => ({
|
|
71
|
+
name: entryName(entry),
|
|
72
|
+
ref: entrySource(entry),
|
|
73
|
+
}));
|
|
74
|
+
const decision = resolveSources(layers, runtime.cwd);
|
|
75
|
+
const base = { cwd: runtime.cwd, sources };
|
|
70
76
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
} else if (!lockEntry || lockEntry.source !== ref) {
|
|
83
|
-
staleness = "config-drift";
|
|
84
|
-
} else {
|
|
85
|
-
staleness = "up-to-date";
|
|
77
|
+
switch (decision.kind) {
|
|
78
|
+
case "embedded": {
|
|
79
|
+
const manifest = embeddedManifest();
|
|
80
|
+
return {
|
|
81
|
+
...base,
|
|
82
|
+
store: "embedded",
|
|
83
|
+
contentHash: manifest.contentHash,
|
|
84
|
+
sourceRef: manifest.sourceRef,
|
|
85
|
+
builtAt: manifest.createdAt,
|
|
86
|
+
entityCount: manifest.entityCount ?? null,
|
|
87
|
+
};
|
|
86
88
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
89
|
+
case "pack": {
|
|
90
|
+
const manifest = readManifest(decision.dir);
|
|
91
|
+
return {
|
|
92
|
+
...base,
|
|
93
|
+
store: "built",
|
|
94
|
+
contentHash: decision.contentHash,
|
|
95
|
+
sourceRef: manifest?.sourceRef ?? null,
|
|
96
|
+
builtAt: manifest?.createdAt ?? null,
|
|
97
|
+
// Prefer the manifest's persisted count (no index parse); a legacy pack
|
|
98
|
+
// without it falls back to counting the index's abox subjects (A10).
|
|
99
|
+
entityCount: manifest?.entityCount ?? indexEntityCount(decision.dir),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
case "unavailable":
|
|
103
|
+
return {
|
|
104
|
+
...base,
|
|
105
|
+
store: "unavailable",
|
|
106
|
+
contentHash: null,
|
|
107
|
+
sourceRef: null,
|
|
108
|
+
builtAt: null,
|
|
109
|
+
entityCount: null,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
102
112
|
}
|