@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
|
@@ -50,9 +50,11 @@ import { emitScripts } from "./emitScripts.js";
|
|
|
50
50
|
* scripts; the live bash script offers the live grammar's structure with
|
|
51
51
|
* zero process exec; it hands `__complete` a literal argv and offers back
|
|
52
52
|
* what it answers; it honours the `minChars` gate. The bash describes are
|
|
53
|
-
* deliberately NOT gated on a `hasShell` probe —
|
|
54
|
-
*
|
|
55
|
-
*
|
|
53
|
+
* deliberately NOT gated on a `hasShell` probe — CI runs linux with a modern
|
|
54
|
+
* bash, so a machine with no usable bash should fail this file loudly
|
|
55
|
+
* rather than skip it and report nothing. (The package no longer pins
|
|
56
|
+
* `os: ["linux"]`; run on a bash-3.2 macOS box this fails loudly, which is
|
|
57
|
+
* the intended signal — see `templates/bash.ts` on the mapfile floor.)
|
|
56
58
|
* - **By execution only where the shell is installed:** the same guarantees
|
|
57
59
|
* for zsh and fish. Those describes `skipIf` the shell is absent, which
|
|
58
60
|
* includes this development box and, today, CI — so on those machines they
|
|
@@ -319,7 +321,7 @@ const STRUCTURE = [
|
|
|
319
321
|
at: "pragma co",
|
|
320
322
|
words: ["pragma", "co"],
|
|
321
323
|
cword: 1,
|
|
322
|
-
offers: ["colophon", "config"],
|
|
324
|
+
offers: ["colophon", "concept", "config"],
|
|
323
325
|
},
|
|
324
326
|
{
|
|
325
327
|
at: "pragma block <TAB>",
|
|
@@ -331,7 +333,7 @@ const STRUCTURE = [
|
|
|
331
333
|
at: "pragma setup <TAB>",
|
|
332
334
|
words: ["pragma", "setup", ""],
|
|
333
335
|
cword: 2,
|
|
334
|
-
offers: ["completions", "lsp", "mcp", "skills"],
|
|
336
|
+
offers: ["completions", "config", "lsp", "mcp", "skills"],
|
|
335
337
|
},
|
|
336
338
|
{
|
|
337
339
|
at: "pragma create <TAB>",
|
|
@@ -349,7 +351,14 @@ const STRUCTURE = [
|
|
|
349
351
|
at: "pragma block lookup --<TAB>",
|
|
350
352
|
words: ["pragma", "block", "lookup", "--"],
|
|
351
353
|
cword: 3,
|
|
352
|
-
offers: [
|
|
354
|
+
offers: [
|
|
355
|
+
"--detail",
|
|
356
|
+
"--format",
|
|
357
|
+
"--help",
|
|
358
|
+
"--no-headers",
|
|
359
|
+
"--quiet",
|
|
360
|
+
"--verbose",
|
|
361
|
+
],
|
|
353
362
|
},
|
|
354
363
|
] as const;
|
|
355
364
|
|
|
@@ -362,10 +371,12 @@ const NOUNS = [
|
|
|
362
371
|
"block",
|
|
363
372
|
"capabilities",
|
|
364
373
|
"colophon",
|
|
374
|
+
"concept",
|
|
365
375
|
"config",
|
|
366
376
|
"create",
|
|
367
377
|
"doctor",
|
|
368
378
|
"graph",
|
|
379
|
+
"implementation",
|
|
369
380
|
"info",
|
|
370
381
|
"mcp",
|
|
371
382
|
"modifier",
|
|
@@ -378,6 +389,7 @@ const NOUNS = [
|
|
|
378
389
|
"tier",
|
|
379
390
|
"token",
|
|
380
391
|
"upgrade",
|
|
392
|
+
"version",
|
|
381
393
|
] as const;
|
|
382
394
|
|
|
383
395
|
describe("generated bash — the live grammar's script", () => {
|
|
@@ -524,11 +536,11 @@ describe.skipIf(!hasShell("fish"))(
|
|
|
524
536
|
});
|
|
525
537
|
|
|
526
538
|
it.each([
|
|
527
|
-
{ line: "pragma co", offers: ["colophon", "config"] },
|
|
539
|
+
{ line: "pragma co", offers: ["colophon", "concept", "config"] },
|
|
528
540
|
{ line: "pragma block ", offers: ["list", "lookup", "sample"] },
|
|
529
541
|
{
|
|
530
542
|
line: "pragma setup ",
|
|
531
|
-
offers: ["completions", "lsp", "mcp", "skills"],
|
|
543
|
+
offers: ["completions", "config", "lsp", "mcp", "skills"],
|
|
532
544
|
},
|
|
533
545
|
{
|
|
534
546
|
line: "pragma create ",
|
|
@@ -572,7 +584,14 @@ describe.skipIf(!hasShell("fish"))(
|
|
|
572
584
|
const { reply, calls } = driveFish(live.fish, "pragma block lookup --");
|
|
573
585
|
expect(calls).toEqual([]);
|
|
574
586
|
expect(reply.sort()).toEqual(
|
|
575
|
-
[
|
|
587
|
+
[
|
|
588
|
+
"--detail",
|
|
589
|
+
"--format",
|
|
590
|
+
"--help",
|
|
591
|
+
"--no-headers",
|
|
592
|
+
"--quiet",
|
|
593
|
+
"--verbose",
|
|
594
|
+
].sort(),
|
|
576
595
|
);
|
|
577
596
|
});
|
|
578
597
|
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
// biome-ignore-all lint/suspicious/noTemplateCurlyInString: bash parameter expansions, not JS templates
|
|
2
2
|
/**
|
|
3
|
-
* The bash completion script (static tier). Requires bash >= 4
|
|
4
|
-
* the
|
|
3
|
+
* The bash completion script (static tier). Requires bash >= 4 for `mapfile`.
|
|
4
|
+
* That floor is NOT guaranteed by the platform any more: the package dropped
|
|
5
|
+
* its `os: ["linux"]` pin when it stopped shipping a linux-x64 executable, and
|
|
6
|
+
* macOS still ships bash 3.2, which has no `mapfile`. `setup completions`
|
|
7
|
+
* writes this script wherever it is asked to; on such a machine the user's
|
|
8
|
+
* remedy is a newer bash (zsh and fish are unaffected and are the platform
|
|
9
|
+
* defaults there).
|
|
5
10
|
*
|
|
6
11
|
* Structure — nouns, verbs, flag names, enum values — is inlined into
|
|
7
12
|
* generator-validated LITERAL `compgen -W` tables (never a variable, never
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The static shell-completion templates — one emitter per shell, all fed by
|
|
3
|
+
* the same completion model.
|
|
4
|
+
*
|
|
5
|
+
* The three exports are the domain: each takes the model and returns the text
|
|
6
|
+
* of a script `setup completions` writes to disk. They are grouped because
|
|
7
|
+
* they are interchangeable answers to one question — which shell is this — and
|
|
8
|
+
* because they must stay in step: a fact the model carries has to be
|
|
9
|
+
* expressible in all three, so a change to one is a change to all three.
|
|
10
|
+
*
|
|
11
|
+
* What the barrel does NOT expose is the rendering layer underneath
|
|
12
|
+
* (`shared.ts`): the per-verb views, the token allowlist re-assertion, the
|
|
13
|
+
* name/flag list derivations. Those exist so the scripts cannot disagree about
|
|
14
|
+
* structure, and they are safe only in the emit context they were built for —
|
|
15
|
+
* every token they return has been re-checked against the safety allowlist on
|
|
16
|
+
* its way into script text. Offering them across the domain boundary would
|
|
17
|
+
* offer a way to compose that text without that check, which is the one thing
|
|
18
|
+
* this domain exists to make impossible.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
export { bashScript } from "./bash.js";
|
|
22
|
+
export { fishScript } from "./fish.js";
|
|
23
|
+
export { zshScript } from "./zsh.js";
|
|
@@ -77,6 +77,13 @@ export interface VerbEntry {
|
|
|
77
77
|
readonly flags: readonly FlagEntry[];
|
|
78
78
|
/** The verb's positionals, in declared order. */
|
|
79
79
|
readonly positionals: readonly PositionalEntry[];
|
|
80
|
+
/**
|
|
81
|
+
* Segment pseudo-verbs beneath this verb (a module-mounted subtree, from
|
|
82
|
+
* `CapabilityModule.cliProjection.completionChildren`), each with its own
|
|
83
|
+
* flags/positionals/children. The parse walk descends into a matching
|
|
84
|
+
* child before flag/positional resolution.
|
|
85
|
+
*/
|
|
86
|
+
readonly children?: readonly VerbEntry[];
|
|
80
87
|
}
|
|
81
88
|
|
|
82
89
|
/** One noun with its self-verb (if any) and sub-verbs. */
|
|
@@ -15,6 +15,13 @@ describe("defaults — the validated distribution config (pragma.conf.ts)", () =
|
|
|
15
15
|
// `collectColophon` reads exactly this object. Pin the shape and the two
|
|
16
16
|
// stable fragments — the story's own subject and the maker line the old
|
|
17
17
|
// one-line `colophon` string carried (folded in when the field went live).
|
|
18
|
+
//
|
|
19
|
+
// DOMAIN FIRST: this section is deliberately a one-liner that hands off to
|
|
20
|
+
// `docs/architecture.md`. `pragma colophon` renders it ABOVE the active
|
|
21
|
+
// pack's domain colophon, and a reader reaching for the colophon wants the
|
|
22
|
+
// design system, not the toolchain that serves it. The length pin is the
|
|
23
|
+
// ruling: architecture prose belongs in the docs, not in front of the
|
|
24
|
+
// domain every reader came for.
|
|
18
25
|
expect(defaults.colophon?.markdown).toContain("domain-based toolchain");
|
|
19
26
|
expect(defaults.colophon?.markdown).toContain(
|
|
20
27
|
"Made by the Canonical Webteam — https://canonical.com.",
|
|
@@ -23,9 +30,21 @@ describe("defaults — the validated distribution config (pragma.conf.ts)", () =
|
|
|
23
30
|
// Bodies, not documents: the renderer supplies the H1 from the name.
|
|
24
31
|
expect(defaults.colophon?.markdown.startsWith("#")).toBe(false);
|
|
25
32
|
expect(defaults.colophon?.summary?.startsWith("#")).toBe(false);
|
|
33
|
+
// The handoff, and the brevity that makes it honest (see the note above).
|
|
34
|
+
// It is a URL, not a repo path: `docs/` is outside the package's `files`
|
|
35
|
+
// allowlist and is not copied into `dist`, so a path would name a file no
|
|
36
|
+
// installed user has. A bare `docs/architecture.md` must fail here.
|
|
37
|
+
expect(defaults.colophon?.markdown).toContain(
|
|
38
|
+
"https://github.com/canonical/pragma/blob/main/packages/cli/pragma/docs/architecture.md",
|
|
39
|
+
);
|
|
40
|
+
expect(defaults.colophon?.summary).toContain(
|
|
41
|
+
"https://github.com/canonical/pragma/blob/main/packages/cli/pragma/docs/architecture.md",
|
|
42
|
+
);
|
|
43
|
+
expect(defaults.colophon?.markdown.length).toBeLessThan(400);
|
|
44
|
+
expect(defaults.colophon?.summary?.length).toBeLessThan(400);
|
|
26
45
|
});
|
|
27
46
|
|
|
28
|
-
it("ships the
|
|
47
|
+
it("ships the four canonical default packs (git+https sources)", () => {
|
|
29
48
|
expect(
|
|
30
49
|
defaults.packs?.map((pack) =>
|
|
31
50
|
typeof pack === "string"
|
|
@@ -43,7 +62,12 @@ describe("defaults — the validated distribution config (pragma.conf.ts)", () =
|
|
|
43
62
|
},
|
|
44
63
|
{
|
|
45
64
|
name: "@canonical/code-standards",
|
|
46
|
-
source:
|
|
65
|
+
source:
|
|
66
|
+
"git+https://github.com/canonical/web-code-standards.git#v0.1.5",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "@canonical/ds-implementations",
|
|
70
|
+
source: "git+https://github.com/canonical/pragma.git#main",
|
|
47
71
|
},
|
|
48
72
|
]);
|
|
49
73
|
});
|
|
@@ -55,7 +79,7 @@ describe("defaults — the validated distribution config (pragma.conf.ts)", () =
|
|
|
55
79
|
const storyCounts = defaults.packs?.map((pack) =>
|
|
56
80
|
typeof pack === "string" ? 0 : (pack.stories?.length ?? 0),
|
|
57
81
|
);
|
|
58
|
-
expect(storyCounts).toEqual([
|
|
82
|
+
expect(storyCounts).toEqual([5, 0, 1, 1]);
|
|
59
83
|
});
|
|
60
84
|
|
|
61
85
|
it("declares no removed field — the validator would refuse to load one", () => {
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* Built-in configuration defaults — the validated distribution config.
|
|
3
3
|
*
|
|
4
4
|
* The lowest config layer is the distribution's own `pragma.conf.ts` (package
|
|
5
|
-
* root), STATICALLY imported so
|
|
6
|
-
* `evaluateProjectConfig` stats/imports from disk,
|
|
7
|
-
*
|
|
5
|
+
* root), STATICALLY imported so it travels with the emitted modules (no fs read
|
|
6
|
+
* — `evaluateProjectConfig` stats/imports from disk, which is right for a
|
|
7
|
+
* consumer's config and wrong for the distribution's own) and validated through
|
|
8
|
+
* the same `parseRawConfig` as every
|
|
8
9
|
* other layer. Statically imported by `readConfig` (itself dynamic-imported,
|
|
9
10
|
* off the `--help`/`__complete` fast path) and by its own test, so the eager
|
|
10
11
|
* validation and the zod import here add nothing to the storeless surfaces —
|
|
@@ -16,11 +16,19 @@
|
|
|
16
16
|
*
|
|
17
17
|
* LIMITATION (accepted, per the review fold): a *transitively*-imported file
|
|
18
18
|
* (e.g. `./pkgs.ts`) edited without touching the entry's mtime is not detected
|
|
19
|
-
* across processes. The fix that would catch it —
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
19
|
+
* across processes. The fix that would catch it — bundling the config and keying
|
|
20
|
+
* on the bundle hash — would blow the warm-load budget on every load. Touch the
|
|
21
|
+
* entry (or bump VERSION) to force a rebuild.
|
|
22
|
+
*
|
|
23
|
+
* THE CONFIG IS THE CONSUMER'S OWN TYPESCRIPT, and this is the one place the
|
|
24
|
+
* distribution executes code it did not author. `pragma` ships on a `node`
|
|
25
|
+
* shebang, so that import is served by node's type STRIPPING — which erases
|
|
26
|
+
* annotations and refuses syntax that would need real emit (`enum`, `namespace`,
|
|
27
|
+
* parameter properties). Those are rejected with `ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`,
|
|
28
|
+
* which {@link evaluateProjectConfig} names specifically rather than letting it
|
|
29
|
+
* arrive as an anonymous load failure. The `engines` floor (node >= 22.18) is what
|
|
30
|
+
* makes stripping default-on — and the range excludes 23.0-23.5, which satisfy
|
|
31
|
+
* a bare `>=22.18` but predate the 23.x line's own default-on release (23.6).
|
|
24
32
|
*/
|
|
25
33
|
|
|
26
34
|
import { createHash } from "node:crypto";
|
|
@@ -34,7 +42,7 @@ import {
|
|
|
34
42
|
import { join } from "node:path";
|
|
35
43
|
import { pathToFileURL } from "node:url";
|
|
36
44
|
import { PROJECT_CONFIG_FILENAME, VERSION } from "../../constants.js";
|
|
37
|
-
import { PragmaError } from "../error/
|
|
45
|
+
import { PragmaError } from "../error/index.js";
|
|
38
46
|
import { configCacheDir } from "./paths.js";
|
|
39
47
|
import { parseRawConfig } from "./schema.js";
|
|
40
48
|
import type { RawConfig } from "./types.js";
|
|
@@ -94,7 +102,7 @@ export async function evaluateProjectConfig(path: string): Promise<RawConfig> {
|
|
|
94
102
|
const url = `${pathToFileURL(path).href}?v=${key}`;
|
|
95
103
|
// Evaluating real TypeScript can throw for reasons `parseRawConfig` never sees:
|
|
96
104
|
// a syntax error, a bad import, or a top-level throw in the config module. Left
|
|
97
|
-
// unwrapped, that raw throw collapses to INTERNAL_ERROR ("
|
|
105
|
+
// unwrapped, that raw throw collapses to INTERNAL_ERROR ("report this
|
|
98
106
|
// issue") on EVERY command that reads config. Name it: a CONFIG_ERROR that
|
|
99
107
|
// identifies the offending file and the underlying reason.
|
|
100
108
|
let module: { default?: unknown };
|
|
@@ -103,8 +111,23 @@ export async function evaluateProjectConfig(path: string): Promise<RawConfig> {
|
|
|
103
111
|
} catch (error) {
|
|
104
112
|
if (error instanceof PragmaError) throw error;
|
|
105
113
|
const reason = error instanceof Error ? error.message : String(error);
|
|
114
|
+
// Node strips types rather than compiling them, so a config using syntax that
|
|
115
|
+
// needs real emit fails here with a message naming neither the constraint nor
|
|
116
|
+
// the fix. Say both — this is a supported config that simply must be written
|
|
117
|
+
// in erasable TypeScript, and the author has no other way to learn that.
|
|
118
|
+
const { code } = (error ?? {}) as { code?: unknown };
|
|
119
|
+
if (code === "ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX") {
|
|
120
|
+
throw PragmaError.configError(
|
|
121
|
+
`Your ${PROJECT_CONFIG_FILENAME} uses TypeScript syntax that cannot be erased: ${reason}`,
|
|
122
|
+
{
|
|
123
|
+
recovery: {
|
|
124
|
+
message: `Rewrite it in erasable TypeScript — types, interfaces and \`satisfies\` are fine; \`enum\`, \`namespace\` and constructor parameter properties are not. A plain object literal with a \`default\` export always works.`,
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
);
|
|
128
|
+
}
|
|
106
129
|
throw PragmaError.configError(
|
|
107
|
-
`
|
|
130
|
+
`Cannot load project config ${path}: ${reason}`,
|
|
108
131
|
{
|
|
109
132
|
recovery: {
|
|
110
133
|
message: `Fix the error in your ${PROJECT_CONFIG_FILENAME} (it must evaluate to a default export), then try again.`,
|
|
@@ -1,60 +1,66 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The setup hint — the read-only replacement for first-run seeding.
|
|
3
|
+
*
|
|
4
|
+
* Onboarding used to WRITE: a pipeline step ran before dispatch on every
|
|
5
|
+
* non-help invocation and created the global config, so `skill list` — a read —
|
|
6
|
+
* mutated the machine before the user had consented to anything. Seeding is now
|
|
7
|
+
* the `config` setup target, created inside a consented run. What is left is a
|
|
8
|
+
* stateless hint, and the property that matters most about it is the one these
|
|
9
|
+
* tests pin: reading it writes nothing.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
existsSync,
|
|
14
|
+
mkdirSync,
|
|
15
|
+
mkdtempSync,
|
|
16
|
+
readdirSync,
|
|
17
|
+
writeFileSync,
|
|
18
|
+
} from "node:fs";
|
|
2
19
|
import { tmpdir } from "node:os";
|
|
3
|
-
import { join } from "node:path";
|
|
20
|
+
import { dirname, join } from "node:path";
|
|
4
21
|
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
-
import {
|
|
22
|
+
import { setupHintLines } from "./firstRun.js";
|
|
6
23
|
import { globalConfigPath } from "./paths.js";
|
|
7
24
|
|
|
8
25
|
const originalConfigHome = process.env.XDG_CONFIG_HOME;
|
|
9
26
|
|
|
10
|
-
function freshConfigHome():
|
|
11
|
-
|
|
27
|
+
function freshConfigHome(): string {
|
|
28
|
+
const dir = mkdtempSync(join(tmpdir(), "pragma-first-"));
|
|
29
|
+
process.env.XDG_CONFIG_HOME = dir;
|
|
30
|
+
return dir;
|
|
12
31
|
}
|
|
13
32
|
|
|
14
33
|
afterEach(() => {
|
|
15
34
|
process.env.XDG_CONFIG_HOME = originalConfigHome;
|
|
16
35
|
});
|
|
17
36
|
|
|
18
|
-
describe("
|
|
19
|
-
it("
|
|
37
|
+
describe("the setup hint", () => {
|
|
38
|
+
it("names the pre-release and the command that configures the machine", () => {
|
|
20
39
|
freshConfigHome();
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
await ensureFirstRun((line) => lines.push(line));
|
|
25
|
-
|
|
26
|
-
expect(existsSync(path)).toBe(true);
|
|
27
|
-
expect(readFileSync(path, "utf-8")).toBe("{}\n");
|
|
28
|
-
expect(lines[0]).toContain("Hello!");
|
|
29
|
-
expect(lines.some((line) => line.includes(path))).toBe(true);
|
|
30
|
-
// Snapshot the note with the volatile path masked.
|
|
31
|
-
expect(
|
|
32
|
-
lines.map((line) => line.replace(path, "<CONFIG>")),
|
|
33
|
-
).toMatchSnapshot();
|
|
40
|
+
const lines = setupHintLines();
|
|
41
|
+
expect(lines.some((line) => line.includes("pre-release"))).toBe(true);
|
|
42
|
+
expect(lines.some((line) => line.includes("pragma setup"))).toBe(true);
|
|
34
43
|
});
|
|
35
44
|
|
|
36
|
-
it("
|
|
37
|
-
|
|
38
|
-
|
|
45
|
+
it("writes NOTHING — presence of the config is the state, not a marker", () => {
|
|
46
|
+
// A marker file would itself be a pre-consent write, which is the exact
|
|
47
|
+
// defect being removed. The probe must leave the config home untouched.
|
|
48
|
+
const dir = freshConfigHome();
|
|
49
|
+
expect(existsSync(globalConfigPath())).toBe(false);
|
|
39
50
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
expect(second).toEqual([]);
|
|
51
|
+
setupHintLines();
|
|
52
|
+
setupHintLines();
|
|
43
53
|
|
|
44
|
-
|
|
45
|
-
expect(
|
|
54
|
+
expect(readdirSync(dir)).toEqual([]);
|
|
55
|
+
expect(existsSync(globalConfigPath())).toBe(false);
|
|
46
56
|
});
|
|
47
57
|
|
|
48
|
-
it("
|
|
58
|
+
it("goes quiet once the config exists", () => {
|
|
49
59
|
freshConfigHome();
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
ensureFirstRun((line) => lines.push(line)),
|
|
56
|
-
).resolves.toBeUndefined();
|
|
57
|
-
expect(lines).toHaveLength(1);
|
|
58
|
-
expect(lines[0]).toContain("Warning: could not create");
|
|
60
|
+
const path = globalConfigPath();
|
|
61
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
62
|
+
writeFileSync(path, "{}\n");
|
|
63
|
+
|
|
64
|
+
expect(setupHintLines()).toEqual([]);
|
|
59
65
|
});
|
|
60
66
|
});
|
|
@@ -1,98 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The setup hint — the read-only replacement for first-run seeding.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* first-run pipeline; runs before dispatch and tolerates every failure.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { dirname } from "node:path";
|
|
14
|
-
import {
|
|
15
|
-
$,
|
|
16
|
-
exists,
|
|
17
|
-
gen,
|
|
18
|
-
info,
|
|
19
|
-
mkdir,
|
|
20
|
-
type Task,
|
|
21
|
-
writeFile,
|
|
22
|
-
} from "@canonical/task";
|
|
23
|
-
import { runTask } from "@canonical/task/node";
|
|
24
|
-
import {
|
|
25
|
-
BIN_NAME,
|
|
26
|
-
ISSUES_URL,
|
|
27
|
-
PROJECT_CONFIG_FILENAME,
|
|
28
|
-
} from "../../constants.js";
|
|
29
|
-
import { globalConfigPath } from "./paths.js";
|
|
30
|
-
|
|
31
|
-
/** Seed content: an empty object, so nothing is pinned the user did not choose. */
|
|
32
|
-
const SEED_CONFIG = "{}\n";
|
|
33
|
-
|
|
34
|
-
/** Build the welcome note; the resolved path is shown so it is copyable. */
|
|
35
|
-
function welcomeLines(path: string): string[] {
|
|
36
|
-
return [
|
|
37
|
-
`Hello! Thanks for taking the time to try the pre-release ${BIN_NAME} CLI.`,
|
|
38
|
-
`Please file issues and feedback at ${ISSUES_URL}.`,
|
|
39
|
-
`${BIN_NAME} stores its configuration in ${path} (just created with defaults).`,
|
|
40
|
-
`A \`${PROJECT_CONFIG_FILENAME}\` in this directory or above it overrides it per project.`,
|
|
41
|
-
"",
|
|
42
|
-
];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* The first-run task: create the global config, announcing it on first run.
|
|
4
|
+
* Onboarding used to WRITE. A pipeline step ran before dispatch on every
|
|
5
|
+
* non-help invocation and created `$XDG_CONFIG_HOME/<bin>/config.json`, so
|
|
6
|
+
* `skill list` — a read — mutated the machine before the user had consented to
|
|
7
|
+
* anything, and a banner interleaved itself into the output of runs that were
|
|
8
|
+
* mutating something else entirely. The config layers already treat the missing
|
|
9
|
+
* file as "every field at its built-in default", so the write bought nothing.
|
|
47
10
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
11
|
+
* Seeding is now a setup target, created inside a consented run. What is left
|
|
12
|
+
* here is a STATELESS hint: shown when the global config file is absent, on
|
|
13
|
+
* read-only surfaces only. There is no marker file — a marker is itself a
|
|
14
|
+
* pre-consent write, which is the exact defect being removed — because the
|
|
15
|
+
* presence of the config IS the state.
|
|
50
16
|
*/
|
|
51
|
-
export function firstRunTask(): Task<{ created: boolean; path: string }> {
|
|
52
|
-
return gen(function* () {
|
|
53
|
-
const path = globalConfigPath();
|
|
54
|
-
|
|
55
|
-
if (yield* $(exists(path))) {
|
|
56
|
-
return { created: false, path };
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Create first, then greet: if creation fails the effects throw before any
|
|
60
|
-
// line is emitted, so onboarding degrades to the single stderr warning
|
|
61
|
-
// rather than a "just created" banner alongside a failure.
|
|
62
|
-
yield* $(mkdir(dirname(path), true));
|
|
63
|
-
yield* $(writeFile(path, SEED_CONFIG));
|
|
64
17
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return { created: true, path };
|
|
70
|
-
});
|
|
71
|
-
}
|
|
18
|
+
import { existsSync } from "node:fs";
|
|
19
|
+
import { BIN_NAME, ISSUES_URL } from "../../constants.js";
|
|
20
|
+
import { globalConfigPath } from "./paths.js";
|
|
72
21
|
|
|
73
22
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* Onboarding must never break an invocation: a read-only home or a race with a
|
|
77
|
-
* concurrent first run degrades to a single stderr warning and the invocation
|
|
78
|
-
* proceeds (the config layers treat a missing global file as defaults anyway).
|
|
23
|
+
* The hint lines for a machine that has not been set up, or none when it has.
|
|
79
24
|
*
|
|
80
|
-
* @
|
|
81
|
-
* @note Impure —
|
|
25
|
+
* @returns The lines to print, or an empty array.
|
|
26
|
+
* @note Impure — probes the global config path.
|
|
82
27
|
*/
|
|
83
|
-
export
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
// this is a greeting, not diagnostics.
|
|
90
|
-
onLog: (_level, message) => write(message),
|
|
91
|
-
});
|
|
92
|
-
} catch (error) {
|
|
93
|
-
const reason = error instanceof Error ? error.message : String(error);
|
|
94
|
-
write(
|
|
95
|
-
`Warning: could not create the global ${BIN_NAME} config — ${reason}`,
|
|
96
|
-
);
|
|
97
|
-
}
|
|
28
|
+
export function setupHintLines(): string[] {
|
|
29
|
+
if (existsSync(globalConfigPath())) return [];
|
|
30
|
+
return [
|
|
31
|
+
`${BIN_NAME} is pre-release — report issues at ${ISSUES_URL}.`,
|
|
32
|
+
`Run \`${BIN_NAME} setup\` to configure this machine.`,
|
|
33
|
+
];
|
|
98
34
|
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
export { evaluateProjectConfig } from "./evaluateProjectConfig.js";
|
|
11
11
|
export { findProjectConfig } from "./findProjectConfig.js";
|
|
12
|
-
export {
|
|
12
|
+
export { setupHintLines } from "./firstRun.js";
|
|
13
13
|
export type { GlobalConfigRead } from "./globalConfig.js";
|
|
14
14
|
export { readGlobalConfig } from "./globalConfig.js";
|
|
15
15
|
export {
|
|
@@ -59,7 +59,7 @@ describe("readConfig — layering + provenance", () => {
|
|
|
59
59
|
expect(config.tier).toBe("core");
|
|
60
60
|
expect(config.channel).toBe("experimental");
|
|
61
61
|
expect(config.detail).toBe("detailed");
|
|
62
|
-
expect(config.packs).toHaveLength(
|
|
62
|
+
expect(config.packs).toHaveLength(4); // from defaults
|
|
63
63
|
|
|
64
64
|
expect(origins).toMatchObject({
|
|
65
65
|
tier: "project",
|
|
@@ -101,12 +101,15 @@ describe("readConfig — layering + provenance", () => {
|
|
|
101
101
|
freshXdg();
|
|
102
102
|
writeGlobal('{"help":"Global help"}');
|
|
103
103
|
const dir = projectWith(
|
|
104
|
-
'export default { name: "acme", colophon: { markdown: "By Acme." }, issuesUrl: "https://acme.test/issues", tier: "core" };',
|
|
104
|
+
'export default { name: "acme", logo: ["ACME"], colophon: { markdown: "By Acme." }, issuesUrl: "https://acme.test/issues", tier: "core" };',
|
|
105
105
|
);
|
|
106
106
|
|
|
107
107
|
const { config, origins } = await readConfig(dir);
|
|
108
108
|
|
|
109
109
|
expect(config).not.toHaveProperty("name");
|
|
110
|
+
// `logo` is identity too: accepted by the shared schema, silent in a layer.
|
|
111
|
+
expect(config).not.toHaveProperty("logo");
|
|
112
|
+
expect(origins).not.toHaveProperty("logo");
|
|
110
113
|
expect(config).not.toHaveProperty("help");
|
|
111
114
|
expect(config).not.toHaveProperty("colophon");
|
|
112
115
|
expect(config).not.toHaveProperty("issuesUrl");
|
|
@@ -461,7 +464,7 @@ describe("evaluateProjectConfig — mtime+VERSION cache", () => {
|
|
|
461
464
|
freshXdg();
|
|
462
465
|
// A malformed project config: references an undefined symbol → the module
|
|
463
466
|
// throws at evaluation. Left unwrapped this collapsed to INTERNAL_ERROR
|
|
464
|
-
// ("
|
|
467
|
+
// ("report this issue") on EVERY command that reads config.
|
|
465
468
|
const dir = projectWith("export default { tier: definitelyNotDefined };");
|
|
466
469
|
const path = join(dir, "pragma.config.ts");
|
|
467
470
|
|
|
@@ -51,7 +51,7 @@ export async function readConfig(
|
|
|
51
51
|
return { value: defaultValues[field], origin: "default" };
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
-
// `name`/`help`/`colophon`/`issuesUrl` are DELIBERATELY not picked: identity
|
|
54
|
+
// `name`/`help`/`logo`/`colophon`/`issuesUrl` are DELIBERATELY not picked: identity
|
|
55
55
|
// is read from `pragma.conf.ts` statically (`src/constants.ts`), so merging a
|
|
56
56
|
// layer's value here would report a provenance nothing honours.
|
|
57
57
|
const tier = pick("tier");
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { z } from "zod";
|
|
19
|
-
import { PragmaError } from "../error/
|
|
19
|
+
import { PragmaError } from "../error/index.js";
|
|
20
20
|
import { CHANNELS, DETAIL_LEVELS, type RawConfig } from "./types.js";
|
|
21
21
|
|
|
22
22
|
const packDeclarationSchema = z.union([
|
|
@@ -61,6 +61,8 @@ function declaredCompletion(value: unknown): Record<string, unknown> | null {
|
|
|
61
61
|
export const rawConfigSchema = z.object({
|
|
62
62
|
name: z.string().min(1).optional(),
|
|
63
63
|
help: z.string().min(1).optional(),
|
|
64
|
+
// Identity, like `name`/`help`: the wordmark root `--help` opens with.
|
|
65
|
+
logo: z.array(z.string()).optional(),
|
|
64
66
|
// Declared toolchain content: the `colophon` verb renders whatever the
|
|
65
67
|
// distribution declares here (markdown body + optional condensed summary).
|
|
66
68
|
colophon: z
|
|
@@ -109,7 +109,7 @@ export interface PragmaConfig {
|
|
|
109
109
|
* wins during the merge.
|
|
110
110
|
*
|
|
111
111
|
* WIDER than {@link PragmaConfig}: the DISTRIBUTION layer (`pragma.conf.ts`)
|
|
112
|
-
* is `satisfies RawConfig` and declares the
|
|
112
|
+
* is `satisfies RawConfig` and declares the five identity fields, which are
|
|
113
113
|
* read statically and never merged. A global or project layer declaring one is
|
|
114
114
|
* accepted by the validator and has no effect — `docs/reference/config.md`
|
|
115
115
|
* says so, and `readConfig.test.ts` pins it.
|
|
@@ -117,6 +117,8 @@ export interface PragmaConfig {
|
|
|
117
117
|
export interface RawConfig {
|
|
118
118
|
readonly name?: string;
|
|
119
119
|
readonly help?: string;
|
|
120
|
+
/** ASCII-art wordmark lines shown atop root `--help` (identity, like `name`). */
|
|
121
|
+
readonly logo?: readonly string[];
|
|
120
122
|
readonly colophon?: ColophonDeclaration;
|
|
121
123
|
readonly issuesUrl?: string;
|
|
122
124
|
readonly tier?: string;
|