@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
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor check: report which pack answers this project's reads.
|
|
3
|
+
*
|
|
4
|
+
* It switches on the ONE boot decision ({@link resolveSources}) rather than
|
|
5
|
+
* re-deriving it from config, so doctor can never call an install healthy that
|
|
6
|
+
* every read would fail. That is the whole point of the check: a project that
|
|
7
|
+
* configured its own packs and never built them reports `fail` with the update
|
|
8
|
+
* remedy — not a pass listing the distribution's packs it is not reading.
|
|
9
|
+
* Storeless throughout: the pointer, the manifest, and the entity index are
|
|
10
|
+
* read off disk, never through a store session.
|
|
11
|
+
*
|
|
12
|
+
* It also names every read story that pack carries but cannot use. Those are
|
|
13
|
+
* DROPPED at dispatch rather than thrown (a third-party story must never break
|
|
14
|
+
* a command), so doctor is where the user finds out — and it goes through the
|
|
15
|
+
* same `validateStories` the dispatch path uses, so the two can never disagree.
|
|
16
|
+
*/
|
|
17
|
+
import { BIN_NAME } from "../../../constants.js";
|
|
18
|
+
import { entityTotal, readPackIndex, } from "../../../kernel/completion/entitySource.js";
|
|
19
|
+
import { validateStories } from "../../../kernel/packs/index.js";
|
|
20
|
+
import { embeddedManifest, readManifest, } from "../../../kernel/runtime/graphpack/index.js";
|
|
21
|
+
import { activeStories } from "../../../kernel/runtime/graphpack/stories.js";
|
|
22
|
+
import { resolveSources } from "../../../kernel/runtime/resolveSources.js";
|
|
23
|
+
/**
|
|
24
|
+
* The stories the answering pack carries but cannot use, as check items.
|
|
25
|
+
*
|
|
26
|
+
* The registry is reached through a RUNTIME dynamic import (as
|
|
27
|
+
* `collectColophon` does) so the static `capabilities/index → doctorModule →
|
|
28
|
+
* checkPackageRefs → capabilities/index` cycle can never form.
|
|
29
|
+
*
|
|
30
|
+
* @param decision - The boot decision the check already resolved.
|
|
31
|
+
* @returns One failing item per ignored story, in declaration order.
|
|
32
|
+
* @note Impure — reads the answering pack's `stories.json`.
|
|
33
|
+
*/
|
|
34
|
+
async function ignoredStoryItems(decision) {
|
|
35
|
+
const { capabilities } = await import("../../index.js");
|
|
36
|
+
const { problems } = validateStories(activeStories(decision), capabilities);
|
|
37
|
+
return problems.map((problem) => ({
|
|
38
|
+
label: problem.source,
|
|
39
|
+
detail: problem.message,
|
|
40
|
+
status: "fail",
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
/** ` · N story/ies ignored` for a headline, or nothing when all are usable. */
|
|
44
|
+
function ignoredSuffix(items) {
|
|
45
|
+
if (items.length === 0)
|
|
46
|
+
return "";
|
|
47
|
+
return ` · ${items.length} ${items.length === 1 ? "story" : "stories"} ignored`;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The answering pack's provenance, one item per pack it was built from.
|
|
51
|
+
*
|
|
52
|
+
* `sourceRef` is a single comma-joined string — `@canonical/design-system@git:
|
|
53
|
+
* d6d8a6c8268cf2bd103e956a2540d6e36bd08d72, @canonical/anatomy-dsl@npm:0.2.2,
|
|
54
|
+
* …` — and printing it whole put four packs and two forty-character SHAs on one
|
|
55
|
+
* line, in a report whose every other multi-part check (`mcp`, `harnesses`)
|
|
56
|
+
* uses the sub-item mechanism. Provenance is the thing a reader is here for
|
|
57
|
+
* when they read this line at all: which revision of which pack answered.
|
|
58
|
+
*
|
|
59
|
+
* The scheme (`git`/`npm`/`self`/`file`) is kept because it says how to move
|
|
60
|
+
* the pin, and a git hash is cut to the seven characters every other tool in
|
|
61
|
+
* this workflow shows. A ref that does not parse is passed through whole rather
|
|
62
|
+
* than dropped — an unreadable provenance is still provenance, and hiding it
|
|
63
|
+
* would be the one failure this check exists to prevent.
|
|
64
|
+
*
|
|
65
|
+
* @param sourceRef - The manifest's comma-joined provenance string.
|
|
66
|
+
* @returns One passing item per pack, in the order the pack records them.
|
|
67
|
+
*/
|
|
68
|
+
function packItems(sourceRef) {
|
|
69
|
+
return sourceRef
|
|
70
|
+
.split(",")
|
|
71
|
+
.map((ref) => ref.trim())
|
|
72
|
+
.filter((ref) => ref !== "")
|
|
73
|
+
.map((ref) => {
|
|
74
|
+
const parsed = /^(.+)@(git|npm|self|file|link):(.+)$/.exec(ref);
|
|
75
|
+
if (parsed === null)
|
|
76
|
+
return { label: ref, status: "pass" };
|
|
77
|
+
const [, pack, scheme, revision] = parsed;
|
|
78
|
+
const short = scheme === "git" && /^[0-9a-f]{40}$/.test(revision)
|
|
79
|
+
? revision.slice(0, 7)
|
|
80
|
+
: revision;
|
|
81
|
+
return {
|
|
82
|
+
label: pack,
|
|
83
|
+
detail: `${scheme} ${short}`,
|
|
84
|
+
status: "pass",
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Report which pack answers reads, its provenance, and its entity total.
|
|
90
|
+
*
|
|
91
|
+
* @param rt - The per-invocation runtime.
|
|
92
|
+
* @returns A CheckResult naming the answering pack, or the failure to build one.
|
|
93
|
+
* @note Impure — reads config, the active-pack pointer, and the pack index.
|
|
94
|
+
*/
|
|
95
|
+
export async function checkPackageRefs(rt) {
|
|
96
|
+
const decision = resolveSources(await rt.loadConfig(), rt.cwd);
|
|
97
|
+
// The display says "packs" (config declarations); the file/function keep
|
|
98
|
+
// "Package" (npm/git resolution vocabulary).
|
|
99
|
+
const name = "pack refs";
|
|
100
|
+
if (decision.kind === "unavailable") {
|
|
101
|
+
return {
|
|
102
|
+
name,
|
|
103
|
+
status: "fail",
|
|
104
|
+
detail: decision.reason,
|
|
105
|
+
remedy: `${BIN_NAME} sources update`,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const index = readPackIndex(decision);
|
|
109
|
+
const entities = (index ? entityTotal(index) : 0).toLocaleString();
|
|
110
|
+
// The pack DOES answer reads, so the check itself passes; the ignored stories
|
|
111
|
+
// are failing sub-items under it. (A `warn` status would ripple through the
|
|
112
|
+
// renderer and the DoctorData counts to buy an icon.)
|
|
113
|
+
const ignored = await ignoredStoryItems(decision);
|
|
114
|
+
const suffix = ignoredSuffix(ignored);
|
|
115
|
+
const sourceRef = decision.kind === "embedded"
|
|
116
|
+
? embeddedManifest().sourceRef
|
|
117
|
+
: (readManifest(decision.dir)?.sourceRef ?? "");
|
|
118
|
+
// Packs first, then anything wrong with them: the composition is the answer to
|
|
119
|
+
// "which revision am I reading", and a failing story is a note about one of
|
|
120
|
+
// the rows above it.
|
|
121
|
+
const packs = packItems(sourceRef);
|
|
122
|
+
const items = [...packs, ...ignored];
|
|
123
|
+
const composition = `${packs.length} ${packs.length === 1 ? "pack" : "packs"}, ${entities} entities${suffix}`;
|
|
124
|
+
if (decision.kind === "embedded") {
|
|
125
|
+
return {
|
|
126
|
+
name,
|
|
127
|
+
status: "pass",
|
|
128
|
+
// The update hint stays in the DETAIL rather than moving to `remedy`:
|
|
129
|
+
// the renderer prints a remedy only where there is something to fix or
|
|
130
|
+
// to finish, and a snapshot that is answering reads correctly is
|
|
131
|
+
// neither. "shipped with the CLI" rather than "embedded snapshot" — the
|
|
132
|
+
// reader needs to know where these packs came from, not what the build
|
|
133
|
+
// calls the artefact.
|
|
134
|
+
detail: `shipped with the CLI — ${composition} · run \`${BIN_NAME} sources update\` to build from your own configured packs instead`,
|
|
135
|
+
...(items.length > 0 ? { items } : {}),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
const manifest = readManifest(decision.dir);
|
|
139
|
+
return {
|
|
140
|
+
name,
|
|
141
|
+
status: "pass",
|
|
142
|
+
detail: packs.length > 0
|
|
143
|
+
? `built ${manifest?.createdAt ?? "?"} — ${composition}`
|
|
144
|
+
: `${decision.contentHash.slice(0, 12)} — ${composition}, built ${manifest?.createdAt ?? "?"}`,
|
|
145
|
+
...(items.length > 0 ? { items } : {}),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=checkPackageRefs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkPackageRefs.js","sourceRoot":"","sources":["../../../../../src/capabilities/doctor/checks/checkPackageRefs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EACL,WAAW,EACX,aAAa,GACd,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,YAAY,GACb,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAG7E,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAG3E;;;;;;;;;;GAUG;AACH,KAAK,UAAU,iBAAiB,CAC9B,QAAyB;IAEzB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACxD,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;IAC5E,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,MAAM,EAAE,OAAO,CAAC,OAAO;QACvB,MAAM,EAAE,MAAe;KACxB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,+EAA+E;AAC/E,SAAS,aAAa,CAAC,KAA2B;IAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,MAAM,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC;AAClF,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,SAAS,CAAC,SAAiB;IAClC,OAAO,SAAS;SACb,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC;SAC3B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,MAAM,GAAG,sCAAsC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAe,EAAE,CAAC;QACpE,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,MAKlC,CAAC;QACF,MAAM,KAAK,GACT,MAAM,KAAK,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjD,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC,CAAC,QAAQ,CAAC;QACf,OAAO;YACL,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,GAAG,MAAM,IAAI,KAAK,EAAE;YAC5B,MAAM,EAAE,MAAe;SACxB,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAiB;IAEjB,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC/D,yEAAyE;IACzE,6CAA6C;IAC7C,MAAM,IAAI,GAAG,WAAW,CAAC;IAEzB,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACpC,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,MAAM,EAAE,GAAG,QAAQ,iBAAiB;SACrC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;IACnE,8EAA8E;IAC9E,4EAA4E;IAC5E,sDAAsD;IACtD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,SAAS,GACb,QAAQ,CAAC,IAAI,KAAK,UAAU;QAC1B,CAAC,CAAC,gBAAgB,EAAE,CAAC,SAAS;QAC9B,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IACpD,+EAA+E;IAC/E,4EAA4E;IAC5E,qBAAqB;IACrB,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,YAAY,MAAM,EAAE,CAAC;IAE9G,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,MAAM;YACd,sEAAsE;YACtE,uEAAuE;YACvE,iEAAiE;YACjE,wEAAwE;YACxE,uEAAuE;YACvE,sBAAsB;YACtB,MAAM,EAAE,0BAA0B,WAAW,YAAY,QAAQ,mEAAmE;YACpI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvC,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,MAAM;QACd,MAAM,EACJ,KAAK,CAAC,MAAM,GAAG,CAAC;YACd,CAAC,CAAC,SAAS,QAAQ,EAAE,SAAS,IAAI,GAAG,MAAM,WAAW,EAAE;YACxD,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,WAAW,WAAW,QAAQ,EAAE,SAAS,IAAI,GAAG,EAAE;QAClG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BIN_NAME } from "../../../constants.js";
|
|
2
|
+
import { detectInstallSource } from "../../shared/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Report the CLI version and how it was installed. Always passes — purely
|
|
5
|
+
* informational.
|
|
6
|
+
*
|
|
7
|
+
* @param rt - The per-invocation runtime (for `version`).
|
|
8
|
+
* @returns A CheckResult with version and install details.
|
|
9
|
+
* @note Impure — reads the process for the install heuristic.
|
|
10
|
+
*/
|
|
11
|
+
export async function checkPragmaVersion(rt) {
|
|
12
|
+
const install = detectInstallSource();
|
|
13
|
+
return {
|
|
14
|
+
name: `${BIN_NAME} version`,
|
|
15
|
+
status: "pass",
|
|
16
|
+
detail: `v${rt.version} (installed via ${install.label})`,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=checkPragmaVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkPragmaVersion.js","sourceRoot":"","sources":["../../../../../src/capabilities/doctor/checks/checkPragmaVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAiB;IAEjB,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,OAAO;QACL,IAAI,EAAE,GAAG,QAAQ,UAAU;QAC3B,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,mBAAmB,OAAO,CAAC,KAAK,GAAG;KAC1D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { BIN_NAME } from "../../../constants.js";
|
|
5
|
+
import { emitScripts, indexCompletionEnv, runComplete, } from "../../../kernel/completion/index.js";
|
|
6
|
+
import { capabilities } from "../../index.js";
|
|
7
|
+
import { activationHint } from "../../setup/shell.js";
|
|
8
|
+
const NAME = "Shell completions";
|
|
9
|
+
/** The one remedy for an absent or out-of-date script. */
|
|
10
|
+
const INSTALL_REMEDY = `${BIN_NAME} setup completions`;
|
|
11
|
+
/**
|
|
12
|
+
* Whether the installed script is the config-free emit — the body
|
|
13
|
+
* `setup completions` writes when no `completion` config tunes it.
|
|
14
|
+
*
|
|
15
|
+
* The completion script is ONE file per user, but the `completion` config it is
|
|
16
|
+
* rendered from is layered per project. So `detectCompletions(cwd)`'s `stale`
|
|
17
|
+
* means only "not what THIS directory would write", and on its own it would let
|
|
18
|
+
* any project that tunes `minChars` call a globally-correct script out of date
|
|
19
|
+
* from every other directory — a `doctor` verdict that flips with `cd`, and a
|
|
20
|
+
* remedy that just moves the failure to the project you came from. A script
|
|
21
|
+
* that matches neither this project's body nor the untuned one is the one that
|
|
22
|
+
* is genuinely stale.
|
|
23
|
+
*
|
|
24
|
+
* @param path - The install path.
|
|
25
|
+
* @param shell - The detected shell.
|
|
26
|
+
* @returns Whether the file there is byte-identical to the untuned emit.
|
|
27
|
+
* @note Impure — reads the install path. An unreadable file counts as `false`.
|
|
28
|
+
*/
|
|
29
|
+
function isUntunedScript(path, shell) {
|
|
30
|
+
try {
|
|
31
|
+
return readFileSync(path, "utf-8") === emitScripts(capabilities)[shell];
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Whether the user's `.zshrc` puts `~/.zfunc` on `$fpath` — the activation step
|
|
39
|
+
* `setup completions` cannot perform for the user. zsh loads nothing from
|
|
40
|
+
* `~/.zfunc` unless it is on `fpath` before `compinit`, so an installed script
|
|
41
|
+
* with no fpath wiring is silently dead. A permissive check: any `fpath` line
|
|
42
|
+
* mentioning `.zfunc` counts (we can't parse ordering statically).
|
|
43
|
+
*/
|
|
44
|
+
function zfuncOnFpath() {
|
|
45
|
+
try {
|
|
46
|
+
const rc = readFileSync(join(homedir(), ".zshrc"), "utf-8");
|
|
47
|
+
return rc
|
|
48
|
+
.split("\n")
|
|
49
|
+
.some((line) => line.includes("fpath") && line.includes(".zfunc"));
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Drive the storeless `__complete` resolver and observe that it answers — the
|
|
57
|
+
* completion effect the installed script delegates every name context to. Uses
|
|
58
|
+
* the noun context (`pragma <TAB>`), which is grammar-derived and never empty,
|
|
59
|
+
* so a zero here means the resolver itself is broken, independent of any pack.
|
|
60
|
+
*
|
|
61
|
+
* @param cwd - The project directory (wires the entity seam, though the noun
|
|
62
|
+
* context does not read it).
|
|
63
|
+
* @returns The number of candidates the resolver returned for a bare `pragma `.
|
|
64
|
+
*/
|
|
65
|
+
async function completeProbe(cwd) {
|
|
66
|
+
const matches = await runComplete([""], capabilities, indexCompletionEnv(cwd));
|
|
67
|
+
return matches.length;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check that shell completions are installed AND up to date AND functional.
|
|
71
|
+
*
|
|
72
|
+
* Three gates, in order:
|
|
73
|
+
* 1. The resolver answers (`completeProbe` drives `runComplete` end to end) —
|
|
74
|
+
* the effect every installed script depends on. A failure here is a real
|
|
75
|
+
* regression, so it fails even when nothing is installed.
|
|
76
|
+
* 2. The installed script is present AND is a script `setup completions` would
|
|
77
|
+
* write. Bytes, not existence: a file that merely exists proves nothing — a
|
|
78
|
+
* user upgrading across a grammar change keeps the old script, loses the
|
|
79
|
+
* moved nouns from TAB, and used to be told everything was fine. The path
|
|
80
|
+
* and this project's body come from `detectCompletions`, the ONE owner of
|
|
81
|
+
* that decision; {@link isUntunedScript} is what keeps a per-project
|
|
82
|
+
* `completion` config from condemning a global file (see its docblock).
|
|
83
|
+
* 3. For zsh, `~/.zfunc` is on `$fpath` — the activation step setup can only
|
|
84
|
+
* hint. Installed-but-unwired reports a distinct remedy.
|
|
85
|
+
*
|
|
86
|
+
* Fault tiers: a broken resolver, a stale installed script, or an unwired zsh
|
|
87
|
+
* install are `fail` — something that exists does not work. A script that was
|
|
88
|
+
* never installed is `available`: completions are opt-in and a fresh install
|
|
89
|
+
* is healthy without them.
|
|
90
|
+
*
|
|
91
|
+
* The detection is passed IN rather than re-read: the `completions` target
|
|
92
|
+
* detects once per invocation and both the setup plan and this row read that
|
|
93
|
+
* one answer, so the two surfaces cannot describe different files.
|
|
94
|
+
*
|
|
95
|
+
* @param cwd - The project directory (the resolver's entity seam).
|
|
96
|
+
* @param d - The `completions` target's detection for this invocation.
|
|
97
|
+
* @returns A CheckResult: pass (up to date + wired + answering), available
|
|
98
|
+
* (never installed, with the setup remedy), fail (with the attributable
|
|
99
|
+
* remedy), or skip (shell undetected).
|
|
100
|
+
* @note Impure — reads the install path, `.zshrc`, and drives the resolver.
|
|
101
|
+
*/
|
|
102
|
+
export async function checkShellCompletions(cwd, d) {
|
|
103
|
+
// 1. Effect test: the resolver the scripts delegate to must actually answer.
|
|
104
|
+
let candidates;
|
|
105
|
+
try {
|
|
106
|
+
candidates = await completeProbe(cwd);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
110
|
+
return {
|
|
111
|
+
name: NAME,
|
|
112
|
+
status: "fail",
|
|
113
|
+
detail: `${BIN_NAME} cannot answer \`<TAB>\`: ${reason}`,
|
|
114
|
+
remedy: `Report this as a bug — \`${BIN_NAME} __complete\` should never throw.`,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
if (candidates === 0) {
|
|
118
|
+
return {
|
|
119
|
+
name: NAME,
|
|
120
|
+
status: "fail",
|
|
121
|
+
detail: `${BIN_NAME} answered \`<TAB>\` with nothing to complete`,
|
|
122
|
+
remedy: "Report this as a bug — the noun context is always non-empty.",
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// 2. The check is about the shell the user is IN. Reporting on the login
|
|
126
|
+
// shell instead is what let this row print a green check for a shell the
|
|
127
|
+
// user never opens while the one they live in had nothing installed.
|
|
128
|
+
const { shell, path, state } = d;
|
|
129
|
+
if (d.detection.kind === "ambiguous") {
|
|
130
|
+
return {
|
|
131
|
+
name: NAME,
|
|
132
|
+
status: "skip",
|
|
133
|
+
detail: `${BIN_NAME} answers \`<TAB>\`, but the running shell cannot be identified — SHELL names ${d.detection.login}, which is your login shell`,
|
|
134
|
+
remedy: `Run \`${INSTALL_REMEDY}\` from the shell you want completions in.`,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
if (shell === null || path === null) {
|
|
138
|
+
return {
|
|
139
|
+
name: NAME,
|
|
140
|
+
status: "skip",
|
|
141
|
+
detail: `${BIN_NAME} answers \`<TAB>\`, but no bash, zsh, or fish was found in this process tree`,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
// The installed script delegates every name context to the binary. A script
|
|
145
|
+
// that cannot reach it is inert, and reporting it as current is the same
|
|
146
|
+
// false green this row already told once.
|
|
147
|
+
//
|
|
148
|
+
// This gate runs BEFORE the install probe, so it says only what it has
|
|
149
|
+
// verified: that the binary does not resolve. Claiming "script installed" here
|
|
150
|
+
// told a user running this CLI by absolute path that a script they had never
|
|
151
|
+
// installed was broken — an invented file, in the row whose whole job is to
|
|
152
|
+
// report the real one. Nothing installed is still the opt-in `available` tier.
|
|
153
|
+
if (!d.binOnPath) {
|
|
154
|
+
const installed = state !== "absent";
|
|
155
|
+
return {
|
|
156
|
+
name: NAME,
|
|
157
|
+
status: installed ? "fail" : "available",
|
|
158
|
+
detail: installed
|
|
159
|
+
? `${shell} script installed, but \`${BIN_NAME}\` is not on PATH — the script cannot run it`
|
|
160
|
+
: `${BIN_NAME} answers \`<TAB>\`, but is not on PATH — an installed script cannot run it`,
|
|
161
|
+
remedy: `Put \`${BIN_NAME}\` on your PATH.`,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if (state === "absent") {
|
|
165
|
+
// Never installed is `available`, not a fault: completions are opt-in and
|
|
166
|
+
// a fresh install is healthy without them. An INSTALLED script that is
|
|
167
|
+
// out of date or unwired (below) is the real failure — something the user
|
|
168
|
+
// set up no longer works.
|
|
169
|
+
return {
|
|
170
|
+
name: NAME,
|
|
171
|
+
status: "available",
|
|
172
|
+
detail: `${BIN_NAME} answers \`<TAB>\`; the ${shell} script is not installed`,
|
|
173
|
+
remedy: INSTALL_REMEDY,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
if (state === "stale" && !isUntunedScript(path, shell)) {
|
|
177
|
+
return {
|
|
178
|
+
name: NAME,
|
|
179
|
+
status: "fail",
|
|
180
|
+
detail: `${BIN_NAME} answers \`<TAB>\`; the ${shell} script at ${path} is out of date`,
|
|
181
|
+
remedy: INSTALL_REMEDY,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
// 3. zsh only: the script is dead unless ~/.zfunc is on $fpath.
|
|
185
|
+
if (shell === "zsh" && !zfuncOnFpath()) {
|
|
186
|
+
return {
|
|
187
|
+
name: NAME,
|
|
188
|
+
status: "fail",
|
|
189
|
+
detail: `installed at ${path}, but ~/.zfunc is not on your fpath`,
|
|
190
|
+
remedy: activationHint("zsh"),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
name: NAME,
|
|
195
|
+
status: "pass",
|
|
196
|
+
detail: `${shell} (the shell you are in) — installed, up to date, and completing ${candidates} commands`,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=checkShellCompletions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkShellCompletions.js","sourceRoot":"","sources":["../../../../../src/capabilities/doctor/checks/checkShellCompletions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The harness inventory: one row per harness per scope, saying what was detected
|
|
3
|
+
* and whether pragma is registered in it.
|
|
4
|
+
*
|
|
5
|
+
* Every fact this needs was ALREADY COMPUTED and thrown away.
|
|
6
|
+
* `TargetGroup.harnessNames` carries every harness sharing a config file and
|
|
7
|
+
* both consumers reduced it to `shortenPath(group.path)`; `McpDetection`
|
|
8
|
+
* carries the `absent`/`registered`/`drifted` classification of every WRITE in
|
|
9
|
+
* that file. The only thing detection could NOT answer is the negative —
|
|
10
|
+
* `detectHarnesses` filters to hits, so a harness the machine does not have was
|
|
11
|
+
* unrepresentable — which is why the roll-up takes the REGISTRY alongside the
|
|
12
|
+
* groups: the registry supplies the universe, the groups supply the state.
|
|
13
|
+
*
|
|
14
|
+
* The state arrives PER HARNESS, never per file. A shared `.vscode/mcp.json`
|
|
15
|
+
* holds VS Code's `servers` and Cline's `mcpServers` as two independent
|
|
16
|
+
* entries, so the file's aggregate — `drifted`, when one key is current and the
|
|
17
|
+
* other absent — is the standing of NEITHER harness. Pairing each name with
|
|
18
|
+
* the write it owns is the caller's job (it holds the registry's `mcpKey`s and
|
|
19
|
+
* the group's writes); by the time a group reaches this module the association
|
|
20
|
+
* is resolved and every name carries its own state.
|
|
21
|
+
*
|
|
22
|
+
* Three deliberate constraints:
|
|
23
|
+
*
|
|
24
|
+
* 1. **No `@canonical/harnesses` import, of any kind.** `capabilities/lazy.test`
|
|
25
|
+
* forbids one from any file statically reachable from `capabilities/index`,
|
|
26
|
+
* and its regex has no `import type` exemption. This module is reached only
|
|
27
|
+
* through `runChecks`'s dynamic import today, but it is written so that
|
|
28
|
+
* staying legal never depends on that: the inputs are declared here as
|
|
29
|
+
* narrow structural records.
|
|
30
|
+
*
|
|
31
|
+
* 2. **Narrowed to DATA, so `mutates: false` is enforced rather than asserted.**
|
|
32
|
+
* `McpDetection` is write-capable — it carries `writeMcpConfigTargets` and
|
|
33
|
+
* `removeMcpConfigFrom` as live function references. Projecting it down to
|
|
34
|
+
* {@link InventoryGroup} before it reaches this file means a read-only
|
|
35
|
+
* report literally cannot reach a writer.
|
|
36
|
+
*
|
|
37
|
+
* 3. **It never invents a failure.** The states an inventory can report map onto
|
|
38
|
+
* `pass`/`available`/`skip` and NEVER `fail` (see `../types.ts`): a machine
|
|
39
|
+
* that simply does not have Windsurf is not a broken machine, and the `mcp`
|
|
40
|
+
* row already owns the actionable finding for the harnesses it does have.
|
|
41
|
+
* Reporting it twice is how a failure count becomes noise.
|
|
42
|
+
*
|
|
43
|
+
* Placement: this is a doctor helper because doctor is its only consumer today,
|
|
44
|
+
* and `shared/` is explicitly not a utility drawer (see `shared/index.ts`). It
|
|
45
|
+
* is written to MOVE there unchanged — pure, no capability imports beyond the
|
|
46
|
+
* scope type — the moment `setup`'s detection summary becomes the second caller.
|
|
47
|
+
*/
|
|
48
|
+
/** Whether a state means "this harness is on the machine". */
|
|
49
|
+
export const isDetectedState = (state) => state === "registered" || state === "drifted" || state === "detected";
|
|
50
|
+
/**
|
|
51
|
+
* Roll one scope's detected config groups up against the registry into one row
|
|
52
|
+
* per harness.
|
|
53
|
+
*
|
|
54
|
+
* Groups are keyed by harness NAME because that is the only identity
|
|
55
|
+
* `TargetGroup` records; the registry is the map back to an id, which is why it
|
|
56
|
+
* is a parameter rather than a lookup. A harness naming no registry row is
|
|
57
|
+
* ignored rather than invented — the inventory reports on the registry, not on
|
|
58
|
+
* whatever a group happened to say.
|
|
59
|
+
*
|
|
60
|
+
* @param registry - Every known harness, each flagged for scope membership.
|
|
61
|
+
* @param groups - This scope's detected config files (narrowed, path-shortened),
|
|
62
|
+
* each naming the harnesses that share it with their own per-write state.
|
|
63
|
+
* @param scope - The scope being rolled up.
|
|
64
|
+
* @returns One row per registry harness, in registry order.
|
|
65
|
+
* @note Pure — it reads no filesystem and holds no live effect.
|
|
66
|
+
*/
|
|
67
|
+
export function harnessInventory(registry, groups, scope) {
|
|
68
|
+
const states = new Map();
|
|
69
|
+
const locations = new Map();
|
|
70
|
+
for (const group of groups) {
|
|
71
|
+
for (const member of group.harnesses) {
|
|
72
|
+
const paths = locations.get(member.name) ?? [];
|
|
73
|
+
paths.push(group.path);
|
|
74
|
+
locations.set(member.name, paths);
|
|
75
|
+
// A harness sharing two files is registered only where EVERY one of them
|
|
76
|
+
// carries the current entry — the same "all or nothing" rule
|
|
77
|
+
// `aggregateMcpStates` applies across the writes within a single file.
|
|
78
|
+
const prior = states.get(member.name);
|
|
79
|
+
states.set(member.name, prior === undefined || prior === member.state
|
|
80
|
+
? member.state
|
|
81
|
+
: "drifted");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return registry.map((harness) => {
|
|
85
|
+
const detected = states.get(harness.name);
|
|
86
|
+
const paths = locations.get(harness.name) ?? [];
|
|
87
|
+
const state = detected === undefined
|
|
88
|
+
? harness.inScope
|
|
89
|
+
? "undetected"
|
|
90
|
+
: "unscoped"
|
|
91
|
+
: detected === "registered"
|
|
92
|
+
? "registered"
|
|
93
|
+
: detected === "drifted"
|
|
94
|
+
? "drifted"
|
|
95
|
+
: "detected";
|
|
96
|
+
return {
|
|
97
|
+
harnessId: harness.id,
|
|
98
|
+
harnessName: harness.name,
|
|
99
|
+
scope,
|
|
100
|
+
state,
|
|
101
|
+
locations: paths,
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/** The per-item status each state renders as. Never `fail` — see the docblock. */
|
|
106
|
+
const STATE_STATUS = {
|
|
107
|
+
registered: "pass",
|
|
108
|
+
drifted: "available",
|
|
109
|
+
detected: "available",
|
|
110
|
+
undetected: "skip",
|
|
111
|
+
unscoped: "skip",
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* The phrase each state reads as, scope-aware for the unscoped case.
|
|
115
|
+
*
|
|
116
|
+
* The unscoped line says WHERE the harness keeps its config rather than naming
|
|
117
|
+
* an internal partition. `no Global band` told the reader nothing: "band" was
|
|
118
|
+
* this repository's word, and the fact underneath it — VS Code stores its MCP
|
|
119
|
+
* config per project, so there is no global file for pragma to be in — is the
|
|
120
|
+
* thing that explains the row.
|
|
121
|
+
*/
|
|
122
|
+
const stateDetail = (row) => {
|
|
123
|
+
switch (row.state) {
|
|
124
|
+
case "registered":
|
|
125
|
+
return "registered";
|
|
126
|
+
case "drifted":
|
|
127
|
+
return "registered, entry differs from current";
|
|
128
|
+
case "detected":
|
|
129
|
+
return "detected, not registered";
|
|
130
|
+
case "undetected":
|
|
131
|
+
return "not detected";
|
|
132
|
+
case "unscoped":
|
|
133
|
+
return row.scope === "global"
|
|
134
|
+
? "keeps no global config — it is per-project only"
|
|
135
|
+
: "keeps no per-project config — it is global only";
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Project inventory rows into doctor sub-items.
|
|
140
|
+
*
|
|
141
|
+
* The default listing is DETECTED HARNESSES ONLY — a report that names every
|
|
142
|
+
* tool the user does not have buries the ones they do. `--verbose` widens it to
|
|
143
|
+
* the whole registry, which is the only view in which `undetected`/`unscoped`
|
|
144
|
+
* rows appear at all.
|
|
145
|
+
*
|
|
146
|
+
* @param rows - This scope's inventory rows.
|
|
147
|
+
* @param verbose - Whether to list the whole registry rather than the hits.
|
|
148
|
+
* @returns The sub-items, harness name in the left column.
|
|
149
|
+
*/
|
|
150
|
+
export function inventoryItems(rows, verbose) {
|
|
151
|
+
const shown = verbose
|
|
152
|
+
? rows
|
|
153
|
+
: rows.filter((row) => isDetectedState(row.state));
|
|
154
|
+
return shown.map((row) => {
|
|
155
|
+
const where = row.locations.join(", ");
|
|
156
|
+
return {
|
|
157
|
+
label: row.harnessName,
|
|
158
|
+
status: STATE_STATUS[row.state],
|
|
159
|
+
detail: where ? `${stateDetail(row)} — ${where}` : stateDetail(row),
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* The whole inventory row for one scope: a listing, not a verdict.
|
|
165
|
+
*
|
|
166
|
+
* Its status is only ever `pass` (this scope has harnesses) or `skip` (it has
|
|
167
|
+
* none). It is the one scoped row that is not a setup target, so it derives no
|
|
168
|
+
* `fix:` line — the `mcp` and `skills` rows beside it own every action a
|
|
169
|
+
* harness can need, and a second row proposing the same command would be the
|
|
170
|
+
* "same finding seen twice" the report is built to avoid.
|
|
171
|
+
*
|
|
172
|
+
* @param rows - This scope's inventory rows.
|
|
173
|
+
* @param verbose - Whether the listing widens to the whole registry.
|
|
174
|
+
* @returns The status, headline and sub-items for the scope's inventory check.
|
|
175
|
+
*/
|
|
176
|
+
export function inventoryHealth(rows, verbose) {
|
|
177
|
+
const detected = rows.filter((row) => isDetectedState(row.state));
|
|
178
|
+
const registered = rows.filter((row) => row.state === "registered");
|
|
179
|
+
const items = inventoryItems(rows, verbose);
|
|
180
|
+
if (detected.length === 0) {
|
|
181
|
+
return {
|
|
182
|
+
status: "skip",
|
|
183
|
+
detail: verbose
|
|
184
|
+
? `none of ${rows.length} known harnesses detected`
|
|
185
|
+
: "no harnesses detected",
|
|
186
|
+
items,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
status: "pass",
|
|
191
|
+
detail: `${detected.length} detected · ${registered.length} registered${verbose ? ` · ${rows.length} known` : ""}`,
|
|
192
|
+
items,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=harnessInventory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harnessInventory.js","sourceRoot":"","sources":["../../../../../src/capabilities/doctor/checks/harnessInventory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The doctor check catalogue — the diagnoses `doctor` composes into a report.
|
|
3
|
+
*
|
|
4
|
+
* A check is the whole shape of this domain: it inspects ONE thing, decides
|
|
5
|
+
* pass or fail, and hands back a `CheckResult` carrying the remedy. Keeping
|
|
6
|
+
* them apart from the report body is what lets `runChecks` stay a composition
|
|
7
|
+
* — it orders and awaits, and knows nothing about what any check looks at.
|
|
8
|
+
*
|
|
9
|
+
* Two kinds live here, and the barrel exposes them differently. The UNSCOPED
|
|
10
|
+
* checks diagnose what `setup` cannot install — the Node floor, the CLI's own
|
|
11
|
+
* version and install source, the pack answering this project's reads, and the
|
|
12
|
+
* store — so each is its own named entry point. The SCOPED rows are derived
|
|
13
|
+
* per target, per scope, from the setup target table rather than authored here,
|
|
14
|
+
* so they surface as the one generator that derives them, never as a list of
|
|
15
|
+
* row names this file would then have to keep in step with `setup`.
|
|
16
|
+
*
|
|
17
|
+
* The per-target probes (the completions script check, the MCP command
|
|
18
|
+
* resolution helpers) stay internal on purpose: `scopedChecks` is the only way
|
|
19
|
+
* they are meant to be reached, and a row reachable past its scope is a row
|
|
20
|
+
* `doctor` can report and `setup` cannot fix.
|
|
21
|
+
*/
|
|
22
|
+
export { checkKeStore } from "./checkKeStore.js";
|
|
23
|
+
export { checkNodeVersion } from "./checkNodeVersion.js";
|
|
24
|
+
export { checkPackageRefs } from "./checkPackageRefs.js";
|
|
25
|
+
export { checkPragmaVersion } from "./checkPragmaVersion.js";
|
|
26
|
+
export { scopedChecks } from "./targetHealth.js";
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/capabilities/doctor/checks/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|