daftari 1.30.0 → 1.31.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 (282) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +139 -4
  3. package/dist/access/rbac.d.ts +1 -0
  4. package/dist/access/rbac.d.ts.map +1 -1
  5. package/dist/access/rbac.js +7 -0
  6. package/dist/access/rbac.js.map +1 -1
  7. package/dist/audit/checks/broken_refs.d.ts +1 -1
  8. package/dist/audit/checks/broken_refs.d.ts.map +1 -1
  9. package/dist/audit/checks/broken_refs.js +77 -22
  10. package/dist/audit/checks/broken_refs.js.map +1 -1
  11. package/dist/audit/collect.d.ts +1 -0
  12. package/dist/audit/collect.d.ts.map +1 -1
  13. package/dist/audit/collect.js +22 -2
  14. package/dist/audit/collect.js.map +1 -1
  15. package/dist/audit/index.d.ts.map +1 -1
  16. package/dist/audit/index.js +9 -3
  17. package/dist/audit/index.js.map +1 -1
  18. package/dist/audit/links.d.ts.map +1 -1
  19. package/dist/audit/links.js +9 -3
  20. package/dist/audit/links.js.map +1 -1
  21. package/dist/audit/report.d.ts.map +1 -1
  22. package/dist/audit/report.js +2 -0
  23. package/dist/audit/report.js.map +1 -1
  24. package/dist/audit/types.d.ts +4 -1
  25. package/dist/audit/types.d.ts.map +1 -1
  26. package/dist/audit/types.js.map +1 -1
  27. package/dist/backfill/derive.d.ts.map +1 -1
  28. package/dist/backfill/derive.js +1 -0
  29. package/dist/backfill/derive.js.map +1 -1
  30. package/dist/cli.d.ts.map +1 -1
  31. package/dist/cli.js +18 -0
  32. package/dist/cli.js.map +1 -1
  33. package/dist/court/precedent.d.ts.map +1 -1
  34. package/dist/court/precedent.js +6 -1
  35. package/dist/court/precedent.js.map +1 -1
  36. package/dist/curation/consumes.d.ts +24 -0
  37. package/dist/curation/consumes.d.ts.map +1 -0
  38. package/dist/curation/consumes.js +122 -0
  39. package/dist/curation/consumes.js.map +1 -0
  40. package/dist/curation/edge-staleness.d.ts +47 -0
  41. package/dist/curation/edge-staleness.d.ts.map +1 -0
  42. package/dist/curation/edge-staleness.js +258 -0
  43. package/dist/curation/edge-staleness.js.map +1 -0
  44. package/dist/curation/edges.d.ts.map +1 -1
  45. package/dist/curation/edges.js +164 -10
  46. package/dist/curation/edges.js.map +1 -1
  47. package/dist/curation/lint.d.ts +4 -1
  48. package/dist/curation/lint.d.ts.map +1 -1
  49. package/dist/curation/lint.js +61 -6
  50. package/dist/curation/lint.js.map +1 -1
  51. package/dist/curation/provenance.d.ts +2 -0
  52. package/dist/curation/provenance.d.ts.map +1 -1
  53. package/dist/curation/provenance.js +2 -0
  54. package/dist/curation/provenance.js.map +1 -1
  55. package/dist/curation/read-log.d.ts +19 -0
  56. package/dist/curation/read-log.d.ts.map +1 -0
  57. package/dist/curation/read-log.js +120 -0
  58. package/dist/curation/read-log.js.map +1 -0
  59. package/dist/curation/review-throughput.d.ts +24 -0
  60. package/dist/curation/review-throughput.d.ts.map +1 -0
  61. package/dist/curation/review-throughput.js +102 -0
  62. package/dist/curation/review-throughput.js.map +1 -0
  63. package/dist/curation/staged-actions.d.ts +11 -1
  64. package/dist/curation/staged-actions.d.ts.map +1 -1
  65. package/dist/curation/staged-actions.js +102 -24
  66. package/dist/curation/staged-actions.js.map +1 -1
  67. package/dist/curation/structural.d.ts +16 -0
  68. package/dist/curation/structural.d.ts.map +1 -0
  69. package/dist/curation/structural.js +64 -0
  70. package/dist/curation/structural.js.map +1 -0
  71. package/dist/curation/tension-blast.d.ts +4 -0
  72. package/dist/curation/tension-blast.d.ts.map +1 -1
  73. package/dist/curation/tension-blast.js +9 -0
  74. package/dist/curation/tension-blast.js.map +1 -1
  75. package/dist/curation/tension.d.ts +5 -2
  76. package/dist/curation/tension.d.ts.map +1 -1
  77. package/dist/curation/tension.js +68 -25
  78. package/dist/curation/tension.js.map +1 -1
  79. package/dist/curation/tier0.d.ts +27 -0
  80. package/dist/curation/tier0.d.ts.map +1 -0
  81. package/dist/curation/tier0.js +196 -0
  82. package/dist/curation/tier0.js.map +1 -0
  83. package/dist/curation/tier1.d.ts +30 -0
  84. package/dist/curation/tier1.d.ts.map +1 -0
  85. package/dist/curation/tier1.js +142 -0
  86. package/dist/curation/tier1.js.map +1 -0
  87. package/dist/curation/tier2.d.ts +43 -0
  88. package/dist/curation/tier2.d.ts.map +1 -0
  89. package/dist/curation/tier2.js +182 -0
  90. package/dist/curation/tier2.js.map +1 -0
  91. package/dist/curation/vault-docs.d.ts +5 -1
  92. package/dist/curation/vault-docs.d.ts.map +1 -1
  93. package/dist/curation/vault-docs.js +14 -0
  94. package/dist/curation/vault-docs.js.map +1 -1
  95. package/dist/eval/generate.js +22 -5
  96. package/dist/eval/generate.js.map +1 -1
  97. package/dist/eval/index.d.ts.map +1 -1
  98. package/dist/eval/index.js +173 -25
  99. package/dist/eval/index.js.map +1 -1
  100. package/dist/eval/llm.js +1 -1
  101. package/dist/eval/llm.js.map +1 -1
  102. package/dist/eval/prune.d.ts +24 -0
  103. package/dist/eval/prune.d.ts.map +1 -0
  104. package/dist/eval/prune.js +83 -0
  105. package/dist/eval/prune.js.map +1 -0
  106. package/dist/eval/storage.d.ts +3 -0
  107. package/dist/eval/storage.d.ts.map +1 -1
  108. package/dist/eval/storage.js +14 -0
  109. package/dist/eval/storage.js.map +1 -1
  110. package/dist/frontmatter/schema.d.ts.map +1 -1
  111. package/dist/frontmatter/schema.js +19 -1
  112. package/dist/frontmatter/schema.js.map +1 -1
  113. package/dist/frontmatter/types.d.ts +4 -1
  114. package/dist/frontmatter/types.d.ts.map +1 -1
  115. package/dist/frontmatter/types.js +8 -0
  116. package/dist/frontmatter/types.js.map +1 -1
  117. package/dist/import/index.d.ts.map +1 -1
  118. package/dist/import/index.js +44 -9
  119. package/dist/import/index.js.map +1 -1
  120. package/dist/import/langgraph-store.d.ts +53 -0
  121. package/dist/import/langgraph-store.d.ts.map +1 -0
  122. package/dist/import/langgraph-store.js +292 -0
  123. package/dist/import/langgraph-store.js.map +1 -0
  124. package/dist/index.d.ts +5 -0
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +56 -18
  127. package/dist/index.js.map +1 -1
  128. package/dist/lifecycle/lock.d.ts +9 -1
  129. package/dist/lifecycle/lock.d.ts.map +1 -1
  130. package/dist/lifecycle/lock.js +34 -9
  131. package/dist/lifecycle/lock.js.map +1 -1
  132. package/dist/okf/export.d.ts +12 -0
  133. package/dist/okf/export.d.ts.map +1 -0
  134. package/dist/okf/export.js +115 -0
  135. package/dist/okf/export.js.map +1 -0
  136. package/dist/okf/import.d.ts +24 -0
  137. package/dist/okf/import.d.ts.map +1 -0
  138. package/dist/okf/import.js +107 -0
  139. package/dist/okf/import.js.map +1 -0
  140. package/dist/okf/index.d.ts +2 -0
  141. package/dist/okf/index.d.ts.map +1 -0
  142. package/dist/okf/index.js +147 -0
  143. package/dist/okf/index.js.map +1 -0
  144. package/dist/okf/map.d.ts +16 -0
  145. package/dist/okf/map.d.ts.map +1 -0
  146. package/dist/okf/map.js +149 -0
  147. package/dist/okf/map.js.map +1 -0
  148. package/dist/okf/types.d.ts +9 -0
  149. package/dist/okf/types.d.ts.map +1 -0
  150. package/dist/okf/types.js +48 -0
  151. package/dist/okf/types.js.map +1 -0
  152. package/dist/search/coverage.d.ts.map +1 -1
  153. package/dist/search/coverage.js +1 -1
  154. package/dist/search/coverage.js.map +1 -1
  155. package/dist/search/hybrid.d.ts +19 -0
  156. package/dist/search/hybrid.d.ts.map +1 -1
  157. package/dist/search/hybrid.js +58 -10
  158. package/dist/search/hybrid.js.map +1 -1
  159. package/dist/search/reindex.d.ts +1 -0
  160. package/dist/search/reindex.d.ts.map +1 -1
  161. package/dist/search/reindex.js +41 -11
  162. package/dist/search/reindex.js.map +1 -1
  163. package/dist/search/watcher.d.ts +2 -0
  164. package/dist/search/watcher.d.ts.map +1 -1
  165. package/dist/search/watcher.js +21 -10
  166. package/dist/search/watcher.js.map +1 -1
  167. package/dist/serve/index.d.ts +36 -0
  168. package/dist/serve/index.d.ts.map +1 -0
  169. package/dist/serve/index.js +507 -0
  170. package/dist/serve/index.js.map +1 -0
  171. package/dist/server.d.ts +10 -1
  172. package/dist/server.d.ts.map +1 -1
  173. package/dist/server.js +89 -14
  174. package/dist/server.js.map +1 -1
  175. package/dist/sleep/index.d.ts +2 -0
  176. package/dist/sleep/index.d.ts.map +1 -1
  177. package/dist/sleep/index.js +212 -21
  178. package/dist/sleep/index.js.map +1 -1
  179. package/dist/sleep/report.d.ts +3 -0
  180. package/dist/sleep/report.d.ts.map +1 -1
  181. package/dist/sleep/report.js +52 -0
  182. package/dist/sleep/report.js.map +1 -1
  183. package/dist/sleep/tension-scan-state.d.ts +19 -0
  184. package/dist/sleep/tension-scan-state.d.ts.map +1 -0
  185. package/dist/sleep/tension-scan-state.js +0 -0
  186. package/dist/sleep/tension-scan-state.js.map +1 -0
  187. package/dist/sleep/tension-scan.d.ts +44 -0
  188. package/dist/sleep/tension-scan.d.ts.map +1 -0
  189. package/dist/sleep/tension-scan.js +0 -0
  190. package/dist/sleep/tension-scan.js.map +1 -0
  191. package/dist/storage/backend.d.ts +12 -0
  192. package/dist/storage/backend.d.ts.map +1 -0
  193. package/dist/storage/backend.js +231 -0
  194. package/dist/storage/backend.js.map +1 -0
  195. package/dist/storage/backends/fs.d.ts +4 -0
  196. package/dist/storage/backends/fs.d.ts.map +1 -0
  197. package/dist/storage/backends/fs.js +99 -0
  198. package/dist/storage/backends/fs.js.map +1 -0
  199. package/dist/storage/fs-walk.d.ts +5 -0
  200. package/dist/storage/fs-walk.d.ts.map +1 -0
  201. package/dist/storage/fs-walk.js +28 -0
  202. package/dist/storage/fs-walk.js.map +1 -0
  203. package/dist/storage/index-db.d.ts +16 -0
  204. package/dist/storage/index-db.d.ts.map +1 -1
  205. package/dist/storage/index-db.js +94 -5
  206. package/dist/storage/index-db.js.map +1 -1
  207. package/dist/storage/local.d.ts +1 -0
  208. package/dist/storage/local.d.ts.map +1 -1
  209. package/dist/storage/local.js +12 -0
  210. package/dist/storage/local.js.map +1 -1
  211. package/dist/storage/sync.d.ts +25 -0
  212. package/dist/storage/sync.d.ts.map +1 -0
  213. package/dist/storage/sync.js +308 -0
  214. package/dist/storage/sync.js.map +1 -0
  215. package/dist/sync/index.d.ts +2 -0
  216. package/dist/sync/index.d.ts.map +1 -0
  217. package/dist/sync/index.js +136 -0
  218. package/dist/sync/index.js.map +1 -0
  219. package/dist/themes/clustering.d.ts +6 -11
  220. package/dist/themes/clustering.d.ts.map +1 -1
  221. package/dist/themes/clustering.js +76 -84
  222. package/dist/themes/clustering.js.map +1 -1
  223. package/dist/tools/consumes.d.ts +14 -0
  224. package/dist/tools/consumes.d.ts.map +1 -0
  225. package/dist/tools/consumes.js +99 -0
  226. package/dist/tools/consumes.js.map +1 -0
  227. package/dist/tools/curation.d.ts +2 -0
  228. package/dist/tools/curation.d.ts.map +1 -1
  229. package/dist/tools/curation.js +53 -15
  230. package/dist/tools/curation.js.map +1 -1
  231. package/dist/tools/edge-staleness.d.ts +28 -0
  232. package/dist/tools/edge-staleness.d.ts.map +1 -0
  233. package/dist/tools/edge-staleness.js +205 -0
  234. package/dist/tools/edge-staleness.js.map +1 -0
  235. package/dist/tools/edges.d.ts.map +1 -1
  236. package/dist/tools/edges.js +27 -21
  237. package/dist/tools/edges.js.map +1 -1
  238. package/dist/tools/read.d.ts +15 -1
  239. package/dist/tools/read.d.ts.map +1 -1
  240. package/dist/tools/read.js +142 -29
  241. package/dist/tools/read.js.map +1 -1
  242. package/dist/tools/receipt.d.ts.map +1 -1
  243. package/dist/tools/receipt.js +16 -7
  244. package/dist/tools/receipt.js.map +1 -1
  245. package/dist/tools/search.d.ts +1 -0
  246. package/dist/tools/search.d.ts.map +1 -1
  247. package/dist/tools/search.js +147 -5
  248. package/dist/tools/search.js.map +1 -1
  249. package/dist/tools/staged-actions.d.ts +3 -0
  250. package/dist/tools/staged-actions.d.ts.map +1 -1
  251. package/dist/tools/staged-actions.js +227 -22
  252. package/dist/tools/staged-actions.js.map +1 -1
  253. package/dist/tools/themes.d.ts +8 -0
  254. package/dist/tools/themes.d.ts.map +1 -1
  255. package/dist/tools/themes.js +208 -122
  256. package/dist/tools/themes.js.map +1 -1
  257. package/dist/tools/tier1.d.ts +14 -0
  258. package/dist/tools/tier1.d.ts.map +1 -0
  259. package/dist/tools/tier1.js +169 -0
  260. package/dist/tools/tier1.js.map +1 -0
  261. package/dist/tools/tier2.d.ts +27 -0
  262. package/dist/tools/tier2.d.ts.map +1 -0
  263. package/dist/tools/tier2.js +344 -0
  264. package/dist/tools/tier2.js.map +1 -0
  265. package/dist/tools/write.d.ts +9 -1
  266. package/dist/tools/write.d.ts.map +1 -1
  267. package/dist/tools/write.js +492 -6
  268. package/dist/tools/write.js.map +1 -1
  269. package/dist/utils/config.d.ts +52 -0
  270. package/dist/utils/config.d.ts.map +1 -1
  271. package/dist/utils/config.js +372 -2
  272. package/dist/utils/config.js.map +1 -1
  273. package/dist/utils/run-id.d.ts +3 -0
  274. package/dist/utils/run-id.d.ts.map +1 -0
  275. package/dist/utils/run-id.js +19 -0
  276. package/dist/utils/run-id.js.map +1 -0
  277. package/dist/utils/vault-gitignore.d.ts +1 -1
  278. package/dist/utils/vault-gitignore.d.ts.map +1 -1
  279. package/dist/utils/vault-gitignore.js +4 -1
  280. package/dist/utils/vault-gitignore.js.map +1 -1
  281. package/package.json +21 -1
  282. package/templates/config.yaml +8 -0
@@ -1 +1 @@
1
- {"version":3,"file":"staged-actions.js","sourceRoot":"","sources":["../../src/tools/staged-actions.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,uEAAuE;AACvE,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E;AAC/E,uCAAuC;AACvC,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,4EAA4E;AAC5E,6EAA6E;AAC7E,qEAAqE;AACrE,iEAAiE;AAEjE,OAAO,EAAsB,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EACL,mBAAmB,EACnB,MAAM,EACN,cAAc,EACd,mBAAmB,EAEnB,WAAW,GACZ,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EACL,cAAc,EACd,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,cAAc,GAEf,MAAM,YAAY,CAAC;AAEpB,SAAS,aAAa,CACpB,IAA6B,EAC7B,KAAa,EACb,IAAY;IAEZ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,KAAK,YAAY,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AACf,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,IAA6B,EAC7B,MAAsB;IAEtB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC5E,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,IAAI,CAAE,mBAAyC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,OAAO,GAAG,CACR,IAAI,KAAK,CACP,oDAAoD,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrF,CACF,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC5E,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC5E,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC;IACzE,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAEpC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QACpE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtD,uEAAuE;IACvE,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,6EAA6E;IAC7E,8EAA8E;IAC9E,qDAAqD;IACrD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,MAAM,UAAU,GACd,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;YACvC,OAAO,GAAG,CACR,IAAI,KAAK,CACP,wBAAwB,MAAM,CAAC,QAAQ,0CAA0C,UAAU,GAAG,CAC/F,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,8EAA8E;IAC9E,6EAA6E;IAC7E,6EAA6E;IAC7E,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,kDAAkD,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,OAA2B,CAAC;IAChC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC1D,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAED,OAAO,WAAW,CAAC,SAAS,EAAE;QAC5B,UAAU,EAAE,UAAU,CAAC,KAAyB;QAChD,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,SAAS,EAAE,SAAS,CAAC,KAAK;QAC1B,YAAY,EAAE,IAAI,CAAC,aAAa;QAChC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC,CAAC;AACL,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAiB,EACjB,IAA6B,EAC7B,MAAsB;IAEtB,wEAAwE;IACxE,yEAAyE;IACzE,sDAAsD;IACtD,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,QAAQ,gCAAgC,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IACpE,IAAI,CAAC,WAAW,CAAC,EAAE;QAAE,OAAO,WAAW,CAAC;IACxC,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACtE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC;IACnC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IACnE,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAEpC,IAAI,MAA0B,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACtD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,GAAG,OAAO,CAAC;IAC3C,CAAC;IAED,gDAAgD;IAChD,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,wCAAwC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,GAAG,CACR,IAAI,KAAK,CACP,+BAA+B,EAAE,CAAC,KAAK,QAAQ,MAAM,CAAC,MAAM,qBAAqB;YAC/E,uBAAuB,CAC1B,CACF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;IAE3B,2CAA2C;IAC3C,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE;YACzD,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS,CAAC,KAAK;YAC3B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,sEAAsE;IACtE,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,IAAI,GACR,MAAM,CAAC,YAAY,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ;QAC5D,CAAC,CAAE,MAAM,CAAC,YAAwC;QAClD,CAAC,CAAC,EAAE,CAAC;IAET,IAAI,UAAsC,CAAC;IAC3C,QAAQ,MAAM,CAAC,UAA8B,EAAE,CAAC;QAC9C,KAAK,SAAS;YACZ,UAAU,GAAG,MAAM,YAAY,CAC7B,SAAS,EACT,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,EACnD,MAAM,CACP,CAAC;YACF,MAAM;QACR,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,aAAa,GAA4B;gBAC7C,IAAI,EAAE,MAAM,CAAC,UAAU;gBACvB,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,MAAM,EAAE,MAAM,CAAC,SAAS;aACzB,CAAC;YACF,wEAAwE;YACxE,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;gBAC3C,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACnD,CAAC;YACD,UAAU,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM;QACR,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,kDAAkD;YAClD,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrF,OAAO,GAAG,CACR,IAAI,KAAK,CAAC,kCAAkC,EAAE,CAAC,KAAK,oCAAoC,CAAC,CAC1F,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,MAAM,cAAc,CAC/B,SAAS,EACT;gBACE,QAAQ,EAAE,MAAM,CAAC,UAAU;gBAC3B,QAAQ,EAAE,IAAI,CAAC,aAAa;gBAC5B,MAAM,EAAE,MAAM,CAAC,SAAS;gBACxB,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB,EACD,MAAM,CACP,CAAC;YACF,MAAM;QACR,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,wEAAwE;YACxE,mEAAmE;YACnE,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACxC,OAAO,GAAG,CACR,IAAI,KAAK,CACP,sCAAsC,EAAE,CAAC,KAAK,iCAAiC,CAChF,CACF,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,MAAM,kBAAkB,CACnC,SAAS,EACT;gBACE,IAAI,EAAE,MAAM,CAAC,UAAU;gBACvB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,MAAM,CAAC,SAAS;gBACxB,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB,EACD,MAAM,CACP,CAAC;YACF,MAAM;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,wEAAwE;YACxE,8CAA8C;YAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1E,IACE,CAAC,SAAS;gBACV,SAAS,CAAC,MAAM,KAAK,CAAC;gBACtB,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAChC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAChC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAC7B,CAAC;gBACD,OAAO,GAAG,CACR,IAAI,KAAK,CACP,8BAA8B,EAAE,CAAC,KAAK,kCAAkC;oBACtE,oCAAoC,CACvC,CACF,CAAC;YACJ,CAAC;YACD,MAAM,SAAS,GAA4B;gBACzC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;gBACpB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;gBACpB,WAAW,EAAE,MAAM,CAAC,UAAU;gBAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB,CAAC;YACF,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAC7D,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC3C,CAAC;YACD,UAAU,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM;QACR,CAAC;QACD;YACE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,8CAA8C,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IAEtC,6EAA6E;IAC7E,2EAA2E;IAC3E,0EAA0E;IAC1E,0CAA0C;IAC1C,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE;QACzD,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS,CAAC,KAAK;QAC3B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAElC,OAAO,EAAE,CAAC;QACR,SAAS,EAAE,EAAE,CAAC,KAAK;QACnB,QAAQ;QACR,OAAO,EAAE,IAAI;QACb,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAqB;IACjD;QACE,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,kCAAkC;QACzC,WAAW,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE;QACvC,WAAW,EACT,yEAAyE;YACzE,2EAA2E;YAC3E,wEAAwE;YACxE,yEAAyE;YACzE,qEAAqE;YACrE,yEAAyE;YACzE,6DAA6D;YAC7D,6DAA6D;QAC/D,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,mBAAmB,CAAC;oBAC9B,WAAW,EAAE,mCAAmC;iBACjD;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wDAAwD;iBACtE;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4DAA4D;iBAC1E;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yDAAyD;iBACvE;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,mEAAmE;wBACnE,+DAA+D;oBACjE,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iEAAiE;iBAC/E;aACF;YACD,QAAQ,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,CAAC;YACrF,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC;KAChF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;QACtC,WAAW,EACT,2EAA2E;YAC3E,mEAAmE;YACnE,gEAAgE;YAChE,0EAA0E;YAC1E,2EAA2E;YAC3E,2EAA2E;YAC3E,uEAAuE;YACvE,mEAAmE;YACnE,sEAAsE;YACtE,yDAAyD;QAC3D,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qDAAqD;iBACnE;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;oBAC3B,WAAW,EAAE,iDAAiD;iBAC/D;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4EAA4E;iBAC1F;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sDAAsD;iBACpE;aACF;YACD,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC;YACzC,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC;KAC3E;CACF,CAAC"}
1
+ {"version":3,"file":"staged-actions.js","sourceRoot":"","sources":["../../src/tools/staged-actions.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,uEAAuE;AACvE,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E;AAC/E,uCAAuC;AACvC,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,4EAA4E;AAC5E,6EAA6E;AAC7E,qEAAqE;AACrE,iEAAiE;AAEjE,OAAO,EAAsB,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,EACL,mBAAmB,EACnB,MAAM,EACN,cAAc,EACd,mBAAmB,EAEnB,4BAA4B,GAC7B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAkB,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EACL,cAAc,EACd,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,GAEX,MAAM,YAAY,CAAC;AAEpB,SAAS,aAAa,CACpB,IAA6B,EAC7B,KAAa,EACb,IAAY;IAEZ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,KAAK,YAAY,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AACf,CAAC;AAoBD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,IAA6B,EAC7B,MAAsB;IAEtB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC5E,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,IAAI,CAAE,mBAAyC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,OAAO,GAAG,CACR,IAAI,KAAK,CACP,oDAAoD,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrF,CACF,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC5E,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC5E,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC;IACzE,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAEpC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QACpE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAE5B,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,KAAK,OAAO,CAAC;IAC7C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,aAAwC,CAAC;QAC3D,IACE,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ;YACtC,IAAI,CAAC,WAAW,KAAK,IAAI;YACzB,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;YACpC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAC7B,CAAC;YACD,OAAO,GAAG,CACR,IAAI,KAAK,CACP,uEAAuE;gBACrE,0CAA0C,CAC7C,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtD,uEAAuE;IACvE,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,6EAA6E;IAC7E,uEAAuE;IACvE,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,sEAAsE;IACtE,yEAAyE;IACzE,qBAAqB;IACrB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,MAAM,UAAU,GACd,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;YACvC,OAAO,GAAG,CACR,IAAI,KAAK,CACP,wBAAwB,MAAM,CAAC,QAAQ,0CAA0C,UAAU,GAAG,CAC/F,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,wEAAwE;IACxE,0EAA0E;IAC1E,uEAAuE;IACvE,wEAAwE;IACxE,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,kDAAkD,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,OAA2B,CAAC;IAChC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC1D,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAED,qEAAqE;IACrE,uEAAuE;IACvE,qEAAqE;IACrE,OAAO,4BAA4B,CAAC,SAAS,EAAE;QAC7C,UAAU,EAAE,UAAU,CAAC,KAAyB;QAChD,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO;QAClC,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,SAAS,EAAE,SAAS,CAAC,KAAK;QAC1B,YAAY,EAAE,IAAI,CAAC,aAAa;QAChC,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC,CAAC;AACL,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAiB,EACjB,IAA6B,EAC7B,MAAsB;IAEtB,wEAAwE;IACxE,yEAAyE;IACzE,sDAAsD;IACtD,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,QAAQ,gCAAgC,CAAC,CAAC,CAAC;IACjG,CAAC;IACD,0EAA0E;IAC1E,4EAA4E;IAC5E,0EAA0E;IAC1E,wEAAwE;IACxE,mEAAmE;IACnE,IAAI,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,OAAO,GAAG,CACR,IAAI,KAAK,CACP,wBAAwB,MAAM,CAAC,QAAQ,gCAAgC;YACrE,uBAAuB,CAC1B,CACF,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IACpE,IAAI,CAAC,WAAW,CAAC,EAAE;QAAE,OAAO,WAAW,CAAC;IACxC,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACtE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC;IACnC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IACnE,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAEpC,IAAI,MAA0B,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACtD,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,GAAG,OAAO,CAAC;IAC3C,CAAC;IAED,gDAAgD;IAChD,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,wCAAwC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,GAAG,CACR,IAAI,KAAK,CACP,+BAA+B,EAAE,CAAC,KAAK,QAAQ,MAAM,CAAC,MAAM,qBAAqB;YAC/E,uBAAuB,CAC1B,CACF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;IAE3B,2CAA2C;IAC3C,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE;YACzD,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS,CAAC,KAAK;YAC3B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,sEAAsE;IACtE,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,IAAI,GACR,MAAM,CAAC,YAAY,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ;QAC5D,CAAC,CAAE,MAAM,CAAC,YAAwC;QAClD,CAAC,CAAC,EAAE,CAAC;IAET,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,2EAA2E;IAC3E,yEAAyE;IACzE,mEAAmE;IACnE,+CAA+C;IAC/C,wEAAwE;IACxE,wEAAwE;IACxE,0EAA0E;IAC1E,IAAI,YAAY,GAAkE,IAAI,CAAC;IACvF,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACtE,OAAO,GAAG,CACR,IAAI,KAAK,CAAC,8BAA8B,EAAE,CAAC,KAAK,kCAAkC,CAAC,CACpF,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,8BAA8B,EAAE,CAAC,KAAK,2BAA2B,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,YAAY,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAsC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/F,CAAC;IAED,IACE,MAAM,CAAC,UAAU,KAAK,SAAS;QAC/B,MAAM,CAAC,UAAU,KAAK,WAAW;QACjC,MAAM,CAAC,UAAU,KAAK,OAAO,EAC7B,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;QAC9C,qEAAqE;QACrE,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;YAClE,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO,IAAI,YAAY,EAAE,CAAC;YAClD,qEAAqE;YACrE,mEAAmE;YACnE,oEAAoE;YACpE,qEAAqE;YACrE,sEAAsE;YACtE,sEAAsE;YACtE,uEAAuE;YACvE,2DAA2D;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC;YACxE,MAAM,SAAS,GAA4B,QAAQ;gBACjD,CAAC,CAAC,EAAE,GAAI,QAAQ,CAAC,WAAuC,EAAE;gBAC1D,CAAC,CAAC,EAAE,CAAC;YACP,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpE,IAAI,KAAK,KAAK,IAAI;oBAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;;oBACrC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC9B,CAAC;YACD,sEAAsE;YACtE,mEAAmE;YACnE,uEAAuE;YACvE,oDAAoD;YACpD,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAAE,OAAO,UAAU,CAAC;YACtC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,mBAAmB,CACjD,SAAS,EACT,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAClC,CAAC;YACF,IAAI,WAAW,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACvC,oEAAoE;gBACpE,oEAAoE;gBACpE,MAAM,SAAS,GAAc;oBAC3B,IAAI,EAAE,MAAM,CAAC,UAAU;oBACvB,WAAW;oBACX,OAAO,EAAE,YAAY,CAAC,IAAI;oBAC1B,UAAU,EAAE,MAAM;iBACnB,CAAC;gBACF,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;gBACtF,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAChE,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBACtC,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;oBAC7B,QAAQ,CAAC,IAAI,CACX,gDAAgD,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAC/F,CAAC;gBACJ,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,GAAG,CACR,IAAI,KAAK,CACP,wDAAwD,MAAM,CAAC,UAAU,IAAI;wBAC3E,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CACtD,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,IACL,QAAQ,EAAE,WAAW,CAAC,MAAM,KAAK,WAAW;gBAC5C,CAAC,CAAC,OAAO,WAAW,CAAC,aAAa,KAAK,QAAQ,IAAI,WAAW,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,EACxF,CAAC;gBACD,4DAA4D;gBAC5D,kEAAkE;gBAClE,8DAA8D;gBAC9D,iEAAiE;gBACjE,0DAA0D;gBAC1D,6DAA6D;gBAC7D,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC1E,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/B,QAAQ,CAAC,IAAI,CAAC,mCAAmC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjF,CAAC;gBACD,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;oBAC9B,QAAQ,CAAC,IAAI,CACX,gCAAgC,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAChF,CAAC;gBACJ,CAAC;gBACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,GAAG,CACR,IAAI,KAAK,CACP,uDAAuD,MAAM,CAAC,UAAU,GAAG;wBACzE,gBAAgB,WAAW,CAAC,MAAM,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;wBAC1E,2EAA2E,CAC9E,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CACX,gDAAgD,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAC/F,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,GAAG,CACR,IAAI,KAAK,CACP,gDAAgD,MAAM,CAAC,UAAU,IAAI;oBACnE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CACtD,CACF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YAClD,qEAAqE;YACrE,oEAAoE;YACpE,mDAAmD;YACnD,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1E,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,QAAQ,CAAC,IAAI,CAAC,mCAAmC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CACX,gCAAgC,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAChF,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,GAAG,CACR,IAAI,KAAK,CACP,kDAAkD,MAAM,CAAC,UAAU,IAAI;oBACrE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,8CAA8C;oBACpE,4CAA4C,CAC/C,CACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,UAAsC,CAAC;IAC3C,QAAQ,MAAM,CAAC,UAA8B,EAAE,CAAC;QAC9C,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,sEAAsE;YACtE,oEAAoE;YACpE,sEAAsE;YACtE,6BAA6B;YAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,8BAA8B,EAAE,CAAC,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACnF,CAAC;YACD,UAAU,GAAG,MAAM,UAAU,CAC3B,SAAS,EACT;gBACE,IAAI,EAAE,MAAM,CAAC,UAAU;gBACvB,WAAW,EAAE,YAAY,CAAC,WAAW;gBACrC,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD,EACD,MAAM,CACP,CAAC;YACF,MAAM;QACR,CAAC;QACD,KAAK,SAAS;YACZ,UAAU,GAAG,MAAM,YAAY,CAC7B,SAAS,EACT,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,EACnD,MAAM,CACP,CAAC;YACF,MAAM;QACR,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,aAAa,GAA4B;gBAC7C,IAAI,EAAE,MAAM,CAAC,UAAU;gBACvB,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,MAAM,EAAE,MAAM,CAAC,SAAS;aACzB,CAAC;YACF,wEAAwE;YACxE,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;gBAC3C,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACnD,CAAC;YACD,UAAU,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM;QACR,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,kDAAkD;YAClD,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrF,OAAO,GAAG,CACR,IAAI,KAAK,CAAC,kCAAkC,EAAE,CAAC,KAAK,oCAAoC,CAAC,CAC1F,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,MAAM,cAAc,CAC/B,SAAS,EACT;gBACE,QAAQ,EAAE,MAAM,CAAC,UAAU;gBAC3B,QAAQ,EAAE,IAAI,CAAC,aAAa;gBAC5B,MAAM,EAAE,MAAM,CAAC,SAAS;gBACxB,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB,EACD,MAAM,CACP,CAAC;YACF,MAAM;QACR,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,wEAAwE;YACxE,mEAAmE;YACnE,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACxC,OAAO,GAAG,CACR,IAAI,KAAK,CACP,sCAAsC,EAAE,CAAC,KAAK,iCAAiC,CAChF,CACF,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,MAAM,kBAAkB,CACnC,SAAS,EACT;gBACE,IAAI,EAAE,MAAM,CAAC,UAAU;gBACvB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,MAAM,CAAC,SAAS;gBACxB,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB,EACD,MAAM,CACP,CAAC;YACF,MAAM;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,wEAAwE;YACxE,8CAA8C;YAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1E,IACE,SAAS,EAAE,MAAM,KAAK,CAAC;gBACvB,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAChC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAChC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAC7B,CAAC;gBACD,OAAO,GAAG,CACR,IAAI,KAAK,CACP,8BAA8B,EAAE,CAAC,KAAK,kCAAkC;oBACtE,oCAAoC,CACvC,CACF,CAAC;YACJ,CAAC;YACD,MAAM,SAAS,GAA4B;gBACzC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;gBACpB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;gBACpB,WAAW,EAAE,MAAM,CAAC,UAAU;gBAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB,CAAC;YACF,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAC7D,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC3C,CAAC;YACD,UAAU,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM;QACR,CAAC;QACD;YACE,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,8CAA8C,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IAEtC,6EAA6E;IAC7E,2EAA2E;IAC3E,0EAA0E;IAC1E,0CAA0C;IAC1C,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,EAAE;QACzD,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS,CAAC,KAAK;QAC3B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAElC,OAAO,EAAE,CAAC;QACR,SAAS,EAAE,EAAE,CAAC,KAAK;QACnB,QAAQ;QACR,OAAO,EAAE,IAAI;QACb,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAqB;IACjD;QACE,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,kCAAkC;QACzC,WAAW,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE;QACvC,WAAW,EACT,yEAAyE;YACzE,2EAA2E;YAC3E,wEAAwE;YACxE,2EAA2E;YAC3E,gEAAgE;YAChE,qEAAqE;YACrE,yEAAyE;YACzE,4EAA4E;YAC5E,qEAAqE;YACrE,0EAA0E;YAC1E,sEAAsE;YACtE,sEAAsE;QACxE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,mBAAmB,CAAC;oBAC9B,WAAW,EAAE,mCAAmC;iBACjD;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wDAAwD;iBACtE;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4DAA4D;iBAC1E;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yDAAyD;iBACvE;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,mEAAmE;wBACnE,+DAA+D;oBACjE,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iEAAiE;iBAC/E;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,kEAAkE;wBAClE,kEAAkE;wBAClE,WAAW;iBACd;aACF;YACD,QAAQ,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,CAAC;YACrF,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC;KAChF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;QACtC,WAAW,EACT,2EAA2E;YAC3E,mEAAmE;YACnE,gEAAgE;YAChE,sEAAsE;YACtE,2BAA2B;YAC3B,2EAA2E;YAC3E,sEAAsE;YACtE,gDAAgD;YAChD,0EAA0E;YAC1E,6EAA6E;YAC7E,2EAA2E;YAC3E,yEAAyE;YACzE,mEAAmE;YACnE,uEAAuE;YACvE,mEAAmE;YACnE,sEAAsE;YACtE,yDAAyD;QAC3D,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qDAAqD;iBACnE;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;oBAC3B,WAAW,EAAE,iDAAiD;iBAC/D;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4EAA4E;iBAC1F;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sDAAsD;iBACpE;aACF;YACD,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC;YACzC,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC;KAC3E;CACF,CAAC"}
@@ -2,8 +2,10 @@ import { type AccessContext } from "../access/rbac.js";
2
2
  import { type Result } from "../frontmatter/types.js";
3
3
  import type { ToolDefinition } from "./read.js";
4
4
  export interface VaultTheme {
5
+ id: number;
5
6
  label: string;
6
7
  documentCount: number;
8
+ primaryDocumentCount: number;
7
9
  coherence: number | null;
8
10
  representativeDocs: string[];
9
11
  secondaryDocs: string[];
@@ -11,9 +13,15 @@ export interface VaultTheme {
11
13
  }
12
14
  export interface VaultThemesResult {
13
15
  themes: VaultTheme[];
16
+ docMemberships: Record<string, {
17
+ theme: number;
18
+ weight: number;
19
+ }[]>;
14
20
  totalDocuments: number;
21
+ totalChunks: number;
15
22
  skippedDocuments: number;
16
23
  selectedK: number;
24
+ droppedClusters: number;
17
25
  clusteredAt: string;
18
26
  }
19
27
  export declare function __resetThemesCache(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/tools/themes.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAW/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAuChD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IAKtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAM7B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAiJD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAsPD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CA2I3C;AAMD,eAAO,MAAM,WAAW,EAAE,cAAc,EAuCvC,CAAC"}
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/tools/themes.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAW/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA6ChD,MAAM,WAAW,UAAU;IAIzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IAId,aAAa,EAAE,MAAM,CAAC;IAGtB,oBAAoB,EAAE,MAAM,CAAC;IAM7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAKzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAI7B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,EAAE,CAAC;IAOrB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IACpE,cAAc,EAAE,MAAM,CAAC;IAGvB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IASlB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAmJD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAqPD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,CAkO3C;AAMD,eAAO,MAAM,WAAW,EAAE,cAAc,EA0CvC,CAAC"}
@@ -1,33 +1,42 @@
1
- // vault_themes — thematic clustering over document-pooled embeddings.
1
+ // vault_themes — thematic clustering over chunk embeddings with per-document
2
+ // theme distributions (#58).
2
3
  //
3
- // Cluster DOCUMENTS, not chunks: for each document we mean-pool its chunk
4
- // embeddings into one vector, L2-normalise it, and cluster the resulting
5
- // ~N-doc set. ~3.5k document vectors instead of ~44k chunk vectors makes
6
- // every algorithm cheap (silhouette becomes tractable on the full set; no
7
- // sampling needed at this scale).
4
+ // Cluster CHUNKS, not pooled documents: v1 mean-pooled each document's chunk
5
+ // embeddings into one vector, which collapses a genuinely two-region document
6
+ // (half pricing, half moonshot) into a single point that lands in neither
7
+ // region. v2 clusters the chunk vectors directly and aggregates chunk
8
+ // assignments into per-document DISTRIBUTIONS over themes, so that document
9
+ // carries weight in both themes instead of a wrong single assignment.
8
10
  //
9
- // v1 constraints (locked):
10
- // - One-doc-one-theme. Each document lives in exactly one cluster.
11
+ // v2 constraints (locked):
12
+ // - Documents have distributions, not single assignments. `documentCount`
13
+ // is COVERAGE (a doc in two themes counts in both); the partition lives
14
+ // in `primaryDocumentCount` (each doc counted once, at its argmax theme).
15
+ // - A theme membership below MEMBERSHIP_MIN_FRACTION of the doc's chunks
16
+ // is dropped (except the argmax) — a one-chunk aside must not create a
17
+ // phantom membership (#58's granularity concern).
11
18
  // - Heuristic labels from TF-IDF over titles + tags. No LLM call.
12
19
  // - No new storage — the tool is read-only against the existing
13
20
  // embeddings / chunks / documents tables.
14
- // - Default k-sweep over {10, 15, 20, 25}; an explicit `k` argument
15
- // skips the sweep.
16
- // - Deterministic via a fixed seed for the k-means RNG.
21
+ // - Default k-sweep over {10, 15, 20, 25}; an explicit `k` argument skips
22
+ // the sweep. Silhouette for the sweep is computed on a deterministic
23
+ // stride sample (chunk-scale inputs make the full O(n²) score ~2B pairs).
24
+ // - Deterministic via a fixed seed for the k-means RNG and stride (never
25
+ // random) sampling.
17
26
  import { canRead } from "../access/rbac.js";
18
27
  import { err, ok } from "../frontmatter/types.js";
19
28
  import { getProvider } from "../search/vector.js";
20
29
  import { blobToEmbedding } from "../storage/index-db.js";
21
- import { clusterCoherence, kmeans, meanPoolL2, pickK, seededRng, selectSecondaryMemberships, } from "../themes/clustering.js";
30
+ import { clusterCoherence, kmeans, membershipDistributions, pickK, seededRng, strideSample, } from "../themes/clustering.js";
22
31
  import { ensureIndexReady, openIndexForActiveProvider } from "./search.js";
23
32
  // Fixed seed for the k-means RNG. The whole point of vault_themes is that
24
33
  // the same vault produces the same themes — a random seed would give the
25
34
  // user different themes every run and erode trust in the output.
26
35
  const THEMES_RNG_SEED = 0x7da17f1; // arbitrary; constant is what matters
27
36
  // Default k-sweep range (from the issue dialogue). Each is clamped to the
28
- // number of clusterable documents inside pickK.
37
+ // number of clusterable chunks inside pickK.
29
38
  const DEFAULT_K_CANDIDATES = [10, 15, 20, 25];
30
- // k-means iteration cap. Documents on the unit sphere converge fast in
39
+ // k-means iteration cap. Vectors on the unit sphere converge fast in
31
40
  // practice; this is a safety bound for pathological inputs.
32
41
  const KMEANS_MAX_ITER = 50;
33
42
  // Representative-doc count returned per theme. 5 is enough to be useful in
@@ -36,15 +45,19 @@ const REPRESENTATIVE_DOCS_PER_THEME = 5;
36
45
  // Tag-frequency cutoff per theme. Five most-common tags is enough signal
37
46
  // without burying the user in noise.
38
47
  const RELATED_TAGS_PER_THEME = 5;
39
- // Secondary-membership tuning. A doc qualifies as a secondary member of a
40
- // non-primary cluster when its centroid similarity is BOTH within DELTA of
41
- // the primary AND above MIN_ABS_SIMILARITY. The cap prevents a centroid-
42
- // of-mass doc from showing up in every cluster. Defaults are deliberately
43
- // conservative secondaries should surface cross-cutting docs, not bury
44
- // the primary signal.
45
- const SECONDARY_DELTA = 0.1;
46
- const SECONDARY_MIN_SIMILARITY = 0.5;
47
- const SECONDARY_MAX_PER_DOC = 2;
48
+ // A doc is a member of a theme when at least this fraction of its chunks
49
+ // landed there (the argmax theme always qualifies). 0.25 keeps the 60/40
50
+ // two-region synthesis doc in both themes while dropping a one-chunk aside
51
+ // in a ten-chunk doc (0.1) #58's phantom-theme guard.
52
+ const MEMBERSHIP_MIN_FRACTION = 0.25;
53
+ // Silhouette sample cap for the k-sweep. The sweep clusters every chunk but
54
+ // scores k on a deterministic stride sample: full silhouette is O(n²) and
55
+ // chunk-scale inputs (~44k on the motivating vault) would make it ~2B pairs
56
+ // per candidate k.
57
+ const SILHOUETTE_SAMPLE_CAP = 2000;
58
+ // Per-theme coherence sample cap, same O(n²) rationale as the silhouette
59
+ // cap but per cluster.
60
+ const COHERENCE_SAMPLE_CAP = 200;
48
61
  // Hard cap on secondaries reported per theme. Same UX rationale as
49
62
  // REPRESENTATIVE_DOCS_PER_THEME — enough to be useful, bounded enough to
50
63
  // not bury the user.
@@ -138,24 +151,24 @@ function loadEmbeddingsByPath(db, model, collection) {
138
151
  }
139
152
  return out;
140
153
  }
141
- // Process-level memo of the pooled vector set. Keyed by
154
+ // Process-level memo of the chunk vector set. Keyed by
142
155
  // `${vaultRoot} ${model} ${collection ?? "*"}`; the entry's
143
156
  // `signature` is checked against the live index signature on every call and a
144
157
  // mismatch (any reindex/content change) discards the stale entry. Bounded to
145
- // one entry per scope key — the working set for a single vault is tiny and the
146
- // cache is dropped wholesale on signature change.
147
- const pooledCache = new Map();
158
+ // one entry per scope key — the working set for a single vault is the same
159
+ // vectors clustering must hold in memory anyway, and the cache is dropped
160
+ // wholesale on signature change.
161
+ const chunkSetCache = new Map();
148
162
  // Test-only hook: reset the process-level cache between cases.
149
163
  export function __resetThemesCache() {
150
- pooledCache.clear();
164
+ chunkSetCache.clear();
151
165
  }
152
166
  // Cheap content signature for the (collection-scoped) chunk+embedding set of
153
167
  // the active model. It changes whenever a chunk is added/removed/re-hashed or
154
- // an embedding is (re)written, which is exactly when the pooled vectors would
155
- // differ — so a matching signature guarantees the cached pooling is still
156
- // valid. `total(embedding)` folds the stored blobs into the aggregate without
157
- // reading them into JS. `documents.rowid` participation via count keeps a bare
158
- // collection rename honest. This scans indexes, not the embedding blobs.
168
+ // an embedding is (re)written, which is exactly when the chunk vectors would
169
+ // differ — so a matching signature guarantees the cached set is still valid.
170
+ // `documents.rowid` participation via count keeps a bare collection rename
171
+ // honest. This scans indexes, not the embedding blobs.
159
172
  function indexSignature(db, model, collection) {
160
173
  const sql = collection
161
174
  ? `SELECT COUNT(*) AS n,
@@ -184,27 +197,46 @@ function indexSignature(db, model, collection) {
184
197
  const hashDigest = (h >>> 0).toString(16);
185
198
  return `${model}:${collection ?? "*"}:${row.n ?? 0}:${row.embn ?? 0}:${hashDigest}`;
186
199
  }
187
- // Returns the pooled per-doc vector set for the given scope, using the cache
188
- // when the live signature matches and rebuilding (load + mean-pool) otherwise.
189
- // This is the load/compute-avoidance core of the E3 fix: a second call against
190
- // an unchanged index re-uses the pooled vectors instead of re-reading every
191
- // embedding and re-pooling it.
192
- function getPooledSet(db, vaultRoot, model, documentsByPath, collection) {
200
+ // Returns the per-doc chunk vector set for the given scope, using the cache
201
+ // when the live signature matches and rebuilding (load + normalise)
202
+ // otherwise. This is the load-avoidance core of the E3 fix: a second call
203
+ // against an unchanged index re-uses the vectors instead of re-reading every
204
+ // embedding blob.
205
+ function getChunkSet(db, vaultRoot, model, documentsByPath, collection) {
193
206
  const cacheKey = `${vaultRoot} ${model} ${collection ?? "*"}`;
194
207
  const signature = indexSignature(db, model, collection);
195
- const cached = pooledCache.get(cacheKey);
208
+ const cached = chunkSetCache.get(cacheKey);
196
209
  if (cached && cached.signature === signature)
197
210
  return cached;
198
211
  const embeddingsByPath = loadEmbeddingsByPath(db, model, collection);
199
212
  const docs = [];
200
- const unpooledPaths = new Set();
213
+ const unembeddedPaths = new Set();
201
214
  for (const [path, doc] of documentsByPath) {
202
215
  if (collection && doc.collection !== collection)
203
216
  continue;
204
- const chunkVecs = embeddingsByPath.get(path) ?? [];
205
- const pooled = meanPoolL2(chunkVecs);
206
- if (!pooled) {
207
- unpooledPaths.add(path);
217
+ const raw = embeddingsByPath.get(path) ?? [];
218
+ // Normalise each chunk onto the unit sphere (cosine semantics for the
219
+ // clustering); drop zero vectors — they carry no direction to cluster.
220
+ const chunks = [];
221
+ for (const vec of raw) {
222
+ // Single pass per chunk: this runs at chunk scale (~44k on the
223
+ // motivating vault), so the norm is computed once and reused for the
224
+ // scaling rather than recomputed inside a normalize helper.
225
+ let norm = 0;
226
+ for (let i = 0; i < vec.length; i++) {
227
+ const x = vec[i];
228
+ norm += x * x;
229
+ }
230
+ if (norm === 0)
231
+ continue;
232
+ const inv = 1 / Math.sqrt(norm);
233
+ const out = new Float32Array(vec.length);
234
+ for (let i = 0; i < vec.length; i++)
235
+ out[i] = vec[i] * inv;
236
+ chunks.push(out);
237
+ }
238
+ if (chunks.length === 0) {
239
+ unembeddedPaths.add(path);
208
240
  continue;
209
241
  }
210
242
  docs.push({
@@ -212,22 +244,22 @@ function getPooledSet(db, vaultRoot, model, documentsByPath, collection) {
212
244
  title: doc.title,
213
245
  collection: doc.collection,
214
246
  tags: doc.tags,
215
- vector: pooled,
247
+ chunks,
216
248
  });
217
249
  }
218
- const set = { signature, docs, unpooledPaths };
219
- pooledCache.set(cacheKey, set);
250
+ const set = { signature, docs, unembeddedPaths };
251
+ chunkSetCache.set(cacheKey, set);
220
252
  return set;
221
253
  }
222
254
  // Applies the per-caller scope (tags, RBAC) and the doc-has-an-embedded-chunk
223
- // requirement over a pre-pooled set. The collection filter is already applied
224
- // upstream in `getPooledSet` (and pushed into SQL), so it is not re-checked
255
+ // requirement over a pre-loaded set. The collection filter is already applied
256
+ // upstream in `getChunkSet` (and pushed into SQL), so it is not re-checked
225
257
  // here beyond honouring it for the skipped count. Returns the clusterable doc
226
258
  // set and the count of docs the embedding requirement skipped.
227
259
  //
228
260
  // `skipped` must match the pre-cache contract exactly: a doc counts as skipped
229
- // only if it passes collection + tags + RBAC and yet has no pooled vector.
230
- function finalizeScope(pooled, documentsByPath, filters, access) {
261
+ // only if it passes collection + tags + RBAC and yet has no chunk vector.
262
+ function finalizeScope(chunkSet, documentsByPath, filters, access) {
231
263
  const passesTagsAndRbac = (collection, tags) => {
232
264
  if (filters.tags && filters.tags.length > 0) {
233
265
  const hasAll = filters.tags.every((t) => tags.includes(t));
@@ -239,7 +271,7 @@ function finalizeScope(pooled, documentsByPath, filters, access) {
239
271
  return true;
240
272
  };
241
273
  const scoped = [];
242
- for (const doc of pooled.docs) {
274
+ for (const doc of chunkSet.docs) {
243
275
  if (!passesTagsAndRbac(doc.collection, doc.tags))
244
276
  continue;
245
277
  scoped.push({
@@ -247,11 +279,11 @@ function finalizeScope(pooled, documentsByPath, filters, access) {
247
279
  title: doc.title,
248
280
  collection: doc.collection,
249
281
  tags: doc.tags,
250
- vector: doc.vector,
282
+ chunks: doc.chunks,
251
283
  });
252
284
  }
253
285
  let skipped = 0;
254
- for (const path of pooled.unpooledPaths) {
286
+ for (const path of chunkSet.unembeddedPaths) {
255
287
  const doc = documentsByPath.get(path);
256
288
  if (!doc)
257
289
  continue;
@@ -263,15 +295,6 @@ function finalizeScope(pooled, documentsByPath, filters, access) {
263
295
  }
264
296
  return { scoped, skipped };
265
297
  }
266
- // Cosine similarity for L2-normalised vectors == dot product. Used for
267
- // representative-doc ranking against a cluster centroid.
268
- function dotNormalized(a, b) {
269
- let s = 0;
270
- const n = Math.min(a.length, b.length);
271
- for (let i = 0; i < n; i++)
272
- s += a[i] * b[i];
273
- return s;
274
- }
275
298
  // TF-IDF over the cluster: term frequency among the cluster's titles +
276
299
  // tags, divided by the document-frequency across ALL clusters (so a term
277
300
  // that names every theme — e.g. "doc" — doesn't dominate any one of them).
@@ -299,7 +322,7 @@ function buildLabel(clusterDocs, globalDocCount, globalDf, themeIndex) {
299
322
  continue;
300
323
  scored.push({ term, score: freq * idf });
301
324
  }
302
- scored.sort((a, b) => b.score - a.score);
325
+ scored.sort((a, b) => b.score - a.score || a.term.localeCompare(b.term));
303
326
  const top = scored.slice(0, 3).map((s) => s.term);
304
327
  if (top.length > 0)
305
328
  return top.join(" / ");
@@ -346,13 +369,6 @@ function topTagsForCluster(clusterDocs) {
346
369
  .slice(0, RELATED_TAGS_PER_THEME)
347
370
  .map(([t]) => t);
348
371
  }
349
- function representativesForCluster(clusterDocs, centroid) {
350
- return [...clusterDocs]
351
- .map((d) => ({ path: d.path, sim: dotNormalized(d.vector, centroid) }))
352
- .sort((a, b) => b.sim - a.sim || a.path.localeCompare(b.path))
353
- .slice(0, REPRESENTATIVE_DOCS_PER_THEME)
354
- .map((d) => d.path);
355
- }
356
372
  function parseArgs(args) {
357
373
  let k;
358
374
  if (args.k !== undefined) {
@@ -410,86 +426,153 @@ export async function vaultThemes(vaultRoot, args, access) {
410
426
  supersededBy: null,
411
427
  });
412
428
  }
413
- const pooled = getPooledSet(db, vaultRoot, provider.id, documentsByPath, collection);
414
- const { scoped, skipped } = finalizeScope(pooled, documentsByPath, parsed.value, access);
429
+ const chunkSet = getChunkSet(db, vaultRoot, provider.id, documentsByPath, collection);
430
+ const { scoped, skipped } = finalizeScope(chunkSet, documentsByPath, parsed.value, access);
415
431
  if (scoped.length === 0) {
416
432
  return ok({
417
433
  themes: [],
434
+ docMemberships: {},
418
435
  totalDocuments: 0,
436
+ totalChunks: 0,
419
437
  skippedDocuments: skipped,
420
438
  selectedK: 0,
439
+ droppedClusters: 0,
421
440
  clusteredAt: new Date().toISOString(),
422
441
  });
423
442
  }
424
- const vectors = scoped.map((s) => s.vector);
443
+ // Flatten to chunk-level arrays: the clustering input plus the chunk→doc
444
+ // map the distribution aggregation needs.
445
+ const chunkVectors = [];
446
+ const chunkDoc = [];
447
+ for (let d = 0; d < scoped.length; d++) {
448
+ for (const vec of scoped[d].chunks) {
449
+ chunkVectors.push(vec);
450
+ chunkDoc.push(d);
451
+ }
452
+ }
425
453
  const rng = seededRng(THEMES_RNG_SEED);
426
454
  let selectedK;
427
455
  let assignments;
428
- let centroids;
429
456
  if (parsed.value.k !== undefined) {
430
- const result = kmeans(vectors, parsed.value.k, rng, KMEANS_MAX_ITER);
457
+ const result = kmeans(chunkVectors, parsed.value.k, rng, KMEANS_MAX_ITER);
431
458
  selectedK = result.centroids.length;
432
459
  assignments = result.assignments;
433
- centroids = result.centroids;
434
460
  }
435
461
  else {
436
- const result = pickK(vectors, DEFAULT_K_CANDIDATES, rng, KMEANS_MAX_ITER);
462
+ const result = pickK(chunkVectors, DEFAULT_K_CANDIDATES, rng, KMEANS_MAX_ITER, SILHOUETTE_SAMPLE_CAP);
437
463
  selectedK = result.centroids.length;
438
464
  assignments = result.assignments;
439
- centroids = result.centroids;
440
465
  }
441
- // Group docs by cluster.
442
- const byCluster = new Map();
443
- for (let i = 0; i < scoped.length; i++) {
466
+ // Aggregate chunk assignments into per-doc theme distributions (#58).
467
+ const distributions = membershipDistributions(assignments, chunkDoc, scoped.length, MEMBERSHIP_MIN_FRACTION);
468
+ // Group member/primary docs by cluster from the distributions.
469
+ const membersByCluster = new Map();
470
+ const primaryByCluster = new Map();
471
+ for (let d = 0; d < distributions.length; d++) {
472
+ const memberships = distributions[d] ?? [];
473
+ for (let m = 0; m < memberships.length; m++) {
474
+ const { cluster, weight } = memberships[m];
475
+ const list = membersByCluster.get(cluster);
476
+ if (list)
477
+ list.push({ docIndex: d, weight });
478
+ else
479
+ membersByCluster.set(cluster, [{ docIndex: d, weight }]);
480
+ // memberships are weight-desc with deterministic ties: entry 0 IS
481
+ // the argmax/primary.
482
+ if (m === 0) {
483
+ const plist = primaryByCluster.get(cluster);
484
+ if (plist)
485
+ plist.push(d);
486
+ else
487
+ primaryByCluster.set(cluster, [d]);
488
+ }
489
+ }
490
+ }
491
+ // Chunk vectors per cluster for the coherence score.
492
+ const chunksByCluster = new Map();
493
+ for (let i = 0; i < chunkVectors.length; i++) {
444
494
  const c = assignments[i];
445
- const doc = scoped[i];
446
- const list = byCluster.get(c);
495
+ const list = chunksByCluster.get(c);
447
496
  if (list)
448
- list.push(doc);
497
+ list.push(chunkVectors[i]);
449
498
  else
450
- byCluster.set(c, [doc]);
499
+ chunksByCluster.set(c, [chunkVectors[i]]);
500
+ }
501
+ // A chunk-bearing cluster no doc's retained membership points at is a
502
+ // grab-bag of sub-threshold asides — dropped from `themes` by the
503
+ // phantom-theme guard, but COUNTED so the omission is visible (empty
504
+ // k-means clusters from the k-clamp are not "dropped": they never had
505
+ // chunks).
506
+ let droppedClusters = 0;
507
+ for (const clusterId of chunksByCluster.keys()) {
508
+ if (!membersByCluster.has(clusterId))
509
+ droppedClusters += 1;
451
510
  }
452
511
  const globalDf = buildGlobalDf(scoped);
453
- // Secondary memberships: for each doc, find non-primary clusters its
454
- // pooled vector also aligns with. This is the soft-reporting layer on
455
- // top of the hard partition — it does NOT change documentCount, which
456
- // still reflects primary membership only.
457
- const secondaryByCluster = selectSecondaryMemberships(vectors, assignments, centroids, {
458
- delta: SECONDARY_DELTA,
459
- minSimilarity: SECONDARY_MIN_SIMILARITY,
460
- maxPerDoc: SECONDARY_MAX_PER_DOC,
461
- });
462
512
  const themes = [];
463
513
  let themeIndex = 0;
464
- for (const [clusterIdx, clusterDocs] of byCluster) {
465
- if (clusterDocs.length === 0)
466
- continue;
467
- const centroid = centroids[clusterIdx];
468
- if (!centroid)
514
+ // Iterate clusters in index order so labels/fallbacks are deterministic.
515
+ const clusterIds = [...membersByCluster.keys()].sort((a, b) => a - b);
516
+ for (const clusterId of clusterIds) {
517
+ const members = membersByCluster.get(clusterId) ?? [];
518
+ if (members.length === 0)
469
519
  continue;
470
- // Singleton clusters have no pairs to average — return null rather
471
- // than the mathematically-trivial 1.0, which would falsely imply
472
- // tightness.
473
- const coherence = clusterDocs.length < 2 ? null : clusterCoherence(clusterDocs.map((d) => d.vector));
474
- const secondaries = (secondaryByCluster.get(clusterIdx) ?? [])
475
- .slice(0, SECONDARY_DOCS_PER_THEME)
476
- .map((s) => scoped[s.docIndex].path);
520
+ members.sort((a, b) => b.weight - a.weight ||
521
+ scoped[a.docIndex].path.localeCompare(scoped[b.docIndex].path));
522
+ const primaries = new Set(primaryByCluster.get(clusterId) ?? []);
523
+ // Label/tag signal comes from the docs that primarily live here when
524
+ // any do a theme should be named by its residents, not its visitors.
525
+ const primaryDocs = [...primaries].map((d) => scoped[d]);
526
+ const labelDocs = primaryDocs.length > 0 ? primaryDocs : members.map((m) => scoped[m.docIndex]);
527
+ const clusterChunks = chunksByCluster.get(clusterId) ?? [];
528
+ const coherenceChunks = clusterChunks.length > COHERENCE_SAMPLE_CAP
529
+ ? strideSample(clusterChunks.length, COHERENCE_SAMPLE_CAP).map((i) => clusterChunks[i])
530
+ : clusterChunks;
531
+ // A single-chunk theme has no pairs to average — null rather than the
532
+ // mathematically-trivial 1.0, which would falsely imply tightness.
533
+ const coherence = coherenceChunks.length < 2 ? null : clusterCoherence(coherenceChunks);
477
534
  themes.push({
478
- label: buildLabel(clusterDocs, scoped.length, globalDf, themeIndex),
479
- documentCount: clusterDocs.length,
535
+ id: clusterId,
536
+ label: buildLabel(labelDocs, scoped.length, globalDf, themeIndex),
537
+ documentCount: members.length,
538
+ primaryDocumentCount: primaries.size,
480
539
  coherence,
481
- representativeDocs: representativesForCluster(clusterDocs, centroid),
482
- secondaryDocs: secondaries,
483
- relatedTags: topTagsForCluster(clusterDocs),
540
+ // Residents only: a high-weight visitor ranks in `members` but must
541
+ // not appear as a representative AND a secondary of the same theme —
542
+ // the disjointness invariant v1 held and tests pin.
543
+ representativeDocs: members
544
+ .filter((m) => primaries.has(m.docIndex))
545
+ .slice(0, REPRESENTATIVE_DOCS_PER_THEME)
546
+ .map((m) => scoped[m.docIndex].path),
547
+ secondaryDocs: members
548
+ .filter((m) => !primaries.has(m.docIndex))
549
+ .slice(0, SECONDARY_DOCS_PER_THEME)
550
+ .map((m) => scoped[m.docIndex].path),
551
+ relatedTags: topTagsForCluster(labelDocs),
484
552
  });
485
553
  themeIndex += 1;
486
554
  }
487
555
  themes.sort((a, b) => b.documentCount - a.documentCount || a.label.localeCompare(b.label));
556
+ // Cross-cutting docs only: a single-theme doc's distribution is trivial,
557
+ // and listing every path would bloat the payload at vault scale.
558
+ const docMemberships = {};
559
+ for (let d = 0; d < distributions.length; d++) {
560
+ const memberships = distributions[d] ?? [];
561
+ if (memberships.length < 2)
562
+ continue;
563
+ docMemberships[scoped[d].path] = memberships.map((m) => ({
564
+ theme: m.cluster,
565
+ weight: m.weight,
566
+ }));
567
+ }
488
568
  return ok({
489
569
  themes,
570
+ docMemberships,
490
571
  totalDocuments: scoped.length,
572
+ totalChunks: chunkVectors.length,
491
573
  skippedDocuments: skipped,
492
574
  selectedK,
575
+ droppedClusters,
493
576
  clusteredAt: new Date().toISOString(),
494
577
  });
495
578
  }
@@ -505,15 +588,18 @@ export const themesTools = [
505
588
  name: "vault_themes",
506
589
  title: "Cluster vault themes",
507
590
  annotations: { readOnlyHint: true },
508
- description: "Surface thematic clusters across the vault using k-means over " +
509
- "document-pooled embeddings. Each document's chunk vectors are " +
510
- "mean-pooled into one vector, L2-normalised, and clustered. By " +
511
- "default the tool sweeps k {10, 15, 20, 25} and picks the k with " +
512
- "the best mean silhouette; pass `k` to skip the sweep. Each theme " +
513
- "reports a heuristic label (TF-IDF over titles + tags), a coherence " +
514
- "score (mean pairwise cosine inside the cluster), representative " +
515
- "documents nearest the centroid, and the most frequent tags. " +
516
- "Output is deterministic for the same vault.",
591
+ description: "Surface thematic clusters across the vault using k-means over CHUNK " +
592
+ "embeddings, with per-document theme distributions. A document whose " +
593
+ "chunks split across two clusters is a member of both themes " +
594
+ "(docMemberships reports its weights); documentCount is coverage (a " +
595
+ "two-theme doc counts in both) while primaryDocumentCount partitions " +
596
+ "docs by their dominant theme. By default the tool sweeps " +
597
+ "k {10, 15, 20, 25} and picks the k with the best (sampled) mean " +
598
+ "silhouette; pass `k` to skip the sweep. Each theme reports a " +
599
+ "heuristic label (TF-IDF over titles + tags), a coherence score (mean " +
600
+ "pairwise cosine among its chunks), representative documents ranked " +
601
+ "by membership weight, and the most frequent tags. Output is " +
602
+ "deterministic for the same vault.",
517
603
  inputSchema: {
518
604
  type: "object",
519
605
  properties: {