@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
|
@@ -4,97 +4,104 @@
|
|
|
4
4
|
* browser (`info`, `doctor`, MCP prompts, the resource provider) shares.
|
|
5
5
|
*
|
|
6
6
|
* {@link indexCompletionEnv} is the one source-dispatched reader wired at the
|
|
7
|
-
* `__complete` fast path (bin) and the `__complete` verb. It resolves
|
|
7
|
+
* `__complete` fast path (bin) and the `__complete` verb. It resolves three
|
|
8
8
|
* storeless sources — all disk-readable, never a store/SPARQL:
|
|
9
|
-
* - `index` → the active pack's `index.json
|
|
9
|
+
* - `index` → the active pack's `index.json`, filtered by a prefixed `type`
|
|
10
|
+
* and read from the declared `field` (`name` by default).
|
|
10
11
|
* - `skills` → SKILL.md names via {@link discoverSkills} (filesystem walk).
|
|
11
|
-
* - `prompts` → the pack index's `ds:Prompt` entities (`label || name`).
|
|
12
|
-
* - `tiers` → the pack index's `ds:Tier` entities (their `ds:name`, else
|
|
13
|
-
* `label ?? name` when the index carries no `ds:name`).
|
|
14
12
|
* - `prefixes` → the pack index's prefixes ∪ the default display prefixes.
|
|
15
13
|
*
|
|
14
|
+
* There is no per-family source. An entity family IS a `type` filter plus the
|
|
15
|
+
* field that family is addressed by, and both are declared at the verb, so this
|
|
16
|
+
* module names no entity type at all.
|
|
17
|
+
*
|
|
16
18
|
* The index is loaded once (lazy `readFileSync` + plain `JSON.parse` — never a
|
|
17
19
|
* store, facade, config evaluator, or zod schema; any I/O or parse error
|
|
18
|
-
* degrades to `[]`) and shared across the index
|
|
20
|
+
* degrades to `[]`) and shared across the index and prefixes sources;
|
|
19
21
|
* the skills walk is memoized to one walk per `__complete` process.
|
|
20
22
|
* {@link createIndexEntityReader} exposes the index read for the storeless
|
|
21
23
|
* behavioural/safety tests; {@link emptyNameSource} is the default (no names).
|
|
22
24
|
*
|
|
23
25
|
* {@link readPackIndex} and {@link entityTotal} expose the same storeless read
|
|
24
|
-
* to `info`/`doctor` and the resource surfaces
|
|
25
|
-
* the
|
|
26
|
-
*
|
|
26
|
+
* to `info`/`doctor` and the resource surfaces — but those callers are NOT on
|
|
27
|
+
* the fast path, so `readPackIndex` takes the boot decision rather than
|
|
28
|
+
* re-deriving one. Everything here relies only on the FROZEN `{ name, type }`
|
|
29
|
+
* index minimum (plus optional enrichment like `label`/`altNames`), so the
|
|
30
|
+
* index can grow without breaking completion.
|
|
27
31
|
*
|
|
28
32
|
* Storeless-graph notes:
|
|
29
33
|
* - The embedded fallback is read from `pack.index.generated` — its OWN
|
|
30
34
|
* generated module (only the index string) — so the storeless `__complete`
|
|
31
|
-
* path never
|
|
32
|
-
* `pack.generated`.
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* -
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* (
|
|
35
|
+
* path never EVALUATES the n-quads/schema/manifest strings that live in
|
|
36
|
+
* `pack.generated`. Under the compiled binary it did not avoid PARSING them
|
|
37
|
+
* either — one emitted script meant the whole embed was parsed at process
|
|
38
|
+
* start on every invocation (~+25 ms, measured on `--version`; BUDGETS.md
|
|
39
|
+
* records it), and the split bought only that a completion never allocated
|
|
40
|
+
* the 1.87 MB. Shipping per-module output changed that: `pack.generated` is
|
|
41
|
+
* a separate module the fast path never imports, so it is no longer parsed
|
|
42
|
+
* at all there. The split now buys both.
|
|
43
|
+
* - The active pack is resolved through `kernel/runtime/paths` — a LEAF module
|
|
44
|
+
* (node builtins only) that shares the pointer read with `resolveSources`.
|
|
45
|
+
* `resolveSources` itself is unreachable from here: it pulls the graphpack
|
|
46
|
+
* manifest schema (zod), which `safety.test.ts` forbids on this graph, and
|
|
47
|
+
* `origins.packs` needs the config evaluator. So {@link loadActiveIndex}
|
|
48
|
+
* implements only the POINTER half of the decision table — pointer → that
|
|
49
|
+
* pack (else nothing), no pointer → the embedded snapshot. It cannot tell a
|
|
50
|
+
* fresh install from a project that declared its own packs and never built
|
|
51
|
+
* them, so a `__complete` in the latter still offers the snapshot's names.
|
|
52
|
+
* That is the price of a config-free fast path, and it is bounded to
|
|
53
|
+
* completion candidates: every read, and every surface that takes the
|
|
54
|
+
* decision, refuses. `PackIndex`/`PackIndexEntity` are imported type-only, so
|
|
55
|
+
* no zod schema is loaded at runtime.
|
|
56
|
+
* - `discoverSkills` (`node:fs/os/path` only) and `DEFAULT_PREFIX_MAP` (whose
|
|
57
|
+
* domain half the distribution declares) are the only new edges — both
|
|
58
|
+
* leaf-clean, so the fast path stays free of boot/config/store/zod.
|
|
43
59
|
*/
|
|
44
60
|
|
|
45
|
-
import {
|
|
46
|
-
import { homedir } from "node:os";
|
|
61
|
+
import { readFileSync } from "node:fs";
|
|
47
62
|
import { join } from "node:path";
|
|
48
63
|
import { discoverSkills } from "../../capabilities/skill/discover.js";
|
|
49
64
|
// Inlined embedded index — its OWN generated module (only the index string), so
|
|
50
65
|
// the storeless `__complete` path never pulls the n-quads/schema/manifest
|
|
51
66
|
// strings that live in `pack.generated.ts`.
|
|
52
|
-
import { DEFAULT_PREFIX_MAP } from "../render/
|
|
67
|
+
import { DEFAULT_PREFIX_MAP } from "../render/index.js";
|
|
53
68
|
import { indexJson as EMBEDDED_INDEX_JSON } from "../runtime/graphpack/embedded/pack.index.generated.js";
|
|
54
69
|
import type { PackIndex, PackIndexEntity } from "../runtime/graphpack/types.js";
|
|
55
|
-
import
|
|
70
|
+
import { packDir, readActivePack } from "../runtime/paths.js";
|
|
71
|
+
import type { SourcesDecision } from "../runtime/resolveSources.js";
|
|
72
|
+
import type { CompletionField, CompletionSourceRef } from "../spec/types.js";
|
|
56
73
|
import type { CompletionEnv } from "./types.js";
|
|
57
74
|
|
|
58
|
-
/** The prefixed KG type every prompt entity carries (inlined; no cycle). */
|
|
59
|
-
const PROMPT_TYPE = "ds:Prompt";
|
|
60
|
-
/** The prefixed KG type every tier entity carries (inlined; no cycle). */
|
|
61
|
-
const TIER_TYPE = "ds:Tier";
|
|
62
|
-
|
|
63
75
|
/** The default name source: no index tier, so no candidates. */
|
|
64
76
|
export const emptyNameSource: CompletionEnv["names"] = () => [];
|
|
65
77
|
|
|
66
|
-
/** The committed project lock basename (mirrors `kernel/runtime/paths`). */
|
|
67
|
-
const LOCK_BASENAME = "pragma.lock.json";
|
|
68
78
|
/** The pack index filename (kept local so this path never imports the zod schema). */
|
|
69
79
|
const INDEX_FILE = "index.json";
|
|
70
80
|
|
|
71
81
|
/**
|
|
72
|
-
*
|
|
82
|
+
* Read the storeless index of the pack the BOOT DECISION names — for `info`,
|
|
83
|
+
* `doctor`, the MCP resource browser, and native `prompts/list`. Never boots the
|
|
84
|
+
* store, never validates with zod — a plain `JSON.parse` off disk.
|
|
73
85
|
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const base = process.env.XDG_CACHE_HOME ?? join(homedir(), ".cache");
|
|
79
|
-
return join(base, "pragma", "packs", contentHash);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/** The committed project lock file for a working directory. */
|
|
83
|
-
function lockPath(cwd: string): string {
|
|
84
|
-
return join(cwd, LOCK_BASENAME);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Read the active pack's storeless index (the locked pack, else the embedded
|
|
89
|
-
* fallback), for the resource browser's list/autocomplete. Never boots the
|
|
90
|
-
* store, never validates with zod — a plain `JSON.parse` off disk. Returns
|
|
91
|
-
* `undefined` when no index is reachable, so callers degrade to a recovery hint.
|
|
86
|
+
* It takes the decision rather than re-deriving one so these surfaces cannot
|
|
87
|
+
* list entities the same project's reads refuse: `unavailable` yields
|
|
88
|
+
* `undefined`, and callers degrade to a recovery hint (`buildResourceList`
|
|
89
|
+
* emits the `pragma:sources` entry, `info` omits the total).
|
|
92
90
|
*
|
|
93
|
-
* @param
|
|
94
|
-
* @returns The
|
|
91
|
+
* @param decision - The boot decision from `resolveSources`.
|
|
92
|
+
* @returns The answering pack's index, or `undefined` when none answers.
|
|
95
93
|
*/
|
|
96
|
-
export function readPackIndex(
|
|
97
|
-
|
|
94
|
+
export function readPackIndex(
|
|
95
|
+
decision: SourcesDecision,
|
|
96
|
+
): PackIndex | undefined {
|
|
97
|
+
switch (decision.kind) {
|
|
98
|
+
case "pack":
|
|
99
|
+
return readIndexFile(decision.dir);
|
|
100
|
+
case "embedded":
|
|
101
|
+
return parseIndex(EMBEDDED_INDEX_JSON);
|
|
102
|
+
case "unavailable":
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
98
105
|
}
|
|
99
106
|
|
|
100
107
|
/**
|
|
@@ -120,33 +127,50 @@ export function entityTotal(index: PackIndex): number {
|
|
|
120
127
|
return subjects.size;
|
|
121
128
|
}
|
|
122
129
|
|
|
123
|
-
/**
|
|
124
|
-
function
|
|
130
|
+
/** Parse an index JSON string; any malformed input degrades to `undefined`. */
|
|
131
|
+
function parseIndex(json: string): PackIndex | undefined {
|
|
125
132
|
try {
|
|
126
|
-
|
|
127
|
-
if (existsSync(path)) {
|
|
128
|
-
const lock = JSON.parse(readFileSync(path, "utf-8")) as {
|
|
129
|
-
contentHash?: unknown;
|
|
130
|
-
};
|
|
131
|
-
if (typeof lock.contentHash === "string") {
|
|
132
|
-
const indexPath = join(packDir(lock.contentHash), INDEX_FILE);
|
|
133
|
-
if (existsSync(indexPath)) {
|
|
134
|
-
return JSON.parse(readFileSync(indexPath, "utf-8")) as PackIndex;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
133
|
+
return JSON.parse(json) as PackIndex;
|
|
138
134
|
} catch {
|
|
139
|
-
|
|
135
|
+
return undefined;
|
|
140
136
|
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** Read a pack directory's `index.json`; any I/O or parse error is `undefined`. */
|
|
140
|
+
function readIndexFile(dir: string): PackIndex | undefined {
|
|
141
141
|
try {
|
|
142
|
-
return
|
|
142
|
+
return parseIndex(readFileSync(join(dir, INDEX_FILE), "utf-8"));
|
|
143
143
|
} catch {
|
|
144
144
|
return undefined;
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
/**
|
|
149
|
-
|
|
148
|
+
/**
|
|
149
|
+
* The fast path's index — the POINTER half of the decision table (see the module
|
|
150
|
+
* docblock). A project with a pointer reads that pack and nothing else: a
|
|
151
|
+
* pointer whose pack the cache lost yields no candidates rather than the
|
|
152
|
+
* snapshot's, which is what the boot decision does with the same state.
|
|
153
|
+
*/
|
|
154
|
+
function loadActiveIndex(cwd: string): PackIndex | undefined {
|
|
155
|
+
const contentHash = readActivePack(cwd);
|
|
156
|
+
return contentHash === undefined
|
|
157
|
+
? parseIndex(EMBEDDED_INDEX_JSON)
|
|
158
|
+
: readIndexFile(packDir(contentHash));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Whether an entity matches a prefixed type filter (primary type or any type).
|
|
163
|
+
*
|
|
164
|
+
* Exported because the MCP resource listing addresses the index by the SAME
|
|
165
|
+
* vocabulary a completion source does (`McpListableRef` reuses
|
|
166
|
+
* `CompletionSourceRef`'s fields), and "which entities is this type?" must be
|
|
167
|
+
* ONE rule — two would let a type list entities its completion refuses.
|
|
168
|
+
*
|
|
169
|
+
* @param entity - The indexed entity to test.
|
|
170
|
+
* @param type - A prefixed type filter; empty matches every entity.
|
|
171
|
+
* @returns Whether the entity carries that type.
|
|
172
|
+
*/
|
|
173
|
+
export function matchesType(entity: PackIndexEntity, type: string): boolean {
|
|
150
174
|
if (!type) return true;
|
|
151
175
|
if (entity.type === type) return true;
|
|
152
176
|
return Array.isArray(entity.types) && entity.types.includes(type);
|
|
@@ -180,42 +204,45 @@ export function createIndexEntityReader(
|
|
|
180
204
|
};
|
|
181
205
|
}
|
|
182
206
|
|
|
183
|
-
/**
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
207
|
+
/**
|
|
208
|
+
* One entity's completable tokens for a declared field, with NO fallback.
|
|
209
|
+
*
|
|
210
|
+
* A verb declares the field because that is the one its lookup matches on, so
|
|
211
|
+
* an entity the pack did not enrich contributes nothing. Standing a label in
|
|
212
|
+
* for an absent alt name would offer a token the lookup provably cannot resolve
|
|
213
|
+
* — a completion that hands the user a value and then refuses it — which is the
|
|
214
|
+
* complete-but-cannot-resolve split this whole declaration exists to close.
|
|
215
|
+
* Offering nothing for an under-enriched entity is the honest answer.
|
|
216
|
+
*
|
|
217
|
+
* @param entity - One index entity.
|
|
218
|
+
* @param field - The declared field to read.
|
|
219
|
+
* @returns The tokens that entity contributes; empty when it carries none.
|
|
220
|
+
*/
|
|
221
|
+
function readEntityNames(
|
|
222
|
+
entity: PackIndexEntity,
|
|
223
|
+
field: CompletionField,
|
|
224
|
+
): readonly string[] {
|
|
225
|
+
switch (field) {
|
|
226
|
+
case "name":
|
|
227
|
+
return [entity.name];
|
|
228
|
+
case "label":
|
|
229
|
+
return entity.label ? [entity.label] : [];
|
|
230
|
+
case "altNames":
|
|
231
|
+
return entity.altNames ?? [];
|
|
200
232
|
}
|
|
201
|
-
return [...names].sort();
|
|
202
233
|
}
|
|
203
234
|
|
|
204
|
-
/**
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
*/
|
|
210
|
-
function tierNames(index: PackIndex | undefined): string[] {
|
|
235
|
+
/** A ref's candidates: entities of its type, read from its field, sorted. */
|
|
236
|
+
function indexNames(
|
|
237
|
+
index: PackIndex | undefined,
|
|
238
|
+
ref: CompletionSourceRef,
|
|
239
|
+
): string[] {
|
|
211
240
|
if (!index) return [];
|
|
212
241
|
const names = new Set<string>();
|
|
213
242
|
for (const entity of index.entities) {
|
|
214
|
-
if (!matchesType(entity,
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
} else {
|
|
218
|
-
names.add(entity.label || entity.name);
|
|
243
|
+
if (!matchesType(entity, ref.type ?? "")) continue;
|
|
244
|
+
for (const name of readEntityNames(entity, ref.field ?? "name")) {
|
|
245
|
+
names.add(name);
|
|
219
246
|
}
|
|
220
247
|
}
|
|
221
248
|
return [...names].sort();
|
|
@@ -235,8 +262,8 @@ function prefixNames(index: PackIndex | undefined): string[] {
|
|
|
235
262
|
* reader every name family shares. Wired at the `__complete` fast path (bin) and
|
|
236
263
|
* the `__complete` verb; storeless throughout (see the module docblock).
|
|
237
264
|
*
|
|
238
|
-
* The pack index is loaded once, lazily, and reused across the index
|
|
239
|
-
*
|
|
265
|
+
* The pack index is loaded once, lazily, and reused across the index and
|
|
266
|
+
* prefixes sources; the skills filesystem walk is memoized to one walk per
|
|
240
267
|
* process (the design's perf caveat). Every source returns the FULL candidate
|
|
241
268
|
* list in canonical casing — the resolver ranks/filters against the partial.
|
|
242
269
|
*
|
|
@@ -262,13 +289,9 @@ export function indexCompletionEnv(cwd: string): CompletionEnv {
|
|
|
262
289
|
names(ref: CompletionSourceRef): readonly string[] {
|
|
263
290
|
switch (ref.from) {
|
|
264
291
|
case "index":
|
|
265
|
-
return indexNames(getIndex(), ref
|
|
292
|
+
return indexNames(getIndex(), ref);
|
|
266
293
|
case "skills":
|
|
267
294
|
return getSkills();
|
|
268
|
-
case "prompts":
|
|
269
|
-
return promptNames(getIndex());
|
|
270
|
-
case "tiers":
|
|
271
|
-
return tierNames(getIndex());
|
|
272
295
|
case "prefixes":
|
|
273
296
|
return prefixNames(getIndex());
|
|
274
297
|
}
|
|
@@ -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
|
{
|
|
@@ -236,7 +262,7 @@ describe("buildCompletionModel — flags and sources", () => {
|
|
|
236
262
|
positional: true,
|
|
237
263
|
complete: {
|
|
238
264
|
kind: "names",
|
|
239
|
-
source: { from: "
|
|
265
|
+
source: { from: "index", type: "ex:Tier", field: "altNames" },
|
|
240
266
|
enabled: false,
|
|
241
267
|
},
|
|
242
268
|
},
|
|
@@ -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[] = [
|