@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
|
@@ -33,10 +33,9 @@ function moduleWith(overrides: Partial<VerbSpec>): CapabilityModule {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
describe("buildCompletionModel — structure", () => {
|
|
36
|
-
it("collects nouns sorted,
|
|
36
|
+
it("collects nouns sorted, from the declared verbs alone", () => {
|
|
37
37
|
expect(model.nouns.map((n) => n.noun)).toEqual([
|
|
38
38
|
"block",
|
|
39
|
-
"mcp",
|
|
40
39
|
"standard",
|
|
41
40
|
"status",
|
|
42
41
|
]);
|
|
@@ -62,17 +61,12 @@ describe("buildCompletionModel — structure", () => {
|
|
|
62
61
|
expect(status?.verbs).toEqual([]);
|
|
63
62
|
});
|
|
64
63
|
|
|
65
|
-
it("
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
flags: [],
|
|
71
|
-
positionals: [],
|
|
72
|
-
});
|
|
73
|
-
});
|
|
64
|
+
it("offers the mcp noun from its declared verb, with no self-verb", () => {
|
|
65
|
+
// The noun used to be conjured here because the bin served it without a
|
|
66
|
+
// spec; nothing is conjured now, so a module that declares no mcp verb
|
|
67
|
+
// gets no mcp noun.
|
|
68
|
+
expect(findNoun(model, "mcp")).toBeUndefined();
|
|
74
69
|
|
|
75
|
-
it("does not inject mcp when a live mcp noun exists", () => {
|
|
76
70
|
const withMcp = buildCompletionModel([
|
|
77
71
|
moduleWith({ path: ["mcp", "serve"] }),
|
|
78
72
|
]);
|
|
@@ -121,6 +115,38 @@ describe("buildCompletionModel — flags and sources", () => {
|
|
|
121
115
|
});
|
|
122
116
|
});
|
|
123
117
|
|
|
118
|
+
it("marks a spec-declared repeatable string/enum flag repeatable", () => {
|
|
119
|
+
// `string[]` is not the only accumulating shape: a compiled pack marks
|
|
120
|
+
// every declared filter `repeatable`, so `--category css --category git`
|
|
121
|
+
// is the union. Reading the kind alone de-offered the flag after its
|
|
122
|
+
// first use, which is exactly when repetition becomes offerable.
|
|
123
|
+
const repeatables = buildCompletionModel([
|
|
124
|
+
moduleWith({
|
|
125
|
+
params: [
|
|
126
|
+
{
|
|
127
|
+
kind: "enum",
|
|
128
|
+
name: "category",
|
|
129
|
+
doc: "Filter by category.",
|
|
130
|
+
values: ["css", "git"],
|
|
131
|
+
repeatable: true,
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
kind: "string",
|
|
135
|
+
name: "search",
|
|
136
|
+
doc: "Free text.",
|
|
137
|
+
repeatable: true,
|
|
138
|
+
},
|
|
139
|
+
{ kind: "string", name: "note", doc: "Once only." },
|
|
140
|
+
],
|
|
141
|
+
}),
|
|
142
|
+
]);
|
|
143
|
+
const thing = findNoun(repeatables, "thing")?.selfVerb;
|
|
144
|
+
const flagOf = (flag: string) => thing?.flags.find((f) => f.flag === flag);
|
|
145
|
+
expect(flagOf("--category")?.repeatable).toBe(true);
|
|
146
|
+
expect(flagOf("--search")?.repeatable).toBe(true);
|
|
147
|
+
expect(flagOf("--note")?.repeatable).toBe(false);
|
|
148
|
+
});
|
|
149
|
+
|
|
124
150
|
it("resolves name positionals with required/variadic markers", () => {
|
|
125
151
|
expect(get?.positionals).toEqual([
|
|
126
152
|
{
|
|
@@ -270,6 +296,11 @@ describe("buildCompletionModel — flags and sources", () => {
|
|
|
270
296
|
kind: "values",
|
|
271
297
|
values: ["summary", "standard", "detailed"],
|
|
272
298
|
});
|
|
299
|
+
// Every flag the global parser accepts is offered — a flag the surface
|
|
300
|
+
// advertises but completion omits is invisible at the TAB that would
|
|
301
|
+
// teach it.
|
|
302
|
+
expect(flags["--no-headers"]).toMatchObject({ takesValue: false });
|
|
303
|
+
expect(flags["--quiet"]).toMatchObject({ takesValue: false });
|
|
273
304
|
expect(flags["--llm"]).toBeUndefined();
|
|
274
305
|
expect(flags["--version"]?.rootOnly).toBe(true);
|
|
275
306
|
expect(flags["--help"]?.rootOnly).toBeUndefined();
|
|
@@ -350,6 +381,22 @@ function expectAgreement(
|
|
|
350
381
|
.filter((noun) => noun !== "mcp" || surfaceNouns.includes("mcp"));
|
|
351
382
|
expect(modelNouns).toEqual(surfaceNouns);
|
|
352
383
|
|
|
384
|
+
// A module-owned mount REPLACES its verbs' completion surface with the
|
|
385
|
+
// flags/positionals the mounted tree actually registers, so agreement for
|
|
386
|
+
// those verbs is asserted against the module's declared projection data —
|
|
387
|
+
// not the covenant-facing surface flags (which record binding param names).
|
|
388
|
+
const mountedByNoun = new Map<
|
|
389
|
+
string,
|
|
390
|
+
Readonly<Record<string, import("../spec/types.js").CompletionChildSpec>>
|
|
391
|
+
>();
|
|
392
|
+
for (const module of modules) {
|
|
393
|
+
if (!module.cliProjection) continue;
|
|
394
|
+
const children = module.cliProjection.completionChildren();
|
|
395
|
+
for (const verb of module.verbs) {
|
|
396
|
+
mountedByNoun.set(verb.path[0], children);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
353
400
|
for (const noun of surfaceNouns) {
|
|
354
401
|
const nounEntry = findNoun(completionModel, noun);
|
|
355
402
|
expect(nounEntry).toBeDefined();
|
|
@@ -362,6 +409,7 @@ function expectAgreement(
|
|
|
362
409
|
].sort();
|
|
363
410
|
expect(modelLabels).toEqual(surfaceVerbs.map((v) => v.v).sort());
|
|
364
411
|
|
|
412
|
+
const mounted = mountedByNoun.get(noun);
|
|
365
413
|
for (const surfaceVerb of surfaceVerbs) {
|
|
366
414
|
const modelVerb: VerbEntry | undefined =
|
|
367
415
|
nounEntry.selfVerb?.label === surfaceVerb.v
|
|
@@ -370,6 +418,26 @@ function expectAgreement(
|
|
|
370
418
|
expect(modelVerb).toBeDefined();
|
|
371
419
|
if (!modelVerb) continue;
|
|
372
420
|
|
|
421
|
+
const mountedSpec = mounted?.[surfaceVerb.v];
|
|
422
|
+
if (mountedSpec) {
|
|
423
|
+
expect(modelVerb.flags.map((f) => f.flag)).toEqual(
|
|
424
|
+
mountedSpec.flags.map((f) => f.flag),
|
|
425
|
+
);
|
|
426
|
+
expect(modelVerb.positionals.map((p) => p.name)).toEqual(
|
|
427
|
+
mountedSpec.positionals.map((p) => p.name),
|
|
428
|
+
);
|
|
429
|
+
expect((modelVerb.children ?? []).map((c) => c.label)).toEqual(
|
|
430
|
+
(mountedSpec.children ?? []).map((c) => c.label),
|
|
431
|
+
);
|
|
432
|
+
// A namespace node (children) never mutates for completion: the
|
|
433
|
+
// mounted tree registers the mutation trio on runnable leaves only.
|
|
434
|
+
const isNamespace = (mountedSpec.children ?? []).length > 0;
|
|
435
|
+
expect(modelVerb.mutates).toBe(
|
|
436
|
+
!isNamespace && surfaceVerb.mutates === true,
|
|
437
|
+
);
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
|
|
373
441
|
expect(modelVerb.flags.map((f) => f.flag)).toEqual(
|
|
374
442
|
surfaceVerb.flags ?? [],
|
|
375
443
|
);
|
|
@@ -393,6 +461,90 @@ describe("projection agreement with emitSurface (PROTECTED)", () => {
|
|
|
393
461
|
});
|
|
394
462
|
});
|
|
395
463
|
|
|
464
|
+
describe("mounted create completion — literal candidate pins (PROTECTED)", () => {
|
|
465
|
+
// The mounted-tree branch of the agreement describe compares the model to
|
|
466
|
+
// completionChildren() — the same call the model was BUILT from, so it can
|
|
467
|
+
// never catch that surface going wrong (a garbage projection satisfies
|
|
468
|
+
// it). These pins are the INDEPENDENT source: literal candidate sets
|
|
469
|
+
// through the real resolver, shellDrive noun-tier style — the segment
|
|
470
|
+
// descent (parse.ts children walk) and a leaf's registered flags.
|
|
471
|
+
|
|
472
|
+
it("segment tier: `create component <TAB>` offers exactly the framework segments", async () => {
|
|
473
|
+
const { runComplete } = await import("./complete.js");
|
|
474
|
+
expect(
|
|
475
|
+
await runComplete(["create", "component", ""], capabilities),
|
|
476
|
+
).toEqual(["lit", "react", "svelte"]);
|
|
477
|
+
expect(
|
|
478
|
+
await runComplete(["create", "application", ""], capabilities),
|
|
479
|
+
).toEqual(["react"]);
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
it("namespace flag tier: `create component --<TAB>` offers NO leaf prompt or mutation flags", async () => {
|
|
483
|
+
const { runComplete } = await import("./complete.js");
|
|
484
|
+
// Prompt AND mutation flags are registered on the LEAVES; a pre-segment
|
|
485
|
+
// offer completes orderings Commander rejects (`create component
|
|
486
|
+
// --use-ts-stories svelte` and `create component --dry-run react` both
|
|
487
|
+
// exit 2 as unknown options). Until a framework segment is typed, only
|
|
488
|
+
// the global tier is offered.
|
|
489
|
+
expect(
|
|
490
|
+
await runComplete(["create", "component", "--"], capabilities),
|
|
491
|
+
).toEqual([
|
|
492
|
+
"--detail",
|
|
493
|
+
"--format",
|
|
494
|
+
"--help",
|
|
495
|
+
"--no-headers",
|
|
496
|
+
"--quiet",
|
|
497
|
+
"--verbose",
|
|
498
|
+
]);
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
it("leaf flag tier: `create component react --<TAB>` offers the REGISTERED flags", async () => {
|
|
502
|
+
const { runComplete } = await import("./complete.js");
|
|
503
|
+
// The leaf's prompt-derived flags in their registered spelling (--no-
|
|
504
|
+
// forms for default-true confirms, --component-path for the positional
|
|
505
|
+
// prompt — addPromptOptions registers EVERY prompt as an option), the
|
|
506
|
+
// mutation trio, and the root globals — as literals, so dropping the
|
|
507
|
+
// framework positional's values or a leaf prompt flag goes red instead
|
|
508
|
+
// of silently green.
|
|
509
|
+
expect(
|
|
510
|
+
await runComplete(["create", "component", "react", "--"], capabilities),
|
|
511
|
+
).toEqual([
|
|
512
|
+
"--component-path",
|
|
513
|
+
"--detail",
|
|
514
|
+
"--dry-run",
|
|
515
|
+
"--format",
|
|
516
|
+
"--help",
|
|
517
|
+
"--no-headers",
|
|
518
|
+
"--no-with-ssr-tests",
|
|
519
|
+
"--no-with-stories",
|
|
520
|
+
"--no-with-styles",
|
|
521
|
+
"--quiet",
|
|
522
|
+
"--undo",
|
|
523
|
+
"--verbose",
|
|
524
|
+
"--yes",
|
|
525
|
+
]);
|
|
526
|
+
// Svelte's leaf carries its own extra flag — per-leaf, not unioned.
|
|
527
|
+
expect(
|
|
528
|
+
await runComplete(["create", "component", "svelte", "--"], capabilities),
|
|
529
|
+
).toEqual([
|
|
530
|
+
"--component-path",
|
|
531
|
+
"--detail",
|
|
532
|
+
"--dry-run",
|
|
533
|
+
"--format",
|
|
534
|
+
"--help",
|
|
535
|
+
"--no-headers",
|
|
536
|
+
"--no-with-ssr-tests",
|
|
537
|
+
"--no-with-stories",
|
|
538
|
+
"--no-with-styles",
|
|
539
|
+
"--quiet",
|
|
540
|
+
"--undo",
|
|
541
|
+
"--use-ts-stories",
|
|
542
|
+
"--verbose",
|
|
543
|
+
"--yes",
|
|
544
|
+
]);
|
|
545
|
+
});
|
|
546
|
+
});
|
|
547
|
+
|
|
396
548
|
/** Regression pin: ParamSpec.complete stays optional on every param kind. */
|
|
397
549
|
it("accepts params without a complete field", () => {
|
|
398
550
|
const params: ParamSpec[] = [
|
|
@@ -25,8 +25,13 @@
|
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
27
|
import { DETAIL_LEVELS, OUTPUT_FORMATS } from "../../constants.js";
|
|
28
|
-
import { kebabCase, verbLabel } from "../spec/
|
|
29
|
-
import type {
|
|
28
|
+
import { kebabCase, verbLabel } from "../spec/index.js";
|
|
29
|
+
import type {
|
|
30
|
+
CapabilityModule,
|
|
31
|
+
CompletionChildSpec,
|
|
32
|
+
ParamSpec,
|
|
33
|
+
VerbSpec,
|
|
34
|
+
} from "../spec/types.js";
|
|
30
35
|
import type {
|
|
31
36
|
CompletionModel,
|
|
32
37
|
CompletionSource,
|
|
@@ -85,6 +90,13 @@ const GLOBAL_FLAGS: readonly FlagEntry[] = [
|
|
|
85
90
|
repeatable: false,
|
|
86
91
|
source: { kind: "values", values: DETAIL_LEVELS },
|
|
87
92
|
},
|
|
93
|
+
{
|
|
94
|
+
flag: "--no-headers",
|
|
95
|
+
takesValue: false,
|
|
96
|
+
repeatable: false,
|
|
97
|
+
source: none(),
|
|
98
|
+
},
|
|
99
|
+
{ flag: "--quiet", takesValue: false, repeatable: false, source: none() },
|
|
88
100
|
{ flag: "--help", takesValue: false, repeatable: false, source: none() },
|
|
89
101
|
{
|
|
90
102
|
flag: "--version",
|
|
@@ -181,7 +193,12 @@ function toVerbEntry(verb: VerbSpec): VerbEntry {
|
|
|
181
193
|
flags.push({
|
|
182
194
|
flag: `--${name}`,
|
|
183
195
|
takesValue: param.kind !== "boolean",
|
|
184
|
-
repeatable:
|
|
196
|
+
// Two grammars accumulate, so two shapes are repeatable: a `string[]`
|
|
197
|
+
// flag (`--tag a --tag b`) and any `string`/`enum` param the spec
|
|
198
|
+
// marks `repeatable` — the form compiled packs give every declared
|
|
199
|
+
// filter. Reading only the kind de-offered a filter after its first
|
|
200
|
+
// use, hiding the repetition the parser had just started honouring.
|
|
201
|
+
repeatable: param.kind === "string[]" || param.repeatable === true,
|
|
185
202
|
source,
|
|
186
203
|
});
|
|
187
204
|
}
|
|
@@ -190,18 +207,73 @@ function toVerbEntry(verb: VerbSpec): VerbEntry {
|
|
|
190
207
|
return { label, mutates: verb.capability.mutates, flags, positionals };
|
|
191
208
|
}
|
|
192
209
|
|
|
193
|
-
/**
|
|
194
|
-
|
|
195
|
-
|
|
210
|
+
/**
|
|
211
|
+
* Convert one module-declared completion node (a mounted subtree's static
|
|
212
|
+
* data) into a verb entry, asserting every inlinable token's safety exactly
|
|
213
|
+
* as spec-derived entries are asserted. `mutates` is the owning verb's
|
|
214
|
+
* mutability, applied only to the LEAVES (see the namespace note below).
|
|
215
|
+
*/
|
|
216
|
+
function toMountedEntry(
|
|
217
|
+
spec: CompletionChildSpec,
|
|
218
|
+
mutates: boolean,
|
|
219
|
+
where: string,
|
|
220
|
+
): VerbEntry {
|
|
221
|
+
assertSafeToken(spec.label, `${where} label`);
|
|
222
|
+
const flags: FlagEntry[] = spec.flags.map((flag) => {
|
|
223
|
+
const name = flag.flag.replace(/^--?/, "");
|
|
224
|
+
assertSafeToken(name, `${where} flag "${flag.flag}"`);
|
|
225
|
+
const source: CompletionSource = flag.values
|
|
226
|
+
? { kind: "values", values: flag.values }
|
|
227
|
+
: none();
|
|
228
|
+
assertSafeSource(source, `${where} flag "${flag.flag}"`);
|
|
229
|
+
return {
|
|
230
|
+
flag: flag.flag,
|
|
231
|
+
takesValue: flag.takesValue,
|
|
232
|
+
repeatable: false,
|
|
233
|
+
source,
|
|
234
|
+
};
|
|
235
|
+
});
|
|
236
|
+
const positionals: PositionalEntry[] = spec.positionals.map((positional) => {
|
|
237
|
+
const source: CompletionSource = positional.values
|
|
238
|
+
? { kind: "values", values: positional.values }
|
|
239
|
+
: positional.files
|
|
240
|
+
? { kind: "files" }
|
|
241
|
+
: none();
|
|
242
|
+
assertSafeSource(source, `${where} positional "${positional.name}"`);
|
|
243
|
+
return {
|
|
244
|
+
name: positional.name,
|
|
245
|
+
required: positional.required,
|
|
246
|
+
variadic: false,
|
|
247
|
+
source,
|
|
248
|
+
};
|
|
249
|
+
});
|
|
250
|
+
const children =
|
|
251
|
+
spec.children && spec.children.length > 0
|
|
252
|
+
? spec.children.map((child) =>
|
|
253
|
+
toMountedEntry(child, mutates, `${where}/${child.label}`),
|
|
254
|
+
)
|
|
255
|
+
: undefined;
|
|
256
|
+
return {
|
|
257
|
+
label: spec.label,
|
|
258
|
+
// A node with children is a NAMESPACE, not a runnable command:
|
|
259
|
+
// `registerGeneratorCommands` adds the host mutation trio to runnable
|
|
260
|
+
// LEAVES only, so a mutating namespace would offer `--dry-run`/`--undo`/
|
|
261
|
+
// `--yes` BEFORE the framework segment — an ordering the CLI rejects as
|
|
262
|
+
// an unknown option. The verb's mutability descends to the leaves.
|
|
263
|
+
mutates: children ? false : mutates,
|
|
264
|
+
flags,
|
|
265
|
+
positionals,
|
|
266
|
+
...(children ? { children } : {}),
|
|
267
|
+
};
|
|
196
268
|
}
|
|
197
269
|
|
|
198
270
|
/**
|
|
199
271
|
* Derive the completion model from the capability modules.
|
|
200
272
|
*
|
|
201
273
|
* Hidden verbs are excluded (matching `emitSurface` and `buildProgram`).
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
274
|
+
* Every noun in the model comes from a declared verb — `mcp` used to be
|
|
275
|
+
* injected here because the bin served it without a spec, and it now declares
|
|
276
|
+
* `mcp serve` like any other pair.
|
|
205
277
|
*
|
|
206
278
|
* @param modules - The capability modules.
|
|
207
279
|
* @returns The completion model, nouns and verbs sorted.
|
|
@@ -225,12 +297,24 @@ export function buildCompletionModel(
|
|
|
225
297
|
};
|
|
226
298
|
|
|
227
299
|
for (const module of modules) {
|
|
300
|
+
// A module-owned mount REPLACES its verbs' completion surface: the flags
|
|
301
|
+
// the mounted tree actually registers (e.g. a default-on confirm's
|
|
302
|
+
// `--no-` form), the segment positionals, and the child walk — declared
|
|
303
|
+
// as static data by the module, converted and safety-asserted here.
|
|
304
|
+
const mountedChildren = module.cliProjection?.completionChildren();
|
|
228
305
|
for (const verb of module.verbs) {
|
|
229
306
|
if (verb.hidden) continue;
|
|
230
307
|
const noun = verb.path[0];
|
|
231
308
|
assertSafeToken(noun, `noun "${noun}"`);
|
|
232
309
|
const bucket = bucketFor(noun);
|
|
233
|
-
const
|
|
310
|
+
const mountedSpec = mountedChildren?.[verbLabel(verb.path)];
|
|
311
|
+
const entry = mountedSpec
|
|
312
|
+
? toMountedEntry(
|
|
313
|
+
mountedSpec,
|
|
314
|
+
verb.capability.mutates,
|
|
315
|
+
`mounted "${verb.path.join(" ")}"`,
|
|
316
|
+
)
|
|
317
|
+
: toVerbEntry(verb);
|
|
234
318
|
if (verb.path[1] === undefined) {
|
|
235
319
|
bucket.selfVerb = entry;
|
|
236
320
|
} else {
|
|
@@ -239,10 +323,6 @@ export function buildCompletionModel(
|
|
|
239
323
|
}
|
|
240
324
|
}
|
|
241
325
|
|
|
242
|
-
if (!byNoun.has("mcp")) {
|
|
243
|
-
byNoun.set("mcp", { selfVerb: bareSelfVerb("mcp"), verbs: [] });
|
|
244
|
-
}
|
|
245
|
-
|
|
246
326
|
const nouns: NounEntry[] = [...byNoun.entries()]
|
|
247
327
|
.map(([noun, bucket]) => ({
|
|
248
328
|
noun,
|
|
@@ -86,6 +86,8 @@ describe("parseWords — flag names (PROTECTED)", () => {
|
|
|
86
86
|
"--format",
|
|
87
87
|
"--verbose",
|
|
88
88
|
"--detail",
|
|
89
|
+
"--no-headers",
|
|
90
|
+
"--quiet",
|
|
89
91
|
"--help",
|
|
90
92
|
"--version",
|
|
91
93
|
]);
|
|
@@ -107,6 +109,8 @@ describe("parseWords — flag names (PROTECTED)", () => {
|
|
|
107
109
|
"--format",
|
|
108
110
|
"--verbose",
|
|
109
111
|
"--detail",
|
|
112
|
+
"--no-headers",
|
|
113
|
+
"--quiet",
|
|
110
114
|
"--help",
|
|
111
115
|
]);
|
|
112
116
|
});
|
|
@@ -326,11 +330,4 @@ describe("parseWords — self-verb nouns (PROTECTED)", () => {
|
|
|
326
330
|
reason: "positionals exhausted",
|
|
327
331
|
});
|
|
328
332
|
});
|
|
329
|
-
|
|
330
|
-
it("the injected mcp noun completes but offers nothing after", () => {
|
|
331
|
-
expect(parse(["mcp", ""]).context).toEqual({
|
|
332
|
-
kind: "nothing",
|
|
333
|
-
reason: "positionals exhausted",
|
|
334
|
-
});
|
|
335
|
-
});
|
|
336
333
|
});
|
|
@@ -137,6 +137,21 @@ function scanCommandWord(
|
|
|
137
137
|
return;
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
+
// A verb with segment children (a mounted subtree): the word resolves
|
|
141
|
+
// against the children BEFORE positional counting — a match descends, so
|
|
142
|
+
// deeper flags/positionals are the child's own; a non-match is terminal.
|
|
143
|
+
const resolved = knownVerb(state);
|
|
144
|
+
if (resolved?.children && resolved.children.length > 0) {
|
|
145
|
+
const child = resolved.children.find((entry) => entry.label === word);
|
|
146
|
+
if (child) {
|
|
147
|
+
state.verb = child;
|
|
148
|
+
state.positionalsSeen = 0;
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
state.verb = "unknown";
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
140
155
|
state.positionalsSeen += 1;
|
|
141
156
|
}
|
|
142
157
|
|
|
@@ -319,7 +319,7 @@ describe("storeless guarantee (PROTECTED)", () => {
|
|
|
319
319
|
|
|
320
320
|
// prefixes: `ds` is in the default display map, so it comes back for `d`.
|
|
321
321
|
await expect(
|
|
322
|
-
runComplete(["ontology", "
|
|
322
|
+
runComplete(["ontology", "lookup", "d"], capabilities, env),
|
|
323
323
|
).resolves.toContain("ds");
|
|
324
324
|
|
|
325
325
|
// index (derived, no field): the tier lookup is a declared pack lookup
|
|
@@ -345,14 +345,14 @@ describe("storeless guarantee (PROTECTED)", () => {
|
|
|
345
345
|
});
|
|
346
346
|
|
|
347
347
|
it("the spawned __complete fast path answers without touching any state", () => {
|
|
348
|
-
// The perf globalSetup guarantees dist
|
|
348
|
+
// The perf globalSetup guarantees the emitted `dist/` exists.
|
|
349
349
|
// A FRESH INSTALL, reproduced: nothing is inherited from this process's
|
|
350
350
|
// environment, the cwd holds no config, and $HOME plus all three XDG roots
|
|
351
|
-
// are empty temps. Anything the
|
|
351
|
+
// are empty temps. Anything the entry answers here it answered from
|
|
352
352
|
// itself. (The suite before this inherited `...process.env`, so it could
|
|
353
353
|
// not tell a compiled-in answer from an ambient one.)
|
|
354
|
-
const
|
|
355
|
-
new URL("../../../dist/
|
|
354
|
+
const entry = fileURLToPath(
|
|
355
|
+
new URL("../../../dist/src/bin.js", import.meta.url),
|
|
356
356
|
);
|
|
357
357
|
const home = mkdtempSync(join(tmpdir(), "pragma-storeless-home-"));
|
|
358
358
|
const xdgConfig = mkdtempSync(join(tmpdir(), "pragma-storeless-cfg-"));
|
|
@@ -366,23 +366,27 @@ describe("storeless guarantee (PROTECTED)", () => {
|
|
|
366
366
|
XDG_CACHE_HOME: xdgCache,
|
|
367
367
|
};
|
|
368
368
|
|
|
369
|
-
const nouns = spawnSync(
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
369
|
+
const nouns = spawnSync(
|
|
370
|
+
process.execPath,
|
|
371
|
+
[entry, "__complete", "--", "co"],
|
|
372
|
+
{
|
|
373
|
+
encoding: "utf-8",
|
|
374
|
+
cwd: emptyCwd,
|
|
375
|
+
env,
|
|
376
|
+
},
|
|
377
|
+
);
|
|
374
378
|
expect(nouns.status).toBe(0);
|
|
375
|
-
expect(nouns.stdout).toBe("colophon\nconfig\n");
|
|
379
|
+
expect(nouns.stdout).toBe("colophon\nconcept\nconfig\n");
|
|
376
380
|
expect(nouns.stderr).toBe("");
|
|
377
381
|
|
|
378
382
|
// The headline guarantee of the embedded pack: a user who has installed
|
|
379
|
-
// the
|
|
380
|
-
// Every other pin on the embedded index runs in-process, where
|
|
381
|
-
// change that made `pack.index.generated.ts` unreachable FROM THE
|
|
382
|
-
// would leave the whole suite green.
|
|
383
|
+
// the shipped entry and nothing else gets ENTITY candidates on the first TAB.
|
|
384
|
+
// Every other pin on the embedded index runs in-process, where an emit
|
|
385
|
+
// change that made `pack.index.generated.ts` unreachable FROM THE SHIPPED
|
|
386
|
+
// ENTRY would leave the whole suite green.
|
|
383
387
|
const entities = spawnSync(
|
|
384
|
-
|
|
385
|
-
["__complete", "--", "block", "lookup", "ds:global.component.but"],
|
|
388
|
+
process.execPath,
|
|
389
|
+
[entry, "__complete", "--", "block", "lookup", "ds:global.component.but"],
|
|
386
390
|
{ encoding: "utf-8", cwd: emptyCwd, env },
|
|
387
391
|
);
|
|
388
392
|
expect(entities.status).toBe(0);
|
|
@@ -402,17 +406,21 @@ describe("storeless guarantee (PROTECTED)", () => {
|
|
|
402
406
|
});
|
|
403
407
|
|
|
404
408
|
it("the spawned fast path emits zero bytes for zero candidates, exit 0", () => {
|
|
405
|
-
const
|
|
406
|
-
new URL("../../../dist/
|
|
409
|
+
const entry = fileURLToPath(
|
|
410
|
+
new URL("../../../dist/src/bin.js", import.meta.url),
|
|
407
411
|
);
|
|
408
|
-
const result = spawnSync(
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
412
|
+
const result = spawnSync(
|
|
413
|
+
process.execPath,
|
|
414
|
+
[entry, "__complete", "--", "bogus", ""],
|
|
415
|
+
{
|
|
416
|
+
encoding: "utf-8",
|
|
417
|
+
env: {
|
|
418
|
+
...process.env,
|
|
419
|
+
XDG_CONFIG_HOME: mkdtempSync(join(tmpdir(), "pragma-zb-cfg-")),
|
|
420
|
+
XDG_STATE_HOME: mkdtempSync(join(tmpdir(), "pragma-zb-state-")),
|
|
421
|
+
},
|
|
414
422
|
},
|
|
415
|
-
|
|
423
|
+
);
|
|
416
424
|
expect(result.status).toBe(0);
|
|
417
425
|
expect(result.stdout).toBe("");
|
|
418
426
|
expect(result.stderr).toBe("");
|
|
@@ -50,9 +50,11 @@ import { emitScripts } from "./emitScripts.js";
|
|
|
50
50
|
* scripts; the live bash script offers the live grammar's structure with
|
|
51
51
|
* zero process exec; it hands `__complete` a literal argv and offers back
|
|
52
52
|
* what it answers; it honours the `minChars` gate. The bash describes are
|
|
53
|
-
* deliberately NOT gated on a `hasShell` probe —
|
|
54
|
-
*
|
|
55
|
-
*
|
|
53
|
+
* deliberately NOT gated on a `hasShell` probe — CI runs linux with a modern
|
|
54
|
+
* bash, so a machine with no usable bash should fail this file loudly
|
|
55
|
+
* rather than skip it and report nothing. (The package no longer pins
|
|
56
|
+
* `os: ["linux"]`; run on a bash-3.2 macOS box this fails loudly, which is
|
|
57
|
+
* the intended signal — see `templates/bash.ts` on the mapfile floor.)
|
|
56
58
|
* - **By execution only where the shell is installed:** the same guarantees
|
|
57
59
|
* for zsh and fish. Those describes `skipIf` the shell is absent, which
|
|
58
60
|
* includes this development box and, today, CI — so on those machines they
|
|
@@ -319,7 +321,7 @@ const STRUCTURE = [
|
|
|
319
321
|
at: "pragma co",
|
|
320
322
|
words: ["pragma", "co"],
|
|
321
323
|
cword: 1,
|
|
322
|
-
offers: ["colophon", "config"],
|
|
324
|
+
offers: ["colophon", "concept", "config"],
|
|
323
325
|
},
|
|
324
326
|
{
|
|
325
327
|
at: "pragma block <TAB>",
|
|
@@ -331,7 +333,7 @@ const STRUCTURE = [
|
|
|
331
333
|
at: "pragma setup <TAB>",
|
|
332
334
|
words: ["pragma", "setup", ""],
|
|
333
335
|
cword: 2,
|
|
334
|
-
offers: ["completions", "lsp", "mcp", "skills"],
|
|
336
|
+
offers: ["completions", "config", "lsp", "mcp", "skills"],
|
|
335
337
|
},
|
|
336
338
|
{
|
|
337
339
|
at: "pragma create <TAB>",
|
|
@@ -349,7 +351,14 @@ const STRUCTURE = [
|
|
|
349
351
|
at: "pragma block lookup --<TAB>",
|
|
350
352
|
words: ["pragma", "block", "lookup", "--"],
|
|
351
353
|
cword: 3,
|
|
352
|
-
offers: [
|
|
354
|
+
offers: [
|
|
355
|
+
"--detail",
|
|
356
|
+
"--format",
|
|
357
|
+
"--help",
|
|
358
|
+
"--no-headers",
|
|
359
|
+
"--quiet",
|
|
360
|
+
"--verbose",
|
|
361
|
+
],
|
|
353
362
|
},
|
|
354
363
|
] as const;
|
|
355
364
|
|
|
@@ -362,10 +371,12 @@ const NOUNS = [
|
|
|
362
371
|
"block",
|
|
363
372
|
"capabilities",
|
|
364
373
|
"colophon",
|
|
374
|
+
"concept",
|
|
365
375
|
"config",
|
|
366
376
|
"create",
|
|
367
377
|
"doctor",
|
|
368
378
|
"graph",
|
|
379
|
+
"implementation",
|
|
369
380
|
"info",
|
|
370
381
|
"mcp",
|
|
371
382
|
"modifier",
|
|
@@ -378,6 +389,7 @@ const NOUNS = [
|
|
|
378
389
|
"tier",
|
|
379
390
|
"token",
|
|
380
391
|
"upgrade",
|
|
392
|
+
"version",
|
|
381
393
|
] as const;
|
|
382
394
|
|
|
383
395
|
describe("generated bash — the live grammar's script", () => {
|
|
@@ -524,11 +536,11 @@ describe.skipIf(!hasShell("fish"))(
|
|
|
524
536
|
});
|
|
525
537
|
|
|
526
538
|
it.each([
|
|
527
|
-
{ line: "pragma co", offers: ["colophon", "config"] },
|
|
539
|
+
{ line: "pragma co", offers: ["colophon", "concept", "config"] },
|
|
528
540
|
{ line: "pragma block ", offers: ["list", "lookup", "sample"] },
|
|
529
541
|
{
|
|
530
542
|
line: "pragma setup ",
|
|
531
|
-
offers: ["completions", "lsp", "mcp", "skills"],
|
|
543
|
+
offers: ["completions", "config", "lsp", "mcp", "skills"],
|
|
532
544
|
},
|
|
533
545
|
{
|
|
534
546
|
line: "pragma create ",
|
|
@@ -572,7 +584,14 @@ describe.skipIf(!hasShell("fish"))(
|
|
|
572
584
|
const { reply, calls } = driveFish(live.fish, "pragma block lookup --");
|
|
573
585
|
expect(calls).toEqual([]);
|
|
574
586
|
expect(reply.sort()).toEqual(
|
|
575
|
-
[
|
|
587
|
+
[
|
|
588
|
+
"--detail",
|
|
589
|
+
"--format",
|
|
590
|
+
"--help",
|
|
591
|
+
"--no-headers",
|
|
592
|
+
"--quiet",
|
|
593
|
+
"--verbose",
|
|
594
|
+
].sort(),
|
|
576
595
|
);
|
|
577
596
|
});
|
|
578
597
|
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
// biome-ignore-all lint/suspicious/noTemplateCurlyInString: bash parameter expansions, not JS templates
|
|
2
2
|
/**
|
|
3
|
-
* The bash completion script (static tier). Requires bash >= 4
|
|
4
|
-
* the
|
|
3
|
+
* The bash completion script (static tier). Requires bash >= 4 for `mapfile`.
|
|
4
|
+
* That floor is NOT guaranteed by the platform any more: the package dropped
|
|
5
|
+
* its `os: ["linux"]` pin when it stopped shipping a linux-x64 executable, and
|
|
6
|
+
* macOS still ships bash 3.2, which has no `mapfile`. `setup completions`
|
|
7
|
+
* writes this script wherever it is asked to; on such a machine the user's
|
|
8
|
+
* remedy is a newer bash (zsh and fish are unaffected and are the platform
|
|
9
|
+
* defaults there).
|
|
5
10
|
*
|
|
6
11
|
* Structure — nouns, verbs, flag names, enum values — is inlined into
|
|
7
12
|
* generator-validated LITERAL `compgen -W` tables (never a variable, never
|