@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
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
* Data shapes for `pragma config show`.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
ConfigOrigin,
|
|
7
|
+
ConfigOrigins,
|
|
8
|
+
PragmaConfig,
|
|
9
|
+
} from "../../kernel/config/types.js";
|
|
6
10
|
|
|
7
11
|
/** The resolved configuration plus per-field provenance and layer locations. */
|
|
8
12
|
export interface ConfigShowData {
|
|
@@ -22,14 +26,24 @@ export interface ConfigShowData {
|
|
|
22
26
|
readonly globalExists: boolean;
|
|
23
27
|
}
|
|
24
28
|
|
|
25
|
-
/** The outcome of a
|
|
29
|
+
/** The outcome of a config write (`set` writes a value, `unset` clears one). */
|
|
26
30
|
export interface ConfigFieldResult {
|
|
27
31
|
/** The config field written (`tier` / `channel` / `detail`). */
|
|
28
32
|
readonly field: string;
|
|
29
|
-
/** The value written, or absent when the field was
|
|
33
|
+
/** The value written, or absent when the field was cleared (removed). */
|
|
30
34
|
readonly value?: string;
|
|
31
35
|
/** The global config file the write landed in. */
|
|
32
36
|
readonly path: string;
|
|
33
|
-
/** True when
|
|
37
|
+
/** True when `unset` removed the field rather than setting a value. */
|
|
34
38
|
readonly reset: boolean;
|
|
35
39
|
}
|
|
40
|
+
|
|
41
|
+
/** The payload of `config get <key>` — one resolved value with provenance. */
|
|
42
|
+
export interface ConfigGetData {
|
|
43
|
+
/** The config field read (`tier` / `channel` / `detail`). */
|
|
44
|
+
readonly field: string;
|
|
45
|
+
/** The effective value after layering, absent when the field is unset. */
|
|
46
|
+
readonly value?: unknown;
|
|
47
|
+
/** The layer that supplied the value (`default` / `global` / `project`). */
|
|
48
|
+
readonly source: ConfigOrigin;
|
|
49
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `config unset <key>` — clear one config field.
|
|
3
|
+
*
|
|
4
|
+
* Clearing is a COMMAND, not a magic value: `config set` refuses the values
|
|
5
|
+
* that used to double as clear-markers, and this verb owns the job. Removes
|
|
6
|
+
* the field from the global layer so the built-in default (or a project
|
|
7
|
+
* config) applies again; project configs are authored by hand and never
|
|
8
|
+
* written here.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { Task } from "@canonical/task";
|
|
12
|
+
import { BIN_NAME } from "../../constants.js";
|
|
13
|
+
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
14
|
+
import type { VerbSpec } from "../../kernel/spec/index.js";
|
|
15
|
+
import { configFieldFormatters } from "./field.render.js";
|
|
16
|
+
import { CONFIG_FIELDS } from "./fields.js";
|
|
17
|
+
import type { ConfigFieldResult } from "./types.js";
|
|
18
|
+
|
|
19
|
+
/** The clearable field names — the `<key>` enum, in covenant order. */
|
|
20
|
+
const CONFIG_KEYS = CONFIG_FIELDS.map((field) => field.field);
|
|
21
|
+
|
|
22
|
+
const unsetVerb: VerbSpec<Record<string, unknown>, ConfigFieldResult> = {
|
|
23
|
+
path: ["config", "unset"],
|
|
24
|
+
summary: "Clear a config field by name.",
|
|
25
|
+
doc: "Removes a field from the global config so the built-in default (or a project config) applies again. The counterpart of `config set` — setting writes a value, unsetting removes one; no value doubles as a remove-marker.",
|
|
26
|
+
params: [
|
|
27
|
+
{
|
|
28
|
+
kind: "enum",
|
|
29
|
+
name: "key",
|
|
30
|
+
doc: "The config field to clear.",
|
|
31
|
+
values: CONFIG_KEYS,
|
|
32
|
+
required: true,
|
|
33
|
+
positional: true,
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
output: { formatters: configFieldFormatters },
|
|
37
|
+
examples: [
|
|
38
|
+
{ cmd: `${BIN_NAME} config unset tier`, note: "read the full graph again" },
|
|
39
|
+
{ cmd: `${BIN_NAME} config unset channel` },
|
|
40
|
+
],
|
|
41
|
+
capability: {
|
|
42
|
+
needsStore: false,
|
|
43
|
+
mutates: true,
|
|
44
|
+
mcp: {
|
|
45
|
+
expose: true,
|
|
46
|
+
annotations: { readOnlyHint: false, openWorldHint: false },
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
// Lazily import the write body (off the fast path); the `Task` arm is the
|
|
50
|
+
// same honest cast `config set` uses.
|
|
51
|
+
run: (params) =>
|
|
52
|
+
import("./runSet.js").then((m) =>
|
|
53
|
+
m.runUnset(params),
|
|
54
|
+
) as unknown as Task<ConfigFieldResult>,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/** The `config unset` verb. */
|
|
58
|
+
export const configUnsetVerb = asVerb(unsetVerb);
|
|
@@ -48,9 +48,8 @@ describe("cross-binary byte-equality (PROTECTED)", () => {
|
|
|
48
48
|
pragmaBin,
|
|
49
49
|
"create",
|
|
50
50
|
"component",
|
|
51
|
-
"src/components/Button",
|
|
52
|
-
"--framework",
|
|
53
51
|
"react",
|
|
52
|
+
"src/components/Button",
|
|
54
53
|
"--yes",
|
|
55
54
|
],
|
|
56
55
|
{ cwd: pragmaDir, stdio: "pipe" },
|
|
@@ -66,7 +65,7 @@ import { pickGenerator } from ${JSON.stringify(`file://${pickGen}`)};
|
|
|
66
65
|
import { execute, autoPrompt, runGeneratorTask, createGeneratorStamp, createStampOnEffectStart } from ${JSON.stringify(`file://${summonCore}`)};
|
|
67
66
|
const dir = process.argv[2];
|
|
68
67
|
const answers = { componentPath: "src/components/Button", withStyles: true, withStories: true, withSsrTests: true };
|
|
69
|
-
const gen = pickGenerator("component
|
|
68
|
+
const gen = pickGenerator("component/react");
|
|
70
69
|
await runGeneratorTask(execute(gen, { prompt: autoPrompt(answers), params: answers }), {
|
|
71
70
|
cwd: dir,
|
|
72
71
|
promptHandler: autoPrompt(answers),
|
|
@@ -36,6 +36,7 @@ import { executeVerb } from "../../kernel/project/cli/dispatch.js";
|
|
|
36
36
|
import { bootRuntime } from "../../kernel/runtime/boot.js";
|
|
37
37
|
import type { GlobalFlags } from "../../kernel/runtime/types.js";
|
|
38
38
|
import type { VerbSpec } from "../../kernel/spec/types.js";
|
|
39
|
+
import { blankCanonicalRanges } from "../../testing/helpers/blankCanonicalRanges.js";
|
|
39
40
|
import { createVerbs } from "./create.verb.js";
|
|
40
41
|
import type { CreateKind } from "./types.js";
|
|
41
42
|
|
|
@@ -82,8 +83,16 @@ async function produceSummon(
|
|
|
82
83
|
answers: Readonly<Record<string, unknown>>,
|
|
83
84
|
): Promise<TreeSnapshot> {
|
|
84
85
|
const { pickGenerator } = await import("./pickGenerator.js");
|
|
86
|
+
// pickGenerator is keyed by FULL COMMAND PATH now; this surface still
|
|
87
|
+
// thinks in kind+framework, so map first (exactly as runCreate does).
|
|
88
|
+
const commandPath =
|
|
89
|
+
kind === "component"
|
|
90
|
+
? `component/${framework}`
|
|
91
|
+
: kind === "package"
|
|
92
|
+
? "package"
|
|
93
|
+
: "application/react";
|
|
85
94
|
return produceReference({
|
|
86
|
-
generator: pickGenerator(
|
|
95
|
+
generator: pickGenerator(commandPath),
|
|
87
96
|
answers,
|
|
88
97
|
});
|
|
89
98
|
}
|
|
@@ -156,16 +165,13 @@ const cases: Case[] = [
|
|
|
156
165
|
fixture: "application",
|
|
157
166
|
kind: "application",
|
|
158
167
|
framework: "",
|
|
159
|
-
// The
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
// which is exactly what this case exists to prove.
|
|
168
|
+
// The prompt names ARE the param names now (the B8 alias seam is gone):
|
|
169
|
+
// the pragma path takes the generator's own `forms`/`relay` (ssr/router
|
|
170
|
+
// are always-on facts, no longer prompts).
|
|
163
171
|
params: {
|
|
164
172
|
appPath: "my-app",
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
withForms: true,
|
|
168
|
-
withRelay: false,
|
|
173
|
+
forms: true,
|
|
174
|
+
relay: false,
|
|
169
175
|
runInstall: false,
|
|
170
176
|
},
|
|
171
177
|
},
|
|
@@ -186,12 +192,20 @@ describe("byte-equality goldens — pragma create \u2261 the conformance referen
|
|
|
186
192
|
(entry) => entry.name === testCase.fixture,
|
|
187
193
|
);
|
|
188
194
|
if (!shared) throw new Error(`no fixture "${testCase.fixture}"`);
|
|
189
|
-
|
|
190
|
-
|
|
195
|
+
let pragma = await producePragma(testCase.kind, testCase.params);
|
|
196
|
+
let reference = await produceSummon(
|
|
191
197
|
testCase.kind,
|
|
192
198
|
testCase.framework,
|
|
193
199
|
shared.answers,
|
|
194
200
|
);
|
|
201
|
+
// Two independent `npm view` resolutions feed the application tree
|
|
202
|
+
// (one per producer); blank the @canonical/* ranges identically so an
|
|
203
|
+
// asymmetric registry outcome cannot red this template-surface cell —
|
|
204
|
+
// range truth lives in the offline subprocess cells.
|
|
205
|
+
if (testCase.kind === "application") {
|
|
206
|
+
pragma = blankCanonicalRanges(pragma);
|
|
207
|
+
reference = blankCanonicalRanges(reference);
|
|
208
|
+
}
|
|
195
209
|
expect(pragma.size).toBeGreaterThan(0);
|
|
196
210
|
const diff = diffTrees(pragma, reference);
|
|
197
211
|
expect(
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `create` module's CLI projection hook — the LIGHT half of the mount.
|
|
3
|
+
*
|
|
4
|
+
* This module is on the capabilities barrel, so `--help` and `__complete`
|
|
5
|
+
* import it on every spawn; it must therefore carry only what those paths
|
|
6
|
+
* actually read: the completion surface and the reference syntax, both
|
|
7
|
+
* derived from the build-time projection (`createSurface.generated.ts`) —
|
|
8
|
+
* the registered flag/positional spellings are BAKED there
|
|
9
|
+
* (`CREATE_CLI_SYNTAX`), so nothing here calls the projection to re-derive a
|
|
10
|
+
* token. The registration machinery itself — summon-core's Commander adapter,
|
|
11
|
+
* the interaction decisions, Commander — lives in `mount.ts` behind the
|
|
12
|
+
* dynamic import `prepare()` performs, which only a caller about to build the
|
|
13
|
+
* command tree ever awaits. The lazy-graph guard in `lazy.test.ts` pins this
|
|
14
|
+
* boundary.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import type { ProjectedPrompt } from "@canonical/summon-core/projection";
|
|
18
|
+
import { BIN_NAME } from "../../constants.js";
|
|
19
|
+
import type {
|
|
20
|
+
CliMountHost,
|
|
21
|
+
CliProjection,
|
|
22
|
+
CompletionChildFlag,
|
|
23
|
+
CompletionChildSpec,
|
|
24
|
+
ReferenceCliSyntax,
|
|
25
|
+
VerbSpec,
|
|
26
|
+
} from "../../kernel/spec/types.js";
|
|
27
|
+
import { CREATE_GENERATORS } from "./constants.js";
|
|
28
|
+
import {
|
|
29
|
+
CREATE_CLI_SYNTAX,
|
|
30
|
+
CREATE_SURFACE,
|
|
31
|
+
} from "./createSurface.generated.js";
|
|
32
|
+
import type { CreateKind, PromptCliSyntax } from "./types.js";
|
|
33
|
+
|
|
34
|
+
/** Build the mount (the module-level CLI projection hook). */
|
|
35
|
+
export function createCliProjection(): CliProjection {
|
|
36
|
+
// The registration import is DEFERRED to `prepare()`: only the one caller
|
|
37
|
+
// that actually builds the command tree (the bin, before `buildProgram`)
|
|
38
|
+
// pays for summon-core's adapter and Commander — never the
|
|
39
|
+
// `--help`/`__complete` barrel import. `mount` stays synchronous for
|
|
40
|
+
// `buildProgram` and throws when the step was skipped, so the coupling
|
|
41
|
+
// fails loudly instead of registering an empty subtree.
|
|
42
|
+
let mountCreateTree: typeof import("./mount.js").mountCreateTree | undefined;
|
|
43
|
+
return {
|
|
44
|
+
prepare: async (): Promise<void> => {
|
|
45
|
+
({ mountCreateTree } = await import("./mount.js"));
|
|
46
|
+
},
|
|
47
|
+
mount: (parent, host: CliMountHost): void => {
|
|
48
|
+
if (!mountCreateTree) {
|
|
49
|
+
throw new Error(
|
|
50
|
+
"create mount used before prepare() — await CliProjection.prepare() before buildProgram",
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
mountCreateTree(parent, host);
|
|
54
|
+
},
|
|
55
|
+
completionChildren,
|
|
56
|
+
referenceIntro: REFERENCE_INTRO,
|
|
57
|
+
referenceSyntax,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The baked registered spelling for a prompt, from the first declared path
|
|
63
|
+
* that carries it (a prompt's spelling derives from its own shape, so every
|
|
64
|
+
* declaring path bakes the same tokens).
|
|
65
|
+
*/
|
|
66
|
+
function syntaxFor(
|
|
67
|
+
paths: readonly string[],
|
|
68
|
+
promptName: string,
|
|
69
|
+
): PromptCliSyntax {
|
|
70
|
+
for (const commandPath of paths) {
|
|
71
|
+
const syntax = CREATE_CLI_SYNTAX[commandPath]?.[promptName];
|
|
72
|
+
if (syntax) return syntax;
|
|
73
|
+
}
|
|
74
|
+
throw new Error(
|
|
75
|
+
`createSurface.generated.ts bakes no CLI syntax for prompt "${promptName}" — rerun the build`,
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** The leaves' prompts, unioned by first-seen name (the binding param order). */
|
|
80
|
+
function unionPrompts(paths: readonly string[]): ProjectedPrompt[] {
|
|
81
|
+
const seen = new Set<string>();
|
|
82
|
+
const union: ProjectedPrompt[] = [];
|
|
83
|
+
for (const commandPath of paths) {
|
|
84
|
+
for (const prompt of CREATE_SURFACE[commandPath]?.prompts ?? []) {
|
|
85
|
+
if (seen.has(prompt.name)) continue;
|
|
86
|
+
seen.add(prompt.name);
|
|
87
|
+
union.push(prompt);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return union;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* The REGISTERED reference syntax for one binding verb (the mounted spelling
|
|
95
|
+
* the generated reference prints): the usage line carries the real tree
|
|
96
|
+
* segment (`create application react …`, `<framework>` for the multi-leaf
|
|
97
|
+
* binding — its values live in the Args table) and the registered kebab
|
|
98
|
+
* positional, which is also handed over as the per-param positional token so
|
|
99
|
+
* the Arguments table prints the SAME spelling; each flag token is the one
|
|
100
|
+
* the mount actually registers (a default-true confirm registers ONLY its
|
|
101
|
+
* `--no-` form), read from the BAKED syntax the build derived with the same
|
|
102
|
+
* flag-shape authority the mount registers through. Reached only through
|
|
103
|
+
* {@link createCliProjection} — one seam, THREE consumers, all speaking
|
|
104
|
+
* registration: the kernel's reference emitter (the reference pins read the
|
|
105
|
+
* committed pages it produced), `emitSurface` (the covenant's mounted-noun
|
|
106
|
+
* flag + positional tokens, L-CIS-2), and the `docExamples` gate's
|
|
107
|
+
* valid-token vocabulary. A change of meaning here moves all three together —
|
|
108
|
+
* the covenant conformance and derivation-tie cells in surface.test.ts are
|
|
109
|
+
* the tripwire.
|
|
110
|
+
*/
|
|
111
|
+
function referenceSyntax(
|
|
112
|
+
verbPath: VerbSpec["path"],
|
|
113
|
+
): ReferenceCliSyntax | undefined {
|
|
114
|
+
const kind = verbPath[1] as CreateKind | undefined;
|
|
115
|
+
const binding = kind ? CREATE_GENERATORS[kind] : undefined;
|
|
116
|
+
if (verbPath[0] !== "create" || !binding) return undefined;
|
|
117
|
+
const paths = binding.paths as readonly string[];
|
|
118
|
+
const first = paths[0] as string;
|
|
119
|
+
|
|
120
|
+
const tokens: string[] = ["create", kind as string];
|
|
121
|
+
if (paths.length > 1) tokens.push("<framework>");
|
|
122
|
+
else if (first.includes("/")) tokens.push(first.split("/")[1] as string);
|
|
123
|
+
const prompts = unionPrompts(paths);
|
|
124
|
+
const positional = prompts.find((prompt) => prompt.positional === true);
|
|
125
|
+
const positionalTokens: Record<string, string> = {};
|
|
126
|
+
if (positional) {
|
|
127
|
+
const token = `[${syntaxFor(paths, positional.name).kebabName}]`;
|
|
128
|
+
tokens.push(token);
|
|
129
|
+
positionalTokens[positional.name] = token;
|
|
130
|
+
}
|
|
131
|
+
tokens.push("[options]");
|
|
132
|
+
|
|
133
|
+
const flagTokens: Record<string, string> = {};
|
|
134
|
+
for (const prompt of prompts) {
|
|
135
|
+
if (prompt.positional === true) continue;
|
|
136
|
+
flagTokens[prompt.name] = syntaxFor(paths, prompt.name).flag;
|
|
137
|
+
}
|
|
138
|
+
return { usage: tokens.join(" "), flagTokens, positionalTokens };
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* One leaf's completion node, derived from its projected prompts. EVERY
|
|
143
|
+
* prompt is a flag — `addPromptOptions` registers positional prompts as
|
|
144
|
+
* options too (`--component-path` is as real as `--no-with-styles`), the
|
|
145
|
+
* positional argument being an additional spelling, not a replacement.
|
|
146
|
+
*/
|
|
147
|
+
function leafChild(label: string, commandPath: string): CompletionChildSpec {
|
|
148
|
+
const surface = CREATE_SURFACE[commandPath];
|
|
149
|
+
const prompts = surface?.prompts ?? [];
|
|
150
|
+
return {
|
|
151
|
+
label,
|
|
152
|
+
flags: prompts.map((prompt) => promptFlag(commandPath, prompt)),
|
|
153
|
+
positionals: prompts
|
|
154
|
+
.filter((prompt) => prompt.positional === true)
|
|
155
|
+
.map((prompt) => ({
|
|
156
|
+
name: prompt.name,
|
|
157
|
+
required: false,
|
|
158
|
+
files: /(path|dir)$/i.test(prompt.name),
|
|
159
|
+
})),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** A prompt's completion flag: the REGISTERED token (`--no-` for default-true). */
|
|
164
|
+
function promptFlag(
|
|
165
|
+
commandPath: string,
|
|
166
|
+
prompt: ProjectedPrompt,
|
|
167
|
+
): CompletionChildFlag {
|
|
168
|
+
const syntax = syntaxFor([commandPath], prompt.name);
|
|
169
|
+
return {
|
|
170
|
+
flag: syntax.flag,
|
|
171
|
+
takesValue: syntax.takesValue,
|
|
172
|
+
...(prompt.type === "select" && prompt.choices && prompt.choices.length > 0
|
|
173
|
+
? { values: prompt.choices.map((choice) => choice.value) }
|
|
174
|
+
: {}),
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* The completion surface per verb label: leaves carry their prompt-derived
|
|
180
|
+
* flags in their REGISTERED spelling; a namespace node offers its segment
|
|
181
|
+
* values at position 0, the shared leaf positional after it, and the leaf
|
|
182
|
+
* children for the dynamic tier's precise walk — but NO prompt flags of its
|
|
183
|
+
* own: Commander registers those on the leaves, so a pre-segment offer
|
|
184
|
+
* (`create component --use-ts-stories svelte`) completes an ordering the
|
|
185
|
+
* CLI rejects as an unknown option.
|
|
186
|
+
*/
|
|
187
|
+
function completionChildren(): Readonly<Record<string, CompletionChildSpec>> {
|
|
188
|
+
const record: Record<string, CompletionChildSpec> = {};
|
|
189
|
+
for (const [kind, binding] of Object.entries(CREATE_GENERATORS)) {
|
|
190
|
+
const paths = binding.paths as readonly string[];
|
|
191
|
+
const first = paths[0] as string;
|
|
192
|
+
if (paths.length === 1 && !first.includes("/")) {
|
|
193
|
+
record[kind] = leafChild(kind, first);
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
const children = paths.map((commandPath) =>
|
|
197
|
+
leafChild(commandPath.split("/")[1] as string, commandPath),
|
|
198
|
+
);
|
|
199
|
+
// The shared tail: every declared leaf carries the same positional shape.
|
|
200
|
+
const tail = children[0]?.positionals ?? [];
|
|
201
|
+
record[kind] = {
|
|
202
|
+
label: kind,
|
|
203
|
+
flags: [],
|
|
204
|
+
positionals: [
|
|
205
|
+
{
|
|
206
|
+
name: "framework",
|
|
207
|
+
required: true,
|
|
208
|
+
values: children.map((child) => child.label),
|
|
209
|
+
},
|
|
210
|
+
...tail,
|
|
211
|
+
],
|
|
212
|
+
children,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
return record;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/** The generated-reference intro under the `create` heading (the pointer). */
|
|
219
|
+
const REFERENCE_INTRO =
|
|
220
|
+
"The `create` surface is a PROJECTION of the summon generator tree: " +
|
|
221
|
+
`\`${BIN_NAME} create <path...>\` ≡ \`summon <path...>\` over the declared bindings — ` +
|
|
222
|
+
"same grammar, same flags, same wizard, byte-identical trees. Tree segments are " +
|
|
223
|
+
"subcommands (`create component react|svelte|lit`, `create application react`), and " +
|
|
224
|
+
"every flag derives from the generators' own prompts (a default-on confirm registers " +
|
|
225
|
+
"only its `--no-` form). The contract is EXECUTED, not written down: " +
|
|
226
|
+
"`crossCli.subprocess.test.ts` runs both CLIs over the same argv and compares " +
|
|
227
|
+
"what they emit.";
|
|
@@ -1,75 +1,50 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
3
|
-
* surface's mechanical copies derive from: the `CreateKind` union
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* `createVerbs` and `capabilities/hints.ts` still name the frameworks by hand.
|
|
2
|
+
* The command-path ALLOWLIST of the `create` surface — the one list the
|
|
3
|
+
* surface's mechanical copies derive from: the `CreateKind` union
|
|
4
|
+
* (`types.ts`) and the generator lookup (`pickGenerator.ts`). Prose is NOT
|
|
5
|
+
* derived: the verb summaries in `create.verb.ts` and
|
|
6
|
+
* `capabilities/hints.ts` still name the frameworks by hand.
|
|
8
7
|
*
|
|
9
8
|
* This table is the SINGLE authoring point for which generator packages the
|
|
10
|
-
* distribution ships: it binds each `create` noun to the
|
|
11
|
-
* runs
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* `Cannot find module '@canonical/summon-component' from '/$bunfs/root/…'`).
|
|
24
|
-
* `pickGenerator` must import all three statically.
|
|
9
|
+
* distribution ships: it binds each `create` noun to the command PATHS it
|
|
10
|
+
* runs (the generator-map keys, `component/react` … `application/react`).
|
|
11
|
+
* Templates are NOT this package's concern — each generator package ships
|
|
12
|
+
* its own under its `dist/esm` tree and loads them itself. The binding is
|
|
13
|
+
* hand-written because it cannot be discovered:
|
|
14
|
+
* - surfacing a noun also needs prose and examples in `create.verb.ts`, so
|
|
15
|
+
* the surface is a deliberate SUBSET — `@canonical/summon-application`
|
|
16
|
+
* ships `application/react`, `domain`, `route` and `wrapper`, and `create`
|
|
17
|
+
* exposes one of them;
|
|
18
|
+
* - `pickGenerator` imports all three generators STATICALLY. A computed
|
|
19
|
+
* `import(name)` is opaque to every bundler and analyser; the historical
|
|
20
|
+
* cost was measured under `bun build --compile`, which left the
|
|
21
|
+
* generators out of the artifact entirely.
|
|
25
22
|
*
|
|
26
|
-
* `create.test.ts` pins
|
|
27
|
-
*
|
|
28
|
-
*
|
|
23
|
+
* Every declared path RUNS from a published install. `create.test.ts` pins
|
|
24
|
+
* what is checkable: every declared path resolves to a generator whose
|
|
25
|
+
* `meta.name` equals the path.
|
|
29
26
|
*
|
|
30
|
-
* Deliberately free of any import: `create.verb.ts` reads this on the
|
|
31
|
-
* `__complete` fast path (`capabilities/lazy.test.ts`).
|
|
27
|
+
* Deliberately free of any import: `create.verb.ts` reads this on the
|
|
28
|
+
* `--help` / `__complete` fast path (`capabilities/lazy.test.ts`).
|
|
32
29
|
*/
|
|
33
30
|
export const CREATE_GENERATORS = {
|
|
34
31
|
component: {
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
-
* binary.
|
|
38
|
-
*/
|
|
39
|
-
name: "@canonical/summon-component",
|
|
40
|
-
/** `--framework <f>` runs `component/<f>`; the FIRST is the enum default. */
|
|
41
|
-
frameworks: ["react", "svelte", "lit"],
|
|
42
|
-
/**
|
|
43
|
-
* Runs from the compiled binary: this generator routes every template read
|
|
44
|
-
* through `loadTemplateSync` and passes `content:` into `template()`, so the
|
|
45
|
-
* embedded manifest serves it. That — not the templates' file extensions —
|
|
46
|
-
* is the property that decides it, and it is a fact about the GENERATOR's
|
|
47
|
-
* source, not about what this build chooses to embed.
|
|
48
|
-
*/
|
|
49
|
-
readsEmbeddedTemplates: true,
|
|
32
|
+
/** The command paths this binding runs (generator-map keys). */
|
|
33
|
+
paths: ["component/react", "component/svelte", "component/lit"],
|
|
50
34
|
},
|
|
51
35
|
package: {
|
|
52
|
-
|
|
53
|
-
key: "package",
|
|
54
|
-
/**
|
|
55
|
-
* NOT runnable from the compiled binary: this generator calls
|
|
56
|
-
* `template({ source })` with no `content:`, so summon-core falls through to
|
|
57
|
-
* `readFile(options.source)`. Measured against a real `dist/pragma` with the
|
|
58
|
-
* gate lifted: `ENOENT: no such file or directory, open
|
|
59
|
-
* '/$bunfs/templates/package.json.ejs'`, after `mkdir` had already created
|
|
60
|
-
* `my-lib/` and `my-lib/src/` — a half-made package left on disk. A
|
|
61
|
-
* `--dry-run` exits 0 without reading a template, so it does NOT test this.
|
|
62
|
-
*/
|
|
63
|
-
readsEmbeddedTemplates: false,
|
|
36
|
+
paths: ["package"],
|
|
64
37
|
},
|
|
65
38
|
application: {
|
|
66
|
-
|
|
67
|
-
key: "application/react",
|
|
68
|
-
/**
|
|
69
|
-
* NOT runnable from the compiled binary — same cause as `package` (measured:
|
|
70
|
-
* `ENOENT … '/$bunfs/root/templates/package.json.ejs'`, after the app
|
|
71
|
-
* directory was created). It also `copy()`s non-`.ejs` assets.
|
|
72
|
-
*/
|
|
73
|
-
readsEmbeddedTemplates: false,
|
|
39
|
+
paths: ["application/react"],
|
|
74
40
|
},
|
|
75
41
|
} as const;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The component frameworks, DERIVED from the declared tree segments — the
|
|
45
|
+
* second path segment of each `component/<framework>` binding.
|
|
46
|
+
*/
|
|
47
|
+
export const COMPONENT_FRAMEWORKS: readonly string[] =
|
|
48
|
+
CREATE_GENERATORS.component.paths.map(
|
|
49
|
+
(commandPath) => commandPath.split("/")[1] as string,
|
|
50
|
+
);
|
|
@@ -51,6 +51,46 @@ describe("create over MCP (PROTECTED)", () => {
|
|
|
51
51
|
expect(component?.annotations?.destructiveHint).toBe(false);
|
|
52
52
|
});
|
|
53
53
|
|
|
54
|
+
it("schemas DERIVE from the prompts: framework is a required enum with no default; application args are the bare prompt names (L-CIS)", async () => {
|
|
55
|
+
const dir = freshCwd();
|
|
56
|
+
const mcp = await projectMcp([createModule], dir);
|
|
57
|
+
cleanup = mcp.cleanup;
|
|
58
|
+
const tools = await mcp.listTools();
|
|
59
|
+
|
|
60
|
+
const component = tools.find((t) => t.name === "create_component");
|
|
61
|
+
const componentSchema = component?.inputSchema as {
|
|
62
|
+
properties?: Record<string, { enum?: string[]; default?: unknown }>;
|
|
63
|
+
required?: string[];
|
|
64
|
+
};
|
|
65
|
+
// The framework enum derives from the tree segments — REQUIRED, no default.
|
|
66
|
+
expect(componentSchema.properties?.framework?.enum).toEqual([
|
|
67
|
+
"react",
|
|
68
|
+
"svelte",
|
|
69
|
+
"lit",
|
|
70
|
+
]);
|
|
71
|
+
expect(componentSchema.properties?.framework?.default).toBeUndefined();
|
|
72
|
+
expect(componentSchema.required ?? []).toContain("framework");
|
|
73
|
+
// The svelte-only prompt joins the union.
|
|
74
|
+
expect(Object.keys(componentSchema.properties ?? {})).toContain(
|
|
75
|
+
"useTsStories",
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
const application = tools.find((t) => t.name === "create_application");
|
|
79
|
+
const applicationSchema = application?.inputSchema as {
|
|
80
|
+
properties?: Record<string, unknown>;
|
|
81
|
+
};
|
|
82
|
+
const names = Object.keys(applicationSchema.properties ?? {});
|
|
83
|
+
// The B8 --with-X aliases are gone: prompt names ARE the arg names — and
|
|
84
|
+
// ssr/router are gone WITH their prompts (always-on facts, not questions).
|
|
85
|
+
expect(names).toEqual(
|
|
86
|
+
expect.arrayContaining(["appPath", "forms", "relay", "runInstall"]),
|
|
87
|
+
);
|
|
88
|
+
expect(names).not.toContain("withSsr");
|
|
89
|
+
expect(names).not.toContain("withRelay");
|
|
90
|
+
expect(names).not.toContain("ssr");
|
|
91
|
+
expect(names).not.toContain("router");
|
|
92
|
+
});
|
|
93
|
+
|
|
54
94
|
it("plan-first: no confirm → a plan, no files written", async () => {
|
|
55
95
|
const dir = freshCwd();
|
|
56
96
|
const prev = process.cwd();
|
|
@@ -76,6 +116,44 @@ describe("create over MCP (PROTECTED)", () => {
|
|
|
76
116
|
}
|
|
77
117
|
});
|
|
78
118
|
|
|
119
|
+
it("the plan payload is the FILTERED plan, not the interpreter transcript", async () => {
|
|
120
|
+
// This payload is read by an LLM on a token budget. Every internal probe
|
|
121
|
+
// and every repeat of the output directory spent tokens burying the real
|
|
122
|
+
// artifacts, so the rows pass the shared `visiblePlanEffects` filter — the
|
|
123
|
+
// same one the CLI preview applies — and stay `describeEffect` strings,
|
|
124
|
+
// which is what makes them comparable to the CLI's own `--format json`
|
|
125
|
+
// plan rather than to its terminal rendering.
|
|
126
|
+
const dir = freshCwd();
|
|
127
|
+
const prev = process.cwd();
|
|
128
|
+
process.chdir(dir);
|
|
129
|
+
try {
|
|
130
|
+
const mcp = await projectMcp([createModule], dir);
|
|
131
|
+
cleanup = mcp.cleanup;
|
|
132
|
+
const result = await mcp.callTool("create_component", {
|
|
133
|
+
framework: "react",
|
|
134
|
+
componentPath: "Button",
|
|
135
|
+
withStyles: false,
|
|
136
|
+
withStories: false,
|
|
137
|
+
withSsrTests: false,
|
|
138
|
+
});
|
|
139
|
+
const plan = (result.data as { plan: string[] }).plan;
|
|
140
|
+
const body = plan.join("\n");
|
|
141
|
+
// The interpreter's own bookkeeping is gone: no existence probes, and
|
|
142
|
+
// no debug commentary (this run is not verbose).
|
|
143
|
+
expect(body).not.toContain("Check exists:");
|
|
144
|
+
expect(body).not.toContain("Log [debug]");
|
|
145
|
+
// The output directory is planned ONCE, however many files it holds.
|
|
146
|
+
expect(plan.filter((line) => line.startsWith("Created "))).toEqual([
|
|
147
|
+
"Created Button/",
|
|
148
|
+
]);
|
|
149
|
+
// What the generator meant to say survives; what it whispered does not.
|
|
150
|
+
expect(plan.at(-1)).toContain("Log [info]: ");
|
|
151
|
+
expect(readdirSync(dir)).toEqual([]); // nothing written
|
|
152
|
+
} finally {
|
|
153
|
+
process.chdir(prev);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
|
|
79
157
|
it("confirm: true → runs for real and writes files", async () => {
|
|
80
158
|
const dir = freshCwd();
|
|
81
159
|
const prev = process.cwd();
|
|
@@ -126,12 +204,18 @@ describe("create over MCP (PROTECTED)", () => {
|
|
|
126
204
|
withSsrTests: false,
|
|
127
205
|
},
|
|
128
206
|
{ dryRun: true, undo: false, yes: false },
|
|
129
|
-
bootRuntime(FLAGS, dir),
|
|
207
|
+
bootRuntime({ ...FLAGS, format: "json" }, dir),
|
|
130
208
|
);
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
209
|
+
// The two STRUCTURED surfaces carry one plan, string for string. They
|
|
210
|
+
// are compared against each other rather than against the terminal
|
|
211
|
+
// rendering, which is deliberately a different shape: a person reads
|
|
212
|
+
// kind-columned rows, a machine reads the described effects.
|
|
213
|
+
const cliPlan = (
|
|
214
|
+
JSON.parse(cliOutcome.stdout as string) as {
|
|
215
|
+
data: { plan: string[] };
|
|
216
|
+
}
|
|
217
|
+
).data.plan;
|
|
218
|
+
expect(mcpPlan).toEqual(cliPlan);
|
|
135
219
|
} finally {
|
|
136
220
|
process.chdir(prev);
|
|
137
221
|
}
|