@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,269 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: adoption-a1-styles
|
|
3
|
+
description: Adopt Canonical design-system styles, fonts, and icons in an application (adoption track A1); also runs as a guided tutorial on a worked example
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Adoption A1 — Styles, fonts, icons
|
|
7
|
+
|
|
8
|
+
The first track of adopting the design system: the visual foundation — reset,
|
|
9
|
+
typography, tokens, fonts, icons — before any component swap. Complete this track and
|
|
10
|
+
the app looks and reads like the design system even while it still renders its old
|
|
11
|
+
components.
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
|
|
15
|
+
- Starting design-system adoption in an application — this is the first track
|
|
16
|
+
- The app needs the visual foundation (reset, typography, tokens, fonts, icons) before
|
|
17
|
+
any component swap
|
|
18
|
+
|
|
19
|
+
## When NOT to Use
|
|
20
|
+
|
|
21
|
+
- The foundation is already installed and verified — continue with
|
|
22
|
+
`adoption-a2-components`
|
|
23
|
+
- Authoring design-system content rather than adopting it — see `specify-component`
|
|
24
|
+
and its sibling skills
|
|
25
|
+
|
|
26
|
+
## Opening move: ask, or offer the tutorial
|
|
27
|
+
|
|
28
|
+
Activation is an opening, not a starting gun. Unless the first message already names
|
|
29
|
+
the work, ask for the starting point — as a suggestion carrying an example, not as a
|
|
30
|
+
form to fill in:
|
|
31
|
+
|
|
32
|
+
> To get started, point me at the app — the repo or directory — and say whether it
|
|
33
|
+
> already pulls in any Canonical styles.
|
|
34
|
+
|
|
35
|
+
"I don't know what's in there" is a fine answer: the install and verify steps
|
|
36
|
+
establish it. Ask again only for what the next step genuinely blocks on.
|
|
37
|
+
|
|
38
|
+
If the activation message already carries the starting point, do not re-ask — say what
|
|
39
|
+
you took it to be, and go.
|
|
40
|
+
|
|
41
|
+
Offer the tutorial in the same breath, because this track doubles as one:
|
|
42
|
+
|
|
43
|
+
> Or if you'd rather see what this track changes before touching your app, I can run
|
|
44
|
+
> it as a tutorial: I'll take a plausible example — a small Vite React app — and walk
|
|
45
|
+
> you through the track on it.
|
|
46
|
+
|
|
47
|
+
Tutorial mode is the step narration below, turned up: the same outcome-path-conclusion
|
|
48
|
+
frame, with the reasoning behind each change made explicit. It runs on a scratch
|
|
49
|
+
example, not on the person's app — nothing in their repo changes unless they ask.
|
|
50
|
+
|
|
51
|
+
## Every step is narrated: outcome, path, conclusion
|
|
52
|
+
|
|
53
|
+
Every step is addressed to the person — once before it runs, once when it ends. This is
|
|
54
|
+
not tutorial manner. It holds in the ordinary flow too: the person is the design
|
|
55
|
+
authority, and they can only steer a step they saw coming. A decision gate met cold is
|
|
56
|
+
a decision they cannot really make.
|
|
57
|
+
|
|
58
|
+
**Open** the step with what it is FOR — the outcome it should leave behind — and how
|
|
59
|
+
you are about to get there. **Close** it with a sentence saying what it established and
|
|
60
|
+
what that means for the step after. One sentence each is enough; the failure mode is
|
|
61
|
+
silence, not length, and a step whose outcome looks obvious still gets its sentence
|
|
62
|
+
rather than a shrug.
|
|
63
|
+
|
|
64
|
+
Do:
|
|
65
|
+
|
|
66
|
+
> **Fonts, then styles.** The outcome is an app whose type and tokens come from the
|
|
67
|
+
> design system, with the fonts loaded before the styles that expect them. The path is
|
|
68
|
+
> the two `@import` lines below, in the root stylesheet, fonts first.
|
|
69
|
+
>
|
|
70
|
+
> …
|
|
71
|
+
>
|
|
72
|
+
> So: type and tokens are live and Ubuntu Sans is self-hosted — which leaves the
|
|
73
|
+
> surface classes as the step that decides whether the density channel emits real
|
|
74
|
+
> values at all.
|
|
75
|
+
|
|
76
|
+
Don't:
|
|
77
|
+
|
|
78
|
+
> Added the two imports. Fonts load.
|
|
79
|
+
|
|
80
|
+
Both carry the same facts. Only the first says what the step was trying to achieve and
|
|
81
|
+
what it settled — and only the first lets the person cut in with the thing they know
|
|
82
|
+
and the graph does not, which is the whole reason they are here.
|
|
83
|
+
|
|
84
|
+
## Asked about the skill: methodology and outcomes first
|
|
85
|
+
|
|
86
|
+
A question about what this skill does — what it covers, what its steps are, how it
|
|
87
|
+
works — is answered in that order: the METHOD it applies and the OUTCOMES it leaves
|
|
88
|
+
the person holding come first, the step-by-step breakdown comes after.
|
|
89
|
+
|
|
90
|
+
Two or three sentences of method is enough: what the skill treats as its object, the
|
|
91
|
+
discipline that makes it work, and what exists at the end that did not exist before.
|
|
92
|
+
The enumeration then reads as steps in service of something, rather than as a list to
|
|
93
|
+
be got through.
|
|
94
|
+
|
|
95
|
+
What this prevents is a table of contents standing in for an answer. A reply opening
|
|
96
|
+
with the step names tells someone who already knows the skill nothing new, and someone
|
|
97
|
+
who does not, nothing at all.
|
|
98
|
+
|
|
99
|
+
So, asked what this skill is:
|
|
100
|
+
|
|
101
|
+
> It installs the visual foundation — reset, typography, tokens, fonts, icons — before
|
|
102
|
+
> any component is swapped, under the live code standards. Complete it and the app
|
|
103
|
+
> looks and reads like the design system while it still renders its old components,
|
|
104
|
+
> which is what makes every later track land on the right ground.
|
|
105
|
+
|
|
106
|
+
Then, and only then, the breakdown.
|
|
107
|
+
|
|
108
|
+
## Install
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
bun add @canonical/styles @canonical/ds-assets
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
One import of `@canonical/styles` aggregates the normalize/reset, typography, and design
|
|
115
|
+
tokens. Two things come with it:
|
|
116
|
+
|
|
117
|
+
- Cascade layers `@layer normalize, ds.reset, ds.modifiers, ds.components` — component
|
|
118
|
+
styles beat modifiers beat reset regardless of import order, so adopting apps do not
|
|
119
|
+
fight specificity.
|
|
120
|
+
- `color-scheme: light dark` on `:root` — the foundation is theme-aware out of the box.
|
|
121
|
+
|
|
122
|
+
## Code standards are the gate
|
|
123
|
+
|
|
124
|
+
Styling work in this track falls under the live code standards — the `styling`, `css`,
|
|
125
|
+
and `icons` categories at minimum (take the actual set from the live output, not from
|
|
126
|
+
this list). Pull them BEFORE touching a stylesheet and hold the Do/Don't pairs open
|
|
127
|
+
while editing, so they shape the change as it is written, not only in review:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
pragma standard categories # the live category set — never from memory
|
|
131
|
+
pragma standard list --category styling # repeat per applicable category
|
|
132
|
+
pragma standard lookup <name> --detail detailed
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Apps follow the code standards as closely as the work allows. Where a change has to
|
|
136
|
+
deviate from a pulled standard, record the deviation in the PR next to the standard's
|
|
137
|
+
name — and ideally file it as an issue, either to bring the app into line later or to
|
|
138
|
+
propose a change to the standard itself. The standards apply even when the app has no
|
|
139
|
+
pragma dependency, and they are open to contribution: a missing or wrong standard is
|
|
140
|
+
something to propose a change for, not to silently work around.
|
|
141
|
+
|
|
142
|
+
## Fonts before styles
|
|
143
|
+
|
|
144
|
+
Fonts are opt-in and must be imported FIRST. The canonical form, in the root stylesheet:
|
|
145
|
+
|
|
146
|
+
```css
|
|
147
|
+
@import url("@canonical/styles/fonts");
|
|
148
|
+
@import url("@canonical/styles");
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
(Equivalent JS-side: import the fonts CSS, then `import "@canonical/styles"`.) The
|
|
152
|
+
fonts entry loads Ubuntu Sans as variable fonts, self-hosted from
|
|
153
|
+
`@canonical/ds-assets` via its `@font-face` rules — no external font host.
|
|
154
|
+
|
|
155
|
+
## Declare the surface: context and density classes
|
|
156
|
+
|
|
157
|
+
The density system is class-driven, and it starts at the root. The app's root element
|
|
158
|
+
(`<body>`, or the app's root container) must carry TWO classes:
|
|
159
|
+
|
|
160
|
+
```html
|
|
161
|
+
<body class="app comfortable">
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
- **Context** — `app`, `site`, or `docs`: which surface this is. Applications take
|
|
165
|
+
`app`; marketing/brochure surfaces take `site`; documentation surfaces take `docs`
|
|
166
|
+
(`docs` shares `site`'s values).
|
|
167
|
+
- **Density** — `comfortable` or `dense`: picks within the context's pair.
|
|
168
|
+
`comfortable` is the default choice unless the product's design calls for `dense`.
|
|
169
|
+
|
|
170
|
+
The requirement, stated as a rule: the root carries EXACTLY ONE class from each
|
|
171
|
+
family — a context (`app` | `site` | `docs`) AND a density (`comfortable` | `dense`).
|
|
172
|
+
That makes six valid combinations (`app comfortable`, `app dense`, `site comfortable`,
|
|
173
|
+
`site dense`, `docs comfortable`, `docs dense`) and nothing else: a single class, a
|
|
174
|
+
value outside either set, or two values from the same family is an invalid surface
|
|
175
|
+
declaration. `app comfortable` is the default for applications; adoption is not done
|
|
176
|
+
until the root carries a valid pair.
|
|
177
|
+
|
|
178
|
+
Components never read these classes directly — they read the `--density-*` custom
|
|
179
|
+
properties the classes emit (control heights, inline padding, vertical spacing rungs,
|
|
180
|
+
baseline seating). A section can locally tighten by carrying its own `dense` class on
|
|
181
|
+
an ancestor of just that region.
|
|
182
|
+
|
|
183
|
+
**Failure mode: missing root classes fail SILENTLY.** The primitives fall back to
|
|
184
|
+
app-comfortable values, so an application looks right by accident — while a site or
|
|
185
|
+
docs surface, or any intended `dense` region, quietly renders with the wrong control
|
|
186
|
+
heights and spacing. This step has historically been forgotten precisely because
|
|
187
|
+
nothing errors. If control heights or spacing look subtly off, check the root classes
|
|
188
|
+
before debugging component CSS.
|
|
189
|
+
|
|
190
|
+
## The /icons serving contract (and its silent failure)
|
|
191
|
+
|
|
192
|
+
Icons are per-file SVGs in `@canonical/ds-assets` (`icons/<name>.svg`, 16x16 viewBox,
|
|
193
|
+
`currentColor` fill, a single `<g id="<name>">`), referenced at RUNTIME: the React
|
|
194
|
+
`Icon` component renders
|
|
195
|
+
|
|
196
|
+
```html
|
|
197
|
+
<use href="/icons/<name>.svg#<name>" />
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
with `rootPath="/icons"` as the default, overridable via the `rootPath` prop.
|
|
201
|
+
|
|
202
|
+
**The app must expose `@canonical/ds-assets`' `icons/` directory at `/icons`** — copy or
|
|
203
|
+
symlink it into the static dir, or add a static mount in the server/bundler config — or
|
|
204
|
+
pass `rootPath` to point where the app does serve them.
|
|
205
|
+
|
|
206
|
+
**Failure mode: an unserved icon renders EMPTY, silently.** No error, no broken-image
|
|
207
|
+
glyph — an external `<use>` reference that 404s resolves to nothing. If icons "don't
|
|
208
|
+
show up", check the network tab for `/icons/<name>.svg` before debugging anything else.
|
|
209
|
+
|
|
210
|
+
For TypeScript apps, the valid icon names ship as data:
|
|
211
|
+
|
|
212
|
+
```ts
|
|
213
|
+
import { ICON_NAMES, type IconName } from "@canonical/ds-assets";
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## Storybook freebies
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
bun add -d @canonical/storybook-config
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```ts
|
|
223
|
+
// .storybook/main.ts
|
|
224
|
+
import { createConfig } from "@canonical/storybook-config";
|
|
225
|
+
|
|
226
|
+
export default createConfig("react"); // or "svelte" | "sveltekit" | "lit"
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
This single call:
|
|
230
|
+
|
|
231
|
+
- serves the whole `@canonical/ds-assets` package via `staticDirs`, so `/icons/*` just
|
|
232
|
+
works in Storybook — do not mistake that for your APP serving them;
|
|
233
|
+
- ships the shared addons and shell theme;
|
|
234
|
+
- fixes the full-height preview chain.
|
|
235
|
+
|
|
236
|
+
One caveat: declare `tags: ["autodocs"]` inline in your own `.storybook/preview.ts` —
|
|
237
|
+
Storybook statically parses that file and does not reliably pick up tags spread from an
|
|
238
|
+
imported preview.
|
|
239
|
+
|
|
240
|
+
## Verify
|
|
241
|
+
|
|
242
|
+
- [ ] Computed `font-family` on body text shows Ubuntu Sans.
|
|
243
|
+
- [ ] The root element carries one context class (`app`/`site`/`docs`) and one
|
|
244
|
+
density class (`comfortable`/`dense`).
|
|
245
|
+
- [ ] Computed `--density-line-height` on a control matches the intended cell
|
|
246
|
+
(e.g. `32px` for app-comfortable, `36px` for site-comfortable) — a fallback
|
|
247
|
+
value on a class-less root passes visual inspection and still fails this check
|
|
248
|
+
on non-app surfaces.
|
|
249
|
+
- [ ] `/icons/<name>.svg` returns 200 with SVG content, and an icon visibly renders.
|
|
250
|
+
- [ ] The `@layer normalize, ds.reset, ds.modifiers, ds.components` rule is present in
|
|
251
|
+
the served CSS.
|
|
252
|
+
- [ ] Typography baseline behaves. Note: the baseline grid is computed with the CSS
|
|
253
|
+
`mod()` function and cannot be downleveled — check the support table in the
|
|
254
|
+
`@canonical/styles-typography` README against the browsers you target.
|
|
255
|
+
|
|
256
|
+
## Next
|
|
257
|
+
|
|
258
|
+
Foundation in place — continue with `adoption-a2-components`.
|
|
259
|
+
|
|
260
|
+
## Support
|
|
261
|
+
|
|
262
|
+
If this skill leads somewhere broken — a command that errors, guidance that
|
|
263
|
+
contradicts what the live system answers, a gap the flow cannot cover — you are not
|
|
264
|
+
stuck:
|
|
265
|
+
|
|
266
|
+
- Raise an issue in the pragma repo: https://github.com/canonical/pragma/issues —
|
|
267
|
+
include the skill name, what was run, and expected vs. actual outcome.
|
|
268
|
+
- Or contact the design-system team owners directly through your organization's
|
|
269
|
+
professional messaging channels for assistance.
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: adoption-a2-components
|
|
3
|
+
description: Swap an application's UI to Canonical design-system components one component type per PR (adoption track A2); also runs as a guided tutorial on a worked example
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Adoption A2 — Components
|
|
7
|
+
|
|
8
|
+
The second adoption track: replace the app's existing UI elements with design-system
|
|
9
|
+
components. Prerequisite: track A1 is done — styles, fonts, and icons are live, so
|
|
10
|
+
swapped components land on the right foundation. That includes the root context and
|
|
11
|
+
density classes (`class="app comfortable"` — A1's "Declare the surface" section):
|
|
12
|
+
component geometry reads the `--density-*` channel those classes emit, and a swap onto
|
|
13
|
+
a class-less root looks subtly wrong rather than broken.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- Track A1 is done and the app's UI elements should become design-system components
|
|
18
|
+
- Planning or executing a component swap PR
|
|
19
|
+
|
|
20
|
+
## When NOT to Use
|
|
21
|
+
|
|
22
|
+
- The visual foundation is not in place — run `adoption-a1-styles` first
|
|
23
|
+
- Migrating forms — a different programming model: `adoption-a3-forms`
|
|
24
|
+
|
|
25
|
+
(An uncovered component TYPE is not a reason to skip the track — it is a per-type
|
|
26
|
+
finding: see "The covered set is queried live" below.)
|
|
27
|
+
|
|
28
|
+
## Opening move: ask, or offer the tutorial
|
|
29
|
+
|
|
30
|
+
Activation is an opening, not a starting gun. Unless the first message already names
|
|
31
|
+
the work, ask for the starting point — as a suggestion carrying an example, not as a
|
|
32
|
+
form to fill in:
|
|
33
|
+
|
|
34
|
+
> To get started, point me at the app and say which component type you'd like swapped
|
|
35
|
+
> first — buttons, say — or let me inventory the app and suggest one.
|
|
36
|
+
|
|
37
|
+
The inventory is cheap, so no preference is a fine answer. Ask again only for what the
|
|
38
|
+
next step genuinely blocks on.
|
|
39
|
+
|
|
40
|
+
If the activation message already carries the starting point, do not re-ask — say what
|
|
41
|
+
you took it to be, and go.
|
|
42
|
+
|
|
43
|
+
Offer the tutorial in the same breath, because this track doubles as one:
|
|
44
|
+
|
|
45
|
+
> Or if you'd rather see what a swap looks like before touching your app, I can run it
|
|
46
|
+
> as a tutorial: I'll take a plausible example — buttons in a small React app — and
|
|
47
|
+
> walk you through one type from inventory to a finished PR.
|
|
48
|
+
|
|
49
|
+
Tutorial mode is the step narration below, turned up: the same outcome-path-conclusion
|
|
50
|
+
frame, with the reasoning behind each change made explicit. It runs on a scratch
|
|
51
|
+
example, not on the person's app — nothing in their repo changes unless they ask.
|
|
52
|
+
|
|
53
|
+
## Every step is narrated: outcome, path, conclusion
|
|
54
|
+
|
|
55
|
+
Every step is addressed to the person — once before it runs, once when it ends. This is
|
|
56
|
+
not tutorial manner. It holds in the ordinary flow too: the person is the design
|
|
57
|
+
authority, and they can only steer a step they saw coming. A decision gate met cold is
|
|
58
|
+
a decision they cannot really make.
|
|
59
|
+
|
|
60
|
+
**Open** the step with what it is FOR — the outcome it should leave behind — and how
|
|
61
|
+
you are about to get there. **Close** it with a sentence saying what it established and
|
|
62
|
+
what that means for the step after. One sentence each is enough; the failure mode is
|
|
63
|
+
silence, not length, and a step whose outcome looks obvious still gets its sentence
|
|
64
|
+
rather than a shrug.
|
|
65
|
+
|
|
66
|
+
Do:
|
|
67
|
+
|
|
68
|
+
> **Inventory first.** The outcome is a real count of what the app uses, per component
|
|
69
|
+
> type, so the first swap PR is chosen from evidence rather than instinct. The path is
|
|
70
|
+
> the greps below over `src/`, deduped with counts.
|
|
71
|
+
>
|
|
72
|
+
> …
|
|
73
|
+
>
|
|
74
|
+
> So: 43 button call sites against 6 cards — buttons are the widest swap and the
|
|
75
|
+
> obvious first PR, and two of those call sites use a variant the system has no
|
|
76
|
+
> modifier for, which is a finding to report rather than a blocker.
|
|
77
|
+
|
|
78
|
+
Don't:
|
|
79
|
+
|
|
80
|
+
> Inventory: 43 buttons, 6 cards, 3 tooltips.
|
|
81
|
+
|
|
82
|
+
Both carry the same facts. Only the first says what the step was trying to achieve and
|
|
83
|
+
what it settled — and only the first lets the person cut in with the thing they know
|
|
84
|
+
and the graph does not, which is the whole reason they are here.
|
|
85
|
+
|
|
86
|
+
## Asked about the skill: methodology and outcomes first
|
|
87
|
+
|
|
88
|
+
A question about what this skill does — what it covers, what its steps are, how it
|
|
89
|
+
works — is answered in that order: the METHOD it applies and the OUTCOMES it leaves
|
|
90
|
+
the person holding come first, the step-by-step breakdown comes after.
|
|
91
|
+
|
|
92
|
+
Two or three sentences of method is enough: what the skill treats as its object, the
|
|
93
|
+
discipline that makes it work, and what exists at the end that did not exist before.
|
|
94
|
+
The enumeration then reads as steps in service of something, rather than as a list to
|
|
95
|
+
be got through.
|
|
96
|
+
|
|
97
|
+
What this prevents is a table of contents standing in for an answer. A reply opening
|
|
98
|
+
with the step names tells someone who already knows the skill nothing new, and someone
|
|
99
|
+
who does not, nothing at all.
|
|
100
|
+
|
|
101
|
+
So, asked what this skill is:
|
|
102
|
+
|
|
103
|
+
> It replaces the app's UI elements with design-system components, one component type
|
|
104
|
+
> per PR, with the order chosen from a real inventory rather than instinct. You end
|
|
105
|
+
> with each swapped type sitting on A1's foundation, accessibility warnings treated as
|
|
106
|
+
> contract, and any type the system does not cover reported as a finding rather than
|
|
107
|
+
> treated as a blocker.
|
|
108
|
+
|
|
109
|
+
Then, and only then, the breakdown.
|
|
110
|
+
|
|
111
|
+
## Install
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
bun add @canonical/react-ds-global
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
That is the universal (global) tier package. App-tier siblings, where they exist,
|
|
118
|
+
follow a naming convention — the mapping is convention, not a graph field:
|
|
119
|
+
`@canonical/<framework>-ds-global` for the `global` tier, `-ds-app` for the shared
|
|
120
|
+
`apps` tier, and `-ds-app-<app>` for an app-specific tier (so the `apps_lxd` tier
|
|
121
|
+
installs `@canonical/react-ds-app-lxd`). The `<app>` segment is the package's own
|
|
122
|
+
short name, not always the tier suffix (the `apps_workplaceengineering` tier's
|
|
123
|
+
package is `@canonical/svelte-ds-app-wpe`) — `pragma tier list` shows which tiers
|
|
124
|
+
exist, and the derived package name must resolve before you install it. Tiers
|
|
125
|
+
outside `global`/`apps*` have no package convention today: there the target package
|
|
126
|
+
is a decision to raise, not to derive.
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
import { Button, Badge, Card, Tooltip } from "@canonical/react-ds-global";
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Named imports; components accept the underlying element's native HTML attributes, so
|
|
133
|
+
existing `onClick`/`aria-*`/`data-*` plumbing carries over.
|
|
134
|
+
|
|
135
|
+
## Code standards are the gate
|
|
136
|
+
|
|
137
|
+
Every swap writes component code, and that code falls under the live code standards —
|
|
138
|
+
the target framework's category (`react`, `svelte`, `lit`), plus `testing` and
|
|
139
|
+
`storybook` where the swap touches those (take the actual set from the live output,
|
|
140
|
+
not from this list). Pull them BEFORE the first swap of a PR and hold the Do/Don't
|
|
141
|
+
pairs open while writing:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
pragma standard categories # the live category set — never from memory
|
|
145
|
+
pragma standard list --category react # swap react for the target framework
|
|
146
|
+
pragma standard lookup <name> --detail detailed
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Apps follow the code standards as closely as the swap allows. Where swapped code has
|
|
150
|
+
to deviate from a pulled standard, record the deviation in the PR next to the
|
|
151
|
+
standard's name — "the old code did it this way" is a deviation to record, not a
|
|
152
|
+
reason to stay silent — and ideally file it as an issue, either to bring the app into
|
|
153
|
+
line later or to propose a change to the standard itself. The standards apply even
|
|
154
|
+
when the app has no pragma dependency, and they are open to contribution: a missing
|
|
155
|
+
or wrong standard is something to propose a change for, not to silently work around.
|
|
156
|
+
|
|
157
|
+
## Inventory first (grep, don't guess)
|
|
158
|
+
|
|
159
|
+
Build the swap list from the code, not from memory:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
grep -rhoE '\bp-[a-z0-9-]+' src/ | sort | uniq -c | sort -rn # Vanilla class inventory, deduped with counts
|
|
163
|
+
grep -rn 'from "@canonical/react-components"' src/ # or your current component library's import
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Group the hits by component TYPE — all buttons, all cards, all tooltips — because the
|
|
167
|
+
type is the unit of work below. When you get to one type, locate its call sites with an
|
|
168
|
+
anchored grep:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
grep -rnE '\bp-button\b' src/ # swap p-button for the type at hand
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Anchor on the class TOKEN, not on the attribute — a `class(Name)?="…"` pattern
|
|
175
|
+
under-collects, missing template-literal (`` className={`p-button …`} ``), `clsx(…)`,
|
|
176
|
+
and single-quoted call sites.
|
|
177
|
+
|
|
178
|
+
## The covered set is queried live
|
|
179
|
+
|
|
180
|
+
Before swapping a type, confirm the design system covers it TODAY:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
pragma block list # what exists, with tiers
|
|
184
|
+
pragma block lookup <Name> # anatomy, modifiers, properties (MCP: block_lookup)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
A bare name can match blocks in several tiers, and `block lookup` silently picks
|
|
188
|
+
one — it resolves `ds:name` globally and cannot be steered to a tier.
|
|
189
|
+
Confirm the tier the lookup picked from its own `- Tier:` line; the name query below lists every tier that carries the name.
|
|
190
|
+
The name query
|
|
191
|
+
`pragma graph query "SELECT ?b WHERE { ?b ds:name ?n . FILTER(LCASE(?n) = LCASE('<Name>')) }"`
|
|
192
|
+
prints every tier's IRI for `pragma graph inspect <IRI>`. If the lookup picked the wrong
|
|
193
|
+
tier's block, read the one you want with `pragma graph inspect <IRI from that row>`
|
|
194
|
+
instead.
|
|
195
|
+
|
|
196
|
+
**A block being in the graph does not mean the package exports it.** The graph
|
|
197
|
+
records what the design system has DOCUMENTED; the package ships what has been
|
|
198
|
+
BUILT, and the two run ahead of each other in both directions. So before you
|
|
199
|
+
swap a type, confirm the named export in the package you installed:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
node -e "console.log(Object.keys(require('@canonical/react-ds-global')))" | tr ',' '\n' | grep -i '<Name>'
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
If the export is absent, the block is documented but not available — file the
|
|
206
|
+
gap and leave the existing markup in place. Do not infer availability from a
|
|
207
|
+
Storybook story either: a story can exist for a block that ships no
|
|
208
|
+
implementation and no export, so a story CORROBORATES an export you have
|
|
209
|
+
already confirmed, and never substitutes for it.
|
|
210
|
+
|
|
211
|
+
If the name has no row and the lookup errors, the block may be a Group — `block list`/`block lookup` cover no groups; the name query above returns its IRI for `pragma graph inspect <IRI>`.
|
|
212
|
+
Run it before calling a type uncovered: `Cards` and `KeyboardKeys` are groups, and both
|
|
213
|
+
ship from the `@canonical/react-ds-global` this track installs. The export check above
|
|
214
|
+
applies to them exactly as it does to any other block.
|
|
215
|
+
|
|
216
|
+
Then check the component in a running Storybook — your app's own (track A1 set it up
|
|
217
|
+
via `@canonical/storybook-config`), your team's hosted hub, or `bun run storybook`
|
|
218
|
+
inside the component's package in the pragma monorepo (e.g. `packages/react/ds-global`
|
|
219
|
+
— the monorepo root has no such script).
|
|
220
|
+
|
|
221
|
+
> The covered set is whatever the graph answers today. Query it live — never copy its
|
|
222
|
+
> output into documentation, PRs, or this skill.
|
|
223
|
+
|
|
224
|
+
A gap found is a FINDING to report (and a `specify-component` candidate) — skip that
|
|
225
|
+
type and keep swapping the types the system does cover; never hand-roll a lookalike
|
|
226
|
+
silently.
|
|
227
|
+
|
|
228
|
+
## One component type per PR
|
|
229
|
+
|
|
230
|
+
The swap unit is a component TYPE across the app — all buttons in one PR — not a page.
|
|
231
|
+
|
|
232
|
+
- Diffs stay reviewable: one decision, applied everywhere.
|
|
233
|
+
- Accessibility regressions stay attributable to the one swap that caused them.
|
|
234
|
+
- One PR reverts one decision, cleanly.
|
|
235
|
+
|
|
236
|
+
## Names and boundaries changed vs Vanilla
|
|
237
|
+
|
|
238
|
+
Do NOT assume a 1:1 mapping from Vanilla names and `p-*` classes. Boundaries moved:
|
|
239
|
+
what was one blob may now be a component plus subcomponents (e.g. `Accordion` with
|
|
240
|
+
`Accordion.Item`), and icon semantics changed to `currentColor`. The block's `ds:usage`
|
|
241
|
+
When-to-use / When-not-to-use guidance decides what replaces what — read it with
|
|
242
|
+
`pragma graph inspect <block IRI>` (the IRI from the block's `pragma block list` row;
|
|
243
|
+
`block lookup` does not render the usage field today) — often the honest swap is a
|
|
244
|
+
DIFFERENT component than the old name suggests.
|
|
245
|
+
|
|
246
|
+
## Accessibility warnings are contract
|
|
247
|
+
|
|
248
|
+
The components warn in dev mode when misused — for example, an icon-only `Button`
|
|
249
|
+
without `aria-label`/`aria-labelledby` logs a console warning, and icons are
|
|
250
|
+
decorative/aria-hidden unless labelled. Treat every such warning as a FAILED acceptance
|
|
251
|
+
criterion of the swap PR: fix the usage, never silence the warning.
|
|
252
|
+
|
|
253
|
+
Modifier props (e.g. `anticipation="constructive"` on `Button`) take their values from
|
|
254
|
+
modifier families — read them live, list first:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
pragma modifier list # every family with its values
|
|
258
|
+
pragma modifier lookup <Family> # one family in full — take the name from the list output
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
The families a block draws from print as the last column of its `pragma block list`
|
|
262
|
+
row, and in full on the block itself via `pragma graph inspect <IRI from that row>`
|
|
263
|
+
(the `ds:hasModifierFamily` triples). Mapping a family to code follows two rules: the
|
|
264
|
+
React prop IS the family name lowercased (`Anticipation` → `anticipation`), and the
|
|
265
|
+
prop's values are the family's values lowercased with spaces as underscores
|
|
266
|
+
(`In Progress` → `in_progress`) — the lookups print display casing; the code takes
|
|
267
|
+
the lowercase form. A family listed on the block may have no prop on the component
|
|
268
|
+
yet — check the component's types before writing it.
|
|
269
|
+
|
|
270
|
+
## Verify per PR
|
|
271
|
+
|
|
272
|
+
- [ ] Root context and density classes present (track A1) — swapped components size
|
|
273
|
+
from the `--density-*` channel, not from luck.
|
|
274
|
+
- [ ] Zero dev-console warnings from the swapped components.
|
|
275
|
+
- [ ] Keyboard pass on each swapped instance (focus, activation, escape where relevant).
|
|
276
|
+
- [ ] Visual pass against the component's Storybook stories.
|
|
277
|
+
|
|
278
|
+
## Next
|
|
279
|
+
|
|
280
|
+
Forms are their own programming model — continue with `adoption-a3-forms`.
|
|
281
|
+
|
|
282
|
+
## Support
|
|
283
|
+
|
|
284
|
+
If this skill leads somewhere broken — a command that errors, guidance that
|
|
285
|
+
contradicts what the live system answers, a gap the flow cannot cover — you are not
|
|
286
|
+
stuck:
|
|
287
|
+
|
|
288
|
+
- Raise an issue in the pragma repo: https://github.com/canonical/pragma/issues —
|
|
289
|
+
include the skill name, what was run, and expected vs. actual outcome.
|
|
290
|
+
- Or contact the design-system team owners directly through your organization's
|
|
291
|
+
professional messaging channels for assistance.
|