@canonical/pragma-cli 0.34.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -30
- package/bundled-skills/add-standard/SKILL.md +338 -0
- package/bundled-skills/adoption-a1-styles/SKILL.md +269 -0
- package/bundled-skills/adoption-a2-components/SKILL.md +291 -0
- package/bundled-skills/adoption-a3-forms/SKILL.md +260 -0
- package/bundled-skills/anatomy-author/ANATOMY_DSL_SPEC.md +406 -0
- package/bundled-skills/anatomy-author/SKILL.md +1226 -0
- package/bundled-skills/design-auditor/SKILL.md +455 -0
- package/bundled-skills/implement-component/SKILL.md +333 -0
- package/bundled-skills/specify-component/SKILL.md +331 -0
- package/bundled-skills/specify-pattern/SKILL.md +292 -0
- package/dist/.build-ok +0 -0
- package/dist/package.json +84 -0
- package/dist/pragma.conf.js +1016 -0
- package/dist/pragma.conf.js.map +1 -0
- package/dist/src/bin.js +356 -0
- package/dist/src/bin.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js +70 -0
- package/dist/src/capabilities/capabilities/capabilities.render.js.map +1 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js +59 -0
- package/dist/src/capabilities/capabilities/capabilities.verb.js.map +1 -0
- package/dist/src/capabilities/capabilities/catalog.js +130 -0
- package/dist/src/capabilities/capabilities/catalog.js.map +1 -0
- package/dist/src/capabilities/capabilities/hints.js +195 -0
- package/dist/src/capabilities/capabilities/hints.js.map +1 -0
- package/dist/src/capabilities/capabilities/index.js +11 -0
- package/dist/src/capabilities/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/capabilities/types.js +11 -0
- package/dist/src/capabilities/capabilities/types.js.map +1 -0
- package/dist/src/capabilities/colophon/collectColophon.js +83 -0
- package/dist/src/capabilities/colophon/collectColophon.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.render.js +59 -0
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -0
- package/dist/src/capabilities/colophon/colophon.verb.js +43 -0
- package/dist/src/capabilities/colophon/colophon.verb.js.map +1 -0
- package/dist/src/capabilities/colophon/index.js +5 -0
- package/dist/src/capabilities/colophon/index.js.map +1 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js +90 -0
- package/dist/src/capabilities/colophon/markdownTerminal.js.map +1 -0
- package/dist/src/capabilities/colophon/types.js +10 -0
- package/dist/src/capabilities/colophon/types.js.map +1 -0
- package/dist/src/capabilities/config/collectConfigShow.js +59 -0
- package/dist/src/capabilities/config/collectConfigShow.js.map +1 -0
- package/dist/src/capabilities/config/field.render.js +22 -0
- package/dist/src/capabilities/config/field.render.js.map +1 -0
- package/dist/src/capabilities/config/fields.js +46 -0
- package/dist/src/capabilities/config/fields.js.map +1 -0
- package/dist/src/capabilities/config/get.verb.js +61 -0
- package/dist/src/capabilities/config/get.verb.js.map +1 -0
- package/dist/src/capabilities/config/index.js +5 -0
- package/dist/src/capabilities/config/index.js.map +1 -0
- package/dist/src/capabilities/config/runField.js +59 -0
- package/dist/src/capabilities/config/runField.js.map +1 -0
- package/dist/src/capabilities/config/runGet.js +28 -0
- package/dist/src/capabilities/config/runGet.js.map +1 -0
- package/dist/src/capabilities/config/runSet.js +53 -0
- package/dist/src/capabilities/config/runSet.js.map +1 -0
- package/dist/src/capabilities/config/set.verb.js +66 -0
- package/dist/src/capabilities/config/set.verb.js.map +1 -0
- package/dist/src/capabilities/config/show.render.js +84 -0
- package/dist/src/capabilities/config/show.render.js.map +1 -0
- package/dist/src/capabilities/config/show.verb.js +44 -0
- package/dist/src/capabilities/config/show.verb.js.map +1 -0
- package/dist/src/capabilities/config/types.js +5 -0
- package/dist/src/capabilities/config/types.js.map +1 -0
- package/dist/src/capabilities/config/unset.verb.js +49 -0
- package/dist/src/capabilities/config/unset.verb.js.map +1 -0
- package/dist/src/capabilities/create/cliProjection.js +195 -0
- package/dist/src/capabilities/create/cliProjection.js.map +1 -0
- package/dist/src/capabilities/create/constants.js +47 -0
- package/dist/src/capabilities/create/constants.js.map +1 -0
- package/dist/src/capabilities/create/create.render.js +100 -0
- package/dist/src/capabilities/create/create.render.js.map +1 -0
- package/dist/src/capabilities/create/create.verb.js +438 -0
- package/dist/src/capabilities/create/create.verb.js.map +1 -0
- package/dist/src/capabilities/create/createHelp.js +47 -0
- package/dist/src/capabilities/create/createHelp.js.map +1 -0
- package/dist/src/capabilities/create/createSurface.generated.js +394 -0
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js +106 -0
- package/dist/src/capabilities/create/generatorToVerbSpec.js.map +1 -0
- package/dist/src/capabilities/create/index.js +18 -0
- package/dist/src/capabilities/create/index.js.map +1 -0
- package/dist/src/capabilities/create/messages.js +16 -0
- package/dist/src/capabilities/create/messages.js.map +1 -0
- package/dist/src/capabilities/create/mount.js +294 -0
- package/dist/src/capabilities/create/mount.js.map +1 -0
- package/dist/src/capabilities/create/pathJail.js +65 -0
- package/dist/src/capabilities/create/pathJail.js.map +1 -0
- package/dist/src/capabilities/create/pickGenerator.js +53 -0
- package/dist/src/capabilities/create/pickGenerator.js.map +1 -0
- package/dist/src/capabilities/create/types.js +2 -0
- package/dist/src/capabilities/create/types.js.map +1 -0
- package/dist/src/capabilities/distribution.js +40 -0
- package/dist/src/capabilities/distribution.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js +40 -0
- package/dist/src/capabilities/doctor/checks/checkKeStore.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +21 -0
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +148 -0
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js +19 -0
- package/dist/src/capabilities/doctor/checks/checkPragmaVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +199 -0
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/harnessInventory.js +195 -0
- package/dist/src/capabilities/doctor/checks/harnessInventory.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +27 -0
- package/dist/src/capabilities/doctor/checks/index.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js +57 -0
- package/dist/src/capabilities/doctor/checks/mcpCommand.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +349 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.render.js +164 -0
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -0
- package/dist/src/capabilities/doctor/doctor.verb.js +49 -0
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -0
- package/dist/src/capabilities/doctor/index.js +5 -0
- package/dist/src/capabilities/doctor/index.js.map +1 -0
- package/dist/src/capabilities/doctor/runChecks.js +86 -0
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -0
- package/dist/src/capabilities/doctor/types.js +5 -0
- package/dist/src/capabilities/doctor/types.js.map +1 -0
- package/dist/src/capabilities/graph/index.js +19 -0
- package/dist/src/capabilities/graph/index.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.render.js +76 -0
- package/dist/src/capabilities/graph/inspect.render.js.map +1 -0
- package/dist/src/capabilities/graph/inspect.verb.js +53 -0
- package/dist/src/capabilities/graph/inspect.verb.js.map +1 -0
- package/dist/src/capabilities/graph/query.render.js +73 -0
- package/dist/src/capabilities/graph/query.render.js.map +1 -0
- package/dist/src/capabilities/graph/query.verb.js +49 -0
- package/dist/src/capabilities/graph/query.verb.js.map +1 -0
- package/dist/src/capabilities/graph/runQuery.js +41 -0
- package/dist/src/capabilities/graph/runQuery.js.map +1 -0
- package/dist/src/capabilities/index.js +56 -0
- package/dist/src/capabilities/index.js.map +1 -0
- package/dist/src/capabilities/info/collectInfo.js +72 -0
- package/dist/src/capabilities/info/collectInfo.js.map +1 -0
- package/dist/src/capabilities/info/index.js +5 -0
- package/dist/src/capabilities/info/index.js.map +1 -0
- package/dist/src/capabilities/info/info.render.js +57 -0
- package/dist/src/capabilities/info/info.render.js.map +1 -0
- package/dist/src/capabilities/info/info.verb.js +42 -0
- package/dist/src/capabilities/info/info.verb.js.map +1 -0
- package/dist/src/capabilities/info/types.js +5 -0
- package/dist/src/capabilities/info/types.js.map +1 -0
- package/dist/src/capabilities/meta/complete.verb.js +43 -0
- package/dist/src/capabilities/meta/complete.verb.js.map +1 -0
- package/dist/src/capabilities/meta/index.js +13 -0
- package/dist/src/capabilities/meta/index.js.map +1 -0
- package/dist/src/capabilities/meta/mcp.verb.js +34 -0
- package/dist/src/capabilities/meta/mcp.verb.js.map +1 -0
- package/dist/src/capabilities/ontology/index.js +21 -0
- package/dist/src/capabilities/ontology/index.js.map +1 -0
- package/dist/src/capabilities/ontology/queries.js +123 -0
- package/dist/src/capabilities/ontology/queries.js.map +1 -0
- package/dist/src/capabilities/ontology/render.js +66 -0
- package/dist/src/capabilities/ontology/render.js.map +1 -0
- package/dist/src/capabilities/ontology/verbs.js +181 -0
- package/dist/src/capabilities/ontology/verbs.js.map +1 -0
- package/dist/src/capabilities/prompt/index.js +16 -0
- package/dist/src/capabilities/prompt/index.js.map +1 -0
- package/dist/src/capabilities/prompt/prompt.render.js +78 -0
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -0
- package/dist/src/capabilities/prompt/types.js +10 -0
- package/dist/src/capabilities/prompt/types.js.map +1 -0
- package/dist/src/capabilities/prompt/verbs.js +93 -0
- package/dist/src/capabilities/prompt/verbs.js.map +1 -0
- package/dist/src/capabilities/resources/index.js +10 -0
- package/dist/src/capabilities/resources/index.js.map +1 -0
- package/dist/src/capabilities/resources/provider.js +423 -0
- package/dist/src/capabilities/resources/provider.js.map +1 -0
- package/dist/src/capabilities/setup/buildPlan.js +172 -0
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -0
- package/dist/src/capabilities/setup/index.js +5 -0
- package/dist/src/capabilities/setup/index.js.map +1 -0
- package/dist/src/capabilities/setup/mode.js +53 -0
- package/dist/src/capabilities/setup/mode.js.map +1 -0
- package/dist/src/capabilities/setup/operations/index.js +39 -0
- package/dist/src/capabilities/setup/operations/index.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js +160 -0
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js +101 -0
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js +390 -0
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js +329 -0
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js +253 -0
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js +594 -0
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -0
- package/dist/src/capabilities/setup/plan.js +128 -0
- package/dist/src/capabilities/setup/plan.js.map +1 -0
- package/dist/src/capabilities/setup/plan.render.js +271 -0
- package/dist/src/capabilities/setup/plan.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.render.js +54 -0
- package/dist/src/capabilities/setup/setup.render.js.map +1 -0
- package/dist/src/capabilities/setup/setup.verb.js +387 -0
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -0
- package/dist/src/capabilities/setup/shell.js +196 -0
- package/dist/src/capabilities/setup/shell.js.map +1 -0
- package/dist/src/capabilities/setup/targets.js +328 -0
- package/dist/src/capabilities/setup/targets.js.map +1 -0
- package/dist/src/capabilities/setup/types.js +5 -0
- package/dist/src/capabilities/setup/types.js.map +1 -0
- package/dist/src/capabilities/shared/assertExecOk.js +137 -0
- package/dist/src/capabilities/shared/assertExecOk.js.map +1 -0
- package/dist/src/capabilities/shared/index.js +27 -0
- package/dist/src/capabilities/shared/index.js.map +1 -0
- package/dist/src/capabilities/shared/packageManager.js +349 -0
- package/dist/src/capabilities/shared/packageManager.js.map +1 -0
- package/dist/src/capabilities/shared/registry.js +55 -0
- package/dist/src/capabilities/shared/registry.js.map +1 -0
- package/dist/src/capabilities/skill/discover.js +281 -0
- package/dist/src/capabilities/skill/discover.js.map +1 -0
- package/dist/src/capabilities/skill/index.js +10 -0
- package/dist/src/capabilities/skill/index.js.map +1 -0
- package/dist/src/capabilities/skill/render.js +49 -0
- package/dist/src/capabilities/skill/render.js.map +1 -0
- package/dist/src/capabilities/skill/verbs.js +83 -0
- package/dist/src/capabilities/skill/verbs.js.map +1 -0
- package/dist/src/capabilities/sources/collectStatus.js +103 -0
- package/dist/src/capabilities/sources/collectStatus.js.map +1 -0
- package/dist/src/capabilities/sources/index.js +13 -0
- package/dist/src/capabilities/sources/index.js.map +1 -0
- package/dist/src/capabilities/sources/installSkills.js +309 -0
- package/dist/src/capabilities/sources/installSkills.js.map +1 -0
- package/dist/src/capabilities/sources/runUpdate.js +460 -0
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -0
- package/dist/src/capabilities/sources/status.render.js +64 -0
- package/dist/src/capabilities/sources/status.render.js.map +1 -0
- package/dist/src/capabilities/sources/status.verb.js +40 -0
- package/dist/src/capabilities/sources/status.verb.js.map +1 -0
- package/dist/src/capabilities/sources/types.js +6 -0
- package/dist/src/capabilities/sources/types.js.map +1 -0
- package/dist/src/capabilities/sources/update.render.js +34 -0
- package/dist/src/capabilities/sources/update.render.js.map +1 -0
- package/dist/src/capabilities/sources/update.verb.js +55 -0
- package/dist/src/capabilities/sources/update.verb.js.map +1 -0
- package/dist/src/capabilities/upgrade/index.js +5 -0
- package/dist/src/capabilities/upgrade/index.js.map +1 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js +135 -0
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -0
- package/dist/src/capabilities/upgrade/types.js +5 -0
- package/dist/src/capabilities/upgrade/types.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js +52 -0
- package/dist/src/capabilities/upgrade/upgrade.verb.js.map +1 -0
- package/dist/src/capabilities/version/index.js +10 -0
- package/dist/src/capabilities/version/index.js.map +1 -0
- package/dist/src/capabilities/version/version.verb.js +36 -0
- package/dist/src/capabilities/version/version.verb.js.map +1 -0
- package/dist/src/constants.js +87 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kernel/completion/complete.js +66 -0
- package/dist/src/kernel/completion/complete.js.map +1 -0
- package/dist/src/kernel/completion/emitScripts.js +92 -0
- package/dist/src/kernel/completion/emitScripts.js.map +1 -0
- package/dist/src/kernel/completion/entitySource.js +285 -0
- package/dist/src/kernel/completion/entitySource.js.map +1 -0
- package/dist/src/kernel/completion/index.js +14 -0
- package/dist/src/kernel/completion/index.js.map +1 -0
- package/dist/src/kernel/completion/model.js +301 -0
- package/dist/src/kernel/completion/model.js.map +1 -0
- package/dist/src/kernel/completion/parse.js +253 -0
- package/dist/src/kernel/completion/parse.js.map +1 -0
- package/dist/src/kernel/completion/rank.js +101 -0
- package/dist/src/kernel/completion/rank.js.map +1 -0
- package/dist/src/kernel/completion/resolve.js +100 -0
- package/dist/src/kernel/completion/resolve.js.map +1 -0
- package/dist/src/kernel/completion/templates/bash.js +209 -0
- package/dist/src/kernel/completion/templates/bash.js.map +1 -0
- package/dist/src/kernel/completion/templates/fish.js +214 -0
- package/dist/src/kernel/completion/templates/fish.js.map +1 -0
- package/dist/src/kernel/completion/templates/index.js +23 -0
- package/dist/src/kernel/completion/templates/index.js.map +1 -0
- package/dist/src/kernel/completion/templates/shared.js +98 -0
- package/dist/src/kernel/completion/templates/shared.js.map +1 -0
- package/dist/src/kernel/completion/templates/zsh.js +201 -0
- package/dist/src/kernel/completion/templates/zsh.js.map +1 -0
- package/dist/src/kernel/completion/types.js +13 -0
- package/dist/src/kernel/completion/types.js.map +1 -0
- package/dist/src/kernel/config/defaults.js +17 -0
- package/dist/src/kernel/config/defaults.js.map +1 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js +126 -0
- package/dist/src/kernel/config/evaluateProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/findProjectConfig.js +43 -0
- package/dist/src/kernel/config/findProjectConfig.js.map +1 -0
- package/dist/src/kernel/config/firstRun.js +34 -0
- package/dist/src/kernel/config/firstRun.js.map +1 -0
- package/dist/src/kernel/config/globalConfig.js +79 -0
- package/dist/src/kernel/config/globalConfig.js.map +1 -0
- package/dist/src/kernel/config/index.js +16 -0
- package/dist/src/kernel/config/index.js.map +1 -0
- package/dist/src/kernel/config/paths.js +35 -0
- package/dist/src/kernel/config/paths.js.map +1 -0
- package/dist/src/kernel/config/readConfig.js +78 -0
- package/dist/src/kernel/config/readConfig.js.map +1 -0
- package/dist/src/kernel/config/schema.js +130 -0
- package/dist/src/kernel/config/schema.js.map +1 -0
- package/dist/src/kernel/config/types.js +19 -0
- package/dist/src/kernel/config/types.js.map +1 -0
- package/dist/src/kernel/config/writeConfigField.js +59 -0
- package/dist/src/kernel/config/writeConfigField.js.map +1 -0
- package/dist/src/kernel/copy.js +43 -0
- package/dist/src/kernel/copy.js.map +1 -0
- package/dist/src/kernel/error/PragmaError.js +149 -0
- package/dist/src/kernel/error/PragmaError.js.map +1 -0
- package/dist/src/kernel/error/constants.js +40 -0
- package/dist/src/kernel/error/constants.js.map +1 -0
- package/dist/src/kernel/error/fromTaskError.js +96 -0
- package/dist/src/kernel/error/fromTaskError.js.map +1 -0
- package/dist/src/kernel/error/index.js +13 -0
- package/dist/src/kernel/error/index.js.map +1 -0
- package/dist/src/kernel/error/recovery.js +52 -0
- package/dist/src/kernel/error/recovery.js.map +1 -0
- package/dist/src/kernel/error/renderError.js +115 -0
- package/dist/src/kernel/error/renderError.js.map +1 -0
- package/dist/src/kernel/error/serialize.js +25 -0
- package/dist/src/kernel/error/serialize.js.map +1 -0
- package/dist/src/kernel/error/types.js +9 -0
- package/dist/src/kernel/error/types.js.map +1 -0
- package/dist/src/kernel/index.js +34 -0
- package/dist/src/kernel/index.js.map +1 -0
- package/dist/src/kernel/interactivity.js +68 -0
- package/dist/src/kernel/interactivity.js.map +1 -0
- package/dist/src/kernel/packs/collect.js +187 -0
- package/dist/src/kernel/packs/collect.js.map +1 -0
- package/dist/src/kernel/packs/compile.js +304 -0
- package/dist/src/kernel/packs/compile.js.map +1 -0
- package/dist/src/kernel/packs/disclosure.js +76 -0
- package/dist/src/kernel/packs/disclosure.js.map +1 -0
- package/dist/src/kernel/packs/glob.js +38 -0
- package/dist/src/kernel/packs/glob.js.map +1 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js +258 -0
- package/dist/src/kernel/packs/graphql/buildLookupDocument.js.map +1 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js +157 -0
- package/dist/src/kernel/packs/graphql/fetchGraphqlLookup.js.map +1 -0
- package/dist/src/kernel/packs/graphql/index.js +20 -0
- package/dist/src/kernel/packs/graphql/index.js.map +1 -0
- package/dist/src/kernel/packs/graphql/nameMap.js +63 -0
- package/dist/src/kernel/packs/graphql/nameMap.js.map +1 -0
- package/dist/src/kernel/packs/index.js +34 -0
- package/dist/src/kernel/packs/index.js.map +1 -0
- package/dist/src/kernel/packs/iri.js +110 -0
- package/dist/src/kernel/packs/iri.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +129 -0
- package/dist/src/kernel/packs/renderPack.js.map +1 -0
- package/dist/src/kernel/packs/resolveEntity.js +274 -0
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -0
- package/dist/src/kernel/packs/runBodies.js +140 -0
- package/dist/src/kernel/packs/runBodies.js.map +1 -0
- package/dist/src/kernel/packs/sample.js +56 -0
- package/dist/src/kernel/packs/sample.js.map +1 -0
- package/dist/src/kernel/packs/schema.js +421 -0
- package/dist/src/kernel/packs/schema.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js +167 -0
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -0
- package/dist/src/kernel/packs/sparql/applySearch.js +25 -0
- package/dist/src/kernel/packs/sparql/applySearch.js.map +1 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +480 -0
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -0
- package/dist/src/kernel/packs/sparql/escape.js +21 -0
- package/dist/src/kernel/packs/sparql/escape.js.map +1 -0
- package/dist/src/kernel/packs/sparql/index.js +31 -0
- package/dist/src/kernel/packs/sparql/index.js.map +1 -0
- package/dist/src/kernel/packs/sparql/runSelect.js +101 -0
- package/dist/src/kernel/packs/sparql/runSelect.js.map +1 -0
- package/dist/src/kernel/packs/types.js +30 -0
- package/dist/src/kernel/packs/types.js.map +1 -0
- package/dist/src/kernel/packs/uniqueness.js +30 -0
- package/dist/src/kernel/packs/uniqueness.js.map +1 -0
- package/dist/src/kernel/project/cli/buildProgram.js +263 -0
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -0
- package/dist/src/kernel/project/cli/constants.js +27 -0
- package/dist/src/kernel/project/cli/constants.js.map +1 -0
- package/dist/src/kernel/project/cli/dispatch.js +420 -0
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -0
- package/dist/src/kernel/project/cli/exitCodes.js +66 -0
- package/dist/src/kernel/project/cli/exitCodes.js.map +1 -0
- package/dist/src/kernel/project/cli/globalFlags.js +219 -0
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -0
- package/dist/src/kernel/project/cli/helpFormat.js +58 -0
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -0
- package/dist/src/kernel/project/cli/index.js +14 -0
- package/dist/src/kernel/project/cli/index.js.map +1 -0
- package/dist/src/kernel/project/cli/rootHelp.js +227 -0
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -0
- package/dist/src/kernel/project/cli/suggest.js +75 -0
- package/dist/src/kernel/project/cli/suggest.js.map +1 -0
- package/dist/src/kernel/project/cli/suggestNames.js +96 -0
- package/dist/src/kernel/project/cli/suggestNames.js.map +1 -0
- package/dist/src/kernel/project/cli/verbHelp.js +131 -0
- package/dist/src/kernel/project/cli/verbHelp.js.map +1 -0
- package/dist/src/kernel/project/mcp/buildServer.js +67 -0
- package/dist/src/kernel/project/mcp/buildServer.js.map +1 -0
- package/dist/src/kernel/project/mcp/envelope.js +37 -0
- package/dist/src/kernel/project/mcp/envelope.js.map +1 -0
- package/dist/src/kernel/project/mcp/index.js +8 -0
- package/dist/src/kernel/project/mcp/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/instructions.js +44 -0
- package/dist/src/kernel/project/mcp/instructions.js.map +1 -0
- package/dist/src/kernel/project/mcp/mcpError.js +42 -0
- package/dist/src/kernel/project/mcp/mcpError.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/index.js +36 -0
- package/dist/src/kernel/project/mcp/prompts/index.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js +98 -0
- package/dist/src/kernel/project/mcp/prompts/provider.js.map +1 -0
- package/dist/src/kernel/project/mcp/prompts/source.js +154 -0
- package/dist/src/kernel/project/mcp/prompts/source.js.map +1 -0
- package/dist/src/kernel/project/mcp/registerVerb.js +315 -0
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -0
- package/dist/src/kernel/project/mcp/serve.js +35 -0
- package/dist/src/kernel/project/mcp/serve.js.map +1 -0
- package/dist/src/kernel/render/compactUri.js +24 -0
- package/dist/src/kernel/render/compactUri.js.map +1 -0
- package/dist/src/kernel/render/contracts.js +10 -0
- package/dist/src/kernel/render/contracts.js.map +1 -0
- package/dist/src/kernel/render/disclosure.js +34 -0
- package/dist/src/kernel/render/disclosure.js.map +1 -0
- package/dist/src/kernel/render/envelope.js +30 -0
- package/dist/src/kernel/render/envelope.js.map +1 -0
- package/dist/src/kernel/render/formatters.js +27 -0
- package/dist/src/kernel/render/formatters.js.map +1 -0
- package/dist/src/kernel/render/index.js +15 -0
- package/dist/src/kernel/render/index.js.map +1 -0
- package/dist/src/kernel/render/prefixes.js +46 -0
- package/dist/src/kernel/render/prefixes.js.map +1 -0
- package/dist/src/kernel/render/renderers.js +468 -0
- package/dist/src/kernel/render/renderers.js.map +1 -0
- package/dist/src/kernel/render/style.js +105 -0
- package/dist/src/kernel/render/style.js.map +1 -0
- package/dist/src/kernel/render/turtle.js +194 -0
- package/dist/src/kernel/render/turtle.js.map +1 -0
- package/dist/src/kernel/render/vocabulary.js +174 -0
- package/dist/src/kernel/render/vocabulary.js.map +1 -0
- package/dist/src/kernel/render/writeStdout.js +43 -0
- package/dist/src/kernel/render/writeStdout.js.map +1 -0
- package/dist/src/kernel/runtime/boot.js +49 -0
- package/dist/src/kernel/runtime/boot.js.map +1 -0
- package/dist/src/kernel/runtime/facade.js +39 -0
- package/dist/src/kernel/runtime/facade.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/build.js +122 -0
- package/dist/src/kernel/runtime/graphpack/build.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js +303 -0
- package/dist/src/kernel/runtime/graphpack/buildIndex.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +6 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.stories.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +82 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/hash.js +38 -0
- package/dist/src/kernel/runtime/graphpack/hash.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/index.js +11 -0
- package/dist/src/kernel/runtime/graphpack/index.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js +145 -0
- package/dist/src/kernel/runtime/graphpack/manifest.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/read.js +92 -0
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js +70 -0
- package/dist/src/kernel/runtime/graphpack/schemas.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/stories.js +68 -0
- package/dist/src/kernel/runtime/graphpack/stories.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/types.js +55 -0
- package/dist/src/kernel/runtime/graphpack/types.js.map +1 -0
- package/dist/src/kernel/runtime/index.js +8 -0
- package/dist/src/kernel/runtime/index.js.map +1 -0
- package/dist/src/kernel/runtime/loadSession.js +34 -0
- package/dist/src/kernel/runtime/loadSession.js.map +1 -0
- package/dist/src/kernel/runtime/paths.js +78 -0
- package/dist/src/kernel/runtime/paths.js.map +1 -0
- package/dist/src/kernel/runtime/probe.js +37 -0
- package/dist/src/kernel/runtime/probe.js.map +1 -0
- package/dist/src/kernel/runtime/readEntity.js +363 -0
- package/dist/src/kernel/runtime/readEntity.js.map +1 -0
- package/dist/src/kernel/runtime/refs/gitOps.js +65 -0
- package/dist/src/kernel/runtime/refs/gitOps.js.map +1 -0
- package/dist/src/kernel/runtime/refs/index.js +29 -0
- package/dist/src/kernel/runtime/refs/index.js.map +1 -0
- package/dist/src/kernel/runtime/refs/parseRef.js +70 -0
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -0
- package/dist/src/kernel/runtime/refs/resolve.js +332 -0
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -0
- package/dist/src/kernel/runtime/resolveSources.js +62 -0
- package/dist/src/kernel/runtime/resolveSources.js.map +1 -0
- package/dist/src/kernel/runtime/store.js +75 -0
- package/dist/src/kernel/runtime/store.js.map +1 -0
- package/dist/src/kernel/runtime/storeReadiness.js +51 -0
- package/dist/src/kernel/runtime/storeReadiness.js.map +1 -0
- package/dist/src/kernel/runtime/types.js +11 -0
- package/dist/src/kernel/runtime/types.js.map +1 -0
- package/dist/src/kernel/spec/asVerb.js +21 -0
- package/dist/src/kernel/spec/asVerb.js.map +1 -0
- package/dist/src/kernel/spec/emitReference.js +578 -0
- package/dist/src/kernel/spec/emitReference.js.map +1 -0
- package/dist/src/kernel/spec/emitSurface.js +202 -0
- package/dist/src/kernel/spec/emitSurface.js.map +1 -0
- package/dist/src/kernel/spec/index.js +11 -0
- package/dist/src/kernel/spec/index.js.map +1 -0
- package/dist/src/kernel/spec/surfaceConformance.js +103 -0
- package/dist/src/kernel/spec/surfaceConformance.js.map +1 -0
- package/dist/src/kernel/spec/types.js +14 -0
- package/dist/src/kernel/spec/types.js.map +1 -0
- package/dist/src/kernel/spec/validate.js +110 -0
- package/dist/src/kernel/spec/validate.js.map +1 -0
- package/dist/src/kernel/vocabulary.js +97 -0
- package/dist/src/kernel/vocabulary.js.map +1 -0
- package/dist/src/types.js +11 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +22 -23
- package/pragma.conf.ts +486 -90
- package/src/bin.ts +274 -82
- package/src/capabilities/block.parity.test.ts +29 -12
- package/src/capabilities/block.shipped.exec.test.ts +282 -0
- package/src/capabilities/block.tierRank.exec.test.ts +300 -0
- package/src/capabilities/capabilities/capabilities.render.ts +1 -1
- package/src/capabilities/capabilities/capabilities.verb.ts +1 -1
- package/src/capabilities/capabilities/catalog.ts +3 -3
- package/src/capabilities/capabilities/hints.ts +32 -7
- package/src/capabilities/capabilities/index.ts +1 -1
- package/src/capabilities/colophon/collectColophon.ts +35 -24
- package/src/capabilities/colophon/colophon.render.ts +24 -1
- package/src/capabilities/colophon/colophon.test.ts +42 -21
- package/src/capabilities/colophon/colophon.verb.ts +4 -4
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/config/collectConfigShow.ts +3 -3
- package/src/capabilities/config/field.render.ts +4 -5
- package/src/capabilities/config/fields.ts +17 -10
- package/src/capabilities/config/get.verb.ts +70 -0
- package/src/capabilities/config/getUnset.test.ts +264 -0
- package/src/capabilities/config/index.ts +5 -1
- package/src/capabilities/config/runField.ts +40 -22
- package/src/capabilities/config/runGet.ts +34 -0
- package/src/capabilities/config/runSet.ts +35 -9
- package/src/capabilities/config/set.test.ts +48 -14
- package/src/capabilities/config/set.verb.ts +8 -7
- package/src/capabilities/config/show.render.ts +1 -1
- package/src/capabilities/config/show.verb.ts +9 -6
- package/src/capabilities/config/types.ts +18 -4
- package/src/capabilities/config/unset.verb.ts +58 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +2 -3
- package/src/capabilities/create/byteEquality.test.ts +25 -11
- package/src/capabilities/create/cliProjection.ts +227 -0
- package/src/capabilities/create/constants.ts +36 -61
- package/src/capabilities/create/create.mcp.test.ts +89 -5
- package/src/capabilities/create/create.render.ts +71 -7
- package/src/capabilities/create/create.test.ts +433 -219
- package/src/capabilities/create/create.verb.ts +297 -328
- package/src/capabilities/create/createGrammar.test.ts +865 -0
- package/src/capabilities/create/createHelp.ts +71 -0
- package/src/capabilities/create/createSurface.generated.ts +400 -0
- package/src/capabilities/create/crossCli.subprocess.test.ts +745 -0
- package/src/capabilities/create/cwdJail.test.ts +24 -5
- package/src/capabilities/create/generatorToVerbSpec.test.ts +186 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +13 -11
- package/src/capabilities/create/index.ts +7 -4
- package/src/capabilities/create/messages.ts +18 -0
- package/src/capabilities/create/mount.ts +391 -0
- package/src/capabilities/create/pathJail.test.ts +90 -0
- package/src/capabilities/create/pathJail.ts +8 -5
- package/src/capabilities/create/pickGenerator.ts +23 -35
- package/src/capabilities/create/shippedCreate.subprocess.test.ts +164 -0
- package/src/capabilities/create/types.ts +20 -0
- package/src/capabilities/distribution.parity.test.ts +4 -0
- package/src/capabilities/distribution.test.ts +3 -1
- package/src/capabilities/distribution.ts +10 -15
- package/src/capabilities/doctor/checks/checkKeStore.ts +7 -5
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +75 -8
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +2 -2
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +76 -29
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +63 -17
- package/src/capabilities/doctor/checks/harnessInventory.test.ts +219 -0
- package/src/capabilities/doctor/checks/harnessInventory.ts +298 -0
- package/src/capabilities/doctor/checks/index.ts +27 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +100 -0
- package/src/capabilities/doctor/checks/mcpCommand.ts +69 -0
- package/src/capabilities/doctor/checks/targetHealth.ts +444 -0
- package/src/capabilities/doctor/doctor.render.test.ts +125 -38
- package/src/capabilities/doctor/doctor.render.ts +74 -74
- package/src/capabilities/doctor/doctor.test.ts +338 -37
- package/src/capabilities/doctor/doctor.verb.ts +8 -3
- package/src/capabilities/doctor/runChecks.ts +65 -63
- package/src/capabilities/doctor/types.ts +22 -15
- package/src/capabilities/emptyRecovery.test.ts +21 -8
- package/src/capabilities/graph/examples.exec.test.ts +107 -0
- package/src/capabilities/graph/index.ts +1 -1
- package/src/capabilities/graph/inspect.render.ts +70 -22
- package/src/capabilities/graph/inspect.test.ts +260 -5
- package/src/capabilities/graph/inspect.verb.ts +18 -6
- package/src/capabilities/graph/query.render.ts +15 -3
- package/src/capabilities/graph/query.verb.ts +3 -3
- package/src/capabilities/graph/runQuery.ts +2 -3
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/info/collectInfo.ts +13 -5
- package/src/capabilities/info/info.render.ts +7 -3
- package/src/capabilities/info/info.test.ts +37 -1
- package/src/capabilities/info/info.verb.ts +1 -1
- package/src/capabilities/info/types.ts +10 -2
- package/src/capabilities/lazy.test.ts +32 -0
- package/src/capabilities/meta/complete.verb.ts +1 -1
- package/src/capabilities/meta/index.ts +1 -1
- package/src/capabilities/meta/mcp.verb.ts +10 -8
- package/src/capabilities/ontology/index.ts +15 -11
- package/src/capabilities/ontology/ontology.test.ts +6 -55
- package/src/capabilities/ontology/queries.ts +2 -2
- package/src/capabilities/ontology/render.ts +3 -4
- package/src/capabilities/ontology/verbs.ts +27 -68
- package/src/capabilities/prompt/index.ts +2 -2
- package/src/capabilities/prompt/prompt.render.ts +6 -2
- package/src/capabilities/prompt/types.ts +1 -1
- package/src/capabilities/prompt/verbs.ts +4 -5
- package/src/capabilities/reference.test.ts +63 -0
- package/src/capabilities/renderVocabularySync.test.ts +82 -0
- package/src/capabilities/resources/provider.ts +342 -85
- package/src/capabilities/resources/resources.test.ts +355 -59
- package/src/capabilities/scopeTypeSync.test.ts +29 -15
- package/src/capabilities/setup/buildPlan.ts +240 -0
- package/src/capabilities/setup/index.ts +7 -7
- package/src/capabilities/setup/mode.ts +74 -0
- package/src/capabilities/setup/operations/index.ts +79 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +97 -24
- package/src/capabilities/setup/operations/setupConfig.ts +124 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +478 -334
- package/src/capabilities/setup/operations/setupLsp.ts +420 -67
- package/src/capabilities/setup/operations/setupMcp.ts +238 -127
- package/src/capabilities/setup/operations/setupSkills.ts +667 -105
- package/src/capabilities/setup/plan.render.ts +336 -0
- package/src/capabilities/setup/plan.ts +241 -0
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +432 -0
- package/src/capabilities/setup/setup.render.test.ts +297 -75
- package/src/capabilities/setup/setup.render.ts +45 -77
- package/src/capabilities/setup/setup.test.ts +1819 -225
- package/src/capabilities/setup/setup.verb.ts +288 -78
- package/src/capabilities/setup/shell.test.ts +86 -0
- package/src/capabilities/setup/shell.ts +137 -11
- package/src/capabilities/setup/targets.ts +435 -0
- package/src/capabilities/setup/types.ts +23 -70
- package/src/capabilities/shared/assertExecOk.ts +68 -10
- package/src/capabilities/shared/index.ts +43 -0
- package/src/capabilities/shared/packageManager.test.ts +470 -0
- package/src/capabilities/shared/packageManager.ts +425 -34
- package/src/capabilities/skill/bundledSkills.test.ts +347 -0
- package/src/capabilities/skill/discover.ts +131 -10
- package/src/capabilities/skill/index.ts +1 -1
- package/src/capabilities/skill/render.ts +10 -9
- package/src/capabilities/skill/skill.test.ts +22 -7
- package/src/capabilities/skill/verbs.ts +3 -4
- package/src/capabilities/sources/collectStatus.ts +7 -2
- package/src/capabilities/sources/index.ts +1 -1
- package/src/capabilities/sources/installSkills.ts +265 -10
- package/src/capabilities/sources/runUpdate.ts +131 -23
- package/src/capabilities/sources/sources.test.ts +382 -2
- package/src/capabilities/sources/status.render.ts +1 -1
- package/src/capabilities/sources/status.verb.ts +1 -1
- package/src/capabilities/sources/update.render.ts +1 -1
- package/src/capabilities/sources/update.verb.ts +4 -4
- package/src/capabilities/surface.test.ts +136 -19
- package/src/capabilities/upgrade/runUpgrade.ts +53 -14
- package/src/capabilities/upgrade/types.ts +10 -2
- package/src/capabilities/upgrade/upgrade.render.ts +13 -7
- package/src/capabilities/upgrade/upgrade.test.ts +75 -3
- package/src/capabilities/upgrade/upgrade.verb.ts +1 -1
- package/src/capabilities/version/index.ts +12 -0
- package/src/capabilities/version/version.test.ts +66 -0
- package/src/capabilities/version/version.verb.ts +39 -0
- package/src/constants.ts +36 -1
- package/src/identity.test.ts +57 -29
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +15 -13
- package/src/kernel/completion/complete.test.ts +12 -2
- package/src/kernel/completion/complete.ts +1 -1
- package/src/kernel/completion/emitScripts.ts +1 -1
- package/src/kernel/completion/entitySource.test.ts +16 -3
- package/src/kernel/completion/entitySource.ts +21 -8
- package/src/kernel/completion/model.test.ts +164 -12
- package/src/kernel/completion/model.ts +94 -14
- package/src/kernel/completion/parse.test.ts +4 -7
- package/src/kernel/completion/parse.ts +15 -0
- package/src/kernel/completion/resolve.test.ts +0 -1
- package/src/kernel/completion/safety.test.ts +50 -35
- package/src/kernel/completion/shellDrive.test.ts +28 -9
- package/src/kernel/completion/templates/bash.ts +7 -2
- package/src/kernel/completion/templates/index.ts +23 -0
- package/src/kernel/completion/types.ts +7 -0
- package/src/kernel/config/defaults.test.ts +27 -3
- package/src/kernel/config/defaults.ts +4 -3
- package/src/kernel/config/evaluateProjectConfig.ts +31 -8
- package/src/kernel/config/firstRun.test.ts +44 -38
- package/src/kernel/config/firstRun.ts +24 -88
- package/src/kernel/config/index.ts +1 -1
- package/src/kernel/config/readConfig.test.ts +6 -3
- package/src/kernel/config/readConfig.ts +1 -1
- package/src/kernel/config/schema.ts +3 -1
- package/src/kernel/config/types.ts +3 -1
- package/src/kernel/copy.test.ts +34 -4
- package/src/kernel/copy.ts +54 -0
- package/src/kernel/error/PragmaError.test.ts +5 -2
- package/src/kernel/error/PragmaError.ts +4 -2
- package/src/kernel/error/constants.ts +7 -5
- package/src/kernel/error/fromTaskError.ts +28 -6
- package/src/kernel/error/recovery.ts +14 -0
- package/src/kernel/error/renderError.ts +42 -1
- package/src/kernel/error/types.ts +21 -1
- package/src/kernel/index.ts +35 -0
- package/src/kernel/interactivity.test.ts +76 -0
- package/src/kernel/interactivity.ts +69 -0
- package/src/kernel/packs/collect.ts +12 -16
- package/src/kernel/packs/compile.test.ts +222 -1
- package/src/kernel/packs/compile.ts +93 -3
- package/src/kernel/packs/disclosure.ts +2 -2
- package/src/kernel/packs/graphql/buildLookupDocument.ts +1 -1
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +3 -4
- package/src/kernel/packs/graphql/index.ts +20 -0
- package/src/kernel/packs/index.ts +40 -0
- package/src/kernel/packs/iri.test.ts +73 -0
- package/src/kernel/packs/iri.ts +66 -14
- package/src/kernel/packs/renderPack.ts +25 -6
- package/src/kernel/packs/resolveEntity.test.ts +274 -0
- package/src/kernel/packs/resolveEntity.ts +200 -42
- package/src/kernel/packs/runBodies.ts +86 -22
- package/src/kernel/packs/sample.ts +1 -1
- package/src/kernel/packs/schema.ts +78 -5
- package/src/kernel/packs/sparql/applyFilters.ts +136 -16
- package/src/kernel/packs/sparql/buildLookupQuery.test.ts +290 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +367 -17
- package/src/kernel/packs/sparql/index.ts +37 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +1 -1
- package/src/kernel/packs/sparql/runSelect.ts +3 -4
- package/src/kernel/packs/toolDescription.test.ts +77 -4
- package/src/kernel/packs/types.ts +136 -0
- package/src/kernel/packs/uniqueness.ts +1 -1
- package/src/kernel/project/cli/buildProgram.test.ts +218 -12
- package/src/kernel/project/cli/buildProgram.ts +84 -18
- package/src/kernel/project/cli/constants.ts +34 -0
- package/src/kernel/project/cli/dispatch.test.ts +160 -2
- package/src/kernel/project/cli/dispatch.ts +226 -45
- package/src/kernel/project/cli/exitCodes.ts +1 -1
- package/src/kernel/project/cli/globalFlags.test.ts +117 -1
- package/src/kernel/project/cli/globalFlags.ts +134 -31
- package/src/kernel/project/cli/helpFormat.ts +14 -2
- package/src/kernel/project/cli/rootHelp.ts +74 -12
- package/src/kernel/project/cli/suggest.test.ts +33 -1
- package/src/kernel/project/cli/suggest.ts +25 -1
- package/src/kernel/project/cli/verbHelp.test.ts +30 -0
- package/src/kernel/project/cli/verbHelp.ts +23 -7
- package/src/kernel/project/mcp/buildServer.ts +7 -4
- package/src/kernel/project/mcp/envelope.ts +2 -2
- package/src/kernel/project/mcp/instructions.ts +2 -2
- package/src/kernel/project/mcp/mcpError.ts +1 -1
- package/src/kernel/project/mcp/parity.test.ts +5 -2
- package/src/kernel/project/mcp/prompts/index.ts +37 -0
- package/src/kernel/project/mcp/prompts/source.ts +2 -2
- package/src/kernel/project/mcp/registerVerb.ts +55 -10
- package/src/kernel/project/mcp/serve.ts +2 -2
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +7 -4
- package/src/kernel/render/contracts.ts +21 -0
- package/src/kernel/render/envelope.ts +2 -3
- package/src/kernel/render/formatters.ts +1 -1
- package/src/kernel/render/renderers.test.ts +243 -6
- package/src/kernel/render/renderers.ts +222 -20
- package/src/kernel/render/style.test.ts +75 -24
- package/src/kernel/render/style.ts +59 -6
- package/src/kernel/render/turtle.ts +222 -0
- package/src/kernel/render/vocabulary.ts +276 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +3 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded.ts +3 -3
- package/src/kernel/runtime/graphpack/manifest.ts +1 -1
- package/src/kernel/runtime/graphpack/read.ts +1 -2
- package/src/kernel/runtime/loadSession.ts +1 -1
- package/src/kernel/runtime/probe.ts +6 -6
- package/src/kernel/runtime/readEntity.ts +472 -28
- package/src/kernel/runtime/refs/index.ts +39 -0
- package/src/kernel/runtime/refs/parseRef.ts +2 -2
- package/src/kernel/runtime/refs/resolve.ts +4 -4
- package/src/kernel/runtime/storeReadiness.ts +1 -2
- package/src/kernel/runtime/types.ts +15 -1
- package/src/kernel/runtime/wasmEmbed.test.ts +37 -39
- package/src/kernel/spec/emitReference.ts +105 -30
- package/src/kernel/spec/emitSurface.ts +48 -6
- package/src/kernel/spec/surfaceConformance.test.ts +4 -2
- package/src/kernel/spec/types.ts +277 -4
- package/src/testing/PARITY_GAPS.ts +9 -3
- package/src/testing/behavioral/docExamples.test.ts +16 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +112 -9
- package/src/testing/behavioral/firstRun.e2e.test.ts +24 -24
- package/src/testing/behavioral/journeys.cli.test.ts +1 -1
- package/src/testing/behavioral/journeys.defaultPack.test.ts +7 -7
- package/src/testing/behavioral/journeys.firstInstall.test.ts +7 -2
- package/src/testing/behavioral/journeys.implementation.test.ts +206 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +2 -2
- package/src/testing/behavioral/journeys.packageStories.test.ts +10 -7
- package/src/testing/behavioral/mcpServe.e2e.test.ts +57 -2
- package/src/testing/behavioral/mcpSurface.test.ts +1 -1
- package/src/testing/behavioral/rootCli.e2e.test.ts +26 -2
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +26 -1
- package/src/testing/eval/cases/effectful.ts +3 -2
- package/src/testing/eval/cases/readNouns.ts +245 -9
- package/src/testing/fixtures/blockGraph.ts +104 -10
- package/src/testing/fixtures/graph/canonical.ts +182 -13
- package/src/testing/fixtures/graph/defaultPack.ts +1 -1
- package/src/testing/helpers/blankCanonicalRanges.ts +36 -0
- package/src/testing/helpers/projectMcp.ts +32 -6
- package/src/testing/helpers/runCli.ts +35 -18
- package/src/testing/perf/budgets.test.ts +20 -9
- package/src/testing/perf/budgets.ts +58 -9
- package/src/testing/perf/codegen.test.ts +126 -0
- package/src/testing/perf/globalSetup.test.ts +286 -0
- package/src/testing/perf/globalSetup.ts +505 -23
- package/src/testing/perf/measure.test.ts +38 -0
- package/src/testing/perf/measure.ts +23 -4
- package/src/testing/setupXdgIsolation.ts +81 -21
- package/src/testing/tempRoot.globalSetup.ts +122 -0
- package/dist/pragma +0 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +0 -189
- package/src/capabilities/create/templates.embedded.generated.ts +0 -28
- package/src/capabilities/doctor/checks/checkConfigFile.ts +0 -42
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +0 -114
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +0 -68
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +0 -61
- package/src/capabilities/doctor/checks/deriveBand.test.ts +0 -42
- package/src/capabilities/doctor/checks/deriveBand.ts +0 -28
- package/src/capabilities/shared/bands.ts +0 -16
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +0 -11
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Render goldens for `pragma doctor` — the
|
|
3
|
-
* color gate (F1).
|
|
2
|
+
* Render goldens for `pragma doctor` — the scope-grouped report AND the
|
|
3
|
+
* plain-path color gate (F1).
|
|
4
4
|
*
|
|
5
|
-
* The
|
|
6
|
-
* both the plain and llm formatters, locking the
|
|
7
|
-
*
|
|
5
|
+
* The Global / Local project grouping (`partitionByScope` → sections) is pinned
|
|
6
|
+
* for both the plain and llm formatters, locking the vocabulary the flags
|
|
7
|
+
* already use — `--global` and `--local`. It is neither MACHINE/PROJECT (the
|
|
8
|
+
* first spelling) nor "band" (the second): "band" was this repository's word for
|
|
9
|
+
* the partition and nobody else's. Separately, the plain
|
|
8
10
|
* formatter tints ONLY on a color-capable TTY: `supports-color` reports a
|
|
9
11
|
* non-zero `chalk.level` off a TTY under `GITHUB_ACTIONS` / `FORCE_COLOR`, so the
|
|
10
12
|
* `isTTY` gate (via the shared style seam) keeps ANSI out of
|
|
11
|
-
* `doctor --format plain | tee`. `beforeEach` forces color OFF so the
|
|
13
|
+
* `doctor --format plain | tee`. `beforeEach` forces color OFF so the section
|
|
12
14
|
* goldens stay deterministic; the color tests opt a level back in explicitly.
|
|
13
15
|
*/
|
|
14
16
|
|
|
@@ -17,36 +19,37 @@ import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
|
|
17
19
|
import { doctorFormatters } from "./doctor.render.js";
|
|
18
20
|
import type { DoctorData } from "./types.js";
|
|
19
21
|
|
|
20
|
-
/** A fixture spanning all three groups: environment (no
|
|
21
|
-
const
|
|
22
|
+
/** A fixture spanning all three groups: environment (no scope), global, project. */
|
|
23
|
+
const SCOPED_DATA: DoctorData = {
|
|
22
24
|
checks: [
|
|
23
25
|
{ name: "Node version", status: "pass", detail: "v20 detected" },
|
|
24
26
|
{
|
|
25
27
|
name: "Shell completions",
|
|
26
28
|
status: "pass",
|
|
27
29
|
detail: "zsh up to date and resolving",
|
|
28
|
-
|
|
30
|
+
scope: "global",
|
|
29
31
|
},
|
|
30
32
|
{
|
|
31
33
|
name: "MCP configured",
|
|
32
|
-
status: "
|
|
33
|
-
detail: "
|
|
34
|
+
status: "available",
|
|
35
|
+
detail: "not set up for Windsurf",
|
|
34
36
|
remedy: "pragma setup mcp",
|
|
35
|
-
|
|
37
|
+
scope: "global",
|
|
36
38
|
},
|
|
37
39
|
{
|
|
38
40
|
name: "Skills symlinked",
|
|
39
41
|
status: "skip",
|
|
40
42
|
detail: "no AI harnesses detected",
|
|
41
|
-
|
|
43
|
+
scope: "project",
|
|
42
44
|
},
|
|
43
45
|
],
|
|
44
46
|
passed: 2,
|
|
45
|
-
failed:
|
|
47
|
+
failed: 0,
|
|
48
|
+
available: 1,
|
|
46
49
|
skipped: 1,
|
|
47
50
|
};
|
|
48
51
|
|
|
49
|
-
/** A fixture spanning
|
|
52
|
+
/** A fixture spanning every status tier, sub-items, and remedies — every color path. */
|
|
50
53
|
const COLOR_DATA: DoctorData = {
|
|
51
54
|
checks: [
|
|
52
55
|
{ name: "Node version", status: "pass", detail: "v24" },
|
|
@@ -60,10 +63,17 @@ const COLOR_DATA: DoctorData = {
|
|
|
60
63
|
],
|
|
61
64
|
remedy: "pragma sources update",
|
|
62
65
|
},
|
|
66
|
+
{
|
|
67
|
+
name: "Shell completions",
|
|
68
|
+
status: "available",
|
|
69
|
+
detail: "resolver OK; zsh script not installed",
|
|
70
|
+
remedy: "pragma setup completions",
|
|
71
|
+
},
|
|
63
72
|
{ name: "Skills symlinked", status: "skip", detail: "no harness" },
|
|
64
73
|
],
|
|
65
74
|
passed: 1,
|
|
66
75
|
failed: 1,
|
|
76
|
+
available: 1,
|
|
67
77
|
skipped: 1,
|
|
68
78
|
};
|
|
69
79
|
|
|
@@ -90,54 +100,59 @@ afterAll(() => {
|
|
|
90
100
|
chalk.level = prevLevel;
|
|
91
101
|
});
|
|
92
102
|
|
|
93
|
-
describe("doctor render —
|
|
94
|
-
it("groups checks under Global then
|
|
95
|
-
const out = doctorFormatters.plain(
|
|
103
|
+
describe("doctor render — scoped plain report", () => {
|
|
104
|
+
it("groups checks under Global then Local project headers", () => {
|
|
105
|
+
const out = doctorFormatters.plain(SCOPED_DATA);
|
|
96
106
|
const lines = out.split("\n");
|
|
97
|
-
// The two
|
|
107
|
+
// The two section headers use the words the flags use.
|
|
98
108
|
expect(lines).toContain("Global");
|
|
99
|
-
expect(lines).toContain("
|
|
100
|
-
// The superseded MACHINE/PROJECT labels are gone
|
|
109
|
+
expect(lines).toContain("Local project");
|
|
110
|
+
// The superseded MACHINE/PROJECT labels are gone — and so is "band", which
|
|
111
|
+
// no user-facing string in this report may say.
|
|
101
112
|
expect(out).not.toContain("MACHINE");
|
|
102
113
|
expect(out).not.toMatch(/^PROJECT$/m);
|
|
114
|
+
expect(out).not.toMatch(/\bbands?\b/);
|
|
103
115
|
});
|
|
104
116
|
|
|
105
|
-
it("orders environment → Global →
|
|
106
|
-
const out = doctorFormatters.plain(
|
|
107
|
-
// Environment check leads with no header; the two global
|
|
108
|
-
//
|
|
117
|
+
it("orders environment → Global → Local project, placing each check correctly", () => {
|
|
118
|
+
const out = doctorFormatters.plain(SCOPED_DATA);
|
|
119
|
+
// Environment check leads with no header; the two global checks sit under
|
|
120
|
+
// Global; the per-project check sits under Local project.
|
|
109
121
|
const at = (needle: string): number => out.indexOf(needle);
|
|
110
122
|
expect(at("Node version")).toBeGreaterThanOrEqual(0);
|
|
111
123
|
expect(at("Node version")).toBeLessThan(at("Global"));
|
|
112
124
|
expect(at("Global")).toBeLessThan(at("Shell completions"));
|
|
113
|
-
expect(at("MCP configured")).toBeLessThan(at("
|
|
114
|
-
expect(at("
|
|
115
|
-
//
|
|
125
|
+
expect(at("MCP configured")).toBeLessThan(at("Local project"));
|
|
126
|
+
expect(at("Local project")).toBeLessThan(at("Skills symlinked"));
|
|
127
|
+
// An available scoped check keeps its inline setup command under its scope.
|
|
116
128
|
expect(out).toContain("fix: pragma setup mcp");
|
|
117
129
|
// The tally closes the report.
|
|
118
130
|
expect(out).toContain("2 passed");
|
|
119
131
|
});
|
|
120
132
|
});
|
|
121
133
|
|
|
122
|
-
describe("doctor render —
|
|
123
|
-
it("groups checks under ### Global then ###
|
|
124
|
-
const out = doctorFormatters.llm(
|
|
134
|
+
describe("doctor render — scoped llm report", () => {
|
|
135
|
+
it("groups checks under ### Global then ### Local project headers", () => {
|
|
136
|
+
const out = doctorFormatters.llm(SCOPED_DATA);
|
|
125
137
|
expect(out).toContain("### Global");
|
|
126
|
-
expect(out).toContain("###
|
|
138
|
+
expect(out).toContain("### Local project");
|
|
127
139
|
expect(out).not.toContain("### Machine");
|
|
128
140
|
const at = (needle: string): number => out.indexOf(needle);
|
|
129
|
-
// Environment leads (no section header), then the two
|
|
141
|
+
// Environment leads (no section header), then the two scoped sections.
|
|
130
142
|
expect(at("Node version")).toBeLessThan(at("### Global"));
|
|
131
143
|
expect(at("### Global")).toBeLessThan(at("Shell completions"));
|
|
132
|
-
expect(at("Shell completions")).toBeLessThan(at("###
|
|
133
|
-
expect(at("###
|
|
134
|
-
expect(out).toContain("_2 passed,
|
|
144
|
+
expect(at("Shell completions")).toBeLessThan(at("### Local project"));
|
|
145
|
+
expect(at("### Local project")).toBeLessThan(at("Skills symlinked"));
|
|
146
|
+
expect(out).toContain("_2 passed, 0 failed, 1 available, 1 skipped_");
|
|
135
147
|
});
|
|
136
148
|
});
|
|
137
149
|
|
|
138
150
|
describe("doctor render — json", () => {
|
|
139
151
|
it("is the exact DoctorData round-trip", () => {
|
|
140
|
-
expect(JSON.parse(doctorFormatters.json(
|
|
152
|
+
expect(JSON.parse(doctorFormatters.json(SCOPED_DATA))).toEqual(SCOPED_DATA);
|
|
153
|
+
// The machine surface uses the scope vocabulary too — the retired word
|
|
154
|
+
// cannot survive as a JSON key.
|
|
155
|
+
expect(doctorFormatters.json(SCOPED_DATA)).not.toMatch(/\bbands?\b/);
|
|
141
156
|
});
|
|
142
157
|
});
|
|
143
158
|
|
|
@@ -152,9 +167,12 @@ describe("doctor render — piped output is ANSI-free (F1)", () => {
|
|
|
152
167
|
expect(out).toContain("pragma doctor");
|
|
153
168
|
expect(out).toContain("✓ Node version");
|
|
154
169
|
expect(out).toContain("✗ pack refs");
|
|
170
|
+
expect(out).toContain("◇ Shell completions");
|
|
155
171
|
expect(out).toContain("○ Skills symlinked");
|
|
156
172
|
expect(out).toContain("↳ fix: pragma sources update");
|
|
157
|
-
|
|
173
|
+
// The available tier keeps its setup command inline, like a fail's fix.
|
|
174
|
+
expect(out).toContain("↳ fix: pragma setup completions");
|
|
175
|
+
expect(out).toContain(" 1 passed · 1 failed · 1 available · 1 skipped");
|
|
158
176
|
});
|
|
159
177
|
});
|
|
160
178
|
});
|
|
@@ -168,3 +186,72 @@ describe("doctor render — color ON (attended TTY)", () => {
|
|
|
168
186
|
});
|
|
169
187
|
});
|
|
170
188
|
});
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* The harness inventory renders through the EXISTING check-with-items
|
|
192
|
+
* primitive — a listing needs no new machinery, only a check whose `items` are
|
|
193
|
+
* harnesses. This pins that it reads as an inventory in both formats: named
|
|
194
|
+
* harnesses under their scope, mixed per-item glyphs, and NO `fix:` line (the
|
|
195
|
+
* `mcp`/`skills` rows own every action a harness can need).
|
|
196
|
+
*/
|
|
197
|
+
const INVENTORY_DATA: DoctorData = {
|
|
198
|
+
checks: [
|
|
199
|
+
{
|
|
200
|
+
name: "harnesses",
|
|
201
|
+
status: "pass",
|
|
202
|
+
detail: "1 detected · 1 registered · 3 known",
|
|
203
|
+
scope: "global",
|
|
204
|
+
items: [
|
|
205
|
+
{
|
|
206
|
+
label: "Claude Code",
|
|
207
|
+
status: "pass",
|
|
208
|
+
detail: "registered — ~/.claude.json",
|
|
209
|
+
},
|
|
210
|
+
{ label: "Cursor", status: "skip", detail: "not detected" },
|
|
211
|
+
{
|
|
212
|
+
label: "VS Code",
|
|
213
|
+
status: "skip",
|
|
214
|
+
detail: "keeps no global config",
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
},
|
|
218
|
+
],
|
|
219
|
+
passed: 1,
|
|
220
|
+
failed: 0,
|
|
221
|
+
available: 0,
|
|
222
|
+
skipped: 0,
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
describe("doctor render — the harness inventory", () => {
|
|
226
|
+
it("renders one aligned sub-item per harness, with no fix line", () => {
|
|
227
|
+
const out = doctorFormatters.plain(INVENTORY_DATA);
|
|
228
|
+
expect(out).toContain("Global");
|
|
229
|
+
expect(out).toContain("harnesses");
|
|
230
|
+
expect(out).toContain("1 detected · 1 registered · 3 known");
|
|
231
|
+
expect(out).toContain("· ✓ Claude Code registered — ~/.claude.json");
|
|
232
|
+
expect(out).toContain("· ○ Cursor not detected");
|
|
233
|
+
expect(out).toContain("· ○ VS Code keeps no global config");
|
|
234
|
+
// A listing proposes nothing — and never renders a failure glyph.
|
|
235
|
+
expect(out).not.toContain("fix:");
|
|
236
|
+
expect(out).not.toContain("✗");
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
it("nests the harnesses under the check in the llm format", () => {
|
|
240
|
+
const out = doctorFormatters.llm(INVENTORY_DATA);
|
|
241
|
+
expect(out).toContain("### Global");
|
|
242
|
+
expect(out).toContain(
|
|
243
|
+
"- ✓ **harnesses**: 1 detected · 1 registered · 3 known",
|
|
244
|
+
);
|
|
245
|
+
expect(out).toContain(" - ✓ Claude Code: registered — ~/.claude.json");
|
|
246
|
+
expect(out).toContain(" - ○ VS Code: keeps no global config");
|
|
247
|
+
expect(out).not.toContain("_fix:_");
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it("round-trips through json with every row intact", () => {
|
|
251
|
+
const parsed = JSON.parse(
|
|
252
|
+
doctorFormatters.json(INVENTORY_DATA),
|
|
253
|
+
) as DoctorData;
|
|
254
|
+
expect(parsed).toEqual(INVENTORY_DATA);
|
|
255
|
+
expect(parsed.checks[0]?.items).toHaveLength(3);
|
|
256
|
+
});
|
|
257
|
+
});
|
|
@@ -10,61 +10,41 @@
|
|
|
10
10
|
* Glyphs are plain constants tinted at render time; nothing is baked at load.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import chalk from "chalk";
|
|
14
13
|
import { BIN_NAME } from "../../constants.js";
|
|
15
14
|
import { defaultStyle, type RenderStyle } from "../../kernel/render/style.js";
|
|
16
|
-
import
|
|
17
|
-
|
|
15
|
+
import {
|
|
16
|
+
CHECK_GLYPHS,
|
|
17
|
+
checkRemedyWord,
|
|
18
|
+
FIX_ARROW,
|
|
19
|
+
SCOPE_LABELS,
|
|
20
|
+
SUB_BULLET,
|
|
21
|
+
SUB_INDENT,
|
|
22
|
+
} from "../../kernel/render/vocabulary.js";
|
|
23
|
+
import type { Formatters } from "../../kernel/spec/index.js";
|
|
18
24
|
import type { CheckResult, CheckStatus, DoctorData } from "./types.js";
|
|
19
25
|
|
|
20
|
-
/** Uncolored status glyphs — tinted at render time (never baked at module load). */
|
|
21
|
-
const STATUS_GLYPHS: Record<CheckStatus, string> = {
|
|
22
|
-
pass: "✓",
|
|
23
|
-
fail: "✗",
|
|
24
|
-
skip: "○",
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const SUB_BULLET = "·";
|
|
28
|
-
const FIX_ARROW = "↳";
|
|
29
|
-
const INDENT = " "; // aligns sub-lines under the check name
|
|
30
|
-
|
|
31
|
-
/** The TTY styler plus `red` — the one tint {@link RenderStyle} does not carry. */
|
|
32
|
-
interface DoctorStyle extends RenderStyle {
|
|
33
|
-
red(text: string): string;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
26
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* @returns A colorizing styler on a color-capable TTY, else the identity styler.
|
|
41
|
-
* @note Impure — {@link defaultStyle} reads `process.stdout.isTTY` + chalk level.
|
|
27
|
+
* Tint a status glyph by meaning — green pass, red fail, cyan available
|
|
28
|
+
* (actionable-but-optional, the same tint as the `fix:` arrow it points at),
|
|
29
|
+
* yellow skip.
|
|
42
30
|
*/
|
|
43
|
-
function
|
|
44
|
-
const
|
|
45
|
-
return {
|
|
46
|
-
...style,
|
|
47
|
-
red: style.enabled ? (text) => chalk.red(text) : (text) => text,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/** Tint a status glyph by meaning — green pass, red fail, yellow skip. */
|
|
52
|
-
function paintGlyph(status: CheckStatus, style: DoctorStyle): string {
|
|
53
|
-
const glyph = STATUS_GLYPHS[status];
|
|
31
|
+
function paintGlyph(status: CheckStatus, style: RenderStyle): string {
|
|
32
|
+
const glyph = CHECK_GLYPHS[status];
|
|
54
33
|
if (status === "pass") return style.green(glyph);
|
|
55
34
|
if (status === "fail") return style.red(glyph);
|
|
35
|
+
if (status === "available") return style.cyan(glyph);
|
|
56
36
|
return style.yellow(glyph);
|
|
57
37
|
}
|
|
58
38
|
|
|
59
39
|
/**
|
|
60
40
|
* Render one check as terminal lines: a headline row (icon, aligned name,
|
|
61
|
-
* detail), an optional indented breakdown of sub-items, and —
|
|
62
|
-
* inline
|
|
41
|
+
* detail), an optional indented breakdown of sub-items, and — whenever the
|
|
42
|
+
* check carries one — an inline instruction.
|
|
63
43
|
*/
|
|
64
44
|
function formatCheckPlain(
|
|
65
45
|
check: CheckResult,
|
|
66
46
|
nameWidth: number,
|
|
67
|
-
style:
|
|
47
|
+
style: RenderStyle,
|
|
68
48
|
): string[] {
|
|
69
49
|
const name = check.name.padEnd(nameWidth);
|
|
70
50
|
const label = check.status === "fail" ? style.red(name) : style.bold(name);
|
|
@@ -84,28 +64,46 @@ function formatCheckPlain(
|
|
|
84
64
|
const itemLabel = item.detail ? item.label.padEnd(itemWidth) : item.label;
|
|
85
65
|
const detail = item.detail ? ` ${style.dim(item.detail)}` : "";
|
|
86
66
|
lines.push(
|
|
87
|
-
`${
|
|
67
|
+
`${SUB_INDENT}${style.dim(SUB_BULLET)} ${icon}${itemLabel}${detail}`,
|
|
88
68
|
);
|
|
89
69
|
}
|
|
90
70
|
}
|
|
91
71
|
|
|
92
|
-
|
|
72
|
+
// Every row that HAS an instruction prints it. A fail's remedy is the
|
|
73
|
+
// repair, an available's is the setup command that enables it — and a skip's,
|
|
74
|
+
// when it authored one, is the only thing standing between the reader and a
|
|
75
|
+
// dead end. Skips were dropped here, so `skills` reported "no skills
|
|
76
|
+
// installed" with the next step (`sources update`) computed, carried through
|
|
77
|
+
// the check, published in `--format json`, and then thrown away one line
|
|
78
|
+
// before it reached the person reading. A skip never DERIVES a remedy
|
|
79
|
+
// (`scopedChecks` only passes through an authored one), so this prints
|
|
80
|
+
// nothing that was not deliberately written for this machine.
|
|
81
|
+
if (check.remedy) {
|
|
93
82
|
lines.push(
|
|
94
|
-
`${
|
|
83
|
+
`${SUB_INDENT}${style.cyan(FIX_ARROW)} ${style.cyan(`${checkRemedyWord(check.status)}:`)} ${check.remedy}`,
|
|
95
84
|
);
|
|
96
85
|
}
|
|
97
86
|
|
|
98
87
|
return lines;
|
|
99
88
|
}
|
|
100
89
|
|
|
101
|
-
/**
|
|
102
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Render the pass/fail/available/skip tally, coloring the non-zero counts.
|
|
92
|
+
* `available` is counted apart from `failed` so a healthy install with
|
|
93
|
+
* integrations left to opt into never reports failures it does not have.
|
|
94
|
+
*/
|
|
95
|
+
function formatSummary(data: DoctorData, style: RenderStyle): string {
|
|
103
96
|
const parts = [style.green(`${data.passed} passed`)];
|
|
104
97
|
parts.push(
|
|
105
98
|
data.failed > 0
|
|
106
99
|
? style.red(`${data.failed} failed`)
|
|
107
100
|
: style.dim(`${data.failed} failed`),
|
|
108
101
|
);
|
|
102
|
+
parts.push(
|
|
103
|
+
data.available > 0
|
|
104
|
+
? style.cyan(`${data.available} available`)
|
|
105
|
+
: style.dim(`${data.available} available`),
|
|
106
|
+
);
|
|
109
107
|
parts.push(
|
|
110
108
|
data.skipped > 0
|
|
111
109
|
? style.yellow(`${data.skipped} skipped`)
|
|
@@ -115,28 +113,28 @@ function formatSummary(data: DoctorData, style: DoctorStyle): string {
|
|
|
115
113
|
}
|
|
116
114
|
|
|
117
115
|
/**
|
|
118
|
-
* Partition checks into ordered
|
|
119
|
-
* and project
|
|
120
|
-
* report stays deterministic.
|
|
116
|
+
* Partition checks into ordered sections: environment (no scope), then the
|
|
117
|
+
* global and local-project scopes. Declaration order is preserved within each,
|
|
118
|
+
* so the report stays deterministic.
|
|
121
119
|
*/
|
|
122
|
-
function
|
|
120
|
+
function partitionByScope(checks: readonly CheckResult[]): {
|
|
123
121
|
environment: CheckResult[];
|
|
124
|
-
|
|
122
|
+
global: CheckResult[];
|
|
125
123
|
project: CheckResult[];
|
|
126
124
|
} {
|
|
127
125
|
return {
|
|
128
|
-
environment: checks.filter((c) => c.
|
|
129
|
-
|
|
130
|
-
project: checks.filter((c) => c.
|
|
126
|
+
environment: checks.filter((c) => c.scope === undefined),
|
|
127
|
+
global: checks.filter((c) => c.scope === "global"),
|
|
128
|
+
project: checks.filter((c) => c.scope === "project"),
|
|
131
129
|
};
|
|
132
130
|
}
|
|
133
131
|
|
|
134
132
|
export const doctorFormatters: Formatters<DoctorData> = {
|
|
135
133
|
plain(data) {
|
|
136
|
-
const style =
|
|
134
|
+
const style = defaultStyle();
|
|
137
135
|
const nameWidth = Math.max(...data.checks.map((c) => c.name.length), 0);
|
|
138
136
|
const lines: string[] = [style.bold(`${BIN_NAME} doctor`), ""];
|
|
139
|
-
const { environment,
|
|
137
|
+
const { environment, global, project } = partitionByScope(data.checks);
|
|
140
138
|
const section = (heading: string, checks: CheckResult[]): void => {
|
|
141
139
|
if (checks.length === 0) return;
|
|
142
140
|
if (heading) lines.push(style.bold(heading));
|
|
@@ -144,51 +142,53 @@ export const doctorFormatters: Formatters<DoctorData> = {
|
|
|
144
142
|
lines.push(...formatCheckPlain(check, nameWidth, style));
|
|
145
143
|
lines.push("");
|
|
146
144
|
};
|
|
147
|
-
// Environment checks lead (no header);
|
|
148
|
-
// two
|
|
145
|
+
// Environment checks lead (no header); Global then Local project are the
|
|
146
|
+
// two scoped sections before the tally.
|
|
149
147
|
section("", environment);
|
|
150
|
-
section(
|
|
151
|
-
section(
|
|
148
|
+
section(SCOPE_LABELS.global, global);
|
|
149
|
+
section(SCOPE_LABELS.project, project);
|
|
152
150
|
lines.push(formatSummary(data, style));
|
|
153
151
|
return lines.join("\n");
|
|
154
152
|
},
|
|
155
153
|
|
|
156
154
|
llm(data) {
|
|
157
155
|
const renderCheck = (check: CheckResult): string[] => {
|
|
158
|
-
const
|
|
159
|
-
check.status
|
|
160
|
-
|
|
156
|
+
const out = [
|
|
157
|
+
`- ${CHECK_GLYPHS[check.status]} **${check.name}**: ${check.detail}`,
|
|
158
|
+
];
|
|
161
159
|
for (const item of check.items ?? []) {
|
|
162
|
-
const itemIcon =
|
|
163
|
-
item.status === "pass"
|
|
164
|
-
? "✓ "
|
|
165
|
-
: item.status === "fail"
|
|
166
|
-
? "✗ "
|
|
167
|
-
: item.status === "skip"
|
|
168
|
-
? "○ "
|
|
169
|
-
: "";
|
|
160
|
+
const itemIcon = item.status ? `${CHECK_GLYPHS[item.status]} ` : "";
|
|
170
161
|
const detail = item.detail ? `: ${item.detail}` : "";
|
|
171
162
|
out.push(` - ${itemIcon}${item.label}${detail}`);
|
|
172
163
|
}
|
|
173
|
-
|
|
174
|
-
|
|
164
|
+
// Same rule as the plain path: every row that carries an instruction
|
|
165
|
+
// prints it, under the label its status earns. Only a `fix:` is code-set
|
|
166
|
+
// — a derived remedy is a bare command, while a skip's authored `next:`
|
|
167
|
+
// is a sentence that may quote a command of its own, and wrapping that in
|
|
168
|
+
// backticks nests one code span inside another.
|
|
169
|
+
if (check.remedy) {
|
|
170
|
+
out.push(
|
|
171
|
+
check.status === "skip"
|
|
172
|
+
? ` - _${checkRemedyWord(check.status)}:_ ${check.remedy}`
|
|
173
|
+
: ` - _${checkRemedyWord(check.status)}:_ \`${check.remedy}\``,
|
|
174
|
+
);
|
|
175
175
|
}
|
|
176
176
|
return out;
|
|
177
177
|
};
|
|
178
178
|
|
|
179
179
|
const lines: string[] = ["## Doctor", ""];
|
|
180
|
-
const { environment,
|
|
180
|
+
const { environment, global, project } = partitionByScope(data.checks);
|
|
181
181
|
const section = (heading: string, checks: CheckResult[]): void => {
|
|
182
182
|
if (checks.length === 0) return;
|
|
183
183
|
if (heading) lines.push(`### ${heading}`, "");
|
|
184
184
|
for (const check of checks) lines.push(...renderCheck(check));
|
|
185
185
|
};
|
|
186
186
|
section("", environment);
|
|
187
|
-
section(
|
|
188
|
-
section(
|
|
187
|
+
section(SCOPE_LABELS.global, global);
|
|
188
|
+
section(SCOPE_LABELS.project, project);
|
|
189
189
|
lines.push(
|
|
190
190
|
"",
|
|
191
|
-
`_${data.passed} passed, ${data.failed} failed, ${data.skipped} skipped_`,
|
|
191
|
+
`_${data.passed} passed, ${data.failed} failed, ${data.available} available, ${data.skipped} skipped_`,
|
|
192
192
|
);
|
|
193
193
|
return lines.join("\n");
|
|
194
194
|
},
|