@canonical/pragma-cli 0.33.0 → 0.35.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/dist/.build-ok +0 -0
- package/dist/package.json +83 -0
- package/dist/pragma.conf.js +814 -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 +293 -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 +92 -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/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 +205 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +185 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +45 -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 +83 -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 +66 -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 +53 -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 +168 -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 +343 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +277 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +207 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +316 -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 +193 -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 +334 -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 +263 -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/bands.js +16 -0
- package/dist/src/capabilities/shared/bands.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +26 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +103 -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 +195 -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 +167 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +394 -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 +99 -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 +44 -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 +82 -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 +25 -0
- package/dist/src/kernel/index.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 +223 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +87 -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 +369 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +68 -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 +217 -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 +216 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +59 -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 +197 -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 +300 -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 +85 -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/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 +25 -24
- package/pragma.conf.ts +853 -0
- package/src/bin.ts +276 -82
- package/src/capabilities/block.parity.test.ts +253 -0
- package/src/capabilities/capabilities/capabilities.render.ts +4 -3
- package/src/capabilities/capabilities/capabilities.verb.ts +32 -14
- package/src/capabilities/capabilities/catalog.ts +20 -12
- package/src/capabilities/capabilities/hints.ts +43 -24
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +50 -24
- package/src/capabilities/colophon/colophon.render.ts +25 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +9 -5
- package/src/capabilities/colophon/types.ts +16 -7
- package/src/capabilities/config/collectConfigShow.test.ts +58 -0
- package/src/capabilities/config/collectConfigShow.ts +43 -6
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -37
- 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 +14 -9
- package/src/capabilities/config/show.render.test.ts +77 -5
- package/src/capabilities/config/show.render.ts +8 -13
- package/src/capabilities/config/show.verb.ts +13 -9
- package/src/capabilities/config/types.ts +26 -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 +95 -103
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +50 -0
- package/src/capabilities/create/create.mcp.test.ts +91 -7
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +523 -162
- package/src/capabilities/create/create.verb.ts +361 -321
- 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 +9 -14
- 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 +40 -46
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +29 -5
- package/src/capabilities/{standard/parity.test.ts → distribution.parity.test.ts} +24 -14
- package/src/capabilities/distribution.test.ts +122 -0
- package/src/capabilities/distribution.ts +54 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +9 -7
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +82 -46
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +5 -4
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +125 -30
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +113 -27
- 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 +274 -0
- package/src/capabilities/doctor/doctor.render.test.ts +24 -13
- package/src/capabilities/doctor/doctor.render.ts +45 -20
- package/src/capabilities/doctor/doctor.test.ts +158 -40
- package/src/capabilities/doctor/doctor.verb.ts +9 -5
- package/src/capabilities/doctor/runChecks.ts +65 -66
- package/src/capabilities/doctor/types.ts +21 -5
- package/src/capabilities/emptyRecovery.test.ts +44 -22
- 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 -5
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +5 -4
- package/src/capabilities/graph/runQuery.ts +9 -7
- package/src/capabilities/index.ts +25 -19
- package/src/capabilities/info/collectInfo.ts +15 -10
- package/src/capabilities/info/info.render.ts +4 -3
- package/src/capabilities/info/info.verb.ts +4 -3
- package/src/capabilities/lazy.test.ts +125 -2
- 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 +42 -83
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/prompt.test.ts +12 -6
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +26 -14
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/resources/provider.ts +367 -91
- package/src/capabilities/resources/resources.test.ts +411 -59
- package/src/capabilities/setup/buildPlan.ts +236 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +74 -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 +397 -320
- package/src/capabilities/setup/operations/setupLsp.ts +329 -68
- package/src/capabilities/setup/operations/setupMcp.ts +137 -97
- package/src/capabilities/setup/operations/setupSkills.ts +336 -108
- package/src/capabilities/setup/plan.render.ts +241 -0
- package/src/capabilities/setup/plan.ts +236 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +281 -73
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +972 -209
- package/src/capabilities/setup/setup.verb.ts +233 -74
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +166 -14
- package/src/capabilities/setup/targets.ts +367 -0
- package/src/capabilities/setup/types.ts +18 -57
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +32 -0
- package/src/capabilities/shared/packageManager.test.ts +55 -0
- package/src/capabilities/shared/packageManager.ts +62 -6
- package/src/capabilities/skill/discover.ts +47 -9
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +14 -14
- package/src/capabilities/skill/skill.test.ts +7 -5
- package/src/capabilities/skill/verbs.ts +9 -10
- package/src/capabilities/sources/collectStatus.ts +61 -51
- package/src/capabilities/sources/index.ts +2 -2
- package/src/capabilities/sources/installSkills.ts +86 -9
- package/src/capabilities/sources/runUpdate.ts +164 -141
- package/src/capabilities/sources/sources.test.ts +265 -119
- package/src/capabilities/sources/status.render.test.ts +53 -24
- package/src/capabilities/sources/status.render.ts +25 -30
- package/src/capabilities/sources/status.verb.ts +16 -9
- package/src/capabilities/sources/types.ts +18 -25
- package/src/capabilities/sources/update.render.ts +10 -3
- package/src/capabilities/sources/update.verb.ts +13 -24
- package/src/capabilities/surface.test.ts +165 -25
- package/src/capabilities/tier.parity.test.ts +144 -0
- package/src/capabilities/upgrade/runUpgrade.ts +8 -8
- package/src/capabilities/upgrade/upgrade.render.ts +4 -5
- package/src/capabilities/upgrade/upgrade.test.ts +3 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +8 -4
- 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.test.ts +8 -6
- package/src/constants.ts +78 -22
- package/src/identity.test.ts +348 -0
- package/src/index.ts +2 -2
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +20 -15
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.test.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +5 -3
- package/src/kernel/completion/entitySource.test.ts +185 -41
- package/src/kernel/completion/entitySource.ts +133 -110
- package/src/kernel/completion/model.test.ts +165 -13
- package/src/kernel/completion/model.ts +105 -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 +104 -50
- package/src/kernel/completion/shellDrive.test.ts +611 -0
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/fish.ts +28 -6
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +10 -3
- package/src/kernel/config/defaults.test.ts +108 -0
- package/src/kernel/config/defaults.ts +13 -23
- package/src/kernel/config/evaluateProjectConfig.ts +33 -11
- package/src/kernel/config/findProjectConfig.ts +4 -3
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -81
- package/src/kernel/config/globalConfig.ts +2 -2
- package/src/kernel/config/index.ts +5 -6
- package/src/kernel/config/paths.ts +17 -17
- package/src/kernel/config/readConfig.test.ts +246 -7
- package/src/kernel/config/readConfig.ts +8 -8
- package/src/kernel/config/schema.test.ts +50 -0
- package/src/kernel/config/schema.ts +100 -11
- package/src/kernel/config/types.ts +75 -19
- package/src/kernel/copy.test.ts +483 -0
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +6 -3
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -4
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/index.ts +1 -1
- package/src/kernel/error/recovery.test.ts +22 -45
- package/src/kernel/error/recovery.ts +36 -27
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +25 -4
- package/src/kernel/index.ts +26 -0
- package/src/kernel/packs/collect.test.ts +195 -11
- package/src/kernel/packs/collect.ts +212 -61
- package/src/kernel/packs/compile.test.ts +293 -8
- package/src/kernel/packs/compile.ts +108 -15
- package/src/kernel/packs/disclosure.test.ts +5 -2
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +13 -13
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/graphqlSource.test.ts +6 -3
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +70 -20
- package/src/kernel/packs/renderPack.ts +28 -7
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +132 -34
- package/src/kernel/packs/runBodies.ts +16 -16
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +114 -11
- package/src/kernel/packs/sparql/applyFilters.ts +16 -17
- package/src/kernel/packs/sparql/buildLookupQuery.ts +75 -3
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +104 -10
- package/src/kernel/packs/sparql/runSelect.ts +75 -37
- package/src/kernel/packs/toolDescription.test.ts +52 -5
- package/src/kernel/packs/types.ts +52 -4
- package/src/kernel/packs/uniqueness.ts +5 -5
- package/src/kernel/project/cli/buildProgram.test.ts +157 -17
- package/src/kernel/project/cli/buildProgram.ts +77 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +227 -3
- package/src/kernel/project/cli/dispatch.ts +250 -48
- 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 +130 -30
- package/src/kernel/project/cli/helpFormat.ts +14 -1
- package/src/kernel/project/cli/rootHelp.ts +140 -111
- 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 +18 -10
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +12 -7
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +42 -1
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +120 -5
- package/src/kernel/project/mcp/prompts/provider.ts +22 -8
- package/src/kernel/project/mcp/prompts/source.ts +69 -68
- package/src/kernel/project/mcp/registerVerb.ts +56 -11
- package/src/kernel/project/mcp/serve.ts +13 -5
- package/src/kernel/project/mcp/toolDescriptions.test.ts +6 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/disclosure.ts +4 -2
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/prefixes.test.ts +36 -0
- package/src/kernel/render/prefixes.ts +40 -13
- package/src/kernel/render/renderers.test.ts +244 -7
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +31 -1
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/runtime/graphpack/build.ts +29 -3
- package/src/kernel/runtime/graphpack/buildIndex.test.ts +46 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +53 -18
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -5
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.stories.generated.ts +3 -0
- package/src/kernel/runtime/graphpack/embedded.ts +39 -13
- package/src/kernel/runtime/graphpack/graphpack.test.ts +205 -5
- package/src/kernel/runtime/graphpack/hash.ts +3 -2
- package/src/kernel/runtime/graphpack/index.ts +1 -1
- package/src/kernel/runtime/graphpack/manifest.ts +114 -12
- package/src/kernel/runtime/graphpack/read.ts +5 -11
- package/src/kernel/runtime/graphpack/schemas.ts +74 -0
- package/src/kernel/runtime/graphpack/stories.ts +84 -0
- package/src/kernel/runtime/graphpack/types.ts +61 -48
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/paths.ts +64 -15
- package/src/kernel/runtime/probe.test.ts +8 -4
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +477 -32
- package/src/kernel/runtime/refs/gitOps.ts +1 -19
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +8 -8
- package/src/kernel/runtime/refs/resolve.ts +82 -66
- package/src/kernel/runtime/resolveSources.test.ts +63 -24
- package/src/kernel/runtime/resolveSources.ts +36 -25
- package/src/kernel/runtime/storeReadiness.ts +10 -10
- package/src/kernel/runtime/storeless.test.ts +1 -1
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +56 -55
- package/src/kernel/spec/emitReference.test.ts +3 -3
- package/src/kernel/spec/emitReference.ts +242 -34
- package/src/kernel/spec/emitSurface.ts +57 -11
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/surfaceConformance.ts +8 -0
- package/src/kernel/spec/types.ts +277 -13
- package/src/kernel/spec/validate.ts +2 -1
- package/src/kernel/vocabulary.test.ts +164 -0
- package/src/kernel/vocabulary.ts +146 -0
- package/src/testing/PARITY_GAPS.ts +8 -2
- package/src/testing/behavioral/README.md +3 -3
- package/src/testing/behavioral/completion.test.ts +19 -6
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +6 -5
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +1 -1
- package/src/testing/behavioral/exitCodes.e2e.test.ts +6 -5
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/harness.foundation.test.ts +14 -5
- package/src/testing/behavioral/journeys.cli.test.ts +117 -76
- package/src/testing/behavioral/journeys.defaultPack.test.ts +88 -182
- package/src/testing/behavioral/journeys.firstInstall.test.ts +167 -0
- 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.mcpLifecycle.mcp.test.ts +9 -6
- package/src/testing/behavioral/journeys.packageStories.test.ts +188 -0
- package/src/testing/behavioral/liveReadSurface.ts +4 -3
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +10 -5
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/behavioral/staleCommands.test.ts +10 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +7 -7
- package/src/testing/eval/cases/assembly.ts +13 -6
- package/src/testing/eval/cases/effectful.ts +28 -15
- package/src/testing/eval/cases/readNouns.ts +22 -20
- package/src/testing/eval/cases/stable.ts +5 -1
- package/src/testing/eval/eval.test.ts +7 -1
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/fixtureCapability.ts +45 -1
- package/src/testing/fixtures/graph/canonical.ts +94 -5
- package/src/testing/fixtures/graph/defaultPack.ts +7 -6
- package/src/testing/fixtures/graph/owlExport.ts +7 -5
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/fixtureGraph.ts +33 -16
- package/src/testing/helpers/packRuntime.ts +2 -3
- package/src/testing/helpers/projectCli.ts +2 -1
- package/src/testing/helpers/projectMcp.ts +38 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +24 -9
- package/src/testing/perf/budgets.ts +76 -12
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +611 -14
- 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/src/types.ts +2 -2
- package/dist/pragma +0 -0
- package/src/capabilities/block/blockList.test.ts +0 -79
- package/src/capabilities/block/blockList.verb.ts +0 -163
- package/src/capabilities/block/index.ts +0 -25
- package/src/capabilities/block/pack.ts +0 -166
- package/src/capabilities/block/parity.test.ts +0 -187
- package/src/capabilities/block/tierChain.ts +0 -78
- package/src/capabilities/colophon/pragmaColophon.ts +0 -66
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -152
- package/src/capabilities/create/templates.embedded.generated.ts +0 -53
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -41
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -67
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -60
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/capabilities/modifier/index.ts +0 -15
- package/src/capabilities/modifier/pack.ts +0 -64
- package/src/capabilities/standard/index.ts +0 -18
- package/src/capabilities/standard/pack.ts +0 -128
- package/src/capabilities/tier/index.ts +0 -19
- package/src/capabilities/tier/lookup.render.test.ts +0 -72
- package/src/capabilities/tier/lookup.render.ts +0 -59
- package/src/capabilities/tier/lookup.test.ts +0 -83
- package/src/capabilities/tier/lookup.verb.ts +0 -44
- package/src/capabilities/tier/pack.ts +0 -28
- package/src/capabilities/tier/runLookup.ts +0 -87
- package/src/capabilities/token/addConfig.render.ts +0 -27
- package/src/capabilities/token/addConfig.test.ts +0 -62
- package/src/capabilities/token/addConfig.verb.ts +0 -40
- package/src/capabilities/token/index.ts +0 -19
- package/src/capabilities/token/pack.ts +0 -58
- package/src/capabilities/token/runAddConfig.ts +0 -95
- package/src/kernel/completion/bashDrive.test.ts +0 -73
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +0 -39
- package/src/kernel/runtime/lock.ts +0 -90
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The `sources` capability barrel — `status` (storeless read) and `update`
|
|
3
|
-
* (the resolve/build/
|
|
3
|
+
* (the resolve/build/point Task).
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
7
|
-
import type { CapabilityModule } from "../../kernel/spec/
|
|
7
|
+
import type { CapabilityModule } from "../../kernel/spec/index.js";
|
|
8
8
|
import { statusVerb } from "./status.verb.js";
|
|
9
9
|
import { updateVerb } from "./update.verb.js";
|
|
10
10
|
|
|
@@ -4,33 +4,57 @@
|
|
|
4
4
|
* Design-system packages ship a top-level `skills/<name>/SKILL.md`, but skill
|
|
5
5
|
* discovery only scans the project root and the installed-skills root — never a
|
|
6
6
|
* resolved package's clone/dir. So `sources update` INSTALLS each package's
|
|
7
|
-
* skills into the installed-skills root (`$XDG_DATA_HOME
|
|
7
|
+
* skills into the installed-skills root (`$XDG_DATA_HOME/<bin>/skills`) as
|
|
8
8
|
* symlinks, exactly the root `discoverSkills` already reads. Precedence is
|
|
9
|
-
* preserved (a project
|
|
9
|
+
* preserved (a project `.<bin>/skills` entry still wins — it is discovered
|
|
10
10
|
* first), and the update Task stays reversible (each created link carries an
|
|
11
11
|
* unlink undo).
|
|
12
12
|
*
|
|
13
|
+
* Installing alone leaks, because planning walks the PACKAGES and so only ever
|
|
14
|
+
* visits a skill that still exists. When a package DROPS one (a `0.1.2` that
|
|
15
|
+
* shipped `component-specifier` upgrading to a `0.2.0` that does not), the link
|
|
16
|
+
* the previous update installed is never revisited and is left dangling at a
|
|
17
|
+
* target that no longer exists — which reads as a broken install rather than the
|
|
18
|
+
* intentional removal it is, and which `skill` commands can still list or try to
|
|
19
|
+
* open. So planning ALSO walks the installed root and prunes those, under a
|
|
20
|
+
* deliberately narrow rule: an entry is removed only when this run did not plan
|
|
21
|
+
* it AND it is a symlink whose target is gone. A real directory is a
|
|
22
|
+
* manually-installed skill and a still-resolving symlink is someone's own link;
|
|
23
|
+
* neither is this update's to delete.
|
|
24
|
+
*
|
|
13
25
|
* Decisions run against REAL fs here so the update's `--dry-run` plan is
|
|
14
26
|
* accurate; the composed Task performs only the symlink/delete effects.
|
|
15
27
|
*/
|
|
16
28
|
|
|
17
29
|
import { existsSync, lstatSync, readdirSync, readlinkSync } from "node:fs";
|
|
18
30
|
import { basename, join, resolve } from "node:path";
|
|
19
|
-
import type { ResolvedPackage } from "../../kernel/runtime/refs/
|
|
31
|
+
import type { ResolvedPackage } from "../../kernel/runtime/refs/index.js";
|
|
20
32
|
import { installedSkillsDir } from "../skill/discover.js";
|
|
21
33
|
|
|
22
34
|
/** One planned skill symlink into the installed-skills root. */
|
|
23
35
|
export interface SkillLinkAction {
|
|
24
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* The symlink target: the package's skill folder for an install, or — on a
|
|
38
|
+
* `pruned` entry — the missing target the stale link still points at, kept so
|
|
39
|
+
* the prune's undo can put the link back exactly as it was.
|
|
40
|
+
*/
|
|
25
41
|
readonly target: string;
|
|
26
42
|
/** `<installedSkillsDir>/<folderName>` — where the symlink is created. */
|
|
27
43
|
readonly linkPath: string;
|
|
28
|
-
/**
|
|
29
|
-
|
|
44
|
+
/**
|
|
45
|
+
* created (absent), skipped (already correct / a real dir), replaced, or
|
|
46
|
+
* pruned (an unplanned link whose target is gone — deleted, not re-created).
|
|
47
|
+
*/
|
|
48
|
+
readonly action: "created" | "skipped" | "replaced" | "pruned";
|
|
30
49
|
/** The skill folder name (the discovery key). */
|
|
31
50
|
readonly folderName: string;
|
|
32
|
-
/**
|
|
33
|
-
|
|
51
|
+
/**
|
|
52
|
+
* The package the skill came from. Absent on a `pruned` entry: a stale link
|
|
53
|
+
* records only a target path, and the package that installed it is precisely
|
|
54
|
+
* the one that no longer provides the skill — there is nothing honest left to
|
|
55
|
+
* attribute it to.
|
|
56
|
+
*/
|
|
57
|
+
readonly packageName?: string;
|
|
34
58
|
}
|
|
35
59
|
|
|
36
60
|
/** What currently occupies a candidate link path. */
|
|
@@ -80,9 +104,58 @@ function packageSkillDirs(root: string): string[] {
|
|
|
80
104
|
return out;
|
|
81
105
|
}
|
|
82
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Plan the removal of the links a package has since dropped.
|
|
109
|
+
*
|
|
110
|
+
* The install pass walks the packages, so it can only ever visit a skill that
|
|
111
|
+
* still exists; this pass walks the installed root, which is the ONLY place a
|
|
112
|
+
* dropped skill still shows up. An entry is pruned only when both hold: this run
|
|
113
|
+
* did not plan it, and it is a symlink whose target is gone. Both halves matter —
|
|
114
|
+
*
|
|
115
|
+
* - a real (non-symlink) entry is a manually-installed skill, which the install
|
|
116
|
+
* pass already refuses to clobber (`skipped`) and which this pass must refuse
|
|
117
|
+
* just as firmly: "unplanned" is exactly what a hand-placed skill looks like;
|
|
118
|
+
* - a symlink whose target still resolves is someone's own link into a checkout
|
|
119
|
+
* this command knows nothing about. Unplanned does not make it garbage, and an
|
|
120
|
+
* update that silently ate it would be a worse bug than the dangling link.
|
|
121
|
+
*
|
|
122
|
+
* A broken target, by contrast, cannot be anything but debris: nothing can read
|
|
123
|
+
* it, and re-creating it is a matter of re-running the update that installed it
|
|
124
|
+
* (which is also what this prune's undo does).
|
|
125
|
+
*
|
|
126
|
+
* @param dest - The installed-skills root.
|
|
127
|
+
* @param planned - Every folder name the install pass planned, whatever action.
|
|
128
|
+
* @returns One `pruned` action per stale link, for the plan and its preview.
|
|
129
|
+
* @note Impure — reads the installed root and stats each entry's target.
|
|
130
|
+
*/
|
|
131
|
+
function planStaleLinkPrunes(
|
|
132
|
+
dest: string,
|
|
133
|
+
planned: ReadonlySet<string>,
|
|
134
|
+
): SkillLinkAction[] {
|
|
135
|
+
let names: string[];
|
|
136
|
+
try {
|
|
137
|
+
names = readdirSync(dest);
|
|
138
|
+
} catch {
|
|
139
|
+
return []; // No installed root — nothing was ever installed to go stale.
|
|
140
|
+
}
|
|
141
|
+
const out: SkillLinkAction[] = [];
|
|
142
|
+
for (const folderName of names) {
|
|
143
|
+
if (planned.has(folderName)) continue;
|
|
144
|
+
const linkPath = resolve(dest, folderName);
|
|
145
|
+
const state = linkState(linkPath);
|
|
146
|
+
if (state.kind !== "symlink") continue;
|
|
147
|
+
// A relative target is stored relative to the link's OWN directory, which
|
|
148
|
+
// for an entry of the installed root is that root itself.
|
|
149
|
+
if (existsSync(resolve(dest, state.target))) continue;
|
|
150
|
+
out.push({ target: state.target, linkPath, action: "pruned", folderName });
|
|
151
|
+
}
|
|
152
|
+
return out;
|
|
153
|
+
}
|
|
154
|
+
|
|
83
155
|
/**
|
|
84
156
|
* Plan the symlink actions that install each resolved package's `skills/*` into
|
|
85
|
-
* the installed-skills discovery root
|
|
157
|
+
* the installed-skills discovery root, then the removals that retire the links
|
|
158
|
+
* a package has since dropped. First-seen wins on a folder-name clash
|
|
86
159
|
* across packages. A real (non-symlink) entry at the link path is left untouched
|
|
87
160
|
* (`skipped`) so a manually-installed skill is never clobbered.
|
|
88
161
|
*
|
|
@@ -120,5 +193,9 @@ export function planSkillInstall(
|
|
|
120
193
|
});
|
|
121
194
|
}
|
|
122
195
|
}
|
|
196
|
+
// `seen` is every folder name this run planned — the `skipped` ones included,
|
|
197
|
+
// so a name a package still provides is never a prune candidate even when the
|
|
198
|
+
// install pass decided to leave its entry alone.
|
|
199
|
+
actions.push(...planStaleLinkPrunes(dest, seen));
|
|
123
200
|
return actions;
|
|
124
201
|
}
|
|
@@ -5,18 +5,19 @@
|
|
|
5
5
|
*
|
|
6
6
|
* - Preview (CLI `--dry-run`, or MCP without `confirm`): NETWORK-FREE. It reads
|
|
7
7
|
* only the config, then hands back a plan-only Task listing the refs it would
|
|
8
|
-
* resolve+build and the
|
|
8
|
+
* resolve+build and the pointer it would write — no git fetch, no compile, no
|
|
9
9
|
* cache write. This is what a dry-run / agent "preview" must be: side-effect
|
|
10
10
|
* free and offline-safe.
|
|
11
|
-
* - Real execution: the heavy work — resolve every configured
|
|
11
|
+
* - Real execution: the heavy work — resolve every configured pack (git
|
|
12
12
|
* clone/fetch, file verify, npm resolve), then build the ONE combined
|
|
13
13
|
* content-addressed pack — runs eagerly (it is not expressible as a task
|
|
14
14
|
* effect: the effect set is fs + exec, and the in-process compile is not an
|
|
15
|
-
* effect at all). The returned Task models the
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
15
|
+
* effect at all). The returned Task models the mutations: the active-pack
|
|
16
|
+
* pointer write (undo restores or removes the prior pointer) and the package
|
|
17
|
+
* skill symlinks.
|
|
18
|
+
*
|
|
19
|
+
* Pinning a revision is the ref's job, not a flag's: put a SHA in the source
|
|
20
|
+
* (`git+https://…#<sha>`) and every update resolves to exactly that commit.
|
|
20
21
|
*/
|
|
21
22
|
|
|
22
23
|
import {
|
|
@@ -29,29 +30,25 @@ import {
|
|
|
29
30
|
type Task,
|
|
30
31
|
writeFile,
|
|
31
32
|
} from "@canonical/task";
|
|
32
|
-
import {
|
|
33
|
-
import
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
import { VERSION } from "../../constants.js";
|
|
34
|
+
import { cliRecovery, PragmaError } from "../../kernel/error/index.js";
|
|
35
|
+
// DIRECT LEAF IMPORT, not `graphpack/index.js`. The barrel re-exports
|
|
36
|
+
// `embedded.ts`, which statically imports the ~1.9 MB generated pack — and
|
|
37
|
+
// with per-file `tsc` output ESM evaluates that re-export when this module
|
|
38
|
+
// loads. `sources update` builds a USER pack; it must not pay the embedded
|
|
39
|
+
// pack's cost to do it.
|
|
36
40
|
import { buildPack } from "../../kernel/runtime/graphpack/build.js";
|
|
37
|
-
import {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
serializeLock,
|
|
41
|
-
} from "../../kernel/runtime/lock.js";
|
|
42
|
-
import { LOCK_BASENAME, lockPath } from "../../kernel/runtime/paths.js";
|
|
43
|
-
import type { PackageRef } from "../../kernel/runtime/refs/parseRef.js";
|
|
44
|
-
import {
|
|
45
|
-
parsePackageEntry,
|
|
46
|
-
redactUrl,
|
|
47
|
-
} from "../../kernel/runtime/refs/parseRef.js";
|
|
41
|
+
import type { PragmaRuntime } from "../../kernel/runtime/index.js";
|
|
42
|
+
import { activePackPath, readActivePack } from "../../kernel/runtime/paths.js";
|
|
43
|
+
import type { PackageRef } from "../../kernel/runtime/refs/index.js";
|
|
48
44
|
import {
|
|
49
45
|
detectPrefixClashes,
|
|
50
46
|
harvestPrefixes,
|
|
47
|
+
parsePackDeclaration,
|
|
51
48
|
type ResolvedPackage,
|
|
49
|
+
redactUrl,
|
|
52
50
|
resolvePackage,
|
|
53
|
-
} from "../../kernel/runtime/refs/
|
|
54
|
-
import type { PragmaRuntime } from "../../kernel/runtime/types.js";
|
|
51
|
+
} from "../../kernel/runtime/refs/index.js";
|
|
55
52
|
import { installedSkillsDir } from "../skill/discover.js";
|
|
56
53
|
import { planSkillInstall } from "./installSkills.js";
|
|
57
54
|
import type { SourcesUpdateData } from "./types.js";
|
|
@@ -67,17 +64,43 @@ const CORE_PREFIXES: Readonly<Record<string, string>> = {
|
|
|
67
64
|
dcterms: "http://purl.org/dc/terms/",
|
|
68
65
|
};
|
|
69
66
|
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
/**
|
|
68
|
+
* The prefix map a pack is built with: core < the packs' own `@prefix` < config.
|
|
69
|
+
*
|
|
70
|
+
* A resolved package's own declarations are harvested from its TTL (ke does not
|
|
71
|
+
* fold parsed-Turtle prefixes into `store.prefixes`) and merged beneath config
|
|
72
|
+
* so the index compacts pack URIs to `pfx:Local` — the FROZEN `{name,type}`
|
|
73
|
+
* token contract — while config still wins any clash. The merged map is
|
|
74
|
+
* persisted in the manifest, so boot reads the same names.
|
|
75
|
+
*
|
|
76
|
+
* Exported because the bundler (`scripts/bundle.ts`) compiles the embedded pack
|
|
77
|
+
* through this exact precedence. If the two pipelines computed prefixes
|
|
78
|
+
* separately, the embed could compact entities differently from what the SAME
|
|
79
|
+
* config produces on a user's machine — a silent divergence in entity names.
|
|
80
|
+
*
|
|
81
|
+
* @param inputs - The resolved packages' labelled RDF sources.
|
|
82
|
+
* @param configPrefixes - The config layer's `prefixes`, if any.
|
|
83
|
+
* @returns The merged prefix map to build with.
|
|
84
|
+
*/
|
|
85
|
+
export function buildPackPrefixes(
|
|
86
|
+
inputs: readonly { readonly content: string }[],
|
|
87
|
+
configPrefixes: Readonly<Record<string, string>> | undefined,
|
|
88
|
+
): Record<string, string> {
|
|
89
|
+
return {
|
|
90
|
+
...CORE_PREFIXES,
|
|
91
|
+
...harvestPrefixes(inputs),
|
|
92
|
+
...(configPrefixes ?? {}),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
72
95
|
|
|
73
96
|
/**
|
|
74
97
|
* Build the NETWORK-FREE preview plan for `sources update`.
|
|
75
98
|
*
|
|
76
99
|
* A plan-only Task: it reads the config to list the refs a real update would
|
|
77
|
-
* resolve and build, then models the
|
|
78
|
-
* as effects the dry-run interpreter can describe WITHOUT running them.
|
|
79
|
-
* no compile, no cache write — so `--dry-run` and an MCP plan-first call
|
|
80
|
-
* offline-safe. Config refs are parsed (a cheap, offline validity check) but
|
|
100
|
+
* resolve and build, then models the project mutation (the active-pack pointer
|
|
101
|
+
* write) as effects the dry-run interpreter can describe WITHOUT running them.
|
|
102
|
+
* No git, no compile, no cache write — so `--dry-run` and an MCP plan-first call
|
|
103
|
+
* are offline-safe. Config refs are parsed (a cheap, offline validity check) but
|
|
81
104
|
* never resolved.
|
|
82
105
|
*
|
|
83
106
|
* @param runtime - The per-invocation runtime.
|
|
@@ -87,57 +110,51 @@ async function buildUpdatePlan(
|
|
|
87
110
|
runtime: PragmaRuntime,
|
|
88
111
|
): Promise<Task<SourcesUpdateData>> {
|
|
89
112
|
const layers = await runtime.loadConfig();
|
|
90
|
-
const entries = layers.config.
|
|
91
|
-
const refs = entries.map(
|
|
92
|
-
const path = lockPath(runtime.cwd);
|
|
113
|
+
const entries = layers.config.packs ?? [];
|
|
114
|
+
const refs = entries.map(parsePackDeclaration);
|
|
93
115
|
|
|
94
116
|
const data: SourcesUpdateData = {
|
|
95
117
|
contentHash: "",
|
|
96
118
|
reused: false,
|
|
97
|
-
lockPath: path,
|
|
98
|
-
packs: refs.map((ref) => ({ name: ref.pkg, resolved: "", sourceCount: 0 })),
|
|
99
|
-
};
|
|
100
|
-
// A representative (never-written) lock, so the previewed write shows a
|
|
101
|
-
// plausible shape/size. Placeholders make clear nothing was resolved.
|
|
102
|
-
const previewLock: PragmaLock = {
|
|
103
|
-
version: 1,
|
|
104
|
-
contentHash: "(resolved on execute)",
|
|
105
119
|
packs: refs.map((ref) => ({
|
|
106
120
|
name: ref.pkg,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
121
|
+
resolved: "",
|
|
122
|
+
sourceCount: 0,
|
|
123
|
+
storyCount: 0,
|
|
110
124
|
})),
|
|
111
125
|
};
|
|
112
|
-
const previewContent = serializeLock(previewLock);
|
|
113
126
|
|
|
114
127
|
return gen(function* () {
|
|
115
128
|
yield* $(
|
|
116
129
|
info(
|
|
117
130
|
refs.length > 0
|
|
118
|
-
? `Resolve and build ${refs.length}
|
|
119
|
-
: "No
|
|
131
|
+
? `Resolve and build ${refs.length} pack(s): ${refs.map((ref) => ref.source).join(", ")}`
|
|
132
|
+
: "No packs configured — the embedded pack answers store reads",
|
|
120
133
|
),
|
|
121
134
|
);
|
|
122
|
-
// The
|
|
123
|
-
|
|
135
|
+
// The project mutation, previewed (dry-run never executes it). The content
|
|
136
|
+
// is a placeholder: the real hash only exists once the build has run.
|
|
137
|
+
yield* $(
|
|
138
|
+
writeFile(activePackPath(runtime.cwd), "(the pack hash, on execute)"),
|
|
139
|
+
);
|
|
124
140
|
return data;
|
|
125
141
|
});
|
|
126
142
|
}
|
|
127
143
|
|
|
128
144
|
/**
|
|
129
|
-
* Resolve, build, and produce the
|
|
145
|
+
* Resolve, build, and produce the pointer-writing Task — or, for a preview, the
|
|
130
146
|
* network-free plan.
|
|
131
147
|
*
|
|
132
148
|
* @param runtime - The per-invocation runtime.
|
|
133
|
-
* @param
|
|
134
|
-
*
|
|
149
|
+
* @param skipInvalid - Drop sources that fail to parse (warning about each)
|
|
150
|
+
* rather than failing the whole update.
|
|
151
|
+
* @returns A Task that points the project at the built pack and returns the
|
|
152
|
+
* update result.
|
|
135
153
|
* @note Impure — resolves packages (may hit git) and builds the pack eagerly,
|
|
136
154
|
* UNLESS `runtime.mutation.preview` is set, in which case it stays offline.
|
|
137
155
|
*/
|
|
138
156
|
export async function buildUpdateTask(
|
|
139
157
|
runtime: PragmaRuntime,
|
|
140
|
-
frozen: boolean,
|
|
141
158
|
skipInvalid = false,
|
|
142
159
|
): Promise<Task<SourcesUpdateData>> {
|
|
143
160
|
if (runtime.mutation?.preview) return buildUpdatePlan(runtime);
|
|
@@ -149,75 +166,80 @@ export async function buildUpdateTask(
|
|
|
149
166
|
const verbose = runtime.globalFlags.verbose;
|
|
150
167
|
|
|
151
168
|
const layers = await runtime.loadConfig();
|
|
152
|
-
const entries = layers.config.
|
|
153
|
-
const
|
|
154
|
-
const priorContent = existing ? serializeLock(existing) : undefined;
|
|
169
|
+
const entries = layers.config.packs ?? [];
|
|
170
|
+
const priorHash = readActivePack(runtime.cwd);
|
|
155
171
|
|
|
156
|
-
const resolved: ResolvedPackage[]
|
|
172
|
+
const resolved: (ResolvedPackage & { readonly kind: PackageRef["kind"] })[] =
|
|
173
|
+
[];
|
|
157
174
|
for (const entry of entries) {
|
|
158
|
-
const ref =
|
|
175
|
+
const ref = parsePackDeclaration(entry);
|
|
159
176
|
report?.(resolveProgress(ref));
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
await resolvePackage(ref, {
|
|
163
|
-
|
|
164
|
-
frozen,
|
|
165
|
-
pinned: pinned?.resolved,
|
|
166
|
-
}),
|
|
167
|
-
);
|
|
177
|
+
resolved.push({
|
|
178
|
+
kind: ref.kind,
|
|
179
|
+
...(await resolvePackage(ref, { cwd: runtime.cwd })),
|
|
180
|
+
});
|
|
168
181
|
}
|
|
169
182
|
|
|
170
|
-
// Prefix precedence: core < pack < config. A resolved package's own
|
|
171
|
-
// `@prefix` declarations are harvested from its TTL and merged beneath config
|
|
172
|
-
// so the index compacts pack URIs to `pfx:Local` (the FROZEN {name,type}
|
|
173
|
-
// token contract); config still wins any clash. The merged map is persisted
|
|
174
|
-
// in the manifest, so boot reads the same names.
|
|
175
183
|
const inputs = resolved.flatMap((pkg) => pkg.sources);
|
|
184
|
+
// The packages' own `stories/*.json`, carried into the pack verbatim (see
|
|
185
|
+
// graphpack/types.STORIES_FILE). Raw text: nothing interprets them here.
|
|
186
|
+
const stories = resolved.flatMap((pkg) => pkg.stories);
|
|
176
187
|
|
|
177
|
-
// Refuse to
|
|
178
|
-
// configured
|
|
188
|
+
// Refuse to build an empty store (A4). A package that ships no `.ttl` (or no
|
|
189
|
+
// configured packs at all) would build a 0-triple pack whose empty
|
|
179
190
|
// `data.nq` fails the completeness gate — so the "successful" update boots to
|
|
180
191
|
// a PERMANENT `STORE_UNAVAILABLE` loop. Fail loudly here, leaving the embedded
|
|
181
|
-
//
|
|
192
|
+
// pack (or the prior build) answering reads, instead of pointing at that one.
|
|
182
193
|
if (inputs.length === 0) {
|
|
183
194
|
throw PragmaError.configError(
|
|
184
195
|
entries.length === 0
|
|
185
|
-
? "No
|
|
186
|
-
: `The ${entries.length} configured
|
|
196
|
+
? "No packs are configured, so there are no sources to build a store from. The embedded pack answers reads until you add a pack."
|
|
197
|
+
: `The ${entries.length} configured pack(s) resolved 0 RDF sources (no definitions/**.ttl or data/**.ttl). Refusing to build an empty store.`,
|
|
187
198
|
{
|
|
188
199
|
recovery: cliRecovery(
|
|
189
|
-
|
|
190
|
-
"Add a
|
|
200
|
+
"sources update --verbose",
|
|
201
|
+
"Add a pack that ships `.ttl` under definitions/ or data/, then re-run.",
|
|
191
202
|
),
|
|
192
203
|
},
|
|
193
204
|
);
|
|
194
205
|
}
|
|
195
206
|
|
|
196
|
-
const prefixes =
|
|
197
|
-
...CORE_PREFIXES,
|
|
198
|
-
...harvestPrefixes(inputs),
|
|
199
|
-
...(layers.config.prefixes ?? {}),
|
|
200
|
-
};
|
|
207
|
+
const prefixes = buildPackPrefixes(inputs, layers.config.prefixes);
|
|
201
208
|
|
|
202
209
|
// Warn on conflicting `@prefix` declarations across packages (A5): last-wins
|
|
203
210
|
// is silent otherwise, compacting the losing package's URIs to the wrong
|
|
204
211
|
// prefix. Display-only, so a warning (not a hard failure) is the right call.
|
|
205
212
|
for (const clash of detectPrefixClashes(inputs)) {
|
|
206
213
|
report?.(
|
|
207
|
-
`Prefix "${clash.label}:" is declared with conflicting IRIs across
|
|
214
|
+
`Prefix "${clash.label}:" is declared with conflicting IRIs across packs (${clash.iris.join(" vs ")}); last wins, so some entities may compact to the wrong prefix.`,
|
|
208
215
|
);
|
|
209
216
|
}
|
|
210
217
|
|
|
211
218
|
report?.(`Building store from ${inputs.length} source(s)`);
|
|
212
219
|
if (verbose) for (const input of inputs) report?.(` parse ${input.path}`);
|
|
220
|
+
if (stories.length > 0)
|
|
221
|
+
report?.(`Carrying ${stories.length} pack read story file(s)`);
|
|
213
222
|
|
|
214
223
|
// Build the pack. On a parse/build failure, classify it as a NAMED data error
|
|
215
|
-
// (U6) — not INTERNAL_ERROR's "
|
|
224
|
+
// (U6) — not INTERNAL_ERROR's "report this issue" — identifying the
|
|
216
225
|
// offending package source, since ke's parser error carries only line/column.
|
|
217
226
|
// With `--skip-invalid`, drop the unparseable sources (warning LOUDLY about
|
|
218
227
|
// each — never a silent partial graph) and build from the rest instead of
|
|
219
228
|
// failing the whole update.
|
|
220
|
-
|
|
229
|
+
// `<name>@<kind>:<resolved>` — the SAME provenance label the bundler writes
|
|
230
|
+
// for the embed, so the manifest field means one thing whoever built the pack,
|
|
231
|
+
// and `sources status` / `doctor` can still answer "which revision is my store
|
|
232
|
+
// built from?" now that no lock records it. A `file:` pack resolves to a local
|
|
233
|
+
// PATH rather than a revision, so it contributes its name alone: a machine
|
|
234
|
+
// path is not provenance, and `sources status` already lists the ref.
|
|
235
|
+
const sourceRef =
|
|
236
|
+
resolved
|
|
237
|
+
.map((pkg) =>
|
|
238
|
+
pkg.kind === "file"
|
|
239
|
+
? pkg.name
|
|
240
|
+
: `${pkg.name}@${pkg.kind}:${pkg.resolved}`,
|
|
241
|
+
)
|
|
242
|
+
.join(", ") || "embedded";
|
|
221
243
|
let built: Awaited<ReturnType<typeof buildPack>>;
|
|
222
244
|
try {
|
|
223
245
|
built = await buildPack(inputs, {
|
|
@@ -225,6 +247,7 @@ export async function buildUpdateTask(
|
|
|
225
247
|
version: VERSION,
|
|
226
248
|
sourceRef,
|
|
227
249
|
prefixes,
|
|
250
|
+
stories,
|
|
228
251
|
});
|
|
229
252
|
} catch (error) {
|
|
230
253
|
if (!skipInvalid) throw await classifySourceBuildError(error, inputs);
|
|
@@ -241,10 +264,10 @@ export async function buildUpdateTask(
|
|
|
241
264
|
);
|
|
242
265
|
if (usableInputs.length === 0)
|
|
243
266
|
throw PragmaError.configError(
|
|
244
|
-
`
|
|
267
|
+
`None of the ${inputs.length} configured source(s) can be parsed — nothing to build.`,
|
|
245
268
|
{
|
|
246
269
|
recovery: cliRecovery(
|
|
247
|
-
|
|
270
|
+
"sources update --verbose",
|
|
248
271
|
"Fix the reported sources, then re-run.",
|
|
249
272
|
),
|
|
250
273
|
},
|
|
@@ -256,11 +279,8 @@ export async function buildUpdateTask(
|
|
|
256
279
|
sourceRef,
|
|
257
280
|
// Re-harvest prefixes from only the sources that survived, so a dropped
|
|
258
281
|
// file's declarations don't skew compaction.
|
|
259
|
-
prefixes:
|
|
260
|
-
|
|
261
|
-
...harvestPrefixes(usableInputs),
|
|
262
|
-
...(layers.config.prefixes ?? {}),
|
|
263
|
-
},
|
|
282
|
+
prefixes: buildPackPrefixes(usableInputs, layers.config.prefixes),
|
|
283
|
+
stories,
|
|
264
284
|
});
|
|
265
285
|
} catch (rebuildError) {
|
|
266
286
|
throw await classifySourceBuildError(rebuildError, usableInputs);
|
|
@@ -270,78 +290,62 @@ export async function buildUpdateTask(
|
|
|
270
290
|
`${built.reused ? "Reused" : "Built"} store ${built.contentHash.slice(0, 12)}`,
|
|
271
291
|
);
|
|
272
292
|
|
|
273
|
-
// Refuse
|
|
274
|
-
//
|
|
275
|
-
//
|
|
276
|
-
// as a data error rather than a silent "success". (A manifest
|
|
277
|
-
// triple count is left alone — `undefined` never trips this.)
|
|
293
|
+
// Refuse a 0-triple build (A4): non-empty sources can still parse to no
|
|
294
|
+
// triples (e.g. comment-only TTL, or a file of only `@prefix` lines). Pointing
|
|
295
|
+
// the project at an empty pack boots to the same `STORE_UNAVAILABLE` loop, so
|
|
296
|
+
// treat it as a data error rather than a silent "success". (A manifest
|
|
297
|
+
// predating the triple count is left alone — `undefined` never trips this.)
|
|
278
298
|
if (built.manifest.tripleCount === 0) {
|
|
279
299
|
throw PragmaError.configError(
|
|
280
|
-
`The configured sources parsed to 0 RDF triples, so the store would be empty. Refusing to
|
|
300
|
+
`The configured sources parsed to 0 RDF triples, so the store would be empty. Refusing to build an empty store.`,
|
|
281
301
|
{
|
|
282
302
|
recovery: cliRecovery(
|
|
283
|
-
|
|
284
|
-
"Check that the
|
|
303
|
+
"sources update --verbose",
|
|
304
|
+
"Check that the pack sources actually contain RDF triples, then re-run.",
|
|
285
305
|
),
|
|
286
306
|
},
|
|
287
307
|
);
|
|
288
308
|
}
|
|
289
309
|
|
|
290
|
-
const
|
|
291
|
-
const lock: PragmaLock = {
|
|
292
|
-
version: 1,
|
|
293
|
-
contentHash: built.contentHash,
|
|
294
|
-
packs: resolved.map((pkg) => {
|
|
295
|
-
const prev = existing?.packs.find((entry) => entry.name === pkg.name);
|
|
296
|
-
// Preserve the prior `resolvedAt` when nothing actually changed — under
|
|
297
|
-
// --frozen (re-pinned to the same revision) AND on a plain re-run that
|
|
298
|
-
// resolves the IDENTICAL revision from the same source. Otherwise every
|
|
299
|
-
// `sources update` stamped a fresh timestamp and rewrote the lock, dirtying
|
|
300
|
-
// the git tree on a no-op run (L1). A moved revision still restamps.
|
|
301
|
-
const reproducible =
|
|
302
|
-
prev !== undefined &&
|
|
303
|
-
(frozen ||
|
|
304
|
-
(prev.resolved === pkg.resolved && prev.source === pkg.source));
|
|
305
|
-
return {
|
|
306
|
-
name: pkg.name,
|
|
307
|
-
source: pkg.source,
|
|
308
|
-
resolved: pkg.resolved,
|
|
309
|
-
resolvedAt: reproducible && prev ? prev.resolvedAt : now,
|
|
310
|
-
};
|
|
311
|
-
}),
|
|
312
|
-
};
|
|
313
|
-
const newContent = serializeLock(lock);
|
|
314
|
-
const path = lockPath(runtime.cwd);
|
|
315
|
-
|
|
310
|
+
const path = activePackPath(runtime.cwd);
|
|
316
311
|
const data: SourcesUpdateData = {
|
|
317
312
|
contentHash: built.contentHash,
|
|
318
313
|
reused: built.reused,
|
|
319
|
-
lockPath: path,
|
|
320
314
|
packs: resolved.map((pkg) => ({
|
|
321
315
|
name: pkg.name,
|
|
322
316
|
resolved: pkg.resolved,
|
|
323
317
|
sourceCount: pkg.sources.length,
|
|
318
|
+
storyCount: pkg.stories.length,
|
|
324
319
|
})),
|
|
325
320
|
};
|
|
326
321
|
|
|
327
322
|
const undo =
|
|
328
|
-
|
|
329
|
-
? writeFile(path, priorContent)
|
|
330
|
-
: deleteFile(path);
|
|
323
|
+
priorHash !== undefined ? writeFile(path, priorHash) : deleteFile(path);
|
|
331
324
|
|
|
332
325
|
// Install package-provided skills (U10): symlink each resolved package's
|
|
333
326
|
// `skills/*` into the installed-skills root, so `skill list` / `setup skills`
|
|
334
|
-
// see them after an update
|
|
335
|
-
//
|
|
336
|
-
|
|
337
|
-
|
|
327
|
+
// see them after an update — and RETIRE the links of skills those packages
|
|
328
|
+
// have since dropped, which the same plan reports as `pruned`. Kept in this
|
|
329
|
+
// Task (reversible: a created link carries an unlink undo, a pruned one a
|
|
330
|
+
// re-link undo) so `sources update --undo` restores the root as it was.
|
|
331
|
+
//
|
|
332
|
+
// The two are split, not counted together: a prune is a deletion, so folding
|
|
333
|
+
// it into "Installing N skill(s)" would report a removal as an install.
|
|
334
|
+
const skillPlan = planSkillInstall(resolved);
|
|
335
|
+
const skillLinks = skillPlan.filter(
|
|
336
|
+
(link) => link.action === "created" || link.action === "replaced",
|
|
338
337
|
);
|
|
338
|
+
const staleLinks = skillPlan.filter((link) => link.action === "pruned");
|
|
339
339
|
if (skillLinks.length > 0)
|
|
340
340
|
report?.(`Installing ${skillLinks.length} skill(s)`);
|
|
341
|
+
if (staleLinks.length > 0)
|
|
342
|
+
report?.(
|
|
343
|
+
`Removing ${staleLinks.length} skill link(s) no longer provided by any package`,
|
|
344
|
+
);
|
|
341
345
|
|
|
342
|
-
report?.(`
|
|
346
|
+
report?.(`Pointing ${runtime.cwd} at pack ${built.contentHash.slice(0, 12)}`);
|
|
343
347
|
return gen(function* () {
|
|
344
|
-
yield* $(writeFile(path,
|
|
348
|
+
yield* $(writeFile(path, built.contentHash, { undo }));
|
|
345
349
|
if (skillLinks.length > 0) {
|
|
346
350
|
yield* $(mkdir(installedSkillsDir(), true));
|
|
347
351
|
for (const link of skillLinks) {
|
|
@@ -353,6 +357,25 @@ export async function buildUpdateTask(
|
|
|
353
357
|
);
|
|
354
358
|
}
|
|
355
359
|
}
|
|
360
|
+
// No `mkdir` guard here: a stale link can only have been enumerated FROM
|
|
361
|
+
// the installed root, so the root necessarily exists.
|
|
362
|
+
//
|
|
363
|
+
// The undo re-creates the link exactly as found — dangling target and all —
|
|
364
|
+
// because undo's job is to restore the prior state, not to improve on it. It
|
|
365
|
+
// clears the path first because the undo interpreter MOCKS forward effects
|
|
366
|
+
// when collecting: the delete above may never have run, and `fs.symlink`
|
|
367
|
+
// refuses a path that already exists. Same delete-then-link shape the
|
|
368
|
+
// `replaced` branch above uses, for the same reason.
|
|
369
|
+
for (const stale of staleLinks) {
|
|
370
|
+
yield* $(
|
|
371
|
+
deleteFile(stale.linkPath, {
|
|
372
|
+
undo: gen(function* () {
|
|
373
|
+
yield* $(deleteFile(stale.linkPath));
|
|
374
|
+
yield* $(symlink(stale.target, stale.linkPath));
|
|
375
|
+
}),
|
|
376
|
+
}),
|
|
377
|
+
);
|
|
378
|
+
}
|
|
356
379
|
return data;
|
|
357
380
|
});
|
|
358
381
|
}
|
|
@@ -394,12 +417,12 @@ export async function classifySourceBuildError(
|
|
|
394
417
|
const culprit = await isolateBadSource(inputs);
|
|
395
418
|
const detail = culprit?.message ?? parserMessage;
|
|
396
419
|
const where = culprit
|
|
397
|
-
? `
|
|
398
|
-
: "The configured
|
|
420
|
+
? `Pack source "${culprit.path}" cannot be parsed`
|
|
421
|
+
: "The configured packs cannot be built into a store";
|
|
399
422
|
return PragmaError.configError(`${where}: ${detail}`, {
|
|
400
423
|
recovery: cliRecovery(
|
|
401
|
-
|
|
402
|
-
"Re-run with --verbose to see each file as it parses. If a
|
|
424
|
+
"sources update --verbose",
|
|
425
|
+
"Re-run with --verbose to see each file as it parses. If a pack ships malformed RDF, report it to that pack's maintainer.",
|
|
403
426
|
),
|
|
404
427
|
});
|
|
405
428
|
}
|