@canonical/pragma-cli 0.31.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -421
- package/dist/pragma +0 -0
- package/package.json +28 -42
- package/src/bin.ts +292 -11
- package/src/capabilities/block/blockList.test.ts +79 -0
- package/src/capabilities/block/blockList.verb.ts +163 -0
- package/src/capabilities/block/index.ts +25 -0
- package/src/capabilities/block/pack.ts +166 -0
- package/src/capabilities/block/parity.test.ts +187 -0
- package/src/capabilities/block/tierChain.ts +78 -0
- package/src/capabilities/capabilities/capabilities.render.ts +89 -0
- package/src/capabilities/capabilities/capabilities.test.ts +140 -0
- package/src/capabilities/capabilities/capabilities.verb.ts +48 -0
- package/src/capabilities/capabilities/catalog.ts +148 -0
- package/src/capabilities/capabilities/hints.ts +212 -0
- package/src/capabilities/capabilities/index.ts +13 -0
- package/src/capabilities/capabilities/types.ts +60 -0
- package/src/capabilities/colophon/collectColophon.ts +68 -0
- package/src/capabilities/colophon/colophon.render.test.ts +114 -0
- package/src/capabilities/colophon/colophon.render.ts +47 -0
- package/src/capabilities/colophon/colophon.test.ts +241 -0
- package/src/capabilities/colophon/colophon.verb.ts +44 -0
- package/src/capabilities/colophon/index.ts +6 -0
- package/src/capabilities/colophon/markdownTerminal.test.ts +50 -0
- package/src/capabilities/colophon/markdownTerminal.ts +104 -0
- package/src/capabilities/colophon/pragmaColophon.ts +66 -0
- package/src/capabilities/colophon/types.ts +29 -0
- package/src/capabilities/config/collectConfigShow.ts +32 -0
- package/src/capabilities/config/field.render.ts +28 -0
- package/src/capabilities/config/fields.ts +81 -0
- package/src/capabilities/config/index.ts +6 -0
- package/src/capabilities/config/runField.ts +59 -0
- package/src/capabilities/config/runSet.ts +38 -0
- package/src/capabilities/config/set.test.ts +207 -0
- package/src/capabilities/config/set.verb.ts +70 -0
- package/src/capabilities/config/show.render.test.ts +65 -0
- package/src/capabilities/config/show.render.ts +107 -0
- package/src/capabilities/config/show.verb.ts +45 -0
- package/src/capabilities/config/types.ts +27 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +88 -0
- package/src/capabilities/create/byteEquality.test.ts +225 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +152 -0
- package/src/capabilities/create/create.mcp.test.ts +139 -0
- package/src/capabilities/create/create.render.ts +50 -0
- package/src/capabilities/create/create.test.ts +432 -0
- package/src/capabilities/create/create.verb.ts +493 -0
- package/src/capabilities/create/cwdJail.test.ts +129 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +111 -0
- package/src/capabilities/create/index.ts +25 -0
- package/src/capabilities/create/pathJail.ts +73 -0
- package/src/capabilities/create/pickGenerator.ts +63 -0
- package/src/capabilities/create/templates.embedded.generated.ts +53 -0
- package/src/capabilities/create/types.ts +8 -0
- package/src/capabilities/doctor/checks/checkConfigFile.ts +41 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +39 -0
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +114 -0
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +67 -0
- package/src/capabilities/doctor/checks/checkNodeVersion.ts +25 -0
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +73 -0
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +22 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +111 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +131 -0
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +60 -0
- package/src/capabilities/doctor/checks/deriveBand.test.ts +42 -0
- package/src/capabilities/doctor/checks/deriveBand.ts +28 -0
- package/src/capabilities/doctor/doctor.render.test.ts +170 -0
- package/src/capabilities/doctor/doctor.render.ts +198 -0
- package/src/capabilities/doctor/doctor.test.ts +209 -0
- package/src/capabilities/doctor/doctor.verb.ts +46 -0
- package/src/capabilities/doctor/index.ts +6 -0
- package/src/capabilities/doctor/runChecks.ts +100 -0
- package/src/capabilities/doctor/types.ts +56 -0
- package/src/capabilities/emptyRecovery.test.ts +112 -0
- package/src/capabilities/graph/index.ts +21 -0
- package/src/capabilities/graph/inspect.render.ts +38 -0
- package/src/capabilities/graph/inspect.test.ts +80 -0
- package/src/capabilities/graph/inspect.verb.ts +51 -0
- package/src/capabilities/graph/query.render.ts +77 -0
- package/src/capabilities/graph/query.test.ts +156 -0
- package/src/capabilities/graph/query.verb.ts +58 -0
- package/src/capabilities/graph/runQuery.ts +49 -0
- package/src/capabilities/index.ts +54 -0
- package/src/capabilities/info/collectInfo.ts +76 -0
- package/src/capabilities/info/index.ts +6 -0
- package/src/capabilities/info/info.render.ts +72 -0
- package/src/capabilities/info/info.test.ts +127 -0
- package/src/capabilities/info/info.verb.ts +46 -0
- package/src/capabilities/info/types.ts +42 -0
- package/src/capabilities/lazy.test.ts +89 -0
- package/src/capabilities/meta/complete.verb.ts +52 -0
- package/src/capabilities/meta/index.ts +15 -0
- package/src/capabilities/meta/mcp.verb.ts +35 -0
- package/src/capabilities/modifier/index.ts +15 -0
- package/src/capabilities/modifier/pack.ts +64 -0
- package/src/capabilities/ontology/index.ts +19 -0
- package/src/capabilities/ontology/ontology.test.ts +246 -0
- package/src/capabilities/ontology/queries.ts +197 -0
- package/src/capabilities/ontology/render.ts +87 -0
- package/src/capabilities/ontology/verbs.ts +269 -0
- package/src/capabilities/prompt/index.ts +18 -0
- package/src/capabilities/prompt/prompt.render.test.ts +94 -0
- package/src/capabilities/prompt/prompt.render.ts +87 -0
- package/src/capabilities/prompt/prompt.test.ts +180 -0
- package/src/capabilities/prompt/types.ts +30 -0
- package/src/capabilities/prompt/verbs.ts +93 -0
- package/src/capabilities/reference.test.ts +32 -0
- package/src/capabilities/resources/index.ts +15 -0
- package/src/capabilities/resources/provider.ts +245 -0
- package/src/capabilities/resources/resources.test.ts +213 -0
- package/src/capabilities/roundtrip.test.ts +107 -0
- package/src/capabilities/scopeTypeSync.test.ts +37 -0
- package/src/capabilities/setup/index.ts +12 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +141 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +403 -0
- package/src/capabilities/setup/operations/setupLsp.ts +105 -0
- package/src/capabilities/setup/operations/setupMcp.ts +262 -0
- package/src/capabilities/setup/operations/setupSkills.ts +205 -0
- package/src/capabilities/setup/setup.render.test.ts +109 -0
- package/src/capabilities/setup/setup.render.ts +96 -0
- package/src/capabilities/setup/setup.test.ts +702 -0
- package/src/capabilities/setup/setup.verb.ts +261 -0
- package/src/capabilities/setup/shell.ts +85 -0
- package/src/capabilities/setup/types.ts +99 -0
- package/src/capabilities/shared/assertExecOk.ts +106 -0
- package/src/capabilities/shared/bands.ts +16 -0
- package/src/capabilities/shared/packageManager.ts +62 -0
- package/src/capabilities/shared/registry.ts +70 -0
- package/src/capabilities/skill/discover.ts +178 -0
- package/src/capabilities/skill/index.ts +12 -0
- package/src/capabilities/skill/render.ts +60 -0
- package/src/capabilities/skill/skill.test.ts +142 -0
- package/src/capabilities/skill/verbs.ts +100 -0
- package/src/capabilities/sources/collectStatus.ts +102 -0
- package/src/capabilities/sources/index.ts +15 -0
- package/src/capabilities/sources/installSkills.ts +124 -0
- package/src/capabilities/sources/runUpdate.ts +464 -0
- package/src/capabilities/sources/sources.test.ts +828 -0
- package/src/capabilities/sources/status.render.test.ts +65 -0
- package/src/capabilities/sources/status.render.ts +83 -0
- package/src/capabilities/sources/status.verb.ts +42 -0
- package/src/capabilities/sources/types.ts +51 -0
- package/src/capabilities/sources/update.render.ts +35 -0
- package/src/capabilities/sources/update.verb.ts +76 -0
- package/src/capabilities/standard/index.ts +18 -0
- package/src/capabilities/standard/pack.ts +128 -0
- package/src/capabilities/standard/parity.test.ts +208 -0
- package/src/capabilities/surface.test.ts +233 -0
- package/src/capabilities/tier/index.ts +19 -0
- package/src/capabilities/tier/lookup.render.test.ts +72 -0
- package/src/capabilities/tier/lookup.render.ts +59 -0
- package/src/capabilities/tier/lookup.test.ts +83 -0
- package/src/capabilities/tier/lookup.verb.ts +44 -0
- package/src/capabilities/tier/pack.ts +28 -0
- package/src/capabilities/tier/runLookup.ts +87 -0
- package/src/capabilities/token/addConfig.render.ts +27 -0
- package/src/capabilities/token/addConfig.test.ts +62 -0
- package/src/capabilities/token/addConfig.verb.ts +40 -0
- package/src/capabilities/token/index.ts +19 -0
- package/src/capabilities/token/pack.ts +58 -0
- package/src/capabilities/token/runAddConfig.ts +95 -0
- package/src/capabilities/upgrade/index.ts +6 -0
- package/src/capabilities/upgrade/runUpgrade.ts +119 -0
- package/src/capabilities/upgrade/types.ts +21 -0
- package/src/capabilities/upgrade/upgrade.render.ts +55 -0
- package/src/capabilities/upgrade/upgrade.test.ts +372 -0
- package/src/capabilities/upgrade/upgrade.verb.ts +56 -0
- package/src/constants.test.ts +33 -0
- package/src/constants.ts +38 -70
- package/src/index.ts +27 -122
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +339 -0
- package/src/kernel/completion/bashDrive.test.ts +73 -0
- package/src/kernel/completion/complete.test.ts +99 -0
- package/src/kernel/completion/complete.ts +77 -0
- package/src/kernel/completion/emitScripts.test.ts +173 -0
- package/src/kernel/completion/emitScripts.ts +122 -0
- package/src/kernel/completion/entitySource.test.ts +198 -0
- package/src/kernel/completion/entitySource.ts +277 -0
- package/src/kernel/completion/index.ts +42 -0
- package/src/kernel/completion/model.test.ts +405 -0
- package/src/kernel/completion/model.ts +258 -0
- package/src/kernel/completion/parse.test.ts +336 -0
- package/src/kernel/completion/parse.ts +294 -0
- package/src/kernel/completion/rank.test.ts +100 -0
- package/src/kernel/completion/rank.ts +118 -0
- package/src/kernel/completion/resolve.test.ts +204 -0
- package/src/kernel/completion/resolve.ts +133 -0
- package/src/kernel/completion/safety.test.ts +374 -0
- package/src/kernel/completion/templates/bash.ts +249 -0
- package/src/kernel/completion/templates/fish.ts +245 -0
- package/src/kernel/completion/templates/shared.ts +134 -0
- package/src/kernel/completion/templates/zsh.ts +246 -0
- package/src/kernel/completion/types.ts +153 -0
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +11 -0
- package/src/kernel/config/defaults.ts +28 -0
- package/src/kernel/config/evaluateProjectConfig.ts +119 -0
- package/src/kernel/config/findProjectConfig.ts +45 -0
- package/src/kernel/config/firstRun.test.ts +60 -0
- package/src/kernel/config/firstRun.ts +91 -0
- package/src/kernel/config/globalConfig.ts +94 -0
- package/src/kernel/config/index.ts +35 -0
- package/src/kernel/config/paths.ts +39 -0
- package/src/kernel/config/readConfig.test.ts +245 -0
- package/src/kernel/config/readConfig.ts +94 -0
- package/src/kernel/config/schema.ts +56 -0
- package/src/kernel/config/types.ts +106 -0
- package/src/kernel/config/writeConfigField.ts +82 -0
- package/src/kernel/error/PragmaError.test.ts +119 -0
- package/src/kernel/error/PragmaError.ts +182 -0
- package/src/kernel/error/constants.ts +38 -0
- package/src/kernel/error/fromTaskError.test.ts +83 -0
- package/src/kernel/error/fromTaskError.ts +80 -0
- package/src/kernel/error/index.ts +23 -0
- package/src/kernel/error/recovery.test.ts +60 -0
- package/src/kernel/error/recovery.ts +49 -0
- package/src/kernel/error/renderError.ts +101 -0
- package/src/kernel/error/serialize.ts +28 -0
- package/src/kernel/error/types.ts +62 -0
- package/src/kernel/packs/collect.test.ts +138 -0
- package/src/kernel/packs/collect.ts +108 -0
- package/src/kernel/packs/compile.test.ts +229 -0
- package/src/kernel/packs/compile.ts +315 -0
- package/src/kernel/packs/disclosure.test.ts +200 -0
- package/src/kernel/packs/disclosure.ts +98 -0
- package/src/kernel/packs/glob.ts +39 -0
- package/src/kernel/packs/graphql/buildLookupDocument.ts +397 -0
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +217 -0
- package/src/kernel/packs/graphql/nameMap.ts +67 -0
- package/src/kernel/packs/graphqlSource.test.ts +383 -0
- package/src/kernel/packs/iri.ts +78 -0
- package/src/kernel/packs/renderPack.ts +196 -0
- package/src/kernel/packs/resolveEntity.ts +232 -0
- package/src/kernel/packs/runBodies.ts +157 -0
- package/src/kernel/packs/sample.ts +60 -0
- package/src/kernel/packs/schema.ts +328 -0
- package/src/kernel/packs/sparql/applyFilters.ts +83 -0
- package/src/kernel/packs/sparql/applySearch.ts +33 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +180 -0
- package/src/kernel/packs/sparql/escape.ts +22 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +80 -0
- package/src/kernel/packs/sparql/runSelect.ts +84 -0
- package/src/kernel/packs/toolDescription.test.ts +81 -0
- package/src/kernel/packs/types.ts +337 -0
- package/src/kernel/packs/uniqueness.ts +35 -0
- package/src/kernel/project/cli/buildProgram.test.ts +431 -0
- package/src/kernel/project/cli/buildProgram.ts +291 -0
- package/src/kernel/project/cli/dispatch.test.ts +288 -0
- package/src/kernel/project/cli/dispatch.ts +334 -0
- package/src/kernel/project/cli/exitCodes.test.ts +59 -0
- package/src/kernel/project/cli/exitCodes.ts +68 -0
- package/src/kernel/project/cli/globalFlags.test.ts +107 -0
- package/src/kernel/project/cli/globalFlags.ts +149 -0
- package/src/kernel/project/cli/helpFormat.ts +58 -0
- package/src/kernel/project/cli/index.ts +21 -0
- package/src/kernel/project/cli/interactionSeam.test.ts +99 -0
- package/src/kernel/project/cli/rootHelp.ts +220 -0
- package/src/kernel/project/cli/suggest.test.ts +54 -0
- package/src/kernel/project/cli/suggest.ts +67 -0
- package/src/kernel/project/cli/suggestNames.ts +122 -0
- package/src/kernel/project/cli/verbHelp.test.ts +138 -0
- package/src/kernel/project/cli/verbHelp.ts +144 -0
- package/src/kernel/project/mcp/buildServer.ts +70 -0
- package/src/kernel/project/mcp/envelope.ts +44 -0
- package/src/kernel/project/mcp/index.ts +8 -0
- package/src/kernel/project/mcp/instructions.ts +48 -0
- package/src/kernel/project/mcp/mcpError.ts +52 -0
- package/src/kernel/project/mcp/parity.test.ts +72 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +104 -0
- package/src/kernel/project/mcp/prompts/provider.ts +104 -0
- package/src/kernel/project/mcp/prompts/source.ts +194 -0
- package/src/kernel/project/mcp/registerVerb.test.ts +238 -0
- package/src/kernel/project/mcp/registerVerb.ts +296 -0
- package/src/kernel/project/mcp/serve.ts +34 -0
- package/src/kernel/project/mcp/toolDescriptions.test.ts +80 -0
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +127 -0
- package/src/kernel/render/compactUri.ts +25 -0
- package/src/kernel/render/contracts.ts +72 -0
- package/src/kernel/render/disclosure.ts +44 -0
- package/src/kernel/render/envelope.ts +50 -0
- package/src/kernel/render/formatters.ts +31 -0
- package/src/kernel/render/index.ts +30 -0
- package/src/kernel/render/prefixes.ts +21 -0
- package/src/kernel/render/renderers.test.ts +205 -0
- package/src/kernel/render/renderers.ts +447 -0
- package/src/kernel/render/style.test.ts +31 -0
- package/src/kernel/render/style.ts +74 -0
- package/src/kernel/render/writeStdout.test.ts +43 -0
- package/src/kernel/render/writeStdout.ts +49 -0
- package/src/kernel/runtime/boot.test.ts +69 -0
- package/src/kernel/runtime/boot.ts +59 -0
- package/src/kernel/runtime/facade.test.ts +125 -0
- package/src/kernel/runtime/facade.ts +47 -0
- package/src/kernel/runtime/graphpack/build.ts +176 -0
- package/src/kernel/runtime/graphpack/buildIndex.test.ts +103 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +317 -0
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -0
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -0
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +39 -0
- package/src/kernel/runtime/graphpack/embedded.ts +70 -0
- package/src/kernel/runtime/graphpack/graphpack.test.ts +221 -0
- package/src/kernel/runtime/graphpack/hash.ts +46 -0
- package/src/kernel/runtime/graphpack/index.ts +21 -0
- package/src/kernel/runtime/graphpack/manifest.ts +55 -0
- package/src/kernel/runtime/graphpack/read.ts +117 -0
- package/src/kernel/runtime/graphpack/types.ts +125 -0
- package/src/kernel/runtime/index.ts +15 -0
- package/src/kernel/runtime/loadSession.ts +48 -0
- package/src/kernel/runtime/lock.ts +90 -0
- package/src/kernel/runtime/paths.ts +37 -0
- package/src/kernel/runtime/probe.test.ts +16 -0
- package/src/kernel/runtime/probe.ts +39 -0
- package/src/kernel/runtime/readEntity.ts +83 -0
- package/src/kernel/runtime/refs/gitOps.ts +88 -0
- package/src/kernel/runtime/refs/parseRef.test.ts +34 -0
- package/src/kernel/runtime/refs/parseRef.ts +103 -0
- package/src/kernel/runtime/refs/resolve.ts +380 -0
- package/src/kernel/runtime/resolveSources.test.ts +154 -0
- package/src/kernel/runtime/resolveSources.ts +66 -0
- package/src/kernel/runtime/store.test.ts +94 -0
- package/src/kernel/runtime/store.ts +90 -0
- package/src/kernel/runtime/storeReadiness.ts +61 -0
- package/src/kernel/runtime/storeless.test.ts +86 -0
- package/src/kernel/runtime/types.ts +210 -0
- package/src/kernel/runtime/wasmEmbed.test.ts +144 -0
- package/src/kernel/spec/asVerb.ts +23 -0
- package/src/kernel/spec/emitReference.test.ts +196 -0
- package/src/kernel/spec/emitReference.ts +491 -0
- package/src/kernel/spec/emitSurface.test.ts +65 -0
- package/src/kernel/spec/emitSurface.ts +225 -0
- package/src/kernel/spec/index.ts +36 -0
- package/src/kernel/spec/surfaceConformance.test.ts +94 -0
- package/src/kernel/spec/surfaceConformance.ts +135 -0
- package/src/kernel/spec/types.ts +233 -0
- package/src/kernel/spec/validate.test.ts +81 -0
- package/src/kernel/spec/validate.ts +125 -0
- package/src/testing/PARITY_GAPS.test.ts +32 -0
- package/src/testing/PARITY_GAPS.ts +179 -0
- package/src/testing/behavioral/README.md +164 -0
- package/src/testing/behavioral/agentSession.mcp.test.ts +160 -0
- package/src/testing/behavioral/autoLlm.e2e.test.ts +54 -0
- package/src/testing/behavioral/completion.test.ts +132 -0
- package/src/testing/behavioral/disclosure.test.ts +115 -0
- package/src/testing/behavioral/docExamples.test.ts +283 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +120 -0
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +124 -0
- package/src/testing/behavioral/exitCodes.e2e.test.ts +53 -0
- package/src/testing/behavioral/firstRun.e2e.test.ts +40 -0
- package/src/testing/behavioral/harness.foundation.test.ts +136 -0
- package/src/testing/behavioral/journeys.cli.test.ts +131 -0
- package/src/testing/behavioral/journeys.defaultPack.test.ts +571 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +66 -0
- package/src/testing/behavioral/journeys.livePack.e2e.test.ts +129 -0
- package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +176 -0
- package/src/testing/behavioral/liveReadSurface.ts +80 -0
- package/src/testing/behavioral/mcpServe.e2e.test.ts +21 -0
- package/src/testing/behavioral/mcpSurface.test.ts +139 -0
- package/src/testing/behavioral/parity.test.ts +224 -0
- package/src/testing/behavioral/rootCli.e2e.test.ts +62 -0
- package/src/testing/behavioral/staleCommands.test.ts +76 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +201 -0
- package/src/testing/eval/cases/assembly.ts +195 -0
- package/src/testing/eval/cases/effectful.ts +248 -0
- package/src/testing/eval/cases/readNouns.ts +235 -0
- package/src/testing/eval/cases/stable.ts +163 -0
- package/src/testing/eval/eval.test.ts +74 -0
- package/src/testing/eval/harness.ts +91 -0
- package/src/testing/eval/report.ts +58 -0
- package/src/testing/fixtures/blockGraph.ts +112 -0
- package/src/testing/fixtures/completionFixture.ts +239 -0
- package/src/testing/fixtures/fixtureCapability.ts +331 -0
- package/src/testing/fixtures/graph/canonical.ts +184 -0
- package/src/testing/fixtures/graph/defaultPack.ts +178 -0
- package/src/testing/fixtures/graph/owlExport.ts +95 -0
- package/src/testing/fixtures/packs/recipe.ts +78 -0
- package/src/testing/helpers/extractSnippets.ts +29 -0
- package/src/testing/helpers/fixtureGraph.ts +148 -0
- package/src/testing/helpers/golden.ts +45 -0
- package/src/testing/helpers/packRuntime.ts +118 -0
- package/src/testing/helpers/parity.ts +86 -0
- package/src/testing/helpers/projectCli.ts +35 -0
- package/src/testing/helpers/projectMcp.ts +145 -0
- package/src/testing/helpers/runCli.ts +128 -0
- package/src/testing/perf/budgets.test.ts +164 -0
- package/src/testing/perf/budgets.ts +37 -0
- package/src/testing/perf/globalSetup.ts +30 -0
- package/src/testing/perf/measure.ts +97 -0
- package/src/testing/setupXdgIsolation.ts +13 -12
- package/src/types.ts +42 -0
- package/src/bin.test.ts +0 -54
- package/src/compile-validation.runner.ts +0 -137
- package/src/compile-validation.ts +0 -191
- package/src/completions/computeSocketPath.test.ts +0 -26
- package/src/completions/computeSocketPath.ts +0 -16
- package/src/completions/constants.ts +0 -25
- package/src/completions/handleQuery.test.ts +0 -125
- package/src/completions/handleQuery.ts +0 -49
- package/src/completions/index.ts +0 -14
- package/src/completions/queryCompletions.test.ts +0 -105
- package/src/completions/queryCompletions.ts +0 -75
- package/src/completions/querySocket.test.ts +0 -101
- package/src/completions/querySocket.ts +0 -71
- package/src/completions/startCompletionsServer.test.ts +0 -74
- package/src/completions/startCompletionsServer.ts +0 -75
- package/src/completions/startCompletionsServer.unit.test.ts +0 -131
- package/src/completions/waitForSocket.test.ts +0 -27
- package/src/completions/waitForSocket.ts +0 -27
- package/src/config/configExists.ts +0 -14
- package/src/config/defaultConfig.test.ts +0 -33
- package/src/config/defaultConfig.ts +0 -59
- package/src/config/defaults.json +0 -17
- package/src/config/findProjectConfigPath.test.ts +0 -53
- package/src/config/findProjectConfigPath.ts +0 -36
- package/src/config/index.ts +0 -21
- package/src/config/mergeConfigFileUpdate.ts +0 -58
- package/src/config/parseConfigValues.ts +0 -217
- package/src/config/readConfig.test.ts +0 -395
- package/src/config/readConfig.ts +0 -21
- package/src/config/readConfigLayers.test.ts +0 -109
- package/src/config/readConfigLayers.ts +0 -118
- package/src/config/resolveConfigPath.test.ts +0 -20
- package/src/config/resolveConfigPath.ts +0 -11
- package/src/config/resolveGlobalConfigPath.ts +0 -13
- package/src/config/resolveWriteConfigPath.test.ts +0 -53
- package/src/config/resolveWriteConfigPath.ts +0 -31
- package/src/config/types.ts +0 -128
- package/src/config/writeConfig.ts +0 -37
- package/src/domains/block/blockConfig.ts +0 -97
- package/src/domains/block/commands/index.ts +0 -5
- package/src/domains/block/commands/list.test.ts +0 -111
- package/src/domains/block/commands/list.ts +0 -11
- package/src/domains/block/commands/lookup.test.ts +0 -187
- package/src/domains/block/commands/lookup.ts +0 -14
- package/src/domains/block/commands/sample.ts +0 -56
- package/src/domains/block/formatters/index.ts +0 -5
- package/src/domains/block/formatters/list.test.ts +0 -107
- package/src/domains/block/formatters/list.ts +0 -50
- package/src/domains/block/formatters/lookup.test.ts +0 -318
- package/src/domains/block/formatters/lookup.ts +0 -149
- package/src/domains/block/formatters/sample.ts +0 -21
- package/src/domains/block/formatters/types.ts +0 -16
- package/src/domains/block/helpers/index.ts +0 -4
- package/src/domains/block/helpers/resolveAspects.test.ts +0 -64
- package/src/domains/block/helpers/resolveAspects.ts +0 -35
- package/src/domains/block/index.ts +0 -25
- package/src/domains/block/mcp/index.ts +0 -2
- package/src/domains/block/mcp/specs.ts +0 -67
- package/src/domains/block/operations/index.ts +0 -5
- package/src/domains/block/operations/list.test.ts +0 -80
- package/src/domains/block/operations/list.ts +0 -72
- package/src/domains/block/operations/lookup.test.ts +0 -129
- package/src/domains/block/operations/lookup.ts +0 -446
- package/src/domains/block/operations/sample.ts +0 -41
- package/src/domains/block/orchestration/blockEmptyError.test.ts +0 -26
- package/src/domains/block/orchestration/blockEmptyError.ts +0 -19
- package/src/domains/block/orchestration/buildBlockFilters.ts +0 -12
- package/src/domains/block/orchestration/enrichBlocks.ts +0 -44
- package/src/domains/block/orchestration/index.ts +0 -5
- package/src/domains/block/orchestration/resolveBlockList.ts +0 -39
- package/src/domains/block/orchestration/resolveBlockLookup.ts +0 -35
- package/src/domains/block/stories.test.ts +0 -28
- package/src/domains/block/stories.ts +0 -260
- package/src/domains/block/types.ts +0 -30
- package/src/domains/config/commands/channel.test.ts +0 -128
- package/src/domains/config/commands/channel.ts +0 -99
- package/src/domains/config/commands/configScope.ts +0 -46
- package/src/domains/config/commands/framework.test.ts +0 -119
- package/src/domains/config/commands/framework.ts +0 -103
- package/src/domains/config/commands/index.ts +0 -6
- package/src/domains/config/commands/show.test.ts +0 -61
- package/src/domains/config/commands/show.ts +0 -11
- package/src/domains/config/commands/tier.test.ts +0 -102
- package/src/domains/config/commands/tier.ts +0 -97
- package/src/domains/config/commands/trace.test.ts +0 -165
- package/src/domains/config/commands/trace.ts +0 -83
- package/src/domains/config/formatters/channel.test.ts +0 -70
- package/src/domains/config/formatters/channel.ts +0 -37
- package/src/domains/config/formatters/framework.ts +0 -37
- package/src/domains/config/formatters/index.ts +0 -6
- package/src/domains/config/formatters/show.test.ts +0 -153
- package/src/domains/config/formatters/show.ts +0 -89
- package/src/domains/config/formatters/tier.test.ts +0 -86
- package/src/domains/config/formatters/tier.ts +0 -48
- package/src/domains/config/formatters/trace.ts +0 -28
- package/src/domains/config/index.ts +0 -36
- package/src/domains/config/mcp/index.ts +0 -2
- package/src/domains/config/mcp/specs.ts +0 -100
- package/src/domains/config/operations/index.ts +0 -6
- package/src/domains/config/operations/show.test.ts +0 -78
- package/src/domains/config/operations/show.ts +0 -48
- package/src/domains/config/operations/types.ts +0 -20
- package/src/domains/config/operations/validateChannel.test.ts +0 -36
- package/src/domains/config/operations/validateChannel.ts +0 -24
- package/src/domains/config/operations/validateFramework.ts +0 -24
- package/src/domains/config/operations/validateTier.test.ts +0 -65
- package/src/domains/config/operations/validateTier.ts +0 -43
- package/src/domains/config/stories.ts +0 -42
- package/src/domains/config/tasks/index.ts +0 -6
- package/src/domains/config/tasks/setChannel.ts +0 -21
- package/src/domains/config/tasks/setFramework.ts +0 -21
- package/src/domains/config/tasks/setTier.ts +0 -20
- package/src/domains/config/tasks/setTrace.ts +0 -20
- package/src/domains/config/tasks/writeConfigField.ts +0 -41
- package/src/domains/create/generatorPack/bundled.ts +0 -49
- package/src/domains/create/generatorPack/compileGeneratorPack.test.ts +0 -159
- package/src/domains/create/generatorPack/compileGeneratorPack.ts +0 -312
- package/src/domains/create/index.ts +0 -21
- package/src/domains/create/mcp/index.ts +0 -2
- package/src/domains/create/mcp/specs.ts +0 -13
- package/src/domains/create/renderGeneratorUi.test.ts +0 -103
- package/src/domains/create/renderGeneratorUi.ts +0 -65
- package/src/domains/doctor/commands/doctor.test.ts +0 -75
- package/src/domains/doctor/commands/doctor.ts +0 -43
- package/src/domains/doctor/commands/index.ts +0 -2
- package/src/domains/doctor/formatters/doctor.test.ts +0 -165
- package/src/domains/doctor/formatters/doctor.ts +0 -136
- package/src/domains/doctor/formatters/index.ts +0 -2
- package/src/domains/doctor/index.ts +0 -9
- package/src/domains/doctor/mcp/index.ts +0 -2
- package/src/domains/doctor/mcp/specs.ts +0 -41
- package/src/domains/doctor/operations/checks/checkConfigFile.ts +0 -42
- package/src/domains/doctor/operations/checks/checkKeStore.ts +0 -38
- package/src/domains/doctor/operations/checks/checkMcpCommands.ts +0 -133
- package/src/domains/doctor/operations/checks/checkMcpConfigured.ts +0 -65
- package/src/domains/doctor/operations/checks/checkNodeVersion.ts +0 -25
- package/src/domains/doctor/operations/checks/checkPackageRefs.ts +0 -76
- package/src/domains/doctor/operations/checks/checkPragmaVersion.ts +0 -20
- package/src/domains/doctor/operations/checks/checkShellCompletions.ts +0 -42
- package/src/domains/doctor/operations/checks/checkSkillsSymlinked.ts +0 -64
- package/src/domains/doctor/operations/checks/index.ts +0 -10
- package/src/domains/doctor/operations/checks.test.ts +0 -307
- package/src/domains/doctor/operations/index.ts +0 -3
- package/src/domains/doctor/operations/runChecks.test.ts +0 -176
- package/src/domains/doctor/operations/runChecks.ts +0 -78
- package/src/domains/doctor/operations/types.ts +0 -42
- package/src/domains/graph/commands/index.ts +0 -4
- package/src/domains/graph/commands/inspect.test.ts +0 -94
- package/src/domains/graph/commands/inspect.ts +0 -63
- package/src/domains/graph/commands/query.test.ts +0 -94
- package/src/domains/graph/commands/query.ts +0 -60
- package/src/domains/graph/formatters/index.ts +0 -4
- package/src/domains/graph/formatters/inspect.ts +0 -50
- package/src/domains/graph/formatters/query.test.ts +0 -87
- package/src/domains/graph/formatters/query.ts +0 -74
- package/src/domains/graph/helpers/index.ts +0 -3
- package/src/domains/graph/helpers/resolveUri.test.ts +0 -50
- package/src/domains/graph/helpers/resolveUri.ts +0 -77
- package/src/domains/graph/index.ts +0 -22
- package/src/domains/graph/mcp/index.ts +0 -2
- package/src/domains/graph/mcp/specs.ts +0 -82
- package/src/domains/graph/operations/executeQuery.test.ts +0 -68
- package/src/domains/graph/operations/executeQuery.ts +0 -32
- package/src/domains/graph/operations/index.ts +0 -4
- package/src/domains/graph/operations/inspectUri.test.ts +0 -101
- package/src/domains/graph/operations/inspectUri.ts +0 -64
- package/src/domains/graphql/commands/build.test.ts +0 -196
- package/src/domains/graphql/commands/build.ts +0 -117
- package/src/domains/graphql/commands/check.test.ts +0 -141
- package/src/domains/graphql/commands/check.ts +0 -81
- package/src/domains/graphql/commands/index.ts +0 -5
- package/src/domains/graphql/commands/serve.test.ts +0 -46
- package/src/domains/graphql/commands/serve.ts +0 -141
- package/src/domains/graphql/constants.ts +0 -10
- package/src/domains/graphql/formatters/index.ts +0 -3
- package/src/domains/graphql/formatters/report.ts +0 -78
- package/src/domains/graphql/helpers/gatherSources.test.ts +0 -92
- package/src/domains/graphql/helpers/gatherSources.ts +0 -58
- package/src/domains/graphql/helpers/index.ts +0 -6
- package/src/domains/graphql/helpers/parsePrefixes.test.ts +0 -44
- package/src/domains/graphql/helpers/parsePrefixes.ts +0 -38
- package/src/domains/graphql/helpers/resolveSourceFiles.test.ts +0 -65
- package/src/domains/graphql/helpers/resolveSourceFiles.ts +0 -66
- package/src/domains/graphql/helpers/routeGraphql.test.ts +0 -43
- package/src/domains/graphql/helpers/routeGraphql.ts +0 -28
- package/src/domains/graphql/index.ts +0 -24
- package/src/domains/graphql/operations/compileSchema.test.ts +0 -95
- package/src/domains/graphql/operations/compileSchema.ts +0 -107
- package/src/domains/graphql/operations/createSchemaServer.test.ts +0 -50
- package/src/domains/graphql/operations/createSchemaServer.ts +0 -75
- package/src/domains/graphql/operations/ensureSchemaArtifact.test.ts +0 -167
- package/src/domains/graphql/operations/ensureSchemaArtifact.ts +0 -178
- package/src/domains/graphql/operations/index.ts +0 -17
- package/src/domains/graphql/types.ts +0 -29
- package/src/domains/info/commands/index.ts +0 -4
- package/src/domains/info/commands/info.test.ts +0 -88
- package/src/domains/info/commands/info.ts +0 -47
- package/src/domains/info/commands/upgrade.test.ts +0 -183
- package/src/domains/info/commands/upgrade.ts +0 -153
- package/src/domains/info/constants.test.ts +0 -22
- package/src/domains/info/constants.ts +0 -15
- package/src/domains/info/formatters/index.ts +0 -8
- package/src/domains/info/formatters/info.test.ts +0 -207
- package/src/domains/info/formatters/info.ts +0 -131
- package/src/domains/info/formatters/upgrade.test.ts +0 -136
- package/src/domains/info/formatters/upgrade.ts +0 -70
- package/src/domains/info/index.ts +0 -9
- package/src/domains/info/mcp/index.ts +0 -2
- package/src/domains/info/mcp/specs.ts +0 -65
- package/src/domains/info/operations/checkRegistryVersion.test.ts +0 -124
- package/src/domains/info/operations/checkRegistryVersion.ts +0 -45
- package/src/domains/info/operations/collectEntityCounts.test.ts +0 -156
- package/src/domains/info/operations/collectEntityCounts.ts +0 -123
- package/src/domains/info/operations/collectInfo.test.ts +0 -122
- package/src/domains/info/operations/collectInfo.ts +0 -94
- package/src/domains/info/operations/collectStoreSummary.test.ts +0 -61
- package/src/domains/info/operations/collectStoreSummary.ts +0 -42
- package/src/domains/info/operations/index.ts +0 -6
- package/src/domains/info/types.test-d.ts +0 -35
- package/src/domains/info/types.ts +0 -67
- package/src/domains/llm/capabilities.test.ts +0 -111
- package/src/domains/llm/commands/capabilities.ts +0 -37
- package/src/domains/llm/commands/index.ts +0 -4
- package/src/domains/llm/commands/llm.ts +0 -41
- package/src/domains/llm/data/commandReference.ts +0 -106
- package/src/domains/llm/data/decisionTrees.ts +0 -55
- package/src/domains/llm/data/index.ts +0 -6
- package/src/domains/llm/data/toolCatalog.ts +0 -221
- package/src/domains/llm/formatters/capabilities.ts +0 -50
- package/src/domains/llm/formatters/index.ts +0 -4
- package/src/domains/llm/formatters/orientation.ts +0 -57
- package/src/domains/llm/index.ts +0 -9
- package/src/domains/llm/llmCommand.test.ts +0 -101
- package/src/domains/llm/mcp/index.ts +0 -2
- package/src/domains/llm/mcp/specs.ts +0 -93
- package/src/domains/llm/operations/collectContext.test.ts +0 -64
- package/src/domains/llm/operations/collectContext.ts +0 -37
- package/src/domains/llm/operations/index.ts +0 -3
- package/src/domains/llm/types.ts +0 -72
- package/src/domains/modifier/commands/index.ts +0 -5
- package/src/domains/modifier/commands/list.test.ts +0 -57
- package/src/domains/modifier/commands/list.ts +0 -9
- package/src/domains/modifier/commands/lookup.test.ts +0 -91
- package/src/domains/modifier/commands/lookup.ts +0 -14
- package/src/domains/modifier/commands/sample.ts +0 -54
- package/src/domains/modifier/formatters/index.ts +0 -8
- package/src/domains/modifier/formatters/list.test.ts +0 -38
- package/src/domains/modifier/formatters/list.ts +0 -22
- package/src/domains/modifier/formatters/lookup.test.ts +0 -33
- package/src/domains/modifier/formatters/lookup.ts +0 -50
- package/src/domains/modifier/formatters/sample.ts +0 -15
- package/src/domains/modifier/index.ts +0 -27
- package/src/domains/modifier/mcp/index.ts +0 -2
- package/src/domains/modifier/mcp/specs.ts +0 -65
- package/src/domains/modifier/modifierConfig.ts +0 -36
- package/src/domains/modifier/operations/index.ts +0 -5
- package/src/domains/modifier/operations/list.test.ts +0 -39
- package/src/domains/modifier/operations/list.ts +0 -41
- package/src/domains/modifier/operations/lookup.test.ts +0 -37
- package/src/domains/modifier/operations/lookup.ts +0 -69
- package/src/domains/modifier/operations/sample.ts +0 -32
- package/src/domains/modifier/orchestration/index.ts +0 -3
- package/src/domains/modifier/orchestration/modifierEmptyError.test.ts +0 -26
- package/src/domains/modifier/orchestration/modifierEmptyError.ts +0 -15
- package/src/domains/modifier/orchestration/resolveModifierList.ts +0 -16
- package/src/domains/modifier/orchestration/resolveModifierLookup.ts +0 -33
- package/src/domains/modifier/stories.test.ts +0 -20
- package/src/domains/modifier/stories.ts +0 -86
- package/src/domains/modifier/types.ts +0 -5
- package/src/domains/ontology/commands/index.ts +0 -4
- package/src/domains/ontology/commands/list.test.ts +0 -84
- package/src/domains/ontology/commands/list.ts +0 -11
- package/src/domains/ontology/commands/show.test.ts +0 -179
- package/src/domains/ontology/commands/show.ts +0 -14
- package/src/domains/ontology/formatters/index.ts +0 -5
- package/src/domains/ontology/formatters/list.ts +0 -64
- package/src/domains/ontology/formatters/show.ts +0 -396
- package/src/domains/ontology/helpers/buildClassTree.ts +0 -89
- package/src/domains/ontology/helpers/completeClassNames.ts +0 -43
- package/src/domains/ontology/helpers/expandOntologyIris.ts +0 -79
- package/src/domains/ontology/helpers/findNamespace.ts +0 -23
- package/src/domains/ontology/helpers/index.ts +0 -21
- package/src/domains/ontology/helpers/queryClasses.ts +0 -66
- package/src/domains/ontology/helpers/queryProperties.ts +0 -90
- package/src/domains/ontology/helpers/queryTboxFacts.ts +0 -160
- package/src/domains/ontology/helpers/resolvePrefix.ts +0 -45
- package/src/domains/ontology/index.ts +0 -26
- package/src/domains/ontology/mcp/index.ts +0 -2
- package/src/domains/ontology/mcp/specs.ts +0 -16
- package/src/domains/ontology/operations/index.ts +0 -5
- package/src/domains/ontology/operations/listOntologies.test.ts +0 -122
- package/src/domains/ontology/operations/listOntologies.ts +0 -197
- package/src/domains/ontology/operations/showOntology.test.ts +0 -184
- package/src/domains/ontology/operations/showOntology.ts +0 -323
- package/src/domains/ontology/operations/showOntologyRaw.test.ts +0 -41
- package/src/domains/ontology/operations/showOntologyRaw.ts +0 -50
- package/src/domains/ontology/stories.test.ts +0 -36
- package/src/domains/ontology/stories.ts +0 -153
- package/src/domains/refs/commands/updateRefs.ts +0 -52
- package/src/domains/refs/formatters/updateRefs.ts +0 -27
- package/src/domains/refs/index.ts +0 -27
- package/src/domains/refs/operations/gitOps.test.ts +0 -155
- package/src/domains/refs/operations/gitOps.ts +0 -92
- package/src/domains/refs/operations/index.ts +0 -10
- package/src/domains/refs/operations/parseRef.test.ts +0 -157
- package/src/domains/refs/operations/parseRef.ts +0 -114
- package/src/domains/refs/operations/paths.test.ts +0 -98
- package/src/domains/refs/operations/paths.ts +0 -91
- package/src/domains/refs/operations/readGlobalRefs.test.ts +0 -63
- package/src/domains/refs/operations/readGlobalRefs.ts +0 -37
- package/src/domains/refs/operations/updateRefs.test.ts +0 -167
- package/src/domains/refs/operations/updateRefs.ts +0 -180
- package/src/domains/setup/commands/all.ts +0 -58
- package/src/domains/setup/commands/completions.ts +0 -85
- package/src/domains/setup/commands/entrypoints.test.ts +0 -170
- package/src/domains/setup/commands/index.ts +0 -7
- package/src/domains/setup/commands/lsp.ts +0 -49
- package/src/domains/setup/commands/mcp.ts +0 -119
- package/src/domains/setup/commands/setup.ts +0 -70
- package/src/domains/setup/commands/skills.test.ts +0 -68
- package/src/domains/setup/commands/skills.ts +0 -110
- package/src/domains/setup/formatters/index.ts +0 -2
- package/src/domains/setup/formatters/skills.test.ts +0 -103
- package/src/domains/setup/formatters/skills.ts +0 -112
- package/src/domains/setup/formatters/types.ts +0 -7
- package/src/domains/setup/helpers/completionScripts.test.ts +0 -58
- package/src/domains/setup/helpers/completionScripts.ts +0 -92
- package/src/domains/setup/helpers/constants.ts +0 -2
- package/src/domains/setup/helpers/detectShell.test.ts +0 -48
- package/src/domains/setup/helpers/detectShell.ts +0 -20
- package/src/domains/setup/helpers/index.ts +0 -12
- package/src/domains/setup/helpers/runSetupTask.test.ts +0 -277
- package/src/domains/setup/helpers/runSetupTask.ts +0 -221
- package/src/domains/setup/index.ts +0 -37
- package/src/domains/setup/operations/index.ts +0 -6
- package/src/domains/setup/operations/setupAll.test.ts +0 -48
- package/src/domains/setup/operations/setupAll.ts +0 -41
- package/src/domains/setup/operations/setupCompletions.test.ts +0 -94
- package/src/domains/setup/operations/setupCompletions.ts +0 -54
- package/src/domains/setup/operations/setupLsp.test.ts +0 -30
- package/src/domains/setup/operations/setupLsp.ts +0 -22
- package/src/domains/setup/operations/setupMcp.test.ts +0 -120
- package/src/domains/setup/operations/setupMcp.ts +0 -108
- package/src/domains/setup/operations/setupSkills.test.ts +0 -191
- package/src/domains/setup/operations/setupSkills.ts +0 -160
- package/src/domains/setup/types.ts +0 -18
- package/src/domains/shared/ToolSpec.ts +0 -49
- package/src/domains/shared/bootStore.bareCore.test.ts +0 -63
- package/src/domains/shared/bootStore.test.ts +0 -82
- package/src/domains/shared/bootStore.ts +0 -171
- package/src/domains/shared/buildQuery.ts +0 -18
- package/src/domains/shared/compactUri.test.ts +0 -32
- package/src/domains/shared/compactUri.ts +0 -21
- package/src/domains/shared/context.ts +0 -16
- package/src/domains/shared/contracts.ts +0 -164
- package/src/domains/shared/createInteractivePromptSession.test.ts +0 -439
- package/src/domains/shared/createInteractivePromptSession.ts +0 -236
- package/src/domains/shared/emptyErrorRecovery.test.ts +0 -106
- package/src/domains/shared/extractLocalName.test.ts +0 -21
- package/src/domains/shared/extractLocalName.ts +0 -14
- package/src/domains/shared/filters/buildChannelFilter.test.ts +0 -52
- package/src/domains/shared/filters/buildChannelFilter.ts +0 -41
- package/src/domains/shared/filters/buildFilterConfig.ts +0 -15
- package/src/domains/shared/filters/buildFilters.test.ts +0 -33
- package/src/domains/shared/filters/buildFilters.ts +0 -30
- package/src/domains/shared/filters/buildTierFilter.test.ts +0 -78
- package/src/domains/shared/filters/buildTierFilter.ts +0 -69
- package/src/domains/shared/filters/describeFilters.ts +0 -14
- package/src/domains/shared/filters/index.ts +0 -10
- package/src/domains/shared/formatters.ts +0 -103
- package/src/domains/shared/listTiers.ts +0 -40
- package/src/domains/shared/loaders/bundledLoader.test.ts +0 -248
- package/src/domains/shared/loaders/bundledLoader.ts +0 -254
- package/src/domains/shared/loaders/gitLoader.ts +0 -30
- package/src/domains/shared/loaders/index.ts +0 -9
- package/src/domains/shared/loaders/localLoader.ts +0 -71
- package/src/domains/shared/loaders/readPackageDir.test.ts +0 -58
- package/src/domains/shared/loaders/readPackageDir.ts +0 -185
- package/src/domains/shared/loaders/storyAssetsPlugin.test.ts +0 -84
- package/src/domains/shared/loaders/storyAssetsPlugin.ts +0 -46
- package/src/domains/shared/lookupMany.test.ts +0 -135
- package/src/domains/shared/lookupMany.ts +0 -101
- package/src/domains/shared/mergeAndParseRefs.test.ts +0 -89
- package/src/domains/shared/mergeAndParseRefs.ts +0 -44
- package/src/domains/shared/namespaces.ts +0 -26
- package/src/domains/shared/packages.ts +0 -20
- package/src/domains/shared/parseSampleCount.test.ts +0 -47
- package/src/domains/shared/parseSampleCount.ts +0 -45
- package/src/domains/shared/pickRandom.ts +0 -22
- package/src/domains/shared/prefixes.test.ts +0 -211
- package/src/domains/shared/prefixes.ts +0 -204
- package/src/domains/shared/renderers.ts +0 -410
- package/src/domains/shared/resolveConfiguredGraphs.test.ts +0 -27
- package/src/domains/shared/resolveConfiguredGraphs.ts +0 -41
- package/src/domains/shared/resolveLookupExitCode.test.ts +0 -48
- package/src/domains/shared/resolveLookupExitCode.ts +0 -42
- package/src/domains/shared/runtime.ts +0 -61
- package/src/domains/shared/sampleFormatters.ts +0 -47
- package/src/domains/shared/semanticPackage.test.ts +0 -89
- package/src/domains/shared/semanticPackage.ts +0 -127
- package/src/domains/shared/stories/compileLookupCommand.test.ts +0 -145
- package/src/domains/shared/stories/compileLookupCommand.ts +0 -102
- package/src/domains/shared/stories/compileLookupTool.test.ts +0 -105
- package/src/domains/shared/stories/compileLookupTool.ts +0 -96
- package/src/domains/shared/stories/compileReadCommand.test.ts +0 -121
- package/src/domains/shared/stories/compileReadCommand.ts +0 -48
- package/src/domains/shared/stories/compileReadTool.test.ts +0 -64
- package/src/domains/shared/stories/compileReadTool.ts +0 -38
- package/src/domains/shared/stories/condense.test.ts +0 -18
- package/src/domains/shared/stories/condense.ts +0 -15
- package/src/domains/shared/stories/index.ts +0 -20
- package/src/domains/shared/stories/normalizeNames.test.ts +0 -20
- package/src/domains/shared/stories/normalizeNames.ts +0 -22
- package/src/domains/shared/stories/pack/applyPackFilters.test.ts +0 -151
- package/src/domains/shared/stories/pack/applyPackFilters.ts +0 -111
- package/src/domains/shared/stories/pack/applyPackSearch.test.ts +0 -57
- package/src/domains/shared/stories/pack/applyPackSearch.ts +0 -41
- package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +0 -81
- package/src/domains/shared/stories/pack/buildLookupQuery.ts +0 -154
- package/src/domains/shared/stories/pack/bundled/index.ts +0 -23
- package/src/domains/shared/stories/pack/bundled/standardPack.ts +0 -164
- package/src/domains/shared/stories/pack/bundled/tierPack.ts +0 -50
- package/src/domains/shared/stories/pack/collectPackStories.test.ts +0 -406
- package/src/domains/shared/stories/pack/collectPackStories.ts +0 -158
- package/src/domains/shared/stories/pack/compilePackCommands.ts +0 -50
- package/src/domains/shared/stories/pack/compilePackStories.test.ts +0 -751
- package/src/domains/shared/stories/pack/compilePackStories.ts +0 -724
- package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +0 -55
- package/src/domains/shared/stories/pack/index.ts +0 -42
- package/src/domains/shared/stories/pack/reservedVerbs.test.ts +0 -213
- package/src/domains/shared/stories/pack/reservedVerbs.ts +0 -170
- package/src/domains/shared/stories/pack/runSelectQuery.ts +0 -31
- package/src/domains/shared/stories/pack/standardParity.test.ts +0 -381
- package/src/domains/shared/stories/pack/types.ts +0 -224
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +0 -742
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +0 -859
- package/src/domains/shared/stories/projectCliParameters.test.ts +0 -59
- package/src/domains/shared/stories/projectCliParameters.ts +0 -57
- package/src/domains/shared/stories/projectToolParams.test.ts +0 -50
- package/src/domains/shared/stories/projectToolParams.ts +0 -32
- package/src/domains/shared/stories/requirePragmaContext.test.ts +0 -23
- package/src/domains/shared/stories/requirePragmaContext.ts +0 -23
- package/src/domains/shared/stories/resolveLookupDetailed.test.ts +0 -57
- package/src/domains/shared/stories/resolveLookupDetailed.ts +0 -27
- package/src/domains/shared/stories/types.ts +0 -179
- package/src/domains/shared/suggestions/detectCrossDomain.test.ts +0 -43
- package/src/domains/shared/suggestions/detectCrossDomain.ts +0 -116
- package/src/domains/shared/suggestions/expandGlob.test.ts +0 -92
- package/src/domains/shared/suggestions/expandGlob.ts +0 -52
- package/src/domains/shared/suggestions/expandLookupQueries.ts +0 -57
- package/src/domains/shared/suggestions/index.ts +0 -7
- package/src/domains/shared/suggestions/listDomainNames.ts +0 -61
- package/src/domains/shared/suggestions/suggestNames.test.ts +0 -70
- package/src/domains/shared/suggestions/suggestNames.ts +0 -130
- package/src/domains/shared/types/block.ts +0 -107
- package/src/domains/shared/types/common.ts +0 -33
- package/src/domains/shared/types/graph.ts +0 -17
- package/src/domains/shared/types/index.ts +0 -46
- package/src/domains/shared/types/modifier.ts +0 -22
- package/src/domains/shared/types/ontology.ts +0 -145
- package/src/domains/shared/types/runtime.ts +0 -24
- package/src/domains/shared/types/sample.ts +0 -17
- package/src/domains/shared/types/standard.ts +0 -21
- package/src/domains/shared/types/tier.ts +0 -15
- package/src/domains/shared/types/token.ts +0 -30
- package/src/domains/skill/commands/index.ts +0 -4
- package/src/domains/skill/commands/list.test.ts +0 -115
- package/src/domains/skill/commands/list.ts +0 -11
- package/src/domains/skill/commands/lookup.test.ts +0 -118
- package/src/domains/skill/commands/lookup.ts +0 -14
- package/src/domains/skill/formatters/index.ts +0 -3
- package/src/domains/skill/formatters/list.test.ts +0 -140
- package/src/domains/skill/formatters/list.ts +0 -119
- package/src/domains/skill/formatters/lookup.test.ts +0 -46
- package/src/domains/skill/formatters/lookup.ts +0 -57
- package/src/domains/skill/formatters/types.ts +0 -8
- package/src/domains/skill/helpers/index.ts +0 -6
- package/src/domains/skill/helpers/parseFrontmatter.test.ts +0 -122
- package/src/domains/skill/helpers/parseFrontmatter.ts +0 -112
- package/src/domains/skill/helpers/resolveSkillSources.ts +0 -70
- package/src/domains/skill/index.ts +0 -23
- package/src/domains/skill/mcp/index.ts +0 -2
- package/src/domains/skill/mcp/specs.ts +0 -19
- package/src/domains/skill/operations/discover.test.ts +0 -176
- package/src/domains/skill/operations/discover.ts +0 -59
- package/src/domains/skill/operations/index.ts +0 -5
- package/src/domains/skill/operations/list.test.ts +0 -76
- package/src/domains/skill/operations/list.ts +0 -47
- package/src/domains/skill/operations/lookup.test.ts +0 -91
- package/src/domains/skill/operations/lookup.ts +0 -70
- package/src/domains/skill/stories.test.ts +0 -43
- package/src/domains/skill/stories.ts +0 -103
- package/src/domains/skill/types.ts +0 -33
- package/src/domains/token/commands/add-config.test.ts +0 -68
- package/src/domains/token/commands/add-config.ts +0 -62
- package/src/domains/token/commands/index.ts +0 -6
- package/src/domains/token/commands/list.test.ts +0 -82
- package/src/domains/token/commands/list.ts +0 -54
- package/src/domains/token/commands/lookup.test.ts +0 -133
- package/src/domains/token/commands/lookup.ts +0 -107
- package/src/domains/token/commands/sample.ts +0 -54
- package/src/domains/token/featureFlag.ts +0 -17
- package/src/domains/token/formatters/index.ts +0 -8
- package/src/domains/token/formatters/list.test.ts +0 -37
- package/src/domains/token/formatters/list.ts +0 -24
- package/src/domains/token/formatters/lookup.test.ts +0 -61
- package/src/domains/token/formatters/lookup.ts +0 -107
- package/src/domains/token/formatters/sample.ts +0 -16
- package/src/domains/token/index.ts +0 -45
- package/src/domains/token/mcp/index.ts +0 -2
- package/src/domains/token/mcp/specs.ts +0 -207
- package/src/domains/token/operations/add-config.test.ts +0 -68
- package/src/domains/token/operations/add-config.ts +0 -61
- package/src/domains/token/operations/index.ts +0 -8
- package/src/domains/token/operations/list.test.ts +0 -50
- package/src/domains/token/operations/list.ts +0 -52
- package/src/domains/token/operations/lookup.test.ts +0 -42
- package/src/domains/token/operations/lookup.ts +0 -75
- package/src/domains/token/operations/sample.ts +0 -32
- package/src/domains/token/orchestration/index.ts +0 -3
- package/src/domains/token/orchestration/resolveTokenList.ts +0 -17
- package/src/domains/token/orchestration/resolveTokenLookup.ts +0 -33
- package/src/domains/token/orchestration/tokenEmptyError.test.ts +0 -33
- package/src/domains/token/orchestration/tokenEmptyError.ts +0 -20
- package/src/domains/token/tokenConfig.ts +0 -38
- package/src/domains/token/types.ts +0 -6
- package/src/domains/trace/commands/clear.ts +0 -71
- package/src/domains/trace/commands/index.ts +0 -5
- package/src/domains/trace/commands/resolveTraceLimit.test.ts +0 -31
- package/src/domains/trace/commands/sessions.ts +0 -32
- package/src/domains/trace/commands/show.ts +0 -171
- package/src/domains/trace/formatters/index.ts +0 -9
- package/src/domains/trace/formatters/sessions.ts +0 -80
- package/src/domains/trace/formatters/show.ts +0 -122
- package/src/domains/trace/index.ts +0 -17
- package/src/domains/trace/operations/index.ts +0 -8
- package/src/domains/trace/operations/listSessions.test.ts +0 -55
- package/src/domains/trace/operations/listSessions.ts +0 -52
- package/src/domains/trace/operations/readTraceLog.test.ts +0 -100
- package/src/domains/trace/operations/readTraceLog.ts +0 -104
- package/src/domains/trace/tracePlugin.test.ts +0 -171
- package/src/domains/trace/tracePlugin.ts +0 -159
- package/src/domains/trace/types.ts +0 -65
- package/src/embedWasm.ts +0 -42
- package/src/error/PragmaError.test.ts +0 -121
- package/src/error/PragmaError.ts +0 -177
- package/src/error/constants.ts +0 -12
- package/src/error/index.ts +0 -4
- package/src/error/types.ts +0 -55
- package/src/mcp/createMcpServer.test.ts +0 -41
- package/src/mcp/createMcpServer.ts +0 -53
- package/src/mcp/error/buildRecovery.test.ts +0 -37
- package/src/mcp/error/buildRecovery.ts +0 -17
- package/src/mcp/error/index.ts +0 -12
- package/src/mcp/error/serializeError.test.ts +0 -121
- package/src/mcp/error/serializeError.ts +0 -31
- package/src/mcp/error/serializeErrorPayload.test.ts +0 -38
- package/src/mcp/error/serializeErrorPayload.ts +0 -34
- package/src/mcp/error/types.ts +0 -59
- package/src/mcp/index.ts +0 -15
- package/src/mcp/registerResources.test.ts +0 -566
- package/src/mcp/registerResources.ts +0 -9
- package/src/mcp/resources/buildGraphIndex.ts +0 -167
- package/src/mcp/resources/buildResourceList.test.ts +0 -97
- package/src/mcp/resources/buildResourceList.ts +0 -176
- package/src/mcp/resources/classifyEntity.test.ts +0 -40
- package/src/mcp/resources/classifyEntity.ts +0 -27
- package/src/mcp/resources/constants.ts +0 -105
- package/src/mcp/resources/displayPredicates.ts +0 -62
- package/src/mcp/resources/pickFirstValue.test.ts +0 -29
- package/src/mcp/resources/pickFirstValue.ts +0 -26
- package/src/mcp/resources/pickPrimaryType.test.ts +0 -41
- package/src/mcp/resources/pickPrimaryType.ts +0 -26
- package/src/mcp/resources/rankUriCompletions.test.ts +0 -52
- package/src/mcp/resources/rankUriCompletions.ts +0 -64
- package/src/mcp/resources/readEntity.ts +0 -169
- package/src/mcp/resources/registerResources.ts +0 -126
- package/src/mcp/resources/types.ts +0 -128
- package/src/mcp/runMcpServer.test.ts +0 -66
- package/src/mcp/runMcpServer.ts +0 -24
- package/src/mcp/tools/index.ts +0 -74
- package/src/mcp/tools/registerFromSpec.ts +0 -97
- package/src/mcp/tools/registerTools.test.ts +0 -1277
- package/src/mcp/types.ts +0 -66
- package/src/mcp/utils/estimateTokens.test.ts +0 -14
- package/src/mcp/utils/estimateTokens.ts +0 -9
- package/src/mcp/utils/index.ts +0 -11
- package/src/mcp/utils/wrapTool.test.ts +0 -109
- package/src/mcp/utils/wrapTool.ts +0 -81
- package/src/package-manager/constants.ts +0 -29
- package/src/package-manager/detectInstallSource.test.ts +0 -23
- package/src/package-manager/detectInstallSource.ts +0 -111
- package/src/package-manager/detectLocalInstall.test.ts +0 -16
- package/src/package-manager/detectLocalInstall.ts +0 -43
- package/src/package-manager/detectPackageManager.test.ts +0 -81
- package/src/package-manager/detectPackageManager.ts +0 -30
- package/src/package-manager/index.ts +0 -6
- package/src/package-manager/types.ts +0 -10
- package/src/pipeline/collectCommands.test.ts +0 -187
- package/src/pipeline/collectCommands.ts +0 -75
- package/src/pipeline/constants.ts +0 -14
- package/src/pipeline/createProgram.test.ts +0 -116
- package/src/pipeline/createProgram.ts +0 -89
- package/src/pipeline/firstRun.test.ts +0 -80
- package/src/pipeline/firstRun.ts +0 -99
- package/src/pipeline/formatTerminal.test.ts +0 -43
- package/src/pipeline/formatTerminal.ts +0 -53
- package/src/pipeline/index.ts +0 -22
- package/src/pipeline/mapExitCode.test.ts +0 -41
- package/src/pipeline/mapExitCode.ts +0 -12
- package/src/pipeline/parseGlobalFlags.test.ts +0 -193
- package/src/pipeline/parseGlobalFlags.ts +0 -135
- package/src/pipeline/renderError.test.ts +0 -151
- package/src/pipeline/renderError.ts +0 -129
- package/src/pipeline/resolveCommandKind.test.ts +0 -80
- package/src/pipeline/resolveCommandKind.ts +0 -82
- package/src/pipeline/rootHelp.test.ts +0 -87
- package/src/pipeline/rootHelp.ts +0 -265
- package/src/pipeline/runCli.orchestration.test.ts +0 -435
- package/src/pipeline/runCli.test.ts +0 -83
- package/src/pipeline/runCli.ts +0 -411
- package/src/pipeline/types.ts +0 -17
- package/src/testing/cli.ts +0 -71
- package/src/testing/createTestMcpClient.ts +0 -68
- package/src/testing/dsFixtures.ts +0 -523
- package/src/testing/fixtures/canonical-config.json +0 -4
- package/src/testing/fixtures/canonical.ttl +0 -437
- package/src/testing/fixtures/filtered-config.json +0 -4
- package/src/testing/fixtures.ts +0 -34
- package/src/testing/graphqlFixtures.ts +0 -72
- package/src/testing/helpers/assertParity.ts +0 -28
- package/src/testing/helpers/createTestMcpClient.ts +0 -40
- package/src/testing/helpers/createTestRuntime.ts +0 -67
- package/src/testing/index.ts +0 -22
- package/src/testing/integration/__snapshots__/executor-golden.test.ts.snap +0 -1207
- package/src/testing/integration/agent-session.test.ts +0 -148
- package/src/testing/integration/boot.test.ts +0 -105
- package/src/testing/integration/cli-user-stories.test.ts +0 -261
- package/src/testing/integration/cross-binary-byte-equality.test.ts +0 -129
- package/src/testing/integration/edge-cases.test.ts +0 -275
- package/src/testing/integration/executor-execution.test.ts +0 -103
- package/src/testing/integration/executor-golden.test.ts +0 -145
- package/src/testing/integration/mcp-surface.test.ts +0 -605
- package/src/testing/integration/parity.test.ts +0 -596
- package/src/testing/regression/0001-skill-discovery-granularity.test.ts +0 -71
- package/src/testing/standardParityFixtures.ts +0 -35
- package/src/testing/store.ts +0 -39
- package/src/testing/storyFixtures.ts +0 -63
- package/src/testing/types.ts +0 -20
- package/src/tui/components/BulletList/BulletList.tsx +0 -46
- package/src/tui/components/BulletList/index.ts +0 -2
- package/src/tui/components/BulletList/types.ts +0 -6
- package/src/tui/components/Card/Card.tsx +0 -73
- package/src/tui/components/Card/index.ts +0 -1
- package/src/tui/components/Card/types.ts +0 -12
- package/src/tui/components/CodeBlock/CodeBlock.tsx +0 -37
- package/src/tui/components/CodeBlock/index.ts +0 -2
- package/src/tui/components/CodeBlock/types.ts +0 -6
- package/src/tui/components/DataRow/DataRow.tsx +0 -80
- package/src/tui/components/DataRow/index.ts +0 -2
- package/src/tui/components/DataRow/types.ts +0 -14
- package/src/tui/components/FieldRow/FieldRow.tsx +0 -24
- package/src/tui/components/FieldRow/index.ts +0 -2
- package/src/tui/components/FieldRow/types.ts +0 -10
- package/src/tui/components/HeaderRow/HeaderRow.tsx +0 -32
- package/src/tui/components/HeaderRow/index.ts +0 -2
- package/src/tui/components/HeaderRow/types.ts +0 -8
- package/src/tui/components/MarkdownText/MarkdownText.tsx +0 -19
- package/src/tui/components/MarkdownText/index.ts +0 -2
- package/src/tui/components/MarkdownText/types.ts +0 -4
- package/src/tui/components/MiniTable/MiniTable.tsx +0 -82
- package/src/tui/components/MiniTable/index.ts +0 -2
- package/src/tui/components/MiniTable/types.ts +0 -6
- package/src/tui/components/SectionRenderer/SectionRenderer.tsx +0 -91
- package/src/tui/components/SectionRenderer/index.ts +0 -2
- package/src/tui/components/SectionRenderer/types.ts +0 -15
- package/src/tui/components/TreeView/TreeView.tsx +0 -84
- package/src/tui/components/TreeView/index.ts +0 -2
- package/src/tui/components/TreeView/types.ts +0 -6
- package/src/tui/components/index.ts +0 -19
- package/src/tui/constants.ts +0 -39
- package/src/tui/createListView.ts +0 -23
- package/src/tui/createLookupView.ts +0 -26
- package/src/tui/helpers/computeWidths.ts +0 -53
- package/src/tui/helpers/fitColumns.ts +0 -33
- package/src/tui/helpers/formatMarkdown.ts +0 -19
- package/src/tui/helpers/getTerminalSize.ts +0 -16
- package/src/tui/helpers/index.ts +0 -6
- package/src/tui/helpers/syntaxColor.ts +0 -67
- package/src/tui/helpers/truncateText.ts +0 -12
- package/src/tui/hooks/index.ts +0 -3
- package/src/tui/hooks/types.ts +0 -7
- package/src/tui/hooks/useAutoExit.ts +0 -17
- package/src/tui/hooks/useTerminalSize.ts +0 -19
- package/src/tui/index.ts +0 -15
- package/src/tui/renderInk.tsx +0 -18
- package/src/tui/types.ts +0 -12
- package/src/tui/views/ListView/ListView.tsx +0 -104
- package/src/tui/views/ListView/index.ts +0 -2
- package/src/tui/views/ListView/types.ts +0 -14
- package/src/tui/views/LookupView/LookupView.tsx +0 -244
- package/src/tui/views/LookupView/index.ts +0 -2
- package/src/tui/views/LookupView/types.ts +0 -16
- package/src/tui/views/index.ts +0 -4
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two content hashes a pack carries — kept in distinct roles, never
|
|
3
|
+
* conflated.
|
|
4
|
+
*
|
|
5
|
+
* 1. {@link contentHash} — a SHA-256 (ke-graphql's `sha256Hex`) over the
|
|
6
|
+
* canonicalized *source inputs* (sorted by path, path + content joined with
|
|
7
|
+
* fixed delimiters). It names the pack's cache directory and is pinned in the
|
|
8
|
+
* lock, so the same sources always resolve to the same directory and a
|
|
9
|
+
* changed source is a new directory (free invalidation). Hashing the sorted
|
|
10
|
+
* TTL *inputs* — never the `data.nq` dump, whose n-quads line order is not
|
|
11
|
+
* canonical — keeps it deterministic.
|
|
12
|
+
* 2. `hashSources` (re-exported from ke-graphql) — an order-independent FNV-1a
|
|
13
|
+
* 64 fingerprint stored *inside* `schema.json` as the extraction's freshness
|
|
14
|
+
* token. ke-graphql compares it against the loaded sources to detect a stale
|
|
15
|
+
* artifact. It is a staleness signal, not a cache key.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { hashSources, sha256Hex } from "@canonical/ke-graphql";
|
|
19
|
+
|
|
20
|
+
/** A single source input: a stable path label and its raw text content. */
|
|
21
|
+
export interface HashInput {
|
|
22
|
+
readonly path: string;
|
|
23
|
+
readonly content: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Delimiter between a source's path and its content. */
|
|
27
|
+
const FIELD_SEP = "\n<<<pragma-pack:content>>>\n";
|
|
28
|
+
/** Delimiter between successive sources. */
|
|
29
|
+
const RECORD_SEP = "\n<<<pragma-pack:next>>>\n";
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The pack's content hash: SHA-256 over the canonicalized source inputs.
|
|
33
|
+
*
|
|
34
|
+
* @param inputs - The source inputs (path + content).
|
|
35
|
+
* @returns The lowercase hex SHA-256 — the pack's cache-directory name.
|
|
36
|
+
* @note Async — SHA-256 via Web Crypto.
|
|
37
|
+
*/
|
|
38
|
+
export function contentHash(inputs: readonly HashInput[]): Promise<string> {
|
|
39
|
+
const canonical = [...inputs]
|
|
40
|
+
.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0))
|
|
41
|
+
.map((input) => `${input.path}${FIELD_SEP}${input.content}`)
|
|
42
|
+
.join(RECORD_SEP);
|
|
43
|
+
return sha256Hex(canonical);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export { hashSources };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graphpack barrel — the content-addressed pack cache: build, read, embedded
|
|
3
|
+
* fallback, and the artifact contracts.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export type {
|
|
7
|
+
BuildPackInput,
|
|
8
|
+
BuildPackOptions,
|
|
9
|
+
BuildPackResult,
|
|
10
|
+
} from "./build.js";
|
|
11
|
+
export { buildPack } from "./build.js";
|
|
12
|
+
export { buildIndex } from "./buildIndex.js";
|
|
13
|
+
export { embeddedContentHash, materializeEmbeddedPack } from "./embedded.js";
|
|
14
|
+
export { contentHash, type HashInput, hashSources } from "./hash.js";
|
|
15
|
+
export { packIsComplete, readManifest } from "./manifest.js";
|
|
16
|
+
export { readPack } from "./read.js";
|
|
17
|
+
export type {
|
|
18
|
+
Manifest,
|
|
19
|
+
PackIndex,
|
|
20
|
+
PackIndexEntity,
|
|
21
|
+
} from "./types.js";
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read a pack's `manifest.json`. Its presence is the completeness marker: a
|
|
3
|
+
* directory without a valid manifest is a torn build (writes land in a temp
|
|
4
|
+
* directory and the manifest is renamed in last), so an absent or invalid
|
|
5
|
+
* manifest means "treat the pack as not there".
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import {
|
|
11
|
+
DATA_FILE,
|
|
12
|
+
INDEX_FILE,
|
|
13
|
+
MANIFEST_FILE,
|
|
14
|
+
type Manifest,
|
|
15
|
+
manifestSchema,
|
|
16
|
+
SCHEMA_FILE,
|
|
17
|
+
} from "./types.js";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Read and validate a pack directory's manifest.
|
|
21
|
+
*
|
|
22
|
+
* @param dir - The pack directory.
|
|
23
|
+
* @returns The parsed manifest, or `undefined` when absent or invalid.
|
|
24
|
+
* @note Impure — reads from disk.
|
|
25
|
+
*/
|
|
26
|
+
export function readManifest(dir: string): Manifest | undefined {
|
|
27
|
+
const path = join(dir, MANIFEST_FILE);
|
|
28
|
+
if (!existsSync(path)) return undefined;
|
|
29
|
+
try {
|
|
30
|
+
return manifestSchema.parse(JSON.parse(readFileSync(path, "utf-8")));
|
|
31
|
+
} catch {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Whether a pack directory holds a complete pack: a valid manifest AND every
|
|
37
|
+
* non-empty query artifact — the `data.nq` dump, the extracted `schema.json`,
|
|
38
|
+
* and the entity `index.json`. The manifest alone is not enough: an intact
|
|
39
|
+
* manifest beside a missing/truncated `data.nq` boots EMPTY (a silent, then
|
|
40
|
+
* permanent, loss), and a torn or evicted `schema.json`/`index.json` (manifest +
|
|
41
|
+
* dump intact) would be REUSED by `buildPack` and then fail at BOOT as an
|
|
42
|
+
* internal error. Requiring all three present + non-empty makes `buildPack`
|
|
43
|
+
* rebuild a torn pack and makes the boot decision surface STORE_UNAVAILABLE
|
|
44
|
+
* (the ordinary "not built" recovery) instead of a "please report this" crash. */
|
|
45
|
+
export function packIsComplete(dir: string): boolean {
|
|
46
|
+
if (readManifest(dir) === undefined) return false;
|
|
47
|
+
for (const file of [DATA_FILE, SCHEMA_FILE, INDEX_FILE]) {
|
|
48
|
+
try {
|
|
49
|
+
if (statSync(join(dir, file)).size <= 0) return false;
|
|
50
|
+
} catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boot a {@link StoreSession} from a built pack directory — the perf keystone.
|
|
3
|
+
*
|
|
4
|
+
* The store loads from `data.nq` through ke's cache path (no TTL parse), and
|
|
5
|
+
* the executable GraphQL schema is rebuilt from `schema.json` via ke-graphql's
|
|
6
|
+
* `compileFromExtraction` — passes 2-7, pure JS, no store, no SPARQL. The live
|
|
7
|
+
* 7-pass `compile` is NEVER called here; that only runs at build time. The
|
|
8
|
+
* entity index is a plain `JSON.parse`. The result is an immutable session the
|
|
9
|
+
* lazy store memoizes for the process's lifetime.
|
|
10
|
+
*
|
|
11
|
+
* Reached only behind a dynamic import (store boot), never on the storeless
|
|
12
|
+
* fast path.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { readFileSync } from "node:fs";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
import { createStore } from "@canonical/ke";
|
|
18
|
+
import { compileFromExtraction } from "@canonical/ke-graphql";
|
|
19
|
+
import { RECOVERY_CLI_PREFIX } from "../../../constants.js";
|
|
20
|
+
import { PragmaError } from "../../error/PragmaError.js";
|
|
21
|
+
import { cliRecovery } from "../../error/recovery.js";
|
|
22
|
+
import type { StoreSession } from "../types.js";
|
|
23
|
+
import { readManifest } from "./manifest.js";
|
|
24
|
+
import {
|
|
25
|
+
DATA_FILE,
|
|
26
|
+
INDEX_FILE,
|
|
27
|
+
packIndexSchema,
|
|
28
|
+
SCHEMA_FILE,
|
|
29
|
+
} from "./types.js";
|
|
30
|
+
|
|
31
|
+
/** STORE_UNAVAILABLE with the canonical `pragma sources update` recovery (CLI + MCP). */
|
|
32
|
+
function packUnavailable(reason: string): PragmaError {
|
|
33
|
+
return PragmaError.storeUnavailable(reason, {
|
|
34
|
+
recovery: cliRecovery(
|
|
35
|
+
`${RECOVERY_CLI_PREFIX}sources update`,
|
|
36
|
+
"Rebuild the local store from the configured packages.",
|
|
37
|
+
// An agent recovers by calling the tool, then retrying (PR9 C1 cold-store
|
|
38
|
+
// retry makes the post-update retry succeed).
|
|
39
|
+
{ tool: "sources_update" },
|
|
40
|
+
),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Read a pack directory into a bootable store session.
|
|
46
|
+
*
|
|
47
|
+
* @param dir - The pack directory (must hold a complete pack).
|
|
48
|
+
* @returns The store session: store, schema, context factory, prefixes, index.
|
|
49
|
+
* @throws PragmaError STORE_UNAVAILABLE when the pack is incomplete.
|
|
50
|
+
* @note Impure — creates a store from the cached n-quads dump.
|
|
51
|
+
*/
|
|
52
|
+
export async function readPack(dir: string): Promise<StoreSession> {
|
|
53
|
+
const manifest = readManifest(dir);
|
|
54
|
+
if (!manifest) {
|
|
55
|
+
throw packUnavailable(`The pack at ${dir} is incomplete.`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const store = await createStore({
|
|
59
|
+
// Cache hit loads the n-quads dump directly — no sources are re-parsed.
|
|
60
|
+
sources: [],
|
|
61
|
+
prefixes: manifest.prefixes,
|
|
62
|
+
cache: join(dir, DATA_FILE),
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// `loaderCache: "process"` shares the DataLoader caches across every context
|
|
66
|
+
// for this immutable store's lifetime (the MCP p95 win) — sound because the
|
|
67
|
+
// store never mutates between reloads. PR7 relies on it.
|
|
68
|
+
const compiled = compileFromExtraction(
|
|
69
|
+
readFileSync(join(dir, SCHEMA_FILE), "utf-8"),
|
|
70
|
+
{ loaderCache: "process" },
|
|
71
|
+
);
|
|
72
|
+
const index = packIndexSchema.parse(
|
|
73
|
+
JSON.parse(readFileSync(join(dir, INDEX_FILE), "utf-8")),
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
// Guard against a corrupt or TRUNCATED `data.nq` beside an intact manifest:
|
|
77
|
+
// ke silently serves whatever loaded (falling back to an EMPTY store on a
|
|
78
|
+
// parse failure, and rewriting an empty dump). When the manifest records the
|
|
79
|
+
// build-time triple count (A9), require the booted store to hold AT LEAST it:
|
|
80
|
+
// a SHORTFALL means the dump was truncated (fewer triples than were built) —
|
|
81
|
+
// it passes the mere size>0 completeness gate yet would serve a partial graph
|
|
82
|
+
// silently, so it must surface STORE_UNAVAILABLE here. A benign SUPERSET (more
|
|
83
|
+
// triples than recorded — e.g. a future ke counting change) is TOLERATED
|
|
84
|
+
// rather than treated as corruption, so such a change can't trip a fleet-wide
|
|
85
|
+
// false STORE_UNAVAILABLE. Older packs without the count fall back to the
|
|
86
|
+
// "populated index but empty store" check (via the now-empty dump,
|
|
87
|
+
// `packIsComplete` turns false so recovery rebuilds) rather than serving an
|
|
88
|
+
// empty graph as the pack.
|
|
89
|
+
const actualTriples = await countTriples(store);
|
|
90
|
+
if (manifest.tripleCount !== undefined) {
|
|
91
|
+
if (actualTriples < manifest.tripleCount) {
|
|
92
|
+
store.dispose();
|
|
93
|
+
throw packUnavailable(
|
|
94
|
+
`The pack at ${dir} has a corrupt data cache (expected at least ${manifest.tripleCount} triples, loaded ${actualTriples}).`,
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
} else if (index.entities.length > 0 && actualTriples === 0) {
|
|
98
|
+
store.dispose();
|
|
99
|
+
throw packUnavailable(`The pack at ${dir} has a corrupt data cache.`);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return {
|
|
103
|
+
store,
|
|
104
|
+
schema: compiled.schema,
|
|
105
|
+
createContext: compiled.createContext,
|
|
106
|
+
prefixes: manifest.prefixes,
|
|
107
|
+
index,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** Count the booted store's triples (a cheap aggregate over the union graph). */
|
|
112
|
+
async function countTriples(store: StoreSession["store"]): Promise<number> {
|
|
113
|
+
const result = (await store.query(
|
|
114
|
+
"SELECT (COUNT(*) AS ?n) WHERE { ?s ?p ?o }" as never,
|
|
115
|
+
)) as import("@canonical/ke").SelectResult;
|
|
116
|
+
return Number(result.bindings.at(0)?.n ?? 0);
|
|
117
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graphpack artifact contracts — the four files a built pack directory holds
|
|
3
|
+
* and the zod schemas that keep them honest on read.
|
|
4
|
+
*
|
|
5
|
+
* A pack is the content-addressed, boot-ready form of a set of RDF sources:
|
|
6
|
+
* `data.nq` (the store's n-quads dump — boots via ke's cache path, no TTL
|
|
7
|
+
* parse), `schema.json` (the serialized ke-graphql extraction — boots via
|
|
8
|
+
* `compileFromExtraction`, no live 7-pass compile), `index.json` (the storeless
|
|
9
|
+
* entity index the completion tier and reads consume), and `manifest.json`
|
|
10
|
+
* (provenance + the prefixes the store was built with). A directory missing
|
|
11
|
+
* `manifest.json` is treated as absent (a torn build), so writes are always
|
|
12
|
+
* temp-dir + atomic rename.
|
|
13
|
+
*
|
|
14
|
+
* This module is reached only behind a dynamic import (pack build / read /
|
|
15
|
+
* store boot), so its zod dependency never lands on the storeless fast path.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { z } from "zod";
|
|
19
|
+
|
|
20
|
+
/** The n-quads store dump — ke boots it via `createStore({ cache })`. */
|
|
21
|
+
export const DATA_FILE = "data.nq";
|
|
22
|
+
/** The serialized ke-graphql extraction — boots via `compileFromExtraction`. */
|
|
23
|
+
export const SCHEMA_FILE = "schema.json";
|
|
24
|
+
/** The storeless entity index (PR-C's dynamic-completion contract). */
|
|
25
|
+
export const INDEX_FILE = "index.json";
|
|
26
|
+
/** Provenance + prefixes; its presence marks a pack directory as complete. */
|
|
27
|
+
export const MANIFEST_FILE = "manifest.json";
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* One indexed entity. The `{ name, type }` pair is the FROZEN minimum the
|
|
31
|
+
* dynamic-completion tier (and PR-C's read verbs) rely on; every other field is
|
|
32
|
+
* enrichment a later PR may add without breaking the contract.
|
|
33
|
+
*/
|
|
34
|
+
export interface PackIndexEntity {
|
|
35
|
+
/** Completion token — the prefixed name a user types (e.g. `ds:Button`). */
|
|
36
|
+
readonly name: string;
|
|
37
|
+
/** Prefixed primary `rdf:type` — the completion filter key (e.g. `ds:UIBlock`). */
|
|
38
|
+
readonly type: string;
|
|
39
|
+
/** Full subject URI. */
|
|
40
|
+
readonly uri?: string;
|
|
41
|
+
/** Prefixed subject (same value as `name`, kept explicit for readers). */
|
|
42
|
+
readonly prefixed?: string;
|
|
43
|
+
/** All prefixed `rdf:type` values asserted on the subject. */
|
|
44
|
+
readonly types?: readonly string[];
|
|
45
|
+
/** Human label (rdfs:label / skos:prefLabel / dcterms:title / schema:name). */
|
|
46
|
+
readonly label?: string | null;
|
|
47
|
+
/**
|
|
48
|
+
* Alternative completable names — the `ds:name` values a family (e.g.
|
|
49
|
+
* `ds:Tier`, matched by `tier lookup`) is addressed by, when they differ from
|
|
50
|
+
* `name`/`label`. Enrichment for the storeless name-completion sources.
|
|
51
|
+
*/
|
|
52
|
+
readonly altNames?: readonly string[];
|
|
53
|
+
/** Schema (`tbox`) vs individual (`abox`). */
|
|
54
|
+
readonly box?: "tbox" | "abox";
|
|
55
|
+
/** Short description (rdfs:comment / dcterms:description / skos:definition). */
|
|
56
|
+
readonly description?: string | null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The storeless entity index a pack ships as `index.json`.
|
|
61
|
+
*
|
|
62
|
+
* `version` is `2` for packs built by this kernel (the v2 enrichment fields on
|
|
63
|
+
* each entity + the resource browser depend on it); `1` is a legacy artifact
|
|
64
|
+
* whose enrichment is absent — the resources provider degrades to a "run
|
|
65
|
+
* `pragma sources update`" hint rather than a live re-index.
|
|
66
|
+
*/
|
|
67
|
+
export interface PackIndex {
|
|
68
|
+
readonly version: 1 | 2;
|
|
69
|
+
/** The pack's content hash (matches its cache directory name). */
|
|
70
|
+
readonly contentHash: string;
|
|
71
|
+
readonly prefixes: Readonly<Record<string, string>>;
|
|
72
|
+
readonly entities: readonly PackIndexEntity[];
|
|
73
|
+
/** Full-type-URI → count of asserted instances. */
|
|
74
|
+
readonly instanceCountByType: Readonly<Record<string, number>>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** zod schema validating a persisted {@link PackIndexEntity}. */
|
|
78
|
+
export const packIndexEntitySchema: z.ZodType<PackIndexEntity> = z.object({
|
|
79
|
+
name: z.string(),
|
|
80
|
+
type: z.string(),
|
|
81
|
+
uri: z.string().optional(),
|
|
82
|
+
prefixed: z.string().optional(),
|
|
83
|
+
types: z.array(z.string()).optional(),
|
|
84
|
+
label: z.string().nullable().optional(),
|
|
85
|
+
altNames: z.array(z.string()).optional(),
|
|
86
|
+
box: z.enum(["tbox", "abox"]).optional(),
|
|
87
|
+
description: z.string().nullable().optional(),
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
/** zod schema validating a persisted {@link PackIndex}. */
|
|
91
|
+
export const packIndexSchema: z.ZodType<PackIndex> = z.object({
|
|
92
|
+
version: z.union([z.literal(1), z.literal(2)]),
|
|
93
|
+
contentHash: z.string(),
|
|
94
|
+
prefixes: z.record(z.string(), z.string()),
|
|
95
|
+
entities: z.array(packIndexEntitySchema),
|
|
96
|
+
instanceCountByType: z.record(z.string(), z.number()),
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
/** zod schema validating a persisted `manifest.json`. */
|
|
100
|
+
export const manifestSchema = z.object({
|
|
101
|
+
name: z.string(),
|
|
102
|
+
version: z.string(),
|
|
103
|
+
/** The config `packages` ref this pack was built from (verbatim), or a label. */
|
|
104
|
+
sourceRef: z.string(),
|
|
105
|
+
contentHash: z.string(),
|
|
106
|
+
prefixes: z.record(z.string(), z.string()),
|
|
107
|
+
createdAt: z.string(),
|
|
108
|
+
/**
|
|
109
|
+
* The store's triple count at build time. Cross-checked against the booted
|
|
110
|
+
* store so a truncated-but-non-empty `data.nq` (a partial graph that passes
|
|
111
|
+
* the mere size>0 completeness gate) surfaces as STORE_UNAVAILABLE rather
|
|
112
|
+
* than being served silently (A9). Optional — packs built before this field
|
|
113
|
+
* skip the check.
|
|
114
|
+
*/
|
|
115
|
+
tripleCount: z.number().optional(),
|
|
116
|
+
/**
|
|
117
|
+
* The distinct abox entity count (matches {@link entityTotal}). Lets
|
|
118
|
+
* `sources status` report the figure without parsing the whole `index.json`
|
|
119
|
+
* (A10). Optional — packs built before this field fall back to the index read.
|
|
120
|
+
*/
|
|
121
|
+
entityCount: z.number().optional(),
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
/** Pack provenance and the prefixes the store was built with. */
|
|
125
|
+
export type Manifest = z.infer<typeof manifestSchema>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime kernel barrel — the per-invocation context, its builder, and the
|
|
3
|
+
* lazy store / query facade the store-backed capabilities reach through.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export { bootRuntime } from "./boot.js";
|
|
7
|
+
export { createQueryFacade } from "./facade.js";
|
|
8
|
+
export { createLazyStore, type LazyStoreContext } from "./store.js";
|
|
9
|
+
export type {
|
|
10
|
+
GlobalFlags,
|
|
11
|
+
LazyStore,
|
|
12
|
+
PragmaRuntime,
|
|
13
|
+
QueryFacade,
|
|
14
|
+
StoreSession,
|
|
15
|
+
} from "./types.js";
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the boot decision into a live {@link StoreSession} — the heavy,
|
|
3
|
+
* dynamic-import-only module that pulls ke/ke-graphql/oxigraph.
|
|
4
|
+
*
|
|
5
|
+
* The lazy store reaches this behind `await import(...)`, so nothing on the
|
|
6
|
+
* storeless fast path (or in the `capabilities/index` static graph) loads the
|
|
7
|
+
* runtime. Boot is cache-only and networkless: a cold store surfaces
|
|
8
|
+
* STORE_UNAVAILABLE with the single `pragma sources update` recovery, rather
|
|
9
|
+
* than silently reaching out.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { ConfigLayers } from "../config/types.js";
|
|
13
|
+
import { materializeEmbeddedPack } from "./graphpack/embedded.js";
|
|
14
|
+
import { readPack } from "./graphpack/read.js";
|
|
15
|
+
import { resolveSources } from "./resolveSources.js";
|
|
16
|
+
import { storeUnavailable } from "./storeReadiness.js";
|
|
17
|
+
import type { StoreSession } from "./types.js";
|
|
18
|
+
|
|
19
|
+
/** What {@link loadStoreSession} needs from the runtime. */
|
|
20
|
+
export interface LoadSessionContext {
|
|
21
|
+
readonly cwd: string;
|
|
22
|
+
readonly loadConfig: () => Promise<ConfigLayers>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Boot the store session per the decision table.
|
|
27
|
+
*
|
|
28
|
+
* @param ctx - The working directory and memoized config loader.
|
|
29
|
+
* @returns The booted store session.
|
|
30
|
+
* @throws PragmaError STORE_UNAVAILABLE when the store is cold.
|
|
31
|
+
* @note Impure — reads config, materializes/loads a pack, boots oxigraph.
|
|
32
|
+
*/
|
|
33
|
+
export async function loadStoreSession(
|
|
34
|
+
ctx: LoadSessionContext,
|
|
35
|
+
): Promise<StoreSession> {
|
|
36
|
+
const layers = await ctx.loadConfig();
|
|
37
|
+
const decision = resolveSources(layers, ctx.cwd);
|
|
38
|
+
|
|
39
|
+
if (decision.kind === "unavailable") {
|
|
40
|
+
// The SAME cold-store diagnostic the native MCP surfaces raise (shared via
|
|
41
|
+
// storeReadiness), so a cold store reads identically on every surface.
|
|
42
|
+
throw storeUnavailable(decision.reason);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const dir =
|
|
46
|
+
decision.kind === "embedded" ? materializeEmbeddedPack() : decision.dir;
|
|
47
|
+
return readPack(dir);
|
|
48
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The project lock — `pragma.lock.json`, committed at the project root.
|
|
3
|
+
*
|
|
4
|
+
* It pins the single combined pack the store boots from: `contentHash` names
|
|
5
|
+
* the pack's cache directory, and `packs[]` records the resolved provenance of
|
|
6
|
+
* every configured source (so `sources status` reports it and a `--frozen`
|
|
7
|
+
* update re-resolves to exactly these commits). Serialization is canonical —
|
|
8
|
+
* fixed field order, packs sorted by name, one trailing newline — so a
|
|
9
|
+
* `--frozen` update that changes nothing rewrites a byte-identical file.
|
|
10
|
+
*
|
|
11
|
+
* Pure: zod + fs only, no store code, so both the storeless `sources status`
|
|
12
|
+
* verb and the store-boot decision table read it without booting oxigraph.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
import { lockPath } from "./paths.js";
|
|
18
|
+
|
|
19
|
+
/** One resolved source's provenance in the lock. */
|
|
20
|
+
export const lockPackageSchema = z.object({
|
|
21
|
+
/** Package name (config `packages` entry name / npm name). */
|
|
22
|
+
name: z.string(),
|
|
23
|
+
/** The config `packages` source ref, verbatim (e.g. `git+https://…#main`). */
|
|
24
|
+
source: z.string(),
|
|
25
|
+
/** The resolved commit / version / absolute path this ref pinned to. */
|
|
26
|
+
resolved: z.string(),
|
|
27
|
+
/** ISO timestamp the ref was resolved. */
|
|
28
|
+
resolvedAt: z.string(),
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
/** The lock document. */
|
|
32
|
+
export const pragmaLockSchema = z.object({
|
|
33
|
+
version: z.literal(1),
|
|
34
|
+
/** The combined pack's content hash — names its cache directory. */
|
|
35
|
+
contentHash: z.string(),
|
|
36
|
+
packs: z.array(lockPackageSchema),
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
/** One resolved source's provenance in the lock. */
|
|
40
|
+
export type PragmaLockPackage = z.infer<typeof lockPackageSchema>;
|
|
41
|
+
/** The parsed lock document. */
|
|
42
|
+
export type PragmaLock = z.infer<typeof pragmaLockSchema>;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Read and validate the lock for a working directory.
|
|
46
|
+
*
|
|
47
|
+
* @param cwd - The project directory.
|
|
48
|
+
* @returns The parsed lock, or `undefined` when absent or invalid.
|
|
49
|
+
* @note Impure — reads from disk.
|
|
50
|
+
*/
|
|
51
|
+
export function readLock(cwd: string): PragmaLock | undefined {
|
|
52
|
+
const path = lockPath(cwd);
|
|
53
|
+
if (!existsSync(path)) return undefined;
|
|
54
|
+
try {
|
|
55
|
+
return pragmaLockSchema.parse(JSON.parse(readFileSync(path, "utf-8")));
|
|
56
|
+
} catch {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Serialize a lock canonically — stable field order, sorted packs, newline. */
|
|
62
|
+
export function serializeLock(lock: PragmaLock): string {
|
|
63
|
+
const packs = [...lock.packs]
|
|
64
|
+
.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0))
|
|
65
|
+
.map((pack) => ({
|
|
66
|
+
name: pack.name,
|
|
67
|
+
source: pack.source,
|
|
68
|
+
resolved: pack.resolved,
|
|
69
|
+
resolvedAt: pack.resolvedAt,
|
|
70
|
+
}));
|
|
71
|
+
return `${JSON.stringify(
|
|
72
|
+
{ version: lock.version, contentHash: lock.contentHash, packs },
|
|
73
|
+
null,
|
|
74
|
+
2,
|
|
75
|
+
)}\n`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Write the lock for a working directory.
|
|
80
|
+
*
|
|
81
|
+
* @param cwd - The project directory.
|
|
82
|
+
* @param lock - The lock to persist.
|
|
83
|
+
* @returns The exact bytes written (for the write effect / assertions).
|
|
84
|
+
* @note Impure — writes `pragma.lock.json`.
|
|
85
|
+
*/
|
|
86
|
+
export function writeLock(cwd: string, lock: PragmaLock): string {
|
|
87
|
+
const content = serializeLock(lock);
|
|
88
|
+
writeFileSync(lockPath(cwd), content);
|
|
89
|
+
return content;
|
|
90
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem locations for the store layer: the content-addressed pack cache,
|
|
3
|
+
* the git-ref checkout cache, and the project lock file.
|
|
4
|
+
*
|
|
5
|
+
* The pack cache lives under `$XDG_CACHE_HOME/pragma/packs/<contentHash>/`
|
|
6
|
+
* (content-addressed, so a new source set is a new directory and invalidation
|
|
7
|
+
* is free); ref checkouts under `.../pragma/refs/`. The lock is a committed
|
|
8
|
+
* project artifact at `<cwd>/pragma.lock.json`. All cache paths derive from the
|
|
9
|
+
* config kernel's {@link cacheDir}, so the XDG isolation the tests install
|
|
10
|
+
* contains them.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { join } from "node:path";
|
|
14
|
+
import { cacheDir } from "../config/paths.js";
|
|
15
|
+
|
|
16
|
+
/** The lock file basename, committed at the project root. */
|
|
17
|
+
export const LOCK_BASENAME = "pragma.lock.json";
|
|
18
|
+
|
|
19
|
+
/** `$XDG_CACHE_HOME/pragma/packs` — the content-addressed pack cache root. */
|
|
20
|
+
export function packsCacheDir(): string {
|
|
21
|
+
return join(cacheDir(), "packs");
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** `$XDG_CACHE_HOME/pragma/refs` — cached git-ref checkouts. */
|
|
25
|
+
export function refsCacheDir(): string {
|
|
26
|
+
return join(cacheDir(), "refs");
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** The cache directory for a pack, named by its content hash. */
|
|
30
|
+
export function packDir(contentHash: string): string {
|
|
31
|
+
return join(packsCacheDir(), contentHash);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** The project lock file for a working directory. */
|
|
35
|
+
export function lockPath(cwd: string): string {
|
|
36
|
+
return join(cwd, LOCK_BASENAME);
|
|
37
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { runStoreProbe } from "./probe.js";
|
|
3
|
+
|
|
4
|
+
describe("store probe (in-process)", () => {
|
|
5
|
+
it("boots the embedded pack and reports entity + triple counts", async () => {
|
|
6
|
+
const out = JSON.parse(await runStoreProbe()) as {
|
|
7
|
+
ok: boolean;
|
|
8
|
+
entities: number;
|
|
9
|
+
triples: string;
|
|
10
|
+
};
|
|
11
|
+
expect(out.ok).toBe(true);
|
|
12
|
+
// The embedded sample pack ships six indexed entities (3 abox + 3 tbox).
|
|
13
|
+
expect(out.entities).toBe(6);
|
|
14
|
+
expect(Number(out.triples)).toBeGreaterThan(0);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `__store-probe` diagnostic — boot the embedded pack and report a count.
|
|
3
|
+
*
|
|
4
|
+
* Its whole reason to exist is the compiled binary: it exercises the full
|
|
5
|
+
* store-boot path (oxigraph WASM load, n-quads cache load, `compileFromExtraction`,
|
|
6
|
+
* a SPARQL count) so a spawned-binary smoke test can prove the WASM and the
|
|
7
|
+
* embedded pack survive `bun build --compile`. A silent store-boot failure in
|
|
8
|
+
* the standalone binary is the one failure vitest's in-process suite cannot
|
|
9
|
+
* catch, so this is the guard. Storeless code never imports it — the bin
|
|
10
|
+
* fast-paths it behind a dynamic import.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Boot the embedded pack and return a one-line JSON diagnostic.
|
|
15
|
+
*
|
|
16
|
+
* @returns `{ ok, entities, triples }` as compact JSON.
|
|
17
|
+
* @note Impure — materializes the embedded pack and boots a store.
|
|
18
|
+
*/
|
|
19
|
+
export async function runStoreProbe(): Promise<string> {
|
|
20
|
+
const [{ materializeEmbeddedPack }, { readPack }] = await Promise.all([
|
|
21
|
+
import("./graphpack/embedded.js"),
|
|
22
|
+
import("./graphpack/read.js"),
|
|
23
|
+
]);
|
|
24
|
+
const session = await readPack(materializeEmbeddedPack());
|
|
25
|
+
try {
|
|
26
|
+
const result = await session.store.query(
|
|
27
|
+
"SELECT (COUNT(*) AS ?n) WHERE { ?s ?p ?o }" as never,
|
|
28
|
+
);
|
|
29
|
+
const triples =
|
|
30
|
+
result.type === "select" ? (result.bindings[0]?.n ?? "0") : "0";
|
|
31
|
+
return JSON.stringify({
|
|
32
|
+
ok: true,
|
|
33
|
+
entities: session.index.entities.length,
|
|
34
|
+
triples,
|
|
35
|
+
});
|
|
36
|
+
} finally {
|
|
37
|
+
session.store.dispose();
|
|
38
|
+
}
|
|
39
|
+
}
|