@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,6 +1,8 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import {
|
|
3
|
+
findValuedVerbose,
|
|
3
4
|
parseGlobalFlags,
|
|
5
|
+
readRawDetail,
|
|
4
6
|
readRawFormat,
|
|
5
7
|
stripGlobalFlags,
|
|
6
8
|
} from "./globalFlags.js";
|
|
@@ -30,7 +32,7 @@ describe("parseGlobalFlags", () => {
|
|
|
30
32
|
expect(parseGlobalFlags(["--format=json"], TTY).format).toBe("json");
|
|
31
33
|
});
|
|
32
34
|
|
|
33
|
-
it("
|
|
35
|
+
it("maps an unrecognized --format value to plain (the bin rejects it first)", () => {
|
|
34
36
|
expect(parseGlobalFlags(["--format", "text"], PIPE).format).toBe("plain");
|
|
35
37
|
});
|
|
36
38
|
|
|
@@ -68,6 +70,55 @@ describe("parseGlobalFlags", () => {
|
|
|
68
70
|
it("reads --verbose", () => {
|
|
69
71
|
expect(parseGlobalFlags(["--verbose"], TTY).verbose).toBe(true);
|
|
70
72
|
});
|
|
73
|
+
|
|
74
|
+
it("reports the raw --detail value for validation, including valueless", () => {
|
|
75
|
+
expect(readRawDetail(["--detail", "detailed"])).toBe("detailed");
|
|
76
|
+
expect(readRawDetail(["--detail=bogus"])).toBe("bogus");
|
|
77
|
+
// "" so a valueless flag is rejected, never silently defaulted.
|
|
78
|
+
expect(readRawDetail(["--detail", "--category"])).toBe("");
|
|
79
|
+
expect(readRawDetail(["block", "list"])).toBeUndefined();
|
|
80
|
+
// Past the terminator it is data, not a flag of this program.
|
|
81
|
+
expect(readRawDetail(["lookup", "--", "--detail=x"])).toBeUndefined();
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("finds a valued --verbose token so the bin can reject it", () => {
|
|
85
|
+
expect(findValuedVerbose(["--verbose=true"])).toBe("--verbose=true");
|
|
86
|
+
expect(findValuedVerbose(["--verbose"])).toBeUndefined();
|
|
87
|
+
expect(findValuedVerbose(["lookup", "--", "--verbose=x"])).toBeUndefined();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("reads --no-headers anywhere and strips it before Commander", () => {
|
|
91
|
+
expect(parseGlobalFlags(["--no-headers"], TTY).noHeaders).toBe(true);
|
|
92
|
+
expect(
|
|
93
|
+
parseGlobalFlags(["block", "list", "--no-headers"], TTY).noHeaders,
|
|
94
|
+
).toBe(true);
|
|
95
|
+
expect(parseGlobalFlags(["block", "list"], TTY).noHeaders).toBeUndefined();
|
|
96
|
+
expect(stripGlobalFlags(["block", "list", "--no-headers"])).toEqual([
|
|
97
|
+
"block",
|
|
98
|
+
"list",
|
|
99
|
+
]);
|
|
100
|
+
// Past the terminator it is the user's data, not this program's flag.
|
|
101
|
+
expect(
|
|
102
|
+
parseGlobalFlags(["block", "lookup", "--", "--no-headers"], TTY)
|
|
103
|
+
.noHeaders,
|
|
104
|
+
).toBeUndefined();
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it("reads --quiet anywhere and strips it before Commander", () => {
|
|
108
|
+
expect(parseGlobalFlags(["--quiet"], TTY).quiet).toBe(true);
|
|
109
|
+
expect(parseGlobalFlags(["sources", "update", "--quiet"], TTY).quiet).toBe(
|
|
110
|
+
true,
|
|
111
|
+
);
|
|
112
|
+
expect(parseGlobalFlags(["sources", "update"], TTY).quiet).toBeUndefined();
|
|
113
|
+
expect(stripGlobalFlags(["sources", "update", "--quiet"])).toEqual([
|
|
114
|
+
"sources",
|
|
115
|
+
"update",
|
|
116
|
+
]);
|
|
117
|
+
// Past the terminator it is the user's data, not this program's flag.
|
|
118
|
+
expect(
|
|
119
|
+
parseGlobalFlags(["graph", "query", "--", "--quiet"], TTY).quiet,
|
|
120
|
+
).toBeUndefined();
|
|
121
|
+
});
|
|
71
122
|
});
|
|
72
123
|
|
|
73
124
|
describe("stripGlobalFlags", () => {
|
|
@@ -105,3 +156,68 @@ describe("readRawFormat", () => {
|
|
|
105
156
|
expect(readRawFormat(["block", "list"])).toBeUndefined();
|
|
106
157
|
});
|
|
107
158
|
});
|
|
159
|
+
|
|
160
|
+
describe("the option terminator bounds every scan (PROTECTED)", () => {
|
|
161
|
+
// `--` means the rest is the user's data. A scanner that ignored it would
|
|
162
|
+
// both misread a flag and STRIP it, so a lookup for a block literally named
|
|
163
|
+
// `--format` would lose its own argument and change how the error rendered.
|
|
164
|
+
it("does not read a flag that appears after `--`", () => {
|
|
165
|
+
expect(readRawFormat(["block", "lookup", "--", "--format", "json"])).toBe(
|
|
166
|
+
undefined,
|
|
167
|
+
);
|
|
168
|
+
expect(
|
|
169
|
+
parseGlobalFlags(["block", "lookup", "--", "--verbose"], TTY).verbose,
|
|
170
|
+
).toBe(false);
|
|
171
|
+
expect(
|
|
172
|
+
parseGlobalFlags(["block", "lookup", "--", "--detail", "detailed"], TTY)
|
|
173
|
+
.detail,
|
|
174
|
+
).toBe(undefined);
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
it("hands everything from `--` onward through untouched", () => {
|
|
178
|
+
expect(
|
|
179
|
+
stripGlobalFlags(["block", "lookup", "--", "--format", "json"]),
|
|
180
|
+
).toEqual(["block", "lookup", "--", "--format", "json"]);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it("still reads a flag that appears before `--`", () => {
|
|
184
|
+
expect(
|
|
185
|
+
readRawFormat(["--format", "json", "block", "lookup", "--", "x"]),
|
|
186
|
+
).toBe("json");
|
|
187
|
+
expect(
|
|
188
|
+
stripGlobalFlags(["--format", "json", "block", "lookup", "--", "x"]),
|
|
189
|
+
).toEqual(["block", "lookup", "--", "x"]);
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
describe("a flag's value is never another flag (PROTECTED)", () => {
|
|
194
|
+
// The defect this pins: a valueless `--detail` consumed the NEXT flag as its
|
|
195
|
+
// value and stripped it, so `--detail --category css` silently answered over
|
|
196
|
+
// the whole set instead of the filtered one — a wrong answer, no diagnostic.
|
|
197
|
+
it("leaves a following flag standing when the value is absent", () => {
|
|
198
|
+
expect(
|
|
199
|
+
stripGlobalFlags(["standard", "list", "--detail", "--category", "css"]),
|
|
200
|
+
).toEqual(["standard", "list", "--category", "css"]);
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it("reports no detail for a valueless --detail", () => {
|
|
204
|
+
expect(
|
|
205
|
+
parseGlobalFlags(["standard", "list", "--detail", "--category"], TTY)
|
|
206
|
+
.detail,
|
|
207
|
+
).toBe(undefined);
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
it("still consumes a real value", () => {
|
|
211
|
+
expect(
|
|
212
|
+
stripGlobalFlags(["standard", "list", "--detail", "summary"]),
|
|
213
|
+
).toEqual(["standard", "list"]);
|
|
214
|
+
expect(
|
|
215
|
+
parseGlobalFlags(["standard", "list", "--detail", "summary"], TTY).detail,
|
|
216
|
+
).toBe("summary");
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
it("reports a valueless --format as empty so the caller rejects it", () => {
|
|
220
|
+
// `""`, not `undefined` — `undefined` would fall through to the default.
|
|
221
|
+
expect(readRawFormat(["--format", "--verbose"])).toBe("");
|
|
222
|
+
});
|
|
223
|
+
});
|
|
@@ -1,18 +1,63 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Global-flag pre-parsing, ahead of Commander.
|
|
3
3
|
*
|
|
4
|
-
* `--format`, `--verbose`, and `--detail` may appear anywhere on the line, so
|
|
4
|
+
* `--format`, `--verbose`, `--no-headers`, and `--detail` may appear anywhere on the line, so
|
|
5
5
|
* they are scanned and stripped before Commander sees argv — otherwise
|
|
6
6
|
* `enablePositionalOptions()` scoping would reject a flag placed after a verb.
|
|
7
|
+
*
|
|
8
|
+
* ANYWHERE STOPS AT `--`. Everything after the option terminator is the user's
|
|
9
|
+
* data, not this program's flags: `block lookup -- --format` looks up a block
|
|
10
|
+
* literally named `--format`. Commander honours the terminator on its own, so
|
|
11
|
+
* a scan here that ignored it would parse — and strip — tokens Commander was
|
|
12
|
+
* about to hand through verbatim.
|
|
13
|
+
*
|
|
14
|
+
* A FLAG'S VALUE IS NEVER ANOTHER FLAG. `--detail --category css` supplies no
|
|
15
|
+
* detail; it is a valueless `--detail` followed by a separate flag. Reading the
|
|
16
|
+
* next token unconditionally would consume `--category` as the value and strip
|
|
17
|
+
* it, so the filter would vanish and the command would answer over the whole
|
|
18
|
+
* set instead — a wrong answer with no diagnostic.
|
|
7
19
|
* Ported from the v1 `parseGlobalFlags`, with two v2 changes: a new `--detail`
|
|
8
|
-
* flag and the `--format text` value
|
|
9
|
-
* {@link OutputFormat})
|
|
10
|
-
*
|
|
11
|
-
*
|
|
20
|
+
* flag and the `--format text` value replaced by `plain` (the kernel's
|
|
21
|
+
* {@link OutputFormat}) — `text` is not accepted; the bin rejects it with the
|
|
22
|
+
* valid list. The dedicated `--llm` flag was folded into `--format llm`,
|
|
23
|
+
* leaving auto-detection as the sole implicit trigger. Both the space
|
|
24
|
+
* (`--format json`) and equals (`--format=json`) forms are recognized.
|
|
12
25
|
*/
|
|
13
26
|
|
|
14
27
|
import { DETAIL_LEVELS, type DetailLevel } from "../../../constants.js";
|
|
15
|
-
import
|
|
28
|
+
import { stdoutIsCaptured } from "../../interactivity.js";
|
|
29
|
+
import type { GlobalFlags } from "../../runtime/index.js";
|
|
30
|
+
|
|
31
|
+
/** The end-of-options separator: nothing after it is a flag of this program. */
|
|
32
|
+
const OPTION_TERMINATOR = "--";
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The span of argv this program's flags may occupy — everything before the
|
|
36
|
+
* option terminator, or all of argv when there is none. Exported for the
|
|
37
|
+
* bin's retired-flag detection: a retired spelling AFTER the terminator is
|
|
38
|
+
* an operand, not a flag, and must not trigger a migration message.
|
|
39
|
+
*
|
|
40
|
+
* @param argv - The user's arguments.
|
|
41
|
+
* @returns The scannable span; the same array when no terminator is present.
|
|
42
|
+
*/
|
|
43
|
+
export function selectScanSpan(argv: readonly string[]): readonly string[] {
|
|
44
|
+
const terminator = argv.indexOf(OPTION_TERMINATOR);
|
|
45
|
+
return terminator === -1 ? argv : argv.slice(0, terminator);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Whether a token can serve as a flag's value.
|
|
50
|
+
*
|
|
51
|
+
* A token starting with `-` is the next flag, not this one's value. Shared by
|
|
52
|
+
* every reader below so the space form cannot swallow a sibling flag at one
|
|
53
|
+
* call site while guarding against it at another.
|
|
54
|
+
*
|
|
55
|
+
* @param token - The token following a flag, if any.
|
|
56
|
+
* @returns True when the token is a value rather than another flag.
|
|
57
|
+
*/
|
|
58
|
+
function isFlagValue(token: string | undefined): token is string {
|
|
59
|
+
return token !== undefined && !token.startsWith("-");
|
|
60
|
+
}
|
|
16
61
|
|
|
17
62
|
/**
|
|
18
63
|
* Read a `--flag`'s value, accepting both `--flag value` and `--flag=value`.
|
|
@@ -25,35 +70,74 @@ function readFlagValue(
|
|
|
25
70
|
argv: readonly string[],
|
|
26
71
|
flag: string,
|
|
27
72
|
): string | undefined {
|
|
73
|
+
const span = selectScanSpan(argv);
|
|
28
74
|
const equalsPrefix = `${flag}=`;
|
|
29
|
-
const equalsArg =
|
|
75
|
+
const equalsArg = span.find((arg) => arg.startsWith(equalsPrefix));
|
|
30
76
|
if (equalsArg !== undefined) {
|
|
31
77
|
return equalsArg.slice(equalsPrefix.length);
|
|
32
78
|
}
|
|
33
|
-
const spaceIndex =
|
|
34
|
-
|
|
79
|
+
const spaceIndex = span.indexOf(flag);
|
|
80
|
+
if (spaceIndex === -1) return undefined;
|
|
81
|
+
const value = span.at(spaceIndex + 1);
|
|
82
|
+
return isFlagValue(value) ? value : undefined;
|
|
35
83
|
}
|
|
36
84
|
|
|
37
85
|
/**
|
|
38
|
-
* Read
|
|
86
|
+
* Read a value flag's raw value exactly as typed, for validation.
|
|
39
87
|
*
|
|
40
88
|
* Unlike {@link parseGlobalFlags} this does not normalize — the caller decides
|
|
41
|
-
* how to reject an unknown value. A bare
|
|
89
|
+
* how to reject an unknown value. A bare flag with no following value is
|
|
42
90
|
* reported as `""` (not `undefined`) so it is rejected rather than silently
|
|
43
|
-
* falling through.
|
|
91
|
+
* falling through. One reader for every validated global value flag, so a
|
|
92
|
+
* guard applied to one cannot silently miss its siblings.
|
|
44
93
|
*
|
|
45
94
|
* @param argv - Raw argv (the user's arguments).
|
|
46
|
-
* @
|
|
95
|
+
* @param flag - The flag including leading dashes (e.g. `--format`).
|
|
96
|
+
* @returns The raw value, `""` for a valueless flag, or `undefined`.
|
|
47
97
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
98
|
+
function readRawFlag(
|
|
99
|
+
argv: readonly string[],
|
|
100
|
+
flag: string,
|
|
101
|
+
): string | undefined {
|
|
102
|
+
const span = selectScanSpan(argv);
|
|
103
|
+
const equalsPrefix = `${flag}=`;
|
|
104
|
+
const equalsArg = span.find((arg) => arg.startsWith(equalsPrefix));
|
|
105
|
+
if (equalsArg !== undefined) return equalsArg.slice(equalsPrefix.length);
|
|
51
106
|
|
|
52
|
-
const spaceIndex =
|
|
107
|
+
const spaceIndex = span.indexOf(flag);
|
|
53
108
|
if (spaceIndex === -1) return undefined;
|
|
54
109
|
|
|
55
|
-
|
|
56
|
-
|
|
110
|
+
// `""` rather than `undefined`: a valueless flag must be REJECTED by the
|
|
111
|
+
// caller, not fall through to the default.
|
|
112
|
+
const value = span.at(spaceIndex + 1);
|
|
113
|
+
return isFlagValue(value) ? value : "";
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** The raw `--format` value as typed (see {@link readRawFlag}). */
|
|
117
|
+
export function readRawFormat(argv: readonly string[]): string | undefined {
|
|
118
|
+
return readRawFlag(argv, "--format");
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* The raw `--detail` value as typed (see {@link readRawFlag}). Validated by
|
|
123
|
+
* the bin exactly as `--format` is — an unrecognized level used to be
|
|
124
|
+
* dropped silently, which is the same defect class as a filter that
|
|
125
|
+
* evaporates: wrong output with no diagnostic.
|
|
126
|
+
*/
|
|
127
|
+
export function readRawDetail(argv: readonly string[]): string | undefined {
|
|
128
|
+
return readRawFlag(argv, "--detail");
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* The `--verbose=<x>` token, if present. `--verbose` takes no value — one
|
|
133
|
+
* flag, one spelling — and the program must not accept-and-ignore a second
|
|
134
|
+
* one: the bin rejects the token this finds.
|
|
135
|
+
*
|
|
136
|
+
* @param argv - Raw argv (the user's arguments).
|
|
137
|
+
* @returns The offending token, or `undefined`.
|
|
138
|
+
*/
|
|
139
|
+
export function findValuedVerbose(argv: readonly string[]): string | undefined {
|
|
140
|
+
return selectScanSpan(argv).find((arg) => arg.startsWith("--verbose="));
|
|
57
141
|
}
|
|
58
142
|
|
|
59
143
|
/**
|
|
@@ -70,7 +154,9 @@ export interface OutputEnvironment {
|
|
|
70
154
|
/** Read the real stdout/env output environment. @note Impure — reads process. */
|
|
71
155
|
function readOutputEnvironment(): OutputEnvironment {
|
|
72
156
|
return {
|
|
73
|
-
|
|
157
|
+
// The OUTPUT-SHAPE question, on stdout — not the prompting one. A run whose
|
|
158
|
+
// stdout is captured may still have a terminal to prompt on (`canPrompt`).
|
|
159
|
+
isTty: !stdoutIsCaptured(),
|
|
74
160
|
noAutoLlm: Boolean(process.env.PRAGMA_NO_AUTO_LLM),
|
|
75
161
|
};
|
|
76
162
|
}
|
|
@@ -108,11 +194,18 @@ export function parseGlobalFlags(
|
|
|
108
194
|
const formatRequested = rawFormat !== undefined;
|
|
109
195
|
const autoLlm = !formatRequested && !env.isTty && !env.noAutoLlm;
|
|
110
196
|
const detail = readDetail(argv);
|
|
197
|
+
const span = selectScanSpan(argv);
|
|
111
198
|
return {
|
|
112
199
|
llm: format === "llm" || autoLlm,
|
|
113
200
|
autoLlm,
|
|
114
201
|
format,
|
|
115
|
-
verbose:
|
|
202
|
+
verbose: span.includes("--verbose"),
|
|
203
|
+
// `--no-headers` suppresses the plain-table header row; it is global so
|
|
204
|
+
// every list-shaped verb honors one spelling.
|
|
205
|
+
...(span.includes("--no-headers") ? { noHeaders: true } : {}),
|
|
206
|
+
// `--quiet` silences success/progress (the report seam, interpreter logs,
|
|
207
|
+
// onboarding, calm notices) while error rendering stays untouched.
|
|
208
|
+
...(span.includes("--quiet") ? { quiet: true } : {}),
|
|
116
209
|
...(detail !== undefined ? { detail } : {}),
|
|
117
210
|
};
|
|
118
211
|
}
|
|
@@ -122,7 +215,8 @@ export function parseGlobalFlags(
|
|
|
122
215
|
*
|
|
123
216
|
* Since {@link parseGlobalFlags} pre-parses these, they are dropped so they do
|
|
124
217
|
* not collide with Commander's positional scoping, letting the user place them
|
|
125
|
-
* anywhere on the line
|
|
218
|
+
* anywhere on the line — anywhere before the option terminator, which this
|
|
219
|
+
* stops at and hands through whole.
|
|
126
220
|
*
|
|
127
221
|
* @param argv - The user's arguments.
|
|
128
222
|
* @returns A new array with global flags stripped.
|
|
@@ -130,20 +224,29 @@ export function parseGlobalFlags(
|
|
|
130
224
|
export function stripGlobalFlags(argv: readonly string[]): string[] {
|
|
131
225
|
const result: string[] = [];
|
|
132
226
|
for (let i = 0; i < argv.length; i++) {
|
|
133
|
-
const arg = argv
|
|
134
|
-
if (arg ===
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
227
|
+
const arg = argv.at(i);
|
|
228
|
+
if (arg === undefined) continue;
|
|
229
|
+
|
|
230
|
+
// Past the terminator nothing is ours: hand the remainder over untouched,
|
|
231
|
+
// terminator included, so Commander still sees where options end.
|
|
232
|
+
if (arg === OPTION_TERMINATOR) {
|
|
233
|
+
result.push(...argv.slice(i));
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (arg === "--verbose" || arg === "--no-headers" || arg === "--quiet") {
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
if (arg.startsWith("--format=") || arg.startsWith("--detail=")) {
|
|
140
241
|
continue;
|
|
141
242
|
}
|
|
142
243
|
if (arg === "--format" || arg === "--detail") {
|
|
143
|
-
|
|
244
|
+
// Skip the value ONLY when the next token is one. A valueless flag before
|
|
245
|
+
// another flag must leave that flag standing.
|
|
246
|
+
if (isFlagValue(argv.at(i + 1))) i += 1;
|
|
144
247
|
continue;
|
|
145
248
|
}
|
|
146
|
-
result.push(arg
|
|
249
|
+
result.push(arg);
|
|
147
250
|
}
|
|
148
251
|
return result;
|
|
149
252
|
}
|
|
@@ -11,9 +11,8 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import chalk from "chalk";
|
|
14
|
+
import { INDENT } from "../../render/vocabulary.js";
|
|
14
15
|
|
|
15
|
-
/** Two-space indent for every list body row. */
|
|
16
|
-
const INDENT = " ";
|
|
17
16
|
/** Two-space gap between a term column and its description. */
|
|
18
17
|
const GAP = " ";
|
|
19
18
|
|
|
@@ -32,6 +31,19 @@ export function helpTerm(text: string): string {
|
|
|
32
31
|
return chalk.cyan(text);
|
|
33
32
|
}
|
|
34
33
|
|
|
34
|
+
/**
|
|
35
|
+
* The wordmark's colour.
|
|
36
|
+
*
|
|
37
|
+
* `yellow` is a PALETTE slot, not a fixed hue: the 16-colour ANSI palette has no
|
|
38
|
+
* orange, and this slot is the one terminal themes render as orange — Ubuntu's
|
|
39
|
+
* among them. Naming the slot rather than a 256-colour or truecolour orange is
|
|
40
|
+
* what lets the wordmark follow the user's own theme instead of fighting it, and
|
|
41
|
+
* keeps it legible on light backgrounds where a hardcoded orange would not be.
|
|
42
|
+
*/
|
|
43
|
+
export function helpLogo(text: string): string {
|
|
44
|
+
return chalk.yellow(text);
|
|
45
|
+
}
|
|
46
|
+
|
|
35
47
|
/** The `Usage:` line: a dim label followed by the given command shape. */
|
|
36
48
|
export function helpUsage(body: string): string {
|
|
37
49
|
return `${chalk.dim("Usage:")} ${body}`;
|
|
@@ -10,11 +10,14 @@
|
|
|
10
10
|
* never heard of still surfaces.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import
|
|
13
|
+
import { PROGRAM_LOGO } from "../../../constants.js";
|
|
14
|
+
import type { GlobalFlags } from "../../runtime/index.js";
|
|
15
|
+
import type { VerbSpec } from "../../spec/index.js";
|
|
14
16
|
import {
|
|
15
17
|
helpColumns,
|
|
16
18
|
helpDim,
|
|
17
19
|
helpHeading,
|
|
20
|
+
helpLogo,
|
|
18
21
|
helpTerm,
|
|
19
22
|
helpUsage,
|
|
20
23
|
} from "./helpFormat.js";
|
|
@@ -79,6 +82,7 @@ function buildKernelGroups(programName: string): readonly HelpGroup[] {
|
|
|
79
82
|
summary: `Read and write ${programName} configuration`,
|
|
80
83
|
},
|
|
81
84
|
{ noun: "info", summary: "Show version, config, and update status" },
|
|
85
|
+
{ noun: "version", summary: "Print the CLI version" },
|
|
82
86
|
{
|
|
83
87
|
noun: "upgrade",
|
|
84
88
|
summary: `Upgrade the ${programName} CLI to the latest version`,
|
|
@@ -92,14 +96,16 @@ function buildKernelGroups(programName: string): readonly HelpGroup[] {
|
|
|
92
96
|
noun: "capabilities",
|
|
93
97
|
summary: "Discover conventions, tools, and the discovery sequence",
|
|
94
98
|
},
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
+
// A colophon is the note at the back of a book: the typeface, the
|
|
100
|
+
// press, the paper. Nothing depends on it, which is the point — so
|
|
101
|
+
// this line does not argue for it. Every other summary in this column
|
|
102
|
+
// promises work done; this one just invites you to look.
|
|
103
|
+
{ noun: "colophon", summary: "Read the credits" },
|
|
99
104
|
{ noun: "skill", summary: "Browse agent skills from the active packs" },
|
|
100
105
|
{ noun: "prompt", summary: "Browse reusable prompt templates" },
|
|
101
|
-
//
|
|
102
|
-
//
|
|
106
|
+
// Curated for PLACEMENT, not for existence: `mcp serve` is an
|
|
107
|
+
// ordinary verb like every other, and this group is where a reader
|
|
108
|
+
// looks for it.
|
|
103
109
|
{ noun: "mcp", summary: "Start the MCP server over stdio" },
|
|
104
110
|
],
|
|
105
111
|
},
|
|
@@ -127,23 +133,53 @@ function summarizeNoun(noun: string, verbs: readonly VerbSpec[]): string {
|
|
|
127
133
|
return (first?.summary ?? `${noun} commands`).replace(/\.$/, "");
|
|
128
134
|
}
|
|
129
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Whether this reader is worth spending the wordmark on.
|
|
138
|
+
*
|
|
139
|
+
* An AUDIENCE question, not a data question: the art is 11 lines and ~200
|
|
140
|
+
* tokens — roughly a third of what `--help` costs an agent — and it says
|
|
141
|
+
* nothing an agent can act on. Both captured shapes are excluded:
|
|
142
|
+
* `llm` (requested, or inferred from a non-interactive stdout — the shape an
|
|
143
|
+
* agent captures) and `json`. `--format plain` therefore keeps the art even
|
|
144
|
+
* down a pipe, and `--format llm` drops it even on a terminal: explicit beats
|
|
145
|
+
* inference, the same inferred-vs-explicit split `renderErrorForFormat` uses.
|
|
146
|
+
*
|
|
147
|
+
* The DECISION is passed in as data — both call sites already hold the parsed
|
|
148
|
+
* flags — so this module still reads no `process` state and stays testable.
|
|
149
|
+
*
|
|
150
|
+
* @param flags - The invocation's global flags.
|
|
151
|
+
* @returns `true` when a human is reading and the wordmark should print.
|
|
152
|
+
*/
|
|
153
|
+
function wordmarkSuitsReader(flags: GlobalFlags): boolean {
|
|
154
|
+
return flags.llm !== true && flags.format !== "json";
|
|
155
|
+
}
|
|
156
|
+
|
|
130
157
|
/**
|
|
131
158
|
* Build the curated root help string.
|
|
132
159
|
*
|
|
133
160
|
* @param programName - The CLI binary name (the distribution's `name`).
|
|
134
161
|
* @param description - The program description shown in the header.
|
|
135
162
|
* @param verbs - All registered verbs, used to derive the live noun set.
|
|
163
|
+
* @param issuesUrl - Where the preview notice sends feedback; the
|
|
164
|
+
* distribution's own, so a fork points at its own tracker.
|
|
165
|
+
* @param version - The version to stamp on the header. Passed in rather than
|
|
166
|
+
* read here so it is the SAME string `--version` prints: `buildProgram`
|
|
167
|
+
* resolves `options.version ?? VERSION`, and a host that overrides one must
|
|
168
|
+
* not be able to leave the other saying something else.
|
|
169
|
+
* @param globalFlags - The invocation's global flags, read only to decide who
|
|
170
|
+
* is reading (see {@link wordmarkSuitsReader}). Passed rather than probed: the
|
|
171
|
+
* help layer must not learn to read `process`.
|
|
136
172
|
* @returns The formatted, colorized help text.
|
|
137
173
|
*/
|
|
138
174
|
export function formatRootHelp(
|
|
139
175
|
programName: string,
|
|
140
176
|
description: string,
|
|
141
177
|
verbs: readonly VerbSpec[],
|
|
178
|
+
version: string,
|
|
179
|
+
issuesUrl: string,
|
|
180
|
+
globalFlags: GlobalFlags,
|
|
142
181
|
): string {
|
|
143
182
|
const present = nounsFrom(verbs);
|
|
144
|
-
// `mcp` is served by the bin's special-case, not a projected verb, but is
|
|
145
|
-
// always available — surface it so the front door is complete.
|
|
146
|
-
present.add("mcp");
|
|
147
183
|
const kernel = buildKernelGroups(programName);
|
|
148
184
|
const curated = new Set(kernel.flatMap((g) => g.nouns.map((n) => n.noun)));
|
|
149
185
|
|
|
@@ -171,7 +207,31 @@ export function formatRootHelp(
|
|
|
171
207
|
);
|
|
172
208
|
|
|
173
209
|
const lines: string[] = [
|
|
174
|
-
|
|
210
|
+
// The wordmark leads when the distribution declares one AND a human is
|
|
211
|
+
// reading it. A fork ships its own art or none, so its front door is never
|
|
212
|
+
// branded with someone else's; and a captured run drops the art entirely
|
|
213
|
+
// rather than charging an agent ~200 tokens for a picture of the name it
|
|
214
|
+
// just typed (see `wordmarkSuitsReader`). The LINES go, not their colour:
|
|
215
|
+
// chalk already emits no escapes off a TTY, so dimming would save nobody
|
|
216
|
+
// anything.
|
|
217
|
+
...(PROGRAM_LOGO.length > 0 && wordmarkSuitsReader(globalFlags)
|
|
218
|
+
? [...PROGRAM_LOGO.map(helpLogo), ""]
|
|
219
|
+
: []),
|
|
220
|
+
// `<name> v<version> — <blurb>`, the spelling `info` and `capabilities`
|
|
221
|
+
// already use, so the front door names the build the same way every other
|
|
222
|
+
// surface does. Dimmed: it answers "which build am I on" for someone who
|
|
223
|
+
// is already here, and must not compete with the name.
|
|
224
|
+
`${helpHeading(programName)} ${helpDim(`v${version}`)} — ${description}`,
|
|
225
|
+
"",
|
|
226
|
+
// The preview notice. Dimmed and directly under the header, because it
|
|
227
|
+
// qualifies what the reader has just been told the tool IS — a version
|
|
228
|
+
// number alone does not say "expect this to move".
|
|
229
|
+
//
|
|
230
|
+
// The URL is the distribution's declared `issuesUrl`, never a literal:
|
|
231
|
+
// `kernel/copy.test.ts` forbids the kernel naming a distribution, and a
|
|
232
|
+
// fork inviting feedback to someone else's tracker would be worse than a
|
|
233
|
+
// missing line. It is passed in for the same reason `version` is.
|
|
234
|
+
helpDim(`This is a preview version. Issues and suggestions: ${issuesUrl}`),
|
|
175
235
|
"",
|
|
176
236
|
helpUsage(
|
|
177
237
|
`${programName} ${helpTerm("<command>")} ${helpDim("[subcommand] [flags]")}`,
|
|
@@ -203,7 +263,9 @@ export function formatRootHelp(
|
|
|
203
263
|
"--detail <level>",
|
|
204
264
|
"Progressive-disclosure level (summary, standard, detailed)",
|
|
205
265
|
],
|
|
206
|
-
["--
|
|
266
|
+
["--no-headers", "Hide the table header row in plain output"],
|
|
267
|
+
["--quiet", "Suppress success and progress output (errors still print)"],
|
|
268
|
+
["--verbose", "Diagnostic output on stderr (sources update)"],
|
|
207
269
|
["--help", "Show help (works on any command)"],
|
|
208
270
|
["--version", "Show the CLI version"],
|
|
209
271
|
];
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { capabilities } from "../../../capabilities/index.js";
|
|
2
3
|
import { fixtureModule } from "../../../testing/fixtures/fixtureCapability.js";
|
|
3
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
curatedSuggestions,
|
|
6
|
+
nounVerbMap,
|
|
7
|
+
resolveUnknownCommand,
|
|
8
|
+
} from "./suggest.js";
|
|
4
9
|
import { suggestNames } from "./suggestNames.js";
|
|
5
10
|
|
|
6
11
|
const verbs = [...fixtureModule.verbs];
|
|
@@ -36,6 +41,33 @@ describe("resolveUnknownCommand", () => {
|
|
|
36
41
|
});
|
|
37
42
|
});
|
|
38
43
|
|
|
44
|
+
describe("curatedSuggestions", () => {
|
|
45
|
+
it("answers the conventional spelling with the commands that own the job", () => {
|
|
46
|
+
// `status` is nowhere near `info` or `doctor` textually, so edit distance
|
|
47
|
+
// can never offer them. The table is the answer for a token whose JOB
|
|
48
|
+
// exists here under other names — and it stays a suggestion: `status` is
|
|
49
|
+
// not a command, because `info` already is.
|
|
50
|
+
expect(curatedSuggestions("status")).toEqual(["info", "doctor"]);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("has nothing to say about a plain typo — that is ranking's job", () => {
|
|
54
|
+
expect(curatedSuggestions("infoo")).toBeUndefined();
|
|
55
|
+
expect(curatedSuggestions("")).toBeUndefined();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("never names a command the program does not have", () => {
|
|
59
|
+
// A curated entry that outlived its target would send a confused user at
|
|
60
|
+
// nothing. Check every suggestion against the LIVE registry, so renaming
|
|
61
|
+
// `info` reddens here instead of shipping a dead hint.
|
|
62
|
+
const live = new Set(
|
|
63
|
+
capabilities.flatMap((m) => m.verbs.map((v) => v.path[0])),
|
|
64
|
+
);
|
|
65
|
+
for (const suggestion of curatedSuggestions("status") ?? []) {
|
|
66
|
+
expect(live.has(suggestion)).toBe(true);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
39
71
|
describe("suggestNames", () => {
|
|
40
72
|
it("ranks prefix matches ahead of edit-distance matches", () => {
|
|
41
73
|
expect(suggestNames("con", ["config", "connect", "block"])).toEqual([
|
|
@@ -10,7 +10,31 @@
|
|
|
10
10
|
* internals leak into the suggester.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import type { VerbSpec } from "../../spec/
|
|
13
|
+
import type { VerbSpec } from "../../spec/index.js";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Curated suggestions for a token whose JOB exists under other names. Edit
|
|
17
|
+
* distance cannot rank these — `status` is nowhere near `info` textually —
|
|
18
|
+
* but a user typing the conventional spelling deserves the commands that own
|
|
19
|
+
* the job here, not the nearest-looking noun. Consulted before fuzzy ranking;
|
|
20
|
+
* adding a second spelling as a real command is the one thing this table must
|
|
21
|
+
* never become.
|
|
22
|
+
*/
|
|
23
|
+
const CURATED_SUGGESTIONS: Readonly<Record<string, readonly string[]>> = {
|
|
24
|
+
status: ["info", "doctor"],
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The curated suggestions for an unknown token, if any.
|
|
29
|
+
*
|
|
30
|
+
* @param token - The unresolved command token.
|
|
31
|
+
* @returns The commands that own the token's job, or `undefined`.
|
|
32
|
+
*/
|
|
33
|
+
export function curatedSuggestions(
|
|
34
|
+
token: string,
|
|
35
|
+
): readonly string[] | undefined {
|
|
36
|
+
return CURATED_SUGGESTIONS[token];
|
|
37
|
+
}
|
|
14
38
|
|
|
15
39
|
/** An unresolved token and the sibling names to rank it against. */
|
|
16
40
|
export interface UnknownCommand {
|