@canonical/pragma-cli 0.34.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/bundled-skills/add-standard/SKILL.md +338 -0
- package/bundled-skills/adoption-a1-styles/SKILL.md +269 -0
- package/bundled-skills/adoption-a2-components/SKILL.md +291 -0
- package/bundled-skills/adoption-a3-forms/SKILL.md +260 -0
- package/bundled-skills/anatomy-author/ANATOMY_DSL_SPEC.md +406 -0
- package/bundled-skills/anatomy-author/SKILL.md +1226 -0
- package/bundled-skills/design-auditor/SKILL.md +455 -0
- package/bundled-skills/implement-component/SKILL.md +333 -0
- package/bundled-skills/specify-component/SKILL.md +331 -0
- package/bundled-skills/specify-pattern/SKILL.md +292 -0
- package/dist/.build-ok +0 -0
- package/dist/package.json +84 -0
- package/dist/pragma.conf.js +1016 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +294 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +148 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/harnessInventory.js +195 -0
- package/dist/src/capabilities/doctor/checks/harnessInventory.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +349 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +164 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +49 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +86 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +72 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +57 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +172 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +390 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +329 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +253 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +594 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +271 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +387 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +328 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +27 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +349 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +281 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +309 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +460 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +135 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +87 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +34 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/interactivity.js +68 -0
- package/dist/src/kernel/interactivity.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +274 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +140 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +421 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +167 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +480 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +219 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +58 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +227 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +315 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +105 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/vocabulary.js +174 -0
- package/dist/src/kernel/render/vocabulary.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +22 -23
- package/pragma.conf.ts +486 -90
- package/src/bin.ts +274 -82
- package/src/capabilities/block.parity.test.ts +29 -12
- package/src/capabilities/block.shipped.exec.test.ts +282 -0
- package/src/capabilities/block.tierRank.exec.test.ts +300 -0
- package/src/capabilities/capabilities/capabilities.render.ts +1 -1
- package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
- package/src/capabilities/capabilities/catalog.ts +3 -3
- package/src/capabilities/capabilities/hints.ts +32 -7
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +35 -24
- package/src/capabilities/colophon/colophon.render.ts +24 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +4 -4
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/config/collectConfigShow.ts +3 -3
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -10
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +8 -7
- package/src/capabilities/config/show.render.ts +1 -1
- package/src/capabilities/config/show.verb.ts +9 -6
- package/src/capabilities/config/types.ts +18 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +25 -11
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +36 -61
- package/src/capabilities/create/create.mcp.test.ts +89 -5
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +433 -219
- package/src/capabilities/create/create.verb.ts +297 -328
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +7 -4
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +23 -35
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +20 -0
- package/src/capabilities/distribution.parity.test.ts +4 -0
- package/src/capabilities/distribution.test.ts +3 -1
- package/src/capabilities/distribution.ts +10 -15
- package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +75 -8
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +76 -29
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +63 -17
- package/src/capabilities/doctor/checks/harnessInventory.test.ts +219 -0
- package/src/capabilities/doctor/checks/harnessInventory.ts +298 -0
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +444 -0
- package/src/capabilities/doctor/doctor.render.test.ts +125 -38
- package/src/capabilities/doctor/doctor.render.ts +74 -74
- package/src/capabilities/doctor/doctor.test.ts +338 -37
- package/src/capabilities/doctor/doctor.verb.ts +8 -3
- package/src/capabilities/doctor/runChecks.ts +65 -63
- package/src/capabilities/doctor/types.ts +22 -15
- package/src/capabilities/emptyRecovery.test.ts +21 -8
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -6
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +3 -3
- package/src/capabilities/graph/runQuery.ts +2 -3
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/info/collectInfo.ts +13 -5
- package/src/capabilities/info/info.render.ts +7 -3
- package/src/capabilities/info/info.test.ts +37 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/info/types.ts +10 -2
- package/src/capabilities/lazy.test.ts +32 -0
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +27 -68
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +4 -5
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/renderVocabularySync.test.ts +82 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -59
- package/src/capabilities/scopeTypeSync.test.ts +29 -15
- package/src/capabilities/setup/buildPlan.ts +240 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +79 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +478 -334
- package/src/capabilities/setup/operations/setupLsp.ts +420 -67
- package/src/capabilities/setup/operations/setupMcp.ts +238 -127
- package/src/capabilities/setup/operations/setupSkills.ts +667 -105
- package/src/capabilities/setup/plan.render.ts +336 -0
- package/src/capabilities/setup/plan.ts +241 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +297 -75
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +1819 -225
- package/src/capabilities/setup/setup.verb.ts +288 -78
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- package/src/capabilities/setup/targets.ts +435 -0
- package/src/capabilities/setup/types.ts +23 -70
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +43 -0
- package/src/capabilities/shared/packageManager.test.ts +470 -0
- package/src/capabilities/shared/packageManager.ts +425 -34
- package/src/capabilities/skill/bundledSkills.test.ts +347 -0
- package/src/capabilities/skill/discover.ts +131 -10
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +22 -7
- package/src/capabilities/skill/verbs.ts +3 -4
- package/src/capabilities/sources/collectStatus.ts +7 -2
- package/src/capabilities/sources/index.ts +1 -1
- package/src/capabilities/sources/installSkills.ts +265 -10
- package/src/capabilities/sources/runUpdate.ts +131 -23
- package/src/capabilities/sources/sources.test.ts +382 -2
- package/src/capabilities/sources/status.render.ts +1 -1
- package/src/capabilities/sources/status.verb.ts +1 -1
- package/src/capabilities/sources/update.render.ts +1 -1
- package/src/capabilities/sources/update.verb.ts +4 -4
- package/src/capabilities/surface.test.ts +136 -19
- package/src/capabilities/upgrade/runUpgrade.ts +53 -14
- package/src/capabilities/upgrade/types.ts +10 -2
- package/src/capabilities/upgrade/upgrade.render.ts +13 -7
- package/src/capabilities/upgrade/upgrade.test.ts +75 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.ts +36 -1
- package/src/identity.test.ts +57 -29
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +1 -1
- package/src/kernel/completion/entitySource.test.ts +16 -3
- package/src/kernel/completion/entitySource.ts +21 -8
- package/src/kernel/completion/model.test.ts +164 -12
- package/src/kernel/completion/model.ts +94 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +50 -35
- package/src/kernel/completion/shellDrive.test.ts +28 -9
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +7 -0
- package/src/kernel/config/defaults.test.ts +27 -3
- package/src/kernel/config/defaults.ts +4 -3
- package/src/kernel/config/evaluateProjectConfig.ts +31 -8
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -88
- package/src/kernel/config/index.ts +1 -1
- package/src/kernel/config/readConfig.test.ts +6 -3
- package/src/kernel/config/readConfig.ts +1 -1
- package/src/kernel/config/schema.ts +3 -1
- package/src/kernel/config/types.ts +3 -1
- package/src/kernel/copy.test.ts +34 -4
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +5 -2
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -5
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/recovery.ts +14 -0
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +21 -1
- package/src/kernel/index.ts +35 -0
- package/src/kernel/interactivity.test.ts +76 -0
- package/src/kernel/interactivity.ts +69 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +222 -1
- package/src/kernel/packs/compile.ts +93 -3
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +66 -14
- package/src/kernel/packs/renderPack.ts +25 -6
- package/src/kernel/packs/resolveEntity.test.ts +274 -0
- package/src/kernel/packs/resolveEntity.ts +200 -42
- package/src/kernel/packs/runBodies.ts +86 -22
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +78 -5
- package/src/kernel/packs/sparql/applyFilters.ts +136 -16
- package/src/kernel/packs/sparql/buildLookupQuery.test.ts +290 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +367 -17
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +77 -4
- package/src/kernel/packs/types.ts +136 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +218 -12
- package/src/kernel/project/cli/buildProgram.ts +84 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +160 -2
- package/src/kernel/project/cli/dispatch.ts +226 -45
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +134 -31
- package/src/kernel/project/cli/helpFormat.ts +14 -2
- package/src/kernel/project/cli/rootHelp.ts +74 -12
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +7 -4
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +2 -2
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +5 -2
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/source.ts +2 -2
- package/src/kernel/project/mcp/registerVerb.ts +55 -10
- package/src/kernel/project/mcp/serve.ts +2 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/renderers.test.ts +243 -6
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +59 -6
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/render/vocabulary.ts +276 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded.ts +3 -3
- package/src/kernel/runtime/graphpack/manifest.ts +1 -1
- package/src/kernel/runtime/graphpack/read.ts +1 -2
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +472 -28
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +2 -2
- package/src/kernel/runtime/refs/resolve.ts +4 -4
- package/src/kernel/runtime/storeReadiness.ts +1 -2
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
- package/src/kernel/spec/emitReference.ts +105 -30
- package/src/kernel/spec/emitSurface.ts +48 -6
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/types.ts +277 -4
- package/src/testing/PARITY_GAPS.ts +9 -3
- package/src/testing/behavioral/docExamples.test.ts +16 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +112 -9
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/journeys.cli.test.ts +1 -1
- package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
- package/src/testing/behavioral/journeys.firstInstall.test.ts +7 -2
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.packageStories.test.ts +10 -7
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +1 -1
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +26 -1
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/eval/cases/readNouns.ts +245 -9
- package/src/testing/fixtures/blockGraph.ts +104 -10
- package/src/testing/fixtures/graph/canonical.ts +182 -13
- package/src/testing/fixtures/graph/defaultPack.ts +1 -1
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/projectMcp.ts +32 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +20 -9
- package/src/testing/perf/budgets.ts +58 -9
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +505 -23
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/dist/pragma +0 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
- package/src/capabilities/create/templates.embedded.generated.ts +0 -28
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/capabilities/shared/bands.ts +0 -16
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { existsSync, mkdtempSync, readdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { tmpdir } from "node:os";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { fail, succeed } from "@canonical/task";
|
|
4
|
+
import { $, fail, gen, log, mkdir, succeed, writeFile } from "@canonical/task";
|
|
5
5
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
6
6
|
import { fixturePreviewModule } from "../../../testing/fixtures/fixtureCapability.js";
|
|
7
7
|
import { PragmaError } from "../../error/PragmaError.js";
|
|
8
|
+
import { canPrompt } from "../../interactivity.js";
|
|
8
9
|
import { bootRuntime } from "../../runtime/boot.js";
|
|
9
10
|
import type { GlobalFlags } from "../../runtime/types.js";
|
|
10
11
|
import type { ParamSpec, VerbSpec } from "../../spec/types.js";
|
|
@@ -150,6 +151,46 @@ describe("executeVerb — mutations", () => {
|
|
|
150
151
|
expect(outcome.stdout).toContain("Dry run");
|
|
151
152
|
});
|
|
152
153
|
|
|
154
|
+
it("a verb with NO formatPlan renders the effect dump, byte for byte", async () => {
|
|
155
|
+
// The `formatPlan` seam is opt-in, and opting out is the majority case.
|
|
156
|
+
// These are the exact bytes the kernel produced before any verb had a
|
|
157
|
+
// renderer of its own — the whole literal, not a substring — so a verb
|
|
158
|
+
// that declares nothing can never be re-rendered by accident.
|
|
159
|
+
const dumped: VerbSpec = {
|
|
160
|
+
...make,
|
|
161
|
+
run: () =>
|
|
162
|
+
gen(function* () {
|
|
163
|
+
yield* $(log("info", "starting"));
|
|
164
|
+
yield* $(mkdir("out"));
|
|
165
|
+
yield* $(writeFile("out/thing.txt", "hello"));
|
|
166
|
+
return { dumped: true };
|
|
167
|
+
}),
|
|
168
|
+
};
|
|
169
|
+
const outcome = await executeVerb(
|
|
170
|
+
dumped,
|
|
171
|
+
{},
|
|
172
|
+
{ dryRun: true, undo: false, yes: false },
|
|
173
|
+
bootRuntime(PLAIN, mkdtempSync(join(tmpdir(), "pragma-dump-"))),
|
|
174
|
+
);
|
|
175
|
+
expect(outcome.stdout).toBe(
|
|
176
|
+
"Dry run — planned effects:\n" +
|
|
177
|
+
" - Log [info]: starting\n" +
|
|
178
|
+
" - Created out/\n" +
|
|
179
|
+
" - Write file: out/thing.txt (5 bytes)\n",
|
|
180
|
+
);
|
|
181
|
+
expect(outcome.exitCode).toBe(0);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it("an empty plan renders the no-effects line, byte for byte", async () => {
|
|
185
|
+
const outcome = await executeVerb(
|
|
186
|
+
make,
|
|
187
|
+
{},
|
|
188
|
+
{ dryRun: true, undo: false, yes: false },
|
|
189
|
+
bootRuntime(PLAIN),
|
|
190
|
+
);
|
|
191
|
+
expect(outcome.stdout).toBe("Dry run — no effects.\n");
|
|
192
|
+
});
|
|
193
|
+
|
|
153
194
|
it("reports undo count under --undo", async () => {
|
|
154
195
|
const outcome = await executeVerb(
|
|
155
196
|
make,
|
|
@@ -161,6 +202,104 @@ describe("executeVerb — mutations", () => {
|
|
|
161
202
|
});
|
|
162
203
|
});
|
|
163
204
|
|
|
205
|
+
describe("--quiet — success is silent, failure is not", () => {
|
|
206
|
+
// The rule the flag has to keep: everything muted is success-path narration
|
|
207
|
+
// (the calm zero-record notice, a mutation's stage lines). Error rendering
|
|
208
|
+
// does not route through either seam, so no failure can hide behind it.
|
|
209
|
+
const QUIET: GlobalFlags = { ...PLAIN, quiet: true };
|
|
210
|
+
const savedExit = process.exitCode;
|
|
211
|
+
afterEach(() => {
|
|
212
|
+
process.exitCode = savedExit;
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
const emptyList: VerbSpec = {
|
|
216
|
+
...echo,
|
|
217
|
+
params: [],
|
|
218
|
+
output: {
|
|
219
|
+
formatters: {
|
|
220
|
+
...passthroughFormatters,
|
|
221
|
+
plain: () => "",
|
|
222
|
+
notice: () => "No results.",
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
run: async () => [],
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
it("mutes the empty-state notice but keeps stdout and the exit code", async () => {
|
|
229
|
+
const loud = await executeVerb(
|
|
230
|
+
emptyList,
|
|
231
|
+
{},
|
|
232
|
+
{ dryRun: false, undo: false, yes: false },
|
|
233
|
+
bootRuntime(PLAIN),
|
|
234
|
+
);
|
|
235
|
+
expect(loud.stderr).toBe("No results.\n");
|
|
236
|
+
|
|
237
|
+
const quiet = await executeVerb(
|
|
238
|
+
emptyList,
|
|
239
|
+
{},
|
|
240
|
+
{ dryRun: false, undo: false, yes: false },
|
|
241
|
+
bootRuntime(QUIET),
|
|
242
|
+
);
|
|
243
|
+
expect(quiet.stderr).toBeUndefined();
|
|
244
|
+
expect(quiet.stdout).toBe(loud.stdout);
|
|
245
|
+
expect(quiet.exitCode).toBe(0);
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
it("mutes a mutation's progress lines", async () => {
|
|
249
|
+
const reporting: VerbSpec = {
|
|
250
|
+
...make,
|
|
251
|
+
run: (_params, runtime) => {
|
|
252
|
+
runtime.report?.("Resolving the pack…");
|
|
253
|
+
return succeed({ made: true });
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
const errs: string[] = [];
|
|
257
|
+
const spy = vi
|
|
258
|
+
.spyOn(process.stderr, "write")
|
|
259
|
+
.mockImplementation((chunk: string | Uint8Array) => {
|
|
260
|
+
errs.push(String(chunk));
|
|
261
|
+
return true;
|
|
262
|
+
});
|
|
263
|
+
await executeVerb(
|
|
264
|
+
reporting,
|
|
265
|
+
{},
|
|
266
|
+
{ dryRun: false, undo: false, yes: true },
|
|
267
|
+
bootRuntime(PLAIN),
|
|
268
|
+
);
|
|
269
|
+
const loud = errs.join("");
|
|
270
|
+
errs.length = 0;
|
|
271
|
+
await executeVerb(
|
|
272
|
+
reporting,
|
|
273
|
+
{},
|
|
274
|
+
{ dryRun: false, undo: false, yes: true },
|
|
275
|
+
bootRuntime(QUIET),
|
|
276
|
+
);
|
|
277
|
+
spy.mockRestore();
|
|
278
|
+
expect(loud).toContain("Resolving the pack…");
|
|
279
|
+
expect(errs.join("")).toBe("");
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
it("still renders the error, with its exit code", async () => {
|
|
283
|
+
const failing: VerbSpec = {
|
|
284
|
+
...echo,
|
|
285
|
+
run: async () => {
|
|
286
|
+
throw PragmaError.notFound("thing", "Nope");
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
const errs: string[] = [];
|
|
290
|
+
const spy = vi
|
|
291
|
+
.spyOn(process.stderr, "write")
|
|
292
|
+
.mockImplementation((chunk: string | Uint8Array) => {
|
|
293
|
+
errs.push(String(chunk));
|
|
294
|
+
return true;
|
|
295
|
+
});
|
|
296
|
+
await dispatch(failing, ["x"], {}, QUIET);
|
|
297
|
+
spy.mockRestore();
|
|
298
|
+
expect(errs.join("")).toContain('thing "Nope" not found.');
|
|
299
|
+
expect(process.exitCode).toBe(1);
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
|
|
164
303
|
describe("dispatch — errors", () => {
|
|
165
304
|
const savedExit = process.exitCode;
|
|
166
305
|
afterEach(() => {
|
|
@@ -190,7 +329,7 @@ describe("dispatch — errors", () => {
|
|
|
190
329
|
it("renders a declined confirm gate as a clean cancellation, not a bug report", async () => {
|
|
191
330
|
// A TTY user declining execute()'s "Proceed?" gate fails the task with
|
|
192
331
|
// GENERATOR_CANCELLED; the boundary must treat it as a clean cancel, never
|
|
193
|
-
// the scary INTERNAL_ERROR "
|
|
332
|
+
// the scary INTERNAL_ERROR "report this issue" / exit 1.
|
|
194
333
|
const cancelling: VerbSpec = {
|
|
195
334
|
...make,
|
|
196
335
|
run: () => fail({ code: "GENERATOR_CANCELLED", message: "Cancelled." }),
|
|
@@ -352,4 +491,23 @@ describe("executeVerb — interactivity gate (H3)", () => {
|
|
|
352
491
|
);
|
|
353
492
|
expect(sink.isTTY).toBe(true);
|
|
354
493
|
});
|
|
494
|
+
|
|
495
|
+
it("canPrompt IS the stdin+stderr conjunction — the one gate both callers read", () => {
|
|
496
|
+
// The mount's create decision reads the same exported function this
|
|
497
|
+
// describe drives through executeVerb, so pinning the truth table here
|
|
498
|
+
// pins BOTH callers (nothing is left to keep two copies in step).
|
|
499
|
+
const cases: Array<[boolean, boolean, boolean, boolean]> = [
|
|
500
|
+
[true, true, false, true], // stdout is irrelevant…
|
|
501
|
+
[true, true, true, true],
|
|
502
|
+
[false, true, true, false], // …stdin is required…
|
|
503
|
+
[true, false, true, false], // …and so is stderr.
|
|
504
|
+
[false, false, false, false],
|
|
505
|
+
];
|
|
506
|
+
for (const [stdin, stderr, stdout, expected] of cases) {
|
|
507
|
+
setTTY(process.stdin, stdin);
|
|
508
|
+
setTTY(process.stderr, stderr);
|
|
509
|
+
setTTY(process.stdout, stdout);
|
|
510
|
+
expect(canPrompt(), `stdin=${stdin} stderr=${stderr}`).toBe(expected);
|
|
511
|
+
}
|
|
512
|
+
});
|
|
355
513
|
});
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* exit code.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import { describeEffect, type Task } from "@canonical/task";
|
|
14
|
+
import { describeEffect, type Effect, type Task } from "@canonical/task";
|
|
15
15
|
import { runPreview, runTask, runUndo } from "@canonical/task/node";
|
|
16
16
|
import {
|
|
17
17
|
asPragmaError,
|
|
@@ -19,22 +19,22 @@ import {
|
|
|
19
19
|
isCancellation,
|
|
20
20
|
isInterruption,
|
|
21
21
|
} from "../../error/fromTaskError.js";
|
|
22
|
-
import { PragmaError } from "../../error/PragmaError.js";
|
|
23
22
|
import {
|
|
23
|
+
PragmaError,
|
|
24
24
|
renderErrorJson,
|
|
25
25
|
renderErrorLlm,
|
|
26
26
|
renderErrorPlain,
|
|
27
|
-
} from "../../error/
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import { writeStdout } from "../../render/
|
|
31
|
-
import { bootRuntime } from "../../runtime/
|
|
27
|
+
} from "../../error/index.js";
|
|
28
|
+
import { canPrompt, stdoutIsCaptured } from "../../interactivity.js";
|
|
29
|
+
import type { RenderContext } from "../../render/contracts.js";
|
|
30
|
+
import { successEnvelope, writeStdout } from "../../render/index.js";
|
|
31
|
+
import { bootRuntime } from "../../runtime/index.js";
|
|
32
32
|
import type {
|
|
33
33
|
GlobalFlags,
|
|
34
34
|
InteractionRuntime,
|
|
35
35
|
PragmaRuntime,
|
|
36
36
|
} from "../../runtime/types.js";
|
|
37
|
-
import type { ParamSpec, VerbSpec } from "../../spec/
|
|
37
|
+
import type { ParamSpec, VerbSpec } from "../../spec/index.js";
|
|
38
38
|
import { EXIT, mapExitCode } from "./exitCodes.js";
|
|
39
39
|
|
|
40
40
|
/** The CLI-only mutation flags auto-injected onto every mutating verb. */
|
|
@@ -53,6 +53,18 @@ const logToStderr = (_level: string, message: string): void => {
|
|
|
53
53
|
process.stderr.write(`${message}\n`);
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
+
/** A silenced log sink — `--quiet` drops progress; errors render elsewhere. */
|
|
57
|
+
const logNowhere = (_level: string, _message: string): void => {};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The interpreter log sink for this invocation: stderr, or — under `--quiet`
|
|
61
|
+
* — nothing. Progress/stage lines are success-path output; error rendering
|
|
62
|
+
* never routes through this sink, so muting it cannot hide a failure.
|
|
63
|
+
*/
|
|
64
|
+
function logSink(flags: GlobalFlags): (level: string, message: string) => void {
|
|
65
|
+
return flags.quiet === true ? logNowhere : logToStderr;
|
|
66
|
+
}
|
|
67
|
+
|
|
56
68
|
/** The result of running a verb: what to write where, and the exit code. */
|
|
57
69
|
export interface DispatchOutcome {
|
|
58
70
|
readonly stdout?: string;
|
|
@@ -62,6 +74,15 @@ export interface DispatchOutcome {
|
|
|
62
74
|
|
|
63
75
|
/** Coerce one raw arg into the type its {@link ParamSpec} declares. */
|
|
64
76
|
function coerceParam(param: ParamSpec, raw: unknown): unknown {
|
|
77
|
+
// A repeatable flag's collector hands over an array of occurrences; coerce
|
|
78
|
+
// each element so an enum still validates every value.
|
|
79
|
+
if (
|
|
80
|
+
Array.isArray(raw) &&
|
|
81
|
+
(param.kind === "string" || param.kind === "enum") &&
|
|
82
|
+
param.repeatable === true
|
|
83
|
+
) {
|
|
84
|
+
return raw.map((value) => coerceParam(param, value));
|
|
85
|
+
}
|
|
65
86
|
switch (param.kind) {
|
|
66
87
|
case "number": {
|
|
67
88
|
const value = typeof raw === "number" ? raw : Number(raw);
|
|
@@ -128,7 +149,19 @@ export function extractParams(
|
|
|
128
149
|
return result;
|
|
129
150
|
}
|
|
130
151
|
|
|
131
|
-
/**
|
|
152
|
+
/**
|
|
153
|
+
* Render a read/execute result through the verb's formatters.
|
|
154
|
+
*
|
|
155
|
+
* The plain branch owns two ROUTING decisions (the rendering itself stays in
|
|
156
|
+
* the formatters): it threads the presentation context (`--no-headers`,
|
|
157
|
+
* stdout's TTY-ness) into the plain formatter, and it routes a declared
|
|
158
|
+
* empty-state notice to STDERR with exit 0 — a zero-record result is a calm
|
|
159
|
+
* success, and stdout (the data stream) must not carry a human sentence a
|
|
160
|
+
* pipe would read as a record. `llm` and `json` keep their own empty shapes
|
|
161
|
+
* on stdout: both are machine contracts whose consumers read one stream.
|
|
162
|
+
*
|
|
163
|
+
* @note Impure — reads stdout's capture state for the render context.
|
|
164
|
+
*/
|
|
132
165
|
function renderData(
|
|
133
166
|
verb: VerbSpec,
|
|
134
167
|
flags: GlobalFlags,
|
|
@@ -137,26 +170,93 @@ function renderData(
|
|
|
137
170
|
): DispatchOutcome {
|
|
138
171
|
if (flags.format === "json") {
|
|
139
172
|
const projection = JSON.parse(verb.output.formatters.json(data));
|
|
173
|
+
// The calm notice rides `meta` on the machine surfaces, so an empty result
|
|
174
|
+
// is distinguishable from an unbuilt store or a mistyped filter, and an
|
|
175
|
+
// ambiguous lookup hit from an unambiguous one. `data` keeps its uniform
|
|
176
|
+
// shape, and MCP builds the same key from the same seam
|
|
177
|
+
// (`mcp/registerVerb.ts#noticeMeta`) — the two machine surfaces stay
|
|
178
|
+
// byte-equal.
|
|
179
|
+
const notice = verb.output.formatters.notice?.(data);
|
|
140
180
|
return {
|
|
141
|
-
stdout: `${JSON.stringify(
|
|
181
|
+
stdout: `${JSON.stringify(
|
|
182
|
+
successEnvelope(projection, notice ? { ...meta, notice } : meta),
|
|
183
|
+
)}\n`,
|
|
142
184
|
exitCode: 0,
|
|
143
185
|
};
|
|
144
186
|
}
|
|
145
|
-
|
|
146
|
-
|
|
187
|
+
if (flags.llm) {
|
|
188
|
+
const text = verb.output.formatters.llm(data);
|
|
189
|
+
return { stdout: text ? `${text}\n` : "", exitCode: 0 };
|
|
190
|
+
}
|
|
191
|
+
const context: RenderContext = {
|
|
192
|
+
headers: flags.noHeaders !== true,
|
|
193
|
+
stdoutIsTty: !stdoutIsCaptured(),
|
|
194
|
+
};
|
|
195
|
+
const text = verb.output.formatters.plain(data, context);
|
|
196
|
+
// The calm notice is success-path guidance — `--quiet` mutes it.
|
|
197
|
+
const notice =
|
|
198
|
+
flags.quiet === true ? undefined : verb.output.formatters.notice?.(data);
|
|
199
|
+
return {
|
|
200
|
+
stdout: text ? `${text}\n` : "",
|
|
201
|
+
...(notice ? { stderr: `${notice}\n` } : {}),
|
|
202
|
+
exitCode: 0,
|
|
203
|
+
};
|
|
147
204
|
}
|
|
148
205
|
|
|
149
|
-
/**
|
|
150
|
-
|
|
206
|
+
/**
|
|
207
|
+
* Render a dry-run plan.
|
|
208
|
+
*
|
|
209
|
+
* The default render is the effect dump — one described effect per line — which
|
|
210
|
+
* is what every verb without a plan of its own gets, byte for byte as before.
|
|
211
|
+
* A verb that declares `output.formatPlan` renders that instead: the dump is
|
|
212
|
+
* debug material (interpreter log effects, a repeated absolute path prefix on
|
|
213
|
+
* every line), and a preview is something a user is meant to read.
|
|
214
|
+
*
|
|
215
|
+
* The JSON envelope is decided by the STASHED DATA, not by the seam: `plan` is
|
|
216
|
+
* the same string array it always was, and `targets` appears only for a verb
|
|
217
|
+
* that stashed a structured plan beside it. So a verb whose renderer works off
|
|
218
|
+
* the effects alone leaves the machine-readable shape exactly as it found it.
|
|
219
|
+
*
|
|
220
|
+
* @param flags - The global flags (format selection, verbosity).
|
|
221
|
+
* @param plan - The described effects the mutation would perform.
|
|
222
|
+
* @param effects - Those same effects, unformatted, for the verb's renderer.
|
|
223
|
+
* @param seam - The verb's plan renderer + whatever it stashed, when it has one.
|
|
224
|
+
* @returns The dispatch outcome.
|
|
225
|
+
*/
|
|
226
|
+
async function renderPlan(
|
|
151
227
|
flags: GlobalFlags,
|
|
152
228
|
plan: readonly string[],
|
|
153
|
-
|
|
229
|
+
effects: readonly Effect[],
|
|
230
|
+
seam?: {
|
|
231
|
+
format: (
|
|
232
|
+
planData: unknown,
|
|
233
|
+
effects: readonly Effect[],
|
|
234
|
+
verbose: boolean,
|
|
235
|
+
) => string | Promise<string>;
|
|
236
|
+
planData: unknown;
|
|
237
|
+
},
|
|
238
|
+
): Promise<DispatchOutcome> {
|
|
154
239
|
if (flags.format === "json") {
|
|
240
|
+
const body =
|
|
241
|
+
seam?.planData === undefined
|
|
242
|
+
? { plan }
|
|
243
|
+
: { plan, targets: seam.planData };
|
|
155
244
|
return {
|
|
156
|
-
stdout: `${JSON.stringify(successEnvelope(
|
|
245
|
+
stdout: `${JSON.stringify(successEnvelope(body, { dryRun: true }))}\n`,
|
|
157
246
|
exitCode: 0,
|
|
158
247
|
};
|
|
159
248
|
}
|
|
249
|
+
if (seam !== undefined) {
|
|
250
|
+
// Awaited: the seam MAY be async, so a renderer can load formatting rules
|
|
251
|
+
// that live in another package behind a dynamic `import()` instead of
|
|
252
|
+
// charging every `--help` spawn for them (see `VerbSpec.output.formatPlan`).
|
|
253
|
+
const rendered = await seam.format(
|
|
254
|
+
seam.planData,
|
|
255
|
+
effects,
|
|
256
|
+
flags.verbose === true,
|
|
257
|
+
);
|
|
258
|
+
return { stdout: `${rendered}\n`, exitCode: 0 };
|
|
259
|
+
}
|
|
160
260
|
const body =
|
|
161
261
|
plan.length > 0
|
|
162
262
|
? `Dry run — planned effects:\n${plan.map((p) => ` - ${p}`).join("\n")}`
|
|
@@ -228,10 +328,8 @@ export async function executeVerb(
|
|
|
228
328
|
// block on input. `--undo` stays handler-free and untouched by this seam.
|
|
229
329
|
const controller = new AbortController();
|
|
230
330
|
const interaction: InteractionRuntime = {
|
|
231
|
-
//
|
|
232
|
-
|
|
233
|
-
// mount an invisible render that blocks on stdin.
|
|
234
|
-
isTTY: process.stdin.isTTY === true && process.stderr.isTTY === true,
|
|
331
|
+
// The shared H3 gate (see `canPrompt`): stdin and stderr, never stdout.
|
|
332
|
+
isTTY: canPrompt(),
|
|
235
333
|
transport: "cli",
|
|
236
334
|
yes: mutation.yes,
|
|
237
335
|
signal: controller.signal,
|
|
@@ -242,12 +340,15 @@ export async function executeVerb(
|
|
|
242
340
|
};
|
|
243
341
|
const mutationRuntime: PragmaRuntime = {
|
|
244
342
|
...runtime,
|
|
245
|
-
mutation: { preview: mutation.dryRun },
|
|
343
|
+
mutation: { preview: mutation.dryRun, undo: mutation.undo },
|
|
246
344
|
interaction,
|
|
247
345
|
// Progress seam (U7): a long mutation's eager resolve/build runs before its
|
|
248
346
|
// Task is returned, so `onLog` can't reach it — stream stage lines straight
|
|
249
347
|
// to stderr instead, keeping stdout (the JSON/data stream) clean.
|
|
250
|
-
report:
|
|
348
|
+
report:
|
|
349
|
+
flags.quiet === true
|
|
350
|
+
? () => {}
|
|
351
|
+
: (message: string) => process.stderr.write(`${message}\n`),
|
|
251
352
|
};
|
|
252
353
|
const task = await Promise.resolve(
|
|
253
354
|
verb.run(params, mutationRuntime) as
|
|
@@ -262,20 +363,46 @@ export async function executeVerb(
|
|
|
262
363
|
// `exec.cwd` is the same write root the real run resolves paths against,
|
|
263
364
|
// and `exec.onEffectStart` carries summon's stamping transform, so the
|
|
264
365
|
// planned byte counts are the bytes the run would actually write.
|
|
366
|
+
//
|
|
367
|
+
// NO `onLog`, deliberately. A preview that PERFORMS an effect is not a
|
|
368
|
+
// preview of that effect: routing the recorded `Log`s to stderr printed
|
|
369
|
+
// the generator's whole commentary on the way through, and the plan then
|
|
370
|
+
// listed the very same lines as rows. The interpreter prints nothing of
|
|
371
|
+
// its own when `onLog` is absent, so a log is now planned once and
|
|
372
|
+
// performed never.
|
|
265
373
|
const previewExec = mutationRuntime.exec ?? {};
|
|
266
374
|
try {
|
|
267
375
|
const { effects } = await runPreview(task, {
|
|
268
376
|
cwd: previewExec.cwd,
|
|
269
377
|
onEffectStart: previewExec.onEffectStart,
|
|
270
|
-
onLog: logToStderr,
|
|
271
378
|
});
|
|
272
379
|
// A plan is the effects a mutation WOULD apply — a `Prompt` is not one,
|
|
273
380
|
// so the interactive confirm gate / answer prompts never clutter it.
|
|
274
|
-
|
|
381
|
+
const planned = effects.filter((effect) => effect._tag !== "Prompt");
|
|
382
|
+
// The DESCRIBED plan — what `--format json` carries and what a verb
|
|
383
|
+
// with no renderer of its own is dumped as — passes the same
|
|
384
|
+
// visibility filter the MCP payload and the human preview use. It is
|
|
385
|
+
// the filter, not the row format, that this seam shares: `plan` is
|
|
386
|
+
// structured description, so it stays `describeEffect` strings rather
|
|
387
|
+
// than terminal rows, and the two surfaces can be compared string for
|
|
388
|
+
// string (`testing/behavioral/parity.test.ts`, A6).
|
|
389
|
+
//
|
|
390
|
+
// Loaded lazily from the LIGHT `/format` subpath. A dry run is already
|
|
391
|
+
// several filesystem reads deep here; a `--help` spawn never reaches
|
|
392
|
+
// this branch, and the kernel keeps summon-core off its static graph.
|
|
393
|
+
const { visiblePlanEffects } = await import(
|
|
394
|
+
"@canonical/summon-core/format"
|
|
395
|
+
);
|
|
396
|
+
const format = verb.output.formatPlan;
|
|
397
|
+
return await renderPlan(
|
|
275
398
|
flags,
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
399
|
+
visiblePlanEffects(planned, flags.verbose === true).map(
|
|
400
|
+
describeEffect,
|
|
401
|
+
),
|
|
402
|
+
planned,
|
|
403
|
+
format === undefined
|
|
404
|
+
? undefined
|
|
405
|
+
: { format, planData: mutationRuntime.planData },
|
|
279
406
|
);
|
|
280
407
|
} finally {
|
|
281
408
|
// A verb that mounted an interactive session before returning its Task
|
|
@@ -284,22 +411,27 @@ export async function executeVerb(
|
|
|
284
411
|
}
|
|
285
412
|
}
|
|
286
413
|
if (mutation.undo) {
|
|
287
|
-
const { undoCount } = await runUndo(task, { onLog:
|
|
414
|
+
const { undoCount } = await runUndo(task, { onLog: logSink(flags) });
|
|
288
415
|
return renderUndo(flags, undoCount);
|
|
289
416
|
}
|
|
290
417
|
// Real execution: spread the verb's runner options into the node
|
|
291
418
|
// interpreter (prompt handler, stamping/progress callbacks, log routing,
|
|
292
|
-
// signal). Teardown (e.g. unmount an Ink render) runs in `finally
|
|
419
|
+
// signal). Teardown (e.g. unmount an Ink render) runs in `finally` —
|
|
420
|
+
// BEFORE the outcome is rendered: an interactive session's closing frame
|
|
421
|
+
// flushes on its dispose, so printing the result first put the verb's
|
|
422
|
+
// stdout recap ABOVE a frame that then repainted stale beneath it. Tear
|
|
423
|
+
// the UI down, then report; the error path gets the same order for free.
|
|
293
424
|
const exec = mutationRuntime.exec ?? {};
|
|
294
425
|
const onSigint = (): void => controller.abort();
|
|
295
426
|
process.once("SIGINT", onSigint);
|
|
427
|
+
let value: unknown;
|
|
296
428
|
try {
|
|
297
|
-
|
|
298
|
-
return renderData(verb, flags, value, {});
|
|
429
|
+
value = await runTask(task, { onLog: logSink(flags), ...exec });
|
|
299
430
|
} finally {
|
|
300
431
|
process.removeListener("SIGINT", onSigint);
|
|
301
432
|
await exec.dispose?.();
|
|
302
433
|
}
|
|
434
|
+
return renderData(verb, flags, value, {});
|
|
303
435
|
}
|
|
304
436
|
|
|
305
437
|
const data = await Promise.resolve(
|
|
@@ -309,30 +441,29 @@ export async function executeVerb(
|
|
|
309
441
|
}
|
|
310
442
|
|
|
311
443
|
/**
|
|
312
|
-
*
|
|
444
|
+
* Run a verb whose params are already prepared, then perform the output I/O —
|
|
445
|
+
* the shared tail of {@link dispatch} and of a mounted subtree's own
|
|
446
|
+
* dispatcher, which extracts its params by its own rules but reuses every
|
|
447
|
+
* piece of the kernel machinery from here down: dry-run/undo/real-run
|
|
448
|
+
* interpretation, error rendering, exit codes, SIGINT.
|
|
313
449
|
*
|
|
314
|
-
* @param verb - The
|
|
315
|
-
* @param
|
|
316
|
-
*
|
|
450
|
+
* @param verb - The verb spec to run.
|
|
451
|
+
* @param getParams - Produces the coerced param bag (may throw a usage error;
|
|
452
|
+
* it is rendered exactly like a run error).
|
|
453
|
+
* @param mutation - The mutation flags.
|
|
317
454
|
* @param globalFlags - The parsed global flags.
|
|
318
455
|
* @note Impure — writes stdout/stderr and sets `process.exitCode`.
|
|
319
456
|
*/
|
|
320
|
-
|
|
457
|
+
async function runPrepared(
|
|
321
458
|
verb: VerbSpec,
|
|
322
|
-
|
|
323
|
-
|
|
459
|
+
getParams: () => Record<string, unknown>,
|
|
460
|
+
mutation: MutationFlags,
|
|
324
461
|
globalFlags: GlobalFlags,
|
|
325
462
|
): Promise<void> {
|
|
326
463
|
const runtime = bootRuntime(globalFlags);
|
|
327
464
|
let outcome: DispatchOutcome;
|
|
328
465
|
try {
|
|
329
|
-
|
|
330
|
-
const mutation: MutationFlags = {
|
|
331
|
-
dryRun: opts.dryRun === true,
|
|
332
|
-
undo: opts.undo === true,
|
|
333
|
-
yes: opts.yes === true,
|
|
334
|
-
};
|
|
335
|
-
outcome = await executeVerb(verb, params, mutation, runtime);
|
|
466
|
+
outcome = await executeVerb(verb, getParams(), mutation, runtime);
|
|
336
467
|
} catch (error) {
|
|
337
468
|
// Two clean, non-bug outcomes print the same "Cancelled." line but exit
|
|
338
469
|
// differently — both set DIRECTLY here, out-of-band from `mapExitCode`'s
|
|
@@ -354,3 +485,53 @@ export async function dispatch(
|
|
|
354
485
|
if (outcome.stderr) process.stderr.write(outcome.stderr);
|
|
355
486
|
if (outcome.exitCode !== 0) process.exitCode = outcome.exitCode;
|
|
356
487
|
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Dispatch a matched verb: coerce, run, and perform the output I/O.
|
|
491
|
+
*
|
|
492
|
+
* @param verb - The matched verb spec.
|
|
493
|
+
* @param positionals - Positional args from Commander.
|
|
494
|
+
* @param opts - Commander's parsed option values (incl. mutation flags).
|
|
495
|
+
* @param globalFlags - The parsed global flags.
|
|
496
|
+
* @note Impure — writes stdout/stderr and sets `process.exitCode`.
|
|
497
|
+
*/
|
|
498
|
+
export async function dispatch(
|
|
499
|
+
verb: VerbSpec,
|
|
500
|
+
positionals: readonly string[],
|
|
501
|
+
opts: Record<string, unknown>,
|
|
502
|
+
globalFlags: GlobalFlags,
|
|
503
|
+
): Promise<void> {
|
|
504
|
+
const mutation: MutationFlags = {
|
|
505
|
+
dryRun: opts.dryRun === true,
|
|
506
|
+
undo: opts.undo === true,
|
|
507
|
+
yes: opts.yes === true,
|
|
508
|
+
};
|
|
509
|
+
await runPrepared(
|
|
510
|
+
verb,
|
|
511
|
+
() => extractParams(verb.params, positionals, opts),
|
|
512
|
+
mutation,
|
|
513
|
+
globalFlags,
|
|
514
|
+
);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* Dispatch a verb whose params were ALREADY extracted by the caller — the
|
|
519
|
+
* seam a mounted subtree drives: its leaf specs carry no Commander defaults
|
|
520
|
+
* (explicit stays distinguishable from default), so the mount extracts the
|
|
521
|
+
* explicit answers itself and hands them here, reusing the whole kernel tail
|
|
522
|
+
* (interpreters, rendering, exit codes, SIGINT) byte-for-byte.
|
|
523
|
+
*
|
|
524
|
+
* @param verb - The (possibly synthesized) verb spec to run.
|
|
525
|
+
* @param params - The prepared param bag.
|
|
526
|
+
* @param mutation - The mutation flags.
|
|
527
|
+
* @param globalFlags - The parsed global flags.
|
|
528
|
+
* @note Impure — writes stdout/stderr and sets `process.exitCode`.
|
|
529
|
+
*/
|
|
530
|
+
export async function dispatchPrepared(
|
|
531
|
+
verb: VerbSpec,
|
|
532
|
+
params: Record<string, unknown>,
|
|
533
|
+
mutation: MutationFlags,
|
|
534
|
+
globalFlags: GlobalFlags,
|
|
535
|
+
): Promise<void> {
|
|
536
|
+
await runPrepared(verb, () => params, mutation, globalFlags);
|
|
537
|
+
}
|