@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
|
@@ -2,32 +2,48 @@
|
|
|
2
2
|
* Look up one or more pack entities by name, prefixed name, absolute IRI, or
|
|
3
3
|
* glob, via the fetch strategy the pack declares.
|
|
4
4
|
*
|
|
5
|
-
* The
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* The resolve is ALWAYS generated SPARQL (an escaped literal or a validated
|
|
6
|
+
* `<iri>` BIND) regardless of `source`; from the resolved IRI, values are
|
|
7
|
+
* fetched either through more generated SELECTs (`sparql`) or one generated
|
|
8
8
|
* GraphQL document (`graphql`). One poisoned query never discards the batch —
|
|
9
9
|
* per-query failures are collected as structured error entries.
|
|
10
10
|
*
|
|
11
|
+
* WHICH query is chosen is decided by the ARGUMENT'S SHAPE first and the pack's
|
|
12
|
+
* `source` second, and both dispatches live here. Getting that order wrong is
|
|
13
|
+
* not a style question: it is what made an IRI reach a name FILTER on every
|
|
14
|
+
* graphql-sourced pack, and what left an IRI-shaped glob expanding against a
|
|
15
|
+
* population of names. The shape a user typed is a fact about the argument; the
|
|
16
|
+
* fetch strategy is a fact about the pack, and it cannot change what the
|
|
17
|
+
* argument means.
|
|
18
|
+
*
|
|
11
19
|
* Reached only behind a dynamic import from the lookup run body, so its imports
|
|
12
20
|
* (including the GraphQL path) stay off the storeless fast path.
|
|
13
21
|
*/
|
|
14
22
|
|
|
15
|
-
import { PragmaError } from "../error/
|
|
23
|
+
import { cliRecovery, PragmaError } from "../error/index.js";
|
|
16
24
|
import { suggestNames } from "../project/cli/suggestNames.js";
|
|
17
|
-
import
|
|
25
|
+
import { compactUri } from "../render/index.js";
|
|
26
|
+
import type { PragmaRuntime } from "../runtime/index.js";
|
|
18
27
|
import { activeExpands } from "./disclosure.js";
|
|
19
28
|
import { expandGlob, isGlobPattern } from "./glob.js";
|
|
20
29
|
import { fetchGraphqlLookup } from "./graphql/fetchGraphqlLookup.js";
|
|
21
30
|
import { isEmbeddableIri, resolveUri } from "./iri.js";
|
|
22
31
|
import {
|
|
23
32
|
buildExpandQuery,
|
|
33
|
+
buildIriResolveQuery,
|
|
24
34
|
buildLookupByIriQuery,
|
|
35
|
+
buildLookupIrisQuery,
|
|
25
36
|
buildLookupNamesQuery,
|
|
26
37
|
buildLookupQuery,
|
|
27
38
|
buildNameResolveQuery,
|
|
28
39
|
} from "./sparql/buildLookupQuery.js";
|
|
29
40
|
import { runSelect } from "./sparql/runSelect.js";
|
|
30
|
-
import type {
|
|
41
|
+
import type {
|
|
42
|
+
PackChildRow,
|
|
43
|
+
PackEntity,
|
|
44
|
+
PackLookup,
|
|
45
|
+
StorySource,
|
|
46
|
+
} from "./types.js";
|
|
31
47
|
|
|
32
48
|
/** A structured per-query lookup failure (never rejects the whole batch). */
|
|
33
49
|
export interface LookupError {
|
|
@@ -56,21 +72,26 @@ export async function resolveLookup(
|
|
|
56
72
|
lookup: PackLookup,
|
|
57
73
|
noun: string,
|
|
58
74
|
queries: readonly string[],
|
|
59
|
-
source:
|
|
75
|
+
source: StorySource,
|
|
60
76
|
prefixes: Readonly<Record<string, string>>,
|
|
61
77
|
level: string | undefined,
|
|
62
78
|
): Promise<LookupOutput> {
|
|
63
79
|
if (queries.length === 0) {
|
|
64
80
|
throw PragmaError.invalidInput("names", "(empty)", {
|
|
65
|
-
recovery: {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
mcp: { tool: `${noun}_list` },
|
|
69
|
-
},
|
|
81
|
+
recovery: cliRecovery(`${noun} list`, `List available ${noun} entries.`, {
|
|
82
|
+
tool: `${noun}_list`,
|
|
83
|
+
}),
|
|
70
84
|
});
|
|
71
85
|
}
|
|
72
86
|
|
|
73
|
-
const expanded = await expandQueries(
|
|
87
|
+
const expanded = await expandQueries(
|
|
88
|
+
rt,
|
|
89
|
+
lookup,
|
|
90
|
+
noun,
|
|
91
|
+
source,
|
|
92
|
+
queries,
|
|
93
|
+
prefixes,
|
|
94
|
+
);
|
|
74
95
|
const results: PackEntity[] = [];
|
|
75
96
|
const errors: LookupError[] = [...expanded.globErrors];
|
|
76
97
|
const settled = await Promise.allSettled(
|
|
@@ -106,17 +127,34 @@ export async function resolveLookup(
|
|
|
106
127
|
return { results, errors };
|
|
107
128
|
}
|
|
108
129
|
|
|
109
|
-
/**
|
|
130
|
+
/**
|
|
131
|
+
* Expand glob queries against the population their own shape addresses;
|
|
132
|
+
* literals pass through.
|
|
133
|
+
*
|
|
134
|
+
* A name glob expands over the `by` values, an IRI glob over the entity IRIs —
|
|
135
|
+
* the same split {@link buildResolveQuery} makes, because a glob is just a
|
|
136
|
+
* lookup argument with a `*` in it. Expanding an IRI pattern over names was why
|
|
137
|
+
* `ds:global.component.but*` matched nothing on any pack while shell completion
|
|
138
|
+
* offered nothing BUT those IRIs. Each population is fetched at most once, and
|
|
139
|
+
* only when a glob of that shape is actually present.
|
|
140
|
+
*/
|
|
110
141
|
async function expandQueries(
|
|
111
142
|
rt: LookupRuntime,
|
|
112
143
|
lookup: PackLookup,
|
|
113
144
|
noun: string,
|
|
114
|
-
source:
|
|
145
|
+
source: StorySource,
|
|
115
146
|
queries: readonly string[],
|
|
147
|
+
prefixes: Readonly<Record<string, string>>,
|
|
116
148
|
): Promise<{ names: string[]; globErrors: LookupError[] }> {
|
|
117
149
|
if (!queries.some(isGlobPattern))
|
|
118
150
|
return { names: [...queries], globErrors: [] };
|
|
119
|
-
const
|
|
151
|
+
const globs = queries.filter(isGlobPattern);
|
|
152
|
+
const byIri = globs.some(looksLikeIri)
|
|
153
|
+
? await listEntityIriSpellings(rt, lookup, source, prefixes)
|
|
154
|
+
: new Map<string, string>();
|
|
155
|
+
const byName = globs.some((glob) => !looksLikeIri(glob))
|
|
156
|
+
? await listEntityNames(rt, lookup, source)
|
|
157
|
+
: [];
|
|
120
158
|
const names: string[] = [];
|
|
121
159
|
const globErrors: LookupError[] = [];
|
|
122
160
|
for (const query of queries) {
|
|
@@ -124,7 +162,17 @@ async function expandQueries(
|
|
|
124
162
|
names.push(query);
|
|
125
163
|
continue;
|
|
126
164
|
}
|
|
127
|
-
|
|
165
|
+
// An IRI glob expands over every spelling, then collapses to the entity:
|
|
166
|
+
// matching `ds:button` and its absolute twin must not list it twice.
|
|
167
|
+
const matches = looksLikeIri(query)
|
|
168
|
+
? [
|
|
169
|
+
...new Set(
|
|
170
|
+
expandGlob(query, [...byIri.keys()]).map(
|
|
171
|
+
(spelling) => byIri.get(spelling) ?? spelling,
|
|
172
|
+
),
|
|
173
|
+
),
|
|
174
|
+
]
|
|
175
|
+
: expandGlob(query, byName);
|
|
128
176
|
if (matches.length === 0) {
|
|
129
177
|
globErrors.push({
|
|
130
178
|
query,
|
|
@@ -144,16 +192,14 @@ async function lookupOne(
|
|
|
144
192
|
lookup: PackLookup,
|
|
145
193
|
noun: string,
|
|
146
194
|
query: string,
|
|
147
|
-
source:
|
|
195
|
+
source: StorySource,
|
|
148
196
|
prefixes: Readonly<Record<string, string>>,
|
|
149
197
|
level: string | undefined,
|
|
150
198
|
): Promise<PackEntity> {
|
|
151
199
|
const graphqlSourced = lookup.source === "graphql";
|
|
152
200
|
const rows = await runSelect(
|
|
153
201
|
rt,
|
|
154
|
-
|
|
155
|
-
? buildNameResolveQuery(lookup, query)
|
|
156
|
-
: buildEntityQuery(lookup, query, prefixes, level),
|
|
202
|
+
buildResolveQuery(lookup, query, prefixes, level),
|
|
157
203
|
source,
|
|
158
204
|
);
|
|
159
205
|
const base = rows.at(0);
|
|
@@ -161,11 +207,9 @@ async function lookupOne(
|
|
|
161
207
|
const candidates = await listEntityNames(rt, lookup, source);
|
|
162
208
|
throw PragmaError.notFound(noun, query, {
|
|
163
209
|
suggestions: suggestNames(query, candidates),
|
|
164
|
-
recovery: {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
mcp: { tool: `${noun}_list` },
|
|
168
|
-
},
|
|
210
|
+
recovery: cliRecovery(`${noun} list`, `List available ${noun} entries.`, {
|
|
211
|
+
tool: `${noun}_list`,
|
|
212
|
+
}),
|
|
169
213
|
});
|
|
170
214
|
}
|
|
171
215
|
|
|
@@ -175,7 +219,9 @@ async function lookupOne(
|
|
|
175
219
|
lookup,
|
|
176
220
|
base.uri,
|
|
177
221
|
base.name ?? query,
|
|
178
|
-
source,
|
|
222
|
+
// The GraphQL lane's only use of the source is CONFIG_ERROR attribution,
|
|
223
|
+
// which is right for any origin — so it takes the label, not provenance.
|
|
224
|
+
source.label,
|
|
179
225
|
prefixes,
|
|
180
226
|
level,
|
|
181
227
|
);
|
|
@@ -192,24 +238,39 @@ async function lookupOne(
|
|
|
192
238
|
return entity;
|
|
193
239
|
}
|
|
194
240
|
|
|
195
|
-
/**
|
|
196
|
-
|
|
241
|
+
/**
|
|
242
|
+
* Build the resolve SELECT for one lookup argument: shape first, source second.
|
|
243
|
+
*
|
|
244
|
+
* The four cells of that 2×2 are the whole dispatch. A graphql-sourced pack
|
|
245
|
+
* resolves to an IRI and fetches everything else through its document, so both
|
|
246
|
+
* of its queries are the minimal `?uri ?name` pair; a sparql-sourced pack reads
|
|
247
|
+
* its fields in the same SELECT, so both of its queries carry the level-gated
|
|
248
|
+
* projection.
|
|
249
|
+
*/
|
|
250
|
+
function buildResolveQuery(
|
|
197
251
|
lookup: PackLookup,
|
|
198
252
|
query: string,
|
|
199
253
|
prefixes: Readonly<Record<string, string>>,
|
|
200
254
|
level: string | undefined,
|
|
201
255
|
): string {
|
|
202
|
-
|
|
256
|
+
const graphqlSourced = lookup.source === "graphql";
|
|
257
|
+
if (!looksLikeIri(query)) {
|
|
258
|
+
return graphqlSourced
|
|
259
|
+
? buildNameResolveQuery(lookup, query)
|
|
260
|
+
: buildLookupQuery(lookup, query, level);
|
|
261
|
+
}
|
|
203
262
|
const resolved = resolveUri(query, prefixes);
|
|
204
263
|
if (!isEmbeddableIri(resolved)) {
|
|
205
264
|
throw PragmaError.invalidInput("name", query, {
|
|
206
265
|
recovery: {
|
|
207
266
|
message:
|
|
208
|
-
"Use an absolute IRI (https://…), a prefixed name (
|
|
267
|
+
"Use an absolute IRI (https://…), a prefixed name (prefix:local), or a plain entity name.",
|
|
209
268
|
},
|
|
210
269
|
});
|
|
211
270
|
}
|
|
212
|
-
return
|
|
271
|
+
return graphqlSourced
|
|
272
|
+
? buildIriResolveQuery(lookup, resolved)
|
|
273
|
+
: buildLookupByIriQuery(lookup, resolved, level);
|
|
213
274
|
}
|
|
214
275
|
|
|
215
276
|
/** Whether a lookup query addresses an entity by IRI or prefixed name. */
|
|
@@ -217,15 +278,52 @@ function looksLikeIri(query: string): boolean {
|
|
|
217
278
|
return (
|
|
218
279
|
query.startsWith("http://") ||
|
|
219
280
|
query.startsWith("https://") ||
|
|
220
|
-
|
|
281
|
+
// Neither an IRI nor a SPARQL prefixed name may contain whitespace, so a
|
|
282
|
+
// colon in a spaced string is part of a plain entity name — e.g. the
|
|
283
|
+
// concept "Foundations: Grid" — not a prefix separator.
|
|
284
|
+
(query.includes(":") && !/\s/.test(query))
|
|
221
285
|
);
|
|
222
286
|
}
|
|
223
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Every SPELLING an IRI-shaped glob may be written against, mapped to the one
|
|
290
|
+
* entity it addresses.
|
|
291
|
+
*
|
|
292
|
+
* An entity under a registered prefix has two legal spellings — the compact
|
|
293
|
+
* `ds:button` shell completion offers, and the absolute
|
|
294
|
+
* `https://ds.canonical.com/button` a user pastes from a browser. Both resolve
|
|
295
|
+
* to the same entity in a literal lookup, so a glob must expand over both;
|
|
296
|
+
* offering only the compact form made `https://ds.canonical.com/but*` return
|
|
297
|
+
* EMPTY_RESULTS while the literal IRI it generalises succeeded.
|
|
298
|
+
*
|
|
299
|
+
* The map is spelling → CANONICAL IRI precisely so a pattern that matches an
|
|
300
|
+
* entity under both spellings still yields it once. Matching over a flat list
|
|
301
|
+
* of both would render the entity twice, which is why the previous shape
|
|
302
|
+
* offered only one.
|
|
303
|
+
*/
|
|
304
|
+
async function listEntityIriSpellings(
|
|
305
|
+
rt: LookupRuntime,
|
|
306
|
+
lookup: PackLookup,
|
|
307
|
+
source: StorySource,
|
|
308
|
+
prefixes: Readonly<Record<string, string>>,
|
|
309
|
+
): Promise<Map<string, string>> {
|
|
310
|
+
const rows = await runSelect(rt, buildLookupIrisQuery(lookup), source);
|
|
311
|
+
const spellings = new Map<string, string>();
|
|
312
|
+
for (const row of rows) {
|
|
313
|
+
const uri = row.uri ?? "";
|
|
314
|
+
if (uri === "") continue;
|
|
315
|
+
spellings.set(uri, uri);
|
|
316
|
+
const compact = compactUri(uri, prefixes);
|
|
317
|
+
if (compact !== uri) spellings.set(compact, uri);
|
|
318
|
+
}
|
|
319
|
+
return spellings;
|
|
320
|
+
}
|
|
321
|
+
|
|
224
322
|
/** List every entity name the lookup can address (miss suggestions + sample/glob). */
|
|
225
323
|
export async function listEntityNames(
|
|
226
324
|
rt: LookupRuntime,
|
|
227
325
|
lookup: PackLookup,
|
|
228
|
-
source:
|
|
326
|
+
source: StorySource,
|
|
229
327
|
): Promise<string[]> {
|
|
230
328
|
const rows = await runSelect(rt, buildLookupNamesQuery(lookup), source);
|
|
231
329
|
return rows.map((row) => row.name ?? "").filter((name) => name !== "");
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* factories carry no heavy static import.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import { PragmaError } from "../error/
|
|
13
|
-
import type { PragmaRuntime } from "../runtime/
|
|
12
|
+
import { cliRecovery, PragmaError } from "../error/index.js";
|
|
13
|
+
import type { PragmaRuntime } from "../runtime/index.js";
|
|
14
14
|
import { resolvePackDetail } from "./disclosure.js";
|
|
15
15
|
import type { SampleOutput } from "./renderPack.js";
|
|
16
16
|
import {
|
|
@@ -22,14 +22,14 @@ import { parseSampleCount, pickRandom } from "./sample.js";
|
|
|
22
22
|
import { applyPackFilters } from "./sparql/applyFilters.js";
|
|
23
23
|
import { applyPackSearch } from "./sparql/applySearch.js";
|
|
24
24
|
import { runSelect } from "./sparql/runSelect.js";
|
|
25
|
-
import type { PackList, PackLookup, PackRow } from "./types.js";
|
|
25
|
+
import type { PackList, PackLookup, PackRow, StorySource } from "./types.js";
|
|
26
26
|
|
|
27
27
|
/** The highest canonical level — sample fetches everything for shape discovery. */
|
|
28
28
|
const HIGHEST_LEVEL = "detailed";
|
|
29
29
|
|
|
30
30
|
/** Facts a list-shaped run body needs beyond its `shape`. */
|
|
31
31
|
export interface ListRunMeta {
|
|
32
|
-
readonly source:
|
|
32
|
+
readonly source: StorySource;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/**
|
|
@@ -61,7 +61,7 @@ export function makeListRun(
|
|
|
61
61
|
export function makeLookupRun(
|
|
62
62
|
lookup: PackLookup,
|
|
63
63
|
noun: string,
|
|
64
|
-
source:
|
|
64
|
+
source: StorySource,
|
|
65
65
|
prefixes: Readonly<Record<string, string>>,
|
|
66
66
|
): (
|
|
67
67
|
params: Record<string, unknown>,
|
|
@@ -88,11 +88,11 @@ export function makeLookupRun(
|
|
|
88
88
|
code: first.code as PragmaError["code"],
|
|
89
89
|
message: first.message,
|
|
90
90
|
suggestions: first.suggestions ? [...first.suggestions] : undefined,
|
|
91
|
-
recovery:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
recovery: cliRecovery(
|
|
92
|
+
`${noun} list`,
|
|
93
|
+
`List available ${noun} entries.`,
|
|
94
|
+
{ tool: `${noun}_list` },
|
|
95
|
+
),
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
98
|
}
|
|
@@ -104,7 +104,7 @@ export function makeLookupRun(
|
|
|
104
104
|
export function makeSampleRun(
|
|
105
105
|
lookup: PackLookup,
|
|
106
106
|
noun: string,
|
|
107
|
-
source:
|
|
107
|
+
source: StorySource,
|
|
108
108
|
prefixes: Readonly<Record<string, string>>,
|
|
109
109
|
defaultCount: number,
|
|
110
110
|
): (
|
|
@@ -119,11 +119,11 @@ export function makeSampleRun(
|
|
|
119
119
|
if (names.length === 0) {
|
|
120
120
|
throw PragmaError.emptyResults(noun, {
|
|
121
121
|
message: `No ${noun} entries to sample.`,
|
|
122
|
-
recovery:
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
122
|
+
recovery: cliRecovery(
|
|
123
|
+
`${noun} list`,
|
|
124
|
+
`List available ${noun} entries.`,
|
|
125
|
+
{ tool: `${noun}_list` },
|
|
126
|
+
),
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
129
|
const selected = pickRandom(names, count);
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* the supported 1–5 range. Selection is a Fisher-Yates partial shuffle.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { PragmaError } from "../error/
|
|
9
|
+
import { PragmaError } from "../error/index.js";
|
|
10
10
|
import type { PackLookup } from "./types.js";
|
|
11
11
|
|
|
12
12
|
/** Smallest number of samples the `sample` verb returns. */
|
|
@@ -5,26 +5,38 @@
|
|
|
5
5
|
* refinements that encode the source rule (§3): `type` XOR `types`, a
|
|
6
6
|
* graphql-sourced lookup names its fragment target, SPARQL expands stay
|
|
7
7
|
* single-hop, GraphQL fields reject property paths, and every disclosure `level`
|
|
8
|
-
* names a declared canonical level.
|
|
8
|
+
* names a declared canonical level. Two more refinements make the definition
|
|
9
|
+
* COMPILABLE, not merely well-shaped: distinct compiled verb names and distinct
|
|
10
|
+
* filter params (see {@link refineVerbNames} / {@link refineFilterParams}).
|
|
9
11
|
*
|
|
10
12
|
* zod lives here and ONLY here in the pack layer, imported lazily (never on the
|
|
11
|
-
* `--help`/`__complete` fast path).
|
|
12
|
-
* by
|
|
13
|
-
*
|
|
13
|
+
* `--help`/`__complete` fast path). The distribution's own stories are compiled
|
|
14
|
+
* statically by `capabilities/distribution.ts` and never revalidated at dispatch
|
|
15
|
+
* (`collect.projectStoryTiers`'s default-origin carve-out); this runs for config-
|
|
16
|
+
* and package-declared stories, and in `distribution.test.ts`'s round-trip.
|
|
14
17
|
*/
|
|
15
18
|
|
|
16
19
|
import { z } from "zod";
|
|
17
|
-
import { DETAIL_LEVELS } from "../../constants.js";
|
|
18
|
-
import { PragmaError } from "../error/
|
|
20
|
+
import { DETAIL_LEVELS, RECOVERY_CLI_PREFIX } from "../../constants.js";
|
|
21
|
+
import { PragmaError } from "../error/index.js";
|
|
19
22
|
import type { PackDefinition } from "./types.js";
|
|
20
23
|
|
|
21
24
|
const NOUN_PATTERN = /^[a-z][a-z0-9-]*$/;
|
|
25
|
+
/** Message for {@link NOUN_PATTERN} — third-party authors never see the regex. */
|
|
26
|
+
const NOUN_MESSAGE = 'must be lowercase kebab-case, e.g. "design-token"';
|
|
22
27
|
const FILTER_PARAM_PATTERN = /^[a-z][a-z0-9]*$/;
|
|
23
28
|
const FIELD_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
24
29
|
const GRAPHQL_NAME_PATTERN = /^[_A-Za-z][_0-9A-Za-z]*$/;
|
|
25
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* A prefixed name (`ds:Thing`), a property path of them, or an absolute IRI.
|
|
32
|
+
* Each path segment may carry the SPARQL inverse marker (`^ds:tier`) — the
|
|
33
|
+
* contract (`types.ts`) admits "prefixed name, IRI, or path", and an inverse
|
|
34
|
+
* step IS a property path, so rejecting it here was a schema bug, not a
|
|
35
|
+
* grammar decision (L-OPEN-9: the tier story's `blocks` expand reads
|
|
36
|
+
* `^ds:tier`).
|
|
37
|
+
*/
|
|
26
38
|
const TERM_PATTERN =
|
|
27
|
-
/^(?:[A-Za-z][A-Za-z0-9+.-]*:\/\/[^<>"\s]
|
|
39
|
+
/^(?:[A-Za-z][A-Za-z0-9+.-]*:\/\/[^<>"\s]+|\^?[A-Za-z][\w-]*:[^/<>"\s]+(?:\/\^?[A-Za-z][\w-]*:[^/<>"\s]+)*)$/;
|
|
28
40
|
|
|
29
41
|
/** Params a filter/verb may not claim (they are the shared read vocabulary). */
|
|
30
42
|
const RESERVED_PARAMS = new Set(["search", "detail", "name", "count"]);
|
|
@@ -59,9 +71,18 @@ const searchSchema = z
|
|
|
59
71
|
const emptyRecoverySchema = z
|
|
60
72
|
.object({
|
|
61
73
|
message: z.string().min(1),
|
|
74
|
+
// The command WITHOUT a binary name — the renderer prepends the CONSUMING
|
|
75
|
+
// distribution's. A story is portable only if it does not name a binary, so
|
|
76
|
+
// the old prefixed form is rejected rather than accepted and doubled. Named
|
|
77
|
+
// loudly, in the `packages` → `packs` tradition, because a third-party pack
|
|
78
|
+
// written against the old grammar is data, not a typo.
|
|
62
79
|
cli: z
|
|
63
80
|
.string()
|
|
64
|
-
.
|
|
81
|
+
.min(1)
|
|
82
|
+
.refine(
|
|
83
|
+
(value) => !value.startsWith(RECOVERY_CLI_PREFIX),
|
|
84
|
+
`emptyRecovery.cli is now the command WITHOUT the binary name — write "sources update", not "${RECOVERY_CLI_PREFIX}sources update"`,
|
|
85
|
+
)
|
|
65
86
|
.optional(),
|
|
66
87
|
})
|
|
67
88
|
.strict();
|
|
@@ -78,7 +99,7 @@ const listSchema = z.object(listShape).strict();
|
|
|
78
99
|
const verbSchema = z
|
|
79
100
|
.object({
|
|
80
101
|
...listShape,
|
|
81
|
-
verb: z.string().regex(NOUN_PATTERN),
|
|
102
|
+
verb: z.string().regex(NOUN_PATTERN, NOUN_MESSAGE),
|
|
82
103
|
description: z.string().optional(),
|
|
83
104
|
toolDescription: z.string().optional(),
|
|
84
105
|
})
|
|
@@ -168,6 +189,7 @@ const sampleSchema = z.union([
|
|
|
168
189
|
z
|
|
169
190
|
.object({
|
|
170
191
|
count: z.number().int().min(1).max(5).optional(),
|
|
192
|
+
fixedCount: z.boolean().optional(),
|
|
171
193
|
description: z.string().optional(),
|
|
172
194
|
toolDescription: z.string().optional(),
|
|
173
195
|
})
|
|
@@ -190,6 +212,7 @@ const lookupSchema = z
|
|
|
190
212
|
description: z.string().optional(),
|
|
191
213
|
toolDescription: z.string().optional(),
|
|
192
214
|
types: z.array(term).min(1).optional(),
|
|
215
|
+
weights: z.record(term, z.number().min(0).max(1)).optional(),
|
|
193
216
|
graphqlType: graphqlName.optional(),
|
|
194
217
|
fields: z.array(fieldSchema).min(1).optional(),
|
|
195
218
|
sections: z.array(sectionSchema).min(1).optional(),
|
|
@@ -202,7 +225,7 @@ const lookupSchema = z
|
|
|
202
225
|
|
|
203
226
|
const definitionSchema = z
|
|
204
227
|
.object({
|
|
205
|
-
noun: z.string().regex(NOUN_PATTERN),
|
|
228
|
+
noun: z.string().regex(NOUN_PATTERN, NOUN_MESSAGE),
|
|
206
229
|
description: z.string().optional(),
|
|
207
230
|
toolDescription: z.string().optional(),
|
|
208
231
|
list: listSchema.optional(),
|
|
@@ -228,9 +251,73 @@ const definitionSchema = z
|
|
|
228
251
|
path: ["list", "query"],
|
|
229
252
|
});
|
|
230
253
|
}
|
|
254
|
+
refineVerbNames(def, ctx);
|
|
255
|
+
if (def.list) refineFilterParams(def.list.filters, ["list"], ctx);
|
|
256
|
+
for (const [index, verb] of (def.verbs ?? []).entries()) {
|
|
257
|
+
refineFilterParams(verb.filters, ["verbs", index], ctx);
|
|
258
|
+
}
|
|
231
259
|
if (def.lookup) refineLookup(def.lookup, ctx);
|
|
232
260
|
});
|
|
233
261
|
|
|
262
|
+
/**
|
|
263
|
+
* The compiled `(noun, verb)` keys must be distinct.
|
|
264
|
+
*
|
|
265
|
+
* `compilePack` emits `list`, then each `verbs[].verb`, then `lookup` and
|
|
266
|
+
* `sample`. A repeat there survives the grammar into `assembleEffectiveModules`,
|
|
267
|
+
* where `assertUniqueVerbs` throws — and package stories reach dispatch before
|
|
268
|
+
* the command tree exists, so that throw would fail EVERY command, `doctor` and
|
|
269
|
+
* `sources update` included. The collision is a property of the definition, so
|
|
270
|
+
* the grammar is where it is caught.
|
|
271
|
+
*/
|
|
272
|
+
function refineVerbNames(
|
|
273
|
+
def: {
|
|
274
|
+
list?: unknown;
|
|
275
|
+
verbs?: readonly { verb: string }[];
|
|
276
|
+
lookup?: unknown;
|
|
277
|
+
},
|
|
278
|
+
ctx: z.RefinementCtx,
|
|
279
|
+
): void {
|
|
280
|
+
const emitted = new Set<string>(def.list ? ["list"] : []);
|
|
281
|
+
if (def.lookup) {
|
|
282
|
+
emitted.add("lookup");
|
|
283
|
+
if ((def.lookup as { sample?: unknown }).sample) emitted.add("sample");
|
|
284
|
+
}
|
|
285
|
+
const seen = new Set<string>();
|
|
286
|
+
for (const [index, verb] of (def.verbs ?? []).entries()) {
|
|
287
|
+
if (emitted.has(verb.verb) || seen.has(verb.verb)) {
|
|
288
|
+
ctx.addIssue({
|
|
289
|
+
code: z.ZodIssueCode.custom,
|
|
290
|
+
message: `verb "${verb.verb}" is already compiled by this pack — every verb must be distinct.`,
|
|
291
|
+
path: ["verbs", index, "verb"],
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
seen.add(verb.verb);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Filter params project to CLI options, so a repeat inside one list shape makes
|
|
300
|
+
* Commander refuse to register the second `--<param>` — outside every error
|
|
301
|
+
* envelope the CLI owns.
|
|
302
|
+
*/
|
|
303
|
+
function refineFilterParams(
|
|
304
|
+
filters: readonly { param: string }[] | undefined,
|
|
305
|
+
path: readonly (string | number)[],
|
|
306
|
+
ctx: z.RefinementCtx,
|
|
307
|
+
): void {
|
|
308
|
+
const seen = new Set<string>();
|
|
309
|
+
for (const [index, filter] of (filters ?? []).entries()) {
|
|
310
|
+
if (seen.has(filter.param)) {
|
|
311
|
+
ctx.addIssue({
|
|
312
|
+
code: z.ZodIssueCode.custom,
|
|
313
|
+
message: `filter param "${filter.param}" is declared twice.`,
|
|
314
|
+
path: [...path, "filters", index, "param"],
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
seen.add(filter.param);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
234
321
|
/** Cross-field lookup rules — the source rule (§3, F8). */
|
|
235
322
|
function refineLookup(
|
|
236
323
|
lookup: z.infer<typeof lookupSchema>,
|
|
@@ -246,6 +333,22 @@ function refineLookup(
|
|
|
246
333
|
});
|
|
247
334
|
}
|
|
248
335
|
|
|
336
|
+
// A weight naming a type the lookup does not address can never apply. Reject
|
|
337
|
+
// it rather than ignore it — a silent no-op is how a stale weight survives a
|
|
338
|
+
// rename (the type moves, the weight stays, and nothing says so).
|
|
339
|
+
const addressed = new Set<string>(
|
|
340
|
+
lookup.types ?? (lookup.type ? [lookup.type] : []),
|
|
341
|
+
);
|
|
342
|
+
for (const named of Object.keys(lookup.weights ?? {})) {
|
|
343
|
+
if (!addressed.has(named)) {
|
|
344
|
+
ctx.addIssue({
|
|
345
|
+
code: z.ZodIssueCode.custom,
|
|
346
|
+
message: `"lookup.weights" names "${named}", which is not in "lookup.type"/"lookup.types".`,
|
|
347
|
+
path: ["lookup", "weights"],
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
249
352
|
if (source === "graphql" && !lookup.graphqlType && !lookup.type) {
|
|
250
353
|
ctx.addIssue({
|
|
251
354
|
code: z.ZodIssueCode.custom,
|
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
* preserved. With declared `values` the input is canonicalized against the set
|
|
7
7
|
* (NFC, case-insensitive) and rows are matched case-insensitively; without them
|
|
8
8
|
* the input is a free term matched the same way. A row lacking the variable never
|
|
9
|
-
* matches. Several filters combine conjunctively
|
|
9
|
+
* matches. Several filters combine conjunctively; several values for one
|
|
10
|
+
* filter (a repeated flag) combine as a union.
|
|
10
11
|
*/
|
|
11
12
|
|
|
12
|
-
import { PragmaError } from "../../error/
|
|
13
|
+
import { PragmaError } from "../../error/index.js";
|
|
13
14
|
import type { PackFilter, PackRow } from "../types.js";
|
|
14
15
|
|
|
15
16
|
/**
|
|
@@ -29,23 +30,21 @@ export function applyPackFilters(
|
|
|
29
30
|
for (const filter of filters ?? []) {
|
|
30
31
|
const provided = params[filter.param];
|
|
31
32
|
if (provided === undefined) continue;
|
|
33
|
+
// A repeated CLI flag accumulates into an array; MCP args stay scalar.
|
|
34
|
+
// Several values for ONE filter are a union (a row matches any of them);
|
|
35
|
+
// several filters still combine conjunctively.
|
|
36
|
+
const occurrences = Array.isArray(provided) ? provided : [provided];
|
|
37
|
+
if (occurrences.length === 0) continue;
|
|
32
38
|
const values = filter.values;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
(
|
|
37
|
-
);
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
const canonical = canonicalizeFilterValue(
|
|
41
|
-
provided,
|
|
42
|
-
filter,
|
|
43
|
-
values,
|
|
44
|
-
).toLowerCase();
|
|
45
|
-
result = result.filter(
|
|
46
|
-
(row) =>
|
|
47
|
-
row[filter.variable]?.normalize("NFC").toLowerCase() === canonical,
|
|
39
|
+
const terms = occurrences.map((occurrence) =>
|
|
40
|
+
values === undefined
|
|
41
|
+
? requireStringValue(occurrence, filter).toLowerCase()
|
|
42
|
+
: canonicalizeFilterValue(occurrence, filter, values).toLowerCase(),
|
|
48
43
|
);
|
|
44
|
+
result = result.filter((row) => {
|
|
45
|
+
const cell = row[filter.variable]?.normalize("NFC").toLowerCase();
|
|
46
|
+
return cell !== undefined && terms.includes(cell);
|
|
47
|
+
});
|
|
49
48
|
}
|
|
50
49
|
return result;
|
|
51
50
|
}
|