@canonical/pragma-cli 0.33.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +293 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +83 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +66 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +53 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +168 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +193 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +334 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +263 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +195 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +82 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +25 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +197 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +85 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +25 -24
- package/pragma.conf.ts +853 -0
- package/src/bin.ts +276 -82
- package/src/capabilities/block.parity.test.ts +253 -0
- package/src/capabilities/capabilities/capabilities.render.ts +4 -3
- package/src/capabilities/capabilities/capabilities.verb.ts +32 -14
- package/src/capabilities/capabilities/catalog.ts +20 -12
- package/src/capabilities/capabilities/hints.ts +43 -24
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +50 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +9 -5
- package/src/capabilities/colophon/types.ts +16 -7
- package/src/capabilities/config/collectConfigShow.test.ts +58 -0
- package/src/capabilities/config/collectConfigShow.ts +43 -6
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -37
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +14 -9
- package/src/capabilities/config/show.render.test.ts +77 -5
- package/src/capabilities/config/show.render.ts +8 -13
- package/src/capabilities/config/show.verb.ts +13 -9
- package/src/capabilities/config/types.ts +26 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +95 -103
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +50 -0
- package/src/capabilities/create/create.mcp.test.ts +91 -7
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +523 -162
- package/src/capabilities/create/create.verb.ts +361 -321
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +9 -14
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +40 -46
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +29 -5
- package/src/capabilities/{standard/parity.test.ts → distribution.parity.test.ts} +24 -14
- package/src/capabilities/distribution.test.ts +122 -0
- package/src/capabilities/distribution.ts +54 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +9 -7
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +82 -46
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +5 -4
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +125 -30
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +113 -27
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +24 -13
- package/src/capabilities/doctor/doctor.render.ts +45 -20
- package/src/capabilities/doctor/doctor.test.ts +158 -40
- package/src/capabilities/doctor/doctor.verb.ts +9 -5
- package/src/capabilities/doctor/runChecks.ts +65 -66
- package/src/capabilities/doctor/types.ts +21 -5
- package/src/capabilities/emptyRecovery.test.ts +44 -22
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -5
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +5 -4
- package/src/capabilities/graph/runQuery.ts +9 -7
- package/src/capabilities/index.ts +25 -19
- package/src/capabilities/info/collectInfo.ts +15 -10
- package/src/capabilities/info/info.render.ts +4 -3
- package/src/capabilities/info/info.verb.ts +4 -3
- package/src/capabilities/lazy.test.ts +125 -2
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +42 -83
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/prompt.test.ts +12 -6
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +26 -14
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +367 -91
- package/src/capabilities/resources/resources.test.ts +411 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +397 -320
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +233 -74
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +166 -14
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +47 -9
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +14 -14
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +9 -10
- package/src/capabilities/sources/collectStatus.ts +61 -51
- package/src/capabilities/sources/index.ts +2 -2
- package/src/capabilities/sources/installSkills.ts +86 -9
- package/src/capabilities/sources/runUpdate.ts +164 -141
- package/src/capabilities/sources/sources.test.ts +265 -119
- package/src/capabilities/sources/status.render.test.ts +53 -24
- package/src/capabilities/sources/status.render.ts +25 -30
- package/src/capabilities/sources/status.verb.ts +16 -9
- package/src/capabilities/sources/types.ts +18 -25
- package/src/capabilities/sources/update.render.ts +10 -3
- package/src/capabilities/sources/update.verb.ts +13 -24
- package/src/capabilities/surface.test.ts +165 -25
- package/src/capabilities/tier.parity.test.ts +144 -0
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +8 -4
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.test.ts +8 -6
- package/src/constants.ts +78 -22
- package/src/identity.test.ts +348 -0
- package/src/index.ts +2 -2
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +20 -15
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.test.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +5 -3
- package/src/kernel/completion/entitySource.test.ts +185 -41
- package/src/kernel/completion/entitySource.ts +133 -110
- package/src/kernel/completion/model.test.ts +165 -13
- package/src/kernel/completion/model.ts +105 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +104 -50
- package/src/kernel/completion/shellDrive.test.ts +611 -0
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/fish.ts +28 -6
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +10 -3
- package/src/kernel/config/defaults.test.ts +108 -0
- package/src/kernel/config/defaults.ts +13 -23
- package/src/kernel/config/evaluateProjectConfig.ts +33 -11
- package/src/kernel/config/findProjectConfig.ts +4 -3
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -81
- package/src/kernel/config/globalConfig.ts +2 -2
- package/src/kernel/config/index.ts +5 -6
- package/src/kernel/config/paths.ts +17 -17
- package/src/kernel/config/readConfig.test.ts +246 -7
- package/src/kernel/config/readConfig.ts +8 -8
- package/src/kernel/config/schema.test.ts +50 -0
- package/src/kernel/config/schema.ts +100 -11
- package/src/kernel/config/types.ts +75 -19
- package/src/kernel/copy.test.ts +483 -0
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +6 -3
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -4
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/index.ts +1 -1
- package/src/kernel/error/recovery.test.ts +22 -45
- package/src/kernel/error/recovery.ts +36 -27
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +25 -4
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.test.ts +195 -11
- package/src/kernel/packs/collect.ts +212 -61
- package/src/kernel/packs/compile.test.ts +293 -8
- package/src/kernel/packs/compile.ts +108 -15
- package/src/kernel/packs/disclosure.test.ts +5 -2
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +13 -13
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/graphqlSource.test.ts +6 -3
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +70 -20
- package/src/kernel/packs/renderPack.ts +28 -7
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +132 -34
- package/src/kernel/packs/runBodies.ts +16 -16
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +114 -11
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +104 -10
- package/src/kernel/packs/sparql/runSelect.ts +75 -37
- package/src/kernel/packs/toolDescription.test.ts +52 -5
- package/src/kernel/packs/types.ts +52 -4
- package/src/kernel/packs/uniqueness.ts +5 -5
- package/src/kernel/project/cli/buildProgram.test.ts +157 -17
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +227 -3
- package/src/kernel/project/cli/dispatch.ts +250 -48
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +130 -30
- package/src/kernel/project/cli/helpFormat.ts +14 -1
- package/src/kernel/project/cli/rootHelp.ts +140 -111
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +18 -10
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +12 -7
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +42 -1
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +120 -5
- package/src/kernel/project/mcp/prompts/provider.ts +22 -8
- package/src/kernel/project/mcp/prompts/source.ts +69 -68
- package/src/kernel/project/mcp/registerVerb.ts +56 -11
- package/src/kernel/project/mcp/serve.ts +13 -5
- package/src/kernel/project/mcp/toolDescriptions.test.ts +6 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/disclosure.ts +4 -2
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/prefixes.test.ts +36 -0
- package/src/kernel/render/prefixes.ts +40 -13
- package/src/kernel/render/renderers.test.ts +244 -7
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/build.ts +29 -3
- package/src/kernel/runtime/graphpack/buildIndex.test.ts +46 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +53 -18
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -5
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.stories.generated.ts +3 -0
- package/src/kernel/runtime/graphpack/embedded.ts +39 -13
- package/src/kernel/runtime/graphpack/graphpack.test.ts +205 -5
- package/src/kernel/runtime/graphpack/hash.ts +3 -2
- package/src/kernel/runtime/graphpack/index.ts +1 -1
- package/src/kernel/runtime/graphpack/manifest.ts +114 -12
- package/src/kernel/runtime/graphpack/read.ts +5 -11
- package/src/kernel/runtime/graphpack/schemas.ts +74 -0
- package/src/kernel/runtime/graphpack/stories.ts +84 -0
- package/src/kernel/runtime/graphpack/types.ts +61 -48
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/paths.ts +64 -15
- package/src/kernel/runtime/probe.test.ts +8 -4
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +477 -32
- package/src/kernel/runtime/refs/gitOps.ts +1 -19
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +8 -8
- package/src/kernel/runtime/refs/resolve.ts +82 -66
- package/src/kernel/runtime/resolveSources.test.ts +63 -24
- package/src/kernel/runtime/resolveSources.ts +36 -25
- package/src/kernel/runtime/storeReadiness.ts +10 -10
- package/src/kernel/runtime/storeless.test.ts +1 -1
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +56 -55
- package/src/kernel/spec/emitReference.test.ts +3 -3
- package/src/kernel/spec/emitReference.ts +242 -34
- package/src/kernel/spec/emitSurface.ts +57 -11
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/surfaceConformance.ts +8 -0
- package/src/kernel/spec/types.ts +277 -13
- package/src/kernel/spec/validate.ts +2 -1
- package/src/kernel/vocabulary.test.ts +164 -0
- package/src/kernel/vocabulary.ts +146 -0
- package/src/testing/PARITY_GAPS.ts +8 -2
- package/src/testing/behavioral/README.md +3 -3
- package/src/testing/behavioral/completion.test.ts +19 -6
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +6 -5
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +1 -1
- package/src/testing/behavioral/exitCodes.e2e.test.ts +6 -5
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/harness.foundation.test.ts +14 -5
- package/src/testing/behavioral/journeys.cli.test.ts +117 -76
- package/src/testing/behavioral/journeys.defaultPack.test.ts +88 -182
- package/src/testing/behavioral/journeys.firstInstall.test.ts +167 -0
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +9 -6
- package/src/testing/behavioral/journeys.packageStories.test.ts +188 -0
- package/src/testing/behavioral/liveReadSurface.ts +4 -3
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +10 -5
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/behavioral/staleCommands.test.ts +10 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +7 -7
- package/src/testing/eval/cases/assembly.ts +13 -6
- package/src/testing/eval/cases/effectful.ts +28 -15
- package/src/testing/eval/cases/readNouns.ts +22 -20
- package/src/testing/eval/cases/stable.ts +5 -1
- package/src/testing/eval/eval.test.ts +7 -1
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/fixtureCapability.ts +45 -1
- package/src/testing/fixtures/graph/canonical.ts +94 -5
- package/src/testing/fixtures/graph/defaultPack.ts +7 -6
- package/src/testing/fixtures/graph/owlExport.ts +7 -5
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/fixtureGraph.ts +33 -16
- package/src/testing/helpers/packRuntime.ts +2 -3
- package/src/testing/helpers/projectCli.ts +2 -1
- package/src/testing/helpers/projectMcp.ts +38 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +24 -9
- package/src/testing/perf/budgets.ts +76 -12
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +611 -14
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/src/types.ts +2 -2
- package/dist/pragma +0 -0
- package/src/capabilities/block/blockList.test.ts +0 -79
- package/src/capabilities/block/blockList.verb.ts +0 -163
- package/src/capabilities/block/index.ts +0 -25
- package/src/capabilities/block/pack.ts +0 -166
- package/src/capabilities/block/parity.test.ts +0 -187
- package/src/capabilities/block/tierChain.ts +0 -78
- package/src/capabilities/colophon/pragmaColophon.ts +0 -66
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -152
- package/src/capabilities/create/templates.embedded.generated.ts +0 -53
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -41
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -67
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -60
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/capabilities/modifier/index.ts +0 -15
- package/src/capabilities/modifier/pack.ts +0 -64
- package/src/capabilities/standard/index.ts +0 -18
- package/src/capabilities/standard/pack.ts +0 -128
- package/src/capabilities/tier/index.ts +0 -19
- package/src/capabilities/tier/lookup.render.test.ts +0 -72
- package/src/capabilities/tier/lookup.render.ts +0 -59
- package/src/capabilities/tier/lookup.test.ts +0 -83
- package/src/capabilities/tier/lookup.verb.ts +0 -44
- package/src/capabilities/tier/pack.ts +0 -28
- package/src/capabilities/tier/runLookup.ts +0 -87
- package/src/capabilities/token/addConfig.render.ts +0 -27
- package/src/capabilities/token/addConfig.test.ts +0 -62
- package/src/capabilities/token/addConfig.verb.ts +0 -40
- package/src/capabilities/token/index.ts +0 -19
- package/src/capabilities/token/pack.ts +0 -58
- package/src/capabilities/token/runAddConfig.ts +0 -95
- package/src/kernel/completion/bashDrive.test.ts +0 -73
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +0 -39
- package/src/kernel/runtime/lock.ts +0 -90
|
@@ -0,0 +1,611 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import {
|
|
3
|
+
chmodSync,
|
|
4
|
+
mkdtempSync,
|
|
5
|
+
readFileSync,
|
|
6
|
+
rmSync,
|
|
7
|
+
writeFileSync,
|
|
8
|
+
} from "node:fs";
|
|
9
|
+
import { tmpdir } from "node:os";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { afterAll, describe, expect, it } from "vitest";
|
|
12
|
+
import { capabilities } from "../../capabilities/index.js";
|
|
13
|
+
import { BIN_NAME } from "../../constants.js";
|
|
14
|
+
import { completionFixture } from "../../testing/fixtures/completionFixture.js";
|
|
15
|
+
import { emitScripts } from "./emitScripts.js";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Drive the GENERATED completion scripts in real bash, zsh and fish.
|
|
19
|
+
*
|
|
20
|
+
* Every other test in this directory stops at the boundary of the script's
|
|
21
|
+
* text: `emitScripts.test.ts` snapshots it, `safety.test.ts` asserts what its
|
|
22
|
+
* characters may not be, `parse.test.ts` pins what the resolver does with
|
|
23
|
+
* words. Nothing executes it. A script that emits but does not parse leaves
|
|
24
|
+
* `_pragma` undefined and TAB silently dead forever, and a script that frames
|
|
25
|
+
* the delegation wrongly hands `__complete` the wrong slot while every unit
|
|
26
|
+
* test stays green. Both are only observable by running the thing.
|
|
27
|
+
*
|
|
28
|
+
* So this file runs it — over BOTH grammars:
|
|
29
|
+
*
|
|
30
|
+
* - the FIXTURE grammar, for the M1 `--flag=value` wordbreak regression (with
|
|
31
|
+
* `=` in `COMP_WORDBREAKS`, bash splits `--format=` into `--format` `=` ``;
|
|
32
|
+
* without the normalization at the top of `_pragma` the value slot falls
|
|
33
|
+
* through to the noun/positional arm and offers the WRONG candidates);
|
|
34
|
+
* - the LIVE grammar (`emitScripts(capabilities)`), which is the script users
|
|
35
|
+
* actually install and which no test had ever executed.
|
|
36
|
+
*
|
|
37
|
+
* Each driver puts a stand-in for the bin first on the child's `PATH`, which
|
|
38
|
+
* both RECORDS the argv it was handed and ANSWERS with two candidates, so every
|
|
39
|
+
* candidate set comes with the exec log that produced it and every exec can be
|
|
40
|
+
* followed to what the user is offered. That turns `emitScripts.ts`'s docblock
|
|
41
|
+
* claim — "the static tier answers STRUCTURE with zero exec; only
|
|
42
|
+
* `{kind:"names"}` value contexts shell out" — into an assertion, pins the exact
|
|
43
|
+
* argv the scripts hand `<bin> __complete`, and pins the last mile back.
|
|
44
|
+
* Standing first on `PATH` also means a developer with a real `pragma`
|
|
45
|
+
* installed can never have it exec'd by this suite.
|
|
46
|
+
*
|
|
47
|
+
* WHAT IS PROVEN, AND WHERE — this split must not be blurred:
|
|
48
|
+
*
|
|
49
|
+
* - **By execution on every machine that runs the suite:** bash parses both
|
|
50
|
+
* scripts; the live bash script offers the live grammar's structure with
|
|
51
|
+
* zero process exec; it hands `__complete` a literal argv and offers back
|
|
52
|
+
* what it answers; it honours the `minChars` gate. The bash describes are
|
|
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.)
|
|
58
|
+
* - **By execution only where the shell is installed:** the same guarantees
|
|
59
|
+
* for zsh and fish. Those describes `skipIf` the shell is absent, which
|
|
60
|
+
* includes this development box and, today, CI — so on those machines they
|
|
61
|
+
* assert NOTHING, and say so by skipping visibly. Every assertion in them
|
|
62
|
+
* was executed during development against zsh 5.9 and fish 3.7.0 (obtained
|
|
63
|
+
* with `apt-get download zsh zsh-common fish fish-common` + `dpkg-deb -x`
|
|
64
|
+
* into a scratch prefix, leaving the box itself untouched). Adding
|
|
65
|
+
* `zsh fish` to CI's apt step is what would make them continuous.
|
|
66
|
+
* - **By static assertion only, everywhere:** that the zsh and fish scripts
|
|
67
|
+
* contain no `eval`, no backticks, guarded `compadd`, inert value lists and
|
|
68
|
+
* the exact delegation form — `safety.test.ts`'s script-safety describe. A
|
|
69
|
+
* static assertion is never an execution proof, and no name in this file
|
|
70
|
+
* claims one.
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
/** Whether a shell of this id is on PATH and runnable. */
|
|
74
|
+
function hasShell(id: string): boolean {
|
|
75
|
+
return (
|
|
76
|
+
spawnSync(id, ["-c", "printf ok"], { encoding: "utf-8" }).stdout === "ok"
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** The scripts for the fixture grammar (which has the global --format). */
|
|
81
|
+
const fixture = emitScripts([completionFixture]);
|
|
82
|
+
/** The scripts a user actually installs, for the LIVE grammar. */
|
|
83
|
+
const live = emitScripts(capabilities);
|
|
84
|
+
|
|
85
|
+
/** The frame separating one recorded exec from the next in the record file. */
|
|
86
|
+
const CALL = "<<<CALL>>>";
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The two candidates the stub answers a delegation with, derived from the
|
|
90
|
+
* partial it was handed — the shape a real `__complete` reply has (every
|
|
91
|
+
* candidate extends the typed partial), which is what fish's engine filters on.
|
|
92
|
+
*/
|
|
93
|
+
function answersFor(partial: string): string[] {
|
|
94
|
+
return [`${partial}-one`, `${partial}-two`];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Every temp dir this file mints, removed in one `afterAll`. */
|
|
98
|
+
const roots: string[] = [];
|
|
99
|
+
|
|
100
|
+
/** A tracked temp dir. */
|
|
101
|
+
function tempRoot(prefix: string): string {
|
|
102
|
+
const dir = mkdtempSync(join(tmpdir(), prefix));
|
|
103
|
+
roots.push(dir);
|
|
104
|
+
return dir;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
afterAll(() => {
|
|
108
|
+
for (const dir of roots) rmSync(dir, { recursive: true, force: true });
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* A directory holding a stub named after the bin: a bash script that appends a
|
|
113
|
+
* framed copy of its own argv to `$RECORD` and answers with
|
|
114
|
+
* {@link answersFor}'s two candidates. Placed FIRST on each child's PATH by the
|
|
115
|
+
* drivers below.
|
|
116
|
+
*
|
|
117
|
+
* It ANSWERS as well as records because recording alone stops one step short of
|
|
118
|
+
* the guarantee: a script can exec `__complete` with a perfect argv and then
|
|
119
|
+
* drop every line it gets back, leaving TAB silently dead. Measured — with
|
|
120
|
+
* `COMPREPLY=()` appended to bash's dynamic function and `_matches=()` before
|
|
121
|
+
* zsh's `compadd`, entity completion offers nothing in either shell and 258
|
|
122
|
+
* tests across this directory, `setup`, `doctor` and the behavioural suite
|
|
123
|
+
* still passed. The reply assertions below are what fails now.
|
|
124
|
+
*/
|
|
125
|
+
const stubDir = tempRoot("pragma-drive-stub-");
|
|
126
|
+
writeFileSync(
|
|
127
|
+
join(stubDir, BIN_NAME),
|
|
128
|
+
`#!/usr/bin/env bash\n{ printf '${CALL}\\n'; printf '%s\\n' "$@"; } >> "$RECORD"\nprintf '%s\\n' "\${@: -1}-one" "\${@: -1}-two"\n`,
|
|
129
|
+
);
|
|
130
|
+
chmodSync(join(stubDir, BIN_NAME), 0o755);
|
|
131
|
+
|
|
132
|
+
/** What one drive observed: the offered candidates and the execs it caused. */
|
|
133
|
+
interface Drive {
|
|
134
|
+
/** The candidates the shell was offered, line by line. */
|
|
135
|
+
readonly reply: string[];
|
|
136
|
+
/** One entry per exec of the recorder, each the full argv it received. */
|
|
137
|
+
readonly calls: string[][];
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** Split the recorder's log into one argv array per framed call. */
|
|
141
|
+
function parseCalls(record: string): string[][] {
|
|
142
|
+
return record
|
|
143
|
+
.split(`${CALL}\n`)
|
|
144
|
+
.slice(1)
|
|
145
|
+
.map((chunk) => chunk.split("\n").slice(0, -1));
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** A scratch dir holding a script file, a driver path and a fresh record. */
|
|
149
|
+
function scratch(script: string): {
|
|
150
|
+
file: string;
|
|
151
|
+
driver: string;
|
|
152
|
+
record: string;
|
|
153
|
+
} {
|
|
154
|
+
const dir = tempRoot("pragma-shelldrive-");
|
|
155
|
+
const file = join(dir, "completion");
|
|
156
|
+
const record = join(dir, "record");
|
|
157
|
+
writeFileSync(file, script);
|
|
158
|
+
writeFileSync(record, "");
|
|
159
|
+
return { file, driver: join(dir, "driver"), record };
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* The child environment: the recorder first, then the REAL bin dirs. Node
|
|
164
|
+
* resolves the spawned command through the CHILD's `PATH`, so a stub-only
|
|
165
|
+
* `PATH` cannot find the shell itself.
|
|
166
|
+
*/
|
|
167
|
+
function childEnv(record: string): NodeJS.ProcessEnv {
|
|
168
|
+
return {
|
|
169
|
+
...process.env,
|
|
170
|
+
PATH: `${stubDir}:${process.env.PATH ?? ""}`,
|
|
171
|
+
RECORD: record,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/** Non-empty stdout lines. */
|
|
176
|
+
function lines(stdout: string): string[] {
|
|
177
|
+
return stdout.split("\n").filter((line) => line.length > 0);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Source a generated bash script, place the cursor per COMP_WORDS/COMP_CWORD,
|
|
182
|
+
* invoke `_pragma`, and report COMPREPLY plus every exec the script performed.
|
|
183
|
+
*/
|
|
184
|
+
function driveBash(
|
|
185
|
+
script: string,
|
|
186
|
+
words: readonly string[],
|
|
187
|
+
cword: number,
|
|
188
|
+
): Drive {
|
|
189
|
+
const { file, record } = scratch(script);
|
|
190
|
+
const wordsLiteral = words
|
|
191
|
+
.map((word) => `'${word.replace(/'/g, "'\\''")}'`)
|
|
192
|
+
.join(" ");
|
|
193
|
+
const source = [
|
|
194
|
+
`source '${file}'`,
|
|
195
|
+
`COMP_WORDS=(${wordsLiteral})`,
|
|
196
|
+
`COMP_CWORD=${cword}`,
|
|
197
|
+
`_${BIN_NAME}`,
|
|
198
|
+
`printf '%s\\n' "\${COMPREPLY[@]}"`,
|
|
199
|
+
].join("\n");
|
|
200
|
+
const result = spawnSync("bash", ["--norc", "--noprofile", "-c", source], {
|
|
201
|
+
encoding: "utf-8",
|
|
202
|
+
env: childEnv(record),
|
|
203
|
+
});
|
|
204
|
+
return {
|
|
205
|
+
reply: lines(result.stdout),
|
|
206
|
+
calls: parseCalls(readFileSync(record, "utf-8")),
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Source a generated zsh script with `words` + `CURRENT` set as zsh's
|
|
212
|
+
* completion system would, and report what it `compadd`s.
|
|
213
|
+
*
|
|
214
|
+
* `CURRENT` is bash's `COMP_CWORD` PLUS ONE — zsh indexes `words` from 1. The
|
|
215
|
+
* script ends in `_pragma "$@"`, which runs it, so the driver must not call it
|
|
216
|
+
* again or every candidate is offered twice. `compadd` and `_files` are stubbed
|
|
217
|
+
* because a `-f` zsh has no completion system loaded; the stub drops the `--`
|
|
218
|
+
* guard the templates emit exactly as the real `compadd` would.
|
|
219
|
+
*/
|
|
220
|
+
function driveZsh(
|
|
221
|
+
script: string,
|
|
222
|
+
words: readonly string[],
|
|
223
|
+
cword: number,
|
|
224
|
+
): Drive {
|
|
225
|
+
const { file, driver, record } = scratch(script);
|
|
226
|
+
writeFileSync(
|
|
227
|
+
driver,
|
|
228
|
+
[
|
|
229
|
+
"local -a words",
|
|
230
|
+
'words=("$@")',
|
|
231
|
+
`CURRENT=${cword + 1}`,
|
|
232
|
+
'compadd() { local a; for a in "$@"; do [[ $a == -- ]] || print -r -- "$a"; done }',
|
|
233
|
+
"_files() { : }",
|
|
234
|
+
`source '${file}'`,
|
|
235
|
+
"",
|
|
236
|
+
].join("\n"),
|
|
237
|
+
);
|
|
238
|
+
const result = spawnSync("zsh", ["-f", driver, ...words], {
|
|
239
|
+
encoding: "utf-8",
|
|
240
|
+
env: childEnv(record),
|
|
241
|
+
});
|
|
242
|
+
return {
|
|
243
|
+
reply: lines(result.stdout),
|
|
244
|
+
calls: parseCalls(readFileSync(record, "utf-8")),
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Source a generated fish script and ask fish itself to complete a command
|
|
250
|
+
* line, via its first-class `complete -C`. The highest-fidelity of the three
|
|
251
|
+
* drivers: fish's own engine does the position matching and the filtering.
|
|
252
|
+
*/
|
|
253
|
+
function driveFish(script: string, line: string): Drive {
|
|
254
|
+
const { file, record } = scratch(script);
|
|
255
|
+
const result = spawnSync(
|
|
256
|
+
"fish",
|
|
257
|
+
["--no-config", "-c", "source $argv[1]; complete -C $argv[2]", file, line],
|
|
258
|
+
{ encoding: "utf-8", env: childEnv(record) },
|
|
259
|
+
);
|
|
260
|
+
return {
|
|
261
|
+
reply: lines(result.stdout),
|
|
262
|
+
calls: parseCalls(readFileSync(record, "utf-8")),
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/** `<shell> -n <file>`: does the shell accept this text as a script at all? */
|
|
267
|
+
function parses(shell: string, script: string): number | null {
|
|
268
|
+
const { file } = scratch(script);
|
|
269
|
+
return spawnSync(shell, ["-n", file], { encoding: "utf-8" }).status;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/** The argv the protocol pins for `pragma block lookup ds:global.component.but`. */
|
|
273
|
+
const PROTOCOL_ARGV = [
|
|
274
|
+
"__complete",
|
|
275
|
+
"--",
|
|
276
|
+
"block",
|
|
277
|
+
"lookup",
|
|
278
|
+
"ds:global.component.but",
|
|
279
|
+
];
|
|
280
|
+
|
|
281
|
+
describe("generated bash — --flag=value wordbreak (M1)", () => {
|
|
282
|
+
it("routes --format=<TAB> to the format values (not nouns/positionals)", () => {
|
|
283
|
+
// Default COMP_WORDBREAKS split: `--format` `=` `` (empty current word).
|
|
284
|
+
const { reply } = driveBash(
|
|
285
|
+
fixture.bash,
|
|
286
|
+
["pragma", "--format", "=", ""],
|
|
287
|
+
3,
|
|
288
|
+
);
|
|
289
|
+
expect(reply.sort()).toEqual(["json", "llm", "plain"]);
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
it("filters the value by the partial typed after =", () => {
|
|
293
|
+
const { reply } = driveBash(
|
|
294
|
+
fixture.bash,
|
|
295
|
+
["pragma", "--format", "=", "j"],
|
|
296
|
+
3,
|
|
297
|
+
);
|
|
298
|
+
expect(reply).toEqual(["json"]);
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
it("routes a verb-scoped --format=<TAB> the same way", () => {
|
|
302
|
+
// After a noun/verb the value must still route as a flag value, never as
|
|
303
|
+
// block's positional (which would offer entity/enum candidates instead).
|
|
304
|
+
const { reply } = driveBash(
|
|
305
|
+
fixture.bash,
|
|
306
|
+
["pragma", "block", "get", "--format", "=", ""],
|
|
307
|
+
5,
|
|
308
|
+
);
|
|
309
|
+
expect(reply.sort()).toEqual(["json", "llm", "plain"]);
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
it("still completes the space form --format <TAB> (unbroken)", () => {
|
|
313
|
+
const { reply } = driveBash(fixture.bash, ["pragma", "--format", ""], 2);
|
|
314
|
+
expect(reply.sort()).toEqual(["json", "llm", "plain"]);
|
|
315
|
+
});
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
/** Live structural contexts, in the bash/zsh `words` + cursor-index form. */
|
|
319
|
+
const STRUCTURE = [
|
|
320
|
+
{
|
|
321
|
+
at: "pragma co",
|
|
322
|
+
words: ["pragma", "co"],
|
|
323
|
+
cword: 1,
|
|
324
|
+
offers: ["colophon", "concept", "config"],
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
at: "pragma block <TAB>",
|
|
328
|
+
words: ["pragma", "block", ""],
|
|
329
|
+
cword: 2,
|
|
330
|
+
offers: ["list", "lookup", "sample"],
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
at: "pragma setup <TAB>",
|
|
334
|
+
words: ["pragma", "setup", ""],
|
|
335
|
+
cword: 2,
|
|
336
|
+
offers: ["completions", "config", "lsp", "mcp", "skills"],
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
at: "pragma create <TAB>",
|
|
340
|
+
words: ["pragma", "create", ""],
|
|
341
|
+
cword: 2,
|
|
342
|
+
offers: ["application", "component", "package"],
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
at: "pragma --format <TAB>",
|
|
346
|
+
words: ["pragma", "--format", ""],
|
|
347
|
+
cword: 2,
|
|
348
|
+
offers: ["json", "llm", "plain"],
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
at: "pragma block lookup --<TAB>",
|
|
352
|
+
words: ["pragma", "block", "lookup", "--"],
|
|
353
|
+
cword: 3,
|
|
354
|
+
offers: [
|
|
355
|
+
"--detail",
|
|
356
|
+
"--format",
|
|
357
|
+
"--help",
|
|
358
|
+
"--no-headers",
|
|
359
|
+
"--quiet",
|
|
360
|
+
"--verbose",
|
|
361
|
+
],
|
|
362
|
+
},
|
|
363
|
+
] as const;
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Every noun the live grammar declares — the whole table the zsh script
|
|
367
|
+
* `compadd`s for a partial noun. A literal, so a noun silently added, dropped
|
|
368
|
+
* or leaked into the table fails rather than widening the expectation.
|
|
369
|
+
*/
|
|
370
|
+
const NOUNS = [
|
|
371
|
+
"block",
|
|
372
|
+
"capabilities",
|
|
373
|
+
"colophon",
|
|
374
|
+
"concept",
|
|
375
|
+
"config",
|
|
376
|
+
"create",
|
|
377
|
+
"doctor",
|
|
378
|
+
"graph",
|
|
379
|
+
"implementation",
|
|
380
|
+
"info",
|
|
381
|
+
"mcp",
|
|
382
|
+
"modifier",
|
|
383
|
+
"ontology",
|
|
384
|
+
"prompt",
|
|
385
|
+
"setup",
|
|
386
|
+
"skill",
|
|
387
|
+
"sources",
|
|
388
|
+
"standard",
|
|
389
|
+
"tier",
|
|
390
|
+
"token",
|
|
391
|
+
"upgrade",
|
|
392
|
+
"version",
|
|
393
|
+
] as const;
|
|
394
|
+
|
|
395
|
+
describe("generated bash — the live grammar's script", () => {
|
|
396
|
+
it("is a script bash accepts, for both the live and the fixture grammar", () => {
|
|
397
|
+
// The one executable syntax gate that runs everywhere. It is not vacuous:
|
|
398
|
+
// `SAFE_TOKEN_RE` admits shell reserved words, so a noun named `esac`
|
|
399
|
+
// would emit `case "$noun" in esac) … esac` and bash -n would reject it.
|
|
400
|
+
expect(parses("bash", live.bash)).toBe(0);
|
|
401
|
+
expect(parses("bash", fixture.bash)).toBe(0);
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
it.each(STRUCTURE)("answers $at from the inlined table, execing nothing", ({
|
|
405
|
+
words,
|
|
406
|
+
cword,
|
|
407
|
+
offers,
|
|
408
|
+
}) => {
|
|
409
|
+
const { reply, calls } = driveBash(live.bash, words, cword);
|
|
410
|
+
expect(reply.sort()).toEqual([...offers].sort());
|
|
411
|
+
// The structural tier is the point of a generated script: a TAB here
|
|
412
|
+
// must never cost a process spawn, nor depend on a pack being built.
|
|
413
|
+
expect(calls).toEqual([]);
|
|
414
|
+
});
|
|
415
|
+
|
|
416
|
+
it("hands __complete the protocol argv and OFFERS what it answers", () => {
|
|
417
|
+
// The last mile, and the only assertion that covers it: everything else
|
|
418
|
+
// here observes what the script SENDS. A script that sends a perfect argv
|
|
419
|
+
// and then drops the reply (`COMPREPLY=()` after the mapfile) leaves TAB
|
|
420
|
+
// silently dead and was green across 258 tests.
|
|
421
|
+
const { reply, calls } = driveBash(
|
|
422
|
+
live.bash,
|
|
423
|
+
["pragma", "block", "lookup", "ds:global.component.but"],
|
|
424
|
+
3,
|
|
425
|
+
);
|
|
426
|
+
expect(calls).toEqual([PROTOCOL_ARGV]);
|
|
427
|
+
expect(reply).toEqual(answersFor("ds:global.component.but"));
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
it("keeps an interleaved global value flag in the argv it delegates", () => {
|
|
431
|
+
// `parse.ts` is the one place that decides a flag's value is not a
|
|
432
|
+
// positional. It only ever sees what the script sends, so the script must
|
|
433
|
+
// send the flag AND its value, in place.
|
|
434
|
+
const { calls } = driveBash(
|
|
435
|
+
live.bash,
|
|
436
|
+
["pragma", "block", "lookup", "--format", "json", "ds:g"],
|
|
437
|
+
5,
|
|
438
|
+
);
|
|
439
|
+
expect(calls).toEqual([
|
|
440
|
+
["__complete", "--", "block", "lookup", "--format", "json", "ds:g"],
|
|
441
|
+
]);
|
|
442
|
+
});
|
|
443
|
+
|
|
444
|
+
it("delegates a variadic second positional with both words in place", () => {
|
|
445
|
+
const { calls } = driveBash(
|
|
446
|
+
live.bash,
|
|
447
|
+
["pragma", "standard", "lookup", "cs:a", "cs:code.arr"],
|
|
448
|
+
4,
|
|
449
|
+
);
|
|
450
|
+
expect(calls).toEqual([
|
|
451
|
+
["__complete", "--", "standard", "lookup", "cs:a", "cs:code.arr"],
|
|
452
|
+
]);
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
it("gates the exec on minChars: one typed char offers nothing and execs nothing", () => {
|
|
456
|
+
// `minChars` lives ONLY in the generated scripts — `__complete -- block
|
|
457
|
+
// lookup d` answers with candidates. This is the gate that stops a stray
|
|
458
|
+
// TAB from spawning a process, and nothing else observes it.
|
|
459
|
+
const one = driveBash(live.bash, ["pragma", "block", "lookup", "d"], 3);
|
|
460
|
+
expect(one.reply).toEqual([]);
|
|
461
|
+
expect(one.calls).toEqual([]);
|
|
462
|
+
|
|
463
|
+
const two = driveBash(live.bash, ["pragma", "block", "lookup", "ds"], 3);
|
|
464
|
+
expect(two.calls).toEqual([["__complete", "--", "block", "lookup", "ds"]]);
|
|
465
|
+
});
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
describe.skipIf(!hasShell("zsh"))(
|
|
469
|
+
"generated zsh — the live grammar's script (skipped where zsh is absent)",
|
|
470
|
+
() => {
|
|
471
|
+
it("is a script zsh accepts", () => {
|
|
472
|
+
expect(parses("zsh", live.zsh)).toBe(0);
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
// zsh's script `compadd`s the model's table and zsh's own completion system
|
|
476
|
+
// filters it — unlike bash (`compgen -W … -- "$cur"`) and fish, which filter
|
|
477
|
+
// before the shell sees the list. So a zsh assertion is about the OFFERED
|
|
478
|
+
// set, never the filtered one. That makes exactly ONE row a superset (a
|
|
479
|
+
// partial noun offers all 19 nouns, not the two that match); it gets its own
|
|
480
|
+
// test below, and the other five are asserted as the exact sets zsh really
|
|
481
|
+
// returns. An `arrayContaining` here would be blind to the regression this
|
|
482
|
+
// file exists to catch — a slot that offers EXTRA, wrong candidates.
|
|
483
|
+
it.each(
|
|
484
|
+
STRUCTURE.filter((row) => row.at !== "pragma co"),
|
|
485
|
+
)("OFFERS exactly the candidates for $at, execing nothing", ({
|
|
486
|
+
words,
|
|
487
|
+
cword,
|
|
488
|
+
offers,
|
|
489
|
+
}) => {
|
|
490
|
+
const { reply, calls } = driveZsh(live.zsh, words, cword);
|
|
491
|
+
expect(reply.sort()).toEqual([...offers].sort());
|
|
492
|
+
expect(calls).toEqual([]);
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
it("offers the WHOLE noun table for a partial noun, leaving the filtering to zsh", () => {
|
|
496
|
+
const { reply, calls } = driveZsh(live.zsh, ["pragma", "co"], 1);
|
|
497
|
+
// The whole table is the claim, so assert the whole table: nouns that do
|
|
498
|
+
// not start with `co` are offered too (the observable difference from
|
|
499
|
+
// bash, which returns exactly two here), and none that the grammar does
|
|
500
|
+
// not declare. Three `toContain`s passed against a table cut to three.
|
|
501
|
+
expect(reply.sort()).toEqual([...NOUNS].sort());
|
|
502
|
+
expect(calls).toEqual([]);
|
|
503
|
+
});
|
|
504
|
+
|
|
505
|
+
it("hands __complete the SAME protocol argv bash does, and OFFERS the answer", () => {
|
|
506
|
+
const { reply, calls } = driveZsh(
|
|
507
|
+
live.zsh,
|
|
508
|
+
["pragma", "block", "lookup", "ds:global.component.but"],
|
|
509
|
+
3,
|
|
510
|
+
);
|
|
511
|
+
expect(calls).toEqual([PROTOCOL_ARGV]);
|
|
512
|
+
// `_matches=()` before the `compadd` passes every other assertion here.
|
|
513
|
+
expect(reply).toEqual(answersFor("ds:global.component.but"));
|
|
514
|
+
});
|
|
515
|
+
|
|
516
|
+
it("gates the exec on minChars: one typed char execs nothing, two execs once", () => {
|
|
517
|
+
const one = driveZsh(live.zsh, ["pragma", "block", "lookup", "d"], 3);
|
|
518
|
+
expect(one.reply).toEqual([]);
|
|
519
|
+
expect(one.calls).toEqual([]);
|
|
520
|
+
|
|
521
|
+
// The positive half keeps the negative one honest: a driver that failed
|
|
522
|
+
// outright would also record nothing.
|
|
523
|
+
const two = driveZsh(live.zsh, ["pragma", "block", "lookup", "ds"], 3);
|
|
524
|
+
expect(two.calls).toEqual([
|
|
525
|
+
["__complete", "--", "block", "lookup", "ds"],
|
|
526
|
+
]);
|
|
527
|
+
});
|
|
528
|
+
},
|
|
529
|
+
);
|
|
530
|
+
|
|
531
|
+
describe.skipIf(!hasShell("fish"))(
|
|
532
|
+
"generated fish — the live grammar's script (skipped where fish is absent)",
|
|
533
|
+
() => {
|
|
534
|
+
it("is a script fish accepts", () => {
|
|
535
|
+
expect(parses("fish", live.fish)).toBe(0);
|
|
536
|
+
});
|
|
537
|
+
|
|
538
|
+
it.each([
|
|
539
|
+
{ line: "pragma co", offers: ["colophon", "concept", "config"] },
|
|
540
|
+
{ line: "pragma block ", offers: ["list", "lookup", "sample"] },
|
|
541
|
+
{
|
|
542
|
+
line: "pragma setup ",
|
|
543
|
+
offers: ["completions", "config", "lsp", "mcp", "skills"],
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
line: "pragma create ",
|
|
547
|
+
offers: ["application", "component", "package"],
|
|
548
|
+
},
|
|
549
|
+
// fish's own inline convention: it returns the whole `--flag=value` word,
|
|
550
|
+
// not the bare value bash offers. Assert what fish returns.
|
|
551
|
+
{
|
|
552
|
+
line: "pragma --format=",
|
|
553
|
+
offers: ["--format=json", "--format=llm", "--format=plain"],
|
|
554
|
+
},
|
|
555
|
+
])("answers $line from the inlined rules, execing nothing", ({
|
|
556
|
+
line,
|
|
557
|
+
offers,
|
|
558
|
+
}) => {
|
|
559
|
+
const { reply, calls } = driveFish(live.fish, line);
|
|
560
|
+
expect(reply.sort()).toEqual([...offers].sort());
|
|
561
|
+
expect(calls).toEqual([]);
|
|
562
|
+
});
|
|
563
|
+
|
|
564
|
+
it("hands __complete the SAME protocol argv bash does, and OFFERS the answer", () => {
|
|
565
|
+
const { reply, calls } = driveFish(
|
|
566
|
+
live.fish,
|
|
567
|
+
"pragma block lookup ds:global.component.but",
|
|
568
|
+
);
|
|
569
|
+
expect(calls).toEqual([PROTOCOL_ARGV]);
|
|
570
|
+
expect(reply).toEqual(answersFor("ds:global.component.but"));
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
it("answers `--<TAB>` with the flag names, execing nothing (as bash and zsh do)", () => {
|
|
574
|
+
// The sixth `STRUCTURE` row, kept apart because it is where fish USED to
|
|
575
|
+
// differ — measured, not assumed. fish evaluates EVERY `complete` rule
|
|
576
|
+
// matching a position, not one exclusive `case` arm, so the positional's
|
|
577
|
+
// `-a "(pragma __complete -- …)"` fired alongside the flag-name rules the
|
|
578
|
+
// moment the token cleared `minChars` — and `--` is two characters. That
|
|
579
|
+
// cost a process spawn per TAB on a flag name, and put whatever the
|
|
580
|
+
// delegate answered for a `--` partial into the user's candidate list.
|
|
581
|
+
// The name-source positional rule now ANDs `__pragma_notflag`, so fish
|
|
582
|
+
// holds `emitScripts.ts`'s "structure execs nothing" claim like the other
|
|
583
|
+
// two families.
|
|
584
|
+
const { reply, calls } = driveFish(live.fish, "pragma block lookup --");
|
|
585
|
+
expect(calls).toEqual([]);
|
|
586
|
+
expect(reply.sort()).toEqual(
|
|
587
|
+
[
|
|
588
|
+
"--detail",
|
|
589
|
+
"--format",
|
|
590
|
+
"--help",
|
|
591
|
+
"--no-headers",
|
|
592
|
+
"--quiet",
|
|
593
|
+
"--verbose",
|
|
594
|
+
].sort(),
|
|
595
|
+
);
|
|
596
|
+
});
|
|
597
|
+
|
|
598
|
+
it("gates the exec on minChars: one typed char execs nothing, two execs once", () => {
|
|
599
|
+
const one = driveFish(live.fish, "pragma block lookup d");
|
|
600
|
+
expect(one.reply).toEqual([]);
|
|
601
|
+
expect(one.calls).toEqual([]);
|
|
602
|
+
|
|
603
|
+
// The positive half keeps the negative one honest: a driver that failed
|
|
604
|
+
// outright would also record nothing.
|
|
605
|
+
const two = driveFish(live.fish, "pragma block lookup ds");
|
|
606
|
+
expect(two.calls).toEqual([
|
|
607
|
+
["__complete", "--", "block", "lookup", "ds"],
|
|
608
|
+
]);
|
|
609
|
+
});
|
|
610
|
+
},
|
|
611
|
+
);
|
|
@@ -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
|