@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
package/src/kernel/copy.test.ts
CHANGED
|
@@ -28,6 +28,11 @@
|
|
|
28
28
|
* in a capability source — became content the config declares
|
|
29
29
|
* (`pragma.conf.ts#colophon`), which is what made removing it checkable.
|
|
30
30
|
*
|
|
31
|
+
* Beside the naming rules, the same scanner enforces the HOUSE VOICE rules for
|
|
32
|
+
* user-facing copy ({@link COPY_RULES}, authored as data in `copy.ts`) over
|
|
33
|
+
* both file sets — the kernel set above and `src/capabilities/**` — in the
|
|
34
|
+
* last describe of this file. See `copy.ts` for what each rule bans and why.
|
|
35
|
+
*
|
|
31
36
|
* NOTE for a reader of an older revision: this docblock used to say the
|
|
32
37
|
* `examples[].cmd` sweep and the `docs/reference/*.md` regen "have to move
|
|
33
38
|
* together". They must be CONSISTENT, not simultaneous — the whole sweep was
|
|
@@ -41,6 +46,7 @@ import { fileURLToPath } from "node:url";
|
|
|
41
46
|
import { describe, expect, it } from "vitest";
|
|
42
47
|
import conf from "../../pragma.conf.js";
|
|
43
48
|
import { BIN_NAME } from "../constants.js";
|
|
49
|
+
import { COPY_RULES } from "./copy.js";
|
|
44
50
|
|
|
45
51
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
46
52
|
const root = resolve(here, "..");
|
|
@@ -250,13 +256,17 @@ function pushCopy(copy: string[], literal: string): void {
|
|
|
250
256
|
* `file: literal` for every authored literal matching `pattern`, so a failure
|
|
251
257
|
* names its offenders instead of only counting them.
|
|
252
258
|
*
|
|
253
|
-
* @param pattern - What
|
|
259
|
+
* @param pattern - What the copy may not contain.
|
|
260
|
+
* @param sources - The files to read; the kernel set by default.
|
|
254
261
|
* @returns One entry per offending literal.
|
|
255
|
-
* @note Impure — reads every
|
|
262
|
+
* @note Impure — reads every listed source.
|
|
256
263
|
*/
|
|
257
|
-
function findOffenders(
|
|
264
|
+
function findOffenders(
|
|
265
|
+
pattern: RegExp,
|
|
266
|
+
sources: readonly string[] = files,
|
|
267
|
+
): string[] {
|
|
258
268
|
const found: string[] = [];
|
|
259
|
-
for (const file of
|
|
269
|
+
for (const file of sources) {
|
|
260
270
|
for (const literal of readCopy(readFileSync(file, "utf-8"))) {
|
|
261
271
|
if (pattern.test(literal)) {
|
|
262
272
|
found.push(`${relative(root, file)}: ${literal}`);
|
|
@@ -451,3 +461,23 @@ describe("capability commands (PROTECTED)", () => {
|
|
|
451
461
|
expect(offenders).toEqual([]);
|
|
452
462
|
});
|
|
453
463
|
});
|
|
464
|
+
|
|
465
|
+
describe("user-facing copy house style (PROTECTED)", () => {
|
|
466
|
+
// The voice rules ({@link COPY_RULES}) run over BOTH file sets the naming
|
|
467
|
+
// rules above read — the kernel set and the capability set — because voice,
|
|
468
|
+
// unlike the distribution's name, is not content anywhere: a capability's
|
|
469
|
+
// error is the same product speaking as a kernel diagnostic. `readCopy`
|
|
470
|
+
// keeps comments, regexes, specifiers and test files out of scope, so a
|
|
471
|
+
// rule fires only on a string a user can actually be shown.
|
|
472
|
+
//
|
|
473
|
+
// One `it` per rule, NAMED by the rule, so a red run states the rule that
|
|
474
|
+
// fired; the assertion message carries the fix. What a failure prints is the
|
|
475
|
+
// offender list plus those two strings — everything needed to correct the
|
|
476
|
+
// copy lives in this repo.
|
|
477
|
+
const allSources = [...files, ...capabilitySources];
|
|
478
|
+
for (const { pattern, rule, fix } of COPY_RULES) {
|
|
479
|
+
it(rule, () => {
|
|
480
|
+
expect(findOffenders(pattern, allSources), fix).toEqual([]);
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The house rules for user-facing copy, as data.
|
|
3
|
+
*
|
|
4
|
+
* Every string this CLI prints is one product speaking, and a product with one
|
|
5
|
+
* voice phrases one meaning one way. These descriptors name the phrasings that
|
|
6
|
+
* are out of that voice, why, and what to write instead; `copy.test.ts` runs
|
|
7
|
+
* them over every authored string literal in the tree — the same scanner and
|
|
8
|
+
* file sets as the naming rules there, so comments, regexes, module specifiers
|
|
9
|
+
* and test fixtures are never in scope. A failure quotes the offending literal,
|
|
10
|
+
* the rule, and the fix, and nothing else: everything a maintainer needs to
|
|
11
|
+
* correct the string lives in this file.
|
|
12
|
+
*
|
|
13
|
+
* Rules are DATA rather than assertions so the set can grow (or move into a
|
|
14
|
+
* shared standards package) without rewriting the guard, and so each rule's
|
|
15
|
+
* pattern, statement and fix are reviewed together as one unit. Precision is
|
|
16
|
+
* the set's credibility: a pattern that fires on domain vocabulary gets
|
|
17
|
+
* disabled in practice, so a carve-out is encoded in the pattern itself — with
|
|
18
|
+
* its reason — never in an exemption list beside it.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/** One banned phrasing: what copy may not contain, why, and the rewrite. */
|
|
22
|
+
export interface CopyRule {
|
|
23
|
+
/** What the copy must not contain. */
|
|
24
|
+
readonly pattern: RegExp;
|
|
25
|
+
/** The house rule, stated for a reader of THIS codebase. */
|
|
26
|
+
readonly rule: string;
|
|
27
|
+
/** How to fix an offending string. */
|
|
28
|
+
readonly fix: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** The banned phrasings for user-facing copy. Enforced by `copy.test.ts`. */
|
|
32
|
+
export const COPY_RULES: readonly CopyRule[] = [
|
|
33
|
+
{
|
|
34
|
+
pattern: /\b(?:could not|failed to|unable to)\b/i,
|
|
35
|
+
rule: "User-facing copy says `cannot` — one phrasing for one meaning, so the CLI reads as one voice.",
|
|
36
|
+
fix: "Rewrite with `cannot` (present tense, no hedging), naming what is wrong rather than what was attempted.",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
// `\w+n't` covers every negated contraction in one arm; the lookbehind
|
|
40
|
+
// carves out `do/don't`, which is domain vocabulary — the name of the
|
|
41
|
+
// paired good/bad example a coding standard ships — not conversational
|
|
42
|
+
// tone. The second arm lists the pronoun contractions, which have no
|
|
43
|
+
// shared suffix shape.
|
|
44
|
+
pattern:
|
|
45
|
+
/\b(?<!do\/)\w+n't\b|\b(?:you|we|they|it|that|there|here|what|let)'(?:re|ve|ll|s|d)\b|\bi'm\b/i,
|
|
46
|
+
rule: "No contractions in user-facing copy — instructions read as statements, not conversation.",
|
|
47
|
+
fix: "Spell the words out, or restructure the sentence to drop the second person.",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
pattern: /\b(?:please|sorry|oops)\b/i,
|
|
51
|
+
rule: "The CLI does not apologise or plead; it states the fact and the action.",
|
|
52
|
+
fix: "Drop the pleading word and instruct directly: `Report this issue at <url>.`",
|
|
53
|
+
},
|
|
54
|
+
];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { ISSUES_URL } from "../../constants.js";
|
|
2
3
|
import { errorEnvelope, successEnvelope } from "../render/envelope.js";
|
|
3
4
|
import { PragmaError } from "./PragmaError.js";
|
|
4
5
|
import { cliRecovery } from "./recovery.js";
|
|
@@ -56,7 +57,9 @@ describe("PragmaError factories", () => {
|
|
|
56
57
|
it("internalError attaches a report hint", () => {
|
|
57
58
|
const error = PragmaError.internalError("boom");
|
|
58
59
|
expect(error.code).toBe("INTERNAL_ERROR");
|
|
59
|
-
expect(error.recovery).toEqual({
|
|
60
|
+
expect(error.recovery).toEqual({
|
|
61
|
+
message: `Report this issue at ${ISSUES_URL}.`,
|
|
62
|
+
});
|
|
60
63
|
});
|
|
61
64
|
});
|
|
62
65
|
|
|
@@ -66,7 +69,7 @@ describe("serializeError", () => {
|
|
|
66
69
|
expect(serializeError(error)).toEqual({
|
|
67
70
|
code: "INTERNAL_ERROR",
|
|
68
71
|
message: "Internal error: boom",
|
|
69
|
-
recovery: { message:
|
|
72
|
+
recovery: { message: `Report this issue at ${ISSUES_URL}.` },
|
|
70
73
|
});
|
|
71
74
|
});
|
|
72
75
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ISSUES_URL } from "../../constants.js";
|
|
1
2
|
import type { ErrorCode, PragmaErrorData, Recovery } from "./types.js";
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -168,13 +169,14 @@ class PragmaError extends Error {
|
|
|
168
169
|
* Factory: unexpected internal failure (a bug).
|
|
169
170
|
*
|
|
170
171
|
* @param reason - Description of the internal error.
|
|
171
|
-
* @returns PragmaError with code `INTERNAL_ERROR` and a
|
|
172
|
+
* @returns PragmaError with code `INTERNAL_ERROR` and a report-this hint
|
|
173
|
+
* naming the issue tracker.
|
|
172
174
|
*/
|
|
173
175
|
static internalError(reason: string): PragmaError {
|
|
174
176
|
return new PragmaError({
|
|
175
177
|
code: "INTERNAL_ERROR",
|
|
176
178
|
message: `Internal error: ${reason}`,
|
|
177
|
-
recovery: { message:
|
|
179
|
+
recovery: { message: `Report this issue at ${ISSUES_URL}.` },
|
|
178
180
|
});
|
|
179
181
|
}
|
|
180
182
|
}
|
|
@@ -25,11 +25,13 @@ const ERROR_CODES = [
|
|
|
25
25
|
"CONFIG_ERROR",
|
|
26
26
|
"INTERNAL_ERROR",
|
|
27
27
|
// A runtime condition that is NOT a bug and NOT a usage mistake, so it must
|
|
28
|
-
// NOT collapse to INTERNAL_ERROR's "
|
|
29
|
-
// genuinely unavailable in this
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
28
|
+
// NOT collapse to INTERNAL_ERROR's "report this issue": a capability
|
|
29
|
+
// genuinely unavailable in this environment (`create` refusing when its
|
|
30
|
+
// lazily-imported generator runtime cannot be loaded at all — the
|
|
31
|
+
// module-not-found backstop in `capabilities/create/create.verb.ts`, which
|
|
32
|
+
// means the `@canonical/summon-*` dependencies could not be resolved, i.e. a
|
|
33
|
+
// broken or pruned install; every declared generator otherwise runs
|
|
34
|
+
// everywhere), OR an external command
|
|
33
35
|
// that RAN and failed for a fixable environment reason (a denied global
|
|
34
36
|
// `npm i -g`, a network/registry failure — see `shared/assertExecOk`). Both
|
|
35
37
|
// carry an actionable recovery and map to the generic runtime exit 1.
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* `MISSING_REQUIRED_ANSWER` / `GENERATOR_INVALID_ANSWER` for absent or invalid
|
|
7
7
|
* non-interactive answers. `runTask` rethrows these as a `TaskExecutionError`
|
|
8
8
|
* carrying `.code`. Without a bridge the CLI/MCP boundary collapses every
|
|
9
|
-
* non-`PragmaError` to INTERNAL_ERROR + "
|
|
9
|
+
* non-`PragmaError` to INTERNAL_ERROR + "report this issue" — telling a
|
|
10
10
|
* user to file a bug for cancelling their own scaffold.
|
|
11
11
|
*
|
|
12
12
|
* The codes are matched as STRING LITERALS, never imported from summon-core, so
|
|
@@ -62,15 +62,37 @@ export function isInterruption(error: unknown): boolean {
|
|
|
62
62
|
return taskErrorCode(error) === TASK_INTERRUPTED;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
/**
|
|
66
|
+
* The {@link PragmaError} a task failure CARRIES, if any. A task-layer failure
|
|
67
|
+
* raised through the failure channel (`failPragma` — so an enclosing `recover`
|
|
68
|
+
* such as setup's per-step isolation can catch it, which a synchronous throw
|
|
69
|
+
* bypasses) stores the original PragmaError as the TaskError's `cause`;
|
|
70
|
+
* `runTask` then wraps that TaskError in a `TaskExecutionError` whose
|
|
71
|
+
* `taskError` carries it. Walk both wrappers (bounded — the shapes nest at
|
|
72
|
+
* most a few levels) so the boundary recovers the ORIGINAL error with its
|
|
73
|
+
* code, message, and recovery intact.
|
|
74
|
+
*/
|
|
75
|
+
function carriedPragmaError(error: unknown): PragmaError | undefined {
|
|
76
|
+
let current: unknown = error;
|
|
77
|
+
for (let depth = 0; depth < 4 && current !== undefined; depth += 1) {
|
|
78
|
+
if (current instanceof PragmaError) return current;
|
|
79
|
+
const record = current as { taskError?: unknown; cause?: unknown } | null;
|
|
80
|
+
current = record?.taskError ?? record?.cause;
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
|
|
65
85
|
/**
|
|
66
86
|
* Coerce a thrown value into a {@link PragmaError} for the CLI/MCP boundary,
|
|
67
|
-
* bridging summon-core task-error codes:
|
|
68
|
-
*
|
|
69
|
-
* unchanged;
|
|
70
|
-
*
|
|
87
|
+
* bridging summon-core task-error codes: a `PragmaError` (direct, or carried
|
|
88
|
+
* through the task failure channel as a TaskError `cause`) passes through
|
|
89
|
+
* unchanged; absent/invalid non-interactive answers become INVALID_INPUT (a
|
|
90
|
+
* usage error, exit 2); everything else stays INTERNAL_ERROR. Cancellation is
|
|
91
|
+
* handled separately by {@link isCancellation} as a clean, non-error outcome.
|
|
71
92
|
*/
|
|
72
93
|
export function asPragmaError(error: unknown): PragmaError {
|
|
73
|
-
|
|
94
|
+
const carried = carriedPragmaError(error);
|
|
95
|
+
if (carried !== undefined) return carried;
|
|
74
96
|
const message = error instanceof Error ? error.message : String(error);
|
|
75
97
|
const code = taskErrorCode(error);
|
|
76
98
|
if (code !== undefined && ANSWER_USAGE_CODES.has(code)) {
|
|
@@ -10,6 +10,20 @@
|
|
|
10
10
|
* that were actually wrong were raw `cli:` object literals that never reached
|
|
11
11
|
* this function at all. `kernel/copy.test.ts` covers those, at the position.
|
|
12
12
|
*
|
|
13
|
+
* A THIRD authoring route is also legal and reached by NEITHER guard: a `cli`
|
|
14
|
+
* DERIVED from the program's own name at the call site. One site does this —
|
|
15
|
+
* the create mount (`capabilities/create/mount.ts`,
|
|
16
|
+
* `[...detail.chain, suggestion].join(" ")`), whose `chain[0]` is the root
|
|
17
|
+
* Commander program's name, `BIN_NAME` by wiring. It bypasses
|
|
18
|
+
* {@link cliRecovery}, and the position rule is structurally blind to it (it
|
|
19
|
+
* flags QUOTED literals containing the distribution's name, never a computed
|
|
20
|
+
* expression) — so D5 holds there by derivation, and the derivation is pinned
|
|
21
|
+
* where the value surfaces: `createGrammar.test.ts` COMPOSES its expected
|
|
22
|
+
* `cli` from {@link RECOVERY_CLI_PREFIX}, so a renamed root program reddens
|
|
23
|
+
* the cell naming the constant. (A separate `startsWith` assertion cannot
|
|
24
|
+
* pin it — behind an exact pin of the same value it has no reachable
|
|
25
|
+
* failing input.)
|
|
26
|
+
*
|
|
13
27
|
* `kernel/packs/schema.ts` holds a user-authored pack's `emptyRecovery.cli` to
|
|
14
28
|
* the same shape from the other side — it must NOT carry a prefix, because the
|
|
15
29
|
* consuming distribution's renderer supplies one.
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* whichever transport they use.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import type { OutputFormat } from "../../constants.js";
|
|
10
11
|
import type { PragmaError } from "./PragmaError.js";
|
|
11
12
|
import { serializeError } from "./serialize.js";
|
|
12
13
|
|
|
@@ -98,4 +99,44 @@ function renderErrorJson(error: PragmaError): string {
|
|
|
98
99
|
return JSON.stringify({ ok: false, error: serializeError(error) });
|
|
99
100
|
}
|
|
100
101
|
|
|
101
|
-
|
|
102
|
+
/**
|
|
103
|
+
* Render an error for an EXPLICITLY requested machine format, or decline.
|
|
104
|
+
*
|
|
105
|
+
* The ONE machine-format envelope decision for the usage-error surfaces —
|
|
106
|
+
* `handleProgramError`'s Commander parse failures (the unknown-command arm
|
|
107
|
+
* included), the create mount's projection usage-error writer, and
|
|
108
|
+
* `writeRefusal`: an explicit `--format json` renders the failure envelope,
|
|
109
|
+
* an explicit `--format llm` the condensed Markdown form, and anything else
|
|
110
|
+
* returns `undefined` so the caller keeps its raw default bytes.
|
|
111
|
+
* Auto-detected llm is excluded by construction — `parseGlobalFlags` leaves
|
|
112
|
+
* `format` at `"plain"` under auto-detection and records `autoLlm`
|
|
113
|
+
* separately — so an inferred output mode can never move the default
|
|
114
|
+
* (cross-CLI parity) bytes. Hoisted so the gate and the renderer pick exist
|
|
115
|
+
* ONCE instead of drifting per call site (they had already split: sites
|
|
116
|
+
* gated on json only vs json|llm, and `--format llm` enveloped some members
|
|
117
|
+
* of the usage-error class while siblings stayed raw). Deliberately NOT
|
|
118
|
+
* routed through here: the always-render sites with no raw arm to arbitrate
|
|
119
|
+
* — `renderStartupError`, bin.ts's bad-`--format` rejection,
|
|
120
|
+
* `handleProgramError`'s non-Commander fallthrough, and dispatch's
|
|
121
|
+
* `renderError` (which deliberately includes autoLlm for run errors) — each
|
|
122
|
+
* picks a PragmaError renderer directly.
|
|
123
|
+
*
|
|
124
|
+
* @param error - The structured error to render.
|
|
125
|
+
* @param format - The parsed global `--format` value.
|
|
126
|
+
* @returns The rendered string for `json`/`llm`; `undefined` for `plain`.
|
|
127
|
+
*/
|
|
128
|
+
function renderErrorForFormat(
|
|
129
|
+
error: PragmaError,
|
|
130
|
+
format: OutputFormat,
|
|
131
|
+
): string | undefined {
|
|
132
|
+
if (format === "json") return renderErrorJson(error);
|
|
133
|
+
if (format === "llm") return renderErrorLlm(error);
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export {
|
|
138
|
+
renderErrorForFormat,
|
|
139
|
+
renderErrorJson,
|
|
140
|
+
renderErrorLlm,
|
|
141
|
+
renderErrorPlain,
|
|
142
|
+
};
|
|
@@ -17,7 +17,10 @@ type ErrorCode = (typeof ERROR_CODES)[number];
|
|
|
17
17
|
* `cli` — when present — is the command as a user would type it: this
|
|
18
18
|
* distribution's own bin name (`RECOVERY_CLI_PREFIX`) plus a grammar path (D5).
|
|
19
19
|
* `cliRecovery` takes the path alone and prepends the prefix, so there is no
|
|
20
|
-
* assertion to make
|
|
20
|
+
* assertion to make; the one COMPUTED producer (the create mount) derives
|
|
21
|
+
* the prefix from the program's own name, pinned by a test expectation
|
|
22
|
+
* COMPOSED from `RECOVERY_CLI_PREFIX` — the routes are enumerated in the
|
|
23
|
+
* docblock on `error/recovery.ts`.
|
|
21
24
|
*/
|
|
22
25
|
interface Recovery {
|
|
23
26
|
/** Human-readable recovery guidance. */
|
|
@@ -54,6 +57,23 @@ interface PragmaErrorData {
|
|
|
54
57
|
interface ErrorPayload {
|
|
55
58
|
readonly code: ErrorCode;
|
|
56
59
|
readonly message: string;
|
|
60
|
+
/**
|
|
61
|
+
* Fuzzy-matched alternative names — BARE candidate tokens the caller can
|
|
62
|
+
* substitute for the one token it typed (a verb, a tree segment), never
|
|
63
|
+
* full invocations. The FUZZY tiers serialize this one convention:
|
|
64
|
+
* bin.ts's unknown-command tier emits the candidate name (`block`) and
|
|
65
|
+
* the create mount's unknown-segment tier the candidate segment
|
|
66
|
+
* (`react`); the corrected full command line, when one is shown, lives
|
|
67
|
+
* in the default prose did-you-mean rendering, not in this field. An
|
|
68
|
+
* excess positional is NOT a fuzzy match — its matched operand may be
|
|
69
|
+
* the very token its message calls unexpected, or one the message never
|
|
70
|
+
* names — so that producer omits this field entirely and instead ships
|
|
71
|
+
* the runnable corrected command as `recovery.cli` WHEN an operand
|
|
72
|
+
* names a sibling or child segment resolving to a declared runnable
|
|
73
|
+
* leaf (the prose did-you-mean condition, narrowed to runnable — a
|
|
74
|
+
* matched namespace keeps the prose hint but ships no recovery); with
|
|
75
|
+
* no runnable match the envelope carries neither optional field.
|
|
76
|
+
*/
|
|
57
77
|
readonly suggestions?: readonly string[];
|
|
58
78
|
readonly recovery?: Recovery;
|
|
59
79
|
readonly validOptions?: readonly string[];
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The kernel's own top-level declarations — the small set of facts that belong
|
|
3
|
+
* to no sub-domain because every sub-domain may need them.
|
|
4
|
+
*
|
|
5
|
+
* This is NOT a facade over the kernel. `kernel/` is a namespace of domains,
|
|
6
|
+
* each of which keeps its own barrel (`config/`, `render/`, `runtime/`,
|
|
7
|
+
* `packs/`, `error/`, `spec/`, `completion/`, `project/…`); a consumer wanting
|
|
8
|
+
* one of those imports that domain's barrel, not this one. What lives here is
|
|
9
|
+
* only what sits directly in `kernel/`, and the bar for putting a file there
|
|
10
|
+
* is high: it must be a declaration the kernel makes about itself rather than
|
|
11
|
+
* a step in any one pipeline.
|
|
12
|
+
*
|
|
13
|
+
* Today that is the declared vocabulary and the interactivity vocabulary. The
|
|
14
|
+
* latter (`interactivity.ts`) names the questions about attended streams — is
|
|
15
|
+
* stdout captured, may we prompt, may we color (that third one lives with the
|
|
16
|
+
* styler, for the dependency reason its docblock records) — which render,
|
|
17
|
+
* dispatch and flag parsing each used to answer with their own inline probe.
|
|
18
|
+
* They are different questions over different streams, and the names are what
|
|
19
|
+
* keeps them from being flattened into one flag.
|
|
20
|
+
*
|
|
21
|
+
* The declared vocabulary is the distribution's mapping from the roles the
|
|
22
|
+
* CLI knows (a prompt, a resource) onto the RDF terms that actually
|
|
23
|
+
* carry them in the active graph. It is parsed once at module load and read
|
|
24
|
+
* from the prompt capability, the MCP prompt source, and the pack index
|
|
25
|
+
* builder, none of which owns it and any of which would otherwise hardcode
|
|
26
|
+
* someone else's IRIs.
|
|
27
|
+
*
|
|
28
|
+
* The copy-gate rule table (`copy.ts`) deliberately stays off this barrel. It
|
|
29
|
+
* is reviewed data consumed by its own test and by nothing else at runtime;
|
|
30
|
+
* exporting it here would advertise a runtime API the gate does not have.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
export { canPrompt, stdoutIsCaptured } from "./interactivity.js";
|
|
34
|
+
export type { DeclaredVocabulary } from "./vocabulary.js";
|
|
35
|
+
export { VOCABULARY } from "./vocabulary.js";
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
3
|
+
import { canPrompt, stdoutIsCaptured } from "./interactivity.js";
|
|
4
|
+
import { canColor } from "./render/style.js";
|
|
5
|
+
|
|
6
|
+
/** Force a stream's `isTTY`, as only a test may. */
|
|
7
|
+
const setTTY = (
|
|
8
|
+
stream: NodeJS.ReadStream | NodeJS.WriteStream,
|
|
9
|
+
value: boolean | undefined,
|
|
10
|
+
): void => {
|
|
11
|
+
(stream as { isTTY?: boolean }).isTTY = value;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const savedIn = process.stdin.isTTY;
|
|
15
|
+
const savedOut = process.stdout.isTTY;
|
|
16
|
+
const savedErr = process.stderr.isTTY;
|
|
17
|
+
const savedLevel = chalk.level;
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
setTTY(process.stdin, savedIn);
|
|
20
|
+
setTTY(process.stdout, savedOut);
|
|
21
|
+
setTTY(process.stderr, savedErr);
|
|
22
|
+
chalk.level = savedLevel;
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
describe("the interactivity vocabulary asks THREE questions, not one", () => {
|
|
26
|
+
it("a captured stdout with an attended terminal is still promptable", () => {
|
|
27
|
+
// The case that makes flattening these wrong: an agent runs a mutating
|
|
28
|
+
// verb with `| cat` while a terminal is still attached. Answering the
|
|
29
|
+
// prompting question with stdout's probe would refuse a human; answering
|
|
30
|
+
// the output-shape question with stdin's would hand an agent a page of
|
|
31
|
+
// decoration it cannot use.
|
|
32
|
+
setTTY(process.stdout, false);
|
|
33
|
+
setTTY(process.stdin, true);
|
|
34
|
+
setTTY(process.stderr, true);
|
|
35
|
+
expect(stdoutIsCaptured()).toBe(true);
|
|
36
|
+
expect(canPrompt()).toBe(true);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("a redirected stderr is NOT promptable, however attended stdout is", () => {
|
|
40
|
+
// `<verb> 2>/dev/null`: the step sequence renders to stderr, so gating on
|
|
41
|
+
// stdout would mount an invisible render that then blocks on stdin.
|
|
42
|
+
setTTY(process.stdout, true);
|
|
43
|
+
setTTY(process.stdin, true);
|
|
44
|
+
setTTY(process.stderr, false);
|
|
45
|
+
expect(stdoutIsCaptured()).toBe(false);
|
|
46
|
+
expect(canPrompt()).toBe(false);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("stdin alone does not make a run promptable", () => {
|
|
50
|
+
setTTY(process.stdin, false);
|
|
51
|
+
setTTY(process.stderr, true);
|
|
52
|
+
expect(canPrompt()).toBe(false);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("colour needs the terminal AND a usable chalk level", () => {
|
|
56
|
+
setTTY(process.stdout, true);
|
|
57
|
+
chalk.level = 1;
|
|
58
|
+
expect(canColor()).toBe(true);
|
|
59
|
+
// Off in CI-shaped environments where `supports-color` fires off a TTY…
|
|
60
|
+
setTTY(process.stdout, false);
|
|
61
|
+
expect(canColor()).toBe(false);
|
|
62
|
+
// …and off whenever the level is zeroed (what `NO_COLOR` does at load).
|
|
63
|
+
setTTY(process.stdout, true);
|
|
64
|
+
chalk.level = 0;
|
|
65
|
+
expect(canColor()).toBe(false);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("treats an absent isTTY as captured / unpromptable, never as attended", () => {
|
|
69
|
+
setTTY(process.stdout, undefined);
|
|
70
|
+
setTTY(process.stdin, undefined);
|
|
71
|
+
setTTY(process.stderr, undefined);
|
|
72
|
+
expect(stdoutIsCaptured()).toBe(true);
|
|
73
|
+
expect(canPrompt()).toBe(false);
|
|
74
|
+
expect(canColor()).toBe(false);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The interactivity vocabulary — three named questions over three streams.
|
|
3
|
+
*
|
|
4
|
+
* Every one of these used to be spelled inline as a bare `process.<stream>
|
|
5
|
+
* .isTTY === true` at the site that needed it, in four places, and the
|
|
6
|
+
* spellings did not agree — because they are NOT the same question. Naming them
|
|
7
|
+
* is the point: the names are what stop the next reader from "simplifying"
|
|
8
|
+
* three probes into one flag.
|
|
9
|
+
*
|
|
10
|
+
* - {@link stdoutIsCaptured} reads **stdout**. It governs OUTPUT SHAPE: whether
|
|
11
|
+
* a consumer is piping the data stream somewhere (the shape an agent
|
|
12
|
+
* captures), which is what AUTO-INFERS the condensed `llm` default. Capture
|
|
13
|
+
* is the inference, not the gate: what drops the root-help wordmark is the
|
|
14
|
+
* resulting shape — `llm` or `json` — so an explicit `--format plain` through
|
|
15
|
+
* a pipe is captured and keeps the art, while `--format llm` on an attended
|
|
16
|
+
* terminal is not captured and drops it. Explicit format beats inference, in
|
|
17
|
+
* both directions.
|
|
18
|
+
* - {@link canPrompt} reads **stdin AND stderr** — never stdout. The step
|
|
19
|
+
* sequence renders to stderr and reads stdin, so `<verb> 2>/dev/null` is
|
|
20
|
+
* non-interactive while `<verb> | cat` is not. Gating this one on stdout
|
|
21
|
+
* would mount an invisible render that then blocks on stdin.
|
|
22
|
+
* - `canColor` (`render/style.ts`) reads **stdout** plus chalk's own color
|
|
23
|
+
* level, so piped, redirected and MCP output stays byte-stable even where
|
|
24
|
+
* `supports-color` fires off a TTY. It is the one question of the three that
|
|
25
|
+
* lives with the styler rather than here, because it needs `chalk` and this
|
|
26
|
+
* module is imported by global-flag parsing — which runs before `--version`
|
|
27
|
+
* answers, on a path that must load nothing it does not use. It still asks
|
|
28
|
+
* its stdout half through {@link stdoutIsCaptured}, so the three stay one
|
|
29
|
+
* vocabulary.
|
|
30
|
+
*
|
|
31
|
+
* The distinction is not academic: an agent running a mutating verb with its
|
|
32
|
+
* stdout captured but a terminal still attached is CAPTURED and PROMPTABLE at
|
|
33
|
+
* the same time. Answering either question with the other's probe would either
|
|
34
|
+
* hang a pipeline or refuse a human.
|
|
35
|
+
*
|
|
36
|
+
* These are the only sanctioned readers of `process.*.isTTY` outside a test.
|
|
37
|
+
* Each is a plain function rather than a module-load constant because a test
|
|
38
|
+
* assigns the streams' `isTTY` per case, and a constant would freeze the first
|
|
39
|
+
* value the process ever saw.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Whether stdout is going somewhere other than an attended terminal — piped,
|
|
44
|
+
* redirected, or read by a parent process.
|
|
45
|
+
*
|
|
46
|
+
* The OUTPUT-SHAPE question, and stdout's alone: it says nothing about whether
|
|
47
|
+
* a human is available to answer a prompt (see {@link canPrompt}).
|
|
48
|
+
*
|
|
49
|
+
* @returns True when stdout is not a TTY.
|
|
50
|
+
* @note Impure — reads `process.stdout.isTTY`.
|
|
51
|
+
*/
|
|
52
|
+
export function stdoutIsCaptured(): boolean {
|
|
53
|
+
return process.stdout.isTTY !== true;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Whether this invocation may ask the user a question: stdin AND stderr are
|
|
58
|
+
* both attended terminals.
|
|
59
|
+
*
|
|
60
|
+
* THE interactivity gate (H3). One exported fact, so the kernel's interaction
|
|
61
|
+
* context and a mounted subtree's own decision can never disagree about what
|
|
62
|
+
* "a TTY" means. Deliberately blind to stdout — see the module docblock.
|
|
63
|
+
*
|
|
64
|
+
* @returns True when a prompt can be both drawn and answered.
|
|
65
|
+
* @note Impure — reads `process.stdin.isTTY` and `process.stderr.isTTY`.
|
|
66
|
+
*/
|
|
67
|
+
export function canPrompt(): boolean {
|
|
68
|
+
return process.stdin.isTTY === true && process.stderr.isTTY === true;
|
|
69
|
+
}
|
|
@@ -24,11 +24,11 @@
|
|
|
24
24
|
* costs nothing on `--help`/`__complete`.
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
|
-
import type { ConfigLayers } from "../config/
|
|
28
|
-
import { PragmaError } from "../error/
|
|
27
|
+
import type { ConfigLayers } from "../config/index.js";
|
|
28
|
+
import { PragmaError } from "../error/index.js";
|
|
29
29
|
import type { PackStoryRecord } from "../runtime/graphpack/stories.js";
|
|
30
|
-
import type { CapabilityModule } from "../spec/
|
|
31
|
-
import {
|
|
30
|
+
import type { CapabilityModule } from "../spec/index.js";
|
|
31
|
+
import { compileStoryModule } from "./compile.js";
|
|
32
32
|
import { parsePackDefinition } from "./schema.js";
|
|
33
33
|
import type { PackDefinition, PackEntry } from "./types.js";
|
|
34
34
|
import { assertUniqueVerbs } from "./uniqueness.js";
|
|
@@ -172,16 +172,14 @@ export function assembleEffectiveModules(
|
|
|
172
172
|
// story both on its pack and at the top level is a refinement, not an error.
|
|
173
173
|
const dynamic = new Map<string, CapabilityModule>();
|
|
174
174
|
for (const entry of packageStories) {
|
|
175
|
-
dynamic.set(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
verbs: compilePack(
|
|
175
|
+
dynamic.set(
|
|
176
|
+
entry.definition.noun,
|
|
177
|
+
compileStoryModule(
|
|
179
178
|
entry.definition,
|
|
180
179
|
{ label: entry.source, origin: "package" },
|
|
181
180
|
prefixes,
|
|
182
181
|
),
|
|
183
|
-
|
|
184
|
-
});
|
|
182
|
+
);
|
|
185
183
|
}
|
|
186
184
|
for (const tier of tiers) {
|
|
187
185
|
const seen = new Set<string>();
|
|
@@ -201,16 +199,14 @@ export function assembleEffectiveModules(
|
|
|
201
199
|
);
|
|
202
200
|
}
|
|
203
201
|
seen.add(definition.noun);
|
|
204
|
-
dynamic.set(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
verbs: compilePack(
|
|
202
|
+
dynamic.set(
|
|
203
|
+
definition.noun,
|
|
204
|
+
compileStoryModule(
|
|
208
205
|
definition,
|
|
209
206
|
{ label: "config", origin: "config" },
|
|
210
207
|
prefixes,
|
|
211
208
|
),
|
|
212
|
-
|
|
213
|
-
});
|
|
209
|
+
);
|
|
214
210
|
}
|
|
215
211
|
}
|
|
216
212
|
|