@canonical/pragma-cli 0.33.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +293 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +83 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +66 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +53 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +168 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +193 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +334 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +263 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +195 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +82 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +25 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +197 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +85 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +25 -24
- package/pragma.conf.ts +853 -0
- package/src/bin.ts +276 -82
- package/src/capabilities/block.parity.test.ts +253 -0
- package/src/capabilities/capabilities/capabilities.render.ts +4 -3
- package/src/capabilities/capabilities/capabilities.verb.ts +32 -14
- package/src/capabilities/capabilities/catalog.ts +20 -12
- package/src/capabilities/capabilities/hints.ts +43 -24
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +50 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +9 -5
- package/src/capabilities/colophon/types.ts +16 -7
- package/src/capabilities/config/collectConfigShow.test.ts +58 -0
- package/src/capabilities/config/collectConfigShow.ts +43 -6
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -37
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +14 -9
- package/src/capabilities/config/show.render.test.ts +77 -5
- package/src/capabilities/config/show.render.ts +8 -13
- package/src/capabilities/config/show.verb.ts +13 -9
- package/src/capabilities/config/types.ts +26 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +95 -103
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +50 -0
- package/src/capabilities/create/create.mcp.test.ts +91 -7
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +523 -162
- package/src/capabilities/create/create.verb.ts +361 -321
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +9 -14
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +40 -46
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +29 -5
- package/src/capabilities/{standard/parity.test.ts → distribution.parity.test.ts} +24 -14
- package/src/capabilities/distribution.test.ts +122 -0
- package/src/capabilities/distribution.ts +54 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +9 -7
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +82 -46
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +5 -4
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +125 -30
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +113 -27
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +24 -13
- package/src/capabilities/doctor/doctor.render.ts +45 -20
- package/src/capabilities/doctor/doctor.test.ts +158 -40
- package/src/capabilities/doctor/doctor.verb.ts +9 -5
- package/src/capabilities/doctor/runChecks.ts +65 -66
- package/src/capabilities/doctor/types.ts +21 -5
- package/src/capabilities/emptyRecovery.test.ts +44 -22
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -5
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +5 -4
- package/src/capabilities/graph/runQuery.ts +9 -7
- package/src/capabilities/index.ts +25 -19
- package/src/capabilities/info/collectInfo.ts +15 -10
- package/src/capabilities/info/info.render.ts +4 -3
- package/src/capabilities/info/info.verb.ts +4 -3
- package/src/capabilities/lazy.test.ts +125 -2
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +42 -83
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/prompt.test.ts +12 -6
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +26 -14
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +367 -91
- package/src/capabilities/resources/resources.test.ts +411 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +397 -320
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +233 -74
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +166 -14
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +47 -9
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +14 -14
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +9 -10
- package/src/capabilities/sources/collectStatus.ts +61 -51
- package/src/capabilities/sources/index.ts +2 -2
- package/src/capabilities/sources/installSkills.ts +86 -9
- package/src/capabilities/sources/runUpdate.ts +164 -141
- package/src/capabilities/sources/sources.test.ts +265 -119
- package/src/capabilities/sources/status.render.test.ts +53 -24
- package/src/capabilities/sources/status.render.ts +25 -30
- package/src/capabilities/sources/status.verb.ts +16 -9
- package/src/capabilities/sources/types.ts +18 -25
- package/src/capabilities/sources/update.render.ts +10 -3
- package/src/capabilities/sources/update.verb.ts +13 -24
- package/src/capabilities/surface.test.ts +165 -25
- package/src/capabilities/tier.parity.test.ts +144 -0
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +8 -4
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.test.ts +8 -6
- package/src/constants.ts +78 -22
- package/src/identity.test.ts +348 -0
- package/src/index.ts +2 -2
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +20 -15
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.test.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +5 -3
- package/src/kernel/completion/entitySource.test.ts +185 -41
- package/src/kernel/completion/entitySource.ts +133 -110
- package/src/kernel/completion/model.test.ts +165 -13
- package/src/kernel/completion/model.ts +105 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +104 -50
- package/src/kernel/completion/shellDrive.test.ts +611 -0
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/fish.ts +28 -6
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +10 -3
- package/src/kernel/config/defaults.test.ts +108 -0
- package/src/kernel/config/defaults.ts +13 -23
- package/src/kernel/config/evaluateProjectConfig.ts +33 -11
- package/src/kernel/config/findProjectConfig.ts +4 -3
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -81
- package/src/kernel/config/globalConfig.ts +2 -2
- package/src/kernel/config/index.ts +5 -6
- package/src/kernel/config/paths.ts +17 -17
- package/src/kernel/config/readConfig.test.ts +246 -7
- package/src/kernel/config/readConfig.ts +8 -8
- package/src/kernel/config/schema.test.ts +50 -0
- package/src/kernel/config/schema.ts +100 -11
- package/src/kernel/config/types.ts +75 -19
- package/src/kernel/copy.test.ts +483 -0
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +6 -3
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -4
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/index.ts +1 -1
- package/src/kernel/error/recovery.test.ts +22 -45
- package/src/kernel/error/recovery.ts +36 -27
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +25 -4
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.test.ts +195 -11
- package/src/kernel/packs/collect.ts +212 -61
- package/src/kernel/packs/compile.test.ts +293 -8
- package/src/kernel/packs/compile.ts +108 -15
- package/src/kernel/packs/disclosure.test.ts +5 -2
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +13 -13
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/graphqlSource.test.ts +6 -3
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +70 -20
- package/src/kernel/packs/renderPack.ts +28 -7
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +132 -34
- package/src/kernel/packs/runBodies.ts +16 -16
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +114 -11
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +104 -10
- package/src/kernel/packs/sparql/runSelect.ts +75 -37
- package/src/kernel/packs/toolDescription.test.ts +52 -5
- package/src/kernel/packs/types.ts +52 -4
- package/src/kernel/packs/uniqueness.ts +5 -5
- package/src/kernel/project/cli/buildProgram.test.ts +157 -17
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +227 -3
- package/src/kernel/project/cli/dispatch.ts +250 -48
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +130 -30
- package/src/kernel/project/cli/helpFormat.ts +14 -1
- package/src/kernel/project/cli/rootHelp.ts +140 -111
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +18 -10
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +12 -7
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +42 -1
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +120 -5
- package/src/kernel/project/mcp/prompts/provider.ts +22 -8
- package/src/kernel/project/mcp/prompts/source.ts +69 -68
- package/src/kernel/project/mcp/registerVerb.ts +56 -11
- package/src/kernel/project/mcp/serve.ts +13 -5
- package/src/kernel/project/mcp/toolDescriptions.test.ts +6 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/disclosure.ts +4 -2
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/prefixes.test.ts +36 -0
- package/src/kernel/render/prefixes.ts +40 -13
- package/src/kernel/render/renderers.test.ts +244 -7
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/build.ts +29 -3
- package/src/kernel/runtime/graphpack/buildIndex.test.ts +46 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +53 -18
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -5
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.stories.generated.ts +3 -0
- package/src/kernel/runtime/graphpack/embedded.ts +39 -13
- package/src/kernel/runtime/graphpack/graphpack.test.ts +205 -5
- package/src/kernel/runtime/graphpack/hash.ts +3 -2
- package/src/kernel/runtime/graphpack/index.ts +1 -1
- package/src/kernel/runtime/graphpack/manifest.ts +114 -12
- package/src/kernel/runtime/graphpack/read.ts +5 -11
- package/src/kernel/runtime/graphpack/schemas.ts +74 -0
- package/src/kernel/runtime/graphpack/stories.ts +84 -0
- package/src/kernel/runtime/graphpack/types.ts +61 -48
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/paths.ts +64 -15
- package/src/kernel/runtime/probe.test.ts +8 -4
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +477 -32
- package/src/kernel/runtime/refs/gitOps.ts +1 -19
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +8 -8
- package/src/kernel/runtime/refs/resolve.ts +82 -66
- package/src/kernel/runtime/resolveSources.test.ts +63 -24
- package/src/kernel/runtime/resolveSources.ts +36 -25
- package/src/kernel/runtime/storeReadiness.ts +10 -10
- package/src/kernel/runtime/storeless.test.ts +1 -1
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +56 -55
- package/src/kernel/spec/emitReference.test.ts +3 -3
- package/src/kernel/spec/emitReference.ts +242 -34
- package/src/kernel/spec/emitSurface.ts +57 -11
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/surfaceConformance.ts +8 -0
- package/src/kernel/spec/types.ts +277 -13
- package/src/kernel/spec/validate.ts +2 -1
- package/src/kernel/vocabulary.test.ts +164 -0
- package/src/kernel/vocabulary.ts +146 -0
- package/src/testing/PARITY_GAPS.ts +8 -2
- package/src/testing/behavioral/README.md +3 -3
- package/src/testing/behavioral/completion.test.ts +19 -6
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +6 -5
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +1 -1
- package/src/testing/behavioral/exitCodes.e2e.test.ts +6 -5
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/harness.foundation.test.ts +14 -5
- package/src/testing/behavioral/journeys.cli.test.ts +117 -76
- package/src/testing/behavioral/journeys.defaultPack.test.ts +88 -182
- package/src/testing/behavioral/journeys.firstInstall.test.ts +167 -0
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +9 -6
- package/src/testing/behavioral/journeys.packageStories.test.ts +188 -0
- package/src/testing/behavioral/liveReadSurface.ts +4 -3
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +10 -5
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/behavioral/staleCommands.test.ts +10 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +7 -7
- package/src/testing/eval/cases/assembly.ts +13 -6
- package/src/testing/eval/cases/effectful.ts +28 -15
- package/src/testing/eval/cases/readNouns.ts +22 -20
- package/src/testing/eval/cases/stable.ts +5 -1
- package/src/testing/eval/eval.test.ts +7 -1
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/fixtureCapability.ts +45 -1
- package/src/testing/fixtures/graph/canonical.ts +94 -5
- package/src/testing/fixtures/graph/defaultPack.ts +7 -6
- package/src/testing/fixtures/graph/owlExport.ts +7 -5
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/fixtureGraph.ts +33 -16
- package/src/testing/helpers/packRuntime.ts +2 -3
- package/src/testing/helpers/projectCli.ts +2 -1
- package/src/testing/helpers/projectMcp.ts +38 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +24 -9
- package/src/testing/perf/budgets.ts +76 -12
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +611 -14
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/src/types.ts +2 -2
- package/dist/pragma +0 -0
- package/src/capabilities/block/blockList.test.ts +0 -79
- package/src/capabilities/block/blockList.verb.ts +0 -163
- package/src/capabilities/block/index.ts +0 -25
- package/src/capabilities/block/pack.ts +0 -166
- package/src/capabilities/block/parity.test.ts +0 -187
- package/src/capabilities/block/tierChain.ts +0 -78
- package/src/capabilities/colophon/pragmaColophon.ts +0 -66
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -152
- package/src/capabilities/create/templates.embedded.generated.ts +0 -53
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -41
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -67
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -60
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/capabilities/modifier/index.ts +0 -15
- package/src/capabilities/modifier/pack.ts +0 -64
- package/src/capabilities/standard/index.ts +0 -18
- package/src/capabilities/standard/pack.ts +0 -128
- package/src/capabilities/tier/index.ts +0 -19
- package/src/capabilities/tier/lookup.render.test.ts +0 -72
- package/src/capabilities/tier/lookup.render.ts +0 -59
- package/src/capabilities/tier/lookup.test.ts +0 -83
- package/src/capabilities/tier/lookup.verb.ts +0 -44
- package/src/capabilities/tier/pack.ts +0 -28
- package/src/capabilities/tier/runLookup.ts +0 -87
- package/src/capabilities/token/addConfig.render.ts +0 -27
- package/src/capabilities/token/addConfig.test.ts +0 -62
- package/src/capabilities/token/addConfig.verb.ts +0 -40
- package/src/capabilities/token/index.ts +0 -19
- package/src/capabilities/token/pack.ts +0 -58
- package/src/capabilities/token/runAddConfig.ts +0 -95
- package/src/kernel/completion/bashDrive.test.ts +0 -73
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +0 -39
- package/src/kernel/runtime/lock.ts +0 -90
|
@@ -1,227 +1,133 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `create` verbs — `component` / `package` / `application
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* The `create` verbs — `component` / `package` / `application`, the THREE
|
|
3
|
+
* binding-level VerbSpecs (the MCP/covenant/reference grammar). Their params
|
|
4
|
+
* DERIVE mechanically from the generators' own prompts, projected at build
|
|
5
|
+
* time into `createSurface.generated.ts` — no hand mirrors, no flag aliases:
|
|
6
|
+
* the prompt names ARE the param/MCP-arg names, the FLAG tokens are
|
|
7
|
+
* `buildOptionInfo`'s registered forms (a default-true confirm registers
|
|
8
|
+
* ONLY `--no-<kebab>` — the covenant and the doc gate speak that vocabulary
|
|
9
|
+
* through the mount's registered-syntax seam, L-CIS-2), and `component`'s
|
|
10
|
+
* params are the FRAMEWORK UNION of its three declared leaves plus a
|
|
11
|
+
* required, positional `framework` enum derived from the tree segments
|
|
12
|
+
* (L-CIS). The CLI mounts the
|
|
13
|
+
* generator TREE itself (`create component react [component-path]` — see
|
|
14
|
+
* `mount.ts`); these specs are what MCP tools and the emitted surface read.
|
|
5
15
|
*
|
|
6
|
-
* LAZY DISPATCH (R9 + lazy-React):
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
16
|
+
* LAZY DISPATCH (R9 + lazy-React): NOTHING of summon-core is imported
|
|
17
|
+
* statically — not even the UI-free projection subpath: this module sits on
|
|
18
|
+
* the capabilities barrel, so `--help` and `__complete` pay its import cost
|
|
19
|
+
* on every spawn, and the projection helpers it needs (`decideInteraction`,
|
|
20
|
+
* `refusalMessage`, `toKebabCase`, …) are only ever called inside `run`.
|
|
21
|
+
* `run` lazily `import()`s `pickGenerator` + summon-core + the projection, so
|
|
22
|
+
* `buildProgram` / `--help` / `__complete` / reads never load summon-core or
|
|
23
|
+
* the generators — and `create --yes` never loads React. The lazy-graph
|
|
24
|
+
* guard in `lazy.test.ts` pins the boundary.
|
|
14
25
|
*/
|
|
15
26
|
|
|
16
|
-
import
|
|
27
|
+
import { isAbsolute } from "node:path";
|
|
28
|
+
import type { GeneratorResult } from "@canonical/summon-core";
|
|
29
|
+
import type { ProjectedPrompt } from "@canonical/summon-core/projection";
|
|
17
30
|
import type { Task } from "@canonical/task";
|
|
18
|
-
import {
|
|
19
|
-
import
|
|
20
|
-
import type {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
31
|
+
import { BIN_NAME } from "../../constants.js";
|
|
32
|
+
import { PragmaError } from "../../kernel/error/index.js";
|
|
33
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
34
|
+
import type { ParamSpec, VerbSpec } from "../../kernel/spec/index.js";
|
|
35
|
+
import { COMPONENT_FRAMEWORKS, CREATE_GENERATORS } from "./constants.js";
|
|
36
|
+
import { createFormatters, formatCreatePlan } from "./create.render.js";
|
|
37
|
+
import { CREATE_SURFACE } from "./createSurface.generated.js";
|
|
38
|
+
import { generatorToParams, promptToParam } from "./generatorToVerbSpec.js";
|
|
23
39
|
import { assertInsideWorkspace } from "./pathJail.js";
|
|
24
40
|
import type { CreateKind } from "./types.js";
|
|
25
41
|
|
|
26
42
|
// =============================================================================
|
|
27
|
-
//
|
|
43
|
+
// Params, derived from the projected surface (createSurface.generated.ts)
|
|
28
44
|
// =============================================================================
|
|
29
45
|
|
|
30
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* `framework` — the component tree segments as a REQUIRED positional enum
|
|
48
|
+
* (`create component <framework>`), values derived from the declared paths.
|
|
49
|
+
* Deliberately NO default: summon has no default framework, and neither does
|
|
50
|
+
* the projection of it.
|
|
51
|
+
*/
|
|
31
52
|
const FRAMEWORK_PARAM: ParamSpec = {
|
|
32
53
|
kind: "enum",
|
|
33
54
|
name: "framework",
|
|
34
|
-
doc: "Component framework.",
|
|
35
|
-
values:
|
|
36
|
-
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* `componentPath` — positional, and deliberately WITHOUT a ParamSpec default so
|
|
41
|
-
* the selected framework's own prompt default applies (react vs svelte/lit
|
|
42
|
-
* differ); `required: false` keeps it optional despite having no default here.
|
|
43
|
-
*/
|
|
44
|
-
const COMPONENT_PATH_PARAM: ParamSpec = {
|
|
45
|
-
kind: "string",
|
|
46
|
-
name: "componentPath",
|
|
47
|
-
doc: "Component path (its final segment is the PascalCase component name).",
|
|
48
|
-
required: false,
|
|
55
|
+
doc: "Component framework — the tree segment (`create component <framework>`).",
|
|
56
|
+
values: COMPONENT_FRAMEWORKS,
|
|
57
|
+
required: true,
|
|
49
58
|
positional: true,
|
|
50
|
-
complete: { kind: "files" },
|
|
51
59
|
};
|
|
52
60
|
|
|
53
|
-
const SHARED_COMPONENT_MIRROR: PromptDefinition[] = [
|
|
54
|
-
{
|
|
55
|
-
name: "withStyles",
|
|
56
|
-
type: "confirm",
|
|
57
|
-
message: "Include styles?",
|
|
58
|
-
default: true,
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
name: "withStories",
|
|
62
|
-
type: "confirm",
|
|
63
|
-
message: "Include Storybook stories?",
|
|
64
|
-
default: true,
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
name: "withSsrTests",
|
|
68
|
-
type: "confirm",
|
|
69
|
-
message: "Include SSR tests?",
|
|
70
|
-
default: true,
|
|
71
|
-
},
|
|
72
|
-
];
|
|
73
|
-
|
|
74
|
-
const PACKAGE_MIRROR: PromptDefinition[] = [
|
|
75
|
-
{
|
|
76
|
-
name: "name",
|
|
77
|
-
type: "text",
|
|
78
|
-
message: "Package name:",
|
|
79
|
-
default: "@canonical/my-package",
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
name: "type",
|
|
83
|
-
type: "select",
|
|
84
|
-
message: "Package type:",
|
|
85
|
-
choices: [
|
|
86
|
-
{ label: "tool-ts", value: "tool-ts" },
|
|
87
|
-
{ label: "library", value: "library" },
|
|
88
|
-
{ label: "css", value: "css" },
|
|
89
|
-
],
|
|
90
|
-
default: "tool-ts",
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
name: "description",
|
|
94
|
-
type: "text",
|
|
95
|
-
message: "Package description:",
|
|
96
|
-
default: "",
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
name: "withReact",
|
|
100
|
-
type: "confirm",
|
|
101
|
-
message: "Include React dependencies?",
|
|
102
|
-
default: false,
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
name: "withStorybook",
|
|
106
|
-
type: "confirm",
|
|
107
|
-
message: "Include Storybook setup?",
|
|
108
|
-
default: false,
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
name: "withCli",
|
|
112
|
-
type: "confirm",
|
|
113
|
-
message: "Include a CLI binary entry point?",
|
|
114
|
-
default: false,
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
name: "withPrTemplate",
|
|
118
|
-
type: "confirm",
|
|
119
|
-
message: "Include a PR template?",
|
|
120
|
-
default: false,
|
|
121
|
-
},
|
|
122
|
-
// Opt-in (default false): the grammar has no `--no-` form, so a default-true
|
|
123
|
-
// boolean could never be turned off. `--run-install` enables it.
|
|
124
|
-
{
|
|
125
|
-
name: "runInstall",
|
|
126
|
-
type: "confirm",
|
|
127
|
-
message: "Run the package manager install after creation?",
|
|
128
|
-
default: false,
|
|
129
|
-
},
|
|
130
|
-
];
|
|
131
|
-
|
|
132
|
-
// The include-flag prompts carry the CLI grammar's `--with-X` names
|
|
133
|
-
// (`withSsr`/`withRouter`/`withForms`/`withRelay`, AV-228 B8) rather than the
|
|
134
|
-
// summon generator's bare prompt names (`ssr`/`router`/`forms`/`relay`). {@link
|
|
135
|
-
// INCLUDE_FLAG_ALIASES} maps them back at the CLI↔generator boundary so the
|
|
136
|
-
// generator prompt names — and their embedded templates + byte-equality
|
|
137
|
-
// goldens — stay stable. `--run-install` (default false) is an action flag, not
|
|
138
|
-
// an include, so it keeps its spelling.
|
|
139
|
-
const APPLICATION_MIRROR: PromptDefinition[] = [
|
|
140
|
-
{
|
|
141
|
-
name: "appPath",
|
|
142
|
-
type: "text",
|
|
143
|
-
message: "Application directory:",
|
|
144
|
-
default: "my-app",
|
|
145
|
-
positional: true,
|
|
146
|
-
},
|
|
147
|
-
{ name: "withSsr", type: "confirm", message: "Include SSR?", default: true },
|
|
148
|
-
{
|
|
149
|
-
name: "withRouter",
|
|
150
|
-
type: "confirm",
|
|
151
|
-
message: "Include router?",
|
|
152
|
-
default: true,
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
name: "withForms",
|
|
156
|
-
type: "confirm",
|
|
157
|
-
message: "Include form components?",
|
|
158
|
-
default: true,
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
name: "withRelay",
|
|
162
|
-
type: "confirm",
|
|
163
|
-
message: "Include a Relay (GraphQL) data layer?",
|
|
164
|
-
default: false,
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
name: "runInstall",
|
|
168
|
-
type: "confirm",
|
|
169
|
-
message: "Install dependencies now?",
|
|
170
|
-
default: false,
|
|
171
|
-
},
|
|
172
|
-
];
|
|
173
|
-
|
|
174
61
|
/**
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
* templates/goldens) untouched. Component and package already use `--with-X`
|
|
182
|
-
* names that match their prompts, so their maps are empty.
|
|
62
|
+
* The FRAMEWORK UNION of the component leaves' prompts (A4): first-seen order
|
|
63
|
+
* over the declared framework order; a prompt identical across all declaring
|
|
64
|
+
* frameworks keeps its default; a prompt whose default DIFFERS across
|
|
65
|
+
* frameworks omits it (`required: false` — the selected framework's own
|
|
66
|
+
* prompt default applies at run time); a prompt not present on every
|
|
67
|
+
* framework gets its doc suffixed with the declaring frameworks.
|
|
183
68
|
*/
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
};
|
|
69
|
+
function unionComponentParams(): ParamSpec[] {
|
|
70
|
+
const paths = CREATE_GENERATORS.component.paths;
|
|
71
|
+
const byName = new Map<
|
|
72
|
+
string,
|
|
73
|
+
{ prompt: ProjectedPrompt; frameworks: string[]; defaults: unknown[] }
|
|
74
|
+
>();
|
|
75
|
+
const order: string[] = [];
|
|
76
|
+
for (const commandPath of paths) {
|
|
77
|
+
const framework = commandPath.split("/")[1] as string;
|
|
78
|
+
for (const prompt of surfaceFor(commandPath).prompts) {
|
|
79
|
+
let entry = byName.get(prompt.name);
|
|
80
|
+
if (!entry) {
|
|
81
|
+
entry = { prompt, frameworks: [], defaults: [] };
|
|
82
|
+
byName.set(prompt.name, entry);
|
|
83
|
+
order.push(prompt.name);
|
|
84
|
+
}
|
|
85
|
+
entry.frameworks.push(framework);
|
|
86
|
+
entry.defaults.push(prompt.default);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return order.map((name) => {
|
|
90
|
+
const entry = byName.get(name) as NonNullable<
|
|
91
|
+
ReturnType<typeof byName.get>
|
|
92
|
+
>;
|
|
93
|
+
const universal = entry.frameworks.length === paths.length;
|
|
94
|
+
const agreed = entry.defaults.every((value) =>
|
|
95
|
+
Object.is(value, entry.defaults[0]),
|
|
96
|
+
);
|
|
97
|
+
const param = promptToParam(
|
|
98
|
+
agreed ? entry.prompt : { ...entry.prompt, default: undefined },
|
|
99
|
+
);
|
|
100
|
+
return {
|
|
101
|
+
...param,
|
|
102
|
+
...(universal
|
|
103
|
+
? {}
|
|
104
|
+
: { doc: `${param.doc} (frameworks: ${entry.frameworks.join(", ")})` }),
|
|
105
|
+
...(agreed ? {} : { required: false }),
|
|
106
|
+
} as ParamSpec;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
197
109
|
|
|
198
|
-
/**
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
*/
|
|
206
|
-
export function toGeneratorAnswers(
|
|
207
|
-
kind: CreateKind,
|
|
208
|
-
params: Readonly<Record<string, unknown>>,
|
|
209
|
-
): Record<string, unknown> {
|
|
210
|
-
const aliases = INCLUDE_FLAG_ALIASES[kind];
|
|
211
|
-
const answers: Record<string, unknown> = {};
|
|
212
|
-
for (const [key, value] of Object.entries(params)) {
|
|
213
|
-
answers[aliases[key] ?? key] = value;
|
|
110
|
+
/** The projected surface for a declared path (fails loud on a stale build). */
|
|
111
|
+
function surfaceFor(commandPath: string) {
|
|
112
|
+
const surface = CREATE_SURFACE[commandPath];
|
|
113
|
+
if (!surface) {
|
|
114
|
+
throw new Error(
|
|
115
|
+
`createSurface.generated.ts carries no entry for declared path "${commandPath}" — rerun the build`,
|
|
116
|
+
);
|
|
214
117
|
}
|
|
215
|
-
return
|
|
118
|
+
return surface;
|
|
216
119
|
}
|
|
217
120
|
|
|
218
121
|
const componentParams: ParamSpec[] = [
|
|
219
122
|
FRAMEWORK_PARAM,
|
|
220
|
-
|
|
221
|
-
...generatorToParams(SHARED_COMPONENT_MIRROR),
|
|
123
|
+
...unionComponentParams(),
|
|
222
124
|
];
|
|
223
|
-
const packageParams: ParamSpec[] = generatorToParams(
|
|
224
|
-
|
|
125
|
+
const packageParams: ParamSpec[] = generatorToParams(
|
|
126
|
+
surfaceFor("package").prompts,
|
|
127
|
+
);
|
|
128
|
+
const applicationParams: ParamSpec[] = generatorToParams(
|
|
129
|
+
surfaceFor("application/react").prompts,
|
|
130
|
+
);
|
|
225
131
|
|
|
226
132
|
/** The path param each noun jails (package writes into a name-derived subdir). */
|
|
227
133
|
const PATH_PARAM: Record<CreateKind, string | undefined> = {
|
|
@@ -230,27 +136,20 @@ const PATH_PARAM: Record<CreateKind, string | undefined> = {
|
|
|
230
136
|
application: "appPath",
|
|
231
137
|
};
|
|
232
138
|
|
|
139
|
+
/**
|
|
140
|
+
* The two value classes the shared prompt validators reject as workspace
|
|
141
|
+
* ESCAPES — absolute, and any `..` segment: exactly the jail's own
|
|
142
|
+
* non-symlink classes, which the round-9 reorder moved onto the validator
|
|
143
|
+
* tier. Used to keep the jail-tier `recovery` hint on those rejections.
|
|
144
|
+
*/
|
|
145
|
+
const isEscapeValue = (value: unknown): boolean =>
|
|
146
|
+
typeof value === "string" &&
|
|
147
|
+
(isAbsolute(value) || value.split(/[/\\]/).includes(".."));
|
|
148
|
+
|
|
233
149
|
// =============================================================================
|
|
234
150
|
// The lazy run — the one-line summon↔pragma seam per invocation
|
|
235
151
|
// =============================================================================
|
|
236
152
|
|
|
237
|
-
/**
|
|
238
|
-
* Build the `create` Task for one invocation: pick the generator, jail its
|
|
239
|
-
* output path, pre-validate flag/arg answers, pick the prompt strategy against
|
|
240
|
-
* the interaction context, wire `runtime.exec`, and return `execute`.
|
|
241
|
-
*
|
|
242
|
-
* @returns A `Promise<Task<GeneratorResult>>` (the union's third arm) the
|
|
243
|
-
* dispatcher/MCP handler awaits into a Task before interpreting.
|
|
244
|
-
*/
|
|
245
|
-
/**
|
|
246
|
-
* The standalone `bun build --compile` binary resolves every bundled module
|
|
247
|
-
* under the virtual `/$bunfs` filesystem — a marker absent from any source or
|
|
248
|
-
* `bun`-run module URL. `create component` is fully embedded and runs from the
|
|
249
|
-
* binary; `create package` / `create application` are NOT (application also
|
|
250
|
-
* copies non-`.ejs` assets), so they are gated to a source run below.
|
|
251
|
-
*/
|
|
252
|
-
const IS_COMPILED_BINARY = import.meta.url.includes("/$bunfs/");
|
|
253
|
-
|
|
254
153
|
/**
|
|
255
154
|
* True when a dynamic import failed because the module could not be RESOLVED.
|
|
256
155
|
* summon-core + the generators are now bundled into the binary, so this should
|
|
@@ -276,54 +175,33 @@ export function isModuleNotFound(cause: unknown): boolean {
|
|
|
276
175
|
}
|
|
277
176
|
|
|
278
177
|
/**
|
|
279
|
-
* Load the create runtime
|
|
280
|
-
* the generator selector + summon-core (STATIC dynamic imports, so bun's
|
|
281
|
-
* `--compile` bundler includes them — they stay behind this lazy boundary, so
|
|
282
|
-
* the fast paths and `create --yes` still load neither summon-core nor React).
|
|
178
|
+
* Load the create runtime — the generator selector and summon-core.
|
|
283
179
|
*
|
|
284
|
-
*
|
|
285
|
-
*
|
|
286
|
-
*
|
|
287
|
-
*
|
|
288
|
-
* evaluate the generator index first. In a source run the disk read wins and the
|
|
289
|
-
* manifest is inert.
|
|
180
|
+
* Lazy, and the specifiers stay STATIC so they remain analysable: importing
|
|
181
|
+
* these pulls summon-core and with it React, which must stay off `--help`,
|
|
182
|
+
* completion and every read. The generators load their own templates from their
|
|
183
|
+
* own packages on first `generate()`.
|
|
290
184
|
*
|
|
291
|
-
*
|
|
292
|
-
*
|
|
293
|
-
*
|
|
294
|
-
* {@link isModuleNotFound} turns into the same clean gate.
|
|
185
|
+
* A resolution failure means a broken or pruned install, and
|
|
186
|
+
* {@link isModuleNotFound} turns it into a clean refusal rather than an
|
|
187
|
+
* internal-bug report.
|
|
295
188
|
*/
|
|
296
|
-
async function loadCreateRuntime(
|
|
297
|
-
if (IS_COMPILED_BINARY && kind !== "component") {
|
|
298
|
-
throw new PragmaError({
|
|
299
|
-
code: "UNSUPPORTED",
|
|
300
|
-
message: `\`create ${kind}\` is not available in the compiled pragma binary yet — only \`create component\` is embedded. Run it from a source checkout, or use the \`summon\` CLI.`,
|
|
301
|
-
recovery: {
|
|
302
|
-
message: `Run \`create ${kind}\` from a source checkout, or use \`summon\`.`,
|
|
303
|
-
},
|
|
304
|
-
});
|
|
305
|
-
}
|
|
189
|
+
async function loadCreateRuntime() {
|
|
306
190
|
try {
|
|
307
|
-
|
|
308
|
-
const [{ setEmbeddedTemplates }, { TEMPLATES }] = await Promise.all([
|
|
309
|
-
import("@canonical/summon-component/embedded"),
|
|
310
|
-
import("./templates.embedded.generated.js"),
|
|
311
|
-
]);
|
|
312
|
-
setEmbeddedTemplates(TEMPLATES);
|
|
313
|
-
|
|
314
|
-
const [pick, summon] = await Promise.all([
|
|
315
|
-
import("./pickGenerator.js"),
|
|
191
|
+
const [summon, projection, pick] = await Promise.all([
|
|
316
192
|
import("@canonical/summon-core"),
|
|
193
|
+
import("@canonical/summon-core/projection"),
|
|
194
|
+
import("./pickGenerator.js"),
|
|
317
195
|
]);
|
|
318
|
-
return { pickGenerator: pick.pickGenerator, summon };
|
|
196
|
+
return { pickGenerator: pick.pickGenerator, summon, projection };
|
|
319
197
|
} catch (cause) {
|
|
320
198
|
if (isModuleNotFound(cause)) {
|
|
321
199
|
throw new PragmaError({
|
|
322
200
|
code: "UNSUPPORTED",
|
|
323
201
|
message:
|
|
324
|
-
"`create`
|
|
202
|
+
"`create` cannot load its generator runtime — the `@canonical/summon-*` packages it depends on are missing from this install.",
|
|
325
203
|
recovery: {
|
|
326
|
-
message:
|
|
204
|
+
message: `Reinstall ${BIN_NAME} to restore its generator dependencies.`,
|
|
327
205
|
},
|
|
328
206
|
});
|
|
329
207
|
}
|
|
@@ -331,50 +209,151 @@ async function loadCreateRuntime(kind: CreateKind) {
|
|
|
331
209
|
}
|
|
332
210
|
}
|
|
333
211
|
|
|
334
|
-
|
|
335
|
-
|
|
212
|
+
/** The create noun that declares a command path. */
|
|
213
|
+
function kindOf(commandPath: string): CreateKind {
|
|
214
|
+
for (const [kind, binding] of Object.entries(CREATE_GENERATORS)) {
|
|
215
|
+
if ((binding.paths as readonly string[]).includes(commandPath)) {
|
|
216
|
+
return kind as CreateKind;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
throw PragmaError.internalError(`undeclared command path ${commandPath}`);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Build the `create` Task for one invocation of a declared COMMAND PATH: pick
|
|
224
|
+
* the generator, pre-validate the provided answers (the shared validator
|
|
225
|
+
* tier), jail its output path (the host backstop, after validation),
|
|
226
|
+
* decide the interaction mode (the ONE shared decision — same function, same
|
|
227
|
+
* inputs as the summon bin), and return `execute` wired to the strategy the
|
|
228
|
+
* mode names.
|
|
229
|
+
*
|
|
230
|
+
* `params` are the EXPLICIT answers only (CLI flags/positional; MCP args
|
|
231
|
+
* carry schema defaults, which is that transport's contract). MCP keeps its
|
|
232
|
+
* plan-first/confirm path untouched — `decideInteraction` is CLI-only.
|
|
233
|
+
*
|
|
234
|
+
* @param commandPath - The declared command path (`component/react`, …).
|
|
235
|
+
* @param params - The provided answers for this invocation.
|
|
236
|
+
* @param rt - The pragma runtime.
|
|
237
|
+
* @returns A `Promise<Task<GeneratorResult>>` (the union's third arm) the
|
|
238
|
+
* dispatcher/MCP handler awaits into a Task before interpreting.
|
|
239
|
+
*/
|
|
240
|
+
export async function runCreate(
|
|
241
|
+
commandPath: string,
|
|
336
242
|
params: Record<string, unknown>,
|
|
337
243
|
rt: PragmaRuntime,
|
|
338
244
|
): Promise<Task<GeneratorResult>> {
|
|
339
|
-
// Lazy: importing these
|
|
340
|
-
//
|
|
341
|
-
//
|
|
342
|
-
|
|
343
|
-
const { pickGenerator, summon } = await loadCreateRuntime(kind);
|
|
245
|
+
// Lazy: importing these pulls summon-core (and with it React) — kept off every
|
|
246
|
+
// non-create path. The specifiers stay static so they remain analysable; the
|
|
247
|
+
// embedded `.ejs` manifest is injected here as the disk read's fallback.
|
|
248
|
+
const { pickGenerator, summon, projection } = await loadCreateRuntime();
|
|
344
249
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
// generator-facing `answers` bag so the generator prompt names stay stable.
|
|
348
|
-
const answers = toGeneratorAnswers(kind, params);
|
|
250
|
+
const generator = pickGenerator(commandPath);
|
|
251
|
+
const kind = kindOf(commandPath);
|
|
349
252
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
if (pathParam) assertInsideWorkspace(pathParam, answers[pathParam], rt.cwd);
|
|
253
|
+
// The tree segment is not an answer: drop a stray `framework` key so the
|
|
254
|
+
// generators (whose prompts never include it) see only their own answers.
|
|
255
|
+
const answers: Record<string, unknown> = { ...params };
|
|
256
|
+
delete answers.framework;
|
|
355
257
|
|
|
356
258
|
// Reject a flag/arg-provided answer that fails its prompt's own constraint,
|
|
357
|
-
// with a clean INVALID_INPUT (execute re-validates as a backstop).
|
|
259
|
+
// with a clean INVALID_INPUT (execute re-validates as a backstop). Runs
|
|
260
|
+
// BEFORE the jail: the path prompts' own validators reject absolute/`..`
|
|
261
|
+
// escapes, so an escaping output path fails the SHARED validator line in
|
|
262
|
+
// both hosts (the cross-CLI matrix) and the jail below stays the backstop
|
|
263
|
+
// its docblock claims.
|
|
264
|
+
const pathParam = PATH_PARAM[kind];
|
|
358
265
|
const invalid = summon.validateAnswers(generator.prompts, answers);
|
|
359
266
|
if (invalid !== null) {
|
|
360
|
-
|
|
267
|
+
// A rejection of the JAILED path param's escape classes (absolute /
|
|
268
|
+
// `..` — the two the round-9 reorder moved off the jail) attaches ONE
|
|
269
|
+
// workspace hint to BOTH classes — the jail's `..`-branch message —
|
|
270
|
+
// deliberately NOT reproducing the jail's per-branch hints (its
|
|
271
|
+
// absolute branch says "Use a path relative to the current
|
|
272
|
+
// directory."; those stay the jail's own, pinned in pathJail.test.ts).
|
|
273
|
+
// The message stays the validator's — the shared cross-host line. A
|
|
274
|
+
// non-escape rejection of the same param (e.g. casing) never carried
|
|
275
|
+
// recovery and still does not.
|
|
276
|
+
const escaped =
|
|
277
|
+
pathParam !== undefined &&
|
|
278
|
+
invalid.startsWith(`Invalid --${projection.toKebabCase(pathParam)} `) &&
|
|
279
|
+
isEscapeValue(answers[pathParam]);
|
|
280
|
+
throw new PragmaError({
|
|
281
|
+
code: "INVALID_INPUT",
|
|
282
|
+
message: invalid,
|
|
283
|
+
...(escaped
|
|
284
|
+
? { recovery: { message: "The path must stay inside the workspace." } }
|
|
285
|
+
: {}),
|
|
286
|
+
});
|
|
361
287
|
}
|
|
362
288
|
|
|
289
|
+
// SEC-2: reject a path escaping the workspace BEFORE any effect runs — the
|
|
290
|
+
// host-level backstop behind the validators, and the only tier that catches
|
|
291
|
+
// a symlink RESOLVING outside the workspace.
|
|
292
|
+
if (pathParam) assertInsideWorkspace(pathParam, answers[pathParam], rt.cwd);
|
|
293
|
+
|
|
294
|
+
// An ABSENT interaction context defaults to `yes: false` — nothing may
|
|
295
|
+
// silently auto-apply just because a caller forgot to say how it is driven.
|
|
363
296
|
const { isTTY, transport, yes, signal, abort } = rt.interaction ?? {
|
|
364
297
|
isTTY: false,
|
|
365
298
|
transport: "cli" as const,
|
|
366
|
-
yes:
|
|
299
|
+
yes: false,
|
|
367
300
|
};
|
|
368
301
|
const stamp = summon.createGeneratorStamp(generator);
|
|
369
302
|
|
|
370
|
-
//
|
|
371
|
-
//
|
|
372
|
-
|
|
373
|
-
|
|
303
|
+
// MCP: params-or-error, plan-first/confirm — untouched by the decision
|
|
304
|
+
// table (an MCP call is never a terminal session).
|
|
305
|
+
if (transport === "mcp") {
|
|
306
|
+
const prompt = summon.mcpPrompt(answers);
|
|
307
|
+
rt.exec = {
|
|
308
|
+
cwd: rt.cwd,
|
|
309
|
+
promptHandler: prompt,
|
|
310
|
+
onEffectStart: summon.createStampOnEffectStart(stamp),
|
|
311
|
+
onLog: (_level, message) => process.stderr.write(`${message}\n`),
|
|
312
|
+
signal,
|
|
313
|
+
};
|
|
314
|
+
return summon.execute(generator, { prompt, params: answers, signal });
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// The ONE interaction decision (R2) — the same function, over the same five
|
|
318
|
+
// inputs, as the summon bin. The mount refuses before ever loading this
|
|
319
|
+
// runtime; re-deriving here keeps direct kernel callers honest too.
|
|
320
|
+
const { mode } = projection.decideInteraction({
|
|
321
|
+
dryRun: rt.mutation?.preview === true,
|
|
322
|
+
undo: rt.mutation?.undo === true,
|
|
323
|
+
yes: yes === true,
|
|
324
|
+
isTTY: isTTY === true,
|
|
325
|
+
explicitComplete: projection.explicitAnswersComplete(
|
|
326
|
+
generator.prompts,
|
|
327
|
+
answers,
|
|
328
|
+
),
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
if (mode === "refuse") {
|
|
332
|
+
throw new PragmaError({
|
|
333
|
+
code: "INVALID_INPUT",
|
|
334
|
+
message: projection.refusalMessage(
|
|
335
|
+
projection.missingExplicitFlags(generator.prompts, answers),
|
|
336
|
+
),
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// Wizard: ask exactly the pending prompts — the provided answers are
|
|
341
|
+
// explicit and pre-seeded; `collectAnswers` skips them and evaluates each
|
|
342
|
+
// conditional against the answers as they land (wizard-script parity).
|
|
343
|
+
if (mode === "wizard") {
|
|
374
344
|
// `onCancel` (H2): an in-Ink Ctrl-C during execution aborts the run so the
|
|
375
345
|
// interpreter stops writing — raw mode swallows the SIGINT, so the wizard
|
|
376
346
|
// drives the abort. Shared with setup by construction.
|
|
377
|
-
|
|
347
|
+
// `cwd` also reaches the wizard: its confirm-gate preview reads the same
|
|
348
|
+
// jail-checked write root the interpreter resolves effect paths against.
|
|
349
|
+
const session = summon.inkPrompt(generator, {
|
|
350
|
+
signal,
|
|
351
|
+
onCancel: abort,
|
|
352
|
+
cwd: rt.cwd,
|
|
353
|
+
// Flag-provided answers reach the wizard too: without the seed the
|
|
354
|
+
// confirm gate previews with them missing (undefined paths, wrong plan).
|
|
355
|
+
initialAnswers: answers,
|
|
356
|
+
});
|
|
378
357
|
// Thread the per-call write root: the interpreter resolves the generator's
|
|
379
358
|
// relative output paths against `rt.cwd` — the SAME dir the SEC-2 jail
|
|
380
359
|
// validated above — so the write can never escape the checked directory.
|
|
@@ -397,13 +376,12 @@ async function runCreate(
|
|
|
397
376
|
});
|
|
398
377
|
}
|
|
399
378
|
|
|
400
|
-
//
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
// jail and the interpreter's effect-path base, atomically.
|
|
379
|
+
// run / batch-dry-run / batch-undo: flags + defaults, never a wizard —
|
|
380
|
+
// `autoPrompt` resolves each unprovided prompt to its default or fails
|
|
381
|
+
// loudly on a missing required answer. Same per-call write root as the
|
|
382
|
+
// wizard branch: `rt.cwd` feeds both the SEC-2 jail and the interpreter's
|
|
383
|
+
// effect-path base, atomically.
|
|
384
|
+
const prompt = summon.autoPrompt(answers);
|
|
407
385
|
rt.exec = {
|
|
408
386
|
cwd: rt.cwd,
|
|
409
387
|
promptHandler: prompt,
|
|
@@ -422,7 +400,7 @@ async function runCreate(
|
|
|
422
400
|
* `destructiveHint`, and MCP clients default an unset hint on a non-read-only
|
|
423
401
|
* tool to `true` — advertising create as destructive, the opposite of intent.
|
|
424
402
|
*/
|
|
425
|
-
const CREATE_CAPABILITY = {
|
|
403
|
+
export const CREATE_CAPABILITY = {
|
|
426
404
|
needsStore: false,
|
|
427
405
|
mutates: true,
|
|
428
406
|
destructive: false,
|
|
@@ -433,10 +411,42 @@ const CREATE_CAPABILITY = {
|
|
|
433
411
|
},
|
|
434
412
|
};
|
|
435
413
|
|
|
414
|
+
/**
|
|
415
|
+
* The shared output spec: the outcome formatters plus the dry-run seam.
|
|
416
|
+
*
|
|
417
|
+
* ONE constant because there are TWO specs per leaf — the binding-level verbs
|
|
418
|
+
* below (what MCP and the emitted surface read) and the per-leaf spec the
|
|
419
|
+
* mount synthesizes for `create component react …` (what a user actually
|
|
420
|
+
* runs). They describe the same generation, so a preview that reached only one
|
|
421
|
+
* of them would be a preview the CLI never showed.
|
|
422
|
+
*
|
|
423
|
+
* `formatPlan` renders through summon's own effect formatter instead of the
|
|
424
|
+
* kernel's raw dump, so the two bins describe the identical tree they write
|
|
425
|
+
* identically. `planData` stays unset — the effects the preview records ARE
|
|
426
|
+
* the plan — which is what leaves the `--format json` dry-run body exactly as
|
|
427
|
+
* it was.
|
|
428
|
+
*
|
|
429
|
+
* It resolves a PROMISE because {@link formatCreatePlan} loads that formatter
|
|
430
|
+
* behind a dynamic `import()`: this constant is reachable from the
|
|
431
|
+
* capabilities barrel, and the whole point of the lazy-dispatch boundary above
|
|
432
|
+
* is that nothing on that graph pays for summon-core on a `--help` spawn.
|
|
433
|
+
*/
|
|
434
|
+
export const CREATE_OUTPUT: VerbSpec<
|
|
435
|
+
Record<string, unknown>,
|
|
436
|
+
GeneratorResult
|
|
437
|
+
>["output"] = {
|
|
438
|
+
formatters: createFormatters,
|
|
439
|
+
formatPlan: (_planData, effects, verbose) =>
|
|
440
|
+
formatCreatePlan(effects, verbose),
|
|
441
|
+
};
|
|
442
|
+
|
|
436
443
|
/**
|
|
437
444
|
* Build a create verb. `run` presents `Promise<Task<R>>` through the `Task<R>`
|
|
438
445
|
* arm by an honest cast at this one site (mirroring `sources update`): a literal
|
|
439
446
|
* `Promise<Task<R>>` arm in the union would poison async read-verb inference.
|
|
447
|
+
*
|
|
448
|
+
* The binding-level `run` maps its kind (+ `framework` for component) onto
|
|
449
|
+
* the declared command path — the MCP transport's view of the tree.
|
|
440
450
|
*/
|
|
441
451
|
function createVerb(
|
|
442
452
|
kind: CreateKind,
|
|
@@ -448,46 +458,76 @@ function createVerb(
|
|
|
448
458
|
path: ["create", kind],
|
|
449
459
|
summary,
|
|
450
460
|
params,
|
|
451
|
-
output:
|
|
461
|
+
output: CREATE_OUTPUT,
|
|
452
462
|
examples,
|
|
453
463
|
capability: CREATE_CAPABILITY,
|
|
454
|
-
run: (params_, rt) =>
|
|
455
|
-
|
|
464
|
+
run: (params_, rt) => {
|
|
465
|
+
let commandPath: string;
|
|
466
|
+
if (kind === "component") {
|
|
467
|
+
const framework = String(params_.framework ?? "");
|
|
468
|
+
if (!COMPONENT_FRAMEWORKS.includes(framework)) {
|
|
469
|
+
throw PragmaError.invalidInput("framework", framework, {
|
|
470
|
+
validOptions: [...COMPONENT_FRAMEWORKS],
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
commandPath = `component/${framework}`;
|
|
474
|
+
} else {
|
|
475
|
+
commandPath = CREATE_GENERATORS[kind].paths[0];
|
|
476
|
+
}
|
|
477
|
+
return runCreate(
|
|
478
|
+
commandPath,
|
|
479
|
+
params_,
|
|
480
|
+
rt,
|
|
481
|
+
) as unknown as Task<GeneratorResult>;
|
|
482
|
+
},
|
|
456
483
|
};
|
|
457
484
|
}
|
|
458
485
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
)
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
486
|
+
/**
|
|
487
|
+
* The `create` verbs, one per declared generator binding — so adding a binding
|
|
488
|
+
* to {@link CREATE_GENERATORS} without surfacing it is a type error rather than
|
|
489
|
+
* a silent no-op. Key order is authoring order, which `index.ts` preserves into
|
|
490
|
+
* the command tree, `--help` and the emitted surface.
|
|
491
|
+
*/
|
|
492
|
+
export const createVerbs: Record<
|
|
493
|
+
CreateKind,
|
|
494
|
+
VerbSpec<Record<string, unknown>, GeneratorResult>
|
|
495
|
+
> = {
|
|
496
|
+
component: createVerb(
|
|
497
|
+
"component",
|
|
498
|
+
"Scaffold a React, Svelte, or Lit component.",
|
|
499
|
+
componentParams,
|
|
500
|
+
[
|
|
501
|
+
{
|
|
502
|
+
cmd: `${BIN_NAME} create component react src/components/Button`,
|
|
503
|
+
note: "React component with tests, stories, and styles",
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
cmd: `${BIN_NAME} create component svelte src/lib/Card --dry-run`,
|
|
507
|
+
note: "preview the files without writing",
|
|
508
|
+
},
|
|
509
|
+
],
|
|
510
|
+
),
|
|
511
|
+
package: createVerb(
|
|
512
|
+
"package",
|
|
513
|
+
"Scaffold a new npm package for the monorepo.",
|
|
514
|
+
packageParams,
|
|
515
|
+
[
|
|
516
|
+
{
|
|
517
|
+
cmd: `${BIN_NAME} create package --name @canonical/my-lib --type library`,
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
cmd: `${BIN_NAME} create package --name @canonical/my-tool --no-run-install`,
|
|
521
|
+
},
|
|
522
|
+
],
|
|
523
|
+
),
|
|
524
|
+
application: createVerb(
|
|
525
|
+
"application",
|
|
526
|
+
"Scaffold a full React application with SSR and routing.",
|
|
527
|
+
applicationParams,
|
|
528
|
+
[
|
|
529
|
+
{ cmd: `${BIN_NAME} create application react my-app` },
|
|
530
|
+
{ cmd: `${BIN_NAME} create application react my-app --relay` },
|
|
531
|
+
],
|
|
532
|
+
),
|
|
533
|
+
};
|