@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,119 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { errorEnvelope, successEnvelope } from "../render/envelope.js";
|
|
3
|
+
import { PragmaError } from "./PragmaError.js";
|
|
4
|
+
import { cliRecovery } from "./recovery.js";
|
|
5
|
+
import { serializeError } from "./serialize.js";
|
|
6
|
+
|
|
7
|
+
describe("PragmaError factories", () => {
|
|
8
|
+
it("notFound carries entity, suggestions, and code", () => {
|
|
9
|
+
const error = PragmaError.notFound("block", "Buton", {
|
|
10
|
+
suggestions: ["Button"],
|
|
11
|
+
});
|
|
12
|
+
expect(error.code).toBe("ENTITY_NOT_FOUND");
|
|
13
|
+
expect(error.entity).toEqual({ type: "block", name: "Buton" });
|
|
14
|
+
expect(error.suggestions).toEqual(["Button"]);
|
|
15
|
+
expect(error.message).toBe('block "Buton" not found.');
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("emptyResults defaults its message and keeps filters", () => {
|
|
19
|
+
const error = PragmaError.emptyResults("token", {
|
|
20
|
+
filters: { channel: "stable" },
|
|
21
|
+
});
|
|
22
|
+
expect(error.code).toBe("EMPTY_RESULTS");
|
|
23
|
+
expect(error.message).toBe("No tokens found.");
|
|
24
|
+
expect(error.filters).toEqual({ channel: "stable" });
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("invalidInput enumerates valid options", () => {
|
|
28
|
+
const error = PragmaError.invalidInput("format", "yaml", {
|
|
29
|
+
validOptions: ["plain", "llm", "json"],
|
|
30
|
+
});
|
|
31
|
+
expect(error.code).toBe("INVALID_INPUT");
|
|
32
|
+
expect(error.validOptions).toEqual(["plain", "llm", "json"]);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("unknownVerb names the token", () => {
|
|
36
|
+
const error = PragmaError.unknownVerb("frobnicate");
|
|
37
|
+
expect(error.code).toBe("UNKNOWN_VERB");
|
|
38
|
+
expect(error.message).toBe('Unknown command "frobnicate".');
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("storeUnavailable takes its own class", () => {
|
|
42
|
+
const error = PragmaError.storeUnavailable("connection refused");
|
|
43
|
+
expect(error.code).toBe("STORE_UNAVAILABLE");
|
|
44
|
+
expect(error.message).toContain("connection refused");
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("configError passes the reason through verbatim", () => {
|
|
48
|
+
const error = PragmaError.configError("bad channel", {
|
|
49
|
+
validOptions: ["normal"],
|
|
50
|
+
});
|
|
51
|
+
expect(error.code).toBe("CONFIG_ERROR");
|
|
52
|
+
expect(error.message).toBe("bad channel");
|
|
53
|
+
expect(error.validOptions).toEqual(["normal"]);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("internalError attaches a report hint", () => {
|
|
57
|
+
const error = PragmaError.internalError("boom");
|
|
58
|
+
expect(error.code).toBe("INTERNAL_ERROR");
|
|
59
|
+
expect(error.recovery).toEqual({ message: "Please report this issue." });
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
describe("serializeError", () => {
|
|
64
|
+
it("omits empty and absent optional fields", () => {
|
|
65
|
+
const error = PragmaError.internalError("boom");
|
|
66
|
+
expect(serializeError(error)).toEqual({
|
|
67
|
+
code: "INTERNAL_ERROR",
|
|
68
|
+
message: "Internal error: boom",
|
|
69
|
+
recovery: { message: "Please report this issue." },
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("includes suggestions, recovery, validOptions, and filters when present", () => {
|
|
74
|
+
const error = PragmaError.notFound("block", "Buton", {
|
|
75
|
+
suggestions: ["Button"],
|
|
76
|
+
recovery: cliRecovery("pragma block list", "List blocks."),
|
|
77
|
+
});
|
|
78
|
+
expect(serializeError(error)).toEqual({
|
|
79
|
+
code: "ENTITY_NOT_FOUND",
|
|
80
|
+
message: 'block "Buton" not found.',
|
|
81
|
+
suggestions: ["Button"],
|
|
82
|
+
recovery: { cli: "pragma block list", message: "List blocks." },
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
describe("envelope builders", () => {
|
|
88
|
+
it("wraps success data with default empty meta", () => {
|
|
89
|
+
expect(successEnvelope({ made: true })).toEqual({
|
|
90
|
+
ok: true,
|
|
91
|
+
data: { made: true },
|
|
92
|
+
meta: {},
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it("carries plan-first meta through", () => {
|
|
97
|
+
expect(
|
|
98
|
+
successEnvelope({ plan: [] }, { planOnly: true, confirmRequired: true }),
|
|
99
|
+
).toEqual({
|
|
100
|
+
ok: true,
|
|
101
|
+
data: { plan: [] },
|
|
102
|
+
meta: { planOnly: true, confirmRequired: true },
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("wraps an error into the failure envelope", () => {
|
|
107
|
+
const error = PragmaError.invalidInput("format", "yaml", {
|
|
108
|
+
validOptions: ["plain", "llm", "json"],
|
|
109
|
+
});
|
|
110
|
+
expect(errorEnvelope(error)).toEqual({
|
|
111
|
+
ok: false,
|
|
112
|
+
error: {
|
|
113
|
+
code: "INVALID_INPUT",
|
|
114
|
+
message: 'Invalid format "yaml".',
|
|
115
|
+
validOptions: ["plain", "llm", "json"],
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
});
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import type { ErrorCode, PragmaErrorData, Recovery } from "./types.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Structured error for all pragma operations.
|
|
5
|
+
*
|
|
6
|
+
* Carries a machine-readable {@link ErrorCode}, optional recovery hints, and
|
|
7
|
+
* contextual metadata (suggestions, valid options, active filters) so the CLI
|
|
8
|
+
* and MCP projectors can render one actionable diagnostic from one throw. The
|
|
9
|
+
* effect seam reads throw these directly; mutations surface `TaskError`s that
|
|
10
|
+
* the dispatcher wraps.
|
|
11
|
+
*/
|
|
12
|
+
class PragmaError extends Error {
|
|
13
|
+
/** Machine-readable error classification. */
|
|
14
|
+
readonly code: ErrorCode;
|
|
15
|
+
/** Entity that triggered the error (type + name), if applicable. */
|
|
16
|
+
readonly entity: PragmaErrorData["entity"];
|
|
17
|
+
/** Fuzzy-matched alternative names the user may have intended. */
|
|
18
|
+
readonly suggestions: string[];
|
|
19
|
+
/** Structured recovery hint with optional CLI command or MCP tool call. */
|
|
20
|
+
readonly recovery: Recovery | undefined;
|
|
21
|
+
/** Active filters at the time of the error, for diagnostic context. */
|
|
22
|
+
readonly filters: Record<string, string> | undefined;
|
|
23
|
+
/** Enumerated valid options when input was rejected. */
|
|
24
|
+
readonly validOptions: string[] | undefined;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @param data - Structured error payload.
|
|
28
|
+
*/
|
|
29
|
+
constructor(data: PragmaErrorData) {
|
|
30
|
+
super(data.message);
|
|
31
|
+
this.name = "PragmaError";
|
|
32
|
+
this.code = data.code;
|
|
33
|
+
this.entity = data.entity;
|
|
34
|
+
this.suggestions = data.suggestions ?? [];
|
|
35
|
+
this.recovery = data.recovery;
|
|
36
|
+
this.filters = data.filters;
|
|
37
|
+
this.validOptions = data.validOptions;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Factory: entity not found by name.
|
|
42
|
+
*
|
|
43
|
+
* @param entityType - Kind of entity (e.g. `"block"`, `"token"`).
|
|
44
|
+
* @param entityName - Name the user supplied.
|
|
45
|
+
* @param opts - Optional suggestions and recovery hint.
|
|
46
|
+
* @returns PragmaError with code `ENTITY_NOT_FOUND`.
|
|
47
|
+
*/
|
|
48
|
+
static notFound(
|
|
49
|
+
entityType: string,
|
|
50
|
+
entityName: string,
|
|
51
|
+
opts: { suggestions?: string[]; recovery?: Recovery } = {},
|
|
52
|
+
): PragmaError {
|
|
53
|
+
return new PragmaError({
|
|
54
|
+
code: "ENTITY_NOT_FOUND",
|
|
55
|
+
message: `${entityType} "${entityName}" not found.`,
|
|
56
|
+
entity: { type: entityType, name: entityName },
|
|
57
|
+
suggestions: opts.suggestions,
|
|
58
|
+
recovery: opts.recovery,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Factory: query returned zero results.
|
|
64
|
+
*
|
|
65
|
+
* @param entityType - Kind of entity being listed.
|
|
66
|
+
* @param opts - Optional message, active filters, and recovery hint.
|
|
67
|
+
* @returns PragmaError with code `EMPTY_RESULTS`.
|
|
68
|
+
*/
|
|
69
|
+
static emptyResults(
|
|
70
|
+
entityType: string,
|
|
71
|
+
opts: {
|
|
72
|
+
message?: string;
|
|
73
|
+
filters?: Record<string, string>;
|
|
74
|
+
recovery?: Recovery;
|
|
75
|
+
validOptions?: string[];
|
|
76
|
+
} = {},
|
|
77
|
+
): PragmaError {
|
|
78
|
+
return new PragmaError({
|
|
79
|
+
code: "EMPTY_RESULTS",
|
|
80
|
+
message: opts.message ?? `No ${entityType}s found.`,
|
|
81
|
+
filters: opts.filters,
|
|
82
|
+
recovery: opts.recovery,
|
|
83
|
+
validOptions: opts.validOptions,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Factory: user-supplied input is invalid.
|
|
89
|
+
*
|
|
90
|
+
* @param field - Name of the invalid field or argument.
|
|
91
|
+
* @param value - The rejected value.
|
|
92
|
+
* @param opts - Optional valid alternatives and recovery hint.
|
|
93
|
+
* @returns PragmaError with code `INVALID_INPUT`.
|
|
94
|
+
*/
|
|
95
|
+
static invalidInput(
|
|
96
|
+
field: string,
|
|
97
|
+
value: string,
|
|
98
|
+
opts: { validOptions?: string[]; recovery?: Recovery } = {},
|
|
99
|
+
): PragmaError {
|
|
100
|
+
return new PragmaError({
|
|
101
|
+
code: "INVALID_INPUT",
|
|
102
|
+
message: `Invalid ${field} "${value}".`,
|
|
103
|
+
validOptions: opts.validOptions,
|
|
104
|
+
recovery: opts.recovery,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Factory: an unknown noun/verb was entered.
|
|
110
|
+
*
|
|
111
|
+
* @param verb - The unrecognized command token.
|
|
112
|
+
* @param opts - Optional suggestions and recovery hint.
|
|
113
|
+
* @returns PragmaError with code `UNKNOWN_VERB`.
|
|
114
|
+
*/
|
|
115
|
+
static unknownVerb(
|
|
116
|
+
verb: string,
|
|
117
|
+
opts: { suggestions?: string[]; recovery?: Recovery } = {},
|
|
118
|
+
): PragmaError {
|
|
119
|
+
return new PragmaError({
|
|
120
|
+
code: "UNKNOWN_VERB",
|
|
121
|
+
message: `Unknown command "${verb}".`,
|
|
122
|
+
suggestions: opts.suggestions,
|
|
123
|
+
recovery: opts.recovery,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Factory: the knowledge-engine store could not be reached.
|
|
129
|
+
*
|
|
130
|
+
* Its own exit code (3) so scripts can distinguish an unavailable store from
|
|
131
|
+
* an ordinary runtime failure.
|
|
132
|
+
*
|
|
133
|
+
* @param reason - Human-readable failure description.
|
|
134
|
+
* @param opts - Optional recovery hint.
|
|
135
|
+
* @returns PragmaError with code `STORE_UNAVAILABLE`.
|
|
136
|
+
*/
|
|
137
|
+
static storeUnavailable(
|
|
138
|
+
reason: string,
|
|
139
|
+
opts: { recovery?: Recovery } = {},
|
|
140
|
+
): PragmaError {
|
|
141
|
+
return new PragmaError({
|
|
142
|
+
code: "STORE_UNAVAILABLE",
|
|
143
|
+
message: `Store unavailable. ${reason}`,
|
|
144
|
+
recovery: opts.recovery,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Factory: configuration file is invalid or contains bad values.
|
|
150
|
+
*
|
|
151
|
+
* @param reason - Human-readable description of the config problem.
|
|
152
|
+
* @param opts - Optional valid alternatives and recovery hint.
|
|
153
|
+
* @returns PragmaError with code `CONFIG_ERROR`.
|
|
154
|
+
*/
|
|
155
|
+
static configError(
|
|
156
|
+
reason: string,
|
|
157
|
+
opts: { validOptions?: string[]; recovery?: Recovery } = {},
|
|
158
|
+
): PragmaError {
|
|
159
|
+
return new PragmaError({
|
|
160
|
+
code: "CONFIG_ERROR",
|
|
161
|
+
message: reason,
|
|
162
|
+
validOptions: opts.validOptions,
|
|
163
|
+
recovery: opts.recovery,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Factory: unexpected internal failure (a bug).
|
|
169
|
+
*
|
|
170
|
+
* @param reason - Description of the internal error.
|
|
171
|
+
* @returns PragmaError with code `INTERNAL_ERROR` and a "please report" hint.
|
|
172
|
+
*/
|
|
173
|
+
static internalError(reason: string): PragmaError {
|
|
174
|
+
return new PragmaError({
|
|
175
|
+
code: "INTERNAL_ERROR",
|
|
176
|
+
message: `Internal error: ${reason}`,
|
|
177
|
+
recovery: { message: "Please report this issue." },
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export { PragmaError };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The closed set of pragma error codes.
|
|
3
|
+
*
|
|
4
|
+
* Every {@link PragmaError} carries one of these; the CLI projector maps each
|
|
5
|
+
* to a process exit code and the covenant freezes the exit-code table. Ported
|
|
6
|
+
* from the v1 error kernel with two additions for the v2 exit model:
|
|
7
|
+
* `STORE_UNAVAILABLE` (its own exit code, D2) and `UNKNOWN_VERB` (the usage
|
|
8
|
+
* class the unknown-command suggester resolves to). A store failure is either
|
|
9
|
+
* `STORE_UNAVAILABLE` (can't reach it) or a plain `INTERNAL_ERROR`, so no
|
|
10
|
+
* distinct `STORE_ERROR` code is carried.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** All recognized pragma error codes as a const tuple. */
|
|
14
|
+
const ERROR_CODES = [
|
|
15
|
+
"ENTITY_NOT_FOUND",
|
|
16
|
+
"EMPTY_RESULTS",
|
|
17
|
+
"INVALID_INPUT",
|
|
18
|
+
// RESERVED: declared and exit-mapped (usage, exit 2) for forward-compat and
|
|
19
|
+
// advertised in the covenant, but not yet raised by any site. Reserved for a
|
|
20
|
+
// future ambiguous glob/lookup match (a name resolving to several entities);
|
|
21
|
+
// until then no factory exists, so it cannot be raised by accident.
|
|
22
|
+
"AMBIGUOUS_INPUT",
|
|
23
|
+
"UNKNOWN_VERB",
|
|
24
|
+
"STORE_UNAVAILABLE",
|
|
25
|
+
"CONFIG_ERROR",
|
|
26
|
+
"INTERNAL_ERROR",
|
|
27
|
+
// A runtime condition that is NOT a bug and NOT a usage mistake, so it must
|
|
28
|
+
// NOT collapse to INTERNAL_ERROR's "please report this issue": a capability
|
|
29
|
+
// genuinely unavailable in this build/environment (`create package` /
|
|
30
|
+
// `create application` in the compiled binary, whose generator assets are not
|
|
31
|
+
// embedded — `create component` is embedded and runs), OR an external command
|
|
32
|
+
// that RAN and failed for a fixable environment reason (a denied global
|
|
33
|
+
// `npm i -g`, a network/registry failure — see `shared/assertExecOk`). Both
|
|
34
|
+
// carry an actionable recovery and map to the generic runtime exit 1.
|
|
35
|
+
"UNSUPPORTED",
|
|
36
|
+
] as const;
|
|
37
|
+
|
|
38
|
+
export { ERROR_CODES };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { TaskExecutionError } from "@canonical/task";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import {
|
|
4
|
+
asPragmaError,
|
|
5
|
+
CANCELLED_MESSAGE,
|
|
6
|
+
isCancellation,
|
|
7
|
+
isInterruption,
|
|
8
|
+
} from "./fromTaskError.js";
|
|
9
|
+
import { PragmaError } from "./PragmaError.js";
|
|
10
|
+
|
|
11
|
+
describe("fromTaskError bridge", () => {
|
|
12
|
+
it("recognises a declined confirm gate as a cancellation", () => {
|
|
13
|
+
const err = new TaskExecutionError({
|
|
14
|
+
code: "GENERATOR_CANCELLED",
|
|
15
|
+
message: "Cancelled.",
|
|
16
|
+
});
|
|
17
|
+
expect(isCancellation(err)).toBe(true);
|
|
18
|
+
expect(CANCELLED_MESSAGE).toBe("Cancelled.");
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it("does not treat other failures as cancellations", () => {
|
|
22
|
+
expect(isCancellation(new Error("boom"))).toBe(false);
|
|
23
|
+
expect(
|
|
24
|
+
isCancellation(
|
|
25
|
+
new TaskExecutionError({ code: "INTERNAL", message: "boom" }),
|
|
26
|
+
),
|
|
27
|
+
).toBe(false);
|
|
28
|
+
expect(isCancellation("nope")).toBe(false);
|
|
29
|
+
expect(isCancellation(null)).toBe(false);
|
|
30
|
+
// An interrupt is NOT a cancellation (different exit code).
|
|
31
|
+
expect(
|
|
32
|
+
isCancellation(
|
|
33
|
+
new TaskExecutionError({ code: "TASK_INTERRUPTED", message: "x" }),
|
|
34
|
+
),
|
|
35
|
+
).toBe(false);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it("recognises an interpreter interrupt (SIGINT / in-wizard Ctrl-C mid-run)", () => {
|
|
39
|
+
const err = new TaskExecutionError({
|
|
40
|
+
code: "TASK_INTERRUPTED",
|
|
41
|
+
message: "Task interrupted",
|
|
42
|
+
});
|
|
43
|
+
expect(isInterruption(err)).toBe(true);
|
|
44
|
+
// A decline is not an interruption, and vice-versa — they exit differently.
|
|
45
|
+
expect(
|
|
46
|
+
isInterruption(
|
|
47
|
+
new TaskExecutionError({
|
|
48
|
+
code: "GENERATOR_CANCELLED",
|
|
49
|
+
message: "Cancelled.",
|
|
50
|
+
}),
|
|
51
|
+
),
|
|
52
|
+
).toBe(false);
|
|
53
|
+
expect(isInterruption(new Error("boom"))).toBe(false);
|
|
54
|
+
expect(isInterruption(null)).toBe(false);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("maps absent/invalid answer codes to a usage error (INVALID_INPUT)", () => {
|
|
58
|
+
for (const code of [
|
|
59
|
+
"MISSING_REQUIRED_ANSWER",
|
|
60
|
+
"GENERATOR_INVALID_ANSWER",
|
|
61
|
+
]) {
|
|
62
|
+
const mapped = asPragmaError(
|
|
63
|
+
new TaskExecutionError({ code, message: "bad answer" }),
|
|
64
|
+
);
|
|
65
|
+
expect(mapped).toBeInstanceOf(PragmaError);
|
|
66
|
+
expect(mapped.code).toBe("INVALID_INPUT");
|
|
67
|
+
expect(mapped.message).toBe("bad answer");
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it("passes a PragmaError through unchanged", () => {
|
|
72
|
+
const original = PragmaError.notFound("thing", "x");
|
|
73
|
+
expect(asPragmaError(original)).toBe(original);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("keeps an unknown failure as an internal error (with a report hint)", () => {
|
|
77
|
+
const mapped = asPragmaError(new Error("kaboom"));
|
|
78
|
+
expect(mapped.code).toBe("INTERNAL_ERROR");
|
|
79
|
+
expect(mapped.message).toContain("kaboom");
|
|
80
|
+
// Genuine bugs still say "report this issue"; a cancel never reaches here.
|
|
81
|
+
expect(mapped.recovery?.message).toMatch(/report this issue/i);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge task-interpreter / summon-core error codes to the pragma boundary.
|
|
3
|
+
*
|
|
4
|
+
* A mutating verb's Task can fail with a code raised by summon-core's `execute`:
|
|
5
|
+
* `GENERATOR_CANCELLED` when an attended-TTY user DECLINES the confirm gate, and
|
|
6
|
+
* `MISSING_REQUIRED_ANSWER` / `GENERATOR_INVALID_ANSWER` for absent or invalid
|
|
7
|
+
* non-interactive answers. `runTask` rethrows these as a `TaskExecutionError`
|
|
8
|
+
* carrying `.code`. Without a bridge the CLI/MCP boundary collapses every
|
|
9
|
+
* non-`PragmaError` to INTERNAL_ERROR + "please report this issue" — telling a
|
|
10
|
+
* user to file a bug for cancelling their own scaffold.
|
|
11
|
+
*
|
|
12
|
+
* The codes are matched as STRING LITERALS, never imported from summon-core, so
|
|
13
|
+
* the kernel keeps summon-core out of its static import graph (the lazy-React /
|
|
14
|
+
* lazy-summon discipline that is the whole reason `create` dynamic-imports it).
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { PragmaError } from "./PragmaError.js";
|
|
18
|
+
|
|
19
|
+
/** summon-core's task-error code for a run declined at the confirm gate. */
|
|
20
|
+
const GENERATOR_CANCELLED = "GENERATOR_CANCELLED";
|
|
21
|
+
|
|
22
|
+
/** The interpreter's task-error code for a run aborted mid-flight (SIGINT). */
|
|
23
|
+
const TASK_INTERRUPTED = "TASK_INTERRUPTED";
|
|
24
|
+
|
|
25
|
+
/** summon-core task-error codes for absent/invalid non-interactive answers. */
|
|
26
|
+
const ANSWER_USAGE_CODES = new Set<string>([
|
|
27
|
+
"MISSING_REQUIRED_ANSWER",
|
|
28
|
+
"GENERATOR_INVALID_ANSWER",
|
|
29
|
+
]);
|
|
30
|
+
|
|
31
|
+
/** The clean, non-scary line shown when a user cancels at the confirm gate. */
|
|
32
|
+
export const CANCELLED_MESSAGE = "Cancelled.";
|
|
33
|
+
|
|
34
|
+
/** Read a task-interpreter error code off a thrown value, if it carries one. */
|
|
35
|
+
function taskErrorCode(error: unknown): string | undefined {
|
|
36
|
+
if (error && typeof error === "object" && "code" in error) {
|
|
37
|
+
const { code } = error as { code: unknown };
|
|
38
|
+
if (typeof code === "string") return code;
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* True when the throw is an attended user DECLINING the interactive confirm
|
|
45
|
+
* gate — a deliberate choice, not a failure. The boundary renders this as a
|
|
46
|
+
* clean cancellation (a plain message, success exit), never INTERNAL_ERROR.
|
|
47
|
+
*/
|
|
48
|
+
export function isCancellation(error: unknown): boolean {
|
|
49
|
+
return taskErrorCode(error) === GENERATOR_CANCELLED;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* True when the throw is the interpreter aborting a run mid-flight — a SIGINT
|
|
54
|
+
* on a `--yes`/CI run, or an in-wizard Ctrl-C DURING execution (which aborts
|
|
55
|
+
* the run's controller). Distinct from {@link isCancellation}: a cancel is a
|
|
56
|
+
* clean user decline (exit 0), an interruption stopped work already underway
|
|
57
|
+
* (exit 130, UNIX 128+SIGINT). The boundary renders both with the same clean
|
|
58
|
+
* "Cancelled." line — neither is a bug to report — but with different exit
|
|
59
|
+
* codes.
|
|
60
|
+
*/
|
|
61
|
+
export function isInterruption(error: unknown): boolean {
|
|
62
|
+
return taskErrorCode(error) === TASK_INTERRUPTED;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Coerce a thrown value into a {@link PragmaError} for the CLI/MCP boundary,
|
|
67
|
+
* bridging summon-core task-error codes: absent/invalid non-interactive answers
|
|
68
|
+
* become INVALID_INPUT (a usage error, exit 2); a `PragmaError` passes through
|
|
69
|
+
* unchanged; everything else stays INTERNAL_ERROR. Cancellation is handled
|
|
70
|
+
* separately by {@link isCancellation} as a clean, non-error outcome.
|
|
71
|
+
*/
|
|
72
|
+
export function asPragmaError(error: unknown): PragmaError {
|
|
73
|
+
if (error instanceof PragmaError) return error;
|
|
74
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
75
|
+
const code = taskErrorCode(error);
|
|
76
|
+
if (code !== undefined && ANSWER_USAGE_CODES.has(code)) {
|
|
77
|
+
return new PragmaError({ code: "INVALID_INPUT", message });
|
|
78
|
+
}
|
|
79
|
+
return PragmaError.internalError(message);
|
|
80
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error kernel barrel — the structured error model and its renderers.
|
|
3
|
+
*
|
|
4
|
+
* The projectors import `PragmaError` and the renderers from here; the
|
|
5
|
+
* recovery invariant and the serializer are exported for the seams that build
|
|
6
|
+
* and marshal errors.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export { ERROR_CODES } from "./constants.js";
|
|
10
|
+
export { PragmaError } from "./PragmaError.js";
|
|
11
|
+
export { assertRecoveryCli, cliRecovery } from "./recovery.js";
|
|
12
|
+
export {
|
|
13
|
+
renderErrorJson,
|
|
14
|
+
renderErrorLlm,
|
|
15
|
+
renderErrorPlain,
|
|
16
|
+
} from "./renderError.js";
|
|
17
|
+
export { serializeError } from "./serialize.js";
|
|
18
|
+
export type {
|
|
19
|
+
ErrorCode,
|
|
20
|
+
ErrorPayload,
|
|
21
|
+
PragmaErrorData,
|
|
22
|
+
Recovery,
|
|
23
|
+
} from "./types.js";
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { RECOVERY_CLI_PREFIX } from "../../constants.js";
|
|
3
|
+
import { PragmaError } from "./PragmaError.js";
|
|
4
|
+
import { assertRecoveryCli, cliRecovery } from "./recovery.js";
|
|
5
|
+
|
|
6
|
+
describe("recovery.cli invariant (D5)", () => {
|
|
7
|
+
it("keeps the recovery prefix literal as `pragma `", () => {
|
|
8
|
+
// Recovery hints quote the stable, documented command name via the fixed
|
|
9
|
+
// `pragma ` prefix, so they never drift from the published command.
|
|
10
|
+
expect(RECOVERY_CLI_PREFIX).toBe("pragma ");
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it("accepts a command carrying the canonical prefix", () => {
|
|
14
|
+
expect(() => assertRecoveryCli("pragma info")).not.toThrow();
|
|
15
|
+
expect(() => assertRecoveryCli("pragma config show")).not.toThrow();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("rejects a command missing the prefix", () => {
|
|
19
|
+
expect(() => assertRecoveryCli("info")).toThrow(/must start with/);
|
|
20
|
+
expect(() => assertRecoveryCli("pragmatic info")).toThrow(
|
|
21
|
+
/must start with/,
|
|
22
|
+
);
|
|
23
|
+
expect(() => assertRecoveryCli("pragmainfo")).toThrow(/must start with/);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("builds a validated recovery whose cli carries the prefix", () => {
|
|
27
|
+
const recovery = cliRecovery(
|
|
28
|
+
"pragma config show",
|
|
29
|
+
"See the resolved config.",
|
|
30
|
+
);
|
|
31
|
+
expect(recovery).toEqual({
|
|
32
|
+
cli: "pragma config show",
|
|
33
|
+
message: "See the resolved config.",
|
|
34
|
+
});
|
|
35
|
+
expect(recovery.cli?.startsWith(RECOVERY_CLI_PREFIX)).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it("refuses to build a recovery from an unprefixed command", () => {
|
|
39
|
+
expect(() => cliRecovery("config show", "nope")).toThrow(/must start with/);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("every PragmaError.recovery.cli in the kernel carries the prefix", () => {
|
|
43
|
+
// The factories that ship a recovery hint must honour the invariant. Only
|
|
44
|
+
// internalError seeds one today (message-only, no cli), so assert the
|
|
45
|
+
// guard holds for any cli that is present.
|
|
46
|
+
const errors = [
|
|
47
|
+
PragmaError.internalError("boom"),
|
|
48
|
+
PragmaError.notFound("block", "Nope", {
|
|
49
|
+
recovery: cliRecovery("pragma block list", "List blocks."),
|
|
50
|
+
}),
|
|
51
|
+
];
|
|
52
|
+
for (const error of errors) {
|
|
53
|
+
if (error.recovery?.cli) {
|
|
54
|
+
expect(() =>
|
|
55
|
+
assertRecoveryCli(error.recovery.cli as string),
|
|
56
|
+
).not.toThrow();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The recovery-string invariant (D5).
|
|
3
|
+
*
|
|
4
|
+
* Every `recovery.cli` hint quotes the stable, documented command name, so it
|
|
5
|
+
* must begin with the literal `pragma ` prefix, matching the installed `pragma`
|
|
6
|
+
* binary. Recovery hints are authored through {@link cliRecovery}
|
|
7
|
+
* so the prefix can never drift; {@link assertRecoveryCli} is the single guard,
|
|
8
|
+
* exercised by the invariant test.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { RECOVERY_CLI_PREFIX } from "../../constants.js";
|
|
12
|
+
import type { Recovery } from "./types.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Assert that a `recovery.cli` string starts with the canonical prefix.
|
|
16
|
+
*
|
|
17
|
+
* @param cli - The candidate CLI recovery command.
|
|
18
|
+
* @throws Error when the command does not begin with `pragma `.
|
|
19
|
+
*/
|
|
20
|
+
export function assertRecoveryCli(cli: string): void {
|
|
21
|
+
if (!cli.startsWith(RECOVERY_CLI_PREFIX)) {
|
|
22
|
+
throw new Error(
|
|
23
|
+
`recovery.cli must start with "${RECOVERY_CLI_PREFIX}" (D5); got "${cli}"`,
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Build a {@link Recovery} whose `cli` command is guaranteed to carry the
|
|
30
|
+
* canonical prefix, optionally pairing it with an MCP tool an agent can call.
|
|
31
|
+
*
|
|
32
|
+
* A recovery may need to speak to BOTH surfaces: the `cli` string guides a human,
|
|
33
|
+
* while `mcp` names the tool an agent invokes (an agent cannot run a shell
|
|
34
|
+
* command). The single human `message` is shared by both.
|
|
35
|
+
*
|
|
36
|
+
* @param cli - The full recovery command, including the `pragma ` prefix.
|
|
37
|
+
* @param message - Human-readable guidance shown alongside the command.
|
|
38
|
+
* @param mcp - The MCP tool (and optional params) an agent calls to recover.
|
|
39
|
+
* @returns A validated recovery hint.
|
|
40
|
+
* @throws Error when `cli` does not begin with `pragma `.
|
|
41
|
+
*/
|
|
42
|
+
export function cliRecovery(
|
|
43
|
+
cli: string,
|
|
44
|
+
message: string,
|
|
45
|
+
mcp?: Recovery["mcp"],
|
|
46
|
+
): Recovery {
|
|
47
|
+
assertRecoveryCli(cli);
|
|
48
|
+
return { message, cli, ...(mcp ? { mcp } : {}) };
|
|
49
|
+
}
|