@tenphi/akno-core 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 (485) hide show
  1. package/LICENSE +83 -0
  2. package/README.md +26 -0
  3. package/config/default.jsonc +548 -0
  4. package/dist/bench/answer-corpus.d.ts +48 -0
  5. package/dist/bench/answer-corpus.d.ts.map +1 -0
  6. package/dist/bench/answer-corpus.js +491 -0
  7. package/dist/bench/answer-corpus.js.map +1 -0
  8. package/dist/bench/answer.d.ts +156 -0
  9. package/dist/bench/answer.d.ts.map +1 -0
  10. package/dist/bench/answer.js +608 -0
  11. package/dist/bench/answer.js.map +1 -0
  12. package/dist/bench/auto-recall-answer-corpus.d.ts +21 -0
  13. package/dist/bench/auto-recall-answer-corpus.d.ts.map +1 -0
  14. package/dist/bench/auto-recall-answer-corpus.js +245 -0
  15. package/dist/bench/auto-recall-answer-corpus.js.map +1 -0
  16. package/dist/bench/auto-recall-answer.d.ts +198 -0
  17. package/dist/bench/auto-recall-answer.d.ts.map +1 -0
  18. package/dist/bench/auto-recall-answer.js +720 -0
  19. package/dist/bench/auto-recall-answer.js.map +1 -0
  20. package/dist/bench/auto-recall-corpus.d.ts +45 -0
  21. package/dist/bench/auto-recall-corpus.d.ts.map +1 -0
  22. package/dist/bench/auto-recall-corpus.js +221 -0
  23. package/dist/bench/auto-recall-corpus.js.map +1 -0
  24. package/dist/bench/auto-recall.d.ts +171 -0
  25. package/dist/bench/auto-recall.d.ts.map +1 -0
  26. package/dist/bench/auto-recall.js +651 -0
  27. package/dist/bench/auto-recall.js.map +1 -0
  28. package/dist/bench/entity-resolution.d.ts +37 -0
  29. package/dist/bench/entity-resolution.d.ts.map +1 -0
  30. package/dist/bench/entity-resolution.js +121 -0
  31. package/dist/bench/entity-resolution.js.map +1 -0
  32. package/dist/bench/graph.d.ts +57 -0
  33. package/dist/bench/graph.d.ts.map +1 -0
  34. package/dist/bench/graph.js +573 -0
  35. package/dist/bench/graph.js.map +1 -0
  36. package/dist/bench/llm-ranking-probe.d.ts +27 -0
  37. package/dist/bench/llm-ranking-probe.d.ts.map +1 -0
  38. package/dist/bench/llm-ranking-probe.js +105 -0
  39. package/dist/bench/llm-ranking-probe.js.map +1 -0
  40. package/dist/bench/merge-discovery-corpus.d.ts +26 -0
  41. package/dist/bench/merge-discovery-corpus.d.ts.map +1 -0
  42. package/dist/bench/merge-discovery-corpus.js +114 -0
  43. package/dist/bench/merge-discovery-corpus.js.map +1 -0
  44. package/dist/bench/merge-discovery-review.d.ts +81 -0
  45. package/dist/bench/merge-discovery-review.d.ts.map +1 -0
  46. package/dist/bench/merge-discovery-review.js +149 -0
  47. package/dist/bench/merge-discovery-review.js.map +1 -0
  48. package/dist/bench/merge-discovery.d.ts +122 -0
  49. package/dist/bench/merge-discovery.d.ts.map +1 -0
  50. package/dist/bench/merge-discovery.js +390 -0
  51. package/dist/bench/merge-discovery.js.map +1 -0
  52. package/dist/bench/mixed-retrieval.d.ts +35 -0
  53. package/dist/bench/mixed-retrieval.d.ts.map +1 -0
  54. package/dist/bench/mixed-retrieval.js +355 -0
  55. package/dist/bench/mixed-retrieval.js.map +1 -0
  56. package/dist/bench/ranking-corpus.d.ts +29 -0
  57. package/dist/bench/ranking-corpus.d.ts.map +1 -0
  58. package/dist/bench/ranking-corpus.js +514 -0
  59. package/dist/bench/ranking-corpus.js.map +1 -0
  60. package/dist/bench/ranking-end-to-end.d.ts +112 -0
  61. package/dist/bench/ranking-end-to-end.d.ts.map +1 -0
  62. package/dist/bench/ranking-end-to-end.js +479 -0
  63. package/dist/bench/ranking-end-to-end.js.map +1 -0
  64. package/dist/bench/ranking-latency.d.ts +71 -0
  65. package/dist/bench/ranking-latency.d.ts.map +1 -0
  66. package/dist/bench/ranking-latency.js +130 -0
  67. package/dist/bench/ranking-latency.js.map +1 -0
  68. package/dist/bench/ranking-matrix.d.ts +141 -0
  69. package/dist/bench/ranking-matrix.d.ts.map +1 -0
  70. package/dist/bench/ranking-matrix.js +526 -0
  71. package/dist/bench/ranking-matrix.js.map +1 -0
  72. package/dist/bench/ranking-review.d.ts +93 -0
  73. package/dist/bench/ranking-review.d.ts.map +1 -0
  74. package/dist/bench/ranking-review.js +249 -0
  75. package/dist/bench/ranking-review.js.map +1 -0
  76. package/dist/bench/ranking.d.ts +122 -0
  77. package/dist/bench/ranking.d.ts.map +1 -0
  78. package/dist/bench/ranking.js +547 -0
  79. package/dist/bench/ranking.js.map +1 -0
  80. package/dist/bench.d.ts +60 -0
  81. package/dist/bench.d.ts.map +1 -0
  82. package/dist/bench.js +167 -0
  83. package/dist/bench.js.map +1 -0
  84. package/dist/config/jsonc.d.ts +8 -0
  85. package/dist/config/jsonc.d.ts.map +1 -0
  86. package/dist/config/jsonc.js +85 -0
  87. package/dist/config/jsonc.js.map +1 -0
  88. package/dist/config/load.d.ts +43 -0
  89. package/dist/config/load.d.ts.map +1 -0
  90. package/dist/config/load.js +608 -0
  91. package/dist/config/load.js.map +1 -0
  92. package/dist/config/paths.d.ts +10 -0
  93. package/dist/config/paths.d.ts.map +1 -0
  94. package/dist/config/paths.js +38 -0
  95. package/dist/config/paths.js.map +1 -0
  96. package/dist/config/schema.d.ts +698 -0
  97. package/dist/config/schema.d.ts.map +1 -0
  98. package/dist/config/schema.js +394 -0
  99. package/dist/config/schema.js.map +1 -0
  100. package/dist/config/write-rules.d.ts +41 -0
  101. package/dist/config/write-rules.d.ts.map +1 -0
  102. package/dist/config/write-rules.js +225 -0
  103. package/dist/config/write-rules.js.map +1 -0
  104. package/dist/config/write-setup.d.ts +42 -0
  105. package/dist/config/write-setup.d.ts.map +1 -0
  106. package/dist/config/write-setup.js +358 -0
  107. package/dist/config/write-setup.js.map +1 -0
  108. package/dist/context.d.ts +64 -0
  109. package/dist/context.d.ts.map +1 -0
  110. package/dist/context.js +14 -0
  111. package/dist/context.js.map +1 -0
  112. package/dist/doctor.d.ts +115 -0
  113. package/dist/doctor.d.ts.map +1 -0
  114. package/dist/doctor.js +388 -0
  115. package/dist/doctor.js.map +1 -0
  116. package/dist/index/chunk.d.ts +62 -0
  117. package/dist/index/chunk.d.ts.map +1 -0
  118. package/dist/index/chunk.js +307 -0
  119. package/dist/index/chunk.js.map +1 -0
  120. package/dist/index/defer.d.ts +32 -0
  121. package/dist/index/defer.d.ts.map +1 -0
  122. package/dist/index/defer.js +66 -0
  123. package/dist/index/defer.js.map +1 -0
  124. package/dist/index/derive.d.ts +99 -0
  125. package/dist/index/derive.d.ts.map +1 -0
  126. package/dist/index/derive.js +378 -0
  127. package/dist/index/derive.js.map +1 -0
  128. package/dist/index/entity-resolution.d.ts +68 -0
  129. package/dist/index/entity-resolution.d.ts.map +1 -0
  130. package/dist/index/entity-resolution.js +305 -0
  131. package/dist/index/entity-resolution.js.map +1 -0
  132. package/dist/index/graph.d.ts +46 -0
  133. package/dist/index/graph.d.ts.map +1 -0
  134. package/dist/index/graph.js +618 -0
  135. package/dist/index/graph.js.map +1 -0
  136. package/dist/index/indexer.d.ts +301 -0
  137. package/dist/index/indexer.d.ts.map +1 -0
  138. package/dist/index/indexer.js +1398 -0
  139. package/dist/index/indexer.js.map +1 -0
  140. package/dist/index/revision-barrier.d.ts +30 -0
  141. package/dist/index/revision-barrier.d.ts.map +1 -0
  142. package/dist/index/revision-barrier.js +140 -0
  143. package/dist/index/revision-barrier.js.map +1 -0
  144. package/dist/index.d.ts +55 -0
  145. package/dist/index.d.ts.map +1 -0
  146. package/dist/index.js +37 -0
  147. package/dist/index.js.map +1 -0
  148. package/dist/ingest/adoption-eligibility.d.ts +4 -0
  149. package/dist/ingest/adoption-eligibility.d.ts.map +1 -0
  150. package/dist/ingest/adoption-eligibility.js +18 -0
  151. package/dist/ingest/adoption-eligibility.js.map +1 -0
  152. package/dist/ingest/availability.d.ts +15 -0
  153. package/dist/ingest/availability.d.ts.map +1 -0
  154. package/dist/ingest/availability.js +37 -0
  155. package/dist/ingest/availability.js.map +1 -0
  156. package/dist/ingest/extract.d.ts +58 -0
  157. package/dist/ingest/extract.d.ts.map +1 -0
  158. package/dist/ingest/extract.js +255 -0
  159. package/dist/ingest/extract.js.map +1 -0
  160. package/dist/ingest/fetch.d.ts +35 -0
  161. package/dist/ingest/fetch.d.ts.map +1 -0
  162. package/dist/ingest/fetch.js +142 -0
  163. package/dist/ingest/fetch.js.map +1 -0
  164. package/dist/ingest/inbox.d.ts +53 -0
  165. package/dist/ingest/inbox.d.ts.map +1 -0
  166. package/dist/ingest/inbox.js +110 -0
  167. package/dist/ingest/inbox.js.map +1 -0
  168. package/dist/ingest/name.d.ts +72 -0
  169. package/dist/ingest/name.d.ts.map +1 -0
  170. package/dist/ingest/name.js +208 -0
  171. package/dist/ingest/name.js.map +1 -0
  172. package/dist/ingest/parts.d.ts +78 -0
  173. package/dist/ingest/parts.d.ts.map +1 -0
  174. package/dist/ingest/parts.js +52 -0
  175. package/dist/ingest/parts.js.map +1 -0
  176. package/dist/ingest/rendition.d.ts +75 -0
  177. package/dist/ingest/rendition.d.ts.map +1 -0
  178. package/dist/ingest/rendition.js +92 -0
  179. package/dist/ingest/rendition.js.map +1 -0
  180. package/dist/ingest/store.d.ts +66 -0
  181. package/dist/ingest/store.d.ts.map +1 -0
  182. package/dist/ingest/store.js +92 -0
  183. package/dist/ingest/store.js.map +1 -0
  184. package/dist/kb/folders.d.ts +37 -0
  185. package/dist/kb/folders.d.ts.map +1 -0
  186. package/dist/kb/folders.js +133 -0
  187. package/dist/kb/folders.js.map +1 -0
  188. package/dist/kb/frontmatter.d.ts +91 -0
  189. package/dist/kb/frontmatter.d.ts.map +1 -0
  190. package/dist/kb/frontmatter.js +274 -0
  191. package/dist/kb/frontmatter.js.map +1 -0
  192. package/dist/kb/line-facts.d.ts +29 -0
  193. package/dist/kb/line-facts.d.ts.map +1 -0
  194. package/dist/kb/line-facts.js +23 -0
  195. package/dist/kb/line-facts.js.map +1 -0
  196. package/dist/kb/page.d.ts +92 -0
  197. package/dist/kb/page.d.ts.map +1 -0
  198. package/dist/kb/page.js +243 -0
  199. package/dist/kb/page.js.map +1 -0
  200. package/dist/kb/scan.d.ts +38 -0
  201. package/dist/kb/scan.d.ts.map +1 -0
  202. package/dist/kb/scan.js +109 -0
  203. package/dist/kb/scan.js.map +1 -0
  204. package/dist/kb/words.d.ts +30 -0
  205. package/dist/kb/words.d.ts.map +1 -0
  206. package/dist/kb/words.js +107 -0
  207. package/dist/kb/words.js.map +1 -0
  208. package/dist/maintenance/adopt.d.ts +65 -0
  209. package/dist/maintenance/adopt.d.ts.map +1 -0
  210. package/dist/maintenance/adopt.js +238 -0
  211. package/dist/maintenance/adopt.js.map +1 -0
  212. package/dist/maintenance/budget.d.ts +55 -0
  213. package/dist/maintenance/budget.d.ts.map +1 -0
  214. package/dist/maintenance/budget.js +61 -0
  215. package/dist/maintenance/budget.js.map +1 -0
  216. package/dist/maintenance/conflicts.d.ts +105 -0
  217. package/dist/maintenance/conflicts.d.ts.map +1 -0
  218. package/dist/maintenance/conflicts.js +368 -0
  219. package/dist/maintenance/conflicts.js.map +1 -0
  220. package/dist/maintenance/contradictions.d.ts +34 -0
  221. package/dist/maintenance/contradictions.d.ts.map +1 -0
  222. package/dist/maintenance/contradictions.js +199 -0
  223. package/dist/maintenance/contradictions.js.map +1 -0
  224. package/dist/maintenance/curate.d.ts +156 -0
  225. package/dist/maintenance/curate.d.ts.map +1 -0
  226. package/dist/maintenance/curate.js +2070 -0
  227. package/dist/maintenance/curate.js.map +1 -0
  228. package/dist/maintenance/dream.d.ts +139 -0
  229. package/dist/maintenance/dream.d.ts.map +1 -0
  230. package/dist/maintenance/dream.js +1632 -0
  231. package/dist/maintenance/dream.js.map +1 -0
  232. package/dist/maintenance/graph-candidates.d.ts +19 -0
  233. package/dist/maintenance/graph-candidates.d.ts.map +1 -0
  234. package/dist/maintenance/graph-candidates.js +120 -0
  235. package/dist/maintenance/graph-candidates.js.map +1 -0
  236. package/dist/maintenance/housekeeping.d.ts +81 -0
  237. package/dist/maintenance/housekeeping.d.ts.map +1 -0
  238. package/dist/maintenance/housekeeping.js +281 -0
  239. package/dist/maintenance/housekeeping.js.map +1 -0
  240. package/dist/maintenance/link-repairs.d.ts +58 -0
  241. package/dist/maintenance/link-repairs.d.ts.map +1 -0
  242. package/dist/maintenance/link-repairs.js +281 -0
  243. package/dist/maintenance/link-repairs.js.map +1 -0
  244. package/dist/maintenance/log.d.ts +41 -0
  245. package/dist/maintenance/log.d.ts.map +1 -0
  246. package/dist/maintenance/log.js +72 -0
  247. package/dist/maintenance/log.js.map +1 -0
  248. package/dist/maintenance/managed-item-routing.d.ts +48 -0
  249. package/dist/maintenance/managed-item-routing.d.ts.map +1 -0
  250. package/dist/maintenance/managed-item-routing.js +281 -0
  251. package/dist/maintenance/managed-item-routing.js.map +1 -0
  252. package/dist/maintenance/managed-item-sources.d.ts +38 -0
  253. package/dist/maintenance/managed-item-sources.d.ts.map +1 -0
  254. package/dist/maintenance/managed-item-sources.js +324 -0
  255. package/dist/maintenance/managed-item-sources.js.map +1 -0
  256. package/dist/maintenance/managed-items.d.ts +162 -0
  257. package/dist/maintenance/managed-items.d.ts.map +1 -0
  258. package/dist/maintenance/managed-items.js +1329 -0
  259. package/dist/maintenance/managed-items.js.map +1 -0
  260. package/dist/maintenance/merge-classifier.d.ts +19 -0
  261. package/dist/maintenance/merge-classifier.d.ts.map +1 -0
  262. package/dist/maintenance/merge-classifier.js +49 -0
  263. package/dist/maintenance/merge-classifier.js.map +1 -0
  264. package/dist/maintenance/model-telemetry.d.ts +45 -0
  265. package/dist/maintenance/model-telemetry.d.ts.map +1 -0
  266. package/dist/maintenance/model-telemetry.js +107 -0
  267. package/dist/maintenance/model-telemetry.js.map +1 -0
  268. package/dist/maintenance/observe.d.ts +72 -0
  269. package/dist/maintenance/observe.d.ts.map +1 -0
  270. package/dist/maintenance/observe.js +265 -0
  271. package/dist/maintenance/observe.js.map +1 -0
  272. package/dist/maintenance/path-policy.d.ts +83 -0
  273. package/dist/maintenance/path-policy.d.ts.map +1 -0
  274. package/dist/maintenance/path-policy.js +360 -0
  275. package/dist/maintenance/path-policy.js.map +1 -0
  276. package/dist/maintenance/plans.d.ts +366 -0
  277. package/dist/maintenance/plans.d.ts.map +1 -0
  278. package/dist/maintenance/plans.js +4060 -0
  279. package/dist/maintenance/plans.js.map +1 -0
  280. package/dist/maintenance/profile.d.ts +33 -0
  281. package/dist/maintenance/profile.d.ts.map +1 -0
  282. package/dist/maintenance/profile.js +99 -0
  283. package/dist/maintenance/profile.js.map +1 -0
  284. package/dist/maintenance/recovery.d.ts +38 -0
  285. package/dist/maintenance/recovery.d.ts.map +1 -0
  286. package/dist/maintenance/recovery.js +217 -0
  287. package/dist/maintenance/recovery.js.map +1 -0
  288. package/dist/maintenance/repair.d.ts +37 -0
  289. package/dist/maintenance/repair.d.ts.map +1 -0
  290. package/dist/maintenance/repair.js +183 -0
  291. package/dist/maintenance/repair.js.map +1 -0
  292. package/dist/maintenance/rule-drift.d.ts +104 -0
  293. package/dist/maintenance/rule-drift.d.ts.map +1 -0
  294. package/dist/maintenance/rule-drift.js +507 -0
  295. package/dist/maintenance/rule-drift.js.map +1 -0
  296. package/dist/maintenance/run-verification.d.ts +44 -0
  297. package/dist/maintenance/run-verification.d.ts.map +1 -0
  298. package/dist/maintenance/run-verification.js +253 -0
  299. package/dist/maintenance/run-verification.js.map +1 -0
  300. package/dist/maintenance/runs.d.ts +142 -0
  301. package/dist/maintenance/runs.d.ts.map +1 -0
  302. package/dist/maintenance/runs.js +439 -0
  303. package/dist/maintenance/runs.js.map +1 -0
  304. package/dist/maintenance/semantic-merge-discovery.d.ts +54 -0
  305. package/dist/maintenance/semantic-merge-discovery.d.ts.map +1 -0
  306. package/dist/maintenance/semantic-merge-discovery.js +308 -0
  307. package/dist/maintenance/semantic-merge-discovery.js.map +1 -0
  308. package/dist/maintenance/temporal.d.ts +44 -0
  309. package/dist/maintenance/temporal.d.ts.map +1 -0
  310. package/dist/maintenance/temporal.js +295 -0
  311. package/dist/maintenance/temporal.js.map +1 -0
  312. package/dist/models/client.d.ts +214 -0
  313. package/dist/models/client.d.ts.map +1 -0
  314. package/dist/models/client.js +904 -0
  315. package/dist/models/client.js.map +1 -0
  316. package/dist/models/provider-api.d.ts +28 -0
  317. package/dist/models/provider-api.d.ts.map +1 -0
  318. package/dist/models/provider-api.js +320 -0
  319. package/dist/models/provider-api.js.map +1 -0
  320. package/dist/open.d.ts +163 -0
  321. package/dist/open.d.ts.map +1 -0
  322. package/dist/open.js +382 -0
  323. package/dist/open.js.map +1 -0
  324. package/dist/ops/adopt.d.ts +12 -0
  325. package/dist/ops/adopt.d.ts.map +1 -0
  326. package/dist/ops/adopt.js +138 -0
  327. package/dist/ops/adopt.js.map +1 -0
  328. package/dist/ops/answer.d.ts +29 -0
  329. package/dist/ops/answer.d.ts.map +1 -0
  330. package/dist/ops/answer.js +557 -0
  331. package/dist/ops/answer.js.map +1 -0
  332. package/dist/ops/context.d.ts +18 -0
  333. package/dist/ops/context.d.ts.map +1 -0
  334. package/dist/ops/context.js +713 -0
  335. package/dist/ops/context.js.map +1 -0
  336. package/dist/ops/folder.d.ts +23 -0
  337. package/dist/ops/folder.d.ts.map +1 -0
  338. package/dist/ops/folder.js +130 -0
  339. package/dist/ops/folder.js.map +1 -0
  340. package/dist/ops/forget.d.ts +14 -0
  341. package/dist/ops/forget.d.ts.map +1 -0
  342. package/dist/ops/forget.js +212 -0
  343. package/dist/ops/forget.js.map +1 -0
  344. package/dist/ops/graph.d.ts +10 -0
  345. package/dist/ops/graph.d.ts.map +1 -0
  346. package/dist/ops/graph.js +480 -0
  347. package/dist/ops/graph.js.map +1 -0
  348. package/dist/ops/ingest.d.ts +40 -0
  349. package/dist/ops/ingest.d.ts.map +1 -0
  350. package/dist/ops/ingest.js +434 -0
  351. package/dist/ops/ingest.js.map +1 -0
  352. package/dist/ops/list.d.ts +9 -0
  353. package/dist/ops/list.d.ts.map +1 -0
  354. package/dist/ops/list.js +217 -0
  355. package/dist/ops/list.js.map +1 -0
  356. package/dist/ops/move.d.ts +20 -0
  357. package/dist/ops/move.d.ts.map +1 -0
  358. package/dist/ops/move.js +173 -0
  359. package/dist/ops/move.js.map +1 -0
  360. package/dist/ops/read.d.ts +9 -0
  361. package/dist/ops/read.d.ts.map +1 -0
  362. package/dist/ops/read.js +271 -0
  363. package/dist/ops/read.js.map +1 -0
  364. package/dist/ops/recall.d.ts +13 -0
  365. package/dist/ops/recall.d.ts.map +1 -0
  366. package/dist/ops/recall.js +297 -0
  367. package/dist/ops/recall.js.map +1 -0
  368. package/dist/ops/remember.d.ts +34 -0
  369. package/dist/ops/remember.d.ts.map +1 -0
  370. package/dist/ops/remember.js +660 -0
  371. package/dist/ops/remember.js.map +1 -0
  372. package/dist/ops/timeline.d.ts +11 -0
  373. package/dist/ops/timeline.d.ts.map +1 -0
  374. package/dist/ops/timeline.js +111 -0
  375. package/dist/ops/timeline.js.map +1 -0
  376. package/dist/ops/undo.d.ts +9 -0
  377. package/dist/ops/undo.d.ts.map +1 -0
  378. package/dist/ops/undo.js +38 -0
  379. package/dist/ops/undo.js.map +1 -0
  380. package/dist/ops/write.d.ts +55 -0
  381. package/dist/ops/write.d.ts.map +1 -0
  382. package/dist/ops/write.js +463 -0
  383. package/dist/ops/write.js.map +1 -0
  384. package/dist/recall/assemble.d.ts +81 -0
  385. package/dist/recall/assemble.d.ts.map +1 -0
  386. package/dist/recall/assemble.js +603 -0
  387. package/dist/recall/assemble.js.map +1 -0
  388. package/dist/recall/expand.d.ts +55 -0
  389. package/dist/recall/expand.d.ts.map +1 -0
  390. package/dist/recall/expand.js +282 -0
  391. package/dist/recall/expand.js.map +1 -0
  392. package/dist/recall/graph-arm.d.ts +17 -0
  393. package/dist/recall/graph-arm.d.ts.map +1 -0
  394. package/dist/recall/graph-arm.js +227 -0
  395. package/dist/recall/graph-arm.js.map +1 -0
  396. package/dist/recall/llm-rerank.d.ts +55 -0
  397. package/dist/recall/llm-rerank.d.ts.map +1 -0
  398. package/dist/recall/llm-rerank.js +213 -0
  399. package/dist/recall/llm-rerank.js.map +1 -0
  400. package/dist/recall/reranker-calibration.d.ts +23 -0
  401. package/dist/recall/reranker-calibration.d.ts.map +1 -0
  402. package/dist/recall/reranker-calibration.js +161 -0
  403. package/dist/recall/reranker-calibration.js.map +1 -0
  404. package/dist/recall/search.d.ts +107 -0
  405. package/dist/recall/search.d.ts.map +1 -0
  406. package/dist/recall/search.js +530 -0
  407. package/dist/recall/search.js.map +1 -0
  408. package/dist/reserved.d.ts +39 -0
  409. package/dist/reserved.d.ts.map +1 -0
  410. package/dist/reserved.js +63 -0
  411. package/dist/reserved.js.map +1 -0
  412. package/dist/rules/compile.d.ts +27 -0
  413. package/dist/rules/compile.d.ts.map +1 -0
  414. package/dist/rules/compile.js +105 -0
  415. package/dist/rules/compile.js.map +1 -0
  416. package/dist/setup/model-free.d.ts +15 -0
  417. package/dist/setup/model-free.d.ts.map +1 -0
  418. package/dist/setup/model-free.js +26 -0
  419. package/dist/setup/model-free.js.map +1 -0
  420. package/dist/setup/openai.d.ts +46 -0
  421. package/dist/setup/openai.d.ts.map +1 -0
  422. package/dist/setup/openai.js +165 -0
  423. package/dist/setup/openai.js.map +1 -0
  424. package/dist/store/db.d.ts +61 -0
  425. package/dist/store/db.d.ts.map +1 -0
  426. package/dist/store/db.js +265 -0
  427. package/dist/store/db.js.map +1 -0
  428. package/dist/store/ids.d.ts +29 -0
  429. package/dist/store/ids.d.ts.map +1 -0
  430. package/dist/store/ids.js +0 -0
  431. package/dist/store/ids.js.map +1 -0
  432. package/dist/store/migrations.d.ts +54 -0
  433. package/dist/store/migrations.d.ts.map +1 -0
  434. package/dist/store/migrations.js +923 -0
  435. package/dist/store/migrations.js.map +1 -0
  436. package/dist/store/vectors.d.ts +34 -0
  437. package/dist/store/vectors.d.ts.map +1 -0
  438. package/dist/store/vectors.js +158 -0
  439. package/dist/store/vectors.js.map +1 -0
  440. package/dist/timeline/documents.d.ts +23 -0
  441. package/dist/timeline/documents.d.ts.map +1 -0
  442. package/dist/timeline/documents.js +262 -0
  443. package/dist/timeline/documents.js.map +1 -0
  444. package/dist/watch/watcher.d.ts +43 -0
  445. package/dist/watch/watcher.d.ts.map +1 -0
  446. package/dist/watch/watcher.js +143 -0
  447. package/dist/watch/watcher.js.map +1 -0
  448. package/dist/write/atomic.d.ts +34 -0
  449. package/dist/write/atomic.d.ts.map +1 -0
  450. package/dist/write/atomic.js +58 -0
  451. package/dist/write/atomic.js.map +1 -0
  452. package/dist/write/conflict.d.ts +43 -0
  453. package/dist/write/conflict.d.ts.map +1 -0
  454. package/dist/write/conflict.js +149 -0
  455. package/dist/write/conflict.js.map +1 -0
  456. package/dist/write/edit.d.ts +59 -0
  457. package/dist/write/edit.d.ts.map +1 -0
  458. package/dist/write/edit.js +231 -0
  459. package/dist/write/edit.js.map +1 -0
  460. package/dist/write/gate.d.ts +59 -0
  461. package/dist/write/gate.d.ts.map +1 -0
  462. package/dist/write/gate.js +99 -0
  463. package/dist/write/gate.js.map +1 -0
  464. package/dist/write/journal.d.ts +90 -0
  465. package/dist/write/journal.d.ts.map +1 -0
  466. package/dist/write/journal.js +187 -0
  467. package/dist/write/journal.js.map +1 -0
  468. package/dist/write/ledger.d.ts +28 -0
  469. package/dist/write/ledger.d.ts.map +1 -0
  470. package/dist/write/ledger.js +141 -0
  471. package/dist/write/ledger.js.map +1 -0
  472. package/dist/write/placement.d.ts +29 -0
  473. package/dist/write/placement.d.ts.map +1 -0
  474. package/dist/write/placement.js +140 -0
  475. package/dist/write/placement.js.map +1 -0
  476. package/dist/write/remember-fallback.d.ts +18 -0
  477. package/dist/write/remember-fallback.d.ts.map +1 -0
  478. package/dist/write/remember-fallback.js +48 -0
  479. package/dist/write/remember-fallback.js.map +1 -0
  480. package/dist/write/retain.d.ts +61 -0
  481. package/dist/write/retain.d.ts.map +1 -0
  482. package/dist/write/retain.js +272 -0
  483. package/dist/write/retain.js.map +1 -0
  484. package/package.json +50 -0
  485. package/swift/extract.swift +232 -0
@@ -0,0 +1,603 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { annotateLines, LINE_FACT_COLUMNS } from "../kb/line-facts.js";
4
+ import { isObservation } from "../kb/page.js";
5
+ import { effectiveRule } from "../rules/compile.js";
6
+ import { documentAvailability } from "../ingest/availability.js";
7
+ import { canSuggestDocumentAdoption } from "../ingest/adoption-eligibility.js";
8
+ /**
9
+ * Recall returns page or document cards — never chunks. A chunk boundary is an
10
+ * indexing artifact and means nothing to a reader.
11
+ */
12
+ export class Assembler {
13
+ #config;
14
+ #store;
15
+ constructor(config, store) {
16
+ this.#config = config;
17
+ this.#store = store;
18
+ }
19
+ assemble(options) {
20
+ // Group by page, keeping each page's best-scoring chunk as its representative.
21
+ const byPage = new Map();
22
+ const byDocument = new Map();
23
+ for (const hit of options.hits) {
24
+ const group = hit.pageId ? byPage : hit.documentId ? byDocument : null;
25
+ const id = hit.pageId ?? hit.documentId;
26
+ if (!group || !id)
27
+ continue;
28
+ const entry = group.get(id);
29
+ if (entry) {
30
+ entry.hits.push(hit);
31
+ entry.score = Math.max(entry.score, hit.score);
32
+ if (hit.relevance !== undefined)
33
+ entry.relevance = Math.max(entry.relevance ?? 0, hit.relevance);
34
+ }
35
+ else {
36
+ group.set(id, {
37
+ score: hit.score,
38
+ hits: [hit],
39
+ ...(hit.relevance !== undefined ? { relevance: hit.relevance } : {}),
40
+ });
41
+ }
42
+ }
43
+ const rankedPages = [...byPage.entries()]
44
+ .map(([pageId, entry]) => ({ pageId, ...entry }))
45
+ .map((entry) => {
46
+ const page = this.pageRow(entry.pageId);
47
+ return page
48
+ ? {
49
+ kind: 'page',
50
+ ranked: entry.score * this.rankFactor(page),
51
+ result: this.pageResult(page, entry.hits, entry.score * this.rankFactor(page), entry.relevance, options),
52
+ }
53
+ : null;
54
+ })
55
+ .filter((entry) => entry !== null)
56
+ .filter((entry) => !options.include || options.include.includes(entry.result.role));
57
+ // Orphan parts are grouped again by their durable group key. The search identity remains
58
+ // the matching document id; assembly is where scanner-split files become one reader object.
59
+ const orphanGroups = new Map();
60
+ for (const [documentId, entry] of byDocument) {
61
+ const row = this.documentRow(documentId);
62
+ if (!row || row.page_id !== null)
63
+ continue;
64
+ const key = row.group_key ?? row.rel_path;
65
+ const group = orphanGroups.get(key);
66
+ if (group) {
67
+ group.hits.push(...entry.hits);
68
+ group.score = Math.max(group.score, entry.score);
69
+ if (entry.relevance !== undefined)
70
+ group.relevance = Math.max(group.relevance ?? 0, entry.relevance);
71
+ }
72
+ else {
73
+ orphanGroups.set(key, { ...entry, hits: [...entry.hits] });
74
+ }
75
+ }
76
+ const rankedDocuments = options.include
77
+ ? []
78
+ : [...orphanGroups.entries()].map(([groupKey, entry]) => {
79
+ const ranked = entry.score * this.#config.recall.rank.source;
80
+ return {
81
+ kind: 'document',
82
+ ranked,
83
+ result: this.buildDocumentCard(groupKey, entry.hits, ranked, entry.relevance, options),
84
+ };
85
+ });
86
+ const ranked = mixedOrder([...rankedPages, ...rankedDocuments].sort((a, b) => b.ranked - a.ranked), options.limit);
87
+ // One budget, one assembly — whole cards first. A half-card whose lines
88
+ // were trimmed to fit is exactly the "disconnected fragment" the layer exists
89
+ // to stop producing.
90
+ const results = [];
91
+ let budgetUsed = 0;
92
+ let dropped = 0;
93
+ for (const entry of ranked) {
94
+ if (results.length >= options.limit) {
95
+ dropped++;
96
+ continue;
97
+ }
98
+ const cost = estimateTokens(entry.result);
99
+ if (budgetUsed + cost > options.budget && results.length > 0) {
100
+ dropped++;
101
+ continue;
102
+ }
103
+ results.push(entry.result);
104
+ budgetUsed += cost;
105
+ }
106
+ const cards = results.filter((result) => result.type === 'page').map(({ type: _type, ...card }) => card);
107
+ return {
108
+ results,
109
+ cards,
110
+ budgetUsed,
111
+ coverage: options.mode === 'question' ? computeCoverage(options.concepts, results) : null,
112
+ droppedCards: dropped,
113
+ };
114
+ }
115
+ pageResult(page, hits, score, relevance, options) {
116
+ const card = this.buildCard(page, hits, score, options);
117
+ if (relevance !== undefined)
118
+ card.relevance = round(relevance);
119
+ return { type: 'page', ...card };
120
+ }
121
+ /**
122
+ * Ranking policy lives in the layer: knowledge pages outrank source pages,
123
+ * which outrank derived inferences. A folder rule can set `rank` to
124
+ * adjust it. Role applies at **assembly**, not at search — source pages
125
+ * compete for relevance on equal terms, then come back capped.
126
+ */
127
+ rankFactor(page) {
128
+ const rule = effectiveRule(page.slug, this.#config.rules);
129
+ if (typeof rule.rank === 'number')
130
+ return rule.rank;
131
+ if (isObservation(page.slug, this.#config.paths.observations) || page.role === 'inference') {
132
+ return this.#config.recall.rank.inference;
133
+ }
134
+ return page.role === 'source' ? this.#config.recall.rank.source : this.#config.recall.rank.knowledge;
135
+ }
136
+ pageRow(pageId) {
137
+ const row = this.#store.db
138
+ .prepare(`SELECT id, slug, rel_path, title, type, tags, role, summary, keywords, body_line, updated_at
139
+ FROM pages WHERE id = ?`)
140
+ .get(pageId);
141
+ return row ?? null;
142
+ }
143
+ documentRow(documentId) {
144
+ const row = this.#store.db
145
+ .prepare(`SELECT id, page_id, rel_path, mime, label, page_count, group_key, part, summary,
146
+ extract_via, confidence, ocr, text, availability, missing_since
147
+ FROM documents WHERE id = ?`)
148
+ .get(documentId);
149
+ return row ?? null;
150
+ }
151
+ buildDocumentCard(groupKey, hits, score, relevance, options) {
152
+ const rows = this.#store.db
153
+ .prepare(`SELECT id, page_id, rel_path, mime, label, page_count, group_key, part, summary,
154
+ extract_via, confidence, ocr, text, availability, missing_since
155
+ FROM documents
156
+ WHERE group_key = ? AND renders IS NULL AND page_id IS NULL
157
+ ORDER BY part`)
158
+ .all(groupKey);
159
+ const first = rows[0];
160
+ const bestHit = [...hits].sort((a, b) => b.score - a.score)[0];
161
+ const bestPart = rows.find((row) => row.id === bestHit.documentId) ?? first;
162
+ const meta = this.chunkMeta([bestHit.chunkId]).get(bestHit.chunkId);
163
+ const via = extractionVia(bestPart);
164
+ const availability = documentAvailability(this.#store.db, rows);
165
+ return {
166
+ type: 'document',
167
+ id: first.id,
168
+ path: first.rel_path,
169
+ label: first.label ?? path.basename(first.rel_path),
170
+ mime: first.mime,
171
+ ...(bestPart.summary ? { summary: bestPart.summary } : {}),
172
+ ...(options.depth !== 'summary' && meta
173
+ ? { quote: quoteWindow(meta.text, this.#config.recall.sourceQuoteLines) }
174
+ : {}),
175
+ ...(meta?.doc_page !== null && meta?.doc_page !== undefined ? { matched_page: meta.doc_page } : {}),
176
+ ...(rows.length > 1
177
+ ? {
178
+ parts: rows.map((row) => ({
179
+ id: row.id,
180
+ path: row.rel_path,
181
+ pages: row.page_count,
182
+ })),
183
+ }
184
+ : {}),
185
+ source: {
186
+ kind: via === 'vision'
187
+ ? 'model_description'
188
+ : via === 'ocr'
189
+ ? 'ocr_text'
190
+ : via === 'none'
191
+ ? 'none'
192
+ : 'original_text',
193
+ via,
194
+ confidence: bestPart.confidence,
195
+ },
196
+ availability,
197
+ ownership: { status: 'orphan' },
198
+ ...(availability.status === 'available' && canSuggestDocumentAdoption(this.#config, first.rel_path)
199
+ ? { suggested_actions: [{ op: 'adopt', args: { documentId: first.id } }] }
200
+ : {}),
201
+ score: round(score),
202
+ ...(relevance !== undefined ? { relevance: round(relevance) } : {}),
203
+ matched_by: matchedBy(hits),
204
+ ...graphPathFields(hits),
205
+ };
206
+ }
207
+ buildCard(page, hits, score, options) {
208
+ const meta = this.chunkMeta(hits.map((hit) => hit.chunkId));
209
+ // A hit inside an attachment is not a line of the Markdown page. Keeping the two apart
210
+ // is what stops `readLines` from citing line 14 of a page because page 14 of a PDF
211
+ // matched. Cite or stay quiet: a citation pointing at the wrong line is worse
212
+ // than no citation.
213
+ const bodyHits = hits.filter((hit) => !meta.get(hit.chunkId)?.document_id);
214
+ const documentHits = hits.filter((hit) => meta.get(hit.chunkId)?.document_id);
215
+ const chunk = meta.get((bodyHits[0] ?? hits[0]).chunkId);
216
+ const isSource = page.role === 'source' || chunk?.kind === 'source';
217
+ const wantsFullSource = options.depth === 'full' && options.include?.includes('source');
218
+ // Ten matching emails cost ten summaries, not ten threads.
219
+ const maxLines = options.depth === 'summary'
220
+ ? 0
221
+ : isSource && !wantsFullSource
222
+ ? this.#config.recall.sourceQuoteLines
223
+ : options.depth === 'full'
224
+ ? Number.POSITIVE_INFINITY
225
+ : options.lineWindow;
226
+ const lines = maxLines === 0 || bodyHits.length === 0 ? [] : this.readLines(page, bodyHits, maxLines, options.depth);
227
+ const facts = this.factsFor(page.id);
228
+ const card = {
229
+ slug: page.slug,
230
+ title: page.title,
231
+ role: page.role,
232
+ summary: page.summary,
233
+ score: round(score),
234
+ lines: annotateLines(lines, facts),
235
+ matched_by: matchedBy(hits),
236
+ ...graphPathFields(hits),
237
+ };
238
+ if (chunk?.heading_path)
239
+ card.breadcrumb = chunk.heading_path;
240
+ if (page.updated_at)
241
+ card.updated = page.updated_at.slice(0, 10);
242
+ const superseded = supersededFor(facts);
243
+ if (superseded.length > 0)
244
+ card.superseded = superseded;
245
+ const links = this.linksFor(page.id);
246
+ if (links.length > 0)
247
+ card.links = links;
248
+ const documents = this.documentsFor(page.id, documentHits, meta, options);
249
+ if (documents.length > 0)
250
+ card.documents = documents;
251
+ if (isSource && !wantsFullSource && lines.length >= maxLines)
252
+ card.truncated = true;
253
+ return card;
254
+ }
255
+ /**
256
+ * Reads the matching lines from the file rather than from the chunk text, so a
257
+ * line's number is the number it actually has on disk. A citation that points
258
+ * at the wrong line is worse than no citation: cite or stay quiet.
259
+ */
260
+ readLines(page, hits, maxLines, depth) {
261
+ let content;
262
+ try {
263
+ content = fs.readFileSync(path.join(this.#config.aknoPath, page.rel_path), 'utf8');
264
+ }
265
+ catch {
266
+ return [];
267
+ }
268
+ const allLines = content.split('\n');
269
+ if (depth === 'full' && maxLines === Number.POSITIVE_INFINITY) {
270
+ return allLines
271
+ .map((text, index) => ({ n: index + 1, text }))
272
+ .filter((line) => line.text.trim().length > 0);
273
+ }
274
+ // Collect the line ranges of the matching chunks, best first.
275
+ const ranges = [];
276
+ for (const hit of hits.slice(0, 4)) {
277
+ const row = this.#store.db
278
+ .prepare('SELECT line_start, line_end FROM chunks WHERE id = ?')
279
+ .get(hit.chunkId);
280
+ if (row)
281
+ ranges.push({ start: row.line_start, end: row.line_end });
282
+ }
283
+ const out = [];
284
+ const seen = new Set();
285
+ for (const range of ranges) {
286
+ for (let n = range.start; n <= range.end && out.length < maxLines; n++) {
287
+ if (seen.has(n))
288
+ continue;
289
+ const text = allLines[n - 1];
290
+ if (text === undefined)
291
+ continue;
292
+ const trimmed = text.trim();
293
+ // Blank lines, bare headings, markers and image embeds cost budget and carry
294
+ // nothing a reader can cite; the breadcrumb already says where they are.
295
+ if (trimmed.length === 0)
296
+ continue;
297
+ if (/^#{1,6}\s/.test(trimmed) || /^<!--/.test(trimmed))
298
+ continue;
299
+ if (/^!\[\[[^\]]+\]\]$/.test(trimmed) || /^!\[[^\]]*\]\([^)]+\)$/.test(trimmed))
300
+ continue;
301
+ seen.add(n);
302
+ out.push({ n, text });
303
+ }
304
+ if (out.length >= maxLines)
305
+ break;
306
+ }
307
+ return out;
308
+ }
309
+ factsFor(pageId) {
310
+ return this.#store.db
311
+ .prepare(`SELECT ${LINE_FACT_COLUMNS} FROM facts WHERE page_id = ?
312
+ AND EXISTS (
313
+ SELECT 1 FROM pages current_page
314
+ WHERE current_page.id = facts.page_id
315
+ AND current_page.derived_hash = current_page.body_hash
316
+ )`)
317
+ .all(pageId);
318
+ }
319
+ linksFor(pageId) {
320
+ const rows = this.#store.db
321
+ .prepare("SELECT DISTINCT to_slug FROM links WHERE from_page = ? AND broken = 0 AND kind != 'embed' LIMIT 12")
322
+ .all(pageId);
323
+ return rows.map((row) => row.to_slug);
324
+ }
325
+ /**
326
+ * The page's attachments, with the matching text quoted from any that matched.
327
+ *
328
+ * The card points at the page, the document, **and the page number within it**. That
329
+ * is the whole reason document text is chunked per page — a quote from page 9 of a
330
+ * contract attributed to nothing is a citation a reader cannot check.
331
+ *
332
+ * A document that matched is always included, even past the display cap: dropping the one
333
+ * that produced the hit would leave a card quoting evidence it does not list.
334
+ */
335
+ documentsFor(pageId, documentHits, meta, options) {
336
+ // Best hit per document, in rank order — `documentHits` arrives best first. Keeping the
337
+ // order matters once a document has parts: when two pages of one contract both match,
338
+ // the card must quote the stronger one, not whichever file happens to be part one.
339
+ const matched = new Map();
340
+ const rank = [];
341
+ for (const hit of documentHits) {
342
+ const row = meta.get(hit.chunkId);
343
+ if (!row?.document_id || matched.has(row.document_id))
344
+ continue;
345
+ matched.set(row.document_id, row);
346
+ rank.push(row.document_id);
347
+ }
348
+ const rows = this.#store.db
349
+ .prepare(`SELECT id, rel_path, mime, label, page_count, group_key, part, summary,
350
+ text, availability, missing_since
351
+ FROM documents
352
+ WHERE page_id = ? AND renders IS NULL ORDER BY group_key, part`)
353
+ .all(pageId);
354
+ for (const [id] of matched) {
355
+ if (rows.some((row) => row.id === id))
356
+ continue;
357
+ // A document that matched is always included, even when it hangs off another page:
358
+ // a card quoting evidence it does not list is a card a reader cannot follow.
359
+ const row = this.#store.db
360
+ .prepare(`SELECT id, rel_path, mime, label, page_count, group_key, part, summary,
361
+ text, availability, missing_since
362
+ FROM documents WHERE id = ?`)
363
+ .get(id);
364
+ if (row)
365
+ rows.unshift(row);
366
+ }
367
+ // Parts of one document are one document. Collapsed onto part one, with the pages
368
+ // summed, so a card says "the passport, 14 pages" rather than listing three files whose
369
+ // page numbers each restart at 1.
370
+ const groups = new Map();
371
+ for (const row of rows) {
372
+ const key = row.group_key ?? row.rel_path;
373
+ const existing = groups.get(key);
374
+ if (existing)
375
+ existing.push(row);
376
+ else
377
+ groups.set(key, [row]);
378
+ }
379
+ const out = [];
380
+ for (const parts of groups.values()) {
381
+ const ordered = [...parts].sort((a, b) => a.part - b.part);
382
+ const first = ordered[0];
383
+ // The group's best-ranked matching part, not its first part.
384
+ const bestId = rank.find((id) => ordered.some((part) => part.id === id));
385
+ const hit = bestId === undefined ? undefined : matched.get(bestId);
386
+ const pages = ordered.reduce((sum, part) => (part.page_count === null ? sum : (sum ?? 0) + part.page_count), null);
387
+ const availability = documentAvailability(this.#store.db, ordered);
388
+ out.push({
389
+ id: first.id,
390
+ rel_path: first.rel_path,
391
+ ...(first.mime ? { mime: first.mime } : {}),
392
+ ...(first.label ? { label: first.label } : {}),
393
+ ...(pages !== null ? { pages } : {}),
394
+ ...(ordered.length > 1 ? { parts: ordered.length } : {}),
395
+ // Only for the document that matched: a summary per attachment on every card would
396
+ // spend the budget describing files nobody asked about.
397
+ ...(hit && first.summary ? { summary: first.summary } : {}),
398
+ // Already group-relative: the indexer stores each part's page numbers with the
399
+ // pages before it added on.
400
+ ...(hit?.doc_page !== null && hit?.doc_page !== undefined ? { matched_page: hit.doc_page } : {}),
401
+ // Not quoted at `depth: "summary"`, which asks for cards without evidence windows.
402
+ ...(hit && options.depth !== 'summary'
403
+ ? { quote: quoteWindow(hit.text, this.#config.recall.sourceQuoteLines) }
404
+ : {}),
405
+ availability,
406
+ });
407
+ }
408
+ return out;
409
+ }
410
+ /** One query for every hit chunk's metadata, rather than one per hit inside two loops. */
411
+ chunkMeta(chunkIds) {
412
+ if (chunkIds.length === 0)
413
+ return new Map();
414
+ const rows = this.#store.db
415
+ .prepare(`SELECT id, heading_path, line_start, line_end, kind, document_id, doc_page, text
416
+ FROM chunks WHERE id IN (${chunkIds.map(() => '?').join(',')})`)
417
+ .all(...chunkIds);
418
+ return new Map(rows.map((row) => [row.id, row]));
419
+ }
420
+ }
421
+ /**
422
+ * Facts are never returned to the agent on their own. They arrive attached to
423
+ * the page card they belong to, so a claim is always seen in its context — here,
424
+ * as the confidence on the line the fact was derived from.
425
+ */
426
+ function supersededFor(facts) {
427
+ return facts
428
+ .filter((fact) => fact.valid_to !== null)
429
+ .slice(0, 6)
430
+ .map((fact) => ({ claim: fact.claim, valid_to: fact.valid_to }));
431
+ }
432
+ /**
433
+ * Deterministic — did the key terms of the expanded query actually appear in
434
+ * what was returned — **not** a model judging whether the answer is there. Cheap,
435
+ * honest, and it closes the most common hallucination path there is: a page ranks
436
+ * first because it matches half the question, the agent reads it, and confidently
437
+ * invents the other half.
438
+ */
439
+ export function computeCoverage(concepts, results) {
440
+ const haystack = results
441
+ .map((result) => {
442
+ if ('type' in result && result.type === 'document') {
443
+ return [result.label, result.path, result.summary ?? '', result.quote ?? ''].join(' ');
444
+ }
445
+ return [
446
+ result.title,
447
+ result.summary ?? '',
448
+ result.breadcrumb ?? '',
449
+ ...result.lines.map((line) => line.text),
450
+ ].join(' ');
451
+ })
452
+ .join(' ')
453
+ .toLowerCase();
454
+ const coverage = {};
455
+ for (const concept of concepts) {
456
+ const terms = concept
457
+ .toLowerCase()
458
+ .split(/\s+/)
459
+ .filter((term) => term.length > 2);
460
+ if (terms.length === 0)
461
+ continue;
462
+ // Every content word of the concept must appear somewhere in what came back.
463
+ // Partial credit would defeat the purpose: "found the policy but not the
464
+ // renewal date" is the answer that matters.
465
+ coverage[concept] = terms.every((term) => coverageTermPresent(haystack, term));
466
+ }
467
+ return coverage;
468
+ }
469
+ function coverageTermPresent(haystack, term) {
470
+ const root = stem(term);
471
+ if (haystack.includes(root))
472
+ return true;
473
+ // A yes/no inclusion question is answered just as completely by an explicit exclusion. Coverage
474
+ // measures whether the relationship was addressed, not whether its polarity was affirmative.
475
+ if (root.startsWith('includ'))
476
+ return haystack.includes('exclud');
477
+ if (root.startsWith('exclud'))
478
+ return haystack.includes('includ');
479
+ return false;
480
+ }
481
+ /** Just enough stemming to survive plurals. A real stemmer is FTS5's job. */
482
+ function stem(term) {
483
+ if (term.length > 4 && term.endsWith('ies'))
484
+ return term.slice(0, -3);
485
+ if (term.length > 3 && term.endsWith('es'))
486
+ return term.slice(0, -2);
487
+ if (term.length > 3 && term.endsWith('s') && !term.endsWith('ss'))
488
+ return term.slice(0, -1);
489
+ return term;
490
+ }
491
+ /**
492
+ * Four characters per token. Crude, but the budget's job is to stop an overrun,
493
+ * and a tokenizer per model would make the number precise about the wrong thing —
494
+ * the caller's budget is a ceiling, not an accounting target.
495
+ */
496
+ export function estimateTokens(card) {
497
+ if ('type' in card && card.type === 'document') {
498
+ const text = [
499
+ card.path,
500
+ card.label,
501
+ card.summary ?? '',
502
+ card.quote ?? '',
503
+ ...(card.parts ?? []).map((part) => part.path),
504
+ ...graphPathTokens(card.graph_paths),
505
+ ].join(' ');
506
+ return Math.ceil(text.length / 4) + 24;
507
+ }
508
+ const text = [
509
+ card.slug,
510
+ card.title,
511
+ card.summary ?? '',
512
+ card.breadcrumb ?? '',
513
+ ...card.lines.map((line) => line.text),
514
+ ...(card.superseded ?? []).map((entry) => entry.claim),
515
+ ...(card.links ?? []),
516
+ ...graphPathTokens(card.graph_paths),
517
+ ].join(' ');
518
+ // +24 for the card's own structural overhead: keys, scores, line numbers.
519
+ return Math.ceil(text.length / 4) + 24;
520
+ }
521
+ function graphPathTokens(paths) {
522
+ return (paths ?? []).flatMap((graphPath) => [
523
+ ...graphPath.nodes.map((node) => node.slug ?? node.label ?? node.document ?? node.id),
524
+ graphPath.relations.join(' '),
525
+ ...graphPath.evidence.map((locator) => [locator.slug, locator.document, locator.event, locator.fact, locator.line_start, locator.field]
526
+ .filter((value) => value !== undefined)
527
+ .join(' ')),
528
+ ]);
529
+ }
530
+ function round(value) {
531
+ return Math.round(value * 10000) / 10000;
532
+ }
533
+ function matchedBy(hits) {
534
+ const order = ['lexical', 'vector', 'graph'];
535
+ const found = new Set(hits.flatMap((hit) => hit.from));
536
+ return order.filter((arm) => found.has(arm));
537
+ }
538
+ function graphPathFields(hits) {
539
+ const paths = new Map();
540
+ for (const graphPath of hits.flatMap((hit) => hit.graphPaths ?? [])) {
541
+ const key = `${graphPath.nodes.map((node) => node.id).join('\0')}\0${graphPath.relations.join('\0')}\0${graphPath.evidence
542
+ .map((locator) => [
543
+ locator.kind,
544
+ locator.slug,
545
+ locator.document,
546
+ locator.event,
547
+ locator.fact,
548
+ locator.line_start,
549
+ locator.field,
550
+ ]
551
+ .filter((value) => value !== undefined)
552
+ .join('\0'))
553
+ .join('\0')}`;
554
+ paths.set(key, graphPath);
555
+ }
556
+ return paths.size > 0 ? { graph_paths: [...paths.values()].slice(0, 3) } : {};
557
+ }
558
+ function extractionVia(row) {
559
+ if (row.extract_via === 'plain' ||
560
+ row.extract_via === 'textutil' ||
561
+ row.extract_via === 'text-layer' ||
562
+ row.extract_via === 'ocr' ||
563
+ row.extract_via === 'vision' ||
564
+ row.extract_via === 'none') {
565
+ return row.extract_via;
566
+ }
567
+ return row.ocr === 1 ? 'ocr' : row.text === null ? 'none' : 'plain';
568
+ }
569
+ /**
570
+ * A mixed result should not turn into "all pages" merely because a document ranked one place
571
+ * below the limit (or vice versa). Absolute candidates must clear the calibrated 0.5 boundary;
572
+ * a lexical-only match has no absolute scale, so matching FTS is its relevance floor.
573
+ */
574
+ function mixedOrder(ranked, limit) {
575
+ if (limit < 2)
576
+ return ranked;
577
+ const eligible = ranked.filter((entry) => entry.result.relevance === undefined || entry.result.relevance >= 0.5);
578
+ const firstPage = eligible.find((entry) => entry.kind === 'page');
579
+ const firstDocument = eligible.find((entry) => entry.kind === 'document');
580
+ if (!firstPage || !firstDocument)
581
+ return ranked;
582
+ const head = ranked.slice(0, limit);
583
+ if (head.some((entry) => entry.kind === 'page') && head.some((entry) => entry.kind === 'document')) {
584
+ return ranked;
585
+ }
586
+ const missing = head[0]?.kind === 'page' ? firstDocument : firstPage;
587
+ const kept = head.slice(0, limit - 1);
588
+ return [...kept, missing, ...ranked.filter((entry) => !kept.includes(entry) && entry !== missing)];
589
+ }
590
+ /**
591
+ * A source region comes back as **a capped quote window**, and a document is
592
+ * source by nature. Capped in lines rather than characters so the same knob that
593
+ * governs a fenced region governs this, and so a quote never ends mid-word.
594
+ */
595
+ function quoteWindow(text, maxLines) {
596
+ const lines = text
597
+ .split('\n')
598
+ .map((line) => line.trim())
599
+ .filter((line) => line.length > 0);
600
+ const kept = lines.slice(0, Math.max(1, maxLines));
601
+ return kept.join('\n') + (lines.length > kept.length ? '\n…' : '');
602
+ }
603
+ //# sourceMappingURL=assemble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../src/recall/assemble.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAiB,MAAM,qBAAqB,CAAC;AAetF,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAyC/E;;;GAGG;AACH,MAAM,OAAO,SAAS;IACX,OAAO,CAAa;IACpB,MAAM,CAAQ;IAEvB,YAAY,MAAkB,EAAE,KAAY;QAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,QAAQ,CAAC,OAAwB;QAC/B,+EAA+E;QAC/E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmE,CAAC;QAC1F,MAAM,UAAU,GAAG,IAAI,GAAG,EAAmE,CAAC;QAC9F,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YACvE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC;YACxC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;gBAAE,SAAS;YAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;oBAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YACnG,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE;oBACZ,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;aAChD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxC,OAAO,IAAI;gBACT,CAAC,CAAC;oBACE,IAAI,EAAE,MAAe;oBACrB,MAAM,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBAC3C,MAAM,EAAE,IAAI,CAAC,UAAU,CACrB,IAAI,EACJ,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EACnC,KAAK,CAAC,SAAS,EACf,OAAO,CACR;iBACF;gBACH,CAAC,CAAC,IAAI,CAAC;QACX,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,KAAK,EAAsC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;aACrE,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtF,yFAAyF;QACzF,4FAA4F;QAC5F,MAAM,YAAY,GAAG,IAAI,GAAG,EAAmE,CAAC;QAChG,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;gBAAE,SAAS;YAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC;YAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;oBAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YACvG,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO;YACrC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;gBACpD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC7D,OAAO;oBACL,IAAI,EAAE,UAAmB;oBACzB,MAAM;oBACN,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;iBACvF,CAAC;YACJ,CAAC,CAAC,CAAC;QAEP,MAAM,MAAM,GAAG,UAAU,CACvB,CAAC,GAAG,WAAW,EAAE,GAAG,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EACxE,OAAO,CAAC,KAAK,CACd,CAAC;QAEF,wEAAwE;QACxE,8EAA8E;QAC9E,qBAAqB;QACrB,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBACpC,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7D,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3B,UAAU,IAAI,IAAI,CAAC;QACrB,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAEzG,OAAO;YACL,OAAO;YACP,KAAK;YACL,UAAU;YACV,QAAQ,EAAE,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;YACzF,YAAY,EAAE,OAAO;SACtB,CAAC;IACJ,CAAC;IAEO,UAAU,CAChB,IAAa,EACb,IAAgB,EAChB,KAAa,EACb,SAA6B,EAC7B,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACK,UAAU,CAAC,IAAa;QAC9B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QACpD,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC3F,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IACvG,CAAC;IAEO,OAAO,CAAC,MAAc;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;aACvB,OAAO,CACN;mCAC2B,CAC5B;aACA,GAAG,CAAC,MAAM,CAAwB,CAAC;QACtC,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAEO,WAAW,CAAC,UAAkB;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;aACvB,OAAO,CACN;;uCAE+B,CAChC;aACA,GAAG,CAAC,UAAU,CAA4B,CAAC;QAC9C,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAEO,iBAAiB,CACvB,QAAgB,EAChB,IAAgB,EAChB,KAAa,EACb,SAA6B,EAC7B,OAAwB;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;aACxB,OAAO,CACN;;;;wBAIgB,CACjB;aACA,GAAG,CAAC,QAAQ,CAAkB,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACvB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAEhE,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,QAAQ;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;YACnD,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI;gBACrC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;gBACzE,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACjB,CAAC,CAAC;oBACE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBACxB,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,IAAI,EAAE,GAAG,CAAC,QAAQ;wBAClB,KAAK,EAAE,GAAG,CAAC,UAAU;qBACtB,CAAC,CAAC;iBACJ;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,EAAE;gBACN,IAAI,EACF,GAAG,KAAK,QAAQ;oBACd,CAAC,CAAC,mBAAmB;oBACrB,CAAC,CAAC,GAAG,KAAK,KAAK;wBACb,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,GAAG,KAAK,MAAM;4BACd,CAAC,CAAC,MAAM;4BACR,CAAC,CAAC,eAAe;gBACzB,GAAG;gBACH,UAAU,EAAE,QAAQ,CAAC,UAAU;aAChC;YACD,YAAY;YACZ,SAAS,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;YAC/B,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,WAAW,IAAI,0BAA0B,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;gBACjG,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,EAAE,EAAE,OAAgB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;gBACnF,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YACnB,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC;YAC3B,GAAG,eAAe,CAAC,IAAI,CAAC;SACzB,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,IAAa,EAAE,IAAgB,EAAE,KAAa,EAAE,OAAwB;QACxF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAE5D,uFAAuF;QACvF,mFAAmF;QACnF,8EAA8E;QAC9E,oBAAoB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;QAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;QAE9E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC;QACpE,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAExF,2DAA2D;QAC3D,MAAM,QAAQ,GACZ,OAAO,CAAC,KAAK,KAAK,SAAS;YACzB,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,QAAQ,IAAI,CAAC,eAAe;gBAC5B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB;gBACtC,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM;oBACxB,CAAC,CAAC,MAAM,CAAC,iBAAiB;oBAC1B,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAE7B,MAAM,KAAK,GACT,QAAQ,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACzG,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAErC,MAAM,IAAI,GAAS;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YACnB,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC;YAClC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC;YAC3B,GAAG,eAAe,CAAC,IAAI,CAAC;SACzB,CAAC;QAEF,IAAI,KAAK,EAAE,YAAY;YAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC;QAC9D,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEjE,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAExD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1E,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAErD,IAAI,QAAQ,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEpF,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACK,SAAS,CAAC,IAAa,EAAE,IAAgB,EAAE,QAAgB,EAAE,KAAY;QAC/E,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QACrF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,KAAK,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC9D,OAAO,QAAQ;iBACZ,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC9C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,8DAA8D;QAC9D,MAAM,MAAM,GAAqC,EAAE,CAAC;QACpD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;iBACvB,OAAO,CAAC,sDAAsD,CAAC;iBAC/D,GAAG,CAAC,GAAG,CAAC,OAAO,CAAyD,CAAC;YAC5E,IAAI,GAAG;gBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,GAAG,GAAW,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,SAAS;gBAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7B,IAAI,IAAI,KAAK,SAAS;oBAAE,SAAS;gBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,6EAA6E;gBAC7E,yEAAyE;gBACzE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBACnC,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACjE,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;oBAAE,SAAS;gBAC1F,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACZ,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACxB,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ;gBAAE,MAAM;QACpC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,QAAQ,CAAC,MAAc;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE;aAClB,OAAO,CACN,UAAU,iBAAiB;;;;;YAKvB,CACL;aACA,GAAG,CAAC,MAAM,CAAc,CAAC;IAC9B,CAAC;IAEO,QAAQ,CAAC,MAAc;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;aACxB,OAAO,CACN,oGAAoG,CACrG;aACA,GAAG,CAAC,MAAM,CAA0B,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;;;OASG;IACK,YAAY,CAClB,MAAc,EACd,YAAwB,EACxB,IAA4B,EAC5B,OAAwB;QAExB,wFAAwF;QACxF,sFAAsF;QACtF,mFAAmF;QACnF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC7C,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,EAAE,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC;gBAAE,SAAS;YAChE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;aACxB,OAAO,CACN;;;yEAGiE,CAClE;aACA,GAAG,CAAC,MAAM,CAAkB,CAAC;QAChC,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;gBAAE,SAAS;YAChD,mFAAmF;YACnF,6EAA6E;YAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;iBACvB,OAAO,CACN;;yCAE+B,CAChC;iBACA,GAAG,CAAC,EAAE,CAA4B,CAAC;YACtC,IAAI,GAAG;gBAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,kFAAkF;QAClF,wFAAwF;QACxF,kCAAkC;QAClC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;gBAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,GAAG,GAAmC,EAAE,CAAC;QAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YAC1B,6DAA6D;YAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACzE,MAAM,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,EAC9E,IAAI,CACL,CAAC;YACF,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAEnE,GAAG,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9C,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,mFAAmF;gBACnF,wDAAwD;gBACxD,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,+EAA+E;gBAC/E,4BAA4B;gBAC5B,GAAG,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,IAAI,GAAG,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChG,mFAAmF;gBACnF,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;oBACpC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;oBACxE,CAAC,CAAC,EAAE,CAAC;gBACP,YAAY;aACb,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,0FAA0F;IAClF,SAAS,CAAC,QAAkB;QAClC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,GAAG,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;aACxB,OAAO,CACN;sCAC8B,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CACnE;aACA,GAAG,CAAC,GAAG,QAAQ,CAAgB,CAAC;QACnC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;CACF;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAgB;IACrC,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;SACxC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAS,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAkB,EAClB,OAAmC;IAEnC,MAAM,QAAQ,GAAG,OAAO;SACrB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACnD,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzF,CAAC;QACD,OAAO;YACL,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,OAAO,IAAI,EAAE;YACpB,MAAM,CAAC,UAAU,IAAI,EAAE;YACvB,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACzC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACd,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC;SACT,WAAW,EAAE,CAAC;IAEjB,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO;aAClB,WAAW,EAAE;aACb,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,6EAA6E;QAC7E,yEAAyE;QACzE,4CAA4C;QAC5C,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAAE,IAAY;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,gGAAgG;IAChG,6FAA6F;IAC7F,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,SAAS,IAAI,CAAC,IAAY;IACxB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5F,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAyB;IACtD,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG;YACX,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,OAAO,IAAI,EAAE;YAClB,IAAI,CAAC,KAAK,IAAI,EAAE;YAChB,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;SACrC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACzC,CAAC;IACD,MAAM,IAAI,GAAG;QACX,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,OAAO,IAAI,EAAE;QAClB,IAAI,CAAC,UAAU,IAAI,EAAE;QACrB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;QACtD,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACrB,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;KACrC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,0EAA0E;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,KAAoC;IAC3D,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC;QAC1C,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC;QACrF,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACpC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC;aAC7F,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;aACtC,IAAI,CAAC,GAAG,CAAC,CACb;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;AAC3C,CAAC;AAED,SAAS,SAAS,CAAC,IAAgB;IACjC,MAAM,KAAK,GAAqB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,eAAe,CAAC,IAAgB;IACvC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IACjD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,QAAQ;aACvH,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACf;YACE,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,QAAQ;YAChB,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,UAAU;YAClB,OAAO,CAAC,KAAK;SACd;aACE,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;aACtC,IAAI,CAAC,IAAI,CAAC,CACd;aACA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAChF,CAAC;AA+BD,SAAS,aAAa,CAAC,GAAgB;IACrC,IACE,GAAG,CAAC,WAAW,KAAK,OAAO;QAC3B,GAAG,CAAC,WAAW,KAAK,UAAU;QAC9B,GAAG,CAAC,WAAW,KAAK,YAAY;QAChC,GAAG,CAAC,WAAW,KAAK,KAAK;QACzB,GAAG,CAAC,WAAW,KAAK,QAAQ;QAC5B,GAAG,CAAC,WAAW,KAAK,MAAM,EAC1B,CAAC;QACD,OAAO,GAAG,CAAC,WAAW,CAAC;IACzB,CAAC;IACD,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACtE,CAAC;AAQD;;;;GAIG;AACH,SAAS,UAAU,CAAC,MAAsB,EAAE,KAAa;IACvD,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC5B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,GAAG,CACjF,CAAC;IACF,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAC1E,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa;QAAE,OAAO,MAAM,CAAC;IAEhD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;QACnG,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC;AACrG,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,QAAgB;IACjD,MAAM,KAAK,GAAG,IAAI;SACf,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrE,CAAC"}