pulseed 0.4.4 → 0.4.6

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 (729) hide show
  1. package/README.md +27 -103
  2. package/dist/adapters/agents/native-agent-loop.d.ts +7 -0
  3. package/dist/adapters/agents/native-agent-loop.d.ts.map +1 -0
  4. package/dist/adapters/agents/native-agent-loop.js +19 -0
  5. package/dist/adapters/agents/native-agent-loop.js.map +1 -0
  6. package/dist/adapters/agents/openai-codex.d.ts +3 -0
  7. package/dist/adapters/agents/openai-codex.d.ts.map +1 -1
  8. package/dist/adapters/agents/openai-codex.js +7 -1
  9. package/dist/adapters/agents/openai-codex.js.map +1 -1
  10. package/dist/adapters/datasources/github-issue-datasource.d.ts +13 -0
  11. package/dist/adapters/datasources/github-issue-datasource.d.ts.map +1 -1
  12. package/dist/adapters/datasources/github-issue-datasource.js +114 -134
  13. package/dist/adapters/datasources/github-issue-datasource.js.map +1 -1
  14. package/dist/adapters/spawn-helper.js +3 -3
  15. package/dist/adapters/spawn-helper.js.map +1 -1
  16. package/dist/base/llm/provider-config.d.ts +11 -2
  17. package/dist/base/llm/provider-config.d.ts.map +1 -1
  18. package/dist/base/llm/provider-config.js +13 -7
  19. package/dist/base/llm/provider-config.js.map +1 -1
  20. package/dist/base/llm/provider-factory.d.ts +2 -2
  21. package/dist/base/llm/provider-factory.js +4 -4
  22. package/dist/base/llm/provider-factory.js.map +1 -1
  23. package/dist/base/state/state-manager.d.ts +12 -0
  24. package/dist/base/state/state-manager.d.ts.map +1 -1
  25. package/dist/base/state/state-manager.js +112 -109
  26. package/dist/base/state/state-manager.js.map +1 -1
  27. package/dist/index.d.ts +7 -0
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +6 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/interface/chat/chat-history.d.ts +3 -2
  32. package/dist/interface/chat/chat-history.d.ts.map +1 -1
  33. package/dist/interface/chat/chat-history.js +3 -0
  34. package/dist/interface/chat/chat-history.js.map +1 -1
  35. package/dist/interface/chat/chat-runner.d.ts +9 -0
  36. package/dist/interface/chat/chat-runner.d.ts.map +1 -1
  37. package/dist/interface/chat/chat-runner.js +295 -44
  38. package/dist/interface/chat/chat-runner.js.map +1 -1
  39. package/dist/interface/chat/cross-platform-session.d.ts +78 -0
  40. package/dist/interface/chat/cross-platform-session.d.ts.map +1 -0
  41. package/dist/interface/chat/cross-platform-session.js +213 -0
  42. package/dist/interface/chat/cross-platform-session.js.map +1 -0
  43. package/dist/interface/chat/event-subscriber.d.ts +3 -1
  44. package/dist/interface/chat/event-subscriber.d.ts.map +1 -1
  45. package/dist/interface/chat/event-subscriber.js +13 -3
  46. package/dist/interface/chat/event-subscriber.js.map +1 -1
  47. package/dist/interface/cli/commands/chat.d.ts.map +1 -1
  48. package/dist/interface/cli/commands/chat.js +48 -3
  49. package/dist/interface/cli/commands/chat.js.map +1 -1
  50. package/dist/interface/cli/commands/config.d.ts.map +1 -1
  51. package/dist/interface/cli/commands/config.js +30 -1
  52. package/dist/interface/cli/commands/config.js.map +1 -1
  53. package/dist/interface/cli/commands/daemon.d.ts.map +1 -1
  54. package/dist/interface/cli/commands/daemon.js +15 -6
  55. package/dist/interface/cli/commands/daemon.js.map +1 -1
  56. package/dist/interface/cli/commands/doctor.d.ts +1 -0
  57. package/dist/interface/cli/commands/doctor.d.ts.map +1 -1
  58. package/dist/interface/cli/commands/doctor.js +36 -0
  59. package/dist/interface/cli/commands/doctor.js.map +1 -1
  60. package/dist/interface/cli/commands/install.d.ts +1 -0
  61. package/dist/interface/cli/commands/install.d.ts.map +1 -1
  62. package/dist/interface/cli/commands/install.js +6 -1
  63. package/dist/interface/cli/commands/install.js.map +1 -1
  64. package/dist/interface/cli/commands/notify.d.ts.map +1 -1
  65. package/dist/interface/cli/commands/notify.js +33 -21
  66. package/dist/interface/cli/commands/notify.js.map +1 -1
  67. package/dist/interface/cli/commands/setup/steps-notification.d.ts.map +1 -1
  68. package/dist/interface/cli/commands/setup/steps-notification.js +3 -2
  69. package/dist/interface/cli/commands/setup/steps-notification.js.map +1 -1
  70. package/dist/interface/cli/commands/setup-shared.js +6 -6
  71. package/dist/interface/cli/commands/setup-shared.js.map +1 -1
  72. package/dist/interface/cli/commands/setup.d.ts.map +1 -1
  73. package/dist/interface/cli/commands/setup.js +38 -1
  74. package/dist/interface/cli/commands/setup.js.map +1 -1
  75. package/dist/interface/cli/commands/telegram.d.ts.map +1 -1
  76. package/dist/interface/cli/commands/telegram.js +15 -1
  77. package/dist/interface/cli/commands/telegram.js.map +1 -1
  78. package/dist/interface/cli/setup.d.ts +12 -1
  79. package/dist/interface/cli/setup.d.ts.map +1 -1
  80. package/dist/interface/cli/setup.js +145 -16
  81. package/dist/interface/cli/setup.js.map +1 -1
  82. package/dist/interface/cli/utils.js +1 -1
  83. package/dist/interface/tui/entry.d.ts.map +1 -1
  84. package/dist/interface/tui/entry.js +69 -17
  85. package/dist/interface/tui/entry.js.map +1 -1
  86. package/dist/orchestrator/execution/adapter-layer.d.ts +19 -0
  87. package/dist/orchestrator/execution/adapter-layer.d.ts.map +1 -1
  88. package/dist/orchestrator/execution/adapter-layer.js.map +1 -1
  89. package/dist/orchestrator/execution/agent-loop/agent-loop-budget.d.ts +15 -0
  90. package/dist/orchestrator/execution/agent-loop/agent-loop-budget.d.ts.map +1 -0
  91. package/dist/orchestrator/execution/agent-loop/agent-loop-budget.js +12 -0
  92. package/dist/orchestrator/execution/agent-loop/agent-loop-budget.js.map +1 -0
  93. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.d.ts +9 -0
  94. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.d.ts.map +1 -0
  95. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.js +40 -0
  96. package/dist/orchestrator/execution/agent-loop/agent-loop-command-classifier.js.map +1 -0
  97. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.d.ts +33 -0
  98. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.d.ts.map +1 -0
  99. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.js +68 -0
  100. package/dist/orchestrator/execution/agent-loop/agent-loop-compactor.js.map +1 -0
  101. package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.d.ts +38 -0
  102. package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.d.ts.map +1 -0
  103. package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.js +109 -0
  104. package/dist/orchestrator/execution/agent-loop/agent-loop-context-assembler.js.map +1 -0
  105. package/dist/orchestrator/execution/agent-loop/agent-loop-dogfood-benchmark.d.ts +76 -0
  106. package/dist/orchestrator/execution/agent-loop/agent-loop-dogfood-benchmark.d.ts.map +1 -0
  107. package/dist/orchestrator/execution/agent-loop/agent-loop-dogfood-benchmark.js +164 -0
  108. package/dist/orchestrator/execution/agent-loop/agent-loop-dogfood-benchmark.js.map +1 -0
  109. package/dist/orchestrator/execution/agent-loop/agent-loop-evaluator.d.ts +46 -0
  110. package/dist/orchestrator/execution/agent-loop/agent-loop-evaluator.d.ts.map +1 -0
  111. package/dist/orchestrator/execution/agent-loop/agent-loop-evaluator.js +75 -0
  112. package/dist/orchestrator/execution/agent-loop/agent-loop-evaluator.js.map +1 -0
  113. package/dist/orchestrator/execution/agent-loop/agent-loop-events.d.ts +98 -0
  114. package/dist/orchestrator/execution/agent-loop/agent-loop-events.d.ts.map +1 -0
  115. package/dist/orchestrator/execution/agent-loop/agent-loop-events.js +6 -0
  116. package/dist/orchestrator/execution/agent-loop/agent-loop-events.js.map +1 -0
  117. package/dist/orchestrator/execution/agent-loop/agent-loop-history.d.ts +8 -0
  118. package/dist/orchestrator/execution/agent-loop/agent-loop-history.d.ts.map +1 -0
  119. package/dist/orchestrator/execution/agent-loop/agent-loop-history.js +7 -0
  120. package/dist/orchestrator/execution/agent-loop/agent-loop-history.js.map +1 -0
  121. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client-factory.d.ts +9 -0
  122. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client-factory.d.ts.map +1 -0
  123. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client-factory.js +19 -0
  124. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client-factory.js.map +1 -0
  125. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.d.ts +13 -0
  126. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.d.ts.map +1 -0
  127. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.js +72 -0
  128. package/dist/orchestrator/execution/agent-loop/agent-loop-model-client.js.map +1 -0
  129. package/dist/orchestrator/execution/agent-loop/agent-loop-model-registry.d.ts +10 -0
  130. package/dist/orchestrator/execution/agent-loop/agent-loop-model-registry.d.ts.map +1 -0
  131. package/dist/orchestrator/execution/agent-loop/agent-loop-model-registry.js +26 -0
  132. package/dist/orchestrator/execution/agent-loop/agent-loop-model-registry.js.map +1 -0
  133. package/dist/orchestrator/execution/agent-loop/agent-loop-model.d.ts +87 -0
  134. package/dist/orchestrator/execution/agent-loop/agent-loop-model.d.ts.map +1 -0
  135. package/dist/orchestrator/execution/agent-loop/agent-loop-model.js +22 -0
  136. package/dist/orchestrator/execution/agent-loop/agent-loop-model.js.map +1 -0
  137. package/dist/orchestrator/execution/agent-loop/agent-loop-prompts.d.ts +5 -0
  138. package/dist/orchestrator/execution/agent-loop/agent-loop-prompts.d.ts.map +1 -0
  139. package/dist/orchestrator/execution/agent-loop/agent-loop-prompts.js +18 -0
  140. package/dist/orchestrator/execution/agent-loop/agent-loop-prompts.js.map +1 -0
  141. package/dist/orchestrator/execution/agent-loop/agent-loop-real-dogfood.d.ts +2 -0
  142. package/dist/orchestrator/execution/agent-loop/agent-loop-real-dogfood.d.ts.map +1 -0
  143. package/dist/orchestrator/execution/agent-loop/agent-loop-real-dogfood.js +362 -0
  144. package/dist/orchestrator/execution/agent-loop/agent-loop-real-dogfood.js.map +1 -0
  145. package/dist/orchestrator/execution/agent-loop/agent-loop-result.d.ts +42 -0
  146. package/dist/orchestrator/execution/agent-loop/agent-loop-result.d.ts.map +1 -0
  147. package/dist/orchestrator/execution/agent-loop/agent-loop-result.js +2 -0
  148. package/dist/orchestrator/execution/agent-loop/agent-loop-result.js.map +1 -0
  149. package/dist/orchestrator/execution/agent-loop/agent-loop-session-factory.d.ts +15 -0
  150. package/dist/orchestrator/execution/agent-loop/agent-loop-session-factory.d.ts.map +1 -0
  151. package/dist/orchestrator/execution/agent-loop/agent-loop-session-factory.js +26 -0
  152. package/dist/orchestrator/execution/agent-loop/agent-loop-session-factory.js.map +1 -0
  153. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.d.ts +39 -0
  154. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.d.ts.map +1 -0
  155. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.js +35 -0
  156. package/dist/orchestrator/execution/agent-loop/agent-loop-session-state.js.map +1 -0
  157. package/dist/orchestrator/execution/agent-loop/agent-loop-session.d.ts +21 -0
  158. package/dist/orchestrator/execution/agent-loop/agent-loop-session.d.ts.map +1 -0
  159. package/dist/orchestrator/execution/agent-loop/agent-loop-session.js +16 -0
  160. package/dist/orchestrator/execution/agent-loop/agent-loop-session.js.map +1 -0
  161. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-output.d.ts +21 -0
  162. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-output.d.ts.map +1 -0
  163. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-output.js +2 -0
  164. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-output.js.map +1 -0
  165. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-router.d.ts +19 -0
  166. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-router.d.ts.map +1 -0
  167. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-router.js +34 -0
  168. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-router.js.map +1 -0
  169. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.d.ts +21 -0
  170. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.d.ts.map +1 -0
  171. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.js +114 -0
  172. package/dist/orchestrator/execution/agent-loop/agent-loop-tool-runtime.js.map +1 -0
  173. package/dist/orchestrator/execution/agent-loop/agent-loop-trace-store.d.ts +18 -0
  174. package/dist/orchestrator/execution/agent-loop/agent-loop-trace-store.d.ts.map +1 -0
  175. package/dist/orchestrator/execution/agent-loop/agent-loop-trace-store.js +31 -0
  176. package/dist/orchestrator/execution/agent-loop/agent-loop-trace-store.js.map +1 -0
  177. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.d.ts +39 -0
  178. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.d.ts.map +1 -0
  179. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.js +5 -0
  180. package/dist/orchestrator/execution/agent-loop/agent-loop-turn-context.js.map +1 -0
  181. package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.d.ts +23 -0
  182. package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.d.ts.map +1 -0
  183. package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.js +156 -0
  184. package/dist/orchestrator/execution/agent-loop/anthropic-messages-agent-loop-model-client.js.map +1 -0
  185. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.d.ts +38 -0
  186. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.d.ts.map +1 -0
  187. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.js +479 -0
  188. package/dist/orchestrator/execution/agent-loop/bounded-agent-loop-runner.js.map +1 -0
  189. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.d.ts +67 -0
  190. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.d.ts.map +1 -0
  191. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.js +113 -0
  192. package/dist/orchestrator/execution/agent-loop/chat-agent-loop-runner.js.map +1 -0
  193. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.d.ts +33 -0
  194. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.d.ts.map +1 -0
  195. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.js +89 -0
  196. package/dist/orchestrator/execution/agent-loop/core-loop-control-tools.js.map +1 -0
  197. package/dist/orchestrator/execution/agent-loop/core-phase-runner.d.ts +32 -0
  198. package/dist/orchestrator/execution/agent-loop/core-phase-runner.d.ts.map +1 -0
  199. package/dist/orchestrator/execution/agent-loop/core-phase-runner.js +40 -0
  200. package/dist/orchestrator/execution/agent-loop/core-phase-runner.js.map +1 -0
  201. package/dist/orchestrator/execution/agent-loop/index.d.ts +35 -0
  202. package/dist/orchestrator/execution/agent-loop/index.d.ts.map +1 -0
  203. package/dist/orchestrator/execution/agent-loop/index.js +35 -0
  204. package/dist/orchestrator/execution/agent-loop/index.js.map +1 -0
  205. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.d.ts +18 -0
  206. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.d.ts.map +1 -0
  207. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.js +148 -0
  208. package/dist/orchestrator/execution/agent-loop/openai-responses-agent-loop-model-client.js.map +1 -0
  209. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.d.ts +26 -0
  210. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.d.ts.map +1 -0
  211. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.js +79 -0
  212. package/dist/orchestrator/execution/agent-loop/task-agent-loop-context.js.map +1 -0
  213. package/dist/orchestrator/execution/agent-loop/task-agent-loop-factory.d.ts +28 -0
  214. package/dist/orchestrator/execution/agent-loop/task-agent-loop-factory.d.ts.map +1 -0
  215. package/dist/orchestrator/execution/agent-loop/task-agent-loop-factory.js +96 -0
  216. package/dist/orchestrator/execution/agent-loop/task-agent-loop-factory.js.map +1 -0
  217. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.d.ts +54 -0
  218. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.d.ts.map +1 -0
  219. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.js +61 -0
  220. package/dist/orchestrator/execution/agent-loop/task-agent-loop-result.js.map +1 -0
  221. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.d.ts +46 -0
  222. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.d.ts.map +1 -0
  223. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.js +70 -0
  224. package/dist/orchestrator/execution/agent-loop/task-agent-loop-runner.js.map +1 -0
  225. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.d.ts +5 -0
  226. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.d.ts.map +1 -0
  227. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.js +94 -0
  228. package/dist/orchestrator/execution/agent-loop/task-agent-loop-verification.js.map +1 -0
  229. package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.d.ts +23 -0
  230. package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.d.ts.map +1 -0
  231. package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.js +145 -0
  232. package/dist/orchestrator/execution/agent-loop/task-agent-loop-worktree.js.map +1 -0
  233. package/dist/orchestrator/execution/context/dimension-selector.d.ts +5 -1
  234. package/dist/orchestrator/execution/context/dimension-selector.d.ts.map +1 -1
  235. package/dist/orchestrator/execution/context/dimension-selector.js +9 -5
  236. package/dist/orchestrator/execution/context/dimension-selector.js.map +1 -1
  237. package/dist/orchestrator/execution/task/task-generation.d.ts.map +1 -1
  238. package/dist/orchestrator/execution/task/task-generation.js +46 -6
  239. package/dist/orchestrator/execution/task/task-generation.js.map +1 -1
  240. package/dist/orchestrator/execution/task/task-health-check.d.ts +1 -1
  241. package/dist/orchestrator/execution/task/task-health-check.d.ts.map +1 -1
  242. package/dist/orchestrator/execution/task/task-health-check.js +8 -8
  243. package/dist/orchestrator/execution/task/task-health-check.js.map +1 -1
  244. package/dist/orchestrator/execution/task/task-lifecycle.d.ts +22 -3
  245. package/dist/orchestrator/execution/task/task-lifecycle.d.ts.map +1 -1
  246. package/dist/orchestrator/execution/task/task-lifecycle.js +155 -25
  247. package/dist/orchestrator/execution/task/task-lifecycle.js.map +1 -1
  248. package/dist/orchestrator/execution/task/task-prompt-builder.d.ts.map +1 -1
  249. package/dist/orchestrator/execution/task/task-prompt-builder.js +63 -3
  250. package/dist/orchestrator/execution/task/task-prompt-builder.js.map +1 -1
  251. package/dist/orchestrator/execution/task/task-verifier-llm.d.ts.map +1 -1
  252. package/dist/orchestrator/execution/task/task-verifier-llm.js +19 -1
  253. package/dist/orchestrator/execution/task/task-verifier-llm.js.map +1 -1
  254. package/dist/orchestrator/execution/task/task-verifier-rules.d.ts.map +1 -1
  255. package/dist/orchestrator/execution/task/task-verifier-rules.js +96 -44
  256. package/dist/orchestrator/execution/task/task-verifier-rules.js.map +1 -1
  257. package/dist/orchestrator/execution/task/task-verifier-types.d.ts +8 -0
  258. package/dist/orchestrator/execution/task/task-verifier-types.d.ts.map +1 -1
  259. package/dist/orchestrator/execution/task/task-verifier-types.js.map +1 -1
  260. package/dist/orchestrator/execution/task/task-verifier.d.ts.map +1 -1
  261. package/dist/orchestrator/execution/task/task-verifier.js +19 -1
  262. package/dist/orchestrator/execution/task/task-verifier.js.map +1 -1
  263. package/dist/orchestrator/goal/tree-loop-orchestrator.d.ts +9 -0
  264. package/dist/orchestrator/goal/tree-loop-orchestrator.d.ts.map +1 -1
  265. package/dist/orchestrator/goal/tree-loop-orchestrator.js +32 -0
  266. package/dist/orchestrator/goal/tree-loop-orchestrator.js.map +1 -1
  267. package/dist/orchestrator/loop/core-loop/contracts.d.ts +9 -0
  268. package/dist/orchestrator/loop/core-loop/contracts.d.ts.map +1 -1
  269. package/dist/orchestrator/loop/core-loop/contracts.js.map +1 -1
  270. package/dist/orchestrator/loop/core-loop/decision-engine.d.ts +79 -0
  271. package/dist/orchestrator/loop/core-loop/decision-engine.d.ts.map +1 -0
  272. package/dist/orchestrator/loop/core-loop/decision-engine.js +141 -0
  273. package/dist/orchestrator/loop/core-loop/decision-engine.js.map +1 -0
  274. package/dist/orchestrator/loop/core-loop/evidence-ledger.d.ts +22 -0
  275. package/dist/orchestrator/loop/core-loop/evidence-ledger.d.ts.map +1 -0
  276. package/dist/orchestrator/loop/core-loop/evidence-ledger.js +36 -0
  277. package/dist/orchestrator/loop/core-loop/evidence-ledger.js.map +1 -0
  278. package/dist/orchestrator/loop/core-loop/iteration-kernel.d.ts +34 -0
  279. package/dist/orchestrator/loop/core-loop/iteration-kernel.d.ts.map +1 -0
  280. package/dist/orchestrator/loop/core-loop/iteration-kernel.js +356 -0
  281. package/dist/orchestrator/loop/core-loop/iteration-kernel.js.map +1 -0
  282. package/dist/orchestrator/loop/core-loop/phase-policy.d.ts +20 -0
  283. package/dist/orchestrator/loop/core-loop/phase-policy.d.ts.map +1 -0
  284. package/dist/orchestrator/loop/core-loop/phase-policy.js +96 -0
  285. package/dist/orchestrator/loop/core-loop/phase-policy.js.map +1 -0
  286. package/dist/orchestrator/loop/core-loop/phase-runtime.d.ts +29 -0
  287. package/dist/orchestrator/loop/core-loop/phase-runtime.d.ts.map +1 -0
  288. package/dist/orchestrator/loop/core-loop/phase-runtime.js +62 -0
  289. package/dist/orchestrator/loop/core-loop/phase-runtime.js.map +1 -0
  290. package/dist/orchestrator/loop/core-loop/phase-specs.d.ts +180 -0
  291. package/dist/orchestrator/loop/core-loop/phase-specs.d.ts.map +1 -0
  292. package/dist/orchestrator/loop/core-loop/phase-specs.js +116 -0
  293. package/dist/orchestrator/loop/core-loop/phase-specs.js.map +1 -0
  294. package/dist/orchestrator/loop/core-loop/preparation.d.ts +1 -5
  295. package/dist/orchestrator/loop/core-loop/preparation.d.ts.map +1 -1
  296. package/dist/orchestrator/loop/core-loop/preparation.js +2 -1
  297. package/dist/orchestrator/loop/core-loop/preparation.js.map +1 -1
  298. package/dist/orchestrator/loop/core-loop/task-cycle.d.ts +10 -2
  299. package/dist/orchestrator/loop/core-loop/task-cycle.d.ts.map +1 -1
  300. package/dist/orchestrator/loop/core-loop/task-cycle.js +37 -54
  301. package/dist/orchestrator/loop/core-loop/task-cycle.js.map +1 -1
  302. package/dist/orchestrator/loop/core-loop.d.ts +3 -0
  303. package/dist/orchestrator/loop/core-loop.d.ts.map +1 -1
  304. package/dist/orchestrator/loop/core-loop.js +58 -217
  305. package/dist/orchestrator/loop/core-loop.js.map +1 -1
  306. package/dist/orchestrator/loop/loop-result-types.d.ts +23 -0
  307. package/dist/orchestrator/loop/loop-result-types.d.ts.map +1 -1
  308. package/dist/orchestrator/loop/loop-result-types.js.map +1 -1
  309. package/dist/orchestrator/loop/tree-loop-runner.d.ts +6 -2
  310. package/dist/orchestrator/loop/tree-loop-runner.d.ts.map +1 -1
  311. package/dist/orchestrator/loop/tree-loop-runner.js +62 -6
  312. package/dist/orchestrator/loop/tree-loop-runner.js.map +1 -1
  313. package/dist/orchestrator/strategy/portfolio-manager.d.ts +3 -3
  314. package/dist/orchestrator/strategy/portfolio-manager.d.ts.map +1 -1
  315. package/dist/orchestrator/strategy/portfolio-manager.js +3 -3
  316. package/dist/orchestrator/strategy/portfolio-manager.js.map +1 -1
  317. package/dist/orchestrator/strategy/portfolio-rebalance.d.ts +3 -3
  318. package/dist/orchestrator/strategy/portfolio-rebalance.d.ts.map +1 -1
  319. package/dist/orchestrator/strategy/portfolio-rebalance.js +14 -7
  320. package/dist/orchestrator/strategy/portfolio-rebalance.js.map +1 -1
  321. package/dist/orchestrator/strategy/strategy-manager.d.ts +11 -1
  322. package/dist/orchestrator/strategy/strategy-manager.d.ts.map +1 -1
  323. package/dist/orchestrator/strategy/strategy-manager.js +23 -2
  324. package/dist/orchestrator/strategy/strategy-manager.js.map +1 -1
  325. package/dist/platform/dream/dream-activation-artifacts.d.ts +5 -0
  326. package/dist/platform/dream/dream-activation-artifacts.d.ts.map +1 -0
  327. package/dist/platform/dream/dream-activation-artifacts.js +35 -0
  328. package/dist/platform/dream/dream-activation-artifacts.js.map +1 -0
  329. package/dist/platform/dream/dream-activation.d.ts +7 -0
  330. package/dist/platform/dream/dream-activation.d.ts.map +1 -1
  331. package/dist/platform/dream/dream-activation.js +41 -0
  332. package/dist/platform/dream/dream-activation.js.map +1 -1
  333. package/dist/platform/dream/dream-consolidator.d.ts +51 -1
  334. package/dist/platform/dream/dream-consolidator.d.ts.map +1 -1
  335. package/dist/platform/dream/dream-consolidator.js +425 -74
  336. package/dist/platform/dream/dream-consolidator.js.map +1 -1
  337. package/dist/platform/dream/dream-event-workflows.d.ts +115 -0
  338. package/dist/platform/dream/dream-event-workflows.d.ts.map +1 -0
  339. package/dist/platform/dream/dream-event-workflows.js +328 -0
  340. package/dist/platform/dream/dream-event-workflows.js.map +1 -0
  341. package/dist/platform/dream/dream-soil-mutation.d.ts +28 -0
  342. package/dist/platform/dream/dream-soil-mutation.d.ts.map +1 -0
  343. package/dist/platform/dream/dream-soil-mutation.js +605 -0
  344. package/dist/platform/dream/dream-soil-mutation.js.map +1 -0
  345. package/dist/platform/dream/dream-soil-sync.d.ts +30 -0
  346. package/dist/platform/dream/dream-soil-sync.d.ts.map +1 -0
  347. package/dist/platform/dream/dream-soil-sync.js +87 -0
  348. package/dist/platform/dream/dream-soil-sync.js.map +1 -0
  349. package/dist/platform/dream/dream-types.d.ts +635 -50
  350. package/dist/platform/dream/dream-types.d.ts.map +1 -1
  351. package/dist/platform/dream/dream-types.js +70 -0
  352. package/dist/platform/dream/dream-types.js.map +1 -1
  353. package/dist/platform/dream/index.d.ts +4 -0
  354. package/dist/platform/dream/index.d.ts.map +1 -1
  355. package/dist/platform/dream/index.js +4 -0
  356. package/dist/platform/dream/index.js.map +1 -1
  357. package/dist/platform/knowledge/knowledge-decisions.d.ts.map +1 -1
  358. package/dist/platform/knowledge/knowledge-decisions.js +32 -0
  359. package/dist/platform/knowledge/knowledge-decisions.js.map +1 -1
  360. package/dist/platform/knowledge/knowledge-manager-lint.d.ts +1 -0
  361. package/dist/platform/knowledge/knowledge-manager-lint.d.ts.map +1 -1
  362. package/dist/platform/knowledge/knowledge-manager-lint.js +16 -3
  363. package/dist/platform/knowledge/knowledge-manager-lint.js.map +1 -1
  364. package/dist/platform/knowledge/knowledge-manager.d.ts +3 -0
  365. package/dist/platform/knowledge/knowledge-manager.d.ts.map +1 -1
  366. package/dist/platform/knowledge/knowledge-manager.js +38 -0
  367. package/dist/platform/knowledge/knowledge-manager.js.map +1 -1
  368. package/dist/platform/observation/workspace-context.d.ts.map +1 -1
  369. package/dist/platform/observation/workspace-context.js +12 -6
  370. package/dist/platform/observation/workspace-context.js.map +1 -1
  371. package/dist/platform/soil/checksum.d.ts +2 -0
  372. package/dist/platform/soil/checksum.d.ts.map +1 -0
  373. package/dist/platform/soil/checksum.js +17 -0
  374. package/dist/platform/soil/checksum.js.map +1 -0
  375. package/dist/platform/soil/compiler.d.ts +27 -0
  376. package/dist/platform/soil/compiler.d.ts.map +1 -0
  377. package/dist/platform/soil/compiler.js +78 -0
  378. package/dist/platform/soil/compiler.js.map +1 -0
  379. package/dist/platform/soil/config.d.ts +16 -0
  380. package/dist/platform/soil/config.d.ts.map +1 -0
  381. package/dist/platform/soil/config.js +30 -0
  382. package/dist/platform/soil/config.js.map +1 -0
  383. package/dist/platform/soil/content-projections.d.ts +24 -0
  384. package/dist/platform/soil/content-projections.d.ts.map +1 -0
  385. package/dist/platform/soil/content-projections.js +489 -0
  386. package/dist/platform/soil/content-projections.js.map +1 -0
  387. package/dist/platform/soil/contracts.d.ts +1127 -0
  388. package/dist/platform/soil/contracts.d.ts.map +1 -0
  389. package/dist/platform/soil/contracts.js +194 -0
  390. package/dist/platform/soil/contracts.js.map +1 -0
  391. package/dist/platform/soil/ddl.d.ts +8 -0
  392. package/dist/platform/soil/ddl.d.ts.map +1 -0
  393. package/dist/platform/soil/ddl.js +150 -0
  394. package/dist/platform/soil/ddl.js.map +1 -0
  395. package/dist/platform/soil/doctor.d.ts +34 -0
  396. package/dist/platform/soil/doctor.d.ts.map +1 -0
  397. package/dist/platform/soil/doctor.js +380 -0
  398. package/dist/platform/soil/doctor.js.map +1 -0
  399. package/dist/platform/soil/frontmatter.d.ts +15 -0
  400. package/dist/platform/soil/frontmatter.d.ts.map +1 -0
  401. package/dist/platform/soil/frontmatter.js +82 -0
  402. package/dist/platform/soil/frontmatter.js.map +1 -0
  403. package/dist/platform/soil/importer.d.ts +118 -0
  404. package/dist/platform/soil/importer.d.ts.map +1 -0
  405. package/dist/platform/soil/importer.js +145 -0
  406. package/dist/platform/soil/importer.js.map +1 -0
  407. package/dist/platform/soil/index-store.d.ts +89 -0
  408. package/dist/platform/soil/index-store.d.ts.map +1 -0
  409. package/dist/platform/soil/index-store.js +399 -0
  410. package/dist/platform/soil/index-store.js.map +1 -0
  411. package/dist/platform/soil/index.d.ts +20 -0
  412. package/dist/platform/soil/index.d.ts.map +1 -0
  413. package/dist/platform/soil/index.js +20 -0
  414. package/dist/platform/soil/index.js.map +1 -0
  415. package/dist/platform/soil/io.d.ts +18 -0
  416. package/dist/platform/soil/io.d.ts.map +1 -0
  417. package/dist/platform/soil/io.js +56 -0
  418. package/dist/platform/soil/io.js.map +1 -0
  419. package/dist/platform/soil/open.d.ts +32 -0
  420. package/dist/platform/soil/open.d.ts.map +1 -0
  421. package/dist/platform/soil/open.js +78 -0
  422. package/dist/platform/soil/open.js.map +1 -0
  423. package/dist/platform/soil/paths.d.ts +9 -0
  424. package/dist/platform/soil/paths.d.ts.map +1 -0
  425. package/dist/platform/soil/paths.js +78 -0
  426. package/dist/platform/soil/paths.js.map +1 -0
  427. package/dist/platform/soil/projections.d.ts +16 -0
  428. package/dist/platform/soil/projections.d.ts.map +1 -0
  429. package/dist/platform/soil/projections.js +265 -0
  430. package/dist/platform/soil/projections.js.map +1 -0
  431. package/dist/platform/soil/publish/apple-notes.d.ts +15 -0
  432. package/dist/platform/soil/publish/apple-notes.d.ts.map +1 -0
  433. package/dist/platform/soil/publish/apple-notes.js +58 -0
  434. package/dist/platform/soil/publish/apple-notes.js.map +1 -0
  435. package/dist/platform/soil/publish/config.d.ts +14 -0
  436. package/dist/platform/soil/publish/config.d.ts.map +1 -0
  437. package/dist/platform/soil/publish/config.js +59 -0
  438. package/dist/platform/soil/publish/config.js.map +1 -0
  439. package/dist/platform/soil/publish/index.d.ts +7 -0
  440. package/dist/platform/soil/publish/index.d.ts.map +1 -0
  441. package/dist/platform/soil/publish/index.js +7 -0
  442. package/dist/platform/soil/publish/index.js.map +1 -0
  443. package/dist/platform/soil/publish/notion.d.ts +51 -0
  444. package/dist/platform/soil/publish/notion.d.ts.map +1 -0
  445. package/dist/platform/soil/publish/notion.js +201 -0
  446. package/dist/platform/soil/publish/notion.js.map +1 -0
  447. package/dist/platform/soil/publish/publisher.d.ts +13 -0
  448. package/dist/platform/soil/publish/publisher.d.ts.map +1 -0
  449. package/dist/platform/soil/publish/publisher.js +55 -0
  450. package/dist/platform/soil/publish/publisher.js.map +1 -0
  451. package/dist/platform/soil/publish/snapshot.d.ts +4 -0
  452. package/dist/platform/soil/publish/snapshot.d.ts.map +1 -0
  453. package/dist/platform/soil/publish/snapshot.js +40 -0
  454. package/dist/platform/soil/publish/snapshot.js.map +1 -0
  455. package/dist/platform/soil/publish/types.d.ts +169 -0
  456. package/dist/platform/soil/publish/types.d.ts.map +1 -0
  457. package/dist/platform/soil/publish/types.js +32 -0
  458. package/dist/platform/soil/publish/types.js.map +1 -0
  459. package/dist/platform/soil/retriever.d.ts +52 -0
  460. package/dist/platform/soil/retriever.d.ts.map +1 -0
  461. package/dist/platform/soil/retriever.js +262 -0
  462. package/dist/platform/soil/retriever.js.map +1 -0
  463. package/dist/platform/soil/runtime-rebuild.d.ts +33 -0
  464. package/dist/platform/soil/runtime-rebuild.d.ts.map +1 -0
  465. package/dist/platform/soil/runtime-rebuild.js +201 -0
  466. package/dist/platform/soil/runtime-rebuild.js.map +1 -0
  467. package/dist/platform/soil/sqlite-repository.d.ts +25 -0
  468. package/dist/platform/soil/sqlite-repository.d.ts.map +1 -0
  469. package/dist/platform/soil/sqlite-repository.js +893 -0
  470. package/dist/platform/soil/sqlite-repository.js.map +1 -0
  471. package/dist/platform/soil/types.d.ts +506 -0
  472. package/dist/platform/soil/types.d.ts.map +1 -0
  473. package/dist/platform/soil/types.js +146 -0
  474. package/dist/platform/soil/types.js.map +1 -0
  475. package/dist/reflection/types.d.ts +2 -2
  476. package/dist/reporting/reporting-engine.d.ts.map +1 -1
  477. package/dist/reporting/reporting-engine.js +10 -0
  478. package/dist/reporting/reporting-engine.js.map +1 -1
  479. package/dist/runtime/approval-broker.d.ts.map +1 -1
  480. package/dist/runtime/approval-broker.js +32 -9
  481. package/dist/runtime/approval-broker.js.map +1 -1
  482. package/dist/runtime/daemon/client.d.ts +13 -0
  483. package/dist/runtime/daemon/client.d.ts.map +1 -1
  484. package/dist/runtime/daemon/client.js +41 -2
  485. package/dist/runtime/daemon/client.js.map +1 -1
  486. package/dist/runtime/daemon/runner-errors.d.ts +28 -0
  487. package/dist/runtime/daemon/runner-errors.d.ts.map +1 -0
  488. package/dist/runtime/daemon/runner-errors.js +41 -0
  489. package/dist/runtime/daemon/runner-errors.js.map +1 -0
  490. package/dist/runtime/daemon/runner-recovery.d.ts +12 -0
  491. package/dist/runtime/daemon/runner-recovery.d.ts.map +1 -0
  492. package/dist/runtime/daemon/runner-recovery.js +146 -0
  493. package/dist/runtime/daemon/runner-recovery.js.map +1 -0
  494. package/dist/runtime/daemon/runner.d.ts +6 -3
  495. package/dist/runtime/daemon/runner.d.ts.map +1 -1
  496. package/dist/runtime/daemon/runner.js +143 -172
  497. package/dist/runtime/daemon/runner.js.map +1 -1
  498. package/dist/runtime/event/server-sse.d.ts.map +1 -1
  499. package/dist/runtime/event/server-sse.js +0 -1
  500. package/dist/runtime/event/server-sse.js.map +1 -1
  501. package/dist/runtime/event/server.d.ts +27 -0
  502. package/dist/runtime/event/server.d.ts.map +1 -1
  503. package/dist/runtime/event/server.js +305 -71
  504. package/dist/runtime/event/server.js.map +1 -1
  505. package/dist/runtime/leader-lock-manager.d.ts.map +1 -1
  506. package/dist/runtime/leader-lock-manager.js +2 -1
  507. package/dist/runtime/leader-lock-manager.js.map +1 -1
  508. package/dist/runtime/notification-dispatcher.d.ts +7 -0
  509. package/dist/runtime/notification-dispatcher.d.ts.map +1 -1
  510. package/dist/runtime/notification-dispatcher.js +43 -1
  511. package/dist/runtime/notification-dispatcher.js.map +1 -1
  512. package/dist/runtime/notification-routing.d.ts +16 -0
  513. package/dist/runtime/notification-routing.d.ts.map +1 -0
  514. package/dist/runtime/notification-routing.js +147 -0
  515. package/dist/runtime/notification-routing.js.map +1 -0
  516. package/dist/runtime/plugin-loader.d.ts +2 -0
  517. package/dist/runtime/plugin-loader.d.ts.map +1 -1
  518. package/dist/runtime/plugin-loader.js +34 -2
  519. package/dist/runtime/plugin-loader.js.map +1 -1
  520. package/dist/runtime/schedule/engine-layers.d.ts.map +1 -1
  521. package/dist/runtime/schedule/engine-layers.js +106 -6
  522. package/dist/runtime/schedule/engine-layers.js.map +1 -1
  523. package/dist/runtime/schedule/engine.d.ts +2 -0
  524. package/dist/runtime/schedule/engine.d.ts.map +1 -1
  525. package/dist/runtime/schedule/engine.js +28 -0
  526. package/dist/runtime/schedule/engine.js.map +1 -1
  527. package/dist/runtime/schedule/history.d.ts +3 -3
  528. package/dist/runtime/schedule/presets.d.ts +128 -15
  529. package/dist/runtime/schedule/presets.d.ts.map +1 -1
  530. package/dist/runtime/schedule/presets.js +24 -0
  531. package/dist/runtime/schedule/presets.js.map +1 -1
  532. package/dist/runtime/schedule/source.d.ts +2 -2
  533. package/dist/runtime/types/cron.d.ts +4 -4
  534. package/dist/runtime/types/daemon.d.ts +3 -0
  535. package/dist/runtime/types/daemon.d.ts.map +1 -1
  536. package/dist/runtime/types/daemon.js +1 -0
  537. package/dist/runtime/types/daemon.js.map +1 -1
  538. package/dist/runtime/types/notification.d.ts +91 -0
  539. package/dist/runtime/types/notification.d.ts.map +1 -1
  540. package/dist/runtime/types/notification.js +10 -0
  541. package/dist/runtime/types/notification.js.map +1 -1
  542. package/dist/runtime/types/schedule.d.ts +60 -60
  543. package/dist/runtime/types/schedule.js +1 -1
  544. package/dist/runtime/types/schedule.js.map +1 -1
  545. package/dist/runtime/types/trigger.d.ts +6 -6
  546. package/dist/runtime/watchdog.d.ts +22 -0
  547. package/dist/runtime/watchdog.d.ts.map +1 -1
  548. package/dist/runtime/watchdog.js +47 -3
  549. package/dist/runtime/watchdog.js.map +1 -1
  550. package/dist/tools/builtin/index.d.ts +17 -0
  551. package/dist/tools/builtin/index.d.ts.map +1 -1
  552. package/dist/tools/builtin/index.js +46 -3
  553. package/dist/tools/builtin/index.js.map +1 -1
  554. package/dist/tools/execution/SoilDoctorTool/SoilDoctorTool.d.ts +43 -0
  555. package/dist/tools/execution/SoilDoctorTool/SoilDoctorTool.d.ts.map +1 -0
  556. package/dist/tools/execution/SoilDoctorTool/SoilDoctorTool.js +83 -0
  557. package/dist/tools/execution/SoilDoctorTool/SoilDoctorTool.js.map +1 -0
  558. package/dist/tools/execution/SoilDoctorTool/constants.d.ts +8 -0
  559. package/dist/tools/execution/SoilDoctorTool/constants.d.ts.map +1 -0
  560. package/dist/tools/execution/SoilDoctorTool/constants.js +8 -0
  561. package/dist/tools/execution/SoilDoctorTool/constants.js.map +1 -0
  562. package/dist/tools/execution/SoilDoctorTool/prompt.d.ts +2 -0
  563. package/dist/tools/execution/SoilDoctorTool/prompt.d.ts.map +1 -0
  564. package/dist/tools/execution/SoilDoctorTool/prompt.js +2 -0
  565. package/dist/tools/execution/SoilDoctorTool/prompt.js.map +1 -0
  566. package/dist/tools/execution/SoilImportTool/SoilImportTool.d.ts +109 -0
  567. package/dist/tools/execution/SoilImportTool/SoilImportTool.d.ts.map +1 -0
  568. package/dist/tools/execution/SoilImportTool/SoilImportTool.js +72 -0
  569. package/dist/tools/execution/SoilImportTool/SoilImportTool.js.map +1 -0
  570. package/dist/tools/execution/SoilImportTool/constants.d.ts +6 -0
  571. package/dist/tools/execution/SoilImportTool/constants.d.ts.map +1 -0
  572. package/dist/tools/execution/SoilImportTool/constants.js +6 -0
  573. package/dist/tools/execution/SoilImportTool/constants.js.map +1 -0
  574. package/dist/tools/execution/SoilImportTool/prompt.d.ts +2 -0
  575. package/dist/tools/execution/SoilImportTool/prompt.d.ts.map +1 -0
  576. package/dist/tools/execution/SoilImportTool/prompt.js +2 -0
  577. package/dist/tools/execution/SoilImportTool/prompt.js.map +1 -0
  578. package/dist/tools/execution/SoilOpenTool/SoilOpenTool.d.ts +46 -0
  579. package/dist/tools/execution/SoilOpenTool/SoilOpenTool.d.ts.map +1 -0
  580. package/dist/tools/execution/SoilOpenTool/SoilOpenTool.js +64 -0
  581. package/dist/tools/execution/SoilOpenTool/SoilOpenTool.js.map +1 -0
  582. package/dist/tools/execution/SoilOpenTool/constants.d.ts +6 -0
  583. package/dist/tools/execution/SoilOpenTool/constants.d.ts.map +1 -0
  584. package/dist/tools/execution/SoilOpenTool/constants.js +6 -0
  585. package/dist/tools/execution/SoilOpenTool/constants.js.map +1 -0
  586. package/dist/tools/execution/SoilOpenTool/prompt.d.ts +2 -0
  587. package/dist/tools/execution/SoilOpenTool/prompt.d.ts.map +1 -0
  588. package/dist/tools/execution/SoilOpenTool/prompt.js +2 -0
  589. package/dist/tools/execution/SoilOpenTool/prompt.js.map +1 -0
  590. package/dist/tools/execution/SoilPublishTool/SoilPublishTool.d.ts +49 -0
  591. package/dist/tools/execution/SoilPublishTool/SoilPublishTool.d.ts.map +1 -0
  592. package/dist/tools/execution/SoilPublishTool/SoilPublishTool.js +71 -0
  593. package/dist/tools/execution/SoilPublishTool/SoilPublishTool.js.map +1 -0
  594. package/dist/tools/execution/SoilPublishTool/constants.d.ts +6 -0
  595. package/dist/tools/execution/SoilPublishTool/constants.d.ts.map +1 -0
  596. package/dist/tools/execution/SoilPublishTool/constants.js +6 -0
  597. package/dist/tools/execution/SoilPublishTool/constants.js.map +1 -0
  598. package/dist/tools/execution/SoilPublishTool/prompt.d.ts +2 -0
  599. package/dist/tools/execution/SoilPublishTool/prompt.d.ts.map +1 -0
  600. package/dist/tools/execution/SoilPublishTool/prompt.js +2 -0
  601. package/dist/tools/execution/SoilPublishTool/prompt.js.map +1 -0
  602. package/dist/tools/execution/SoilRebuildTool/SoilRebuildTool.d.ts +34 -0
  603. package/dist/tools/execution/SoilRebuildTool/SoilRebuildTool.d.ts.map +1 -0
  604. package/dist/tools/execution/SoilRebuildTool/SoilRebuildTool.js +66 -0
  605. package/dist/tools/execution/SoilRebuildTool/SoilRebuildTool.js.map +1 -0
  606. package/dist/tools/execution/SoilRebuildTool/constants.d.ts +6 -0
  607. package/dist/tools/execution/SoilRebuildTool/constants.d.ts.map +1 -0
  608. package/dist/tools/execution/SoilRebuildTool/constants.js +6 -0
  609. package/dist/tools/execution/SoilRebuildTool/constants.js.map +1 -0
  610. package/dist/tools/execution/SoilRebuildTool/prompt.d.ts +2 -0
  611. package/dist/tools/execution/SoilRebuildTool/prompt.d.ts.map +1 -0
  612. package/dist/tools/execution/SoilRebuildTool/prompt.js +2 -0
  613. package/dist/tools/execution/SoilRebuildTool/prompt.js.map +1 -0
  614. package/dist/tools/executor.d.ts.map +1 -1
  615. package/dist/tools/executor.js +5 -2
  616. package/dist/tools/executor.js.map +1 -1
  617. package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.d.ts +38 -0
  618. package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.d.ts.map +1 -0
  619. package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.js +247 -0
  620. package/dist/tools/fs/ApplyPatchTool/ApplyPatchTool.js.map +1 -0
  621. package/dist/tools/fs/FileValidationTool/FileValidationTool.d.ts.map +1 -1
  622. package/dist/tools/fs/FileValidationTool/FileValidationTool.js +3 -2
  623. package/dist/tools/fs/FileValidationTool/FileValidationTool.js.map +1 -1
  624. package/dist/tools/fs/GlobTool/GlobTool.d.ts +1 -1
  625. package/dist/tools/fs/GlobTool/GlobTool.d.ts.map +1 -1
  626. package/dist/tools/fs/GlobTool/GlobTool.js +12 -1
  627. package/dist/tools/fs/GlobTool/GlobTool.js.map +1 -1
  628. package/dist/tools/fs/GrepTool/GrepTool.d.ts +1 -1
  629. package/dist/tools/fs/GrepTool/GrepTool.d.ts.map +1 -1
  630. package/dist/tools/fs/GrepTool/GrepTool.js +10 -3
  631. package/dist/tools/fs/GrepTool/GrepTool.js.map +1 -1
  632. package/dist/tools/fs/JsonQueryTool/JsonQueryTool.d.ts +1 -1
  633. package/dist/tools/fs/JsonQueryTool/JsonQueryTool.d.ts.map +1 -1
  634. package/dist/tools/fs/JsonQueryTool/JsonQueryTool.js +8 -1
  635. package/dist/tools/fs/JsonQueryTool/JsonQueryTool.js.map +1 -1
  636. package/dist/tools/fs/ListDirTool/ListDirTool.d.ts +2 -2
  637. package/dist/tools/fs/ListDirTool/ListDirTool.d.ts.map +1 -1
  638. package/dist/tools/fs/ListDirTool/ListDirTool.js +13 -5
  639. package/dist/tools/fs/ListDirTool/ListDirTool.js.map +1 -1
  640. package/dist/tools/fs/ReadTool/ReadTool.d.ts +1 -1
  641. package/dist/tools/fs/ReadTool/ReadTool.d.ts.map +1 -1
  642. package/dist/tools/fs/ReadTool/ReadTool.js +8 -1
  643. package/dist/tools/fs/ReadTool/ReadTool.js.map +1 -1
  644. package/dist/tools/index.d.ts +2 -0
  645. package/dist/tools/index.d.ts.map +1 -1
  646. package/dist/tools/index.js +1 -0
  647. package/dist/tools/index.js.map +1 -1
  648. package/dist/tools/media/ViewImageTool/ViewImageTool.d.ts +31 -0
  649. package/dist/tools/media/ViewImageTool/ViewImageTool.d.ts.map +1 -0
  650. package/dist/tools/media/ViewImageTool/ViewImageTool.js +53 -0
  651. package/dist/tools/media/ViewImageTool/ViewImageTool.js.map +1 -0
  652. package/dist/tools/mutation/ConfigureNotificationRoutingTool/ConfigureNotificationRoutingTool.d.ts +25 -0
  653. package/dist/tools/mutation/ConfigureNotificationRoutingTool/ConfigureNotificationRoutingTool.d.ts.map +1 -0
  654. package/dist/tools/mutation/ConfigureNotificationRoutingTool/ConfigureNotificationRoutingTool.js +59 -0
  655. package/dist/tools/mutation/ConfigureNotificationRoutingTool/ConfigureNotificationRoutingTool.js.map +1 -0
  656. package/dist/tools/mutation/ConfigureNotificationRoutingTool/constants.d.ts +5 -0
  657. package/dist/tools/mutation/ConfigureNotificationRoutingTool/constants.d.ts.map +1 -0
  658. package/dist/tools/mutation/ConfigureNotificationRoutingTool/constants.js +5 -0
  659. package/dist/tools/mutation/ConfigureNotificationRoutingTool/constants.js.map +1 -0
  660. package/dist/tools/mutation/ConfigureNotificationRoutingTool/prompt.d.ts +2 -0
  661. package/dist/tools/mutation/ConfigureNotificationRoutingTool/prompt.d.ts.map +1 -0
  662. package/dist/tools/mutation/ConfigureNotificationRoutingTool/prompt.js +5 -0
  663. package/dist/tools/mutation/ConfigureNotificationRoutingTool/prompt.js.map +1 -0
  664. package/dist/tools/mutation/TaskCreateTool/TaskCreateTool.d.ts +4 -4
  665. package/dist/tools/mutation/TaskOutputTool/TaskOutputTool.d.ts +2 -2
  666. package/dist/tools/network/GitHubCliTool/GitHubCliTool.d.ts +144 -0
  667. package/dist/tools/network/GitHubCliTool/GitHubCliTool.d.ts.map +1 -0
  668. package/dist/tools/network/GitHubCliTool/GitHubCliTool.js +245 -0
  669. package/dist/tools/network/GitHubCliTool/GitHubCliTool.js.map +1 -0
  670. package/dist/tools/network/HttpFetchTool/HttpFetchTool.d.ts +16 -0
  671. package/dist/tools/network/HttpFetchTool/HttpFetchTool.d.ts.map +1 -1
  672. package/dist/tools/network/HttpFetchTool/HttpFetchTool.js +252 -13
  673. package/dist/tools/network/HttpFetchTool/HttpFetchTool.js.map +1 -1
  674. package/dist/tools/network/McpStdioTool/McpStdioTool.d.ts +109 -0
  675. package/dist/tools/network/McpStdioTool/McpStdioTool.d.ts.map +1 -0
  676. package/dist/tools/network/McpStdioTool/McpStdioTool.js +121 -0
  677. package/dist/tools/network/McpStdioTool/McpStdioTool.js.map +1 -0
  678. package/dist/tools/query/GoalStateTool/GoalStateTool.js +1 -1
  679. package/dist/tools/query/GoalStateTool/GoalStateTool.js.map +1 -1
  680. package/dist/tools/query/MemoryRecallTool/MemoryRecallTool.d.ts +4 -4
  681. package/dist/tools/query/SoilQueryTool/SoilQueryTool.d.ts +118 -0
  682. package/dist/tools/query/SoilQueryTool/SoilQueryTool.d.ts.map +1 -0
  683. package/dist/tools/query/SoilQueryTool/SoilQueryTool.js +335 -0
  684. package/dist/tools/query/SoilQueryTool/SoilQueryTool.js.map +1 -0
  685. package/dist/tools/query/SoilQueryTool/constants.d.ts +8 -0
  686. package/dist/tools/query/SoilQueryTool/constants.d.ts.map +1 -0
  687. package/dist/tools/query/SoilQueryTool/constants.js +8 -0
  688. package/dist/tools/query/SoilQueryTool/constants.js.map +1 -0
  689. package/dist/tools/query/SoilQueryTool/prompt.d.ts +2 -0
  690. package/dist/tools/query/SoilQueryTool/prompt.d.ts.map +1 -0
  691. package/dist/tools/query/SoilQueryTool/prompt.js +2 -0
  692. package/dist/tools/query/SoilQueryTool/prompt.js.map +1 -0
  693. package/dist/tools/schedule/CreateScheduleTool/CreateScheduleTool.d.ts +164 -52
  694. package/dist/tools/schedule/CreateScheduleTool/CreateScheduleTool.d.ts.map +1 -1
  695. package/dist/tools/schedule/ListSchedulesTool/ListSchedulesTool.d.ts +4 -4
  696. package/dist/tools/schedule/UpdateScheduleTool/UpdateScheduleTool.d.ts +76 -76
  697. package/dist/tools/system/GitLogTool/GitLogTool.d.ts +4 -4
  698. package/dist/tools/system/ProcessSessionTool/ProcessSessionTool.d.ts +220 -0
  699. package/dist/tools/system/ProcessSessionTool/ProcessSessionTool.d.ts.map +1 -0
  700. package/dist/tools/system/ProcessSessionTool/ProcessSessionTool.js +354 -0
  701. package/dist/tools/system/ProcessSessionTool/ProcessSessionTool.js.map +1 -0
  702. package/dist/tools/system/ShellCommandTool/ShellCommandTool.d.ts +44 -0
  703. package/dist/tools/system/ShellCommandTool/ShellCommandTool.d.ts.map +1 -0
  704. package/dist/tools/system/ShellCommandTool/ShellCommandTool.js +40 -0
  705. package/dist/tools/system/ShellCommandTool/ShellCommandTool.js.map +1 -0
  706. package/dist/tools/system/UpdatePlanTool/UpdatePlanTool.d.ts +61 -0
  707. package/dist/tools/system/UpdatePlanTool/UpdatePlanTool.d.ts.map +1 -0
  708. package/dist/tools/system/UpdatePlanTool/UpdatePlanTool.js +42 -0
  709. package/dist/tools/system/UpdatePlanTool/UpdatePlanTool.js.map +1 -0
  710. package/dist/tools/types.d.ts +6 -2
  711. package/dist/tools/types.d.ts.map +1 -1
  712. package/dist/tools/types.js.map +1 -1
  713. package/package.json +7 -1
  714. package/dist/adapters/agents/browser-use-cli.d.ts +0 -19
  715. package/dist/adapters/agents/browser-use-cli.d.ts.map +0 -1
  716. package/dist/adapters/agents/browser-use-cli.js +0 -74
  717. package/dist/adapters/agents/browser-use-cli.js.map +0 -1
  718. package/dist/adapters/agents/openclaw-acp.d.ts +0 -32
  719. package/dist/adapters/agents/openclaw-acp.d.ts.map +0 -1
  720. package/dist/adapters/agents/openclaw-acp.js +0 -212
  721. package/dist/adapters/agents/openclaw-acp.js.map +0 -1
  722. package/dist/adapters/datasources/openclaw-datasource.d.ts +0 -33
  723. package/dist/adapters/datasources/openclaw-datasource.d.ts.map +0 -1
  724. package/dist/adapters/datasources/openclaw-datasource.js +0 -176
  725. package/dist/adapters/datasources/openclaw-datasource.js.map +0 -1
  726. package/dist/orchestrator/knowledge/memory/memory-lifecycle.d.ts +0 -2
  727. package/dist/orchestrator/knowledge/memory/memory-lifecycle.d.ts.map +0 -1
  728. package/dist/orchestrator/knowledge/memory/memory-lifecycle.js +0 -2
  729. package/dist/orchestrator/knowledge/memory/memory-lifecycle.js.map +0 -1
@@ -0,0 +1,893 @@
1
+ import * as fsp from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import { randomUUID } from "node:crypto";
4
+ import Database from "better-sqlite3";
5
+ import { cosineSimilarity } from "../knowledge/embedding-client.js";
6
+ import { getDefaultSoilSqliteIndexPath, resolveSoilRootDir } from "./config.js";
7
+ import { SoilEmbeddingSchema, SoilMutationSchema, SoilPageMemberSchema, SoilPageSchema, SoilRecordFilterSchema, SoilRecordSchema, SoilSearchRequestSchema, } from "./contracts.js";
8
+ import { SOIL_SCHEMA_SQL } from "./ddl.js";
9
+ function buildSnippet(text, query) {
10
+ const haystack = text.trim();
11
+ if (!haystack)
12
+ return "";
13
+ const tokens = query.toLowerCase().split(/\s+/).filter(Boolean);
14
+ const lower = haystack.toLowerCase();
15
+ for (const token of tokens) {
16
+ const index = lower.indexOf(token);
17
+ if (index >= 0) {
18
+ const start = Math.max(0, index - 50);
19
+ const end = Math.min(haystack.length, index + token.length + 100);
20
+ return haystack.slice(start, end);
21
+ }
22
+ }
23
+ return haystack.slice(0, 160);
24
+ }
25
+ function serializeJson(value) {
26
+ return JSON.stringify(value ?? {});
27
+ }
28
+ function parseJsonObject(input) {
29
+ try {
30
+ const parsed = JSON.parse(input);
31
+ return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)
32
+ ? parsed
33
+ : {};
34
+ }
35
+ catch {
36
+ return {};
37
+ }
38
+ }
39
+ function parseJsonArray(input) {
40
+ try {
41
+ const parsed = JSON.parse(input);
42
+ return Array.isArray(parsed) ? parsed.filter((item) => typeof item === "string") : [];
43
+ }
44
+ catch {
45
+ return [];
46
+ }
47
+ }
48
+ function parseReindexRecordIds(input) {
49
+ try {
50
+ const payload = JSON.parse(input);
51
+ if (typeof payload !== "object" || payload === null || Array.isArray(payload)) {
52
+ return [];
53
+ }
54
+ const value = payload.record_ids;
55
+ return Array.isArray(value)
56
+ ? value.filter((recordId) => typeof recordId === "string" && recordId.length > 0)
57
+ : [];
58
+ }
59
+ catch {
60
+ return [];
61
+ }
62
+ }
63
+ function encodeEmbedding(entry) {
64
+ if (entry.encoding === "f32le") {
65
+ const floats = entry.embedding instanceof Uint8Array
66
+ ? new Float32Array(entry.embedding.buffer.slice(entry.embedding.byteOffset, entry.embedding.byteOffset + entry.embedding.byteLength))
67
+ : Float32Array.from(entry.embedding);
68
+ return Buffer.from(floats.buffer.slice(floats.byteOffset, floats.byteOffset + floats.byteLength));
69
+ }
70
+ const payload = entry.embedding instanceof Uint8Array
71
+ ? Array.from(entry.embedding.values())
72
+ : entry.embedding;
73
+ return Buffer.from(JSON.stringify(payload), "utf8");
74
+ }
75
+ function decodeEmbedding(row) {
76
+ if (row.encoding === "f32le") {
77
+ const copy = row.embedding.buffer.slice(row.embedding.byteOffset, row.embedding.byteOffset + row.embedding.byteLength);
78
+ return Array.from(new Float32Array(copy));
79
+ }
80
+ return JSON.parse(row.embedding.toString("utf8"));
81
+ }
82
+ function toRecord(row) {
83
+ return SoilRecordSchema.parse({
84
+ ...row,
85
+ is_active: Boolean(row.is_active),
86
+ metadata_json: parseJsonObject(row.metadata_json),
87
+ });
88
+ }
89
+ function toPage(row) {
90
+ return SoilPageSchema.parse(row);
91
+ }
92
+ function toPageMember(row) {
93
+ return SoilPageMemberSchema.parse(row);
94
+ }
95
+ function unique(values) {
96
+ return [...new Set(values.filter((value) => value.length > 0))];
97
+ }
98
+ function dedupeCandidates(candidates, limit) {
99
+ const byChunkId = new Map();
100
+ for (const candidate of candidates) {
101
+ const current = byChunkId.get(candidate.chunk_id);
102
+ if (!current ||
103
+ candidate.score > current.score ||
104
+ (candidate.score === current.score && current.page_id === null && candidate.page_id !== null)) {
105
+ byChunkId.set(candidate.chunk_id, candidate);
106
+ }
107
+ }
108
+ return [...byChunkId.values()]
109
+ .sort((left, right) => right.score - left.score || left.chunk_id.localeCompare(right.chunk_id))
110
+ .slice(0, limit)
111
+ .map((candidate, index) => ({ ...candidate, rank: index + 1 }));
112
+ }
113
+ function fuseCandidates(lexical, dense, limit, rrfK = 60) {
114
+ const byChunkId = new Map();
115
+ for (const [lane, weight, candidates] of [
116
+ ["lexical", 1, lexical],
117
+ ["dense", 0.85, dense],
118
+ ]) {
119
+ for (const candidate of candidates) {
120
+ const prior = byChunkId.get(candidate.chunk_id);
121
+ const laneScore = weight / (rrfK + candidate.rank);
122
+ const metadata_json = {
123
+ ...(prior?.metadata_json ?? candidate.metadata_json),
124
+ [`${lane}_rank`]: candidate.rank,
125
+ [`${lane}_score`]: candidate.score,
126
+ };
127
+ if (!prior) {
128
+ byChunkId.set(candidate.chunk_id, {
129
+ ...candidate,
130
+ lane: "hybrid",
131
+ score: laneScore,
132
+ metadata_json,
133
+ });
134
+ continue;
135
+ }
136
+ byChunkId.set(candidate.chunk_id, {
137
+ ...prior,
138
+ page_id: prior.page_id ?? candidate.page_id,
139
+ snippet: prior.snippet ?? candidate.snippet,
140
+ score: prior.score + laneScore,
141
+ metadata_json,
142
+ });
143
+ }
144
+ }
145
+ return [...byChunkId.values()]
146
+ .sort((left, right) => right.score - left.score || left.chunk_id.localeCompare(right.chunk_id))
147
+ .slice(0, limit)
148
+ .map((candidate, index) => ({ ...candidate, rank: index + 1 }));
149
+ }
150
+ function hasExplicitMetadataFilter(request) {
151
+ const recordFilter = request.record_filter;
152
+ const pageFilter = request.page_filter;
153
+ return Boolean(recordFilter.record_ids?.length ||
154
+ recordFilter.record_keys?.length ||
155
+ recordFilter.record_types?.length ||
156
+ recordFilter.statuses?.length ||
157
+ recordFilter.goal_ids?.length ||
158
+ recordFilter.task_ids?.length ||
159
+ recordFilter.source_types?.length ||
160
+ recordFilter.source_ids?.length ||
161
+ recordFilter.valid_at ||
162
+ recordFilter.updated_after ||
163
+ recordFilter.updated_before ||
164
+ pageFilter.page_ids?.length ||
165
+ pageFilter.soil_ids?.length ||
166
+ pageFilter.routes?.length ||
167
+ pageFilter.kinds?.length ||
168
+ pageFilter.page_statuses?.length ||
169
+ pageFilter.relative_paths?.length);
170
+ }
171
+ function buildRecordFilterSql(request, params) {
172
+ const clauses = [];
173
+ const filter = request.record_filter;
174
+ if (filter.active_only) {
175
+ clauses.push("r.is_active = 1");
176
+ }
177
+ if (filter.record_ids?.length) {
178
+ clauses.push(`r.record_id IN (${filter.record_ids.map(() => "?").join(", ")})`);
179
+ params.push(...filter.record_ids);
180
+ }
181
+ if (filter.record_keys?.length) {
182
+ clauses.push(`r.record_key IN (${filter.record_keys.map(() => "?").join(", ")})`);
183
+ params.push(...filter.record_keys);
184
+ }
185
+ if (filter.record_types?.length) {
186
+ clauses.push(`r.record_type IN (${filter.record_types.map(() => "?").join(", ")})`);
187
+ params.push(...filter.record_types);
188
+ }
189
+ if (filter.statuses?.length) {
190
+ clauses.push(`r.status IN (${filter.statuses.map(() => "?").join(", ")})`);
191
+ params.push(...filter.statuses);
192
+ }
193
+ if (filter.goal_ids?.length) {
194
+ clauses.push(`r.goal_id IN (${filter.goal_ids.map(() => "?").join(", ")})`);
195
+ params.push(...filter.goal_ids);
196
+ }
197
+ if (filter.task_ids?.length) {
198
+ clauses.push(`r.task_id IN (${filter.task_ids.map(() => "?").join(", ")})`);
199
+ params.push(...filter.task_ids);
200
+ }
201
+ if (filter.source_types?.length) {
202
+ clauses.push(`r.source_type IN (${filter.source_types.map(() => "?").join(", ")})`);
203
+ params.push(...filter.source_types);
204
+ }
205
+ if (filter.source_ids?.length) {
206
+ clauses.push(`r.source_id IN (${filter.source_ids.map(() => "?").join(", ")})`);
207
+ params.push(...filter.source_ids);
208
+ }
209
+ if (filter.valid_at) {
210
+ clauses.push("(r.valid_from IS NULL OR r.valid_from <= ?)");
211
+ clauses.push("(r.valid_to IS NULL OR r.valid_to > ?)");
212
+ params.push(filter.valid_at, filter.valid_at);
213
+ }
214
+ if (filter.updated_after) {
215
+ clauses.push("r.updated_at >= ?");
216
+ params.push(filter.updated_after);
217
+ }
218
+ if (filter.updated_before) {
219
+ clauses.push("r.updated_at <= ?");
220
+ params.push(filter.updated_before);
221
+ }
222
+ return clauses;
223
+ }
224
+ function buildPageFilterSql(request, params) {
225
+ const clauses = [];
226
+ const filter = request.page_filter;
227
+ if (filter.page_ids?.length) {
228
+ clauses.push(`p.page_id IN (${filter.page_ids.map(() => "?").join(", ")})`);
229
+ params.push(...filter.page_ids);
230
+ }
231
+ if (filter.soil_ids?.length) {
232
+ clauses.push(`p.soil_id IN (${filter.soil_ids.map(() => "?").join(", ")})`);
233
+ params.push(...filter.soil_ids);
234
+ }
235
+ if (filter.routes?.length) {
236
+ clauses.push(`p.route IN (${filter.routes.map(() => "?").join(", ")})`);
237
+ params.push(...filter.routes);
238
+ }
239
+ if (filter.kinds?.length) {
240
+ clauses.push(`p.kind IN (${filter.kinds.map(() => "?").join(", ")})`);
241
+ params.push(...filter.kinds);
242
+ }
243
+ if (filter.page_statuses?.length) {
244
+ clauses.push(`p.status IN (${filter.page_statuses.map(() => "?").join(", ")})`);
245
+ params.push(...filter.page_statuses);
246
+ }
247
+ if (filter.relative_paths?.length) {
248
+ clauses.push(`p.relative_path IN (${filter.relative_paths.map(() => "?").join(", ")})`);
249
+ params.push(...filter.relative_paths);
250
+ }
251
+ return clauses;
252
+ }
253
+ function buildPageExistsSql(recordIdExpr, request, params) {
254
+ const filter = request.page_filter;
255
+ const pagePredicates = [];
256
+ if (filter.page_ids?.length) {
257
+ pagePredicates.push(`p.page_id IN (${filter.page_ids.map(() => "?").join(", ")})`);
258
+ params.push(...filter.page_ids);
259
+ }
260
+ if (filter.soil_ids?.length) {
261
+ pagePredicates.push(`p.soil_id IN (${filter.soil_ids.map(() => "?").join(", ")})`);
262
+ params.push(...filter.soil_ids);
263
+ }
264
+ if (filter.routes?.length) {
265
+ pagePredicates.push(`p.route IN (${filter.routes.map(() => "?").join(", ")})`);
266
+ params.push(...filter.routes);
267
+ }
268
+ if (filter.kinds?.length) {
269
+ pagePredicates.push(`p.kind IN (${filter.kinds.map(() => "?").join(", ")})`);
270
+ params.push(...filter.kinds);
271
+ }
272
+ if (filter.page_statuses?.length) {
273
+ pagePredicates.push(`p.status IN (${filter.page_statuses.map(() => "?").join(", ")})`);
274
+ params.push(...filter.page_statuses);
275
+ }
276
+ if (filter.relative_paths?.length) {
277
+ pagePredicates.push(`p.relative_path IN (${filter.relative_paths.map(() => "?").join(", ")})`);
278
+ params.push(...filter.relative_paths);
279
+ }
280
+ if (pagePredicates.length === 0) {
281
+ return [];
282
+ }
283
+ return [
284
+ `EXISTS (
285
+ SELECT 1
286
+ FROM soil_page_members spm
287
+ JOIN soil_pages p ON p.page_id = spm.page_id
288
+ WHERE spm.record_id = ${recordIdExpr}
289
+ AND ${pagePredicates.join(" AND ")}
290
+ )`,
291
+ ];
292
+ }
293
+ function buildCandidatePageIdSql(recordIdExpr, request, params) {
294
+ const filter = request.page_filter;
295
+ const pagePredicates = [];
296
+ if (filter.page_ids?.length) {
297
+ pagePredicates.push(`p.page_id IN (${filter.page_ids.map(() => "?").join(", ")})`);
298
+ params.push(...filter.page_ids);
299
+ }
300
+ if (filter.soil_ids?.length) {
301
+ pagePredicates.push(`p.soil_id IN (${filter.soil_ids.map(() => "?").join(", ")})`);
302
+ params.push(...filter.soil_ids);
303
+ }
304
+ if (filter.routes?.length) {
305
+ pagePredicates.push(`p.route IN (${filter.routes.map(() => "?").join(", ")})`);
306
+ params.push(...filter.routes);
307
+ }
308
+ if (filter.kinds?.length) {
309
+ pagePredicates.push(`p.kind IN (${filter.kinds.map(() => "?").join(", ")})`);
310
+ params.push(...filter.kinds);
311
+ }
312
+ if (filter.page_statuses?.length) {
313
+ pagePredicates.push(`p.status IN (${filter.page_statuses.map(() => "?").join(", ")})`);
314
+ params.push(...filter.page_statuses);
315
+ }
316
+ if (filter.relative_paths?.length) {
317
+ pagePredicates.push(`p.relative_path IN (${filter.relative_paths.map(() => "?").join(", ")})`);
318
+ params.push(...filter.relative_paths);
319
+ }
320
+ const baseQuery = pagePredicates.length > 0
321
+ ? `SELECT spm.page_id
322
+ FROM soil_page_members spm
323
+ JOIN soil_pages p ON p.page_id = spm.page_id
324
+ WHERE spm.record_id = ${recordIdExpr}
325
+ AND ${pagePredicates.join(" AND ")}
326
+ ORDER BY CASE WHEN spm.role = 'primary' THEN 0 ELSE 1 END, spm.ordinal, p.relative_path, spm.page_id
327
+ LIMIT 1`
328
+ : `SELECT spm.page_id
329
+ FROM soil_page_members spm
330
+ WHERE spm.record_id = ${recordIdExpr}
331
+ ORDER BY CASE WHEN spm.role = 'primary' THEN 0 ELSE 1 END, spm.ordinal, spm.page_id
332
+ LIMIT 1`;
333
+ return `(${baseQuery})`;
334
+ }
335
+ export class SqliteSoilRepository {
336
+ db;
337
+ dbPath;
338
+ constructor(db, dbPath) {
339
+ this.db = db;
340
+ this.dbPath = dbPath;
341
+ }
342
+ static async create(configInput = {}) {
343
+ const rootDir = resolveSoilRootDir(configInput.rootDir);
344
+ const indexPath = configInput.indexPath ? path.resolve(configInput.indexPath) : getDefaultSoilSqliteIndexPath(rootDir);
345
+ await fsp.mkdir(path.dirname(indexPath), { recursive: true });
346
+ const db = new Database(indexPath);
347
+ db.pragma("journal_mode = WAL");
348
+ db.pragma("foreign_keys = ON");
349
+ db.exec(SOIL_SCHEMA_SQL);
350
+ return new SqliteSoilRepository(db, indexPath);
351
+ }
352
+ close() {
353
+ this.db.close();
354
+ }
355
+ async applyMutation(input) {
356
+ const mutation = SoilMutationSchema.parse(input);
357
+ const contentMutatedRecordIds = new Set();
358
+ const embeddedChunkIds = new Set();
359
+ const embeddedRecordIds = new Set();
360
+ const tx = this.db.transaction(() => {
361
+ for (const record of mutation.records) {
362
+ if (record.is_active) {
363
+ this.db
364
+ .prepare("UPDATE soil_records SET is_active = 0 WHERE record_key = ? AND record_id != ? AND is_active = 1")
365
+ .run(record.record_key, record.record_id);
366
+ }
367
+ this.db.prepare(`
368
+ INSERT INTO soil_records (
369
+ record_id, record_key, version, record_type, soil_id, title, summary, canonical_text,
370
+ goal_id, task_id, status, confidence, importance, source_reliability,
371
+ valid_from, valid_to, supersedes_record_id, is_active, source_type, source_id,
372
+ metadata_json, created_at, updated_at
373
+ ) VALUES (
374
+ @record_id, @record_key, @version, @record_type, @soil_id, @title, @summary, @canonical_text,
375
+ @goal_id, @task_id, @status, @confidence, @importance, @source_reliability,
376
+ @valid_from, @valid_to, @supersedes_record_id, @is_active, @source_type, @source_id,
377
+ @metadata_json, @created_at, @updated_at
378
+ )
379
+ ON CONFLICT(record_id) DO UPDATE SET
380
+ record_key = excluded.record_key,
381
+ version = excluded.version,
382
+ record_type = excluded.record_type,
383
+ soil_id = excluded.soil_id,
384
+ title = excluded.title,
385
+ summary = excluded.summary,
386
+ canonical_text = excluded.canonical_text,
387
+ goal_id = excluded.goal_id,
388
+ task_id = excluded.task_id,
389
+ status = excluded.status,
390
+ confidence = excluded.confidence,
391
+ importance = excluded.importance,
392
+ source_reliability = excluded.source_reliability,
393
+ valid_from = excluded.valid_from,
394
+ valid_to = excluded.valid_to,
395
+ supersedes_record_id = excluded.supersedes_record_id,
396
+ is_active = excluded.is_active,
397
+ source_type = excluded.source_type,
398
+ source_id = excluded.source_id,
399
+ metadata_json = excluded.metadata_json,
400
+ created_at = excluded.created_at,
401
+ updated_at = excluded.updated_at
402
+ `).run({
403
+ ...record,
404
+ is_active: record.is_active ? 1 : 0,
405
+ metadata_json: serializeJson(record.metadata_json),
406
+ });
407
+ contentMutatedRecordIds.add(record.record_id);
408
+ }
409
+ for (const chunk of mutation.chunks) {
410
+ this.db.prepare(`
411
+ INSERT INTO soil_chunks (
412
+ chunk_id, record_id, soil_id, chunk_index, chunk_kind, heading_path_json,
413
+ chunk_text, token_count, checksum, created_at
414
+ ) VALUES (
415
+ @chunk_id, @record_id, @soil_id, @chunk_index, @chunk_kind, @heading_path_json,
416
+ @chunk_text, @token_count, @checksum, @created_at
417
+ )
418
+ ON CONFLICT(chunk_id) DO UPDATE SET
419
+ record_id = excluded.record_id,
420
+ soil_id = excluded.soil_id,
421
+ chunk_index = excluded.chunk_index,
422
+ chunk_kind = excluded.chunk_kind,
423
+ heading_path_json = excluded.heading_path_json,
424
+ chunk_text = excluded.chunk_text,
425
+ token_count = excluded.token_count,
426
+ checksum = excluded.checksum,
427
+ created_at = excluded.created_at
428
+ `).run({
429
+ ...chunk,
430
+ heading_path_json: serializeJson(chunk.heading_path_json),
431
+ });
432
+ contentMutatedRecordIds.add(chunk.record_id);
433
+ }
434
+ for (const page of mutation.pages) {
435
+ this.db.prepare(`
436
+ INSERT INTO soil_pages (
437
+ page_id, soil_id, relative_path, route, kind, status, markdown, checksum, projected_at
438
+ ) VALUES (
439
+ @page_id, @soil_id, @relative_path, @route, @kind, @status, @markdown, @checksum, @projected_at
440
+ )
441
+ ON CONFLICT(page_id) DO UPDATE SET
442
+ soil_id = excluded.soil_id,
443
+ relative_path = excluded.relative_path,
444
+ route = excluded.route,
445
+ kind = excluded.kind,
446
+ status = excluded.status,
447
+ markdown = excluded.markdown,
448
+ checksum = excluded.checksum,
449
+ projected_at = excluded.projected_at
450
+ `).run(page);
451
+ }
452
+ for (const member of mutation.page_members) {
453
+ this.db.prepare(`
454
+ INSERT INTO soil_page_members (page_id, record_id, ordinal, role, confidence)
455
+ VALUES (@page_id, @record_id, @ordinal, @role, @confidence)
456
+ ON CONFLICT(page_id, record_id, role) DO UPDATE SET
457
+ ordinal = excluded.ordinal,
458
+ confidence = excluded.confidence
459
+ `).run(member);
460
+ }
461
+ for (const embedding of mutation.embeddings) {
462
+ const parsed = SoilEmbeddingSchema.parse(embedding);
463
+ this.db.prepare(`
464
+ INSERT INTO soil_embeddings (
465
+ chunk_id, model, embedding_version, encoding, embedding, embedded_at
466
+ ) VALUES (
467
+ @chunk_id, @model, @embedding_version, @encoding, @embedding, @embedded_at
468
+ )
469
+ ON CONFLICT(chunk_id, model, embedding_version) DO UPDATE SET
470
+ encoding = excluded.encoding,
471
+ embedding = excluded.embedding,
472
+ embedded_at = excluded.embedded_at
473
+ `).run({
474
+ chunk_id: parsed.chunk_id,
475
+ model: parsed.model,
476
+ embedding_version: parsed.embedding_version,
477
+ encoding: parsed.encoding,
478
+ embedding: encodeEmbedding(parsed),
479
+ embedded_at: parsed.embedded_at,
480
+ });
481
+ const chunk = this.db
482
+ .prepare("SELECT record_id FROM soil_chunks WHERE chunk_id = ?")
483
+ .get(parsed.chunk_id);
484
+ if (chunk) {
485
+ embeddedChunkIds.add(parsed.chunk_id);
486
+ embeddedRecordIds.add(chunk.record_id);
487
+ }
488
+ }
489
+ for (const edge of mutation.edges) {
490
+ this.db.prepare(`
491
+ INSERT INTO soil_edges (src_record_id, edge_type, dst_record_id, confidence)
492
+ VALUES (@src_record_id, @edge_type, @dst_record_id, @confidence)
493
+ ON CONFLICT(src_record_id, edge_type, dst_record_id) DO UPDATE SET
494
+ confidence = excluded.confidence
495
+ `).run(edge);
496
+ }
497
+ for (const tombstone of mutation.tombstones) {
498
+ this.db.prepare(`
499
+ INSERT INTO soil_tombstones (tombstone_id, record_id, record_key, version, reason, deleted_at)
500
+ VALUES (?, ?, ?, ?, ?, ?)
501
+ `).run(randomUUID(), tombstone.record_id, tombstone.record_key, tombstone.version, tombstone.reason, tombstone.deleted_at);
502
+ if (tombstone.record_id) {
503
+ this.db
504
+ .prepare("UPDATE soil_records SET is_active = 0 WHERE record_id = ?")
505
+ .run(tombstone.record_id);
506
+ contentMutatedRecordIds.add(tombstone.record_id);
507
+ }
508
+ if (tombstone.record_key) {
509
+ this.db
510
+ .prepare("UPDATE soil_records SET is_active = 0 WHERE record_key = ?")
511
+ .run(tombstone.record_key);
512
+ const rows = this.db
513
+ .prepare("SELECT record_id FROM soil_records WHERE record_key = ?")
514
+ .all(tombstone.record_key);
515
+ for (const row of rows) {
516
+ contentMutatedRecordIds.add(row.record_id);
517
+ }
518
+ }
519
+ }
520
+ this.syncFts(unique([...contentMutatedRecordIds]));
521
+ const fullyEmbeddedRecordIds = new Set(unique([...embeddedRecordIds]).filter((recordId) => this.recordHasCompleteEmbeddingMutation(recordId, embeddedChunkIds)));
522
+ this.completeOpenEmbeddingJobs(fullyEmbeddedRecordIds);
523
+ if (contentMutatedRecordIds.size > 0) {
524
+ const openEmbeddingRecordIds = new Set(this.loadOpenEmbeddingReindexRecordIds());
525
+ const insertJob = this.db.prepare(`
526
+ INSERT INTO soil_reindex_jobs (
527
+ job_id, scope, reason, status, payload_json, created_at
528
+ ) VALUES (?, ?, ?, ?, ?, ?)
529
+ `);
530
+ for (const recordId of unique([...contentMutatedRecordIds]).filter((id) => !fullyEmbeddedRecordIds.has(id) && !openEmbeddingRecordIds.has(id))) {
531
+ insertJob.run(randomUUID(), "embedding", "content mutation invalidated embeddings", "pending", JSON.stringify({ record_ids: [recordId] }), new Date().toISOString());
532
+ }
533
+ }
534
+ });
535
+ tx();
536
+ }
537
+ async loadRecords(input = {}) {
538
+ const record_filter = SoilRecordFilterSchema.parse(input);
539
+ const params = [];
540
+ const where = buildRecordFilterSql(SoilSearchRequestSchema.parse({ query: "__load_records__", direct_lookup: false, record_filter }), params);
541
+ const rows = this.db.prepare(`
542
+ SELECT *
543
+ FROM soil_records r
544
+ ${where.length > 0 ? `WHERE ${where.join(" AND ")}` : ""}
545
+ ORDER BY r.record_key, r.version
546
+ `).all(...params);
547
+ return rows.map((row) => toRecord(row));
548
+ }
549
+ async queueReindex(recordIds, reason) {
550
+ const ids = unique(recordIds);
551
+ if (ids.length === 0)
552
+ return;
553
+ this.db.prepare(`
554
+ INSERT INTO soil_reindex_jobs (
555
+ job_id, scope, reason, status, payload_json, created_at
556
+ ) VALUES (?, ?, ?, ?, ?, ?)
557
+ `).run(randomUUID(), "embedding", reason, "pending", JSON.stringify({ record_ids: ids }), new Date().toISOString());
558
+ }
559
+ async upsertPages(pages) {
560
+ await this.applyMutation({ pages });
561
+ }
562
+ async replacePageMembers(pageId, members) {
563
+ const parsed = members.map((member) => SoilPageMemberSchema.parse({ ...member, page_id: pageId }));
564
+ const tx = this.db.transaction(() => {
565
+ this.db.prepare("DELETE FROM soil_page_members WHERE page_id = ?").run(pageId);
566
+ for (const member of parsed) {
567
+ this.db.prepare(`
568
+ INSERT INTO soil_page_members (page_id, record_id, ordinal, role, confidence)
569
+ VALUES (@page_id, @record_id, @ordinal, @role, @confidence)
570
+ `).run(member);
571
+ }
572
+ });
573
+ tx();
574
+ }
575
+ async lookupDirect(input) {
576
+ const request = SoilSearchRequestSchema.parse(input);
577
+ if (!request.direct_lookup) {
578
+ return { request, candidates: [] };
579
+ }
580
+ const pageParams = [request.query, request.query, request.query];
581
+ const pageWhere = ["(soil_id = ? OR relative_path = ? OR page_id = ?)"];
582
+ pageWhere.push(...buildPageFilterSql(request, pageParams));
583
+ pageParams.push(request.limit);
584
+ const pageMatches = this.db.prepare(`
585
+ SELECT page_id, soil_id
586
+ FROM soil_pages p
587
+ WHERE ${pageWhere.join(" AND ")}
588
+ LIMIT ?
589
+ `).all(...pageParams);
590
+ const recordParams = [request.query, request.query, request.query, request.query];
591
+ const recordWhere = ["(r.record_id = ? OR r.record_key = ? OR r.soil_id = ? OR r.source_id = ?)"];
592
+ recordWhere.push(...buildRecordFilterSql(request, recordParams));
593
+ recordParams.push(request.limit);
594
+ const recordRows = this.db.prepare(`
595
+ SELECT *
596
+ FROM soil_records r
597
+ WHERE ${recordWhere.join(" AND ")}
598
+ LIMIT ?
599
+ `).all(...recordParams);
600
+ const candidates = [];
601
+ for (const row of recordRows) {
602
+ const chunk = this.db
603
+ .prepare("SELECT * FROM soil_chunks WHERE record_id = ? ORDER BY chunk_index LIMIT 1")
604
+ .get(row.record_id);
605
+ candidates.push({
606
+ chunk_id: chunk?.chunk_id ?? `record:${row.record_id}`,
607
+ record_id: row.record_id,
608
+ soil_id: row.soil_id,
609
+ lane: "direct",
610
+ rank: candidates.length + 1,
611
+ score: 1,
612
+ snippet: chunk ? buildSnippet(chunk.chunk_text, request.query) : row.summary ?? row.title,
613
+ page_id: pageMatches.find((page) => page.soil_id === row.soil_id)?.page_id ?? null,
614
+ metadata_json: parseJsonObject(row.metadata_json),
615
+ });
616
+ }
617
+ for (const page of pageMatches) {
618
+ if (candidates.some((candidate) => candidate.page_id === page.page_id))
619
+ continue;
620
+ const member = this.db
621
+ .prepare(`
622
+ SELECT spm.record_id, sc.chunk_id, sc.chunk_text
623
+ FROM soil_page_members spm
624
+ LEFT JOIN soil_chunks sc ON sc.record_id = spm.record_id
625
+ WHERE spm.page_id = ?
626
+ ORDER BY spm.ordinal, sc.chunk_index
627
+ LIMIT 1
628
+ `)
629
+ .get(page.page_id);
630
+ candidates.push({
631
+ chunk_id: member?.chunk_id ?? `page:${page.page_id}`,
632
+ record_id: member?.record_id ?? `page:${page.page_id}`,
633
+ soil_id: page.soil_id,
634
+ lane: "direct",
635
+ rank: candidates.length + 1,
636
+ score: 1,
637
+ snippet: member?.chunk_text ? buildSnippet(member.chunk_text, request.query) : page.soil_id,
638
+ page_id: page.page_id,
639
+ metadata_json: {},
640
+ });
641
+ }
642
+ return { request, candidates: candidates.slice(0, request.limit) };
643
+ }
644
+ async searchHybrid(input) {
645
+ const request = SoilSearchRequestSchema.parse(input);
646
+ if (request.direct_lookup) {
647
+ const direct = await this.lookupDirect(request);
648
+ if (direct.candidates.length > 0) {
649
+ return direct.candidates.slice(0, request.limit);
650
+ }
651
+ }
652
+ const lexical = await this.searchLexical({ ...request, direct_lookup: false });
653
+ if (!request.query_embedding?.length) {
654
+ return lexical;
655
+ }
656
+ const lexicalRecordIds = unique(lexical.map((candidate) => candidate.record_id));
657
+ const dense = lexicalRecordIds.length > 0
658
+ ? await this.searchDense({
659
+ ...request,
660
+ direct_lookup: false,
661
+ dense_candidate_record_ids: lexicalRecordIds,
662
+ })
663
+ : hasExplicitMetadataFilter(request)
664
+ ? await this.searchDense({ ...request, direct_lookup: false })
665
+ : [];
666
+ return fuseCandidates(lexical, dense, request.limit);
667
+ }
668
+ async searchLexical(input) {
669
+ const request = SoilSearchRequestSchema.parse(input);
670
+ const pageIdParams = [];
671
+ const pageIdSql = buildCandidatePageIdSql("r.record_id", request, pageIdParams);
672
+ const whereParams = [];
673
+ const where = ["soil_chunk_fts MATCH ?"];
674
+ where.push(...buildRecordFilterSql(request, whereParams));
675
+ where.push(...buildPageExistsSql("r.record_id", request, whereParams));
676
+ const params = [...pageIdParams, request.query, ...whereParams, request.lexical_top_k];
677
+ const rows = this.db.prepare(`
678
+ SELECT
679
+ soil_chunk_fts.chunk_id AS chunk_id,
680
+ soil_chunk_fts.record_id AS record_id,
681
+ soil_chunk_fts.soil_id AS soil_id,
682
+ ${pageIdSql} AS page_id,
683
+ r.title AS title,
684
+ r.summary AS summary,
685
+ sc.chunk_text AS chunk_text,
686
+ bm25(soil_chunk_fts, 8.0, 5.0, 3.0, 1.0) AS score
687
+ FROM soil_chunk_fts
688
+ JOIN soil_chunks sc ON sc.chunk_id = soil_chunk_fts.chunk_id
689
+ JOIN soil_records r ON r.record_id = soil_chunk_fts.record_id
690
+ WHERE ${where.join(" AND ")}
691
+ ORDER BY score
692
+ LIMIT ?
693
+ `).all(...params);
694
+ const candidates = rows.map((row, index) => ({
695
+ chunk_id: row.chunk_id,
696
+ record_id: row.record_id,
697
+ soil_id: row.soil_id,
698
+ page_id: row.page_id,
699
+ lane: "lexical",
700
+ rank: index + 1,
701
+ score: -1 * row.score,
702
+ snippet: buildSnippet(row.chunk_text, request.query),
703
+ metadata_json: { title: row.title, summary: row.summary },
704
+ }));
705
+ return dedupeCandidates(candidates, request.limit);
706
+ }
707
+ async searchDense(input) {
708
+ const request = SoilSearchRequestSchema.parse(input);
709
+ if (!request.query_embedding?.length) {
710
+ return [];
711
+ }
712
+ const pageIdParams = [];
713
+ const pageIdSql = buildCandidatePageIdSql("r.record_id", request, pageIdParams);
714
+ const params = [];
715
+ const where = buildRecordFilterSql(request, params);
716
+ where.push(...buildPageExistsSql("r.record_id", request, params));
717
+ const denseCandidateRecordIds = request.dense_candidate_record_ids ? unique(request.dense_candidate_record_ids) : null;
718
+ if (denseCandidateRecordIds?.length === 0) {
719
+ return [];
720
+ }
721
+ if (denseCandidateRecordIds) {
722
+ where.push(`r.record_id IN (${denseCandidateRecordIds.map(() => "?").join(", ")})`);
723
+ params.push(...denseCandidateRecordIds);
724
+ }
725
+ const excludedRecordIds = this.loadOpenEmbeddingReindexRecordIds();
726
+ if (excludedRecordIds.length > 0) {
727
+ where.push(`r.record_id NOT IN (${excludedRecordIds.map(() => "?").join(", ")})`);
728
+ params.push(...excludedRecordIds);
729
+ }
730
+ if (request.query_embedding_model) {
731
+ where.push("se.model = ?");
732
+ params.push(request.query_embedding_model);
733
+ }
734
+ where.push(`
735
+ NOT EXISTS (
736
+ SELECT 1
737
+ FROM soil_embeddings newer
738
+ WHERE newer.chunk_id = se.chunk_id
739
+ AND newer.model = se.model
740
+ AND newer.embedding_version > se.embedding_version
741
+ )
742
+ `);
743
+ const queryParams = [...pageIdParams, ...params];
744
+ const rows = this.db.prepare(`
745
+ SELECT
746
+ se.chunk_id,
747
+ se.model,
748
+ se.embedding_version,
749
+ se.encoding,
750
+ se.embedding,
751
+ se.embedded_at,
752
+ sc.record_id,
753
+ sc.soil_id,
754
+ sc.chunk_text,
755
+ r.title,
756
+ r.summary,
757
+ ${pageIdSql} AS page_id
758
+ FROM soil_embeddings se
759
+ JOIN soil_chunks sc ON sc.chunk_id = se.chunk_id
760
+ JOIN soil_records r ON r.record_id = sc.record_id
761
+ ${where.length > 0 ? `WHERE ${where.join(" AND ")}` : ""}
762
+ `).all(...queryParams);
763
+ const scored = [];
764
+ for (const row of rows) {
765
+ try {
766
+ scored.push({
767
+ row,
768
+ similarity: cosineSimilarity(request.query_embedding, decodeEmbedding(row)),
769
+ });
770
+ }
771
+ catch {
772
+ continue;
773
+ }
774
+ }
775
+ scored.sort((left, right) => right.similarity - left.similarity);
776
+ const candidates = scored.slice(0, request.dense_top_k).map(({ row, similarity }, index) => ({
777
+ chunk_id: row.chunk_id,
778
+ record_id: row.record_id,
779
+ soil_id: row.soil_id,
780
+ page_id: row.page_id,
781
+ lane: "dense",
782
+ rank: index + 1,
783
+ score: similarity,
784
+ snippet: buildSnippet(row.chunk_text, request.query),
785
+ metadata_json: { model: row.model, embedding_version: row.embedding_version, title: row.title, summary: row.summary },
786
+ }));
787
+ return dedupeCandidates(candidates, request.limit);
788
+ }
789
+ recordHasCompleteEmbeddingMutation(recordId, embeddedChunkIds) {
790
+ const chunks = this.db
791
+ .prepare("SELECT chunk_id FROM soil_chunks WHERE record_id = ?")
792
+ .all(recordId);
793
+ return chunks.length > 0 && chunks.every((chunk) => embeddedChunkIds.has(chunk.chunk_id));
794
+ }
795
+ completeOpenEmbeddingJobs(recordIds) {
796
+ if (recordIds.size === 0)
797
+ return;
798
+ const jobs = this.db.prepare(`
799
+ SELECT job_id, payload_json
800
+ FROM soil_reindex_jobs
801
+ WHERE scope = 'embedding'
802
+ AND status IN ('pending', 'running')
803
+ `).all();
804
+ const complete = this.db.prepare("UPDATE soil_reindex_jobs SET status = 'completed', completed_at = ? WHERE job_id = ?");
805
+ const completedAt = new Date().toISOString();
806
+ for (const job of jobs) {
807
+ const jobRecordIds = parseReindexRecordIds(job.payload_json);
808
+ if (jobRecordIds.length > 0 && jobRecordIds.every((recordId) => recordIds.has(recordId))) {
809
+ complete.run(completedAt, job.job_id);
810
+ }
811
+ }
812
+ }
813
+ loadOpenEmbeddingReindexRecordIds() {
814
+ const rows = this.db.prepare(`
815
+ SELECT payload_json
816
+ FROM soil_reindex_jobs
817
+ WHERE scope = 'embedding'
818
+ AND status IN ('pending', 'running')
819
+ `).all();
820
+ const recordIds = [];
821
+ for (const row of rows) {
822
+ recordIds.push(...parseReindexRecordIds(row.payload_json));
823
+ }
824
+ return unique(recordIds);
825
+ }
826
+ async loadPagesForRecords(recordIds) {
827
+ const ids = unique(recordIds);
828
+ const result = new Map();
829
+ if (ids.length === 0)
830
+ return result;
831
+ const rows = this.db.prepare(`
832
+ SELECT p.*, spm.record_id
833
+ FROM soil_page_members spm
834
+ JOIN soil_pages p ON p.page_id = spm.page_id
835
+ WHERE spm.record_id IN (${ids.map(() => "?").join(", ")})
836
+ ORDER BY p.relative_path, spm.ordinal
837
+ `).all(...ids);
838
+ for (const row of rows) {
839
+ const pages = result.get(row.record_id) ?? [];
840
+ pages.push(toPage(row));
841
+ result.set(row.record_id, pages);
842
+ }
843
+ return result;
844
+ }
845
+ async loadPageMembers(pageIds) {
846
+ const ids = unique(pageIds);
847
+ if (ids.length === 0)
848
+ return [];
849
+ const rows = this.db.prepare(`
850
+ SELECT *
851
+ FROM soil_page_members
852
+ WHERE page_id IN (${ids.map(() => "?").join(", ")})
853
+ ORDER BY page_id, ordinal
854
+ `).all(...ids);
855
+ return rows.map((row) => toPageMember(row));
856
+ }
857
+ syncFts(recordIds) {
858
+ if (recordIds.length === 0)
859
+ return;
860
+ if (recordIds.length > 0) {
861
+ this.db.prepare(`DELETE FROM soil_chunk_fts WHERE record_id IN (${recordIds.map(() => "?").join(", ")})`).run(...recordIds);
862
+ }
863
+ const rows = this.db.prepare(`
864
+ SELECT
865
+ sc.chunk_id,
866
+ sc.record_id,
867
+ sc.soil_id,
868
+ (
869
+ SELECT spm.page_id
870
+ FROM soil_page_members spm
871
+ WHERE spm.record_id = r.record_id
872
+ ORDER BY CASE WHEN spm.role = 'primary' THEN 0 ELSE 1 END, spm.ordinal, spm.page_id
873
+ LIMIT 1
874
+ ) AS page_id,
875
+ r.title AS title_context,
876
+ COALESCE(r.summary, '') AS summary_context,
877
+ sc.heading_path_json,
878
+ sc.chunk_text
879
+ FROM soil_chunks sc
880
+ JOIN soil_records r ON r.record_id = sc.record_id
881
+ WHERE sc.record_id IN (${recordIds.map(() => "?").join(", ")})
882
+ `).all(...recordIds);
883
+ const insert = this.db.prepare(`
884
+ INSERT INTO soil_chunk_fts (
885
+ chunk_id, record_id, soil_id, page_id, title_context, summary_context, heading_context, chunk_text
886
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
887
+ `);
888
+ for (const row of rows) {
889
+ insert.run(row.chunk_id, row.record_id, row.soil_id, row.page_id, row.title_context, row.summary_context, parseJsonArray(row.heading_path_json).join(" / "), row.chunk_text);
890
+ }
891
+ }
892
+ }
893
+ //# sourceMappingURL=sqlite-repository.js.map