@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
|
@@ -3,143 +3,362 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Listing and autocomplete are STORELESS: they read the enriched `index.json`
|
|
5
5
|
* (readPackIndex) off disk, so the resource surface costs nothing until an agent
|
|
6
|
-
* reads one.
|
|
7
|
-
*
|
|
8
|
-
* the
|
|
6
|
+
* reads one. They read it for the pack the BOOT DECISION names, so the listing
|
|
7
|
+
* can never advertise entities whose reads then fail STORE_UNAVAILABLE. A read
|
|
8
|
+
* is STORE-BACKED through the SHARED {@link readEntity} — the same reader
|
|
9
|
+
* `graph inspect` uses — so a resource read and a `graph inspect` of the same
|
|
10
|
+
* URI return identical content (the mirror contract).
|
|
11
|
+
*
|
|
12
|
+
* The listing is CURATED, not paged. MCP has a `cursor`/`nextCursor` contract
|
|
13
|
+
* for `resources/list`, but the SDK's high-level `McpServer` list handler
|
|
14
|
+
* ignores `request.params.cursor` and never returns a `nextCursor` (verified on
|
|
15
|
+
* the wire against 1.27.1), so "list everything, the client will page it" means
|
|
16
|
+
* "send everything, every connect". Listing all 712 indexed entities cost an
|
|
17
|
+
* agent ~155 KB of context before it had asked a single question. So a module
|
|
18
|
+
* DECLARES the slices of the index it contributes ({@link McpListable}) and the
|
|
19
|
+
* listing is their union: the collections, plus the schema that describes them.
|
|
20
|
+
* The individuals stay fully reachable — by the `{+uri}` template, whose
|
|
21
|
+
* autocomplete still offers every one of them.
|
|
9
22
|
*
|
|
10
23
|
* Degradation (Risk4): on a missing or legacy (pre-v2) index the listing returns
|
|
11
24
|
* a single "run `pragma sources update`" hint — never a live re-index of the
|
|
12
|
-
* store on the resource path.
|
|
25
|
+
* store on the resource path. That hint is itself READABLE (it is the only
|
|
26
|
+
* resource a cold server advertises, and an advertised resource that refuses to
|
|
27
|
+
* be read is worse than no resource at all).
|
|
13
28
|
*
|
|
14
29
|
* The MCP SDK's `ResourceTemplate` is dynamic-imported inside `register` so this
|
|
15
30
|
* module — reachable on the capabilities import graph — never pulls the SDK onto
|
|
16
31
|
* the `--help`/`__complete` fast path.
|
|
17
32
|
*/
|
|
18
33
|
|
|
19
|
-
import {
|
|
34
|
+
import { BIN_NAME } from "../../constants.js";
|
|
35
|
+
import {
|
|
36
|
+
matchesType,
|
|
37
|
+
readPackIndex,
|
|
38
|
+
} from "../../kernel/completion/entitySource.js";
|
|
20
39
|
import { asPragmaError } from "../../kernel/error/fromTaskError.js";
|
|
21
|
-
import { PragmaError } from "../../kernel/error/
|
|
40
|
+
import { PragmaError } from "../../kernel/error/index.js";
|
|
22
41
|
import { mcpErrorFrom } from "../../kernel/project/mcp/mcpError.js";
|
|
23
|
-
import
|
|
42
|
+
import { toTurtle } from "../../kernel/render/turtle.js";
|
|
43
|
+
import type {
|
|
44
|
+
PackIndex,
|
|
45
|
+
PackIndexEntity,
|
|
46
|
+
} from "../../kernel/runtime/graphpack/types.js";
|
|
24
47
|
import { readEntity } from "../../kernel/runtime/readEntity.js";
|
|
25
|
-
import
|
|
48
|
+
import { resolveSources } from "../../kernel/runtime/resolveSources.js";
|
|
49
|
+
import type {
|
|
50
|
+
CapabilityModule,
|
|
51
|
+
McpListable,
|
|
52
|
+
McpListableRef,
|
|
53
|
+
McpResourceProvider,
|
|
54
|
+
} from "../../kernel/spec/types.js";
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The weight an unweighted slice carries — "as important as any other".
|
|
58
|
+
*
|
|
59
|
+
* The ONLY editorial number left in this module. The judgements that used to
|
|
60
|
+
* live here as `CLASS_PRIORITY = 0.9` / `INDIVIDUAL_PRIORITY = 0.3` are now
|
|
61
|
+
* declared data (`McpListableRef.weight`, derived from `PackLookup.weights`):
|
|
62
|
+
* which of a distribution's classes deserves an agent's attention first is a
|
|
63
|
+
* fact about that distribution's graph, not about the kernel that serves it.
|
|
64
|
+
*/
|
|
65
|
+
const DEFAULT_WEIGHT = 1;
|
|
26
66
|
|
|
27
|
-
/**
|
|
28
|
-
const
|
|
67
|
+
/** The reserved listing entry that explains an unusable store. */
|
|
68
|
+
const SOURCES_URI = "pragma:sources";
|
|
69
|
+
/** The `{+uri}` variable value that addresses {@link SOURCES_URI}. */
|
|
70
|
+
const SOURCES_VARIABLE = "sources";
|
|
29
71
|
|
|
30
|
-
/**
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
72
|
+
/**
|
|
73
|
+
* The media type an entity read RETURNS — and therefore the one the listing
|
|
74
|
+
* ADVERTISES for every entry it mints.
|
|
75
|
+
*
|
|
76
|
+
* One constant, three readers (the template registration, the read body, and
|
|
77
|
+
* each listed entry). The listing promising `application/json` while the read
|
|
78
|
+
* answers Turtle is the same shape of failure as the `recipes:{+uri}` template
|
|
79
|
+
* over `pragma:` URIs: a surface describing content it does not serve.
|
|
80
|
+
*/
|
|
81
|
+
const ENTITY_MIME_TYPE = "text/turtle";
|
|
82
|
+
/** The recovery hint is prose about a broken store, not graph content. */
|
|
83
|
+
const RECOVERY_MIME_TYPE = "text/plain";
|
|
34
84
|
|
|
35
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* The `pragma:` URI scheme + the single reserved-expansion template variable.
|
|
87
|
+
*
|
|
88
|
+
* A LITERAL, and it must stay one until the wire identifiers move together.
|
|
89
|
+
* `surface/surface.v2.json` freezes `pragma:{+uri}` as protocol identity, and
|
|
90
|
+
* `buildResourceList` mints `pragma:<prefixed>` for every entry it lists —
|
|
91
|
+
* three writings of one decision. Deriving only this one made a fork advertise
|
|
92
|
+
* `recipes:{+uri}` over a list of 653 `pragma:` URIs: every resource the server
|
|
93
|
+
* offered became unreadable, and the readable form was never advertised.
|
|
94
|
+
* `resources.test.ts` pins the pair through {@link resourceProvider}'s declared
|
|
95
|
+
* surface; `identity.test.ts` masks this template out of its leak scan for the
|
|
96
|
+
* same reason.
|
|
97
|
+
*/
|
|
36
98
|
const URI_TEMPLATE = "pragma:{+uri}";
|
|
37
99
|
|
|
38
100
|
const TEMPLATE_DESCRIPTION =
|
|
39
|
-
"Knowledge-graph entities from the local pack. Read any entry by
|
|
40
|
-
"URI (e.g. pragma:ds:button); autocomplete
|
|
41
|
-
"
|
|
101
|
+
"Knowledge-graph entities from the local pack, as Turtle. Read any entry by " +
|
|
102
|
+
"its prefixed URI (e.g. pragma:ds:global.component.button); autocomplete " +
|
|
103
|
+
"matches URI or label substrings. A read returns the entity's neighbourhood — " +
|
|
104
|
+
"its own triples, the edges pointing AT it, and its blank nodes inlined. " +
|
|
105
|
+
`Content mirrors \`${BIN_NAME} graph inspect <uri> --format llm\`.`;
|
|
42
106
|
|
|
43
107
|
/** Agent-navigability annotations mirrored onto a listed resource. */
|
|
44
108
|
export interface ResourceAnnotations {
|
|
45
|
-
/** MCP audience roles (the SDK's literal union)
|
|
109
|
+
/** MCP audience roles (the SDK's literal union). */
|
|
46
110
|
readonly audience: ("user" | "assistant")[];
|
|
111
|
+
/** The declared weight of the slice that contributed this entry (0–1). */
|
|
47
112
|
readonly priority: number;
|
|
48
113
|
}
|
|
49
114
|
|
|
50
|
-
/**
|
|
51
|
-
|
|
115
|
+
/**
|
|
116
|
+
* The audience every listed resource carries.
|
|
117
|
+
*
|
|
118
|
+
* BOTH roles. `["assistant"]` tells a client that honours the field to hide the
|
|
119
|
+
* resource from its human picker, and browsing a design system in a picker is
|
|
120
|
+
* exactly a human use case — the same entries serve an agent orienting itself
|
|
121
|
+
* and a person looking for the button spec.
|
|
122
|
+
*/
|
|
123
|
+
const LISTING_AUDIENCE: ("user" | "assistant")[] = ["user", "assistant"];
|
|
52
124
|
|
|
53
125
|
/** One resource entry in the listing. */
|
|
54
126
|
export interface ListedResource {
|
|
55
127
|
readonly uri: string;
|
|
128
|
+
/** The STABLE prefixed URI (`ds:Component`) — an identifier, not a label. */
|
|
56
129
|
readonly name: string;
|
|
130
|
+
/** The human label (MCP `title`), when the index carries one. */
|
|
131
|
+
readonly title?: string;
|
|
57
132
|
readonly description?: string;
|
|
58
|
-
readonly mimeType:
|
|
59
|
-
/** Audience +
|
|
133
|
+
readonly mimeType: typeof ENTITY_MIME_TYPE | typeof RECOVERY_MIME_TYPE;
|
|
134
|
+
/** Audience + the declared weight of the slice that listed it. */
|
|
60
135
|
readonly annotations?: ResourceAnnotations;
|
|
61
|
-
/** Taxonomy metadata: `pragma/box`
|
|
136
|
+
/** Taxonomy metadata: `pragma/box`, `pragma/type`, optional instance count. */
|
|
62
137
|
readonly _meta?: Record<string, unknown>;
|
|
63
138
|
}
|
|
64
139
|
|
|
140
|
+
/**
|
|
141
|
+
* The human name for an entity, best-available-first.
|
|
142
|
+
*
|
|
143
|
+
* `altNames` is the distribution's declared alternative-name property — the
|
|
144
|
+
* name a bespoke lookup MATCHES on ("Button", "FileTree"). 383 of the embedded
|
|
145
|
+
* pack's 714 entities carry one and no `rdfs:label`, so before this the listing
|
|
146
|
+
* showed them as a bare URI with no description while the readable name sat
|
|
147
|
+
* unused in the index one field away.
|
|
148
|
+
*/
|
|
149
|
+
function humanName(entity: PackIndexEntity): string | undefined {
|
|
150
|
+
return entity.label ?? entity.altNames?.[0] ?? undefined;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Render one index entity as a listed resource at a given weight. */
|
|
154
|
+
function listEntity(
|
|
155
|
+
entity: PackIndexEntity,
|
|
156
|
+
weight: number,
|
|
157
|
+
instanceCount?: number,
|
|
158
|
+
): ListedResource {
|
|
159
|
+
const title = humanName(entity);
|
|
160
|
+
// `pragma/box` + `pragma/instanceCount` are FROZEN protocol identity (see
|
|
161
|
+
// `surface.v2.json` and docs/mcp-integration.md). `pragma/type` is an
|
|
162
|
+
// ADDITION: all 714 entities carry a type, and publishing it lets an agent
|
|
163
|
+
// narrow the listing to a family without spending a read to find out what
|
|
164
|
+
// each entry is.
|
|
165
|
+
const meta: Record<string, unknown> = {
|
|
166
|
+
"pragma/box": entity.box ?? "abox",
|
|
167
|
+
"pragma/type": entity.type,
|
|
168
|
+
};
|
|
169
|
+
if (typeof instanceCount === "number") {
|
|
170
|
+
meta["pragma/instanceCount"] = instanceCount;
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
uri: `pragma:${entity.prefixed ?? entity.name}`,
|
|
174
|
+
name: entity.prefixed ?? entity.name,
|
|
175
|
+
...(title ? { title } : {}),
|
|
176
|
+
...(entity.description ? { description: entity.description } : {}),
|
|
177
|
+
mimeType: ENTITY_MIME_TYPE,
|
|
178
|
+
annotations: { audience: LISTING_AUDIENCE, priority: weight },
|
|
179
|
+
_meta: meta,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** The recovery entry a missing/legacy index degrades to (and its read body). */
|
|
184
|
+
const SOURCES_RECOVERY = `No enriched entity index. Run \`${BIN_NAME} sources update\` to build it.`;
|
|
185
|
+
|
|
186
|
+
/** The single entry a server with no usable index advertises. */
|
|
187
|
+
function sourcesEntry(): ListedResource {
|
|
188
|
+
return {
|
|
189
|
+
uri: SOURCES_URI,
|
|
190
|
+
name: SOURCES_VARIABLE,
|
|
191
|
+
title: "Store not indexed",
|
|
192
|
+
description: SOURCES_RECOVERY,
|
|
193
|
+
mimeType: RECOVERY_MIME_TYPE,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Resolve one declared slice into listed resources.
|
|
199
|
+
*
|
|
200
|
+
* `as: "collection"` yields at most ONE entry — the class entry for the slice's
|
|
201
|
+
* type, carrying `pragma/instanceCount`. A type the index does not know
|
|
202
|
+
* contributes NOTHING rather than an empty collection: `ds:Token` is declared by
|
|
203
|
+
* a read story but SPARQL-served, never indexed, and advertising an empty
|
|
204
|
+
* collection for it would promise a browse that has nothing to show.
|
|
205
|
+
*/
|
|
206
|
+
function listSlice(
|
|
207
|
+
index: PackIndex,
|
|
208
|
+
byPrefixed: ReadonlyMap<string, PackIndexEntity>,
|
|
209
|
+
ref: McpListableRef,
|
|
210
|
+
): ListedResource[] {
|
|
211
|
+
const weight = ref.weight ?? DEFAULT_WEIGHT;
|
|
212
|
+
if (ref.as === "collection") {
|
|
213
|
+
const type = ref.type;
|
|
214
|
+
if (!type) return [];
|
|
215
|
+
const entity = byPrefixed.get(type);
|
|
216
|
+
if (!entity) return [];
|
|
217
|
+
// A class with no instances has NO key in `instanceCountByType`, so reading
|
|
218
|
+
// it straight through reports `undefined` — and an empty collection then
|
|
219
|
+
// looks identical to an entry that is not a collection at all. A declared
|
|
220
|
+
// collection whose class the index knows always states a count, and for an
|
|
221
|
+
// empty one that count is zero.
|
|
222
|
+
const count = entity.uri ? (index.instanceCountByType[entity.uri] ?? 0) : 0;
|
|
223
|
+
return [listEntity(entity, weight, count)];
|
|
224
|
+
}
|
|
225
|
+
const listed: ListedResource[] = [];
|
|
226
|
+
for (const entity of index.entities) {
|
|
227
|
+
if (ref.box && (entity.box ?? "abox") !== ref.box) continue;
|
|
228
|
+
if (!matchesType(entity, ref.type ?? "")) continue;
|
|
229
|
+
const count =
|
|
230
|
+
entity.box === "tbox" && entity.uri
|
|
231
|
+
? index.instanceCountByType[entity.uri]
|
|
232
|
+
: undefined;
|
|
233
|
+
listed.push(listEntity(entity, weight, count));
|
|
234
|
+
}
|
|
235
|
+
return listed;
|
|
236
|
+
}
|
|
237
|
+
|
|
65
238
|
/**
|
|
66
239
|
* Build the resource listing from the storeless pack index.
|
|
67
240
|
*
|
|
68
241
|
* @param index - The active pack index, or `undefined` when none is reachable.
|
|
69
|
-
* @
|
|
242
|
+
* @param listing - The union of the modules' declared slices.
|
|
243
|
+
* @returns One resource per contributed entry, heaviest slice first; a single
|
|
70
244
|
* recovery entry when the index is missing or pre-v2 (no enrichment).
|
|
71
245
|
*/
|
|
72
246
|
export function buildResourceList(
|
|
73
247
|
index: PackIndex | undefined,
|
|
248
|
+
listing: McpListable,
|
|
74
249
|
): ListedResource[] {
|
|
75
250
|
// readPackIndex returns raw JSON.parse output (no zod), so guard structurally:
|
|
76
251
|
// a malformed index missing `version` must degrade to the recovery hint, not
|
|
77
252
|
// fall through to `[...index.entities]` (a TypeError inside the MCP handler).
|
|
78
253
|
if (!index || index.version !== 2 || !Array.isArray(index.entities)) {
|
|
79
|
-
return [
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
254
|
+
return [sourcesEntry()];
|
|
255
|
+
}
|
|
256
|
+
const byPrefixed = new Map<string, PackIndexEntity>();
|
|
257
|
+
for (const entity of index.entities) {
|
|
258
|
+
const key = entity.prefixed ?? entity.name;
|
|
259
|
+
// A punned subject is indexed as two facets sharing one key; the schema
|
|
260
|
+
// facet is the one a collection entry means.
|
|
261
|
+
if (!byPrefixed.has(key) || entity.box === "tbox")
|
|
262
|
+
byPrefixed.set(key, entity);
|
|
88
263
|
}
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
264
|
+
const candidates = listing.sources.flatMap((ref) =>
|
|
265
|
+
listSlice(index, byPrefixed, ref),
|
|
266
|
+
);
|
|
267
|
+
candidates.sort((a, b) => {
|
|
268
|
+
const priority = (r: ListedResource) => r.annotations?.priority ?? 0;
|
|
269
|
+
const boxRank = (r: ListedResource) =>
|
|
270
|
+
r._meta?.["pragma/box"] === "tbox" ? 0 : 1;
|
|
271
|
+
return (
|
|
272
|
+
priority(b) - priority(a) ||
|
|
273
|
+
boxRank(a) - boxRank(b) ||
|
|
274
|
+
a.uri.localeCompare(b.uri)
|
|
275
|
+
);
|
|
92
276
|
});
|
|
93
|
-
// Dedup by resource URI
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
//
|
|
277
|
+
// Dedup by resource URI. Two slices may contribute the same entry (a story's
|
|
278
|
+
// collection IS one of the ontology's schema entries), and an OWL-punned
|
|
279
|
+
// subject (a class/property IRI ALSO asserted as a domain individual) is
|
|
280
|
+
// indexed as TWO entities — a tbox and an abox facet — that compact to the
|
|
281
|
+
// SAME `pragma:<uri>` (A8). The sort above puts the heavier slice, then the
|
|
282
|
+
// tbox facet, first, so keeping the first occurrence per URI surfaces the
|
|
283
|
+
// richer entry (its instance count and higher priority) and drops the rest.
|
|
99
284
|
const seen = new Set<string>();
|
|
100
285
|
const resources: ListedResource[] = [];
|
|
101
|
-
for (const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const isTbox = entity.box === "tbox";
|
|
106
|
-
// Port of the old shell's `_meta` taxonomy: `pragma/box` + a priority that
|
|
107
|
-
// ranks schema (classes/properties) above individuals, so an agent browsing
|
|
108
|
-
// the resource list sees the schema first. `pragma/instanceCount` is the
|
|
109
|
-
// per-type count carried in the index for a TBox class entry.
|
|
110
|
-
// `instanceCountByType` is keyed by the full type IRI; a TBox class entry's
|
|
111
|
-
// own IRI is that key, so it carries the count of its individuals.
|
|
112
|
-
const instanceCount =
|
|
113
|
-
isTbox && entity.uri ? index.instanceCountByType[entity.uri] : undefined;
|
|
114
|
-
const meta: Record<string, unknown> = {
|
|
115
|
-
"pragma/box": entity.box ?? "abox",
|
|
116
|
-
};
|
|
117
|
-
if (typeof instanceCount === "number") {
|
|
118
|
-
meta["pragma/instanceCount"] = instanceCount;
|
|
119
|
-
}
|
|
120
|
-
resources.push({
|
|
121
|
-
uri,
|
|
122
|
-
name: entity.label || entity.name,
|
|
123
|
-
...(entity.description ? { description: entity.description } : {}),
|
|
124
|
-
mimeType: "application/json" as const,
|
|
125
|
-
annotations: {
|
|
126
|
-
audience: ASSISTANT_AUDIENCE,
|
|
127
|
-
priority: isTbox ? CLASS_PRIORITY : INDIVIDUAL_PRIORITY,
|
|
128
|
-
},
|
|
129
|
-
_meta: meta,
|
|
130
|
-
});
|
|
286
|
+
for (const candidate of candidates) {
|
|
287
|
+
if (seen.has(candidate.uri)) continue;
|
|
288
|
+
seen.add(candidate.uri);
|
|
289
|
+
resources.push(candidate);
|
|
131
290
|
}
|
|
132
291
|
return resources;
|
|
133
292
|
}
|
|
134
293
|
|
|
135
294
|
/**
|
|
136
|
-
*
|
|
137
|
-
*
|
|
295
|
+
* The per-type ranking weights a declared listing implies.
|
|
296
|
+
*
|
|
297
|
+
* A slice that names a `type` is an opinion about that type's importance, and
|
|
298
|
+
* the SAME opinion should decide both what the listing surfaces first and what
|
|
299
|
+
* autocomplete offers first — one declaration, two readers. A slice that names
|
|
300
|
+
* only a `box` carries no opinion about a candidate URI, so it contributes none.
|
|
301
|
+
*
|
|
302
|
+
* @param listing - The union of the modules' declared slices.
|
|
303
|
+
* @returns Prefixed type → weight (heaviest declaration wins on a repeat).
|
|
138
304
|
*/
|
|
305
|
+
export function completionWeights(
|
|
306
|
+
listing: McpListable,
|
|
307
|
+
): Record<string, number> {
|
|
308
|
+
const weights: Record<string, number> = {};
|
|
309
|
+
for (const ref of listing.sources) {
|
|
310
|
+
if (!ref.type) continue;
|
|
311
|
+
const weight = ref.weight ?? DEFAULT_WEIGHT;
|
|
312
|
+
weights[ref.type] = Math.max(weights[ref.type] ?? 0, weight);
|
|
313
|
+
}
|
|
314
|
+
return weights;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Rank URI autocomplete candidates against a partial query (case-insensitive
|
|
319
|
+
* over both the prefixed URI and the label; exact > prefix > substring).
|
|
320
|
+
*
|
|
321
|
+
* UNCAPPED on purpose. The SDK derives the wire's `total`/`hasMore` from the
|
|
322
|
+
* array this returns — it slices to 100, reports `total: values.length` and
|
|
323
|
+
* `hasMore: values.length > 100` — so pre-truncating here made a truncated
|
|
324
|
+
* result describe itself as complete: `ds:` answered
|
|
325
|
+
* `{ values: 50, total: 50, hasMore: false }` while 499 entities matched.
|
|
326
|
+
* Completion keeps offering EVERY entity: it is the discovery path for the
|
|
327
|
+
* individuals the curated listing no longer enumerates.
|
|
328
|
+
*
|
|
329
|
+
* @param entities - The index entities to rank.
|
|
330
|
+
* @param query - The partial the agent typed.
|
|
331
|
+
* @param weights - Prefixed type → weight, breaking ties between equal matches.
|
|
332
|
+
* @returns Every matching prefixed URI, best first.
|
|
333
|
+
*/
|
|
334
|
+
/**
|
|
335
|
+
* The weight of an entity across EVERY type it is declared under.
|
|
336
|
+
*
|
|
337
|
+
* `PackIndexEntity.type` is one lexically chosen primary among `types`, and the
|
|
338
|
+
* listing's own `matchesType` already honours both. Weighing only the primary
|
|
339
|
+
* therefore ignored a weight declared for a secondary type, and let ranking
|
|
340
|
+
* shift when an unrelated, lexically earlier type was added to an entity.
|
|
341
|
+
*
|
|
342
|
+
* The LOWEST declared weight wins: a weight below the default is a demotion, and
|
|
343
|
+
* a demotion that any membership asks for should not be cancelled by another
|
|
344
|
+
* membership that simply never asked for anything. Types with no declared weight
|
|
345
|
+
* do not vote, so an entity nobody weighted keeps the default.
|
|
346
|
+
*/
|
|
347
|
+
function effectiveWeight(
|
|
348
|
+
entity: PackIndexEntity,
|
|
349
|
+
weights: Readonly<Record<string, number>>,
|
|
350
|
+
): number {
|
|
351
|
+
const memberships = entity.types ?? [entity.type];
|
|
352
|
+
const declared = memberships
|
|
353
|
+
.map((type) => weights[type])
|
|
354
|
+
.filter((weight): weight is number => weight !== undefined);
|
|
355
|
+
return declared.length > 0 ? Math.min(...declared) : DEFAULT_WEIGHT;
|
|
356
|
+
}
|
|
357
|
+
|
|
139
358
|
export function rankUriCompletions(
|
|
140
|
-
entities: readonly
|
|
359
|
+
entities: readonly PackIndexEntity[],
|
|
141
360
|
query: string,
|
|
142
|
-
|
|
361
|
+
weights: Readonly<Record<string, number>> = {},
|
|
143
362
|
): string[] {
|
|
144
363
|
const needle = query.toLowerCase();
|
|
145
364
|
const score = (field: string): number =>
|
|
@@ -150,18 +369,28 @@ export function rankUriCompletions(
|
|
|
150
369
|
: field.includes(needle)
|
|
151
370
|
? 1
|
|
152
371
|
: 0;
|
|
153
|
-
const scored: { prefixed: string; score: number }[] = [];
|
|
372
|
+
const scored: { prefixed: string; score: number; weight: number }[] = [];
|
|
154
373
|
for (const entity of entities) {
|
|
155
374
|
const prefixed = entity.prefixed ?? entity.name;
|
|
156
375
|
const uriScore = score(prefixed.toLowerCase());
|
|
157
376
|
const labelScore = entity.label ? score(entity.label.toLowerCase()) : 0;
|
|
158
377
|
const best = Math.max(uriScore, labelScore);
|
|
159
|
-
if (best > 0)
|
|
378
|
+
if (best > 0) {
|
|
379
|
+
scored.push({
|
|
380
|
+
prefixed,
|
|
381
|
+
score: best,
|
|
382
|
+
weight: effectiveWeight(entity, weights),
|
|
383
|
+
});
|
|
384
|
+
}
|
|
160
385
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
386
|
+
// Match quality first, then the DECLARED weight, then the alphabet. The
|
|
387
|
+
// weight step is what stops 86 `…-close_button` subcomponents from burying
|
|
388
|
+
// `ds:global.component.button` on the strength of their spelling alone.
|
|
389
|
+
scored.sort(
|
|
390
|
+
(a, b) =>
|
|
391
|
+
b.score - a.score ||
|
|
392
|
+
b.weight - a.weight ||
|
|
393
|
+
a.prefixed.localeCompare(b.prefixed),
|
|
165
394
|
);
|
|
166
395
|
const seen = new Set<string>();
|
|
167
396
|
const ranked: string[] = [];
|
|
@@ -169,11 +398,24 @@ export function rankUriCompletions(
|
|
|
169
398
|
if (seen.has(prefixed)) continue;
|
|
170
399
|
seen.add(prefixed);
|
|
171
400
|
ranked.push(prefixed);
|
|
172
|
-
if (ranked.length >= limit) break;
|
|
173
401
|
}
|
|
174
402
|
return ranked;
|
|
175
403
|
}
|
|
176
404
|
|
|
405
|
+
/**
|
|
406
|
+
* The union of every module's declared listing.
|
|
407
|
+
*
|
|
408
|
+
* @param modules - The effective capability modules.
|
|
409
|
+
* @returns One listing holding every declared slice, in module order.
|
|
410
|
+
*/
|
|
411
|
+
export function collectListable(
|
|
412
|
+
modules: readonly CapabilityModule[],
|
|
413
|
+
): McpListable {
|
|
414
|
+
return {
|
|
415
|
+
sources: modules.flatMap((module) => module.mcpListable?.sources ?? []),
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
|
|
177
419
|
/** Read the single `uri` template variable, tolerating array expansion. */
|
|
178
420
|
function readUriVariable(value: string | string[] | undefined): string {
|
|
179
421
|
const uri = Array.isArray(value) ? value.at(0) : value;
|
|
@@ -190,23 +432,35 @@ export const resourceProvider: McpResourceProvider = {
|
|
|
190
432
|
// The single authoring point for the template id — the surface emitter reads
|
|
191
433
|
// this so `mcpSurface.resources` cannot drift from what `register` installs.
|
|
192
434
|
surface: { templates: [URI_TEMPLATE] },
|
|
193
|
-
async register(server, runtime) {
|
|
435
|
+
async register(server, runtime, modules) {
|
|
194
436
|
const { ResourceTemplate } = await import(
|
|
195
437
|
"@modelcontextprotocol/sdk/server/mcp.js"
|
|
196
438
|
);
|
|
197
439
|
const { McpError, ErrorCode } = await import(
|
|
198
440
|
"@modelcontextprotocol/sdk/types.js"
|
|
199
441
|
);
|
|
442
|
+
// The index of the pack the boot decision names — `undefined` when the
|
|
443
|
+
// store is unavailable, which `buildResourceList` renders as the recovery
|
|
444
|
+
// entry rather than a catalogue of unreadable URIs.
|
|
445
|
+
const activeIndex = async (): Promise<PackIndex | undefined> =>
|
|
446
|
+
readPackIndex(resolveSources(await runtime.loadConfig(), runtime.cwd));
|
|
447
|
+
// What the SERVER lists is the union of what its modules declare — not what
|
|
448
|
+
// this one module knows. Collected once, at registration.
|
|
449
|
+
const listing = collectListable(modules);
|
|
450
|
+
const weights = completionWeights(listing);
|
|
451
|
+
|
|
200
452
|
const template = new ResourceTemplate(URI_TEMPLATE, {
|
|
201
453
|
list: async () => ({
|
|
202
|
-
resources: buildResourceList(
|
|
454
|
+
resources: buildResourceList(await activeIndex(), listing),
|
|
203
455
|
}),
|
|
204
456
|
complete: {
|
|
457
|
+
// Uncapped: the SDK slices to 100 and derives `total`/`hasMore` from
|
|
458
|
+
// the full array, so returning it is what makes those numbers honest.
|
|
205
459
|
uri: async (value: string) =>
|
|
206
460
|
rankUriCompletions(
|
|
207
|
-
|
|
461
|
+
(await activeIndex())?.entities ?? [],
|
|
208
462
|
value,
|
|
209
|
-
|
|
463
|
+
weights,
|
|
210
464
|
),
|
|
211
465
|
},
|
|
212
466
|
});
|
|
@@ -214,20 +468,42 @@ export const resourceProvider: McpResourceProvider = {
|
|
|
214
468
|
server.registerResource(
|
|
215
469
|
"graph-entity",
|
|
216
470
|
template,
|
|
217
|
-
|
|
471
|
+
// `text/turtle` because that is what the body IS. The surface used to
|
|
472
|
+
// claim `application/json` for a graph, and paid ~95 bytes of wrapper per
|
|
473
|
+
// named node to do it — one button read carried ~6.1 KB of pure structure.
|
|
474
|
+
// Turtle spends the prefixes once, writes each term as itself, and says
|
|
475
|
+
// IRI-versus-literal in syntax rather than in a `termType` field.
|
|
476
|
+
{ description: TEMPLATE_DESCRIPTION, mimeType: ENTITY_MIME_TYPE },
|
|
218
477
|
async (
|
|
219
478
|
url: URL,
|
|
220
479
|
variables: Record<string, string | string[] | undefined>,
|
|
221
480
|
) => {
|
|
222
481
|
try {
|
|
223
482
|
const uri = readUriVariable(variables.uri);
|
|
483
|
+
// The recovery entry is a real resource, not a label. It is the ONLY
|
|
484
|
+
// thing a server with no usable index advertises, and reading it used
|
|
485
|
+
// to fail `INVALID_INPUT — Invalid uri "sources"`: the one resource on
|
|
486
|
+
// offer refused to be read, so the hint that explains the cold store
|
|
487
|
+
// was unreachable from the surface that showed it.
|
|
488
|
+
if (uri === SOURCES_VARIABLE) {
|
|
489
|
+
return {
|
|
490
|
+
contents: [
|
|
491
|
+
{
|
|
492
|
+
uri: url.href,
|
|
493
|
+
mimeType: RECOVERY_MIME_TYPE,
|
|
494
|
+
text: SOURCES_RECOVERY,
|
|
495
|
+
},
|
|
496
|
+
],
|
|
497
|
+
};
|
|
498
|
+
}
|
|
224
499
|
const entity = await readEntity(runtime, uri);
|
|
500
|
+
const { prefixes } = await runtime.store.get();
|
|
225
501
|
return {
|
|
226
502
|
contents: [
|
|
227
503
|
{
|
|
228
504
|
uri: url.href,
|
|
229
|
-
mimeType:
|
|
230
|
-
text:
|
|
505
|
+
mimeType: ENTITY_MIME_TYPE,
|
|
506
|
+
text: toTurtle(entity, prefixes),
|
|
231
507
|
},
|
|
232
508
|
],
|
|
233
509
|
};
|