@canonical/pragma-cli 0.34.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/bundled-skills/add-standard/SKILL.md +338 -0
- package/bundled-skills/adoption-a1-styles/SKILL.md +269 -0
- package/bundled-skills/adoption-a2-components/SKILL.md +291 -0
- package/bundled-skills/adoption-a3-forms/SKILL.md +260 -0
- package/bundled-skills/anatomy-author/ANATOMY_DSL_SPEC.md +406 -0
- package/bundled-skills/anatomy-author/SKILL.md +1226 -0
- package/bundled-skills/design-auditor/SKILL.md +455 -0
- package/bundled-skills/implement-component/SKILL.md +333 -0
- package/bundled-skills/specify-component/SKILL.md +331 -0
- package/bundled-skills/specify-pattern/SKILL.md +292 -0
- package/dist/.build-ok +0 -0
- package/dist/package.json +84 -0
- package/dist/pragma.conf.js +1016 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +294 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +148 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/harnessInventory.js +195 -0
- package/dist/src/capabilities/doctor/checks/harnessInventory.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +349 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +164 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +49 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +86 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +72 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +57 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +172 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +390 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +329 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +253 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +594 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +271 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +387 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +328 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +27 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +349 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +281 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +309 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +460 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +135 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +87 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +34 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/interactivity.js +68 -0
- package/dist/src/kernel/interactivity.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +274 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +140 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +421 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +167 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +480 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +219 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +58 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +227 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +315 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +105 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/vocabulary.js +174 -0
- package/dist/src/kernel/render/vocabulary.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +22 -23
- package/pragma.conf.ts +486 -90
- package/src/bin.ts +274 -82
- package/src/capabilities/block.parity.test.ts +29 -12
- package/src/capabilities/block.shipped.exec.test.ts +282 -0
- package/src/capabilities/block.tierRank.exec.test.ts +300 -0
- package/src/capabilities/capabilities/capabilities.render.ts +1 -1
- package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
- package/src/capabilities/capabilities/catalog.ts +3 -3
- package/src/capabilities/capabilities/hints.ts +32 -7
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +35 -24
- package/src/capabilities/colophon/colophon.render.ts +24 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +4 -4
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/config/collectConfigShow.ts +3 -3
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -10
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +8 -7
- package/src/capabilities/config/show.render.ts +1 -1
- package/src/capabilities/config/show.verb.ts +9 -6
- package/src/capabilities/config/types.ts +18 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +25 -11
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +36 -61
- package/src/capabilities/create/create.mcp.test.ts +89 -5
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +433 -219
- package/src/capabilities/create/create.verb.ts +297 -328
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +7 -4
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +23 -35
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +20 -0
- package/src/capabilities/distribution.parity.test.ts +4 -0
- package/src/capabilities/distribution.test.ts +3 -1
- package/src/capabilities/distribution.ts +10 -15
- package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +75 -8
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +76 -29
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +63 -17
- package/src/capabilities/doctor/checks/harnessInventory.test.ts +219 -0
- package/src/capabilities/doctor/checks/harnessInventory.ts +298 -0
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +444 -0
- package/src/capabilities/doctor/doctor.render.test.ts +125 -38
- package/src/capabilities/doctor/doctor.render.ts +74 -74
- package/src/capabilities/doctor/doctor.test.ts +338 -37
- package/src/capabilities/doctor/doctor.verb.ts +8 -3
- package/src/capabilities/doctor/runChecks.ts +65 -63
- package/src/capabilities/doctor/types.ts +22 -15
- package/src/capabilities/emptyRecovery.test.ts +21 -8
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -6
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +3 -3
- package/src/capabilities/graph/runQuery.ts +2 -3
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/info/collectInfo.ts +13 -5
- package/src/capabilities/info/info.render.ts +7 -3
- package/src/capabilities/info/info.test.ts +37 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/info/types.ts +10 -2
- package/src/capabilities/lazy.test.ts +32 -0
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +27 -68
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +4 -5
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/renderVocabularySync.test.ts +82 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -59
- package/src/capabilities/scopeTypeSync.test.ts +29 -15
- package/src/capabilities/setup/buildPlan.ts +240 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +79 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +478 -334
- package/src/capabilities/setup/operations/setupLsp.ts +420 -67
- package/src/capabilities/setup/operations/setupMcp.ts +238 -127
- package/src/capabilities/setup/operations/setupSkills.ts +667 -105
- package/src/capabilities/setup/plan.render.ts +336 -0
- package/src/capabilities/setup/plan.ts +241 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +297 -75
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +1819 -225
- package/src/capabilities/setup/setup.verb.ts +288 -78
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- package/src/capabilities/setup/targets.ts +435 -0
- package/src/capabilities/setup/types.ts +23 -70
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +43 -0
- package/src/capabilities/shared/packageManager.test.ts +470 -0
- package/src/capabilities/shared/packageManager.ts +425 -34
- package/src/capabilities/skill/bundledSkills.test.ts +347 -0
- package/src/capabilities/skill/discover.ts +131 -10
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +22 -7
- package/src/capabilities/skill/verbs.ts +3 -4
- package/src/capabilities/sources/collectStatus.ts +7 -2
- package/src/capabilities/sources/index.ts +1 -1
- package/src/capabilities/sources/installSkills.ts +265 -10
- package/src/capabilities/sources/runUpdate.ts +131 -23
- package/src/capabilities/sources/sources.test.ts +382 -2
- package/src/capabilities/sources/status.render.ts +1 -1
- package/src/capabilities/sources/status.verb.ts +1 -1
- package/src/capabilities/sources/update.render.ts +1 -1
- package/src/capabilities/sources/update.verb.ts +4 -4
- package/src/capabilities/surface.test.ts +136 -19
- package/src/capabilities/upgrade/runUpgrade.ts +53 -14
- package/src/capabilities/upgrade/types.ts +10 -2
- package/src/capabilities/upgrade/upgrade.render.ts +13 -7
- package/src/capabilities/upgrade/upgrade.test.ts +75 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.ts +36 -1
- package/src/identity.test.ts +57 -29
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +1 -1
- package/src/kernel/completion/entitySource.test.ts +16 -3
- package/src/kernel/completion/entitySource.ts +21 -8
- package/src/kernel/completion/model.test.ts +164 -12
- package/src/kernel/completion/model.ts +94 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +50 -35
- package/src/kernel/completion/shellDrive.test.ts +28 -9
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +7 -0
- package/src/kernel/config/defaults.test.ts +27 -3
- package/src/kernel/config/defaults.ts +4 -3
- package/src/kernel/config/evaluateProjectConfig.ts +31 -8
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -88
- package/src/kernel/config/index.ts +1 -1
- package/src/kernel/config/readConfig.test.ts +6 -3
- package/src/kernel/config/readConfig.ts +1 -1
- package/src/kernel/config/schema.ts +3 -1
- package/src/kernel/config/types.ts +3 -1
- package/src/kernel/copy.test.ts +34 -4
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +5 -2
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -5
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/recovery.ts +14 -0
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +21 -1
- package/src/kernel/index.ts +35 -0
- package/src/kernel/interactivity.test.ts +76 -0
- package/src/kernel/interactivity.ts +69 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +222 -1
- package/src/kernel/packs/compile.ts +93 -3
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +66 -14
- package/src/kernel/packs/renderPack.ts +25 -6
- package/src/kernel/packs/resolveEntity.test.ts +274 -0
- package/src/kernel/packs/resolveEntity.ts +200 -42
- package/src/kernel/packs/runBodies.ts +86 -22
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +78 -5
- package/src/kernel/packs/sparql/applyFilters.ts +136 -16
- package/src/kernel/packs/sparql/buildLookupQuery.test.ts +290 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +367 -17
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +77 -4
- package/src/kernel/packs/types.ts +136 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +218 -12
- package/src/kernel/project/cli/buildProgram.ts +84 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +160 -2
- package/src/kernel/project/cli/dispatch.ts +226 -45
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +134 -31
- package/src/kernel/project/cli/helpFormat.ts +14 -2
- package/src/kernel/project/cli/rootHelp.ts +74 -12
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +7 -4
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +2 -2
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +5 -2
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/source.ts +2 -2
- package/src/kernel/project/mcp/registerVerb.ts +55 -10
- package/src/kernel/project/mcp/serve.ts +2 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/renderers.test.ts +243 -6
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +59 -6
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/render/vocabulary.ts +276 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded.ts +3 -3
- package/src/kernel/runtime/graphpack/manifest.ts +1 -1
- package/src/kernel/runtime/graphpack/read.ts +1 -2
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +472 -28
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +2 -2
- package/src/kernel/runtime/refs/resolve.ts +4 -4
- package/src/kernel/runtime/storeReadiness.ts +1 -2
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
- package/src/kernel/spec/emitReference.ts +105 -30
- package/src/kernel/spec/emitSurface.ts +48 -6
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/types.ts +277 -4
- package/src/testing/PARITY_GAPS.ts +9 -3
- package/src/testing/behavioral/docExamples.test.ts +16 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +112 -9
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/journeys.cli.test.ts +1 -1
- package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
- package/src/testing/behavioral/journeys.firstInstall.test.ts +7 -2
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.packageStories.test.ts +10 -7
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +1 -1
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +26 -1
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/eval/cases/readNouns.ts +245 -9
- package/src/testing/fixtures/blockGraph.ts +104 -10
- package/src/testing/fixtures/graph/canonical.ts +182 -13
- package/src/testing/fixtures/graph/defaultPack.ts +1 -1
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/projectMcp.ts +32 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +20 -9
- package/src/testing/perf/budgets.ts +58 -9
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +505 -23
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/dist/pragma +0 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
- package/src/capabilities/create/templates.embedded.generated.ts +0 -28
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/capabilities/shared/bands.ts +0 -16
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PROTECTED — the shipped-entry `create` guard.
|
|
3
|
+
*
|
|
4
|
+
* Spawns the EMITTED entry the published package points at
|
|
5
|
+
* (`node dist/src/bin.js`) and asserts every `create` noun writes a tree
|
|
6
|
+
* BYTE-IDENTICAL to a source run of the same generator (`bun src/bin.ts …`).
|
|
7
|
+
* The source run is the reference: it reads the `.ejs` templates from disk with
|
|
8
|
+
* no indirection.
|
|
9
|
+
*
|
|
10
|
+
* WHAT THIS REPLACES. Until the distribution stopped shipping a
|
|
11
|
+
* `bun build --compile` executable, this guard covered `create component` only,
|
|
12
|
+
* and its sibling describe pinned the REFUSAL of `create package` /
|
|
13
|
+
* `create application`: those generators call `template({ source })`, summon-core
|
|
14
|
+
* fell through to `readFile(options.source)`, and inside the binary's virtual
|
|
15
|
+
* filesystem that died with `ENOENT … /$bunfs/templates/package.json.ejs` after
|
|
16
|
+
* `mkdir` had already run — a half-made package on the user's disk. The gate
|
|
17
|
+
* existed to turn that crash into a clean refusal.
|
|
18
|
+
*
|
|
19
|
+
* There is no virtual filesystem now. Every generator's templates are real
|
|
20
|
+
* files under its own package, so all three nouns run from the shipped entry and
|
|
21
|
+
* all three are asserted here. THE REFUSAL CASES ARE GONE ON PURPOSE: a test
|
|
22
|
+
* asserting `create package` refuses would now be asserting a defect.
|
|
23
|
+
*
|
|
24
|
+
* The svelte + lit cases stay load-bearing: `types.ts.ejs` / `index.ts.ejs` /
|
|
25
|
+
* `styles.css.ejs` / `stories.ts.ejs` exist in react/, svelte/ AND lit/, so a
|
|
26
|
+
* basename-matching regression could emit the WRONG framework's file. A wrong
|
|
27
|
+
* file differs from the source run → red here.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { execFileSync, spawnSync } from "node:child_process";
|
|
31
|
+
import { mkdtempSync, readdirSync, readFileSync } from "node:fs";
|
|
32
|
+
import { tmpdir } from "node:os";
|
|
33
|
+
import { dirname, join, resolve } from "node:path";
|
|
34
|
+
import { fileURLToPath } from "node:url";
|
|
35
|
+
import { describe, expect, it } from "vitest";
|
|
36
|
+
|
|
37
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
38
|
+
const repoRoot = resolve(here, "../../../../../..");
|
|
39
|
+
const cliNextDir = join(repoRoot, "packages/cli/pragma");
|
|
40
|
+
const sourceEntry = join(cliNextDir, "src/bin.ts");
|
|
41
|
+
const shippedEntry = join(cliNextDir, "dist/src/bin.js");
|
|
42
|
+
const freshCwd = (): string => mkdtempSync(join(tmpdir(), "pragma-shipped-"));
|
|
43
|
+
|
|
44
|
+
// `dist/` is provisioned by `testing/perf/globalSetup.ts`, which re-emits it
|
|
45
|
+
// whenever it is missing or older than `src/**`, `scripts/**`, `pragma.conf.ts`
|
|
46
|
+
// or `package.json` — so these tests exercise the current emit without a second
|
|
47
|
+
// `beforeAll` writing `dist/` in place while another worker is spawning it.
|
|
48
|
+
|
|
49
|
+
/** Read a directory tree into a sorted map of relative path → contents. */
|
|
50
|
+
function snapshot(dir: string): Map<string, string> {
|
|
51
|
+
const out = new Map<string, string>();
|
|
52
|
+
const walk = (d: string, base: string): void => {
|
|
53
|
+
for (const entry of readdirSync(d, { withFileTypes: true }).sort((a, b) =>
|
|
54
|
+
a.name.localeCompare(b.name),
|
|
55
|
+
)) {
|
|
56
|
+
const rel = base ? `${base}/${entry.name}` : entry.name;
|
|
57
|
+
if (entry.isDirectory()) walk(join(d, entry.name), rel);
|
|
58
|
+
else out.set(rel, readFileSync(join(d, entry.name), "utf-8"));
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
walk(dir, "");
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The create invocations under guard — a LITERAL table, deliberately not derived
|
|
67
|
+
* from `create`'s own declaration, so dropping a noun from the surface turns
|
|
68
|
+
* this red rather than silently shrinking the guard.
|
|
69
|
+
*
|
|
70
|
+
* No case installs dependencies (`runInstall` defaults false), so every tree is
|
|
71
|
+
* generator output alone and byte-comparable.
|
|
72
|
+
*/
|
|
73
|
+
const CASES: ReadonlyArray<{ label: string; args: readonly string[] }> = [
|
|
74
|
+
...(["react", "svelte", "lit"] as const).map((framework) => ({
|
|
75
|
+
label: `component ${framework}`,
|
|
76
|
+
// The framework is a PATH SEGMENT, not a flag — `create` mirrors summon's
|
|
77
|
+
// own tree (`summon component react <path>`), so the two CLIs take the
|
|
78
|
+
// same argv.
|
|
79
|
+
args: ["create", "component", framework, "src/components/Widget", "--yes"],
|
|
80
|
+
})),
|
|
81
|
+
{
|
|
82
|
+
label: "package",
|
|
83
|
+
args: ["create", "package", "--name", "@canonical/probe", "--yes"],
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
label: "application",
|
|
87
|
+
// `react` is a path segment here too — the declared binding is
|
|
88
|
+
// `application/react`, and the tree mirrors summon's.
|
|
89
|
+
args: ["create", "application", "react", "probeapp", "--yes"],
|
|
90
|
+
},
|
|
91
|
+
];
|
|
92
|
+
|
|
93
|
+
/** Run one create invocation in its own cwd and snapshot what it wrote. */
|
|
94
|
+
function create(
|
|
95
|
+
command: string,
|
|
96
|
+
prefix: readonly string[],
|
|
97
|
+
args: readonly string[],
|
|
98
|
+
): Map<string, string> {
|
|
99
|
+
const dir = freshCwd();
|
|
100
|
+
execFileSync(command, [...prefix, ...args], { cwd: dir, stdio: "pipe" });
|
|
101
|
+
return snapshot(dir);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
describe("shipped pragma create (PROTECTED)", () => {
|
|
105
|
+
for (const { label, args } of CASES) {
|
|
106
|
+
it(`${label}: shipped entry ≡ source run, byte-for-byte`, () => {
|
|
107
|
+
// (1) The shipped entry, exactly as a consumer's `pragma` runs it.
|
|
108
|
+
const shipped = create(process.execPath, [shippedEntry], args);
|
|
109
|
+
// (2) A source run — the reference output.
|
|
110
|
+
const source = create("bun", [sourceEntry], args);
|
|
111
|
+
|
|
112
|
+
// Wrote something. Before the distribution stopped shipping a compiled
|
|
113
|
+
// binary, `package` and `application` wrote NOTHING here — they refused.
|
|
114
|
+
expect(shipped.size).toBeGreaterThan(0);
|
|
115
|
+
// Same file set …
|
|
116
|
+
expect([...shipped.keys()].sort()).toEqual([...source.keys()].sort());
|
|
117
|
+
// … and byte-identical contents.
|
|
118
|
+
for (const [path, content] of shipped) {
|
|
119
|
+
expect(source.get(path), `content of ${path}`).toBe(content);
|
|
120
|
+
}
|
|
121
|
+
}, 180_000);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* PROTECTED — the shipped-entry READ guard (U1-orig).
|
|
127
|
+
*
|
|
128
|
+
* A READ command (`block list`, `--help`) never calls a generator's
|
|
129
|
+
* `generate()`, so — with the generators loading their templates LAZILY on first
|
|
130
|
+
* `generate()` rather than at module-eval — it must never touch a `.ejs` at all.
|
|
131
|
+
* This is the exact gap the create-only smoke above missed: the component
|
|
132
|
+
* generators used to load templates via a top-level `await`, so a READ crashed
|
|
133
|
+
* with `Template not found`. The lazy load makes a READ template-free, and this
|
|
134
|
+
* pins it at the process boundary where an eager load would resurface.
|
|
135
|
+
*/
|
|
136
|
+
describe("shipped pragma READ smoke (PROTECTED)", () => {
|
|
137
|
+
// A cold store cleanly reports STORE_UNAVAILABLE (exit 3); `--help` never needs
|
|
138
|
+
// a store (exit 0). Both fully exercise startup + dispatch — the phase where an
|
|
139
|
+
// eager generator template load would have crashed — without a store or writes.
|
|
140
|
+
const READS: ReadonlyArray<{
|
|
141
|
+
args: readonly string[];
|
|
142
|
+
okExit: readonly number[];
|
|
143
|
+
}> = [
|
|
144
|
+
{ args: ["block", "list"], okExit: [0, 3] },
|
|
145
|
+
{ args: ["--help"], okExit: [0] },
|
|
146
|
+
];
|
|
147
|
+
|
|
148
|
+
for (const { args, okExit } of READS) {
|
|
149
|
+
it(`\`${args.join(" ")}\` runs without a Template-not-found crash`, () => {
|
|
150
|
+
const result = spawnSync(process.execPath, [shippedEntry, ...args], {
|
|
151
|
+
cwd: freshCwd(),
|
|
152
|
+
stdio: "pipe",
|
|
153
|
+
encoding: "utf-8",
|
|
154
|
+
});
|
|
155
|
+
const output = `${result.stdout ?? ""}${result.stderr ?? ""}`;
|
|
156
|
+
// The exact crash the lazy-template fix closes.
|
|
157
|
+
expect(output).not.toMatch(/Template not found/);
|
|
158
|
+
// Nor does it collapse to the internal-bug path (the crash's other tell).
|
|
159
|
+
expect(output).not.toMatch(/Internal error/);
|
|
160
|
+
// It reaches a clean dispatch outcome, not an uncaught startup crash.
|
|
161
|
+
expect(okExit).toContain(result.status);
|
|
162
|
+
}, 30_000);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
@@ -10,3 +10,23 @@ import type { CREATE_GENERATORS } from "./constants.js";
|
|
|
10
10
|
* heavy generator imports — into the static graph.
|
|
11
11
|
*/
|
|
12
12
|
export type CreateKind = keyof typeof CREATE_GENERATORS;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The REGISTERED CLI spelling of one generator prompt, baked into
|
|
16
|
+
* `createSurface.generated.ts` at build time (the build derives it with the
|
|
17
|
+
* same summon-core helpers the mount registers through). Consumers that need
|
|
18
|
+
* only the spelling — completion tokens, the reference's usage lines — read
|
|
19
|
+
* this baked record instead of calling the projection, which keeps the
|
|
20
|
+
* `--help`/`__complete` fast paths free of the registration machinery.
|
|
21
|
+
*/
|
|
22
|
+
export interface PromptCliSyntax {
|
|
23
|
+
/**
|
|
24
|
+
* The registered flag token (`--component-path`; a default-true confirm
|
|
25
|
+
* registers ONLY its `--no-<kebab>` form).
|
|
26
|
+
*/
|
|
27
|
+
readonly flag: string;
|
|
28
|
+
/** Whether the registered flag takes a value (`--styles` does not). */
|
|
29
|
+
readonly takesValue: boolean;
|
|
30
|
+
/** The prompt name's kebab-case CLI spelling (`componentPath` → `component-path`). */
|
|
31
|
+
readonly kebabName: string;
|
|
32
|
+
}
|
|
@@ -30,6 +30,10 @@ if (!standardPack) {
|
|
|
30
30
|
const CS = "http://pragma.canonical.com/codestandards#";
|
|
31
31
|
const PREFIXES = {
|
|
32
32
|
cs: CS,
|
|
33
|
+
// The store the fixture builds is queried with the story queries verbatim,
|
|
34
|
+
// and the category roll-up names `skos:broader` — a CORE prefix on the real
|
|
35
|
+
// build path (`buildPackPrefixes`), which this in-memory helper does not use.
|
|
36
|
+
skos: "http://www.w3.org/2004/02/skos/core#",
|
|
33
37
|
owl: "http://www.w3.org/2002/07/owl#",
|
|
34
38
|
rdfs: "http://www.w3.org/2000/01/rdf-schema#",
|
|
35
39
|
xsd: "http://www.w3.org/2001/XMLSchema#",
|
|
@@ -33,12 +33,14 @@ function declaredShape(verb: VerbSpec): Record<string, unknown> {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
describe("the distribution's declared stories (PROTECTED)", () => {
|
|
36
|
-
it("declares exactly the
|
|
36
|
+
it("declares exactly the seven domain nouns", () => {
|
|
37
37
|
// Every domain noun is now nothing BUT its story (L-OPEN-9), so a renamed
|
|
38
38
|
// or dropped noun deletes a whole command rather than shrinking one — it
|
|
39
39
|
// must fail HERE.
|
|
40
40
|
expect([...declaredStories.keys()].sort()).toEqual([
|
|
41
41
|
"block",
|
|
42
|
+
"concept",
|
|
43
|
+
"implementation",
|
|
42
44
|
"modifier",
|
|
43
45
|
"standard",
|
|
44
46
|
"tier",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* `pragma.conf.ts` declares them on the packs that supply them; this is the ONE
|
|
5
5
|
* place those declarations become capabilities. They come through the SAME door
|
|
6
|
-
* a third-party story does — {@link
|
|
6
|
+
* a third-party story does — {@link compileStoryModule} — so the mechanism the CLI
|
|
7
7
|
* offers forks is the mechanism the CLI itself runs on.
|
|
8
8
|
*
|
|
9
9
|
* They are compiled STATICALLY rather than merged at dispatch on purpose: the
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* `surface/surface.v2.json` freezes the emitted surface, so a noun that only
|
|
12
12
|
* arrived at dispatch would vanish from help and completion on a fresh install.
|
|
13
13
|
* That is affordable because this module is zod-free and pure — `pragma.conf.ts`
|
|
14
|
-
* is inert data and
|
|
14
|
+
* is inert data and the compiler builds specs without touching the store.
|
|
15
15
|
*
|
|
16
16
|
* Config- and package-declared stories still OVERRIDE these at dispatch; the
|
|
17
17
|
* `story` marker on each module is what tells `assembleEffectiveModules` which
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
import conf from "../../pragma.conf.js";
|
|
22
|
-
import {
|
|
22
|
+
import { compileStoryModule } from "../kernel/packs/compile.js";
|
|
23
23
|
import {
|
|
24
24
|
distributionSource,
|
|
25
25
|
type PackDefinition,
|
|
26
26
|
} from "../kernel/packs/types.js";
|
|
27
|
-
import { DEFAULT_PREFIX_MAP } from "../kernel/render/
|
|
28
|
-
import type { CapabilityModule } from "../kernel/spec/
|
|
27
|
+
import { DEFAULT_PREFIX_MAP } from "../kernel/render/index.js";
|
|
28
|
+
import type { CapabilityModule } from "../kernel/spec/index.js";
|
|
29
29
|
|
|
30
30
|
/** The read stories `pragma.conf.ts` declares on its packs, by noun. */
|
|
31
31
|
export const declaredStories: ReadonlyMap<string, PackDefinition> = new Map(
|
|
@@ -45,15 +45,10 @@ export const declaredStories: ReadonlyMap<string, PackDefinition> = new Map(
|
|
|
45
45
|
export const storyModules: ReadonlyMap<string, CapabilityModule> = new Map(
|
|
46
46
|
[...declaredStories].map(([noun, story]) => [
|
|
47
47
|
noun,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
distributionSource("pragma.conf.ts"),
|
|
54
|
-
DEFAULT_PREFIX_MAP,
|
|
55
|
-
),
|
|
56
|
-
colophon: story.colophon,
|
|
57
|
-
},
|
|
48
|
+
compileStoryModule(
|
|
49
|
+
story,
|
|
50
|
+
distributionSource("pragma.conf.ts"),
|
|
51
|
+
DEFAULT_PREFIX_MAP,
|
|
52
|
+
),
|
|
58
53
|
]),
|
|
59
54
|
);
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { BIN_NAME } from "../../../constants.js";
|
|
2
2
|
import { entityTotal } from "../../../kernel/completion/entitySource.js";
|
|
3
|
-
import type { PragmaRuntime } from "../../../kernel/runtime/
|
|
3
|
+
import type { PragmaRuntime } from "../../../kernel/runtime/index.js";
|
|
4
4
|
import type { CheckResult } from "../types.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Check that the
|
|
7
|
+
* Check that the local store boots, reporting the entity total and boot time.
|
|
8
|
+
* The check is NAMED "store" in the report — the same word every other surface
|
|
9
|
+
* uses for it; the ke library it boots through is an implementation detail.
|
|
8
10
|
*
|
|
9
11
|
* This is the ONE check that touches the store — it boots the shared lazy store
|
|
10
12
|
* inside a try/catch, so doctor stays storeless-by-default at the dispatch level
|
|
@@ -24,15 +26,15 @@ export async function checkKeStore(rt: PragmaRuntime): Promise<CheckResult> {
|
|
|
24
26
|
const total = entityTotal(session.index);
|
|
25
27
|
const elapsed = Math.round(performance.now() - start);
|
|
26
28
|
return {
|
|
27
|
-
name: "
|
|
29
|
+
name: "store",
|
|
28
30
|
status: "pass",
|
|
29
31
|
detail: `${total.toLocaleString()} entities in ${elapsed}ms`,
|
|
30
32
|
};
|
|
31
33
|
} catch {
|
|
32
34
|
return {
|
|
33
|
-
name: "
|
|
35
|
+
name: "store",
|
|
34
36
|
status: "fail",
|
|
35
|
-
detail: "
|
|
37
|
+
detail: "cannot boot",
|
|
36
38
|
remedy: `Ensure design-system packs are configured and run \`${BIN_NAME} sources update\`.`,
|
|
37
39
|
};
|
|
38
40
|
}
|
|
@@ -20,13 +20,15 @@ import {
|
|
|
20
20
|
entityTotal,
|
|
21
21
|
readPackIndex,
|
|
22
22
|
} from "../../../kernel/completion/entitySource.js";
|
|
23
|
-
import { validateStories } from "../../../kernel/packs/
|
|
24
|
-
import {
|
|
25
|
-
|
|
23
|
+
import { validateStories } from "../../../kernel/packs/index.js";
|
|
24
|
+
import {
|
|
25
|
+
embeddedManifest,
|
|
26
|
+
readManifest,
|
|
27
|
+
} from "../../../kernel/runtime/graphpack/index.js";
|
|
26
28
|
import { activeStories } from "../../../kernel/runtime/graphpack/stories.js";
|
|
29
|
+
import type { PragmaRuntime } from "../../../kernel/runtime/index.js";
|
|
27
30
|
import type { SourcesDecision } from "../../../kernel/runtime/resolveSources.js";
|
|
28
31
|
import { resolveSources } from "../../../kernel/runtime/resolveSources.js";
|
|
29
|
-
import type { PragmaRuntime } from "../../../kernel/runtime/types.js";
|
|
30
32
|
import type { CheckItem, CheckResult } from "../types.js";
|
|
31
33
|
|
|
32
34
|
/**
|
|
@@ -58,6 +60,51 @@ function ignoredSuffix(items: readonly CheckItem[]): string {
|
|
|
58
60
|
return ` · ${items.length} ${items.length === 1 ? "story" : "stories"} ignored`;
|
|
59
61
|
}
|
|
60
62
|
|
|
63
|
+
/**
|
|
64
|
+
* The answering pack's provenance, one item per pack it was built from.
|
|
65
|
+
*
|
|
66
|
+
* `sourceRef` is a single comma-joined string — `@canonical/design-system@git:
|
|
67
|
+
* d6d8a6c8268cf2bd103e956a2540d6e36bd08d72, @canonical/anatomy-dsl@npm:0.2.2,
|
|
68
|
+
* …` — and printing it whole put four packs and two forty-character SHAs on one
|
|
69
|
+
* line, in a report whose every other multi-part check (`mcp`, `harnesses`)
|
|
70
|
+
* uses the sub-item mechanism. Provenance is the thing a reader is here for
|
|
71
|
+
* when they read this line at all: which revision of which pack answered.
|
|
72
|
+
*
|
|
73
|
+
* The scheme (`git`/`npm`/`self`/`file`) is kept because it says how to move
|
|
74
|
+
* the pin, and a git hash is cut to the seven characters every other tool in
|
|
75
|
+
* this workflow shows. A ref that does not parse is passed through whole rather
|
|
76
|
+
* than dropped — an unreadable provenance is still provenance, and hiding it
|
|
77
|
+
* would be the one failure this check exists to prevent.
|
|
78
|
+
*
|
|
79
|
+
* @param sourceRef - The manifest's comma-joined provenance string.
|
|
80
|
+
* @returns One passing item per pack, in the order the pack records them.
|
|
81
|
+
*/
|
|
82
|
+
function packItems(sourceRef: string): CheckItem[] {
|
|
83
|
+
return sourceRef
|
|
84
|
+
.split(",")
|
|
85
|
+
.map((ref) => ref.trim())
|
|
86
|
+
.filter((ref) => ref !== "")
|
|
87
|
+
.map((ref) => {
|
|
88
|
+
const parsed = /^(.+)@(git|npm|self|file|link):(.+)$/.exec(ref);
|
|
89
|
+
if (parsed === null) return { label: ref, status: "pass" as const };
|
|
90
|
+
const [, pack, scheme, revision] = parsed as unknown as [
|
|
91
|
+
string,
|
|
92
|
+
string,
|
|
93
|
+
string,
|
|
94
|
+
string,
|
|
95
|
+
];
|
|
96
|
+
const short =
|
|
97
|
+
scheme === "git" && /^[0-9a-f]{40}$/.test(revision)
|
|
98
|
+
? revision.slice(0, 7)
|
|
99
|
+
: revision;
|
|
100
|
+
return {
|
|
101
|
+
label: pack,
|
|
102
|
+
detail: `${scheme} ${short}`,
|
|
103
|
+
status: "pass" as const,
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
61
108
|
/**
|
|
62
109
|
* Report which pack answers reads, its provenance, and its entity total.
|
|
63
110
|
*
|
|
@@ -87,13 +134,30 @@ export async function checkPackageRefs(
|
|
|
87
134
|
// The pack DOES answer reads, so the check itself passes; the ignored stories
|
|
88
135
|
// are failing sub-items under it. (A `warn` status would ripple through the
|
|
89
136
|
// renderer and the DoctorData counts to buy an icon.)
|
|
90
|
-
const
|
|
91
|
-
const suffix = ignoredSuffix(
|
|
137
|
+
const ignored = await ignoredStoryItems(decision);
|
|
138
|
+
const suffix = ignoredSuffix(ignored);
|
|
139
|
+
const sourceRef =
|
|
140
|
+
decision.kind === "embedded"
|
|
141
|
+
? embeddedManifest().sourceRef
|
|
142
|
+
: (readManifest(decision.dir)?.sourceRef ?? "");
|
|
143
|
+
// Packs first, then anything wrong with them: the composition is the answer to
|
|
144
|
+
// "which revision am I reading", and a failing story is a note about one of
|
|
145
|
+
// the rows above it.
|
|
146
|
+
const packs = packItems(sourceRef);
|
|
147
|
+
const items = [...packs, ...ignored];
|
|
148
|
+
const composition = `${packs.length} ${packs.length === 1 ? "pack" : "packs"}, ${entities} entities${suffix}`;
|
|
149
|
+
|
|
92
150
|
if (decision.kind === "embedded") {
|
|
93
151
|
return {
|
|
94
152
|
name,
|
|
95
153
|
status: "pass",
|
|
96
|
-
|
|
154
|
+
// The update hint stays in the DETAIL rather than moving to `remedy`:
|
|
155
|
+
// the renderer prints a remedy only where there is something to fix or
|
|
156
|
+
// to finish, and a snapshot that is answering reads correctly is
|
|
157
|
+
// neither. "shipped with the CLI" rather than "embedded snapshot" — the
|
|
158
|
+
// reader needs to know where these packs came from, not what the build
|
|
159
|
+
// calls the artefact.
|
|
160
|
+
detail: `shipped with the CLI — ${composition} · run \`${BIN_NAME} sources update\` to build from your own configured packs instead`,
|
|
97
161
|
...(items.length > 0 ? { items } : {}),
|
|
98
162
|
};
|
|
99
163
|
}
|
|
@@ -101,7 +165,10 @@ export async function checkPackageRefs(
|
|
|
101
165
|
return {
|
|
102
166
|
name,
|
|
103
167
|
status: "pass",
|
|
104
|
-
detail:
|
|
168
|
+
detail:
|
|
169
|
+
packs.length > 0
|
|
170
|
+
? `built ${manifest?.createdAt ?? "?"} — ${composition}`
|
|
171
|
+
: `${decision.contentHash.slice(0, 12)} — ${composition}, built ${manifest?.createdAt ?? "?"}`,
|
|
105
172
|
...(items.length > 0 ? { items } : {}),
|
|
106
173
|
};
|
|
107
174
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BIN_NAME } from "../../../constants.js";
|
|
2
|
-
import type { PragmaRuntime } from "../../../kernel/runtime/
|
|
3
|
-
import { detectInstallSource } from "../../shared/
|
|
2
|
+
import type { PragmaRuntime } from "../../../kernel/runtime/index.js";
|
|
3
|
+
import { detectInstallSource } from "../../shared/index.js";
|
|
4
4
|
import type { CheckResult } from "../types.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* `checkShellCompletions` — the doctor check that verifies completions are
|
|
3
3
|
* installed AND up to date AND functional.
|
|
4
4
|
*
|
|
5
|
-
* Runs against an isolated HOME and
|
|
5
|
+
* Runs against an isolated HOME and an injected shell so the gates —
|
|
6
6
|
* the resolver effect test, the install probe, and the zsh fpath activation
|
|
7
7
|
* gate — are deterministic. The effect test (gate 1) drives the real
|
|
8
8
|
* `runComplete` resolver; the install/fpath gates write real files under the
|
|
@@ -22,7 +22,12 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
|
22
22
|
import { emitScripts } from "../../../kernel/completion/emitScripts.js";
|
|
23
23
|
import { capabilities } from "../../index.js";
|
|
24
24
|
import { detectCompletions } from "../../setup/operations/setupCompletions.js";
|
|
25
|
-
import {
|
|
25
|
+
import {
|
|
26
|
+
completionScriptPath,
|
|
27
|
+
type ShellDetection,
|
|
28
|
+
type ShellId,
|
|
29
|
+
} from "../../setup/shell.js";
|
|
30
|
+
import type { CheckResult } from "../types.js";
|
|
26
31
|
import { checkShellCompletions } from "./checkShellCompletions.js";
|
|
27
32
|
|
|
28
33
|
const roots: string[] = [];
|
|
@@ -33,16 +38,21 @@ const tmp = (): string => {
|
|
|
33
38
|
};
|
|
34
39
|
|
|
35
40
|
let prevHome: string | undefined;
|
|
36
|
-
let
|
|
41
|
+
let prevPath: string | undefined;
|
|
37
42
|
beforeEach(() => {
|
|
38
43
|
prevHome = process.env.HOME;
|
|
39
|
-
|
|
44
|
+
prevPath = process.env.PATH;
|
|
40
45
|
process.env.HOME = tmp();
|
|
46
|
+
// The installed script spawns `pragma` for every name context, and the check
|
|
47
|
+
// now verifies that it can. Put one on an isolated PATH so these cases are
|
|
48
|
+
// about the SCRIPT rather than about the host's install.
|
|
49
|
+
const bin = tmp();
|
|
50
|
+
writeFileSync(join(bin, "pragma"), "");
|
|
51
|
+
process.env.PATH = bin;
|
|
41
52
|
});
|
|
42
53
|
afterEach(() => {
|
|
43
54
|
process.env.HOME = prevHome;
|
|
44
|
-
|
|
45
|
-
else process.env.SHELL = prevShell;
|
|
55
|
+
process.env.PATH = prevPath;
|
|
46
56
|
for (const dir of roots) rmSync(dir, { recursive: true, force: true });
|
|
47
57
|
roots.length = 0;
|
|
48
58
|
});
|
|
@@ -59,6 +69,20 @@ function installScript(shell: ShellId): void {
|
|
|
59
69
|
writeScript(shell, emitScripts(capabilities)[shell]);
|
|
60
70
|
}
|
|
61
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Run the check the way `doctor` does: the `completions` target detects once
|
|
74
|
+
* per invocation and the check reads that one answer, so the test drives the
|
|
75
|
+
* same pairing rather than letting the check re-read behind its own back.
|
|
76
|
+
*/
|
|
77
|
+
async function check(cwd: string, shell: ShellId | null): Promise<CheckResult> {
|
|
78
|
+
// The shell is INJECTED rather than forced through `$SHELL`: detection reads
|
|
79
|
+
// the process tree now, and a test that set `$SHELL` was only ever asserting
|
|
80
|
+
// against the login shell — the exact confusion this check exists to catch.
|
|
81
|
+
const detection: ShellDetection =
|
|
82
|
+
shell === null ? { kind: "unknown" } : { kind: "detected", shell };
|
|
83
|
+
return checkShellCompletions(cwd, await detectCompletions(cwd, detection));
|
|
84
|
+
}
|
|
85
|
+
|
|
62
86
|
/** Write a `.zshrc` that puts ~/.zfunc on fpath. */
|
|
63
87
|
function wireZfunc(): void {
|
|
64
88
|
writeFileSync(
|
|
@@ -70,35 +94,58 @@ function wireZfunc(): void {
|
|
|
70
94
|
describe("checkShellCompletions — effect test (gate 1)", () => {
|
|
71
95
|
it("passes the resolver gate: `pragma <TAB>` resolves nouns", async () => {
|
|
72
96
|
// No shell → skip, but only AFTER the resolver answered — the detail proves
|
|
73
|
-
// the effect test ran and succeeded.
|
|
74
|
-
|
|
75
|
-
|
|
97
|
+
// the effect test ran and succeeded. The proof is the same fact worded for
|
|
98
|
+
// a reader ("pragma answers `<TAB>`") rather than as "resolver OK": the
|
|
99
|
+
// gate it pins is unchanged, only the sentence that reports it.
|
|
100
|
+
const result = await check(tmp(), null);
|
|
76
101
|
expect(result.status).toBe("skip");
|
|
77
|
-
expect(result.detail).toMatch(/
|
|
102
|
+
expect(result.detail).toMatch(/answers `<TAB>`/);
|
|
78
103
|
});
|
|
79
104
|
});
|
|
80
105
|
|
|
81
106
|
describe("checkShellCompletions — install probe (gate 2)", () => {
|
|
82
|
-
it("
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
expect(result.status).toBe("fail");
|
|
107
|
+
it("a never-installed script is available (opt-in, not a fault) with the setup command", async () => {
|
|
108
|
+
const result = await check(tmp(), "bash");
|
|
109
|
+
expect(result.status).toBe("available");
|
|
86
110
|
expect(result.detail).toMatch(/not installed/);
|
|
87
111
|
expect(result.remedy).toBe("pragma setup completions");
|
|
88
112
|
});
|
|
89
113
|
|
|
114
|
+
it("does not claim a script is installed when the binary is off PATH", async () => {
|
|
115
|
+
// This gate runs before the install probe, so it saw only that the binary
|
|
116
|
+
// does not resolve — and reported `bash script installed, but ...` on a
|
|
117
|
+
// machine where nothing had ever been installed. Anyone invoking this CLI
|
|
118
|
+
// by absolute path lands here, and the row invented the file it exists to
|
|
119
|
+
// report on.
|
|
120
|
+
process.env.PATH = tmp(); // an empty PATH: no binary to find
|
|
121
|
+
const result = await check(tmp(), "bash");
|
|
122
|
+
expect(result.detail).not.toMatch(/script installed/);
|
|
123
|
+
expect(result.detail).toMatch(/is not on PATH/);
|
|
124
|
+
// Nothing was installed, so nothing that exists is broken.
|
|
125
|
+
expect(result.status).toBe("available");
|
|
126
|
+
expect(result.remedy).toMatch(/on your PATH/);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
it("fails when an INSTALLED script cannot reach the binary", async () => {
|
|
130
|
+
installScript("bash");
|
|
131
|
+
process.env.PATH = tmp();
|
|
132
|
+
const result = await check(tmp(), "bash");
|
|
133
|
+
expect(result.status).toBe("fail");
|
|
134
|
+
expect(result.detail).toMatch(/script installed, but/);
|
|
135
|
+
});
|
|
136
|
+
|
|
90
137
|
it("passes for bash once the up-to-date script is at its real path", async () => {
|
|
91
|
-
process.env.SHELL = "/usr/bin/bash";
|
|
92
138
|
installScript("bash");
|
|
93
|
-
const result = await
|
|
139
|
+
const result = await check(tmp(), "bash");
|
|
94
140
|
expect(result.status).toBe("pass");
|
|
95
|
-
expect(result.detail).toMatch(
|
|
141
|
+
expect(result.detail).toMatch(
|
|
142
|
+
/bash \(the shell you are in\) — installed, up to date, and completing/,
|
|
143
|
+
);
|
|
96
144
|
});
|
|
97
145
|
|
|
98
146
|
it("passes for fish once the up-to-date script is at its real path", async () => {
|
|
99
|
-
process.env.SHELL = "/usr/bin/fish";
|
|
100
147
|
installScript("fish");
|
|
101
|
-
const result = await
|
|
148
|
+
const result = await check(tmp(), "fish");
|
|
102
149
|
expect(result.status).toBe("pass");
|
|
103
150
|
});
|
|
104
151
|
|
|
@@ -110,9 +157,8 @@ describe("checkShellCompletions — install probe (gate 2)", () => {
|
|
|
110
157
|
// Every user upgrading across a grammar change lands here: the old script
|
|
111
158
|
// offers the old nouns and misses the new ones, and doctor is the one
|
|
112
159
|
// command whose job is to say so.
|
|
113
|
-
process.env.SHELL = "/usr/bin/bash";
|
|
114
160
|
writeScript("bash", "# STALE JUNK\n");
|
|
115
|
-
const result = await
|
|
161
|
+
const result = await check(tmp(), "bash");
|
|
116
162
|
expect(result.status).toBe("fail");
|
|
117
163
|
expect(result.detail).toMatch(/out of date/);
|
|
118
164
|
expect(result.remedy).toBe("pragma setup completions");
|
|
@@ -127,23 +173,23 @@ describe("checkShellCompletions — install probe (gate 2)", () => {
|
|
|
127
173
|
// failure back rather than closing it. The first assertion is the
|
|
128
174
|
// discriminator — this project really does ask for a different body — so
|
|
129
175
|
// deleting the config write below turns the test red.
|
|
130
|
-
process.env.SHELL = "/usr/bin/bash";
|
|
131
176
|
installScript("bash");
|
|
132
177
|
const cwd = tmp();
|
|
133
178
|
writeFileSync(
|
|
134
179
|
join(cwd, "pragma.config.ts"),
|
|
135
180
|
"export default { completion: { minChars: 5 } };\n",
|
|
136
181
|
);
|
|
137
|
-
expect(
|
|
138
|
-
|
|
182
|
+
expect(
|
|
183
|
+
(await detectCompletions(cwd, { kind: "detected", shell: "bash" })).state,
|
|
184
|
+
).toBe("stale");
|
|
185
|
+
expect((await check(cwd, "bash")).status).toBe("pass");
|
|
139
186
|
});
|
|
140
187
|
});
|
|
141
188
|
|
|
142
189
|
describe("checkShellCompletions — zsh fpath activation (gate 3)", () => {
|
|
143
190
|
it("fails when the zsh script is installed but ~/.zfunc is not on fpath", async () => {
|
|
144
|
-
process.env.SHELL = "/usr/bin/zsh";
|
|
145
191
|
installScript("zsh");
|
|
146
|
-
const result = await
|
|
192
|
+
const result = await check(tmp(), "zsh");
|
|
147
193
|
expect(result.status).toBe("fail");
|
|
148
194
|
expect(result.detail).toMatch(/not on your fpath/);
|
|
149
195
|
// The remedy IS the activation hint — the exact ~/.zshrc lines.
|
|
@@ -151,11 +197,12 @@ describe("checkShellCompletions — zsh fpath activation (gate 3)", () => {
|
|
|
151
197
|
});
|
|
152
198
|
|
|
153
199
|
it("passes once the zsh script is installed AND ~/.zfunc is on fpath", async () => {
|
|
154
|
-
process.env.SHELL = "/usr/bin/zsh";
|
|
155
200
|
installScript("zsh");
|
|
156
201
|
wireZfunc();
|
|
157
|
-
const result = await
|
|
202
|
+
const result = await check(tmp(), "zsh");
|
|
158
203
|
expect(result.status).toBe("pass");
|
|
159
|
-
expect(result.detail).toMatch(
|
|
204
|
+
expect(result.detail).toMatch(
|
|
205
|
+
/zsh \(the shell you are in\) — installed, up to date, and completing/,
|
|
206
|
+
);
|
|
160
207
|
});
|
|
161
208
|
});
|