@canonical/pragma-cli 0.34.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +293 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +83 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +66 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +53 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +168 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +193 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +334 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +263 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +195 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +82 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +25 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +197 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +85 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +20 -22
- package/pragma.conf.ts +249 -60
- package/src/bin.ts +267 -82
- package/src/capabilities/block.parity.test.ts +6 -3
- package/src/capabilities/capabilities/capabilities.render.ts +1 -1
- package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
- package/src/capabilities/capabilities/catalog.ts +3 -3
- package/src/capabilities/capabilities/hints.ts +32 -7
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +35 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +4 -4
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/config/collectConfigShow.ts +3 -3
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -10
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +8 -7
- package/src/capabilities/config/show.render.ts +1 -1
- package/src/capabilities/config/show.verb.ts +9 -6
- package/src/capabilities/config/types.ts +18 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +25 -11
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +36 -61
- package/src/capabilities/create/create.mcp.test.ts +89 -5
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +433 -219
- package/src/capabilities/create/create.verb.ts +297 -328
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +7 -4
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +23 -35
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +20 -0
- package/src/capabilities/distribution.test.ts +3 -1
- package/src/capabilities/distribution.ts +10 -15
- package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +6 -4
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +18 -7
- package/src/capabilities/doctor/doctor.render.ts +43 -19
- package/src/capabilities/doctor/doctor.test.ts +123 -34
- package/src/capabilities/doctor/doctor.verb.ts +3 -3
- package/src/capabilities/doctor/runChecks.ts +62 -63
- package/src/capabilities/doctor/types.ts +20 -4
- package/src/capabilities/emptyRecovery.test.ts +13 -8
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -6
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +3 -3
- package/src/capabilities/graph/runQuery.ts +2 -3
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/info/collectInfo.ts +5 -4
- package/src/capabilities/info/info.render.ts +1 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/lazy.test.ts +32 -0
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +27 -68
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +4 -5
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +396 -326
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +223 -71
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +37 -5
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +3 -4
- package/src/capabilities/sources/collectStatus.ts +7 -2
- package/src/capabilities/sources/index.ts +1 -1
- package/src/capabilities/sources/installSkills.ts +84 -7
- package/src/capabilities/sources/runUpdate.ts +53 -21
- package/src/capabilities/sources/sources.test.ts +154 -2
- package/src/capabilities/sources/status.render.ts +1 -1
- package/src/capabilities/sources/status.verb.ts +1 -1
- package/src/capabilities/sources/update.render.ts +1 -1
- package/src/capabilities/sources/update.verb.ts +1 -1
- package/src/capabilities/surface.test.ts +134 -17
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.ts +31 -1
- package/src/identity.test.ts +40 -25
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +1 -1
- package/src/kernel/completion/entitySource.test.ts +1 -1
- package/src/kernel/completion/entitySource.ts +21 -8
- package/src/kernel/completion/model.test.ts +164 -12
- package/src/kernel/completion/model.ts +94 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +34 -26
- package/src/kernel/completion/shellDrive.test.ts +28 -9
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +7 -0
- package/src/kernel/config/defaults.test.ts +25 -2
- package/src/kernel/config/defaults.ts +4 -3
- package/src/kernel/config/evaluateProjectConfig.ts +31 -8
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -88
- package/src/kernel/config/index.ts +1 -1
- package/src/kernel/config/readConfig.test.ts +6 -3
- package/src/kernel/config/readConfig.ts +1 -1
- package/src/kernel/config/schema.ts +3 -1
- package/src/kernel/config/types.ts +3 -1
- package/src/kernel/copy.test.ts +34 -4
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +5 -2
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -5
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/recovery.ts +14 -0
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +21 -1
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +130 -1
- package/src/kernel/packs/compile.ts +93 -3
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +66 -14
- package/src/kernel/packs/renderPack.ts +24 -5
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +112 -18
- package/src/kernel/packs/runBodies.ts +2 -3
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +18 -1
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +42 -3
- package/src/kernel/packs/types.ts +13 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +147 -12
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +160 -3
- package/src/kernel/project/cli/dispatch.ts +222 -42
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +130 -30
- package/src/kernel/project/cli/helpFormat.ts +13 -0
- package/src/kernel/project/cli/rootHelp.ts +41 -12
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +7 -4
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +2 -2
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +5 -2
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/source.ts +2 -2
- package/src/kernel/project/mcp/registerVerb.ts +35 -9
- package/src/kernel/project/mcp/serve.ts +2 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/renderers.test.ts +243 -6
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded.ts +3 -3
- package/src/kernel/runtime/graphpack/manifest.ts +1 -1
- package/src/kernel/runtime/graphpack/read.ts +1 -2
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +472 -28
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +2 -2
- package/src/kernel/runtime/refs/resolve.ts +4 -4
- package/src/kernel/runtime/storeReadiness.ts +1 -2
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
- package/src/kernel/spec/emitReference.ts +105 -30
- package/src/kernel/spec/emitSurface.ts +48 -6
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/types.ts +248 -4
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/journeys.cli.test.ts +1 -1
- package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.packageStories.test.ts +4 -4
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +1 -1
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/graph/canonical.ts +88 -2
- package/src/testing/fixtures/graph/defaultPack.ts +1 -1
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/projectMcp.ts +32 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +20 -9
- package/src/testing/perf/budgets.ts +58 -9
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +505 -23
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/dist/pragma +0 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
- package/src/capabilities/create/templates.embedded.generated.ts +0 -28
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dynamic-tier seam: where `{kind:"names"}` completions get their candidates
|
|
3
|
+
* for EVERY object family, plus the storeless pack-index read the resource
|
|
4
|
+
* browser (`info`, `doctor`, MCP prompts, the resource provider) shares.
|
|
5
|
+
*
|
|
6
|
+
* {@link indexCompletionEnv} is the one source-dispatched reader wired at the
|
|
7
|
+
* `__complete` fast path (bin) and the `__complete` verb. It resolves three
|
|
8
|
+
* storeless sources — all disk-readable, never a store/SPARQL:
|
|
9
|
+
* - `index` → the active pack's `index.json`, filtered by a prefixed `type`
|
|
10
|
+
* and read from the declared `field` (`name` by default).
|
|
11
|
+
* - `skills` → SKILL.md names via {@link discoverSkills} (filesystem walk).
|
|
12
|
+
* - `prefixes` → the pack index's prefixes ∪ the default display prefixes.
|
|
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
|
+
*
|
|
18
|
+
* The index is loaded once (lazy `readFileSync` + plain `JSON.parse` — never a
|
|
19
|
+
* store, facade, config evaluator, or zod schema; any I/O or parse error
|
|
20
|
+
* degrades to `[]`) and shared across the index and prefixes sources;
|
|
21
|
+
* the skills walk is memoized to one walk per `__complete` process.
|
|
22
|
+
* {@link createIndexEntityReader} exposes the index read for the storeless
|
|
23
|
+
* behavioural/safety tests; {@link emptyNameSource} is the default (no names).
|
|
24
|
+
*
|
|
25
|
+
* {@link readPackIndex} and {@link entityTotal} expose the same storeless read
|
|
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.
|
|
31
|
+
*
|
|
32
|
+
* Storeless-graph notes:
|
|
33
|
+
* - The embedded fallback is read from `pack.index.generated` — its OWN
|
|
34
|
+
* generated module (only the index string) — so the storeless `__complete`
|
|
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.
|
|
59
|
+
*/
|
|
60
|
+
import { readFileSync } from "node:fs";
|
|
61
|
+
import { join } from "node:path";
|
|
62
|
+
import { discoverSkills } from "../../capabilities/skill/discover.js";
|
|
63
|
+
// Inlined embedded index — its OWN generated module (only the index string), so
|
|
64
|
+
// the storeless `__complete` path never pulls the n-quads/schema/manifest
|
|
65
|
+
// strings that live in `pack.generated.ts`.
|
|
66
|
+
import { DEFAULT_PREFIX_MAP } from "../render/index.js";
|
|
67
|
+
import { indexJson as EMBEDDED_INDEX_JSON } from "../runtime/graphpack/embedded/pack.index.generated.js";
|
|
68
|
+
import { packDir, readActivePack } from "../runtime/paths.js";
|
|
69
|
+
/** The default name source: no index tier, so no candidates. */
|
|
70
|
+
export const emptyNameSource = () => [];
|
|
71
|
+
/** The pack index filename (kept local so this path never imports the zod schema). */
|
|
72
|
+
const INDEX_FILE = "index.json";
|
|
73
|
+
/**
|
|
74
|
+
* Read the storeless index of the pack the BOOT DECISION names — for `info`,
|
|
75
|
+
* `doctor`, the MCP resource browser, and native `prompts/list`. Never boots the
|
|
76
|
+
* store, never validates with zod — a plain `JSON.parse` off disk.
|
|
77
|
+
*
|
|
78
|
+
* It takes the decision rather than re-deriving one so these surfaces cannot
|
|
79
|
+
* list entities the same project's reads refuse: `unavailable` yields
|
|
80
|
+
* `undefined`, and callers degrade to a recovery hint (`buildResourceList`
|
|
81
|
+
* emits the `pragma:sources` entry, `info` omits the total).
|
|
82
|
+
*
|
|
83
|
+
* @param decision - The boot decision from `resolveSources`.
|
|
84
|
+
* @returns The answering pack's index, or `undefined` when none answers.
|
|
85
|
+
*/
|
|
86
|
+
export function readPackIndex(decision) {
|
|
87
|
+
switch (decision.kind) {
|
|
88
|
+
case "pack":
|
|
89
|
+
return readIndexFile(decision.dir);
|
|
90
|
+
case "embedded":
|
|
91
|
+
return parseIndex(EMBEDDED_INDEX_JSON);
|
|
92
|
+
case "unavailable":
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Count a pack index's DISTINCT abox subjects — the "total entities" figure
|
|
98
|
+
* `info` and `doctor` report. Works over any {@link PackIndex}, whether read
|
|
99
|
+
* storelessly via {@link readPackIndex} or taken from a booted store session.
|
|
100
|
+
*
|
|
101
|
+
* NOT a sum of `instanceCountByType`: on a real OWL/Protégé export that raw
|
|
102
|
+
* multiset double-counts — every individual is typed as both its domain class
|
|
103
|
+
* AND `owl:NamedIndividual`, and the `owl:Class`/property meta-buckets pile on
|
|
104
|
+
* top — so the total ran ~2× the real entity count (A1). Counting distinct
|
|
105
|
+
* abox subjects (the individuals, each once) is the figure users expect; the
|
|
106
|
+
* tbox schema classes/properties are not "entities" in this count.
|
|
107
|
+
*
|
|
108
|
+
* @param index - A pack index.
|
|
109
|
+
* @returns The number of distinct abox subjects indexed.
|
|
110
|
+
*/
|
|
111
|
+
export function entityTotal(index) {
|
|
112
|
+
const subjects = new Set();
|
|
113
|
+
for (const entity of index.entities) {
|
|
114
|
+
if (entity.box === "abox")
|
|
115
|
+
subjects.add(entity.uri ?? entity.name);
|
|
116
|
+
}
|
|
117
|
+
return subjects.size;
|
|
118
|
+
}
|
|
119
|
+
/** Parse an index JSON string; any malformed input degrades to `undefined`. */
|
|
120
|
+
function parseIndex(json) {
|
|
121
|
+
try {
|
|
122
|
+
return JSON.parse(json);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** Read a pack directory's `index.json`; any I/O or parse error is `undefined`. */
|
|
129
|
+
function readIndexFile(dir) {
|
|
130
|
+
try {
|
|
131
|
+
return parseIndex(readFileSync(join(dir, INDEX_FILE), "utf-8"));
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* The fast path's index — the POINTER half of the decision table (see the module
|
|
139
|
+
* docblock). A project with a pointer reads that pack and nothing else: a
|
|
140
|
+
* pointer whose pack the cache lost yields no candidates rather than the
|
|
141
|
+
* snapshot's, which is what the boot decision does with the same state.
|
|
142
|
+
*/
|
|
143
|
+
function loadActiveIndex(cwd) {
|
|
144
|
+
const contentHash = readActivePack(cwd);
|
|
145
|
+
return contentHash === undefined
|
|
146
|
+
? parseIndex(EMBEDDED_INDEX_JSON)
|
|
147
|
+
: readIndexFile(packDir(contentHash));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Whether an entity matches a prefixed type filter (primary type or any type).
|
|
151
|
+
*
|
|
152
|
+
* Exported because the MCP resource listing addresses the index by the SAME
|
|
153
|
+
* vocabulary a completion source does (`McpListableRef` reuses
|
|
154
|
+
* `CompletionSourceRef`'s fields), and "which entities is this type?" must be
|
|
155
|
+
* ONE rule — two would let a type list entities its completion refuses.
|
|
156
|
+
*
|
|
157
|
+
* @param entity - The indexed entity to test.
|
|
158
|
+
* @param type - A prefixed type filter; empty matches every entity.
|
|
159
|
+
* @returns Whether the entity carries that type.
|
|
160
|
+
*/
|
|
161
|
+
export function matchesType(entity, type) {
|
|
162
|
+
if (!type)
|
|
163
|
+
return true;
|
|
164
|
+
if (entity.type === type)
|
|
165
|
+
return true;
|
|
166
|
+
return Array.isArray(entity.types) && entity.types.includes(type);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Build a storeless entity-name reader for a working directory.
|
|
170
|
+
*
|
|
171
|
+
* @param cwd - The project directory (to resolve the active pack).
|
|
172
|
+
* @returns `(type, partial) => string[]` — sorted entity names of `type`
|
|
173
|
+
* starting with `partial`. The index is loaded once, lazily, and reused.
|
|
174
|
+
*/
|
|
175
|
+
export function createIndexEntityReader(cwd) {
|
|
176
|
+
let index;
|
|
177
|
+
let loaded = false;
|
|
178
|
+
return (type, partial) => {
|
|
179
|
+
if (!loaded) {
|
|
180
|
+
index = loadActiveIndex(cwd);
|
|
181
|
+
loaded = true;
|
|
182
|
+
}
|
|
183
|
+
if (!index)
|
|
184
|
+
return [];
|
|
185
|
+
const names = new Set();
|
|
186
|
+
for (const entity of index.entities) {
|
|
187
|
+
if (!matchesType(entity, type))
|
|
188
|
+
continue;
|
|
189
|
+
if (partial && !entity.name.startsWith(partial))
|
|
190
|
+
continue;
|
|
191
|
+
names.add(entity.name);
|
|
192
|
+
}
|
|
193
|
+
return [...names].sort();
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* One entity's completable tokens for a declared field, with NO fallback.
|
|
198
|
+
*
|
|
199
|
+
* A verb declares the field because that is the one its lookup matches on, so
|
|
200
|
+
* an entity the pack did not enrich contributes nothing. Standing a label in
|
|
201
|
+
* for an absent alt name would offer a token the lookup provably cannot resolve
|
|
202
|
+
* — a completion that hands the user a value and then refuses it — which is the
|
|
203
|
+
* complete-but-cannot-resolve split this whole declaration exists to close.
|
|
204
|
+
* Offering nothing for an under-enriched entity is the honest answer.
|
|
205
|
+
*
|
|
206
|
+
* @param entity - One index entity.
|
|
207
|
+
* @param field - The declared field to read.
|
|
208
|
+
* @returns The tokens that entity contributes; empty when it carries none.
|
|
209
|
+
*/
|
|
210
|
+
function readEntityNames(entity, field) {
|
|
211
|
+
switch (field) {
|
|
212
|
+
case "name":
|
|
213
|
+
return [entity.name];
|
|
214
|
+
case "label":
|
|
215
|
+
return entity.label ? [entity.label] : [];
|
|
216
|
+
case "altNames":
|
|
217
|
+
return entity.altNames ?? [];
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/** A ref's candidates: entities of its type, read from its field, sorted. */
|
|
221
|
+
function indexNames(index, ref) {
|
|
222
|
+
if (!index)
|
|
223
|
+
return [];
|
|
224
|
+
const names = new Set();
|
|
225
|
+
for (const entity of index.entities) {
|
|
226
|
+
if (!matchesType(entity, ref.type ?? ""))
|
|
227
|
+
continue;
|
|
228
|
+
for (const name of readEntityNames(entity, ref.field ?? "name")) {
|
|
229
|
+
names.add(name);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return [...names].sort();
|
|
233
|
+
}
|
|
234
|
+
/** The completable namespace prefixes: the index's ∪ the default display map. */
|
|
235
|
+
function prefixNames(index) {
|
|
236
|
+
const keys = new Set(Object.keys(DEFAULT_PREFIX_MAP));
|
|
237
|
+
if (index?.prefixes) {
|
|
238
|
+
for (const key of Object.keys(index.prefixes))
|
|
239
|
+
keys.add(key);
|
|
240
|
+
}
|
|
241
|
+
return [...keys].sort();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* The completion environment for a working directory — the one source-dispatched
|
|
245
|
+
* reader every name family shares. Wired at the `__complete` fast path (bin) and
|
|
246
|
+
* the `__complete` verb; storeless throughout (see the module docblock).
|
|
247
|
+
*
|
|
248
|
+
* The pack index is loaded once, lazily, and reused across the index and
|
|
249
|
+
* prefixes sources; the skills filesystem walk is memoized to one walk per
|
|
250
|
+
* process (the design's perf caveat). Every source returns the FULL candidate
|
|
251
|
+
* list in canonical casing — the resolver ranks/filters against the partial.
|
|
252
|
+
*
|
|
253
|
+
* @param cwd - The project directory (to resolve the active pack + skills).
|
|
254
|
+
* @returns A {@link CompletionEnv} dispatching on {@link CompletionSourceRef}.
|
|
255
|
+
*/
|
|
256
|
+
export function indexCompletionEnv(cwd) {
|
|
257
|
+
let index;
|
|
258
|
+
let indexLoaded = false;
|
|
259
|
+
const getIndex = () => {
|
|
260
|
+
if (!indexLoaded) {
|
|
261
|
+
index = loadActiveIndex(cwd);
|
|
262
|
+
indexLoaded = true;
|
|
263
|
+
}
|
|
264
|
+
return index;
|
|
265
|
+
};
|
|
266
|
+
let skills;
|
|
267
|
+
const getSkills = () => {
|
|
268
|
+
if (skills === undefined)
|
|
269
|
+
skills = discoverSkills(cwd).map((s) => s.name);
|
|
270
|
+
return skills;
|
|
271
|
+
};
|
|
272
|
+
return {
|
|
273
|
+
names(ref) {
|
|
274
|
+
switch (ref.from) {
|
|
275
|
+
case "index":
|
|
276
|
+
return indexNames(getIndex(), ref);
|
|
277
|
+
case "skills":
|
|
278
|
+
return getSkills();
|
|
279
|
+
case "prefixes":
|
|
280
|
+
return prefixNames(getIndex());
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=entitySource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitySource.js","sourceRoot":"","sources":["../../../../src/kernel/completion/entitySource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Completion kernel barrel — the shared model, the `__complete` resolver
|
|
3
|
+
* pipeline (parse → resolve → rank), the static script emitter, and the
|
|
4
|
+
* dynamic-tier entity seam. Both tiers are driven off the grammar via
|
|
5
|
+
* `buildCompletionModel`, so they can never disagree.
|
|
6
|
+
*/
|
|
7
|
+
export { runComplete } from "./complete.js";
|
|
8
|
+
export { emitScripts } from "./emitScripts.js";
|
|
9
|
+
export { createIndexEntityReader, emptyNameSource, indexCompletionEnv, } from "./entitySource.js";
|
|
10
|
+
export { assertSafeToken, buildCompletionModel, findNoun, SAFE_TOKEN_RE, } from "./model.js";
|
|
11
|
+
export { parseWords } from "./parse.js";
|
|
12
|
+
export { filterPrefix, MAX_CANDIDATES, rankCandidates } from "./rank.js";
|
|
13
|
+
export { completionDebug, resolveRequest } from "./resolve.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/kernel/completion/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the completion model from the capability modules — the ONE derivation
|
|
3
|
+
* both tiers share: the static scripts inline it, the `__complete` resolver
|
|
4
|
+
* walks it, so the two can never disagree.
|
|
5
|
+
*
|
|
6
|
+
* `ParamSpec.complete` resolution (defaults when the field is absent):
|
|
7
|
+
*
|
|
8
|
+
* | declared | param kind | source |
|
|
9
|
+
* | ---------------- | ---------------------- | -------------------------- |
|
|
10
|
+
* | absent | enum | values (the enum's values) |
|
|
11
|
+
* | absent | boolean | none (flag name only) |
|
|
12
|
+
* | absent | string/number/string[] | none |
|
|
13
|
+
* | `{values}` | enum only | values |
|
|
14
|
+
* | `{names,source}` | string/string[] | names (dynamic tier) |
|
|
15
|
+
* | `{names,off}` | any | none (opt-out) |
|
|
16
|
+
* | `{files}` | string/string[] | files (native shell) |
|
|
17
|
+
* | `{none}` | any | none |
|
|
18
|
+
*
|
|
19
|
+
* Injection safety, primary gate: every token the static tier would inline
|
|
20
|
+
* (nouns, verb labels, flag names, enum values) must match
|
|
21
|
+
* {@link SAFE_TOKEN_RE}; the build THROWS otherwise, so `setup completions`
|
|
22
|
+
* fails loudly and no hostile name ever reaches a shell script. The resolver
|
|
23
|
+
* wraps this in its never-throw guard, so `__complete` degrades to zero
|
|
24
|
+
* candidates instead.
|
|
25
|
+
*/
|
|
26
|
+
import { DETAIL_LEVELS, OUTPUT_FORMATS } from "../../constants.js";
|
|
27
|
+
import { kebabCase, verbLabel } from "../spec/index.js";
|
|
28
|
+
/**
|
|
29
|
+
* The allowlist every inlined completion token must match: an alphanumeric
|
|
30
|
+
* head, then word/URI-ish characters. No whitespace, quotes, `$`, backticks,
|
|
31
|
+
* semicolons, or globs — nothing a shell could expand or split.
|
|
32
|
+
*
|
|
33
|
+
* KNOWN GAP, deliberately not closed: it admits shell RESERVED WORDS — `esac`,
|
|
34
|
+
* `in`, `do`, `done`, `fi`. A noun so named emits a `case` arm bash and zsh both
|
|
35
|
+
* refuse to parse, so `_pragma` is never defined and the user gets NO completion
|
|
36
|
+
* at all rather than a wrong candidate (`fish -n` does not catch it either). The
|
|
37
|
+
* gap is owned by the syntax gates, not by this regex: `shellDrive.test.ts`
|
|
38
|
+
* runs `bash -n`/`zsh -n` over the emitted scripts, so the day a live noun is
|
|
39
|
+
* named `done` the build fails loudly and names the file. A denylist here would
|
|
40
|
+
* be new production code guarding a case nothing in the tree exhibits — and a
|
|
41
|
+
* partial one (reserved words differ across families and versions) reads as
|
|
42
|
+
* more protection than it gives.
|
|
43
|
+
*/
|
|
44
|
+
export const SAFE_TOKEN_RE = /^[A-Za-z0-9][A-Za-z0-9@/:._+-]*$/;
|
|
45
|
+
/**
|
|
46
|
+
* Assert a token is safe to inline in a shell script.
|
|
47
|
+
*
|
|
48
|
+
* @param token - The candidate token (a noun, verb label, flag name, value).
|
|
49
|
+
* @param where - Human-readable location for the error message.
|
|
50
|
+
* @throws Error when the token fails the {@link SAFE_TOKEN_RE} allowlist.
|
|
51
|
+
*/
|
|
52
|
+
export function assertSafeToken(token, where) {
|
|
53
|
+
if (!SAFE_TOKEN_RE.test(token)) {
|
|
54
|
+
throw new Error(`completion: unsafe token ${JSON.stringify(token)} in ${where} — ` +
|
|
55
|
+
`must match ${String(SAFE_TOKEN_RE)}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** The global flags completion offers, mirroring the surface's globalFlags. */
|
|
59
|
+
const GLOBAL_FLAGS = [
|
|
60
|
+
{
|
|
61
|
+
flag: "--format",
|
|
62
|
+
takesValue: true,
|
|
63
|
+
repeatable: false,
|
|
64
|
+
source: { kind: "values", values: OUTPUT_FORMATS },
|
|
65
|
+
},
|
|
66
|
+
{ flag: "--verbose", takesValue: false, repeatable: false, source: none() },
|
|
67
|
+
{
|
|
68
|
+
flag: "--detail",
|
|
69
|
+
takesValue: true,
|
|
70
|
+
repeatable: false,
|
|
71
|
+
source: { kind: "values", values: DETAIL_LEVELS },
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
flag: "--no-headers",
|
|
75
|
+
takesValue: false,
|
|
76
|
+
repeatable: false,
|
|
77
|
+
source: none(),
|
|
78
|
+
},
|
|
79
|
+
{ flag: "--quiet", takesValue: false, repeatable: false, source: none() },
|
|
80
|
+
{ flag: "--help", takesValue: false, repeatable: false, source: none() },
|
|
81
|
+
{
|
|
82
|
+
flag: "--version",
|
|
83
|
+
takesValue: false,
|
|
84
|
+
repeatable: false,
|
|
85
|
+
rootOnly: true,
|
|
86
|
+
source: none(),
|
|
87
|
+
},
|
|
88
|
+
];
|
|
89
|
+
/** The flags auto-injected for `mutates` verbs (mirrors `buildProgram`). */
|
|
90
|
+
const MUTATION_FLAGS = [
|
|
91
|
+
{ flag: "--dry-run", takesValue: false, repeatable: false, source: none() },
|
|
92
|
+
{ flag: "--undo", takesValue: false, repeatable: false, source: none() },
|
|
93
|
+
{ flag: "--yes", takesValue: false, repeatable: false, source: none() },
|
|
94
|
+
];
|
|
95
|
+
/** The `{kind:"none"}` source (shared instance). */
|
|
96
|
+
function none() {
|
|
97
|
+
return { kind: "none" };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Resolve a param's completion source from `ParamSpec.complete` + its kind
|
|
101
|
+
* (the table in the module docblock).
|
|
102
|
+
*/
|
|
103
|
+
function resolveSource(param) {
|
|
104
|
+
const declared = param.complete;
|
|
105
|
+
if (declared === undefined) {
|
|
106
|
+
return param.kind === "enum"
|
|
107
|
+
? { kind: "values", values: param.values }
|
|
108
|
+
: none();
|
|
109
|
+
}
|
|
110
|
+
switch (declared.kind) {
|
|
111
|
+
case "values":
|
|
112
|
+
// The zod refinement makes {values} on a non-enum unregistrable; the
|
|
113
|
+
// model mirrors the rule structurally rather than trusting call order.
|
|
114
|
+
return param.kind === "enum"
|
|
115
|
+
? { kind: "values", values: param.values }
|
|
116
|
+
: none();
|
|
117
|
+
case "names":
|
|
118
|
+
// The per-family opt-out (`enabled:false`) collapses to no completion.
|
|
119
|
+
if (declared.enabled === false)
|
|
120
|
+
return none();
|
|
121
|
+
return {
|
|
122
|
+
kind: "names",
|
|
123
|
+
ref: declared.source,
|
|
124
|
+
match: declared.match ?? "substring",
|
|
125
|
+
caseSensitive: declared.caseSensitive ?? false,
|
|
126
|
+
};
|
|
127
|
+
case "files":
|
|
128
|
+
return { kind: "files" };
|
|
129
|
+
case "none":
|
|
130
|
+
return none();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/** Assert the safety of every token a source could inline statically. */
|
|
134
|
+
function assertSafeSource(source, where) {
|
|
135
|
+
if (source.kind === "values") {
|
|
136
|
+
for (const value of source.values) {
|
|
137
|
+
assertSafeToken(value, `${where} value`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (source.kind === "names" && source.ref.type && source.ref.type !== "") {
|
|
141
|
+
// The type key is never inlined into a script (only NAMES are, at runtime,
|
|
142
|
+
// through the same allowlist) — but keep any non-empty type well-formed
|
|
143
|
+
// anyway. An empty/absent type is the legitimate "any type" query (`graph
|
|
144
|
+
// inspect`), matched against every entity by the index reader.
|
|
145
|
+
assertSafeToken(source.ref.type, `${where} names type`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/** Project one verb spec into its completion entry, asserting name safety. */
|
|
149
|
+
function toVerbEntry(verb) {
|
|
150
|
+
const label = verbLabel(verb.path);
|
|
151
|
+
assertSafeToken(label, `verb "${verb.path.join(" ")}"`);
|
|
152
|
+
const flags = [];
|
|
153
|
+
const positionals = [];
|
|
154
|
+
for (const param of verb.params) {
|
|
155
|
+
const source = resolveSource(param);
|
|
156
|
+
if (param.positional) {
|
|
157
|
+
assertSafeSource(source, `positional "${param.name}"`);
|
|
158
|
+
positionals.push({
|
|
159
|
+
name: param.name,
|
|
160
|
+
required: param.required === true,
|
|
161
|
+
variadic: param.kind === "string[]",
|
|
162
|
+
source,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
const name = kebabCase(param.name);
|
|
167
|
+
assertSafeToken(name, `flag "--${name}"`);
|
|
168
|
+
assertSafeSource(source, `flag "--${name}"`);
|
|
169
|
+
flags.push({
|
|
170
|
+
flag: `--${name}`,
|
|
171
|
+
takesValue: param.kind !== "boolean",
|
|
172
|
+
// Two grammars accumulate, so two shapes are repeatable: a `string[]`
|
|
173
|
+
// flag (`--tag a --tag b`) and any `string`/`enum` param the spec
|
|
174
|
+
// marks `repeatable` — the form compiled packs give every declared
|
|
175
|
+
// filter. Reading only the kind de-offered a filter after its first
|
|
176
|
+
// use, hiding the repetition the parser had just started honouring.
|
|
177
|
+
repeatable: param.kind === "string[]" || param.repeatable === true,
|
|
178
|
+
source,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return { label, mutates: verb.capability.mutates, flags, positionals };
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Convert one module-declared completion node (a mounted subtree's static
|
|
186
|
+
* data) into a verb entry, asserting every inlinable token's safety exactly
|
|
187
|
+
* as spec-derived entries are asserted. `mutates` is the owning verb's
|
|
188
|
+
* mutability, applied only to the LEAVES (see the namespace note below).
|
|
189
|
+
*/
|
|
190
|
+
function toMountedEntry(spec, mutates, where) {
|
|
191
|
+
assertSafeToken(spec.label, `${where} label`);
|
|
192
|
+
const flags = spec.flags.map((flag) => {
|
|
193
|
+
const name = flag.flag.replace(/^--?/, "");
|
|
194
|
+
assertSafeToken(name, `${where} flag "${flag.flag}"`);
|
|
195
|
+
const source = flag.values
|
|
196
|
+
? { kind: "values", values: flag.values }
|
|
197
|
+
: none();
|
|
198
|
+
assertSafeSource(source, `${where} flag "${flag.flag}"`);
|
|
199
|
+
return {
|
|
200
|
+
flag: flag.flag,
|
|
201
|
+
takesValue: flag.takesValue,
|
|
202
|
+
repeatable: false,
|
|
203
|
+
source,
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
const positionals = spec.positionals.map((positional) => {
|
|
207
|
+
const source = positional.values
|
|
208
|
+
? { kind: "values", values: positional.values }
|
|
209
|
+
: positional.files
|
|
210
|
+
? { kind: "files" }
|
|
211
|
+
: none();
|
|
212
|
+
assertSafeSource(source, `${where} positional "${positional.name}"`);
|
|
213
|
+
return {
|
|
214
|
+
name: positional.name,
|
|
215
|
+
required: positional.required,
|
|
216
|
+
variadic: false,
|
|
217
|
+
source,
|
|
218
|
+
};
|
|
219
|
+
});
|
|
220
|
+
const children = spec.children && spec.children.length > 0
|
|
221
|
+
? spec.children.map((child) => toMountedEntry(child, mutates, `${where}/${child.label}`))
|
|
222
|
+
: undefined;
|
|
223
|
+
return {
|
|
224
|
+
label: spec.label,
|
|
225
|
+
// A node with children is a NAMESPACE, not a runnable command:
|
|
226
|
+
// `registerGeneratorCommands` adds the host mutation trio to runnable
|
|
227
|
+
// LEAVES only, so a mutating namespace would offer `--dry-run`/`--undo`/
|
|
228
|
+
// `--yes` BEFORE the framework segment — an ordering the CLI rejects as
|
|
229
|
+
// an unknown option. The verb's mutability descends to the leaves.
|
|
230
|
+
mutates: children ? false : mutates,
|
|
231
|
+
flags,
|
|
232
|
+
positionals,
|
|
233
|
+
...(children ? { children } : {}),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Derive the completion model from the capability modules.
|
|
238
|
+
*
|
|
239
|
+
* Hidden verbs are excluded (matching `emitSurface` and `buildProgram`).
|
|
240
|
+
* Every noun in the model comes from a declared verb — `mcp` used to be
|
|
241
|
+
* injected here because the bin served it without a spec, and it now declares
|
|
242
|
+
* `mcp serve` like any other pair.
|
|
243
|
+
*
|
|
244
|
+
* @param modules - The capability modules.
|
|
245
|
+
* @returns The completion model, nouns and verbs sorted.
|
|
246
|
+
* @throws Error when any inlined token fails the safety allowlist.
|
|
247
|
+
*/
|
|
248
|
+
export function buildCompletionModel(modules) {
|
|
249
|
+
const byNoun = new Map();
|
|
250
|
+
const bucketFor = (noun) => {
|
|
251
|
+
const existing = byNoun.get(noun);
|
|
252
|
+
if (existing)
|
|
253
|
+
return existing;
|
|
254
|
+
const created = { verbs: [] };
|
|
255
|
+
byNoun.set(noun, created);
|
|
256
|
+
return created;
|
|
257
|
+
};
|
|
258
|
+
for (const module of modules) {
|
|
259
|
+
// A module-owned mount REPLACES its verbs' completion surface: the flags
|
|
260
|
+
// the mounted tree actually registers (e.g. a default-on confirm's
|
|
261
|
+
// `--no-` form), the segment positionals, and the child walk — declared
|
|
262
|
+
// as static data by the module, converted and safety-asserted here.
|
|
263
|
+
const mountedChildren = module.cliProjection?.completionChildren();
|
|
264
|
+
for (const verb of module.verbs) {
|
|
265
|
+
if (verb.hidden)
|
|
266
|
+
continue;
|
|
267
|
+
const noun = verb.path[0];
|
|
268
|
+
assertSafeToken(noun, `noun "${noun}"`);
|
|
269
|
+
const bucket = bucketFor(noun);
|
|
270
|
+
const mountedSpec = mountedChildren?.[verbLabel(verb.path)];
|
|
271
|
+
const entry = mountedSpec
|
|
272
|
+
? toMountedEntry(mountedSpec, verb.capability.mutates, `mounted "${verb.path.join(" ")}"`)
|
|
273
|
+
: toVerbEntry(verb);
|
|
274
|
+
if (verb.path[1] === undefined) {
|
|
275
|
+
bucket.selfVerb = entry;
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
bucket.verbs.push(entry);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
const nouns = [...byNoun.entries()]
|
|
283
|
+
.map(([noun, bucket]) => ({
|
|
284
|
+
noun,
|
|
285
|
+
...(bucket.selfVerb ? { selfVerb: bucket.selfVerb } : {}),
|
|
286
|
+
verbs: [...bucket.verbs].sort((a, b) => a.label.localeCompare(b.label)),
|
|
287
|
+
}))
|
|
288
|
+
.sort((a, b) => a.noun.localeCompare(b.noun));
|
|
289
|
+
return { nouns, globalFlags: GLOBAL_FLAGS, mutationFlags: MUTATION_FLAGS };
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Look up a noun's entry in the model.
|
|
293
|
+
*
|
|
294
|
+
* @param model - The completion model.
|
|
295
|
+
* @param noun - The noun token.
|
|
296
|
+
* @returns The entry, or `undefined` for an unknown noun.
|
|
297
|
+
*/
|
|
298
|
+
export function findNoun(model, noun) {
|
|
299
|
+
return model.nouns.find((entry) => entry.noun === noun);
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../src/kernel/completion/model.ts"],"names":[],"mappings":"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"}
|