@quolu/lattice 0.70.0 → 0.71.1
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/bin/lattice.mjs +21 -0
- package/package.json +1 -1
- package/sensor/dist/bin/lattice-sensor.js +746 -323
- package/sensor/dist/bin/viewer-gate.d.ts +17 -0
- package/sensor/dist/bin/viewer-gate.d.ts.map +1 -0
- package/sensor/dist/bin/viewer-gate.js +31 -0
- package/sensor/dist/bin/viewer-gate.js.map +1 -0
- package/sensor/dist/context/formatter.d.ts +7 -1
- package/sensor/dist/context/formatter.d.ts.map +1 -1
- package/sensor/dist/context/formatter.js +12 -6
- package/sensor/dist/context/formatter.js.map +1 -1
- package/sensor/dist/context/index.d.ts +12 -0
- package/sensor/dist/context/index.d.ts.map +1 -1
- package/sensor/dist/context/index.js +103 -16
- package/sensor/dist/context/index.js.map +1 -1
- package/sensor/dist/db/index.d.ts +23 -2
- package/sensor/dist/db/index.d.ts.map +1 -1
- package/sensor/dist/db/index.js +109 -31
- package/sensor/dist/db/index.js.map +1 -1
- package/sensor/dist/db/migrations.d.ts +1 -1
- package/sensor/dist/db/migrations.d.ts.map +1 -1
- package/sensor/dist/db/migrations.js +68 -1
- package/sensor/dist/db/migrations.js.map +1 -1
- package/sensor/dist/db/queries.d.ts +583 -6
- package/sensor/dist/db/queries.d.ts.map +1 -1
- package/sensor/dist/db/queries.js +1425 -57
- package/sensor/dist/db/queries.js.map +1 -1
- package/sensor/dist/db/schema.sql +27 -4
- package/sensor/dist/db/sqlite-adapter.d.ts +2 -0
- package/sensor/dist/db/sqlite-adapter.d.ts.map +1 -1
- package/sensor/dist/db/sqlite-adapter.js +56 -7
- package/sensor/dist/db/sqlite-adapter.js.map +1 -1
- package/sensor/dist/db/synthesis-stage.d.ts +12 -0
- package/sensor/dist/db/synthesis-stage.d.ts.map +1 -0
- package/sensor/dist/db/synthesis-stage.js +93 -0
- package/sensor/dist/db/synthesis-stage.js.map +1 -0
- package/sensor/dist/db/wal-valve.d.ts +32 -12
- package/sensor/dist/db/wal-valve.d.ts.map +1 -1
- package/sensor/dist/db/wal-valve.js +65 -22
- package/sensor/dist/db/wal-valve.js.map +1 -1
- package/sensor/dist/db/wsl-shared-index.d.ts +53 -0
- package/sensor/dist/db/wsl-shared-index.d.ts.map +1 -0
- package/sensor/dist/db/wsl-shared-index.js +121 -0
- package/sensor/dist/db/wsl-shared-index.js.map +1 -0
- package/sensor/dist/directory.d.ts +126 -2
- package/sensor/dist/directory.d.ts.map +1 -1
- package/sensor/dist/directory.js +285 -16
- package/sensor/dist/directory.js.map +1 -1
- package/sensor/dist/errors.d.ts +14 -0
- package/sensor/dist/errors.d.ts.map +1 -1
- package/sensor/dist/errors.js +16 -1
- package/sensor/dist/errors.js.map +1 -1
- package/sensor/dist/extraction/cfml-extractor.d.ts +1 -0
- package/sensor/dist/extraction/cfml-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/cfml-extractor.js +15 -3
- package/sensor/dist/extraction/cfml-extractor.js.map +1 -1
- package/sensor/dist/extraction/dfm-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/dfm-extractor.js +14 -10
- package/sensor/dist/extraction/dfm-extractor.js.map +1 -1
- package/sensor/dist/extraction/extraction-version.d.ts +1 -1
- package/sensor/dist/extraction/extraction-version.d.ts.map +1 -1
- package/sensor/dist/extraction/extraction-version.js +3 -1
- package/sensor/dist/extraction/extraction-version.js.map +1 -1
- package/sensor/dist/extraction/function-ref.d.ts +6 -4
- package/sensor/dist/extraction/function-ref.d.ts.map +1 -1
- package/sensor/dist/extraction/function-ref.js +35 -14
- package/sensor/dist/extraction/function-ref.js.map +1 -1
- package/sensor/dist/extraction/generated-detection.d.ts +48 -12
- package/sensor/dist/extraction/generated-detection.d.ts.map +1 -1
- package/sensor/dist/extraction/generated-detection.js +176 -11
- package/sensor/dist/extraction/generated-detection.js.map +1 -1
- package/sensor/dist/extraction/grammars.d.ts +38 -0
- package/sensor/dist/extraction/grammars.d.ts.map +1 -1
- package/sensor/dist/extraction/grammars.js +115 -3
- package/sensor/dist/extraction/grammars.js.map +1 -1
- package/sensor/dist/extraction/index.d.ts +218 -14
- package/sensor/dist/extraction/index.d.ts.map +1 -1
- package/sensor/dist/extraction/index.js +887 -175
- package/sensor/dist/extraction/index.js.map +1 -1
- package/sensor/dist/extraction/languages/c-cpp.d.ts +58 -0
- package/sensor/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/c-cpp.js +310 -19
- package/sensor/dist/extraction/languages/c-cpp.js.map +1 -1
- package/sensor/dist/extraction/languages/dart.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/dart.js +8 -3
- package/sensor/dist/extraction/languages/dart.js.map +1 -1
- package/sensor/dist/extraction/languages/erlang.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/erlang.js +58 -22
- package/sensor/dist/extraction/languages/erlang.js.map +1 -1
- package/sensor/dist/extraction/languages/javascript.js +1 -1
- package/sensor/dist/extraction/languages/javascript.js.map +1 -1
- package/sensor/dist/extraction/languages/kotlin.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/kotlin.js +169 -36
- package/sensor/dist/extraction/languages/kotlin.js.map +1 -1
- package/sensor/dist/extraction/languages/lua.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/lua.js +4 -1
- package/sensor/dist/extraction/languages/lua.js.map +1 -1
- package/sensor/dist/extraction/languages/objc.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/objc.js +4 -0
- package/sensor/dist/extraction/languages/objc.js.map +1 -1
- package/sensor/dist/extraction/languages/python.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/python.js +71 -0
- package/sensor/dist/extraction/languages/python.js.map +1 -1
- package/sensor/dist/extraction/languages/rust.d.ts +20 -0
- package/sensor/dist/extraction/languages/rust.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/rust.js +50 -20
- package/sensor/dist/extraction/languages/rust.js.map +1 -1
- package/sensor/dist/extraction/languages/scala.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/scala.js +18 -3
- package/sensor/dist/extraction/languages/scala.js.map +1 -1
- package/sensor/dist/extraction/languages/swift.d.ts +15 -0
- package/sensor/dist/extraction/languages/swift.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/swift.js +50 -0
- package/sensor/dist/extraction/languages/swift.js.map +1 -1
- package/sensor/dist/extraction/languages/typescript.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/typescript.js +9 -2
- package/sensor/dist/extraction/languages/typescript.js.map +1 -1
- package/sensor/dist/extraction/liquid-extractor.d.ts +18 -0
- package/sensor/dist/extraction/liquid-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/liquid-extractor.js +98 -22
- package/sensor/dist/extraction/liquid-extractor.js.map +1 -1
- package/sensor/dist/extraction/mybatis-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/mybatis-extractor.js +6 -4
- package/sensor/dist/extraction/mybatis-extractor.js.map +1 -1
- package/sensor/dist/extraction/parse-pool.d.ts +7 -0
- package/sensor/dist/extraction/parse-pool.d.ts.map +1 -1
- package/sensor/dist/extraction/parse-pool.js +20 -1
- package/sensor/dist/extraction/parse-pool.js.map +1 -1
- package/sensor/dist/extraction/syntax-tokens.d.ts +103 -0
- package/sensor/dist/extraction/syntax-tokens.d.ts.map +1 -0
- package/sensor/dist/extraction/syntax-tokens.js +381 -0
- package/sensor/dist/extraction/syntax-tokens.js.map +1 -0
- package/sensor/dist/extraction/tree-sitter-helpers.d.ts +5 -0
- package/sensor/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
- package/sensor/dist/extraction/tree-sitter-helpers.js +17 -0
- package/sensor/dist/extraction/tree-sitter-helpers.js.map +1 -1
- package/sensor/dist/extraction/tree-sitter-types.d.ts +31 -3
- package/sensor/dist/extraction/tree-sitter-types.d.ts.map +1 -1
- package/sensor/dist/extraction/tree-sitter.d.ts +101 -18
- package/sensor/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/sensor/dist/extraction/tree-sitter.js +928 -134
- package/sensor/dist/extraction/tree-sitter.js.map +1 -1
- package/sensor/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
- package/sensor/dist/file-limits.d.ts +40 -0
- package/sensor/dist/file-limits.d.ts.map +1 -0
- package/sensor/dist/file-limits.js +147 -0
- package/sensor/dist/file-limits.js.map +1 -0
- package/sensor/dist/graph/branch-guards.d.ts +265 -0
- package/sensor/dist/graph/branch-guards.d.ts.map +1 -0
- package/sensor/dist/graph/branch-guards.js +2325 -0
- package/sensor/dist/graph/branch-guards.js.map +1 -0
- package/sensor/dist/graph/dead-code.d.ts +251 -0
- package/sensor/dist/graph/dead-code.d.ts.map +1 -0
- package/sensor/dist/graph/dead-code.js +776 -0
- package/sensor/dist/graph/dead-code.js.map +1 -0
- package/sensor/dist/graph/dynamic-boundary-report.d.ts +121 -0
- package/sensor/dist/graph/dynamic-boundary-report.d.ts.map +1 -0
- package/sensor/dist/graph/dynamic-boundary-report.js +283 -0
- package/sensor/dist/graph/dynamic-boundary-report.js.map +1 -0
- package/sensor/dist/graph/index.d.ts +4 -0
- package/sensor/dist/graph/index.d.ts.map +1 -1
- package/sensor/dist/graph/index.js +16 -1
- package/sensor/dist/graph/index.js.map +1 -1
- package/sensor/dist/graph/named-symbol-flow.d.ts +125 -0
- package/sensor/dist/graph/named-symbol-flow.d.ts.map +1 -0
- package/sensor/dist/graph/named-symbol-flow.js +552 -0
- package/sensor/dist/graph/named-symbol-flow.js.map +1 -0
- package/sensor/dist/graph/queries.d.ts.map +1 -1
- package/sensor/dist/graph/queries.js +2 -0
- package/sensor/dist/graph/queries.js.map +1 -1
- package/sensor/dist/graph/symbol-lookup.d.ts +83 -0
- package/sensor/dist/graph/symbol-lookup.d.ts.map +1 -0
- package/sensor/dist/graph/symbol-lookup.js +181 -0
- package/sensor/dist/graph/symbol-lookup.js.map +1 -0
- package/sensor/dist/graph/traversal.d.ts +9 -0
- package/sensor/dist/graph/traversal.d.ts.map +1 -1
- package/sensor/dist/graph/traversal.js +62 -36
- package/sensor/dist/graph/traversal.js.map +1 -1
- package/sensor/dist/graph/type-hierarchy.d.ts +155 -0
- package/sensor/dist/graph/type-hierarchy.d.ts.map +1 -0
- package/sensor/dist/graph/type-hierarchy.js +382 -0
- package/sensor/dist/graph/type-hierarchy.js.map +1 -0
- package/sensor/dist/index.d.ts +272 -10
- package/sensor/dist/index.d.ts.map +1 -1
- package/sensor/dist/index.js +510 -34
- package/sensor/dist/index.js.map +1 -1
- package/sensor/dist/mcp/answer-freshness.d.ts +10 -0
- package/sensor/dist/mcp/answer-freshness.d.ts.map +1 -0
- package/sensor/dist/mcp/answer-freshness.js +68 -0
- package/sensor/dist/mcp/answer-freshness.js.map +1 -0
- package/sensor/dist/mcp/daemon-manager.d.ts +1 -1
- package/sensor/dist/mcp/daemon-manager.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon-manager.js +17 -1
- package/sensor/dist/mcp/daemon-manager.js.map +1 -1
- package/sensor/dist/mcp/daemon-paths.d.ts +8 -0
- package/sensor/dist/mcp/daemon-paths.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon-paths.js +65 -2
- package/sensor/dist/mcp/daemon-paths.js.map +1 -1
- package/sensor/dist/mcp/daemon-registry.d.ts +17 -4
- package/sensor/dist/mcp/daemon-registry.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon-registry.js +133 -23
- package/sensor/dist/mcp/daemon-registry.js.map +1 -1
- package/sensor/dist/mcp/daemon.d.ts +26 -13
- package/sensor/dist/mcp/daemon.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon.js +126 -32
- package/sensor/dist/mcp/daemon.js.map +1 -1
- package/sensor/dist/mcp/dynamic-boundaries.d.ts +1 -10
- package/sensor/dist/mcp/dynamic-boundaries.d.ts.map +1 -1
- package/sensor/dist/mcp/dynamic-boundaries.js +46 -42
- package/sensor/dist/mcp/dynamic-boundaries.js.map +1 -1
- package/sensor/dist/mcp/engine.d.ts +31 -9
- package/sensor/dist/mcp/engine.d.ts.map +1 -1
- package/sensor/dist/mcp/engine.js +190 -79
- package/sensor/dist/mcp/engine.js.map +1 -1
- package/sensor/dist/mcp/explore-dedup.d.ts +140 -0
- package/sensor/dist/mcp/explore-dedup.d.ts.map +1 -0
- package/sensor/dist/mcp/explore-dedup.js +239 -0
- package/sensor/dist/mcp/explore-dedup.js.map +1 -0
- package/sensor/dist/mcp/explore-diagnostics.d.ts +289 -0
- package/sensor/dist/mcp/explore-diagnostics.d.ts.map +1 -0
- package/sensor/dist/mcp/explore-diagnostics.js +558 -0
- package/sensor/dist/mcp/explore-diagnostics.js.map +1 -0
- package/sensor/dist/mcp/explore-session-state.d.ts +217 -0
- package/sensor/dist/mcp/explore-session-state.d.ts.map +1 -0
- package/sensor/dist/mcp/explore-session-state.js +322 -0
- package/sensor/dist/mcp/explore-session-state.js.map +1 -0
- package/sensor/dist/mcp/index-freshness-worker.d.ts +2 -0
- package/sensor/dist/mcp/index-freshness-worker.d.ts.map +1 -0
- package/sensor/dist/mcp/index-freshness-worker.js +30 -0
- package/sensor/dist/mcp/index-freshness-worker.js.map +1 -0
- package/sensor/dist/mcp/index-freshness.d.ts +7 -0
- package/sensor/dist/mcp/index-freshness.d.ts.map +1 -0
- package/sensor/dist/mcp/index-freshness.js +94 -0
- package/sensor/dist/mcp/index-freshness.js.map +1 -0
- package/sensor/dist/mcp/index.d.ts +3 -1
- package/sensor/dist/mcp/index.d.ts.map +1 -1
- package/sensor/dist/mcp/index.js +109 -12
- package/sensor/dist/mcp/index.js.map +1 -1
- package/sensor/dist/mcp/liveness-watchdog.d.ts +4 -1
- package/sensor/dist/mcp/liveness-watchdog.d.ts.map +1 -1
- package/sensor/dist/mcp/liveness-watchdog.js +11 -2
- package/sensor/dist/mcp/liveness-watchdog.js.map +1 -1
- package/sensor/dist/mcp/project-lifecycle.d.ts +9 -0
- package/sensor/dist/mcp/project-lifecycle.d.ts.map +1 -0
- package/sensor/dist/mcp/project-lifecycle.js +182 -0
- package/sensor/dist/mcp/project-lifecycle.js.map +1 -0
- package/sensor/dist/mcp/proxy.d.ts.map +1 -1
- package/sensor/dist/mcp/proxy.js +15 -1
- package/sensor/dist/mcp/proxy.js.map +1 -1
- package/sensor/dist/mcp/query-pool.d.ts +2 -2
- package/sensor/dist/mcp/query-pool.d.ts.map +1 -1
- package/sensor/dist/mcp/query-pool.js +9 -7
- package/sensor/dist/mcp/query-pool.js.map +1 -1
- package/sensor/dist/mcp/query-worker.js +2 -2
- package/sensor/dist/mcp/query-worker.js.map +1 -1
- package/sensor/dist/mcp/server-instructions.d.ts +2 -2
- package/sensor/dist/mcp/server-instructions.d.ts.map +1 -1
- package/sensor/dist/mcp/server-instructions.js +13 -6
- package/sensor/dist/mcp/server-instructions.js.map +1 -1
- package/sensor/dist/mcp/session.d.ts +16 -0
- package/sensor/dist/mcp/session.d.ts.map +1 -1
- package/sensor/dist/mcp/session.js +36 -13
- package/sensor/dist/mcp/session.js.map +1 -1
- package/sensor/dist/mcp/startup-handshake.d.ts +3 -1
- package/sensor/dist/mcp/startup-handshake.d.ts.map +1 -1
- package/sensor/dist/mcp/startup-handshake.js +10 -2
- package/sensor/dist/mcp/startup-handshake.js.map +1 -1
- package/sensor/dist/mcp/tools.d.ts +496 -38
- package/sensor/dist/mcp/tools.d.ts.map +1 -1
- package/sensor/dist/mcp/tools.js +4021 -772
- package/sensor/dist/mcp/tools.js.map +1 -1
- package/sensor/dist/mcp/writer-lock.d.ts +61 -0
- package/sensor/dist/mcp/writer-lock.d.ts.map +1 -0
- package/sensor/dist/mcp/writer-lock.js +260 -0
- package/sensor/dist/mcp/writer-lock.js.map +1 -0
- package/sensor/dist/project-config.d.ts +23 -0
- package/sensor/dist/project-config.d.ts.map +1 -1
- package/sensor/dist/project-config.js +39 -2
- package/sensor/dist/project-config.js.map +1 -1
- package/sensor/dist/resolution/alias-binding.d.ts +56 -0
- package/sensor/dist/resolution/alias-binding.d.ts.map +1 -0
- package/sensor/dist/resolution/alias-binding.js +127 -0
- package/sensor/dist/resolution/alias-binding.js.map +1 -0
- package/sensor/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
- package/sensor/dist/resolution/c-fnptr-synthesizer.js +21 -19
- package/sensor/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
- package/sensor/dist/resolution/callback-synthesizer.d.ts +23 -1
- package/sensor/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/sensor/dist/resolution/callback-synthesizer.js +356 -155
- package/sensor/dist/resolution/callback-synthesizer.js.map +1 -1
- package/sensor/dist/resolution/cpp-constructor.d.ts +4 -0
- package/sensor/dist/resolution/cpp-constructor.d.ts.map +1 -0
- package/sensor/dist/resolution/cpp-constructor.js +123 -0
- package/sensor/dist/resolution/cpp-constructor.js.map +1 -0
- package/sensor/dist/resolution/cpp-macro-visibility.d.ts +12 -0
- package/sensor/dist/resolution/cpp-macro-visibility.d.ts.map +1 -0
- package/sensor/dist/resolution/cpp-macro-visibility.js +342 -0
- package/sensor/dist/resolution/cpp-macro-visibility.js.map +1 -0
- package/sensor/dist/resolution/expo-router-synthesizer.d.ts +32 -0
- package/sensor/dist/resolution/expo-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/expo-router-synthesizer.js +189 -0
- package/sensor/dist/resolution/expo-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/frameworks/csharp.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/csharp.js +96 -2
- package/sensor/dist/resolution/frameworks/csharp.js.map +1 -1
- package/sensor/dist/resolution/frameworks/expo-router.d.ts +189 -0
- package/sensor/dist/resolution/frameworks/expo-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/expo-router.js +785 -0
- package/sensor/dist/resolution/frameworks/expo-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/express.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/express.js +251 -16
- package/sensor/dist/resolution/frameworks/express.js.map +1 -1
- package/sensor/dist/resolution/frameworks/index.d.ts +5 -0
- package/sensor/dist/resolution/frameworks/index.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/index.js +29 -1
- package/sensor/dist/resolution/frameworks/index.js.map +1 -1
- package/sensor/dist/resolution/frameworks/java.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/java.js +79 -47
- package/sensor/dist/resolution/frameworks/java.js.map +1 -1
- package/sensor/dist/resolution/frameworks/laravel.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/laravel.js +294 -4
- package/sensor/dist/resolution/frameworks/laravel.js.map +1 -1
- package/sensor/dist/resolution/frameworks/nestjs.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/nestjs.js +6 -14
- package/sensor/dist/resolution/frameworks/nestjs.js.map +1 -1
- package/sensor/dist/resolution/frameworks/nextjs.d.ts +76 -0
- package/sensor/dist/resolution/frameworks/nextjs.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/nextjs.js +328 -0
- package/sensor/dist/resolution/frameworks/nextjs.js.map +1 -0
- package/sensor/dist/resolution/frameworks/object-literal.d.ts +32 -0
- package/sensor/dist/resolution/frameworks/object-literal.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/object-literal.js +139 -0
- package/sensor/dist/resolution/frameworks/object-literal.js.map +1 -0
- package/sensor/dist/resolution/frameworks/package-deps.d.ts +14 -0
- package/sensor/dist/resolution/frameworks/package-deps.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/package-deps.js +78 -0
- package/sensor/dist/resolution/frameworks/package-deps.js.map +1 -0
- package/sensor/dist/resolution/frameworks/python.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/python.js +166 -0
- package/sensor/dist/resolution/frameworks/python.js.map +1 -1
- package/sensor/dist/resolution/frameworks/react-native.d.ts +26 -0
- package/sensor/dist/resolution/frameworks/react-native.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/react-native.js +153 -14
- package/sensor/dist/resolution/frameworks/react-native.js.map +1 -1
- package/sensor/dist/resolution/frameworks/react-router.d.ts +46 -0
- package/sensor/dist/resolution/frameworks/react-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/react-router.js +187 -0
- package/sensor/dist/resolution/frameworks/react-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/react.d.ts +2 -1
- package/sensor/dist/resolution/frameworks/react.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/react.js +188 -139
- package/sensor/dist/resolution/frameworks/react.js.map +1 -1
- package/sensor/dist/resolution/frameworks/svelte.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/svelte.js +6 -1
- package/sensor/dist/resolution/frameworks/svelte.js.map +1 -1
- package/sensor/dist/resolution/frameworks/sveltekit-router.d.ts +36 -0
- package/sensor/dist/resolution/frameworks/sveltekit-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/sveltekit-router.js +156 -0
- package/sensor/dist/resolution/frameworks/sveltekit-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/swift.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/swift.js +140 -99
- package/sensor/dist/resolution/frameworks/swift.js.map +1 -1
- package/sensor/dist/resolution/frameworks/tanstack-router.d.ts +84 -0
- package/sensor/dist/resolution/frameworks/tanstack-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/tanstack-router.js +437 -0
- package/sensor/dist/resolution/frameworks/tanstack-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/vue-router.d.ts +82 -0
- package/sensor/dist/resolution/frameworks/vue-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/vue-router.js +377 -0
- package/sensor/dist/resolution/frameworks/vue-router.js.map +1 -0
- package/sensor/dist/resolution/import-resolver.d.ts +38 -0
- package/sensor/dist/resolution/import-resolver.d.ts.map +1 -1
- package/sensor/dist/resolution/import-resolver.js +394 -28
- package/sensor/dist/resolution/import-resolver.js.map +1 -1
- package/sensor/dist/resolution/index.d.ts +89 -25
- package/sensor/dist/resolution/index.d.ts.map +1 -1
- package/sensor/dist/resolution/index.js +573 -148
- package/sensor/dist/resolution/index.js.map +1 -1
- package/sensor/dist/resolution/js-builtins.d.ts +13 -0
- package/sensor/dist/resolution/js-builtins.d.ts.map +1 -0
- package/sensor/dist/resolution/js-builtins.js +46 -0
- package/sensor/dist/resolution/js-builtins.js.map +1 -0
- package/sensor/dist/resolution/name-matcher.d.ts +99 -22
- package/sensor/dist/resolution/name-matcher.d.ts.map +1 -1
- package/sensor/dist/resolution/name-matcher.js +2220 -86
- package/sensor/dist/resolution/name-matcher.js.map +1 -1
- package/sensor/dist/resolution/next-router-synthesizer.d.ts +27 -0
- package/sensor/dist/resolution/next-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/next-router-synthesizer.js +113 -0
- package/sensor/dist/resolution/next-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/path-aliases.d.ts +6 -4
- package/sensor/dist/resolution/path-aliases.d.ts.map +1 -1
- package/sensor/dist/resolution/path-aliases.js +125 -17
- package/sensor/dist/resolution/path-aliases.js.map +1 -1
- package/sensor/dist/resolution/react-router-synthesizer.d.ts +33 -0
- package/sensor/dist/resolution/react-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/react-router-synthesizer.js +126 -0
- package/sensor/dist/resolution/react-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/resolver-pool.d.ts +2 -0
- package/sensor/dist/resolution/resolver-pool.d.ts.map +1 -1
- package/sensor/dist/resolution/resolver-pool.js +4 -0
- package/sensor/dist/resolution/resolver-pool.js.map +1 -1
- package/sensor/dist/resolution/strip-comments.d.ts +6 -0
- package/sensor/dist/resolution/strip-comments.d.ts.map +1 -1
- package/sensor/dist/resolution/strip-comments.js +58 -0
- package/sensor/dist/resolution/strip-comments.js.map +1 -1
- package/sensor/dist/resolution/sveltekit-synthesizer.d.ts +58 -0
- package/sensor/dist/resolution/sveltekit-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/sveltekit-synthesizer.js +173 -0
- package/sensor/dist/resolution/sveltekit-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/swift-type-visibility.d.ts +52 -0
- package/sensor/dist/resolution/swift-type-visibility.d.ts.map +1 -0
- package/sensor/dist/resolution/swift-type-visibility.js +328 -0
- package/sensor/dist/resolution/swift-type-visibility.js.map +1 -0
- package/sensor/dist/resolution/synth-utils.d.ts +26 -0
- package/sensor/dist/resolution/synth-utils.d.ts.map +1 -0
- package/sensor/dist/resolution/synth-utils.js +75 -0
- package/sensor/dist/resolution/synth-utils.js.map +1 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.d.ts +31 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.js +114 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/tier-synthesizer.d.ts +54 -0
- package/sensor/dist/resolution/tier-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/tier-synthesizer.js +1294 -0
- package/sensor/dist/resolution/tier-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/types.d.ts +78 -2
- package/sensor/dist/resolution/types.d.ts.map +1 -1
- package/sensor/dist/resolution/types.js +64 -0
- package/sensor/dist/resolution/types.js.map +1 -1
- package/sensor/dist/resolution/vue-router-synthesizer.d.ts +30 -0
- package/sensor/dist/resolution/vue-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/vue-router-synthesizer.js +115 -0
- package/sensor/dist/resolution/vue-router-synthesizer.js.map +1 -0
- package/sensor/dist/search/identifier-segments.d.ts +10 -0
- package/sensor/dist/search/identifier-segments.d.ts.map +1 -1
- package/sensor/dist/search/identifier-segments.js +29 -0
- package/sensor/dist/search/identifier-segments.js.map +1 -1
- package/sensor/dist/search/query-paths.d.ts +106 -0
- package/sensor/dist/search/query-paths.d.ts.map +1 -0
- package/sensor/dist/search/query-paths.js +513 -0
- package/sensor/dist/search/query-paths.js.map +1 -0
- package/sensor/dist/search/query-utils.d.ts +22 -2
- package/sensor/dist/search/query-utils.d.ts.map +1 -1
- package/sensor/dist/search/query-utils.js +56 -16
- package/sensor/dist/search/query-utils.js.map +1 -1
- package/sensor/dist/sync/watch-policy.d.ts +14 -0
- package/sensor/dist/sync/watch-policy.d.ts.map +1 -1
- package/sensor/dist/sync/watch-policy.js +19 -0
- package/sensor/dist/sync/watch-policy.js.map +1 -1
- package/sensor/dist/sync/watcher.d.ts +74 -35
- package/sensor/dist/sync/watcher.d.ts.map +1 -1
- package/sensor/dist/sync/watcher.js +281 -99
- package/sensor/dist/sync/watcher.js.map +1 -1
- package/sensor/dist/telemetry/index.d.ts +4 -2
- package/sensor/dist/telemetry/index.d.ts.map +1 -1
- package/sensor/dist/telemetry/index.js +92 -41
- package/sensor/dist/telemetry/index.js.map +1 -1
- package/sensor/dist/types.d.ts +18 -2
- package/sensor/dist/types.d.ts.map +1 -1
- package/sensor/dist/types.js +2 -0
- package/sensor/dist/types.js.map +1 -1
- package/sensor/dist/ui-server/api/deadcode.d.ts +84 -0
- package/sensor/dist/ui-server/api/deadcode.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/deadcode.js +136 -0
- package/sensor/dist/ui-server/api/deadcode.js.map +1 -0
- package/sensor/dist/ui-server/api/effects.d.ts +94 -0
- package/sensor/dist/ui-server/api/effects.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/effects.js +527 -0
- package/sensor/dist/ui-server/api/effects.js.map +1 -0
- package/sensor/dist/ui-server/api/entrypoints.d.ts +92 -0
- package/sensor/dist/ui-server/api/entrypoints.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/entrypoints.js +361 -0
- package/sensor/dist/ui-server/api/entrypoints.js.map +1 -0
- package/sensor/dist/ui-server/api/events.d.ts +183 -0
- package/sensor/dist/ui-server/api/events.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/events.js +430 -0
- package/sensor/dist/ui-server/api/events.js.map +1 -0
- package/sensor/dist/ui-server/api/file.d.ts +66 -0
- package/sensor/dist/ui-server/api/file.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/file.js +235 -0
- package/sensor/dist/ui-server/api/file.js.map +1 -0
- package/sensor/dist/ui-server/api/filecode.d.ts +126 -0
- package/sensor/dist/ui-server/api/filecode.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/filecode.js +205 -0
- package/sensor/dist/ui-server/api/filecode.js.map +1 -0
- package/sensor/dist/ui-server/api/flow.d.ts +226 -0
- package/sensor/dist/ui-server/api/flow.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/flow.js +612 -0
- package/sensor/dist/ui-server/api/flow.js.map +1 -0
- package/sensor/dist/ui-server/api/hierarchy.d.ts +81 -0
- package/sensor/dist/ui-server/api/hierarchy.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/hierarchy.js +92 -0
- package/sensor/dist/ui-server/api/hierarchy.js.map +1 -0
- package/sensor/dist/ui-server/api/index.d.ts +90 -0
- package/sensor/dist/ui-server/api/index.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/index.js +332 -0
- package/sensor/dist/ui-server/api/index.js.map +1 -0
- package/sensor/dist/ui-server/api/map.d.ts +256 -0
- package/sensor/dist/ui-server/api/map.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/map.js +760 -0
- package/sensor/dist/ui-server/api/map.js.map +1 -0
- package/sensor/dist/ui-server/api/node.d.ts +81 -0
- package/sensor/dist/ui-server/api/node.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/node.js +388 -0
- package/sensor/dist/ui-server/api/node.js.map +1 -0
- package/sensor/dist/ui-server/api/nodes.d.ts +25 -0
- package/sensor/dist/ui-server/api/nodes.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/nodes.js +45 -0
- package/sensor/dist/ui-server/api/nodes.js.map +1 -0
- package/sensor/dist/ui-server/api/program.d.ts +139 -0
- package/sensor/dist/ui-server/api/program.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/program.js +315 -0
- package/sensor/dist/ui-server/api/program.js.map +1 -0
- package/sensor/dist/ui-server/api/respond.d.ts +76 -0
- package/sensor/dist/ui-server/api/respond.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/respond.js +186 -0
- package/sensor/dist/ui-server/api/respond.js.map +1 -0
- package/sensor/dist/ui-server/api/route-roots.d.ts +39 -0
- package/sensor/dist/ui-server/api/route-roots.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/route-roots.js +96 -0
- package/sensor/dist/ui-server/api/route-roots.js.map +1 -0
- package/sensor/dist/ui-server/api/routes.d.ts +59 -0
- package/sensor/dist/ui-server/api/routes.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/routes.js +108 -0
- package/sensor/dist/ui-server/api/routes.js.map +1 -0
- package/sensor/dist/ui-server/api/screens.d.ts +117 -0
- package/sensor/dist/ui-server/api/screens.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/screens.js +611 -0
- package/sensor/dist/ui-server/api/screens.js.map +1 -0
- package/sensor/dist/ui-server/api/search.d.ts +29 -0
- package/sensor/dist/ui-server/api/search.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/search.js +232 -0
- package/sensor/dist/ui-server/api/search.js.map +1 -0
- package/sensor/dist/ui-server/api/session.d.ts +52 -0
- package/sensor/dist/ui-server/api/session.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/session.js +196 -0
- package/sensor/dist/ui-server/api/session.js.map +1 -0
- package/sensor/dist/ui-server/api/source.d.ts +200 -0
- package/sensor/dist/ui-server/api/source.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/source.js +422 -0
- package/sensor/dist/ui-server/api/source.js.map +1 -0
- package/sensor/dist/ui-server/api/stats.d.ts +27 -0
- package/sensor/dist/ui-server/api/stats.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/stats.js +164 -0
- package/sensor/dist/ui-server/api/stats.js.map +1 -0
- package/sensor/dist/ui-server/api/steps.d.ts +274 -0
- package/sensor/dist/ui-server/api/steps.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/steps.js +1544 -0
- package/sensor/dist/ui-server/api/steps.js.map +1 -0
- package/sensor/dist/ui-server/api/trail-store.d.ts +142 -0
- package/sensor/dist/ui-server/api/trail-store.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/trail-store.js +325 -0
- package/sensor/dist/ui-server/api/trail-store.js.map +1 -0
- package/sensor/dist/ui-server/api/trails.d.ts +163 -0
- package/sensor/dist/ui-server/api/trails.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/trails.js +369 -0
- package/sensor/dist/ui-server/api/trails.js.map +1 -0
- package/sensor/dist/ui-server/api/when.d.ts +133 -0
- package/sensor/dist/ui-server/api/when.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/when.js +275 -0
- package/sensor/dist/ui-server/api/when.js.map +1 -0
- package/sensor/dist/ui-server/api/wire.d.ts +179 -0
- package/sensor/dist/ui-server/api/wire.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/wire.js +231 -0
- package/sensor/dist/ui-server/api/wire.js.map +1 -0
- package/sensor/dist/ui-server/assets.d.ts +40 -0
- package/sensor/dist/ui-server/assets.d.ts.map +1 -0
- package/sensor/dist/ui-server/assets.js +110 -0
- package/sensor/dist/ui-server/assets.js.map +1 -0
- package/sensor/dist/ui-server/constants.d.ts +32 -0
- package/sensor/dist/ui-server/constants.d.ts.map +1 -0
- package/sensor/dist/ui-server/constants.js +35 -0
- package/sensor/dist/ui-server/constants.js.map +1 -0
- package/sensor/dist/ui-server/highlight/index.d.ts +113 -0
- package/sensor/dist/ui-server/highlight/index.d.ts.map +1 -0
- package/sensor/dist/ui-server/highlight/index.js +307 -0
- package/sensor/dist/ui-server/highlight/index.js.map +1 -0
- package/sensor/dist/ui-server/highlight/languages.d.ts +36 -0
- package/sensor/dist/ui-server/highlight/languages.d.ts.map +1 -0
- package/sensor/dist/ui-server/highlight/languages.js +50 -0
- package/sensor/dist/ui-server/highlight/languages.js.map +1 -0
- package/sensor/dist/ui-server/index.d.ts +92 -0
- package/sensor/dist/ui-server/index.d.ts.map +1 -0
- package/sensor/dist/ui-server/index.js +399 -0
- package/sensor/dist/ui-server/index.js.map +1 -0
- package/sensor/dist/ui-server/open-browser.d.ts +31 -0
- package/sensor/dist/ui-server/open-browser.d.ts.map +1 -0
- package/sensor/dist/ui-server/open-browser.js +79 -0
- package/sensor/dist/ui-server/open-browser.js.map +1 -0
- package/sensor/dist/ui-server/security.d.ts +127 -0
- package/sensor/dist/ui-server/security.d.ts.map +1 -0
- package/sensor/dist/ui-server/security.js +332 -0
- package/sensor/dist/ui-server/security.js.map +1 -0
- package/sensor/dist/ui-server/static.d.ts +45 -0
- package/sensor/dist/ui-server/static.d.ts.map +1 -0
- package/sensor/dist/ui-server/static.js +165 -0
- package/sensor/dist/ui-server/static.js.map +1 -0
- package/sensor/dist/utils.d.ts +14 -2
- package/sensor/dist/utils.d.ts.map +1 -1
- package/sensor/dist/utils.js +25 -10
- package/sensor/dist/utils.js.map +1 -1
- package/src/sensor-adapter.mjs +5 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SynthesisStage = exports.SYNTHESIZED_EDGE = void 0;
|
|
4
|
+
const sqlite_adapter_1 = require("./sqlite-adapter");
|
|
5
|
+
const queries_1 = require("./queries");
|
|
6
|
+
const cooperative_yield_1 = require("../resolution/cooperative-yield");
|
|
7
|
+
// Ownership is independent of provenance: Go method containment is structural.
|
|
8
|
+
exports.SYNTHESIZED_EDGE = "CASE WHEN json_valid(metadata) THEN json_extract(metadata, '$.synthesizedBy') END IS NOT NULL";
|
|
9
|
+
/** A private edge overlay: passes see base edges plus their new Go prerequisites. */
|
|
10
|
+
class SynthesisStage {
|
|
11
|
+
db;
|
|
12
|
+
queries;
|
|
13
|
+
constructor(dbPath) {
|
|
14
|
+
this.db = (0, sqlite_adapter_1.createDatabase)(dbPath).db;
|
|
15
|
+
try {
|
|
16
|
+
this.db.pragma('busy_timeout = 5000');
|
|
17
|
+
this.db.pragma('foreign_keys = ON');
|
|
18
|
+
this.db.pragma('synchronous = NORMAL');
|
|
19
|
+
this.db.pragma('wal_autocheckpoint = 0');
|
|
20
|
+
this.db.exec(`
|
|
21
|
+
CREATE TEMP TABLE synthesis_inputs (file_path TEXT PRIMARY KEY);
|
|
22
|
+
-- Column list mirrors main.edges exactly (the view below UNIONs with
|
|
23
|
+
-- SELECT *): Lattice's confidence/resolved_by (v9) included.
|
|
24
|
+
CREATE TEMP TABLE synthesis_edges (
|
|
25
|
+
id INTEGER PRIMARY KEY, source TEXT, target TEXT, kind TEXT,
|
|
26
|
+
metadata TEXT, line INTEGER, col INTEGER, provenance TEXT,
|
|
27
|
+
confidence REAL, resolved_by TEXT
|
|
28
|
+
);
|
|
29
|
+
CREATE UNIQUE INDEX temp.synthesis_identity ON synthesis_edges
|
|
30
|
+
(source, target, kind, IFNULL(line, -1), IFNULL(col, -1));
|
|
31
|
+
CREATE INDEX temp.synthesis_source ON synthesis_edges(source, kind);
|
|
32
|
+
CREATE INDEX temp.synthesis_target ON synthesis_edges(target, kind);
|
|
33
|
+
CREATE TEMP VIEW edges AS
|
|
34
|
+
SELECT * FROM main.edges WHERE NOT COALESCE((${exports.SYNTHESIZED_EDGE}), 0)
|
|
35
|
+
UNION ALL SELECT * FROM synthesis_edges;
|
|
36
|
+
CREATE TEMP TRIGGER synthesis_insert INSTEAD OF INSERT ON edges BEGIN
|
|
37
|
+
INSERT OR IGNORE INTO synthesis_edges
|
|
38
|
+
(source, target, kind, metadata, line, col, provenance, confidence, resolved_by)
|
|
39
|
+
SELECT NEW.source, NEW.target, NEW.kind, NEW.metadata, NEW.line, NEW.col, NEW.provenance,
|
|
40
|
+
NEW.confidence, NEW.resolved_by
|
|
41
|
+
WHERE NOT EXISTS (
|
|
42
|
+
SELECT 1 FROM main.edges WHERE source = NEW.source AND target = NEW.target
|
|
43
|
+
AND kind = NEW.kind AND IFNULL(line, -1) = IFNULL(NEW.line, -1)
|
|
44
|
+
AND IFNULL(col, -1) = IFNULL(NEW.col, -1)
|
|
45
|
+
AND NOT COALESCE((${exports.SYNTHESIZED_EDGE}), 0)
|
|
46
|
+
);
|
|
47
|
+
END;
|
|
48
|
+
`);
|
|
49
|
+
this.queries = new queries_1.QueryBuilder(this.db);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
this.db.close();
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async publish(backpressure) {
|
|
57
|
+
await backpressure?.();
|
|
58
|
+
const yieldToLoop = (0, cooperative_yield_1.createYielder)();
|
|
59
|
+
// Keep the replacement atomic for other connections. Yield between bounded
|
|
60
|
+
// writes, but checkpoint only OUTSIDE this transaction (uncommitted frames
|
|
61
|
+
// cannot be folded). Pass execution/staging above never writes the main WAL.
|
|
62
|
+
this.db.exec('BEGIN IMMEDIATE');
|
|
63
|
+
try {
|
|
64
|
+
const remove = this.db.prepare(`DELETE FROM main.edges WHERE id IN (
|
|
65
|
+
SELECT id FROM main.edges WHERE ${exports.SYNTHESIZED_EDGE} LIMIT 2000
|
|
66
|
+
)`);
|
|
67
|
+
while (remove.run().changes > 0)
|
|
68
|
+
await yieldToLoop();
|
|
69
|
+
const insert = this.db.prepare(`INSERT OR IGNORE INTO main.edges
|
|
70
|
+
(source, target, kind, metadata, line, col, provenance, confidence, resolved_by)
|
|
71
|
+
SELECT source, target, kind, metadata, line, col, provenance, confidence, resolved_by
|
|
72
|
+
FROM synthesis_edges WHERE id > ? AND id <= ?`);
|
|
73
|
+
const max = this.db.prepare('SELECT MAX(id) AS id FROM synthesis_edges').get()?.id ?? 0;
|
|
74
|
+
for (let i = 0; i < max; i += 2000) {
|
|
75
|
+
insert.run(i, i + 2000);
|
|
76
|
+
await yieldToLoop();
|
|
77
|
+
}
|
|
78
|
+
this.db.exec(`DELETE FROM main.synthesis_inputs;
|
|
79
|
+
INSERT INTO main.synthesis_inputs SELECT * FROM temp.synthesis_inputs`);
|
|
80
|
+
this.db.exec('COMMIT');
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
this.db.exec('ROLLBACK');
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
await backpressure?.();
|
|
87
|
+
}
|
|
88
|
+
close() {
|
|
89
|
+
this.db.close();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.SynthesisStage = SynthesisStage;
|
|
93
|
+
//# sourceMappingURL=synthesis-stage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesis-stage.js","sourceRoot":"","sources":["../../src/db/synthesis-stage.ts"],"names":[],"mappings":";;;AAAA,qDAAuE;AACvE,uCAAyC;AACzC,uEAAgE;AAEhE,+EAA+E;AAClE,QAAA,gBAAgB,GAAG,+FAA+F,CAAC;AAEhI,qFAAqF;AACrF,MAAa,cAAc;IAChB,EAAE,CAAiB;IACnB,OAAO,CAAe;IAE/B,YAAY,MAAc;QACxB,IAAI,CAAC,EAAE,GAAG,IAAA,+BAAc,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACtC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACpC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACvC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;yDAcsC,wBAAgB;;;;;;;;;;;kCAWvC,wBAAgB;;;OAG3C,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,GAAG,IAAI,sBAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,YAAyC;QACrD,MAAM,YAAY,EAAE,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAA,iCAAa,GAAE,CAAC;QACpC,2EAA2E;QAC3E,2EAA2E;QAC3E,6EAA6E;QAC7E,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;0CACK,wBAAgB;QAClD,CAAC,CAAC;YACJ,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC;gBAAE,MAAM,WAAW,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;sDAGiB,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;gBACxB,MAAM,WAAW,EAAE,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;8EAC2D,CAAC,CAAC;YAC1E,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,YAAY,EAAE,EAAE,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AAjFD,wCAiFC"}
|
|
@@ -42,8 +42,33 @@
|
|
|
42
42
|
* the next pass covers everything, the WAL wraps on the following commit,
|
|
43
43
|
* and the pause is the disk's honest catch-up cost — the correct terminal
|
|
44
44
|
* mode when hardware genuinely can't keep up with the append rate.
|
|
45
|
+
*
|
|
46
|
+
* Fail-closed (#1539): if parked backfills cannot progress (a reader pinning
|
|
47
|
+
* frames) while the WAL is past the hard/file caps, the valve throws
|
|
48
|
+
* {@link WalValveAbortError} instead of releasing the writer. The previous
|
|
49
|
+
* "futility latch" disabled parking for 60s after consecutive give-ups so a
|
|
50
|
+
* pinned reader would not churn checkpoint workers — but that also let the
|
|
51
|
+
* WAL grow without a bound (observed 64 GiB on a kernel-scale daemon catch-up
|
|
52
|
+
* with the query pool holding read marks). Aborting with a clear error is the
|
|
53
|
+
* safe terminal mode; the caller closes readers / retries once the pin clears.
|
|
45
54
|
*/
|
|
46
55
|
import type { DatabaseConnection } from './index';
|
|
56
|
+
/**
|
|
57
|
+
* Thrown when the valve cannot checkpoint past its documented caps while a
|
|
58
|
+
* reader pins WAL frames (#1539). Callers (index/sync) should surface this and
|
|
59
|
+
* stop writing rather than risk unbounded disk growth.
|
|
60
|
+
*/
|
|
61
|
+
export declare class WalValveAbortError extends Error {
|
|
62
|
+
readonly code: "WAL_VALVE_ABORT";
|
|
63
|
+
readonly walBytes: number;
|
|
64
|
+
readonly fileCapBytes: number;
|
|
65
|
+
readonly hardBytes: number;
|
|
66
|
+
constructor(message: string, sizes: {
|
|
67
|
+
walBytes: number;
|
|
68
|
+
fileCapBytes: number;
|
|
69
|
+
hardBytes: number;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
47
72
|
/**
|
|
48
73
|
* Resolve the valve's soft threshold from the `LATTICE_SENSOR_WAL_VALVE_MB`
|
|
49
74
|
* override; non-numeric / non-positive values fall back to the default.
|
|
@@ -66,17 +91,10 @@ export declare class WalCheckpointValve {
|
|
|
66
91
|
private readonly hardBytes;
|
|
67
92
|
private readonly fileCapBytes;
|
|
68
93
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* to the pre-valve behavior (unbounded WAL, folded when the pinner exits)
|
|
72
|
-
* instead of burning a 20-pass checkpoint attempt — each pass a worker
|
|
73
|
-
* thread + fresh connection — at EVERY over-cap boundary. That churn is
|
|
74
|
-
* what turned a pinned kernel-scale resolution from slow into OOM-killed
|
|
75
|
-
* (§7a.1 run 1: 22GB WAL, exit 137 at an envelope the pre-fix build
|
|
76
|
-
* survived).
|
|
94
|
+
* Consecutive parked-backfill give-ups. Used only for diagnostics in the
|
|
95
|
+
* abort message — parking is never disabled (#1539 fail-closed).
|
|
77
96
|
*/
|
|
78
97
|
private consecutiveGiveUps;
|
|
79
|
-
private futileUntil;
|
|
80
98
|
constructor(db: DatabaseConnection, softMb?: number, intervalMs?: number, log?: (msg: string) => void);
|
|
81
99
|
private readonly log;
|
|
82
100
|
private mb;
|
|
@@ -109,9 +127,11 @@ export declare class WalCheckpointValve {
|
|
|
109
127
|
/**
|
|
110
128
|
* With the writer parked on the returned promise, loop passive passes until
|
|
111
129
|
* one reports the entire WAL backfilled (typically the second: the first
|
|
112
|
-
* drains the pass that was already running against a stale snapshot).
|
|
113
|
-
*
|
|
114
|
-
*
|
|
130
|
+
* drains the pass that was already running against a stale snapshot). After
|
|
131
|
+
* a bounded number of passes without a full backfill — e.g. a reader
|
|
132
|
+
* pinning the WAL — throws {@link WalValveAbortError} when still past the
|
|
133
|
+
* hard/file caps (#1539 fail-closed). Soft give-up under those caps is
|
|
134
|
+
* reserved for foldNow on a modest backlog that could not complete.
|
|
115
135
|
*/
|
|
116
136
|
private backfillFully;
|
|
117
137
|
private fire;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wal-valve.d.ts","sourceRoot":"","sources":["../../src/db/wal-valve.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wal-valve.d.ts","sourceRoot":"","sources":["../../src/db/wal-valve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,iBAAiB,CAAU;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAOlG;AAaD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAc1F;AAED,qBAAa,kBAAkB;IAsB3B,OAAO,CAAC,QAAQ,CAAC,EAAE;IAEnB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAvB7B,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,QAAQ,CAA8B;IAC9C,uFAAuF;IACvF,OAAO,CAAC,KAAK,CAA8B;IAC3C;;;;OAIG;IACH,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC;;;OAGG;IACH,OAAO,CAAC,kBAAkB,CAAK;gBAGZ,EAAE,EAAE,kBAAkB,EACvC,MAAM,GAAE,MAAmE,EAC1D,UAAU,GAAE,MAA0B,EACvD,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAe;IAavC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;IAE5C,OAAO,CAAC,EAAE;IAIV,0FAA0F;IAC1F,OAAO,CAAC,WAAW;IAInB,+EAA+E;IAC/E,KAAK,IAAI,IAAI;IAkBb,6EAA6E;IAC7E,IAAI,IAAI,IAAI;IAOZ,6FAA6F;IAC7F,KAAK,IAAI,IAAI;IAIb;;;;;OAKG;IACH,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAoBpC,uDAAuD;IACjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B;;;;;;;;OAQG;YACW,aAAa;IAgE3B,OAAO,CAAC,IAAI;CA8Bb"}
|
|
@@ -43,10 +43,38 @@
|
|
|
43
43
|
* the next pass covers everything, the WAL wraps on the following commit,
|
|
44
44
|
* and the pause is the disk's honest catch-up cost — the correct terminal
|
|
45
45
|
* mode when hardware genuinely can't keep up with the append rate.
|
|
46
|
+
*
|
|
47
|
+
* Fail-closed (#1539): if parked backfills cannot progress (a reader pinning
|
|
48
|
+
* frames) while the WAL is past the hard/file caps, the valve throws
|
|
49
|
+
* {@link WalValveAbortError} instead of releasing the writer. The previous
|
|
50
|
+
* "futility latch" disabled parking for 60s after consecutive give-ups so a
|
|
51
|
+
* pinned reader would not churn checkpoint workers — but that also let the
|
|
52
|
+
* WAL grow without a bound (observed 64 GiB on a kernel-scale daemon catch-up
|
|
53
|
+
* with the query pool holding read marks). Aborting with a clear error is the
|
|
54
|
+
* safe terminal mode; the caller closes readers / retries once the pin clears.
|
|
46
55
|
*/
|
|
47
56
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
-
exports.WalCheckpointValve = void 0;
|
|
57
|
+
exports.WalCheckpointValve = exports.WalValveAbortError = void 0;
|
|
49
58
|
exports.resolveWalValveMb = resolveWalValveMb;
|
|
59
|
+
/**
|
|
60
|
+
* Thrown when the valve cannot checkpoint past its documented caps while a
|
|
61
|
+
* reader pins WAL frames (#1539). Callers (index/sync) should surface this and
|
|
62
|
+
* stop writing rather than risk unbounded disk growth.
|
|
63
|
+
*/
|
|
64
|
+
class WalValveAbortError extends Error {
|
|
65
|
+
code = 'WAL_VALVE_ABORT';
|
|
66
|
+
walBytes;
|
|
67
|
+
fileCapBytes;
|
|
68
|
+
hardBytes;
|
|
69
|
+
constructor(message, sizes) {
|
|
70
|
+
super(message);
|
|
71
|
+
this.name = 'WalValveAbortError';
|
|
72
|
+
this.walBytes = sizes.walBytes;
|
|
73
|
+
this.fileCapBytes = sizes.fileCapBytes;
|
|
74
|
+
this.hardBytes = sizes.hardBytes;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.WalValveAbortError = WalValveAbortError;
|
|
50
78
|
/** Soft WAL-growth threshold (MB) that triggers an off-thread passive checkpoint. */
|
|
51
79
|
const DEFAULT_WAL_VALVE_MB = 256;
|
|
52
80
|
/** Hard cap = this × soft threshold; past it the writer pauses for a full backfill. */
|
|
@@ -94,17 +122,10 @@ class WalCheckpointValve {
|
|
|
94
122
|
hardBytes;
|
|
95
123
|
fileCapBytes;
|
|
96
124
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
* to the pre-valve behavior (unbounded WAL, folded when the pinner exits)
|
|
100
|
-
* instead of burning a 20-pass checkpoint attempt — each pass a worker
|
|
101
|
-
* thread + fresh connection — at EVERY over-cap boundary. That churn is
|
|
102
|
-
* what turned a pinned kernel-scale resolution from slow into OOM-killed
|
|
103
|
-
* (§7a.1 run 1: 22GB WAL, exit 137 at an envelope the pre-fix build
|
|
104
|
-
* survived).
|
|
125
|
+
* Consecutive parked-backfill give-ups. Used only for diagnostics in the
|
|
126
|
+
* abort message — parking is never disabled (#1539 fail-closed).
|
|
105
127
|
*/
|
|
106
128
|
consecutiveGiveUps = 0;
|
|
107
|
-
futileUntil = 0;
|
|
108
129
|
constructor(db, softMb = resolveWalValveMb(process.env.LATTICE_SENSOR_WAL_VALVE_MB), intervalMs = CHECK_INTERVAL_MS, log = () => { }) {
|
|
109
130
|
this.db = db;
|
|
110
131
|
this.intervalMs = intervalMs;
|
|
@@ -166,8 +187,6 @@ class WalCheckpointValve {
|
|
|
166
187
|
backpressure() {
|
|
167
188
|
if (this.pause)
|
|
168
189
|
return this.pause;
|
|
169
|
-
if (Date.now() < this.futileUntil)
|
|
170
|
-
return null; // pinned reader — parking is churn, not progress
|
|
171
190
|
// Two independent triggers:
|
|
172
191
|
// - growth: un-backfilled BACKLOG past the hard cap (the original valve).
|
|
173
192
|
// - file size: a WAL can stay fully backfilled and still grow without
|
|
@@ -214,17 +233,29 @@ class WalCheckpointValve {
|
|
|
214
233
|
/**
|
|
215
234
|
* With the writer parked on the returned promise, loop passive passes until
|
|
216
235
|
* one reports the entire WAL backfilled (typically the second: the first
|
|
217
|
-
* drains the pass that was already running against a stale snapshot).
|
|
218
|
-
*
|
|
219
|
-
*
|
|
236
|
+
* drains the pass that was already running against a stale snapshot). After
|
|
237
|
+
* a bounded number of passes without a full backfill — e.g. a reader
|
|
238
|
+
* pinning the WAL — throws {@link WalValveAbortError} when still past the
|
|
239
|
+
* hard/file caps (#1539 fail-closed). Soft give-up under those caps is
|
|
240
|
+
* reserved for foldNow on a modest backlog that could not complete.
|
|
220
241
|
*/
|
|
221
242
|
async backfillFully() {
|
|
222
243
|
for (let i = 0; i < MAX_PAUSED_BACKFILL_PASSES; i++) {
|
|
223
244
|
if (this.inflight)
|
|
224
245
|
await this.inflight; // fold in the stale in-flight pass first
|
|
225
246
|
const res = await this.db.checkpointWalPassive();
|
|
226
|
-
if (!res)
|
|
227
|
-
|
|
247
|
+
if (!res) {
|
|
248
|
+
// Machinery unavailable: fail closed past the documented caps (#1539),
|
|
249
|
+
// otherwise soft-return so a non-WAL / closing connection does not abort.
|
|
250
|
+
const walBytes = this.db.getWalSizeBytes();
|
|
251
|
+
const growth = this.growthBytes();
|
|
252
|
+
if (walBytes > this.fileCapBytes || growth > this.hardBytes) {
|
|
253
|
+
throw new WalValveAbortError(`WAL checkpoint machinery unavailable while over the documented cap ` +
|
|
254
|
+
`(wal=${this.mb(walBytes)}, fileCap=${this.mb(this.fileCapBytes)}). ` +
|
|
255
|
+
`Aborting to avoid unbounded disk growth.`, { walBytes, fileCapBytes: this.fileCapBytes, hardBytes: this.hardBytes });
|
|
256
|
+
}
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
228
259
|
this.log(`backfill pass ${i + 1}: busy=${res.busy} log=${res.log} checkpointed=${res.checkpointed} wal=${this.mb(this.db.getWalSizeBytes())}`);
|
|
229
260
|
if (res.busy === 0 && res.log === res.checkpointed) {
|
|
230
261
|
// Backfill complete AND we are at a parked barrier (backfillFully only
|
|
@@ -238,21 +269,33 @@ class WalCheckpointValve {
|
|
|
238
269
|
this.log(`truncate: busy=${trunc.busy} wal=${this.mb(this.db.getWalSizeBytes())}`);
|
|
239
270
|
this.sizeAtLastFullBackfill = this.db.getWalSizeBytes();
|
|
240
271
|
this.consecutiveGiveUps = 0;
|
|
241
|
-
this.futileUntil = 0;
|
|
242
272
|
return;
|
|
243
273
|
}
|
|
244
274
|
}
|
|
245
275
|
this.consecutiveGiveUps++;
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
|
|
276
|
+
const walBytes = this.db.getWalSizeBytes();
|
|
277
|
+
const growth = this.growthBytes();
|
|
278
|
+
const msg = `backfill gave up after ${MAX_PAUSED_BACKFILL_PASSES} passes ` +
|
|
279
|
+
`(streak ${this.consecutiveGiveUps}) — a reader is pinning the WAL ` +
|
|
280
|
+
`(wal=${this.mb(walBytes)} growth=${this.mb(growth)} ` +
|
|
281
|
+
`hard=${this.mb(this.hardBytes)} fileCap=${this.mb(this.fileCapBytes)})`;
|
|
250
282
|
this.log(msg);
|
|
251
283
|
// Give-ups are rare and load-bearing for §7a.1-class diagnosis — surface
|
|
252
284
|
// them on any timing-instrumented run, not just valve-debug ones.
|
|
253
285
|
if (process.env.LATTICE_SENSOR_SYNTH_TIMINGS && !process.env.LATTICE_SENSOR_WAL_VALVE_DEBUG) {
|
|
254
286
|
console.error(`[wal-valve] ${msg}`);
|
|
255
287
|
}
|
|
288
|
+
// Fail closed (#1539): never release the writer past the documented caps
|
|
289
|
+
// when checkpoints cannot progress. The old futility latch disabled
|
|
290
|
+
// parking for 60s and allowed unbounded growth (64 GiB observed).
|
|
291
|
+
if (walBytes > this.fileCapBytes || growth > this.hardBytes) {
|
|
292
|
+
throw new WalValveAbortError(`WAL checkpoint cannot progress while a reader pins frames ` +
|
|
293
|
+
`(wal=${this.mb(walBytes)}, growth=${this.mb(growth)}, ` +
|
|
294
|
+
`fileCap=${this.mb(this.fileCapBytes)}, hard=${this.mb(this.hardBytes)}, ` +
|
|
295
|
+
`give-ups=${this.consecutiveGiveUps}). Aborting to avoid unbounded disk growth. ` +
|
|
296
|
+
`Close concurrent readers (for example the MCP query pool) and retry, ` +
|
|
297
|
+
`or raise LATTICE_SENSOR_WAL_VALVE_MB if the threshold is too tight for this project.`, { walBytes, fileCapBytes: this.fileCapBytes, hardBytes: this.hardBytes });
|
|
298
|
+
}
|
|
256
299
|
}
|
|
257
300
|
fire() {
|
|
258
301
|
this.log(`fire: wal=${this.mb(this.db.getWalSizeBytes())} baseline=${this.mb(this.sizeAtLastFullBackfill)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wal-valve.js","sourceRoot":"","sources":["../../src/db/wal-valve.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"wal-valve.js","sourceRoot":"","sources":["../../src/db/wal-valve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Windows + WSL sharing one index on a Windows drive (issue #995).
|
|
3
|
+
*
|
|
4
|
+
* A repo under `/mnt/<drive>/` can be used from both sides: Windows-native
|
|
5
|
+
* LatticeSensor and WSL LatticeSensor then open the same `.lattice/sensor/sensor.db`
|
|
6
|
+
* across the 9p/DrvFs bridge, where SQLite's file locking and its `-shm`
|
|
7
|
+
* shared memory don't hold between the two OSes. WSL's connection fails with a
|
|
8
|
+
* bare "disk I/O error" (SQLITE_IOERR). A private WSL index on the same drive
|
|
9
|
+
* works fine, so a fresh WSL project there already gets its own
|
|
10
|
+
* `.lattice/sensor-wsl` (`latticeSensorRelativeDirFor`). An index already in `.lattice/sensor` —
|
|
11
|
+
* built by Windows first, or by WSL before that default — is kept as it is,
|
|
12
|
+
* and when it fails this way the SQLite adapter rewrites the error into the
|
|
13
|
+
* `LATTICE_SENSOR_DIR=.lattice/sensor-wsl` instruction instead of letting it reach the
|
|
14
|
+
* user as an unexplained I/O failure.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Is `err` a SQLite I/O error? node:sqlite reports the EXTENDED result code on
|
|
18
|
+
* `errcode` (SQLITE_IOERR_LOCK = 3850, SQLITE_IOERR_SHMMAP = 5130, ...), whose
|
|
19
|
+
* low byte is the primary code. An error without one (re-wrapped somewhere
|
|
20
|
+
* along the way) is matched by SQLite's message for the whole family.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isSqliteIoError(err: unknown): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* A SQLite I/O error on an index that Windows LatticeSensor most likely shares.
|
|
25
|
+
* Keeps the original as `cause` and carries its SQLite codes, so a caller that
|
|
26
|
+
* branches on them sees the same values as before the rewrite.
|
|
27
|
+
*/
|
|
28
|
+
export declare class WslSharedIndexError extends Error {
|
|
29
|
+
readonly code: unknown;
|
|
30
|
+
readonly errcode: unknown;
|
|
31
|
+
readonly errstr: unknown;
|
|
32
|
+
constructor(original: Error, dataDir: string);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Inputs that can be overridden in tests so the decision is deterministic
|
|
36
|
+
* without touching `/proc/version` (see `WatchProbe`).
|
|
37
|
+
*/
|
|
38
|
+
export interface WslSharedIndexProbe {
|
|
39
|
+
/** Defaults to `detectWsl()` (through `isWslWindowsDrive`). */
|
|
40
|
+
isWsl?: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The error to throw in place of `err`: a {@link WslSharedIndexError} when a
|
|
44
|
+
* SQLite I/O error hit the default-named index of a project on a Windows drive
|
|
45
|
+
* under WSL, else `null` (throw `err` unchanged).
|
|
46
|
+
*
|
|
47
|
+
* Only the default `.lattice/sensor` counts: it is the directory Windows LatticeSensor
|
|
48
|
+
* opens too. A WSL that already has its own directory (`.lattice/sensor-wsl`, or
|
|
49
|
+
* any `LATTICE_SENSOR_DIR`) hit some other I/O failure, and pointing it at
|
|
50
|
+
* `LATTICE_SENSOR_DIR` would mislead.
|
|
51
|
+
*/
|
|
52
|
+
export declare function toWslSharedIndexError(err: unknown, dbPath: string, probe?: WslSharedIndexProbe): WslSharedIndexError | null;
|
|
53
|
+
//# sourceMappingURL=wsl-shared-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wsl-shared-index.d.ts","sourceRoot":"","sources":["../../src/db/wsl-shared-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAKrD;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;gBAEb,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM;CAiB7C;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,mBAAwB,GAC9B,mBAAmB,GAAG,IAAI,CAS5B"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Windows + WSL sharing one index on a Windows drive (issue #995).
|
|
4
|
+
*
|
|
5
|
+
* A repo under `/mnt/<drive>/` can be used from both sides: Windows-native
|
|
6
|
+
* LatticeSensor and WSL LatticeSensor then open the same `.lattice/sensor/sensor.db`
|
|
7
|
+
* across the 9p/DrvFs bridge, where SQLite's file locking and its `-shm`
|
|
8
|
+
* shared memory don't hold between the two OSes. WSL's connection fails with a
|
|
9
|
+
* bare "disk I/O error" (SQLITE_IOERR). A private WSL index on the same drive
|
|
10
|
+
* works fine, so a fresh WSL project there already gets its own
|
|
11
|
+
* `.lattice/sensor-wsl` (`latticeSensorRelativeDirFor`). An index already in `.lattice/sensor` —
|
|
12
|
+
* built by Windows first, or by WSL before that default — is kept as it is,
|
|
13
|
+
* and when it fails this way the SQLite adapter rewrites the error into the
|
|
14
|
+
* `LATTICE_SENSOR_DIR=.lattice/sensor-wsl` instruction instead of letting it reach the
|
|
15
|
+
* user as an unexplained I/O failure.
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.WslSharedIndexError = void 0;
|
|
52
|
+
exports.isSqliteIoError = isSqliteIoError;
|
|
53
|
+
exports.toWslSharedIndexError = toWslSharedIndexError;
|
|
54
|
+
const path = __importStar(require("path"));
|
|
55
|
+
const directory_1 = require("../directory");
|
|
56
|
+
const watch_policy_1 = require("../sync/watch-policy");
|
|
57
|
+
/** SQLite's primary result code for an I/O failure; extended codes keep it in the low byte. */
|
|
58
|
+
const SQLITE_IOERR = 10;
|
|
59
|
+
/**
|
|
60
|
+
* Is `err` a SQLite I/O error? node:sqlite reports the EXTENDED result code on
|
|
61
|
+
* `errcode` (SQLITE_IOERR_LOCK = 3850, SQLITE_IOERR_SHMMAP = 5130, ...), whose
|
|
62
|
+
* low byte is the primary code. An error without one (re-wrapped somewhere
|
|
63
|
+
* along the way) is matched by SQLite's message for the whole family.
|
|
64
|
+
*/
|
|
65
|
+
function isSqliteIoError(err) {
|
|
66
|
+
if (!err || typeof err !== 'object')
|
|
67
|
+
return false;
|
|
68
|
+
const { errcode, message } = err;
|
|
69
|
+
if (typeof errcode === 'number')
|
|
70
|
+
return (errcode & 0xff) === SQLITE_IOERR;
|
|
71
|
+
return typeof message === 'string' && /disk I\/O error/i.test(message);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* A SQLite I/O error on an index that Windows LatticeSensor most likely shares.
|
|
75
|
+
* Keeps the original as `cause` and carries its SQLite codes, so a caller that
|
|
76
|
+
* branches on them sees the same values as before the rewrite.
|
|
77
|
+
*/
|
|
78
|
+
class WslSharedIndexError extends Error {
|
|
79
|
+
code;
|
|
80
|
+
errcode;
|
|
81
|
+
errstr;
|
|
82
|
+
constructor(original, dataDir) {
|
|
83
|
+
super(`${original.message} on the LatticeSensor index at ${dataDir}\n` +
|
|
84
|
+
"This project is on a Windows drive, where SQLite's file locking doesn't work across " +
|
|
85
|
+
'the Windows/WSL boundary, so this usually means LatticeSensor on Windows is using the same ' +
|
|
86
|
+
"index. Windows and WSL can't share one index on a Windows drive; give WSL its own:\n" +
|
|
87
|
+
` 1. Set LATTICE_SENSOR_DIR=${directory_1.WSL_LATTICE_SENSOR_DIR} in the WSL environment (your shell profile, ` +
|
|
88
|
+
'or the env of the MCP server your agent starts).\n' +
|
|
89
|
+
` 2. Run "lattice sensor init" in WSL to build that index. Windows keeps using ${directory_1.DEFAULT_LATTICE_SENSOR_DIR}.`, { cause: original });
|
|
90
|
+
this.name = 'WslSharedIndexError';
|
|
91
|
+
const codes = original;
|
|
92
|
+
this.code = codes.code;
|
|
93
|
+
this.errcode = codes.errcode;
|
|
94
|
+
this.errstr = codes.errstr;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.WslSharedIndexError = WslSharedIndexError;
|
|
98
|
+
/**
|
|
99
|
+
* The error to throw in place of `err`: a {@link WslSharedIndexError} when a
|
|
100
|
+
* SQLite I/O error hit the default-named index of a project on a Windows drive
|
|
101
|
+
* under WSL, else `null` (throw `err` unchanged).
|
|
102
|
+
*
|
|
103
|
+
* Only the default `.lattice/sensor` counts: it is the directory Windows LatticeSensor
|
|
104
|
+
* opens too. A WSL that already has its own directory (`.lattice/sensor-wsl`, or
|
|
105
|
+
* any `LATTICE_SENSOR_DIR`) hit some other I/O failure, and pointing it at
|
|
106
|
+
* `LATTICE_SENSOR_DIR` would mislead.
|
|
107
|
+
*/
|
|
108
|
+
function toWslSharedIndexError(err, dbPath, probe = {}) {
|
|
109
|
+
if (err instanceof WslSharedIndexError)
|
|
110
|
+
return err;
|
|
111
|
+
if (!(err instanceof Error) || !isSqliteIoError(err))
|
|
112
|
+
return null;
|
|
113
|
+
const dataDir = path.dirname(dbPath);
|
|
114
|
+
if (path.basename(dataDir) !== directory_1.DEFAULT_LATTICE_SENSOR_DIR)
|
|
115
|
+
return null;
|
|
116
|
+
const onWslWindowsDrive = probe.isWsl === undefined
|
|
117
|
+
? (0, watch_policy_1.isWslWindowsDrive)(dbPath)
|
|
118
|
+
: probe.isWsl && (0, watch_policy_1.isWindowsDriveMount)(dbPath);
|
|
119
|
+
return onWslWindowsDrive ? new WslSharedIndexError(err, dataDir) : null;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=wsl-shared-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wsl-shared-index.js","sourceRoot":"","sources":["../../src/db/wsl-shared-index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeH,0CAKC;AAkDD,sDAaC;AAjFD,2CAA6B;AAC7B,4CAAkF;AAClF,uDAA8E;AAE9E,+FAA+F;AAC/F,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,GAAY;IAC1C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,GAA+C,CAAC;IAC7E,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,YAAY,CAAC;IAC1E,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAa,mBAAoB,SAAQ,KAAK;IACnC,IAAI,CAAU;IACd,OAAO,CAAU;IACjB,MAAM,CAAU;IAEzB,YAAY,QAAe,EAAE,OAAe;QAC1C,KAAK,CACH,GAAG,QAAQ,CAAC,OAAO,kCAAkC,OAAO,IAAI;YAC9D,sFAAsF;YACtF,6FAA6F;YAC7F,sFAAsF;YACtF,+BAA+B,kCAAsB,+CAA+C;YACpG,oDAAoD;YACpD,kFAAkF,sCAA0B,GAAG,EACjH,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,MAAM,KAAK,GAAG,QAA2E,CAAC;QAC1F,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,CAAC;CACF;AAtBD,kDAsBC;AAWD;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CACnC,GAAY,EACZ,MAAc,EACd,QAA6B,EAAE;IAE/B,IAAI,GAAG,YAAY,mBAAmB;QAAE,OAAO,GAAG,CAAC;IACnD,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,sCAA0B;QAAE,OAAO,IAAI,CAAC;IACvE,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS;QACjD,CAAC,CAAC,IAAA,gCAAiB,EAAC,MAAM,CAAC;QAC3B,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAA,kCAAmB,EAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,iBAAiB,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC"}
|