@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
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The documented examples, EXECUTED against the shipped pack (PROTECTED).
|
|
3
|
+
*
|
|
4
|
+
* The existing documentation suite validates example GRAMMAR — that a `cmd`
|
|
5
|
+
* parses as a command this CLI declares. Grammar is not truth: the previous
|
|
6
|
+
* `graph inspect ds:button` examples passed that check for as long as they
|
|
7
|
+
* existed while 404ing for every user who copied them, and the `graph query`
|
|
8
|
+
* ASK example passed while quietly answering `false`.
|
|
9
|
+
*
|
|
10
|
+
* So these run the examples as WRITTEN, against the embedded graph, and assert
|
|
11
|
+
* they answer. An example is a promise to a stranger; this is the only check
|
|
12
|
+
* that reads it as one.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
16
|
+
import { verbKey } from "../../kernel/packs/uniqueness.js";
|
|
17
|
+
import { bootRuntime } from "../../kernel/runtime/boot.js";
|
|
18
|
+
import type { InspectResult } from "../../kernel/runtime/readEntity.js";
|
|
19
|
+
import type { PragmaRuntime } from "../../kernel/runtime/types.js";
|
|
20
|
+
import type { VerbSpec } from "../../kernel/spec/types.js";
|
|
21
|
+
import { TEST_FLAGS } from "../../testing/helpers/projectCli.js";
|
|
22
|
+
import { graphModule } from "./index.js";
|
|
23
|
+
|
|
24
|
+
const verb = (name: string): VerbSpec =>
|
|
25
|
+
graphModule.verbs.find((v) => verbKey(v.path) === name) as VerbSpec;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The name of a verb's single positional, read from the verb rather than
|
|
29
|
+
* retyped — the point of this file is that documentation and code agree, so it
|
|
30
|
+
* should not itself hardcode a name that could drift.
|
|
31
|
+
*/
|
|
32
|
+
const positionalOf = (spec: VerbSpec): string =>
|
|
33
|
+
spec.params.find((p) => p.positional)?.name ?? "";
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The argument an example passes, recovered from the example's own `cmd`.
|
|
37
|
+
*
|
|
38
|
+
* Read from the declaration rather than retyped, so editing an example without
|
|
39
|
+
* editing this file cannot leave the test asserting the old one.
|
|
40
|
+
*/
|
|
41
|
+
function exampleArg(spec: VerbSpec, index: number): string {
|
|
42
|
+
const cmd = spec.examples?.[index]?.cmd ?? "";
|
|
43
|
+
const quoted = cmd.match(/"([^"]*)"/);
|
|
44
|
+
if (quoted?.[1]) return quoted[1];
|
|
45
|
+
return cmd.trim().split(/\s+/).slice(3).join(" ");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// ONE store for the file. Booting per case tripled this suite's cost against
|
|
49
|
+
// the shipped pack for no extra coverage, and the whole package already flakes
|
|
50
|
+
// under parallel contention — a test that need not add load should not.
|
|
51
|
+
let rt: PragmaRuntime;
|
|
52
|
+
beforeAll(() => {
|
|
53
|
+
rt = bootRuntime(TEST_FLAGS);
|
|
54
|
+
});
|
|
55
|
+
afterAll(async () => {
|
|
56
|
+
(await rt.store.get()).store.dispose();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
describe("documented examples resolve against the shipped graph (PROTECTED)", () => {
|
|
60
|
+
it("runs every `graph inspect` example as written", async () => {
|
|
61
|
+
const inspect = verb("graph inspect");
|
|
62
|
+
expect(inspect.examples?.length).toBeGreaterThan(0);
|
|
63
|
+
|
|
64
|
+
for (const [index] of (inspect.examples ?? []).entries()) {
|
|
65
|
+
const uri = exampleArg(inspect, index);
|
|
66
|
+
const result = (await inspect.run(
|
|
67
|
+
{ [positionalOf(inspect)]: uri },
|
|
68
|
+
rt,
|
|
69
|
+
)) as InspectResult;
|
|
70
|
+
// The prefixed and absolute forms are two spellings of one subject.
|
|
71
|
+
expect(
|
|
72
|
+
result.uri,
|
|
73
|
+
`example ${index} (${uri}) did not resolve to the documented entity`,
|
|
74
|
+
).toBe("https://ds.canonical.com/global.component.button");
|
|
75
|
+
expect(result.groups.length).toBeGreaterThan(0);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("runs the `graph query` ASK example and gets a true answer", async () => {
|
|
80
|
+
// The old example returned `false` — syntactically fine, semantically a lie
|
|
81
|
+
// about the graph. Asserting the ANSWER is what catches that.
|
|
82
|
+
const query = verb("graph query");
|
|
83
|
+
const ask = (query.examples ?? []).findIndex((e) => e.cmd.includes("ASK"));
|
|
84
|
+
expect(ask, "no ASK example to execute").toBeGreaterThanOrEqual(0);
|
|
85
|
+
|
|
86
|
+
const result = (await query.run(
|
|
87
|
+
{ [positionalOf(query)]: exampleArg(query, ask) },
|
|
88
|
+
rt,
|
|
89
|
+
)) as { type: string; result?: boolean };
|
|
90
|
+
|
|
91
|
+
expect(result.type).toBe("ask");
|
|
92
|
+
expect(result.result, "the documented ASK example answers false").toBe(
|
|
93
|
+
true,
|
|
94
|
+
);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("runs the `graph query` SELECT example and gets rows", async () => {
|
|
98
|
+
const query = verb("graph query");
|
|
99
|
+
const result = (await query.run(
|
|
100
|
+
{ [positionalOf(query)]: exampleArg(query, 0) },
|
|
101
|
+
rt,
|
|
102
|
+
)) as { type: string; bindings?: unknown[] };
|
|
103
|
+
|
|
104
|
+
expect(result.type).toBe("select");
|
|
105
|
+
expect(result.bindings?.length ?? 0).toBeGreaterThan(0);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* (the raw SPARQL escape hatch, PR6). The covenant blesses both.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { CapabilityModule } from "../../kernel/spec/
|
|
6
|
+
import type { CapabilityModule } from "../../kernel/spec/index.js";
|
|
7
7
|
import { resourceProvider } from "../resources/index.js";
|
|
8
8
|
import { graphInspectVerb } from "./inspect.verb.js";
|
|
9
9
|
import { graphQueryVerb } from "./query.verb.js";
|
|
@@ -1,38 +1,86 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Formatters for `graph inspect` —
|
|
2
|
+
* Formatters for `graph inspect` — the entity's neighbourhood in three shapes.
|
|
3
|
+
*
|
|
4
|
+
* Terms arrive ALREADY compacted and named: the reader does it against the
|
|
5
|
+
* store's own merged prefix map, which is the map the graph was actually built
|
|
6
|
+
* with, so these formatters neither carry a prefix map nor re-derive one. They
|
|
7
|
+
* choose between the forms the reader supplies and nothing more.
|
|
3
8
|
*/
|
|
4
9
|
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
import { toTurtle } from "../../kernel/render/turtle.js";
|
|
11
|
+
import type {
|
|
12
|
+
InboundGroup,
|
|
13
|
+
InspectResult,
|
|
14
|
+
ReadTerm,
|
|
15
|
+
} from "../../kernel/runtime/readEntity.js";
|
|
16
|
+
import type { Formatters } from "../../kernel/spec/index.js";
|
|
9
17
|
|
|
10
|
-
|
|
11
|
-
|
|
18
|
+
/** The short form of a term: prefixed when there is one, else the raw value. */
|
|
19
|
+
const short = (term: ReadTerm): string => term.prefixed ?? term.value;
|
|
20
|
+
|
|
21
|
+
/** A term as a reader should see it — short form, with its name when known. */
|
|
22
|
+
const named = (term: ReadTerm): string =>
|
|
23
|
+
term.title ? `${short(term)} (${term.title})` : short(term);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* `predicate (330, sample of 5)` — the count is the truth, the list is not.
|
|
27
|
+
*
|
|
28
|
+
* A roster and a truncated relation read differently on purpose: "sample of"
|
|
29
|
+
* tells a reader that paging will not produce the rest and the noun's list verb
|
|
30
|
+
* is where the full set lives, where "showing" invites them to ask for more.
|
|
31
|
+
*/
|
|
32
|
+
function inboundHeading(group: InboundGroup): string {
|
|
33
|
+
if (group.sampled) {
|
|
34
|
+
return `${short(group.predicate)} (${group.count}, sample of ${group.subjects.length})`;
|
|
35
|
+
}
|
|
36
|
+
const suffix = group.truncated
|
|
37
|
+
? `${group.count}, showing ${group.subjects.length}`
|
|
38
|
+
: `${group.count}`;
|
|
39
|
+
return `${short(group.predicate)} (${suffix})`;
|
|
40
|
+
}
|
|
12
41
|
|
|
13
42
|
export const inspectFormatters: Formatters<InspectResult> = {
|
|
14
43
|
plain(data) {
|
|
15
44
|
const title = data.label
|
|
16
|
-
? `${
|
|
17
|
-
:
|
|
45
|
+
? `${short({ termType: "NamedNode", value: data.uri, ...(data.prefixed ? { prefixed: data.prefixed } : {}) })} — ${data.label}`
|
|
46
|
+
: (data.prefixed ?? data.uri);
|
|
18
47
|
const lines = [title, "═".repeat(Math.max(title.length, 24)), ""];
|
|
19
48
|
for (const group of data.groups) {
|
|
20
|
-
lines.push(` ${
|
|
21
|
-
for (const object of group.objects) lines.push(` ${
|
|
49
|
+
lines.push(` ${short(group.predicate)}:`);
|
|
50
|
+
for (const object of group.objects) lines.push(` ${named(object)}`);
|
|
22
51
|
}
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
52
|
+
for (const [via, rows] of Object.entries(data.nested)) {
|
|
53
|
+
lines.push("", ` ${via}:`);
|
|
54
|
+
for (const row of rows) {
|
|
55
|
+
// Values are TERMS; `String(term)` rendered every nested field as
|
|
56
|
+
// `[object Object]`, which made the whole plain-format record unreadable.
|
|
57
|
+
const fields = Object.entries(row)
|
|
58
|
+
.map(([key, value]) => `${key}=${named(value)}`)
|
|
59
|
+
.join(" ");
|
|
60
|
+
lines.push(` ${fields}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (data.inbound.length > 0) {
|
|
64
|
+
lines.push("", " Referenced by:");
|
|
65
|
+
for (const group of data.inbound) {
|
|
66
|
+
lines.push(` ${inboundHeading(group)}`);
|
|
67
|
+
for (const subject of group.subjects) {
|
|
68
|
+
lines.push(` ${named(subject)}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
34
71
|
}
|
|
35
72
|
return lines.join("\n").trimEnd();
|
|
36
73
|
},
|
|
74
|
+
/**
|
|
75
|
+
* The agent-facing format IS Turtle — same bytes the `pragma:{+uri}` resource
|
|
76
|
+
* read serves, which is what keeps the mirror contract meaningful now that the
|
|
77
|
+
* two are no longer both JSON. Measured on one button: 15.8 KB of JSON against
|
|
78
|
+
* 4.5 KB of Turtle for the same neighbourhood.
|
|
79
|
+
*
|
|
80
|
+
* `prefixes` comes from the reader, not from this formatter: it compacted the
|
|
81
|
+
* terms against the store's own merged map, so re-deriving a map here could
|
|
82
|
+
* only disagree with the names already in the payload.
|
|
83
|
+
*/
|
|
84
|
+
llm: (data) => toTurtle(data, data.prefixes),
|
|
37
85
|
json: (data) => JSON.stringify(data, null, 2),
|
|
38
86
|
};
|
|
@@ -41,13 +41,185 @@ describe("graph inspect", () => {
|
|
|
41
41
|
rt,
|
|
42
42
|
)) as InspectResult;
|
|
43
43
|
expect(result.uri).toBe(`${DS}button`);
|
|
44
|
+
expect(result.prefixed).toBe("ds:button");
|
|
44
45
|
const rdfType = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
|
|
45
|
-
const typeGroup = result.groups.find((g) => g.predicate === rdfType);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
const typeGroup = result.groups.find((g) => g.predicate.value === rdfType);
|
|
47
|
+
// The object is a NamedNode, so it compacts and stays addressable.
|
|
48
|
+
expect(typeGroup?.objects[0]).toMatchObject({
|
|
49
|
+
termType: "NamedNode",
|
|
50
|
+
value: `${DS}Component`,
|
|
51
|
+
prefixed: "ds:Component",
|
|
52
|
+
});
|
|
53
|
+
const summary = result.groups.find(
|
|
54
|
+
(g) => g.predicate.value === `${DS}summary`,
|
|
50
55
|
);
|
|
56
|
+
expect(summary?.objects[0]).toMatchObject({
|
|
57
|
+
termType: "Literal",
|
|
58
|
+
value: "Primary action trigger with optional icon and label.",
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it("never compacts a literal, only a named node", async () => {
|
|
63
|
+
// The lossy string view could not tell these apart, so a literal whose text
|
|
64
|
+
// began with a namespace IRI was rewritten into something that read back as
|
|
65
|
+
// an IRI. Reading ke's term view is what closes that: `ds:figmaLink` here
|
|
66
|
+
// holds a STRING that starts with the `ds:` namespace.
|
|
67
|
+
const result = (await inspectVerb.run(
|
|
68
|
+
{ uri: "ds:literalTrap" },
|
|
69
|
+
rt,
|
|
70
|
+
)) as InspectResult;
|
|
71
|
+
const trap = result.groups.find(
|
|
72
|
+
(g) => g.predicate.value === `${DS}figmaLink`,
|
|
73
|
+
);
|
|
74
|
+
expect(trap?.objects[0]?.termType).toBe("Literal");
|
|
75
|
+
expect(trap?.objects[0]?.value).toBe(`${DS}not-an-iri`);
|
|
76
|
+
expect(trap?.objects[0]?.prefixed).toBeUndefined();
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("carries inbound relations with a true count, capped by detail", async () => {
|
|
80
|
+
// `ds:button.icon` is the OBJECT of `ds:hasSubcomponent` — the relation
|
|
81
|
+
// lives on the other side of the arrow, so a subject-only read could never
|
|
82
|
+
// surface who holds this subcomponent.
|
|
83
|
+
const result = (await inspectVerb.run(
|
|
84
|
+
{ uri: "ds:button.icon" },
|
|
85
|
+
rt,
|
|
86
|
+
)) as InspectResult;
|
|
87
|
+
const held = result.inbound.find(
|
|
88
|
+
(g) => g.predicate.value === `${DS}hasSubcomponent`,
|
|
89
|
+
);
|
|
90
|
+
expect(held?.count).toBeGreaterThan(0);
|
|
91
|
+
expect(held?.subjects[0]?.prefixed).toBe("ds:button");
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it("inlines blank nodes as records rather than dead handles", async () => {
|
|
95
|
+
const result = (await inspectVerb.run(
|
|
96
|
+
{ uri: "ds:blankHolder" },
|
|
97
|
+
rt,
|
|
98
|
+
)) as InspectResult;
|
|
99
|
+
// The blank object itself is marked unreachable...
|
|
100
|
+
const via = result.groups.find(
|
|
101
|
+
(g) => g.predicate.value === `${DS}changeLog`,
|
|
102
|
+
);
|
|
103
|
+
expect(via?.objects[0]).toMatchObject({
|
|
104
|
+
termType: "BlankNode",
|
|
105
|
+
addressable: false,
|
|
106
|
+
});
|
|
107
|
+
// ...and its content is served as records instead. Asserted as a SET: the
|
|
108
|
+
// order is content-derived (see the next case), never the input order.
|
|
109
|
+
// Record VALUES are terms, not strings: a record's members are as much part
|
|
110
|
+
// of the graph as the subject's own, and flattening them would reintroduce
|
|
111
|
+
// the IRI-versus-literal ambiguity the term projection exists to close.
|
|
112
|
+
const changes = result.nested["ds:changeLog"] ?? [];
|
|
113
|
+
expect(changes).toHaveLength(2);
|
|
114
|
+
expect(changes.map((row) => row["ds:changeType"]?.value).sort()).toEqual([
|
|
115
|
+
"decision",
|
|
116
|
+
"revision",
|
|
117
|
+
]);
|
|
118
|
+
expect(changes[0]?.["ds:changeType"]?.termType).toBe("Literal");
|
|
119
|
+
// `rdf:type` is hoisted to `type` rather than repeated as a field, and stays
|
|
120
|
+
// a NamedNode — so the Turtle serializer can write it back as `a ds:X`.
|
|
121
|
+
expect(changes[0]?.type).toMatchObject({
|
|
122
|
+
termType: "NamedNode",
|
|
123
|
+
prefixed: "ds:ChangeLogEntry",
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it("counts every inbound edge at summary while listing none", async () => {
|
|
128
|
+
// The cap is what keeps a hub read bounded — this graph's worst is 335
|
|
129
|
+
// inbound edges. `count` must stay the TRUE total at every level: a sample
|
|
130
|
+
// silently passing for the whole set is how "1 implementation" becomes a
|
|
131
|
+
// wrong answer. `ds:global` is the tier both fixture blocks point at.
|
|
132
|
+
const summary = await buildFixtureRuntime({
|
|
133
|
+
ttl: BLOCK_TTL,
|
|
134
|
+
prefixes: BLOCK_PREFIXES,
|
|
135
|
+
detail: "summary",
|
|
136
|
+
});
|
|
137
|
+
const result = (await inspectVerb.run(
|
|
138
|
+
{ uri: "ds:global" },
|
|
139
|
+
summary.rt,
|
|
140
|
+
)) as InspectResult;
|
|
141
|
+
(await summary.rt.store.get()).store.dispose();
|
|
142
|
+
|
|
143
|
+
const tier = result.inbound.find((g) => g.predicate.value === `${DS}tier`);
|
|
144
|
+
expect(result.detail).toBe("summary");
|
|
145
|
+
expect(tier?.count).toBe(2);
|
|
146
|
+
expect(tier?.subjects).toEqual([]);
|
|
147
|
+
expect(tier?.truncated).toBe(true);
|
|
148
|
+
// Blank-node inlining is skipped at summary — it is the expensive half.
|
|
149
|
+
expect(result.nested).toEqual({});
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it("samples a roster instead of listing it, keeping the count exact", async () => {
|
|
153
|
+
// A relation and a roster are not the same kind of edge. `ds:tier` here
|
|
154
|
+
// fans in 22 deep — past the threshold — so the read shows exemplars and
|
|
155
|
+
// says so, rather than paging a list verb's job through a resource read.
|
|
156
|
+
// Listing rosters cost a `detailed` read 19.5 KB on one class of the real
|
|
157
|
+
// graph and 20.9 KB on one tier.
|
|
158
|
+
const detailed = await buildFixtureRuntime({
|
|
159
|
+
ttl: BLOCK_TTL,
|
|
160
|
+
prefixes: BLOCK_PREFIXES,
|
|
161
|
+
detail: "detailed",
|
|
162
|
+
});
|
|
163
|
+
const result = (await inspectVerb.run(
|
|
164
|
+
{ uri: "ds:rosterHub" },
|
|
165
|
+
detailed.rt,
|
|
166
|
+
)) as InspectResult;
|
|
167
|
+
(await detailed.rt.store.get()).store.dispose();
|
|
168
|
+
|
|
169
|
+
const roster = result.inbound.find(
|
|
170
|
+
(g) => g.predicate.value === `${DS}tier`,
|
|
171
|
+
);
|
|
172
|
+
expect(roster?.count).toBe(22);
|
|
173
|
+
expect(roster?.sampled).toBe(true);
|
|
174
|
+
expect(roster?.truncated).toBe(true);
|
|
175
|
+
// Exemplars, not a page — far fewer than the 22 a listed relation would show.
|
|
176
|
+
expect(roster?.subjects.length).toBeLessThan(10);
|
|
177
|
+
expect(roster?.subjects.length).toBeGreaterThan(0);
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it("lists a narrow relation in full, unsampled", async () => {
|
|
181
|
+
// The counterpart: `ds:hasSubcomponent` fans in once, so every subject is
|
|
182
|
+
// part of the answer and none of this bounding applies.
|
|
183
|
+
const result = (await inspectVerb.run(
|
|
184
|
+
{ uri: "ds:button.icon" },
|
|
185
|
+
rt,
|
|
186
|
+
)) as InspectResult;
|
|
187
|
+
const held = result.inbound.find(
|
|
188
|
+
(g) => g.predicate.value === `${DS}hasSubcomponent`,
|
|
189
|
+
);
|
|
190
|
+
expect(held?.sampled).toBeUndefined();
|
|
191
|
+
expect(held?.truncated).toBeUndefined();
|
|
192
|
+
expect(held?.subjects).toHaveLength(held?.count ?? 0);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it("resolves the level from config when no flag is given", async () => {
|
|
196
|
+
// A resource read carries no params, so config is the level it lands on.
|
|
197
|
+
const configured = await buildFixtureRuntime({
|
|
198
|
+
ttl: BLOCK_TTL,
|
|
199
|
+
prefixes: BLOCK_PREFIXES,
|
|
200
|
+
configDetail: "summary",
|
|
201
|
+
detailOrigin: "project",
|
|
202
|
+
});
|
|
203
|
+
const result = (await inspectVerb.run(
|
|
204
|
+
{ uri: "ds:global" },
|
|
205
|
+
configured.rt,
|
|
206
|
+
)) as InspectResult;
|
|
207
|
+
(await configured.rt.store.get()).store.dispose();
|
|
208
|
+
expect(result.detail).toBe("summary");
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it("orders nested records by content, not by blank-node label", async () => {
|
|
212
|
+
// Oxigraph re-mints blank-node labels on every load, so ordering by them
|
|
213
|
+
// made two reads of the same unchanged entity disagree.
|
|
214
|
+
const first = (await inspectVerb.run(
|
|
215
|
+
{ uri: "ds:blankHolder" },
|
|
216
|
+
rt,
|
|
217
|
+
)) as InspectResult;
|
|
218
|
+
const second = (await inspectVerb.run(
|
|
219
|
+
{ uri: "ds:blankHolder" },
|
|
220
|
+
rt,
|
|
221
|
+
)) as InspectResult;
|
|
222
|
+
expect(first.nested).toEqual(second.nested);
|
|
51
223
|
});
|
|
52
224
|
|
|
53
225
|
it("resolves an absolute IRI to the same result", async () => {
|
|
@@ -78,3 +250,86 @@ describe("graph inspect", () => {
|
|
|
78
250
|
).rejects.toMatchObject({ code: "INVALID_INPUT" });
|
|
79
251
|
});
|
|
80
252
|
});
|
|
253
|
+
|
|
254
|
+
describe("bounds and losslessness the review surfaced", () => {
|
|
255
|
+
it("counts EVERY inbound predicate exactly, whatever the exemplar bound", async () => {
|
|
256
|
+
// One capped query answered counting and exhibiting at once, and answered
|
|
257
|
+
// neither: a single LIMIT applies to the whole ordered result, so the first
|
|
258
|
+
// predicate to fill it under-reported its own count AND every predicate
|
|
259
|
+
// after it vanished — while `count` promised the true total. The roster hub
|
|
260
|
+
// here fans in 22 deep, well past what any level exhibits.
|
|
261
|
+
const result = (await inspectVerb.run(
|
|
262
|
+
{ uri: "ds:rosterHub" },
|
|
263
|
+
rt,
|
|
264
|
+
)) as InspectResult;
|
|
265
|
+
const roster = result.inbound.find(
|
|
266
|
+
(g) => g.predicate.value === `${DS}tier`,
|
|
267
|
+
);
|
|
268
|
+
expect(roster?.count).toBe(22);
|
|
269
|
+
// Counted in full, exhibited in part — the two are now separate questions.
|
|
270
|
+
expect(roster?.subjects.length).toBeLessThan(22);
|
|
271
|
+
// And the quiet neighbour survives the noisy one. Under the single capped
|
|
272
|
+
// query, a predicate ordered after one that filled the limit was dropped
|
|
273
|
+
// from the answer entirely.
|
|
274
|
+
const quiet = result.inbound.find(
|
|
275
|
+
(g) => g.predicate.value === `${DS}hasSubcomponent`,
|
|
276
|
+
);
|
|
277
|
+
expect(quiet?.count).toBe(1);
|
|
278
|
+
expect(quiet?.subjects[0]?.prefixed).toBe("ds:probe.quiet");
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
it("keeps a blank node reachable from two predicates under both", async () => {
|
|
282
|
+
// Keyed by node alone, whichever `via` arrived first won and the second
|
|
283
|
+
// edge disappeared — and Turtle filters the ordinary blank object out too,
|
|
284
|
+
// so nothing was left to notice the loss by.
|
|
285
|
+
const result = (await inspectVerb.run(
|
|
286
|
+
{ uri: "ds:doubleLinked" },
|
|
287
|
+
rt,
|
|
288
|
+
)) as InspectResult;
|
|
289
|
+
expect(result.nested["ds:changeLog"]).toHaveLength(1);
|
|
290
|
+
expect(result.nested["ds:usageNote"]).toHaveLength(1);
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
it("says nothing about addressability at a level that exhibits none", async () => {
|
|
294
|
+
// At `summary` EVERY group is empty because the level shows no exemplars.
|
|
295
|
+
// Concluding "none individually addressable" there libels subjects that are
|
|
296
|
+
// perfectly nameable, so the group records what it WOULD have shown.
|
|
297
|
+
const summary = await buildFixtureRuntime({
|
|
298
|
+
ttl: BLOCK_TTL,
|
|
299
|
+
prefixes: BLOCK_PREFIXES,
|
|
300
|
+
detail: "summary",
|
|
301
|
+
});
|
|
302
|
+
const result = (await inspectVerb.run(
|
|
303
|
+
{ uri: "ds:global" },
|
|
304
|
+
summary.rt,
|
|
305
|
+
)) as InspectResult;
|
|
306
|
+
(await summary.rt.store.get()).store.dispose();
|
|
307
|
+
const tier = result.inbound.find((g) => g.predicate.value === `${DS}tier`);
|
|
308
|
+
expect(tier?.exhibits).toBe(0);
|
|
309
|
+
expect(tier?.count).toBeGreaterThan(0);
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
it("carries the prefix map the payload was compacted against", async () => {
|
|
313
|
+
// A renderer that re-derives it from named nodes misses any prefix used
|
|
314
|
+
// only by the subject, a nested record key, or a literal datatype — and
|
|
315
|
+
// then emits compact names with no matching `@prefix`, i.e. invalid Turtle.
|
|
316
|
+
const result = (await inspectVerb.run(
|
|
317
|
+
{ uri: "ds:button" },
|
|
318
|
+
rt,
|
|
319
|
+
)) as InspectResult;
|
|
320
|
+
expect(result.prefixes.ds).toBe(DS);
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
it("keeps an RDF 1.2 literal direction rather than flattening it", async () => {
|
|
324
|
+
const result = (await inspectVerb.run(
|
|
325
|
+
{ uri: "ds:directional" },
|
|
326
|
+
rt,
|
|
327
|
+
)) as InspectResult;
|
|
328
|
+
const label = result.groups.find((g) => g.predicate.value === `${DS}name`);
|
|
329
|
+
expect(label?.objects[0]).toMatchObject({
|
|
330
|
+
termType: "Literal",
|
|
331
|
+
language: "ar",
|
|
332
|
+
direction: "rtl",
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
});
|
|
@@ -8,18 +8,23 @@
|
|
|
8
8
|
* name or absolute IRI addresses the subject exactly.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import {
|
|
12
|
+
BIN_NAME,
|
|
13
|
+
DEFAULT_DETAIL_LEVEL,
|
|
14
|
+
DETAIL_LEVELS,
|
|
15
|
+
} from "../../constants.js";
|
|
16
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
11
17
|
import type { InspectResult } from "../../kernel/runtime/readEntity.js";
|
|
12
18
|
import { readEntity } from "../../kernel/runtime/readEntity.js";
|
|
13
|
-
import type { PragmaRuntime } from "../../kernel/runtime/types.js";
|
|
14
19
|
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
15
|
-
import type { VerbSpec } from "../../kernel/spec/
|
|
20
|
+
import type { VerbSpec } from "../../kernel/spec/index.js";
|
|
16
21
|
import { inspectFormatters } from "./inspect.render.js";
|
|
17
22
|
|
|
18
23
|
const inspectVerb: VerbSpec<Record<string, unknown>, InspectResult> = {
|
|
19
24
|
path: ["graph", "inspect"],
|
|
20
25
|
summary:
|
|
21
26
|
"Show every triple where a URI is the subject, grouped by predicate.",
|
|
22
|
-
doc: "Inspect one entity: all predicate/object pairs asserted on the subject. Address it by prefixed name (ds:button) or absolute IRI.",
|
|
27
|
+
doc: "Inspect one entity: all predicate/object pairs asserted on the subject. Address it by prefixed name (ds:global.component.button) or absolute IRI.",
|
|
23
28
|
params: [
|
|
24
29
|
{
|
|
25
30
|
kind: "string",
|
|
@@ -31,9 +36,17 @@ const inspectVerb: VerbSpec<Record<string, unknown>, InspectResult> = {
|
|
|
31
36
|
},
|
|
32
37
|
],
|
|
33
38
|
output: { formatters: inspectFormatters },
|
|
39
|
+
// The read is BOUNDED by disclosure — inbound exemplars and literal previews
|
|
40
|
+
// both widen with the level — so the verb must declare the ladder it honours.
|
|
41
|
+
// Without this the CLI `--detail` flag has nothing to validate against and the
|
|
42
|
+
// MCP projector injects no `detail` argument at all, so the documented knob
|
|
43
|
+
// was one an agent could not actually reach.
|
|
44
|
+
disclosure: { levels: [...DETAIL_LEVELS], default: DEFAULT_DETAIL_LEVEL },
|
|
34
45
|
examples: [
|
|
35
|
-
{ cmd:
|
|
36
|
-
{
|
|
46
|
+
{ cmd: `${BIN_NAME} graph inspect ds:global.component.button` },
|
|
47
|
+
{
|
|
48
|
+
cmd: `${BIN_NAME} graph inspect https://ds.canonical.com/global.component.button`,
|
|
49
|
+
},
|
|
37
50
|
],
|
|
38
51
|
capability: {
|
|
39
52
|
needsStore: true,
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* - json: the serialized {@link QueryResult}.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import type { Formatters } from "../../kernel/spec/
|
|
12
|
+
import type { Formatters } from "../../kernel/spec/index.js";
|
|
13
13
|
|
|
14
14
|
// Inline `import("…")` type (no `from`) — keeps the ke types off the static
|
|
15
15
|
// import graph the lazy-dispatch probe walks (see query.verb.ts).
|
|
@@ -36,9 +36,21 @@ function formatTriples(
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export const queryFormatters: Formatters<QueryResult> = {
|
|
39
|
+
// Zero rows/triples: plain stdout stays empty — the notice is
|
|
40
|
+
// `emptyNotice`, routed to stderr (exit 0) by the dispatcher so a pipe
|
|
41
|
+
// reads no prose. ASK always has a result and never goes empty.
|
|
42
|
+
emptyNotice(result) {
|
|
43
|
+
if (result.type === "select" && result.bindings.length === 0) {
|
|
44
|
+
return "No results.";
|
|
45
|
+
}
|
|
46
|
+
if (result.type === "construct" && result.triples.length === 0) {
|
|
47
|
+
return "No triples.";
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
},
|
|
39
51
|
plain(result) {
|
|
40
52
|
if (result.type === "select") {
|
|
41
|
-
if (result.bindings.length === 0) return "
|
|
53
|
+
if (result.bindings.length === 0) return "";
|
|
42
54
|
const cols = Object.keys(result.bindings[0] ?? {});
|
|
43
55
|
const rows = result.bindings.map((b) =>
|
|
44
56
|
cols.map((c) => b[c] ?? "").join("\t"),
|
|
@@ -48,7 +60,7 @@ export const queryFormatters: Formatters<QueryResult> = {
|
|
|
48
60
|
if (result.type === "ask") {
|
|
49
61
|
return `ASK: ${String(result.result)}`;
|
|
50
62
|
}
|
|
51
|
-
return formatTriples(result.triples);
|
|
63
|
+
return result.triples.length === 0 ? "" : formatTriples(result.triples);
|
|
52
64
|
},
|
|
53
65
|
|
|
54
66
|
llm(result) {
|
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
* query surfaces as INVALID_INPUT with a recovery pointer to `ontology list`.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import
|
|
12
|
+
import { BIN_NAME } from "../../constants.js";
|
|
13
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
13
14
|
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
14
|
-
import type { VerbSpec } from "../../kernel/spec/
|
|
15
|
+
import type { VerbSpec } from "../../kernel/spec/index.js";
|
|
15
16
|
import { queryFormatters } from "./query.render.js";
|
|
16
17
|
|
|
17
18
|
// Inline `import("…")` type (no `from`) so the ke types stay OFF the static
|
|
@@ -35,11 +36,11 @@ const queryVerb: VerbSpec<Record<string, unknown>, QueryResult> = {
|
|
|
35
36
|
output: { formatters: queryFormatters },
|
|
36
37
|
examples: [
|
|
37
38
|
{
|
|
38
|
-
cmd:
|
|
39
|
+
cmd: `${BIN_NAME} graph query "SELECT ?s WHERE { ?s a ds:Component }"`,
|
|
39
40
|
note: "list every component subject",
|
|
40
41
|
},
|
|
41
42
|
{
|
|
42
|
-
cmd:
|
|
43
|
+
cmd: `${BIN_NAME} graph query "ASK { <https://ds.canonical.com/global.component.button> a ds:Component }" --format json`,
|
|
43
44
|
},
|
|
44
45
|
],
|
|
45
46
|
capability: {
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import type { QueryResult } from "@canonical/ke";
|
|
13
|
-
import { PragmaError } from "../../kernel/error/
|
|
14
|
-
import type { PragmaRuntime } from "../../kernel/runtime/
|
|
13
|
+
import { cliRecovery, PragmaError } from "../../kernel/error/index.js";
|
|
14
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Execute a raw SPARQL query against the booted store.
|
|
@@ -39,11 +39,13 @@ export async function runQuery(
|
|
|
39
39
|
message: detail
|
|
40
40
|
? `Invalid SPARQL query: ${detail}`
|
|
41
41
|
: "Invalid SPARQL query.",
|
|
42
|
-
recovery:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
recovery: cliRecovery(
|
|
43
|
+
"ontology list",
|
|
44
|
+
"Check your SPARQL syntax and the loaded namespaces.",
|
|
45
|
+
{
|
|
46
|
+
tool: "ontology_list",
|
|
47
|
+
},
|
|
48
|
+
),
|
|
47
49
|
});
|
|
48
50
|
}
|
|
49
51
|
}
|