@canonical/pragma-cli 0.34.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +293 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +83 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +66 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +53 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +168 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +193 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +334 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +263 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +195 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +82 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +25 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +197 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +85 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +20 -22
- package/pragma.conf.ts +249 -60
- package/src/bin.ts +267 -82
- package/src/capabilities/block.parity.test.ts +6 -3
- package/src/capabilities/capabilities/capabilities.render.ts +1 -1
- package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
- package/src/capabilities/capabilities/catalog.ts +3 -3
- package/src/capabilities/capabilities/hints.ts +32 -7
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +35 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +4 -4
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/config/collectConfigShow.ts +3 -3
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -10
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +8 -7
- package/src/capabilities/config/show.render.ts +1 -1
- package/src/capabilities/config/show.verb.ts +9 -6
- package/src/capabilities/config/types.ts +18 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +25 -11
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +36 -61
- package/src/capabilities/create/create.mcp.test.ts +89 -5
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +433 -219
- package/src/capabilities/create/create.verb.ts +297 -328
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +7 -4
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +23 -35
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +20 -0
- package/src/capabilities/distribution.test.ts +3 -1
- package/src/capabilities/distribution.ts +10 -15
- package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +6 -4
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +18 -7
- package/src/capabilities/doctor/doctor.render.ts +43 -19
- package/src/capabilities/doctor/doctor.test.ts +123 -34
- package/src/capabilities/doctor/doctor.verb.ts +3 -3
- package/src/capabilities/doctor/runChecks.ts +62 -63
- package/src/capabilities/doctor/types.ts +20 -4
- package/src/capabilities/emptyRecovery.test.ts +13 -8
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -6
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +3 -3
- package/src/capabilities/graph/runQuery.ts +2 -3
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/info/collectInfo.ts +5 -4
- package/src/capabilities/info/info.render.ts +1 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/lazy.test.ts +32 -0
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +27 -68
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +4 -5
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +396 -326
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +223 -71
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +37 -5
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +3 -4
- package/src/capabilities/sources/collectStatus.ts +7 -2
- package/src/capabilities/sources/index.ts +1 -1
- package/src/capabilities/sources/installSkills.ts +84 -7
- package/src/capabilities/sources/runUpdate.ts +53 -21
- package/src/capabilities/sources/sources.test.ts +154 -2
- package/src/capabilities/sources/status.render.ts +1 -1
- package/src/capabilities/sources/status.verb.ts +1 -1
- package/src/capabilities/sources/update.render.ts +1 -1
- package/src/capabilities/sources/update.verb.ts +1 -1
- package/src/capabilities/surface.test.ts +134 -17
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.ts +31 -1
- package/src/identity.test.ts +40 -25
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +1 -1
- package/src/kernel/completion/entitySource.test.ts +1 -1
- package/src/kernel/completion/entitySource.ts +21 -8
- package/src/kernel/completion/model.test.ts +164 -12
- package/src/kernel/completion/model.ts +94 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +34 -26
- package/src/kernel/completion/shellDrive.test.ts +28 -9
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +7 -0
- package/src/kernel/config/defaults.test.ts +25 -2
- package/src/kernel/config/defaults.ts +4 -3
- package/src/kernel/config/evaluateProjectConfig.ts +31 -8
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -88
- package/src/kernel/config/index.ts +1 -1
- package/src/kernel/config/readConfig.test.ts +6 -3
- package/src/kernel/config/readConfig.ts +1 -1
- package/src/kernel/config/schema.ts +3 -1
- package/src/kernel/config/types.ts +3 -1
- package/src/kernel/copy.test.ts +34 -4
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +5 -2
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -5
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/recovery.ts +14 -0
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +21 -1
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +130 -1
- package/src/kernel/packs/compile.ts +93 -3
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +66 -14
- package/src/kernel/packs/renderPack.ts +24 -5
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +112 -18
- package/src/kernel/packs/runBodies.ts +2 -3
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +18 -1
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +42 -3
- package/src/kernel/packs/types.ts +13 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +147 -12
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +160 -3
- package/src/kernel/project/cli/dispatch.ts +222 -42
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +130 -30
- package/src/kernel/project/cli/helpFormat.ts +13 -0
- package/src/kernel/project/cli/rootHelp.ts +41 -12
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +7 -4
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +2 -2
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +5 -2
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/source.ts +2 -2
- package/src/kernel/project/mcp/registerVerb.ts +35 -9
- package/src/kernel/project/mcp/serve.ts +2 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/renderers.test.ts +243 -6
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded.ts +3 -3
- package/src/kernel/runtime/graphpack/manifest.ts +1 -1
- package/src/kernel/runtime/graphpack/read.ts +1 -2
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +472 -28
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +2 -2
- package/src/kernel/runtime/refs/resolve.ts +4 -4
- package/src/kernel/runtime/storeReadiness.ts +1 -2
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
- package/src/kernel/spec/emitReference.ts +105 -30
- package/src/kernel/spec/emitSurface.ts +48 -6
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/types.ts +248 -4
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/journeys.cli.test.ts +1 -1
- package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.packageStories.test.ts +4 -4
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +1 -1
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/graph/canonical.ts +88 -2
- package/src/testing/fixtures/graph/defaultPack.ts +1 -1
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/projectMcp.ts +32 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +20 -9
- package/src/testing/perf/budgets.ts +58 -9
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +505 -23
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/dist/pragma +0 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
- package/src/capabilities/create/templates.embedded.generated.ts +0 -28
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -1,230 +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
31
|
import { BIN_NAME } from "../../constants.js";
|
|
19
|
-
import { PragmaError } from "../../kernel/error/
|
|
20
|
-
import type { PragmaRuntime } from "../../kernel/runtime/
|
|
21
|
-
import type { ParamSpec, VerbSpec } from "../../kernel/spec/
|
|
22
|
-
import { CREATE_GENERATORS } from "./constants.js";
|
|
23
|
-
import { createFormatters } from "./create.render.js";
|
|
24
|
-
import {
|
|
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";
|
|
25
39
|
import { assertInsideWorkspace } from "./pathJail.js";
|
|
26
40
|
import type { CreateKind } from "./types.js";
|
|
27
41
|
|
|
28
42
|
// =============================================================================
|
|
29
|
-
//
|
|
43
|
+
// Params, derived from the projected surface (createSurface.generated.ts)
|
|
30
44
|
// =============================================================================
|
|
31
45
|
|
|
32
|
-
/**
|
|
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
|
+
*/
|
|
33
52
|
const FRAMEWORK_PARAM: ParamSpec = {
|
|
34
53
|
kind: "enum",
|
|
35
54
|
name: "framework",
|
|
36
|
-
doc: "Component framework.",
|
|
37
|
-
values:
|
|
38
|
-
|
|
39
|
-
default: CREATE_GENERATORS.component.frameworks[0],
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* `componentPath` — positional, and deliberately WITHOUT a ParamSpec default so
|
|
44
|
-
* the selected framework's own prompt default applies (react vs svelte/lit
|
|
45
|
-
* differ); `required: false` keeps it optional despite having no default here.
|
|
46
|
-
*/
|
|
47
|
-
const COMPONENT_PATH_PARAM: ParamSpec = {
|
|
48
|
-
kind: "string",
|
|
49
|
-
name: "componentPath",
|
|
50
|
-
doc: "Component path (its final segment is the PascalCase component name).",
|
|
51
|
-
required: false,
|
|
55
|
+
doc: "Component framework — the tree segment (`create component <framework>`).",
|
|
56
|
+
values: COMPONENT_FRAMEWORKS,
|
|
57
|
+
required: true,
|
|
52
58
|
positional: true,
|
|
53
|
-
complete: { kind: "files" },
|
|
54
59
|
};
|
|
55
60
|
|
|
56
|
-
const SHARED_COMPONENT_MIRROR: PromptDefinition[] = [
|
|
57
|
-
{
|
|
58
|
-
name: "withStyles",
|
|
59
|
-
type: "confirm",
|
|
60
|
-
message: "Include styles?",
|
|
61
|
-
default: true,
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
name: "withStories",
|
|
65
|
-
type: "confirm",
|
|
66
|
-
message: "Include Storybook stories?",
|
|
67
|
-
default: true,
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
name: "withSsrTests",
|
|
71
|
-
type: "confirm",
|
|
72
|
-
message: "Include SSR tests?",
|
|
73
|
-
default: true,
|
|
74
|
-
},
|
|
75
|
-
];
|
|
76
|
-
|
|
77
|
-
const PACKAGE_MIRROR: PromptDefinition[] = [
|
|
78
|
-
{
|
|
79
|
-
name: "name",
|
|
80
|
-
type: "text",
|
|
81
|
-
message: "Package name:",
|
|
82
|
-
default: "@canonical/my-package",
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
name: "type",
|
|
86
|
-
type: "select",
|
|
87
|
-
message: "Package type:",
|
|
88
|
-
choices: [
|
|
89
|
-
{ label: "tool-ts", value: "tool-ts" },
|
|
90
|
-
{ label: "library", value: "library" },
|
|
91
|
-
{ label: "css", value: "css" },
|
|
92
|
-
],
|
|
93
|
-
default: "tool-ts",
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
name: "description",
|
|
97
|
-
type: "text",
|
|
98
|
-
message: "Package description:",
|
|
99
|
-
default: "",
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
name: "withReact",
|
|
103
|
-
type: "confirm",
|
|
104
|
-
message: "Include React dependencies?",
|
|
105
|
-
default: false,
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
name: "withStorybook",
|
|
109
|
-
type: "confirm",
|
|
110
|
-
message: "Include Storybook setup?",
|
|
111
|
-
default: false,
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
name: "withCli",
|
|
115
|
-
type: "confirm",
|
|
116
|
-
message: "Include a CLI binary entry point?",
|
|
117
|
-
default: false,
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
name: "withPrTemplate",
|
|
121
|
-
type: "confirm",
|
|
122
|
-
message: "Include a PR template?",
|
|
123
|
-
default: false,
|
|
124
|
-
},
|
|
125
|
-
// Opt-in (default false): the grammar has no `--no-` form, so a default-true
|
|
126
|
-
// boolean could never be turned off. `--run-install` enables it.
|
|
127
|
-
{
|
|
128
|
-
name: "runInstall",
|
|
129
|
-
type: "confirm",
|
|
130
|
-
message: "Run the package manager install after creation?",
|
|
131
|
-
default: false,
|
|
132
|
-
},
|
|
133
|
-
];
|
|
134
|
-
|
|
135
|
-
// The include-flag prompts carry the CLI grammar's `--with-X` names
|
|
136
|
-
// (`withSsr`/`withRouter`/`withForms`/`withRelay`, AV-228 B8) rather than the
|
|
137
|
-
// summon generator's bare prompt names (`ssr`/`router`/`forms`/`relay`). {@link
|
|
138
|
-
// INCLUDE_FLAG_ALIASES} maps them back at the CLI↔generator boundary so the
|
|
139
|
-
// generator prompt names — and their embedded templates + byte-equality
|
|
140
|
-
// goldens — stay stable. `--run-install` (default false) is an action flag, not
|
|
141
|
-
// an include, so it keeps its spelling.
|
|
142
|
-
const APPLICATION_MIRROR: PromptDefinition[] = [
|
|
143
|
-
{
|
|
144
|
-
name: "appPath",
|
|
145
|
-
type: "text",
|
|
146
|
-
message: "Application directory:",
|
|
147
|
-
default: "my-app",
|
|
148
|
-
positional: true,
|
|
149
|
-
},
|
|
150
|
-
{ name: "withSsr", type: "confirm", message: "Include SSR?", default: true },
|
|
151
|
-
{
|
|
152
|
-
name: "withRouter",
|
|
153
|
-
type: "confirm",
|
|
154
|
-
message: "Include router?",
|
|
155
|
-
default: true,
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
name: "withForms",
|
|
159
|
-
type: "confirm",
|
|
160
|
-
message: "Include form components?",
|
|
161
|
-
default: true,
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
name: "withRelay",
|
|
165
|
-
type: "confirm",
|
|
166
|
-
message: "Include a Relay (GraphQL) data layer?",
|
|
167
|
-
default: false,
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
name: "runInstall",
|
|
171
|
-
type: "confirm",
|
|
172
|
-
message: "Install dependencies now?",
|
|
173
|
-
default: false,
|
|
174
|
-
},
|
|
175
|
-
];
|
|
176
|
-
|
|
177
61
|
/**
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
* templates/goldens) untouched. Component and package already use `--with-X`
|
|
185
|
-
* 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.
|
|
186
68
|
*/
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
};
|
|
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
|
+
}
|
|
200
109
|
|
|
201
|
-
/**
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
*/
|
|
209
|
-
export function toGeneratorAnswers(
|
|
210
|
-
kind: CreateKind,
|
|
211
|
-
params: Readonly<Record<string, unknown>>,
|
|
212
|
-
): Record<string, unknown> {
|
|
213
|
-
const aliases = INCLUDE_FLAG_ALIASES[kind];
|
|
214
|
-
const answers: Record<string, unknown> = {};
|
|
215
|
-
for (const [key, value] of Object.entries(params)) {
|
|
216
|
-
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
|
+
);
|
|
217
117
|
}
|
|
218
|
-
return
|
|
118
|
+
return surface;
|
|
219
119
|
}
|
|
220
120
|
|
|
221
121
|
const componentParams: ParamSpec[] = [
|
|
222
122
|
FRAMEWORK_PARAM,
|
|
223
|
-
|
|
224
|
-
...generatorToParams(SHARED_COMPONENT_MIRROR),
|
|
123
|
+
...unionComponentParams(),
|
|
225
124
|
];
|
|
226
|
-
const packageParams: ParamSpec[] = generatorToParams(
|
|
227
|
-
|
|
125
|
+
const packageParams: ParamSpec[] = generatorToParams(
|
|
126
|
+
surfaceFor("package").prompts,
|
|
127
|
+
);
|
|
128
|
+
const applicationParams: ParamSpec[] = generatorToParams(
|
|
129
|
+
surfaceFor("application/react").prompts,
|
|
130
|
+
);
|
|
228
131
|
|
|
229
132
|
/** The path param each noun jails (package writes into a name-derived subdir). */
|
|
230
133
|
const PATH_PARAM: Record<CreateKind, string | undefined> = {
|
|
@@ -233,23 +136,20 @@ const PATH_PARAM: Record<CreateKind, string | undefined> = {
|
|
|
233
136
|
application: "appPath",
|
|
234
137
|
};
|
|
235
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
|
+
|
|
236
149
|
// =============================================================================
|
|
237
150
|
// The lazy run — the one-line summon↔pragma seam per invocation
|
|
238
151
|
// =============================================================================
|
|
239
152
|
|
|
240
|
-
/**
|
|
241
|
-
* The standalone `bun build --compile` binary resolves every bundled module
|
|
242
|
-
* under the virtual `/$bunfs` filesystem — a marker absent from any source or
|
|
243
|
-
* `bun`-run module URL. Only a generator that routes its template reads through
|
|
244
|
-
* the embedded manifest can run there
|
|
245
|
-
* (`CREATE_GENERATORS[kind].readsEmbeddedTemplates`);
|
|
246
|
-
* the others call `template({ source })`, which falls through to
|
|
247
|
-
* `readFile(source)` and dies with `ENOENT … /$bunfs/…` after `mkdir` has
|
|
248
|
-
* already run, leaving partially-created files behind.
|
|
249
|
-
* `compiledCreate.subprocess.test.ts` pins the refusal AND the empty cwd.
|
|
250
|
-
*/
|
|
251
|
-
const IS_COMPILED_BINARY = import.meta.url.includes("/$bunfs/");
|
|
252
|
-
|
|
253
153
|
/**
|
|
254
154
|
* True when a dynamic import failed because the module could not be RESOLVED.
|
|
255
155
|
* summon-core + the generators are now bundled into the binary, so this should
|
|
@@ -275,53 +175,33 @@ export function isModuleNotFound(cause: unknown): boolean {
|
|
|
275
175
|
}
|
|
276
176
|
|
|
277
177
|
/**
|
|
278
|
-
* Load the create runtime
|
|
279
|
-
* the generator selector + summon-core (STATIC dynamic imports, so bun's
|
|
280
|
-
* `--compile` bundler includes them — they stay behind this lazy boundary, so
|
|
281
|
-
* the fast paths and `create --yes` still load neither summon-core nor React).
|
|
178
|
+
* Load the create runtime — the generator selector and summon-core.
|
|
282
179
|
*
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
*
|
|
286
|
-
*
|
|
287
|
-
* generator index first. In a source run the disk read wins and the manifest is
|
|
288
|
-
* 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()`.
|
|
289
184
|
*
|
|
290
|
-
* A
|
|
291
|
-
*
|
|
292
|
-
*
|
|
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.
|
|
293
188
|
*/
|
|
294
|
-
async function loadCreateRuntime(
|
|
295
|
-
if (IS_COMPILED_BINARY && !CREATE_GENERATORS[kind].readsEmbeddedTemplates) {
|
|
296
|
-
throw new PragmaError({
|
|
297
|
-
code: "UNSUPPORTED",
|
|
298
|
-
message: `\`create ${kind}\` is not available in the compiled ${BIN_NAME} binary — ${SOURCE_ONLY_REASON}. Run it from a source checkout, or use the \`summon\` CLI.`,
|
|
299
|
-
recovery: {
|
|
300
|
-
message: `Run \`create ${kind}\` from a source checkout, or use \`summon\`.`,
|
|
301
|
-
},
|
|
302
|
-
});
|
|
303
|
-
}
|
|
189
|
+
async function loadCreateRuntime() {
|
|
304
190
|
try {
|
|
305
|
-
|
|
306
|
-
const [{ setEmbeddedTemplates }, { TEMPLATES }] = await Promise.all([
|
|
307
|
-
import("@canonical/summon-component/embedded"),
|
|
308
|
-
import("./templates.embedded.generated.js"),
|
|
309
|
-
]);
|
|
310
|
-
setEmbeddedTemplates(TEMPLATES);
|
|
311
|
-
|
|
312
|
-
const [pick, summon] = await Promise.all([
|
|
313
|
-
import("./pickGenerator.js"),
|
|
191
|
+
const [summon, projection, pick] = await Promise.all([
|
|
314
192
|
import("@canonical/summon-core"),
|
|
193
|
+
import("@canonical/summon-core/projection"),
|
|
194
|
+
import("./pickGenerator.js"),
|
|
315
195
|
]);
|
|
316
|
-
return { pickGenerator: pick.pickGenerator, summon };
|
|
196
|
+
return { pickGenerator: pick.pickGenerator, summon, projection };
|
|
317
197
|
} catch (cause) {
|
|
318
198
|
if (isModuleNotFound(cause)) {
|
|
319
199
|
throw new PragmaError({
|
|
320
200
|
code: "UNSUPPORTED",
|
|
321
201
|
message:
|
|
322
|
-
"`create`
|
|
202
|
+
"`create` cannot load its generator runtime — the `@canonical/summon-*` packages it depends on are missing from this install.",
|
|
323
203
|
recovery: {
|
|
324
|
-
message:
|
|
204
|
+
message: `Reinstall ${BIN_NAME} to restore its generator dependencies.`,
|
|
325
205
|
},
|
|
326
206
|
});
|
|
327
207
|
}
|
|
@@ -329,57 +209,138 @@ async function loadCreateRuntime(kind: CreateKind) {
|
|
|
329
209
|
}
|
|
330
210
|
}
|
|
331
211
|
|
|
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
|
+
|
|
332
222
|
/**
|
|
333
|
-
* Build the `create` Task for one invocation
|
|
334
|
-
*
|
|
335
|
-
*
|
|
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.
|
|
336
229
|
*
|
|
337
|
-
*
|
|
338
|
-
*
|
|
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.
|
|
339
236
|
* @param rt - The pragma runtime.
|
|
340
237
|
* @returns A `Promise<Task<GeneratorResult>>` (the union's third arm) the
|
|
341
238
|
* dispatcher/MCP handler awaits into a Task before interpreting.
|
|
342
239
|
*/
|
|
343
|
-
async function runCreate(
|
|
344
|
-
|
|
240
|
+
export async function runCreate(
|
|
241
|
+
commandPath: string,
|
|
345
242
|
params: Record<string, unknown>,
|
|
346
243
|
rt: PragmaRuntime,
|
|
347
244
|
): Promise<Task<GeneratorResult>> {
|
|
348
245
|
// Lazy: importing these pulls summon-core (and with it React) — kept off every
|
|
349
|
-
// non-create path.
|
|
350
|
-
// embedded `.ejs` manifest is injected here
|
|
351
|
-
|
|
352
|
-
const { pickGenerator, summon } = await loadCreateRuntime(kind);
|
|
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();
|
|
353
249
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
// generator-facing `answers` bag so the generator prompt names stay stable.
|
|
357
|
-
const answers = toGeneratorAnswers(kind, params);
|
|
250
|
+
const generator = pickGenerator(commandPath);
|
|
251
|
+
const kind = kindOf(commandPath);
|
|
358
252
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
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;
|
|
364
257
|
|
|
365
258
|
// Reject a flag/arg-provided answer that fails its prompt's own constraint,
|
|
366
|
-
// 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];
|
|
367
265
|
const invalid = summon.validateAnswers(generator.prompts, answers);
|
|
368
266
|
if (invalid !== null) {
|
|
369
|
-
|
|
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
|
+
});
|
|
370
287
|
}
|
|
371
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.
|
|
372
296
|
const { isTTY, transport, yes, signal, abort } = rt.interaction ?? {
|
|
373
297
|
isTTY: false,
|
|
374
298
|
transport: "cli" as const,
|
|
375
|
-
yes:
|
|
299
|
+
yes: false,
|
|
376
300
|
};
|
|
377
301
|
const stamp = summon.createGeneratorStamp(generator);
|
|
378
302
|
|
|
379
|
-
//
|
|
380
|
-
//
|
|
381
|
-
|
|
382
|
-
|
|
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") {
|
|
383
344
|
// `onCancel` (H2): an in-Ink Ctrl-C during execution aborts the run so the
|
|
384
345
|
// interpreter stops writing — raw mode swallows the SIGINT, so the wizard
|
|
385
346
|
// drives the abort. Shared with setup by construction.
|
|
@@ -389,6 +350,9 @@ async function runCreate(
|
|
|
389
350
|
signal,
|
|
390
351
|
onCancel: abort,
|
|
391
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,
|
|
392
356
|
});
|
|
393
357
|
// Thread the per-call write root: the interpreter resolves the generator's
|
|
394
358
|
// relative output paths against `rt.cwd` — the SAME dir the SEC-2 jail
|
|
@@ -412,13 +376,12 @@ async function runCreate(
|
|
|
412
376
|
});
|
|
413
377
|
}
|
|
414
378
|
|
|
415
|
-
//
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
// 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);
|
|
422
385
|
rt.exec = {
|
|
423
386
|
cwd: rt.cwd,
|
|
424
387
|
promptHandler: prompt,
|
|
@@ -437,7 +400,7 @@ async function runCreate(
|
|
|
437
400
|
* `destructiveHint`, and MCP clients default an unset hint on a non-read-only
|
|
438
401
|
* tool to `true` — advertising create as destructive, the opposite of intent.
|
|
439
402
|
*/
|
|
440
|
-
const CREATE_CAPABILITY = {
|
|
403
|
+
export const CREATE_CAPABILITY = {
|
|
441
404
|
needsStore: false,
|
|
442
405
|
mutates: true,
|
|
443
406
|
destructive: false,
|
|
@@ -449,50 +412,41 @@ const CREATE_CAPABILITY = {
|
|
|
449
412
|
};
|
|
450
413
|
|
|
451
414
|
/**
|
|
452
|
-
*
|
|
453
|
-
* documentation below and by {@link loadCreateRuntime}'s `UNSUPPORTED` refusal,
|
|
454
|
-
* so what the reference promises and what the binary does cannot disagree.
|
|
455
|
-
*/
|
|
456
|
-
const SOURCE_ONLY_REASON =
|
|
457
|
-
"its generator reads templates from disk, which the binary does not carry";
|
|
458
|
-
|
|
459
|
-
/**
|
|
460
|
-
* The published caveat for a binding the compiled binary cannot run. DERIVED
|
|
461
|
-
* from `CREATE_GENERATORS[kind].readsEmbeddedTemplates` — flipping that bit
|
|
462
|
-
* moves the caveat, `docs/reference/*.md`, and `create.test.ts`'s binding
|
|
463
|
-
* assertion together.
|
|
415
|
+
* The shared output spec: the outcome formatters plus the dry-run seam.
|
|
464
416
|
*
|
|
465
|
-
*
|
|
466
|
-
*
|
|
467
|
-
*
|
|
468
|
-
*
|
|
469
|
-
*
|
|
470
|
-
* undiscoverable. The repeated sentence in `commands.md`'s section is the
|
|
471
|
-
* cheaper of the two costs.
|
|
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.
|
|
472
422
|
*
|
|
473
|
-
*
|
|
474
|
-
*
|
|
475
|
-
*
|
|
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.
|
|
476
428
|
*
|
|
477
|
-
* @
|
|
478
|
-
*
|
|
479
|
-
*
|
|
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.
|
|
480
433
|
*/
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
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
|
+
};
|
|
488
442
|
|
|
489
443
|
/**
|
|
490
444
|
* Build a create verb. `run` presents `Promise<Task<R>>` through the `Task<R>`
|
|
491
445
|
* arm by an honest cast at this one site (mirroring `sources update`): a literal
|
|
492
446
|
* `Promise<Task<R>>` arm in the union would poison async read-verb inference.
|
|
493
447
|
*
|
|
494
|
-
*
|
|
495
|
-
*
|
|
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.
|
|
496
450
|
*/
|
|
497
451
|
function createVerb(
|
|
498
452
|
kind: CreateKind,
|
|
@@ -500,17 +454,32 @@ function createVerb(
|
|
|
500
454
|
params: ParamSpec[],
|
|
501
455
|
examples: VerbSpec["examples"],
|
|
502
456
|
): VerbSpec<Record<string, unknown>, GeneratorResult> {
|
|
503
|
-
const doc = buildAvailabilityDoc(kind, summary);
|
|
504
457
|
return {
|
|
505
458
|
path: ["create", kind],
|
|
506
|
-
summary
|
|
507
|
-
...(doc ? { doc } : {}),
|
|
459
|
+
summary,
|
|
508
460
|
params,
|
|
509
|
-
output:
|
|
461
|
+
output: CREATE_OUTPUT,
|
|
510
462
|
examples,
|
|
511
463
|
capability: CREATE_CAPABILITY,
|
|
512
|
-
run: (params_, rt) =>
|
|
513
|
-
|
|
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
|
+
},
|
|
514
483
|
};
|
|
515
484
|
}
|
|
516
485
|
|
|
@@ -530,11 +499,11 @@ export const createVerbs: Record<
|
|
|
530
499
|
componentParams,
|
|
531
500
|
[
|
|
532
501
|
{
|
|
533
|
-
cmd: `${BIN_NAME} create component src/components/Button
|
|
502
|
+
cmd: `${BIN_NAME} create component react src/components/Button`,
|
|
534
503
|
note: "React component with tests, stories, and styles",
|
|
535
504
|
},
|
|
536
505
|
{
|
|
537
|
-
cmd: `${BIN_NAME} create component src/lib/Card --
|
|
506
|
+
cmd: `${BIN_NAME} create component svelte src/lib/Card --dry-run`,
|
|
538
507
|
note: "preview the files without writing",
|
|
539
508
|
},
|
|
540
509
|
],
|
|
@@ -548,7 +517,7 @@ export const createVerbs: Record<
|
|
|
548
517
|
cmd: `${BIN_NAME} create package --name @canonical/my-lib --type library`,
|
|
549
518
|
},
|
|
550
519
|
{
|
|
551
|
-
cmd: `${BIN_NAME} create package --name @canonical/my-tool --run-install`,
|
|
520
|
+
cmd: `${BIN_NAME} create package --name @canonical/my-tool --no-run-install`,
|
|
552
521
|
},
|
|
553
522
|
],
|
|
554
523
|
),
|
|
@@ -557,8 +526,8 @@ export const createVerbs: Record<
|
|
|
557
526
|
"Scaffold a full React application with SSR and routing.",
|
|
558
527
|
applicationParams,
|
|
559
528
|
[
|
|
560
|
-
{ cmd: `${BIN_NAME} create application my-app` },
|
|
561
|
-
{ cmd: `${BIN_NAME} create application my-app --
|
|
529
|
+
{ cmd: `${BIN_NAME} create application react my-app` },
|
|
530
|
+
{ cmd: `${BIN_NAME} create application react my-app --relay` },
|
|
562
531
|
],
|
|
563
532
|
),
|
|
564
533
|
};
|