@canonical/pragma-cli 0.34.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/bundled-skills/add-standard/SKILL.md +338 -0
- package/bundled-skills/adoption-a1-styles/SKILL.md +269 -0
- package/bundled-skills/adoption-a2-components/SKILL.md +291 -0
- package/bundled-skills/adoption-a3-forms/SKILL.md +260 -0
- package/bundled-skills/anatomy-author/ANATOMY_DSL_SPEC.md +406 -0
- package/bundled-skills/anatomy-author/SKILL.md +1226 -0
- package/bundled-skills/design-auditor/SKILL.md +455 -0
- package/bundled-skills/implement-component/SKILL.md +333 -0
- package/bundled-skills/specify-component/SKILL.md +331 -0
- package/bundled-skills/specify-pattern/SKILL.md +292 -0
- package/dist/.build-ok +0 -0
- package/dist/package.json +84 -0
- package/dist/pragma.conf.js +1016 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +294 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +148 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/harnessInventory.js +195 -0
- package/dist/src/capabilities/doctor/checks/harnessInventory.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +349 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +164 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +49 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +86 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +72 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +57 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +172 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +390 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +329 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +253 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +594 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +271 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +387 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +328 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +27 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +349 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +281 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +309 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +460 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +135 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +87 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +34 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/interactivity.js +68 -0
- package/dist/src/kernel/interactivity.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +274 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +140 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +421 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +167 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +480 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +219 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +58 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +227 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +315 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +105 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/vocabulary.js +174 -0
- package/dist/src/kernel/render/vocabulary.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +22 -23
- package/pragma.conf.ts +486 -90
- package/src/bin.ts +274 -82
- package/src/capabilities/block.parity.test.ts +29 -12
- package/src/capabilities/block.shipped.exec.test.ts +282 -0
- package/src/capabilities/block.tierRank.exec.test.ts +300 -0
- package/src/capabilities/capabilities/capabilities.render.ts +1 -1
- package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
- package/src/capabilities/capabilities/catalog.ts +3 -3
- package/src/capabilities/capabilities/hints.ts +32 -7
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +35 -24
- package/src/capabilities/colophon/colophon.render.ts +24 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +4 -4
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/config/collectConfigShow.ts +3 -3
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -10
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +8 -7
- package/src/capabilities/config/show.render.ts +1 -1
- package/src/capabilities/config/show.verb.ts +9 -6
- package/src/capabilities/config/types.ts +18 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +25 -11
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +36 -61
- package/src/capabilities/create/create.mcp.test.ts +89 -5
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +433 -219
- package/src/capabilities/create/create.verb.ts +297 -328
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +7 -4
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +23 -35
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +20 -0
- package/src/capabilities/distribution.parity.test.ts +4 -0
- package/src/capabilities/distribution.test.ts +3 -1
- package/src/capabilities/distribution.ts +10 -15
- package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +75 -8
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +76 -29
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +63 -17
- package/src/capabilities/doctor/checks/harnessInventory.test.ts +219 -0
- package/src/capabilities/doctor/checks/harnessInventory.ts +298 -0
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +444 -0
- package/src/capabilities/doctor/doctor.render.test.ts +125 -38
- package/src/capabilities/doctor/doctor.render.ts +74 -74
- package/src/capabilities/doctor/doctor.test.ts +338 -37
- package/src/capabilities/doctor/doctor.verb.ts +8 -3
- package/src/capabilities/doctor/runChecks.ts +65 -63
- package/src/capabilities/doctor/types.ts +22 -15
- package/src/capabilities/emptyRecovery.test.ts +21 -8
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -6
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +3 -3
- package/src/capabilities/graph/runQuery.ts +2 -3
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/info/collectInfo.ts +13 -5
- package/src/capabilities/info/info.render.ts +7 -3
- package/src/capabilities/info/info.test.ts +37 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/info/types.ts +10 -2
- package/src/capabilities/lazy.test.ts +32 -0
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +27 -68
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +4 -5
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/renderVocabularySync.test.ts +82 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -59
- package/src/capabilities/scopeTypeSync.test.ts +29 -15
- package/src/capabilities/setup/buildPlan.ts +240 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +79 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +478 -334
- package/src/capabilities/setup/operations/setupLsp.ts +420 -67
- package/src/capabilities/setup/operations/setupMcp.ts +238 -127
- package/src/capabilities/setup/operations/setupSkills.ts +667 -105
- package/src/capabilities/setup/plan.render.ts +336 -0
- package/src/capabilities/setup/plan.ts +241 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +297 -75
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +1819 -225
- package/src/capabilities/setup/setup.verb.ts +288 -78
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- package/src/capabilities/setup/targets.ts +435 -0
- package/src/capabilities/setup/types.ts +23 -70
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +43 -0
- package/src/capabilities/shared/packageManager.test.ts +470 -0
- package/src/capabilities/shared/packageManager.ts +425 -34
- package/src/capabilities/skill/bundledSkills.test.ts +347 -0
- package/src/capabilities/skill/discover.ts +131 -10
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +22 -7
- package/src/capabilities/skill/verbs.ts +3 -4
- package/src/capabilities/sources/collectStatus.ts +7 -2
- package/src/capabilities/sources/index.ts +1 -1
- package/src/capabilities/sources/installSkills.ts +265 -10
- package/src/capabilities/sources/runUpdate.ts +131 -23
- package/src/capabilities/sources/sources.test.ts +382 -2
- package/src/capabilities/sources/status.render.ts +1 -1
- package/src/capabilities/sources/status.verb.ts +1 -1
- package/src/capabilities/sources/update.render.ts +1 -1
- package/src/capabilities/sources/update.verb.ts +4 -4
- package/src/capabilities/surface.test.ts +136 -19
- package/src/capabilities/upgrade/runUpgrade.ts +53 -14
- package/src/capabilities/upgrade/types.ts +10 -2
- package/src/capabilities/upgrade/upgrade.render.ts +13 -7
- package/src/capabilities/upgrade/upgrade.test.ts +75 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.ts +36 -1
- package/src/identity.test.ts +57 -29
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +1 -1
- package/src/kernel/completion/entitySource.test.ts +16 -3
- package/src/kernel/completion/entitySource.ts +21 -8
- package/src/kernel/completion/model.test.ts +164 -12
- package/src/kernel/completion/model.ts +94 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +50 -35
- package/src/kernel/completion/shellDrive.test.ts +28 -9
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +7 -0
- package/src/kernel/config/defaults.test.ts +27 -3
- package/src/kernel/config/defaults.ts +4 -3
- package/src/kernel/config/evaluateProjectConfig.ts +31 -8
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -88
- package/src/kernel/config/index.ts +1 -1
- package/src/kernel/config/readConfig.test.ts +6 -3
- package/src/kernel/config/readConfig.ts +1 -1
- package/src/kernel/config/schema.ts +3 -1
- package/src/kernel/config/types.ts +3 -1
- package/src/kernel/copy.test.ts +34 -4
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +5 -2
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -5
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/recovery.ts +14 -0
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +21 -1
- package/src/kernel/index.ts +35 -0
- package/src/kernel/interactivity.test.ts +76 -0
- package/src/kernel/interactivity.ts +69 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +222 -1
- package/src/kernel/packs/compile.ts +93 -3
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +66 -14
- package/src/kernel/packs/renderPack.ts +25 -6
- package/src/kernel/packs/resolveEntity.test.ts +274 -0
- package/src/kernel/packs/resolveEntity.ts +200 -42
- package/src/kernel/packs/runBodies.ts +86 -22
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +78 -5
- package/src/kernel/packs/sparql/applyFilters.ts +136 -16
- package/src/kernel/packs/sparql/buildLookupQuery.test.ts +290 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +367 -17
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +77 -4
- package/src/kernel/packs/types.ts +136 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +218 -12
- package/src/kernel/project/cli/buildProgram.ts +84 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +160 -2
- package/src/kernel/project/cli/dispatch.ts +226 -45
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +134 -31
- package/src/kernel/project/cli/helpFormat.ts +14 -2
- package/src/kernel/project/cli/rootHelp.ts +74 -12
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +7 -4
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +2 -2
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +5 -2
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/source.ts +2 -2
- package/src/kernel/project/mcp/registerVerb.ts +55 -10
- package/src/kernel/project/mcp/serve.ts +2 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/renderers.test.ts +243 -6
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +59 -6
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/render/vocabulary.ts +276 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded.ts +3 -3
- package/src/kernel/runtime/graphpack/manifest.ts +1 -1
- package/src/kernel/runtime/graphpack/read.ts +1 -2
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +472 -28
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +2 -2
- package/src/kernel/runtime/refs/resolve.ts +4 -4
- package/src/kernel/runtime/storeReadiness.ts +1 -2
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
- package/src/kernel/spec/emitReference.ts +105 -30
- package/src/kernel/spec/emitSurface.ts +48 -6
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/types.ts +277 -4
- package/src/testing/PARITY_GAPS.ts +9 -3
- package/src/testing/behavioral/docExamples.test.ts +16 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +112 -9
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/journeys.cli.test.ts +1 -1
- package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
- package/src/testing/behavioral/journeys.firstInstall.test.ts +7 -2
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.packageStories.test.ts +10 -7
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +1 -1
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +26 -1
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/eval/cases/readNouns.ts +245 -9
- package/src/testing/fixtures/blockGraph.ts +104 -10
- package/src/testing/fixtures/graph/canonical.ts +182 -13
- package/src/testing/fixtures/graph/defaultPack.ts +1 -1
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/projectMcp.ts +32 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +20 -9
- package/src/testing/perf/budgets.ts +58 -9
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +505 -23
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/dist/pragma +0 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
- package/src/capabilities/create/templates.embedded.generated.ts +0 -28
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/capabilities/shared/bands.ts +0 -16
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
package/README.md
CHANGED
|
@@ -1,72 +1,195 @@
|
|
|
1
1
|
# @canonical/pragma-cli
|
|
2
2
|
|
|
3
|
-
`pragma`
|
|
3
|
+
`pragma` answers questions about Canonical's design system from your terminal — and, run as a Model Context Protocol (MCP) server, from your AI agent. The design system ships as a knowledge graph: every block (a component, pattern, or layout), every tier, modifier family, and code standard is a node `pragma` can read. Reads answer offline, from a snapshot compiled into the package — no network, no build.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
| You want to… | Run |
|
|
6
|
+
|---|---|
|
|
7
|
+
| See every block in the design system | `pragma block list` — all 251, each with its tier |
|
|
8
|
+
| Read a block's full spec — anatomy, modifiers, properties | `pragma block lookup Button` |
|
|
9
|
+
| Find the design system's name for something you already know | `pragma block lookup 'Nav*'` — lookups take names or globs |
|
|
10
|
+
| Know which tier something belongs to | `pragma tier list`, `pragma tier lookup <name>` |
|
|
11
|
+
| Stay consistent with the modifiers that already exist | `pragma modifier list` — 11 families |
|
|
12
|
+
| Check your code against the coding standards | `pragma standard list --category react` |
|
|
13
|
+
| Scaffold a component, package, or application | `pragma create component react <path>` |
|
|
14
|
+
| Ask the graph something the commands don't cover | `pragma graph query "<sparql>"` |
|
|
15
|
+
| Set it up, and check it's healthy | `pragma setup`, then `pragma doctor` |
|
|
16
|
+
| Give your AI agent the same access | `pragma setup mcp` |
|
|
17
|
+
|
|
18
|
+
The sections below take these in turn.
|
|
19
|
+
|
|
20
|
+
## From install to first answer
|
|
6
21
|
|
|
7
22
|
```bash
|
|
8
|
-
|
|
23
|
+
bun add --global @canonical/pragma-cli
|
|
24
|
+
# or: npm install -g @canonical/pragma-cli
|
|
9
25
|
```
|
|
10
26
|
|
|
11
|
-
|
|
27
|
+
The package ships compiled JavaScript and runs on **Node.js 22.18+ or 23.6+** (any 24 or later), on any platform Node supports. pragma reads its own `pragma.conf.ts` — and your project's `pragma.config.ts` — through Node's TypeScript type stripping, which is on by default from those versions. Node 23.0–23.5 are excluded deliberately: they satisfy a plain `>=22.18` but predate the 23.x line's own default-on release.
|
|
12
28
|
|
|
13
|
-
|
|
29
|
+
Then ask for a component:
|
|
14
30
|
|
|
15
|
-
|
|
16
|
-
pragma
|
|
31
|
+
````console
|
|
32
|
+
$ pragma block lookup Button
|
|
33
|
+
## Button
|
|
34
|
+
|
|
35
|
+
- Tier: ds:apps_launchpad
|
|
36
|
+
|
|
37
|
+
### Summary
|
|
38
|
+
The **Button** component is an interactive element that allows users to trigger an action.
|
|
39
|
+
|
|
40
|
+
**Main Use Cases:**
|
|
41
|
+
|
|
42
|
+
- **Actions:** Trigger an action, such as submitting a form or opening a dialog.
|
|
43
|
+
- **Navigation:** Navigate to a different page or view.
|
|
44
|
+
|
|
45
|
+
### Guidelines
|
|
46
|
+
### Accessibility
|
|
47
|
+
|
|
48
|
+
- **Label:** Always provide a clear and descriptive label for the button.
|
|
49
|
+
- **Focus state:** Provide a clear focus state for the button.
|
|
50
|
+
|
|
51
|
+
⋮
|
|
52
|
+
|
|
53
|
+
### Anatomy (DSL)
|
|
54
|
+
```yaml
|
|
55
|
+
---
|
|
56
|
+
node:
|
|
57
|
+
uri: app-launchpad.component.button
|
|
58
|
+
styles:
|
|
59
|
+
layout.type: stack
|
|
60
|
+
layout.direction: horizontal
|
|
61
|
+
layout.align: center
|
|
62
|
+
spacing.internal: spacing/inline/small
|
|
63
|
+
appearance.background: color/background/neutral/default
|
|
64
|
+
appearance.border: border/style/solid
|
|
65
|
+
appearance.radius: radius/medium
|
|
66
|
+
typography.size: typography/paragraph/default
|
|
67
|
+
edges:
|
|
68
|
+
⋮
|
|
17
69
|
```
|
|
18
70
|
|
|
19
|
-
|
|
71
|
+
### Properties
|
|
72
|
+
- name: label | type: text | optional: false
|
|
73
|
+
- name: variant | type: choice | optional: true
|
|
74
|
+
- name: disabled | type: boolean | optional: true
|
|
75
|
+
- name: loading | type: boolean | optional: true
|
|
76
|
+
````
|
|
77
|
+
|
|
78
|
+
Abridged — the two cuts are marked `⋮`. The full answer is 83 lines: content-writing guidelines, the rest of the anatomy tree (child nodes with slot names and cardinalities, down to their token bindings), and a link to the classic anatomy reference.
|
|
79
|
+
|
|
80
|
+
That answer came from the snapshot inside the package. No network, no cache, no project setup — `lookup` and `list` work from the moment the install finishes.
|
|
81
|
+
|
|
82
|
+
## What the graph knows
|
|
83
|
+
|
|
84
|
+
What this distribution's graph answers today:
|
|
85
|
+
|
|
86
|
+
| Ask | Answer |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `pragma block list` | **251** blocks — components, patterns, layouts, and subcomponents, each with its tier |
|
|
89
|
+
| `pragma tier list` | **15** tiers — `global`, `apps` plus nine app tiers, `sites` plus one, `stores`, `documentation` |
|
|
90
|
+
| `pragma modifier list` | **11** modifier families — Importance (Primary/Secondary/Tertiary), Anticipation (Caution/Constructive/Destructive), Criticality, Density, Lifecycle, Mode, Release, Surface, and three more |
|
|
91
|
+
| `pragma standard categories` | **21** code-standard categories — react 16, css 15, lit 13, svelte 12, rust 11, storybook 11, code 10, … |
|
|
92
|
+
| `pragma token list` | **0** — this distribution's graph ships no token entities |
|
|
93
|
+
| `pragma prompt list` | **0** — likewise, no prompt entities |
|
|
94
|
+
|
|
95
|
+
The two zeroes are real answers: the commands say the store is empty rather than inventing, and stay empty until a pack that ships those entities is configured.
|
|
20
96
|
|
|
21
97
|
```bash
|
|
22
98
|
pragma block list
|
|
23
|
-
pragma
|
|
24
|
-
pragma
|
|
25
|
-
pragma
|
|
26
|
-
pragma
|
|
99
|
+
pragma tier list
|
|
100
|
+
pragma modifier list
|
|
101
|
+
pragma standard categories
|
|
102
|
+
pragma token list
|
|
103
|
+
pragma prompt list
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The commands are views over one RDF graph. Anything they don't cover, ask directly — prefixes like `ds:` are bound automatically from the active pack:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
pragma graph query "SELECT ?s WHERE { ?s a ds:Component }"
|
|
27
110
|
```
|
|
28
111
|
|
|
29
|
-
|
|
112
|
+
## Find the spec, build from it, check the result
|
|
30
113
|
|
|
31
|
-
|
|
114
|
+
**Find the spec.** Lookups take a name or a glob — useful when you know roughly what something is called:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
pragma block lookup 'Nav*'
|
|
118
|
+
pragma tier lookup Global
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Build from it.** The `create` commands scaffold a component, package, or application. They run the `@canonical/summon-*` generator packages directly — those are regular dependencies of this package, so scaffolding works from a clean install. Preview any of them with `--dry-run`:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
pragma create component react src/components/Button
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Check the result.** List the standards for your stack, then look one up by name for its do/don't code examples:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
pragma standard list --category react
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Your agent reads the same graph
|
|
32
134
|
|
|
33
135
|
```bash
|
|
34
136
|
pragma setup mcp
|
|
35
137
|
```
|
|
36
138
|
|
|
37
|
-
|
|
139
|
+
This registers pragma as an MCP server (over stdio) with the AI coding tools it detects; `pragma mcp` is the manual entry point. The server projects the same reads and scaffolds as MCP tools, plus a `pragma:{+uri}` resource surface for entity reads. Its handshake tells agents to start with the `capabilities` tool and discover from there, and every mutating tool is plan-first: it returns the plan it would apply, and applies nothing until called again with `confirm: true`.
|
|
140
|
+
|
|
141
|
+
See [docs/mcp-integration.md](./docs/mcp-integration.md) for the full surface.
|
|
142
|
+
|
|
143
|
+
## Setup and health
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
pragma setup
|
|
147
|
+
pragma doctor
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
`pragma setup` is one wizard for the whole environment: your config file, MCP registration, TAB completion, agent skills, and the editor extension. Each installer can configure your home directory (global, the default), this project alone, or both — `--scope project|global|both`, with `--global`/`--local` as shorthands. Preview everything it would write with `pragma setup --dry-run`, or run one installer directly: `pragma setup mcp`, `setup completions`, `setup skills`, `setup lsp`.
|
|
38
151
|
|
|
39
|
-
|
|
152
|
+
The LSP step installs the Terrazzo extension, and the extension's own log is the fastest way to confirm it took. Open your editor's Output panel, select the `terrazzo-lsp` channel, and look for a startup block like this (timestamps dropped, paths shortened):
|
|
40
153
|
|
|
41
|
-
|
|
154
|
+
```console
|
|
155
|
+
[info] Config loaded from <project>/packages/react/ds-global/terrazzo-lsp.config.json
|
|
156
|
+
[info] Root: <project>/packages/react/ds-global
|
|
157
|
+
[info] Artifacts: <project>/packages/react/ds-global/node_modules/@canonical/design-tokens/dist/tokens.json
|
|
158
|
+
[info] Loaded 781 tokens from 1 artifact
|
|
159
|
+
[info] Global stylesheets: 1 file, 0 declarations
|
|
160
|
+
[info] terrazzo-lsp ready
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
The token count is the line to read: `terrazzo-lsp ready` says the server started, but a run that loaded 0 tokens resolved its artifact path to nothing and will complete nothing. With tokens loaded, type `color: var(--` in a stylesheet — the design tokens should appear as completions.
|
|
42
164
|
|
|
43
|
-
|
|
44
|
-
- **Behaviour plane — the capabilities.** Every command and MCP tool is one entry in a single capability grammar, projected to both the CLI and the MCP server. The [reference](./docs/reference/index.md) is generated from that grammar, so it can never drift from the code.
|
|
165
|
+
`pragma doctor` checks the environment (Node version, store health, registrations) globally and in this project, and names the next step on every row that has one. `pragma info` shows the version, the configuration in effect, and update status; `pragma upgrade` updates the CLI itself.
|
|
45
166
|
|
|
46
|
-
##
|
|
167
|
+
## Point it at your own design system
|
|
47
168
|
|
|
48
|
-
|
|
169
|
+
Your project's `pragma.config.ts` names the packs — design-system data packages — the graph is built from:
|
|
49
170
|
|
|
50
171
|
```bash
|
|
51
|
-
pragma
|
|
172
|
+
pragma sources update
|
|
173
|
+
pragma sources status
|
|
52
174
|
```
|
|
53
175
|
|
|
54
|
-
|
|
176
|
+
`sources update` resolves the configured packs and rebuilds the local store; `sources status` reports which store is answering — the shipped snapshot or your build — and exactly what it was built from. Every `list`, `lookup`, and `sample` command then answers from your graph.
|
|
177
|
+
|
|
178
|
+
The read surface itself is also data, not code. The distribution's own `pragma.conf.ts`, shipped inside the package, declares every read noun — `block`, `standard`, `tier`, their queries, columns, and detail levels — as configuration. A fork serving a different design system rewrites that one file and gets its own CLI commands and MCP tools without writing any command code. (Two files, deliberately distinct: `pragma.config.ts` is your project's; `pragma.conf.ts` is the distribution's.)
|
|
55
179
|
|
|
56
|
-
|
|
180
|
+
[docs/config-model.md](./docs/config-model.md) explains the configuration layers; [docs/architecture.md](./docs/architecture.md) explains how one set of declarations is projected as both CLI commands and MCP tools.
|
|
57
181
|
|
|
58
|
-
|
|
182
|
+
## Reference
|
|
59
183
|
|
|
60
|
-
|
|
184
|
+
The [command & tool reference](./docs/reference/index.md) is generated from the same declarations the CLI runs, so it cannot drift from the code.
|
|
61
185
|
|
|
62
186
|
- [Getting started](./docs/getting-started.md)
|
|
187
|
+
- [The design system graph](./docs/design-system.md)
|
|
188
|
+
- [Setup and health](./docs/setup.md)
|
|
63
189
|
- [MCP integration](./docs/mcp-integration.md)
|
|
64
190
|
- [Configuration model](./docs/config-model.md)
|
|
65
191
|
- [Architecture](./docs/architecture.md)
|
|
66
192
|
- [Skills](./docs/skills.md)
|
|
67
|
-
- [Command & tool reference](./docs/reference/index.md)
|
|
68
193
|
- [Changelog](./CHANGELOG.md)
|
|
69
194
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
GPL-3.0
|
|
195
|
+
License: GPL-3.0
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: add-standard
|
|
3
|
+
description: Create and add a new code standard to the code-standards package
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Add Standard
|
|
7
|
+
|
|
8
|
+
Create and add a new code standard to the code-standards package.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
Use this skill when:
|
|
13
|
+
- "Add a standard for..."
|
|
14
|
+
- "Create a coding standard..."
|
|
15
|
+
- "Document a new convention..."
|
|
16
|
+
- "Add guidance for..."
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
### 1. Check for Existing Standards
|
|
21
|
+
|
|
22
|
+
Before creating a new standard, always check if one already exists:
|
|
23
|
+
|
|
24
|
+
```sparql
|
|
25
|
+
PREFIX cs: <http://pragma.canonical.com/codestandards#>
|
|
26
|
+
|
|
27
|
+
SELECT ?standard ?description WHERE {
|
|
28
|
+
?standard a cs:CodeStandard ;
|
|
29
|
+
cs:description ?description .
|
|
30
|
+
FILTER(CONTAINS(LCASE(STR(?standard)), "your-topic"))
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Or use lookup:
|
|
35
|
+
```
|
|
36
|
+
sem_lookup(type: "cs:CodeStandard", filters: {"@id": {"$contains": "your-topic"}})
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 2. Determine the Category
|
|
40
|
+
|
|
41
|
+
List existing categories to find the right fit:
|
|
42
|
+
|
|
43
|
+
```sparql
|
|
44
|
+
PREFIX cs: <http://pragma.canonical.com/codestandards#>
|
|
45
|
+
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
|
|
46
|
+
|
|
47
|
+
SELECT ?category ?label ?slug WHERE {
|
|
48
|
+
?category a cs:Category ;
|
|
49
|
+
rdfs:label ?label ;
|
|
50
|
+
cs:slug ?slug .
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Available Categories:**
|
|
55
|
+
|
|
56
|
+
| Category | Slug | Description |
|
|
57
|
+
|----------|------|-------------|
|
|
58
|
+
| React | `react` | React component development |
|
|
59
|
+
| CSS | `css` | CSS technical implementation |
|
|
60
|
+
| Styling | `styling` | Design system styling patterns |
|
|
61
|
+
| Code | `code` | General TypeScript standards |
|
|
62
|
+
| Storybook | `storybook` | Storybook documentation |
|
|
63
|
+
| Icons | `icons` | Icon implementation |
|
|
64
|
+
| Packaging | `packaging` | Package structure and exports |
|
|
65
|
+
| Rust | `rust` | Idiomatic Rust development |
|
|
66
|
+
| Git | `git` | Git workflow conventions |
|
|
67
|
+
| TSDoc | `tsdoc` | Documentation conventions |
|
|
68
|
+
| Turtle | `turtle` | RDF/Turtle authoring |
|
|
69
|
+
| UI Blocks | `ui-blocks` | Framework-agnostic capabilities and patterns for UI blocks |
|
|
70
|
+
|
|
71
|
+
If no existing category fits, create a new one (see Section 5).
|
|
72
|
+
|
|
73
|
+
### 3. Design the Standard Identifier
|
|
74
|
+
|
|
75
|
+
Standard identifiers follow a hierarchical compact IRI pattern: `cs:{category}.{domain}.{topic}`
|
|
76
|
+
|
|
77
|
+
**Pattern:** `^cs:[a-z]+(\.[a-z0-9_]+){2,}$`
|
|
78
|
+
|
|
79
|
+
**Examples:**
|
|
80
|
+
- `cs:react.component.structure.folder`
|
|
81
|
+
- `cs:css.selectors.namespace`
|
|
82
|
+
- `cs:styling.tokens.creation`
|
|
83
|
+
- `cs:react.hooks.naming`
|
|
84
|
+
|
|
85
|
+
**Guidelines:**
|
|
86
|
+
- Use lowercase with underscores for multi-word segments
|
|
87
|
+
- Category is always the first segment after `cs:`
|
|
88
|
+
- Be specific but not overly verbose
|
|
89
|
+
- Follow existing naming patterns in the same category
|
|
90
|
+
- Treat the subject IRI as the only canonical identifier
|
|
91
|
+
- Use `cs:name` only for an optional human-readable display title
|
|
92
|
+
|
|
93
|
+
### 4. Write the Standard
|
|
94
|
+
|
|
95
|
+
Create a new standard instance in the appropriate data file under `data/`.
|
|
96
|
+
|
|
97
|
+
**Template:**
|
|
98
|
+
|
|
99
|
+
```turtle
|
|
100
|
+
cs:category.domain.topic a cs:CodeStandard ;
|
|
101
|
+
cs:name "Human Readable Title" ;
|
|
102
|
+
cs:hasCategory cs:category ;
|
|
103
|
+
cs:description "Clear, concise description of what this standard covers and why it matters." ;
|
|
104
|
+
cs:do [
|
|
105
|
+
cs:description "First recommended practice." ;
|
|
106
|
+
cs:language "typescript" ;
|
|
107
|
+
cs:code """
|
|
108
|
+
// Example showing the correct approach
|
|
109
|
+
const good = true;
|
|
110
|
+
"""
|
|
111
|
+
] ;
|
|
112
|
+
cs:do [
|
|
113
|
+
cs:description "Second recommended practice." ;
|
|
114
|
+
cs:language "typescript" ;
|
|
115
|
+
cs:code """
|
|
116
|
+
// Another correct example
|
|
117
|
+
const alsoGood = true;
|
|
118
|
+
"""
|
|
119
|
+
] ;
|
|
120
|
+
cs:dont [
|
|
121
|
+
cs:description "First anti-pattern to avoid." ;
|
|
122
|
+
cs:language "typescript" ;
|
|
123
|
+
cs:code """
|
|
124
|
+
// Example showing what NOT to do
|
|
125
|
+
const bad = true;
|
|
126
|
+
"""
|
|
127
|
+
] ;
|
|
128
|
+
cs:dont [
|
|
129
|
+
cs:description "Second anti-pattern." ;
|
|
130
|
+
cs:language "typescript" ;
|
|
131
|
+
cs:code """
|
|
132
|
+
// Another bad example
|
|
133
|
+
const alsoBad = true;
|
|
134
|
+
"""
|
|
135
|
+
] .
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Each `cs:do` and `cs:dont` is a blank node (`cs:Example`) with structured fields:
|
|
139
|
+
- `cs:description` — What the example demonstrates (required)
|
|
140
|
+
- `cs:language` — Language of the code block, e.g. `"typescript"`, `"rust"`, `"css"`, `"bash"`, `"svg"` (optional, omit when no code)
|
|
141
|
+
- `cs:code` — The code content (optional, omit for description-only examples)
|
|
142
|
+
|
|
143
|
+
**Required Properties:**
|
|
144
|
+
- subject IRI - Canonical compact identifier
|
|
145
|
+
- `cs:hasCategory` - Reference to a Category instance
|
|
146
|
+
- `cs:description` - What and why (plain text or markdown)
|
|
147
|
+
- `cs:do` - One or more positive examples (blank nodes)
|
|
148
|
+
- `cs:dont` - One or more negative examples (blank nodes)
|
|
149
|
+
|
|
150
|
+
**Optional Properties:**
|
|
151
|
+
- `cs:name` - Human-readable display title
|
|
152
|
+
- `cs:extends` - Reference to a parent standard this builds upon
|
|
153
|
+
|
|
154
|
+
### 5. Create a New Category (if needed)
|
|
155
|
+
|
|
156
|
+
If your standard doesn't fit existing categories:
|
|
157
|
+
|
|
158
|
+
```turtle
|
|
159
|
+
cs:new_category a cs:Category ;
|
|
160
|
+
rdfs:label "Category Name"@en ;
|
|
161
|
+
rdfs:comment "Description of what this category covers"@en ;
|
|
162
|
+
cs:slug "slug-name" .
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 6. Extending Existing Standards
|
|
166
|
+
|
|
167
|
+
When your standard builds on another:
|
|
168
|
+
|
|
169
|
+
```turtle
|
|
170
|
+
cs:react.component.props.special_case a cs:CodeStandard ;
|
|
171
|
+
cs:name "React Props Special Case" ;
|
|
172
|
+
cs:extends cs:react.component.props ;
|
|
173
|
+
cs:hasCategory cs:react ;
|
|
174
|
+
cs:description "Specific guidance that builds on the general props standard." ;
|
|
175
|
+
cs:do [
|
|
176
|
+
cs:description "Example of the specific pattern." ;
|
|
177
|
+
cs:language "typescript" ;
|
|
178
|
+
cs:code """
|
|
179
|
+
// ...
|
|
180
|
+
"""
|
|
181
|
+
] ;
|
|
182
|
+
cs:dont [
|
|
183
|
+
cs:description "Anti-pattern to avoid." ;
|
|
184
|
+
cs:language "typescript" ;
|
|
185
|
+
cs:code """
|
|
186
|
+
// ...
|
|
187
|
+
"""
|
|
188
|
+
] .
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Query to find potential parent standards:
|
|
192
|
+
```sparql
|
|
193
|
+
PREFIX cs: <http://pragma.canonical.com/codestandards#>
|
|
194
|
+
|
|
195
|
+
SELECT ?standard WHERE {
|
|
196
|
+
?standard a cs:CodeStandard .
|
|
197
|
+
FILTER(STRSTARTS(STR(?standard), STR(cs:react.component.props)))
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 7. Validate Before Committing
|
|
202
|
+
|
|
203
|
+
After writing the standard, validate the Turtle syntax:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
sem check code-standards
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Then verify the standard loads correctly:
|
|
210
|
+
```
|
|
211
|
+
sem_lookup(type: "cs:CodeStandard", filters: {"@id": "cs:category.domain.topic"})
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
The `@id` must always use the canonical compact IRI. Do not look up standards by `cs:name`.
|
|
215
|
+
|
|
216
|
+
## File Organization
|
|
217
|
+
|
|
218
|
+
Standards are organized by category in `data/`:
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
code-standards/
|
|
222
|
+
├── definitions/
|
|
223
|
+
│ └── CodeStandard.ttl # Ontology schema
|
|
224
|
+
├── data/
|
|
225
|
+
│ ├── react.ttl # React standards
|
|
226
|
+
│ ├── css.ttl # CSS standards
|
|
227
|
+
│ ├── styling.ttl # Styling standards
|
|
228
|
+
│ ├── code.ttl # General code standards
|
|
229
|
+
│ ├── storybook.ttl # Storybook standards
|
|
230
|
+
│ └── icons.ttl # Icon standards
|
|
231
|
+
└── skills/
|
|
232
|
+
└── standards-guide/
|
|
233
|
+
└── SKILL.md
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Add new standards to the file matching their category.
|
|
237
|
+
|
|
238
|
+
## Writing Quality Standards
|
|
239
|
+
|
|
240
|
+
### Description Guidelines
|
|
241
|
+
- Start with WHAT the standard covers
|
|
242
|
+
- Explain WHY it matters
|
|
243
|
+
- Keep it concise but complete
|
|
244
|
+
- Use markdown for complex descriptions
|
|
245
|
+
|
|
246
|
+
### Do Examples Guidelines
|
|
247
|
+
- Each `cs:do` blank node is one discrete positive example
|
|
248
|
+
- `cs:description` explains what the example demonstrates
|
|
249
|
+
- `cs:language` must match the code block language (e.g. `"typescript"`, `"css"`, `"rust"`)
|
|
250
|
+
- `cs:code` contains the actual code — no markdown fences needed
|
|
251
|
+
- Provide concrete, runnable examples
|
|
252
|
+
- Show the COMPLETE correct pattern
|
|
253
|
+
|
|
254
|
+
### Don't Examples Guidelines
|
|
255
|
+
- Each `cs:dont` blank node is one discrete negative example
|
|
256
|
+
- Show realistic mistakes developers make
|
|
257
|
+
- `cs:description` should explain WHY it's problematic
|
|
258
|
+
- Mirror the structure of the do examples where possible
|
|
259
|
+
|
|
260
|
+
### Example Quality Checklist
|
|
261
|
+
- [ ] Examples are syntactically correct
|
|
262
|
+
- [ ] Examples are self-contained (can be understood without context)
|
|
263
|
+
- [ ] Examples use realistic code, not `foo`/`bar`
|
|
264
|
+
- [ ] Examples include comments explaining key points
|
|
265
|
+
- [ ] Both do's and don'ts cover the same scenarios
|
|
266
|
+
|
|
267
|
+
## Complete Example
|
|
268
|
+
|
|
269
|
+
Adding a new standard for React error boundaries:
|
|
270
|
+
|
|
271
|
+
```turtle
|
|
272
|
+
# In data/react.ttl
|
|
273
|
+
|
|
274
|
+
cs:react.component.error_boundaries a cs:CodeStandard ;
|
|
275
|
+
cs:name "React Error Boundaries" ;
|
|
276
|
+
cs:hasCategory cs:react ;
|
|
277
|
+
cs:description "Error boundaries must be used to catch JavaScript errors in component trees and display fallback UI. They should be placed strategically to isolate failures without breaking the entire application." ;
|
|
278
|
+
cs:do [
|
|
279
|
+
cs:description "Wrap feature sections with error boundaries to isolate failures." ;
|
|
280
|
+
cs:language "tsx" ;
|
|
281
|
+
cs:code """
|
|
282
|
+
const Dashboard = () => (
|
|
283
|
+
<div className="ds dashboard">
|
|
284
|
+
<ErrorBoundary fallback={<WidgetError />}>
|
|
285
|
+
<AnalyticsWidget />
|
|
286
|
+
</ErrorBoundary>
|
|
287
|
+
<ErrorBoundary fallback={<WidgetError />}>
|
|
288
|
+
<ActivityWidget />
|
|
289
|
+
</ErrorBoundary>
|
|
290
|
+
</div>
|
|
291
|
+
);
|
|
292
|
+
"""
|
|
293
|
+
] ;
|
|
294
|
+
cs:do [
|
|
295
|
+
cs:description "Provide meaningful fallback UI that helps users understand and recover." ;
|
|
296
|
+
cs:language "tsx" ;
|
|
297
|
+
cs:code """
|
|
298
|
+
const WidgetError = () => (
|
|
299
|
+
<div className="ds widget-error">
|
|
300
|
+
<p>This section couldn't load.</p>
|
|
301
|
+
<button onClick={() => window.location.reload()}>
|
|
302
|
+
Refresh page
|
|
303
|
+
</button>
|
|
304
|
+
</div>
|
|
305
|
+
);
|
|
306
|
+
"""
|
|
307
|
+
] ;
|
|
308
|
+
cs:dont [
|
|
309
|
+
cs:description "Wrap the entire application in a single error boundary." ;
|
|
310
|
+
cs:language "tsx" ;
|
|
311
|
+
cs:code """
|
|
312
|
+
// Bad: One error anywhere crashes everything
|
|
313
|
+
const App = () => (
|
|
314
|
+
<ErrorBoundary>
|
|
315
|
+
<Header />
|
|
316
|
+
<Main />
|
|
317
|
+
<Footer />
|
|
318
|
+
</ErrorBoundary>
|
|
319
|
+
);
|
|
320
|
+
"""
|
|
321
|
+
] ;
|
|
322
|
+
cs:dont [
|
|
323
|
+
cs:description "Use generic or unhelpful fallback messages." ;
|
|
324
|
+
cs:language "tsx" ;
|
|
325
|
+
cs:code """
|
|
326
|
+
// Bad: Doesn't help the user
|
|
327
|
+
const fallback = <div>Something went wrong</div>;
|
|
328
|
+
"""
|
|
329
|
+
] .
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
## Tips
|
|
333
|
+
|
|
334
|
+
1. **Check before creating**: Always search for existing standards first - you might need to extend rather than create new
|
|
335
|
+
2. **Follow patterns**: Look at existing standards in the same category for style guidance
|
|
336
|
+
3. **Be specific**: Vague standards are hard to follow - include concrete examples
|
|
337
|
+
4. **Test your examples**: Make sure code examples actually work
|
|
338
|
+
5. **Consider hierarchy**: Use `cs:extends` when your standard builds on another
|