@canonical/pragma-cli 0.34.0 → 0.36.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/bundled-skills/add-standard/SKILL.md +338 -0
- package/bundled-skills/adoption-a1-styles/SKILL.md +269 -0
- package/bundled-skills/adoption-a2-components/SKILL.md +291 -0
- package/bundled-skills/adoption-a3-forms/SKILL.md +260 -0
- package/bundled-skills/anatomy-author/ANATOMY_DSL_SPEC.md +406 -0
- package/bundled-skills/anatomy-author/SKILL.md +1226 -0
- package/bundled-skills/design-auditor/SKILL.md +455 -0
- package/bundled-skills/implement-component/SKILL.md +333 -0
- package/bundled-skills/specify-component/SKILL.md +331 -0
- package/bundled-skills/specify-pattern/SKILL.md +292 -0
- package/dist/.build-ok +0 -0
- package/dist/package.json +84 -0
- package/dist/pragma.conf.js +1016 -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 +294 -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 +148 -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/harnessInventory.js +195 -0
- package/dist/src/capabilities/doctor/checks/harnessInventory.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 +349 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +164 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +49 -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 +86 -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 +72 -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 +57 -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 +172 -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 +390 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +329 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +253 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +594 -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 +271 -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 +387 -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 +328 -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/index.js +27 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +349 -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 +281 -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 +309 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +460 -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 +135 -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 +52 -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 +87 -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 +34 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/interactivity.js +68 -0
- package/dist/src/kernel/interactivity.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 +274 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +140 -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 +421 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +167 -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 +480 -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 +219 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +58 -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 +227 -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 +315 -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 +105 -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/vocabulary.js +174 -0
- package/dist/src/kernel/render/vocabulary.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 +22 -23
- package/pragma.conf.ts +486 -90
- package/src/bin.ts +274 -82
- package/src/capabilities/block.parity.test.ts +29 -12
- package/src/capabilities/block.shipped.exec.test.ts +282 -0
- package/src/capabilities/block.tierRank.exec.test.ts +300 -0
- 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 +24 -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.parity.test.ts +4 -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 +75 -8
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +76 -29
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +63 -17
- package/src/capabilities/doctor/checks/harnessInventory.test.ts +219 -0
- package/src/capabilities/doctor/checks/harnessInventory.ts +298 -0
- 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 +444 -0
- package/src/capabilities/doctor/doctor.render.test.ts +125 -38
- package/src/capabilities/doctor/doctor.render.ts +74 -74
- package/src/capabilities/doctor/doctor.test.ts +338 -37
- package/src/capabilities/doctor/doctor.verb.ts +8 -3
- package/src/capabilities/doctor/runChecks.ts +65 -63
- package/src/capabilities/doctor/types.ts +22 -15
- package/src/capabilities/emptyRecovery.test.ts +21 -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 +13 -5
- package/src/capabilities/info/info.render.ts +7 -3
- package/src/capabilities/info/info.test.ts +37 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/info/types.ts +10 -2
- 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/renderVocabularySync.test.ts +82 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -59
- package/src/capabilities/scopeTypeSync.test.ts +29 -15
- package/src/capabilities/setup/buildPlan.ts +240 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +79 -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 +478 -334
- package/src/capabilities/setup/operations/setupLsp.ts +420 -67
- package/src/capabilities/setup/operations/setupMcp.ts +238 -127
- package/src/capabilities/setup/operations/setupSkills.ts +667 -105
- package/src/capabilities/setup/plan.render.ts +336 -0
- package/src/capabilities/setup/plan.ts +241 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +297 -75
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +1819 -225
- package/src/capabilities/setup/setup.verb.ts +288 -78
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- package/src/capabilities/setup/targets.ts +435 -0
- package/src/capabilities/setup/types.ts +23 -70
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +43 -0
- package/src/capabilities/shared/packageManager.test.ts +470 -0
- package/src/capabilities/shared/packageManager.ts +425 -34
- package/src/capabilities/skill/bundledSkills.test.ts +347 -0
- package/src/capabilities/skill/discover.ts +131 -10
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +22 -7
- 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 +265 -10
- package/src/capabilities/sources/runUpdate.ts +131 -23
- package/src/capabilities/sources/sources.test.ts +382 -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 +4 -4
- package/src/capabilities/surface.test.ts +136 -19
- package/src/capabilities/upgrade/runUpgrade.ts +53 -14
- package/src/capabilities/upgrade/types.ts +10 -2
- package/src/capabilities/upgrade/upgrade.render.ts +13 -7
- package/src/capabilities/upgrade/upgrade.test.ts +75 -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 +36 -1
- package/src/identity.test.ts +57 -29
- 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 +16 -3
- 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 +50 -35
- 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 +27 -3
- 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 +35 -0
- package/src/kernel/interactivity.test.ts +76 -0
- package/src/kernel/interactivity.ts +69 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +222 -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 +25 -6
- package/src/kernel/packs/resolveEntity.test.ts +274 -0
- package/src/kernel/packs/resolveEntity.ts +200 -42
- package/src/kernel/packs/runBodies.ts +86 -22
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +78 -5
- package/src/kernel/packs/sparql/applyFilters.ts +136 -16
- package/src/kernel/packs/sparql/buildLookupQuery.test.ts +290 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +367 -17
- 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 +77 -4
- package/src/kernel/packs/types.ts +136 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +218 -12
- package/src/kernel/project/cli/buildProgram.ts +84 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +160 -2
- package/src/kernel/project/cli/dispatch.ts +226 -45
- 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 +134 -31
- package/src/kernel/project/cli/helpFormat.ts +14 -2
- package/src/kernel/project/cli/rootHelp.ts +74 -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 +55 -10
- 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 +59 -6
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/render/vocabulary.ts +276 -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 +277 -4
- package/src/testing/PARITY_GAPS.ts +9 -3
- package/src/testing/behavioral/docExamples.test.ts +16 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +112 -9
- 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.firstInstall.test.ts +7 -2
- 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 +10 -7
- 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/__snapshots__/eval.test.ts.snap +26 -1
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/eval/cases/readNouns.ts +245 -9
- package/src/testing/fixtures/blockGraph.ts +104 -10
- package/src/testing/fixtures/graph/canonical.ts +182 -13
- 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/capabilities/shared/bands.ts +0 -16
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -33,10 +33,9 @@ function moduleWith(overrides: Partial<VerbSpec>): CapabilityModule {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
describe("buildCompletionModel — structure", () => {
|
|
36
|
-
it("collects nouns sorted,
|
|
36
|
+
it("collects nouns sorted, from the declared verbs alone", () => {
|
|
37
37
|
expect(model.nouns.map((n) => n.noun)).toEqual([
|
|
38
38
|
"block",
|
|
39
|
-
"mcp",
|
|
40
39
|
"standard",
|
|
41
40
|
"status",
|
|
42
41
|
]);
|
|
@@ -62,17 +61,12 @@ describe("buildCompletionModel — structure", () => {
|
|
|
62
61
|
expect(status?.verbs).toEqual([]);
|
|
63
62
|
});
|
|
64
63
|
|
|
65
|
-
it("
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
flags: [],
|
|
71
|
-
positionals: [],
|
|
72
|
-
});
|
|
73
|
-
});
|
|
64
|
+
it("offers the mcp noun from its declared verb, with no self-verb", () => {
|
|
65
|
+
// The noun used to be conjured here because the bin served it without a
|
|
66
|
+
// spec; nothing is conjured now, so a module that declares no mcp verb
|
|
67
|
+
// gets no mcp noun.
|
|
68
|
+
expect(findNoun(model, "mcp")).toBeUndefined();
|
|
74
69
|
|
|
75
|
-
it("does not inject mcp when a live mcp noun exists", () => {
|
|
76
70
|
const withMcp = buildCompletionModel([
|
|
77
71
|
moduleWith({ path: ["mcp", "serve"] }),
|
|
78
72
|
]);
|
|
@@ -121,6 +115,38 @@ describe("buildCompletionModel — flags and sources", () => {
|
|
|
121
115
|
});
|
|
122
116
|
});
|
|
123
117
|
|
|
118
|
+
it("marks a spec-declared repeatable string/enum flag repeatable", () => {
|
|
119
|
+
// `string[]` is not the only accumulating shape: a compiled pack marks
|
|
120
|
+
// every declared filter `repeatable`, so `--category css --category git`
|
|
121
|
+
// is the union. Reading the kind alone de-offered the flag after its
|
|
122
|
+
// first use, which is exactly when repetition becomes offerable.
|
|
123
|
+
const repeatables = buildCompletionModel([
|
|
124
|
+
moduleWith({
|
|
125
|
+
params: [
|
|
126
|
+
{
|
|
127
|
+
kind: "enum",
|
|
128
|
+
name: "category",
|
|
129
|
+
doc: "Filter by category.",
|
|
130
|
+
values: ["css", "git"],
|
|
131
|
+
repeatable: true,
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
kind: "string",
|
|
135
|
+
name: "search",
|
|
136
|
+
doc: "Free text.",
|
|
137
|
+
repeatable: true,
|
|
138
|
+
},
|
|
139
|
+
{ kind: "string", name: "note", doc: "Once only." },
|
|
140
|
+
],
|
|
141
|
+
}),
|
|
142
|
+
]);
|
|
143
|
+
const thing = findNoun(repeatables, "thing")?.selfVerb;
|
|
144
|
+
const flagOf = (flag: string) => thing?.flags.find((f) => f.flag === flag);
|
|
145
|
+
expect(flagOf("--category")?.repeatable).toBe(true);
|
|
146
|
+
expect(flagOf("--search")?.repeatable).toBe(true);
|
|
147
|
+
expect(flagOf("--note")?.repeatable).toBe(false);
|
|
148
|
+
});
|
|
149
|
+
|
|
124
150
|
it("resolves name positionals with required/variadic markers", () => {
|
|
125
151
|
expect(get?.positionals).toEqual([
|
|
126
152
|
{
|
|
@@ -270,6 +296,11 @@ describe("buildCompletionModel — flags and sources", () => {
|
|
|
270
296
|
kind: "values",
|
|
271
297
|
values: ["summary", "standard", "detailed"],
|
|
272
298
|
});
|
|
299
|
+
// Every flag the global parser accepts is offered — a flag the surface
|
|
300
|
+
// advertises but completion omits is invisible at the TAB that would
|
|
301
|
+
// teach it.
|
|
302
|
+
expect(flags["--no-headers"]).toMatchObject({ takesValue: false });
|
|
303
|
+
expect(flags["--quiet"]).toMatchObject({ takesValue: false });
|
|
273
304
|
expect(flags["--llm"]).toBeUndefined();
|
|
274
305
|
expect(flags["--version"]?.rootOnly).toBe(true);
|
|
275
306
|
expect(flags["--help"]?.rootOnly).toBeUndefined();
|
|
@@ -350,6 +381,22 @@ function expectAgreement(
|
|
|
350
381
|
.filter((noun) => noun !== "mcp" || surfaceNouns.includes("mcp"));
|
|
351
382
|
expect(modelNouns).toEqual(surfaceNouns);
|
|
352
383
|
|
|
384
|
+
// A module-owned mount REPLACES its verbs' completion surface with the
|
|
385
|
+
// flags/positionals the mounted tree actually registers, so agreement for
|
|
386
|
+
// those verbs is asserted against the module's declared projection data —
|
|
387
|
+
// not the covenant-facing surface flags (which record binding param names).
|
|
388
|
+
const mountedByNoun = new Map<
|
|
389
|
+
string,
|
|
390
|
+
Readonly<Record<string, import("../spec/types.js").CompletionChildSpec>>
|
|
391
|
+
>();
|
|
392
|
+
for (const module of modules) {
|
|
393
|
+
if (!module.cliProjection) continue;
|
|
394
|
+
const children = module.cliProjection.completionChildren();
|
|
395
|
+
for (const verb of module.verbs) {
|
|
396
|
+
mountedByNoun.set(verb.path[0], children);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
353
400
|
for (const noun of surfaceNouns) {
|
|
354
401
|
const nounEntry = findNoun(completionModel, noun);
|
|
355
402
|
expect(nounEntry).toBeDefined();
|
|
@@ -362,6 +409,7 @@ function expectAgreement(
|
|
|
362
409
|
].sort();
|
|
363
410
|
expect(modelLabels).toEqual(surfaceVerbs.map((v) => v.v).sort());
|
|
364
411
|
|
|
412
|
+
const mounted = mountedByNoun.get(noun);
|
|
365
413
|
for (const surfaceVerb of surfaceVerbs) {
|
|
366
414
|
const modelVerb: VerbEntry | undefined =
|
|
367
415
|
nounEntry.selfVerb?.label === surfaceVerb.v
|
|
@@ -370,6 +418,26 @@ function expectAgreement(
|
|
|
370
418
|
expect(modelVerb).toBeDefined();
|
|
371
419
|
if (!modelVerb) continue;
|
|
372
420
|
|
|
421
|
+
const mountedSpec = mounted?.[surfaceVerb.v];
|
|
422
|
+
if (mountedSpec) {
|
|
423
|
+
expect(modelVerb.flags.map((f) => f.flag)).toEqual(
|
|
424
|
+
mountedSpec.flags.map((f) => f.flag),
|
|
425
|
+
);
|
|
426
|
+
expect(modelVerb.positionals.map((p) => p.name)).toEqual(
|
|
427
|
+
mountedSpec.positionals.map((p) => p.name),
|
|
428
|
+
);
|
|
429
|
+
expect((modelVerb.children ?? []).map((c) => c.label)).toEqual(
|
|
430
|
+
(mountedSpec.children ?? []).map((c) => c.label),
|
|
431
|
+
);
|
|
432
|
+
// A namespace node (children) never mutates for completion: the
|
|
433
|
+
// mounted tree registers the mutation trio on runnable leaves only.
|
|
434
|
+
const isNamespace = (mountedSpec.children ?? []).length > 0;
|
|
435
|
+
expect(modelVerb.mutates).toBe(
|
|
436
|
+
!isNamespace && surfaceVerb.mutates === true,
|
|
437
|
+
);
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
|
|
373
441
|
expect(modelVerb.flags.map((f) => f.flag)).toEqual(
|
|
374
442
|
surfaceVerb.flags ?? [],
|
|
375
443
|
);
|
|
@@ -393,6 +461,90 @@ describe("projection agreement with emitSurface (PROTECTED)", () => {
|
|
|
393
461
|
});
|
|
394
462
|
});
|
|
395
463
|
|
|
464
|
+
describe("mounted create completion — literal candidate pins (PROTECTED)", () => {
|
|
465
|
+
// The mounted-tree branch of the agreement describe compares the model to
|
|
466
|
+
// completionChildren() — the same call the model was BUILT from, so it can
|
|
467
|
+
// never catch that surface going wrong (a garbage projection satisfies
|
|
468
|
+
// it). These pins are the INDEPENDENT source: literal candidate sets
|
|
469
|
+
// through the real resolver, shellDrive noun-tier style — the segment
|
|
470
|
+
// descent (parse.ts children walk) and a leaf's registered flags.
|
|
471
|
+
|
|
472
|
+
it("segment tier: `create component <TAB>` offers exactly the framework segments", async () => {
|
|
473
|
+
const { runComplete } = await import("./complete.js");
|
|
474
|
+
expect(
|
|
475
|
+
await runComplete(["create", "component", ""], capabilities),
|
|
476
|
+
).toEqual(["lit", "react", "svelte"]);
|
|
477
|
+
expect(
|
|
478
|
+
await runComplete(["create", "application", ""], capabilities),
|
|
479
|
+
).toEqual(["react"]);
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
it("namespace flag tier: `create component --<TAB>` offers NO leaf prompt or mutation flags", async () => {
|
|
483
|
+
const { runComplete } = await import("./complete.js");
|
|
484
|
+
// Prompt AND mutation flags are registered on the LEAVES; a pre-segment
|
|
485
|
+
// offer completes orderings Commander rejects (`create component
|
|
486
|
+
// --use-ts-stories svelte` and `create component --dry-run react` both
|
|
487
|
+
// exit 2 as unknown options). Until a framework segment is typed, only
|
|
488
|
+
// the global tier is offered.
|
|
489
|
+
expect(
|
|
490
|
+
await runComplete(["create", "component", "--"], capabilities),
|
|
491
|
+
).toEqual([
|
|
492
|
+
"--detail",
|
|
493
|
+
"--format",
|
|
494
|
+
"--help",
|
|
495
|
+
"--no-headers",
|
|
496
|
+
"--quiet",
|
|
497
|
+
"--verbose",
|
|
498
|
+
]);
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
it("leaf flag tier: `create component react --<TAB>` offers the REGISTERED flags", async () => {
|
|
502
|
+
const { runComplete } = await import("./complete.js");
|
|
503
|
+
// The leaf's prompt-derived flags in their registered spelling (--no-
|
|
504
|
+
// forms for default-true confirms, --component-path for the positional
|
|
505
|
+
// prompt — addPromptOptions registers EVERY prompt as an option), the
|
|
506
|
+
// mutation trio, and the root globals — as literals, so dropping the
|
|
507
|
+
// framework positional's values or a leaf prompt flag goes red instead
|
|
508
|
+
// of silently green.
|
|
509
|
+
expect(
|
|
510
|
+
await runComplete(["create", "component", "react", "--"], capabilities),
|
|
511
|
+
).toEqual([
|
|
512
|
+
"--component-path",
|
|
513
|
+
"--detail",
|
|
514
|
+
"--dry-run",
|
|
515
|
+
"--format",
|
|
516
|
+
"--help",
|
|
517
|
+
"--no-headers",
|
|
518
|
+
"--no-with-ssr-tests",
|
|
519
|
+
"--no-with-stories",
|
|
520
|
+
"--no-with-styles",
|
|
521
|
+
"--quiet",
|
|
522
|
+
"--undo",
|
|
523
|
+
"--verbose",
|
|
524
|
+
"--yes",
|
|
525
|
+
]);
|
|
526
|
+
// Svelte's leaf carries its own extra flag — per-leaf, not unioned.
|
|
527
|
+
expect(
|
|
528
|
+
await runComplete(["create", "component", "svelte", "--"], capabilities),
|
|
529
|
+
).toEqual([
|
|
530
|
+
"--component-path",
|
|
531
|
+
"--detail",
|
|
532
|
+
"--dry-run",
|
|
533
|
+
"--format",
|
|
534
|
+
"--help",
|
|
535
|
+
"--no-headers",
|
|
536
|
+
"--no-with-ssr-tests",
|
|
537
|
+
"--no-with-stories",
|
|
538
|
+
"--no-with-styles",
|
|
539
|
+
"--quiet",
|
|
540
|
+
"--undo",
|
|
541
|
+
"--use-ts-stories",
|
|
542
|
+
"--verbose",
|
|
543
|
+
"--yes",
|
|
544
|
+
]);
|
|
545
|
+
});
|
|
546
|
+
});
|
|
547
|
+
|
|
396
548
|
/** Regression pin: ParamSpec.complete stays optional on every param kind. */
|
|
397
549
|
it("accepts params without a complete field", () => {
|
|
398
550
|
const params: ParamSpec[] = [
|
|
@@ -25,8 +25,13 @@
|
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
27
|
import { DETAIL_LEVELS, OUTPUT_FORMATS } from "../../constants.js";
|
|
28
|
-
import { kebabCase, verbLabel } from "../spec/
|
|
29
|
-
import type {
|
|
28
|
+
import { kebabCase, verbLabel } from "../spec/index.js";
|
|
29
|
+
import type {
|
|
30
|
+
CapabilityModule,
|
|
31
|
+
CompletionChildSpec,
|
|
32
|
+
ParamSpec,
|
|
33
|
+
VerbSpec,
|
|
34
|
+
} from "../spec/types.js";
|
|
30
35
|
import type {
|
|
31
36
|
CompletionModel,
|
|
32
37
|
CompletionSource,
|
|
@@ -85,6 +90,13 @@ const GLOBAL_FLAGS: readonly FlagEntry[] = [
|
|
|
85
90
|
repeatable: false,
|
|
86
91
|
source: { kind: "values", values: DETAIL_LEVELS },
|
|
87
92
|
},
|
|
93
|
+
{
|
|
94
|
+
flag: "--no-headers",
|
|
95
|
+
takesValue: false,
|
|
96
|
+
repeatable: false,
|
|
97
|
+
source: none(),
|
|
98
|
+
},
|
|
99
|
+
{ flag: "--quiet", takesValue: false, repeatable: false, source: none() },
|
|
88
100
|
{ flag: "--help", takesValue: false, repeatable: false, source: none() },
|
|
89
101
|
{
|
|
90
102
|
flag: "--version",
|
|
@@ -181,7 +193,12 @@ function toVerbEntry(verb: VerbSpec): VerbEntry {
|
|
|
181
193
|
flags.push({
|
|
182
194
|
flag: `--${name}`,
|
|
183
195
|
takesValue: param.kind !== "boolean",
|
|
184
|
-
repeatable:
|
|
196
|
+
// Two grammars accumulate, so two shapes are repeatable: a `string[]`
|
|
197
|
+
// flag (`--tag a --tag b`) and any `string`/`enum` param the spec
|
|
198
|
+
// marks `repeatable` — the form compiled packs give every declared
|
|
199
|
+
// filter. Reading only the kind de-offered a filter after its first
|
|
200
|
+
// use, hiding the repetition the parser had just started honouring.
|
|
201
|
+
repeatable: param.kind === "string[]" || param.repeatable === true,
|
|
185
202
|
source,
|
|
186
203
|
});
|
|
187
204
|
}
|
|
@@ -190,18 +207,73 @@ function toVerbEntry(verb: VerbSpec): VerbEntry {
|
|
|
190
207
|
return { label, mutates: verb.capability.mutates, flags, positionals };
|
|
191
208
|
}
|
|
192
209
|
|
|
193
|
-
/**
|
|
194
|
-
|
|
195
|
-
|
|
210
|
+
/**
|
|
211
|
+
* Convert one module-declared completion node (a mounted subtree's static
|
|
212
|
+
* data) into a verb entry, asserting every inlinable token's safety exactly
|
|
213
|
+
* as spec-derived entries are asserted. `mutates` is the owning verb's
|
|
214
|
+
* mutability, applied only to the LEAVES (see the namespace note below).
|
|
215
|
+
*/
|
|
216
|
+
function toMountedEntry(
|
|
217
|
+
spec: CompletionChildSpec,
|
|
218
|
+
mutates: boolean,
|
|
219
|
+
where: string,
|
|
220
|
+
): VerbEntry {
|
|
221
|
+
assertSafeToken(spec.label, `${where} label`);
|
|
222
|
+
const flags: FlagEntry[] = spec.flags.map((flag) => {
|
|
223
|
+
const name = flag.flag.replace(/^--?/, "");
|
|
224
|
+
assertSafeToken(name, `${where} flag "${flag.flag}"`);
|
|
225
|
+
const source: CompletionSource = flag.values
|
|
226
|
+
? { kind: "values", values: flag.values }
|
|
227
|
+
: none();
|
|
228
|
+
assertSafeSource(source, `${where} flag "${flag.flag}"`);
|
|
229
|
+
return {
|
|
230
|
+
flag: flag.flag,
|
|
231
|
+
takesValue: flag.takesValue,
|
|
232
|
+
repeatable: false,
|
|
233
|
+
source,
|
|
234
|
+
};
|
|
235
|
+
});
|
|
236
|
+
const positionals: PositionalEntry[] = spec.positionals.map((positional) => {
|
|
237
|
+
const source: CompletionSource = positional.values
|
|
238
|
+
? { kind: "values", values: positional.values }
|
|
239
|
+
: positional.files
|
|
240
|
+
? { kind: "files" }
|
|
241
|
+
: none();
|
|
242
|
+
assertSafeSource(source, `${where} positional "${positional.name}"`);
|
|
243
|
+
return {
|
|
244
|
+
name: positional.name,
|
|
245
|
+
required: positional.required,
|
|
246
|
+
variadic: false,
|
|
247
|
+
source,
|
|
248
|
+
};
|
|
249
|
+
});
|
|
250
|
+
const children =
|
|
251
|
+
spec.children && spec.children.length > 0
|
|
252
|
+
? spec.children.map((child) =>
|
|
253
|
+
toMountedEntry(child, mutates, `${where}/${child.label}`),
|
|
254
|
+
)
|
|
255
|
+
: undefined;
|
|
256
|
+
return {
|
|
257
|
+
label: spec.label,
|
|
258
|
+
// A node with children is a NAMESPACE, not a runnable command:
|
|
259
|
+
// `registerGeneratorCommands` adds the host mutation trio to runnable
|
|
260
|
+
// LEAVES only, so a mutating namespace would offer `--dry-run`/`--undo`/
|
|
261
|
+
// `--yes` BEFORE the framework segment — an ordering the CLI rejects as
|
|
262
|
+
// an unknown option. The verb's mutability descends to the leaves.
|
|
263
|
+
mutates: children ? false : mutates,
|
|
264
|
+
flags,
|
|
265
|
+
positionals,
|
|
266
|
+
...(children ? { children } : {}),
|
|
267
|
+
};
|
|
196
268
|
}
|
|
197
269
|
|
|
198
270
|
/**
|
|
199
271
|
* Derive the completion model from the capability modules.
|
|
200
272
|
*
|
|
201
273
|
* Hidden verbs are excluded (matching `emitSurface` and `buildProgram`).
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
274
|
+
* Every noun in the model comes from a declared verb — `mcp` used to be
|
|
275
|
+
* injected here because the bin served it without a spec, and it now declares
|
|
276
|
+
* `mcp serve` like any other pair.
|
|
205
277
|
*
|
|
206
278
|
* @param modules - The capability modules.
|
|
207
279
|
* @returns The completion model, nouns and verbs sorted.
|
|
@@ -225,12 +297,24 @@ export function buildCompletionModel(
|
|
|
225
297
|
};
|
|
226
298
|
|
|
227
299
|
for (const module of modules) {
|
|
300
|
+
// A module-owned mount REPLACES its verbs' completion surface: the flags
|
|
301
|
+
// the mounted tree actually registers (e.g. a default-on confirm's
|
|
302
|
+
// `--no-` form), the segment positionals, and the child walk — declared
|
|
303
|
+
// as static data by the module, converted and safety-asserted here.
|
|
304
|
+
const mountedChildren = module.cliProjection?.completionChildren();
|
|
228
305
|
for (const verb of module.verbs) {
|
|
229
306
|
if (verb.hidden) continue;
|
|
230
307
|
const noun = verb.path[0];
|
|
231
308
|
assertSafeToken(noun, `noun "${noun}"`);
|
|
232
309
|
const bucket = bucketFor(noun);
|
|
233
|
-
const
|
|
310
|
+
const mountedSpec = mountedChildren?.[verbLabel(verb.path)];
|
|
311
|
+
const entry = mountedSpec
|
|
312
|
+
? toMountedEntry(
|
|
313
|
+
mountedSpec,
|
|
314
|
+
verb.capability.mutates,
|
|
315
|
+
`mounted "${verb.path.join(" ")}"`,
|
|
316
|
+
)
|
|
317
|
+
: toVerbEntry(verb);
|
|
234
318
|
if (verb.path[1] === undefined) {
|
|
235
319
|
bucket.selfVerb = entry;
|
|
236
320
|
} else {
|
|
@@ -239,10 +323,6 @@ export function buildCompletionModel(
|
|
|
239
323
|
}
|
|
240
324
|
}
|
|
241
325
|
|
|
242
|
-
if (!byNoun.has("mcp")) {
|
|
243
|
-
byNoun.set("mcp", { selfVerb: bareSelfVerb("mcp"), verbs: [] });
|
|
244
|
-
}
|
|
245
|
-
|
|
246
326
|
const nouns: NounEntry[] = [...byNoun.entries()]
|
|
247
327
|
.map(([noun, bucket]) => ({
|
|
248
328
|
noun,
|
|
@@ -86,6 +86,8 @@ describe("parseWords — flag names (PROTECTED)", () => {
|
|
|
86
86
|
"--format",
|
|
87
87
|
"--verbose",
|
|
88
88
|
"--detail",
|
|
89
|
+
"--no-headers",
|
|
90
|
+
"--quiet",
|
|
89
91
|
"--help",
|
|
90
92
|
"--version",
|
|
91
93
|
]);
|
|
@@ -107,6 +109,8 @@ describe("parseWords — flag names (PROTECTED)", () => {
|
|
|
107
109
|
"--format",
|
|
108
110
|
"--verbose",
|
|
109
111
|
"--detail",
|
|
112
|
+
"--no-headers",
|
|
113
|
+
"--quiet",
|
|
110
114
|
"--help",
|
|
111
115
|
]);
|
|
112
116
|
});
|
|
@@ -326,11 +330,4 @@ describe("parseWords — self-verb nouns (PROTECTED)", () => {
|
|
|
326
330
|
reason: "positionals exhausted",
|
|
327
331
|
});
|
|
328
332
|
});
|
|
329
|
-
|
|
330
|
-
it("the injected mcp noun completes but offers nothing after", () => {
|
|
331
|
-
expect(parse(["mcp", ""]).context).toEqual({
|
|
332
|
-
kind: "nothing",
|
|
333
|
-
reason: "positionals exhausted",
|
|
334
|
-
});
|
|
335
|
-
});
|
|
336
333
|
});
|
|
@@ -137,6 +137,21 @@ function scanCommandWord(
|
|
|
137
137
|
return;
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
+
// A verb with segment children (a mounted subtree): the word resolves
|
|
141
|
+
// against the children BEFORE positional counting — a match descends, so
|
|
142
|
+
// deeper flags/positionals are the child's own; a non-match is terminal.
|
|
143
|
+
const resolved = knownVerb(state);
|
|
144
|
+
if (resolved?.children && resolved.children.length > 0) {
|
|
145
|
+
const child = resolved.children.find((entry) => entry.label === word);
|
|
146
|
+
if (child) {
|
|
147
|
+
state.verb = child;
|
|
148
|
+
state.positionalsSeen = 0;
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
state.verb = "unknown";
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
140
155
|
state.positionalsSeen += 1;
|
|
141
156
|
}
|
|
142
157
|
|
|
@@ -319,7 +319,7 @@ describe("storeless guarantee (PROTECTED)", () => {
|
|
|
319
319
|
|
|
320
320
|
// prefixes: `ds` is in the default display map, so it comes back for `d`.
|
|
321
321
|
await expect(
|
|
322
|
-
runComplete(["ontology", "
|
|
322
|
+
runComplete(["ontology", "lookup", "d"], capabilities, env),
|
|
323
323
|
).resolves.toContain("ds");
|
|
324
324
|
|
|
325
325
|
// index (derived, no field): the tier lookup is a declared pack lookup
|
|
@@ -331,28 +331,35 @@ describe("storeless guarantee (PROTECTED)", () => {
|
|
|
331
331
|
runComplete(["tier", "lookup", "ap"], capabilities, env),
|
|
332
332
|
).resolves.toContain("ds:apps");
|
|
333
333
|
|
|
334
|
-
// skills
|
|
335
|
-
//
|
|
336
|
-
// is
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
334
|
+
// skills: the BUNDLED snapshot ships inside the package, so even this
|
|
335
|
+
// fresh cwd with an empty XDG data home completes REAL skill names — and
|
|
336
|
+
// does it storelessly, which is the whole point of the cell. (It used to
|
|
337
|
+
// assert `[]` here, which was true only because a fresh machine had no
|
|
338
|
+
// skills at all; that is the defect the snapshot fixes.) The names are not
|
|
339
|
+
// spelled out: an empty prefix asks for all of them.
|
|
340
|
+
await expect(
|
|
341
|
+
runComplete(["skill", "lookup", ""], capabilities, env),
|
|
342
|
+
).resolves.not.toHaveLength(0);
|
|
343
|
+
|
|
344
|
+
// prompt labels: this graph carries no prompt entities and no shipped skill
|
|
345
|
+
// declares `prompt: true`, so the honest storeless answer is still an empty
|
|
346
|
+
// list rather than a store boot.
|
|
347
|
+
await expect(
|
|
348
|
+
runComplete(["prompt", "lookup", "bu"], capabilities, env),
|
|
349
|
+
).resolves.toEqual([]);
|
|
343
350
|
|
|
344
351
|
expect(vi.mocked(createStore)).not.toHaveBeenCalled();
|
|
345
352
|
});
|
|
346
353
|
|
|
347
354
|
it("the spawned __complete fast path answers without touching any state", () => {
|
|
348
|
-
// The perf globalSetup guarantees dist
|
|
355
|
+
// The perf globalSetup guarantees the emitted `dist/` exists.
|
|
349
356
|
// A FRESH INSTALL, reproduced: nothing is inherited from this process's
|
|
350
357
|
// environment, the cwd holds no config, and $HOME plus all three XDG roots
|
|
351
|
-
// are empty temps. Anything the
|
|
358
|
+
// are empty temps. Anything the entry answers here it answered from
|
|
352
359
|
// itself. (The suite before this inherited `...process.env`, so it could
|
|
353
360
|
// not tell a compiled-in answer from an ambient one.)
|
|
354
|
-
const
|
|
355
|
-
new URL("../../../dist/
|
|
361
|
+
const entry = fileURLToPath(
|
|
362
|
+
new URL("../../../dist/src/bin.js", import.meta.url),
|
|
356
363
|
);
|
|
357
364
|
const home = mkdtempSync(join(tmpdir(), "pragma-storeless-home-"));
|
|
358
365
|
const xdgConfig = mkdtempSync(join(tmpdir(), "pragma-storeless-cfg-"));
|
|
@@ -366,23 +373,27 @@ describe("storeless guarantee (PROTECTED)", () => {
|
|
|
366
373
|
XDG_CACHE_HOME: xdgCache,
|
|
367
374
|
};
|
|
368
375
|
|
|
369
|
-
const nouns = spawnSync(
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
376
|
+
const nouns = spawnSync(
|
|
377
|
+
process.execPath,
|
|
378
|
+
[entry, "__complete", "--", "co"],
|
|
379
|
+
{
|
|
380
|
+
encoding: "utf-8",
|
|
381
|
+
cwd: emptyCwd,
|
|
382
|
+
env,
|
|
383
|
+
},
|
|
384
|
+
);
|
|
374
385
|
expect(nouns.status).toBe(0);
|
|
375
|
-
expect(nouns.stdout).toBe("colophon\nconfig\n");
|
|
386
|
+
expect(nouns.stdout).toBe("colophon\nconcept\nconfig\n");
|
|
376
387
|
expect(nouns.stderr).toBe("");
|
|
377
388
|
|
|
378
389
|
// The headline guarantee of the embedded pack: a user who has installed
|
|
379
|
-
// the
|
|
380
|
-
// Every other pin on the embedded index runs in-process, where
|
|
381
|
-
// change that made `pack.index.generated.ts` unreachable FROM THE
|
|
382
|
-
// would leave the whole suite green.
|
|
390
|
+
// the shipped entry and nothing else gets ENTITY candidates on the first TAB.
|
|
391
|
+
// Every other pin on the embedded index runs in-process, where an emit
|
|
392
|
+
// change that made `pack.index.generated.ts` unreachable FROM THE SHIPPED
|
|
393
|
+
// ENTRY would leave the whole suite green.
|
|
383
394
|
const entities = spawnSync(
|
|
384
|
-
|
|
385
|
-
["__complete", "--", "block", "lookup", "ds:global.component.but"],
|
|
395
|
+
process.execPath,
|
|
396
|
+
[entry, "__complete", "--", "block", "lookup", "ds:global.component.but"],
|
|
386
397
|
{ encoding: "utf-8", cwd: emptyCwd, env },
|
|
387
398
|
);
|
|
388
399
|
expect(entities.status).toBe(0);
|
|
@@ -402,17 +413,21 @@ describe("storeless guarantee (PROTECTED)", () => {
|
|
|
402
413
|
});
|
|
403
414
|
|
|
404
415
|
it("the spawned fast path emits zero bytes for zero candidates, exit 0", () => {
|
|
405
|
-
const
|
|
406
|
-
new URL("../../../dist/
|
|
416
|
+
const entry = fileURLToPath(
|
|
417
|
+
new URL("../../../dist/src/bin.js", import.meta.url),
|
|
407
418
|
);
|
|
408
|
-
const result = spawnSync(
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
419
|
+
const result = spawnSync(
|
|
420
|
+
process.execPath,
|
|
421
|
+
[entry, "__complete", "--", "bogus", ""],
|
|
422
|
+
{
|
|
423
|
+
encoding: "utf-8",
|
|
424
|
+
env: {
|
|
425
|
+
...process.env,
|
|
426
|
+
XDG_CONFIG_HOME: mkdtempSync(join(tmpdir(), "pragma-zb-cfg-")),
|
|
427
|
+
XDG_STATE_HOME: mkdtempSync(join(tmpdir(), "pragma-zb-state-")),
|
|
428
|
+
},
|
|
414
429
|
},
|
|
415
|
-
|
|
430
|
+
);
|
|
416
431
|
expect(result.status).toBe(0);
|
|
417
432
|
expect(result.stdout).toBe("");
|
|
418
433
|
expect(result.stderr).toBe("");
|