@canonical/pragma-cli 0.34.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +293 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +92 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +83 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +66 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +53 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +168 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +193 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +334 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +263 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +195 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +99 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +44 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +82 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +25 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +217 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +197 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +300 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +85 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +20 -22
- package/pragma.conf.ts +249 -60
- package/src/bin.ts +267 -82
- package/src/capabilities/block.parity.test.ts +6 -3
- package/src/capabilities/capabilities/capabilities.render.ts +1 -1
- package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
- package/src/capabilities/capabilities/catalog.ts +3 -3
- package/src/capabilities/capabilities/hints.ts +32 -7
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +35 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +4 -4
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/config/collectConfigShow.ts +3 -3
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -10
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +8 -7
- package/src/capabilities/config/show.render.ts +1 -1
- package/src/capabilities/config/show.verb.ts +9 -6
- package/src/capabilities/config/types.ts +18 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +25 -11
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +36 -61
- package/src/capabilities/create/create.mcp.test.ts +89 -5
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +433 -219
- package/src/capabilities/create/create.verb.ts +297 -328
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +7 -4
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +23 -35
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +20 -0
- package/src/capabilities/distribution.test.ts +3 -1
- package/src/capabilities/distribution.ts +10 -15
- package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +6 -4
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +18 -7
- package/src/capabilities/doctor/doctor.render.ts +43 -19
- package/src/capabilities/doctor/doctor.test.ts +123 -34
- package/src/capabilities/doctor/doctor.verb.ts +3 -3
- package/src/capabilities/doctor/runChecks.ts +62 -63
- package/src/capabilities/doctor/types.ts +20 -4
- package/src/capabilities/emptyRecovery.test.ts +13 -8
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -6
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +3 -3
- package/src/capabilities/graph/runQuery.ts +2 -3
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/info/collectInfo.ts +5 -4
- package/src/capabilities/info/info.render.ts +1 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/lazy.test.ts +32 -0
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +27 -68
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +4 -5
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +396 -326
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +223 -71
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +37 -5
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +3 -4
- package/src/capabilities/sources/collectStatus.ts +7 -2
- package/src/capabilities/sources/index.ts +1 -1
- package/src/capabilities/sources/installSkills.ts +84 -7
- package/src/capabilities/sources/runUpdate.ts +53 -21
- package/src/capabilities/sources/sources.test.ts +154 -2
- package/src/capabilities/sources/status.render.ts +1 -1
- package/src/capabilities/sources/status.verb.ts +1 -1
- package/src/capabilities/sources/update.render.ts +1 -1
- package/src/capabilities/sources/update.verb.ts +1 -1
- package/src/capabilities/surface.test.ts +134 -17
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.ts +31 -1
- package/src/identity.test.ts +40 -25
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +1 -1
- package/src/kernel/completion/entitySource.test.ts +1 -1
- package/src/kernel/completion/entitySource.ts +21 -8
- package/src/kernel/completion/model.test.ts +164 -12
- package/src/kernel/completion/model.ts +94 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +34 -26
- package/src/kernel/completion/shellDrive.test.ts +28 -9
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +7 -0
- package/src/kernel/config/defaults.test.ts +25 -2
- package/src/kernel/config/defaults.ts +4 -3
- package/src/kernel/config/evaluateProjectConfig.ts +31 -8
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -88
- package/src/kernel/config/index.ts +1 -1
- package/src/kernel/config/readConfig.test.ts +6 -3
- package/src/kernel/config/readConfig.ts +1 -1
- package/src/kernel/config/schema.ts +3 -1
- package/src/kernel/config/types.ts +3 -1
- package/src/kernel/copy.test.ts +34 -4
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +5 -2
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -5
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/recovery.ts +14 -0
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +21 -1
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +130 -1
- package/src/kernel/packs/compile.ts +93 -3
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +66 -14
- package/src/kernel/packs/renderPack.ts +24 -5
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +112 -18
- package/src/kernel/packs/runBodies.ts +2 -3
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +18 -1
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +42 -3
- package/src/kernel/packs/types.ts +13 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +147 -12
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +160 -3
- package/src/kernel/project/cli/dispatch.ts +222 -42
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +130 -30
- package/src/kernel/project/cli/helpFormat.ts +13 -0
- package/src/kernel/project/cli/rootHelp.ts +41 -12
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +7 -4
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +2 -2
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +5 -2
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/source.ts +2 -2
- package/src/kernel/project/mcp/registerVerb.ts +35 -9
- package/src/kernel/project/mcp/serve.ts +2 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/renderers.test.ts +243 -6
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded.ts +3 -3
- package/src/kernel/runtime/graphpack/manifest.ts +1 -1
- package/src/kernel/runtime/graphpack/read.ts +1 -2
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +472 -28
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +2 -2
- package/src/kernel/runtime/refs/resolve.ts +4 -4
- package/src/kernel/runtime/storeReadiness.ts +1 -2
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
- package/src/kernel/spec/emitReference.ts +105 -30
- package/src/kernel/spec/emitSurface.ts +48 -6
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/types.ts +248 -4
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/journeys.cli.test.ts +1 -1
- package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.packageStories.test.ts +4 -4
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +1 -1
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/graph/canonical.ts +88 -2
- package/src/testing/fixtures/graph/defaultPack.ts +1 -1
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/projectMcp.ts +32 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +20 -9
- package/src/testing/perf/budgets.ts +58 -9
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +505 -23
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/dist/pragma +0 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
- package/src/capabilities/create/templates.embedded.generated.ts +0 -28
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `create` CLI mount: the summon generator TREE, mounted under the
|
|
3
|
+
* `create` noun through the SAME registration path the summon bin uses
|
|
4
|
+
* (`registerGeneratorCommands` from
|
|
5
|
+
* `@canonical/summon-core/projection/commander`), fed
|
|
6
|
+
* by the build-time projection (`createSurface.generated.ts`) — so `pragma
|
|
7
|
+
* create component react [component-path]` and `summon component react
|
|
8
|
+
* [component-path]` are one grammar, derived once.
|
|
9
|
+
*
|
|
10
|
+
* The mount owns everything beneath the noun: tree segments as subcommands,
|
|
11
|
+
* prompt-derived flags (a default-true confirm registers only its `--no-`
|
|
12
|
+
* form), grouped help, the excess-positional guard, and the leaf action —
|
|
13
|
+
* which extracts the EXPLICIT answers, makes the ONE interaction decision
|
|
14
|
+
* (refusing before the create runtime ever loads), and hands the kernel's
|
|
15
|
+
* `dispatchPrepared` a synthesized per-leaf VerbSpec so dry-run/undo/real-run
|
|
16
|
+
* rendering, exit codes, SIGINT and the SEC-2 jail reuse the existing
|
|
17
|
+
* machinery byte-for-byte.
|
|
18
|
+
*
|
|
19
|
+
* This is the HEAVY half of the create projection, reached ONLY through the
|
|
20
|
+
* dynamic import in `cliProjection.ts` — the light half the capabilities
|
|
21
|
+
* barrel carries. The split exists for the fast paths: `--help` and
|
|
22
|
+
* `__complete` import the barrel on every spawn and register nothing, so the
|
|
23
|
+
* registration machinery this module needs (summon-core's projection helpers
|
|
24
|
+
* and Commander adapter, Commander itself, the kernel dispatcher) must load
|
|
25
|
+
* only when an invocation actually enters the `create` subtree. The
|
|
26
|
+
* lazy-graph guard in `lazy.test.ts` pins that boundary.
|
|
27
|
+
*/
|
|
28
|
+
import { decideInteraction, explicitAnswersComplete, extractAnswers, missingExplicitFlags, refusalMessage, } from "@canonical/summon-core/projection";
|
|
29
|
+
import { emitToProcess, registerGeneratorCommands, } from "@canonical/summon-core/projection/commander";
|
|
30
|
+
import { CommanderError } from "commander";
|
|
31
|
+
import { PragmaError } from "../../kernel/error/index.js";
|
|
32
|
+
import { renderErrorForFormat } from "../../kernel/error/renderError.js";
|
|
33
|
+
import { MUTATION_FLAG_DOCS } from "../../kernel/project/cli/constants.js";
|
|
34
|
+
import { cliIsTTY, dispatchPrepared, } from "../../kernel/project/cli/dispatch.js";
|
|
35
|
+
import { helpColumns, helpDim, helpHeading, helpUsage, } from "../../kernel/project/cli/helpFormat.js";
|
|
36
|
+
import { CREATE_GENERATORS } from "./constants.js";
|
|
37
|
+
import { CREATE_CAPABILITY, CREATE_OUTPUT, runCreate } from "./create.verb.js";
|
|
38
|
+
import { renderCreateHelp } from "./createHelp.js";
|
|
39
|
+
import { CREATE_SURFACE } from "./createSurface.generated.js";
|
|
40
|
+
/** The mount's standard-flag rows for the grouped-help Global Options block. */
|
|
41
|
+
const MOUNT_FLAG_HELP = [
|
|
42
|
+
// The kernel's own mutation-flag rows (one authoring point with
|
|
43
|
+
// registration and verb help), then its `--help` row (rootHelp.ts), not
|
|
44
|
+
// Commander's phrasing — one voice across every help page, and `--help`
|
|
45
|
+
// is the only spelling (the subtree inherits the root's long-only help
|
|
46
|
+
// option).
|
|
47
|
+
...MUTATION_FLAG_DOCS.map(({ flag, doc }) => ({
|
|
48
|
+
flags: flag,
|
|
49
|
+
description: doc,
|
|
50
|
+
})),
|
|
51
|
+
{ flags: "--help", description: "Show help (works on any command)" },
|
|
52
|
+
];
|
|
53
|
+
/** The declared tree, flattened to registration entries (parents first). */
|
|
54
|
+
function surfaceBarrel() {
|
|
55
|
+
const entries = [];
|
|
56
|
+
const namespaces = new Set();
|
|
57
|
+
for (const binding of Object.values(CREATE_GENERATORS)) {
|
|
58
|
+
for (const commandPath of binding.paths) {
|
|
59
|
+
const segments = commandPath.split("/");
|
|
60
|
+
if (segments.length > 1)
|
|
61
|
+
namespaces.add(segments[0]);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
for (const namespace of namespaces) {
|
|
65
|
+
entries.push({ path: [namespace], description: `${namespace} generators` });
|
|
66
|
+
}
|
|
67
|
+
for (const binding of Object.values(CREATE_GENERATORS)) {
|
|
68
|
+
for (const commandPath of binding.paths) {
|
|
69
|
+
const surface = CREATE_SURFACE[commandPath];
|
|
70
|
+
if (!surface) {
|
|
71
|
+
throw new Error(`createSurface.generated.ts carries no entry for "${commandPath}" — rerun the build`);
|
|
72
|
+
}
|
|
73
|
+
entries.push({
|
|
74
|
+
path: commandPath.split("/"),
|
|
75
|
+
generator: {
|
|
76
|
+
commandPath,
|
|
77
|
+
meta: { description: surface.description },
|
|
78
|
+
prompts: surface.prompts,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return entries.sort((a, b) => a.path.length - b.path.length);
|
|
84
|
+
}
|
|
85
|
+
/** The create noun that declares a command path. */
|
|
86
|
+
function kindOf(commandPath) {
|
|
87
|
+
for (const [kind, binding] of Object.entries(CREATE_GENERATORS)) {
|
|
88
|
+
if (binding.paths.includes(commandPath)) {
|
|
89
|
+
return kind;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
throw new Error(`undeclared command path ${commandPath}`);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Synthesize the per-leaf VerbSpec `dispatchPrepared` runs: params are EMPTY
|
|
96
|
+
* (the mount already extracted the explicit answers — leaf commands carry no
|
|
97
|
+
* Commander defaults, so explicit stays distinguishable from default), and
|
|
98
|
+
* `run` is `runCreate` over the full command path.
|
|
99
|
+
*
|
|
100
|
+
* The output spec is the SHARED `CREATE_OUTPUT`, not a local rebuild: this is
|
|
101
|
+
* the spec a real `create component react …` runs against, so a dry-run
|
|
102
|
+
* renderer declared only on the binding-level verbs would be a renderer the
|
|
103
|
+
* CLI never reached.
|
|
104
|
+
*/
|
|
105
|
+
export function leafVerb(commandPath) {
|
|
106
|
+
const surface = CREATE_SURFACE[commandPath];
|
|
107
|
+
return {
|
|
108
|
+
path: ["create", kindOf(commandPath)],
|
|
109
|
+
summary: surface?.description ?? commandPath,
|
|
110
|
+
params: [],
|
|
111
|
+
output: CREATE_OUTPUT,
|
|
112
|
+
capability: CREATE_CAPABILITY,
|
|
113
|
+
run: (params, rt) => runCreate(commandPath, params, rt),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* The explicit answers of one leaf invocation: flag-extracted (explicit-only,
|
|
118
|
+
* confirm equality-vs-default) plus the positional when given. Exported for
|
|
119
|
+
* the grammar tests — this is the exact bag the wizard is seeded with.
|
|
120
|
+
*/
|
|
121
|
+
export function explicitLeafAnswers(prompts, positionalValue, options) {
|
|
122
|
+
const explicit = extractAnswers(options, prompts);
|
|
123
|
+
const positionalPrompt = prompts.find((prompt) => prompt.positional);
|
|
124
|
+
if (positionalPrompt && positionalValue !== undefined) {
|
|
125
|
+
explicit[positionalPrompt.name] = positionalValue;
|
|
126
|
+
}
|
|
127
|
+
return explicit;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* The mount's mode resolution — `decideInteraction` over the leaf's five
|
|
131
|
+
* inputs, with the TTY fact INJECTED so the resolution is testable with
|
|
132
|
+
* `tty: true` (no suite can drive a real TTY through a subprocess). The
|
|
133
|
+
* action calls it with {@link cliIsTTY} — the same exported H3 gate the
|
|
134
|
+
* kernel's interaction context reads — so the mount and `runCreate` can
|
|
135
|
+
* never disagree about interactivity.
|
|
136
|
+
*/
|
|
137
|
+
export function resolveCreateMode(prompts, explicit, mutation, tty) {
|
|
138
|
+
return decideInteraction({
|
|
139
|
+
dryRun: mutation.dryRun,
|
|
140
|
+
undo: mutation.undo,
|
|
141
|
+
yes: mutation.yes,
|
|
142
|
+
isTTY: tty,
|
|
143
|
+
explicitComplete: explicitAnswersComplete(prompts, explicit),
|
|
144
|
+
}).mode;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Write the refusal and set exit 2. The refusal is the cross-CLI parity
|
|
148
|
+
* surface (contract §3): its default bytes are the shared message verbatim,
|
|
149
|
+
* no envelope prefix — the summon bin's full stderr, byte for byte — and
|
|
150
|
+
* ONLY an explicitly requested machine format reframes it, through the
|
|
151
|
+
* kernel's ONE gate+renderer decision (`renderErrorForFormat`): `--format
|
|
152
|
+
* json` emits the D3 `{ ok:false, error }` envelope, `--format llm` the
|
|
153
|
+
* condensed Markdown error form, both as `INVALID_INPUT` through the same
|
|
154
|
+
* renderers every other pragma error uses. Implicit auto-LLM detection (a
|
|
155
|
+
* piped run without `--format`) is excluded by the helper's construction —
|
|
156
|
+
* an inferred output mode must never break refusal byte-parity with summon.
|
|
157
|
+
*/
|
|
158
|
+
function writeRefusal(message, flags) {
|
|
159
|
+
const rendered = renderErrorForFormat(new PragmaError({ code: "INVALID_INPUT", message }), flags.format);
|
|
160
|
+
process.stderr.write(`${rendered ?? message}\n`);
|
|
161
|
+
process.exitCode = 2;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Mount the generator tree onto the `create` parent command.
|
|
165
|
+
*
|
|
166
|
+
* The registration entry `cliProjection.ts` dynamically imports — see this
|
|
167
|
+
* module's header for why it must not be reached statically.
|
|
168
|
+
*/
|
|
169
|
+
export function mountCreateTree(parent, host) {
|
|
170
|
+
// The parent's own face: the topic tree (paths + descriptions), on bare
|
|
171
|
+
// `create` AND on `create --help` alike, exit 0.
|
|
172
|
+
parent.configureHelp({ formatHelp: () => "" });
|
|
173
|
+
parent.addHelpText("beforeAll", (ctx) => ctx.command === parent ? `${topicTree(host.programName)}\n` : "");
|
|
174
|
+
parent.allowExcessArguments(true);
|
|
175
|
+
parent.action(async () => {
|
|
176
|
+
const stray = parent.args[0];
|
|
177
|
+
if (stray !== undefined) {
|
|
178
|
+
// An unrecognized topic keeps the bin's "Did you mean?" flow (the bin
|
|
179
|
+
// re-derives the token from argv; this message is cosmetic).
|
|
180
|
+
throw new CommanderError(2, "commander.unknownCommand", `error: unknown command '${stray}'`);
|
|
181
|
+
}
|
|
182
|
+
process.stdout.write(`${topicTree(host.programName)}\n`);
|
|
183
|
+
});
|
|
184
|
+
const cliHost = {
|
|
185
|
+
registerFlags: (cmd) => {
|
|
186
|
+
// Reset the designed-help suppression a Commander child inherits from
|
|
187
|
+
// the root program; grouped help re-configures the leaves right after.
|
|
188
|
+
cmd.configureHelp({});
|
|
189
|
+
for (const { flag, doc } of MUTATION_FLAG_DOCS) {
|
|
190
|
+
cmd.option(flag, doc);
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
helpFlags: MOUNT_FLAG_HELP,
|
|
194
|
+
// The seam's presentation half: the projection's structure, pragma's
|
|
195
|
+
// house style (see createHelp.ts).
|
|
196
|
+
renderHelp: renderCreateHelp,
|
|
197
|
+
action: async (entry, positionalValue, options) => {
|
|
198
|
+
const generator = entry.generator;
|
|
199
|
+
const explicit = explicitLeafAnswers(generator.prompts, positionalValue, options);
|
|
200
|
+
const mutation = {
|
|
201
|
+
dryRun: options.dryRun === true,
|
|
202
|
+
undo: options.undo === true,
|
|
203
|
+
yes: options.yes === true,
|
|
204
|
+
};
|
|
205
|
+
// The ONE interaction decision — made BEFORE the create runtime loads,
|
|
206
|
+
// so a refusal never touches summon-core. (`runCreate` re-derives the
|
|
207
|
+
// same mode from the same inputs to pick its prompt strategy.)
|
|
208
|
+
const mode = resolveCreateMode(generator.prompts, explicit, mutation, cliIsTTY());
|
|
209
|
+
if (mode === "refuse") {
|
|
210
|
+
writeRefusal(refusalMessage(missingExplicitFlags(generator.prompts, explicit)), host.globalFlags);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
await dispatchPrepared(leafVerb(generator.commandPath), explicit, mutation, host.globalFlags);
|
|
214
|
+
},
|
|
215
|
+
onNamespace: (cmd) => {
|
|
216
|
+
// Reset the designed-help suppression a Commander child inherits from
|
|
217
|
+
// the root program. The namespace BEHAVIOR (the shared did-you-mean on
|
|
218
|
+
// a stray segment, help-on-stderr exit 1 when bare) is the
|
|
219
|
+
// projection's, not the mount's — both hosts emit the same lines.
|
|
220
|
+
cmd.configureHelp({});
|
|
221
|
+
},
|
|
222
|
+
// The projection's usage errors reframe ONLY under an explicitly
|
|
223
|
+
// requested machine format — the kernel's ONE gate+renderer decision
|
|
224
|
+
// (`renderErrorForFormat`, shared with `writeRefusal` and bin.ts's
|
|
225
|
+
// usage-error sites), autoLlm excluded by its construction, so the
|
|
226
|
+
// default piped bytes stay the cross-CLI parity surface. Codes mirror
|
|
227
|
+
// bin.ts's classification: unknown command → UNKNOWN_VERB, every other
|
|
228
|
+
// usage error → INVALID_INPUT. The match is serialized PER KIND: an
|
|
229
|
+
// unknown SEGMENT is a fuzzy match, so its bare candidate rides in
|
|
230
|
+
// `suggestions` (substitutable for the token the headline names); an
|
|
231
|
+
// excess positional's match is NOT substitutable — it may BE the stray
|
|
232
|
+
// — so that kind instead carries the correction in the covenant's
|
|
233
|
+
// `recovery.cli` (`[...chain, suggestion].join(" ")`), and ONLY when
|
|
234
|
+
// that command is a DECLARED RUNNABLE LEAF: `chain` is `[<bin>,
|
|
235
|
+
// "create", ...segments]`, so everything past the mount point joined
|
|
236
|
+
// with the suggestion is the CREATE_SURFACE key, and a namespace match
|
|
237
|
+
// (exit-1 help page, can never scaffold) ships NO recovery.
|
|
238
|
+
emit: (outcome) => {
|
|
239
|
+
if (outcome.kind === "namespace-help")
|
|
240
|
+
return emitToProcess(outcome);
|
|
241
|
+
const { error } = outcome;
|
|
242
|
+
const rendered = renderErrorForFormat(new PragmaError({
|
|
243
|
+
code: error.kind === "unknown-segment" ? "UNKNOWN_VERB" : "INVALID_INPUT",
|
|
244
|
+
message: error.headline,
|
|
245
|
+
...(error.kind === "unknown-segment" && error.suggestion !== undefined
|
|
246
|
+
? { suggestions: [error.suggestion] }
|
|
247
|
+
: {}),
|
|
248
|
+
...(error.kind === "excess-positional" &&
|
|
249
|
+
error.suggestion !== undefined &&
|
|
250
|
+
CREATE_SURFACE[[...error.chain.slice(2), error.suggestion].join("/")] !== undefined
|
|
251
|
+
? {
|
|
252
|
+
recovery: {
|
|
253
|
+
message: "Run the corrected invocation.",
|
|
254
|
+
cli: [...error.chain, error.suggestion].join(" "),
|
|
255
|
+
},
|
|
256
|
+
}
|
|
257
|
+
: {}),
|
|
258
|
+
}), host.globalFlags.format);
|
|
259
|
+
// No machine format requested: the default piped bytes are the parity
|
|
260
|
+
// surface.
|
|
261
|
+
if (rendered === undefined)
|
|
262
|
+
return emitToProcess(outcome);
|
|
263
|
+
process.stderr.write(`${rendered}\n`);
|
|
264
|
+
process.exitCode = outcome.exitCode;
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
registerGeneratorCommands(parent, surfaceBarrel(), cliHost);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* The pragma-styled topic tree (paths + descriptions from the manifest):
|
|
271
|
+
* one row per INVOCABLE command path (`component react`, `package`, …), so
|
|
272
|
+
* every row is copy-pasteable after `pragma create ` — the same kernel
|
|
273
|
+
* primitives, and the same shape, as every other noun's verb listing
|
|
274
|
+
* (`formatNounHelp`).
|
|
275
|
+
*/
|
|
276
|
+
export function topicTree(programName) {
|
|
277
|
+
const rows = Object.values(CREATE_GENERATORS).flatMap((binding) => binding.paths.map((commandPath) => [
|
|
278
|
+
commandPath.split("/").join(" "),
|
|
279
|
+
CREATE_SURFACE[commandPath]?.description ?? "",
|
|
280
|
+
]));
|
|
281
|
+
return [
|
|
282
|
+
helpUsage(`${programName} create <path...> [options]`),
|
|
283
|
+
"",
|
|
284
|
+
"Scaffold from the summon generator tree.",
|
|
285
|
+
"",
|
|
286
|
+
helpHeading("Generators"),
|
|
287
|
+
...helpColumns(rows),
|
|
288
|
+
"",
|
|
289
|
+
helpDim(`Run \`${programName} create <path...> --help\` for a generator's flags.`),
|
|
290
|
+
helpDim(`The tree mirrors the summon CLI: \`${programName} create <path...>\` ≡ \`summon <path...>\`.`),
|
|
291
|
+
].join("\n");
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=mount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../../../../src/capabilities/create/mount.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SEC-2 path jail: an independent guard that a `create` output path stays inside
|
|
3
|
+
* the workspace, run BEFORE any effect. It rejects an absolute path, a `..`
|
|
4
|
+
* escape, and — via `realpath` on the nearest existing ancestor — a symlink that
|
|
5
|
+
* points out of the tree. This is defence in depth: the generators' own prompt
|
|
6
|
+
* validators (`validateComponentPath`, `validateAppPath`) reject absolute/`..`
|
|
7
|
+
* uniformly across the declared path prompts — in BOTH hosts, upstream of this
|
|
8
|
+
* jail — so the jail is pragma's host-level backstop, and its symlink check is
|
|
9
|
+
* the one tier the shared validators do not have (summon relies on the
|
|
10
|
+
* validator tier; hoisting the realpath check into the shared layer is a named
|
|
11
|
+
* follow-up).
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
14
|
+
import * as path from "node:path";
|
|
15
|
+
import { PragmaError } from "../../kernel/error/index.js";
|
|
16
|
+
/** Walk up from `p` to the nearest ancestor that exists on disk. */
|
|
17
|
+
function nearestExisting(p) {
|
|
18
|
+
let current = p;
|
|
19
|
+
while (!existsSync(current)) {
|
|
20
|
+
const parent = path.dirname(current);
|
|
21
|
+
if (parent === current)
|
|
22
|
+
return current; // filesystem root
|
|
23
|
+
current = parent;
|
|
24
|
+
}
|
|
25
|
+
return current;
|
|
26
|
+
}
|
|
27
|
+
/** Whether `rel` (a `path.relative` result) points at or above its base. */
|
|
28
|
+
const escapes = (rel) => rel === ".." || rel.startsWith(`..${path.sep}`) || path.isAbsolute(rel);
|
|
29
|
+
/**
|
|
30
|
+
* Reject a create output path that would escape the workspace root (`cwd`).
|
|
31
|
+
*
|
|
32
|
+
* @param field - The param name being jailed (for the error message).
|
|
33
|
+
* @param value - The path value (skipped when absent — the generator's own safe
|
|
34
|
+
* default is used instead).
|
|
35
|
+
* @param cwd - The workspace root the path must stay within.
|
|
36
|
+
* @throws PragmaError INVALID_INPUT when the path escapes the workspace.
|
|
37
|
+
* @note Impure — reads the filesystem (`existsSync`/`realpathSync`).
|
|
38
|
+
*/
|
|
39
|
+
export function assertInsideWorkspace(field, value, cwd) {
|
|
40
|
+
if (typeof value !== "string" || value === "")
|
|
41
|
+
return;
|
|
42
|
+
if (path.isAbsolute(value)) {
|
|
43
|
+
throw PragmaError.invalidInput(field, value, {
|
|
44
|
+
recovery: { message: "Use a path relative to the current directory." },
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const root = path.resolve(cwd);
|
|
48
|
+
const resolved = path.resolve(root, value);
|
|
49
|
+
if (escapes(path.relative(root, resolved))) {
|
|
50
|
+
throw PragmaError.invalidInput(field, value, {
|
|
51
|
+
recovery: { message: "The path must stay inside the workspace." },
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
// Symlink escape: the nearest existing ancestor, resolved through symlinks,
|
|
55
|
+
// must still sit within the resolved workspace root.
|
|
56
|
+
const realRoot = realpathSync(root);
|
|
57
|
+
const realAncestor = realpathSync(nearestExisting(resolved));
|
|
58
|
+
if (realAncestor !== realRoot &&
|
|
59
|
+
escapes(path.relative(realRoot, realAncestor))) {
|
|
60
|
+
throw PragmaError.invalidInput(field, value, {
|
|
61
|
+
recovery: { message: "The path resolves outside the workspace." },
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=pathJail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathJail.js","sourceRoot":"","sources":["../../../../src/capabilities/create/pathJail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,oEAAoE;AACpE,SAAS,eAAe,CAAC,CAAS;IAChC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,OAAO,CAAC,CAAC,kBAAkB;QAC1D,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4EAA4E;AAC5E,MAAM,OAAO,GAAG,CAAC,GAAW,EAAW,EAAE,CACvC,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAE1E;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAa,EACb,KAAc,EACd,GAAW;IAEX,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO;IAEtD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE;YAC3C,QAAQ,EAAE,EAAE,OAAO,EAAE,+CAA+C,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE;YAC3C,QAAQ,EAAE,EAAE,OAAO,EAAE,0CAA0C,EAAE;SAClE,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,qDAAqD;IACrD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,IACE,YAAY,KAAK,QAAQ;QACzB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,EAC9C,CAAC;QACD,MAAM,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE;YAC3C,QAAQ,EAAE,EAAE,OAAO,EAAE,0CAA0C,EAAE;SAClE,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { generators as applicationGenerators } from "@canonical/summon-application";
|
|
2
|
+
import { generators as componentGenerators } from "@canonical/summon-component";
|
|
3
|
+
import { generators as packageGenerators } from "@canonical/summon-package";
|
|
4
|
+
import { PragmaError } from "../../kernel/error/index.js";
|
|
5
|
+
import { CREATE_GENERATORS } from "./constants.js";
|
|
6
|
+
/**
|
|
7
|
+
* The declared packages' generator maps, bound by noun. The STATIC imports above
|
|
8
|
+
* are load-bearing: a computed `import(CREATE_GENERATORS[kind].name)` is opaque
|
|
9
|
+
* to every bundler and analyser, and the historical cost was measured — under
|
|
10
|
+
* `bun build --compile` it left the generators out of the artifact entirely
|
|
11
|
+
* (`Cannot find module '@canonical/summon-component'`). The declaration decides
|
|
12
|
+
* WHICH generator runs; it cannot decide which module is reachable.
|
|
13
|
+
*
|
|
14
|
+
* The maps' `generate` is invariant in its (specific) answer type, so they are
|
|
15
|
+
* erased to the base definition via `unknown` — runtime-safe because `execute`
|
|
16
|
+
* calls `generate(answers)` with the resolved answers, which carry the fields
|
|
17
|
+
* the specific generator reads.
|
|
18
|
+
*/
|
|
19
|
+
const GENERATOR_MAPS = {
|
|
20
|
+
component: componentGenerators,
|
|
21
|
+
package: packageGenerators,
|
|
22
|
+
application: applicationGenerators,
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Pick the generator for one FULL COMMAND PATH (`component/react`,
|
|
26
|
+
* `package`, `application/react`) — a straight lookup over the declared
|
|
27
|
+
* bindings, no framework axis: the path IS the identity, exactly as summon's
|
|
28
|
+
* tree keys it. Callers with a kind+framework surface (MCP) map to a path
|
|
29
|
+
* first.
|
|
30
|
+
*
|
|
31
|
+
* The module this lives in statically imports the summon generator packages'
|
|
32
|
+
* `generators` maps — and importing them pulls summon-core. So it MUST stay
|
|
33
|
+
* behind `create`'s lazy `import()` (R9): the fast paths (`buildProgram` /
|
|
34
|
+
* `__complete` / `--help` / reads) never load it, and `create --yes` never
|
|
35
|
+
* loads React either (summon-core's Ink UI is dynamic-only).
|
|
36
|
+
*
|
|
37
|
+
* @param commandPath - The declared command path to run.
|
|
38
|
+
* @returns The selected generator definition.
|
|
39
|
+
* @throws PragmaError INTERNAL for an undeclared path (callers validate
|
|
40
|
+
* user-facing inputs before mapping to a path).
|
|
41
|
+
*/
|
|
42
|
+
export function pickGenerator(commandPath) {
|
|
43
|
+
for (const [kind, binding] of Object.entries(CREATE_GENERATORS)) {
|
|
44
|
+
if (binding.paths.includes(commandPath)) {
|
|
45
|
+
const generator = GENERATOR_MAPS[kind][commandPath];
|
|
46
|
+
if (generator)
|
|
47
|
+
return generator;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
throw PragmaError.internalError(`missing generator for ${commandPath}`);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=pickGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickGenerator.js","sourceRoot":"","sources":["../../../../src/capabilities/create/pickGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,UAAU,IAAI,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEhF,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAKnD;;;;;;;;;;;;GAYG;AACH,MAAM,cAAc,GAAqC;IACvD,SAAS,EAAE,mBAA8C;IACzD,OAAO,EAAE,iBAA4C;IACrD,WAAW,EAAE,qBAAgD;CAC9D,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAChE,IAAK,OAAO,CAAC,KAA2B,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/D,MAAM,SAAS,GAAG,cAAc,CAAC,IAAkB,CAAC,CAAC,WAAW,CAAC,CAAC;YAClE,IAAI,SAAS;gBAAE,OAAO,SAAS,CAAC;YAChC,MAAM;QACR,CAAC;IACH,CAAC;IACD,MAAM,WAAW,CAAC,aAAa,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/capabilities/create/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The distribution's own read stories, compiled at module load.
|
|
3
|
+
*
|
|
4
|
+
* `pragma.conf.ts` declares them on the packs that supply them; this is the ONE
|
|
5
|
+
* place those declarations become capabilities. They come through the SAME door
|
|
6
|
+
* a third-party story does — {@link compileStoryModule} — so the mechanism the CLI
|
|
7
|
+
* offers forks is the mechanism the CLI itself runs on.
|
|
8
|
+
*
|
|
9
|
+
* They are compiled STATICALLY rather than merged at dispatch on purpose: the
|
|
10
|
+
* `--help` / `__complete` fast paths read the static capability set, and
|
|
11
|
+
* `surface/surface.v2.json` freezes the emitted surface, so a noun that only
|
|
12
|
+
* arrived at dispatch would vanish from help and completion on a fresh install.
|
|
13
|
+
* That is affordable because this module is zod-free and pure — `pragma.conf.ts`
|
|
14
|
+
* is inert data and the compiler builds specs without touching the store.
|
|
15
|
+
*
|
|
16
|
+
* Config- and package-declared stories still OVERRIDE these at dispatch; the
|
|
17
|
+
* `story` marker on each module is what tells `assembleEffectiveModules` which
|
|
18
|
+
* modules may be replaced.
|
|
19
|
+
*/
|
|
20
|
+
import conf from "../../pragma.conf.js";
|
|
21
|
+
import { compileStoryModule } from "../kernel/packs/compile.js";
|
|
22
|
+
import { distributionSource, } from "../kernel/packs/types.js";
|
|
23
|
+
import { DEFAULT_PREFIX_MAP } from "../kernel/render/index.js";
|
|
24
|
+
/** The read stories `pragma.conf.ts` declares on its packs, by noun. */
|
|
25
|
+
export const declaredStories = new Map(conf.packs
|
|
26
|
+
.flatMap((pack) => pack.stories ?? [])
|
|
27
|
+
.map((story) => [story.noun, story]));
|
|
28
|
+
/**
|
|
29
|
+
* Those stories compiled to capability modules, by noun.
|
|
30
|
+
*
|
|
31
|
+
* `capabilities/index.ts` appends every module no authored one claims — and
|
|
32
|
+
* since L-OPEN-9 that is every one of them: no data noun is authored, so a
|
|
33
|
+
* declared story IS the whole noun. `distribution.test.ts` holds that shut by
|
|
34
|
+
* asserting each registered module's verbs deep-equal its compiled story's.
|
|
35
|
+
*/
|
|
36
|
+
export const storyModules = new Map([...declaredStories].map(([noun, story]) => [
|
|
37
|
+
noun,
|
|
38
|
+
compileStoryModule(story, distributionSource("pragma.conf.ts"), DEFAULT_PREFIX_MAP),
|
|
39
|
+
]));
|
|
40
|
+
//# sourceMappingURL=distribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../../src/capabilities/distribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,IAAI,MAAM,sBAAsB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EACL,kBAAkB,GAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,wEAAwE;AACxE,MAAM,CAAC,MAAM,eAAe,GAAwC,IAAI,GAAG,CACzE,IAAI,CAAC,KAAK;KACP,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;KACrC,GAAG,CAAC,CAAC,KAAK,EAAqC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAC1E,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAA0C,IAAI,GAAG,CACxE,CAAC,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;IAC1C,IAAI;IACJ,kBAAkB,CAChB,KAAK,EACL,kBAAkB,CAAC,gBAAgB,CAAC,EACpC,kBAAkB,CACnB;CACF,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { BIN_NAME } from "../../../constants.js";
|
|
2
|
+
import { entityTotal } from "../../../kernel/completion/entitySource.js";
|
|
3
|
+
/**
|
|
4
|
+
* Check that the local store boots, reporting the entity total and boot time.
|
|
5
|
+
* The check is NAMED "store" in the report — the same word every other surface
|
|
6
|
+
* uses for it; the ke library it boots through is an implementation detail.
|
|
7
|
+
*
|
|
8
|
+
* This is the ONE check that touches the store — it boots the shared lazy store
|
|
9
|
+
* inside a try/catch, so doctor stays storeless-by-default at the dispatch level
|
|
10
|
+
* (the verb declares `needsStore: false`; only this check pays the boot, only
|
|
11
|
+
* when reached). On success it reads the entity total from the session's
|
|
12
|
+
* storeless index rather than a fresh triple COUNT — cheaper, and the store is
|
|
13
|
+
* already booted.
|
|
14
|
+
*
|
|
15
|
+
* @param rt - The per-invocation runtime.
|
|
16
|
+
* @returns A CheckResult: pass with the entity total, or fail with a remedy.
|
|
17
|
+
* @note Impure — boots the store.
|
|
18
|
+
*/
|
|
19
|
+
export async function checkKeStore(rt) {
|
|
20
|
+
const start = performance.now();
|
|
21
|
+
try {
|
|
22
|
+
const session = await rt.store.get();
|
|
23
|
+
const total = entityTotal(session.index);
|
|
24
|
+
const elapsed = Math.round(performance.now() - start);
|
|
25
|
+
return {
|
|
26
|
+
name: "store",
|
|
27
|
+
status: "pass",
|
|
28
|
+
detail: `${total.toLocaleString()} entities in ${elapsed}ms`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return {
|
|
33
|
+
name: "store",
|
|
34
|
+
status: "fail",
|
|
35
|
+
detail: "cannot boot",
|
|
36
|
+
remedy: `Ensure design-system packs are configured and run \`${BIN_NAME} sources update\`.`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=checkKeStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkKeStore.js","sourceRoot":"","sources":["../../../../../src/capabilities/doctor/checks/checkKeStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAIzE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAiB;IAClD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QACtD,OAAO;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,gBAAgB,OAAO,IAAI;SAC7D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,uDAAuD,QAAQ,oBAAoB;SAC5F,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const MIN_NODE_MAJOR = 20;
|
|
2
|
+
/**
|
|
3
|
+
* Check that the Node.js major version is at least {@link MIN_NODE_MAJOR}.
|
|
4
|
+
*
|
|
5
|
+
* @returns A CheckResult with the current version and pass/fail status.
|
|
6
|
+
* @note Impure — reads `process.versions`.
|
|
7
|
+
*/
|
|
8
|
+
export async function checkNodeVersion() {
|
|
9
|
+
const version = process.versions.node;
|
|
10
|
+
const major = Number.parseInt(version.split(".")[0] ?? "0", 10);
|
|
11
|
+
if (major >= MIN_NODE_MAJOR) {
|
|
12
|
+
return { name: "Node version", status: "pass", detail: `v${version}` };
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
name: "Node version",
|
|
16
|
+
status: "fail",
|
|
17
|
+
detail: `v${version} (requires >= ${MIN_NODE_MAJOR})`,
|
|
18
|
+
remedy: `Install Node.js >= ${MIN_NODE_MAJOR}`,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=checkNodeVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkNodeVersion.js","sourceRoot":"","sources":["../../../../../src/capabilities/doctor/checks/checkNodeVersion.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAEhE,IAAI,KAAK,IAAI,cAAc,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC;IACzE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,IAAI,OAAO,iBAAiB,cAAc,GAAG;QACrD,MAAM,EAAE,sBAAsB,cAAc,EAAE;KAC/C,CAAC;AACJ,CAAC"}
|