@canonical/pragma-cli 0.30.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 -40
- 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 -68
- package/src/index.ts +27 -134
- 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 +17 -5
- package/src/types.ts +42 -0
- package/README.md +0 -429
- 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 -18
- package/src/completions/handleQuery.test.ts +0 -93
- package/src/completions/handleQuery.ts +0 -30
- package/src/completions/index.ts +0 -14
- package/src/completions/queryCompletions.test.ts +0 -100
- package/src/completions/queryCompletions.ts +0 -61
- package/src/completions/querySocket.test.ts +0 -70
- package/src/completions/querySocket.ts +0 -44
- 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 -215
- package/src/config/readConfig.test.ts +0 -395
- package/src/config/readConfig.ts +0 -21
- package/src/config/readConfigLayers.test.ts +0 -107
- package/src/config/readConfigLayers.ts +0 -115
- 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 -121
- 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 -55
- 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 -41
- 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 -254
- package/src/domains/block/types.ts +0 -30
- package/src/domains/config/commands/channel.test.ts +0 -112
- package/src/domains/config/commands/channel.ts +0 -86
- package/src/domains/config/commands/configScope.ts +0 -46
- package/src/domains/config/commands/framework.test.ts +0 -105
- package/src/domains/config/commands/framework.ts +0 -91
- 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 -95
- package/src/domains/config/commands/tier.ts +0 -84
- 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 -56
- package/src/domains/config/operations/validateTier.ts +0 -35
- 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/commands/component.test.ts +0 -166
- package/src/domains/create/commands/component.ts +0 -123
- package/src/domains/create/commands/index.ts +0 -3
- package/src/domains/create/commands/package.test.ts +0 -35
- package/src/domains/create/commands/package.ts +0 -21
- package/src/domains/create/generators.ts +0 -8
- package/src/domains/create/index.ts +0 -15
- package/src/domains/create/mcp/index.ts +0 -2
- package/src/domains/create/mcp/specs.ts +0 -168
- 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 -117
- package/src/domains/doctor/formatters/doctor.ts +0 -84
- 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 -130
- 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 -58
- 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 -305
- 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 -20
- 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 -92
- 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.ts +0 -37
- 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 -40
- package/src/domains/graphql/commands/serve.ts +0 -131
- 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 -56
- package/src/domains/graphql/helpers/resolveSourceFiles.ts +0 -45
- 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/index.ts +0 -12
- 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 -133
- package/src/domains/info/formatters/upgrade.ts +0 -68
- 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/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 -5
- package/src/domains/info/types.test-d.ts +0 -35
- package/src/domains/info/types.ts +0 -54
- package/src/domains/llm/capabilities.test.ts +0 -91
- package/src/domains/llm/commands/capabilities.ts +0 -28
- package/src/domains/llm/commands/index.ts +0 -4
- package/src/domains/llm/commands/llm.ts +0 -37
- package/src/domains/llm/data/commandReference.ts +0 -97
- package/src/domains/llm/data/decisionTrees.ts +0 -50
- package/src/domains/llm/data/index.ts +0 -6
- package/src/domains/llm/data/toolCatalog.ts +0 -190
- 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 -53
- package/src/domains/llm/index.ts +0 -9
- package/src/domains/llm/llmCommand.test.ts +0 -93
- package/src/domains/llm/mcp/index.ts +0 -2
- package/src/domains/llm/mcp/specs.ts +0 -94
- package/src/domains/llm/operations/collectContext.ts +0 -47
- 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 -53
- 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 -67
- 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 -77
- 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 -82
- package/src/domains/ontology/commands/list.ts +0 -11
- package/src/domains/ontology/commands/show.test.ts +0 -103
- package/src/domains/ontology/commands/show.ts +0 -14
- package/src/domains/ontology/formatters/index.ts +0 -4
- package/src/domains/ontology/formatters/list.ts +0 -39
- package/src/domains/ontology/formatters/show.ts +0 -105
- package/src/domains/ontology/helpers/findNamespace.ts +0 -23
- package/src/domains/ontology/helpers/index.ts +0 -7
- package/src/domains/ontology/helpers/queryClasses.ts +0 -50
- package/src/domains/ontology/helpers/queryProperties.ts +0 -57
- 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 -45
- package/src/domains/ontology/operations/listOntologies.ts +0 -101
- package/src/domains/ontology/operations/showOntology.test.ts +0 -65
- package/src/domains/ontology/operations/showOntology.ts +0 -41
- package/src/domains/ontology/operations/showOntologyRaw.test.ts +0 -39
- 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 -108
- 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 -181
- 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 -6
- package/src/domains/setup/commands/lsp.ts +0 -49
- package/src/domains/setup/commands/mcp.ts +0 -119
- 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 -33
- 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 -29
- package/src/domains/setup/operations/setupLsp.ts +0 -17
- 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.ts +0 -135
- 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 -109
- 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 -82
- package/src/domains/shared/loaders/bundledLoader.test.ts +0 -248
- package/src/domains/shared/loaders/bundledLoader.ts +0 -206
- package/src/domains/shared/loaders/gitLoader.ts +0 -31
- package/src/domains/shared/loaders/index.ts +0 -9
- package/src/domains/shared/loaders/localLoader.ts +0 -87
- package/src/domains/shared/loaders/readPackageDir.ts +0 -147
- 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 -120
- package/src/domains/shared/lookupMany.ts +0 -85
- package/src/domains/shared/mergeAndParseRefs.test.ts +0 -89
- package/src/domains/shared/mergeAndParseRefs.ts +0 -44
- package/src/domains/shared/namespaces.ts +0 -18
- package/src/domains/shared/packages.ts +0 -20
- package/src/domains/shared/pickRandom.ts +0 -22
- package/src/domains/shared/prefixes.ts +0 -37
- 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/runtime.ts +0 -61
- package/src/domains/shared/sampleFormatters.ts +0 -47
- package/src/domains/shared/semanticPackage.ts +0 -112
- package/src/domains/shared/stories/compileLookupCommand.test.ts +0 -145
- package/src/domains/shared/stories/compileLookupCommand.ts +0 -100
- 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 -102
- package/src/domains/shared/stories/pack/applyPackFilters.ts +0 -76
- package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +0 -51
- package/src/domains/shared/stories/pack/buildLookupQuery.ts +0 -80
- package/src/domains/shared/stories/pack/collectPackStories.test.ts +0 -108
- package/src/domains/shared/stories/pack/collectPackStories.ts +0 -76
- package/src/domains/shared/stories/pack/compilePackCommands.ts +0 -40
- package/src/domains/shared/stories/pack/compilePackStories.test.ts +0 -146
- package/src/domains/shared/stories/pack/compilePackStories.ts +0 -253
- package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +0 -43
- package/src/domains/shared/stories/pack/index.ts +0 -28
- package/src/domains/shared/stories/pack/runSelectQuery.ts +0 -31
- package/src/domains/shared/stories/pack/standardParity.test.ts +0 -308
- package/src/domains/shared/stories/pack/types.ts +0 -104
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +0 -240
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +0 -408
- 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 -171
- 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 -50
- package/src/domains/shared/types/modifier.ts +0 -22
- package/src/domains/shared/types/ontology.ts +0 -50
- 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 -64
- 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/standard/commands/categories.test.ts +0 -70
- package/src/domains/standard/commands/categories.ts +0 -48
- package/src/domains/standard/commands/index.ts +0 -6
- package/src/domains/standard/commands/list.test.ts +0 -105
- package/src/domains/standard/commands/list.ts +0 -11
- package/src/domains/standard/commands/lookup.test.ts +0 -135
- package/src/domains/standard/commands/lookup.ts +0 -14
- package/src/domains/standard/commands/sample.ts +0 -57
- package/src/domains/standard/formatters/categories.test.ts +0 -44
- package/src/domains/standard/formatters/categories.ts +0 -38
- package/src/domains/standard/formatters/index.ts +0 -10
- package/src/domains/standard/formatters/list.test.ts +0 -169
- package/src/domains/standard/formatters/list.ts +0 -184
- package/src/domains/standard/formatters/lookup.test.ts +0 -95
- package/src/domains/standard/formatters/lookup.ts +0 -101
- package/src/domains/standard/formatters/sample.ts +0 -15
- package/src/domains/standard/formatters/types.ts +0 -31
- package/src/domains/standard/index.ts +0 -40
- package/src/domains/standard/mcp/index.ts +0 -2
- package/src/domains/standard/mcp/specs.ts +0 -89
- package/src/domains/standard/operations/categories.test.ts +0 -61
- package/src/domains/standard/operations/categories.ts +0 -38
- package/src/domains/standard/operations/index.ts +0 -6
- package/src/domains/standard/operations/list.test.ts +0 -75
- package/src/domains/standard/operations/list.ts +0 -64
- package/src/domains/standard/operations/lookup.test.ts +0 -58
- package/src/domains/standard/operations/lookup.ts +0 -151
- package/src/domains/standard/operations/sample.ts +0 -35
- package/src/domains/standard/orchestration/buildStandardFilters.ts +0 -11
- package/src/domains/standard/orchestration/index.ts +0 -4
- package/src/domains/standard/orchestration/resolveStandardList.ts +0 -45
- package/src/domains/standard/orchestration/resolveStandardLookup.ts +0 -33
- package/src/domains/standard/orchestration/standardEmptyError.test.ts +0 -33
- package/src/domains/standard/orchestration/standardEmptyError.ts +0 -29
- package/src/domains/standard/standardConfig.ts +0 -42
- package/src/domains/standard/stories.test.ts +0 -24
- package/src/domains/standard/stories.ts +0 -151
- package/src/domains/standard/types.ts +0 -15
- package/src/domains/tier/commands/index.ts +0 -3
- package/src/domains/tier/commands/list.test.ts +0 -67
- package/src/domains/tier/commands/list.ts +0 -9
- package/src/domains/tier/formatters/index.ts +0 -3
- package/src/domains/tier/formatters/list.test.ts +0 -33
- package/src/domains/tier/formatters/list.ts +0 -45
- package/src/domains/tier/index.ts +0 -17
- package/src/domains/tier/mcp/index.ts +0 -2
- package/src/domains/tier/mcp/specs.ts +0 -12
- package/src/domains/tier/operations/index.ts +0 -3
- package/src/domains/tier/operations/list.test.ts +0 -32
- package/src/domains/tier/operations/list.ts +0 -33
- package/src/domains/tier/stories.test.ts +0 -22
- package/src/domains/tier/stories.ts +0 -52
- 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 -125
- package/src/domains/token/commands/lookup.ts +0 -95
- package/src/domains/token/commands/sample.ts +0 -53
- 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 -40
- package/src/domains/token/mcp/index.ts +0 -2
- package/src/domains/token/mcp/specs.ts +0 -195
- 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/sessions.ts +0 -32
- package/src/domains/trace/commands/show.ts +0 -145
- 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 -66
- package/src/mcp/tools/registerFromSpec.ts +0 -97
- package/src/mcp/tools/registerTools.test.ts +0 -1201
- 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 -37
- package/src/pipeline/collectCommands.ts +0 -60
- package/src/pipeline/constants.ts +0 -14
- package/src/pipeline/createProgram.test.ts +0 -112
- package/src/pipeline/createProgram.ts +0 -89
- 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 -92
- package/src/pipeline/parseGlobalFlags.ts +0 -46
- package/src/pipeline/renderError.test.ts +0 -151
- package/src/pipeline/renderError.ts +0 -129
- package/src/pipeline/resolveCommandKind.test.ts +0 -68
- package/src/pipeline/resolveCommandKind.ts +0 -78
- package/src/pipeline/runCli.orchestration.test.ts +0 -419
- package/src/pipeline/runCli.test.ts +0 -70
- package/src/pipeline/runCli.ts +0 -268
- package/src/pipeline/types.ts +0 -17
- package/src/testing/cli.ts +0 -43
- package/src/testing/createTestMcpClient.ts +0 -68
- package/src/testing/dsFixtures.ts +0 -506
- 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 -25
- 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 -198
- package/src/testing/integration/cross-binary-byte-equality.test.ts +0 -129
- package/src/testing/integration/edge-cases.test.ts +0 -263
- package/src/testing/integration/executor-execution.test.ts +0 -101
- package/src/testing/integration/executor-golden.test.ts +0 -145
- package/src/testing/integration/mcp-surface.test.ts +0 -580
- package/src/testing/integration/parity.test.ts +0 -547
- package/src/testing/regression/0001-skill-discovery-granularity.test.ts +0 -71
- package/src/testing/standardParityFixtures.ts +0 -92
- 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,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a {@link PackageRef} to its pinned revision and RDF source contents.
|
|
3
|
+
*
|
|
4
|
+
* `file` reads the local path in place; `npm` resolves the installed package
|
|
5
|
+
* from the project's `node_modules`; `git` clones/fetches into the ref cache
|
|
6
|
+
* (or, under `--frozen`, checks out exactly the lock's pinned commit and never
|
|
7
|
+
* advances). Each package contributes its `definitions/**` and `data/**` TTL
|
|
8
|
+
* files, labelled by a stable `pkg/relative-path` so the pack's content hash is
|
|
9
|
+
* machine-independent. Reached only from the `sources update` Task body.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
13
|
+
import { createRequire } from "node:module";
|
|
14
|
+
import { dirname, join, relative } from "node:path";
|
|
15
|
+
import { RECOVERY_CLI_PREFIX } from "../../../constants.js";
|
|
16
|
+
import { PragmaError } from "../../error/PragmaError.js";
|
|
17
|
+
import { cliRecovery } from "../../error/recovery.js";
|
|
18
|
+
import { refsCacheDir } from "../paths.js";
|
|
19
|
+
import { checkoutCommit, cloneRef, fetchRef, headCommit } from "./gitOps.js";
|
|
20
|
+
import { type PackageRef, redactUrl } from "./parseRef.js";
|
|
21
|
+
|
|
22
|
+
/** A resolved package: its pinned revision and labelled RDF sources. */
|
|
23
|
+
export interface ResolvedPackage {
|
|
24
|
+
readonly name: string;
|
|
25
|
+
/** The config `packages` source ref, verbatim. */
|
|
26
|
+
readonly source: string;
|
|
27
|
+
/** The resolved commit / version / absolute path. */
|
|
28
|
+
readonly resolved: string;
|
|
29
|
+
/**
|
|
30
|
+
* The package's on-disk root — the local `file:` path, the npm install dir, or
|
|
31
|
+
* the git clone dir. Everything the package ships lives under it, so
|
|
32
|
+
* `sources update` can also discover a package's `skills/` (U10) from here.
|
|
33
|
+
*/
|
|
34
|
+
readonly root: string;
|
|
35
|
+
/** The labelled RDF sources (path label + content). */
|
|
36
|
+
readonly sources: { readonly path: string; readonly content: string }[];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Options for a resolution: whether to honour a pinned commit (`--frozen`). */
|
|
40
|
+
export interface ResolveOptions {
|
|
41
|
+
readonly cwd: string;
|
|
42
|
+
readonly frozen: boolean;
|
|
43
|
+
/** The lock's pinned revision for this package (used under `--frozen`). */
|
|
44
|
+
readonly pinned?: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** The package subdirectories scanned for `.ttl` sources. */
|
|
48
|
+
const TTL_DIRS = ["definitions", "data"];
|
|
49
|
+
|
|
50
|
+
/** Sanitize a ref for use as a cache path segment. */
|
|
51
|
+
const sanitize = (value: string): string => value.replace(/[/\\:*?"<>|]/g, "_");
|
|
52
|
+
|
|
53
|
+
/** A concise reason from a thrown subprocess/parse error: prefer captured
|
|
54
|
+
* stderr (git writes the real reason there under `stdio: "pipe"`), else the
|
|
55
|
+
* message. Used to name WHY a resolve failed without dumping a raw stack. */
|
|
56
|
+
function errorDetail(error: unknown): string {
|
|
57
|
+
if (error && typeof error === "object") {
|
|
58
|
+
const { stderr, message } = error as {
|
|
59
|
+
stderr?: unknown;
|
|
60
|
+
message?: unknown;
|
|
61
|
+
};
|
|
62
|
+
if (stderr != null) {
|
|
63
|
+
const text = String(stderr).trim();
|
|
64
|
+
if (text) return text;
|
|
65
|
+
}
|
|
66
|
+
if (typeof message === "string" && message.trim()) return message.trim();
|
|
67
|
+
}
|
|
68
|
+
return String(error);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Recursively collect `*.ttl` files under a directory (a manual walk — the
|
|
72
|
+
* compiled binary's node:fs globSync mishandles `**`, so we avoid it). */
|
|
73
|
+
function walkTtl(
|
|
74
|
+
dir: string,
|
|
75
|
+
base: string,
|
|
76
|
+
label: string,
|
|
77
|
+
out: { path: string; content: string }[],
|
|
78
|
+
): void {
|
|
79
|
+
if (!existsSync(dir)) return;
|
|
80
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
81
|
+
// Skip hidden entries (dot-prefixed): editor/partial/generated artifacts
|
|
82
|
+
// like `.modifier.dark.ttl`, and tooling dirs like `.git`, are never
|
|
83
|
+
// intended graph sources — and ingesting them ships malformed RDF into the
|
|
84
|
+
// build (a `.`-prefixed Turtle local name isn't even valid).
|
|
85
|
+
if (entry.name.startsWith(".")) continue;
|
|
86
|
+
const full = join(dir, entry.name);
|
|
87
|
+
if (entry.isDirectory()) {
|
|
88
|
+
walkTtl(full, base, label, out);
|
|
89
|
+
} else if (entry.isFile() && entry.name.endsWith(".ttl")) {
|
|
90
|
+
out.push({
|
|
91
|
+
path: `${label}/${relative(base, full)}`,
|
|
92
|
+
content: readFileSync(full, "utf-8"),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Read a package's `definitions/**` and `data/**` TTL, with stable labels. */
|
|
99
|
+
function readTtlSources(
|
|
100
|
+
rootDir: string,
|
|
101
|
+
label: string,
|
|
102
|
+
): { path: string; content: string }[] {
|
|
103
|
+
const sources: { path: string; content: string }[] = [];
|
|
104
|
+
for (const sub of TTL_DIRS) {
|
|
105
|
+
walkTtl(join(rootDir, sub), rootDir, label, sources);
|
|
106
|
+
}
|
|
107
|
+
sources.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
|
|
108
|
+
return sources;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* A Turtle/SPARQL prefix prologue declaration: `@prefix ex: <iri> .` or the
|
|
113
|
+
* keyword-form `PREFIX ex: <iri>`. Both are legal in Turtle 1.1; the keyword is
|
|
114
|
+
* case-insensitive and the leading `@` is optional, so `@?prefix` with the `i`
|
|
115
|
+
* flag covers every spelling. The label group requires at least one character,
|
|
116
|
+
* so the default-namespace form (`@prefix : <iri>`) is skipped — its `:local`
|
|
117
|
+
* tokens are not the named-prefix contract the index freezes.
|
|
118
|
+
*/
|
|
119
|
+
const PREFIX_DECL = /(?:^|\s)@?prefix\s+([^\s:]+):\s*<([^>]*)>/gi;
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Harvest a package's own `@prefix` / `PREFIX` declarations from its TTL text.
|
|
123
|
+
*
|
|
124
|
+
* ke's `createStore` does NOT fold parsed-Turtle prefixes into `store.prefixes`
|
|
125
|
+
* (TTL `@prefix` applies only within a file during parsing), so a package's
|
|
126
|
+
* namespaces are invisible to the index unless we lift them out of the source
|
|
127
|
+
* ourselves. The returned map (label → namespace IRI) is merged BELOW config
|
|
128
|
+
* precedence so the pack's own names compact to `pfx:Local` in the index.
|
|
129
|
+
*
|
|
130
|
+
* @param sources - The package's labelled RDF sources.
|
|
131
|
+
* @returns A prefix map of every named declaration found (last wins on clash).
|
|
132
|
+
*/
|
|
133
|
+
export function harvestPrefixes(
|
|
134
|
+
sources: readonly { readonly content: string }[],
|
|
135
|
+
): Record<string, string> {
|
|
136
|
+
const prefixes: Record<string, string> = {};
|
|
137
|
+
for (const { content } of sources) {
|
|
138
|
+
for (const match of content.matchAll(PREFIX_DECL)) {
|
|
139
|
+
const [, label, iri] = match;
|
|
140
|
+
if (label !== undefined && iri !== undefined) prefixes[label] = iri;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return prefixes;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Locate a package's `package.json` from the project.
|
|
148
|
+
*
|
|
149
|
+
* The direct `require.resolve("<pkg>/package.json")` throws
|
|
150
|
+
* `ERR_PACKAGE_PATH_NOT_EXPORTED` for a package whose `exports` map does not
|
|
151
|
+
* expose `./package.json` (common with modern packages) — which would be
|
|
152
|
+
* misreported as "not installed". So on failure it falls back to resolving the
|
|
153
|
+
* package entry and walking up to the `package.json` whose `name` matches.
|
|
154
|
+
*
|
|
155
|
+
* @param require - A `createRequire` bound to the project directory.
|
|
156
|
+
* @param pkg - The package name.
|
|
157
|
+
* @returns The absolute `package.json` path, or `undefined` when not installed.
|
|
158
|
+
*/
|
|
159
|
+
export function resolvePackageJson(
|
|
160
|
+
require: ReturnType<typeof createRequire>,
|
|
161
|
+
pkg: string,
|
|
162
|
+
): string | undefined {
|
|
163
|
+
try {
|
|
164
|
+
return require.resolve(`${pkg}/package.json`);
|
|
165
|
+
} catch {
|
|
166
|
+
// `exports` may not expose ./package.json — resolve the entry and walk up.
|
|
167
|
+
}
|
|
168
|
+
let current: string;
|
|
169
|
+
try {
|
|
170
|
+
current = dirname(require.resolve(pkg));
|
|
171
|
+
} catch {
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
for (let depth = 0; depth < 64; depth++) {
|
|
175
|
+
const candidate = join(current, "package.json");
|
|
176
|
+
if (existsSync(candidate)) {
|
|
177
|
+
try {
|
|
178
|
+
const parsed = JSON.parse(readFileSync(candidate, "utf-8")) as {
|
|
179
|
+
name?: unknown;
|
|
180
|
+
};
|
|
181
|
+
if (parsed.name === pkg) return candidate;
|
|
182
|
+
} catch {
|
|
183
|
+
// Unreadable or non-JSON — keep walking up.
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const parent = dirname(current);
|
|
187
|
+
if (parent === current) break;
|
|
188
|
+
current = parent;
|
|
189
|
+
}
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Resolve a package reference to its revision and RDF sources.
|
|
195
|
+
*
|
|
196
|
+
* @param ref - The parsed package reference.
|
|
197
|
+
* @param options - The cwd, frozen flag, and any pinned revision.
|
|
198
|
+
* @returns The resolved package.
|
|
199
|
+
* @throws PragmaError on a missing file path or unresolvable npm package.
|
|
200
|
+
* @throws PragmaError under `--frozen` when the package has no lock entry.
|
|
201
|
+
* @note Impure — may clone/fetch git, reads TTL from disk.
|
|
202
|
+
*/
|
|
203
|
+
export async function resolvePackage(
|
|
204
|
+
ref: PackageRef,
|
|
205
|
+
options: ResolveOptions,
|
|
206
|
+
): Promise<ResolvedPackage> {
|
|
207
|
+
// `--frozen` means "reproduce the locked state exactly". A configured package
|
|
208
|
+
// with no lock entry has nothing to reproduce, so refuse rather than silently
|
|
209
|
+
// resolving it fresh (which would advance the very state the lock pins).
|
|
210
|
+
if (options.frozen && options.pinned === undefined) {
|
|
211
|
+
throw PragmaError.configError(
|
|
212
|
+
`Cannot resolve "${ref.pkg}" under --frozen: it has no entry in the lock.`,
|
|
213
|
+
{
|
|
214
|
+
recovery: cliRecovery(
|
|
215
|
+
`${RECOVERY_CLI_PREFIX}sources update`,
|
|
216
|
+
"Update the lock without --frozen, then commit it.",
|
|
217
|
+
),
|
|
218
|
+
},
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
switch (ref.kind) {
|
|
223
|
+
case "file": {
|
|
224
|
+
if (!existsSync(ref.path)) {
|
|
225
|
+
throw PragmaError.configError(
|
|
226
|
+
`Package "${ref.pkg}" path not found: ${ref.path}.`,
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
name: ref.pkg,
|
|
231
|
+
source: ref.source,
|
|
232
|
+
resolved: ref.path,
|
|
233
|
+
root: ref.path,
|
|
234
|
+
sources: readTtlSources(ref.path, ref.pkg),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
case "npm": {
|
|
239
|
+
const require = createRequire(join(options.cwd, "noop.js"));
|
|
240
|
+
const pkgJsonPath = resolvePackageJson(require, ref.pkg);
|
|
241
|
+
if (pkgJsonPath === undefined) {
|
|
242
|
+
throw PragmaError.configError(
|
|
243
|
+
`Package "${ref.pkg}" is not installed. Add it to the project.`,
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
const dir = dirname(pkgJsonPath);
|
|
247
|
+
let version: string;
|
|
248
|
+
try {
|
|
249
|
+
version =
|
|
250
|
+
(JSON.parse(readFileSync(pkgJsonPath, "utf-8")).version as string) ??
|
|
251
|
+
"0.0.0";
|
|
252
|
+
} catch (error) {
|
|
253
|
+
// A malformed `package.json` for an otherwise-installed package: name it
|
|
254
|
+
// as a data error, not an INTERNAL_ERROR "please report this issue".
|
|
255
|
+
throw PragmaError.configError(
|
|
256
|
+
`Package "${ref.pkg}" has an invalid package.json (${pkgJsonPath}): ${errorDetail(error)}`,
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
return {
|
|
260
|
+
name: ref.pkg,
|
|
261
|
+
source: ref.source,
|
|
262
|
+
resolved: version,
|
|
263
|
+
root: dir,
|
|
264
|
+
sources: readTtlSources(dir, ref.pkg),
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
case "git": {
|
|
269
|
+
const useCommit = options.frozen && options.pinned;
|
|
270
|
+
const dir = join(
|
|
271
|
+
refsCacheDir(),
|
|
272
|
+
sanitize(ref.pkg),
|
|
273
|
+
sanitize(useCommit ? (options.pinned as string) : ref.ref),
|
|
274
|
+
);
|
|
275
|
+
let resolved: string;
|
|
276
|
+
try {
|
|
277
|
+
if (useCommit) {
|
|
278
|
+
checkoutCommit(ref.url, options.pinned as string, dir);
|
|
279
|
+
resolved = options.pinned as string;
|
|
280
|
+
} else if (existsSync(dir)) {
|
|
281
|
+
resolved = fetchRef(ref.url, ref.ref, dir);
|
|
282
|
+
} else {
|
|
283
|
+
cloneRef(ref.url, ref.ref, dir);
|
|
284
|
+
resolved = headCommit(dir);
|
|
285
|
+
}
|
|
286
|
+
} catch (error) {
|
|
287
|
+
// A git clone/fetch/checkout failed — an unreachable remote, a moved or
|
|
288
|
+
// deleted ref, an auth/credential problem, or (under --frozen) a pinned
|
|
289
|
+
// commit that is gone. Name the package + ref with git's own reason so
|
|
290
|
+
// it reads as a fixable data/reproducibility error, not INTERNAL_ERROR.
|
|
291
|
+
throw useCommit
|
|
292
|
+
? PragmaError.configError(
|
|
293
|
+
`Cannot reproduce "${ref.pkg}" under --frozen: commit ${options.pinned} could not be checked out from ${redactUrl(ref.url)}. ${errorDetail(error)}`,
|
|
294
|
+
{
|
|
295
|
+
recovery: {
|
|
296
|
+
message:
|
|
297
|
+
"The pinned commit may have been force-pushed away or the remote is unreachable. Restore access to it, or re-run `pragma sources update` without --frozen to re-pin.",
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
)
|
|
301
|
+
: PragmaError.configError(
|
|
302
|
+
`Cannot resolve "${ref.pkg}" from ${redactUrl(ref.url)}#${ref.ref}: ${errorDetail(error)}`,
|
|
303
|
+
{
|
|
304
|
+
recovery: {
|
|
305
|
+
message:
|
|
306
|
+
"Check the git URL and ref, your network, and your git credentials, then re-run the update.",
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
return {
|
|
312
|
+
name: ref.pkg,
|
|
313
|
+
source: ref.source,
|
|
314
|
+
resolved,
|
|
315
|
+
root: dir,
|
|
316
|
+
sources: readTtlSources(dir, ref.pkg),
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
5
|
+
import type { ConfigLayers } from "../config/types.js";
|
|
6
|
+
import { loadStoreSession } from "./loadSession.js";
|
|
7
|
+
import { writeLock } from "./lock.js";
|
|
8
|
+
import { packDir } from "./paths.js";
|
|
9
|
+
import { resolveSources } from "./resolveSources.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Pin the store-boot decision table (`resolveSources`) — especially the two
|
|
13
|
+
* STORE_UNAVAILABLE rows and the single `pragma sources update` recovery — so
|
|
14
|
+
* the error/recovery UX PR3+ leans on cannot drift silently.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
let roots: string[] = [];
|
|
18
|
+
const tmp = (): string => {
|
|
19
|
+
const dir = mkdtempSync(join(tmpdir(), "pragma-resolvesrc-"));
|
|
20
|
+
roots.push(dir);
|
|
21
|
+
return dir;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/** Config layers whose only relevant knob is the `packages` origin. */
|
|
25
|
+
function layersWith(packagesOrigin: "default" | "project"): ConfigLayers {
|
|
26
|
+
return {
|
|
27
|
+
config: {
|
|
28
|
+
channel: "normal",
|
|
29
|
+
packages:
|
|
30
|
+
packagesOrigin === "project"
|
|
31
|
+
? [{ name: "x", source: "file:///x" }]
|
|
32
|
+
: [],
|
|
33
|
+
},
|
|
34
|
+
origins: {
|
|
35
|
+
tier: "default",
|
|
36
|
+
channel: "default",
|
|
37
|
+
detail: "default",
|
|
38
|
+
packages: packagesOrigin,
|
|
39
|
+
stories: "default",
|
|
40
|
+
prefixes: "default",
|
|
41
|
+
prompts: "default",
|
|
42
|
+
},
|
|
43
|
+
global: { path: "/nonexistent", exists: false },
|
|
44
|
+
project: { exists: false },
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Write a pack's manifest.json at the given hash (the completeness marker). */
|
|
49
|
+
function writeManifest(dir: string, hash: string): void {
|
|
50
|
+
writeFileSync(
|
|
51
|
+
join(dir, "manifest.json"),
|
|
52
|
+
JSON.stringify({
|
|
53
|
+
name: "t",
|
|
54
|
+
version: "0",
|
|
55
|
+
sourceRef: "t",
|
|
56
|
+
contentHash: hash,
|
|
57
|
+
prefixes: {},
|
|
58
|
+
createdAt: new Date().toISOString(),
|
|
59
|
+
}),
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Materialize a COMPLETE pack — manifest + non-empty dump, schema, and index. */
|
|
64
|
+
function writeCompletePack(hash: string): string {
|
|
65
|
+
const dir = packDir(hash);
|
|
66
|
+
mkdirSync(dir, { recursive: true });
|
|
67
|
+
writeFileSync(join(dir, "data.nq"), "<urn:s> <urn:p> <urn:o> .\n");
|
|
68
|
+
writeFileSync(join(dir, "schema.json"), "{}");
|
|
69
|
+
writeFileSync(join(dir, "index.json"), "{}");
|
|
70
|
+
writeManifest(dir, hash);
|
|
71
|
+
return dir;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
beforeEach(() => {
|
|
75
|
+
roots = [];
|
|
76
|
+
});
|
|
77
|
+
afterEach(() => {
|
|
78
|
+
for (const dir of roots) rmSync(dir, { recursive: true, force: true });
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
describe("resolveSources decision table", () => {
|
|
82
|
+
it("lock present + pack cached → load the locked pack", () => {
|
|
83
|
+
const cwd = tmp();
|
|
84
|
+
const hash = "a".repeat(64);
|
|
85
|
+
const dir = writeCompletePack(hash);
|
|
86
|
+
writeLock(cwd, { version: 1, contentHash: hash, packs: [] });
|
|
87
|
+
|
|
88
|
+
expect(resolveSources(layersWith("default"), cwd)).toEqual({
|
|
89
|
+
kind: "pack",
|
|
90
|
+
dir,
|
|
91
|
+
contentHash: hash,
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it("lock present + pack evicted → STORE_UNAVAILABLE", () => {
|
|
96
|
+
const cwd = tmp();
|
|
97
|
+
// A lock whose content-addressed pack is absent from the cache.
|
|
98
|
+
writeLock(cwd, { version: 1, contentHash: "b".repeat(64), packs: [] });
|
|
99
|
+
|
|
100
|
+
expect(resolveSources(layersWith("default"), cwd)).toEqual({
|
|
101
|
+
kind: "unavailable",
|
|
102
|
+
reason: "the locked pack is missing from the cache",
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("lock present + pack with a torn schema/index → STORE_UNAVAILABLE", () => {
|
|
107
|
+
const cwd = tmp();
|
|
108
|
+
const hash = "c".repeat(64);
|
|
109
|
+
// manifest + non-empty dump present, but the extracted schema/index are
|
|
110
|
+
// missing (a torn or partially-evicted pack). This used to slip through
|
|
111
|
+
// `packIsComplete` and then crash at read time as an INTERNAL error; it must
|
|
112
|
+
// now be treated as not-built so the boot surfaces STORE_UNAVAILABLE.
|
|
113
|
+
const dir = packDir(hash);
|
|
114
|
+
mkdirSync(dir, { recursive: true });
|
|
115
|
+
writeFileSync(join(dir, "data.nq"), "<urn:s> <urn:p> <urn:o> .\n");
|
|
116
|
+
writeManifest(dir, hash);
|
|
117
|
+
writeLock(cwd, { version: 1, contentHash: hash, packs: [] });
|
|
118
|
+
|
|
119
|
+
expect(resolveSources(layersWith("default"), cwd)).toEqual({
|
|
120
|
+
kind: "unavailable",
|
|
121
|
+
reason: "the locked pack is missing from the cache",
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it("no lock + default packages → embedded fallback", () => {
|
|
126
|
+
expect(resolveSources(layersWith("default"), tmp())).toEqual({
|
|
127
|
+
kind: "embedded",
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it("no lock + packages configured → STORE_UNAVAILABLE", () => {
|
|
132
|
+
expect(resolveSources(layersWith("project"), tmp())).toEqual({
|
|
133
|
+
kind: "unavailable",
|
|
134
|
+
reason: "packages are configured but the store has not been built",
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
describe("loadStoreSession recovery", () => {
|
|
140
|
+
it("surfaces the `pragma sources update` recovery (CLI + MCP tool) when cold", async () => {
|
|
141
|
+
const cwd = tmp();
|
|
142
|
+
const ctx = { cwd, loadConfig: async () => layersWith("project") };
|
|
143
|
+
|
|
144
|
+
// An agent can't run a shell command — the recovery also names the tool it
|
|
145
|
+
// calls (then retries: PR9 C1 cold-store retry makes the retry succeed).
|
|
146
|
+
await expect(loadStoreSession(ctx)).rejects.toMatchObject({
|
|
147
|
+
code: "STORE_UNAVAILABLE",
|
|
148
|
+
recovery: {
|
|
149
|
+
cli: "pragma sources update",
|
|
150
|
+
mcp: { tool: "sources_update" },
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
});
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The store-boot decision table — storeless, and the single place the boot
|
|
3
|
+
* strategy is decided.
|
|
4
|
+
*
|
|
5
|
+
* Boot never touches the network. From the lock and the resolved config:
|
|
6
|
+
*
|
|
7
|
+
* | lock present | pack cached | packages origin | → decision |
|
|
8
|
+
* |--------------|-------------|-----------------|-----------------------|
|
|
9
|
+
* | yes | yes | — | load the locked pack |
|
|
10
|
+
* | yes | no | — | STORE_UNAVAILABLE |
|
|
11
|
+
* | no | — | default | embedded fallback |
|
|
12
|
+
* | no | — | configured | STORE_UNAVAILABLE |
|
|
13
|
+
*
|
|
14
|
+
* A configured-but-unbuilt store (or a lock whose pack the cache lost)
|
|
15
|
+
* surfaces STORE_UNAVAILABLE with a single recovery: `pragma sources update`.
|
|
16
|
+
* "packages origin default" means the user has not pinned their own packages —
|
|
17
|
+
* a fresh install — so the embedded fallback answers reads offline.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import type { ConfigLayers } from "../config/types.js";
|
|
21
|
+
import { packIsComplete } from "./graphpack/manifest.js";
|
|
22
|
+
import { readLock } from "./lock.js";
|
|
23
|
+
import { packDir } from "./paths.js";
|
|
24
|
+
|
|
25
|
+
/** The resolved boot strategy. */
|
|
26
|
+
export type SourcesDecision =
|
|
27
|
+
| {
|
|
28
|
+
readonly kind: "pack";
|
|
29
|
+
readonly dir: string;
|
|
30
|
+
readonly contentHash: string;
|
|
31
|
+
}
|
|
32
|
+
| { readonly kind: "embedded" }
|
|
33
|
+
| { readonly kind: "unavailable"; readonly reason: string };
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Decide how (or whether) to boot the store — without any network or store I/O.
|
|
37
|
+
*
|
|
38
|
+
* @param layers - The resolved config layers (for the `packages` origin).
|
|
39
|
+
* @param cwd - The project directory (for the lock).
|
|
40
|
+
* @returns The boot decision.
|
|
41
|
+
* @note Impure — reads the lock and probes the pack cache.
|
|
42
|
+
*/
|
|
43
|
+
export function resolveSources(
|
|
44
|
+
layers: ConfigLayers,
|
|
45
|
+
cwd: string,
|
|
46
|
+
): SourcesDecision {
|
|
47
|
+
const lock = readLock(cwd);
|
|
48
|
+
if (lock) {
|
|
49
|
+
const dir = packDir(lock.contentHash);
|
|
50
|
+
if (packIsComplete(dir)) {
|
|
51
|
+
return { kind: "pack", dir, contentHash: lock.contentHash };
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
kind: "unavailable",
|
|
55
|
+
reason: "the locked pack is missing from the cache",
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (layers.origins.packages === "default") {
|
|
60
|
+
return { kind: "embedded" };
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
kind: "unavailable",
|
|
64
|
+
reason: "packages are configured but the store has not been built",
|
|
65
|
+
};
|
|
66
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the lazy store's long-lived-server behaviour (PR9 Stream 3):
|
|
3
|
+
*
|
|
4
|
+
* - C1: a REJECTED boot is not memoized, so a retry after STORE_UNAVAILABLE can
|
|
5
|
+
* succeed once `sources update` has built the pack (the failure mode that
|
|
6
|
+
* strands an MCP session until a full server restart).
|
|
7
|
+
* - `invalidate()`: drops the memoized session so the next `get()` re-boots, and
|
|
8
|
+
* fires the `onInvalidate` hook the runtime wires to also clear its config memo.
|
|
9
|
+
*
|
|
10
|
+
* The loader is a hard-wired `await import("./loadSession.js")`, so we mock that
|
|
11
|
+
* module to drive success/failure across calls without booting oxigraph.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { describe, expect, it, vi } from "vitest";
|
|
15
|
+
import type { ConfigLayers } from "../config/types.js";
|
|
16
|
+
import { PragmaError } from "../error/PragmaError.js";
|
|
17
|
+
import { createLazyStore, type LazyStoreContext } from "./store.js";
|
|
18
|
+
import type { StoreSession } from "./types.js";
|
|
19
|
+
|
|
20
|
+
// Hoisted so the (hoisted) `vi.mock` factory below can close over it.
|
|
21
|
+
const loadStoreSession = vi.hoisted(() => vi.fn());
|
|
22
|
+
vi.mock("./loadSession.js", () => ({ loadStoreSession }));
|
|
23
|
+
|
|
24
|
+
/** A stand-in session — the store never inspects it, so identity is enough. */
|
|
25
|
+
const fakeSession = { marker: "session" } as unknown as StoreSession;
|
|
26
|
+
|
|
27
|
+
/** A minimal, correctly-typed ctx (the mocked loader ignores it). */
|
|
28
|
+
function makeCtx(onInvalidate?: () => void): LazyStoreContext {
|
|
29
|
+
return {
|
|
30
|
+
cwd: "/fixture",
|
|
31
|
+
loadConfig: async () => ({}) as unknown as ConfigLayers,
|
|
32
|
+
...(onInvalidate ? { onInvalidate } : {}),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
describe("createLazyStore — cold-boot recovery (C1)", () => {
|
|
37
|
+
it("does not memoize a rejected boot: a retry after STORE_UNAVAILABLE can succeed", async () => {
|
|
38
|
+
loadStoreSession.mockReset();
|
|
39
|
+
// Cold on the first attempt, then warm (as if `sources update` ran between).
|
|
40
|
+
loadStoreSession
|
|
41
|
+
.mockRejectedValueOnce(PragmaError.storeUnavailable("no pack"))
|
|
42
|
+
.mockResolvedValueOnce(fakeSession);
|
|
43
|
+
|
|
44
|
+
const store = createLazyStore(makeCtx());
|
|
45
|
+
|
|
46
|
+
await expect(store.get()).rejects.toMatchObject({
|
|
47
|
+
code: "STORE_UNAVAILABLE",
|
|
48
|
+
});
|
|
49
|
+
// The failed boot left the store cold — the rejection was NOT memoized.
|
|
50
|
+
expect(store.booted).toBe(false);
|
|
51
|
+
|
|
52
|
+
// The retry re-attempts the loader (not a memoized rejection) and resolves.
|
|
53
|
+
await expect(store.get()).resolves.toBe(fakeSession);
|
|
54
|
+
expect(store.booted).toBe(true);
|
|
55
|
+
expect(loadStoreSession).toHaveBeenCalledTimes(2);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
describe("createLazyStore — invalidate()", () => {
|
|
60
|
+
it("memoizes a successful boot until invalidated", async () => {
|
|
61
|
+
loadStoreSession.mockReset();
|
|
62
|
+
loadStoreSession.mockResolvedValue(fakeSession);
|
|
63
|
+
|
|
64
|
+
const store = createLazyStore(makeCtx());
|
|
65
|
+
await store.get();
|
|
66
|
+
await store.get();
|
|
67
|
+
|
|
68
|
+
// A successful session is memoized: the second get() does not re-boot.
|
|
69
|
+
expect(loadStoreSession).toHaveBeenCalledTimes(1);
|
|
70
|
+
expect(store.booted).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("drops the memo, re-boots on the next get(), and fires onInvalidate", async () => {
|
|
74
|
+
loadStoreSession.mockReset();
|
|
75
|
+
loadStoreSession.mockResolvedValue(fakeSession);
|
|
76
|
+
const onInvalidate = vi.fn();
|
|
77
|
+
|
|
78
|
+
const store = createLazyStore(makeCtx(onInvalidate));
|
|
79
|
+
await store.get();
|
|
80
|
+
expect(store.booted).toBe(true);
|
|
81
|
+
expect(loadStoreSession).toHaveBeenCalledTimes(1);
|
|
82
|
+
|
|
83
|
+
store.invalidate();
|
|
84
|
+
|
|
85
|
+
// booted resets and the sibling-cache hook fires...
|
|
86
|
+
expect(store.booted).toBe(false);
|
|
87
|
+
expect(onInvalidate).toHaveBeenCalledTimes(1);
|
|
88
|
+
|
|
89
|
+
// ...so the next get() re-boots against (potentially new) on-disk state.
|
|
90
|
+
await store.get();
|
|
91
|
+
expect(store.booted).toBe(true);
|
|
92
|
+
expect(loadStoreSession).toHaveBeenCalledTimes(2);
|
|
93
|
+
});
|
|
94
|
+
});
|