@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
|
@@ -60,9 +60,39 @@ const selfVerb: VerbSpec = {
|
|
|
60
60
|
run: async () => null,
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
+
/** A mutating verb with a default-true boolean, for the injected-flag rows. */
|
|
64
|
+
const mutating: VerbSpec = {
|
|
65
|
+
path: ["thing", "make"],
|
|
66
|
+
summary: "Make a thing.",
|
|
67
|
+
params: [
|
|
68
|
+
{
|
|
69
|
+
kind: "boolean",
|
|
70
|
+
name: "withStyles",
|
|
71
|
+
doc: "Include styles.",
|
|
72
|
+
default: true,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
output: { formatters: passthrough },
|
|
76
|
+
capability: { needsStore: false, mutates: true, mcp: { expose: true } },
|
|
77
|
+
run: async () => null,
|
|
78
|
+
};
|
|
79
|
+
|
|
63
80
|
describe("formatVerbHelp", () => {
|
|
64
81
|
const help = formatVerbHelp("pragma", get);
|
|
65
82
|
|
|
83
|
+
it("renders every flag the command parses: negations and mutation flags", () => {
|
|
84
|
+
// Help derives from the same spec facts registration reads, so a page
|
|
85
|
+
// can never deny a flag that works.
|
|
86
|
+
const mutatingHelp = formatVerbHelp("pragma", mutating);
|
|
87
|
+
expect(mutatingHelp).toContain("--with-styles");
|
|
88
|
+
expect(mutatingHelp).toContain("--no-with-styles");
|
|
89
|
+
expect(mutatingHelp).toContain("--dry-run");
|
|
90
|
+
expect(mutatingHelp).toContain("--undo");
|
|
91
|
+
expect(mutatingHelp).toContain("--yes");
|
|
92
|
+
// A read verb keeps its Flags block free of mutation rows.
|
|
93
|
+
expect(help).not.toContain("--dry-run");
|
|
94
|
+
});
|
|
95
|
+
|
|
66
96
|
it("renders the usage line with the positional", () => {
|
|
67
97
|
expect(help).toContain("Usage: pragma block get <name> [flags]");
|
|
68
98
|
});
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* `formatVerbHelp`, retargeted at the grammar.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
11
|
+
import type { ParamSpec, VerbSpec } from "../../spec/index.js";
|
|
12
|
+
import { kebabCase } from "../../spec/index.js";
|
|
13
|
+
import { MUTATION_FLAG_DOCS, negationFlagDoc } from "./constants.js";
|
|
13
14
|
import {
|
|
14
15
|
helpColumns,
|
|
15
16
|
helpDim,
|
|
@@ -73,13 +74,28 @@ export function formatVerbHelp(programName: string, verb: VerbSpec): string {
|
|
|
73
74
|
if (cliDoc) lines.push("", cliDoc);
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
// Every flag the command PARSES is rendered, from the same spec facts
|
|
78
|
+
// registration reads: the declared params, each default-true boolean's
|
|
79
|
+
// `--no-` negation, and — on a mutating verb — the auto-injected mutation
|
|
80
|
+
// flags. Help denying a working flag is the drift this derivation removes.
|
|
81
|
+
const flagRows: (readonly [string, string])[] = flags.flatMap((flag) => {
|
|
82
|
+
const rows: (readonly [string, string])[] = [
|
|
83
|
+
[flagDisplay(flag), flag.doc] as const,
|
|
84
|
+
];
|
|
85
|
+
if (flag.kind === "boolean" && flag.default === true) {
|
|
86
|
+
const kebab = kebabCase(flag.name);
|
|
87
|
+
rows.push([`--no-${kebab}`, negationFlagDoc(kebab)] as const);
|
|
88
|
+
}
|
|
89
|
+
return rows;
|
|
90
|
+
});
|
|
91
|
+
if (verb.capability.mutates) {
|
|
92
|
+
flagRows.push(
|
|
93
|
+
...MUTATION_FLAG_DOCS.map(({ flag, doc }) => [flag, doc] as const),
|
|
81
94
|
);
|
|
82
95
|
}
|
|
96
|
+
if (flagRows.length > 0) {
|
|
97
|
+
lines.push("", helpHeading("Flags"), ...helpColumns(flagRows));
|
|
98
|
+
}
|
|
83
99
|
|
|
84
100
|
if (verb.examples && verb.examples.length > 0) {
|
|
85
101
|
lines.push("", helpHeading("Examples"));
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build the MCP server from the grammar.
|
|
3
3
|
*
|
|
4
|
-
* Constructs an {@link McpServer}
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
4
|
+
* Constructs an {@link McpServer} whose wire identity PROJECTS from the
|
|
5
|
+
* distribution: `serverInfo.name` is the declared distribution name (the same
|
|
6
|
+
* projection that names the CLI bin, so existing agent wiring resolves it) and
|
|
7
|
+
* `serverInfo.version` the package version — a fork's server introduces itself
|
|
8
|
+
* under the fork's own name with no code change. The covenant records the rule
|
|
9
|
+
* (`surface.v2.json` `mcpSurface.serverInfo`) and `identity.test.ts` pins it on
|
|
10
|
+
* the wire from a fork's config. Then registers every exposed verb as a tool
|
|
11
|
+
* and each module's optional `mcpResources` surface (the graph resource
|
|
12
|
+
* browser, wired below via `module.mcpResources?.register`). One runtime is
|
|
13
|
+
* booted for the server's lifetime and shared by every tool; the store stays
|
|
14
|
+
* lazy, booting only when a resource read needs it.
|
|
10
15
|
*/
|
|
11
16
|
|
|
12
17
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
13
18
|
import { MCP_SERVER_NAME, VERSION } from "../../../constants.js";
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
16
|
-
import type { CapabilityModule } from "../../spec/
|
|
19
|
+
import type { GlobalFlags } from "../../runtime/index.js";
|
|
20
|
+
import { bootRuntime } from "../../runtime/index.js";
|
|
21
|
+
import type { CapabilityModule } from "../../spec/index.js";
|
|
17
22
|
import { buildInstructions } from "./instructions.js";
|
|
18
23
|
import { registerVerb } from "./registerVerb.js";
|
|
19
24
|
|
|
@@ -61,7 +66,10 @@ export async function buildServer(
|
|
|
61
66
|
}
|
|
62
67
|
}
|
|
63
68
|
// A module's optional resource surface (NOT a tool) — the `{+uri}` template.
|
|
64
|
-
|
|
69
|
+
// The WHOLE module set goes with it: the listing the provider installs is
|
|
70
|
+
// the union of every module's declared `mcpListable` slices, which the
|
|
71
|
+
// declaring module cannot see from where it sits.
|
|
72
|
+
await module.mcpResources?.register(server, runtime, modules);
|
|
65
73
|
// A module's optional native prompt surface (NOT a tool) — `prompts/*`.
|
|
66
74
|
await module.mcpPrompts?.register(server, runtime);
|
|
67
75
|
}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
12
|
-
import type { PragmaError } from "../../error/
|
|
13
|
-
import { errorEnvelope, successEnvelope } from "../../render/
|
|
12
|
+
import type { PragmaError } from "../../error/index.js";
|
|
13
|
+
import { errorEnvelope, successEnvelope } from "../../render/index.js";
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Wrap success data as an MCP tool result.
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* It carries the same content the retired `llm` tool front-loaded: the
|
|
6
6
|
* conventions + the discovery sequence. To guarantee it never diverges from the
|
|
7
|
-
* `capabilities` tool,
|
|
7
|
+
* `capabilities` tool, the WHOLE orientation — the opening line included —
|
|
8
|
+
* derives from the SAME source: `CONVENTIONS` and
|
|
8
9
|
* `buildDiscoverySequence` in `capabilities/capabilities/catalog.ts`. Live
|
|
9
10
|
* numbers (tier/channel/entity counts) are deliberately DROPPED (they would need
|
|
10
11
|
* a store boot at handshake); agents fetch those via `info`/`config show`/
|
|
@@ -15,9 +16,9 @@
|
|
|
15
16
|
import {
|
|
16
17
|
buildDiscoverySequence,
|
|
17
18
|
CONVENTIONS,
|
|
18
|
-
liveTools,
|
|
19
19
|
} from "../../../capabilities/capabilities/catalog.js";
|
|
20
|
-
import type { CapabilityModule } from "../../spec/
|
|
20
|
+
import type { CapabilityModule } from "../../spec/index.js";
|
|
21
|
+
import { emitSurface } from "../../spec/index.js";
|
|
21
22
|
|
|
22
23
|
/** Hard ceiling on the instructions length (asserted by the protected test). */
|
|
23
24
|
export const INSTRUCTIONS_MAX_CHARS = 1500;
|
|
@@ -31,18 +32,22 @@ export const INSTRUCTIONS_MAX_CHARS = 1500;
|
|
|
31
32
|
export function buildInstructions(
|
|
32
33
|
modules: readonly CapabilityModule[],
|
|
33
34
|
): string {
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
// Tools AND resource templates come from the one emitted surface: the
|
|
36
|
+
// `<scheme>:{+uri}` template is declared by the module that serves it and
|
|
37
|
+
// frozen in the covenant, so quoting it here rather than deriving it would be
|
|
38
|
+
// a second copy of a string the kernel does not own.
|
|
39
|
+
const { tools, resources } = emitSurface(modules).mcpSurface;
|
|
40
|
+
const steps = buildDiscoverySequence(tools)
|
|
36
41
|
.map((stage) => `${stage.stage}. ${stage.tool} — ${stage.purpose}`)
|
|
37
42
|
.join("\n");
|
|
43
|
+
const templates = resources.map((template) => `\`${template}\``).join(", ");
|
|
38
44
|
|
|
39
45
|
return [
|
|
40
|
-
"pragma is a CLI and MCP server over a design-system knowledge graph.",
|
|
41
46
|
`${CONVENTIONS.system} ${CONVENTIONS.model} ${CONVENTIONS.querying} ${CONVENTIONS.mutations}`,
|
|
42
47
|
"",
|
|
43
48
|
"Discovery sequence:",
|
|
44
49
|
steps,
|
|
45
50
|
"",
|
|
46
|
-
|
|
51
|
+
`Call the \`capabilities\` tool for the full annotated tool catalog; read ${templates} resources (or \`graph_inspect\`) for entity detail.`,
|
|
47
52
|
].join("\n");
|
|
48
53
|
}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import type { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
|
|
20
|
-
import type { PragmaError } from "../../error/
|
|
20
|
+
import type { PragmaError } from "../../error/index.js";
|
|
21
21
|
|
|
22
22
|
/** The SDK error primitives a provider dynamic-imports and hands to {@link mcpErrorFrom}. */
|
|
23
23
|
export interface McpErrorPrimitives {
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
1
|
+
import { existsSync, mkdtempSync, readdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
2
4
|
import { describe, expect, it } from "vitest";
|
|
3
5
|
import {
|
|
4
6
|
fixtureEffectsModule,
|
|
7
|
+
fixturePreviewModule,
|
|
5
8
|
touchPath,
|
|
6
9
|
} from "../../../testing/fixtures/fixtureCapability.js";
|
|
7
10
|
import { projectMcp } from "../../../testing/helpers/projectMcp.js";
|
|
@@ -70,3 +73,41 @@ describe("MCP mutation plan-first / confirm (PROTECTED)", () => {
|
|
|
70
73
|
expect(existsSync(touchPath(name))).toBe(true);
|
|
71
74
|
});
|
|
72
75
|
});
|
|
76
|
+
|
|
77
|
+
describe("MCP plan-first is honest (PRA-104)", () => {
|
|
78
|
+
it("returns the ERROR a confirmed run would hit, not a confident plan", async () => {
|
|
79
|
+
// The CLI twin of this guard lives in cli/dispatch.test.ts: the same
|
|
80
|
+
// mutation, the same missing source, exiting nonzero instead of printing a
|
|
81
|
+
// plan. Both surfaces run one interpreter, so they cannot drift.
|
|
82
|
+
const dir = mkdtempSync(join(tmpdir(), "pragma-graft-mcp-"));
|
|
83
|
+
const missing = join(dir, "gone");
|
|
84
|
+
|
|
85
|
+
const mcp = await projectMcp([fixturePreviewModule], dir);
|
|
86
|
+
const planned = await mcp.callTool("probe_graft", { source: missing });
|
|
87
|
+
await mcp.cleanup();
|
|
88
|
+
|
|
89
|
+
expect(planned.ok).toBe(false);
|
|
90
|
+
expect(JSON.stringify(planned.error)).toContain(missing);
|
|
91
|
+
expect(existsSync(`${missing}.grafted`)).toBe(false);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("returns a plan, and writes nothing, when the read would succeed", async () => {
|
|
95
|
+
const dir = mkdtempSync(join(tmpdir(), "pragma-graft-mcp-"));
|
|
96
|
+
const source = join(dir, "present.txt");
|
|
97
|
+
writeFileSync(source, "content\n");
|
|
98
|
+
|
|
99
|
+
const mcp = await projectMcp([fixturePreviewModule], dir);
|
|
100
|
+
const planned = await mcp.callTool("probe_graft", { source });
|
|
101
|
+
await mcp.cleanup();
|
|
102
|
+
|
|
103
|
+
expect(planned.ok).toBe(true);
|
|
104
|
+
expect(planned.meta).toEqual({ planOnly: true, confirmRequired: true });
|
|
105
|
+
// The SHARED filter applies to every mutating tool and not just `create`:
|
|
106
|
+
// the write is named, and the `ReadFile` this verb performs first is
|
|
107
|
+
// internal and filtered out, so the plan is one row.
|
|
108
|
+
expect((planned.data as { plan: string[] }).plan).toEqual([
|
|
109
|
+
`Write file: ${source}.grafted (8 bytes)`,
|
|
110
|
+
]);
|
|
111
|
+
expect(readdirSync(dir)).toEqual(["present.txt"]);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt entities, read two ways from one graph type.
|
|
3
|
+
*
|
|
4
|
+
* A prompt lives in the graph as an entity the distribution's vocabulary
|
|
5
|
+
* declares, and two surfaces offer it: the native MCP `prompts/list` +
|
|
6
|
+
* `prompts/get` handlers, and the `prompt list` / `prompt lookup` verbs behind
|
|
7
|
+
* the covenant tools. The pair is the cohesion principle — the reader here is
|
|
8
|
+
* the ONE place either surface learns what a prompt is, so the two can never
|
|
9
|
+
* report a different set of prompts or a different template body for one.
|
|
10
|
+
*
|
|
11
|
+
* The barrel carries both halves, and they READ DIFFERENTLY — the distinction
|
|
12
|
+
* matters to anyone rerouting imports through here, so it is stated rather
|
|
13
|
+
* than implied.
|
|
14
|
+
*
|
|
15
|
+
* `promptProvider` is the MCP module hook. Its `prompts/list` is STORELESS:
|
|
16
|
+
* it projects the pack index through `listPromptSummaries`, returning `[]`
|
|
17
|
+
* when no index is reachable and never booting the store. Its `prompts/get`
|
|
18
|
+
* is store-backed. The provider is imported STATICALLY by the prompt
|
|
19
|
+
* capability (`capabilities/prompt/index.ts`) — what it defers is the MCP SDK
|
|
20
|
+
* itself, whose request schemas it reaches through a dynamic import so the SDK
|
|
21
|
+
* stays off the `--help`/`__complete` fast path.
|
|
22
|
+
*
|
|
23
|
+
* `readPrompts` and `readPrompt` are the reads the CLI verbs take, and BOTH
|
|
24
|
+
* are store-backed: they query through `runSelect` directly, not through the
|
|
25
|
+
* index projection. A caller that expects a listing here to be as cheap as the
|
|
26
|
+
* MCP one is mistaken, and a reroute that makes either reachable statically
|
|
27
|
+
* from the capability graph puts a store boot on the fast path.
|
|
28
|
+
*
|
|
29
|
+
* `listPromptSummaries` stays internal. It is the MCP list path's projection,
|
|
30
|
+
* not a shared foundation under the two exported reads, and a caller choosing
|
|
31
|
+
* it directly is choosing a partial prompt without the store-backed body that
|
|
32
|
+
* makes it usable.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
export { promptProvider } from "./provider.js";
|
|
36
|
+
export type { PromptArgument, PromptEntry } from "./source.js";
|
|
37
|
+
export { readPrompt, readPrompts } from "./source.js";
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { mkdtempSync } from "node:fs";
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
+
import { GetPromptRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
4
5
|
import { afterEach, describe, expect, it } from "vitest";
|
|
6
|
+
import { CONVENTIONS } from "../../../../capabilities/capabilities/catalog.js";
|
|
5
7
|
import { capabilities } from "../../../../capabilities/index.js";
|
|
6
8
|
import type { McpHarness } from "../../../../testing/helpers/projectMcp.js";
|
|
7
9
|
import { projectMcp } from "../../../../testing/helpers/projectMcp.js";
|
|
10
|
+
import type { PragmaRuntime } from "../../../runtime/types.js";
|
|
11
|
+
import { emitSurface } from "../../../spec/emitSurface.js";
|
|
8
12
|
import type { CapabilityModule } from "../../../spec/types.js";
|
|
9
13
|
import { buildInstructions, INSTRUCTIONS_MAX_CHARS } from "../instructions.js";
|
|
10
14
|
import { fillTemplate, promptProvider } from "./provider.js";
|
|
15
|
+
import { readPrompts } from "./source.js";
|
|
11
16
|
|
|
12
17
|
const freshCwd = (): string => mkdtempSync(join(tmpdir(), "pragma-prompts-"));
|
|
13
18
|
|
|
@@ -39,14 +44,25 @@ describe("instructions — handshake orientation (PROTECTED)", () => {
|
|
|
39
44
|
);
|
|
40
45
|
});
|
|
41
46
|
|
|
42
|
-
it("
|
|
43
|
-
// The
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
it("opens with the shared catalog's conventions, verbatim and once", () => {
|
|
48
|
+
// The conventions are authored once (capabilities/catalog.ts); instructions
|
|
49
|
+
// must OPEN with them, so a second hand-written preamble cannot creep back
|
|
50
|
+
// in and drift from the `capabilities` tool the same handshake carries.
|
|
51
|
+
expect(buildInstructions(capabilities).startsWith(CONVENTIONS.system)).toBe(
|
|
52
|
+
true,
|
|
47
53
|
);
|
|
48
54
|
});
|
|
49
55
|
|
|
56
|
+
it("quotes the resource templates the MCP surface actually advertises", () => {
|
|
57
|
+
// The `pragma:` scheme is covenant-frozen protocol identity
|
|
58
|
+
// (surface.v2.json). The orientation DERIVES it from the emitted surface
|
|
59
|
+
// instead of hand-copying it, so the two cannot disagree.
|
|
60
|
+
const { resources } = emitSurface(capabilities).mcpSurface;
|
|
61
|
+
expect(resources.length).toBeGreaterThan(0);
|
|
62
|
+
const text = buildInstructions(capabilities);
|
|
63
|
+
for (const template of resources) expect(text).toContain(template);
|
|
64
|
+
});
|
|
65
|
+
|
|
50
66
|
it("states the plan-first/confirm convention in the orientation (D2)", () => {
|
|
51
67
|
// The confirm gate must be surfaced at handshake, not discovered by an agent
|
|
52
68
|
// tripping it. Same single source as the `capabilities` tool's conventions.
|
|
@@ -91,6 +107,105 @@ describe("MCP handshake — capabilities advertised (PROTECTED)", () => {
|
|
|
91
107
|
});
|
|
92
108
|
});
|
|
93
109
|
|
|
110
|
+
/** A runtime whose SPARQL facade always fails with `message`. */
|
|
111
|
+
function createFailingRuntime(message: string): PragmaRuntime {
|
|
112
|
+
return {
|
|
113
|
+
query: {
|
|
114
|
+
sparql: () => Promise.reject(new Error(message)),
|
|
115
|
+
},
|
|
116
|
+
} as unknown as PragmaRuntime;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Every field at the default layer — the embedded pack answers, so the store IS available. */
|
|
120
|
+
const DEFAULT_ORIGINS = {
|
|
121
|
+
tier: "default",
|
|
122
|
+
channel: "default",
|
|
123
|
+
detail: "default",
|
|
124
|
+
packs: "default",
|
|
125
|
+
stories: "default",
|
|
126
|
+
prefixes: "default",
|
|
127
|
+
} as const;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The same failing facade, wearing the shape `promptProvider.register` needs:
|
|
131
|
+
* a cwd whose store is AVAILABLE (so `guardStore` passes and the read is what
|
|
132
|
+
* fails) plus a `loadConfig` the readiness check can resolve.
|
|
133
|
+
*/
|
|
134
|
+
function createFailingProviderRuntime(
|
|
135
|
+
cwd: string,
|
|
136
|
+
message: string,
|
|
137
|
+
): PragmaRuntime {
|
|
138
|
+
return {
|
|
139
|
+
cwd,
|
|
140
|
+
loadConfig: async () => ({
|
|
141
|
+
config: { channel: "normal" as const },
|
|
142
|
+
origins: DEFAULT_ORIGINS,
|
|
143
|
+
global: { path: "/nonexistent", exists: false },
|
|
144
|
+
project: { exists: false },
|
|
145
|
+
}),
|
|
146
|
+
query: { sparql: () => Promise.reject(new Error(message)) },
|
|
147
|
+
} as unknown as PragmaRuntime;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
describe("native prompts/get — a failed read reaches the agent as one", () => {
|
|
151
|
+
it("carries the machine code and recovery, not a bare Error", async () => {
|
|
152
|
+
// The native surface signals failure by THROWING, so a read that fails must
|
|
153
|
+
// be projected the way the resource browser projects its own — with `code`
|
|
154
|
+
// and `recovery` in the JSON-RPC `data`. Otherwise the store diagnosis is
|
|
155
|
+
// lost between `prompt_lookup` (which envelopes it) and `prompts/get`.
|
|
156
|
+
const handlers = new Map<unknown, (request: unknown) => Promise<unknown>>();
|
|
157
|
+
const stubServer = {
|
|
158
|
+
server: {
|
|
159
|
+
registerCapabilities: () => {},
|
|
160
|
+
setRequestHandler: (
|
|
161
|
+
schema: unknown,
|
|
162
|
+
handler: (request: unknown) => Promise<unknown>,
|
|
163
|
+
) => {
|
|
164
|
+
handlers.set(schema, handler);
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
await promptProvider.register(
|
|
169
|
+
stubServer as never,
|
|
170
|
+
createFailingProviderRuntime(freshCwd(), "Prefix not found: ds"),
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
const get = handlers.get(GetPromptRequestSchema);
|
|
174
|
+
expect(get).toBeDefined();
|
|
175
|
+
await expect(
|
|
176
|
+
get?.({ params: { name: "build-a-block" } }),
|
|
177
|
+
).rejects.toMatchObject({
|
|
178
|
+
data: {
|
|
179
|
+
code: "STORE_UNAVAILABLE",
|
|
180
|
+
recovery: { mcp: { tool: "sources_update" } },
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
describe("readPrompts — a failed read is never an empty graph", () => {
|
|
187
|
+
it("reports an unbound prefix as a store that cannot answer, not as no prompts", async () => {
|
|
188
|
+
// A pack whose store does not know the declared prompt namespace cannot
|
|
189
|
+
// answer, and the actionable form of that is STORE_UNAVAILABLE with the
|
|
190
|
+
// build command — not a silent zero-prompt listing.
|
|
191
|
+
await expect(
|
|
192
|
+
readPrompts(createFailingRuntime("Prefix not found: ds")),
|
|
193
|
+
).rejects.toMatchObject({
|
|
194
|
+
code: "STORE_UNAVAILABLE",
|
|
195
|
+
recovery: { mcp: { tool: "sources_update" } },
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it("propagates a query failure instead of returning no prompts", async () => {
|
|
200
|
+
// The exact defect a bare `catch {}` here caused: a malformed declaration
|
|
201
|
+
// becomes a parse error, the parse error becomes `[]`, and the user is told
|
|
202
|
+
// the distribution ships no prompts. It must surface as a failure.
|
|
203
|
+
await expect(
|
|
204
|
+
readPrompts(createFailingRuntime("SPARQL syntax error at line 2")),
|
|
205
|
+
).rejects.toThrow(/syntax error/);
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
|
|
94
209
|
describe("fillTemplate — argument substitution", () => {
|
|
95
210
|
it("replaces {{arg}} placeholders and leaves unknowns intact", () => {
|
|
96
211
|
expect(
|
|
@@ -12,14 +12,17 @@
|
|
|
12
12
|
* module — never pulls the SDK types onto the `--help`/`__complete` fast path.
|
|
13
13
|
*
|
|
14
14
|
* Both handlers open with a STORELESS cold-store pre-check ({@link
|
|
15
|
-
* checkStoreAvailable})
|
|
16
|
-
*
|
|
17
|
-
* `
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
15
|
+
* checkStoreAvailable}), and the store-backed `get` projects any read failure
|
|
16
|
+
* through {@link mcpErrorFrom}, so the native surface converges with the
|
|
17
|
+
* store-backed `prompt_list` tool: a cold store — or a store that cannot answer
|
|
18
|
+
* the prompt query — surfaces the SAME machine code and recovery here as the
|
|
19
|
+
* tool envelope carries, rather than a silent `[]` (list) or a bogus "not found"
|
|
20
|
+
* (get) that masks it. When the store is available (including the embedded
|
|
21
|
+
* fallback) both handlers behave exactly as before.
|
|
21
22
|
*/
|
|
22
23
|
|
|
24
|
+
import { asPragmaError } from "../../../error/fromTaskError.js";
|
|
25
|
+
import { resolveSources } from "../../../runtime/resolveSources.js";
|
|
23
26
|
import { checkStoreAvailable } from "../../../runtime/storeReadiness.js";
|
|
24
27
|
import type { McpPromptProvider } from "../../../spec/types.js";
|
|
25
28
|
import { mcpErrorFrom } from "../mcpError.js";
|
|
@@ -68,7 +71,9 @@ export const promptProvider: McpPromptProvider = {
|
|
|
68
71
|
server.server.setRequestHandler(ListPromptsRequestSchema, async () => {
|
|
69
72
|
await guardStore();
|
|
70
73
|
return {
|
|
71
|
-
prompts: listPromptSummaries(
|
|
74
|
+
prompts: listPromptSummaries(
|
|
75
|
+
resolveSources(await runtime.loadConfig(), runtime.cwd),
|
|
76
|
+
).map((prompt) => ({
|
|
72
77
|
name: prompt.name,
|
|
73
78
|
...(prompt.description ? { description: prompt.description } : {}),
|
|
74
79
|
})),
|
|
@@ -78,7 +83,16 @@ export const promptProvider: McpPromptProvider = {
|
|
|
78
83
|
server.server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
79
84
|
await guardStore();
|
|
80
85
|
const { name, arguments: args } = request.params;
|
|
81
|
-
|
|
86
|
+
// The read can fail (a store that cannot answer the prompt query), and a
|
|
87
|
+
// native surface signals that by THROWING — so project it the way the
|
|
88
|
+
// resource browser does, carrying the machine code and the recovery into
|
|
89
|
+
// the JSON-RPC `data` instead of letting a bare Error reach the agent.
|
|
90
|
+
let entry: Awaited<ReturnType<typeof readPrompt>>;
|
|
91
|
+
try {
|
|
92
|
+
entry = await readPrompt(runtime, name);
|
|
93
|
+
} catch (error) {
|
|
94
|
+
throw mcpErrorFrom(asPragmaError(error), { McpError, ErrorCode });
|
|
95
|
+
}
|
|
82
96
|
if (!entry) {
|
|
83
97
|
// Reached only when the store IS available — a genuine miss, not a cold
|
|
84
98
|
// store (which `guardStore` already surfaced as STORE_UNAVAILABLE).
|