@andre.li/memoark 0.3.1 → 0.3.2

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 (497) hide show
  1. package/README.en.md +388 -69
  2. package/README.md +674 -309
  3. package/README.zh-CN.md +816 -0
  4. package/bin/memoark.mjs +7 -2
  5. package/dist/adapters/store.d.ts.map +1 -1
  6. package/dist/adapters/store.js +6 -5
  7. package/dist/adapters/store.js.map +1 -1
  8. package/dist/cli-helpers.d.ts +12 -0
  9. package/dist/cli-helpers.d.ts.map +1 -0
  10. package/dist/cli-helpers.js +11 -0
  11. package/dist/cli-helpers.js.map +1 -0
  12. package/dist/cli.js +682 -126
  13. package/dist/cli.js.map +1 -1
  14. package/dist/collectors/feishu/chat-name-resolver.d.ts +33 -0
  15. package/dist/collectors/feishu/chat-name-resolver.d.ts.map +1 -0
  16. package/dist/collectors/feishu/chat-name-resolver.js +63 -0
  17. package/dist/collectors/feishu/chat-name-resolver.js.map +1 -0
  18. package/dist/collectors/feishu/collector.d.ts +4 -0
  19. package/dist/collectors/feishu/collector.d.ts.map +1 -1
  20. package/dist/collectors/feishu/collector.js +27 -4
  21. package/dist/collectors/feishu/collector.js.map +1 -1
  22. package/dist/collectors/feishu/docs/blocks.d.ts +25 -0
  23. package/dist/collectors/feishu/docs/blocks.d.ts.map +1 -0
  24. package/dist/collectors/feishu/docs/blocks.js +34 -0
  25. package/dist/collectors/feishu/docs/blocks.js.map +1 -0
  26. package/dist/collectors/feishu/docs/candidate.d.ts +17 -0
  27. package/dist/collectors/feishu/docs/candidate.d.ts.map +1 -0
  28. package/dist/collectors/feishu/docs/candidate.js +36 -0
  29. package/dist/collectors/feishu/docs/candidate.js.map +1 -0
  30. package/dist/collectors/feishu/docs/config.d.ts +41 -0
  31. package/dist/collectors/feishu/docs/config.d.ts.map +1 -0
  32. package/dist/collectors/feishu/docs/config.js +30 -0
  33. package/dist/collectors/feishu/docs/config.js.map +1 -0
  34. package/dist/collectors/feishu/docs/decision.d.ts +14 -0
  35. package/dist/collectors/feishu/docs/decision.d.ts.map +1 -0
  36. package/dist/collectors/feishu/docs/decision.js +43 -0
  37. package/dist/collectors/feishu/docs/decision.js.map +1 -0
  38. package/dist/collectors/feishu/docs/full-builder.d.ts +17 -0
  39. package/dist/collectors/feishu/docs/full-builder.d.ts.map +1 -0
  40. package/dist/collectors/feishu/docs/full-builder.js +136 -0
  41. package/dist/collectors/feishu/docs/full-builder.js.map +1 -0
  42. package/dist/collectors/feishu/docs/hash.d.ts +8 -0
  43. package/dist/collectors/feishu/docs/hash.d.ts.map +1 -0
  44. package/dist/collectors/feishu/docs/hash.js +15 -0
  45. package/dist/collectors/feishu/docs/hash.js.map +1 -0
  46. package/dist/collectors/feishu/docs/ingest.d.ts +54 -0
  47. package/dist/collectors/feishu/docs/ingest.d.ts.map +1 -0
  48. package/dist/collectors/feishu/docs/ingest.js +120 -0
  49. package/dist/collectors/feishu/docs/ingest.js.map +1 -0
  50. package/dist/collectors/feishu/docs/llm-json.d.ts +13 -0
  51. package/dist/collectors/feishu/docs/llm-json.d.ts.map +1 -0
  52. package/dist/collectors/feishu/docs/llm-json.js +40 -0
  53. package/dist/collectors/feishu/docs/llm-json.js.map +1 -0
  54. package/dist/collectors/feishu/docs/pointer-builder.d.ts +7 -0
  55. package/dist/collectors/feishu/docs/pointer-builder.d.ts.map +1 -0
  56. package/dist/collectors/feishu/docs/pointer-builder.js +11 -0
  57. package/dist/collectors/feishu/docs/pointer-builder.js.map +1 -0
  58. package/dist/collectors/feishu/docs/render.d.ts +8 -0
  59. package/dist/collectors/feishu/docs/render.d.ts.map +1 -0
  60. package/dist/collectors/feishu/docs/render.js +105 -0
  61. package/dist/collectors/feishu/docs/render.js.map +1 -0
  62. package/dist/collectors/feishu/docs/run.d.ts +37 -0
  63. package/dist/collectors/feishu/docs/run.d.ts.map +1 -0
  64. package/dist/collectors/feishu/docs/run.js +143 -0
  65. package/dist/collectors/feishu/docs/run.js.map +1 -0
  66. package/dist/collectors/feishu/docs/status.d.ts +16 -0
  67. package/dist/collectors/feishu/docs/status.d.ts.map +1 -0
  68. package/dist/collectors/feishu/docs/status.js +24 -0
  69. package/dist/collectors/feishu/docs/status.js.map +1 -0
  70. package/dist/collectors/feishu/docs/store-writer.d.ts +32 -0
  71. package/dist/collectors/feishu/docs/store-writer.d.ts.map +1 -0
  72. package/dist/collectors/feishu/docs/store-writer.js +71 -0
  73. package/dist/collectors/feishu/docs/store-writer.js.map +1 -0
  74. package/dist/collectors/feishu/docs/toc.d.ts +3 -0
  75. package/dist/collectors/feishu/docs/toc.d.ts.map +1 -0
  76. package/dist/collectors/feishu/docs/toc.js +19 -0
  77. package/dist/collectors/feishu/docs/toc.js.map +1 -0
  78. package/dist/collectors/feishu/docs/triggers.d.ts +7 -0
  79. package/dist/collectors/feishu/docs/triggers.d.ts.map +1 -0
  80. package/dist/collectors/feishu/docs/triggers.js +31 -0
  81. package/dist/collectors/feishu/docs/triggers.js.map +1 -0
  82. package/dist/collectors/feishu/docs/types.d.ts +109 -0
  83. package/dist/collectors/feishu/docs/types.d.ts.map +1 -0
  84. package/dist/collectors/feishu/docs/types.js +2 -0
  85. package/dist/collectors/feishu/docs/types.js.map +1 -0
  86. package/dist/collectors/feishu/docs/upgrade-queue.d.ts +19 -0
  87. package/dist/collectors/feishu/docs/upgrade-queue.d.ts.map +1 -0
  88. package/dist/collectors/feishu/docs/upgrade-queue.js +36 -0
  89. package/dist/collectors/feishu/docs/upgrade-queue.js.map +1 -0
  90. package/dist/collectors/feishu/docs/url-parser.d.ts +3 -0
  91. package/dist/collectors/feishu/docs/url-parser.d.ts.map +1 -0
  92. package/dist/collectors/feishu/docs/url-parser.js +39 -0
  93. package/dist/collectors/feishu/docs/url-parser.js.map +1 -0
  94. package/dist/collectors/feishu/docs/walkers.d.ts +24 -0
  95. package/dist/collectors/feishu/docs/walkers.d.ts.map +1 -0
  96. package/dist/collectors/feishu/docs/walkers.js +90 -0
  97. package/dist/collectors/feishu/docs/walkers.js.map +1 -0
  98. package/dist/collectors/feishu/docs/wiki-resolver.d.ts +15 -0
  99. package/dist/collectors/feishu/docs/wiki-resolver.d.ts.map +1 -0
  100. package/dist/collectors/feishu/docs/wiki-resolver.js +24 -0
  101. package/dist/collectors/feishu/docs/wiki-resolver.js.map +1 -0
  102. package/dist/collectors/feishu/lark-cli-client.d.ts +12 -0
  103. package/dist/collectors/feishu/lark-cli-client.d.ts.map +1 -1
  104. package/dist/collectors/feishu/lark-cli-client.js +37 -2
  105. package/dist/collectors/feishu/lark-cli-client.js.map +1 -1
  106. package/dist/collectors/feishu/lark-cli-identity-backend.d.ts +28 -0
  107. package/dist/collectors/feishu/lark-cli-identity-backend.d.ts.map +1 -0
  108. package/dist/collectors/feishu/lark-cli-identity-backend.js +110 -0
  109. package/dist/collectors/feishu/lark-cli-identity-backend.js.map +1 -0
  110. package/dist/collectors/feishu/self-open-id.d.ts +20 -0
  111. package/dist/collectors/feishu/self-open-id.d.ts.map +1 -0
  112. package/dist/collectors/feishu/self-open-id.js +31 -0
  113. package/dist/collectors/feishu/self-open-id.js.map +1 -0
  114. package/dist/collectors/feishu/sources/dm.d.ts.map +1 -1
  115. package/dist/collectors/feishu/sources/dm.js +4 -0
  116. package/dist/collectors/feishu/sources/dm.js.map +1 -1
  117. package/dist/collectors/feishu/sources/mail.d.ts.map +1 -1
  118. package/dist/collectors/feishu/sources/mail.js +18 -20
  119. package/dist/collectors/feishu/sources/mail.js.map +1 -1
  120. package/dist/collectors/feishu/sources/messages.d.ts +2 -0
  121. package/dist/collectors/feishu/sources/messages.d.ts.map +1 -1
  122. package/dist/collectors/feishu/sources/messages.js +28 -1
  123. package/dist/collectors/feishu/sources/messages.js.map +1 -1
  124. package/dist/collectors/feishu/types.d.ts +37 -3
  125. package/dist/collectors/feishu/types.d.ts.map +1 -1
  126. package/dist/collectors/feishu/types.js.map +1 -1
  127. package/dist/config-center/connection-checks.d.ts.map +1 -1
  128. package/dist/config-center/connection-checks.js +1 -1
  129. package/dist/config-center/connection-checks.js.map +1 -1
  130. package/dist/config-center/schema.d.ts.map +1 -1
  131. package/dist/config-center/schema.js +77 -0
  132. package/dist/config-center/schema.js.map +1 -1
  133. package/dist/consolidator/consolidator.d.ts +13 -1
  134. package/dist/consolidator/consolidator.d.ts.map +1 -1
  135. package/dist/consolidator/consolidator.js +12 -2
  136. package/dist/consolidator/consolidator.js.map +1 -1
  137. package/dist/core/canonicalize.js +5 -1
  138. package/dist/core/canonicalize.js.map +1 -1
  139. package/dist/core/config.d.ts +52 -9
  140. package/dist/core/config.d.ts.map +1 -1
  141. package/dist/core/config.js +86 -24
  142. package/dist/core/config.js.map +1 -1
  143. package/dist/core/env-validation.d.ts +9 -0
  144. package/dist/core/env-validation.d.ts.map +1 -0
  145. package/dist/core/env-validation.js +94 -0
  146. package/dist/core/env-validation.js.map +1 -0
  147. package/dist/core/identity-resolver.d.ts +24 -3
  148. package/dist/core/identity-resolver.d.ts.map +1 -1
  149. package/dist/core/identity-resolver.js +147 -2
  150. package/dist/core/identity-resolver.js.map +1 -1
  151. package/dist/core/person-identity.d.ts +124 -0
  152. package/dist/core/person-identity.d.ts.map +1 -0
  153. package/dist/core/person-identity.js +342 -0
  154. package/dist/core/person-identity.js.map +1 -0
  155. package/dist/core/person-slug.d.ts +21 -0
  156. package/dist/core/person-slug.d.ts.map +1 -0
  157. package/dist/core/person-slug.js +93 -0
  158. package/dist/core/person-slug.js.map +1 -0
  159. package/dist/core/pipeline-factory.d.ts +1 -1
  160. package/dist/core/pipeline-factory.d.ts.map +1 -1
  161. package/dist/core/pipeline-factory.js +8 -3
  162. package/dist/core/pipeline-factory.js.map +1 -1
  163. package/dist/core/pipeline.d.ts +16 -0
  164. package/dist/core/pipeline.d.ts.map +1 -1
  165. package/dist/core/pipeline.js +49 -1
  166. package/dist/core/pipeline.js.map +1 -1
  167. package/dist/core/resource-loader.d.ts +2 -0
  168. package/dist/core/resource-loader.d.ts.map +1 -0
  169. package/dist/core/resource-loader.js +12 -0
  170. package/dist/core/resource-loader.js.map +1 -0
  171. package/dist/core/schemas.d.ts +2981 -309
  172. package/dist/core/schemas.d.ts.map +1 -1
  173. package/dist/core/schemas.js +27 -0
  174. package/dist/core/schemas.js.map +1 -1
  175. package/dist/core/signal-scoring.d.ts.map +1 -1
  176. package/dist/core/signal-scoring.js +5 -1
  177. package/dist/core/signal-scoring.js.map +1 -1
  178. package/dist/core/source-ref.d.ts +4 -0
  179. package/dist/core/source-ref.d.ts.map +1 -0
  180. package/dist/core/source-ref.js +24 -0
  181. package/dist/core/source-ref.js.map +1 -0
  182. package/dist/core/state.d.ts +1 -1
  183. package/dist/core/state.d.ts.map +1 -1
  184. package/dist/core/state.js +3 -2
  185. package/dist/core/state.js.map +1 -1
  186. package/dist/core/types.d.ts +34 -6
  187. package/dist/core/types.d.ts.map +1 -1
  188. package/dist/daemon/reload-manager.d.ts +27 -0
  189. package/dist/daemon/reload-manager.d.ts.map +1 -0
  190. package/dist/daemon/reload-manager.js +67 -0
  191. package/dist/daemon/reload-manager.js.map +1 -0
  192. package/dist/daemon/scheduler.d.ts +9 -1
  193. package/dist/daemon/scheduler.d.ts.map +1 -1
  194. package/dist/daemon/scheduler.js +113 -38
  195. package/dist/daemon/scheduler.js.map +1 -1
  196. package/dist/daemon/serve-runtime.d.ts +31 -0
  197. package/dist/daemon/serve-runtime.d.ts.map +1 -0
  198. package/dist/daemon/serve-runtime.js +230 -0
  199. package/dist/daemon/serve-runtime.js.map +1 -0
  200. package/dist/embedded-assets.generated.d.ts.map +1 -1
  201. package/dist/embedded-assets.generated.js +3 -3
  202. package/dist/embedded-assets.generated.js.map +1 -1
  203. package/dist/extractors/playbook-extractor.d.ts +35 -0
  204. package/dist/extractors/playbook-extractor.d.ts.map +1 -0
  205. package/dist/extractors/playbook-extractor.js +98 -0
  206. package/dist/extractors/playbook-extractor.js.map +1 -0
  207. package/dist/extractors/prompts/examples/agent-session.md +257 -0
  208. package/dist/extractors/prompts/signal-extract.md +199 -0
  209. package/dist/extractors/prompts/system.md +45 -0
  210. package/dist/extractors/signal-extractor.d.ts +2 -1
  211. package/dist/extractors/signal-extractor.d.ts.map +1 -1
  212. package/dist/extractors/signal-extractor.js +99 -7
  213. package/dist/extractors/signal-extractor.js.map +1 -1
  214. package/dist/hooks/handlers.d.ts +21 -0
  215. package/dist/hooks/handlers.d.ts.map +1 -0
  216. package/dist/hooks/handlers.js +22 -0
  217. package/dist/hooks/handlers.js.map +1 -0
  218. package/dist/hooks/inject.d.ts +7 -0
  219. package/dist/hooks/inject.d.ts.map +1 -0
  220. package/dist/hooks/inject.js +18 -0
  221. package/dist/hooks/inject.js.map +1 -0
  222. package/dist/hooks/install.d.ts +14 -0
  223. package/dist/hooks/install.d.ts.map +1 -0
  224. package/dist/hooks/install.js +34 -0
  225. package/dist/hooks/install.js.map +1 -0
  226. package/dist/hooks/output.d.ts +19 -0
  227. package/dist/hooks/output.d.ts.map +1 -0
  228. package/dist/hooks/output.js +13 -0
  229. package/dist/hooks/output.js.map +1 -0
  230. package/dist/hooks/recall-client.d.ts +25 -0
  231. package/dist/hooks/recall-client.d.ts.map +1 -0
  232. package/dist/hooks/recall-client.js +56 -0
  233. package/dist/hooks/recall-client.js.map +1 -0
  234. package/dist/hooks/run-event.d.ts +13 -0
  235. package/dist/hooks/run-event.d.ts.map +1 -0
  236. package/dist/hooks/run-event.js +20 -0
  237. package/dist/hooks/run-event.js.map +1 -0
  238. package/dist/hooks/settings-edit.d.ts +10 -0
  239. package/dist/hooks/settings-edit.d.ts.map +1 -0
  240. package/dist/hooks/settings-edit.js +44 -0
  241. package/dist/hooks/settings-edit.js.map +1 -0
  242. package/dist/hooks/writeback.d.ts +12 -0
  243. package/dist/hooks/writeback.d.ts.map +1 -0
  244. package/dist/hooks/writeback.js +48 -0
  245. package/dist/hooks/writeback.js.map +1 -0
  246. package/dist/install/clients/claude-code.d.ts +3 -0
  247. package/dist/install/clients/claude-code.d.ts.map +1 -0
  248. package/dist/install/clients/claude-code.js +30 -0
  249. package/dist/install/clients/claude-code.js.map +1 -0
  250. package/dist/install/clients/claude-desktop.d.ts +3 -0
  251. package/dist/install/clients/claude-desktop.d.ts.map +1 -0
  252. package/dist/install/clients/claude-desktop.js +31 -0
  253. package/dist/install/clients/claude-desktop.js.map +1 -0
  254. package/dist/install/clients/codex.d.ts +3 -0
  255. package/dist/install/clients/codex.d.ts.map +1 -0
  256. package/dist/install/clients/codex.js +32 -0
  257. package/dist/install/clients/codex.js.map +1 -0
  258. package/dist/install/clients/cursor.d.ts +3 -0
  259. package/dist/install/clients/cursor.d.ts.map +1 -0
  260. package/dist/install/clients/cursor.js +35 -0
  261. package/dist/install/clients/cursor.js.map +1 -0
  262. package/dist/install/clients/hermes.d.ts +3 -0
  263. package/dist/install/clients/hermes.d.ts.map +1 -0
  264. package/dist/install/clients/hermes.js +35 -0
  265. package/dist/install/clients/hermes.js.map +1 -0
  266. package/dist/install/clients/index.d.ts +4 -0
  267. package/dist/install/clients/index.d.ts.map +1 -0
  268. package/dist/install/clients/index.js +18 -0
  269. package/dist/install/clients/index.js.map +1 -0
  270. package/dist/install/clients/windsurf.d.ts +3 -0
  271. package/dist/install/clients/windsurf.d.ts.map +1 -0
  272. package/dist/install/clients/windsurf.js +32 -0
  273. package/dist/install/clients/windsurf.js.map +1 -0
  274. package/dist/install/command.d.ts +14 -0
  275. package/dist/install/command.d.ts.map +1 -0
  276. package/dist/install/command.js +34 -0
  277. package/dist/install/command.js.map +1 -0
  278. package/dist/install/directive.d.ts +7 -0
  279. package/dist/install/directive.d.ts.map +1 -0
  280. package/dist/install/directive.js +31 -0
  281. package/dist/install/directive.js.map +1 -0
  282. package/dist/install/index.d.ts +26 -0
  283. package/dist/install/index.d.ts.map +1 -0
  284. package/dist/install/index.js +117 -0
  285. package/dist/install/index.js.map +1 -0
  286. package/dist/install/json-config.d.ts +11 -0
  287. package/dist/install/json-config.d.ts.map +1 -0
  288. package/dist/install/json-config.js +39 -0
  289. package/dist/install/json-config.js.map +1 -0
  290. package/dist/install/marked-block.d.ts +11 -0
  291. package/dist/install/marked-block.d.ts.map +1 -0
  292. package/dist/install/marked-block.js +34 -0
  293. package/dist/install/marked-block.js.map +1 -0
  294. package/dist/install/skill.d.ts +4 -0
  295. package/dist/install/skill.d.ts.map +1 -0
  296. package/dist/install/skill.js +61 -0
  297. package/dist/install/skill.js.map +1 -0
  298. package/dist/install/toml-config.d.ts +4 -0
  299. package/dist/install/toml-config.d.ts.map +1 -0
  300. package/dist/install/toml-config.js +51 -0
  301. package/dist/install/toml-config.js.map +1 -0
  302. package/dist/install/types.d.ts +37 -0
  303. package/dist/install/types.d.ts.map +1 -0
  304. package/dist/install/types.js +4 -0
  305. package/dist/install/types.js.map +1 -0
  306. package/dist/install/yaml-config.d.ts +4 -0
  307. package/dist/install/yaml-config.d.ts.map +1 -0
  308. package/dist/install/yaml-config.js +18 -0
  309. package/dist/install/yaml-config.js.map +1 -0
  310. package/dist/processors/privacy.d.ts +4 -1
  311. package/dist/processors/privacy.d.ts.map +1 -1
  312. package/dist/processors/privacy.js +5 -3
  313. package/dist/processors/privacy.js.map +1 -1
  314. package/dist/profile/accumulate.d.ts +28 -0
  315. package/dist/profile/accumulate.d.ts.map +1 -0
  316. package/dist/profile/accumulate.js +48 -0
  317. package/dist/profile/accumulate.js.map +1 -0
  318. package/dist/profile/behavior.d.ts +32 -0
  319. package/dist/profile/behavior.d.ts.map +1 -0
  320. package/dist/profile/behavior.js +122 -0
  321. package/dist/profile/behavior.js.map +1 -0
  322. package/dist/profile/four-color.d.ts +12 -0
  323. package/dist/profile/four-color.d.ts.map +1 -0
  324. package/dist/profile/four-color.js +39 -0
  325. package/dist/profile/four-color.js.map +1 -0
  326. package/dist/profile/profile-synth.d.ts +27 -0
  327. package/dist/profile/profile-synth.d.ts.map +1 -0
  328. package/dist/profile/profile-synth.js +174 -0
  329. package/dist/profile/profile-synth.js.map +1 -0
  330. package/dist/profile/types.d.ts +84 -0
  331. package/dist/profile/types.d.ts.map +1 -0
  332. package/dist/profile/types.js +11 -0
  333. package/dist/profile/types.js.map +1 -0
  334. package/dist/server/api.d.ts +8 -2
  335. package/dist/server/api.d.ts.map +1 -1
  336. package/dist/server/api.js +69 -34
  337. package/dist/server/api.js.map +1 -1
  338. package/dist/server/backfill-routes.d.ts.map +1 -1
  339. package/dist/server/backfill-routes.js +14 -1
  340. package/dist/server/backfill-routes.js.map +1 -1
  341. package/dist/server/chat-name-refresh-job.d.ts +33 -0
  342. package/dist/server/chat-name-refresh-job.d.ts.map +1 -0
  343. package/dist/server/chat-name-refresh-job.js +120 -0
  344. package/dist/server/chat-name-refresh-job.js.map +1 -0
  345. package/dist/server/chat-name-routes.d.ts +13 -0
  346. package/dist/server/chat-name-routes.d.ts.map +1 -0
  347. package/dist/server/chat-name-routes.js +81 -0
  348. package/dist/server/chat-name-routes.js.map +1 -0
  349. package/dist/server/config-routes.d.ts +2 -0
  350. package/dist/server/config-routes.d.ts.map +1 -1
  351. package/dist/server/config-routes.js +2 -1
  352. package/dist/server/config-routes.js.map +1 -1
  353. package/dist/server/mcp-http.d.ts +26 -0
  354. package/dist/server/mcp-http.d.ts.map +1 -0
  355. package/dist/server/mcp-http.js +102 -0
  356. package/dist/server/mcp-http.js.map +1 -0
  357. package/dist/server/mcp.d.ts +191 -25
  358. package/dist/server/mcp.d.ts.map +1 -1
  359. package/dist/server/mcp.js +1111 -68
  360. package/dist/server/mcp.js.map +1 -1
  361. package/dist/server/open-browser.d.ts +3 -0
  362. package/dist/server/open-browser.d.ts.map +1 -0
  363. package/dist/server/open-browser.js +12 -0
  364. package/dist/server/open-browser.js.map +1 -0
  365. package/dist/server/runtime.d.ts +13 -0
  366. package/dist/server/runtime.d.ts.map +1 -0
  367. package/dist/server/runtime.js +27 -0
  368. package/dist/server/runtime.js.map +1 -0
  369. package/dist/server/setup-server.d.ts.map +1 -1
  370. package/dist/server/setup-server.js +8 -11
  371. package/dist/server/setup-server.js.map +1 -1
  372. package/dist/setup/connection-tests.d.ts +1 -1
  373. package/dist/setup/connection-tests.d.ts.map +1 -1
  374. package/dist/setup/connection-tests.js +4 -2
  375. package/dist/setup/connection-tests.js.map +1 -1
  376. package/dist/setup/generate-config.d.ts.map +1 -1
  377. package/dist/setup/generate-config.js +31 -1
  378. package/dist/setup/generate-config.js.map +1 -1
  379. package/dist/setup/init-wizard.d.ts +1 -0
  380. package/dist/setup/init-wizard.d.ts.map +1 -1
  381. package/dist/setup/init-wizard.js +38 -21
  382. package/dist/setup/init-wizard.js.map +1 -1
  383. package/dist/setup/validate-config.d.ts +5 -1
  384. package/dist/setup/validate-config.d.ts.map +1 -1
  385. package/dist/setup/validate-config.js +18 -0
  386. package/dist/setup/validate-config.js.map +1 -1
  387. package/dist/store/data-dir-lock.d.ts +15 -0
  388. package/dist/store/data-dir-lock.d.ts.map +1 -0
  389. package/dist/store/data-dir-lock.js +96 -0
  390. package/dist/store/data-dir-lock.js.map +1 -0
  391. package/dist/store/database.d.ts +2 -0
  392. package/dist/store/database.d.ts.map +1 -1
  393. package/dist/store/database.js +23 -10
  394. package/dist/store/database.js.map +1 -1
  395. package/dist/store/graph.d.ts +22 -0
  396. package/dist/store/graph.d.ts.map +1 -1
  397. package/dist/store/graph.js +97 -7
  398. package/dist/store/graph.js.map +1 -1
  399. package/dist/store/migrations/index.d.ts.map +1 -1
  400. package/dist/store/migrations/index.js +52 -0
  401. package/dist/store/migrations/index.js.map +1 -1
  402. package/dist/store/pages.d.ts +7 -0
  403. package/dist/store/pages.d.ts.map +1 -1
  404. package/dist/store/pages.js +56 -1
  405. package/dist/store/pages.js.map +1 -1
  406. package/dist/store/person-behavior.d.ts +28 -0
  407. package/dist/store/person-behavior.d.ts.map +1 -0
  408. package/dist/store/person-behavior.js +127 -0
  409. package/dist/store/person-behavior.js.map +1 -0
  410. package/dist/store/pglite-assets.d.ts +15 -0
  411. package/dist/store/pglite-assets.d.ts.map +1 -0
  412. package/dist/store/pglite-assets.js +47 -0
  413. package/dist/store/pglite-assets.js.map +1 -0
  414. package/dist/store/query-rewrite.d.ts +28 -0
  415. package/dist/store/query-rewrite.d.ts.map +1 -0
  416. package/dist/store/query-rewrite.js +97 -0
  417. package/dist/store/query-rewrite.js.map +1 -0
  418. package/dist/store/schema.sql +107 -0
  419. package/dist/store/search.d.ts +36 -8
  420. package/dist/store/search.d.ts.map +1 -1
  421. package/dist/store/search.js +188 -76
  422. package/dist/store/search.js.map +1 -1
  423. package/dist/store/tags.d.ts.map +1 -1
  424. package/dist/store/tags.js +6 -2
  425. package/dist/store/tags.js.map +1 -1
  426. package/dist/store/timeline.d.ts +13 -1
  427. package/dist/store/timeline.d.ts.map +1 -1
  428. package/dist/store/timeline.js +134 -4
  429. package/dist/store/timeline.js.map +1 -1
  430. package/dist/store/trgm-search.d.ts +13 -0
  431. package/dist/store/trgm-search.d.ts.map +1 -0
  432. package/dist/store/trgm-search.js +53 -0
  433. package/dist/store/trgm-search.js.map +1 -0
  434. package/dist/store/wikilink.d.ts +17 -0
  435. package/dist/store/wikilink.d.ts.map +1 -0
  436. package/dist/store/wikilink.js +58 -0
  437. package/dist/store/wikilink.js.map +1 -0
  438. package/dist/sync/obsidian.d.ts.map +1 -1
  439. package/dist/sync/obsidian.js +5 -1
  440. package/dist/sync/obsidian.js.map +1 -1
  441. package/dist/synth/cache.d.ts +17 -0
  442. package/dist/synth/cache.d.ts.map +1 -0
  443. package/dist/synth/cache.js +67 -0
  444. package/dist/synth/cache.js.map +1 -0
  445. package/dist/synth/citations.d.ts +12 -0
  446. package/dist/synth/citations.d.ts.map +1 -0
  447. package/dist/synth/citations.js +28 -0
  448. package/dist/synth/citations.js.map +1 -0
  449. package/dist/synth/context.d.ts +10 -0
  450. package/dist/synth/context.d.ts.map +1 -0
  451. package/dist/synth/context.js +67 -0
  452. package/dist/synth/context.js.map +1 -0
  453. package/dist/synth/engine.d.ts +16 -0
  454. package/dist/synth/engine.d.ts.map +1 -0
  455. package/dist/synth/engine.js +111 -0
  456. package/dist/synth/engine.js.map +1 -0
  457. package/dist/synth/gaps.d.ts +17 -0
  458. package/dist/synth/gaps.d.ts.map +1 -0
  459. package/dist/synth/gaps.js +57 -0
  460. package/dist/synth/gaps.js.map +1 -0
  461. package/dist/synth/index.d.ts +6 -0
  462. package/dist/synth/index.d.ts.map +1 -0
  463. package/dist/synth/index.js +6 -0
  464. package/dist/synth/index.js.map +1 -0
  465. package/dist/synth/intent.d.ts +6 -0
  466. package/dist/synth/intent.d.ts.map +1 -0
  467. package/dist/synth/intent.js +13 -0
  468. package/dist/synth/intent.js.map +1 -0
  469. package/dist/synth/intents/daily-report.d.ts +7 -0
  470. package/dist/synth/intents/daily-report.d.ts.map +1 -0
  471. package/dist/synth/intents/daily-report.js +37 -0
  472. package/dist/synth/intents/daily-report.js.map +1 -0
  473. package/dist/synth/intents/index.d.ts +2 -0
  474. package/dist/synth/intents/index.d.ts.map +1 -0
  475. package/dist/synth/intents/index.js +12 -0
  476. package/dist/synth/intents/index.js.map +1 -0
  477. package/dist/synth/intents/person-strategy.d.ts +40 -0
  478. package/dist/synth/intents/person-strategy.d.ts.map +1 -0
  479. package/dist/synth/intents/person-strategy.js +66 -0
  480. package/dist/synth/intents/person-strategy.js.map +1 -0
  481. package/dist/synth/intents/recall.d.ts +8 -0
  482. package/dist/synth/intents/recall.d.ts.map +1 -0
  483. package/dist/synth/intents/recall.js +26 -0
  484. package/dist/synth/intents/recall.js.map +1 -0
  485. package/dist/synth/intents/troubleshoot.d.ts +11 -0
  486. package/dist/synth/intents/troubleshoot.d.ts.map +1 -0
  487. package/dist/synth/intents/troubleshoot.js +66 -0
  488. package/dist/synth/intents/troubleshoot.js.map +1 -0
  489. package/dist/synth/scope.d.ts +13 -0
  490. package/dist/synth/scope.d.ts.map +1 -0
  491. package/dist/synth/scope.js +139 -0
  492. package/dist/synth/scope.js.map +1 -0
  493. package/dist/synth/types.d.ts +117 -0
  494. package/dist/synth/types.d.ts.map +1 -0
  495. package/dist/synth/types.js +2 -0
  496. package/dist/synth/types.js.map +1 -0
  497. package/package.json +18 -6
@@ -0,0 +1,342 @@
1
+ /**
2
+ * Person identity — Layer 1: typed handle/alias resolution.
3
+ *
4
+ * A person is anchored by a human-readable canonical page slug (e.g.
5
+ * `person/li-yinglong`). Every other way the person is referred to — a Feishu
6
+ * open id, an email, an exact display name, a nickname / 花名 — is a *handle*
7
+ * stored in `person_handles` and pointing at that canonical slug.
8
+ *
9
+ * Resolution rules (mirrors openhuman's `people` resolver contract):
10
+ * - Strong handles (feishu_open_id / email / name / slug) auto-resolve and
11
+ * are recorded automatically during canonicalization.
12
+ * - Weak handles (nickname / 花名) are NEVER created automatically — they
13
+ * only enter the table via an explicit `addAlias` / `link`, so an
14
+ * ambiguous nickname like "龙哥" can never silently merge two people.
15
+ * - Merging two existing person pages is always an explicit operation.
16
+ */
17
+ import { stringify as stringifyYaml } from "yaml";
18
+ /** Default strength for a handle kind. Nicknames are weak; everything else strong. */
19
+ export function defaultStrength(kind) {
20
+ return kind === "nickname" ? "weak" : "strong";
21
+ }
22
+ /**
23
+ * Canonicalize a handle value for storage and lookup. Emails and open ids are
24
+ * lowercased; names and nicknames are whitespace-collapsed; slugs are passed
25
+ * through (already normalized lowercase).
26
+ */
27
+ export function canonicalizeHandleValue(kind, value) {
28
+ const trimmed = value.trim();
29
+ switch (kind) {
30
+ case "email":
31
+ case "feishu_open_id":
32
+ return trimmed.toLowerCase();
33
+ case "name":
34
+ case "nickname":
35
+ return trimmed.replace(/\s+/g, " ");
36
+ case "slug":
37
+ return trimmed;
38
+ }
39
+ }
40
+ const OPEN_ID_RE = /\bou_[a-zA-Z0-9]+\b/;
41
+ const EMAIL_RE = /[^\s@]+@[^\s@]+\.[^\s@]+/;
42
+ /** Canonical slug of the special "me" identity page (Spec 9 §4.1). */
43
+ export const ME_SLUG = "entities/me";
44
+ export class PersonIdentityStore {
45
+ db;
46
+ stores;
47
+ extra;
48
+ constructor(db, stores, extra) {
49
+ this.db = db;
50
+ this.stores = stores;
51
+ this.extra = extra;
52
+ }
53
+ /** Resolve a single handle to its canonical person slug, or null. */
54
+ async resolveHandle(kind, value) {
55
+ const v = canonicalizeHandleValue(kind, value);
56
+ const r = await this.db.query("SELECT canonical_slug FROM person_handles WHERE kind = $1 AND value = $2", [kind, v]);
57
+ return r.rows[0]?.canonical_slug ?? null;
58
+ }
59
+ /**
60
+ * Resolve an extraction's (name, modelSlug) to a canonical slug via known
61
+ * handles. Tries strong handles first (slug, embedded open id / email, exact
62
+ * name), then any explicitly-linked nickname. Returns null if nothing known.
63
+ */
64
+ async resolveForExtraction(name, modelSlug) {
65
+ const bySlug = await this.resolveHandle("slug", modelSlug);
66
+ if (bySlug)
67
+ return bySlug;
68
+ const openId = name.match(OPEN_ID_RE)?.[0];
69
+ if (openId) {
70
+ const hit = await this.resolveHandle("feishu_open_id", openId);
71
+ if (hit)
72
+ return hit;
73
+ }
74
+ const email = name.match(EMAIL_RE)?.[0];
75
+ if (email) {
76
+ const hit = await this.resolveHandle("email", email);
77
+ if (hit)
78
+ return hit;
79
+ }
80
+ const byName = await this.resolveHandle("name", name);
81
+ if (byName)
82
+ return byName;
83
+ // Weak handles resolve too, but only because they were explicitly linked.
84
+ return this.resolveHandle("nickname", name);
85
+ }
86
+ /**
87
+ * Record the strong handles implied by a freshly-canonicalized person
88
+ * (name → slug, slug → slug, and any embedded open id). Idempotent and
89
+ * non-destructive: existing rows are left untouched.
90
+ */
91
+ async recordCanonical(name, canonicalSlug) {
92
+ await this.insertHandle("name", name, canonicalSlug, "strong", true);
93
+ await this.insertHandle("slug", canonicalSlug, canonicalSlug, "strong", true);
94
+ const openId = name.match(OPEN_ID_RE)?.[0];
95
+ if (openId) {
96
+ await this.insertHandle("feishu_open_id", openId, canonicalSlug, "strong", true);
97
+ }
98
+ }
99
+ /**
100
+ * Ensure the special `entities/me` self-identity page exists (Spec 9 §4.1).
101
+ * Idempotent — returns the canonical slug; creates a minimal person page the
102
+ * user can hand-edit (role / company / team / handles) when absent.
103
+ */
104
+ async ensureEntitiesMe() {
105
+ const pages = this.requirePages();
106
+ const existing = await pages.getPage(ME_SLUG);
107
+ if (!existing) {
108
+ const content = `---\ntitle: Me\ntype: person\nis_me: true\n---\n# Me\n\n(自我身份页:可手编你的角色 / 公司 / 团队 / 项目 / 沟通偏好 / 各平台 handle。)\n`;
109
+ await pages.putPage(ME_SLUG, content);
110
+ }
111
+ await this.insertHandle("slug", ME_SLUG, ME_SLUG, "strong", true);
112
+ return ME_SLUG;
113
+ }
114
+ /**
115
+ * Register one of the current user's own handles (open_id / email / name),
116
+ * pointing it at `entities/me` as a strong handle (Spec 9 §4.2 manual path).
117
+ * Ensures the me page exists first.
118
+ *
119
+ * Spike (Spec 9 §4.2): auto-resolving the self open_id via
120
+ * `resolveSelfOpenId()` (src/collectors/feishu/self-open-id.ts) is wired as a
121
+ * best-effort enhancement only — it depends on a live lark-cli user-level
122
+ * OAuth session (user_access_token, separate from the bot token). That session
123
+ * is not available in CI/test, so only this manual path is exercised by tests
124
+ * and is the reliable default. Callers may best-effort call resolveSelfOpenId
125
+ * and feed the result here when a real session exists.
126
+ */
127
+ async registerSelfHandle(kind, value) {
128
+ await this.ensureEntitiesMe();
129
+ await this.insertHandle(kind, value, ME_SLUG, "strong", false);
130
+ }
131
+ /**
132
+ * Whether `slugOrHandle` is the current user (Spec 9 §4.3). Accepts either a
133
+ * canonical slug (e.g. `entities/me`, `people/alice`) or a raw handle value
134
+ * (open_id / email / name / nickname); resolves to a canonical slug and
135
+ * compares against `entities/me`.
136
+ */
137
+ async isMe(slugOrHandle) {
138
+ if (slugOrHandle === ME_SLUG)
139
+ return true;
140
+ // direct slug handle
141
+ if ((await this.resolveHandle("slug", slugOrHandle)) === ME_SLUG)
142
+ return true;
143
+ // try the strong handle kinds it could be
144
+ for (const kind of ["feishu_open_id", "email", "name", "nickname"]) {
145
+ if ((await this.resolveHandle(kind, slugOrHandle)) === ME_SLUG)
146
+ return true;
147
+ }
148
+ return false;
149
+ }
150
+ /**
151
+ * Explicitly attach a handle (alias) to a canonical person. Defaults to the
152
+ * kind's natural strength. Throws if the handle already points at a
153
+ * different person (use `merge` / `removeHandle` to reassign).
154
+ */
155
+ async addAlias(canonicalSlug, kind, value, strength) {
156
+ const v = canonicalizeHandleValue(kind, value);
157
+ const existing = await this.resolveHandle(kind, v);
158
+ if (existing && existing !== canonicalSlug) {
159
+ throw new Error(`handle ${kind}:${v} already maps to '${existing}'; remove it or merge '${existing}' into '${canonicalSlug}' first`);
160
+ }
161
+ await this.insertHandle(kind, v, canonicalSlug, strength ?? defaultStrength(kind), false);
162
+ // Reflect the alias into the page frontmatter so it's visible + searchable.
163
+ if (this.stores?.pages) {
164
+ await this.appendAliasesToPage(canonicalSlug, [v]);
165
+ }
166
+ }
167
+ /** List all handles attached to a canonical person. */
168
+ async listHandles(canonicalSlug) {
169
+ const r = await this.db.query("SELECT kind, value, canonical_slug, strength FROM person_handles WHERE canonical_slug = $1 ORDER BY kind, value", [canonicalSlug]);
170
+ return r.rows;
171
+ }
172
+ /** Remove a handle by (kind, value). */
173
+ async removeHandle(kind, value) {
174
+ const v = canonicalizeHandleValue(kind, value);
175
+ await this.db.query("DELETE FROM person_handles WHERE kind = $1 AND value = $2", [kind, v]);
176
+ }
177
+ /**
178
+ * Rename a person's canonical slug (correct a wrong canonicalization).
179
+ * Renames the page, re-points handles + identity_cache, leaves the old slug
180
+ * behind as a resolvable alias.
181
+ */
182
+ async recanonicalize(oldSlug, newSlug) {
183
+ if (oldSlug === newSlug)
184
+ return;
185
+ const pages = this.requirePages();
186
+ const page = await pages.getPage(oldSlug);
187
+ if (!page)
188
+ throw new Error(`person page '${oldSlug}' not found`);
189
+ if (await pages.getPage(newSlug)) {
190
+ throw new Error(`'${newSlug}' already exists; use merge('${oldSlug}', '${newSlug}') instead`);
191
+ }
192
+ await this.db.query("UPDATE pages SET slug = $1, updated_at = NOW() WHERE slug = $2", [
193
+ newSlug,
194
+ oldSlug,
195
+ ]);
196
+ await this.db.query("UPDATE person_handles SET canonical_slug = $1 WHERE canonical_slug = $2", [
197
+ newSlug,
198
+ oldSlug,
199
+ ]);
200
+ await this.insertHandle("slug", oldSlug, newSlug, "strong", false);
201
+ await this.repointIdentityCache(oldSlug, newSlug);
202
+ const renamed = await pages.getPage(newSlug);
203
+ if (renamed)
204
+ await this.appendAliasesToPage(newSlug, [oldSlug]);
205
+ }
206
+ /**
207
+ * Merge person page `fromSlug` into `intoSlug`. Re-points links, timeline
208
+ * entries, and tags; folds the body and aliases into the target; records the
209
+ * old slug + handles as aliases of the target; deletes the old page.
210
+ *
211
+ * Note: the old page's embeddings (chunks) are dropped with it — run
212
+ * `memoark embed` afterwards to re-embed the folded content.
213
+ */
214
+ async merge(fromSlug, intoSlug) {
215
+ if (fromSlug === intoSlug)
216
+ throw new Error("cannot merge a person into itself");
217
+ const pages = this.requirePages();
218
+ const from = await pages.getPage(fromSlug);
219
+ const into = await pages.getPage(intoSlug);
220
+ if (!from)
221
+ throw new Error(`person page '${fromSlug}' not found`);
222
+ if (!into)
223
+ throw new Error(`person page '${intoSlug}' not found`);
224
+ const fromId = from.id;
225
+ const intoId = into.id;
226
+ // Re-point outgoing links, skipping rows that would violate the
227
+ // UNIQUE(from_page_id, to_page_id, link_type) constraint, then drop dups.
228
+ await this.db.query(`UPDATE links SET from_page_id = $1
229
+ WHERE from_page_id = $2
230
+ AND NOT EXISTS (
231
+ SELECT 1 FROM links l2
232
+ WHERE l2.from_page_id = $1 AND l2.to_page_id = links.to_page_id
233
+ AND l2.link_type = links.link_type
234
+ )`, [intoId, fromId]);
235
+ await this.db.query("DELETE FROM links WHERE from_page_id = $1", [fromId]);
236
+ // Re-point incoming links.
237
+ await this.db.query(`UPDATE links SET to_page_id = $1
238
+ WHERE to_page_id = $2
239
+ AND NOT EXISTS (
240
+ SELECT 1 FROM links l2
241
+ WHERE l2.to_page_id = $1 AND l2.from_page_id = links.from_page_id
242
+ AND l2.link_type = links.link_type
243
+ )`, [intoId, fromId]);
244
+ await this.db.query("DELETE FROM links WHERE to_page_id = $1", [fromId]);
245
+ // Drop any self-link created by the merge.
246
+ await this.db.query("DELETE FROM links WHERE from_page_id = $1 AND to_page_id = $1", [intoId]);
247
+ // Re-point timeline entries (UNIQUE(page_id, date, summary)).
248
+ await this.db.query(`UPDATE timeline_entries SET page_id = $1
249
+ WHERE page_id = $2
250
+ AND NOT EXISTS (
251
+ SELECT 1 FROM timeline_entries t2
252
+ WHERE t2.page_id = $1 AND t2.date = timeline_entries.date
253
+ AND t2.summary = timeline_entries.summary
254
+ )`, [intoId, fromId]);
255
+ await this.db.query("DELETE FROM timeline_entries WHERE page_id = $1", [fromId]);
256
+ // Re-point tags (UNIQUE(page_id, tag)).
257
+ await this.db.query(`UPDATE tags SET page_id = $1
258
+ WHERE page_id = $2
259
+ AND NOT EXISTS (SELECT 1 FROM tags t2 WHERE t2.page_id = $1 AND t2.tag = tags.tag)`, [intoId, fromId]);
260
+ await this.db.query("DELETE FROM tags WHERE page_id = $1", [fromId]);
261
+ // Fold body + aliases into the target.
262
+ const aliasValues = new Set([
263
+ ...this.frontmatterAliases(into),
264
+ ...this.frontmatterAliases(from),
265
+ fromSlug,
266
+ ]);
267
+ const foldedBody = from.compiled_truth.trim().length > 0
268
+ ? `${into.compiled_truth.trimEnd()}\n\n## Merged from ${fromSlug}\n\n${from.compiled_truth.trim()}`
269
+ : into.compiled_truth;
270
+ // Spec 8: the merged-into person's cached communication profile is now stale
271
+ // (it was computed before the behavior counters were folded in) — drop it so
272
+ // the next nightly synthesis recomputes from the combined evidence.
273
+ const { profile: _staleProfile, ...intoFm } = into.frontmatter;
274
+ await this.writePage({ ...into, frontmatter: intoFm }, foldedBody, [...aliasValues]);
275
+ // Spec 8: fold the behavior-layer counters (additive) into the target.
276
+ if (this.extra?.behavior) {
277
+ await this.extra.behavior.merge(fromSlug, intoSlug);
278
+ }
279
+ // Re-point handle + identity-cache mappings, then drop the old page.
280
+ await this.db.query("UPDATE person_handles SET canonical_slug = $1 WHERE canonical_slug = $2", [
281
+ intoSlug,
282
+ fromSlug,
283
+ ]);
284
+ await this.insertHandle("slug", fromSlug, intoSlug, "strong", false);
285
+ await this.repointIdentityCache(fromSlug, intoSlug);
286
+ await pages.deletePage(fromSlug);
287
+ }
288
+ // ── internals ──────────────────────────────────────────────────────────
289
+ requirePages() {
290
+ if (!this.stores?.pages) {
291
+ throw new Error("PersonIdentityStore: page operations require a PageStore");
292
+ }
293
+ return this.stores.pages;
294
+ }
295
+ async insertHandle(kind, value, canonicalSlug, strength, ignoreConflict) {
296
+ const v = canonicalizeHandleValue(kind, value);
297
+ if (ignoreConflict) {
298
+ await this.db.query(`INSERT INTO person_handles (kind, value, canonical_slug, strength)
299
+ VALUES ($1, $2, $3, $4)
300
+ ON CONFLICT (kind, value) DO NOTHING`, [kind, v, canonicalSlug, strength]);
301
+ }
302
+ else {
303
+ await this.db.query(`INSERT INTO person_handles (kind, value, canonical_slug, strength)
304
+ VALUES ($1, $2, $3, $4)
305
+ ON CONFLICT (kind, value) DO UPDATE SET
306
+ canonical_slug = EXCLUDED.canonical_slug,
307
+ strength = EXCLUDED.strength`, [kind, v, canonicalSlug, strength]);
308
+ }
309
+ }
310
+ async repointIdentityCache(oldSlug, newSlug) {
311
+ await this.db.query("UPDATE identity_cache SET display_name = $1 WHERE platform = 'canonical' AND display_name = $2", [newSlug, oldSlug]);
312
+ await this.db.query(`INSERT INTO identity_cache (platform, external_id, display_name, slug_hint)
313
+ VALUES ('canonical', $1, $2, $1)
314
+ ON CONFLICT (platform, external_id) DO UPDATE SET display_name = EXCLUDED.display_name`, [oldSlug, newSlug]);
315
+ }
316
+ frontmatterAliases(page) {
317
+ const a = page.frontmatter.aliases;
318
+ return Array.isArray(a) ? a.map(String) : [];
319
+ }
320
+ async appendAliasesToPage(slug, newAliases) {
321
+ const pages = this.requirePages();
322
+ const page = await pages.getPage(slug);
323
+ if (!page)
324
+ return;
325
+ const merged = new Set([...this.frontmatterAliases(page), ...newAliases]);
326
+ await this.writePage(page, page.compiled_truth, [...merged]);
327
+ }
328
+ async writePage(page, body, aliases) {
329
+ const pages = this.requirePages();
330
+ const { aliases: _drop, ...rest } = page.frontmatter;
331
+ const fm = {
332
+ title: page.title,
333
+ type: page.type,
334
+ ...rest,
335
+ };
336
+ if (aliases.length > 0)
337
+ fm.aliases = aliases;
338
+ const content = `---\n${stringifyYaml(fm)}---\n${body}`;
339
+ await pages.putPage(page.slug, content);
340
+ }
341
+ }
342
+ //# sourceMappingURL=person-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"person-identity.js","sourceRoot":"","sources":["../../src/core/person-identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Convert a person's name to a canonical slug.
3
+ *
4
+ * Chinese names: person/{family}-{given} (pinyin, lowercase)
5
+ * Latin names: person/{kebab-case}
6
+ * Feishu open IDs: person/{ou_<id>} (preserve underscore)
7
+ *
8
+ * Returns null if:
9
+ * - Input is empty or whitespace only
10
+ * - Name contains non-CJK, non-Latin scripts (e.g. Arabic, Cyrillic)
11
+ *
12
+ * @example
13
+ * toPersonCanonicalSlug("王建都") // "person/wang-jiandu"
14
+ * toPersonCanonicalSlug("李明") // "person/li-ming"
15
+ * toPersonCanonicalSlug("Alice Smith") // "person/alice-smith"
16
+ * toPersonCanonicalSlug("Sylar") // "person/sylar"
17
+ * toPersonCanonicalSlug("ou_10d417bea2263b13b0112f8067334323") // "person/ou_10d417..."
18
+ * toPersonCanonicalSlug("أحمد") // null
19
+ */
20
+ export declare function toPersonCanonicalSlug(name: string): string | null;
21
+ //# sourceMappingURL=person-slug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"person-slug.d.ts","sourceRoot":"","sources":["../../src/core/person-slug.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkDjE"}
@@ -0,0 +1,93 @@
1
+ import { pinyin } from "pinyin-pro";
2
+ /**
3
+ * Convert a person's name to a canonical slug.
4
+ *
5
+ * Chinese names: person/{family}-{given} (pinyin, lowercase)
6
+ * Latin names: person/{kebab-case}
7
+ * Feishu open IDs: person/{ou_<id>} (preserve underscore)
8
+ *
9
+ * Returns null if:
10
+ * - Input is empty or whitespace only
11
+ * - Name contains non-CJK, non-Latin scripts (e.g. Arabic, Cyrillic)
12
+ *
13
+ * @example
14
+ * toPersonCanonicalSlug("王建都") // "person/wang-jiandu"
15
+ * toPersonCanonicalSlug("李明") // "person/li-ming"
16
+ * toPersonCanonicalSlug("Alice Smith") // "person/alice-smith"
17
+ * toPersonCanonicalSlug("Sylar") // "person/sylar"
18
+ * toPersonCanonicalSlug("ou_10d417bea2263b13b0112f8067334323") // "person/ou_10d417..."
19
+ * toPersonCanonicalSlug("أحمد") // null
20
+ */
21
+ export function toPersonCanonicalSlug(name) {
22
+ // 1. Trim whitespace
23
+ let cleaned = name.trim();
24
+ if (cleaned === "")
25
+ return null;
26
+ // 2. Generic Feishu user labels often include the only stable identity as an open ID.
27
+ const openIdMatch = cleaned.match(/\bou_[a-zA-Z0-9]+\b/);
28
+ if (openIdMatch) {
29
+ const labelWithoutOpenId = cleaned
30
+ .replace(/[((][^))]*ou_[a-zA-Z0-9]+[^))]*[))]/gi, "")
31
+ .replace(/\bou_[a-zA-Z0-9]+\b/gi, "")
32
+ .trim();
33
+ const genericLabel = labelWithoutOpenId
34
+ .toLowerCase()
35
+ .replace(/[^a-z]+/g, " ")
36
+ .trim();
37
+ const hasNamedCjkLabel = /[一-鿿]/.test(labelWithoutOpenId);
38
+ if (!hasNamedCjkLabel &&
39
+ (genericLabel === "" || genericLabel === "user" || genericLabel === "feishu user")) {
40
+ return `person/${openIdMatch[0].toLowerCase()}`;
41
+ }
42
+ }
43
+ // 3. Remove parenthetical hints: strip (...)
44
+ cleaned = cleaned.replace(/[((][^))]*[))]/g, "").trim();
45
+ if (cleaned === "")
46
+ return null;
47
+ // 4. Preserve bare Feishu open IDs as stable opaque identifiers.
48
+ if (/^ou_[a-zA-Z0-9]+$/.test(cleaned)) {
49
+ return `person/${cleaned.toLowerCase()}`;
50
+ }
51
+ // 5. Detect script
52
+ const hasCJK = /[一-鿿]/.test(cleaned);
53
+ const isLatinOnly = /^[a-zA-Z\s\-']+$/.test(cleaned);
54
+ if (hasCJK) {
55
+ // Chinese path
56
+ return chinesePath(cleaned);
57
+ }
58
+ if (isLatinOnly) {
59
+ // Latin path
60
+ return latinPath(cleaned);
61
+ }
62
+ // Otherwise: ambiguous or unsupported script
63
+ return null;
64
+ }
65
+ function chinesePath(name) {
66
+ // Convert to pinyin array (without tones)
67
+ const syllables = pinyin(name, { toneType: "none", type: "array" });
68
+ if (syllables.length === 0)
69
+ return "person/unknown";
70
+ if (syllables.length === 1) {
71
+ // Single character name
72
+ return `person/${syllables[0].toLowerCase()}`;
73
+ }
74
+ // First syllable = family name
75
+ const family = syllables[0].toLowerCase();
76
+ // Remaining syllables = join together (no separator) = given name
77
+ const given = syllables
78
+ .slice(1)
79
+ .map((s) => s.toLowerCase())
80
+ .join("");
81
+ return `person/${family}-${given}`;
82
+ }
83
+ function latinPath(name) {
84
+ // Lowercase, replace apostrophes with hyphen, split on whitespace/hyphen, join with hyphen
85
+ const kebab = name
86
+ .toLowerCase()
87
+ .replace(/'/g, "-") // Replace apostrophes with hyphens
88
+ .split(/\s+/)
89
+ .filter((part) => part.length > 0)
90
+ .join("-");
91
+ return `person/${kebab}`;
92
+ }
93
+ //# sourceMappingURL=person-slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"person-slug.js","sourceRoot":"","sources":["../../src/core/person-slug.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,6 @@ export interface PipelineRuntime {
8
8
  provider: LLMProvider;
9
9
  identity_resolver?: IdentityResolver;
10
10
  }
11
- export declare function buildPipelineConfig(config: Config, output_dir: string): PipelineConfig;
11
+ export declare function buildPipelineConfig(config: Config, output_dir: string, projectRoot?: string): PipelineConfig;
12
12
  export declare function createPipelineRuntime(config: Config, pg: PGlite, output_dir: string): Promise<PipelineRuntime>;
13
13
  //# sourceMappingURL=pipeline-factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-factory.d.ts","sourceRoot":"","sources":["../../src/core/pipeline-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,WAAW,CAAC;IACtB,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAWtF;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAmB1B"}
1
+ {"version":3,"file":"pipeline-factory.d.ts","sourceRoot":"","sources":["../../src/core/pipeline-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,WAAW,CAAC;IACtB,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAMD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,cAAc,CAahB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAmB1B"}
@@ -1,16 +1,21 @@
1
1
  import { createLLMProvider } from "../extractors/providers/index.js";
2
2
  import { IdentityResolver } from "./identity-resolver.js";
3
3
  import { statePath } from "./state.js";
4
- export function buildPipelineConfig(config, output_dir) {
4
+ function projectRootOf(config, projectRoot) {
5
+ return projectRoot ?? config.__context?.projectRoot;
6
+ }
7
+ export function buildPipelineConfig(config, output_dir, projectRoot) {
8
+ const stateBase = projectRootOf(config, projectRoot);
5
9
  return {
6
- dedup_checkpoint: statePath("dedup.jsonl"),
7
- cursor_checkpoint: statePath("cursors.yaml"),
10
+ dedup_checkpoint: statePath("dedup.jsonl", stateBase),
11
+ cursor_checkpoint: statePath("cursors.yaml", stateBase),
8
12
  block_gap_minutes: config.block_builder.block_gap_minutes,
9
13
  max_block_tokens: config.block_builder.max_block_tokens,
10
14
  max_block_messages: config.block_builder.max_block_messages,
11
15
  privacy: config.privacy,
12
16
  output_dir,
13
17
  block_concurrency: config.pipeline?.block_concurrency,
18
+ state_base: stateBase,
14
19
  };
15
20
  }
16
21
  export async function createPipelineRuntime(config, pg, output_dir) {
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-factory.js","sourceRoot":"","sources":["../../src/core/pipeline-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,UAAkB;IACpE,OAAO;QACL,gBAAgB,EAAE,SAAS,CAAC,aAAa,CAAC;QAC1C,iBAAiB,EAAE,SAAS,CAAC,cAAc,CAAC;QAC5C,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC,iBAAiB;QACzD,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,gBAAgB;QACvD,kBAAkB,EAAE,MAAM,CAAC,aAAa,CAAC,kBAAkB;QAC3D,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU;QACV,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,iBAAiB;KACtD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAc,EACd,EAAU,EACV,UAAkB;IAElB,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IACpC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvB,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACjD,CAAC;IACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,iBAAiB,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAEnD,OAAO;QACL,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC;QAC/C,QAAQ;QACR,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"pipeline-factory.js","sourceRoot":"","sources":["../../src/core/pipeline-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,SAAS,aAAa,CAAC,MAAc,EAAE,WAAoB;IACzD,OAAO,WAAW,IAAK,MAAgC,CAAC,SAAS,EAAE,WAAW,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,UAAkB,EAClB,WAAoB;IAEpB,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrD,OAAO;QACL,gBAAgB,EAAE,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC;QACrD,iBAAiB,EAAE,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC;QACvD,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC,iBAAiB;QACzD,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,gBAAgB;QACvD,kBAAkB,EAAE,MAAM,CAAC,aAAa,CAAC,kBAAkB;QAC3D,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU;QACV,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,iBAAiB;QACrD,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAc,EACd,EAAU,EACV,UAAkB;IAElB,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IACpC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvB,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACjD,CAAC;IACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,iBAAiB,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAEnD,OAAO;QACL,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC;QAC/C,QAAQ;QACR,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
@@ -5,7 +5,9 @@
5
5
  */
6
6
  import { type StoreAdapterContext } from "../adapters/store.js";
7
7
  import type { LLMProvider } from "../extractors/providers/types.js";
8
+ import { type AccumulateDeps } from "../profile/accumulate.js";
8
9
  import type { PrivacyConfig } from "./config.js";
10
+ import type { IdentityResolver } from "./identity-resolver.js";
9
11
  import type { Collector, RawMessage } from "./types.js";
10
12
  /**
11
13
  * Pipeline configuration
@@ -19,6 +21,7 @@ export interface PipelineConfig {
19
21
  privacy: PrivacyConfig;
20
22
  output_dir: string;
21
23
  block_concurrency?: number;
24
+ state_base?: string;
22
25
  }
23
26
  /**
24
27
  * Pipeline execution options
@@ -32,6 +35,19 @@ export interface PipelineOpts {
32
35
  dryRun?: boolean;
33
36
  since?: string;
34
37
  limit?: number;
38
+ /**
39
+ * Optional identity resolver. When provided, person slugs are canonicalized
40
+ * (Stage 2.5) before results are pushed to the adapter, preventing duplicate
41
+ * person pages from LLM-produced slug variants.
42
+ */
43
+ identityResolver?: IdentityResolver;
44
+ /**
45
+ * Optional person-communication-profile behavior accumulation (Spec 8 §4.1).
46
+ * When provided AND config.profile.enabled, DM/group blocks contribute to the
47
+ * person_behavior table while raw messages are still in memory. No-op when the
48
+ * config is disabled, so callers can wire it unconditionally.
49
+ */
50
+ behavior?: AccumulateDeps;
35
51
  }
36
52
  /**
37
53
  * Pipeline execution result
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAM9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAKpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,OAAO,KAAK,EAGV,SAAS,EAGT,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChD,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,kBAAkB,CAAC,EAAE,UAAU,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,cAAc,CAAC,CA0QzB"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAO9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGpE,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,0BAA0B,CAAC;AAGnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAGV,SAAS,EAGT,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAChD,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,kBAAkB,CAAC,EAAE,UAAU,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,cAAc,CAAC,CA+TzB"}