@canonical/pragma-cli 0.34.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +293 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +83 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +66 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +53 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +168 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +193 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +334 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +263 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +195 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +82 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +25 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +197 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +85 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +20 -22
- package/pragma.conf.ts +249 -60
- package/src/bin.ts +267 -82
- package/src/capabilities/block.parity.test.ts +6 -3
- package/src/capabilities/capabilities/capabilities.render.ts +1 -1
- package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
- package/src/capabilities/capabilities/catalog.ts +3 -3
- package/src/capabilities/capabilities/hints.ts +32 -7
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +35 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +4 -4
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/config/collectConfigShow.ts +3 -3
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -10
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +8 -7
- package/src/capabilities/config/show.render.ts +1 -1
- package/src/capabilities/config/show.verb.ts +9 -6
- package/src/capabilities/config/types.ts +18 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +25 -11
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +36 -61
- package/src/capabilities/create/create.mcp.test.ts +89 -5
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +433 -219
- package/src/capabilities/create/create.verb.ts +297 -328
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +7 -4
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +23 -35
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +20 -0
- package/src/capabilities/distribution.test.ts +3 -1
- package/src/capabilities/distribution.ts +10 -15
- package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +6 -4
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +18 -7
- package/src/capabilities/doctor/doctor.render.ts +43 -19
- package/src/capabilities/doctor/doctor.test.ts +123 -34
- package/src/capabilities/doctor/doctor.verb.ts +3 -3
- package/src/capabilities/doctor/runChecks.ts +62 -63
- package/src/capabilities/doctor/types.ts +20 -4
- package/src/capabilities/emptyRecovery.test.ts +13 -8
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -6
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +3 -3
- package/src/capabilities/graph/runQuery.ts +2 -3
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/info/collectInfo.ts +5 -4
- package/src/capabilities/info/info.render.ts +1 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/lazy.test.ts +32 -0
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +27 -68
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +4 -5
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +396 -326
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +223 -71
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +37 -5
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +3 -4
- package/src/capabilities/sources/collectStatus.ts +7 -2
- package/src/capabilities/sources/index.ts +1 -1
- package/src/capabilities/sources/installSkills.ts +84 -7
- package/src/capabilities/sources/runUpdate.ts +53 -21
- package/src/capabilities/sources/sources.test.ts +154 -2
- package/src/capabilities/sources/status.render.ts +1 -1
- package/src/capabilities/sources/status.verb.ts +1 -1
- package/src/capabilities/sources/update.render.ts +1 -1
- package/src/capabilities/sources/update.verb.ts +1 -1
- package/src/capabilities/surface.test.ts +134 -17
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.ts +31 -1
- package/src/identity.test.ts +40 -25
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +1 -1
- package/src/kernel/completion/entitySource.test.ts +1 -1
- package/src/kernel/completion/entitySource.ts +21 -8
- package/src/kernel/completion/model.test.ts +164 -12
- package/src/kernel/completion/model.ts +94 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +34 -26
- package/src/kernel/completion/shellDrive.test.ts +28 -9
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +7 -0
- package/src/kernel/config/defaults.test.ts +25 -2
- package/src/kernel/config/defaults.ts +4 -3
- package/src/kernel/config/evaluateProjectConfig.ts +31 -8
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -88
- package/src/kernel/config/index.ts +1 -1
- package/src/kernel/config/readConfig.test.ts +6 -3
- package/src/kernel/config/readConfig.ts +1 -1
- package/src/kernel/config/schema.ts +3 -1
- package/src/kernel/config/types.ts +3 -1
- package/src/kernel/copy.test.ts +34 -4
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +5 -2
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -5
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/recovery.ts +14 -0
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +21 -1
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +130 -1
- package/src/kernel/packs/compile.ts +93 -3
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +66 -14
- package/src/kernel/packs/renderPack.ts +24 -5
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +112 -18
- package/src/kernel/packs/runBodies.ts +2 -3
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +18 -1
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +42 -3
- package/src/kernel/packs/types.ts +13 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +147 -12
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +160 -3
- package/src/kernel/project/cli/dispatch.ts +222 -42
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +130 -30
- package/src/kernel/project/cli/helpFormat.ts +13 -0
- package/src/kernel/project/cli/rootHelp.ts +41 -12
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +7 -4
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +2 -2
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +5 -2
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/source.ts +2 -2
- package/src/kernel/project/mcp/registerVerb.ts +35 -9
- package/src/kernel/project/mcp/serve.ts +2 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/renderers.test.ts +243 -6
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded.ts +3 -3
- package/src/kernel/runtime/graphpack/manifest.ts +1 -1
- package/src/kernel/runtime/graphpack/read.ts +1 -2
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +472 -28
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +2 -2
- package/src/kernel/runtime/refs/resolve.ts +4 -4
- package/src/kernel/runtime/storeReadiness.ts +1 -2
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
- package/src/kernel/spec/emitReference.ts +105 -30
- package/src/kernel/spec/emitSurface.ts +48 -6
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/types.ts +248 -4
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/journeys.cli.test.ts +1 -1
- package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.packageStories.test.ts +4 -4
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +1 -1
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/graph/canonical.ts +88 -2
- package/src/testing/fixtures/graph/defaultPack.ts +1 -1
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/projectMcp.ts +32 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +20 -9
- package/src/testing/perf/budgets.ts +58 -9
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +505 -23
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/dist/pragma +0 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
- package/src/capabilities/create/templates.embedded.generated.ts +0 -28
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -2,27 +2,37 @@
|
|
|
2
2
|
* Look up one or more pack entities by name, prefixed name, absolute IRI, or
|
|
3
3
|
* glob, via the fetch strategy the pack declares.
|
|
4
4
|
*
|
|
5
|
-
* The
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* The resolve is ALWAYS generated SPARQL (an escaped literal or a validated
|
|
6
|
+
* `<iri>` BIND) regardless of `source`; from the resolved IRI, values are
|
|
7
|
+
* fetched either through more generated SELECTs (`sparql`) or one generated
|
|
8
8
|
* GraphQL document (`graphql`). One poisoned query never discards the batch —
|
|
9
9
|
* per-query failures are collected as structured error entries.
|
|
10
10
|
*
|
|
11
|
+
* WHICH query is chosen is decided by the ARGUMENT'S SHAPE first and the pack's
|
|
12
|
+
* `source` second, and both dispatches live here. Getting that order wrong is
|
|
13
|
+
* not a style question: it is what made an IRI reach a name FILTER on every
|
|
14
|
+
* graphql-sourced pack, and what left an IRI-shaped glob expanding against a
|
|
15
|
+
* population of names. The shape a user typed is a fact about the argument; the
|
|
16
|
+
* fetch strategy is a fact about the pack, and it cannot change what the
|
|
17
|
+
* argument means.
|
|
18
|
+
*
|
|
11
19
|
* Reached only behind a dynamic import from the lookup run body, so its imports
|
|
12
20
|
* (including the GraphQL path) stay off the storeless fast path.
|
|
13
21
|
*/
|
|
14
22
|
|
|
15
|
-
import { PragmaError } from "../error/
|
|
16
|
-
import { cliRecovery } from "../error/recovery.js";
|
|
23
|
+
import { cliRecovery, PragmaError } from "../error/index.js";
|
|
17
24
|
import { suggestNames } from "../project/cli/suggestNames.js";
|
|
18
|
-
import
|
|
25
|
+
import { compactUri } from "../render/index.js";
|
|
26
|
+
import type { PragmaRuntime } from "../runtime/index.js";
|
|
19
27
|
import { activeExpands } from "./disclosure.js";
|
|
20
28
|
import { expandGlob, isGlobPattern } from "./glob.js";
|
|
21
29
|
import { fetchGraphqlLookup } from "./graphql/fetchGraphqlLookup.js";
|
|
22
30
|
import { isEmbeddableIri, resolveUri } from "./iri.js";
|
|
23
31
|
import {
|
|
24
32
|
buildExpandQuery,
|
|
33
|
+
buildIriResolveQuery,
|
|
25
34
|
buildLookupByIriQuery,
|
|
35
|
+
buildLookupIrisQuery,
|
|
26
36
|
buildLookupNamesQuery,
|
|
27
37
|
buildLookupQuery,
|
|
28
38
|
buildNameResolveQuery,
|
|
@@ -74,7 +84,14 @@ export async function resolveLookup(
|
|
|
74
84
|
});
|
|
75
85
|
}
|
|
76
86
|
|
|
77
|
-
const expanded = await expandQueries(
|
|
87
|
+
const expanded = await expandQueries(
|
|
88
|
+
rt,
|
|
89
|
+
lookup,
|
|
90
|
+
noun,
|
|
91
|
+
source,
|
|
92
|
+
queries,
|
|
93
|
+
prefixes,
|
|
94
|
+
);
|
|
78
95
|
const results: PackEntity[] = [];
|
|
79
96
|
const errors: LookupError[] = [...expanded.globErrors];
|
|
80
97
|
const settled = await Promise.allSettled(
|
|
@@ -110,17 +127,34 @@ export async function resolveLookup(
|
|
|
110
127
|
return { results, errors };
|
|
111
128
|
}
|
|
112
129
|
|
|
113
|
-
/**
|
|
130
|
+
/**
|
|
131
|
+
* Expand glob queries against the population their own shape addresses;
|
|
132
|
+
* literals pass through.
|
|
133
|
+
*
|
|
134
|
+
* A name glob expands over the `by` values, an IRI glob over the entity IRIs —
|
|
135
|
+
* the same split {@link buildResolveQuery} makes, because a glob is just a
|
|
136
|
+
* lookup argument with a `*` in it. Expanding an IRI pattern over names was why
|
|
137
|
+
* `ds:global.component.but*` matched nothing on any pack while shell completion
|
|
138
|
+
* offered nothing BUT those IRIs. Each population is fetched at most once, and
|
|
139
|
+
* only when a glob of that shape is actually present.
|
|
140
|
+
*/
|
|
114
141
|
async function expandQueries(
|
|
115
142
|
rt: LookupRuntime,
|
|
116
143
|
lookup: PackLookup,
|
|
117
144
|
noun: string,
|
|
118
145
|
source: StorySource,
|
|
119
146
|
queries: readonly string[],
|
|
147
|
+
prefixes: Readonly<Record<string, string>>,
|
|
120
148
|
): Promise<{ names: string[]; globErrors: LookupError[] }> {
|
|
121
149
|
if (!queries.some(isGlobPattern))
|
|
122
150
|
return { names: [...queries], globErrors: [] };
|
|
123
|
-
const
|
|
151
|
+
const globs = queries.filter(isGlobPattern);
|
|
152
|
+
const byIri = globs.some(looksLikeIri)
|
|
153
|
+
? await listEntityIriSpellings(rt, lookup, source, prefixes)
|
|
154
|
+
: new Map<string, string>();
|
|
155
|
+
const byName = globs.some((glob) => !looksLikeIri(glob))
|
|
156
|
+
? await listEntityNames(rt, lookup, source)
|
|
157
|
+
: [];
|
|
124
158
|
const names: string[] = [];
|
|
125
159
|
const globErrors: LookupError[] = [];
|
|
126
160
|
for (const query of queries) {
|
|
@@ -128,7 +162,17 @@ async function expandQueries(
|
|
|
128
162
|
names.push(query);
|
|
129
163
|
continue;
|
|
130
164
|
}
|
|
131
|
-
|
|
165
|
+
// An IRI glob expands over every spelling, then collapses to the entity:
|
|
166
|
+
// matching `ds:button` and its absolute twin must not list it twice.
|
|
167
|
+
const matches = looksLikeIri(query)
|
|
168
|
+
? [
|
|
169
|
+
...new Set(
|
|
170
|
+
expandGlob(query, [...byIri.keys()]).map(
|
|
171
|
+
(spelling) => byIri.get(spelling) ?? spelling,
|
|
172
|
+
),
|
|
173
|
+
),
|
|
174
|
+
]
|
|
175
|
+
: expandGlob(query, byName);
|
|
132
176
|
if (matches.length === 0) {
|
|
133
177
|
globErrors.push({
|
|
134
178
|
query,
|
|
@@ -155,9 +199,7 @@ async function lookupOne(
|
|
|
155
199
|
const graphqlSourced = lookup.source === "graphql";
|
|
156
200
|
const rows = await runSelect(
|
|
157
201
|
rt,
|
|
158
|
-
|
|
159
|
-
? buildNameResolveQuery(lookup, query)
|
|
160
|
-
: buildEntityQuery(lookup, query, prefixes, level),
|
|
202
|
+
buildResolveQuery(lookup, query, prefixes, level),
|
|
161
203
|
source,
|
|
162
204
|
);
|
|
163
205
|
const base = rows.at(0);
|
|
@@ -196,14 +238,27 @@ async function lookupOne(
|
|
|
196
238
|
return entity;
|
|
197
239
|
}
|
|
198
240
|
|
|
199
|
-
/**
|
|
200
|
-
|
|
241
|
+
/**
|
|
242
|
+
* Build the resolve SELECT for one lookup argument: shape first, source second.
|
|
243
|
+
*
|
|
244
|
+
* The four cells of that 2×2 are the whole dispatch. A graphql-sourced pack
|
|
245
|
+
* resolves to an IRI and fetches everything else through its document, so both
|
|
246
|
+
* of its queries are the minimal `?uri ?name` pair; a sparql-sourced pack reads
|
|
247
|
+
* its fields in the same SELECT, so both of its queries carry the level-gated
|
|
248
|
+
* projection.
|
|
249
|
+
*/
|
|
250
|
+
function buildResolveQuery(
|
|
201
251
|
lookup: PackLookup,
|
|
202
252
|
query: string,
|
|
203
253
|
prefixes: Readonly<Record<string, string>>,
|
|
204
254
|
level: string | undefined,
|
|
205
255
|
): string {
|
|
206
|
-
|
|
256
|
+
const graphqlSourced = lookup.source === "graphql";
|
|
257
|
+
if (!looksLikeIri(query)) {
|
|
258
|
+
return graphqlSourced
|
|
259
|
+
? buildNameResolveQuery(lookup, query)
|
|
260
|
+
: buildLookupQuery(lookup, query, level);
|
|
261
|
+
}
|
|
207
262
|
const resolved = resolveUri(query, prefixes);
|
|
208
263
|
if (!isEmbeddableIri(resolved)) {
|
|
209
264
|
throw PragmaError.invalidInput("name", query, {
|
|
@@ -213,7 +268,9 @@ function buildEntityQuery(
|
|
|
213
268
|
},
|
|
214
269
|
});
|
|
215
270
|
}
|
|
216
|
-
return
|
|
271
|
+
return graphqlSourced
|
|
272
|
+
? buildIriResolveQuery(lookup, resolved)
|
|
273
|
+
: buildLookupByIriQuery(lookup, resolved, level);
|
|
217
274
|
}
|
|
218
275
|
|
|
219
276
|
/** Whether a lookup query addresses an entity by IRI or prefixed name. */
|
|
@@ -221,10 +278,47 @@ function looksLikeIri(query: string): boolean {
|
|
|
221
278
|
return (
|
|
222
279
|
query.startsWith("http://") ||
|
|
223
280
|
query.startsWith("https://") ||
|
|
224
|
-
|
|
281
|
+
// Neither an IRI nor a SPARQL prefixed name may contain whitespace, so a
|
|
282
|
+
// colon in a spaced string is part of a plain entity name — e.g. the
|
|
283
|
+
// concept "Foundations: Grid" — not a prefix separator.
|
|
284
|
+
(query.includes(":") && !/\s/.test(query))
|
|
225
285
|
);
|
|
226
286
|
}
|
|
227
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Every SPELLING an IRI-shaped glob may be written against, mapped to the one
|
|
290
|
+
* entity it addresses.
|
|
291
|
+
*
|
|
292
|
+
* An entity under a registered prefix has two legal spellings — the compact
|
|
293
|
+
* `ds:button` shell completion offers, and the absolute
|
|
294
|
+
* `https://ds.canonical.com/button` a user pastes from a browser. Both resolve
|
|
295
|
+
* to the same entity in a literal lookup, so a glob must expand over both;
|
|
296
|
+
* offering only the compact form made `https://ds.canonical.com/but*` return
|
|
297
|
+
* EMPTY_RESULTS while the literal IRI it generalises succeeded.
|
|
298
|
+
*
|
|
299
|
+
* The map is spelling → CANONICAL IRI precisely so a pattern that matches an
|
|
300
|
+
* entity under both spellings still yields it once. Matching over a flat list
|
|
301
|
+
* of both would render the entity twice, which is why the previous shape
|
|
302
|
+
* offered only one.
|
|
303
|
+
*/
|
|
304
|
+
async function listEntityIriSpellings(
|
|
305
|
+
rt: LookupRuntime,
|
|
306
|
+
lookup: PackLookup,
|
|
307
|
+
source: StorySource,
|
|
308
|
+
prefixes: Readonly<Record<string, string>>,
|
|
309
|
+
): Promise<Map<string, string>> {
|
|
310
|
+
const rows = await runSelect(rt, buildLookupIrisQuery(lookup), source);
|
|
311
|
+
const spellings = new Map<string, string>();
|
|
312
|
+
for (const row of rows) {
|
|
313
|
+
const uri = row.uri ?? "";
|
|
314
|
+
if (uri === "") continue;
|
|
315
|
+
spellings.set(uri, uri);
|
|
316
|
+
const compact = compactUri(uri, prefixes);
|
|
317
|
+
if (compact !== uri) spellings.set(compact, uri);
|
|
318
|
+
}
|
|
319
|
+
return spellings;
|
|
320
|
+
}
|
|
321
|
+
|
|
228
322
|
/** List every entity name the lookup can address (miss suggestions + sample/glob). */
|
|
229
323
|
export async function listEntityNames(
|
|
230
324
|
rt: LookupRuntime,
|
|
@@ -9,9 +9,8 @@
|
|
|
9
9
|
* factories carry no heavy static import.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import { PragmaError } from "../error/
|
|
13
|
-
import {
|
|
14
|
-
import type { PragmaRuntime } from "../runtime/types.js";
|
|
12
|
+
import { cliRecovery, PragmaError } from "../error/index.js";
|
|
13
|
+
import type { PragmaRuntime } from "../runtime/index.js";
|
|
15
14
|
import { resolvePackDetail } from "./disclosure.js";
|
|
16
15
|
import type { SampleOutput } from "./renderPack.js";
|
|
17
16
|
import {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* the supported 1–5 range. Selection is a Fisher-Yates partial shuffle.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { PragmaError } from "../error/
|
|
9
|
+
import { PragmaError } from "../error/index.js";
|
|
10
10
|
import type { PackLookup } from "./types.js";
|
|
11
11
|
|
|
12
12
|
/** Smallest number of samples the `sample` verb returns. */
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
import { z } from "zod";
|
|
20
20
|
import { DETAIL_LEVELS, RECOVERY_CLI_PREFIX } from "../../constants.js";
|
|
21
|
-
import { PragmaError } from "../error/
|
|
21
|
+
import { PragmaError } from "../error/index.js";
|
|
22
22
|
import type { PackDefinition } from "./types.js";
|
|
23
23
|
|
|
24
24
|
const NOUN_PATTERN = /^[a-z][a-z0-9-]*$/;
|
|
@@ -212,6 +212,7 @@ const lookupSchema = z
|
|
|
212
212
|
description: z.string().optional(),
|
|
213
213
|
toolDescription: z.string().optional(),
|
|
214
214
|
types: z.array(term).min(1).optional(),
|
|
215
|
+
weights: z.record(term, z.number().min(0).max(1)).optional(),
|
|
215
216
|
graphqlType: graphqlName.optional(),
|
|
216
217
|
fields: z.array(fieldSchema).min(1).optional(),
|
|
217
218
|
sections: z.array(sectionSchema).min(1).optional(),
|
|
@@ -332,6 +333,22 @@ function refineLookup(
|
|
|
332
333
|
});
|
|
333
334
|
}
|
|
334
335
|
|
|
336
|
+
// A weight naming a type the lookup does not address can never apply. Reject
|
|
337
|
+
// it rather than ignore it — a silent no-op is how a stale weight survives a
|
|
338
|
+
// rename (the type moves, the weight stays, and nothing says so).
|
|
339
|
+
const addressed = new Set<string>(
|
|
340
|
+
lookup.types ?? (lookup.type ? [lookup.type] : []),
|
|
341
|
+
);
|
|
342
|
+
for (const named of Object.keys(lookup.weights ?? {})) {
|
|
343
|
+
if (!addressed.has(named)) {
|
|
344
|
+
ctx.addIssue({
|
|
345
|
+
code: z.ZodIssueCode.custom,
|
|
346
|
+
message: `"lookup.weights" names "${named}", which is not in "lookup.type"/"lookup.types".`,
|
|
347
|
+
path: ["lookup", "weights"],
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
335
352
|
if (source === "graphql" && !lookup.graphqlType && !lookup.type) {
|
|
336
353
|
ctx.addIssue({
|
|
337
354
|
code: z.ZodIssueCode.custom,
|
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
* preserved. With declared `values` the input is canonicalized against the set
|
|
7
7
|
* (NFC, case-insensitive) and rows are matched case-insensitively; without them
|
|
8
8
|
* the input is a free term matched the same way. A row lacking the variable never
|
|
9
|
-
* matches. Several filters combine conjunctively
|
|
9
|
+
* matches. Several filters combine conjunctively; several values for one
|
|
10
|
+
* filter (a repeated flag) combine as a union.
|
|
10
11
|
*/
|
|
11
12
|
|
|
12
|
-
import { PragmaError } from "../../error/
|
|
13
|
+
import { PragmaError } from "../../error/index.js";
|
|
13
14
|
import type { PackFilter, PackRow } from "../types.js";
|
|
14
15
|
|
|
15
16
|
/**
|
|
@@ -29,23 +30,21 @@ export function applyPackFilters(
|
|
|
29
30
|
for (const filter of filters ?? []) {
|
|
30
31
|
const provided = params[filter.param];
|
|
31
32
|
if (provided === undefined) continue;
|
|
33
|
+
// A repeated CLI flag accumulates into an array; MCP args stay scalar.
|
|
34
|
+
// Several values for ONE filter are a union (a row matches any of them);
|
|
35
|
+
// several filters still combine conjunctively.
|
|
36
|
+
const occurrences = Array.isArray(provided) ? provided : [provided];
|
|
37
|
+
if (occurrences.length === 0) continue;
|
|
32
38
|
const values = filter.values;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
(
|
|
37
|
-
);
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
const canonical = canonicalizeFilterValue(
|
|
41
|
-
provided,
|
|
42
|
-
filter,
|
|
43
|
-
values,
|
|
44
|
-
).toLowerCase();
|
|
45
|
-
result = result.filter(
|
|
46
|
-
(row) =>
|
|
47
|
-
row[filter.variable]?.normalize("NFC").toLowerCase() === canonical,
|
|
39
|
+
const terms = occurrences.map((occurrence) =>
|
|
40
|
+
values === undefined
|
|
41
|
+
? requireStringValue(occurrence, filter).toLowerCase()
|
|
42
|
+
: canonicalizeFilterValue(occurrence, filter, values).toLowerCase(),
|
|
48
43
|
);
|
|
44
|
+
result = result.filter((row) => {
|
|
45
|
+
const cell = row[filter.variable]?.normalize("NFC").toLowerCase();
|
|
46
|
+
return cell !== undefined && terms.includes(cell);
|
|
47
|
+
});
|
|
49
48
|
}
|
|
50
49
|
return result;
|
|
51
50
|
}
|
|
@@ -6,6 +6,14 @@
|
|
|
6
6
|
* user-supplied names are always escaped SPARQL string literals, and level-gated
|
|
7
7
|
* fields below the active level are excluded from the projection (fetch-gating).
|
|
8
8
|
* Matching on the `by` property is exact and case-insensitive.
|
|
9
|
+
*
|
|
10
|
+
* Every name-addressed resolve is TOTALLY ORDERED before its `LIMIT 1`. A name
|
|
11
|
+
* can recur across tiers, and an unordered `LIMIT 1` hands the tie to the
|
|
12
|
+
* store's enumeration order — a different answer on a different machine, or
|
|
13
|
+
* after a repack. `ORDER BY STR(?uri)` is a total, engine-independent order over
|
|
14
|
+
* a variable that is always bound (`?uri` carries the `by` triple), so it needs
|
|
15
|
+
* no unbound-value sentinel. It fixes WHICH answer is arbitrary, not WHETHER:
|
|
16
|
+
* declaring a precedence between tiers is an ontology change, tracked separately.
|
|
9
17
|
*/
|
|
10
18
|
|
|
11
19
|
import { activeExpands, activeFields } from "../disclosure.js";
|
|
@@ -74,12 +82,32 @@ export function buildLookupQuery(
|
|
|
74
82
|
body,
|
|
75
83
|
` FILTER (LCASE(STR(?name)) = LCASE("${escapeSparqlString(name)}"))`,
|
|
76
84
|
"}",
|
|
85
|
+
"ORDER BY STR(?uri)",
|
|
77
86
|
"LIMIT 1",
|
|
78
87
|
]
|
|
79
88
|
.filter((line) => line !== "")
|
|
80
89
|
.join("\n");
|
|
81
90
|
}
|
|
82
91
|
|
|
92
|
+
/**
|
|
93
|
+
* The `?name` clause for an IRI-addressed form.
|
|
94
|
+
*
|
|
95
|
+
* An IRI names the entity by itself, so the `by` value is a LABEL to project,
|
|
96
|
+
* not the thing that identifies it — and a class constraint is already a
|
|
97
|
+
* sufficient existence check. Requiring the `by` triple here made every entity
|
|
98
|
+
* that carries no name unaddressable by any means at all: 131 of the 144 live
|
|
99
|
+
* code standards have no `cs:name` (their displayed name is synthesized from the
|
|
100
|
+
* IRI by the list story), and shell completion offers their IRIs. So the triple
|
|
101
|
+
* is OPTIONAL wherever a class constraint can vouch for the entity, and
|
|
102
|
+
* REQUIRED only for a lookup that declares no `type`/`types` — where it is the
|
|
103
|
+
* one thing standing between a typo'd IRI and an empty entity.
|
|
104
|
+
*/
|
|
105
|
+
function iriNameClause(lookup: PackLookup): string {
|
|
106
|
+
const named = `?uri ${formatTerm(lookup.by)} ?name .`;
|
|
107
|
+
const constrained = Boolean(lookup.type ?? lookup.types?.length);
|
|
108
|
+
return constrained ? ` OPTIONAL { ${named} }` : ` ${named}`;
|
|
109
|
+
}
|
|
110
|
+
|
|
83
111
|
/**
|
|
84
112
|
* Build the SELECT retrieving one entity addressed directly by IRI.
|
|
85
113
|
*
|
|
@@ -102,7 +130,7 @@ export function buildLookupByIriQuery(
|
|
|
102
130
|
return [
|
|
103
131
|
header,
|
|
104
132
|
` BIND(<${iri}> AS ?uri)`,
|
|
105
|
-
|
|
133
|
+
iriNameClause(lookup),
|
|
106
134
|
body,
|
|
107
135
|
"}",
|
|
108
136
|
"LIMIT 1",
|
|
@@ -127,13 +155,51 @@ export function buildNameResolveQuery(
|
|
|
127
155
|
buildTypeConstraint(lookup).trimEnd(),
|
|
128
156
|
` FILTER (LCASE(STR(?name)) = LCASE("${escapeSparqlString(name)}"))`,
|
|
129
157
|
"}",
|
|
130
|
-
|
|
158
|
+
"ORDER BY STR(?uri)",
|
|
159
|
+
"LIMIT 1",
|
|
160
|
+
]
|
|
161
|
+
.filter((line) => line !== "")
|
|
162
|
+
.join("\n");
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Build the minimal IRI→entity resolve for a graphql-sourced lookup: the mirror
|
|
167
|
+
* of {@link buildNameResolveQuery} for the other argument shape.
|
|
168
|
+
*
|
|
169
|
+
* The GraphQL lane fetches by IRI, so this exists to ANSWER ONE QUESTION — does
|
|
170
|
+
* the pack's class constraint vouch for this entity? — and to pick up a display
|
|
171
|
+
* name if there is one. Injection-safe by construction: `iri` is already
|
|
172
|
+
* resolved and validated against the embeddable-IRI shape by the caller.
|
|
173
|
+
*/
|
|
174
|
+
export function buildIriResolveQuery(lookup: PackLookup, iri: string): string {
|
|
175
|
+
return [
|
|
176
|
+
"SELECT ?uri ?name WHERE {",
|
|
177
|
+
` BIND(<${iri}> AS ?uri)`,
|
|
178
|
+
iriNameClause(lookup),
|
|
179
|
+
buildTypeConstraint(lookup).trimEnd(),
|
|
180
|
+
"}",
|
|
131
181
|
"LIMIT 1",
|
|
132
182
|
]
|
|
133
183
|
.filter((line) => line !== "")
|
|
134
184
|
.join("\n");
|
|
135
185
|
}
|
|
136
186
|
|
|
187
|
+
/** Build the SELECT listing every entity IRI a lookup can address (IRI globs). */
|
|
188
|
+
export function buildLookupIrisQuery(lookup: PackLookup): string {
|
|
189
|
+
const constraint = buildTypeConstraint(lookup).trimEnd();
|
|
190
|
+
return [
|
|
191
|
+
"SELECT DISTINCT ?uri WHERE {",
|
|
192
|
+
// A pack that constrains by class is asking about its class; one that does
|
|
193
|
+
// not has only the `by` triple to bound the scan, so it keeps that bound
|
|
194
|
+
// (and, like the name population, addresses only entities that carry one).
|
|
195
|
+
constraint !== "" ? constraint : ` ?uri ${formatTerm(lookup.by)} ?name .`,
|
|
196
|
+
"}",
|
|
197
|
+
"ORDER BY STR(?uri)",
|
|
198
|
+
]
|
|
199
|
+
.filter((line) => line !== "")
|
|
200
|
+
.join("\n");
|
|
201
|
+
}
|
|
202
|
+
|
|
137
203
|
/**
|
|
138
204
|
* Build the sub-SELECT retrieving one expand's child rows for a resolved entity.
|
|
139
205
|
*
|
|
@@ -166,7 +232,13 @@ export function buildExpandQuery(
|
|
|
166
232
|
/** Build the SELECT listing all entity names — lookup-miss suggestions. */
|
|
167
233
|
export function buildLookupNamesQuery(lookup: PackLookup): string {
|
|
168
234
|
return [
|
|
169
|
-
|
|
235
|
+
// DISTINCT: this population feeds miss-suggestions and glob expansion, and
|
|
236
|
+
// a name that several entities share is one CANDIDATE, not several. Without
|
|
237
|
+
// it a glob matching such a name expanded to it once per entity carrying
|
|
238
|
+
// it, and `lookup` then resolved each copy to the same winner — so
|
|
239
|
+
// `block lookup 'Butt*'` listed one Button twice while the other Button
|
|
240
|
+
// never appeared at all.
|
|
241
|
+
"SELECT DISTINCT ?name WHERE {",
|
|
170
242
|
` ?uri ${formatTerm(lookup.by)} ?name .`,
|
|
171
243
|
buildTypeConstraint(lookup).trimEnd(),
|
|
172
244
|
"}",
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The SPARQL path — every generated read a pack story performs, and the two
|
|
3
|
+
* row operations that must NOT be generated.
|
|
4
|
+
*
|
|
5
|
+
* The domain is organised around one invariant: user input never reaches query
|
|
6
|
+
* text. The query builders compose only from validated pack terms and escaped
|
|
7
|
+
* literals, so a name a user typed becomes a SPARQL string literal or nothing;
|
|
8
|
+
* `runSelect` is the single choke point every one of those trusted queries
|
|
9
|
+
* goes through, which is what makes "a generated query failed" distinguishable
|
|
10
|
+
* from "the user's own `graph query` failed". Filtering and search then run as
|
|
11
|
+
* predicates over the resolved ROWS rather than as clauses in the query —
|
|
12
|
+
* which is why they live in this domain despite touching no SPARQL at all:
|
|
13
|
+
* they are the operations that would otherwise be tempting to express as query
|
|
14
|
+
* text, and keeping them here keeps the temptation answered.
|
|
15
|
+
*
|
|
16
|
+
* The escaping primitives stay internal. They are how the builders keep that
|
|
17
|
+
* invariant, not a service for composing query text elsewhere — a caller with
|
|
18
|
+
* the escaper is a caller who can build an unvalidated query, which is exactly
|
|
19
|
+
* the shape this domain exists to prevent.
|
|
20
|
+
*
|
|
21
|
+
* Two names re-exported by `buildLookupQuery.ts` for its own callers'
|
|
22
|
+
* convenience — the disclosure-level field and expand selectors — are also
|
|
23
|
+
* omitted. They belong to `kernel/packs/disclosure.ts`; laundering them
|
|
24
|
+
* through here would make this domain look like their owner and freeze a
|
|
25
|
+
* pass-through that has no reason to be permanent.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
export { applyPackFilters } from "./applyFilters.js";
|
|
29
|
+
export { applyPackSearch } from "./applySearch.js";
|
|
30
|
+
export {
|
|
31
|
+
buildExpandQuery,
|
|
32
|
+
buildLookupByIriQuery,
|
|
33
|
+
buildLookupNamesQuery,
|
|
34
|
+
buildLookupQuery,
|
|
35
|
+
buildNameResolveQuery,
|
|
36
|
+
} from "./buildLookupQuery.js";
|
|
37
|
+
export { runSelect } from "./runSelect.js";
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Pins the remap: a generated query is composed from declared and pack-authored
|
|
5
5
|
* terms, never from user input, so a "Prefix not found" from the facade means
|
|
6
6
|
* the store cannot answer this read — an actionable error, NOT a raw one
|
|
7
|
-
* collapsing to INTERNAL_ERROR ("
|
|
7
|
+
* collapsing to INTERNAL_ERROR ("report this issue").
|
|
8
8
|
*
|
|
9
9
|
* WHICH actionable error is the story's provenance to decide, which is the
|
|
10
10
|
* second thing pinned here. A DISTRIBUTION story keeps STORE_UNAVAILABLE and its
|
|
@@ -10,9 +10,8 @@
|
|
|
10
10
|
* (`graph query`) goes through the facade directly and stays INVALID_INPUT.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import { PragmaError } from "../../error/
|
|
14
|
-
import {
|
|
15
|
-
import type { PragmaRuntime } from "../../runtime/types.js";
|
|
13
|
+
import { cliRecovery, PragmaError } from "../../error/index.js";
|
|
14
|
+
import type { PragmaRuntime } from "../../runtime/index.js";
|
|
16
15
|
import type { PackRow, StorySource } from "../types.js";
|
|
17
16
|
|
|
18
17
|
/**
|
|
@@ -79,7 +78,7 @@ function unboundPrefixError(source: StorySource): PragmaError {
|
|
|
79
78
|
* Run the facade query, remapping a store that cannot answer it. A generated
|
|
80
79
|
* query hitting an unknown prefix surfaces an actionable error — chosen by the
|
|
81
80
|
* story's provenance, see {@link unboundPrefixError} — instead of a raw SPARQL
|
|
82
|
-
* "Prefix not found" wrapped as INTERNAL_ERROR ("
|
|
81
|
+
* "Prefix not found" wrapped as INTERNAL_ERROR ("report this issue").
|
|
83
82
|
* Returns the inferred facade result type, so this module stays clear of a
|
|
84
83
|
* static `@canonical/ke` import (the lazy-dispatch guard).
|
|
85
84
|
*/
|
|
@@ -47,9 +47,7 @@ describe("pack toolDescription wiring (PROTECTED)", () => {
|
|
|
47
47
|
"Get type and theme values for one or more design tokens by name.",
|
|
48
48
|
);
|
|
49
49
|
// The authored MCP tool-call example survives on the MCP surface.
|
|
50
|
-
expect(desc).toContain(
|
|
51
|
-
'Example: token_lookup { names: ["color.primary"] }',
|
|
52
|
-
);
|
|
50
|
+
expect(desc).toContain('Example: token_lookup { name: ["color.primary"] }');
|
|
53
51
|
});
|
|
54
52
|
|
|
55
53
|
it("routes the definition-level toolDescription to the MCP list tool", async () => {
|
|
@@ -87,3 +85,44 @@ describe("pack toolDescription wiring (PROTECTED)", () => {
|
|
|
87
85
|
expect(listHelp).not.toContain("token_list {");
|
|
88
86
|
});
|
|
89
87
|
});
|
|
88
|
+
|
|
89
|
+
describe("a tool-call example names a parameter the tool ACCEPTS (PROTECTED)", () => {
|
|
90
|
+
// Four `*_lookup` descriptions taught agents `{ names: [...] }` while every
|
|
91
|
+
// schema required `name`. An agent copying the example — which is what an
|
|
92
|
+
// example is for — got `-32602 Invalid arguments`, and the description is
|
|
93
|
+
// the only instruction it has. Prose that contradicts the schema beside it
|
|
94
|
+
// is worse than no prose: it is a documented wrong answer.
|
|
95
|
+
it("every `Example: tool { key: … }` uses a declared property", async () => {
|
|
96
|
+
const mcp = await projectMcp([...storyModules.values()]);
|
|
97
|
+
try {
|
|
98
|
+
const tools = await mcp.listTools();
|
|
99
|
+
const offenders: string[] = [];
|
|
100
|
+
|
|
101
|
+
for (const tool of tools) {
|
|
102
|
+
const example = /Example:\s*\w+\s*\{\s*([A-Za-z_$][\w$]*)\s*:/.exec(
|
|
103
|
+
tool.description ?? "",
|
|
104
|
+
);
|
|
105
|
+
const key = example?.[1];
|
|
106
|
+
if (key === undefined) continue; // No call example to check.
|
|
107
|
+
const properties = Object.keys(
|
|
108
|
+
(tool.inputSchema as { properties?: Record<string, unknown> })
|
|
109
|
+
?.properties ?? {},
|
|
110
|
+
);
|
|
111
|
+
if (!properties.includes(key)) {
|
|
112
|
+
offenders.push(
|
|
113
|
+
`${tool.name}: example says \`${key}\`, schema declares ${properties.join(", ")}`,
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
expect(offenders).toEqual([]);
|
|
119
|
+
// Guard against a vacuous pass: some tool must actually carry an example.
|
|
120
|
+
expect(
|
|
121
|
+
tools.filter((t) => /Example:\s*\w+\s*\{/.test(t.description ?? ""))
|
|
122
|
+
.length,
|
|
123
|
+
).toBeGreaterThan(0);
|
|
124
|
+
} finally {
|
|
125
|
+
await mcp.cleanup();
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
@@ -267,6 +267,19 @@ export interface PackLookup {
|
|
|
267
267
|
* VALUES constraint on the name resolve. Mutually exclusive with `type`.
|
|
268
268
|
*/
|
|
269
269
|
readonly types?: readonly string[];
|
|
270
|
+
/**
|
|
271
|
+
* Relative importance per addressed type, prefixed type → 0–1 (unlisted types
|
|
272
|
+
* default to 1). Editorial judgement about which of a noun's classes matters
|
|
273
|
+
* most, declared as DATA rather than frozen into the kernel — it feeds the MCP
|
|
274
|
+
* listing's `annotations.priority` AND breaks ties in URI-completion ranking,
|
|
275
|
+
* so a `ds:Subcomponent` at 0.6 sinks below every component at equal match.
|
|
276
|
+
*
|
|
277
|
+
* A separate map rather than an entry shape on `types` so `types` keeps its
|
|
278
|
+
* flat `readonly string[]` form and the addition is non-breaking. A key naming
|
|
279
|
+
* a type the lookup does not address is REJECTED, not ignored: a silent no-op
|
|
280
|
+
* is how a weight that never applied survives review.
|
|
281
|
+
*/
|
|
282
|
+
readonly weights?: Readonly<Record<string, number>>;
|
|
270
283
|
/**
|
|
271
284
|
* GraphQL type or interface the generated document's inline fragment targets
|
|
272
285
|
* (`source: "graphql"` only). Defaults to the local name of `type`; required
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* conflict, reported with both sources.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import type { VerbSpec } from "../spec/
|
|
11
|
+
import type { VerbSpec } from "../spec/index.js";
|
|
12
12
|
|
|
13
13
|
/** The `(noun, verb)` key for a verb path (`["standard","list"]` → `standard list`). */
|
|
14
14
|
export function verbKey(path: readonly [string, string?]): string {
|