@canonical/pragma-cli 0.31.0 → 0.32.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/dist/pragma +0 -0
- package/package.json +27 -42
- package/src/bin.ts +292 -11
- package/src/capabilities/block/blockList.verb.ts +150 -0
- package/src/capabilities/block/index.ts +25 -0
- package/src/capabilities/block/pack.ts +155 -0
- package/src/capabilities/block/parity.test.ts +180 -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 +131 -0
- package/src/capabilities/capabilities/capabilities.verb.ts +48 -0
- package/src/capabilities/capabilities/catalog.ts +144 -0
- package/src/capabilities/capabilities/hints.ts +221 -0
- package/src/capabilities/capabilities/index.ts +13 -0
- package/src/capabilities/capabilities/types.ts +58 -0
- package/src/capabilities/colophon/collectColophon.ts +68 -0
- package/src/capabilities/colophon/colophon.render.test.ts +87 -0
- package/src/capabilities/colophon/colophon.render.ts +38 -0
- package/src/capabilities/colophon/colophon.test.ts +241 -0
- package/src/capabilities/colophon/colophon.verb.ts +41 -0
- package/src/capabilities/colophon/index.ts +6 -0
- package/src/capabilities/colophon/markdownTerminal.test.ts +50 -0
- package/src/capabilities/colophon/markdownTerminal.ts +85 -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/field.test.ts +188 -0
- package/src/capabilities/config/fields.ts +152 -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.ts +61 -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 +222 -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 +403 -0
- package/src/capabilities/create/create.verb.ts +435 -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 +108 -0
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +61 -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/doctor.render.ts +116 -0
- package/src/capabilities/doctor/doctor.test.ts +179 -0
- package/src/capabilities/doctor/doctor.verb.ts +46 -0
- package/src/capabilities/doctor/index.ts +6 -0
- package/src/capabilities/doctor/runChecks.ts +76 -0
- package/src/capabilities/doctor/types.ts +41 -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 +12 -0
- package/src/capabilities/ontology/ontology.test.ts +94 -0
- package/src/capabilities/ontology/queries.ts +197 -0
- package/src/capabilities/ontology/render.ts +87 -0
- package/src/capabilities/ontology/verbs.ts +170 -0
- package/src/capabilities/prompt/index.ts +18 -0
- package/src/capabilities/prompt/prompt.render.ts +70 -0
- package/src/capabilities/prompt/prompt.test.ts +119 -0
- package/src/capabilities/prompt/types.ts +30 -0
- package/src/capabilities/prompt/verbs.ts +93 -0
- package/src/capabilities/resources/index.ts +15 -0
- package/src/capabilities/resources/provider.ts +231 -0
- package/src/capabilities/resources/resources.test.ts +114 -0
- package/src/capabilities/roundtrip.test.ts +107 -0
- package/src/capabilities/setup/index.ts +6 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +108 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +307 -0
- package/src/capabilities/setup/operations/setupLsp.ts +61 -0
- package/src/capabilities/setup/operations/setupMcp.ts +85 -0
- package/src/capabilities/setup/operations/setupSkills.ts +199 -0
- package/src/capabilities/setup/setup.render.ts +49 -0
- package/src/capabilities/setup/setup.test.ts +351 -0
- package/src/capabilities/setup/setup.verb.ts +209 -0
- package/src/capabilities/setup/shell.ts +85 -0
- package/src/capabilities/setup/types.ts +42 -0
- package/src/capabilities/shared/assertExecOk.ts +106 -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 +87 -0
- package/src/capabilities/sources/index.ts +15 -0
- package/src/capabilities/sources/installSkills.ts +124 -0
- package/src/capabilities/sources/runUpdate.ts +407 -0
- package/src/capabilities/sources/sources.test.ts +642 -0
- package/src/capabilities/sources/status.render.ts +56 -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 +208 -0
- package/src/capabilities/tier/index.ts +19 -0
- package/src/capabilities/tier/lookup.render.ts +34 -0
- package/src/capabilities/tier/lookup.test.ts +68 -0
- package/src/capabilities/tier/lookup.verb.ts +44 -0
- package/src/capabilities/tier/pack.ts +28 -0
- package/src/capabilities/tier/runLookup.ts +59 -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 +340 -0
- package/src/kernel/completion/bashDrive.test.ts +73 -0
- package/src/kernel/completion/complete.test.ts +101 -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 +269 -0
- package/src/kernel/completion/index.ts +42 -0
- package/src/kernel/completion/model.test.ts +405 -0
- package/src/kernel/completion/model.ts +259 -0
- package/src/kernel/completion/parse.test.ts +338 -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 +387 -0
- package/src/kernel/project/cli/buildProgram.ts +280 -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 +99 -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 +218 -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/parity.test.ts +72 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +96 -0
- package/src/kernel/project/mcp/prompts/provider.ts +74 -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 +30 -0
- package/src/kernel/render/index.ts +30 -0
- package/src/kernel/render/prefixes.ts +21 -0
- package/src/kernel/render/renderers.test.ts +171 -0
- package/src/kernel/render/renderers.ts +429 -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 +148 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +229 -0
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +8 -0
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +4 -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 +153 -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 +102 -0
- package/src/kernel/runtime/graphpack/types.ts +111 -0
- package/src/kernel/runtime/index.ts +15 -0
- package/src/kernel/runtime/loadSession.ts +56 -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 +320 -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/storeless.test.ts +86 -0
- package/src/kernel/runtime/types.ts +210 -0
- package/src/kernel/runtime/wasmEmbed.test.ts +142 -0
- package/src/kernel/spec/asVerb.ts +23 -0
- package/src/kernel/spec/emitSurface.test.ts +65 -0
- package/src/kernel/spec/emitSurface.ts +223 -0
- package/src/kernel/spec/index.ts +34 -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 +44 -0
- package/src/testing/behavioral/completion.test.ts +132 -0
- package/src/testing/behavioral/disclosure.test.ts +103 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +120 -0
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +123 -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 +129 -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/eval/__snapshots__/eval.test.ts.snap +201 -0
- package/src/testing/eval/cases/assembly.ts +195 -0
- package/src/testing/eval/cases/effectful.ts +245 -0
- package/src/testing/eval/cases/readNouns.ts +232 -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 +175 -0
- package/src/testing/fixtures/graph/canonical.ts +184 -0
- package/src/testing/fixtures/packs/recipe.ts +78 -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/README.md +0 -458
- 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,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shapes of the completion engine — the model both tiers share, the parsed
|
|
3
|
+
* request the `__complete` resolver answers, and the dynamic-tier seam.
|
|
4
|
+
*
|
|
5
|
+
* The model is derived from the capability modules (the specs), NOT parsed
|
|
6
|
+
* from `surface.v2.json`: the emitted surface deliberately omits enum values,
|
|
7
|
+
* param kinds, and the `complete` field, and the grammar must not grow for a
|
|
8
|
+
* projection. Agreement with the covenant is transitive — the projection
|
|
9
|
+
* agreement test pins the model's noun/verb/flag sets to `emitSurface`, which
|
|
10
|
+
* conformance pins to the golden.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { CompletionMatch, CompletionSourceRef } from "../spec/types.js";
|
|
14
|
+
|
|
15
|
+
/** The shells the static completion tier can emit scripts for. */
|
|
16
|
+
export type Shell = "bash" | "zsh" | "fish";
|
|
17
|
+
|
|
18
|
+
/** A single completion candidate — always a bare word, never shell syntax. */
|
|
19
|
+
export type Candidate = string;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Where a value-position's candidates come from (`ParamSpec.complete`
|
|
23
|
+
* resolved against the param kind — see `model.ts` for the defaults table).
|
|
24
|
+
*/
|
|
25
|
+
export type CompletionSource =
|
|
26
|
+
/** A closed value set (enum params) — inlined by the static tier. */
|
|
27
|
+
| { readonly kind: "values"; readonly values: readonly string[] }
|
|
28
|
+
/**
|
|
29
|
+
* Names of a storeless source (index/skills/tiers/prompts/prefixes) — the
|
|
30
|
+
* dynamic tier reads them via the seam and ranks them with `match`/case. The
|
|
31
|
+
* static scripts exec `__complete` for every name source, one code path.
|
|
32
|
+
*/
|
|
33
|
+
| {
|
|
34
|
+
readonly kind: "names";
|
|
35
|
+
readonly ref: CompletionSourceRef;
|
|
36
|
+
readonly match: CompletionMatch;
|
|
37
|
+
readonly caseSensitive: boolean;
|
|
38
|
+
}
|
|
39
|
+
/** File paths — the static scripts delegate to native shell completion. */
|
|
40
|
+
| { readonly kind: "files" }
|
|
41
|
+
/** Nothing to offer. */
|
|
42
|
+
| { readonly kind: "none" };
|
|
43
|
+
|
|
44
|
+
/** One flag of a verb (or a global/mutation flag) as completion sees it. */
|
|
45
|
+
export interface FlagEntry {
|
|
46
|
+
/** The full flag token (`--with-history`). */
|
|
47
|
+
readonly flag: string;
|
|
48
|
+
/** Whether the flag consumes a value (false for booleans). */
|
|
49
|
+
readonly takesValue: boolean;
|
|
50
|
+
/** Whether the flag may repeat (`string[]` params) — never de-offered. */
|
|
51
|
+
readonly repeatable: boolean;
|
|
52
|
+
/** Offered only before a noun is chosen (`--version`). */
|
|
53
|
+
readonly rootOnly?: boolean;
|
|
54
|
+
/** Where the flag's value candidates come from. */
|
|
55
|
+
readonly source: CompletionSource;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** One positional slot of a verb. */
|
|
59
|
+
export interface PositionalEntry {
|
|
60
|
+
/** The param name (for diagnostics and projection agreement). */
|
|
61
|
+
readonly name: string;
|
|
62
|
+
/** Whether the positional is required (`<name>` vs `[name]`). */
|
|
63
|
+
readonly required: boolean;
|
|
64
|
+
/** Whether the positional absorbs all further indices (`string[]`). */
|
|
65
|
+
readonly variadic: boolean;
|
|
66
|
+
/** Where the positional's candidates come from. */
|
|
67
|
+
readonly source: CompletionSource;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** One verb (a sub-verb or a noun's self-verb) as completion sees it. */
|
|
71
|
+
export interface VerbEntry {
|
|
72
|
+
/** The verb label (`show`; the noun itself for a self-verb). */
|
|
73
|
+
readonly label: string;
|
|
74
|
+
/** Whether the verb mutates — mutation flags are offered iff true. */
|
|
75
|
+
readonly mutates: boolean;
|
|
76
|
+
/** The verb's flags, in declared order. */
|
|
77
|
+
readonly flags: readonly FlagEntry[];
|
|
78
|
+
/** The verb's positionals, in declared order. */
|
|
79
|
+
readonly positionals: readonly PositionalEntry[];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** One noun with its self-verb (if any) and sub-verbs. */
|
|
83
|
+
export interface NounEntry {
|
|
84
|
+
/** The noun token. */
|
|
85
|
+
readonly noun: string;
|
|
86
|
+
/** The self-verb (`["info"]`), when the noun is invocable bare. */
|
|
87
|
+
readonly selfVerb?: VerbEntry;
|
|
88
|
+
/** Sub-verbs (`["config","show"]`), sorted by label. */
|
|
89
|
+
readonly verbs: readonly VerbEntry[];
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** The completion model: everything both tiers offer, spec-derived. */
|
|
93
|
+
export interface CompletionModel {
|
|
94
|
+
/** Every visible noun (plus the bin-served `mcp`), sorted. */
|
|
95
|
+
readonly nouns: readonly NounEntry[];
|
|
96
|
+
/** Global flags offered in every flag position (`rootOnly` filtered). */
|
|
97
|
+
readonly globalFlags: readonly FlagEntry[];
|
|
98
|
+
/** Mutation flags injected for `mutates` verbs. */
|
|
99
|
+
readonly mutationFlags: readonly FlagEntry[];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* What the current word is completing, classified by the argv state machine.
|
|
104
|
+
* Structural contexts carry what to offer; value contexts carry the source.
|
|
105
|
+
*/
|
|
106
|
+
export type CompletionContext =
|
|
107
|
+
/** Completing the first command token — offer nouns. */
|
|
108
|
+
| { readonly kind: "noun" }
|
|
109
|
+
/** Completing a sub-verb of `noun`. */
|
|
110
|
+
| { readonly kind: "verb"; readonly noun: string }
|
|
111
|
+
/** Completing a flag name — `flags` is already scoped and de-offered. */
|
|
112
|
+
| { readonly kind: "flag-name"; readonly flags: readonly string[] }
|
|
113
|
+
/** Completing a flag's value. */
|
|
114
|
+
| {
|
|
115
|
+
readonly kind: "flag-value";
|
|
116
|
+
readonly flag: string;
|
|
117
|
+
readonly source: CompletionSource;
|
|
118
|
+
}
|
|
119
|
+
/** Completing a positional. */
|
|
120
|
+
| {
|
|
121
|
+
readonly kind: "positional";
|
|
122
|
+
readonly name: string;
|
|
123
|
+
readonly source: CompletionSource;
|
|
124
|
+
}
|
|
125
|
+
/** Nothing to offer; `reason` feeds the debug channel. */
|
|
126
|
+
| { readonly kind: "nothing"; readonly reason: string };
|
|
127
|
+
|
|
128
|
+
/** A parsed completion request: the classified context plus the partial word. */
|
|
129
|
+
export interface CompletionRequest {
|
|
130
|
+
/** The classified context of the word being completed. */
|
|
131
|
+
readonly context: CompletionContext;
|
|
132
|
+
/** The partial text of the word being completed (may be empty). */
|
|
133
|
+
readonly partial: string;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* The dynamic-tier seam: reads candidate names for a `{kind:"names"}` source.
|
|
138
|
+
* One source-dispatched reader serves every family — index, skills, tiers,
|
|
139
|
+
* prompts, prefixes — so the resolver ranks them uniformly. The default
|
|
140
|
+
* ({@link import("./entitySource.js").emptyNameSource}) yields nothing, so
|
|
141
|
+
* structural completion never pays a read; {@link
|
|
142
|
+
* import("./entitySource.js").indexCompletionEnv} wires the storeless sources.
|
|
143
|
+
*/
|
|
144
|
+
export interface CompletionEnv {
|
|
145
|
+
/**
|
|
146
|
+
* The candidate names for a source ref (full list, canonical casing), or none
|
|
147
|
+
* when unavailable. May be sync or async; failures must surface as an empty
|
|
148
|
+
* list, never throw — the resolver filters/ranks against the partial.
|
|
149
|
+
*/
|
|
150
|
+
names(
|
|
151
|
+
ref: CompletionSourceRef,
|
|
152
|
+
): Promise<readonly string[]> | readonly string[];
|
|
153
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`first run > greets on stderr and seeds the global config 1`] = `
|
|
4
|
+
[
|
|
5
|
+
"Hello! Thanks for taking the time to try the pre-release pragma CLI.",
|
|
6
|
+
"Please file issues and feedback at https://github.com/canonical/pragma/issues.",
|
|
7
|
+
"Pragma stores its configuration in <CONFIG> (just created with defaults).",
|
|
8
|
+
"A \`pragma.config.ts\` in this directory or above it overrides it per project.",
|
|
9
|
+
"",
|
|
10
|
+
]
|
|
11
|
+
`;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in configuration defaults (D6 — TS, not JSON).
|
|
3
|
+
*
|
|
4
|
+
* The lowest config layer. Authored as a typed module so an invalid edit fails
|
|
5
|
+
* at type-check rather than at runtime, and so the default `packages` sources
|
|
6
|
+
* live in one place. Sources verified against the v1 `config/defaults.json`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { PragmaConfig } from "./types.js";
|
|
10
|
+
|
|
11
|
+
export default {
|
|
12
|
+
channel: "normal",
|
|
13
|
+
detail: "standard",
|
|
14
|
+
packages: [
|
|
15
|
+
{
|
|
16
|
+
name: "@canonical/design-system",
|
|
17
|
+
source: "git+https://github.com/canonical/design-system.git#main",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: "@canonical/anatomy-dsl",
|
|
21
|
+
source: "git+https://github.com/canonical/anatomy-dsl.git#main",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "@canonical/code-standards",
|
|
25
|
+
source: "git+https://github.com/canonical/web-code-standards.git#main",
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
} satisfies PragmaConfig;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evaluate `pragma.config.ts` with an invalidating cache (D7).
|
|
3
|
+
*
|
|
4
|
+
* The project config is real TypeScript — evaluated via the runtime's native
|
|
5
|
+
* dynamic import of the file's `default` export. Because evaluation is the cost,
|
|
6
|
+
* the validated (JSON-serializable) result is cached under
|
|
7
|
+
* `$XDG_STATE_HOME/pragma/config-cache/<key>.json`. Warm path: derive key →
|
|
8
|
+
* cache hit → `JSON.parse` (sub-ms). Cold path: import → validate → write cache.
|
|
9
|
+
*
|
|
10
|
+
* The cache key is `sha256(path + entry-mtime + VERSION)`, NOT a hash of the
|
|
11
|
+
* entry file's bytes. This means:
|
|
12
|
+
* - editing the entry file bumps its mtime → new key → re-evaluation, in every
|
|
13
|
+
* process (the byte-hash scheme missed nothing here, but see the limitation);
|
|
14
|
+
* - a pragma upgrade bumps VERSION → new key → re-evaluation (a new binary must
|
|
15
|
+
* never serve a config the old one cached).
|
|
16
|
+
*
|
|
17
|
+
* LIMITATION (accepted, per the review fold): a *transitively*-imported file
|
|
18
|
+
* (e.g. `./pkgs.ts`) edited without touching the entry's mtime is not detected
|
|
19
|
+
* across processes. The fix that would catch it — `bun build --bundle` the config
|
|
20
|
+
* and key on the bundle hash — is unavailable: Bun's bundler cannot run inside
|
|
21
|
+
* the `bun build --compile` binary (no source filesystem at `/$bunfs/root`), and
|
|
22
|
+
* bundling on every load would also blow the warm-load budget. Touch the entry
|
|
23
|
+
* (or bump VERSION) to force a rebuild.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { createHash } from "node:crypto";
|
|
27
|
+
import {
|
|
28
|
+
mkdirSync,
|
|
29
|
+
readFileSync,
|
|
30
|
+
renameSync,
|
|
31
|
+
statSync,
|
|
32
|
+
writeFileSync,
|
|
33
|
+
} from "node:fs";
|
|
34
|
+
import { join } from "node:path";
|
|
35
|
+
import { pathToFileURL } from "node:url";
|
|
36
|
+
import { VERSION } from "../../constants.js";
|
|
37
|
+
import { PragmaError } from "../error/PragmaError.js";
|
|
38
|
+
import { configCacheDir } from "./paths.js";
|
|
39
|
+
import { parseRawConfig } from "./schema.js";
|
|
40
|
+
import type { RawConfig } from "./types.js";
|
|
41
|
+
|
|
42
|
+
/** The cache file path for a given key. */
|
|
43
|
+
function cachePathFor(key: string): string {
|
|
44
|
+
return join(configCacheDir(), `${key}.json`);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The cache key for a project-config file: `sha256(path + mtime + VERSION)`.
|
|
49
|
+
* Cheap to compute (a `stat`, not a full read) and threaded onto the import URL
|
|
50
|
+
* below so a long-lived process re-evaluates when the key changes.
|
|
51
|
+
*/
|
|
52
|
+
function cacheKey(path: string): string {
|
|
53
|
+
const { mtimeMs } = statSync(path);
|
|
54
|
+
return createHash("sha256")
|
|
55
|
+
.update(`${path}\u0000${mtimeMs}\u0000${VERSION}`)
|
|
56
|
+
.digest("hex");
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Best-effort atomic write of the validated config to the cache. */
|
|
60
|
+
function writeCache(cachePath: string, config: RawConfig): void {
|
|
61
|
+
try {
|
|
62
|
+
mkdirSync(configCacheDir(), { recursive: true });
|
|
63
|
+
const tempPath = `${cachePath}.tmp`;
|
|
64
|
+
writeFileSync(tempPath, JSON.stringify(config));
|
|
65
|
+
renameSync(tempPath, cachePath);
|
|
66
|
+
} catch {
|
|
67
|
+
// A read-only or racing cache is non-fatal — evaluation still returns.
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Evaluate a project config file, serving a warm cache hit when possible.
|
|
73
|
+
*
|
|
74
|
+
* @param path - Absolute path to `pragma.config.{ts,js}`.
|
|
75
|
+
* @returns The validated raw config the file declares.
|
|
76
|
+
* @throws PragmaError with code `CONFIG_ERROR` when the evaluated shape is bad.
|
|
77
|
+
* @note Impure — reads the file, may import it, and writes the cache.
|
|
78
|
+
*/
|
|
79
|
+
export async function evaluateProjectConfig(path: string): Promise<RawConfig> {
|
|
80
|
+
const key = cacheKey(path);
|
|
81
|
+
const cachePath = cachePathFor(key);
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
return JSON.parse(readFileSync(cachePath, "utf-8")) as RawConfig;
|
|
85
|
+
} catch {
|
|
86
|
+
// Cache miss — evaluate below.
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Cache-bust the dynamic import with the key so a long-lived process (the
|
|
90
|
+
// `mcp` server, which re-reads config per tool call) picks up an edited entry
|
|
91
|
+
// instead of a previously imported module. Node honours the query; under Bun
|
|
92
|
+
// the module cache is path-keyed and ignores it, but a fresh process always
|
|
93
|
+
// re-reads, so cross-process correctness holds regardless.
|
|
94
|
+
const url = `${pathToFileURL(path).href}?v=${key}`;
|
|
95
|
+
// Evaluating real TypeScript can throw for reasons `parseRawConfig` never sees:
|
|
96
|
+
// a syntax error, a bad import, or a top-level throw in the config module. Left
|
|
97
|
+
// unwrapped, that raw throw collapses to INTERNAL_ERROR ("please report this
|
|
98
|
+
// issue") on EVERY command that reads config. Name it: a CONFIG_ERROR that
|
|
99
|
+
// identifies the offending file and the underlying reason.
|
|
100
|
+
let module: { default?: unknown };
|
|
101
|
+
try {
|
|
102
|
+
module = (await import(url)) as { default?: unknown };
|
|
103
|
+
} catch (error) {
|
|
104
|
+
if (error instanceof PragmaError) throw error;
|
|
105
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
106
|
+
throw PragmaError.configError(
|
|
107
|
+
`Could not load project config ${path}: ${reason}`,
|
|
108
|
+
{
|
|
109
|
+
recovery: {
|
|
110
|
+
message:
|
|
111
|
+
"Fix the error in your pragma.config.ts (it must evaluate to a default export), then try again.",
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
const config = parseRawConfig(module.default, path);
|
|
117
|
+
writeCache(cachePath, config);
|
|
118
|
+
return config;
|
|
119
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locate the nearest project config by walking up from `cwd`.
|
|
3
|
+
*
|
|
4
|
+
* Looks for `pragma.config.ts` (or, as a compiled-binary fallback,
|
|
5
|
+
* `pragma.config.js`) at or above `cwd`. The walk is bounded: it stops after
|
|
6
|
+
* the first directory containing `.git` (the repo root), after the home
|
|
7
|
+
* directory, and at the filesystem root — a config outside the repo or home
|
|
8
|
+
* never leaks in. Ported from the v1 `findProjectConfigPath`.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { existsSync } from "node:fs";
|
|
12
|
+
import { homedir } from "node:os";
|
|
13
|
+
import { dirname, join, resolve } from "node:path";
|
|
14
|
+
|
|
15
|
+
/** Candidate project-config filenames, in preference order. */
|
|
16
|
+
const CANDIDATES = ["pragma.config.ts", "pragma.config.js"] as const;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Find the nearest project config file at or above `cwd`.
|
|
20
|
+
*
|
|
21
|
+
* @param cwd - Directory to start the walk from.
|
|
22
|
+
* @returns The absolute path of the nearest config, or `undefined`.
|
|
23
|
+
* @note Impure — probes the filesystem while walking up.
|
|
24
|
+
*/
|
|
25
|
+
export function findProjectConfig(cwd: string): string | undefined {
|
|
26
|
+
const home = homedir();
|
|
27
|
+
let dir = resolve(cwd);
|
|
28
|
+
|
|
29
|
+
while (true) {
|
|
30
|
+
for (const name of CANDIDATES) {
|
|
31
|
+
const candidate = join(dir, name);
|
|
32
|
+
if (existsSync(candidate)) {
|
|
33
|
+
return candidate;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (existsSync(join(dir, ".git")) || dir === home) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
const parent = dirname(dir);
|
|
40
|
+
if (parent === dir) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
dir = parent;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { existsSync, mkdtempSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
5
|
+
import { ensureFirstRun, firstRunTask } from "./firstRun.js";
|
|
6
|
+
import { globalConfigPath } from "./paths.js";
|
|
7
|
+
|
|
8
|
+
const originalConfigHome = process.env.XDG_CONFIG_HOME;
|
|
9
|
+
|
|
10
|
+
function freshConfigHome(): void {
|
|
11
|
+
process.env.XDG_CONFIG_HOME = mkdtempSync(join(tmpdir(), "pragma-first-"));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
process.env.XDG_CONFIG_HOME = originalConfigHome;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
describe("first run", () => {
|
|
19
|
+
it("greets on stderr and seeds the global config", async () => {
|
|
20
|
+
freshConfigHome();
|
|
21
|
+
const path = globalConfigPath();
|
|
22
|
+
const lines: string[] = [];
|
|
23
|
+
|
|
24
|
+
await ensureFirstRun((line) => lines.push(line));
|
|
25
|
+
|
|
26
|
+
expect(existsSync(path)).toBe(true);
|
|
27
|
+
expect(readFileSync(path, "utf-8")).toBe("{}\n");
|
|
28
|
+
expect(lines[0]).toContain("Hello!");
|
|
29
|
+
expect(lines.some((line) => line.includes(path))).toBe(true);
|
|
30
|
+
// Snapshot the note with the volatile path masked.
|
|
31
|
+
expect(
|
|
32
|
+
lines.map((line) => line.replace(path, "<CONFIG>")),
|
|
33
|
+
).toMatchSnapshot();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("is idempotent — no greeting when the config already exists", async () => {
|
|
37
|
+
freshConfigHome();
|
|
38
|
+
await ensureFirstRun(() => {});
|
|
39
|
+
|
|
40
|
+
const second: string[] = [];
|
|
41
|
+
await ensureFirstRun((line) => second.push(line));
|
|
42
|
+
expect(second).toEqual([]);
|
|
43
|
+
|
|
44
|
+
const task = firstRunTask();
|
|
45
|
+
expect(task).toBeDefined();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("tolerates a creation failure with a single warning", async () => {
|
|
49
|
+
freshConfigHome();
|
|
50
|
+
// Make the pragma config directory path a file so mkdir fails.
|
|
51
|
+
writeFileSync(join(process.env.XDG_CONFIG_HOME as string, "pragma"), "x");
|
|
52
|
+
const lines: string[] = [];
|
|
53
|
+
|
|
54
|
+
await expect(
|
|
55
|
+
ensureFirstRun((line) => lines.push(line)),
|
|
56
|
+
).resolves.toBeUndefined();
|
|
57
|
+
expect(lines).toHaveLength(1);
|
|
58
|
+
expect(lines[0]).toContain("Warning: could not create");
|
|
59
|
+
});
|
|
60
|
+
});
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* First-run onboarding — welcome note + global config creation.
|
|
3
|
+
*
|
|
4
|
+
* On the first invocation (detected by the absence of the global config file),
|
|
5
|
+
* greet on STDERR and seed `$XDG_CONFIG_HOME/pragma/config.json` with `{}` so
|
|
6
|
+
* every field keeps its built-in default and `config show` reports honest
|
|
7
|
+
* provenance. Modeled as a {@link Task} so the effects stay declarative and
|
|
8
|
+
* testable. The banner goes to stderr — stdout belongs to command output
|
|
9
|
+
* (`--format json`, MCP stdio) and must never be corrupted. Ported from the v1
|
|
10
|
+
* first-run pipeline; runs before dispatch and tolerates every failure.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { dirname } from "node:path";
|
|
14
|
+
import {
|
|
15
|
+
$,
|
|
16
|
+
exists,
|
|
17
|
+
gen,
|
|
18
|
+
info,
|
|
19
|
+
mkdir,
|
|
20
|
+
type Task,
|
|
21
|
+
writeFile,
|
|
22
|
+
} from "@canonical/task";
|
|
23
|
+
import { runTask } from "@canonical/task/node";
|
|
24
|
+
import { globalConfigPath } from "./paths.js";
|
|
25
|
+
|
|
26
|
+
/** Seed content: an empty object, so nothing is pinned the user did not choose. */
|
|
27
|
+
const SEED_CONFIG = "{}\n";
|
|
28
|
+
|
|
29
|
+
/** Build the welcome note; the resolved path is shown so it is copyable. */
|
|
30
|
+
function welcomeLines(path: string): string[] {
|
|
31
|
+
return [
|
|
32
|
+
"Hello! Thanks for taking the time to try the pre-release pragma CLI.",
|
|
33
|
+
"Please file issues and feedback at https://github.com/canonical/pragma/issues.",
|
|
34
|
+
`Pragma stores its configuration in ${path} (just created with defaults).`,
|
|
35
|
+
"A `pragma.config.ts` in this directory or above it overrides it per project.",
|
|
36
|
+
"",
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The first-run task: create the global config, announcing it on first run.
|
|
42
|
+
*
|
|
43
|
+
* @returns Task yielding whether the config was created and its path.
|
|
44
|
+
* @note Impure — checks/creates the global config file, emits log effects.
|
|
45
|
+
*/
|
|
46
|
+
export function firstRunTask(): Task<{ created: boolean; path: string }> {
|
|
47
|
+
return gen(function* () {
|
|
48
|
+
const path = globalConfigPath();
|
|
49
|
+
|
|
50
|
+
if (yield* $(exists(path))) {
|
|
51
|
+
return { created: false, path };
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Create first, then greet: if creation fails the effects throw before any
|
|
55
|
+
// line is emitted, so onboarding degrades to the single stderr warning
|
|
56
|
+
// rather than a "just created" banner alongside a failure.
|
|
57
|
+
yield* $(mkdir(dirname(path), true));
|
|
58
|
+
yield* $(writeFile(path, SEED_CONFIG));
|
|
59
|
+
|
|
60
|
+
for (const line of welcomeLines(path)) {
|
|
61
|
+
yield* $(info(line));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return { created: true, path };
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Run the first-run task, tolerating every failure.
|
|
70
|
+
*
|
|
71
|
+
* Onboarding must never break an invocation: a read-only home or a race with a
|
|
72
|
+
* concurrent first run degrades to a single stderr warning and the invocation
|
|
73
|
+
* proceeds (the config layers treat a missing global file as defaults anyway).
|
|
74
|
+
*
|
|
75
|
+
* @param write - Stderr sink, injectable for tests.
|
|
76
|
+
* @note Impure — filesystem effects + stderr.
|
|
77
|
+
*/
|
|
78
|
+
export async function ensureFirstRun(
|
|
79
|
+
write: (line: string) => void = (line) => process.stderr.write(`${line}\n`),
|
|
80
|
+
): Promise<void> {
|
|
81
|
+
try {
|
|
82
|
+
await runTask(firstRunTask(), {
|
|
83
|
+
// Route log effects to stderr without the interpreter's [INFO] prefix —
|
|
84
|
+
// this is a greeting, not diagnostics.
|
|
85
|
+
onLog: (_level, message) => write(message),
|
|
86
|
+
});
|
|
87
|
+
} catch (error) {
|
|
88
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
89
|
+
write(`Warning: could not create the global pragma config — ${reason}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read the global machine config: `$XDG_CONFIG_HOME/pragma/config.json`.
|
|
3
|
+
*
|
|
4
|
+
* The global layer holds cross-project machine state (channel, detail, tier,
|
|
5
|
+
* prompts). A missing or empty file contributes no values — the layer simply
|
|
6
|
+
* does not participate in the merge. A *malformed* file (a torn write) must
|
|
7
|
+
* never brick every command (the old loud `CONFIG_ERROR` throw) nor be silently
|
|
8
|
+
* discarded (writeConfigField's old reset-to-`{}`): it is backed up to a
|
|
9
|
+
* timestamped sibling, reset to defaults, and a warning is written to stderr.
|
|
10
|
+
* A structurally *invalid* shape (valid JSON, wrong types) is still a real,
|
|
11
|
+
* fixable user error and surfaces as `CONFIG_ERROR` via {@link parseRawConfig}.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
15
|
+
import { globalConfigPath } from "./paths.js";
|
|
16
|
+
import { parseRawConfig } from "./schema.js";
|
|
17
|
+
import type { RawConfig } from "./types.js";
|
|
18
|
+
|
|
19
|
+
/** A read of the global config layer. */
|
|
20
|
+
export interface GlobalConfigRead {
|
|
21
|
+
readonly values: RawConfig;
|
|
22
|
+
readonly exists: boolean;
|
|
23
|
+
readonly path: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The timestamped sibling path a corrupt config is backed up to before it is
|
|
28
|
+
* reset — shared by the read (this module) and write (writeConfigField) paths
|
|
29
|
+
* so both name the backup identically.
|
|
30
|
+
*
|
|
31
|
+
* @param path - The config file path being recovered.
|
|
32
|
+
* @returns `<path>.corrupt-<ISO timestamp>`.
|
|
33
|
+
*/
|
|
34
|
+
export function corruptBackupPath(path: string): string {
|
|
35
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
36
|
+
return `${path}.corrupt-${stamp}`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Recover from a corrupt (unparseable) global config: back the file up, reset it
|
|
41
|
+
* to defaults, and warn on stderr. Best-effort — a read-only config dir degrades
|
|
42
|
+
* to defaults without a backup but still warns. Never throws.
|
|
43
|
+
*
|
|
44
|
+
* @param path - The corrupt config file path.
|
|
45
|
+
* @param raw - Its unparseable contents, preserved in the backup.
|
|
46
|
+
* @note Impure — writes the backup + reset file and to stderr.
|
|
47
|
+
*/
|
|
48
|
+
function recoverCorruptGlobalConfig(path: string, raw: string): void {
|
|
49
|
+
const backup = corruptBackupPath(path);
|
|
50
|
+
try {
|
|
51
|
+
writeFileSync(backup, raw);
|
|
52
|
+
writeFileSync(path, "{}\n");
|
|
53
|
+
process.stderr.write(
|
|
54
|
+
`Warning: ${path} is not valid JSON. Backed it up to ${backup} and reset it to defaults.\n`,
|
|
55
|
+
);
|
|
56
|
+
} catch {
|
|
57
|
+
process.stderr.write(
|
|
58
|
+
`Warning: ${path} is not valid JSON; using built-in defaults.\n`,
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Read and validate the global config file.
|
|
65
|
+
*
|
|
66
|
+
* @returns The declared values, whether the file exists, and its path.
|
|
67
|
+
* @throws PragmaError with code `CONFIG_ERROR` when the JSON is valid but its
|
|
68
|
+
* shape is not (malformed JSON is recovered, not thrown).
|
|
69
|
+
* @note Impure — reads the filesystem (and may recover a corrupt file).
|
|
70
|
+
*/
|
|
71
|
+
export function readGlobalConfig(): GlobalConfigRead {
|
|
72
|
+
const path = globalConfigPath();
|
|
73
|
+
let raw: string;
|
|
74
|
+
try {
|
|
75
|
+
raw = readFileSync(path, "utf-8");
|
|
76
|
+
} catch {
|
|
77
|
+
return { values: {}, exists: false, path };
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const trimmed = raw.trim();
|
|
81
|
+
if (trimmed === "") {
|
|
82
|
+
return { values: {}, exists: true, path };
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
let parsed: unknown;
|
|
86
|
+
try {
|
|
87
|
+
parsed = JSON.parse(trimmed);
|
|
88
|
+
} catch {
|
|
89
|
+
recoverCorruptGlobalConfig(path, raw);
|
|
90
|
+
return { values: {}, exists: true, path };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return { values: parseRawConfig(parsed, path), exists: true, path };
|
|
94
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config kernel barrel — layered TS-evaluated configuration.
|
|
3
|
+
*
|
|
4
|
+
* `schema.ts` (zod) is intentionally not re-exported here: it is imported
|
|
5
|
+
* directly and lazily by the readers, keeping this barrel — and any storeless
|
|
6
|
+
* consumer — off the zod fast path.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export { default as defaults } from "./defaults.js";
|
|
10
|
+
export { evaluateProjectConfig } from "./evaluateProjectConfig.js";
|
|
11
|
+
export { findProjectConfig } from "./findProjectConfig.js";
|
|
12
|
+
export { ensureFirstRun, firstRunTask } from "./firstRun.js";
|
|
13
|
+
export type { GlobalConfigRead } from "./globalConfig.js";
|
|
14
|
+
export { readGlobalConfig } from "./globalConfig.js";
|
|
15
|
+
export {
|
|
16
|
+
cacheDir,
|
|
17
|
+
configCacheDir,
|
|
18
|
+
configDir,
|
|
19
|
+
globalConfigPath,
|
|
20
|
+
stateDir,
|
|
21
|
+
} from "./paths.js";
|
|
22
|
+
export { readConfig } from "./readConfig.js";
|
|
23
|
+
export type {
|
|
24
|
+
Channel,
|
|
25
|
+
ConfigLayer,
|
|
26
|
+
ConfigLayers,
|
|
27
|
+
ConfigOrigin,
|
|
28
|
+
ConfigOrigins,
|
|
29
|
+
PackageDeclaration,
|
|
30
|
+
PackageEntry,
|
|
31
|
+
PragmaConfig,
|
|
32
|
+
RawConfig,
|
|
33
|
+
} from "./types.js";
|
|
34
|
+
export type { WriteConfigResult } from "./writeConfigField.js";
|
|
35
|
+
export { writeConfigField } from "./writeConfigField.js";
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XDG base-directory resolution for config, cache, and state.
|
|
3
|
+
*
|
|
4
|
+
* Config (the global JSON) lives under `$XDG_CONFIG_HOME/pragma`; the evaluated
|
|
5
|
+
* project-config cache lives under `$XDG_STATE_HOME/pragma/config-cache`. Tests
|
|
6
|
+
* point these env vars at per-run temp directories (see setupXdgIsolation) so
|
|
7
|
+
* they never touch the developer's real state.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { homedir } from "node:os";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
|
|
13
|
+
/** `$XDG_CONFIG_HOME/pragma` (default `~/.config/pragma`). */
|
|
14
|
+
export function configDir(): string {
|
|
15
|
+
const base = process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config");
|
|
16
|
+
return join(base, "pragma");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** `$XDG_CACHE_HOME/pragma` (default `~/.cache/pragma`). */
|
|
20
|
+
export function cacheDir(): string {
|
|
21
|
+
const base = process.env.XDG_CACHE_HOME ?? join(homedir(), ".cache");
|
|
22
|
+
return join(base, "pragma");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** `$XDG_STATE_HOME/pragma` (default `~/.local/state/pragma`). */
|
|
26
|
+
export function stateDir(): string {
|
|
27
|
+
const base = process.env.XDG_STATE_HOME ?? join(homedir(), ".local", "state");
|
|
28
|
+
return join(base, "pragma");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** The global config file: `$XDG_CONFIG_HOME/pragma/config.json`. */
|
|
32
|
+
export function globalConfigPath(): string {
|
|
33
|
+
return join(configDir(), "config.json");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** The evaluated-project-config cache dir: `$XDG_STATE_HOME/pragma/config-cache`. */
|
|
37
|
+
export function configCacheDir(): string {
|
|
38
|
+
return join(stateDir(), "config-cache");
|
|
39
|
+
}
|