@canonical/pragma-cli 0.31.0 → 0.33.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 +35 -421
- package/dist/pragma +0 -0
- package/package.json +28 -42
- package/src/bin.ts +292 -11
- package/src/capabilities/block/blockList.test.ts +79 -0
- package/src/capabilities/block/blockList.verb.ts +163 -0
- package/src/capabilities/block/index.ts +25 -0
- package/src/capabilities/block/pack.ts +166 -0
- package/src/capabilities/block/parity.test.ts +187 -0
- package/src/capabilities/block/tierChain.ts +78 -0
- package/src/capabilities/capabilities/capabilities.render.ts +89 -0
- package/src/capabilities/capabilities/capabilities.test.ts +140 -0
- package/src/capabilities/capabilities/capabilities.verb.ts +48 -0
- package/src/capabilities/capabilities/catalog.ts +148 -0
- package/src/capabilities/capabilities/hints.ts +212 -0
- package/src/capabilities/capabilities/index.ts +13 -0
- package/src/capabilities/capabilities/types.ts +60 -0
- package/src/capabilities/colophon/collectColophon.ts +68 -0
- package/src/capabilities/colophon/colophon.render.test.ts +114 -0
- package/src/capabilities/colophon/colophon.render.ts +47 -0
- package/src/capabilities/colophon/colophon.test.ts +241 -0
- package/src/capabilities/colophon/colophon.verb.ts +44 -0
- package/src/capabilities/colophon/index.ts +6 -0
- package/src/capabilities/colophon/markdownTerminal.test.ts +50 -0
- package/src/capabilities/colophon/markdownTerminal.ts +104 -0
- package/src/capabilities/colophon/pragmaColophon.ts +66 -0
- package/src/capabilities/colophon/types.ts +29 -0
- package/src/capabilities/config/collectConfigShow.ts +32 -0
- package/src/capabilities/config/field.render.ts +28 -0
- package/src/capabilities/config/fields.ts +81 -0
- package/src/capabilities/config/index.ts +6 -0
- package/src/capabilities/config/runField.ts +59 -0
- package/src/capabilities/config/runSet.ts +38 -0
- package/src/capabilities/config/set.test.ts +207 -0
- package/src/capabilities/config/set.verb.ts +70 -0
- package/src/capabilities/config/show.render.test.ts +65 -0
- package/src/capabilities/config/show.render.ts +107 -0
- package/src/capabilities/config/show.verb.ts +45 -0
- package/src/capabilities/config/types.ts +27 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +88 -0
- package/src/capabilities/create/byteEquality.test.ts +225 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +152 -0
- package/src/capabilities/create/create.mcp.test.ts +139 -0
- package/src/capabilities/create/create.render.ts +50 -0
- package/src/capabilities/create/create.test.ts +432 -0
- package/src/capabilities/create/create.verb.ts +493 -0
- package/src/capabilities/create/cwdJail.test.ts +129 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +111 -0
- package/src/capabilities/create/index.ts +25 -0
- package/src/capabilities/create/pathJail.ts +73 -0
- package/src/capabilities/create/pickGenerator.ts +63 -0
- package/src/capabilities/create/templates.embedded.generated.ts +53 -0
- package/src/capabilities/create/types.ts +8 -0
- package/src/capabilities/doctor/checks/checkConfigFile.ts +41 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +39 -0
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +114 -0
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +67 -0
- package/src/capabilities/doctor/checks/checkNodeVersion.ts +25 -0
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +73 -0
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +22 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +111 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +131 -0
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +60 -0
- package/src/capabilities/doctor/checks/deriveBand.test.ts +42 -0
- package/src/capabilities/doctor/checks/deriveBand.ts +28 -0
- package/src/capabilities/doctor/doctor.render.test.ts +170 -0
- package/src/capabilities/doctor/doctor.render.ts +198 -0
- package/src/capabilities/doctor/doctor.test.ts +209 -0
- package/src/capabilities/doctor/doctor.verb.ts +46 -0
- package/src/capabilities/doctor/index.ts +6 -0
- package/src/capabilities/doctor/runChecks.ts +100 -0
- package/src/capabilities/doctor/types.ts +56 -0
- package/src/capabilities/emptyRecovery.test.ts +112 -0
- package/src/capabilities/graph/index.ts +21 -0
- package/src/capabilities/graph/inspect.render.ts +38 -0
- package/src/capabilities/graph/inspect.test.ts +80 -0
- package/src/capabilities/graph/inspect.verb.ts +51 -0
- package/src/capabilities/graph/query.render.ts +77 -0
- package/src/capabilities/graph/query.test.ts +156 -0
- package/src/capabilities/graph/query.verb.ts +58 -0
- package/src/capabilities/graph/runQuery.ts +49 -0
- package/src/capabilities/index.ts +54 -0
- package/src/capabilities/info/collectInfo.ts +76 -0
- package/src/capabilities/info/index.ts +6 -0
- package/src/capabilities/info/info.render.ts +72 -0
- package/src/capabilities/info/info.test.ts +127 -0
- package/src/capabilities/info/info.verb.ts +46 -0
- package/src/capabilities/info/types.ts +42 -0
- package/src/capabilities/lazy.test.ts +89 -0
- package/src/capabilities/meta/complete.verb.ts +52 -0
- package/src/capabilities/meta/index.ts +15 -0
- package/src/capabilities/meta/mcp.verb.ts +35 -0
- package/src/capabilities/modifier/index.ts +15 -0
- package/src/capabilities/modifier/pack.ts +64 -0
- package/src/capabilities/ontology/index.ts +19 -0
- package/src/capabilities/ontology/ontology.test.ts +246 -0
- package/src/capabilities/ontology/queries.ts +197 -0
- package/src/capabilities/ontology/render.ts +87 -0
- package/src/capabilities/ontology/verbs.ts +269 -0
- package/src/capabilities/prompt/index.ts +18 -0
- package/src/capabilities/prompt/prompt.render.test.ts +94 -0
- package/src/capabilities/prompt/prompt.render.ts +87 -0
- package/src/capabilities/prompt/prompt.test.ts +180 -0
- package/src/capabilities/prompt/types.ts +30 -0
- package/src/capabilities/prompt/verbs.ts +93 -0
- package/src/capabilities/reference.test.ts +32 -0
- package/src/capabilities/resources/index.ts +15 -0
- package/src/capabilities/resources/provider.ts +245 -0
- package/src/capabilities/resources/resources.test.ts +213 -0
- package/src/capabilities/roundtrip.test.ts +107 -0
- package/src/capabilities/scopeTypeSync.test.ts +37 -0
- package/src/capabilities/setup/index.ts +12 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +141 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +403 -0
- package/src/capabilities/setup/operations/setupLsp.ts +105 -0
- package/src/capabilities/setup/operations/setupMcp.ts +262 -0
- package/src/capabilities/setup/operations/setupSkills.ts +205 -0
- package/src/capabilities/setup/setup.render.test.ts +109 -0
- package/src/capabilities/setup/setup.render.ts +96 -0
- package/src/capabilities/setup/setup.test.ts +702 -0
- package/src/capabilities/setup/setup.verb.ts +261 -0
- package/src/capabilities/setup/shell.ts +85 -0
- package/src/capabilities/setup/types.ts +99 -0
- package/src/capabilities/shared/assertExecOk.ts +106 -0
- package/src/capabilities/shared/bands.ts +16 -0
- package/src/capabilities/shared/packageManager.ts +62 -0
- package/src/capabilities/shared/registry.ts +70 -0
- package/src/capabilities/skill/discover.ts +178 -0
- package/src/capabilities/skill/index.ts +12 -0
- package/src/capabilities/skill/render.ts +60 -0
- package/src/capabilities/skill/skill.test.ts +142 -0
- package/src/capabilities/skill/verbs.ts +100 -0
- package/src/capabilities/sources/collectStatus.ts +102 -0
- package/src/capabilities/sources/index.ts +15 -0
- package/src/capabilities/sources/installSkills.ts +124 -0
- package/src/capabilities/sources/runUpdate.ts +464 -0
- package/src/capabilities/sources/sources.test.ts +828 -0
- package/src/capabilities/sources/status.render.test.ts +65 -0
- package/src/capabilities/sources/status.render.ts +83 -0
- package/src/capabilities/sources/status.verb.ts +42 -0
- package/src/capabilities/sources/types.ts +51 -0
- package/src/capabilities/sources/update.render.ts +35 -0
- package/src/capabilities/sources/update.verb.ts +76 -0
- package/src/capabilities/standard/index.ts +18 -0
- package/src/capabilities/standard/pack.ts +128 -0
- package/src/capabilities/standard/parity.test.ts +208 -0
- package/src/capabilities/surface.test.ts +233 -0
- package/src/capabilities/tier/index.ts +19 -0
- package/src/capabilities/tier/lookup.render.test.ts +72 -0
- package/src/capabilities/tier/lookup.render.ts +59 -0
- package/src/capabilities/tier/lookup.test.ts +83 -0
- package/src/capabilities/tier/lookup.verb.ts +44 -0
- package/src/capabilities/tier/pack.ts +28 -0
- package/src/capabilities/tier/runLookup.ts +87 -0
- package/src/capabilities/token/addConfig.render.ts +27 -0
- package/src/capabilities/token/addConfig.test.ts +62 -0
- package/src/capabilities/token/addConfig.verb.ts +40 -0
- package/src/capabilities/token/index.ts +19 -0
- package/src/capabilities/token/pack.ts +58 -0
- package/src/capabilities/token/runAddConfig.ts +95 -0
- package/src/capabilities/upgrade/index.ts +6 -0
- package/src/capabilities/upgrade/runUpgrade.ts +119 -0
- package/src/capabilities/upgrade/types.ts +21 -0
- package/src/capabilities/upgrade/upgrade.render.ts +55 -0
- package/src/capabilities/upgrade/upgrade.test.ts +372 -0
- package/src/capabilities/upgrade/upgrade.verb.ts +56 -0
- package/src/constants.test.ts +33 -0
- package/src/constants.ts +38 -70
- package/src/index.ts +27 -122
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +339 -0
- package/src/kernel/completion/bashDrive.test.ts +73 -0
- package/src/kernel/completion/complete.test.ts +99 -0
- package/src/kernel/completion/complete.ts +77 -0
- package/src/kernel/completion/emitScripts.test.ts +173 -0
- package/src/kernel/completion/emitScripts.ts +122 -0
- package/src/kernel/completion/entitySource.test.ts +198 -0
- package/src/kernel/completion/entitySource.ts +277 -0
- package/src/kernel/completion/index.ts +42 -0
- package/src/kernel/completion/model.test.ts +405 -0
- package/src/kernel/completion/model.ts +258 -0
- package/src/kernel/completion/parse.test.ts +336 -0
- package/src/kernel/completion/parse.ts +294 -0
- package/src/kernel/completion/rank.test.ts +100 -0
- package/src/kernel/completion/rank.ts +118 -0
- package/src/kernel/completion/resolve.test.ts +204 -0
- package/src/kernel/completion/resolve.ts +133 -0
- package/src/kernel/completion/safety.test.ts +374 -0
- package/src/kernel/completion/templates/bash.ts +249 -0
- package/src/kernel/completion/templates/fish.ts +245 -0
- package/src/kernel/completion/templates/shared.ts +134 -0
- package/src/kernel/completion/templates/zsh.ts +246 -0
- package/src/kernel/completion/types.ts +153 -0
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +11 -0
- package/src/kernel/config/defaults.ts +28 -0
- package/src/kernel/config/evaluateProjectConfig.ts +119 -0
- package/src/kernel/config/findProjectConfig.ts +45 -0
- package/src/kernel/config/firstRun.test.ts +60 -0
- package/src/kernel/config/firstRun.ts +91 -0
- package/src/kernel/config/globalConfig.ts +94 -0
- package/src/kernel/config/index.ts +35 -0
- package/src/kernel/config/paths.ts +39 -0
- package/src/kernel/config/readConfig.test.ts +245 -0
- package/src/kernel/config/readConfig.ts +94 -0
- package/src/kernel/config/schema.ts +56 -0
- package/src/kernel/config/types.ts +106 -0
- package/src/kernel/config/writeConfigField.ts +82 -0
- package/src/kernel/error/PragmaError.test.ts +119 -0
- package/src/kernel/error/PragmaError.ts +182 -0
- package/src/kernel/error/constants.ts +38 -0
- package/src/kernel/error/fromTaskError.test.ts +83 -0
- package/src/kernel/error/fromTaskError.ts +80 -0
- package/src/kernel/error/index.ts +23 -0
- package/src/kernel/error/recovery.test.ts +60 -0
- package/src/kernel/error/recovery.ts +49 -0
- package/src/kernel/error/renderError.ts +101 -0
- package/src/kernel/error/serialize.ts +28 -0
- package/src/kernel/error/types.ts +62 -0
- package/src/kernel/packs/collect.test.ts +138 -0
- package/src/kernel/packs/collect.ts +108 -0
- package/src/kernel/packs/compile.test.ts +229 -0
- package/src/kernel/packs/compile.ts +315 -0
- package/src/kernel/packs/disclosure.test.ts +200 -0
- package/src/kernel/packs/disclosure.ts +98 -0
- package/src/kernel/packs/glob.ts +39 -0
- package/src/kernel/packs/graphql/buildLookupDocument.ts +397 -0
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +217 -0
- package/src/kernel/packs/graphql/nameMap.ts +67 -0
- package/src/kernel/packs/graphqlSource.test.ts +383 -0
- package/src/kernel/packs/iri.ts +78 -0
- package/src/kernel/packs/renderPack.ts +196 -0
- package/src/kernel/packs/resolveEntity.ts +232 -0
- package/src/kernel/packs/runBodies.ts +157 -0
- package/src/kernel/packs/sample.ts +60 -0
- package/src/kernel/packs/schema.ts +328 -0
- package/src/kernel/packs/sparql/applyFilters.ts +83 -0
- package/src/kernel/packs/sparql/applySearch.ts +33 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +180 -0
- package/src/kernel/packs/sparql/escape.ts +22 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +80 -0
- package/src/kernel/packs/sparql/runSelect.ts +84 -0
- package/src/kernel/packs/toolDescription.test.ts +81 -0
- package/src/kernel/packs/types.ts +337 -0
- package/src/kernel/packs/uniqueness.ts +35 -0
- package/src/kernel/project/cli/buildProgram.test.ts +431 -0
- package/src/kernel/project/cli/buildProgram.ts +291 -0
- package/src/kernel/project/cli/dispatch.test.ts +288 -0
- package/src/kernel/project/cli/dispatch.ts +334 -0
- package/src/kernel/project/cli/exitCodes.test.ts +59 -0
- package/src/kernel/project/cli/exitCodes.ts +68 -0
- package/src/kernel/project/cli/globalFlags.test.ts +107 -0
- package/src/kernel/project/cli/globalFlags.ts +149 -0
- package/src/kernel/project/cli/helpFormat.ts +58 -0
- package/src/kernel/project/cli/index.ts +21 -0
- package/src/kernel/project/cli/interactionSeam.test.ts +99 -0
- package/src/kernel/project/cli/rootHelp.ts +220 -0
- package/src/kernel/project/cli/suggest.test.ts +54 -0
- package/src/kernel/project/cli/suggest.ts +67 -0
- package/src/kernel/project/cli/suggestNames.ts +122 -0
- package/src/kernel/project/cli/verbHelp.test.ts +138 -0
- package/src/kernel/project/cli/verbHelp.ts +144 -0
- package/src/kernel/project/mcp/buildServer.ts +70 -0
- package/src/kernel/project/mcp/envelope.ts +44 -0
- package/src/kernel/project/mcp/index.ts +8 -0
- package/src/kernel/project/mcp/instructions.ts +48 -0
- package/src/kernel/project/mcp/mcpError.ts +52 -0
- package/src/kernel/project/mcp/parity.test.ts +72 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +104 -0
- package/src/kernel/project/mcp/prompts/provider.ts +104 -0
- package/src/kernel/project/mcp/prompts/source.ts +194 -0
- package/src/kernel/project/mcp/registerVerb.test.ts +238 -0
- package/src/kernel/project/mcp/registerVerb.ts +296 -0
- package/src/kernel/project/mcp/serve.ts +34 -0
- package/src/kernel/project/mcp/toolDescriptions.test.ts +80 -0
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +127 -0
- package/src/kernel/render/compactUri.ts +25 -0
- package/src/kernel/render/contracts.ts +72 -0
- package/src/kernel/render/disclosure.ts +44 -0
- package/src/kernel/render/envelope.ts +50 -0
- package/src/kernel/render/formatters.ts +31 -0
- package/src/kernel/render/index.ts +30 -0
- package/src/kernel/render/prefixes.ts +21 -0
- package/src/kernel/render/renderers.test.ts +205 -0
- package/src/kernel/render/renderers.ts +447 -0
- package/src/kernel/render/style.test.ts +31 -0
- package/src/kernel/render/style.ts +74 -0
- package/src/kernel/render/writeStdout.test.ts +43 -0
- package/src/kernel/render/writeStdout.ts +49 -0
- package/src/kernel/runtime/boot.test.ts +69 -0
- package/src/kernel/runtime/boot.ts +59 -0
- package/src/kernel/runtime/facade.test.ts +125 -0
- package/src/kernel/runtime/facade.ts +47 -0
- package/src/kernel/runtime/graphpack/build.ts +176 -0
- package/src/kernel/runtime/graphpack/buildIndex.test.ts +103 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +317 -0
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -0
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -0
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +39 -0
- package/src/kernel/runtime/graphpack/embedded.ts +70 -0
- package/src/kernel/runtime/graphpack/graphpack.test.ts +221 -0
- package/src/kernel/runtime/graphpack/hash.ts +46 -0
- package/src/kernel/runtime/graphpack/index.ts +21 -0
- package/src/kernel/runtime/graphpack/manifest.ts +55 -0
- package/src/kernel/runtime/graphpack/read.ts +117 -0
- package/src/kernel/runtime/graphpack/types.ts +125 -0
- package/src/kernel/runtime/index.ts +15 -0
- package/src/kernel/runtime/loadSession.ts +48 -0
- package/src/kernel/runtime/lock.ts +90 -0
- package/src/kernel/runtime/paths.ts +37 -0
- package/src/kernel/runtime/probe.test.ts +16 -0
- package/src/kernel/runtime/probe.ts +39 -0
- package/src/kernel/runtime/readEntity.ts +83 -0
- package/src/kernel/runtime/refs/gitOps.ts +88 -0
- package/src/kernel/runtime/refs/parseRef.test.ts +34 -0
- package/src/kernel/runtime/refs/parseRef.ts +103 -0
- package/src/kernel/runtime/refs/resolve.ts +380 -0
- package/src/kernel/runtime/resolveSources.test.ts +154 -0
- package/src/kernel/runtime/resolveSources.ts +66 -0
- package/src/kernel/runtime/store.test.ts +94 -0
- package/src/kernel/runtime/store.ts +90 -0
- package/src/kernel/runtime/storeReadiness.ts +61 -0
- package/src/kernel/runtime/storeless.test.ts +86 -0
- package/src/kernel/runtime/types.ts +210 -0
- package/src/kernel/runtime/wasmEmbed.test.ts +144 -0
- package/src/kernel/spec/asVerb.ts +23 -0
- package/src/kernel/spec/emitReference.test.ts +196 -0
- package/src/kernel/spec/emitReference.ts +491 -0
- package/src/kernel/spec/emitSurface.test.ts +65 -0
- package/src/kernel/spec/emitSurface.ts +225 -0
- package/src/kernel/spec/index.ts +36 -0
- package/src/kernel/spec/surfaceConformance.test.ts +94 -0
- package/src/kernel/spec/surfaceConformance.ts +135 -0
- package/src/kernel/spec/types.ts +233 -0
- package/src/kernel/spec/validate.test.ts +81 -0
- package/src/kernel/spec/validate.ts +125 -0
- package/src/testing/PARITY_GAPS.test.ts +32 -0
- package/src/testing/PARITY_GAPS.ts +179 -0
- package/src/testing/behavioral/README.md +164 -0
- package/src/testing/behavioral/agentSession.mcp.test.ts +160 -0
- package/src/testing/behavioral/autoLlm.e2e.test.ts +54 -0
- package/src/testing/behavioral/completion.test.ts +132 -0
- package/src/testing/behavioral/disclosure.test.ts +115 -0
- package/src/testing/behavioral/docExamples.test.ts +283 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +120 -0
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +124 -0
- package/src/testing/behavioral/exitCodes.e2e.test.ts +53 -0
- package/src/testing/behavioral/firstRun.e2e.test.ts +40 -0
- package/src/testing/behavioral/harness.foundation.test.ts +136 -0
- package/src/testing/behavioral/journeys.cli.test.ts +131 -0
- package/src/testing/behavioral/journeys.defaultPack.test.ts +571 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +66 -0
- package/src/testing/behavioral/journeys.livePack.e2e.test.ts +129 -0
- package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +176 -0
- package/src/testing/behavioral/liveReadSurface.ts +80 -0
- package/src/testing/behavioral/mcpServe.e2e.test.ts +21 -0
- package/src/testing/behavioral/mcpSurface.test.ts +139 -0
- package/src/testing/behavioral/parity.test.ts +224 -0
- package/src/testing/behavioral/rootCli.e2e.test.ts +62 -0
- package/src/testing/behavioral/staleCommands.test.ts +76 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +201 -0
- package/src/testing/eval/cases/assembly.ts +195 -0
- package/src/testing/eval/cases/effectful.ts +248 -0
- package/src/testing/eval/cases/readNouns.ts +235 -0
- package/src/testing/eval/cases/stable.ts +163 -0
- package/src/testing/eval/eval.test.ts +74 -0
- package/src/testing/eval/harness.ts +91 -0
- package/src/testing/eval/report.ts +58 -0
- package/src/testing/fixtures/blockGraph.ts +112 -0
- package/src/testing/fixtures/completionFixture.ts +239 -0
- package/src/testing/fixtures/fixtureCapability.ts +331 -0
- package/src/testing/fixtures/graph/canonical.ts +184 -0
- package/src/testing/fixtures/graph/defaultPack.ts +178 -0
- package/src/testing/fixtures/graph/owlExport.ts +95 -0
- package/src/testing/fixtures/packs/recipe.ts +78 -0
- package/src/testing/helpers/extractSnippets.ts +29 -0
- package/src/testing/helpers/fixtureGraph.ts +148 -0
- package/src/testing/helpers/golden.ts +45 -0
- package/src/testing/helpers/packRuntime.ts +118 -0
- package/src/testing/helpers/parity.ts +86 -0
- package/src/testing/helpers/projectCli.ts +35 -0
- package/src/testing/helpers/projectMcp.ts +145 -0
- package/src/testing/helpers/runCli.ts +128 -0
- package/src/testing/perf/budgets.test.ts +164 -0
- package/src/testing/perf/budgets.ts +37 -0
- package/src/testing/perf/globalSetup.ts +30 -0
- package/src/testing/perf/measure.ts +97 -0
- package/src/testing/setupXdgIsolation.ts +13 -12
- package/src/types.ts +42 -0
- package/src/bin.test.ts +0 -54
- package/src/compile-validation.runner.ts +0 -137
- package/src/compile-validation.ts +0 -191
- package/src/completions/computeSocketPath.test.ts +0 -26
- package/src/completions/computeSocketPath.ts +0 -16
- package/src/completions/constants.ts +0 -25
- package/src/completions/handleQuery.test.ts +0 -125
- package/src/completions/handleQuery.ts +0 -49
- package/src/completions/index.ts +0 -14
- package/src/completions/queryCompletions.test.ts +0 -105
- package/src/completions/queryCompletions.ts +0 -75
- package/src/completions/querySocket.test.ts +0 -101
- package/src/completions/querySocket.ts +0 -71
- package/src/completions/startCompletionsServer.test.ts +0 -74
- package/src/completions/startCompletionsServer.ts +0 -75
- package/src/completions/startCompletionsServer.unit.test.ts +0 -131
- package/src/completions/waitForSocket.test.ts +0 -27
- package/src/completions/waitForSocket.ts +0 -27
- package/src/config/configExists.ts +0 -14
- package/src/config/defaultConfig.test.ts +0 -33
- package/src/config/defaultConfig.ts +0 -59
- package/src/config/defaults.json +0 -17
- package/src/config/findProjectConfigPath.test.ts +0 -53
- package/src/config/findProjectConfigPath.ts +0 -36
- package/src/config/index.ts +0 -21
- package/src/config/mergeConfigFileUpdate.ts +0 -58
- package/src/config/parseConfigValues.ts +0 -217
- package/src/config/readConfig.test.ts +0 -395
- package/src/config/readConfig.ts +0 -21
- package/src/config/readConfigLayers.test.ts +0 -109
- package/src/config/readConfigLayers.ts +0 -118
- package/src/config/resolveConfigPath.test.ts +0 -20
- package/src/config/resolveConfigPath.ts +0 -11
- package/src/config/resolveGlobalConfigPath.ts +0 -13
- package/src/config/resolveWriteConfigPath.test.ts +0 -53
- package/src/config/resolveWriteConfigPath.ts +0 -31
- package/src/config/types.ts +0 -128
- package/src/config/writeConfig.ts +0 -37
- package/src/domains/block/blockConfig.ts +0 -97
- package/src/domains/block/commands/index.ts +0 -5
- package/src/domains/block/commands/list.test.ts +0 -111
- package/src/domains/block/commands/list.ts +0 -11
- package/src/domains/block/commands/lookup.test.ts +0 -187
- package/src/domains/block/commands/lookup.ts +0 -14
- package/src/domains/block/commands/sample.ts +0 -56
- package/src/domains/block/formatters/index.ts +0 -5
- package/src/domains/block/formatters/list.test.ts +0 -107
- package/src/domains/block/formatters/list.ts +0 -50
- package/src/domains/block/formatters/lookup.test.ts +0 -318
- package/src/domains/block/formatters/lookup.ts +0 -149
- package/src/domains/block/formatters/sample.ts +0 -21
- package/src/domains/block/formatters/types.ts +0 -16
- package/src/domains/block/helpers/index.ts +0 -4
- package/src/domains/block/helpers/resolveAspects.test.ts +0 -64
- package/src/domains/block/helpers/resolveAspects.ts +0 -35
- package/src/domains/block/index.ts +0 -25
- package/src/domains/block/mcp/index.ts +0 -2
- package/src/domains/block/mcp/specs.ts +0 -67
- package/src/domains/block/operations/index.ts +0 -5
- package/src/domains/block/operations/list.test.ts +0 -80
- package/src/domains/block/operations/list.ts +0 -72
- package/src/domains/block/operations/lookup.test.ts +0 -129
- package/src/domains/block/operations/lookup.ts +0 -446
- package/src/domains/block/operations/sample.ts +0 -41
- package/src/domains/block/orchestration/blockEmptyError.test.ts +0 -26
- package/src/domains/block/orchestration/blockEmptyError.ts +0 -19
- package/src/domains/block/orchestration/buildBlockFilters.ts +0 -12
- package/src/domains/block/orchestration/enrichBlocks.ts +0 -44
- package/src/domains/block/orchestration/index.ts +0 -5
- package/src/domains/block/orchestration/resolveBlockList.ts +0 -39
- package/src/domains/block/orchestration/resolveBlockLookup.ts +0 -35
- package/src/domains/block/stories.test.ts +0 -28
- package/src/domains/block/stories.ts +0 -260
- package/src/domains/block/types.ts +0 -30
- package/src/domains/config/commands/channel.test.ts +0 -128
- package/src/domains/config/commands/channel.ts +0 -99
- package/src/domains/config/commands/configScope.ts +0 -46
- package/src/domains/config/commands/framework.test.ts +0 -119
- package/src/domains/config/commands/framework.ts +0 -103
- package/src/domains/config/commands/index.ts +0 -6
- package/src/domains/config/commands/show.test.ts +0 -61
- package/src/domains/config/commands/show.ts +0 -11
- package/src/domains/config/commands/tier.test.ts +0 -102
- package/src/domains/config/commands/tier.ts +0 -97
- package/src/domains/config/commands/trace.test.ts +0 -165
- package/src/domains/config/commands/trace.ts +0 -83
- package/src/domains/config/formatters/channel.test.ts +0 -70
- package/src/domains/config/formatters/channel.ts +0 -37
- package/src/domains/config/formatters/framework.ts +0 -37
- package/src/domains/config/formatters/index.ts +0 -6
- package/src/domains/config/formatters/show.test.ts +0 -153
- package/src/domains/config/formatters/show.ts +0 -89
- package/src/domains/config/formatters/tier.test.ts +0 -86
- package/src/domains/config/formatters/tier.ts +0 -48
- package/src/domains/config/formatters/trace.ts +0 -28
- package/src/domains/config/index.ts +0 -36
- package/src/domains/config/mcp/index.ts +0 -2
- package/src/domains/config/mcp/specs.ts +0 -100
- package/src/domains/config/operations/index.ts +0 -6
- package/src/domains/config/operations/show.test.ts +0 -78
- package/src/domains/config/operations/show.ts +0 -48
- package/src/domains/config/operations/types.ts +0 -20
- package/src/domains/config/operations/validateChannel.test.ts +0 -36
- package/src/domains/config/operations/validateChannel.ts +0 -24
- package/src/domains/config/operations/validateFramework.ts +0 -24
- package/src/domains/config/operations/validateTier.test.ts +0 -65
- package/src/domains/config/operations/validateTier.ts +0 -43
- package/src/domains/config/stories.ts +0 -42
- package/src/domains/config/tasks/index.ts +0 -6
- package/src/domains/config/tasks/setChannel.ts +0 -21
- package/src/domains/config/tasks/setFramework.ts +0 -21
- package/src/domains/config/tasks/setTier.ts +0 -20
- package/src/domains/config/tasks/setTrace.ts +0 -20
- package/src/domains/config/tasks/writeConfigField.ts +0 -41
- package/src/domains/create/generatorPack/bundled.ts +0 -49
- package/src/domains/create/generatorPack/compileGeneratorPack.test.ts +0 -159
- package/src/domains/create/generatorPack/compileGeneratorPack.ts +0 -312
- package/src/domains/create/index.ts +0 -21
- package/src/domains/create/mcp/index.ts +0 -2
- package/src/domains/create/mcp/specs.ts +0 -13
- package/src/domains/create/renderGeneratorUi.test.ts +0 -103
- package/src/domains/create/renderGeneratorUi.ts +0 -65
- package/src/domains/doctor/commands/doctor.test.ts +0 -75
- package/src/domains/doctor/commands/doctor.ts +0 -43
- package/src/domains/doctor/commands/index.ts +0 -2
- package/src/domains/doctor/formatters/doctor.test.ts +0 -165
- package/src/domains/doctor/formatters/doctor.ts +0 -136
- package/src/domains/doctor/formatters/index.ts +0 -2
- package/src/domains/doctor/index.ts +0 -9
- package/src/domains/doctor/mcp/index.ts +0 -2
- package/src/domains/doctor/mcp/specs.ts +0 -41
- package/src/domains/doctor/operations/checks/checkConfigFile.ts +0 -42
- package/src/domains/doctor/operations/checks/checkKeStore.ts +0 -38
- package/src/domains/doctor/operations/checks/checkMcpCommands.ts +0 -133
- package/src/domains/doctor/operations/checks/checkMcpConfigured.ts +0 -65
- package/src/domains/doctor/operations/checks/checkNodeVersion.ts +0 -25
- package/src/domains/doctor/operations/checks/checkPackageRefs.ts +0 -76
- package/src/domains/doctor/operations/checks/checkPragmaVersion.ts +0 -20
- package/src/domains/doctor/operations/checks/checkShellCompletions.ts +0 -42
- package/src/domains/doctor/operations/checks/checkSkillsSymlinked.ts +0 -64
- package/src/domains/doctor/operations/checks/index.ts +0 -10
- package/src/domains/doctor/operations/checks.test.ts +0 -307
- package/src/domains/doctor/operations/index.ts +0 -3
- package/src/domains/doctor/operations/runChecks.test.ts +0 -176
- package/src/domains/doctor/operations/runChecks.ts +0 -78
- package/src/domains/doctor/operations/types.ts +0 -42
- package/src/domains/graph/commands/index.ts +0 -4
- package/src/domains/graph/commands/inspect.test.ts +0 -94
- package/src/domains/graph/commands/inspect.ts +0 -63
- package/src/domains/graph/commands/query.test.ts +0 -94
- package/src/domains/graph/commands/query.ts +0 -60
- package/src/domains/graph/formatters/index.ts +0 -4
- package/src/domains/graph/formatters/inspect.ts +0 -50
- package/src/domains/graph/formatters/query.test.ts +0 -87
- package/src/domains/graph/formatters/query.ts +0 -74
- package/src/domains/graph/helpers/index.ts +0 -3
- package/src/domains/graph/helpers/resolveUri.test.ts +0 -50
- package/src/domains/graph/helpers/resolveUri.ts +0 -77
- package/src/domains/graph/index.ts +0 -22
- package/src/domains/graph/mcp/index.ts +0 -2
- package/src/domains/graph/mcp/specs.ts +0 -82
- package/src/domains/graph/operations/executeQuery.test.ts +0 -68
- package/src/domains/graph/operations/executeQuery.ts +0 -32
- package/src/domains/graph/operations/index.ts +0 -4
- package/src/domains/graph/operations/inspectUri.test.ts +0 -101
- package/src/domains/graph/operations/inspectUri.ts +0 -64
- package/src/domains/graphql/commands/build.test.ts +0 -196
- package/src/domains/graphql/commands/build.ts +0 -117
- package/src/domains/graphql/commands/check.test.ts +0 -141
- package/src/domains/graphql/commands/check.ts +0 -81
- package/src/domains/graphql/commands/index.ts +0 -5
- package/src/domains/graphql/commands/serve.test.ts +0 -46
- package/src/domains/graphql/commands/serve.ts +0 -141
- package/src/domains/graphql/constants.ts +0 -10
- package/src/domains/graphql/formatters/index.ts +0 -3
- package/src/domains/graphql/formatters/report.ts +0 -78
- package/src/domains/graphql/helpers/gatherSources.test.ts +0 -92
- package/src/domains/graphql/helpers/gatherSources.ts +0 -58
- package/src/domains/graphql/helpers/index.ts +0 -6
- package/src/domains/graphql/helpers/parsePrefixes.test.ts +0 -44
- package/src/domains/graphql/helpers/parsePrefixes.ts +0 -38
- package/src/domains/graphql/helpers/resolveSourceFiles.test.ts +0 -65
- package/src/domains/graphql/helpers/resolveSourceFiles.ts +0 -66
- package/src/domains/graphql/helpers/routeGraphql.test.ts +0 -43
- package/src/domains/graphql/helpers/routeGraphql.ts +0 -28
- package/src/domains/graphql/index.ts +0 -24
- package/src/domains/graphql/operations/compileSchema.test.ts +0 -95
- package/src/domains/graphql/operations/compileSchema.ts +0 -107
- package/src/domains/graphql/operations/createSchemaServer.test.ts +0 -50
- package/src/domains/graphql/operations/createSchemaServer.ts +0 -75
- package/src/domains/graphql/operations/ensureSchemaArtifact.test.ts +0 -167
- package/src/domains/graphql/operations/ensureSchemaArtifact.ts +0 -178
- package/src/domains/graphql/operations/index.ts +0 -17
- package/src/domains/graphql/types.ts +0 -29
- package/src/domains/info/commands/index.ts +0 -4
- package/src/domains/info/commands/info.test.ts +0 -88
- package/src/domains/info/commands/info.ts +0 -47
- package/src/domains/info/commands/upgrade.test.ts +0 -183
- package/src/domains/info/commands/upgrade.ts +0 -153
- package/src/domains/info/constants.test.ts +0 -22
- package/src/domains/info/constants.ts +0 -15
- package/src/domains/info/formatters/index.ts +0 -8
- package/src/domains/info/formatters/info.test.ts +0 -207
- package/src/domains/info/formatters/info.ts +0 -131
- package/src/domains/info/formatters/upgrade.test.ts +0 -136
- package/src/domains/info/formatters/upgrade.ts +0 -70
- package/src/domains/info/index.ts +0 -9
- package/src/domains/info/mcp/index.ts +0 -2
- package/src/domains/info/mcp/specs.ts +0 -65
- package/src/domains/info/operations/checkRegistryVersion.test.ts +0 -124
- package/src/domains/info/operations/checkRegistryVersion.ts +0 -45
- package/src/domains/info/operations/collectEntityCounts.test.ts +0 -156
- package/src/domains/info/operations/collectEntityCounts.ts +0 -123
- package/src/domains/info/operations/collectInfo.test.ts +0 -122
- package/src/domains/info/operations/collectInfo.ts +0 -94
- package/src/domains/info/operations/collectStoreSummary.test.ts +0 -61
- package/src/domains/info/operations/collectStoreSummary.ts +0 -42
- package/src/domains/info/operations/index.ts +0 -6
- package/src/domains/info/types.test-d.ts +0 -35
- package/src/domains/info/types.ts +0 -67
- package/src/domains/llm/capabilities.test.ts +0 -111
- package/src/domains/llm/commands/capabilities.ts +0 -37
- package/src/domains/llm/commands/index.ts +0 -4
- package/src/domains/llm/commands/llm.ts +0 -41
- package/src/domains/llm/data/commandReference.ts +0 -106
- package/src/domains/llm/data/decisionTrees.ts +0 -55
- package/src/domains/llm/data/index.ts +0 -6
- package/src/domains/llm/data/toolCatalog.ts +0 -221
- package/src/domains/llm/formatters/capabilities.ts +0 -50
- package/src/domains/llm/formatters/index.ts +0 -4
- package/src/domains/llm/formatters/orientation.ts +0 -57
- package/src/domains/llm/index.ts +0 -9
- package/src/domains/llm/llmCommand.test.ts +0 -101
- package/src/domains/llm/mcp/index.ts +0 -2
- package/src/domains/llm/mcp/specs.ts +0 -93
- package/src/domains/llm/operations/collectContext.test.ts +0 -64
- package/src/domains/llm/operations/collectContext.ts +0 -37
- package/src/domains/llm/operations/index.ts +0 -3
- package/src/domains/llm/types.ts +0 -72
- package/src/domains/modifier/commands/index.ts +0 -5
- package/src/domains/modifier/commands/list.test.ts +0 -57
- package/src/domains/modifier/commands/list.ts +0 -9
- package/src/domains/modifier/commands/lookup.test.ts +0 -91
- package/src/domains/modifier/commands/lookup.ts +0 -14
- package/src/domains/modifier/commands/sample.ts +0 -54
- package/src/domains/modifier/formatters/index.ts +0 -8
- package/src/domains/modifier/formatters/list.test.ts +0 -38
- package/src/domains/modifier/formatters/list.ts +0 -22
- package/src/domains/modifier/formatters/lookup.test.ts +0 -33
- package/src/domains/modifier/formatters/lookup.ts +0 -50
- package/src/domains/modifier/formatters/sample.ts +0 -15
- package/src/domains/modifier/index.ts +0 -27
- package/src/domains/modifier/mcp/index.ts +0 -2
- package/src/domains/modifier/mcp/specs.ts +0 -65
- package/src/domains/modifier/modifierConfig.ts +0 -36
- package/src/domains/modifier/operations/index.ts +0 -5
- package/src/domains/modifier/operations/list.test.ts +0 -39
- package/src/domains/modifier/operations/list.ts +0 -41
- package/src/domains/modifier/operations/lookup.test.ts +0 -37
- package/src/domains/modifier/operations/lookup.ts +0 -69
- package/src/domains/modifier/operations/sample.ts +0 -32
- package/src/domains/modifier/orchestration/index.ts +0 -3
- package/src/domains/modifier/orchestration/modifierEmptyError.test.ts +0 -26
- package/src/domains/modifier/orchestration/modifierEmptyError.ts +0 -15
- package/src/domains/modifier/orchestration/resolveModifierList.ts +0 -16
- package/src/domains/modifier/orchestration/resolveModifierLookup.ts +0 -33
- package/src/domains/modifier/stories.test.ts +0 -20
- package/src/domains/modifier/stories.ts +0 -86
- package/src/domains/modifier/types.ts +0 -5
- package/src/domains/ontology/commands/index.ts +0 -4
- package/src/domains/ontology/commands/list.test.ts +0 -84
- package/src/domains/ontology/commands/list.ts +0 -11
- package/src/domains/ontology/commands/show.test.ts +0 -179
- package/src/domains/ontology/commands/show.ts +0 -14
- package/src/domains/ontology/formatters/index.ts +0 -5
- package/src/domains/ontology/formatters/list.ts +0 -64
- package/src/domains/ontology/formatters/show.ts +0 -396
- package/src/domains/ontology/helpers/buildClassTree.ts +0 -89
- package/src/domains/ontology/helpers/completeClassNames.ts +0 -43
- package/src/domains/ontology/helpers/expandOntologyIris.ts +0 -79
- package/src/domains/ontology/helpers/findNamespace.ts +0 -23
- package/src/domains/ontology/helpers/index.ts +0 -21
- package/src/domains/ontology/helpers/queryClasses.ts +0 -66
- package/src/domains/ontology/helpers/queryProperties.ts +0 -90
- package/src/domains/ontology/helpers/queryTboxFacts.ts +0 -160
- package/src/domains/ontology/helpers/resolvePrefix.ts +0 -45
- package/src/domains/ontology/index.ts +0 -26
- package/src/domains/ontology/mcp/index.ts +0 -2
- package/src/domains/ontology/mcp/specs.ts +0 -16
- package/src/domains/ontology/operations/index.ts +0 -5
- package/src/domains/ontology/operations/listOntologies.test.ts +0 -122
- package/src/domains/ontology/operations/listOntologies.ts +0 -197
- package/src/domains/ontology/operations/showOntology.test.ts +0 -184
- package/src/domains/ontology/operations/showOntology.ts +0 -323
- package/src/domains/ontology/operations/showOntologyRaw.test.ts +0 -41
- package/src/domains/ontology/operations/showOntologyRaw.ts +0 -50
- package/src/domains/ontology/stories.test.ts +0 -36
- package/src/domains/ontology/stories.ts +0 -153
- package/src/domains/refs/commands/updateRefs.ts +0 -52
- package/src/domains/refs/formatters/updateRefs.ts +0 -27
- package/src/domains/refs/index.ts +0 -27
- package/src/domains/refs/operations/gitOps.test.ts +0 -155
- package/src/domains/refs/operations/gitOps.ts +0 -92
- package/src/domains/refs/operations/index.ts +0 -10
- package/src/domains/refs/operations/parseRef.test.ts +0 -157
- package/src/domains/refs/operations/parseRef.ts +0 -114
- package/src/domains/refs/operations/paths.test.ts +0 -98
- package/src/domains/refs/operations/paths.ts +0 -91
- package/src/domains/refs/operations/readGlobalRefs.test.ts +0 -63
- package/src/domains/refs/operations/readGlobalRefs.ts +0 -37
- package/src/domains/refs/operations/updateRefs.test.ts +0 -167
- package/src/domains/refs/operations/updateRefs.ts +0 -180
- package/src/domains/setup/commands/all.ts +0 -58
- package/src/domains/setup/commands/completions.ts +0 -85
- package/src/domains/setup/commands/entrypoints.test.ts +0 -170
- package/src/domains/setup/commands/index.ts +0 -7
- package/src/domains/setup/commands/lsp.ts +0 -49
- package/src/domains/setup/commands/mcp.ts +0 -119
- package/src/domains/setup/commands/setup.ts +0 -70
- package/src/domains/setup/commands/skills.test.ts +0 -68
- package/src/domains/setup/commands/skills.ts +0 -110
- package/src/domains/setup/formatters/index.ts +0 -2
- package/src/domains/setup/formatters/skills.test.ts +0 -103
- package/src/domains/setup/formatters/skills.ts +0 -112
- package/src/domains/setup/formatters/types.ts +0 -7
- package/src/domains/setup/helpers/completionScripts.test.ts +0 -58
- package/src/domains/setup/helpers/completionScripts.ts +0 -92
- package/src/domains/setup/helpers/constants.ts +0 -2
- package/src/domains/setup/helpers/detectShell.test.ts +0 -48
- package/src/domains/setup/helpers/detectShell.ts +0 -20
- package/src/domains/setup/helpers/index.ts +0 -12
- package/src/domains/setup/helpers/runSetupTask.test.ts +0 -277
- package/src/domains/setup/helpers/runSetupTask.ts +0 -221
- package/src/domains/setup/index.ts +0 -37
- package/src/domains/setup/operations/index.ts +0 -6
- package/src/domains/setup/operations/setupAll.test.ts +0 -48
- package/src/domains/setup/operations/setupAll.ts +0 -41
- package/src/domains/setup/operations/setupCompletions.test.ts +0 -94
- package/src/domains/setup/operations/setupCompletions.ts +0 -54
- package/src/domains/setup/operations/setupLsp.test.ts +0 -30
- package/src/domains/setup/operations/setupLsp.ts +0 -22
- package/src/domains/setup/operations/setupMcp.test.ts +0 -120
- package/src/domains/setup/operations/setupMcp.ts +0 -108
- package/src/domains/setup/operations/setupSkills.test.ts +0 -191
- package/src/domains/setup/operations/setupSkills.ts +0 -160
- package/src/domains/setup/types.ts +0 -18
- package/src/domains/shared/ToolSpec.ts +0 -49
- package/src/domains/shared/bootStore.bareCore.test.ts +0 -63
- package/src/domains/shared/bootStore.test.ts +0 -82
- package/src/domains/shared/bootStore.ts +0 -171
- package/src/domains/shared/buildQuery.ts +0 -18
- package/src/domains/shared/compactUri.test.ts +0 -32
- package/src/domains/shared/compactUri.ts +0 -21
- package/src/domains/shared/context.ts +0 -16
- package/src/domains/shared/contracts.ts +0 -164
- package/src/domains/shared/createInteractivePromptSession.test.ts +0 -439
- package/src/domains/shared/createInteractivePromptSession.ts +0 -236
- package/src/domains/shared/emptyErrorRecovery.test.ts +0 -106
- package/src/domains/shared/extractLocalName.test.ts +0 -21
- package/src/domains/shared/extractLocalName.ts +0 -14
- package/src/domains/shared/filters/buildChannelFilter.test.ts +0 -52
- package/src/domains/shared/filters/buildChannelFilter.ts +0 -41
- package/src/domains/shared/filters/buildFilterConfig.ts +0 -15
- package/src/domains/shared/filters/buildFilters.test.ts +0 -33
- package/src/domains/shared/filters/buildFilters.ts +0 -30
- package/src/domains/shared/filters/buildTierFilter.test.ts +0 -78
- package/src/domains/shared/filters/buildTierFilter.ts +0 -69
- package/src/domains/shared/filters/describeFilters.ts +0 -14
- package/src/domains/shared/filters/index.ts +0 -10
- package/src/domains/shared/formatters.ts +0 -103
- package/src/domains/shared/listTiers.ts +0 -40
- package/src/domains/shared/loaders/bundledLoader.test.ts +0 -248
- package/src/domains/shared/loaders/bundledLoader.ts +0 -254
- package/src/domains/shared/loaders/gitLoader.ts +0 -30
- package/src/domains/shared/loaders/index.ts +0 -9
- package/src/domains/shared/loaders/localLoader.ts +0 -71
- package/src/domains/shared/loaders/readPackageDir.test.ts +0 -58
- package/src/domains/shared/loaders/readPackageDir.ts +0 -185
- package/src/domains/shared/loaders/storyAssetsPlugin.test.ts +0 -84
- package/src/domains/shared/loaders/storyAssetsPlugin.ts +0 -46
- package/src/domains/shared/lookupMany.test.ts +0 -135
- package/src/domains/shared/lookupMany.ts +0 -101
- package/src/domains/shared/mergeAndParseRefs.test.ts +0 -89
- package/src/domains/shared/mergeAndParseRefs.ts +0 -44
- package/src/domains/shared/namespaces.ts +0 -26
- package/src/domains/shared/packages.ts +0 -20
- package/src/domains/shared/parseSampleCount.test.ts +0 -47
- package/src/domains/shared/parseSampleCount.ts +0 -45
- package/src/domains/shared/pickRandom.ts +0 -22
- package/src/domains/shared/prefixes.test.ts +0 -211
- package/src/domains/shared/prefixes.ts +0 -204
- package/src/domains/shared/renderers.ts +0 -410
- package/src/domains/shared/resolveConfiguredGraphs.test.ts +0 -27
- package/src/domains/shared/resolveConfiguredGraphs.ts +0 -41
- package/src/domains/shared/resolveLookupExitCode.test.ts +0 -48
- package/src/domains/shared/resolveLookupExitCode.ts +0 -42
- package/src/domains/shared/runtime.ts +0 -61
- package/src/domains/shared/sampleFormatters.ts +0 -47
- package/src/domains/shared/semanticPackage.test.ts +0 -89
- package/src/domains/shared/semanticPackage.ts +0 -127
- package/src/domains/shared/stories/compileLookupCommand.test.ts +0 -145
- package/src/domains/shared/stories/compileLookupCommand.ts +0 -102
- package/src/domains/shared/stories/compileLookupTool.test.ts +0 -105
- package/src/domains/shared/stories/compileLookupTool.ts +0 -96
- package/src/domains/shared/stories/compileReadCommand.test.ts +0 -121
- package/src/domains/shared/stories/compileReadCommand.ts +0 -48
- package/src/domains/shared/stories/compileReadTool.test.ts +0 -64
- package/src/domains/shared/stories/compileReadTool.ts +0 -38
- package/src/domains/shared/stories/condense.test.ts +0 -18
- package/src/domains/shared/stories/condense.ts +0 -15
- package/src/domains/shared/stories/index.ts +0 -20
- package/src/domains/shared/stories/normalizeNames.test.ts +0 -20
- package/src/domains/shared/stories/normalizeNames.ts +0 -22
- package/src/domains/shared/stories/pack/applyPackFilters.test.ts +0 -151
- package/src/domains/shared/stories/pack/applyPackFilters.ts +0 -111
- package/src/domains/shared/stories/pack/applyPackSearch.test.ts +0 -57
- package/src/domains/shared/stories/pack/applyPackSearch.ts +0 -41
- package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +0 -81
- package/src/domains/shared/stories/pack/buildLookupQuery.ts +0 -154
- package/src/domains/shared/stories/pack/bundled/index.ts +0 -23
- package/src/domains/shared/stories/pack/bundled/standardPack.ts +0 -164
- package/src/domains/shared/stories/pack/bundled/tierPack.ts +0 -50
- package/src/domains/shared/stories/pack/collectPackStories.test.ts +0 -406
- package/src/domains/shared/stories/pack/collectPackStories.ts +0 -158
- package/src/domains/shared/stories/pack/compilePackCommands.ts +0 -50
- package/src/domains/shared/stories/pack/compilePackStories.test.ts +0 -751
- package/src/domains/shared/stories/pack/compilePackStories.ts +0 -724
- package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +0 -55
- package/src/domains/shared/stories/pack/index.ts +0 -42
- package/src/domains/shared/stories/pack/reservedVerbs.test.ts +0 -213
- package/src/domains/shared/stories/pack/reservedVerbs.ts +0 -170
- package/src/domains/shared/stories/pack/runSelectQuery.ts +0 -31
- package/src/domains/shared/stories/pack/standardParity.test.ts +0 -381
- package/src/domains/shared/stories/pack/types.ts +0 -224
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +0 -742
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +0 -859
- package/src/domains/shared/stories/projectCliParameters.test.ts +0 -59
- package/src/domains/shared/stories/projectCliParameters.ts +0 -57
- package/src/domains/shared/stories/projectToolParams.test.ts +0 -50
- package/src/domains/shared/stories/projectToolParams.ts +0 -32
- package/src/domains/shared/stories/requirePragmaContext.test.ts +0 -23
- package/src/domains/shared/stories/requirePragmaContext.ts +0 -23
- package/src/domains/shared/stories/resolveLookupDetailed.test.ts +0 -57
- package/src/domains/shared/stories/resolveLookupDetailed.ts +0 -27
- package/src/domains/shared/stories/types.ts +0 -179
- package/src/domains/shared/suggestions/detectCrossDomain.test.ts +0 -43
- package/src/domains/shared/suggestions/detectCrossDomain.ts +0 -116
- package/src/domains/shared/suggestions/expandGlob.test.ts +0 -92
- package/src/domains/shared/suggestions/expandGlob.ts +0 -52
- package/src/domains/shared/suggestions/expandLookupQueries.ts +0 -57
- package/src/domains/shared/suggestions/index.ts +0 -7
- package/src/domains/shared/suggestions/listDomainNames.ts +0 -61
- package/src/domains/shared/suggestions/suggestNames.test.ts +0 -70
- package/src/domains/shared/suggestions/suggestNames.ts +0 -130
- package/src/domains/shared/types/block.ts +0 -107
- package/src/domains/shared/types/common.ts +0 -33
- package/src/domains/shared/types/graph.ts +0 -17
- package/src/domains/shared/types/index.ts +0 -46
- package/src/domains/shared/types/modifier.ts +0 -22
- package/src/domains/shared/types/ontology.ts +0 -145
- package/src/domains/shared/types/runtime.ts +0 -24
- package/src/domains/shared/types/sample.ts +0 -17
- package/src/domains/shared/types/standard.ts +0 -21
- package/src/domains/shared/types/tier.ts +0 -15
- package/src/domains/shared/types/token.ts +0 -30
- package/src/domains/skill/commands/index.ts +0 -4
- package/src/domains/skill/commands/list.test.ts +0 -115
- package/src/domains/skill/commands/list.ts +0 -11
- package/src/domains/skill/commands/lookup.test.ts +0 -118
- package/src/domains/skill/commands/lookup.ts +0 -14
- package/src/domains/skill/formatters/index.ts +0 -3
- package/src/domains/skill/formatters/list.test.ts +0 -140
- package/src/domains/skill/formatters/list.ts +0 -119
- package/src/domains/skill/formatters/lookup.test.ts +0 -46
- package/src/domains/skill/formatters/lookup.ts +0 -57
- package/src/domains/skill/formatters/types.ts +0 -8
- package/src/domains/skill/helpers/index.ts +0 -6
- package/src/domains/skill/helpers/parseFrontmatter.test.ts +0 -122
- package/src/domains/skill/helpers/parseFrontmatter.ts +0 -112
- package/src/domains/skill/helpers/resolveSkillSources.ts +0 -70
- package/src/domains/skill/index.ts +0 -23
- package/src/domains/skill/mcp/index.ts +0 -2
- package/src/domains/skill/mcp/specs.ts +0 -19
- package/src/domains/skill/operations/discover.test.ts +0 -176
- package/src/domains/skill/operations/discover.ts +0 -59
- package/src/domains/skill/operations/index.ts +0 -5
- package/src/domains/skill/operations/list.test.ts +0 -76
- package/src/domains/skill/operations/list.ts +0 -47
- package/src/domains/skill/operations/lookup.test.ts +0 -91
- package/src/domains/skill/operations/lookup.ts +0 -70
- package/src/domains/skill/stories.test.ts +0 -43
- package/src/domains/skill/stories.ts +0 -103
- package/src/domains/skill/types.ts +0 -33
- package/src/domains/token/commands/add-config.test.ts +0 -68
- package/src/domains/token/commands/add-config.ts +0 -62
- package/src/domains/token/commands/index.ts +0 -6
- package/src/domains/token/commands/list.test.ts +0 -82
- package/src/domains/token/commands/list.ts +0 -54
- package/src/domains/token/commands/lookup.test.ts +0 -133
- package/src/domains/token/commands/lookup.ts +0 -107
- package/src/domains/token/commands/sample.ts +0 -54
- package/src/domains/token/featureFlag.ts +0 -17
- package/src/domains/token/formatters/index.ts +0 -8
- package/src/domains/token/formatters/list.test.ts +0 -37
- package/src/domains/token/formatters/list.ts +0 -24
- package/src/domains/token/formatters/lookup.test.ts +0 -61
- package/src/domains/token/formatters/lookup.ts +0 -107
- package/src/domains/token/formatters/sample.ts +0 -16
- package/src/domains/token/index.ts +0 -45
- package/src/domains/token/mcp/index.ts +0 -2
- package/src/domains/token/mcp/specs.ts +0 -207
- package/src/domains/token/operations/add-config.test.ts +0 -68
- package/src/domains/token/operations/add-config.ts +0 -61
- package/src/domains/token/operations/index.ts +0 -8
- package/src/domains/token/operations/list.test.ts +0 -50
- package/src/domains/token/operations/list.ts +0 -52
- package/src/domains/token/operations/lookup.test.ts +0 -42
- package/src/domains/token/operations/lookup.ts +0 -75
- package/src/domains/token/operations/sample.ts +0 -32
- package/src/domains/token/orchestration/index.ts +0 -3
- package/src/domains/token/orchestration/resolveTokenList.ts +0 -17
- package/src/domains/token/orchestration/resolveTokenLookup.ts +0 -33
- package/src/domains/token/orchestration/tokenEmptyError.test.ts +0 -33
- package/src/domains/token/orchestration/tokenEmptyError.ts +0 -20
- package/src/domains/token/tokenConfig.ts +0 -38
- package/src/domains/token/types.ts +0 -6
- package/src/domains/trace/commands/clear.ts +0 -71
- package/src/domains/trace/commands/index.ts +0 -5
- package/src/domains/trace/commands/resolveTraceLimit.test.ts +0 -31
- package/src/domains/trace/commands/sessions.ts +0 -32
- package/src/domains/trace/commands/show.ts +0 -171
- package/src/domains/trace/formatters/index.ts +0 -9
- package/src/domains/trace/formatters/sessions.ts +0 -80
- package/src/domains/trace/formatters/show.ts +0 -122
- package/src/domains/trace/index.ts +0 -17
- package/src/domains/trace/operations/index.ts +0 -8
- package/src/domains/trace/operations/listSessions.test.ts +0 -55
- package/src/domains/trace/operations/listSessions.ts +0 -52
- package/src/domains/trace/operations/readTraceLog.test.ts +0 -100
- package/src/domains/trace/operations/readTraceLog.ts +0 -104
- package/src/domains/trace/tracePlugin.test.ts +0 -171
- package/src/domains/trace/tracePlugin.ts +0 -159
- package/src/domains/trace/types.ts +0 -65
- package/src/embedWasm.ts +0 -42
- package/src/error/PragmaError.test.ts +0 -121
- package/src/error/PragmaError.ts +0 -177
- package/src/error/constants.ts +0 -12
- package/src/error/index.ts +0 -4
- package/src/error/types.ts +0 -55
- package/src/mcp/createMcpServer.test.ts +0 -41
- package/src/mcp/createMcpServer.ts +0 -53
- package/src/mcp/error/buildRecovery.test.ts +0 -37
- package/src/mcp/error/buildRecovery.ts +0 -17
- package/src/mcp/error/index.ts +0 -12
- package/src/mcp/error/serializeError.test.ts +0 -121
- package/src/mcp/error/serializeError.ts +0 -31
- package/src/mcp/error/serializeErrorPayload.test.ts +0 -38
- package/src/mcp/error/serializeErrorPayload.ts +0 -34
- package/src/mcp/error/types.ts +0 -59
- package/src/mcp/index.ts +0 -15
- package/src/mcp/registerResources.test.ts +0 -566
- package/src/mcp/registerResources.ts +0 -9
- package/src/mcp/resources/buildGraphIndex.ts +0 -167
- package/src/mcp/resources/buildResourceList.test.ts +0 -97
- package/src/mcp/resources/buildResourceList.ts +0 -176
- package/src/mcp/resources/classifyEntity.test.ts +0 -40
- package/src/mcp/resources/classifyEntity.ts +0 -27
- package/src/mcp/resources/constants.ts +0 -105
- package/src/mcp/resources/displayPredicates.ts +0 -62
- package/src/mcp/resources/pickFirstValue.test.ts +0 -29
- package/src/mcp/resources/pickFirstValue.ts +0 -26
- package/src/mcp/resources/pickPrimaryType.test.ts +0 -41
- package/src/mcp/resources/pickPrimaryType.ts +0 -26
- package/src/mcp/resources/rankUriCompletions.test.ts +0 -52
- package/src/mcp/resources/rankUriCompletions.ts +0 -64
- package/src/mcp/resources/readEntity.ts +0 -169
- package/src/mcp/resources/registerResources.ts +0 -126
- package/src/mcp/resources/types.ts +0 -128
- package/src/mcp/runMcpServer.test.ts +0 -66
- package/src/mcp/runMcpServer.ts +0 -24
- package/src/mcp/tools/index.ts +0 -74
- package/src/mcp/tools/registerFromSpec.ts +0 -97
- package/src/mcp/tools/registerTools.test.ts +0 -1277
- package/src/mcp/types.ts +0 -66
- package/src/mcp/utils/estimateTokens.test.ts +0 -14
- package/src/mcp/utils/estimateTokens.ts +0 -9
- package/src/mcp/utils/index.ts +0 -11
- package/src/mcp/utils/wrapTool.test.ts +0 -109
- package/src/mcp/utils/wrapTool.ts +0 -81
- package/src/package-manager/constants.ts +0 -29
- package/src/package-manager/detectInstallSource.test.ts +0 -23
- package/src/package-manager/detectInstallSource.ts +0 -111
- package/src/package-manager/detectLocalInstall.test.ts +0 -16
- package/src/package-manager/detectLocalInstall.ts +0 -43
- package/src/package-manager/detectPackageManager.test.ts +0 -81
- package/src/package-manager/detectPackageManager.ts +0 -30
- package/src/package-manager/index.ts +0 -6
- package/src/package-manager/types.ts +0 -10
- package/src/pipeline/collectCommands.test.ts +0 -187
- package/src/pipeline/collectCommands.ts +0 -75
- package/src/pipeline/constants.ts +0 -14
- package/src/pipeline/createProgram.test.ts +0 -116
- package/src/pipeline/createProgram.ts +0 -89
- package/src/pipeline/firstRun.test.ts +0 -80
- package/src/pipeline/firstRun.ts +0 -99
- package/src/pipeline/formatTerminal.test.ts +0 -43
- package/src/pipeline/formatTerminal.ts +0 -53
- package/src/pipeline/index.ts +0 -22
- package/src/pipeline/mapExitCode.test.ts +0 -41
- package/src/pipeline/mapExitCode.ts +0 -12
- package/src/pipeline/parseGlobalFlags.test.ts +0 -193
- package/src/pipeline/parseGlobalFlags.ts +0 -135
- package/src/pipeline/renderError.test.ts +0 -151
- package/src/pipeline/renderError.ts +0 -129
- package/src/pipeline/resolveCommandKind.test.ts +0 -80
- package/src/pipeline/resolveCommandKind.ts +0 -82
- package/src/pipeline/rootHelp.test.ts +0 -87
- package/src/pipeline/rootHelp.ts +0 -265
- package/src/pipeline/runCli.orchestration.test.ts +0 -435
- package/src/pipeline/runCli.test.ts +0 -83
- package/src/pipeline/runCli.ts +0 -411
- package/src/pipeline/types.ts +0 -17
- package/src/testing/cli.ts +0 -71
- package/src/testing/createTestMcpClient.ts +0 -68
- package/src/testing/dsFixtures.ts +0 -523
- package/src/testing/fixtures/canonical-config.json +0 -4
- package/src/testing/fixtures/canonical.ttl +0 -437
- package/src/testing/fixtures/filtered-config.json +0 -4
- package/src/testing/fixtures.ts +0 -34
- package/src/testing/graphqlFixtures.ts +0 -72
- package/src/testing/helpers/assertParity.ts +0 -28
- package/src/testing/helpers/createTestMcpClient.ts +0 -40
- package/src/testing/helpers/createTestRuntime.ts +0 -67
- package/src/testing/index.ts +0 -22
- package/src/testing/integration/__snapshots__/executor-golden.test.ts.snap +0 -1207
- package/src/testing/integration/agent-session.test.ts +0 -148
- package/src/testing/integration/boot.test.ts +0 -105
- package/src/testing/integration/cli-user-stories.test.ts +0 -261
- package/src/testing/integration/cross-binary-byte-equality.test.ts +0 -129
- package/src/testing/integration/edge-cases.test.ts +0 -275
- package/src/testing/integration/executor-execution.test.ts +0 -103
- package/src/testing/integration/executor-golden.test.ts +0 -145
- package/src/testing/integration/mcp-surface.test.ts +0 -605
- package/src/testing/integration/parity.test.ts +0 -596
- package/src/testing/regression/0001-skill-discovery-granularity.test.ts +0 -71
- package/src/testing/standardParityFixtures.ts +0 -35
- package/src/testing/store.ts +0 -39
- package/src/testing/storyFixtures.ts +0 -63
- package/src/testing/types.ts +0 -20
- package/src/tui/components/BulletList/BulletList.tsx +0 -46
- package/src/tui/components/BulletList/index.ts +0 -2
- package/src/tui/components/BulletList/types.ts +0 -6
- package/src/tui/components/Card/Card.tsx +0 -73
- package/src/tui/components/Card/index.ts +0 -1
- package/src/tui/components/Card/types.ts +0 -12
- package/src/tui/components/CodeBlock/CodeBlock.tsx +0 -37
- package/src/tui/components/CodeBlock/index.ts +0 -2
- package/src/tui/components/CodeBlock/types.ts +0 -6
- package/src/tui/components/DataRow/DataRow.tsx +0 -80
- package/src/tui/components/DataRow/index.ts +0 -2
- package/src/tui/components/DataRow/types.ts +0 -14
- package/src/tui/components/FieldRow/FieldRow.tsx +0 -24
- package/src/tui/components/FieldRow/index.ts +0 -2
- package/src/tui/components/FieldRow/types.ts +0 -10
- package/src/tui/components/HeaderRow/HeaderRow.tsx +0 -32
- package/src/tui/components/HeaderRow/index.ts +0 -2
- package/src/tui/components/HeaderRow/types.ts +0 -8
- package/src/tui/components/MarkdownText/MarkdownText.tsx +0 -19
- package/src/tui/components/MarkdownText/index.ts +0 -2
- package/src/tui/components/MarkdownText/types.ts +0 -4
- package/src/tui/components/MiniTable/MiniTable.tsx +0 -82
- package/src/tui/components/MiniTable/index.ts +0 -2
- package/src/tui/components/MiniTable/types.ts +0 -6
- package/src/tui/components/SectionRenderer/SectionRenderer.tsx +0 -91
- package/src/tui/components/SectionRenderer/index.ts +0 -2
- package/src/tui/components/SectionRenderer/types.ts +0 -15
- package/src/tui/components/TreeView/TreeView.tsx +0 -84
- package/src/tui/components/TreeView/index.ts +0 -2
- package/src/tui/components/TreeView/types.ts +0 -6
- package/src/tui/components/index.ts +0 -19
- package/src/tui/constants.ts +0 -39
- package/src/tui/createListView.ts +0 -23
- package/src/tui/createLookupView.ts +0 -26
- package/src/tui/helpers/computeWidths.ts +0 -53
- package/src/tui/helpers/fitColumns.ts +0 -33
- package/src/tui/helpers/formatMarkdown.ts +0 -19
- package/src/tui/helpers/getTerminalSize.ts +0 -16
- package/src/tui/helpers/index.ts +0 -6
- package/src/tui/helpers/syntaxColor.ts +0 -67
- package/src/tui/helpers/truncateText.ts +0 -12
- package/src/tui/hooks/index.ts +0 -3
- package/src/tui/hooks/types.ts +0 -7
- package/src/tui/hooks/useAutoExit.ts +0 -17
- package/src/tui/hooks/useTerminalSize.ts +0 -19
- package/src/tui/index.ts +0 -15
- package/src/tui/renderInk.tsx +0 -18
- package/src/tui/types.ts +0 -12
- package/src/tui/views/ListView/ListView.tsx +0 -104
- package/src/tui/views/ListView/index.ts +0 -2
- package/src/tui/views/ListView/types.ts +0 -14
- package/src/tui/views/LookupView/LookupView.tsx +0 -244
- package/src/tui/views/LookupView/index.ts +0 -2
- package/src/tui/views/LookupView/types.ts +0 -16
- package/src/tui/views/index.ts +0 -4
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global-flag pre-parsing, ahead of Commander.
|
|
3
|
+
*
|
|
4
|
+
* `--format`, `--verbose`, and `--detail` may appear anywhere on the line, so
|
|
5
|
+
* they are scanned and stripped before Commander sees argv — otherwise
|
|
6
|
+
* `enablePositionalOptions()` scoping would reject a flag placed after a verb.
|
|
7
|
+
* Ported from the v1 `parseGlobalFlags`, with two v2 changes: a new `--detail`
|
|
8
|
+
* flag and the `--format text` value renamed to `plain` (the kernel's
|
|
9
|
+
* {@link OutputFormat}). The dedicated `--llm` flag was folded into
|
|
10
|
+
* `--format llm`, leaving auto-detection as the sole implicit trigger. Both the
|
|
11
|
+
* space (`--format json`) and equals (`--format=json`) forms are recognized.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { DETAIL_LEVELS, type DetailLevel } from "../../../constants.js";
|
|
15
|
+
import type { GlobalFlags } from "../../runtime/types.js";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Read a `--flag`'s value, accepting both `--flag value` and `--flag=value`.
|
|
19
|
+
*
|
|
20
|
+
* @param argv - Raw argv (already sliced to the user's arguments).
|
|
21
|
+
* @param flag - The flag including leading dashes (e.g. `--format`).
|
|
22
|
+
* @returns The value, or `undefined` when the flag is absent.
|
|
23
|
+
*/
|
|
24
|
+
function readFlagValue(
|
|
25
|
+
argv: readonly string[],
|
|
26
|
+
flag: string,
|
|
27
|
+
): string | undefined {
|
|
28
|
+
const equalsPrefix = `${flag}=`;
|
|
29
|
+
const equalsArg = argv.find((arg) => arg.startsWith(equalsPrefix));
|
|
30
|
+
if (equalsArg !== undefined) {
|
|
31
|
+
return equalsArg.slice(equalsPrefix.length);
|
|
32
|
+
}
|
|
33
|
+
const spaceIndex = argv.indexOf(flag);
|
|
34
|
+
return spaceIndex === -1 ? undefined : argv[spaceIndex + 1];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Read the raw `--format` value exactly as typed, for validation.
|
|
39
|
+
*
|
|
40
|
+
* Unlike {@link parseGlobalFlags} this does not normalize — the caller decides
|
|
41
|
+
* how to reject an unknown value. A bare `--format` with no following value is
|
|
42
|
+
* reported as `""` (not `undefined`) so it is rejected rather than silently
|
|
43
|
+
* falling through.
|
|
44
|
+
*
|
|
45
|
+
* @param argv - Raw argv (the user's arguments).
|
|
46
|
+
* @returns The raw value, `""` for a valueless `--format`, or `undefined`.
|
|
47
|
+
*/
|
|
48
|
+
export function readRawFormat(argv: readonly string[]): string | undefined {
|
|
49
|
+
const equalsArg = argv.find((arg) => arg.startsWith("--format="));
|
|
50
|
+
if (equalsArg !== undefined) return equalsArg.slice("--format=".length);
|
|
51
|
+
|
|
52
|
+
const spaceIndex = argv.indexOf("--format");
|
|
53
|
+
if (spaceIndex === -1) return undefined;
|
|
54
|
+
|
|
55
|
+
const value = argv[spaceIndex + 1];
|
|
56
|
+
return value !== undefined && !value.startsWith("-") ? value : "";
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Environment probe for the auto-LLM default. Injectable so detection can be
|
|
61
|
+
* unit-tested without touching the real process.
|
|
62
|
+
*/
|
|
63
|
+
export interface OutputEnvironment {
|
|
64
|
+
/** Whether stdout is attached to an interactive terminal. */
|
|
65
|
+
readonly isTty: boolean;
|
|
66
|
+
/** Whether the auto-LLM default is explicitly disabled. */
|
|
67
|
+
readonly noAutoLlm: boolean;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Read the real stdout/env output environment. @note Impure — reads process. */
|
|
71
|
+
function readOutputEnvironment(): OutputEnvironment {
|
|
72
|
+
return {
|
|
73
|
+
isTty: process.stdout.isTTY === true,
|
|
74
|
+
noAutoLlm: Boolean(process.env.PRAGMA_NO_AUTO_LLM),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Narrow a raw `--detail` value to a recognized level, else `undefined`. */
|
|
79
|
+
function readDetail(argv: readonly string[]): DetailLevel | undefined {
|
|
80
|
+
const raw = readFlagValue(argv, "--detail");
|
|
81
|
+
if (raw !== undefined && (DETAIL_LEVELS as readonly string[]).includes(raw)) {
|
|
82
|
+
return raw as DetailLevel;
|
|
83
|
+
}
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Extract the global flags from raw argv (the user's arguments, argv[2:]).
|
|
89
|
+
*
|
|
90
|
+
* Auto-LLM: with no explicit `--format` and a non-interactive stdout (piped or
|
|
91
|
+
* redirected — the shape an agent captures), `llm` defaults to true so agents
|
|
92
|
+
* get condensed Markdown without a flag. Any explicit `--format` overrides it —
|
|
93
|
+
* `--format plain` forces human output down a pipe, `--format llm` forces the
|
|
94
|
+
* condensed form even on a TTY — as does `PRAGMA_NO_AUTO_LLM`.
|
|
95
|
+
*
|
|
96
|
+
* @param argv - The user's arguments (no `node`/script prefix).
|
|
97
|
+
* @param env - Output environment probe (defaults to the real process).
|
|
98
|
+
* @returns The parsed global flags.
|
|
99
|
+
* @note Impure by default — reads process.stdout/env unless `env` is injected.
|
|
100
|
+
*/
|
|
101
|
+
export function parseGlobalFlags(
|
|
102
|
+
argv: readonly string[],
|
|
103
|
+
env: OutputEnvironment = readOutputEnvironment(),
|
|
104
|
+
): GlobalFlags {
|
|
105
|
+
const rawFormat = readFlagValue(argv, "--format");
|
|
106
|
+
const format =
|
|
107
|
+
rawFormat === "json" ? "json" : rawFormat === "llm" ? "llm" : "plain";
|
|
108
|
+
const formatRequested = rawFormat !== undefined;
|
|
109
|
+
const autoLlm = !formatRequested && !env.isTty && !env.noAutoLlm;
|
|
110
|
+
const detail = readDetail(argv);
|
|
111
|
+
return {
|
|
112
|
+
llm: format === "llm" || autoLlm,
|
|
113
|
+
autoLlm,
|
|
114
|
+
format,
|
|
115
|
+
verbose: argv.includes("--verbose"),
|
|
116
|
+
...(detail !== undefined ? { detail } : {}),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Return a copy of argv with every global flag (and its value) removed.
|
|
122
|
+
*
|
|
123
|
+
* Since {@link parseGlobalFlags} pre-parses these, they are dropped so they do
|
|
124
|
+
* not collide with Commander's positional scoping, letting the user place them
|
|
125
|
+
* anywhere on the line.
|
|
126
|
+
*
|
|
127
|
+
* @param argv - The user's arguments.
|
|
128
|
+
* @returns A new array with global flags stripped.
|
|
129
|
+
*/
|
|
130
|
+
export function stripGlobalFlags(argv: readonly string[]): string[] {
|
|
131
|
+
const result: string[] = [];
|
|
132
|
+
for (let i = 0; i < argv.length; i++) {
|
|
133
|
+
const arg = argv[i];
|
|
134
|
+
if (arg === "--verbose") continue;
|
|
135
|
+
if (
|
|
136
|
+
arg?.startsWith("--format=") ||
|
|
137
|
+
arg?.startsWith("--verbose=") ||
|
|
138
|
+
arg?.startsWith("--detail=")
|
|
139
|
+
) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (arg === "--format" || arg === "--detail") {
|
|
143
|
+
i += 1; // skip the space-form value too
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
result.push(arg as string);
|
|
147
|
+
}
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared help-rendering primitives — the ONE visual system every help page
|
|
3
|
+
* composes from.
|
|
4
|
+
*
|
|
5
|
+
* Root help (`rootHelp.ts`), noun help, and verb help (`verbHelp.ts`) all build
|
|
6
|
+
* their pages out of these helpers so the front door and the leaf pages read as
|
|
7
|
+
* the same CLI: a dim `Usage:` label, bold section headers, a cyan-term /
|
|
8
|
+
* dim-description two-column body, and a dim footer that points at the next help
|
|
9
|
+
* level. chalk auto-disables color off a TTY, so goldens, piped output, and MCP
|
|
10
|
+
* transports all capture plain text — only an interactive terminal gets color.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import chalk from "chalk";
|
|
14
|
+
|
|
15
|
+
/** Two-space indent for every list body row. */
|
|
16
|
+
const INDENT = " ";
|
|
17
|
+
/** Two-space gap between a term column and its description. */
|
|
18
|
+
const GAP = " ";
|
|
19
|
+
|
|
20
|
+
/** A bold section header (`Flags`, `Verbs`, `Explore the design system`). */
|
|
21
|
+
export function helpHeading(text: string): string {
|
|
22
|
+
return chalk.bold(text);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Dim secondary text — an example note, or the footer line. */
|
|
26
|
+
export function helpDim(text: string): string {
|
|
27
|
+
return chalk.dim(text);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** A cyan term — a command, verb, flag, or example, as shown in the body. */
|
|
31
|
+
export function helpTerm(text: string): string {
|
|
32
|
+
return chalk.cyan(text);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** The `Usage:` line: a dim label followed by the given command shape. */
|
|
36
|
+
export function helpUsage(body: string): string {
|
|
37
|
+
return `${chalk.dim("Usage:")} ${body}`;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Render aligned two-column rows: a cyan term padded to a common width, then its
|
|
42
|
+
* dim description. Pass an explicit `width` to align across several lists (the
|
|
43
|
+
* root's grouped sections share one column); omit it to size to these rows
|
|
44
|
+
* alone.
|
|
45
|
+
*
|
|
46
|
+
* @param rows - `[term, description]` pairs.
|
|
47
|
+
* @param width - Optional shared column width; defaults to the widest term.
|
|
48
|
+
* @returns One formatted line per row.
|
|
49
|
+
*/
|
|
50
|
+
export function helpColumns(
|
|
51
|
+
rows: readonly (readonly [term: string, description: string])[],
|
|
52
|
+
width?: number,
|
|
53
|
+
): string[] {
|
|
54
|
+
const column = width ?? Math.max(0, ...rows.map(([term]) => term.length));
|
|
55
|
+
return rows.map(([term, description]) =>
|
|
56
|
+
`${INDENT}${chalk.cyan(term.padEnd(column))}${GAP}${chalk.dim(description)}`.trimEnd(),
|
|
57
|
+
);
|
|
58
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI projector barrel — the Commander program, dispatcher, help, and
|
|
3
|
+
* exit-code model. The bin composes these; tests build programs from arbitrary
|
|
4
|
+
* modules via the `projectCli` helper.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export type { BuildProgramOptions } from "./buildProgram.js";
|
|
8
|
+
export { buildProgram } from "./buildProgram.js";
|
|
9
|
+
export type { DispatchOutcome, MutationFlags } from "./dispatch.js";
|
|
10
|
+
export { dispatch, executeVerb, extractParams } from "./dispatch.js";
|
|
11
|
+
export { EXIT, mapExitCode } from "./exitCodes.js";
|
|
12
|
+
export type { OutputEnvironment } from "./globalFlags.js";
|
|
13
|
+
export {
|
|
14
|
+
parseGlobalFlags,
|
|
15
|
+
readRawFormat,
|
|
16
|
+
stripGlobalFlags,
|
|
17
|
+
} from "./globalFlags.js";
|
|
18
|
+
export { formatRootHelp } from "./rootHelp.js";
|
|
19
|
+
export { nounVerbMap, resolveUnknownCommand } from "./suggest.js";
|
|
20
|
+
export { suggestNames } from "./suggestNames.js";
|
|
21
|
+
export { formatNounHelp, formatVerbHelp } from "./verbHelp.js";
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The §0 spine: a mutating verb reads `runtime.interaction` and sets
|
|
3
|
+
* `runtime.exec`, and the dispatcher spreads `exec` into the node interpreter
|
|
4
|
+
* on the REAL-run branch only — so an interactive Prompt effect is resolved by
|
|
5
|
+
* the injected handler (not the bare `NO_PROMPT_HANDLER` throw), while
|
|
6
|
+
* `--dry-run` stays handler-free and mocks the prompt.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { $, gen, prompt } from "@canonical/task";
|
|
10
|
+
import { describe, expect, it, vi } from "vitest";
|
|
11
|
+
import { bootRuntime } from "../../runtime/boot.js";
|
|
12
|
+
import type { GlobalFlags, VerbSpec } from "../../spec/types.js";
|
|
13
|
+
import { executeVerb, type MutationFlags } from "./dispatch.js";
|
|
14
|
+
|
|
15
|
+
const FLAGS: GlobalFlags = {
|
|
16
|
+
llm: false,
|
|
17
|
+
autoLlm: false,
|
|
18
|
+
format: "plain",
|
|
19
|
+
verbose: false,
|
|
20
|
+
};
|
|
21
|
+
const noMutation: MutationFlags = { dryRun: false, undo: false, yes: false };
|
|
22
|
+
|
|
23
|
+
const json = (d: unknown) => JSON.stringify(d);
|
|
24
|
+
|
|
25
|
+
/** A mutating verb whose task prompts once and whose `run` wires `exec`. */
|
|
26
|
+
function seamVerb(onExec?: () => void): VerbSpec {
|
|
27
|
+
return {
|
|
28
|
+
path: ["fixture", "seam"],
|
|
29
|
+
summary: "A prompting mutation.",
|
|
30
|
+
params: [],
|
|
31
|
+
output: { formatters: { plain: json, llm: json, json } },
|
|
32
|
+
capability: {
|
|
33
|
+
needsStore: false,
|
|
34
|
+
mutates: true,
|
|
35
|
+
interactive: true,
|
|
36
|
+
mcp: { expose: false, reason: "test fixture" },
|
|
37
|
+
},
|
|
38
|
+
run: (_params, rt) => {
|
|
39
|
+
// The verb picks its strategy from the interaction context and records it
|
|
40
|
+
// as the injected prompt handler + optional teardown.
|
|
41
|
+
const answer = rt.interaction?.yes ? "confirmed" : "attended";
|
|
42
|
+
rt.exec = {
|
|
43
|
+
promptHandler: () => Promise.resolve(answer),
|
|
44
|
+
dispose: onExec,
|
|
45
|
+
};
|
|
46
|
+
return gen(function* () {
|
|
47
|
+
const value = yield* $(
|
|
48
|
+
prompt({ type: "text", name: "which", message: "Which?" }),
|
|
49
|
+
);
|
|
50
|
+
return { value };
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
describe("interaction/exec seam (PROTECTED)", () => {
|
|
57
|
+
it("resolves an interactive Prompt through the verb's injected handler", async () => {
|
|
58
|
+
const runtime = bootRuntime(FLAGS);
|
|
59
|
+
const outcome = await executeVerb(
|
|
60
|
+
seamVerb(),
|
|
61
|
+
{},
|
|
62
|
+
{ ...noMutation, yes: true },
|
|
63
|
+
runtime,
|
|
64
|
+
);
|
|
65
|
+
expect(outcome.exitCode).toBe(0);
|
|
66
|
+
expect(outcome.stdout).toContain("confirmed");
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it("passes the interaction context (yes flag) to the verb", async () => {
|
|
70
|
+
const runtime = bootRuntime(FLAGS);
|
|
71
|
+
const outcome = await executeVerb(seamVerb(), {}, noMutation, runtime);
|
|
72
|
+
expect(outcome.stdout).toContain("attended");
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("runs the verb's exec.dispose teardown after a real run", async () => {
|
|
76
|
+
const dispose = vi.fn();
|
|
77
|
+
const runtime = bootRuntime(FLAGS);
|
|
78
|
+
await executeVerb(
|
|
79
|
+
seamVerb(dispose),
|
|
80
|
+
{},
|
|
81
|
+
{ ...noMutation, yes: true },
|
|
82
|
+
runtime,
|
|
83
|
+
);
|
|
84
|
+
expect(dispose).toHaveBeenCalledTimes(1);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it("dry-run stays handler-free, mocks the prompt, and omits it from the plan", async () => {
|
|
88
|
+
const runtime = bootRuntime(FLAGS);
|
|
89
|
+
const outcome = await executeVerb(
|
|
90
|
+
seamVerb(),
|
|
91
|
+
{},
|
|
92
|
+
{ ...noMutation, dryRun: true },
|
|
93
|
+
runtime,
|
|
94
|
+
);
|
|
95
|
+
expect(outcome.exitCode).toBe(0);
|
|
96
|
+
// The only effect is the Prompt (mocked) — filtered from the plan.
|
|
97
|
+
expect(outcome.stdout).toContain("no effects");
|
|
98
|
+
});
|
|
99
|
+
});
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Curated root `--help` for `pragma`.
|
|
3
|
+
*
|
|
4
|
+
* The front door is hand-curated, not auto-generated: nouns are grouped into
|
|
5
|
+
* task-oriented sections with real one-line summaries, and each section is
|
|
6
|
+
* reconciled against the *live* nouns (from the registered verbs) so a noun
|
|
7
|
+
* that is not built yet is dropped and an uncatalogued one still surfaces under
|
|
8
|
+
* "Other" rather than vanishing. Ported from the v1 root help, retargeted at
|
|
9
|
+
* the grammar and the v2 noun set (no `llm`/`graphql`/`trace`/`tokens`).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { VerbSpec } from "../../spec/types.js";
|
|
13
|
+
import {
|
|
14
|
+
helpColumns,
|
|
15
|
+
helpDim,
|
|
16
|
+
helpHeading,
|
|
17
|
+
helpTerm,
|
|
18
|
+
helpUsage,
|
|
19
|
+
} from "./helpFormat.js";
|
|
20
|
+
|
|
21
|
+
interface NounSummary {
|
|
22
|
+
readonly noun: string;
|
|
23
|
+
readonly summary: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface HelpGroup {
|
|
27
|
+
readonly title: string;
|
|
28
|
+
readonly nouns: readonly NounSummary[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Task-oriented grouping with curated summaries. Order is intentional: what
|
|
33
|
+
* people reach for most (exploring, generating) comes first; agent tooling
|
|
34
|
+
* comes last.
|
|
35
|
+
*/
|
|
36
|
+
const HELP_GROUPS: readonly HelpGroup[] = [
|
|
37
|
+
{
|
|
38
|
+
title: "Explore the design system",
|
|
39
|
+
nouns: [
|
|
40
|
+
{
|
|
41
|
+
noun: "block",
|
|
42
|
+
summary: "Inspect components & patterns and their anatomy",
|
|
43
|
+
},
|
|
44
|
+
{ noun: "token", summary: "Look up design tokens and their values" },
|
|
45
|
+
{ noun: "modifier", summary: "Inspect modifiers and modifier families" },
|
|
46
|
+
{ noun: "standard", summary: "Browse code standards and categories" },
|
|
47
|
+
{
|
|
48
|
+
noun: "ontology",
|
|
49
|
+
summary: "Explore the loaded ontologies (classes, properties)",
|
|
50
|
+
},
|
|
51
|
+
{ noun: "tier", summary: "List the design-system tiers" },
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
title: "Generate code",
|
|
56
|
+
nouns: [
|
|
57
|
+
{ noun: "create", summary: "Scaffold components, packages, and apps" },
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
title: "Query & serve the graph",
|
|
62
|
+
nouns: [
|
|
63
|
+
{
|
|
64
|
+
noun: "graph",
|
|
65
|
+
summary: "Run SPARQL queries or inspect a URI directly",
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
title: "Set up & maintain",
|
|
71
|
+
nouns: [
|
|
72
|
+
{ noun: "doctor", summary: "Check environment health" },
|
|
73
|
+
{
|
|
74
|
+
noun: "setup",
|
|
75
|
+
summary: "Configure MCP, skills, completions, and the LSP",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
noun: "sources",
|
|
79
|
+
summary: "Build and refresh the local store from packages",
|
|
80
|
+
},
|
|
81
|
+
{ noun: "config", summary: "Read and write pragma configuration" },
|
|
82
|
+
{ noun: "info", summary: "Show version, config, and update status" },
|
|
83
|
+
{
|
|
84
|
+
noun: "upgrade",
|
|
85
|
+
summary: "Upgrade the pragma CLI to the latest version",
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
title: "For AI agents",
|
|
91
|
+
nouns: [
|
|
92
|
+
{
|
|
93
|
+
noun: "capabilities",
|
|
94
|
+
summary: "Discover conventions, tools, and the discovery sequence",
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
noun: "colophon",
|
|
98
|
+
summary: "Read how pragma and the active domain are made",
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
noun: "skill",
|
|
102
|
+
summary: "Browse agent skills from design-system packages",
|
|
103
|
+
},
|
|
104
|
+
{ noun: "prompt", summary: "Browse reusable prompt templates" },
|
|
105
|
+
{ noun: "mcp", summary: "Start the MCP server over stdio" },
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
|
|
110
|
+
/** All distinct, non-hidden top-level nouns present in the registered verbs. */
|
|
111
|
+
function nounsFrom(verbs: readonly VerbSpec[]): Set<string> {
|
|
112
|
+
const nouns = new Set<string>();
|
|
113
|
+
for (const verb of verbs) {
|
|
114
|
+
if (verb.hidden) continue;
|
|
115
|
+
nouns.add(verb.path[0]);
|
|
116
|
+
}
|
|
117
|
+
return nouns;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** The summary to show for an uncatalogued but live noun. */
|
|
121
|
+
function fallbackSummary(noun: string, verbs: readonly VerbSpec[]): string {
|
|
122
|
+
const first = verbs.find((v) => v.path[0] === noun && !v.hidden);
|
|
123
|
+
return first?.summary ?? `${noun} commands`;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Build the curated root help string.
|
|
128
|
+
*
|
|
129
|
+
* @param programName - The CLI binary name (`pragma`).
|
|
130
|
+
* @param description - The program description shown in the header.
|
|
131
|
+
* @param verbs - All registered verbs, used to derive the live noun set.
|
|
132
|
+
* @returns The formatted, colorized help text.
|
|
133
|
+
*/
|
|
134
|
+
export function formatRootHelp(
|
|
135
|
+
programName: string,
|
|
136
|
+
description: string,
|
|
137
|
+
verbs: readonly VerbSpec[],
|
|
138
|
+
): string {
|
|
139
|
+
const present = nounsFrom(verbs);
|
|
140
|
+
// `mcp` is served by the bin's special-case, not a projected verb, but is
|
|
141
|
+
// always available — surface it so the front door is complete.
|
|
142
|
+
present.add("mcp");
|
|
143
|
+
const catalogued = new Set(
|
|
144
|
+
HELP_GROUPS.flatMap((g) => g.nouns.map((n) => n.noun)),
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
const uncatalogued = [...present].filter((n) => !catalogued.has(n)).sort();
|
|
148
|
+
const groups: HelpGroup[] = [
|
|
149
|
+
...HELP_GROUPS.map((g) => ({
|
|
150
|
+
...g,
|
|
151
|
+
nouns: g.nouns.filter((n) => present.has(n.noun)),
|
|
152
|
+
})),
|
|
153
|
+
...(uncatalogued.length > 0
|
|
154
|
+
? [
|
|
155
|
+
{
|
|
156
|
+
title: "Other",
|
|
157
|
+
nouns: uncatalogued.map((noun) => ({
|
|
158
|
+
noun,
|
|
159
|
+
summary: fallbackSummary(noun, verbs),
|
|
160
|
+
})),
|
|
161
|
+
},
|
|
162
|
+
]
|
|
163
|
+
: []),
|
|
164
|
+
].filter((g) => g.nouns.length > 0);
|
|
165
|
+
|
|
166
|
+
// One column width across ALL groups so the noun column aligns section to
|
|
167
|
+
// section, not just within a section.
|
|
168
|
+
const nounWidth = Math.max(
|
|
169
|
+
...groups.flatMap((g) => g.nouns.map((n) => n.noun.length)),
|
|
170
|
+
0,
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
const lines: string[] = [
|
|
174
|
+
`${helpHeading(programName)} — ${description}`,
|
|
175
|
+
"",
|
|
176
|
+
helpUsage(
|
|
177
|
+
`${programName} ${helpTerm("<command>")} ${helpDim("[subcommand] [flags]")}`,
|
|
178
|
+
),
|
|
179
|
+
"",
|
|
180
|
+
];
|
|
181
|
+
|
|
182
|
+
for (const group of groups) {
|
|
183
|
+
lines.push(helpHeading(group.title));
|
|
184
|
+
lines.push(
|
|
185
|
+
...helpColumns(
|
|
186
|
+
group.nouns.map((n) => [n.noun, n.summary] as const),
|
|
187
|
+
nounWidth,
|
|
188
|
+
),
|
|
189
|
+
);
|
|
190
|
+
lines.push("");
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// The frozen global-flags block: these doc strings MUST stay byte-consistent
|
|
194
|
+
// with FIXED_SURFACE.globalFlags (emitSurface.ts) — restyle the LAYOUT only,
|
|
195
|
+
// never these strings.
|
|
196
|
+
lines.push(helpHeading("Global flags"));
|
|
197
|
+
const flags: [string, string][] = [
|
|
198
|
+
[
|
|
199
|
+
"--format <plain|llm|json>",
|
|
200
|
+
"Select output format (llm = condensed Markdown for agents)",
|
|
201
|
+
],
|
|
202
|
+
[
|
|
203
|
+
"--detail <level>",
|
|
204
|
+
"Progressive-disclosure level (summary, standard, detailed)",
|
|
205
|
+
],
|
|
206
|
+
["--verbose", "Diagnostic output on stderr"],
|
|
207
|
+
["--help", "Show help (works on any command)"],
|
|
208
|
+
["--version", "Show the CLI version"],
|
|
209
|
+
];
|
|
210
|
+
lines.push(...helpColumns(flags));
|
|
211
|
+
lines.push("");
|
|
212
|
+
|
|
213
|
+
lines.push(
|
|
214
|
+
helpDim(
|
|
215
|
+
`Run \`${programName} <command> --help\` for details, or \`${programName} capabilities\` to get oriented.`,
|
|
216
|
+
),
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
return lines.join("\n");
|
|
220
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { fixtureModule } from "../../../testing/fixtures/fixtureCapability.js";
|
|
3
|
+
import { nounVerbMap, resolveUnknownCommand } from "./suggest.js";
|
|
4
|
+
import { suggestNames } from "./suggestNames.js";
|
|
5
|
+
|
|
6
|
+
const verbs = [...fixtureModule.verbs];
|
|
7
|
+
|
|
8
|
+
describe("nounVerbMap", () => {
|
|
9
|
+
it("maps nouns to their non-hidden verb labels", () => {
|
|
10
|
+
const map = nounVerbMap(verbs);
|
|
11
|
+
expect(map.get("widget")).toEqual(["list", "make"]);
|
|
12
|
+
expect([...map.keys()]).toEqual(["widget"]);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
describe("resolveUnknownCommand", () => {
|
|
17
|
+
const map = nounVerbMap(verbs);
|
|
18
|
+
|
|
19
|
+
it("flags an unknown noun against the noun set", () => {
|
|
20
|
+
expect(resolveUnknownCommand(["widgt"], map)).toEqual({
|
|
21
|
+
token: "widgt",
|
|
22
|
+
candidates: ["widget"],
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("flags an unknown verb against its noun's verbs", () => {
|
|
27
|
+
expect(resolveUnknownCommand(["widget", "lst"], map)).toEqual({
|
|
28
|
+
token: "lst",
|
|
29
|
+
candidates: ["list", "make"],
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it("resolves a valid command to undefined", () => {
|
|
34
|
+
expect(resolveUnknownCommand(["widget", "list"], map)).toBeUndefined();
|
|
35
|
+
expect(resolveUnknownCommand([], map)).toBeUndefined();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
describe("suggestNames", () => {
|
|
40
|
+
it("ranks prefix matches ahead of edit-distance matches", () => {
|
|
41
|
+
expect(suggestNames("con", ["config", "connect", "block"])).toEqual([
|
|
42
|
+
"config",
|
|
43
|
+
"connect",
|
|
44
|
+
]);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("catches a single-character typo", () => {
|
|
48
|
+
expect(suggestNames("cofnig", ["config", "block"])).toEqual(["config"]);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("returns nothing for an empty query", () => {
|
|
52
|
+
expect(suggestNames("", ["config"])).toEqual([]);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turn an unknown command into an actionable "Did you mean?".
|
|
3
|
+
*
|
|
4
|
+
* When Commander rejects an unrecognized noun or verb, the bin resolves the
|
|
5
|
+
* offending token and the set of siblings it should have matched, then raises a
|
|
6
|
+
* `PragmaError.unknownVerb` (its suggestions ranked by `suggestNames`) rendered
|
|
7
|
+
* through the shared error renderers — so the plain path gets the same `Error:`
|
|
8
|
+
* prefix and "Did you mean?" list as every other error. The resolution is
|
|
9
|
+
* data-driven — a noun→verbs map built from the grammar — so no Commander
|
|
10
|
+
* internals leak into the suggester.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { VerbSpec } from "../../spec/types.js";
|
|
14
|
+
|
|
15
|
+
/** An unresolved token and the sibling names to rank it against. */
|
|
16
|
+
export interface UnknownCommand {
|
|
17
|
+
readonly token: string;
|
|
18
|
+
readonly candidates: readonly string[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Build the noun → verb-labels map from the registered verbs.
|
|
23
|
+
*
|
|
24
|
+
* Hidden verbs are excluded. A self-verb (path length 1, e.g. `["info"]`)
|
|
25
|
+
* contributes an entry with no sub-verbs.
|
|
26
|
+
*
|
|
27
|
+
* @param verbs - All registered verbs.
|
|
28
|
+
* @returns A map from noun to its verb labels (empty for self-verbs).
|
|
29
|
+
*/
|
|
30
|
+
export function nounVerbMap(verbs: readonly VerbSpec[]): Map<string, string[]> {
|
|
31
|
+
const map = new Map<string, string[]>();
|
|
32
|
+
for (const verb of verbs) {
|
|
33
|
+
if (verb.hidden) continue;
|
|
34
|
+
const [noun, sub] = verb.path;
|
|
35
|
+
const labels = map.get(noun) ?? [];
|
|
36
|
+
if (sub) labels.push(sub);
|
|
37
|
+
map.set(noun, labels);
|
|
38
|
+
}
|
|
39
|
+
return map;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Locate the first token that does not resolve against the known commands.
|
|
44
|
+
*
|
|
45
|
+
* @param positionals - The stripped positional args (no flags), in order.
|
|
46
|
+
* @param nouns - The noun → verb-labels map from {@link nounVerbMap}.
|
|
47
|
+
* @returns The unresolved token with its candidates, or `undefined` when the
|
|
48
|
+
* args resolve cleanly.
|
|
49
|
+
*/
|
|
50
|
+
export function resolveUnknownCommand(
|
|
51
|
+
positionals: readonly string[],
|
|
52
|
+
nouns: ReadonlyMap<string, readonly string[]>,
|
|
53
|
+
): UnknownCommand | undefined {
|
|
54
|
+
const [noun, verb] = positionals;
|
|
55
|
+
if (noun === undefined) return undefined;
|
|
56
|
+
|
|
57
|
+
if (!nouns.has(noun)) {
|
|
58
|
+
return { token: noun, candidates: [...nouns.keys()] };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const labels = nouns.get(noun) ?? [];
|
|
62
|
+
if (verb !== undefined && labels.length > 0 && !labels.includes(verb)) {
|
|
63
|
+
return { token: verb, candidates: labels };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|