@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
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { execFileSync } from "node:child_process";
|
|
2
2
|
import {
|
|
3
3
|
existsSync,
|
|
4
|
+
lstatSync,
|
|
4
5
|
mkdirSync,
|
|
5
6
|
mkdtempSync,
|
|
7
|
+
readdirSync,
|
|
6
8
|
readFileSync,
|
|
9
|
+
readlinkSync,
|
|
7
10
|
rmSync,
|
|
8
11
|
symlinkSync,
|
|
9
12
|
writeFileSync,
|
|
@@ -200,7 +203,7 @@ describe("sources update round-trip (PROTECTED)", () => {
|
|
|
200
203
|
it("does not recurse into a symlinked directory cycle (L6 safety)", async () => {
|
|
201
204
|
// The L6 fix follows symlinked FILES but must NOT recurse into a symlinked
|
|
202
205
|
// DIRECTORY: a link to an ancestor dir is a cycle that, if walked, recurses
|
|
203
|
-
// without bound → a stack-overflow RangeError (an INTERNAL "
|
|
206
|
+
// without bound → a stack-overflow RangeError (an INTERNAL "report").
|
|
204
207
|
// The real `.ttl` is still ingested and the build completes.
|
|
205
208
|
const pkg = tmp("pragma-symlink-cycle-");
|
|
206
209
|
mkdirSync(join(pkg, "definitions"), { recursive: true });
|
|
@@ -499,7 +502,7 @@ describe("sources update — data-failure classification (U6)", () => {
|
|
|
499
502
|
expect(err.message).toContain("bad-pkg/definitions/broken.ttl");
|
|
500
503
|
// … carries the parser's own detail …
|
|
501
504
|
expect(err.message.toLowerCase()).toContain("parser error");
|
|
502
|
-
// … and is NOT the internal-bug "
|
|
505
|
+
// … and is NOT the internal-bug "report this issue" path.
|
|
503
506
|
expect(err.message).not.toContain("Internal error");
|
|
504
507
|
expect(err.recovery?.message ?? "").not.toContain("report this issue");
|
|
505
508
|
// The recovery points the user at a runnable, useful next step.
|
|
@@ -711,14 +714,25 @@ describe("sources update — installs package skills (U10)", () => {
|
|
|
711
714
|
return pkg;
|
|
712
715
|
}
|
|
713
716
|
|
|
717
|
+
let savedHome: string | undefined;
|
|
718
|
+
let home: string;
|
|
719
|
+
|
|
714
720
|
beforeEach(() => {
|
|
715
721
|
savedDataHome = process.env.XDG_DATA_HOME;
|
|
716
722
|
dataHome = tmp("pragma-datahome-");
|
|
717
723
|
process.env.XDG_DATA_HOME = dataHome;
|
|
724
|
+
// HOME is isolated because an update now converges the GLOBAL scope, and
|
|
725
|
+
// the global scope's link directories live under it. A test that read the
|
|
726
|
+
// real home would be writing into the developer's own harness folders.
|
|
727
|
+
savedHome = process.env.HOME;
|
|
728
|
+
home = tmp("pragma-home-");
|
|
729
|
+
process.env.HOME = home;
|
|
718
730
|
});
|
|
719
731
|
afterEach(() => {
|
|
720
732
|
if (savedDataHome === undefined) delete process.env.XDG_DATA_HOME;
|
|
721
733
|
else process.env.XDG_DATA_HOME = savedDataHome;
|
|
734
|
+
if (savedHome === undefined) delete process.env.HOME;
|
|
735
|
+
else process.env.HOME = savedHome;
|
|
722
736
|
});
|
|
723
737
|
|
|
724
738
|
it("symlinks a package skill into the installed root so `skill list` finds it", async () => {
|
|
@@ -768,6 +782,372 @@ describe("sources update — installs package skills (U10)", () => {
|
|
|
768
782
|
|
|
769
783
|
expect(existsSync(join(dataHome, "pragma", "skills", "bar"))).toBe(false);
|
|
770
784
|
});
|
|
785
|
+
|
|
786
|
+
/** The installed-skills root, created so a prior install can be seeded into it. */
|
|
787
|
+
function installedRoot(): string {
|
|
788
|
+
const root = join(dataHome, "pragma", "skills");
|
|
789
|
+
mkdirSync(root, { recursive: true });
|
|
790
|
+
return root;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
/** A symlink at `<installedRoot>/<name>` whose target does not exist. */
|
|
794
|
+
function danglingLink(root: string, name: string): string {
|
|
795
|
+
const target = join(tmp("pragma-uninstalled-"), "skills", name);
|
|
796
|
+
symlinkSync(target, join(root, name));
|
|
797
|
+
return target;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
// The `@canonical/design-system` 0.2.0 regression: 0.1.2 shipped
|
|
801
|
+
// `component-specifier`, 0.2.0 deleted it in favour of `specify-component`,
|
|
802
|
+
// and every machine that had updated against 0.1.2 kept a symlink into a
|
|
803
|
+
// package directory that no longer exists.
|
|
804
|
+
it("prunes a link whose package dropped the skill", async () => {
|
|
805
|
+
const pkg = skillPackage("specify-component"); // the 0.2.0 shape
|
|
806
|
+
const root = installedRoot();
|
|
807
|
+
danglingLink(root, "component-specifier"); // what 0.1.2 left behind
|
|
808
|
+
|
|
809
|
+
const cwd = tmp("pragma-proj-");
|
|
810
|
+
const runtime = runtimeFor(cwd, [
|
|
811
|
+
{ name: "design-system", source: `file://${pkg}` },
|
|
812
|
+
]);
|
|
813
|
+
await runTask(await buildUpdateTask(runtime));
|
|
814
|
+
|
|
815
|
+
expect(readdirSync(root)).toEqual(["specify-component"]);
|
|
816
|
+
expect(discoverSkills(cwd).map((s) => s.name)).not.toContain(
|
|
817
|
+
"component-specifier",
|
|
818
|
+
);
|
|
819
|
+
});
|
|
820
|
+
|
|
821
|
+
it("spares a manually-installed skill and a foreign link that still resolves", async () => {
|
|
822
|
+
const pkg = skillPackage("specify-component");
|
|
823
|
+
const root = installedRoot();
|
|
824
|
+
danglingLink(root, "component-specifier");
|
|
825
|
+
|
|
826
|
+
// A hand-installed skill: a REAL directory, belonging to no package. The
|
|
827
|
+
// install pass already refuses to clobber these; so must the prune pass.
|
|
828
|
+
const manual = join(root, "hand-written");
|
|
829
|
+
mkdirSync(manual, { recursive: true });
|
|
830
|
+
writeFileSync(
|
|
831
|
+
join(manual, "SKILL.md"),
|
|
832
|
+
"---\nname: hand-written\ndescription: Mine.\n---\n",
|
|
833
|
+
);
|
|
834
|
+
// Someone's own link into a checkout this update knows nothing about, and
|
|
835
|
+
// which still resolves. Deliberately RELATIVE: a relative target is stored
|
|
836
|
+
// relative to the LINK's directory, so resolving it against anything else
|
|
837
|
+
// (the cwd, say) would read as broken and eat a perfectly live link.
|
|
838
|
+
const foreign = join(dataHome, "elsewhere", "my-own");
|
|
839
|
+
mkdirSync(foreign, { recursive: true });
|
|
840
|
+
writeFileSync(
|
|
841
|
+
join(foreign, "SKILL.md"),
|
|
842
|
+
"---\nname: my-own\ndescription: Theirs.\n---\n",
|
|
843
|
+
);
|
|
844
|
+
symlinkSync(join("..", "..", "elsewhere", "my-own"), join(root, "my-own"));
|
|
845
|
+
|
|
846
|
+
const cwd = tmp("pragma-proj-");
|
|
847
|
+
const runtime = runtimeFor(cwd, [
|
|
848
|
+
{ name: "design-system", source: `file://${pkg}` },
|
|
849
|
+
]);
|
|
850
|
+
await runTask(await buildUpdateTask(runtime));
|
|
851
|
+
|
|
852
|
+
// Only the dangling link went.
|
|
853
|
+
expect(readdirSync(root).sort()).toEqual([
|
|
854
|
+
"hand-written",
|
|
855
|
+
"my-own",
|
|
856
|
+
"specify-component",
|
|
857
|
+
]);
|
|
858
|
+
expect(lstatSync(manual).isDirectory()).toBe(true);
|
|
859
|
+
expect(existsSync(join(manual, "SKILL.md"))).toBe(true);
|
|
860
|
+
expect(lstatSync(join(root, "my-own")).isSymbolicLink()).toBe(true);
|
|
861
|
+
expect(existsSync(join(root, "my-own"))).toBe(true); // still resolves
|
|
862
|
+
const found = discoverSkills(cwd).map((s) => s.name);
|
|
863
|
+
expect(found).toEqual(
|
|
864
|
+
expect.arrayContaining(["hand-written", "my-own", "specify-component"]),
|
|
865
|
+
);
|
|
866
|
+
});
|
|
867
|
+
|
|
868
|
+
it("re-points, rather than prunes, a dangling link the package still provides", async () => {
|
|
869
|
+
const pkg = skillPackage("foo");
|
|
870
|
+
const root = installedRoot();
|
|
871
|
+
danglingLink(root, "foo"); // e.g. the package moved to a new cache dir
|
|
872
|
+
|
|
873
|
+
const cwd = tmp("pragma-proj-");
|
|
874
|
+
const runtime = runtimeFor(cwd, [
|
|
875
|
+
{ name: "pkg-a", source: `file://${pkg}` },
|
|
876
|
+
]);
|
|
877
|
+
await runTask(await buildUpdateTask(runtime));
|
|
878
|
+
|
|
879
|
+
// `replaced`, never `pruned`: the prune pass skips every name this run
|
|
880
|
+
// planned, or it would delete the link the install pass just created.
|
|
881
|
+
expect(readlinkSync(join(root, "foo"))).toBe(join(pkg, "skills", "foo"));
|
|
882
|
+
expect(discoverSkills(cwd).map((s) => s.name)).toContain("foo");
|
|
883
|
+
});
|
|
884
|
+
|
|
885
|
+
it("is reversible — undo restores a pruned link, dangling target and all", async () => {
|
|
886
|
+
const pkg = skillPackage("specify-component");
|
|
887
|
+
const root = installedRoot();
|
|
888
|
+
const staleTarget = danglingLink(root, "component-specifier");
|
|
889
|
+
const link = join(root, "component-specifier");
|
|
890
|
+
|
|
891
|
+
const cwd = tmp("pragma-proj-");
|
|
892
|
+
const runtime = runtimeFor(cwd, [
|
|
893
|
+
{ name: "design-system", source: `file://${pkg}` },
|
|
894
|
+
]);
|
|
895
|
+
// The plan is made while the stale link is still there; `runUndo` MOCKS the
|
|
896
|
+
// forward effects, so stand in for the delete it would have performed.
|
|
897
|
+
const task = await buildUpdateTask(runtime);
|
|
898
|
+
rmSync(link);
|
|
899
|
+
|
|
900
|
+
const { runUndo } = await import("@canonical/task/node");
|
|
901
|
+
await runUndo(task);
|
|
902
|
+
|
|
903
|
+
expect(lstatSync(link).isSymbolicLink()).toBe(true);
|
|
904
|
+
expect(readlinkSync(link)).toBe(staleTarget); // the target it always had
|
|
905
|
+
});
|
|
906
|
+
|
|
907
|
+
it("undoes a prune whose forward delete never ran, rather than failing EEXIST", async () => {
|
|
908
|
+
const pkg = skillPackage("specify-component");
|
|
909
|
+
const root = installedRoot();
|
|
910
|
+
const staleTarget = danglingLink(root, "component-specifier");
|
|
911
|
+
|
|
912
|
+
const cwd = tmp("pragma-proj-");
|
|
913
|
+
const runtime = runtimeFor(cwd, [
|
|
914
|
+
{ name: "design-system", source: `file://${pkg}` },
|
|
915
|
+
]);
|
|
916
|
+
// No `rmSync` this time: the link is still in place when the undo re-links,
|
|
917
|
+
// and `fs.symlink` refuses an existing path — so the undo must clear it.
|
|
918
|
+
const { runUndo } = await import("@canonical/task/node");
|
|
919
|
+
await expect(runUndo(await buildUpdateTask(runtime))).resolves.toBeTruthy();
|
|
920
|
+
|
|
921
|
+
expect(readlinkSync(join(root, "component-specifier"))).toBe(staleTarget);
|
|
922
|
+
});
|
|
923
|
+
|
|
924
|
+
it("plans no prunes when nothing was ever installed", async () => {
|
|
925
|
+
const pkg = skillPackage("foo"); // $XDG_DATA_HOME/pragma/skills absent
|
|
926
|
+
const cwd = tmp("pragma-proj-");
|
|
927
|
+
const runtime = runtimeFor(cwd, [
|
|
928
|
+
{ name: "pkg-a", source: `file://${pkg}` },
|
|
929
|
+
]);
|
|
930
|
+
await runTask(await buildUpdateTask(runtime));
|
|
931
|
+
|
|
932
|
+
expect(readdirSync(join(dataHome, "pragma", "skills"))).toEqual(["foo"]);
|
|
933
|
+
});
|
|
934
|
+
|
|
935
|
+
it("sees a package that ships `skills/<name>` as a SYMLINK", async () => {
|
|
936
|
+
// `lstat().isDirectory()` reports the LINK, not the directory behind it, so
|
|
937
|
+
// a pnpm / monorepo / `file:` layout contributed nothing at all, silently.
|
|
938
|
+
const real = tmp("pragma-realskill-");
|
|
939
|
+
mkdirSync(join(real, "linked-skill"), { recursive: true });
|
|
940
|
+
writeFileSync(
|
|
941
|
+
join(real, "linked-skill", "SKILL.md"),
|
|
942
|
+
"---\nname: linked-skill\ndescription: Behind a link.\n---\n",
|
|
943
|
+
);
|
|
944
|
+
const pkg = filePackage();
|
|
945
|
+
mkdirSync(join(pkg, "skills"), { recursive: true });
|
|
946
|
+
symlinkSync(
|
|
947
|
+
join(real, "linked-skill"),
|
|
948
|
+
join(pkg, "skills", "linked-skill"),
|
|
949
|
+
);
|
|
950
|
+
|
|
951
|
+
const cwd = tmp("pragma-proj-");
|
|
952
|
+
await runTask(
|
|
953
|
+
await buildUpdateTask(
|
|
954
|
+
runtimeFor(cwd, [{ name: "pkg-a", source: `file://${pkg}` }]),
|
|
955
|
+
),
|
|
956
|
+
);
|
|
957
|
+
expect(discoverSkills(cwd).map((s) => s.name)).toContain("linked-skill");
|
|
958
|
+
});
|
|
959
|
+
});
|
|
960
|
+
|
|
961
|
+
describe("sources update — converges the global scope (converge-only)", () => {
|
|
962
|
+
let savedDataHome: string | undefined;
|
|
963
|
+
let savedHome: string | undefined;
|
|
964
|
+
let dataHome: string;
|
|
965
|
+
let home: string;
|
|
966
|
+
|
|
967
|
+
/** A local package that also ships `skills/<name>/SKILL.md`. */
|
|
968
|
+
function skillPackage(...skillNames: string[]): string {
|
|
969
|
+
const pkg = filePackage();
|
|
970
|
+
for (const skillName of skillNames) {
|
|
971
|
+
const skillDir = join(pkg, "skills", skillName);
|
|
972
|
+
mkdirSync(skillDir, { recursive: true });
|
|
973
|
+
writeFileSync(
|
|
974
|
+
join(skillDir, "SKILL.md"),
|
|
975
|
+
`---\nname: ${skillName}\ndescription: From a package.\n---\nBody.`,
|
|
976
|
+
);
|
|
977
|
+
}
|
|
978
|
+
return pkg;
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
beforeEach(() => {
|
|
982
|
+
savedDataHome = process.env.XDG_DATA_HOME;
|
|
983
|
+
savedHome = process.env.HOME;
|
|
984
|
+
dataHome = tmp("pragma-datahome-");
|
|
985
|
+
home = tmp("pragma-home-");
|
|
986
|
+
process.env.XDG_DATA_HOME = dataHome;
|
|
987
|
+
process.env.HOME = home;
|
|
988
|
+
});
|
|
989
|
+
afterEach(() => {
|
|
990
|
+
if (savedDataHome === undefined) delete process.env.XDG_DATA_HOME;
|
|
991
|
+
else process.env.XDG_DATA_HOME = savedDataHome;
|
|
992
|
+
if (savedHome === undefined) delete process.env.HOME;
|
|
993
|
+
else process.env.HOME = savedHome;
|
|
994
|
+
});
|
|
995
|
+
|
|
996
|
+
/** The installed root (layer 1). */
|
|
997
|
+
const installedRoot = (): string => join(dataHome, "pragma", "skills");
|
|
998
|
+
/** The cross-client harness dir (layer 2), created so it is convergeable. */
|
|
999
|
+
const harnessDir = (): string => {
|
|
1000
|
+
const dir = join(home, ".agents", "skills");
|
|
1001
|
+
mkdirSync(dir, { recursive: true });
|
|
1002
|
+
return dir;
|
|
1003
|
+
};
|
|
1004
|
+
/** Retire a skill from the package IN PLACE — how a pack upgrade drops one. */
|
|
1005
|
+
const dropSkill = (pkg: string, name: string): void => {
|
|
1006
|
+
rmSync(join(pkg, "skills", name), { recursive: true, force: true });
|
|
1007
|
+
};
|
|
1008
|
+
const update = async (pkg: string, cwd: string): Promise<void> => {
|
|
1009
|
+
await runTask(
|
|
1010
|
+
await buildUpdateTask(
|
|
1011
|
+
runtimeFor(cwd, [{ name: "design-system", source: `file://${pkg}` }]),
|
|
1012
|
+
),
|
|
1013
|
+
);
|
|
1014
|
+
};
|
|
1015
|
+
|
|
1016
|
+
it("a NEW pack skill reaches the harness folder in one step", async () => {
|
|
1017
|
+
// The two-step: `sources update` wrote layer 1 and stopped, so a new pack
|
|
1018
|
+
// skill appeared in no harness directory until the user separately ran
|
|
1019
|
+
// `setup skills`.
|
|
1020
|
+
const dir = harnessDir();
|
|
1021
|
+
await update(skillPackage("added"), tmp("pragma-proj-"));
|
|
1022
|
+
expect(readlinkSync(join(dir, "added"))).toBe(
|
|
1023
|
+
join(installedRoot(), "added"),
|
|
1024
|
+
);
|
|
1025
|
+
});
|
|
1026
|
+
|
|
1027
|
+
it("a DROPPED pack skill has its harness link removed (the reported case)", async () => {
|
|
1028
|
+
const dir = harnessDir();
|
|
1029
|
+
const cwd = tmp("pragma-proj-");
|
|
1030
|
+
const pkg = skillPackage("kept", "dropped");
|
|
1031
|
+
// 0.1.2 shipped both...
|
|
1032
|
+
await update(pkg, cwd);
|
|
1033
|
+
expect(existsSync(join(dir, "dropped"))).toBe(true);
|
|
1034
|
+
// ...0.2.0 drops one, in place, so the layer-1 link now dangles and its
|
|
1035
|
+
// prune fires. Layer 2 must follow it.
|
|
1036
|
+
dropSkill(pkg, "dropped");
|
|
1037
|
+
await update(pkg, cwd);
|
|
1038
|
+
// `existsSync` FOLLOWS a link, so a dangling one false-negatives — lstat.
|
|
1039
|
+
expect(() => lstatSync(join(dir, "dropped"))).toThrow();
|
|
1040
|
+
expect(readlinkSync(join(dir, "kept"))).toBe(join(installedRoot(), "kept"));
|
|
1041
|
+
});
|
|
1042
|
+
|
|
1043
|
+
it("CONVERGE-ONLY: a machine that never ran `setup skills` gets no new dirs", async () => {
|
|
1044
|
+
// The operator ruling, and the reason this is safe to expose over MCP:
|
|
1045
|
+
// `sources update` is `mutates: true` AND `expose: true`, so an agent must
|
|
1046
|
+
// not be able to make it conjure `~/.claude/skills` into existence.
|
|
1047
|
+
await update(skillPackage("added"), tmp("pragma-proj-"));
|
|
1048
|
+
expect(existsSync(join(home, ".agents"))).toBe(false);
|
|
1049
|
+
expect(existsSync(join(home, ".claude"))).toBe(false);
|
|
1050
|
+
// Layer 1 is still installed — only the scope convergence stood down.
|
|
1051
|
+
expect(existsSync(join(installedRoot(), "added"))).toBe(true);
|
|
1052
|
+
});
|
|
1053
|
+
|
|
1054
|
+
it("SAFETY: a real dir, a resolving user link and a `-backup` sibling all survive", async () => {
|
|
1055
|
+
const dir = harnessDir();
|
|
1056
|
+
const cwd = tmp("pragma-proj-");
|
|
1057
|
+
const pkg = skillPackage("kept", "dropped");
|
|
1058
|
+
await update(pkg, cwd);
|
|
1059
|
+
|
|
1060
|
+
// A hand-placed skill directory, at a name the pack also provides.
|
|
1061
|
+
const real = join(dir, "hand-placed");
|
|
1062
|
+
mkdirSync(real, { recursive: true });
|
|
1063
|
+
writeFileSync(join(real, "SKILL.md"), "hand-placed\n");
|
|
1064
|
+
// Someone's own link into their own checkout.
|
|
1065
|
+
const mine = join(tmp("pragma-mine-"), "mine");
|
|
1066
|
+
mkdirSync(mine, { recursive: true });
|
|
1067
|
+
symlinkSync(mine, join(dir, "mine"));
|
|
1068
|
+
// A link into a SIBLING whose name merely EXTENDS the root's — the old
|
|
1069
|
+
// string-prefix bug classified this as ours and deleted it.
|
|
1070
|
+
const backup = join(`${installedRoot()}-backup`, "dropped");
|
|
1071
|
+
mkdirSync(backup, { recursive: true });
|
|
1072
|
+
rmSync(join(dir, "dropped"));
|
|
1073
|
+
symlinkSync(backup, join(dir, "dropped"));
|
|
1074
|
+
|
|
1075
|
+
dropSkill(pkg, "dropped"); // retired upstream
|
|
1076
|
+
await update(pkg, cwd);
|
|
1077
|
+
|
|
1078
|
+
expect(readFileSync(join(real, "SKILL.md"), "utf-8")).toBe("hand-placed\n");
|
|
1079
|
+
expect(readlinkSync(join(dir, "mine"))).toBe(mine);
|
|
1080
|
+
// Not ours despite sharing a string prefix with the installed root.
|
|
1081
|
+
expect(readlinkSync(join(dir, "dropped"))).toBe(backup);
|
|
1082
|
+
});
|
|
1083
|
+
|
|
1084
|
+
it("is idempotent — a second update re-links nothing", async () => {
|
|
1085
|
+
const dir = harnessDir();
|
|
1086
|
+
const cwd = tmp("pragma-proj-");
|
|
1087
|
+
const pkg = skillPackage("stable");
|
|
1088
|
+
await update(pkg, cwd);
|
|
1089
|
+
const before = lstatSync(join(dir, "stable")).mtimeMs;
|
|
1090
|
+
await update(pkg, cwd);
|
|
1091
|
+
expect(lstatSync(join(dir, "stable")).mtimeMs).toBe(before);
|
|
1092
|
+
});
|
|
1093
|
+
|
|
1094
|
+
it("is reversible — undo RESTORES a replaced harness link's old target", async () => {
|
|
1095
|
+
// The `created` case below undoes by deletion, because absent is the state
|
|
1096
|
+
// it replaced. A `replaced` link's is not: the path already held a link,
|
|
1097
|
+
// the forward delete carries no undo, and deleting what the symlink
|
|
1098
|
+
// created therefore left the path ABSENT — a state it was never in. So the
|
|
1099
|
+
// undo must delete-then-relink the target detection recorded.
|
|
1100
|
+
const dir = harnessDir();
|
|
1101
|
+
const cwd = tmp("pragma-proj-");
|
|
1102
|
+
const pkg = skillPackage("kept", "other");
|
|
1103
|
+
await update(pkg, cwd);
|
|
1104
|
+
|
|
1105
|
+
// Drift the harness link for `kept` onto a SIBLING inside the installed
|
|
1106
|
+
// root: still owned (so the next plan is entitled to fix it), wrong target
|
|
1107
|
+
// (so the plan calls it `replaced`).
|
|
1108
|
+
const link = join(dir, "kept");
|
|
1109
|
+
const previous = join(installedRoot(), "other");
|
|
1110
|
+
rmSync(link);
|
|
1111
|
+
symlinkSync(previous, link);
|
|
1112
|
+
|
|
1113
|
+
// Two tasks off the SAME pre-run state: `gen` drives one iterator, so a
|
|
1114
|
+
// task that has been run forward cannot also be walked for its undos, and
|
|
1115
|
+
// re-planning after the forward run would see a converged tree with
|
|
1116
|
+
// nothing left to reverse.
|
|
1117
|
+
const runtime = runtimeFor(cwd, [
|
|
1118
|
+
{ name: "design-system", source: `file://${pkg}` },
|
|
1119
|
+
]);
|
|
1120
|
+
const forward = await buildUpdateTask(runtime);
|
|
1121
|
+
const reverse = await buildUpdateTask(runtime);
|
|
1122
|
+
|
|
1123
|
+
await runTask(forward);
|
|
1124
|
+
expect(readlinkSync(link)).toBe(join(installedRoot(), "kept")); // repointed
|
|
1125
|
+
|
|
1126
|
+
const { runUndo } = await import("@canonical/task/node");
|
|
1127
|
+
await runUndo(reverse);
|
|
1128
|
+
|
|
1129
|
+
// `existsSync` FOLLOWS a link and would false-negative on a dangling one —
|
|
1130
|
+
// and, more to the point here, an existence check alone passes the buggy
|
|
1131
|
+
// shape too. The TARGET is the assertion.
|
|
1132
|
+
expect(lstatSync(link).isSymbolicLink()).toBe(true);
|
|
1133
|
+
expect(readlinkSync(link)).toBe(previous);
|
|
1134
|
+
});
|
|
1135
|
+
|
|
1136
|
+
it("is reversible — undo removes the harness link it created", async () => {
|
|
1137
|
+
const dir = harnessDir();
|
|
1138
|
+
const { runUndo } = await import("@canonical/task/node");
|
|
1139
|
+
await runUndo(
|
|
1140
|
+
await buildUpdateTask(
|
|
1141
|
+
runtimeFor(tmp("pragma-proj-"), [
|
|
1142
|
+
{
|
|
1143
|
+
name: "design-system",
|
|
1144
|
+
source: `file://${skillPackage("added")}`,
|
|
1145
|
+
},
|
|
1146
|
+
]),
|
|
1147
|
+
),
|
|
1148
|
+
);
|
|
1149
|
+
expect(existsSync(join(dir, "added"))).toBe(false);
|
|
1150
|
+
});
|
|
771
1151
|
});
|
|
772
1152
|
|
|
773
1153
|
describe("sources status — entityCount from the manifest (A10)", () => {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { BIN_NAME } from "../../constants.js";
|
|
6
6
|
import { defaultStyle, type RenderStyle } from "../../kernel/render/style.js";
|
|
7
|
-
import type { Formatters } from "../../kernel/spec/
|
|
7
|
+
import type { Formatters } from "../../kernel/spec/index.js";
|
|
8
8
|
import type { SourcesStatusData } from "./types.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { BIN_NAME } from "../../constants.js";
|
|
12
|
-
import type { VerbSpec } from "../../kernel/spec/
|
|
12
|
+
import type { VerbSpec } from "../../kernel/spec/index.js";
|
|
13
13
|
import { statusFormatters } from "./status.render.js";
|
|
14
14
|
import type { SourcesStatusData } from "./types.js";
|
|
15
15
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Formatters for `pragma sources update` — plain, llm, json.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import type { Formatters } from "../../kernel/spec/
|
|
5
|
+
import type { Formatters } from "../../kernel/spec/index.js";
|
|
6
6
|
import type { SourcesUpdateData } from "./types.js";
|
|
7
7
|
|
|
8
8
|
export const updateFormatters: Formatters<SourcesUpdateData> = {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
import type { Task } from "@canonical/task";
|
|
16
16
|
import { BIN_NAME } from "../../constants.js";
|
|
17
|
-
import type { VerbSpec } from "../../kernel/spec/
|
|
17
|
+
import type { VerbSpec } from "../../kernel/spec/index.js";
|
|
18
18
|
import type { SourcesUpdateData } from "./types.js";
|
|
19
19
|
import { updateFormatters } from "./update.render.js";
|
|
20
20
|
|
|
@@ -25,12 +25,12 @@ export const updateVerb: VerbSpec<
|
|
|
25
25
|
> = {
|
|
26
26
|
path: ["sources", "update"],
|
|
27
27
|
summary: "Resolve configured packs and build the local store from them.",
|
|
28
|
-
doc: "Resolves each configured pack (git
|
|
28
|
+
doc: "Resolves each configured pack (git, file, or npm) and builds one local pack from them, which every later run reads without touching the network. Put a commit SHA in a pack source ref to pin it to that revision.",
|
|
29
29
|
params: [
|
|
30
30
|
{
|
|
31
31
|
kind: "boolean",
|
|
32
32
|
name: "skipInvalid",
|
|
33
|
-
doc: "
|
|
33
|
+
doc: "Build from the sources that parse, warning about each one that does not, instead of failing the whole update.",
|
|
34
34
|
},
|
|
35
35
|
],
|
|
36
36
|
output: { formatters: updateFormatters },
|
|
@@ -38,7 +38,7 @@ export const updateVerb: VerbSpec<
|
|
|
38
38
|
{ cmd: `${BIN_NAME} sources update`, note: "resolve and build" },
|
|
39
39
|
{
|
|
40
40
|
cmd: `${BIN_NAME} sources update --skip-invalid`,
|
|
41
|
-
note: "build from the
|
|
41
|
+
note: "build from the sources that parse, and name the ones dropped",
|
|
42
42
|
},
|
|
43
43
|
],
|
|
44
44
|
capability: {
|