@canonical/pragma-cli 0.34.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 +20 -22
- package/pragma.conf.ts +249 -60
- package/src/bin.ts +267 -82
- package/src/capabilities/block.parity.test.ts +6 -3
- 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 +25 -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.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 +6 -4
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +72 -27
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +59 -13
- 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 +18 -7
- package/src/capabilities/doctor/doctor.render.ts +43 -19
- package/src/capabilities/doctor/doctor.test.ts +123 -34
- package/src/capabilities/doctor/doctor.verb.ts +3 -3
- package/src/capabilities/doctor/runChecks.ts +62 -63
- package/src/capabilities/doctor/types.ts +20 -4
- package/src/capabilities/emptyRecovery.test.ts +13 -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 +5 -4
- package/src/capabilities/info/info.render.ts +1 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- 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/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -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 +396 -326
- 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 +223 -71
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- 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 +37 -5
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +7 -5
- 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 +84 -7
- package/src/capabilities/sources/runUpdate.ts +53 -21
- package/src/capabilities/sources/sources.test.ts +154 -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 +1 -1
- package/src/capabilities/surface.test.ts +134 -17
- 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 +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 +31 -1
- package/src/identity.test.ts +40 -25
- 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 +1 -1
- 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 +34 -26
- 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 +25 -2
- 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 +26 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +130 -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 +24 -5
- package/src/kernel/packs/resolveEntity.test.ts +213 -0
- package/src/kernel/packs/resolveEntity.ts +112 -18
- package/src/kernel/packs/runBodies.ts +2 -3
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +18 -1
- 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 +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +42 -3
- package/src/kernel/packs/types.ts +13 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +147 -12
- 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 +160 -3
- package/src/kernel/project/cli/dispatch.ts +222 -42
- 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 +13 -0
- package/src/kernel/project/cli/rootHelp.ts +41 -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 +35 -9
- 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 +31 -1
- package/src/kernel/render/turtle.ts +222 -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 +248 -4
- package/src/testing/behavioral/docExamples.test.ts +14 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +2 -2
- 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.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.packageStories.test.ts +4 -4
- 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/cases/effectful.ts +3 -2
- package/src/testing/fixtures/blockGraph.ts +79 -0
- package/src/testing/fixtures/graph/canonical.ts +88 -2
- 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/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -10,6 +10,7 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
|
10
10
|
import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
|
|
11
11
|
import type {
|
|
12
12
|
CallToolResult,
|
|
13
|
+
Resource,
|
|
13
14
|
ServerCapabilities,
|
|
14
15
|
} from "@modelcontextprotocol/sdk/types.js";
|
|
15
16
|
import { buildServer } from "../../kernel/project/mcp/buildServer.js";
|
|
@@ -34,12 +35,29 @@ export interface McpHarness {
|
|
|
34
35
|
): Promise<Record<string, unknown>>;
|
|
35
36
|
/** List the registered tools. */
|
|
36
37
|
listTools(): Promise<ToolInfo[]>;
|
|
37
|
-
/**
|
|
38
|
-
|
|
38
|
+
/**
|
|
39
|
+
* List the resources exposed by the `{+uri}` template's list callback.
|
|
40
|
+
*
|
|
41
|
+
* The WHOLE wire entry (title, annotations, `_meta`, …), not a projection of
|
|
42
|
+
* it: the listing's cost and its navigability are both properties of what
|
|
43
|
+
* actually crosses the wire, and a helper that trimmed the entry would hide
|
|
44
|
+
* exactly the fields under test.
|
|
45
|
+
*/
|
|
46
|
+
listResources(): Promise<Resource[]>;
|
|
39
47
|
/** Read one resource by URI; returns the first content's parsed/raw text. */
|
|
40
48
|
readResource(uri: string): Promise<{ mimeType?: string; text: string }>;
|
|
41
|
-
/**
|
|
42
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Complete a resource-template variable against a partial value.
|
|
51
|
+
*
|
|
52
|
+
* Returns the full completion result — `total` and `hasMore` are derived by
|
|
53
|
+
* the SDK from the callback's array, so they are the only witness that a
|
|
54
|
+
* truncated result admits to being truncated.
|
|
55
|
+
*/
|
|
56
|
+
completeResource(partial: string): Promise<{
|
|
57
|
+
values: string[];
|
|
58
|
+
total?: number;
|
|
59
|
+
hasMore?: boolean;
|
|
60
|
+
}>;
|
|
43
61
|
/** The server capabilities negotiated at initialize (tools/resources/prompts). */
|
|
44
62
|
serverCapabilities(): ServerCapabilities | undefined;
|
|
45
63
|
/** The `serverInfo` the server introduced itself with at initialize. */
|
|
@@ -100,7 +118,7 @@ export async function projectMcp(
|
|
|
100
118
|
},
|
|
101
119
|
async listResources() {
|
|
102
120
|
const { resources } = await client.listResources();
|
|
103
|
-
return resources
|
|
121
|
+
return resources;
|
|
104
122
|
},
|
|
105
123
|
async readResource(uri) {
|
|
106
124
|
const result = await client.readResource({ uri });
|
|
@@ -117,7 +135,15 @@ export async function projectMcp(
|
|
|
117
135
|
ref: { type: "ref/resource", uri: "pragma:{+uri}" },
|
|
118
136
|
argument: { name: "uri", value: partial },
|
|
119
137
|
});
|
|
120
|
-
return
|
|
138
|
+
return {
|
|
139
|
+
values: result.completion.values,
|
|
140
|
+
...(result.completion.total === undefined
|
|
141
|
+
? {}
|
|
142
|
+
: { total: result.completion.total }),
|
|
143
|
+
...(result.completion.hasMore === undefined
|
|
144
|
+
? {}
|
|
145
|
+
: { hasMore: result.completion.hasMore }),
|
|
146
|
+
};
|
|
121
147
|
},
|
|
122
148
|
serverCapabilities() {
|
|
123
149
|
return client.getServerCapabilities();
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Test helper: spawn-and-CAPTURE the real `pragma`
|
|
2
|
+
* Test helper: spawn-and-CAPTURE the real `pragma` entry point.
|
|
3
3
|
*
|
|
4
4
|
* {@link measureCommand} (the perf helper) discards stdout/stderr — it only
|
|
5
5
|
* times spawns. This is the complementary helper for tests that need to READ
|
|
6
6
|
* what the process printed: the true end-to-end boundary (argv parsing,
|
|
7
|
-
* first-run, the
|
|
7
|
+
* first-run, the shipped entry point, real process exit codes).
|
|
8
8
|
*
|
|
9
9
|
* Kept THIN — most behavioral coverage should run in-process via
|
|
10
10
|
* `executeVerb`/`projectCli`/`projectMcp`; reserve `runCli` for tests where the
|
|
@@ -18,9 +18,12 @@ import { tmpdir } from "node:os";
|
|
|
18
18
|
import { join } from "node:path";
|
|
19
19
|
import { fileURLToPath } from "node:url";
|
|
20
20
|
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
/**
|
|
22
|
+
* The shipped entry the perf `globalSetup` guarantees exists before tests run —
|
|
23
|
+
* the `bin` the published package points at, run the way a consumer runs it.
|
|
24
|
+
*/
|
|
25
|
+
const SHIPPED_ENTRY = fileURLToPath(
|
|
26
|
+
new URL("../../../dist/src/bin.js", import.meta.url),
|
|
24
27
|
);
|
|
25
28
|
|
|
26
29
|
/** The `bin.ts` entry point, for fast source-mode spawns (no rebuild). */
|
|
@@ -37,11 +40,12 @@ export interface RunCliOptions {
|
|
|
37
40
|
*/
|
|
38
41
|
readonly env?: Record<string, string | undefined>;
|
|
39
42
|
/**
|
|
40
|
-
* `"
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
+
* `"shipped"` (default) spawns `node dist/src/bin.js` — the true release
|
|
44
|
+
* boundary, exactly what a consumer's `pragma` runs. `"source"` spawns
|
|
45
|
+
* `bun src/bin.ts` — faster, no rebuild required, for journeys that do not
|
|
46
|
+
* test the shipped-entry boundary itself.
|
|
43
47
|
*/
|
|
44
|
-
readonly mode?: "
|
|
48
|
+
readonly mode?: "shipped" | "source";
|
|
45
49
|
/** Spawn timeout in milliseconds (default 20000). */
|
|
46
50
|
readonly timeoutMs?: number;
|
|
47
51
|
}
|
|
@@ -76,7 +80,7 @@ function seededXdgConfigHome(): string {
|
|
|
76
80
|
/**
|
|
77
81
|
* Spawn the real `pragma` CLI and capture its output.
|
|
78
82
|
*
|
|
79
|
-
* @param args - Argv passed to the
|
|
83
|
+
* @param args - Argv passed to the CLI (no `pragma`/runtime prefix).
|
|
80
84
|
* @param options - cwd, env overrides, mode, and timeout.
|
|
81
85
|
* @returns The captured stdout/stderr/exitCode/signal.
|
|
82
86
|
* @note Impure — spawns a child process.
|
|
@@ -85,17 +89,30 @@ export function runCli(
|
|
|
85
89
|
args: readonly string[],
|
|
86
90
|
options: RunCliOptions = {},
|
|
87
91
|
): RunCliResult {
|
|
88
|
-
const mode = options.mode ?? "
|
|
89
|
-
|
|
90
|
-
|
|
92
|
+
const mode = options.mode ?? "shipped";
|
|
93
|
+
// Both modes spawn a RUNTIME with an entry argument now — the built entry is
|
|
94
|
+
// emitted JavaScript, not a self-executing binary, so `node` names it.
|
|
95
|
+
const command = mode === "shipped" ? process.execPath : "bun";
|
|
96
|
+
const entry = mode === "shipped" ? SHIPPED_ENTRY : SOURCE_ENTRY;
|
|
97
|
+
const spawnArgs = [entry, ...args];
|
|
98
|
+
|
|
99
|
+
// Colour OFF by default: these tests assert on bytes, and nx exports
|
|
100
|
+
// FORCE_COLOR to its test tasks, so a spawned CLI colours its help even
|
|
101
|
+
// through a pipe — green locally, red in CI, for a difference no assertion
|
|
102
|
+
// meant to make. NO_COLOR is the one convention the style seam obeys
|
|
103
|
+
// unconditionally. FORCE_COLOR is DELETED rather than overridden: Bun warns
|
|
104
|
+
// on stderr when it sees both, and stderr is part of what is asserted.
|
|
105
|
+
// `options.env` still wins, so a test that wants colour asks for it.
|
|
106
|
+
const env: NodeJS.ProcessEnv = {
|
|
107
|
+
...process.env,
|
|
108
|
+
NO_COLOR: "1",
|
|
109
|
+
XDG_CONFIG_HOME: seededXdgConfigHome(),
|
|
110
|
+
};
|
|
111
|
+
delete env.FORCE_COLOR;
|
|
91
112
|
|
|
92
113
|
const result = spawnSync(command, spawnArgs, {
|
|
93
114
|
cwd: options.cwd,
|
|
94
|
-
env: {
|
|
95
|
-
...process.env,
|
|
96
|
-
XDG_CONFIG_HOME: seededXdgConfigHome(),
|
|
97
|
-
...options.env,
|
|
98
|
-
},
|
|
115
|
+
env: { ...env, ...options.env },
|
|
99
116
|
encoding: "utf-8",
|
|
100
117
|
timeout: options.timeoutMs ?? 20_000,
|
|
101
118
|
});
|
|
@@ -15,8 +15,19 @@ import {
|
|
|
15
15
|
} from "./budgets.js";
|
|
16
16
|
import { measureCommand, percentile, trimmedMean } from "./measure.js";
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
|
|
18
|
+
/**
|
|
19
|
+
* The shipped entry the perf globalSetup guarantees exists, spawned through
|
|
20
|
+
* `node` — which is what a consumer's `pragma` does, so node's own startup is
|
|
21
|
+
* inside every sample rather than excluded from it. The budgets below are
|
|
22
|
+
* ceilings on what a user waits, not on what a bundler produced.
|
|
23
|
+
*/
|
|
24
|
+
const NODE = process.execPath;
|
|
25
|
+
const ENTRY = fileURLToPath(
|
|
26
|
+
new URL("../../../dist/src/bin.js", import.meta.url),
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
/** Argv for one CLI invocation through the shipped entry. */
|
|
30
|
+
const cli = (...args: string[]): string[] => [ENTRY, ...args];
|
|
20
31
|
|
|
21
32
|
/** Fresh XDG dirs so spawned runs never touch real state (and first-run is isolated). */
|
|
22
33
|
const perfEnv = {
|
|
@@ -25,7 +36,7 @@ const perfEnv = {
|
|
|
25
36
|
};
|
|
26
37
|
|
|
27
38
|
/**
|
|
28
|
-
* Protected budget suite. Spawns the
|
|
39
|
+
* Protected budget suite. Spawns the shipped entry through `node`, discards
|
|
29
40
|
* warmups, and asserts median + p95 against the ceilings in budgets.ts. Given
|
|
30
41
|
* spawn-time variance, each spawn case retries.
|
|
31
42
|
*/
|
|
@@ -45,7 +56,7 @@ describe("perf budgets (PROTECTED)", () => {
|
|
|
45
56
|
});
|
|
46
57
|
|
|
47
58
|
it("pragma --help stays under budget", { retry: 2 }, () => {
|
|
48
|
-
const result = measureCommand(
|
|
59
|
+
const result = measureCommand(NODE, cli("--help"), {
|
|
49
60
|
runs: 15,
|
|
50
61
|
warmups: 3,
|
|
51
62
|
env: perfEnv,
|
|
@@ -55,7 +66,7 @@ describe("perf budgets (PROTECTED)", () => {
|
|
|
55
66
|
});
|
|
56
67
|
|
|
57
68
|
it("pragma __complete stays under budget", { retry: 3 }, () => {
|
|
58
|
-
const result = measureCommand(
|
|
69
|
+
const result = measureCommand(NODE, cli("__complete", "config"), {
|
|
59
70
|
runs: 30,
|
|
60
71
|
warmups: 5,
|
|
61
72
|
env: perfEnv,
|
|
@@ -77,8 +88,8 @@ describe("perf budgets (PROTECTED)", () => {
|
|
|
77
88
|
// dir → an empty walk, but it exercises the discoverSkills path per spawn;
|
|
78
89
|
// enforce the same robust statistic as the noun case.
|
|
79
90
|
const result = measureCommand(
|
|
80
|
-
|
|
81
|
-
|
|
91
|
+
NODE,
|
|
92
|
+
cli("__complete", "skill", "lookup", "do"),
|
|
82
93
|
{
|
|
83
94
|
runs: 30,
|
|
84
95
|
warmups: 5,
|
|
@@ -94,13 +105,13 @@ describe("perf budgets (PROTECTED)", () => {
|
|
|
94
105
|
|
|
95
106
|
it("warm store-backed verb stays under budget", { retry: 2 }, () => {
|
|
96
107
|
// __store-probe boots the embedded pack from its n-quads cache and queries
|
|
97
|
-
// it — the full store-backed verb cost
|
|
108
|
+
// it — the full store-backed verb cost through the shipped entry. The first
|
|
98
109
|
// spawn materializes the pack; warmups absorb it, then it is a cache hit.
|
|
99
110
|
// Note that with 9 kept samples a nearest-rank p95 IS the maximum (see
|
|
100
111
|
// BUDGETS.md's p95-stabilization section) — deliberately kept, because the
|
|
101
112
|
// honest statistic here is the one that catches real cost, and the ceiling
|
|
102
113
|
// is sized with a 1.25× margin over a projected p95 to absorb it.
|
|
103
|
-
const result = measureCommand(
|
|
114
|
+
const result = measureCommand(NODE, cli("__store-probe"), {
|
|
104
115
|
runs: 12,
|
|
105
116
|
warmups: 3,
|
|
106
117
|
env: {
|
|
@@ -1,29 +1,78 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Performance budgets for the
|
|
2
|
+
* Performance budgets for the shipped `pragma` entry.
|
|
3
3
|
*
|
|
4
4
|
* The ceilings the protected budget tests assert against. The surface
|
|
5
5
|
* covenant's designed target for `--help`/`__complete` is 50 ms; the day-1 perf
|
|
6
|
-
* spike (commit 6) found that unrealistic on the build hardware (cold
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* spike (commit 6) found that unrealistic on the build hardware (cold process
|
|
7
|
+
* start alone is ~45 ms here), so — per the plan — those ceilings are set to
|
|
8
|
+
* roughly 2× the measured median rather than silently weakening the target.
|
|
9
|
+
*
|
|
10
|
+
* A CEILING IS RELATIVE TO THE ARTIFACT IT WAS MEASURED ON. These were derived
|
|
11
|
+
* against a `bun build --compile` executable. The distribution now ships
|
|
12
|
+
* JavaScript that `node` executes, which costs roughly 2× on the fast paths, so
|
|
13
|
+
* a ceiling set at 2× the binary's median lands at the emit's median — where it
|
|
14
|
+
* cannot separate a regression from a slow runner. `__complete` proved that
|
|
15
|
+
* exactly: three CI attempts at 100.15, 100.20 and 100.37 ms against a 100 ms
|
|
16
|
+
* ceiling. Re-derived below on the same rule, against the artifact that now
|
|
17
|
+
* ships; the designed 50 ms target is recorded as unmet rather than quietly
|
|
18
|
+
* moved. {@link BUDGET_WARM_STORE_MS} is derived differently (from a projected
|
|
10
19
|
* p95, and it lands TIGHTER than 2× its median); its arithmetic is written out
|
|
11
20
|
* in full in BUDGETS.md, as are the measurements and environment for all of
|
|
12
21
|
* them.
|
|
13
22
|
*/
|
|
14
23
|
|
|
15
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* `pragma --help` ceiling (ms). Designed 50; the rule is 2× the measured median.
|
|
26
|
+
*
|
|
27
|
+
* Down from the provisional 220, which covered the create surface's eager
|
|
28
|
+
* registration imports on the capabilities barrel. Those are gone — the
|
|
29
|
+
* registered flag spellings are baked into `createSurface.generated.ts` at
|
|
30
|
+
* build time, the mount's adapter loads behind `CliProjection.prepare()`, and
|
|
31
|
+
* the bare-help path no longer loads Commander at all — and the lazy-graph
|
|
32
|
+
* guard in `lazy.test.ts` pins all three so the cost cannot creep back
|
|
33
|
+
* silently.
|
|
34
|
+
*
|
|
35
|
+
* MEASURED, paired: the pre-refactor tree and this one were each built and
|
|
36
|
+
* spawned alternately, 40 kept samples per cell, so drift on a shared box hits
|
|
37
|
+
* both arms. Median 74.6 → 64.7 ms; net of each arm's own `--version` control,
|
|
38
|
+
* the work this path does went 49.3 → 35.3 ms (−28%). 2 × 64.7 = 129.5, so
|
|
39
|
+
* 130 is the rule's own number rather than a number the rule tolerates. It is
|
|
40
|
+
* also where this path sat before the regression. BUDGETS.md carries the full
|
|
41
|
+
* table, the reference-box projection, and why this is the floor.
|
|
42
|
+
*/
|
|
16
43
|
export const BUDGET_HELP_MS = 130;
|
|
17
44
|
|
|
18
|
-
/**
|
|
19
|
-
|
|
45
|
+
/**
|
|
46
|
+
* `pragma __complete …` ceiling (ms). Designed 50 — **not met, and recorded as
|
|
47
|
+
* such**: the shipped entry cannot reach it, because node's own start is most
|
|
48
|
+
* of that number before pragma runs a line.
|
|
49
|
+
*
|
|
50
|
+
* Down from the provisional 220 for the same reason as {@link BUDGET_HELP_MS}:
|
|
51
|
+
* the eager create-surface imports both fast paths paid for are deferred, and
|
|
52
|
+
* completion additionally sheds Commander — nothing on the `__complete`
|
|
53
|
+
* closure imports it any more.
|
|
54
|
+
*
|
|
55
|
+
* MEASURED in the same paired run: median 79.1 → 69.2 ms for the noun case and
|
|
56
|
+
* 74.2 → 69.3 ms for the name-source case; net of the control, 53.7 → 39.7 ms
|
|
57
|
+
* and 48.9 → 39.8 ms.
|
|
58
|
+
*
|
|
59
|
+
* 2× the slower median is 138.5, BELOW this 150 — and it stays 150 anyway,
|
|
60
|
+
* because a ceiling is relative to the box as well as the artifact. This box's
|
|
61
|
+
* cold start is 25–30 ms against the reference box's 45.5; projecting the
|
|
62
|
+
* measured work onto the reference box gives a ~85 ms median, whose 2× is
|
|
63
|
+
* ~170. CI has already run this path at a ~100 ms trimmed mean. Cutting to 140
|
|
64
|
+
* on a local median would be deriving a ceiling on hardware the suite does not
|
|
65
|
+
* run on. Completion is typed interactively, so this stays the budget most
|
|
66
|
+
* worth defending — see BUDGETS.md for the arithmetic.
|
|
67
|
+
*/
|
|
68
|
+
export const BUDGET_COMPLETE_MS = 150;
|
|
20
69
|
|
|
21
70
|
/** Warm project-config (`pragma.config.ts`) load ceiling (ms). Cache hit is sub-ms. */
|
|
22
71
|
export const BUDGET_PROJECT_CONFIG_MS = 10;
|
|
23
72
|
|
|
24
73
|
/**
|
|
25
74
|
* Warm store-backed verb ceiling (ms) — a store boot from the cached n-quads
|
|
26
|
-
* dump plus a query,
|
|
75
|
+
* dump plus a query, through the shipped entry.
|
|
27
76
|
*
|
|
28
77
|
* Re-derived when the embed became the distribution's real 8 479-triple graph
|
|
29
78
|
* instead of a 23-triple sample. Netted against a `--version` control from the
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit pins for the committed-codegen CHECK seam (`scripts/codegen.ts`) —
|
|
3
|
+
* the mechanism behind two loop MAJORs: a gate's build must COMPARE the
|
|
4
|
+
* committed generated module and fail on staleness instead of silently
|
|
5
|
+
* repairing it before the PROTECTED drift guard (create.test.ts's
|
|
6
|
+
* projection-fidelity cell) reads it. The generator cell drives the EXPORTED
|
|
7
|
+
* generator with an injected `out` in a tmpdir — no spawn, no build, no repo
|
|
8
|
+
* write. The wiring cells pin the two halves the
|
|
9
|
+
* seam is made of and the fact that they MEET: the flag's VALUE (the
|
|
10
|
+
* exported GATE_BUILD_ENV) and its READER (the exported
|
|
11
|
+
* checkModeFromEnv). They do NOT pin the two CALL SITES — the gate
|
|
12
|
+
* spawn's `...GATE_BUILD_ENV` spread (perf/globalSetup.ts) and
|
|
13
|
+
* build.ts's `checkModeFromEnv(process.env)` read — which stay pinned by
|
|
14
|
+
* CONSTRUCTION: scripts/build.ts is executed by no test at all, and
|
|
15
|
+
* dropping the spread leaves every cell here green. A refactor that
|
|
16
|
+
* severs either call site still reverts gate builds to write mode
|
|
17
|
+
* silently; only a VALUE or READER change reddens.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
copyFileSync,
|
|
22
|
+
mkdtempSync,
|
|
23
|
+
readFileSync,
|
|
24
|
+
rmSync,
|
|
25
|
+
writeFileSync,
|
|
26
|
+
} from "node:fs";
|
|
27
|
+
import { tmpdir } from "node:os";
|
|
28
|
+
import { join } from "node:path";
|
|
29
|
+
import { fileURLToPath } from "node:url";
|
|
30
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
31
|
+
import {
|
|
32
|
+
checkModeFromEnv,
|
|
33
|
+
generateCreateSurface,
|
|
34
|
+
} from "../../../scripts/codegen.js";
|
|
35
|
+
import { GATE_BUILD_ENV } from "./globalSetup.js";
|
|
36
|
+
|
|
37
|
+
const SURFACE_COMMITTED = fileURLToPath(
|
|
38
|
+
new URL(
|
|
39
|
+
"../../capabilities/create/createSurface.generated.ts",
|
|
40
|
+
import.meta.url,
|
|
41
|
+
),
|
|
42
|
+
);
|
|
43
|
+
describe("the committed-codegen CHECK seam (scripts/codegen.ts)", () => {
|
|
44
|
+
let surfaceOut: string;
|
|
45
|
+
let dir: string;
|
|
46
|
+
|
|
47
|
+
beforeEach(() => {
|
|
48
|
+
dir = mkdtempSync(join(tmpdir(), "codegen-check-"));
|
|
49
|
+
surfaceOut = join(dir, "createSurface.generated.ts");
|
|
50
|
+
copyFileSync(SURFACE_COMMITTED, surfaceOut);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
afterEach(() => {
|
|
54
|
+
rmSync(dir, { recursive: true, force: true });
|
|
55
|
+
vi.restoreAllMocks();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("check mode over the committed bytes: green, nothing written, ZERO notices — the healthy-tree gate", () => {
|
|
59
|
+
// Seeded with the bytes git holds, check mode must compute NO change (this
|
|
60
|
+
// is also the healthy gate build's determinism: a fresh render equals the
|
|
61
|
+
// committed bytes), must never write — and must log NOTHING. The
|
|
62
|
+
// zero-notices half is what separates "byte-identical" from "tolerated".
|
|
63
|
+
const before = readFileSync(surfaceOut, "utf-8");
|
|
64
|
+
const log = vi.spyOn(console, "log").mockImplementation(() => {});
|
|
65
|
+
const surface = generateCreateSurface({ check: true, out: surfaceOut });
|
|
66
|
+
expect(surface.changed).toBe(false);
|
|
67
|
+
expect(surface.surfaced).toBeGreaterThan(0);
|
|
68
|
+
expect(log).not.toHaveBeenCalled();
|
|
69
|
+
expect(readFileSync(surfaceOut, "utf-8")).toBe(before);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it("check mode over STALE bytes: throws naming the module — and never repairs it", () => {
|
|
73
|
+
// The other arm of the seam — the one the gate exists for. Seed bytes
|
|
74
|
+
// that differ from a fresh render; check mode must FAIL loudly (naming
|
|
75
|
+
// the committed module and the repair) and must leave the seeded bytes
|
|
76
|
+
// untouched: a check that silently rewrote them would green the stale
|
|
77
|
+
// tree before the PROTECTED drift guard reads it.
|
|
78
|
+
const stale = "// stale committed projection\n";
|
|
79
|
+
writeFileSync(surfaceOut, stale);
|
|
80
|
+
expect(() =>
|
|
81
|
+
generateCreateSurface({ check: true, out: surfaceOut }),
|
|
82
|
+
).toThrowError(/createSurface\.generated\.ts is STALE[\s\S]*bun run build/);
|
|
83
|
+
expect(readFileSync(surfaceOut, "utf-8")).toBe(stale);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("write mode over STALE bytes repairs them to the committed render", () => {
|
|
87
|
+
// The developer path `bun run build` takes: the same seeded staleness,
|
|
88
|
+
// check off — the module is rewritten to exactly the bytes a fresh
|
|
89
|
+
// render produces (the committed generation this suite copied in).
|
|
90
|
+
const committed = readFileSync(SURFACE_COMMITTED, "utf-8");
|
|
91
|
+
writeFileSync(surfaceOut, "// stale committed projection\n");
|
|
92
|
+
const result = generateCreateSurface({ check: false, out: surfaceOut });
|
|
93
|
+
expect(result.changed).toBe(true);
|
|
94
|
+
expect(readFileSync(surfaceOut, "utf-8")).toBe(committed);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
describe("the CHECK seam's wiring (GATE_BUILD_ENV → checkModeFromEnv)", () => {
|
|
99
|
+
it("checkModeFromEnv: exactly the documented flag value flips a build into the gate's check", () => {
|
|
100
|
+
// The READ side of the seam, pinned: build.ts consumes this one-liner
|
|
101
|
+
// over its process.env, so a build enters check mode exactly when the
|
|
102
|
+
// flag is the string "1" — an ordinary developer env (no flag) and a
|
|
103
|
+
// flag EXPLICITLY set to any other value both stay in write mode,
|
|
104
|
+
// where `bun run build` repairs the committed artifacts. The
|
|
105
|
+
// third case is what makes "exactly" true: a predicate that merely
|
|
106
|
+
// tested for the key's presence, or accepted "0" as well, would pass
|
|
107
|
+
// the first two.
|
|
108
|
+
expect(checkModeFromEnv({ PRAGMA_BUILD_SKIP_DOCS: "1" })).toBe(true);
|
|
109
|
+
expect(checkModeFromEnv({})).toBe(false);
|
|
110
|
+
expect(checkModeFromEnv({ PRAGMA_BUILD_SKIP_DOCS: "0" })).toBe(false);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it("GATE_BUILD_ENV carries the check-mode flag — the gate spawn's env enters check mode", () => {
|
|
114
|
+
// The SET side of the seam, pinned against the read side: the exported
|
|
115
|
+
// constant IS the object the gate spawn spreads into its child env
|
|
116
|
+
// (perf/globalSetup.ts), and feeding it to checkModeFromEnv proves the
|
|
117
|
+
// VALUE and the READER meet — changing the flag's value, or renaming
|
|
118
|
+
// the key on either side, reddens here. What this cell does NOT see is
|
|
119
|
+
// the spawn's `...GATE_BUILD_ENV` spread itself: dropping that leaves
|
|
120
|
+
// every cell in this file green while gate builds silently revert to
|
|
121
|
+
// write mode (repairing the stale committed tree every drift guard
|
|
122
|
+
// exists to catch), so the call site stays pinned by construction.
|
|
123
|
+
expect(GATE_BUILD_ENV.PRAGMA_BUILD_SKIP_DOCS).toBe("1");
|
|
124
|
+
expect(checkModeFromEnv(GATE_BUILD_ENV)).toBe(true);
|
|
125
|
+
});
|
|
126
|
+
});
|