seer-mcp 0.1.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.
Files changed (371) hide show
  1. package/.vscode/settings.json +3 -0
  2. package/LICENSE +176 -0
  3. package/README.md +272 -0
  4. package/README_dev.md +199 -0
  5. package/dist/bundle/ci.d.ts +47 -0
  6. package/dist/bundle/ci.d.ts.map +1 -0
  7. package/dist/bundle/ci.js +113 -0
  8. package/dist/bundle/ci.js.map +1 -0
  9. package/dist/bundle/contract.d.ts +111 -0
  10. package/dist/bundle/contract.d.ts.map +1 -0
  11. package/dist/bundle/contract.js +352 -0
  12. package/dist/bundle/contract.js.map +1 -0
  13. package/dist/bundle/export.d.ts +36 -0
  14. package/dist/bundle/export.d.ts.map +1 -0
  15. package/dist/bundle/export.js +152 -0
  16. package/dist/bundle/export.js.map +1 -0
  17. package/dist/bundle/external.d.ts +66 -0
  18. package/dist/bundle/external.d.ts.map +1 -0
  19. package/dist/bundle/external.js +238 -0
  20. package/dist/bundle/external.js.map +1 -0
  21. package/dist/bundle/format.d.ts +94 -0
  22. package/dist/bundle/format.d.ts.map +1 -0
  23. package/dist/bundle/format.js +42 -0
  24. package/dist/bundle/format.js.map +1 -0
  25. package/dist/bundle/import.d.ts +49 -0
  26. package/dist/bundle/import.d.ts.map +1 -0
  27. package/dist/bundle/import.js +116 -0
  28. package/dist/bundle/import.js.map +1 -0
  29. package/dist/cli/index.d.ts +3 -0
  30. package/dist/cli/index.d.ts.map +1 -0
  31. package/dist/cli/index.js +1402 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/cli/init.d.ts +48 -0
  34. package/dist/cli/init.d.ts.map +1 -0
  35. package/dist/cli/init.js +284 -0
  36. package/dist/cli/init.js.map +1 -0
  37. package/dist/db/schema.d.ts +3 -0
  38. package/dist/db/schema.d.ts.map +1 -0
  39. package/dist/db/schema.js +616 -0
  40. package/dist/db/schema.js.map +1 -0
  41. package/dist/db/store.d.ts +1011 -0
  42. package/dist/db/store.d.ts.map +1 -0
  43. package/dist/db/store.js +3888 -0
  44. package/dist/db/store.js.map +1 -0
  45. package/dist/graph/pagerank.d.ts +9 -0
  46. package/dist/graph/pagerank.d.ts.map +1 -0
  47. package/dist/graph/pagerank.js +47 -0
  48. package/dist/graph/pagerank.js.map +1 -0
  49. package/dist/indexer/architecture.d.ts +72 -0
  50. package/dist/indexer/architecture.d.ts.map +1 -0
  51. package/dist/indexer/architecture.js +112 -0
  52. package/dist/indexer/architecture.js.map +1 -0
  53. package/dist/indexer/behavior.d.ts +75 -0
  54. package/dist/indexer/behavior.d.ts.map +1 -0
  55. package/dist/indexer/behavior.js +395 -0
  56. package/dist/indexer/behavior.js.map +1 -0
  57. package/dist/indexer/boundaries.d.ts +60 -0
  58. package/dist/indexer/boundaries.d.ts.map +1 -0
  59. package/dist/indexer/boundaries.js +366 -0
  60. package/dist/indexer/boundaries.js.map +1 -0
  61. package/dist/indexer/churn.d.ts +15 -0
  62. package/dist/indexer/churn.d.ts.map +1 -0
  63. package/dist/indexer/churn.js +49 -0
  64. package/dist/indexer/churn.js.map +1 -0
  65. package/dist/indexer/classify.d.ts +9 -0
  66. package/dist/indexer/classify.d.ts.map +1 -0
  67. package/dist/indexer/classify.js +90 -0
  68. package/dist/indexer/classify.js.map +1 -0
  69. package/dist/indexer/context.d.ts +176 -0
  70. package/dist/indexer/context.d.ts.map +1 -0
  71. package/dist/indexer/context.js +193 -0
  72. package/dist/indexer/context.js.map +1 -0
  73. package/dist/indexer/continuity.d.ts +67 -0
  74. package/dist/indexer/continuity.d.ts.map +1 -0
  75. package/dist/indexer/continuity.js +288 -0
  76. package/dist/indexer/continuity.js.map +1 -0
  77. package/dist/indexer/detectchanges.d.ts +32 -0
  78. package/dist/indexer/detectchanges.d.ts.map +1 -0
  79. package/dist/indexer/detectchanges.js +74 -0
  80. package/dist/indexer/detectchanges.js.map +1 -0
  81. package/dist/indexer/discovery.d.ts +37 -0
  82. package/dist/indexer/discovery.d.ts.map +1 -0
  83. package/dist/indexer/discovery.js +136 -0
  84. package/dist/indexer/discovery.js.map +1 -0
  85. package/dist/indexer/externaldeps.d.ts +18 -0
  86. package/dist/indexer/externaldeps.d.ts.map +1 -0
  87. package/dist/indexer/externaldeps.js +288 -0
  88. package/dist/indexer/externaldeps.js.map +1 -0
  89. package/dist/indexer/freshness.d.ts +48 -0
  90. package/dist/indexer/freshness.d.ts.map +1 -0
  91. package/dist/indexer/freshness.js +128 -0
  92. package/dist/indexer/freshness.js.map +1 -0
  93. package/dist/indexer/git.d.ts +144 -0
  94. package/dist/indexer/git.d.ts.map +1 -0
  95. package/dist/indexer/git.js +444 -0
  96. package/dist/indexer/git.js.map +1 -0
  97. package/dist/indexer/index.d.ts +145 -0
  98. package/dist/indexer/index.d.ts.map +1 -0
  99. package/dist/indexer/index.js +930 -0
  100. package/dist/indexer/index.js.map +1 -0
  101. package/dist/indexer/modules.d.ts +62 -0
  102. package/dist/indexer/modules.d.ts.map +1 -0
  103. package/dist/indexer/modules.js +293 -0
  104. package/dist/indexer/modules.js.map +1 -0
  105. package/dist/indexer/preflight.d.ts +154 -0
  106. package/dist/indexer/preflight.d.ts.map +1 -0
  107. package/dist/indexer/preflight.js +399 -0
  108. package/dist/indexer/preflight.js.map +1 -0
  109. package/dist/indexer/protoScanner.d.ts +34 -0
  110. package/dist/indexer/protoScanner.d.ts.map +1 -0
  111. package/dist/indexer/protoScanner.js +133 -0
  112. package/dist/indexer/protoScanner.js.map +1 -0
  113. package/dist/indexer/risk.d.ts +115 -0
  114. package/dist/indexer/risk.d.ts.map +1 -0
  115. package/dist/indexer/risk.js +194 -0
  116. package/dist/indexer/risk.js.map +1 -0
  117. package/dist/indexer/serviceHostScanner.d.ts +25 -0
  118. package/dist/indexer/serviceHostScanner.d.ts.map +1 -0
  119. package/dist/indexer/serviceHostScanner.js +95 -0
  120. package/dist/indexer/serviceHostScanner.js.map +1 -0
  121. package/dist/indexer/serviceLinks.d.ts +105 -0
  122. package/dist/indexer/serviceLinks.d.ts.map +1 -0
  123. package/dist/indexer/serviceLinks.js +509 -0
  124. package/dist/indexer/serviceLinks.js.map +1 -0
  125. package/dist/indexer/shapehash.d.ts +98 -0
  126. package/dist/indexer/shapehash.d.ts.map +1 -0
  127. package/dist/indexer/shapehash.js +354 -0
  128. package/dist/indexer/shapehash.js.map +1 -0
  129. package/dist/indexer/skeleton.d.ts +15 -0
  130. package/dist/indexer/skeleton.d.ts.map +1 -0
  131. package/dist/indexer/skeleton.js +136 -0
  132. package/dist/indexer/skeleton.js.map +1 -0
  133. package/dist/indexer/symbolhistory.d.ts +41 -0
  134. package/dist/indexer/symbolhistory.d.ts.map +1 -0
  135. package/dist/indexer/symbolhistory.js +124 -0
  136. package/dist/indexer/symbolhistory.js.map +1 -0
  137. package/dist/indexer/watcher.d.ts +68 -0
  138. package/dist/indexer/watcher.d.ts.map +1 -0
  139. package/dist/indexer/watcher.js +179 -0
  140. package/dist/indexer/watcher.js.map +1 -0
  141. package/dist/mcp/server.d.ts +80 -0
  142. package/dist/mcp/server.d.ts.map +1 -0
  143. package/dist/mcp/server.js +1610 -0
  144. package/dist/mcp/server.js.map +1 -0
  145. package/dist/parser/index.d.ts +8 -0
  146. package/dist/parser/index.d.ts.map +1 -0
  147. package/dist/parser/index.js +33 -0
  148. package/dist/parser/index.js.map +1 -0
  149. package/dist/parser/languages/cpp.d.ts +3 -0
  150. package/dist/parser/languages/cpp.d.ts.map +1 -0
  151. package/dist/parser/languages/cpp.js +350 -0
  152. package/dist/parser/languages/cpp.js.map +1 -0
  153. package/dist/parser/languages/csharp.d.ts +3 -0
  154. package/dist/parser/languages/csharp.d.ts.map +1 -0
  155. package/dist/parser/languages/csharp.js +239 -0
  156. package/dist/parser/languages/csharp.js.map +1 -0
  157. package/dist/parser/languages/go.d.ts +3 -0
  158. package/dist/parser/languages/go.d.ts.map +1 -0
  159. package/dist/parser/languages/go.js +259 -0
  160. package/dist/parser/languages/go.js.map +1 -0
  161. package/dist/parser/languages/java.d.ts +3 -0
  162. package/dist/parser/languages/java.d.ts.map +1 -0
  163. package/dist/parser/languages/java.js +391 -0
  164. package/dist/parser/languages/java.js.map +1 -0
  165. package/dist/parser/languages/python.d.ts +3 -0
  166. package/dist/parser/languages/python.d.ts.map +1 -0
  167. package/dist/parser/languages/python.js +396 -0
  168. package/dist/parser/languages/python.js.map +1 -0
  169. package/dist/parser/languages/rust.d.ts +3 -0
  170. package/dist/parser/languages/rust.d.ts.map +1 -0
  171. package/dist/parser/languages/rust.js +159 -0
  172. package/dist/parser/languages/rust.js.map +1 -0
  173. package/dist/parser/languages/typescript.d.ts +3 -0
  174. package/dist/parser/languages/typescript.d.ts.map +1 -0
  175. package/dist/parser/languages/typescript.js +1442 -0
  176. package/dist/parser/languages/typescript.js.map +1 -0
  177. package/dist/parser/parserContext.d.ts +77 -0
  178. package/dist/parser/parserContext.d.ts.map +1 -0
  179. package/dist/parser/parserContext.js +354 -0
  180. package/dist/parser/parserContext.js.map +1 -0
  181. package/dist/parser/walker.d.ts +81 -0
  182. package/dist/parser/walker.d.ts.map +1 -0
  183. package/dist/parser/walker.js +217 -0
  184. package/dist/parser/walker.js.map +1 -0
  185. package/dist/parser/worker.d.ts +66 -0
  186. package/dist/parser/worker.d.ts.map +1 -0
  187. package/dist/parser/worker.js +129 -0
  188. package/dist/parser/worker.js.map +1 -0
  189. package/dist/parser/workerpool.d.ts +107 -0
  190. package/dist/parser/workerpool.d.ts.map +1 -0
  191. package/dist/parser/workerpool.js +383 -0
  192. package/dist/parser/workerpool.js.map +1 -0
  193. package/dist/scip/format.d.ts +87 -0
  194. package/dist/scip/format.d.ts.map +1 -0
  195. package/dist/scip/format.js +31 -0
  196. package/dist/scip/format.js.map +1 -0
  197. package/dist/scip/import.d.ts +37 -0
  198. package/dist/scip/import.d.ts.map +1 -0
  199. package/dist/scip/import.js +180 -0
  200. package/dist/scip/import.js.map +1 -0
  201. package/dist/types.d.ts +392 -0
  202. package/dist/types.d.ts.map +1 -0
  203. package/dist/types.js +4 -0
  204. package/dist/types.js.map +1 -0
  205. package/docs/architecture.md +105 -0
  206. package/docs/benchmarks/methodology.md +134 -0
  207. package/docs/benchmarks/raw-results.md +71 -0
  208. package/docs/benchmarks.md +74 -0
  209. package/docs/cli.md +148 -0
  210. package/docs/examples/behavior-tests.md +70 -0
  211. package/docs/examples/change-history.md +85 -0
  212. package/docs/examples/pre-edit-context.md +81 -0
  213. package/docs/examples/service-links.md +88 -0
  214. package/docs/examples.md +80 -0
  215. package/docs/faq.md +70 -0
  216. package/docs/internals.md +104 -0
  217. package/docs/languages.md +70 -0
  218. package/docs/limits.md +52 -0
  219. package/docs/mcp.md +199 -0
  220. package/docs/quickstart.md +119 -0
  221. package/docs/testing.md +123 -0
  222. package/docs/tools.md +115 -0
  223. package/package.json +52 -0
  224. package/research-codebase.md +578 -0
  225. package/seer-cli-docs.md +326 -0
  226. package/seer-master-guide.md +246 -0
  227. package/src/bundle/ci.ts +141 -0
  228. package/src/bundle/contract.ts +387 -0
  229. package/src/bundle/export.ts +175 -0
  230. package/src/bundle/external.ts +285 -0
  231. package/src/bundle/format.ts +92 -0
  232. package/src/bundle/import.ts +157 -0
  233. package/src/cli/index.ts +1249 -0
  234. package/src/cli/init.ts +389 -0
  235. package/src/db/schema.ts +614 -0
  236. package/src/db/store.ts +4306 -0
  237. package/src/graph/pagerank.ts +53 -0
  238. package/src/indexer/architecture.ts +148 -0
  239. package/src/indexer/behavior.ts +466 -0
  240. package/src/indexer/boundaries.ts +374 -0
  241. package/src/indexer/churn.ts +58 -0
  242. package/src/indexer/classify.ts +96 -0
  243. package/src/indexer/context.ts +340 -0
  244. package/src/indexer/continuity.ts +322 -0
  245. package/src/indexer/detectchanges.ts +94 -0
  246. package/src/indexer/discovery.ts +176 -0
  247. package/src/indexer/externaldeps.ts +243 -0
  248. package/src/indexer/freshness.ts +166 -0
  249. package/src/indexer/git.ts +453 -0
  250. package/src/indexer/index.ts +1092 -0
  251. package/src/indexer/modules.ts +358 -0
  252. package/src/indexer/preflight.ts +548 -0
  253. package/src/indexer/protoScanner.ts +147 -0
  254. package/src/indexer/risk.ts +304 -0
  255. package/src/indexer/serviceHostScanner.ts +92 -0
  256. package/src/indexer/serviceLinks.ts +543 -0
  257. package/src/indexer/shapehash.ts +370 -0
  258. package/src/indexer/skeleton.ts +169 -0
  259. package/src/indexer/symbolhistory.ts +172 -0
  260. package/src/indexer/watcher.ts +206 -0
  261. package/src/mcp/server.ts +1659 -0
  262. package/src/parser/index.ts +37 -0
  263. package/src/parser/languages/cpp.ts +361 -0
  264. package/src/parser/languages/csharp.ts +235 -0
  265. package/src/parser/languages/go.ts +259 -0
  266. package/src/parser/languages/java.ts +382 -0
  267. package/src/parser/languages/python.ts +370 -0
  268. package/src/parser/languages/rust.ts +164 -0
  269. package/src/parser/languages/typescript.ts +1435 -0
  270. package/src/parser/parserContext.ts +392 -0
  271. package/src/parser/walker.ts +306 -0
  272. package/src/parser/worker.ts +181 -0
  273. package/src/parser/workerpool.ts +448 -0
  274. package/src/scip/format.ts +83 -0
  275. package/src/scip/import.ts +216 -0
  276. package/src/types.ts +457 -0
  277. package/tests/benchmark-service-links.ts +244 -0
  278. package/tests/bug-regressions.ts +626 -0
  279. package/tests/filters.ts +264 -0
  280. package/tests/fixtures/Counter.tsx +38 -0
  281. package/tests/fixtures/caller.ts +7 -0
  282. package/tests/fixtures/collisions.ts +23 -0
  283. package/tests/fixtures/local_helper.ts +5 -0
  284. package/tests/fixtures/overloads.java +17 -0
  285. package/tests/fixtures/remote_helper.ts +4 -0
  286. package/tests/fixtures/sample.c +15 -0
  287. package/tests/fixtures/sample.cpp +47 -0
  288. package/tests/fixtures/sample.cs +62 -0
  289. package/tests/fixtures/sample.go +68 -0
  290. package/tests/fixtures/sample.h +30 -0
  291. package/tests/fixtures/sample.java +85 -0
  292. package/tests/fixtures/sample.py +46 -0
  293. package/tests/fixtures/sample.rs +78 -0
  294. package/tests/fixtures/sample.ts +76 -0
  295. package/tests/fixtures-service/HttpClients.cs +30 -0
  296. package/tests/fixtures-service/HttpClients.java +24 -0
  297. package/tests/fixtures-service/billing.ts +15 -0
  298. package/tests/fixtures-service/docker-compose.yml +15 -0
  299. package/tests/fixtures-service/gateway.ts +10 -0
  300. package/tests/fixtures-service/get_user.ts +11 -0
  301. package/tests/fixtures-service/graphql_client.ts +63 -0
  302. package/tests/fixtures-service/graphql_server.ts +30 -0
  303. package/tests/fixtures-service/grpc_client.go +30 -0
  304. package/tests/fixtures-service/http_clients.go +23 -0
  305. package/tests/fixtures-service/http_clients.py +38 -0
  306. package/tests/fixtures-service/http_clients.ts +49 -0
  307. package/tests/fixtures-service/k8s/payment-service.yaml +22 -0
  308. package/tests/fixtures-service/k8s_calls.ts +20 -0
  309. package/tests/fixtures-service/messaging.ts +87 -0
  310. package/tests/fixtures-service/trpc_client.ts +39 -0
  311. package/tests/fixtures-service/trpc_server.ts +39 -0
  312. package/tests/fixtures-service/user_service.proto +33 -0
  313. package/tests/fixtures-trackcd/Cargo.toml +11 -0
  314. package/tests/fixtures-trackcd/SpringController.java +36 -0
  315. package/tests/fixtures-trackcd/auth_service.ts +19 -0
  316. package/tests/fixtures-trackcd/complex_module.py +50 -0
  317. package/tests/fixtures-trackcd/express_app.js +30 -0
  318. package/tests/fixtures-trackcd/fastapi_app.py +49 -0
  319. package/tests/fixtures-trackcd/fastify_object_routes.js +32 -0
  320. package/tests/fixtures-trackcd/go.mod +8 -0
  321. package/tests/fixtures-trackcd/package.json +15 -0
  322. package/tests/fixtures-trackcd/requirements.txt +4 -0
  323. package/tests/fixtures-trackcd/tests/auth_service.test.ts +13 -0
  324. package/tests/fixtures-tracke/auth/AuthService.ts +23 -0
  325. package/tests/fixtures-tracke/auth/crypto.ts +7 -0
  326. package/tests/fixtures-tracke/billing/Billing.ts +20 -0
  327. package/tests/fixtures-tracke/billing/Invoice.ts +10 -0
  328. package/tests/fixtures-tracke/billing/server.ts +17 -0
  329. package/tests/fixtures-tracke/package.json +7 -0
  330. package/tests/fixtures-tracke/tests/auth.test.ts +23 -0
  331. package/tests/fixtures-tracke/tests/billing.test.ts +14 -0
  332. package/tests/fixtures-trackf/package.json +5 -0
  333. package/tests/fixtures-trackf/src/auth.ts +26 -0
  334. package/tests/fixtures-trackf/src/handlers.ts +35 -0
  335. package/tests/fixtures-tracki/billing/routes.ts +12 -0
  336. package/tests/fixtures-tracki/gateway/client.ts +13 -0
  337. package/tests/git-features.ts +267 -0
  338. package/tests/init.ts +141 -0
  339. package/tests/mcp-jit.ts +130 -0
  340. package/tests/mcp-smoke.ts +191 -0
  341. package/tests/mcp-trackcd.ts +169 -0
  342. package/tests/mcp-tracke.ts +229 -0
  343. package/tests/mcp-trackf.ts +330 -0
  344. package/tests/mcp-trackg.ts +219 -0
  345. package/tests/mcp-tracki.ts +174 -0
  346. package/tests/mcp-watcher.ts +126 -0
  347. package/tests/optspec.ts +194 -0
  348. package/tests/parallel-index.ts +333 -0
  349. package/tests/parallel-read.ts +125 -0
  350. package/tests/parallel-recovery.ts +241 -0
  351. package/tests/perf-callers.ts +145 -0
  352. package/tests/query-parity.ts +184 -0
  353. package/tests/query-perf.ts +55 -0
  354. package/tests/scale-parallel-parity.ts +225 -0
  355. package/tests/scale-test.ts +523 -0
  356. package/tests/smoke.ts +396 -0
  357. package/tests/trackcd.ts +325 -0
  358. package/tests/tracke-collisions.ts +255 -0
  359. package/tests/tracke.ts +314 -0
  360. package/tests/trackf-bugs.ts +406 -0
  361. package/tests/trackf.ts +390 -0
  362. package/tests/trackg.ts +1372 -0
  363. package/tests/tracki-boundaries.ts +202 -0
  364. package/tests/tracki-continuity.ts +253 -0
  365. package/tests/tracki-contract-diff.ts +249 -0
  366. package/tests/tracki-external-bundles.ts +341 -0
  367. package/tests/tracki-preflight.ts +251 -0
  368. package/tests/verify-roles.ts +51 -0
  369. package/tests/worker-parity.ts +286 -0
  370. package/tests/worker-pool.ts +262 -0
  371. package/tsconfig.json +20 -0
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WorkerPool = void 0;
7
+ exports.defaultWorkerPath = defaultWorkerPath;
8
+ /**
9
+ * WorkerPool — a fixed-size pool of parser workers with ordered draining,
10
+ * bounded out-of-order buffering, per-job attempt limits, and crash recovery.
11
+ *
12
+ * Used by the indexer's parallel-parsing path. The pool owns:
13
+ * - N workers, each its own V8 isolate + WASM heap.
14
+ * - A FIFO queue of pending jobs.
15
+ * - A small bounded buffer for out-of-order completions (results that
16
+ * finished ahead of the current head seq are held until the head
17
+ * advances). The buffer is bounded by `maxLag` so a slow head can't
18
+ * pile up unbounded memory.
19
+ * - An "inflight" map: workerId → currently-assigned job. On worker
20
+ * death this is what gets requeued.
21
+ *
22
+ * Design discipline:
23
+ * - Workers parse only. The pool never touches the DB or graph.
24
+ * - The consumer callback is invoked strictly in input order. Symbol IDs
25
+ * in the indexer depend on this for cross-run determinism.
26
+ * - Crashes are recoverable but bounded: a job that has crashed `maxAttempts`
27
+ * workers in a row is reported as a parse-error and the run continues.
28
+ * - Shutdown is graceful: drain inflight, send `shutdown` to each worker,
29
+ * await exit. Terminate is the hammer for tests.
30
+ */
31
+ const worker_threads_1 = require("worker_threads");
32
+ const fs_1 = __importDefault(require("fs"));
33
+ const path_1 = __importDefault(require("path"));
34
+ const os_1 = __importDefault(require("os"));
35
+ // ── Default worker-path resolver ─────────────────────────────────────────────
36
+ //
37
+ // Workers always run from the compiled .js artifact. In dev (tsx) the source
38
+ // of this module is .ts; we reflect __dirname to dist. This means callers
39
+ // must `npm run build` before turning on parallel mode in dev — which matches
40
+ // the pattern already used by the MCP test suite. If the dist artifact is
41
+ // missing we throw with a clear message rather than silently fall back.
42
+ function defaultWorkerPath() {
43
+ const here = __filename;
44
+ if (here.endsWith('.js')) {
45
+ return path_1.default.join(__dirname, 'worker.js');
46
+ }
47
+ // Source mode: reflect src/parser/<this>.ts → dist/parser/worker.js.
48
+ const distDir = __dirname
49
+ .replace(`${path_1.default.sep}src${path_1.default.sep}parser`, `${path_1.default.sep}dist${path_1.default.sep}parser`)
50
+ .replace('/src/parser', '/dist/parser');
51
+ const distWorker = path_1.default.join(distDir, 'worker.js');
52
+ if (!fs_1.default.existsSync(distWorker)) {
53
+ throw new Error(`Parallel parsing requires the compiled worker at ${distWorker}. ` +
54
+ `Run \`npm run build\` first, or set SEER_PARALLEL_PARSE=0.`);
55
+ }
56
+ return distWorker;
57
+ }
58
+ // ── WorkerPool ───────────────────────────────────────────────────────────────
59
+ class WorkerPool {
60
+ workerPath;
61
+ maxLag;
62
+ maxAttempts;
63
+ _jobs;
64
+ workers = [];
65
+ idle = [];
66
+ nextWorkerId = 0;
67
+ /** Sequence number of the next result we expect to deliver via the callback. */
68
+ headSeq = 0;
69
+ /** Total jobs in the current dispatch. */
70
+ totalJobs = 0;
71
+ /** Next seq to send to a worker. */
72
+ nextDispatchSeq = 0;
73
+ /** seq → WorkItem (for the entire dispatch). */
74
+ items = [];
75
+ /** seq → attempt count. */
76
+ attempts = new Map();
77
+ /** Out-of-order buffer for seq > headSeq. */
78
+ buffered = new Map();
79
+ /** Awaiting-worker queue: seqs that need to be dispatched but no worker is free. */
80
+ pendingDispatch = [];
81
+ /** Currently active dispatch — null when idle. */
82
+ active = null;
83
+ /**
84
+ * Synchronous flag set the moment `dispatch()` is entered. Prevents two
85
+ * synchronous `dispatch()` calls from both passing the `if (this.active)`
86
+ * guard before the first reaches its `await this.ready()`. `this.active`
87
+ * itself is set after that await, so it can't be the only guard.
88
+ */
89
+ dispatching = false;
90
+ /** A rolling promise chain so the consumer callback is invoked strictly serially. */
91
+ callbackChain = Promise.resolve();
92
+ _wasmResets = 0;
93
+ terminated = false;
94
+ constructor(opts = {}) {
95
+ this._jobs = Math.max(1, opts.jobs ?? defaultJobCount());
96
+ this.workerPath = opts.workerPath ?? defaultWorkerPath();
97
+ this.maxLag = Math.max(this._jobs, opts.maxLag ?? this._jobs * 4);
98
+ this.maxAttempts = Math.max(1, opts.maxAttempts ?? 3);
99
+ }
100
+ /** Number of workers actually spawned (after `ready()`). */
101
+ get jobs() { return this._jobs; }
102
+ /** Total worker-local ParserContext resets observed across this pool. */
103
+ wasmResetCount() { return this._wasmResets; }
104
+ /** Spawn workers and wait for all of them to post `ready`. */
105
+ async ready() {
106
+ if (this.workers.length > 0)
107
+ return; // already spawned
108
+ const readyPromises = [];
109
+ for (let i = 0; i < this._jobs; i++) {
110
+ const handle = this.spawnWorker();
111
+ this.workers.push(handle);
112
+ readyPromises.push(new Promise((resolve, reject) => {
113
+ handle.worker.once('error', reject);
114
+ const onMsg = (msg) => {
115
+ if (msg.kind === 'ready') {
116
+ handle.ready = true;
117
+ this.idle.push(handle);
118
+ handle.worker.off('message', onMsg);
119
+ resolve();
120
+ }
121
+ };
122
+ handle.worker.on('message', onMsg);
123
+ }));
124
+ }
125
+ await Promise.all(readyPromises);
126
+ }
127
+ /**
128
+ * Dispatch every WorkItem to the pool. The callback is invoked exactly once
129
+ * per item, in input order, regardless of which worker finished it.
130
+ *
131
+ * Resolves when every item has been delivered to the callback. Rejects if
132
+ * the pool is terminated mid-dispatch.
133
+ */
134
+ async dispatch(items, onResult) {
135
+ if (this.dispatching || this.active) {
136
+ throw new Error('WorkerPool: dispatch already in progress');
137
+ }
138
+ if (this.terminated) {
139
+ throw new Error('WorkerPool: terminated');
140
+ }
141
+ if (items.length === 0)
142
+ return;
143
+ this.dispatching = true;
144
+ try {
145
+ await this.ready();
146
+ this.items = items;
147
+ this.totalJobs = items.length;
148
+ this.headSeq = 0;
149
+ this.nextDispatchSeq = 0;
150
+ this.attempts.clear();
151
+ this.buffered.clear();
152
+ this.pendingDispatch.length = 0;
153
+ this.callbackChain = Promise.resolve();
154
+ await new Promise((resolve, reject) => {
155
+ this.active = {
156
+ onResult,
157
+ resolve,
158
+ reject,
159
+ delivering: this.callbackChain,
160
+ };
161
+ this.pump();
162
+ });
163
+ // Wait for the callback chain to fully drain before returning.
164
+ await this.callbackChain;
165
+ this.active = null;
166
+ this.items = [];
167
+ }
168
+ finally {
169
+ this.dispatching = false;
170
+ }
171
+ }
172
+ /** Shutdown: send 'shutdown' to each worker, await all exits. */
173
+ async shutdown() {
174
+ if (this.terminated)
175
+ return;
176
+ this.terminated = true;
177
+ const exits = [];
178
+ for (const h of this.workers) {
179
+ exits.push(new Promise(resolve => {
180
+ h.worker.once('exit', () => resolve());
181
+ try {
182
+ h.worker.postMessage({ kind: 'shutdown' });
183
+ }
184
+ catch {
185
+ resolve();
186
+ }
187
+ }));
188
+ }
189
+ await Promise.all(exits);
190
+ this.workers = [];
191
+ this.idle = [];
192
+ }
193
+ /** Hammer: force-terminate all workers. Use only when shutdown() can't. */
194
+ async terminate() {
195
+ if (this.terminated && this.workers.length === 0)
196
+ return;
197
+ this.terminated = true;
198
+ const exits = [];
199
+ for (const h of this.workers)
200
+ exits.push(h.worker.terminate());
201
+ await Promise.all(exits);
202
+ this.workers = [];
203
+ this.idle = [];
204
+ }
205
+ // ── Internals ──────────────────────────────────────────────────────────────
206
+ /** Pump dispatch + drain until either no work is left or no slack remains. */
207
+ pump() {
208
+ // 1. Dispatch as many new seqs as backpressure allows.
209
+ // Constraint: seqDispatched < headSeq + maxLag, so the buffered out-of-order
210
+ // set can't grow past `maxLag` entries.
211
+ while (this.idle.length > 0
212
+ && this.nextDispatchSeq < this.totalJobs
213
+ && this.nextDispatchSeq < this.headSeq + this.maxLag) {
214
+ const seq = this.nextDispatchSeq++;
215
+ const handle = this.idle.pop();
216
+ this.sendJob(handle, seq);
217
+ }
218
+ // 2. Also drain any pendingDispatch (requeued after a crash) while workers idle.
219
+ while (this.idle.length > 0 && this.pendingDispatch.length > 0) {
220
+ const seq = this.pendingDispatch.shift();
221
+ const handle = this.idle.pop();
222
+ this.sendJob(handle, seq);
223
+ }
224
+ // 3. If everything is delivered, finish the dispatch.
225
+ if (this.active && this.headSeq >= this.totalJobs) {
226
+ const a = this.active;
227
+ // Resolve once the callback chain has drained the last buffered result.
228
+ this.callbackChain.then(() => a.resolve(), err => a.reject(err));
229
+ }
230
+ }
231
+ sendJob(handle, seq) {
232
+ const item = this.items[seq];
233
+ handle.inflight = { seq, item };
234
+ const job = {
235
+ kind: 'parse',
236
+ seq,
237
+ abs: item.abs,
238
+ lang: item.lang,
239
+ expectedHash: item.expectedHash,
240
+ maxFileBytes: item.maxFileBytes,
241
+ };
242
+ try {
243
+ handle.worker.postMessage(job);
244
+ }
245
+ catch (err) {
246
+ // Worker is gone — treat as crash.
247
+ this.onWorkerCrash(handle, err);
248
+ }
249
+ }
250
+ spawnWorker() {
251
+ const id = this.nextWorkerId++;
252
+ const worker = new worker_threads_1.Worker(this.workerPath);
253
+ const handle = { id, worker, inflight: null, ready: false, wasmResets: 0 };
254
+ worker.on('message', (msg) => this.onWorkerMessage(handle, msg));
255
+ worker.on('error', err => this.onWorkerCrash(handle, err));
256
+ worker.on('exit', code => {
257
+ if (this.terminated)
258
+ return;
259
+ if (handle.inflight) {
260
+ // Unexpected exit during a job.
261
+ this.onWorkerCrash(handle, new Error(`worker ${id} exited with code ${code} mid-job`));
262
+ return;
263
+ }
264
+ // Exited idle — only fine if we're tearing down. If we're still active,
265
+ // respawn so the pool doesn't shrink under load.
266
+ if (this.active && !this.terminated) {
267
+ this.respawnWorker(handle);
268
+ }
269
+ });
270
+ return handle;
271
+ }
272
+ respawnWorker(dead) {
273
+ const idx = this.workers.indexOf(dead);
274
+ if (idx >= 0)
275
+ this.workers.splice(idx, 1);
276
+ const idleIdx = this.idle.indexOf(dead);
277
+ if (idleIdx >= 0)
278
+ this.idle.splice(idleIdx, 1);
279
+ const fresh = this.spawnWorker();
280
+ this.workers.push(fresh);
281
+ // Wait for fresh worker's ready message before counting it as idle.
282
+ const onMsg = (msg) => {
283
+ if (msg.kind === 'ready') {
284
+ fresh.ready = true;
285
+ fresh.worker.off('message', onMsg);
286
+ this.idle.push(fresh);
287
+ if (this.active)
288
+ this.pump();
289
+ }
290
+ };
291
+ fresh.worker.on('message', onMsg);
292
+ }
293
+ onWorkerCrash(handle, err) {
294
+ const job = handle.inflight;
295
+ handle.inflight = null;
296
+ if (job) {
297
+ const prior = this.attempts.get(job.seq) ?? 0;
298
+ const attempts = prior + 1;
299
+ this.attempts.set(job.seq, attempts);
300
+ if (attempts >= this.maxAttempts) {
301
+ // Give up on this seq — synthesize a parse-error so the dispatch can drain.
302
+ this.deliver(job.seq, {
303
+ kind: 'parse-error',
304
+ seq: job.seq,
305
+ hash: '',
306
+ lines: 0,
307
+ size: 0,
308
+ wasmResets: handle.wasmResets,
309
+ });
310
+ }
311
+ else {
312
+ // Retry on another worker.
313
+ this.pendingDispatch.push(job.seq);
314
+ }
315
+ }
316
+ if (!this.terminated && this.active) {
317
+ this.respawnWorker(handle);
318
+ }
319
+ else {
320
+ // Out-of-band crash — surface only if no active dispatch is going to swallow it.
321
+ if (this.active && !job)
322
+ this.active.reject(err);
323
+ }
324
+ }
325
+ onWorkerMessage(handle, msg) {
326
+ if (msg.kind === 'ready' || msg.kind === 'shutdown-ack')
327
+ return;
328
+ const seq = msg.seq;
329
+ // Worker becomes idle again right away.
330
+ if (handle.inflight && handle.inflight.seq === seq)
331
+ handle.inflight = null;
332
+ if (!this.idle.includes(handle))
333
+ this.idle.push(handle);
334
+ if ('wasmResets' in msg) {
335
+ const total = msg.wasmResets;
336
+ const delta = Math.max(0, total - handle.wasmResets);
337
+ handle.wasmResets = total;
338
+ this._wasmResets += delta;
339
+ }
340
+ this.deliver(seq, msg);
341
+ }
342
+ deliver(seq, result) {
343
+ if (!this.active)
344
+ return; // late message after shutdown
345
+ if (seq === this.headSeq) {
346
+ this.invokeCallback(seq, result);
347
+ this.headSeq++;
348
+ // Drain any contiguous buffered successors.
349
+ while (this.buffered.has(this.headSeq)) {
350
+ const next = this.buffered.get(this.headSeq);
351
+ this.buffered.delete(this.headSeq);
352
+ this.invokeCallback(this.headSeq, next);
353
+ this.headSeq++;
354
+ }
355
+ }
356
+ else {
357
+ this.buffered.set(seq, result);
358
+ }
359
+ this.pump();
360
+ }
361
+ invokeCallback(seq, result) {
362
+ if (!this.active)
363
+ return;
364
+ const a = this.active;
365
+ const item = this.items[seq];
366
+ this.callbackChain = this.callbackChain.then(() => Promise.resolve(a.onResult(seq, result, item)));
367
+ // If the callback rejects, surface it through the active dispatch.
368
+ this.callbackChain = this.callbackChain.catch(err => {
369
+ if (this.active)
370
+ this.active.reject(err);
371
+ });
372
+ }
373
+ }
374
+ exports.WorkerPool = WorkerPool;
375
+ // ── Helpers ──────────────────────────────────────────────────────────────────
376
+ function defaultJobCount() {
377
+ // availableParallelism is the most accurate counter on cgroup-limited
378
+ // containers; fall back to cpus().length on older Node where it's missing.
379
+ const fn = os_1.default.availableParallelism;
380
+ const cores = typeof fn === 'function' ? fn() : os_1.default.cpus().length;
381
+ return Math.min(8, Math.max(1, cores - 1));
382
+ }
383
+ //# sourceMappingURL=workerpool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerpool.js","sourceRoot":"","sources":["../../src/parser/workerpool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Track-F SCIP import.
3
+ *
4
+ * Seer accepts SCIP-format precision indexes (https://github.com/sourcegraph/scip)
5
+ * as an ADDITIVE precision uplift over the tree-sitter baseline. A SCIP index
6
+ * carries precise definitions and references produced by a real type-aware
7
+ * indexer (rust-analyzer, scip-typescript, scip-java, etc.). Importing one
8
+ * lets Seer overlay precise edges where tree-sitter's syntactic heuristics
9
+ * were guessing.
10
+ *
11
+ * The import is source-labelled (`provenance = 'scip'`) so consumers can
12
+ * always see which signals came from SCIP vs which were tree-sitter's best
13
+ * effort. Tree-sitter rows are never deleted by a SCIP import; when a SCIP
14
+ * symbol overlaps an existing tree-sitter row at the same file/line/kind, the
15
+ * tree-sitter row is re-labeled `'scip-merge'` (precision confirmed) and
16
+ * SCIP edges target its existing id.
17
+ *
18
+ * Format support:
19
+ * - .scip : binary protobuf (the canonical SCIP format)
20
+ * - .scip.json : Seer's JSON envelope mirroring the protobuf shape. Many
21
+ * SCIP producers can dump JSON directly; the schema is also
22
+ * easy to hand-author for testing and migration scripts.
23
+ *
24
+ * The JSON envelope is the SUBSET of SCIP that Seer actually consumes — we
25
+ * don't carry hover-doc payloads or signature_documentation because Seer
26
+ * doesn't surface them. Adding more fields later is purely additive: a
27
+ * consumer that doesn't recognize a field ignores it.
28
+ */
29
+ export type ScipSymbolKind = 'function' | 'method' | 'constructor' | 'class' | 'interface' | 'struct' | 'enum' | 'type' | 'variable';
30
+ export interface ScipSymbol {
31
+ /**
32
+ * Globally unique SCIP symbol id. Opaque string; the importer never parses
33
+ * it — it's just a primary key for cross-document references.
34
+ */
35
+ symbolId: string;
36
+ displayName: string;
37
+ /** Optional dotted qualified name (e.g. `auth.AuthService.login`). */
38
+ qualifiedName?: string;
39
+ kind: ScipSymbolKind;
40
+ /** Repo-relative file path. */
41
+ relativePath: string;
42
+ /** 0-indexed source range. */
43
+ range: {
44
+ startLine: number;
45
+ startCharacter: number;
46
+ endLine: number;
47
+ endCharacter: number;
48
+ };
49
+ signature?: string;
50
+ }
51
+ export interface ScipOccurrence {
52
+ /** SCIP symbol id being referenced. */
53
+ symbolId: string;
54
+ relativePath: string;
55
+ range: {
56
+ startLine: number;
57
+ startCharacter: number;
58
+ endLine: number;
59
+ endCharacter: number;
60
+ };
61
+ /**
62
+ * 'definition' for the canonical defining occurrence (one per symbol),
63
+ * 'reference' for every other use site.
64
+ */
65
+ role: 'definition' | 'reference';
66
+ }
67
+ export interface ScipDocument {
68
+ /**
69
+ * Repo-relative path the document covers. Symbol/occurrence rows can also
70
+ * carry their own relativePath, but the doc-level one is the default.
71
+ */
72
+ relativePath: string;
73
+ symbols: ScipSymbol[];
74
+ occurrences: ScipOccurrence[];
75
+ }
76
+ export interface ScipIndex {
77
+ /** Producer identifier — e.g. `scip-typescript 0.3.5`. */
78
+ tool?: string;
79
+ /** Absolute project root used by the producer (informational). */
80
+ projectRoot?: string;
81
+ /**
82
+ * Documents keyed by repo-relative path. The same shape SCIP uses, just
83
+ * flattened for ergonomic JSON authoring.
84
+ */
85
+ documents: ScipDocument[];
86
+ }
87
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/scip/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,MAAM,cAAc,GACtB,UAAU,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,GAC/C,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAE1D,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5F;;;OAGG;IACH,IAAI,EAAE,YAAY,GAAG,WAAW,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,WAAW,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * Track-F SCIP import.
4
+ *
5
+ * Seer accepts SCIP-format precision indexes (https://github.com/sourcegraph/scip)
6
+ * as an ADDITIVE precision uplift over the tree-sitter baseline. A SCIP index
7
+ * carries precise definitions and references produced by a real type-aware
8
+ * indexer (rust-analyzer, scip-typescript, scip-java, etc.). Importing one
9
+ * lets Seer overlay precise edges where tree-sitter's syntactic heuristics
10
+ * were guessing.
11
+ *
12
+ * The import is source-labelled (`provenance = 'scip'`) so consumers can
13
+ * always see which signals came from SCIP vs which were tree-sitter's best
14
+ * effort. Tree-sitter rows are never deleted by a SCIP import; when a SCIP
15
+ * symbol overlaps an existing tree-sitter row at the same file/line/kind, the
16
+ * tree-sitter row is re-labeled `'scip-merge'` (precision confirmed) and
17
+ * SCIP edges target its existing id.
18
+ *
19
+ * Format support:
20
+ * - .scip : binary protobuf (the canonical SCIP format)
21
+ * - .scip.json : Seer's JSON envelope mirroring the protobuf shape. Many
22
+ * SCIP producers can dump JSON directly; the schema is also
23
+ * easy to hand-author for testing and migration scripts.
24
+ *
25
+ * The JSON envelope is the SUBSET of SCIP that Seer actually consumes — we
26
+ * don't carry hover-doc payloads or signature_documentation because Seer
27
+ * doesn't surface them. Adding more fields later is purely additive: a
28
+ * consumer that doesn't recognize a field ignores it.
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/scip/format.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG"}
@@ -0,0 +1,37 @@
1
+ import { Store } from '../db/store.js';
2
+ export interface ScipImportOptions {
3
+ /** Workspace root — used to resolve SCIP relativePaths to absolute paths. */
4
+ repoRoot: string;
5
+ /** Logger; defaults to no-op. */
6
+ log?: (msg: string) => void;
7
+ /**
8
+ * Skip ALL inserts for files that aren't already indexed by tree-sitter.
9
+ * Default true: SCIP precision is meant to enhance the existing index, not
10
+ * to introduce phantom symbols for files Seer can't see (e.g. a SCIP that
11
+ * covers `vendor/` we deliberately skipped). Set false to widen.
12
+ */
13
+ requireFileInIndex?: boolean;
14
+ }
15
+ export interface ScipImportResult {
16
+ path: string;
17
+ sha256: string;
18
+ tool: string | null;
19
+ documentsProcessed: number;
20
+ symbolsInserted: number;
21
+ symbolsMerged: number;
22
+ edgesInserted: number;
23
+ filesMissing: number;
24
+ elapsedMs: number;
25
+ }
26
+ /**
27
+ * Import a SCIP index into the Store, layering precise SCIP symbols and
28
+ * references over the existing tree-sitter graph. Tree-sitter rows are never
29
+ * deleted; SCIP symbols with the same file/line/kind/qualified-name as an
30
+ * existing row reuse its id (and the existing row is re-labeled 'scip-merge').
31
+ *
32
+ * The import is idempotent on the (path, sha256) pair: re-importing the exact
33
+ * same file is a no-op. Re-importing the same path with new content clears
34
+ * the SCIP-sourced rows for that path first.
35
+ */
36
+ export declare function importScip(scipPath: string, store: Store, options: ScipImportOptions): Promise<ScipImportResult>;
37
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/scip/import.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAIvC,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,GACzD,OAAO,CAAC,gBAAgB,CAAC,CAwJ3B"}