@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,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Test helper: boot a store-backed {@link PragmaRuntime} at a REAL `cwd` whose
|
|
3
|
-
*
|
|
3
|
+
* active-pack pointer names a built fixture pack.
|
|
4
4
|
*
|
|
5
5
|
* This is distinct from (and complements) `packRuntime.ts#buildFixtureRuntime`:
|
|
6
6
|
* that helper hands back an in-process runtime wired to a custom `LazyStore`,
|
|
@@ -8,14 +8,18 @@
|
|
|
8
8
|
* generalizes the `runtimeFor` + `buildUpdateTask` pattern proven in
|
|
9
9
|
* `capabilities/sources/sources.test.ts`: it writes an actual
|
|
10
10
|
* `pragma.config.ts` + package directory, runs the REAL `sources update` Task
|
|
11
|
-
* (resolve → build →
|
|
12
|
-
* file, EVERY independent runtime construction that resolves config from that
|
|
11
|
+
* (resolve → build → point), and returns a `cwd`. Because the pointer is a
|
|
12
|
+
* real file, EVERY independent runtime construction that resolves config from that
|
|
13
13
|
* `cwd` — `bootRuntime(flags, cwd)` (CLI dispatch), `projectMcp(modules, cwd)`
|
|
14
14
|
* (MCP), and `runCli(args, { cwd })` (spawn) — boots the SAME cached pack. That
|
|
15
15
|
* is the property PR4's cross-surface parity tests need and PR3's single-surface
|
|
16
16
|
* parity tests did not: proof that CLI-json and MCP-json agree over a graph
|
|
17
17
|
* built the same way `sources update` builds one for a real project.
|
|
18
18
|
*
|
|
19
|
+
* A fixture package may also ship `stories/*.json` (the `stories` option), which
|
|
20
|
+
* `sources update` carries into the built pack — that is the package tier a
|
|
21
|
+
* third-party noun arrives through.
|
|
22
|
+
*
|
|
19
23
|
* Hermetic: the pack cache lives under the isolated `$XDG_CACHE_HOME`
|
|
20
24
|
* `setupXdgIsolation` installs; `dispose()` removes the temp directories (the
|
|
21
25
|
* shared content-addressed pack cache itself is left for reuse/cleanup by the
|
|
@@ -30,7 +34,7 @@ import { buildUpdateTask } from "../../capabilities/sources/runUpdate.js";
|
|
|
30
34
|
import { VERSION } from "../../constants.js";
|
|
31
35
|
import type {
|
|
32
36
|
ConfigLayers,
|
|
33
|
-
|
|
37
|
+
PackDeclaration,
|
|
34
38
|
PragmaConfig,
|
|
35
39
|
} from "../../kernel/config/types.js";
|
|
36
40
|
import { bootRuntime } from "../../kernel/runtime/boot.js";
|
|
@@ -52,34 +56,39 @@ export interface FixtureGraphOptions {
|
|
|
52
56
|
readonly ttl: string;
|
|
53
57
|
/**
|
|
54
58
|
* Config fields to bake into the written `pragma.config.ts`, e.g.
|
|
55
|
-
* `{ tier: "apps/lxd", channel: "prerelease" }`. `
|
|
59
|
+
* `{ tier: "apps/lxd", channel: "prerelease" }`. `packs` is always set by
|
|
56
60
|
* this helper (to the fixture package) — do not override it here.
|
|
57
61
|
*/
|
|
58
|
-
readonly config?: Omit<Partial<PragmaConfig>, "
|
|
62
|
+
readonly config?: Omit<Partial<PragmaConfig>, "packs">;
|
|
63
|
+
/**
|
|
64
|
+
* `stories/*.json` the fixture PACKAGE ships, as raw text keyed by file name
|
|
65
|
+
* — deliberately raw, so a test can ship malformed or schema-invalid content
|
|
66
|
+
* and assert that it is dropped rather than fatal.
|
|
67
|
+
*/
|
|
68
|
+
readonly stories?: Readonly<Record<string, string>>;
|
|
59
69
|
}
|
|
60
70
|
|
|
61
71
|
/** A booted fixture runtime plus its `cwd` (usable by any surface) and disposal. */
|
|
62
72
|
export interface FixtureGraph {
|
|
63
73
|
/** A REAL `bootRuntime` at {@link cwd} — the same one CLI dispatch uses. */
|
|
64
74
|
readonly runtime: PragmaRuntime;
|
|
65
|
-
/** The project directory whose `pragma.
|
|
75
|
+
/** The project directory whose `pragma.config.ts` + active-pack pointer were written. */
|
|
66
76
|
readonly cwd: string;
|
|
67
77
|
/** Remove the temp directories and dispose the store session, if booted. */
|
|
68
78
|
dispose(): Promise<void>;
|
|
69
79
|
}
|
|
70
80
|
|
|
71
81
|
/** A synthetic runtime with an IN-MEMORY config — used only to drive the build Task. */
|
|
72
|
-
function builderRuntime(cwd: string,
|
|
82
|
+
function builderRuntime(cwd: string, packs: PackDeclaration[]): PragmaRuntime {
|
|
73
83
|
const layers: ConfigLayers = {
|
|
74
|
-
config: { channel: "normal",
|
|
84
|
+
config: { channel: "normal", packs },
|
|
75
85
|
origins: {
|
|
76
86
|
tier: "default",
|
|
77
87
|
channel: "default",
|
|
78
88
|
detail: "default",
|
|
79
|
-
|
|
89
|
+
packs: "project",
|
|
80
90
|
stories: "default",
|
|
81
91
|
prefixes: "default",
|
|
82
|
-
prompts: "default",
|
|
83
92
|
},
|
|
84
93
|
global: { path: "/nonexistent", exists: false },
|
|
85
94
|
project: { exists: false },
|
|
@@ -102,8 +111,9 @@ function configField(key: string, value: unknown): string {
|
|
|
102
111
|
}
|
|
103
112
|
|
|
104
113
|
/**
|
|
105
|
-
* Build a store-backed runtime whose `cwd`
|
|
106
|
-
* shared store-backed fixture path for cross-surface (CLI/MCP/spawn)
|
|
114
|
+
* Build a store-backed runtime whose `cwd` is pointed at a real built pack —
|
|
115
|
+
* the ONE shared store-backed fixture path for cross-surface (CLI/MCP/spawn)
|
|
116
|
+
* tests.
|
|
107
117
|
*
|
|
108
118
|
* @param options - The fixture graph TTL and any config overrides.
|
|
109
119
|
* @returns The runtime, its cwd, and a disposer.
|
|
@@ -116,11 +126,18 @@ export async function bootFixtureRuntime(
|
|
|
116
126
|
const pkgDir = mkdtempSync(join(tmpdir(), "pragma-fixture-pkg-"));
|
|
117
127
|
mkdirSync(join(pkgDir, "definitions"), { recursive: true });
|
|
118
128
|
writeFileSync(join(pkgDir, "definitions", "fixture.ttl"), options.ttl);
|
|
129
|
+
const stories = Object.entries(options.stories ?? {});
|
|
130
|
+
if (stories.length > 0) {
|
|
131
|
+
mkdirSync(join(pkgDir, "stories"), { recursive: true });
|
|
132
|
+
for (const [file, content] of stories) {
|
|
133
|
+
writeFileSync(join(pkgDir, "stories", file), content);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
119
136
|
|
|
120
|
-
const
|
|
137
|
+
const packs: PackDeclaration[] = [
|
|
121
138
|
{ name: "fixture", source: `file://${pkgDir}` },
|
|
122
139
|
];
|
|
123
|
-
const fields = [configField("
|
|
140
|
+
const fields = [configField("packs", packs)];
|
|
124
141
|
for (const [key, value] of Object.entries(options.config ?? {})) {
|
|
125
142
|
fields.push(configField(key, value));
|
|
126
143
|
}
|
|
@@ -129,7 +146,7 @@ export async function bootFixtureRuntime(
|
|
|
129
146
|
`export default {\n${fields.join("\n")}\n};\n`,
|
|
130
147
|
);
|
|
131
148
|
|
|
132
|
-
await runTask(await buildUpdateTask(builderRuntime(cwd,
|
|
149
|
+
await runTask(await buildUpdateTask(builderRuntime(cwd, packs)));
|
|
133
150
|
|
|
134
151
|
const runtime = bootRuntime(FIXTURE_FLAGS, cwd);
|
|
135
152
|
|
|
@@ -36,7 +36,7 @@ export interface FixtureRuntimeOptions {
|
|
|
36
36
|
/** Explicit `--detail` level for this invocation. */
|
|
37
37
|
readonly detail?: DetailLevel;
|
|
38
38
|
/** Config `detail` value and its origin (drives {@link resolvePackDetail}). */
|
|
39
|
-
readonly configDetail?:
|
|
39
|
+
readonly configDetail?: DetailLevel;
|
|
40
40
|
/** Origin of the config `detail` (default `"default"`). */
|
|
41
41
|
readonly detailOrigin?: ConfigOrigin;
|
|
42
42
|
}
|
|
@@ -93,10 +93,9 @@ export async function buildFixtureRuntime(
|
|
|
93
93
|
tier: "default",
|
|
94
94
|
channel: "default",
|
|
95
95
|
detail: options.detailOrigin ?? "default",
|
|
96
|
-
|
|
96
|
+
packs: "default",
|
|
97
97
|
stories: "default",
|
|
98
98
|
prefixes: "default",
|
|
99
|
-
prompts: "default",
|
|
100
99
|
},
|
|
101
100
|
global: { path: "", exists: false },
|
|
102
101
|
project: { exists: false },
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import type { Command } from "commander";
|
|
10
|
+
import { BIN_NAME } from "../../constants.js";
|
|
10
11
|
import { buildProgram } from "../../kernel/project/cli/buildProgram.js";
|
|
11
12
|
import type { GlobalFlags } from "../../kernel/runtime/types.js";
|
|
12
13
|
import type { CapabilityModule, VerbSpec } from "../../kernel/spec/types.js";
|
|
@@ -31,5 +32,5 @@ export function projectCli(
|
|
|
31
32
|
globalFlags: GlobalFlags = TEST_FLAGS,
|
|
32
33
|
): Command {
|
|
33
34
|
const verbs: VerbSpec[] = modules.flatMap((module) => [...module.verbs]);
|
|
34
|
-
return buildProgram(verbs, { globalFlags, programName:
|
|
35
|
+
return buildProgram(verbs, { globalFlags, programName: BIN_NAME });
|
|
35
36
|
}
|
|
@@ -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,14 +35,33 @@ 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;
|
|
63
|
+
/** The `serverInfo` the server introduced itself with at initialize. */
|
|
64
|
+
serverInfo(): { name: string; version: string } | undefined;
|
|
45
65
|
/** The server `instructions` string sent at initialize. */
|
|
46
66
|
instructions(): string | undefined;
|
|
47
67
|
/** List the native MCP prompts (`prompts/list`). */
|
|
@@ -98,7 +118,7 @@ export async function projectMcp(
|
|
|
98
118
|
},
|
|
99
119
|
async listResources() {
|
|
100
120
|
const { resources } = await client.listResources();
|
|
101
|
-
return resources
|
|
121
|
+
return resources;
|
|
102
122
|
},
|
|
103
123
|
async readResource(uri) {
|
|
104
124
|
const result = await client.readResource({ uri });
|
|
@@ -115,11 +135,23 @@ export async function projectMcp(
|
|
|
115
135
|
ref: { type: "ref/resource", uri: "pragma:{+uri}" },
|
|
116
136
|
argument: { name: "uri", value: partial },
|
|
117
137
|
});
|
|
118
|
-
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
|
+
};
|
|
119
147
|
},
|
|
120
148
|
serverCapabilities() {
|
|
121
149
|
return client.getServerCapabilities();
|
|
122
150
|
},
|
|
151
|
+
serverInfo() {
|
|
152
|
+
const info = client.getServerVersion();
|
|
153
|
+
return info ? { name: info.name, version: info.version } : undefined;
|
|
154
|
+
},
|
|
123
155
|
instructions() {
|
|
124
156
|
return client.getInstructions();
|
|
125
157
|
},
|
|
@@ -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,9 +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
|
|
111
|
+
// BUDGETS.md's p95-stabilization section) — deliberately kept, because the
|
|
112
|
+
// honest statistic here is the one that catches real cost, and the ceiling
|
|
113
|
+
// is sized with a 1.25× margin over a projected p95 to absorb it.
|
|
114
|
+
const result = measureCommand(NODE, cli("__store-probe"), {
|
|
100
115
|
runs: 12,
|
|
101
116
|
warmups: 3,
|
|
102
117
|
env: {
|
|
@@ -1,30 +1,94 @@
|
|
|
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
|
|
19
|
+
* p95, and it lands TIGHTER than 2× its median); its arithmetic is written out
|
|
20
|
+
* in full in BUDGETS.md, as are the measurements and environment for all of
|
|
21
|
+
* them.
|
|
10
22
|
*/
|
|
11
23
|
|
|
12
|
-
/**
|
|
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
|
+
*/
|
|
13
43
|
export const BUDGET_HELP_MS = 130;
|
|
14
44
|
|
|
15
|
-
/**
|
|
16
|
-
|
|
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;
|
|
17
69
|
|
|
18
70
|
/** Warm project-config (`pragma.config.ts`) load ceiling (ms). Cache hit is sub-ms. */
|
|
19
71
|
export const BUDGET_PROJECT_CONFIG_MS = 10;
|
|
20
72
|
|
|
21
73
|
/**
|
|
22
74
|
* Warm store-backed verb ceiling (ms) — a store boot from the cached n-quads
|
|
23
|
-
* dump plus a query,
|
|
24
|
-
*
|
|
25
|
-
*
|
|
75
|
+
* dump plus a query, through the shipped entry.
|
|
76
|
+
*
|
|
77
|
+
* Re-derived when the embed became the distribution's real 8 479-triple graph
|
|
78
|
+
* instead of a 23-triple sample. Netted against a `--version` control from the
|
|
79
|
+
* SAME binary in the SAME run (this box's process start swings 60–287 ms with
|
|
80
|
+
* page-cache state alone), the real pack's store work is 2.83× the sample's —
|
|
81
|
+
* the median of five repetitions across two protocols. Projected onto the
|
|
82
|
+
* reference box, whose own toy store work is 147 − 45.5 = 101.5 ms: 45.5 +
|
|
83
|
+
* 101.5 × 2.83 ≈ 333 ms median, and 333 × (176/147) ≈ 398 ms p95 using the
|
|
84
|
+
* reference box's own dispersion for this command. `ceil(398 × 1.25 / 50) × 50`
|
|
85
|
+
* = 500 — which is 1.6× the projected median, i.e. tighter than the
|
|
86
|
+
* 2×-of-median rule the ceilings above use. Every input, every step, and the
|
|
87
|
+
* raw measurements are in BUDGETS.md; the designed `<300ms` target stays in the
|
|
88
|
+
* surface covenant, exactly as the 50 ms `help` target survived its 130 ms
|
|
89
|
+
* ceiling.
|
|
26
90
|
*/
|
|
27
|
-
export const BUDGET_WARM_STORE_MS =
|
|
91
|
+
export const BUDGET_WARM_STORE_MS = 500;
|
|
28
92
|
|
|
29
93
|
/**
|
|
30
94
|
* Warm in-process MCP tool-call ceiling (ms) — PR7 graduates this from seeded to
|
|
@@ -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
|
+
});
|