@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
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
* capability, and a mutating verb gains the plan-first `confirm` flow: without
|
|
8
8
|
* `confirm`, the verb's `Task` is dry-run and a plan is returned
|
|
9
9
|
* (`{ planOnly: true, confirmRequired: true }`); with `confirm: true`, it runs
|
|
10
|
-
* for real.
|
|
10
|
+
* for real. That plan is rendered through the SAME shared effect formatter the
|
|
11
|
+
* CLI preview uses, so the agent-facing and human-facing surfaces describe one
|
|
12
|
+
* plan rather than two views of it.
|
|
11
13
|
*/
|
|
12
14
|
|
|
13
15
|
import { statSync } from "node:fs";
|
|
@@ -18,10 +20,10 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
18
20
|
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
19
21
|
import { z } from "zod";
|
|
20
22
|
import { asPragmaError } from "../../error/fromTaskError.js";
|
|
21
|
-
import { PragmaError } from "../../error/
|
|
23
|
+
import { PragmaError } from "../../error/index.js";
|
|
22
24
|
import type { InteractionRuntime, PragmaRuntime } from "../../runtime/types.js";
|
|
23
|
-
import {
|
|
24
|
-
import
|
|
25
|
+
import type { McpAnnotations, ParamSpec, VerbSpec } from "../../spec/index.js";
|
|
26
|
+
import { toolName } from "../../spec/index.js";
|
|
25
27
|
import { toolError, toolSuccess } from "./envelope.js";
|
|
26
28
|
|
|
27
29
|
/**
|
|
@@ -190,7 +192,7 @@ function mutateHandler(verb: VerbSpec, runtime: PragmaRuntime) {
|
|
|
190
192
|
const mutationRuntime: PragmaRuntime = {
|
|
191
193
|
...runtime,
|
|
192
194
|
cwd: effectiveCwd,
|
|
193
|
-
mutation: { preview },
|
|
195
|
+
mutation: { preview, undo: false },
|
|
194
196
|
interaction,
|
|
195
197
|
};
|
|
196
198
|
const task = await Promise.resolve(
|
|
@@ -203,16 +205,40 @@ function mutateHandler(verb: VerbSpec, runtime: PragmaRuntime) {
|
|
|
203
205
|
// reads are real, writes are recorded and never executed. A tool call
|
|
204
206
|
// whose confirmed run would fail now returns that error instead of a
|
|
205
207
|
// confident plan, so plan-first predicts rather than reassures.
|
|
208
|
+
//
|
|
209
|
+
// NO `onLog`: a preview that PERFORMS an effect is not a preview of
|
|
210
|
+
// that effect, and the recorded `Log`s are already about to be listed.
|
|
211
|
+
// The interpreter prints nothing of its own when it is absent.
|
|
206
212
|
const previewExec = mutationRuntime.exec ?? {};
|
|
207
213
|
try {
|
|
208
214
|
const { effects } = await runPreview(task, {
|
|
209
215
|
cwd: previewExec.cwd,
|
|
210
216
|
onEffectStart: previewExec.onEffectStart,
|
|
211
|
-
onLog: logToStderr,
|
|
212
217
|
});
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
218
|
+
// This payload is read by an LLM on a token budget, so it carries
|
|
219
|
+
// the plan a person is shown rather than the interpreter's
|
|
220
|
+
// transcript: the same `visiblePlanEffects` filter the CLI preview
|
|
221
|
+
// applies, from the same module. Without it every internal
|
|
222
|
+
// `Check exists:` and every repeat of the output directory spent
|
|
223
|
+
// tokens burying the real artifacts.
|
|
224
|
+
//
|
|
225
|
+
// The FILTER is what the surfaces share; the ROW FORMAT is not.
|
|
226
|
+
// These strings are structured data, so they stay `describeEffect` —
|
|
227
|
+
// the description `@canonical/task` gives its own effects, which
|
|
228
|
+
// carries byte counts, has no terminal chrome, and cannot embed an
|
|
229
|
+
// ANSI escape however the editor that spawned this server configured
|
|
230
|
+
// colour. That also lets the CLI's `--format json` plan and this one
|
|
231
|
+
// be compared string for string, which is the A6 invariant.
|
|
232
|
+
//
|
|
233
|
+
// Loaded lazily, and from the LIGHT `/format` subpath: the kernel
|
|
234
|
+
// keeps summon-core proper (and React) off its static import graph.
|
|
235
|
+
const { visiblePlanEffects } = await import(
|
|
236
|
+
"@canonical/summon-core/format"
|
|
237
|
+
);
|
|
238
|
+
const plan = visiblePlanEffects(
|
|
239
|
+
effects,
|
|
240
|
+
runtime.globalFlags.verbose === true,
|
|
241
|
+
).map(describeEffect);
|
|
216
242
|
return toolSuccess(
|
|
217
243
|
{ plan },
|
|
218
244
|
{ planOnly: true, confirmRequired: true },
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
11
|
-
import { loadEffectiveModules } from "../../packs/
|
|
12
|
-
import type { CapabilityModule } from "../../spec/
|
|
11
|
+
import { loadEffectiveModules } from "../../packs/index.js";
|
|
12
|
+
import type { CapabilityModule } from "../../spec/index.js";
|
|
13
13
|
import { buildServer } from "./buildServer.js";
|
|
14
14
|
|
|
15
15
|
/**
|
|
@@ -47,8 +47,9 @@ exports[`render matrix (list/lookup/empty × plain/llm/json × detail) > renders
|
|
|
47
47
|
|
|
48
48
|
- \`ds:Button\` — **Button** component | Primary action
|
|
49
49
|
- \`ds:Card\` — **Card** pattern",
|
|
50
|
-
"plain": "
|
|
51
|
-
ds:
|
|
50
|
+
"plain": "URI NAME KIND NOTE
|
|
51
|
+
ds:Button Button component Primary action
|
|
52
|
+
ds:Card Card pattern -",
|
|
52
53
|
},
|
|
53
54
|
"lookup": {
|
|
54
55
|
"json": "{"uri":"https://ds.canonical.com/Button","name":"Button","kind":"component","note":"Primary action"}",
|
|
@@ -82,7 +83,8 @@ Note:
|
|
|
82
83
|
|
|
83
84
|
- **Button** component
|
|
84
85
|
- **Card** pattern",
|
|
85
|
-
"plain": "
|
|
86
|
+
"plain": "NAME KIND
|
|
87
|
+
Button component
|
|
86
88
|
Card pattern",
|
|
87
89
|
},
|
|
88
90
|
"lookup": {
|
|
@@ -109,7 +111,8 @@ Card pattern",
|
|
|
109
111
|
|
|
110
112
|
- **Button**
|
|
111
113
|
- **Card**",
|
|
112
|
-
"plain": "
|
|
114
|
+
"plain": "NAME
|
|
115
|
+
Button
|
|
113
116
|
Card",
|
|
114
117
|
},
|
|
115
118
|
"lookup": {
|
|
@@ -7,6 +7,27 @@
|
|
|
7
7
|
* option bags and hand them to {@link renderers}.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Presentation context the dispatcher threads into a verb's PLAIN formatter.
|
|
12
|
+
*
|
|
13
|
+
* Only list-shaped formatters read it: the header row is a plain-table
|
|
14
|
+
* concern (`llm` is the byte-frozen agent contract, `json` the envelope), so
|
|
15
|
+
* rather than a second formatter family the plain formatter takes this
|
|
16
|
+
* optional second argument. Absent context reads as an interactive terminal
|
|
17
|
+
* with headers on — the shape every pre-existing caller assumed.
|
|
18
|
+
*/
|
|
19
|
+
export interface RenderContext {
|
|
20
|
+
/** False when `--no-headers` suppressed the list header row. */
|
|
21
|
+
readonly headers: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Whether stdout is an interactive terminal. A piped plain EMPTY list
|
|
24
|
+
* prints its header row as a zero-record table so field-splitting
|
|
25
|
+
* consumers stay well-formed; a terminal prints nothing (the empty notice
|
|
26
|
+
* goes to stderr).
|
|
27
|
+
*/
|
|
28
|
+
readonly stdoutIsTty: boolean;
|
|
29
|
+
}
|
|
30
|
+
|
|
10
31
|
/** A single column in a list rendering. */
|
|
11
32
|
export interface ColumnDef<T> {
|
|
12
33
|
readonly key: keyof T & string;
|
|
@@ -8,9 +8,8 @@
|
|
|
8
8
|
* pair — is what makes CLI-JSON and MCP output provably identical.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import type { PragmaError } from "../error/
|
|
12
|
-
import { serializeError } from "../error/
|
|
13
|
-
import type { ErrorPayload } from "../error/types.js";
|
|
11
|
+
import type { ErrorPayload, PragmaError } from "../error/index.js";
|
|
12
|
+
import { serializeError } from "../error/index.js";
|
|
14
13
|
|
|
15
14
|
/** The success envelope: an agent branches on `ok` before reading `data`. */
|
|
16
15
|
export interface SuccessEnvelope {
|
|
@@ -6,9 +6,16 @@ import {
|
|
|
6
6
|
renderErrorLlm,
|
|
7
7
|
renderErrorPlain,
|
|
8
8
|
} from "../error/renderError.js";
|
|
9
|
-
import type {
|
|
9
|
+
import type {
|
|
10
|
+
ColumnDef,
|
|
11
|
+
LookupField,
|
|
12
|
+
RenderContext,
|
|
13
|
+
SectionDef,
|
|
14
|
+
} from "./contracts.js";
|
|
10
15
|
import { resolveDetail } from "./disclosure.js";
|
|
11
16
|
import {
|
|
17
|
+
MAX_PLAIN_CELL_WIDTH,
|
|
18
|
+
renderListEmptyNotice,
|
|
12
19
|
renderListLlm,
|
|
13
20
|
renderListPlain,
|
|
14
21
|
renderLookupLlm,
|
|
@@ -16,6 +23,11 @@ import {
|
|
|
16
23
|
} from "./renderers.js";
|
|
17
24
|
import { type RenderStyle, styleFor } from "./style.js";
|
|
18
25
|
|
|
26
|
+
/** An interactive stdout with headers on — the default terminal shape. */
|
|
27
|
+
const TTY_CONTEXT: RenderContext = { headers: true, stdoutIsTty: true };
|
|
28
|
+
/** A piped stdout with headers on — the field-splitting consumer shape. */
|
|
29
|
+
const PIPE_CONTEXT: RenderContext = { headers: true, stdoutIsTty: false };
|
|
30
|
+
|
|
19
31
|
interface Widget {
|
|
20
32
|
readonly uri: string;
|
|
21
33
|
readonly name: string;
|
|
@@ -111,18 +123,21 @@ describe("render matrix (list/lookup/empty × plain/llm/json × detail)", () =>
|
|
|
111
123
|
expect(matrix).toMatchSnapshot();
|
|
112
124
|
});
|
|
113
125
|
|
|
114
|
-
it("
|
|
126
|
+
it("separates the empty notice (stderr's text) from the stdout rendering", () => {
|
|
115
127
|
const options = {
|
|
116
128
|
heading: "Widgets",
|
|
117
129
|
columns: columnsFor("summary"),
|
|
118
130
|
emptyMessage: "No widget entries found.",
|
|
119
131
|
emptyHint: "Run `pragma sources update`.",
|
|
120
132
|
};
|
|
121
|
-
//
|
|
122
|
-
|
|
133
|
+
// The notice is its own render — the dispatcher routes it to stderr so a
|
|
134
|
+
// pipe never receives a human sentence as data.
|
|
135
|
+
expect(renderListEmptyNotice(options)).toBe(
|
|
123
136
|
"No widget entries found.\nRun `pragma sources update`.",
|
|
124
137
|
);
|
|
125
|
-
//
|
|
138
|
+
// Plain stdout for an empty list on a TTY: nothing (the notice suffices).
|
|
139
|
+
expect(renderListPlain([], options, TTY_CONTEXT)).toBe("");
|
|
140
|
+
// Llm keeps its byte-frozen shape: the `(0)` heading, then message + hint.
|
|
126
141
|
expect(renderListLlm([], options)).toBe(
|
|
127
142
|
"## Widgets (0)\n\nNo widget entries found.\nRun `pragma sources update`.",
|
|
128
143
|
);
|
|
@@ -130,7 +145,8 @@ describe("render matrix (list/lookup/empty × plain/llm/json × detail)", () =>
|
|
|
130
145
|
|
|
131
146
|
it("keeps the bare-empty behavior when no emptyMessage is declared", () => {
|
|
132
147
|
const options = { heading: "Widgets", columns: columnsFor("summary") };
|
|
133
|
-
expect(
|
|
148
|
+
expect(renderListEmptyNotice(options)).toBe("");
|
|
149
|
+
expect(renderListPlain([], options, TTY_CONTEXT)).toBe("");
|
|
134
150
|
expect(renderListLlm([], options)).toBe("## Widgets (0)\n");
|
|
135
151
|
});
|
|
136
152
|
|
|
@@ -145,6 +161,101 @@ describe("render matrix (list/lookup/empty × plain/llm/json × detail)", () =>
|
|
|
145
161
|
});
|
|
146
162
|
});
|
|
147
163
|
|
|
164
|
+
describe("plain list table contract (headers, rectangular grid, cell discipline)", () => {
|
|
165
|
+
const columns: ColumnDef<Widget>[] = [
|
|
166
|
+
{ key: "name", label: "Name" },
|
|
167
|
+
{ key: "kind", label: "Kind" },
|
|
168
|
+
{ key: "note", label: "Note" },
|
|
169
|
+
];
|
|
170
|
+
const options = { heading: "Widgets", columns };
|
|
171
|
+
|
|
172
|
+
it("emits a bold-eligible UPPERCASE header row built from the column labels", () => {
|
|
173
|
+
const lines = renderListPlain(widgets, options, TTY_CONTEXT).split("\n");
|
|
174
|
+
expect(lines[0]).toMatch(/^NAME\s+KIND\s+NOTE$/);
|
|
175
|
+
expect(lines).toHaveLength(1 + widgets.length);
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it("suppresses the header row when the context disables headers", () => {
|
|
179
|
+
const lines = renderListPlain(widgets, options, {
|
|
180
|
+
headers: false,
|
|
181
|
+
stdoutIsTty: true,
|
|
182
|
+
}).split("\n");
|
|
183
|
+
expect(lines[0]).not.toMatch(/^NAME/);
|
|
184
|
+
expect(lines).toHaveLength(widgets.length);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it("keeps the grid rectangular — an empty cell renders as -", () => {
|
|
188
|
+
// Card's note is "": the NOTE column is populated on another row, so the
|
|
189
|
+
// grid keeps the column and marks the hole instead of shifting fields.
|
|
190
|
+
const lines = renderListPlain(widgets, options, TTY_CONTEXT).split("\n");
|
|
191
|
+
const cardRow = lines.find((line) => line.startsWith("Card"));
|
|
192
|
+
expect(cardRow?.trim().split(/\s{2,}/)).toEqual(["Card", "pattern", "-"]);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it("drops a column no row populates (unless it opts into showWhenEmpty)", () => {
|
|
196
|
+
const noteless = widgets.map((w) => ({ ...w, note: "" }));
|
|
197
|
+
const lines = renderListPlain(noteless, options, TTY_CONTEXT).split("\n");
|
|
198
|
+
expect(lines[0]).toMatch(/^NAME\s+KIND$/);
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it("collapses newlines and truncates a long cell with an ellipsis", () => {
|
|
202
|
+
const prose = [
|
|
203
|
+
{
|
|
204
|
+
...widgets[0],
|
|
205
|
+
note: `first line\nsecond line ${"x".repeat(2 * MAX_PLAIN_CELL_WIDTH)}`,
|
|
206
|
+
},
|
|
207
|
+
] as Widget[];
|
|
208
|
+
const lines = renderListPlain(prose, options, TTY_CONTEXT).split("\n");
|
|
209
|
+
const row = lines[1] as string;
|
|
210
|
+
expect(row).not.toContain("\n");
|
|
211
|
+
expect(row).toContain("first line second line");
|
|
212
|
+
const noteCell = row
|
|
213
|
+
.trim()
|
|
214
|
+
.split(/\s{2,}/)
|
|
215
|
+
.at(-1) as string;
|
|
216
|
+
expect(noteCell.length).toBeLessThanOrEqual(MAX_PLAIN_CELL_WIDTH);
|
|
217
|
+
expect(noteCell.endsWith("…")).toBe(true);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it("renders only the header row for an empty list on a piped stdout", () => {
|
|
221
|
+
// An explicit `--format plain` down a pipe gets a well-formed zero-record
|
|
222
|
+
// table: every declared column, no rows — so `awk` sees a schema.
|
|
223
|
+
expect(renderListPlain([], options, PIPE_CONTEXT)).toMatch(
|
|
224
|
+
/^NAME\s+KIND\s+NOTE$/,
|
|
225
|
+
);
|
|
226
|
+
// With headers off there is nothing to print at all.
|
|
227
|
+
expect(
|
|
228
|
+
renderListPlain([], options, { headers: false, stdoutIsTty: false }),
|
|
229
|
+
).toBe("");
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
it("bolds the header row on a color-capable TTY, leaving cells unstyled", () => {
|
|
233
|
+
const tagged: RenderStyle = {
|
|
234
|
+
enabled: true,
|
|
235
|
+
bold: (t) => `B(${t})`,
|
|
236
|
+
dim: (t) => t,
|
|
237
|
+
cyan: (t) => t,
|
|
238
|
+
green: (t) => t,
|
|
239
|
+
yellow: (t) => t,
|
|
240
|
+
};
|
|
241
|
+
const lines = renderListPlain(widgets, options, TTY_CONTEXT, tagged).split(
|
|
242
|
+
"\n",
|
|
243
|
+
);
|
|
244
|
+
expect(lines[0]).toMatch(/^B\(NAME\s+KIND\s+NOTE\)$/);
|
|
245
|
+
expect(lines[1]).not.toContain("B(");
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
it("is byte-identical plain text when the styler is disabled", () => {
|
|
249
|
+
const lines = renderListPlain(
|
|
250
|
+
widgets,
|
|
251
|
+
options,
|
|
252
|
+
TTY_CONTEXT,
|
|
253
|
+
styleFor(false),
|
|
254
|
+
).split("\n");
|
|
255
|
+
expect(lines[0]).toMatch(/^NAME\s+KIND\s+NOTE$/);
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
|
|
148
259
|
describe("lookup beautify (TTY style seam)", () => {
|
|
149
260
|
const lookupOpts = {
|
|
150
261
|
title: (w: Widget) => w.name,
|
|
@@ -203,3 +314,129 @@ describe("error render matrix (× plain/llm/json)", () => {
|
|
|
203
314
|
}).toMatchSnapshot();
|
|
204
315
|
});
|
|
205
316
|
});
|
|
317
|
+
|
|
318
|
+
describe("section-body headings nest under the heading the renderer gives them", () => {
|
|
319
|
+
interface Doc {
|
|
320
|
+
readonly guidelines: string;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
const render = (guidelines: string): string =>
|
|
324
|
+
renderLookupLlm<Doc>(
|
|
325
|
+
{ guidelines },
|
|
326
|
+
{
|
|
327
|
+
title: () => "Button",
|
|
328
|
+
fields: [],
|
|
329
|
+
sections: [{ key: "guidelines", heading: "Guidelines", kind: "field" }],
|
|
330
|
+
},
|
|
331
|
+
);
|
|
332
|
+
|
|
333
|
+
it("demotes authored headings that collide with the section heading", () => {
|
|
334
|
+
const out = render(
|
|
335
|
+
"### Accessibility\n\n- Label the button.\n\n### Content\n\n- Verb first.",
|
|
336
|
+
);
|
|
337
|
+
expect(out).toContain("### Guidelines");
|
|
338
|
+
expect(out).toContain("#### Accessibility");
|
|
339
|
+
expect(out).toContain("#### Content");
|
|
340
|
+
expect(out).not.toMatch(/^### Accessibility$/m);
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
it("preserves the content's own hierarchy while shifting it as a block", () => {
|
|
344
|
+
const out = render("## Overview\n\ntext\n\n### Detail\n\nmore");
|
|
345
|
+
expect(out).toContain("#### Overview");
|
|
346
|
+
expect(out).toContain("##### Detail");
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
it("leaves content already nested below the section alone", () => {
|
|
350
|
+
const out = render("#### Already nested\n\ntext");
|
|
351
|
+
expect(out).toContain("#### Already nested");
|
|
352
|
+
expect(out).not.toContain("##### Already nested");
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
it("never emits a heading deeper than markdown's floor", () => {
|
|
356
|
+
const out = render("###### Deep\n\ntext");
|
|
357
|
+
expect(out).toContain("###### Deep");
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
it("leaves `#` inside a fenced code block exactly as authored", () => {
|
|
361
|
+
const out = render("### Setup\n\n```sh\n# not a heading\nbun install\n```");
|
|
362
|
+
expect(out).toContain("#### Setup");
|
|
363
|
+
expect(out).toContain("# not a heading");
|
|
364
|
+
expect(out).not.toContain("## not a heading");
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
it("leaves a body with no headings untouched", () => {
|
|
368
|
+
const out = render("Plain prose with a # hash mid-line.");
|
|
369
|
+
expect(out).toContain("Plain prose with a # hash mid-line.");
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
it("does not rewrite the plain body, where `###` is literal text", () => {
|
|
373
|
+
const out = renderLookupPlain<Doc>(
|
|
374
|
+
{ guidelines: "### Accessibility" },
|
|
375
|
+
{
|
|
376
|
+
title: () => "Button",
|
|
377
|
+
fields: [],
|
|
378
|
+
sections: [{ key: "guidelines", heading: "Guidelines", kind: "field" }],
|
|
379
|
+
},
|
|
380
|
+
);
|
|
381
|
+
expect(out).toContain("Guidelines:");
|
|
382
|
+
expect(out).toContain(" ### Accessibility");
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
describe("section-body nesting follows CommonMark, not a near-enough reading", () => {
|
|
387
|
+
interface Doc {
|
|
388
|
+
readonly guidelines: string;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
const render = (guidelines: string): string =>
|
|
392
|
+
renderLookupLlm<Doc>(
|
|
393
|
+
{ guidelines },
|
|
394
|
+
{
|
|
395
|
+
title: () => "Button",
|
|
396
|
+
fields: [],
|
|
397
|
+
sections: [{ key: "guidelines", heading: "Guidelines", kind: "field" }],
|
|
398
|
+
},
|
|
399
|
+
);
|
|
400
|
+
|
|
401
|
+
it("nests a heading indented up to three spaces, keeping its indent", () => {
|
|
402
|
+
// Four spaces would make the line an indented code block; three or fewer
|
|
403
|
+
// leave it a heading. Missing that left an indented heading at the
|
|
404
|
+
// section's own level while its unindented twin was demoted — one body
|
|
405
|
+
// rendered with two conflicting hierarchies.
|
|
406
|
+
expect(render(" ### Accessibility\n\ntext")).toMatch(
|
|
407
|
+
/^ {2}#### Accessibility$/m,
|
|
408
|
+
);
|
|
409
|
+
});
|
|
410
|
+
|
|
411
|
+
it("does not close a four-backtick fence on a three-backtick sample", () => {
|
|
412
|
+
// A closing fence must be AT LEAST as long as the opener. Toggling on any
|
|
413
|
+
// same-character run let the inner sample read as the close, after which
|
|
414
|
+
// every `#` line in that code block was rewritten — the renderer silently
|
|
415
|
+
// editing the user's sample code.
|
|
416
|
+
const out = render(
|
|
417
|
+
[
|
|
418
|
+
"````md",
|
|
419
|
+
"```",
|
|
420
|
+
"### Sample text, not a heading",
|
|
421
|
+
"```",
|
|
422
|
+
"````",
|
|
423
|
+
"",
|
|
424
|
+
"### A real heading",
|
|
425
|
+
].join("\n"),
|
|
426
|
+
);
|
|
427
|
+
// Anchored: `#### x` CONTAINS `### x`, so a substring check would pass
|
|
428
|
+
// against the very rewrite this pins against.
|
|
429
|
+
expect(out).toMatch(/^### Sample text, not a heading$/m);
|
|
430
|
+
expect(out).toMatch(/^#### A real heading$/m);
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
it("does not close a fence on a run that carries an info string", () => {
|
|
434
|
+
// An opener may carry an info string; a CLOSER may not. A ```js line
|
|
435
|
+
// inside a block opens nothing and closes nothing.
|
|
436
|
+
const out = render(
|
|
437
|
+
["```", "### inside", "```js", "### also inside", "```"].join("\n"),
|
|
438
|
+
);
|
|
439
|
+
expect(out).toMatch(/^### inside$/m);
|
|
440
|
+
expect(out).toMatch(/^### also inside$/m);
|
|
441
|
+
});
|
|
442
|
+
});
|