@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
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `setup` verbs — the run-all self-verb plus the five CLI-only sub-verbs
|
|
3
|
+
* (`config`/`completions`/`lsp`/`mcp`/`skills`), every one of them derived from
|
|
4
|
+
* the target table.
|
|
5
|
+
*
|
|
6
|
+
* `setup` is the ONE covenant noun that is BOTH directly runnable and has
|
|
7
|
+
* sub-verbs. All of them are storeless, interactive mutations. The sub-verbs are
|
|
8
|
+
* `mcp: false` (`buildServer` skips them, `buildProgram` still registers them);
|
|
9
|
+
* only the self-verb is an MCP tool. `destructive: false` keeps MCP from
|
|
10
|
+
* advertising the tool as destructive.
|
|
11
|
+
*
|
|
12
|
+
* THE SCOPE DEFAULT IS GLOBAL. `--scope` used to default to `both`, and `both`
|
|
13
|
+
* runs each harness's own default scope — which is `project` for most of the
|
|
14
|
+
* registry — so a bare `setup` scattered `.mcp.json`, `.gemini/settings.json`
|
|
15
|
+
* and `opencode.json` into whatever directory you happened to be standing in.
|
|
16
|
+
* The user scope is what a machine-level installer configures; the project scope
|
|
17
|
+
* is a deliberate, checked-in, team-shared choice, and is now chosen with
|
|
18
|
+
* `--local` rather than assumed.
|
|
19
|
+
*
|
|
20
|
+
* Every sub-verb registers the scope flags UNIFORMLY. That is what lets the scope
|
|
21
|
+
* answer come from the table instead of per-verb flag wiring — previously
|
|
22
|
+
* `setup completions --local` died as an unknown option, while `setup mcp
|
|
23
|
+
* --local` worked, for no reason a user could see. Asking a target for a scope it
|
|
24
|
+
* cannot honour is a usage error (exit 2) with the corrected command; asking the
|
|
25
|
+
* RUN-ALL for such a band merely filters, and the out-of-band target still shows
|
|
26
|
+
* as a named row.
|
|
27
|
+
*
|
|
28
|
+
* summon-core + the generator ops stay behind a LAZY dynamic import (mirroring
|
|
29
|
+
* `create`'s `loadCreateRuntime`), so building the command tree / `--help` /
|
|
30
|
+
* `__complete` — and `setup --yes` — load no React/Ink.
|
|
31
|
+
*/
|
|
32
|
+
import { $, gen, pure } from "@canonical/task";
|
|
33
|
+
import { BIN_NAME } from "../../constants.js";
|
|
34
|
+
import { PragmaError } from "../../kernel/error/index.js";
|
|
35
|
+
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
36
|
+
import { resolveSetupMode, setupModeInput } from "./mode.js";
|
|
37
|
+
import { isActionable, planExitFailed, planTally, TARGET_IDS, } from "./plan.js";
|
|
38
|
+
import { renderDetectionSummary, renderProgressLine, renderRecap, } from "./plan.render.js";
|
|
39
|
+
import { renderDryRun, setupFormatters } from "./setup.render.js";
|
|
40
|
+
/**
|
|
41
|
+
* The `--scope` flag + its `--global`/`--local` boolean sugars. Registered by
|
|
42
|
+
* EVERY setup verb, including the single-scope ones: a flag that exists on some
|
|
43
|
+
* sub-verbs and not others is a grammar the user has to memorise, and the scope
|
|
44
|
+
* a single-scope target can honour is a question the target table answers.
|
|
45
|
+
*
|
|
46
|
+
* `--global` is a synonym of the default; it stays for scripts and for symmetry
|
|
47
|
+
* with `--local`.
|
|
48
|
+
*/
|
|
49
|
+
const SCOPE_PARAMS = [
|
|
50
|
+
{
|
|
51
|
+
kind: "enum",
|
|
52
|
+
name: "scope",
|
|
53
|
+
doc: "Where to configure: global (your home directory, the default), project (this repository), or both.",
|
|
54
|
+
values: ["project", "global", "both"],
|
|
55
|
+
default: "global",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
kind: "boolean",
|
|
59
|
+
name: "global",
|
|
60
|
+
doc: "Shorthand for --scope global — configure your home directory.",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
kind: "boolean",
|
|
64
|
+
name: "local",
|
|
65
|
+
doc: "Shorthand for --scope project — configure this project only.",
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
/**
|
|
69
|
+
* Resolve the `--scope`/`--global`/`--local` params into a single selection.
|
|
70
|
+
* The boolean sugars win over `--scope`; `--global` wins over `--local`.
|
|
71
|
+
*
|
|
72
|
+
* @param params - The coerced param bag.
|
|
73
|
+
* @returns The resolved scope selection (defaults to `global`).
|
|
74
|
+
*/
|
|
75
|
+
function resolveScope(params) {
|
|
76
|
+
if (params.global === true)
|
|
77
|
+
return "global";
|
|
78
|
+
if (params.local === true)
|
|
79
|
+
return "project";
|
|
80
|
+
const scope = params.scope;
|
|
81
|
+
return scope === "project" || scope === "both" ? scope : "global";
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Reject a sub-verb asked for a scope its target cannot hold.
|
|
85
|
+
*
|
|
86
|
+
* This is a usage error, not a skip: the user typed a contradiction, and
|
|
87
|
+
* correcting it is exactly what exit 2 means. The message names the scope the
|
|
88
|
+
* target DOES have and prints the command that works, so the correction is one
|
|
89
|
+
* paste rather than one manual page.
|
|
90
|
+
*
|
|
91
|
+
* @param mode - The sub-verb's target, or `all`.
|
|
92
|
+
* @param scope - The resolved selection.
|
|
93
|
+
* @throws PragmaError INVALID_INPUT when the target has no such scope.
|
|
94
|
+
*/
|
|
95
|
+
async function assertScopeIsPossible(mode, scope) {
|
|
96
|
+
if (mode === "all" || scope === "both")
|
|
97
|
+
return;
|
|
98
|
+
const { findTarget } = await import("./targets.js");
|
|
99
|
+
const target = findTarget(mode);
|
|
100
|
+
if (target === undefined || target.scopes.includes(scope))
|
|
101
|
+
return;
|
|
102
|
+
const only = target.scopes[0];
|
|
103
|
+
const level = only === "global" ? "global only" : "per-project only";
|
|
104
|
+
const asked = scope === "global" ? "globally" : "per project";
|
|
105
|
+
const corrected = only === "global"
|
|
106
|
+
? `${BIN_NAME} setup ${mode}`
|
|
107
|
+
: `${BIN_NAME} setup ${mode} --local`;
|
|
108
|
+
throw new PragmaError({
|
|
109
|
+
code: "INVALID_INPUT",
|
|
110
|
+
message: `${mode} is ${level} — it cannot be configured ${asked}.`,
|
|
111
|
+
recovery: { message: `Run: ${corrected}` },
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/** The exposed-to-MCP capability the run-all self-verb declares. */
|
|
115
|
+
const SELF_CAPABILITY = {
|
|
116
|
+
needsStore: false,
|
|
117
|
+
mutates: true,
|
|
118
|
+
interactive: true,
|
|
119
|
+
destructive: false,
|
|
120
|
+
mcp: {
|
|
121
|
+
expose: true,
|
|
122
|
+
annotations: {
|
|
123
|
+
readOnlyHint: false,
|
|
124
|
+
destructiveHint: false,
|
|
125
|
+
openWorldHint: false,
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
/** The CLI-only capability every sub-verb declares (not an MCP tool). */
|
|
130
|
+
const SUB_CAPABILITY = {
|
|
131
|
+
needsStore: false,
|
|
132
|
+
mutates: true,
|
|
133
|
+
interactive: true,
|
|
134
|
+
destructive: false,
|
|
135
|
+
mcp: {
|
|
136
|
+
expose: false,
|
|
137
|
+
reason: "CLI-only environment installer",
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* The one summon↔pragma seam per setup invocation: lazily load summon-core + the
|
|
142
|
+
* generator ops, detect and plan, resolve the interaction mode, wire `rt.exec`,
|
|
143
|
+
* and return the plan with its outcomes filled in.
|
|
144
|
+
*
|
|
145
|
+
* NOTE: `rt.exec` carries NO per-call `cwd`. Unlike `create` (whose generator
|
|
146
|
+
* emits RELATIVE paths jailed to `rt.cwd`), setup's targets build ABSOLUTE
|
|
147
|
+
* effect paths themselves; the interpreter leaves absolute paths unchanged, so
|
|
148
|
+
* no per-call write root is threaded. No stamping either — setup writes
|
|
149
|
+
* symlinks, config and scripts, not generated source.
|
|
150
|
+
*
|
|
151
|
+
* @param mode - Which entry point (`all` or one target).
|
|
152
|
+
* @param rt - The per-invocation runtime (mutated: `rt.exec` and `rt.planData`).
|
|
153
|
+
* @param scope - The resolved scope selection.
|
|
154
|
+
* @returns The `Task<SetupPlan>` the dispatcher/MCP handler interprets.
|
|
155
|
+
* @note Impure — runs every target's real detection before returning a Task.
|
|
156
|
+
*/
|
|
157
|
+
async function runSetup(mode, rt, scope) {
|
|
158
|
+
await assertScopeIsPossible(mode, scope);
|
|
159
|
+
// Lazy dynamic imports (lazy-React discipline): summon-core's barrel is
|
|
160
|
+
// React-free, and the non-TTY branch picks autoPrompt/mcpPrompt (never mounts
|
|
161
|
+
// Ink), so `setup --yes` loads no React — the guard test enforces this.
|
|
162
|
+
const [summon, projection, ops] = await Promise.all([
|
|
163
|
+
import("@canonical/summon-core"),
|
|
164
|
+
import("@canonical/summon-core/projection"),
|
|
165
|
+
import("./operations/setupGenerator.js"),
|
|
166
|
+
]);
|
|
167
|
+
const input = setupModeInput(rt);
|
|
168
|
+
const run = await ops.buildSetupRun(rt, mode, scope, input.undo);
|
|
169
|
+
const interactionMode = resolveSetupMode(input, projection.decideInteraction);
|
|
170
|
+
// The dry-run seam: the kernel's `--dry-run` branch renders THIS instead of
|
|
171
|
+
// the raw effect dump, while its honest preview still runs underneath and
|
|
172
|
+
// still fails exactly when the real run would.
|
|
173
|
+
rt.planData = { ...run.plan, preview: true };
|
|
174
|
+
// Whether this invocation only PREVIEWS. The task below is driven either way
|
|
175
|
+
// — that is what makes the preview honest — so anything it says out loud has
|
|
176
|
+
// to know which of the two it is.
|
|
177
|
+
const previewing = interactionMode === "batch-dry-run";
|
|
178
|
+
// A CONVERGED machine has no question to ask. Every row is `none` or `skip`,
|
|
179
|
+
// so nothing composes an effect — and the wizard's confirm gate then mounted
|
|
180
|
+
// Ink to render summon-core's "No operations planned." above a "Proceed?"
|
|
181
|
+
// over an empty tally. For a sub-verb, whose prompt list is empty, that
|
|
182
|
+
// contentless gate was the FIRST AND ONLY thing the user ever saw. The
|
|
183
|
+
// explanation existed the whole time (each row's `none` detail, one child row
|
|
184
|
+
// per file/editor marked `unchanged`) and was dropped at the render seam.
|
|
185
|
+
//
|
|
186
|
+
// So: report the plan instead of asking a question with no content. There is
|
|
187
|
+
// no `preview: true` here — the run really did complete. `applied({})` marks
|
|
188
|
+
// each `none` row `{status:"noop", note:"unchanged"}`, `wasApplied` is then
|
|
189
|
+
// true, and `setupFormatters.plain` renders the recap. That also retires a
|
|
190
|
+
// second defect: a non-interactive converged run used to print the misleading
|
|
191
|
+
// "Nothing was applied. Run again with --yes to apply." over an all-`none`
|
|
192
|
+
// plan. A run whose every DETECTION threw is not converged in this sense —
|
|
193
|
+
// its rows are skips that report `failed` — so it falls through to the normal
|
|
194
|
+
// path, which is the one that raises.
|
|
195
|
+
if (!previewing && run.plan.rows.every((row) => !isActionable(row.action))) {
|
|
196
|
+
const converged = run.applied({});
|
|
197
|
+
if (!planExitFailed(converged))
|
|
198
|
+
return pure(converged);
|
|
199
|
+
}
|
|
200
|
+
// Adaptation (b): a non-interactive run without `--yes` previews rather than
|
|
201
|
+
// mutating. It is the same plan the dry-run prints, plus one hint line, at
|
|
202
|
+
// exit 0 — the invocation completed a real read-only unit of work.
|
|
203
|
+
if (interactionMode === "refuse") {
|
|
204
|
+
return pure({ ...run.plan, preview: true });
|
|
205
|
+
}
|
|
206
|
+
// Say what was DETECTED before asking anything about it. The data has been
|
|
207
|
+
// sitting in `run.plan` since before the prompt list was built — `inkPrompt`
|
|
208
|
+
// mounts no React until the first Prompt effect — so this is a rendering gap,
|
|
209
|
+
// not an ordering one, and closing it is nearly free.
|
|
210
|
+
//
|
|
211
|
+
// It MUST be emitted here, before `execute` is driven: the summary and the
|
|
212
|
+
// Ink frame both write to stderr, and only a line written first lands in
|
|
213
|
+
// scrollback ABOVE the frame. `rt.report` is the non-Ink seam — `--quiet`
|
|
214
|
+
// silences it and it is a no-op over MCP — so no React is loaded to print it.
|
|
215
|
+
// A preview says nothing here: the plan table IS its output.
|
|
216
|
+
if (!previewing) {
|
|
217
|
+
const summary = renderDetectionSummary(run.plan, {
|
|
218
|
+
verbose: rt.globalFlags.verbose,
|
|
219
|
+
});
|
|
220
|
+
if (summary !== undefined)
|
|
221
|
+
rt.report?.(summary);
|
|
222
|
+
}
|
|
223
|
+
const { transport, yes, signal, abort } = rt.interaction ?? {
|
|
224
|
+
isTTY: false,
|
|
225
|
+
transport: "cli",
|
|
226
|
+
yes: true,
|
|
227
|
+
};
|
|
228
|
+
// TTY without --yes → the Ink wizard (recap + live progress). Its callbacks
|
|
229
|
+
// ride rt.exec; `onCancel` threads the run's abort in so an in-Ink Ctrl-C
|
|
230
|
+
// during execution actually stops the writes.
|
|
231
|
+
let task;
|
|
232
|
+
const wizard = interactionMode === "wizard";
|
|
233
|
+
if (wizard) {
|
|
234
|
+
const session = summon.inkPrompt(run.generator, {
|
|
235
|
+
signal,
|
|
236
|
+
onCancel: abort,
|
|
237
|
+
});
|
|
238
|
+
// Live progress in the PLAN's units, not the interpreter's: the wizard's
|
|
239
|
+
// default execution view is the per-effect transcript — right for `create`,
|
|
240
|
+
// whose unit of work IS the file, and wrong here, where one unit is one
|
|
241
|
+
// configured target and the transcript renders eighteen symlink rows for
|
|
242
|
+
// the row the plan called `skills link 9 skills → 2 folders`. Each row
|
|
243
|
+
// event carries the SAME sentence `renderProgressLine` prints, so the
|
|
244
|
+
// watcher and the recap reader see one dialect. `--verbose` withholds the
|
|
245
|
+
// listener, which falls the wizard back to the full effect transcript —
|
|
246
|
+
// the same detected-only-unless-verbose rule the detection summary and
|
|
247
|
+
// doctor already follow.
|
|
248
|
+
if (rt.globalFlags.verbose !== true) {
|
|
249
|
+
run.setRowListener((event) => session.reportStep(event));
|
|
250
|
+
}
|
|
251
|
+
rt.exec = {
|
|
252
|
+
promptHandler: session.promptHandler,
|
|
253
|
+
onEffectStart: session.onEffectStart,
|
|
254
|
+
onEffectComplete: session.onEffectComplete,
|
|
255
|
+
onLog: session.onLog,
|
|
256
|
+
dispose: session.dispose,
|
|
257
|
+
signal,
|
|
258
|
+
};
|
|
259
|
+
task = summon.execute(run.generator, {
|
|
260
|
+
prompt: session.promptHandler,
|
|
261
|
+
params: {},
|
|
262
|
+
signal,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
// Non-interactive: MCP → params-or-error; CLI/--yes/CI → defaults.
|
|
267
|
+
const prompt = transport === "mcp" ? summon.mcpPrompt({}) : summon.autoPrompt({});
|
|
268
|
+
rt.exec = {
|
|
269
|
+
promptHandler: prompt,
|
|
270
|
+
onLog: (_level, message) => process.stderr.write(`${message}\n`),
|
|
271
|
+
signal,
|
|
272
|
+
};
|
|
273
|
+
task = summon.execute(run.generator, { prompt, params: {}, signal });
|
|
274
|
+
}
|
|
275
|
+
return gen(function* () {
|
|
276
|
+
const result = yield* $(task);
|
|
277
|
+
const applied = run.applied(result.answers);
|
|
278
|
+
// Progress: one line per row on stderr for an unattended run (the Ink
|
|
279
|
+
// session already draws them for the wizard). stdout stays the data stream.
|
|
280
|
+
//
|
|
281
|
+
// A dry run reports NOTHING here. Its honest preview drives this very task
|
|
282
|
+
// with writes recorded, so the progress lines ran for real and announced
|
|
283
|
+
// "✓ config — installed" above a plan that had installed nothing.
|
|
284
|
+
if (!previewing && (!wizard || yes)) {
|
|
285
|
+
const width = Math.max(...applied.rows.map((row) => row.target.length));
|
|
286
|
+
for (const row of applied.rows) {
|
|
287
|
+
if (row.outcome === undefined)
|
|
288
|
+
continue;
|
|
289
|
+
rt.report?.(renderProgressLine(row, width));
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
// A failed row exits 1, and the recap is still shown — partial success is
|
|
293
|
+
// first class, so the run reports every row before naming the ones that did
|
|
294
|
+
// not happen. The recap goes to stderr here because the error renderer owns
|
|
295
|
+
// stdout on a failing run.
|
|
296
|
+
if (planExitFailed(applied)) {
|
|
297
|
+
rt.report?.(renderRecap(applied));
|
|
298
|
+
const failed = applied.rows.filter((row) => row.outcome?.status === "failed");
|
|
299
|
+
// ONE failure reports itself. The row already carries the cause it was
|
|
300
|
+
// given ("`bun` is not found on your PATH") and a remedy that runs on
|
|
301
|
+
// this machine; replacing them with a count would throw away the only
|
|
302
|
+
// two sentences that say what is wrong and what to do about it.
|
|
303
|
+
const only = failed.length === 1 ? failed[0] : undefined;
|
|
304
|
+
if (only?.outcome !== undefined) {
|
|
305
|
+
throw new PragmaError({
|
|
306
|
+
code: "UNSUPPORTED",
|
|
307
|
+
message: `${only.target}: ${only.outcome.note ?? "the step did not complete"}`,
|
|
308
|
+
...(only.outcome.remedy === undefined
|
|
309
|
+
? {}
|
|
310
|
+
: { recovery: { message: only.outcome.remedy } }),
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
// Several failures: name every one with its own cause, then point at the
|
|
314
|
+
// recap above. A bare list of target names would make the reader re-run
|
|
315
|
+
// each one to find out why it failed.
|
|
316
|
+
const named = failed
|
|
317
|
+
.map((row) => `${row.target} (${row.outcome?.note ?? "no cause recorded"})`)
|
|
318
|
+
.join("; ");
|
|
319
|
+
throw new PragmaError({
|
|
320
|
+
code: "UNSUPPORTED",
|
|
321
|
+
message: `${failed.length} of ${planTally(applied).accountable} targets did not complete: ${named}.`,
|
|
322
|
+
recovery: {
|
|
323
|
+
message: `The other targets are configured. Re-run the ones that did not complete: ${failed
|
|
324
|
+
.map((row) => `\`${BIN_NAME} setup ${row.target}\``)
|
|
325
|
+
.join(", ")}.`,
|
|
326
|
+
},
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
return applied;
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
/** Build a setup verb bound to its {@link SetupMode}. */
|
|
333
|
+
function setupVerb(path, summary, mode, capability, extras = {}) {
|
|
334
|
+
return {
|
|
335
|
+
path,
|
|
336
|
+
summary,
|
|
337
|
+
params: SCOPE_PARAMS,
|
|
338
|
+
output: {
|
|
339
|
+
formatters: setupFormatters,
|
|
340
|
+
// The kernel's dry-run branch renders the plan through this seam instead
|
|
341
|
+
// of dumping raw effects. Absent on every other verb, so nothing else
|
|
342
|
+
// changes shape.
|
|
343
|
+
formatPlan: (planData) => renderDryRun(planData),
|
|
344
|
+
},
|
|
345
|
+
capability,
|
|
346
|
+
...extras,
|
|
347
|
+
run: (params, rt) => runSetup(mode, rt, resolveScope(params)),
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
const setupAllVerb = setupVerb(["setup"], "Set up your config file, TAB completion, the editor extension, MCP, and skills.", "all", SELF_CAPABILITY, {
|
|
351
|
+
doc: "Shows what each target needs, then applies the ones you keep. Everything is configured in your home directory by default; the scope option moves the run to this project alone, or covers both. Without an attended terminal the plan is printed and nothing is written unless the run is explicitly confirmed.",
|
|
352
|
+
examples: [
|
|
353
|
+
{ cmd: `${BIN_NAME} setup` },
|
|
354
|
+
{
|
|
355
|
+
cmd: `${BIN_NAME} setup --dry-run`,
|
|
356
|
+
note: "show the plan, write nothing",
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
cmd: `${BIN_NAME} setup --local`,
|
|
360
|
+
note: "configure this project instead of your home directory",
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
cmd: `${BIN_NAME} setup mcp`,
|
|
364
|
+
note: "only register the MCP server",
|
|
365
|
+
},
|
|
366
|
+
],
|
|
367
|
+
});
|
|
368
|
+
const configVerb = setupVerb(["setup", "config"], "Create your global config file, filled in with the defaults.", "config", SUB_CAPABILITY);
|
|
369
|
+
const mcpVerb = setupVerb(["setup", "mcp"], `Register the ${BIN_NAME} MCP server with the AI harnesses on this machine.`, "mcp", SUB_CAPABILITY);
|
|
370
|
+
const completionsVerb = setupVerb(["setup", "completions"], "Install TAB completion for the shell you are running.", "completions", SUB_CAPABILITY);
|
|
371
|
+
const skillsVerb = setupVerb(["setup", "skills"], "Link the skills you have installed into every AI harness that reads them.", "skills", SUB_CAPABILITY);
|
|
372
|
+
const lspVerb = setupVerb(["setup", "lsp"], "Install the Terrazzo design-token extension into your VS Code-family editors.", "lsp", SUB_CAPABILITY);
|
|
373
|
+
/** The `setup` capability module (run-all self-verb + five CLI-only sub-verbs). */
|
|
374
|
+
export const setupModule = {
|
|
375
|
+
name: "setup",
|
|
376
|
+
verbs: [
|
|
377
|
+
asVerb(setupAllVerb),
|
|
378
|
+
asVerb(configVerb),
|
|
379
|
+
asVerb(completionsVerb),
|
|
380
|
+
asVerb(lspVerb),
|
|
381
|
+
asVerb(mcpVerb),
|
|
382
|
+
asVerb(skillsVerb),
|
|
383
|
+
],
|
|
384
|
+
};
|
|
385
|
+
/** Re-exported so the covenant emitter and tests can name the target set. */
|
|
386
|
+
export { TARGET_IDS };
|
|
387
|
+
//# sourceMappingURL=setup.verb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.verb.js","sourceRoot":"","sources":["../../../../src/capabilities/setup/setup.verb.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell detection + completion-script install paths.
|
|
3
|
+
*
|
|
4
|
+
* Shell selection is detection-only, and detection means the shell the user is
|
|
5
|
+
* RUNNING — read from the process tree — not the login shell `$SHELL` records.
|
|
6
|
+
* The two differ constantly and the difference is invisible until TAB fails.
|
|
7
|
+
* `$HOME` is read at call time so tests can isolate it.
|
|
8
|
+
*/
|
|
9
|
+
import { execFileSync } from "node:child_process";
|
|
10
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
+
import { homedir } from "node:os";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import { BIN_NAME } from "../../constants.js";
|
|
14
|
+
const SHELL_MAP = {
|
|
15
|
+
zsh: "zsh",
|
|
16
|
+
bash: "bash",
|
|
17
|
+
fish: "fish",
|
|
18
|
+
};
|
|
19
|
+
/** How far up the process tree to look before giving up. */
|
|
20
|
+
const MAX_ANCESTRY = 8;
|
|
21
|
+
/**
|
|
22
|
+
* The command name and parent of a pid, read from `/proc` (Linux).
|
|
23
|
+
*
|
|
24
|
+
* `/proc/<pid>/stat` is `pid (comm) state ppid …`, and `comm` may itself
|
|
25
|
+
* contain spaces and parentheses — so the fields are taken after the LAST
|
|
26
|
+
* `)`, never by splitting the whole line.
|
|
27
|
+
*
|
|
28
|
+
* @param pid - The process to inspect.
|
|
29
|
+
* @returns Its command name and parent pid, or undefined when unreadable.
|
|
30
|
+
* @note Impure — reads /proc.
|
|
31
|
+
*/
|
|
32
|
+
function procEntry(pid) {
|
|
33
|
+
try {
|
|
34
|
+
const stat = readFileSync(`/proc/${pid}/stat`, "utf8");
|
|
35
|
+
const close = stat.lastIndexOf(")");
|
|
36
|
+
const open = stat.indexOf("(");
|
|
37
|
+
if (close < 0 || open < 0)
|
|
38
|
+
return undefined;
|
|
39
|
+
const name = stat.slice(open + 1, close);
|
|
40
|
+
const rest = stat.slice(close + 2).split(" ");
|
|
41
|
+
const ppid = Number.parseInt(rest[1] ?? "", 10);
|
|
42
|
+
return Number.isFinite(ppid) ? { name, ppid } : undefined;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The same lookup for platforms without `/proc`, via one `ps` call.
|
|
50
|
+
*
|
|
51
|
+
* @param pid - The process to inspect.
|
|
52
|
+
* @returns Its command name and parent pid, or undefined.
|
|
53
|
+
* @note Impure — spawns `ps`.
|
|
54
|
+
*/
|
|
55
|
+
function psEntry(pid) {
|
|
56
|
+
try {
|
|
57
|
+
const out = execFileSync("ps", ["-o", "ppid=,comm=", "-p", String(pid)], {
|
|
58
|
+
encoding: "utf8",
|
|
59
|
+
timeout: 2000,
|
|
60
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
61
|
+
}).trim();
|
|
62
|
+
const match = /^(\d+)\s+(.*)$/.exec(out);
|
|
63
|
+
if (match === null)
|
|
64
|
+
return undefined;
|
|
65
|
+
return { name: match[2] ?? "", ppid: Number.parseInt(match[1] ?? "", 10) };
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Normalize a process name to a shell id: `-zsh`, `/bin/bash`, `zsh` all map. */
|
|
72
|
+
function asShell(name) {
|
|
73
|
+
const base = (name.split("/").pop() ?? "").replace(/^-/, "");
|
|
74
|
+
return SHELL_MAP[base];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Walk the process ancestry looking for the shell this invocation is running
|
|
78
|
+
* inside.
|
|
79
|
+
*
|
|
80
|
+
* The walk matters: a CLI reached through `npm run`, `bunx`, or a wrapper
|
|
81
|
+
* script has `node` or `sh` as its immediate parent, and the user's actual
|
|
82
|
+
* shell is a level or two further up.
|
|
83
|
+
*
|
|
84
|
+
* @returns The shell found, or undefined.
|
|
85
|
+
* @note Impure — reads the process table.
|
|
86
|
+
*/
|
|
87
|
+
function runningShell(read) {
|
|
88
|
+
const entryOf = read ?? (existsSync("/proc") ? procEntry : psEntry);
|
|
89
|
+
let pid = process.ppid;
|
|
90
|
+
for (let step = 0; step < MAX_ANCESTRY && pid > 1; step += 1) {
|
|
91
|
+
const entry = entryOf(pid);
|
|
92
|
+
if (entry === undefined)
|
|
93
|
+
return undefined;
|
|
94
|
+
const shell = asShell(entry.name);
|
|
95
|
+
if (shell !== undefined)
|
|
96
|
+
return shell;
|
|
97
|
+
pid = entry.ppid;
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Detect the shell the user is actually running in.
|
|
103
|
+
*
|
|
104
|
+
* This reads the PROCESS TREE, not `$SHELL`. `$SHELL` is the login shell
|
|
105
|
+
* recorded in `/etc/passwd`; it is not changed by starting a different shell,
|
|
106
|
+
* so a user whose account says `bash` but who lives in `zsh` was silently
|
|
107
|
+
* given a bash script — and `doctor` then reported `✓ Shell completions: bash
|
|
108
|
+
* up to date and resolving`, a green check for a shell they never open, while
|
|
109
|
+
* the shell they do use had nothing.
|
|
110
|
+
*
|
|
111
|
+
* `$SHELL` survives only as a CONTRADICTION detector. When the process tree
|
|
112
|
+
* gives no answer (a CI runner, an editor task, a daemon), a `$SHELL` value is
|
|
113
|
+
* a guess about a session that may not exist, so the answer is `ambiguous` and
|
|
114
|
+
* the caller is expected to say so rather than pick.
|
|
115
|
+
*
|
|
116
|
+
* @param read - Injected process-table reader; defaults to the real one.
|
|
117
|
+
* @returns What could be established about the running shell.
|
|
118
|
+
* @note Impure — reads the process table and `$SHELL`.
|
|
119
|
+
*/
|
|
120
|
+
export function detectShell(read) {
|
|
121
|
+
const running = runningShell(read);
|
|
122
|
+
if (running !== undefined)
|
|
123
|
+
return { kind: "detected", shell: running };
|
|
124
|
+
const login = SHELL_MAP[(process.env.SHELL ?? "").split("/").pop() ?? ""];
|
|
125
|
+
return login === undefined
|
|
126
|
+
? { kind: "unknown" }
|
|
127
|
+
: { kind: "ambiguous", login };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* The standard install path for a shell's completion script.
|
|
131
|
+
*
|
|
132
|
+
* The BASENAME is {@link BIN_NAME}, never a literal, because `emitScripts`
|
|
133
|
+
* derives the script's own `#compdef` / `complete -F` / `complete -c` from that
|
|
134
|
+
* same name, and for two of the three shells the basename decides whether the
|
|
135
|
+
* file is ever loaded. Measured against real shells with the distribution
|
|
136
|
+
* renamed to `widget9`:
|
|
137
|
+
*
|
|
138
|
+
* - **fish** autoloads `completions/<cmd>.fish` BY NAME. A correct `widget9`
|
|
139
|
+
* script in a file called `pragma.fish` is never loaded — TAB silently falls
|
|
140
|
+
* back to filenames. Verified: renaming that one file is the entire
|
|
141
|
+
* difference between candidates and no candidates.
|
|
142
|
+
* - **bash-completion** looks up `completions/<cmd>` by the command name the
|
|
143
|
+
* same way. Verified against bash-completion 2.11's `__load_completion`:
|
|
144
|
+
* with the file named `widget9`, `complete -p widget9` reports
|
|
145
|
+
* `complete -F _widget9 widget9`; with the identical file named `pragma`,
|
|
146
|
+
* `_widget9` is never defined and bash falls back to `_minimal`.
|
|
147
|
+
* - **zsh** does NOT work that way: `compinit` binds by the `#compdef` tag
|
|
148
|
+
* inside the file, so `~/.zfunc/_pragma` holding `#compdef widget9` does
|
|
149
|
+
* complete `widget9` (verified — `_comps[widget9]` resolves to `_pragma`).
|
|
150
|
+
* The basename still matters, for a different reason: it names the function
|
|
151
|
+
* zsh autoloads, and two distributions both writing `_pragma` would silently
|
|
152
|
+
* overwrite each other's completions.
|
|
153
|
+
*
|
|
154
|
+
* Either way `setup completions` and `doctor` report success, so nothing else
|
|
155
|
+
* would tell the user.
|
|
156
|
+
*
|
|
157
|
+
* @param shell - The target shell.
|
|
158
|
+
* @returns The absolute path the completion script is written to.
|
|
159
|
+
* @note Impure — reads the home directory.
|
|
160
|
+
*/
|
|
161
|
+
export function completionScriptPath(shell) {
|
|
162
|
+
const home = homedir();
|
|
163
|
+
switch (shell) {
|
|
164
|
+
case "zsh":
|
|
165
|
+
return join(home, ".zfunc", `_${BIN_NAME}`);
|
|
166
|
+
case "bash":
|
|
167
|
+
return join(home, ".local", "share", "bash-completion", "completions", BIN_NAME);
|
|
168
|
+
case "fish":
|
|
169
|
+
return join(home, ".config", "fish", "completions", `${BIN_NAME}.fish`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* The post-install activation hint for a shell.
|
|
174
|
+
*
|
|
175
|
+
* bash and fish install into directories their completion systems auto-load, so
|
|
176
|
+
* the only step left is a fresh shell. zsh's `~/.zfunc` is NOT auto-loaded: the
|
|
177
|
+
* script never loads unless `~/.zfunc` is on `$fpath` BEFORE `compinit` runs —
|
|
178
|
+
* the single trap every zsh user hits, so we spell out the exact `.zshrc` lines.
|
|
179
|
+
*
|
|
180
|
+
* @param shell - The shell the script was installed for.
|
|
181
|
+
* @returns A one-or-more-line activation instruction.
|
|
182
|
+
*/
|
|
183
|
+
export function activationHint(shell) {
|
|
184
|
+
switch (shell) {
|
|
185
|
+
case "zsh":
|
|
186
|
+
return ("To activate, ensure ~/.zfunc is on your fpath BEFORE compinit. Add to ~/.zshrc:\n" +
|
|
187
|
+
" fpath=(~/.zfunc $fpath)\n" +
|
|
188
|
+
" autoload -Uz compinit && compinit\n" +
|
|
189
|
+
"Then restart your shell (or run `exec zsh`).");
|
|
190
|
+
case "bash":
|
|
191
|
+
return "To activate, restart your shell (bash-completion auto-loads the script).";
|
|
192
|
+
case "fish":
|
|
193
|
+
return "To activate, restart your shell (fish auto-loads the script).";
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../../src/capabilities/setup/shell.ts"],"names":[],"mappings":"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"}
|