@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
|
@@ -9,9 +9,22 @@
|
|
|
9
9
|
* `graph inspect` uses — so a resource read and a `graph inspect` of the same
|
|
10
10
|
* URI return identical content (the mirror contract).
|
|
11
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.
|
|
22
|
+
*
|
|
12
23
|
* Degradation (Risk4): on a missing or legacy (pre-v2) index the listing returns
|
|
13
24
|
* a single "run `pragma sources update`" hint — never a live re-index of the
|
|
14
|
-
* 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).
|
|
15
28
|
*
|
|
16
29
|
* The MCP SDK's `ResourceTemplate` is dynamic-imported inside `register` so this
|
|
17
30
|
* module — reachable on the capabilities import graph — never pulls the SDK onto
|
|
@@ -19,22 +32,55 @@
|
|
|
19
32
|
*/
|
|
20
33
|
|
|
21
34
|
import { BIN_NAME } from "../../constants.js";
|
|
22
|
-
import {
|
|
35
|
+
import {
|
|
36
|
+
matchesType,
|
|
37
|
+
readPackIndex,
|
|
38
|
+
} from "../../kernel/completion/entitySource.js";
|
|
23
39
|
import { asPragmaError } from "../../kernel/error/fromTaskError.js";
|
|
24
|
-
import { PragmaError } from "../../kernel/error/
|
|
40
|
+
import { PragmaError } from "../../kernel/error/index.js";
|
|
25
41
|
import { mcpErrorFrom } from "../../kernel/project/mcp/mcpError.js";
|
|
26
|
-
import
|
|
42
|
+
import { toTurtle } from "../../kernel/render/turtle.js";
|
|
43
|
+
import type {
|
|
44
|
+
PackIndex,
|
|
45
|
+
PackIndexEntity,
|
|
46
|
+
} from "../../kernel/runtime/graphpack/types.js";
|
|
27
47
|
import { readEntity } from "../../kernel/runtime/readEntity.js";
|
|
28
48
|
import { resolveSources } from "../../kernel/runtime/resolveSources.js";
|
|
29
|
-
import type {
|
|
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;
|
|
30
66
|
|
|
31
|
-
/**
|
|
32
|
-
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";
|
|
33
71
|
|
|
34
|
-
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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";
|
|
38
84
|
|
|
39
85
|
/**
|
|
40
86
|
* The `pragma:` URI scheme + the single reserved-expansion template variable.
|
|
@@ -52,109 +98,267 @@ const INDIVIDUAL_PRIORITY = 0.3;
|
|
|
52
98
|
const URI_TEMPLATE = "pragma:{+uri}";
|
|
53
99
|
|
|
54
100
|
const TEMPLATE_DESCRIPTION =
|
|
55
|
-
"Knowledge-graph entities from the local pack. Read any entry by
|
|
56
|
-
"URI (e.g. pragma:ds:button); autocomplete
|
|
57
|
-
|
|
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\`.`;
|
|
58
106
|
|
|
59
107
|
/** Agent-navigability annotations mirrored onto a listed resource. */
|
|
60
108
|
export interface ResourceAnnotations {
|
|
61
|
-
/** MCP audience roles (the SDK's literal union)
|
|
109
|
+
/** MCP audience roles (the SDK's literal union). */
|
|
62
110
|
readonly audience: ("user" | "assistant")[];
|
|
111
|
+
/** The declared weight of the slice that contributed this entry (0–1). */
|
|
63
112
|
readonly priority: number;
|
|
64
113
|
}
|
|
65
114
|
|
|
66
|
-
/**
|
|
67
|
-
|
|
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"];
|
|
68
124
|
|
|
69
125
|
/** One resource entry in the listing. */
|
|
70
126
|
export interface ListedResource {
|
|
71
127
|
readonly uri: string;
|
|
128
|
+
/** The STABLE prefixed URI (`ds:Component`) — an identifier, not a label. */
|
|
72
129
|
readonly name: string;
|
|
130
|
+
/** The human label (MCP `title`), when the index carries one. */
|
|
131
|
+
readonly title?: string;
|
|
73
132
|
readonly description?: string;
|
|
74
|
-
readonly mimeType:
|
|
75
|
-
/** Audience +
|
|
133
|
+
readonly mimeType: typeof ENTITY_MIME_TYPE | typeof RECOVERY_MIME_TYPE;
|
|
134
|
+
/** Audience + the declared weight of the slice that listed it. */
|
|
76
135
|
readonly annotations?: ResourceAnnotations;
|
|
77
|
-
/** Taxonomy metadata: `pragma/box`
|
|
136
|
+
/** Taxonomy metadata: `pragma/box`, `pragma/type`, optional instance count. */
|
|
78
137
|
readonly _meta?: Record<string, unknown>;
|
|
79
138
|
}
|
|
80
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
|
+
|
|
81
238
|
/**
|
|
82
239
|
* Build the resource listing from the storeless pack index.
|
|
83
240
|
*
|
|
84
241
|
* @param index - The active pack index, or `undefined` when none is reachable.
|
|
85
|
-
* @
|
|
242
|
+
* @param listing - The union of the modules' declared slices.
|
|
243
|
+
* @returns One resource per contributed entry, heaviest slice first; a single
|
|
86
244
|
* recovery entry when the index is missing or pre-v2 (no enrichment).
|
|
87
245
|
*/
|
|
88
246
|
export function buildResourceList(
|
|
89
247
|
index: PackIndex | undefined,
|
|
248
|
+
listing: McpListable,
|
|
90
249
|
): ListedResource[] {
|
|
91
250
|
// readPackIndex returns raw JSON.parse output (no zod), so guard structurally:
|
|
92
251
|
// a malformed index missing `version` must degrade to the recovery hint, not
|
|
93
252
|
// fall through to `[...index.entities]` (a TypeError inside the MCP handler).
|
|
94
253
|
if (!index || index.version !== 2 || !Array.isArray(index.entities)) {
|
|
95
|
-
return [
|
|
96
|
-
{
|
|
97
|
-
uri: "pragma:sources",
|
|
98
|
-
name: "Store not indexed",
|
|
99
|
-
description: `No enriched entity index. Run \`${BIN_NAME} sources update\` to build it.`,
|
|
100
|
-
mimeType: "application/json",
|
|
101
|
-
},
|
|
102
|
-
];
|
|
254
|
+
return [sourcesEntry()];
|
|
103
255
|
}
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
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);
|
|
263
|
+
}
|
|
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
|
+
);
|
|
107
276
|
});
|
|
108
|
-
// Dedup by resource URI
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
//
|
|
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.
|
|
114
284
|
const seen = new Set<string>();
|
|
115
285
|
const resources: ListedResource[] = [];
|
|
116
|
-
for (const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
const isTbox = entity.box === "tbox";
|
|
121
|
-
// Port of the old shell's `_meta` taxonomy: `pragma/box` + a priority that
|
|
122
|
-
// ranks schema (classes/properties) above individuals, so an agent browsing
|
|
123
|
-
// the resource list sees the schema first. `pragma/instanceCount` is the
|
|
124
|
-
// per-type count carried in the index for a TBox class entry.
|
|
125
|
-
// `instanceCountByType` is keyed by the full type IRI; a TBox class entry's
|
|
126
|
-
// own IRI is that key, so it carries the count of its individuals.
|
|
127
|
-
const instanceCount =
|
|
128
|
-
isTbox && entity.uri ? index.instanceCountByType[entity.uri] : undefined;
|
|
129
|
-
const meta: Record<string, unknown> = {
|
|
130
|
-
"pragma/box": entity.box ?? "abox",
|
|
131
|
-
};
|
|
132
|
-
if (typeof instanceCount === "number") {
|
|
133
|
-
meta["pragma/instanceCount"] = instanceCount;
|
|
134
|
-
}
|
|
135
|
-
resources.push({
|
|
136
|
-
uri,
|
|
137
|
-
name: entity.label || entity.name,
|
|
138
|
-
...(entity.description ? { description: entity.description } : {}),
|
|
139
|
-
mimeType: "application/json" as const,
|
|
140
|
-
annotations: {
|
|
141
|
-
audience: ASSISTANT_AUDIENCE,
|
|
142
|
-
priority: isTbox ? CLASS_PRIORITY : INDIVIDUAL_PRIORITY,
|
|
143
|
-
},
|
|
144
|
-
_meta: meta,
|
|
145
|
-
});
|
|
286
|
+
for (const candidate of candidates) {
|
|
287
|
+
if (seen.has(candidate.uri)) continue;
|
|
288
|
+
seen.add(candidate.uri);
|
|
289
|
+
resources.push(candidate);
|
|
146
290
|
}
|
|
147
291
|
return resources;
|
|
148
292
|
}
|
|
149
293
|
|
|
150
294
|
/**
|
|
151
|
-
*
|
|
152
|
-
*
|
|
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).
|
|
153
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
|
+
|
|
154
358
|
export function rankUriCompletions(
|
|
155
|
-
entities: readonly
|
|
359
|
+
entities: readonly PackIndexEntity[],
|
|
156
360
|
query: string,
|
|
157
|
-
|
|
361
|
+
weights: Readonly<Record<string, number>> = {},
|
|
158
362
|
): string[] {
|
|
159
363
|
const needle = query.toLowerCase();
|
|
160
364
|
const score = (field: string): number =>
|
|
@@ -165,18 +369,28 @@ export function rankUriCompletions(
|
|
|
165
369
|
: field.includes(needle)
|
|
166
370
|
? 1
|
|
167
371
|
: 0;
|
|
168
|
-
const scored: { prefixed: string; score: number }[] = [];
|
|
372
|
+
const scored: { prefixed: string; score: number; weight: number }[] = [];
|
|
169
373
|
for (const entity of entities) {
|
|
170
374
|
const prefixed = entity.prefixed ?? entity.name;
|
|
171
375
|
const uriScore = score(prefixed.toLowerCase());
|
|
172
376
|
const labelScore = entity.label ? score(entity.label.toLowerCase()) : 0;
|
|
173
377
|
const best = Math.max(uriScore, labelScore);
|
|
174
|
-
if (best > 0)
|
|
378
|
+
if (best > 0) {
|
|
379
|
+
scored.push({
|
|
380
|
+
prefixed,
|
|
381
|
+
score: best,
|
|
382
|
+
weight: effectiveWeight(entity, weights),
|
|
383
|
+
});
|
|
384
|
+
}
|
|
175
385
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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),
|
|
180
394
|
);
|
|
181
395
|
const seen = new Set<string>();
|
|
182
396
|
const ranked: string[] = [];
|
|
@@ -184,11 +398,24 @@ export function rankUriCompletions(
|
|
|
184
398
|
if (seen.has(prefixed)) continue;
|
|
185
399
|
seen.add(prefixed);
|
|
186
400
|
ranked.push(prefixed);
|
|
187
|
-
if (ranked.length >= limit) break;
|
|
188
401
|
}
|
|
189
402
|
return ranked;
|
|
190
403
|
}
|
|
191
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
|
+
|
|
192
419
|
/** Read the single `uri` template variable, tolerating array expansion. */
|
|
193
420
|
function readUriVariable(value: string | string[] | undefined): string {
|
|
194
421
|
const uri = Array.isArray(value) ? value.at(0) : value;
|
|
@@ -205,7 +432,7 @@ export const resourceProvider: McpResourceProvider = {
|
|
|
205
432
|
// The single authoring point for the template id — the surface emitter reads
|
|
206
433
|
// this so `mcpSurface.resources` cannot drift from what `register` installs.
|
|
207
434
|
surface: { templates: [URI_TEMPLATE] },
|
|
208
|
-
async register(server, runtime) {
|
|
435
|
+
async register(server, runtime, modules) {
|
|
209
436
|
const { ResourceTemplate } = await import(
|
|
210
437
|
"@modelcontextprotocol/sdk/server/mcp.js"
|
|
211
438
|
);
|
|
@@ -217,15 +444,23 @@ export const resourceProvider: McpResourceProvider = {
|
|
|
217
444
|
// entry rather than a catalogue of unreadable URIs.
|
|
218
445
|
const activeIndex = async (): Promise<PackIndex | undefined> =>
|
|
219
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);
|
|
220
451
|
|
|
221
452
|
const template = new ResourceTemplate(URI_TEMPLATE, {
|
|
222
|
-
list: async () => ({
|
|
453
|
+
list: async () => ({
|
|
454
|
+
resources: buildResourceList(await activeIndex(), listing),
|
|
455
|
+
}),
|
|
223
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.
|
|
224
459
|
uri: async (value: string) =>
|
|
225
460
|
rankUriCompletions(
|
|
226
461
|
(await activeIndex())?.entities ?? [],
|
|
227
462
|
value,
|
|
228
|
-
|
|
463
|
+
weights,
|
|
229
464
|
),
|
|
230
465
|
},
|
|
231
466
|
});
|
|
@@ -233,20 +468,42 @@ export const resourceProvider: McpResourceProvider = {
|
|
|
233
468
|
server.registerResource(
|
|
234
469
|
"graph-entity",
|
|
235
470
|
template,
|
|
236
|
-
|
|
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 },
|
|
237
477
|
async (
|
|
238
478
|
url: URL,
|
|
239
479
|
variables: Record<string, string | string[] | undefined>,
|
|
240
480
|
) => {
|
|
241
481
|
try {
|
|
242
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
|
+
}
|
|
243
499
|
const entity = await readEntity(runtime, uri);
|
|
500
|
+
const { prefixes } = await runtime.store.get();
|
|
244
501
|
return {
|
|
245
502
|
contents: [
|
|
246
503
|
{
|
|
247
504
|
uri: url.href,
|
|
248
|
-
mimeType:
|
|
249
|
-
text:
|
|
505
|
+
mimeType: ENTITY_MIME_TYPE,
|
|
506
|
+
text: toTurtle(entity, prefixes),
|
|
250
507
|
},
|
|
251
508
|
],
|
|
252
509
|
};
|