@canonical/pragma-cli 0.34.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +293 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +83 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +66 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +53 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +168 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +193 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +334 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +263 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +195 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +82 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +25 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +197 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +85 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +20 -22
- package/pragma.conf.ts +249 -60
- package/src/bin.ts +267 -82
- package/src/capabilities/block.parity.test.ts +6 -3
- package/src/capabilities/capabilities/capabilities.render.ts +1 -1
- package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
- package/src/capabilities/capabilities/catalog.ts +3 -3
- package/src/capabilities/capabilities/hints.ts +32 -7
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +35 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +4 -4
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/config/collectConfigShow.ts +3 -3
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -10
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +8 -7
- package/src/capabilities/config/show.render.ts +1 -1
- package/src/capabilities/config/show.verb.ts +9 -6
- package/src/capabilities/config/types.ts +18 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +25 -11
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +36 -61
- package/src/capabilities/create/create.mcp.test.ts +89 -5
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +433 -219
- package/src/capabilities/create/create.verb.ts +297 -328
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +7 -4
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +23 -35
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +20 -0
- package/src/capabilities/distribution.test.ts +3 -1
- package/src/capabilities/distribution.ts +10 -15
- package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +6 -4
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +18 -7
- package/src/capabilities/doctor/doctor.render.ts +43 -19
- package/src/capabilities/doctor/doctor.test.ts +123 -34
- package/src/capabilities/doctor/doctor.verb.ts +3 -3
- package/src/capabilities/doctor/runChecks.ts +62 -63
- package/src/capabilities/doctor/types.ts +20 -4
- package/src/capabilities/emptyRecovery.test.ts +13 -8
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -6
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +3 -3
- package/src/capabilities/graph/runQuery.ts +2 -3
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/info/collectInfo.ts +5 -4
- package/src/capabilities/info/info.render.ts +1 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/lazy.test.ts +32 -0
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +27 -68
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +4 -5
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +396 -326
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +223 -71
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +37 -5
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +3 -4
- package/src/capabilities/sources/collectStatus.ts +7 -2
- package/src/capabilities/sources/index.ts +1 -1
- package/src/capabilities/sources/installSkills.ts +84 -7
- package/src/capabilities/sources/runUpdate.ts +53 -21
- package/src/capabilities/sources/sources.test.ts +154 -2
- package/src/capabilities/sources/status.render.ts +1 -1
- package/src/capabilities/sources/status.verb.ts +1 -1
- package/src/capabilities/sources/update.render.ts +1 -1
- package/src/capabilities/sources/update.verb.ts +1 -1
- package/src/capabilities/surface.test.ts +134 -17
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.ts +31 -1
- package/src/identity.test.ts +40 -25
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +1 -1
- package/src/kernel/completion/entitySource.test.ts +1 -1
- package/src/kernel/completion/entitySource.ts +21 -8
- package/src/kernel/completion/model.test.ts +164 -12
- package/src/kernel/completion/model.ts +94 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +34 -26
- package/src/kernel/completion/shellDrive.test.ts +28 -9
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +7 -0
- package/src/kernel/config/defaults.test.ts +25 -2
- package/src/kernel/config/defaults.ts +4 -3
- package/src/kernel/config/evaluateProjectConfig.ts +31 -8
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -88
- package/src/kernel/config/index.ts +1 -1
- package/src/kernel/config/readConfig.test.ts +6 -3
- package/src/kernel/config/readConfig.ts +1 -1
- package/src/kernel/config/schema.ts +3 -1
- package/src/kernel/config/types.ts +3 -1
- package/src/kernel/copy.test.ts +34 -4
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +5 -2
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -5
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/recovery.ts +14 -0
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +21 -1
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +130 -1
- package/src/kernel/packs/compile.ts +93 -3
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +66 -14
- package/src/kernel/packs/renderPack.ts +24 -5
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +112 -18
- package/src/kernel/packs/runBodies.ts +2 -3
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +18 -1
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +42 -3
- package/src/kernel/packs/types.ts +13 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +147 -12
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +160 -3
- package/src/kernel/project/cli/dispatch.ts +222 -42
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +130 -30
- package/src/kernel/project/cli/helpFormat.ts +13 -0
- package/src/kernel/project/cli/rootHelp.ts +41 -12
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +7 -4
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +2 -2
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +5 -2
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/source.ts +2 -2
- package/src/kernel/project/mcp/registerVerb.ts +35 -9
- package/src/kernel/project/mcp/serve.ts +2 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/renderers.test.ts +243 -6
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded.ts +3 -3
- package/src/kernel/runtime/graphpack/manifest.ts +1 -1
- package/src/kernel/runtime/graphpack/read.ts +1 -2
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +472 -28
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +2 -2
- package/src/kernel/runtime/refs/resolve.ts +4 -4
- package/src/kernel/runtime/storeReadiness.ts +1 -2
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
- package/src/kernel/spec/emitReference.ts +105 -30
- package/src/kernel/spec/emitSurface.ts +48 -6
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/types.ts +248 -4
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/journeys.cli.test.ts +1 -1
- package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.packageStories.test.ts +4 -4
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +1 -1
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/graph/canonical.ts +88 -2
- package/src/testing/fixtures/graph/defaultPack.ts +1 -1
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/projectMcp.ts +32 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +20 -9
- package/src/testing/perf/budgets.ts +58 -9
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +505 -23
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/dist/pragma +0 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
- package/src/capabilities/create/templates.embedded.generated.ts +0 -28
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `implementation` story's SEMANTICS, in-process through the real CLI
|
|
3
|
+
* dispatch path (`executeVerb`), against the canonical fixture.
|
|
4
|
+
*
|
|
5
|
+
* The generic live-surface tests call `implementation_list` with empty
|
|
6
|
+
* parameters and check the envelope, so they stay green whether or not the
|
|
7
|
+
* story means anything: the block-name join could resolve to the wrong subject,
|
|
8
|
+
* the IRI fallback could never fire, and `--platform` / `--library` could
|
|
9
|
+
* filter nothing at all. Those are the four claims the noun actually makes, so
|
|
10
|
+
* they are pinned here rather than left to the envelope.
|
|
11
|
+
*
|
|
12
|
+
* The join is the reason this noun exists and the reason it is worth a
|
|
13
|
+
* fixture-backed test: `ds:implementsBlock` points from an implementation
|
|
14
|
+
* collected in THIS repository at a block declared by a DIFFERENT pack, and the
|
|
15
|
+
* row's `block` column is the design system's own `ds:name` reached across that
|
|
16
|
+
* edge — not a string this repository holds anywhere.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { afterAll, describe, expect, it } from "vitest";
|
|
20
|
+
import { storyModules } from "../../capabilities/distribution.js";
|
|
21
|
+
import { verbKey } from "../../kernel/packs/uniqueness.js";
|
|
22
|
+
import { executeVerb } from "../../kernel/project/cli/dispatch.js";
|
|
23
|
+
import { bootRuntime } from "../../kernel/runtime/boot.js";
|
|
24
|
+
import type { VerbSpec } from "../../kernel/spec/types.js";
|
|
25
|
+
import {
|
|
26
|
+
CANONICAL_CONFIG,
|
|
27
|
+
CANONICAL_TTL,
|
|
28
|
+
} from "../fixtures/graph/canonical.js";
|
|
29
|
+
import {
|
|
30
|
+
bootFixtureRuntime,
|
|
31
|
+
type FixtureGraph,
|
|
32
|
+
} from "../helpers/fixtureGraph.js";
|
|
33
|
+
import { JSON_FLAGS, NO_MUTATION } from "../helpers/parity.js";
|
|
34
|
+
|
|
35
|
+
const implementationModule = storyModules.get("implementation");
|
|
36
|
+
if (!implementationModule) {
|
|
37
|
+
throw new Error('pragma.conf.ts declares no story for "implementation"');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const verbOf = (key: string): VerbSpec =>
|
|
41
|
+
implementationModule.verbs.find((v) => verbKey(v.path) === key) as VerbSpec;
|
|
42
|
+
|
|
43
|
+
const listVerb = verbOf("implementation list");
|
|
44
|
+
const librariesVerb = verbOf("implementation libraries");
|
|
45
|
+
|
|
46
|
+
const fixtures: FixtureGraph[] = [];
|
|
47
|
+
afterAll(async () => {
|
|
48
|
+
await Promise.all(fixtures.map((f) => f.dispose()));
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
/** Boot one tracked canonical fixture, for auto-disposal. */
|
|
52
|
+
async function boot(): Promise<FixtureGraph> {
|
|
53
|
+
const fixture = await bootFixtureRuntime({
|
|
54
|
+
ttl: CANONICAL_TTL,
|
|
55
|
+
config: CANONICAL_CONFIG,
|
|
56
|
+
});
|
|
57
|
+
fixtures.push(fixture);
|
|
58
|
+
return fixture;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
type Row = Record<string, string>;
|
|
62
|
+
|
|
63
|
+
async function rows(
|
|
64
|
+
verb: VerbSpec,
|
|
65
|
+
params: Record<string, unknown> = {},
|
|
66
|
+
): Promise<Row[]> {
|
|
67
|
+
const fixture = await boot();
|
|
68
|
+
const out = await executeVerb(
|
|
69
|
+
verb,
|
|
70
|
+
params,
|
|
71
|
+
NO_MUTATION,
|
|
72
|
+
bootRuntime(JSON_FLAGS, fixture.cwd),
|
|
73
|
+
);
|
|
74
|
+
return JSON.parse(out.stdout as string).data as Row[];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* What the fixture's implementation graph says, as pairs: Button is
|
|
79
|
+
* implemented TWICE, on two platforms, and Modal once.
|
|
80
|
+
*/
|
|
81
|
+
const EVERY_PAIR = [
|
|
82
|
+
"Button|@canonical/react-ds-global",
|
|
83
|
+
"Button|@canonical/svelte-ds-global",
|
|
84
|
+
"Modal|@canonical/react-ds-global",
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
const pairs = (list: Row[]): string[] =>
|
|
88
|
+
list.map((r) => `${r.block}|${r.library}`).sort();
|
|
89
|
+
|
|
90
|
+
describe("implementation list — the cross-pack join", () => {
|
|
91
|
+
it("names each block by the design system's ds:name, not by its IRI", async () => {
|
|
92
|
+
// `ds:implementsBlock ds:button` carries no name; `Button` exists only on
|
|
93
|
+
// the block node BLOCK_TTL declares. A row reading `button` here would mean
|
|
94
|
+
// the join silently degraded to the IRI fallback and nobody noticed.
|
|
95
|
+
const list = await rows(listVerb);
|
|
96
|
+
expect(pairs(list)).toEqual(EVERY_PAIR);
|
|
97
|
+
expect(list.map((r) => r.block)).not.toContain("button");
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it("one block implemented twice yields two rows, one per library", async () => {
|
|
101
|
+
// The row is the EDGE, not the block: collapsing the two Button rows into
|
|
102
|
+
// one would answer "is this implemented?" while losing "by whom", which is
|
|
103
|
+
// the question the noun exists for.
|
|
104
|
+
const list = await rows(listVerb);
|
|
105
|
+
expect(list.filter((r) => r.block === "Button")).toHaveLength(2);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it("carries the source link and the implementation's own IRI", async () => {
|
|
109
|
+
const list = await rows(listVerb);
|
|
110
|
+
const react = list.find(
|
|
111
|
+
(r) => r.block === "Button" && r.platform === "react",
|
|
112
|
+
);
|
|
113
|
+
expect(react?.source).toBe("https://example.test/react/Button.tsx");
|
|
114
|
+
expect(react?.uri).toBe(
|
|
115
|
+
"https://ds.canonical.com/implementation.react-ds-global.button",
|
|
116
|
+
);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it("falls back to the IRI local name for a block the store does not declare", async () => {
|
|
120
|
+
// The design-system pack can be absent while this one is present — a
|
|
121
|
+
// `sources` config carrying only the implementation graph. The row must
|
|
122
|
+
// stay readable, so the fallback is exercised against an edge whose target
|
|
123
|
+
// is a bare IRI with no `ds:name` anywhere in the store.
|
|
124
|
+
const fixture = await bootFixtureRuntime({
|
|
125
|
+
ttl: `${CANONICAL_TTL}
|
|
126
|
+
ds:implementation.library.orphan-lib a ds:ImplementationLibrary ;
|
|
127
|
+
ds:libraryName "@canonical/orphan-lib" ;
|
|
128
|
+
ds:platform "react" ;
|
|
129
|
+
ds:hasImplementation ds:implementation.orphan-lib.unnamed .
|
|
130
|
+
|
|
131
|
+
ds:implementation.orphan-lib.unnamed a ds:ImplementationObject ;
|
|
132
|
+
ds:implementsBlock ds:global.component.unnamed_block ;
|
|
133
|
+
ds:headLink "https://example.test/orphan/Unnamed.tsx" .
|
|
134
|
+
`,
|
|
135
|
+
config: CANONICAL_CONFIG,
|
|
136
|
+
});
|
|
137
|
+
fixtures.push(fixture);
|
|
138
|
+
const out = await executeVerb(
|
|
139
|
+
listVerb,
|
|
140
|
+
{},
|
|
141
|
+
NO_MUTATION,
|
|
142
|
+
bootRuntime(JSON_FLAGS, fixture.cwd),
|
|
143
|
+
);
|
|
144
|
+
const list = JSON.parse(out.stdout as string).data as Row[];
|
|
145
|
+
const orphan = list.find((r) => r.library === "@canonical/orphan-lib");
|
|
146
|
+
expect(orphan?.block).toBe("global.component.unnamed_block");
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
describe("implementation list — the declared filters", () => {
|
|
151
|
+
it("--platform keeps only that platform's rows", async () => {
|
|
152
|
+
expect(pairs(await rows(listVerb, { platform: "svelte" }))).toEqual([
|
|
153
|
+
"Button|@canonical/svelte-ds-global",
|
|
154
|
+
]);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it("--library keeps only that library's rows", async () => {
|
|
158
|
+
expect(
|
|
159
|
+
pairs(await rows(listVerb, { library: "@canonical/react-ds-global" })),
|
|
160
|
+
).toEqual([
|
|
161
|
+
"Button|@canonical/react-ds-global",
|
|
162
|
+
"Modal|@canonical/react-ds-global",
|
|
163
|
+
]);
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it("--search matches the block name and the library name alike", async () => {
|
|
167
|
+
expect(pairs(await rows(listVerb, { search: "modal" }))).toEqual([
|
|
168
|
+
"Modal|@canonical/react-ds-global",
|
|
169
|
+
]);
|
|
170
|
+
expect(pairs(await rows(listVerb, { search: "svelte" }))).toEqual([
|
|
171
|
+
"Button|@canonical/svelte-ds-global",
|
|
172
|
+
]);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
describe("implementation libraries — the library rows", () => {
|
|
177
|
+
it("lists every library with its platform, tier, version and block count", async () => {
|
|
178
|
+
const list = await rows(librariesVerb);
|
|
179
|
+
expect(list.map((r) => r.name).sort()).toEqual([
|
|
180
|
+
"@canonical/react-ds-global",
|
|
181
|
+
"@canonical/svelte-ds-global",
|
|
182
|
+
]);
|
|
183
|
+
const react = list.find((r) => r.name === "@canonical/react-ds-global");
|
|
184
|
+
expect(react).toMatchObject({
|
|
185
|
+
platform: "react",
|
|
186
|
+
tier: "global",
|
|
187
|
+
version: "0.34.0",
|
|
188
|
+
count: "2",
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
it("the counts agree with the rows `implementation list` returns", async () => {
|
|
193
|
+
// `ds:implementationCount` is asserted by the aggregate INDEX, on the same
|
|
194
|
+
// subject the per-library file describes. The two files can drift apart in
|
|
195
|
+
// the generator, and a count that disagrees with the edges is worse than no
|
|
196
|
+
// count at all — so the two halves are compared rather than each pinned.
|
|
197
|
+
const [libraries, list] = await Promise.all([
|
|
198
|
+
rows(librariesVerb),
|
|
199
|
+
rows(listVerb),
|
|
200
|
+
]);
|
|
201
|
+
for (const library of libraries) {
|
|
202
|
+
const actual = list.filter((r) => r.library === library.name).length;
|
|
203
|
+
expect(Number(library.count)).toBe(actual);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
});
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
*
|
|
25
25
|
* TODO(AV-231/E4): when `node-pty` (or an equivalent PTY shim) is on the
|
|
26
26
|
* devDependency set, replace each `it.todo` with a PTY-driven `it` that spawns
|
|
27
|
-
* `
|
|
28
|
-
* code + "Cancelled." line. The
|
|
27
|
+
* the shipped `pragma create …` under a pty, writes the keystroke, and asserts the exit
|
|
28
|
+
* code + "Cancelled." line. The shipped entry is already provisioned for the
|
|
29
29
|
* spawn-e2e layer by `testing/perf/globalSetup.ts`.
|
|
30
30
|
*/
|
|
31
31
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The package tier, end to end: a noun the
|
|
2
|
+
* The package tier, end to end: a noun the distribution never shipped.
|
|
3
3
|
*
|
|
4
4
|
* A package that ships `stories/*.json` and is declared as a `file:` pack
|
|
5
5
|
* contributes a working command to a project that declares it — resolved by
|
|
6
6
|
* `sources update`, hashed into the pack, written into the pack directory, read
|
|
7
7
|
* back storelessly at dispatch, and answered from the fixture graph. Proven both
|
|
8
|
-
* in-process and through the
|
|
8
|
+
* in-process and through the SHIPPED entry in a real subprocess.
|
|
9
9
|
*
|
|
10
10
|
* The same package also ships a malformed story and a schema-invalid one. Those
|
|
11
11
|
* must be DROPPED, not fatal: package stories reach dispatch before the command
|
|
@@ -43,7 +43,7 @@ ex:soup a ex:Recipe ; ex:name "Soup" .
|
|
|
43
43
|
ex:stew a ex:Recipe ; ex:name "Stew" .
|
|
44
44
|
`;
|
|
45
45
|
|
|
46
|
-
/** A valid read story — the noun the
|
|
46
|
+
/** A valid read story — the noun the distribution never shipped. */
|
|
47
47
|
const RECIPE_STORY = JSON.stringify({
|
|
48
48
|
noun: "recipe",
|
|
49
49
|
description: "List recipes.",
|
|
@@ -147,7 +147,7 @@ describe("the two recoveries still run with bad stories in the pack", () => {
|
|
|
147
147
|
});
|
|
148
148
|
});
|
|
149
149
|
|
|
150
|
-
describe("the
|
|
150
|
+
describe("the shipped entry answers the package's noun (subprocess)", () => {
|
|
151
151
|
it("pragma recipe list --format json returns the package's rows", () => {
|
|
152
152
|
const result = runCli(["recipe", "list", "--format", "json"], {
|
|
153
153
|
cwd: graph.cwd,
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* A7 — `pragma mcp
|
|
2
|
+
* A7 — `pragma mcp serve` boot, observed through the real shipped entry.
|
|
3
3
|
*
|
|
4
4
|
* Replaces the old mocked-SIGINT unit test: `runCli` spawns with no `input`,
|
|
5
5
|
* which gives the child an immediately-EOF stdin (verified equivalent to
|
|
6
6
|
* `< /dev/null`) — the shape a host that closes the pipe on shutdown produces.
|
|
7
7
|
* The server must connect and exit cleanly, not hang or crash.
|
|
8
|
+
*
|
|
9
|
+
* The other half of the contract is the one the bin's narrow short-circuit
|
|
10
|
+
* exists to keep honest: only the exact serve invocation serves. `pragma mcp`,
|
|
11
|
+
* any help form, and any argv with a token after `serve` print text or an
|
|
12
|
+
* error and start NO server — which is only observable across the process
|
|
13
|
+
* boundary, because in-process dispatch never reaches the short-circuit at
|
|
14
|
+
* all.
|
|
8
15
|
*/
|
|
9
16
|
|
|
10
17
|
import { describe, expect, it } from "vitest";
|
|
@@ -12,10 +19,58 @@ import { runCli } from "../helpers/runCli.js";
|
|
|
12
19
|
|
|
13
20
|
describe("mcp serve — stdin close boots and exits cleanly (A7, e2e)", () => {
|
|
14
21
|
it("exits 0 with no output and no signal", () => {
|
|
15
|
-
const result = runCli(["mcp"]);
|
|
22
|
+
const result = runCli(["mcp", "serve"]);
|
|
16
23
|
expect(result.exitCode).toBe(0);
|
|
17
24
|
expect(result.signal).toBeNull();
|
|
18
25
|
expect(result.stdout).toBe("");
|
|
19
26
|
expect(result.stderr).toBe("");
|
|
20
27
|
});
|
|
21
28
|
});
|
|
29
|
+
|
|
30
|
+
describe("mcp — the noun is ordinary grammar (e2e)", () => {
|
|
31
|
+
it("bare `mcp` prints the noun help and exits 0, serving nothing", () => {
|
|
32
|
+
const result = runCli(["mcp"]);
|
|
33
|
+
expect(result.exitCode).toBe(0);
|
|
34
|
+
expect(result.stdout).toContain("Usage: pragma mcp");
|
|
35
|
+
expect(result.stdout).toContain("serve");
|
|
36
|
+
// A JSON-RPC handshake would have started with `{`; help never does.
|
|
37
|
+
expect(result.stdout.startsWith("{")).toBe(false);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("`mcp --help` prints help rather than starting the server", () => {
|
|
41
|
+
const result = runCli(["mcp", "--help"]);
|
|
42
|
+
expect(result.exitCode).toBe(0);
|
|
43
|
+
expect(result.stdout).toContain("serve");
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("`mcp serve --help` documents the verb rather than starting it", () => {
|
|
47
|
+
const result = runCli(["mcp", "serve", "--help"]);
|
|
48
|
+
expect(result.exitCode).toBe(0);
|
|
49
|
+
expect(result.stdout).toContain("Start the MCP server over stdio");
|
|
50
|
+
expect(result.stdout).toContain("Usage: pragma mcp serve");
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The short-circuit matches argv EXACTLY. A prefix match would extend the
|
|
56
|
+
* stdio-purity budget — no flag parsing, no first-run, nothing on stdout but
|
|
57
|
+
* JSON-RPC — to argv the server was never asked to answer, so a suffixed line
|
|
58
|
+
* would serve instead of being parsed. These are the two suffixes that prove
|
|
59
|
+
* the fall-through: a global flag the program owns, and a stray operand.
|
|
60
|
+
*/
|
|
61
|
+
describe("mcp serve — anything suffixed falls through to the grammar (e2e)", () => {
|
|
62
|
+
it("`mcp serve --version` answers the global flag, serving nothing", () => {
|
|
63
|
+
const result = runCli(["mcp", "serve", "--version"]);
|
|
64
|
+
expect(result.exitCode).toBe(0);
|
|
65
|
+
expect(result.stdout.trim()).toMatch(/^\d+\.\d+\.\d+/);
|
|
66
|
+
// A JSON-RPC handshake would have started with `{`; a version never does.
|
|
67
|
+
expect(result.stdout.startsWith("{")).toBe(false);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("`mcp serve extra` is parsed, so its bad global value is rejected", () => {
|
|
71
|
+
const result = runCli(["mcp", "serve", "extra", "--format", "bogus"]);
|
|
72
|
+
expect(result.exitCode).toBe(2);
|
|
73
|
+
expect(result.stderr).toContain('Invalid format "bogus"');
|
|
74
|
+
expect(result.stdout).toBe("");
|
|
75
|
+
});
|
|
76
|
+
});
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* Representative args are built structurally: a lookup/sample's positional
|
|
14
14
|
* resolves through its noun's OWN `list` (browse-then-address, same as B1); a
|
|
15
15
|
* `prefix`/`uri`-named positional (the grammar's TBox/entity-inspection
|
|
16
|
-
* convention, used today by `ontology
|
|
16
|
+
* convention, used today by `ontology lookup`/`graph inspect`) resolves from the
|
|
17
17
|
* pack index generically, not by noun name. A mutating tool is called WITHOUT
|
|
18
18
|
* `confirm` (a safe plan-only preview).
|
|
19
19
|
*/
|
|
@@ -22,8 +22,32 @@ describe("--version at every level (A2, e2e)", () => {
|
|
|
22
22
|
expect(VERSION).toMatch(/^\d+\.\d+\.\d+/);
|
|
23
23
|
});
|
|
24
24
|
|
|
25
|
-
it("-v is
|
|
26
|
-
|
|
25
|
+
it("-v is rejected — --version is the one spelling", () => {
|
|
26
|
+
const result = runCli(["-v"]);
|
|
27
|
+
expect(result.exitCode).toBe(2);
|
|
28
|
+
expect(result.stderr).toContain('Unknown option "-v"');
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe("global value flags reject bad values loudly (e2e)", () => {
|
|
33
|
+
it("--format text is not a format", () => {
|
|
34
|
+
const result = runCli(["config", "show", "--format", "text"]);
|
|
35
|
+
expect(result.exitCode).toBe(2);
|
|
36
|
+
expect(result.stderr).toContain('Invalid format "text"');
|
|
37
|
+
expect(result.stderr).toContain("plain, llm, json");
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("--detail rejects an unrecognized level, naming the valid ones", () => {
|
|
41
|
+
const result = runCli(["config", "show", "--detail", "bogus"]);
|
|
42
|
+
expect(result.exitCode).toBe(2);
|
|
43
|
+
expect(result.stderr).toContain('Invalid detail "bogus"');
|
|
44
|
+
expect(result.stderr).toContain("summary, standard, detailed");
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("--verbose=<x> is rejected — the flag takes no value", () => {
|
|
48
|
+
const result = runCli(["config", "show", "--verbose=true"]);
|
|
49
|
+
expect(result.exitCode).toBe(2);
|
|
50
|
+
expect(result.stderr).toContain("`--verbose` takes no value");
|
|
27
51
|
});
|
|
28
52
|
});
|
|
29
53
|
|
|
@@ -88,7 +88,7 @@ export const effectfulEvalCases: readonly EvalCase[] = [
|
|
|
88
88
|
id: "tool-doctor-reports-check-tallies",
|
|
89
89
|
kind: "tool",
|
|
90
90
|
input:
|
|
91
|
-
"doctor returns a { checks, passed, failed, skipped } diagnostic report where the tallies sum to the checks.",
|
|
91
|
+
"doctor returns a { checks, passed, failed, available, skipped } diagnostic report where the tallies sum to the checks.",
|
|
92
92
|
async expect({ mcp }) {
|
|
93
93
|
const result = await mcp.callTool("doctor");
|
|
94
94
|
assert.equal(result.ok, true);
|
|
@@ -96,11 +96,12 @@ export const effectfulEvalCases: readonly EvalCase[] = [
|
|
|
96
96
|
checks: unknown[];
|
|
97
97
|
passed: number;
|
|
98
98
|
failed: number;
|
|
99
|
+
available: number;
|
|
99
100
|
skipped: number;
|
|
100
101
|
};
|
|
101
102
|
assert.ok(Array.isArray(data.checks), "expected a checks array");
|
|
102
103
|
assert.equal(
|
|
103
|
-
data.passed + data.failed + data.skipped,
|
|
104
|
+
data.passed + data.failed + data.available + data.skipped,
|
|
104
105
|
data.checks.length,
|
|
105
106
|
);
|
|
106
107
|
},
|
|
@@ -21,6 +21,18 @@ export const BLOCK_PREFIXES: Readonly<Record<string, string>> = {
|
|
|
21
21
|
xsd: "http://www.w3.org/2001/XMLSchema#",
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* A membership roster deep enough to cross the entity read's fan-in threshold,
|
|
26
|
+
* so the fixture exercises the SAMPLED branch and not only the listed one.
|
|
27
|
+
* Generated rather than written out: the count is the whole point of the case,
|
|
28
|
+
* and 22 hand-copied lines invite someone to "tidy" one away.
|
|
29
|
+
*/
|
|
30
|
+
const ROSTER_MEMBER_COUNT = 22;
|
|
31
|
+
const ROSTER_MEMBERS = Array.from(
|
|
32
|
+
{ length: ROSTER_MEMBER_COUNT },
|
|
33
|
+
(_, index) => `ds:probe.member${index} a ds:Probe ; ds:tier ds:rosterHub .`,
|
|
34
|
+
).join("\n");
|
|
35
|
+
|
|
24
36
|
/** The fixture ontology + individuals as Turtle. */
|
|
25
37
|
export const BLOCK_TTL = `
|
|
26
38
|
@prefix ds: <https://ds.canonical.com/> .
|
|
@@ -109,4 +121,71 @@ ds:mod.importance.secondary a ds:Modifier ; ds:name "secondary" ; ds:modifierFam
|
|
|
109
121
|
ds:mod.density.compact a ds:Modifier ; ds:name "compact" ; ds:modifierFamily ds:family.density .
|
|
110
122
|
ds:mod.size.small a ds:Modifier ; ds:name "small" ; ds:modifierFamily ds:family.size .
|
|
111
123
|
ds:mod.size.large a ds:Modifier ; ds:name "large" ; ds:modifierFamily ds:family.size .
|
|
124
|
+
|
|
125
|
+
# ---- Neighbourhood-read probes ----
|
|
126
|
+
# Typed \`ds:Probe\`, which is deliberately NOT declared as an owl:Class and is
|
|
127
|
+
# outside the block VALUES set, so these individuals reach the entity reader
|
|
128
|
+
# without entering any block list or the ontology class listing.
|
|
129
|
+
#
|
|
130
|
+
# literalTrap holds a STRING that begins with the ds: namespace. Read through
|
|
131
|
+
# the lossy string view it was indistinguishable from an IRI and got compacted
|
|
132
|
+
# into something that read back as one; the term view is what tells them apart.
|
|
133
|
+
ds:literalTrap a ds:Probe ;
|
|
134
|
+
ds:name "literal trap" ;
|
|
135
|
+
ds:figmaLink "https://ds.canonical.com/not-an-iri" .
|
|
136
|
+
|
|
137
|
+
# blankHolder carries blank-node objects — store-local handles that re-mint on
|
|
138
|
+
# every load — so the read must inline them as records AND order those records
|
|
139
|
+
# by content rather than by the label that grouped them.
|
|
140
|
+
ds:blankHolder a ds:Probe ;
|
|
141
|
+
ds:name "blank holder" ;
|
|
142
|
+
ds:changeLog [ a ds:ChangeLogEntry ; ds:changeType "decision" ; ds:change "Split the button." ] ;
|
|
143
|
+
ds:changeLog [ a ds:ChangeLogEntry ; ds:changeType "revision" ; ds:change "Renamed the slot." ] .
|
|
144
|
+
|
|
145
|
+
# One blank node reached by TWO predicates — keyed by node alone, the second
|
|
146
|
+
# edge silently vanished.
|
|
147
|
+
ds:doubleLinked a ds:Probe ;
|
|
148
|
+
ds:name "double linked" ;
|
|
149
|
+
ds:changeLog [ a ds:ChangeLogEntry ; ds:changeType "decision" ] ;
|
|
150
|
+
ds:usageNote [ a ds:ChangeLogEntry ; ds:changeType "note" ] .
|
|
151
|
+
|
|
152
|
+
# An RDF 1.2 directional literal — dropped, it reads as a plain @ar literal.
|
|
153
|
+
ds:directional a ds:Probe ;
|
|
154
|
+
ds:name "\u0645\u0631\u062D\u0628\u0627"@ar--rtl .
|
|
155
|
+
|
|
156
|
+
# The roster hub also carries ONE edge under a different predicate, so a read
|
|
157
|
+
# can prove that a 22-deep neighbour does not evict its quieter sibling.
|
|
158
|
+
ds:rosterHub a ds:Probe ; ds:name "roster hub" .
|
|
159
|
+
ds:probe.quiet a ds:Probe ; ds:hasSubcomponent ds:rosterHub .
|
|
160
|
+
${ROSTER_MEMBERS}
|
|
161
|
+
`;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* An OPT-IN overlay for the lookup-addressing suite, appended to
|
|
165
|
+
* {@link BLOCK_TTL} by the tests that need it and by nothing else — the block
|
|
166
|
+
* parity, ontology and GraphQL-engine suites assert over the base graph and
|
|
167
|
+
* must keep seeing exactly two components.
|
|
168
|
+
*
|
|
169
|
+
* It models the three shapes the addressing path gets wrong: two components
|
|
170
|
+
* sharing one `ds:name` (declared zeta-first so the store's enumeration order
|
|
171
|
+
* and IRI order DISAGREE — an unordered `LIMIT 1` picks the zeta one), and a
|
|
172
|
+
* component carrying no `ds:name` at all (reachable only by IRI, the way 131 of
|
|
173
|
+
* the 144 live code standards are).
|
|
174
|
+
*/
|
|
175
|
+
export const AMBIGUOUS_TTL = `
|
|
176
|
+
ds:apps a ds:Tier ; ds:name "apps" .
|
|
177
|
+
|
|
178
|
+
ds:zeta.chip a ds:Component ;
|
|
179
|
+
ds:name "Chip" ;
|
|
180
|
+
ds:tier ds:global ;
|
|
181
|
+
ds:summary "The zeta chip — declared first, sorts last." .
|
|
182
|
+
|
|
183
|
+
ds:alpha.chip a ds:Component ;
|
|
184
|
+
ds:name "Chip" ;
|
|
185
|
+
ds:tier ds:apps ;
|
|
186
|
+
ds:summary "The alpha chip — declared last, sorts first." .
|
|
187
|
+
|
|
188
|
+
ds:nameless.widget a ds:Component ;
|
|
189
|
+
ds:tier ds:global ;
|
|
190
|
+
ds:summary "Carries no ds:name; addressable only by IRI." .
|
|
112
191
|
`;
|
|
@@ -160,11 +160,97 @@ ds:prompt.configure a ds:Prompt ;
|
|
|
160
160
|
ds:prompt.scaffold-component a ds:Prompt ;
|
|
161
161
|
rdfs:label "scaffold-component" ;
|
|
162
162
|
rdfs:comment "Scaffold a new component and align it to the standards." ;
|
|
163
|
-
ds:promptBody "Scaffold the {{componentName}} component in {{framework}}. Use create_component with
|
|
163
|
+
ds:promptBody "Scaffold the {{componentName}} component in {{framework}}. Use create_component with framework {{framework}} and the component path, then review the generated files against the react/component standards via standard_lookup." ;
|
|
164
164
|
ds:promptArgument [ ds:argName "componentName" ; rdfs:comment "Component name/path (e.g. Button)." ; ds:argRequired true ] ;
|
|
165
165
|
ds:promptArgument [ ds:argName "framework" ; rdfs:comment "react | svelte | lit." ; ds:argRequired false ] .
|
|
166
166
|
`;
|
|
167
167
|
|
|
168
|
+
/** The `ds:Concept` section — long-form documentation entries the `concept`
|
|
169
|
+
* story reads. Mirrors the real design-system data shape (canonical/design-system#64):
|
|
170
|
+
* `ds:name`/`ds:summary`/`ds:tier` base, the Markdown body in `ds:content`
|
|
171
|
+
* (standard disclosure), `ds:knownEdgeCases` (detailed), and `ds:conceptType`
|
|
172
|
+
* → a named `ds:ConceptType` individual carrying its own `ds:name`. */
|
|
173
|
+
const CONCEPT_TTL = `
|
|
174
|
+
ds:Concept a owl:Class .
|
|
175
|
+
ds:ConceptType a owl:Class .
|
|
176
|
+
ds:content a owl:DatatypeProperty ; rdfs:domain ds:Concept ; rdfs:range xsd:string .
|
|
177
|
+
ds:knownEdgeCases a owl:DatatypeProperty ; rdfs:domain ds:Concept ; rdfs:range xsd:string .
|
|
178
|
+
ds:conceptType a owl:ObjectProperty ; rdfs:domain ds:Concept ; rdfs:range ds:ConceptType .
|
|
179
|
+
|
|
180
|
+
ds:concepttype.Explanation a ds:ConceptType ;
|
|
181
|
+
ds:name "Explanation" ;
|
|
182
|
+
ds:summary "Concept documentation that deepens understanding of a topic." .
|
|
183
|
+
|
|
184
|
+
ds:concepttype.How-to-guide a ds:ConceptType ;
|
|
185
|
+
ds:name "How-to guide" ;
|
|
186
|
+
ds:summary "Concept documentation that walks through solving a problem." .
|
|
187
|
+
|
|
188
|
+
ds:concept.Foundations-Grid a ds:Concept ;
|
|
189
|
+
ds:name "Foundations: Grid" ;
|
|
190
|
+
ds:summary "How the grid system underpins every layout." ;
|
|
191
|
+
ds:tier ds:global ;
|
|
192
|
+
ds:conceptType ds:concepttype.Explanation ;
|
|
193
|
+
ds:content "The grid is the shared spatial contract every block lays out against." ;
|
|
194
|
+
ds:knownEdgeCases "Nested grids inherit the outer gutter unless re-declared." .
|
|
195
|
+
|
|
196
|
+
ds:concept.Question-mark-vs-information-icon a ds:Concept ;
|
|
197
|
+
ds:name "Question mark vs information icon" ;
|
|
198
|
+
ds:summary "Deciding between the information icon and the question mark icon." ;
|
|
199
|
+
ds:tier ds:global ;
|
|
200
|
+
ds:conceptType ds:concepttype.How-to-guide ;
|
|
201
|
+
ds:content "The information icon offers context proactively; the question mark answers a question the user already has." ;
|
|
202
|
+
ds:knownEdgeCases "Icon interpretation depends on the user's prior conventions." .
|
|
203
|
+
`;
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* The implementation graph: two libraries whose `ds:implementsBlock` edges point
|
|
207
|
+
* at `BLOCK_TTL`'s own Button/Modal IRIs, so a test can prove the cross-pack
|
|
208
|
+
* join (an implementation collected from source resolving to a block declared by
|
|
209
|
+
* the design system) rather than just the shape of a row. Button is implemented
|
|
210
|
+
* TWICE, on two platforms — the case `--platform` has to separate.
|
|
211
|
+
*/
|
|
212
|
+
const IMPLEMENTATION_TTL = `
|
|
213
|
+
ds:ImplementationLibrary a owl:Class .
|
|
214
|
+
ds:ImplementationObject a owl:Class .
|
|
215
|
+
ds:hasImplementation a owl:ObjectProperty ; rdfs:domain ds:ImplementationLibrary ; rdfs:range ds:ImplementationObject .
|
|
216
|
+
ds:implementsBlock a owl:ObjectProperty ; rdfs:domain ds:ImplementationObject ; rdfs:range ds:UIBlock .
|
|
217
|
+
ds:libraryName a owl:DatatypeProperty ; rdfs:domain ds:ImplementationLibrary ; rdfs:range xsd:string .
|
|
218
|
+
ds:platform a owl:DatatypeProperty ; rdfs:domain ds:ImplementationLibrary ; rdfs:range xsd:string .
|
|
219
|
+
ds:libraryTier a owl:ObjectProperty ; rdfs:domain ds:ImplementationLibrary ; rdfs:range ds:Tier .
|
|
220
|
+
ds:implementationCount a owl:DatatypeProperty ; rdfs:domain ds:ImplementationLibrary ; rdfs:range xsd:integer .
|
|
221
|
+
ds:headLink a owl:DatatypeProperty ; rdfs:domain ds:ImplementationObject ; rdfs:range xsd:string .
|
|
222
|
+
ds:versionedLink a owl:DatatypeProperty ; rdfs:domain ds:ImplementationObject ; rdfs:range xsd:string .
|
|
223
|
+
|
|
224
|
+
ds:implementation.library.react-ds-global a ds:ImplementationLibrary ;
|
|
225
|
+
ds:libraryName "@canonical/react-ds-global" ;
|
|
226
|
+
ds:platform "react" ;
|
|
227
|
+
ds:libraryTier ds:global ;
|
|
228
|
+
ds:version "0.34.0" ;
|
|
229
|
+
ds:implementationCount 2 ;
|
|
230
|
+
ds:hasImplementation ds:implementation.react-ds-global.button,
|
|
231
|
+
ds:implementation.react-ds-global.modal .
|
|
232
|
+
|
|
233
|
+
ds:implementation.react-ds-global.button a ds:ImplementationObject ;
|
|
234
|
+
ds:implementsBlock ds:button ;
|
|
235
|
+
ds:headLink "https://example.test/react/Button.tsx" .
|
|
236
|
+
|
|
237
|
+
ds:implementation.react-ds-global.modal a ds:ImplementationObject ;
|
|
238
|
+
ds:implementsBlock ds:modal ;
|
|
239
|
+
ds:headLink "https://example.test/react/Modal.tsx" .
|
|
240
|
+
|
|
241
|
+
ds:implementation.library.svelte-ds-global a ds:ImplementationLibrary ;
|
|
242
|
+
ds:libraryName "@canonical/svelte-ds-global" ;
|
|
243
|
+
ds:platform "svelte" ;
|
|
244
|
+
ds:libraryTier ds:global ;
|
|
245
|
+
ds:version "0.34.0" ;
|
|
246
|
+
ds:implementationCount 1 ;
|
|
247
|
+
ds:hasImplementation ds:implementation.svelte-ds-global.button .
|
|
248
|
+
|
|
249
|
+
ds:implementation.svelte-ds-global.button a ds:ImplementationObject ;
|
|
250
|
+
ds:implementsBlock ds:button ;
|
|
251
|
+
ds:headLink "https://example.test/svelte/Button.svelte" .
|
|
252
|
+
`;
|
|
253
|
+
|
|
168
254
|
/** The prefixes the canonical store is built and queried with. */
|
|
169
255
|
export const CANONICAL_PREFIXES: Readonly<Record<string, string>> = {
|
|
170
256
|
...BLOCK_PREFIXES,
|
|
@@ -172,7 +258,7 @@ export const CANONICAL_PREFIXES: Readonly<Record<string, string>> = {
|
|
|
172
258
|
};
|
|
173
259
|
|
|
174
260
|
/** The full canonical Turtle: PR3's `BLOCK_TTL` verbatim, plus the sections above. */
|
|
175
|
-
export const CANONICAL_TTL = `${BLOCK_TTL}\n${DS_EXTRA_TTL}\n${CS_TTL}\n${PROMPT_TTL}`;
|
|
261
|
+
export const CANONICAL_TTL = `${BLOCK_TTL}\n${DS_EXTRA_TTL}\n${CS_TTL}\n${PROMPT_TTL}\n${CONCEPT_TTL}\n${IMPLEMENTATION_TTL}`;
|
|
176
262
|
|
|
177
263
|
/** Default viewing config: no tier set, `normal` channel — drops the beta-only block. */
|
|
178
264
|
export const CANONICAL_CONFIG = { channel: "normal" as const };
|
|
@@ -171,7 +171,7 @@ ex:beta ex:name "Beta" .
|
|
|
171
171
|
/**
|
|
172
172
|
* A malformed Turtle source — a subject/predicate with no object — drives the
|
|
173
173
|
* `sources update` data-error classification path (a NAMED `CONFIG_ERROR`, not
|
|
174
|
-
* an INTERNAL "
|
|
174
|
+
* an INTERNAL "report this issue").
|
|
175
175
|
*/
|
|
176
176
|
export const MALFORMED_TTL = `@prefix ex: <https://ex.test/#> .
|
|
177
177
|
ex:One a ex:Widget .
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blank the @canonical/* dependency ranges inside a scaffolded application's
|
|
3
|
+
* `my-app/package.json` — identically on every snapshot — before a byte
|
|
4
|
+
* comparison. The application generator resolves its range through each
|
|
5
|
+
* producer's OWN `npm view` call (no timeout, no shared cache), so an
|
|
6
|
+
* asymmetric registry outcome (one producer reaches npm and another does
|
|
7
|
+
* not, or a @canonical/* release lands between the calls) would turn
|
|
8
|
+
* `^0.34.0` vs `^0.33.0` across all 11 ranges into a red that says nothing
|
|
9
|
+
* about the code under test. The networked cases prove the TEMPLATE surface;
|
|
10
|
+
* range truth belongs to the offline cells, where the outcome is forced
|
|
11
|
+
* (`capabilities/create/shippedCreate.subprocess.test.ts`).
|
|
12
|
+
*
|
|
13
|
+
* The regex preserves the dependency KEY (`$1`), so a key-set or
|
|
14
|
+
* non-@canonical divergence still fails; only the range value collapses.
|
|
15
|
+
* Deliberately import-free — a pure string transform no module-graph guard
|
|
16
|
+
* can ever see.
|
|
17
|
+
*
|
|
18
|
+
* @param tree - A tree snapshot (relative path → contents).
|
|
19
|
+
* @param manifestPath - The scaffolded manifest's path within the tree.
|
|
20
|
+
* @returns A NEW map with the manifest's @canonical/* ranges blanked; the
|
|
21
|
+
* input is untouched. A tree without the manifest comes back copied as-is.
|
|
22
|
+
*/
|
|
23
|
+
export function blankCanonicalRanges(
|
|
24
|
+
tree: ReadonlyMap<string, string>,
|
|
25
|
+
manifestPath = "my-app/package.json",
|
|
26
|
+
): Map<string, string> {
|
|
27
|
+
const out = new Map(tree);
|
|
28
|
+
const manifest = out.get(manifestPath);
|
|
29
|
+
if (manifest !== undefined) {
|
|
30
|
+
out.set(
|
|
31
|
+
manifestPath,
|
|
32
|
+
manifest.replaceAll(/("@canonical\/[^"]+": )"[^"]+"/g, '$1"<range>"'),
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|