@xopcai/xopc 0.0.115 → 0.0.117

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 (578) hide show
  1. package/README.md +26 -10
  2. package/README.zh-CN.md +26 -10
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/demo-memory/src/index.d.ts +6 -0
  5. package/dist/extensions/demo-memory/src/index.js +132 -0
  6. package/dist/extensions/demo-memory/src/index.js.map +1 -0
  7. package/dist/extensions/demo-memory/xopc.extension.json +15 -0
  8. package/dist/extensions/feishu/src/schema/config-schema.d.ts +3 -3
  9. package/dist/extensions/telegram/src/command-handler.js +1 -2
  10. package/dist/extensions/telegram/src/command-handler.js.map +1 -1
  11. package/dist/extensions/telegram/src/config-schema.d.ts +8 -8
  12. package/dist/extensions/telegram/xopc.extension.json +1 -1
  13. package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
  14. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DVnBfANm.js → agent-avatar-dicebear-BBLhJ2C6.js} +1 -1
  15. package/dist/gateway/static/root/assets/agents-C6xgagZd.js +71 -0
  16. package/dist/gateway/static/root/assets/app-management-settings-panel-CBpLONvG.js +1 -0
  17. package/dist/gateway/static/root/assets/{appearance-settings-BQpPSTHD.js → appearance-settings-CGcc54yj.js} +1 -1
  18. package/dist/gateway/static/root/assets/apps-page-DdDx0V4z.js +1 -0
  19. package/dist/gateway/static/root/assets/{archive-plugin-CXu-Csep.js → archive-plugin-DZsVqMhU.js} +1 -1
  20. package/dist/gateway/static/root/assets/{attachment-load-BAjgOoGY.js → attachment-load-CIol6JWX.js} +1 -1
  21. package/dist/gateway/static/root/assets/{binary-plugins-BSBgB2hO.js → binary-plugins-B3UauMfp.js} +1 -1
  22. package/dist/gateway/static/root/assets/{block-editor-BpXw9TTR.js → block-editor-2HJoFchH.js} +3 -3
  23. package/dist/gateway/static/root/assets/browser-settings-page-CUOO-PQk.js +8 -0
  24. package/dist/gateway/static/root/assets/capability-presets-api-XQoMTI0A.js +1 -0
  25. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CfqF-kGr.js +1 -0
  26. package/dist/gateway/static/root/assets/{channels-settings-BbPUpzWB.js → channels-settings-BYyRzsex.js} +1 -1
  27. package/dist/gateway/static/root/assets/connectors-page-DIvEz4NX.js +2 -0
  28. package/dist/gateway/static/root/assets/cron-api-R41aQCX9.js +1 -0
  29. package/dist/gateway/static/root/assets/cron-page-D97nFqQD.js +3 -0
  30. package/dist/gateway/static/root/assets/dreaming-settings-Bceaw1PG.js +1 -0
  31. package/dist/gateway/static/root/assets/{extension-debug-page-D9kgUHCc.js → extension-debug-page-DX5WRE_t.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-page-CGyhXqzR.js → extension-page-Buah7Bw-.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-settings-page-DL8Xquqd.js → extension-settings-page-DuroLVnf.js} +1 -1
  34. package/dist/gateway/static/root/assets/{fetch-D0VXA932.js → fetch-B5zdl27C.js} +1 -1
  35. package/dist/gateway/static/root/assets/{format-interval-label-Be8SmgUw.js → format-interval-label-Dn_QKIqb.js} +1 -1
  36. package/dist/gateway/static/root/assets/gateway-config-api-gT4ZhE7h.js +1 -0
  37. package/dist/gateway/static/root/assets/gateway-settings-iISWAZRm.js +1 -0
  38. package/dist/gateway/static/root/assets/{gateway-startup-retry-DERUH61L.js → gateway-startup-retry-B3kL8KGY.js} +1 -1
  39. package/dist/gateway/static/root/assets/goal-detail-page-DCUROLMQ.js +1 -0
  40. package/dist/gateway/static/root/assets/{goals-config-api-BPmqWk90.js → goals-config-api-AR-fVh0P.js} +1 -1
  41. package/dist/gateway/static/root/assets/goals-page-Cpb21ezg.js +2 -0
  42. package/dist/gateway/static/root/assets/goals-settings-CPAuFwoD.js +1 -0
  43. package/dist/gateway/static/root/assets/{heartbeat-config-api-Bfdzr8oV.js → heartbeat-config-api-D7bKFEeO.js} +1 -1
  44. package/dist/gateway/static/root/assets/heartbeat-settings-CC69vNx0.js +1 -0
  45. package/dist/gateway/static/root/assets/index-CwhK8qCh.js +122 -0
  46. package/dist/gateway/static/root/assets/index-CyfhARL-.css +1 -0
  47. package/dist/gateway/static/root/assets/{interval-presets-utKbuCRY.js → interval-presets-0DtsnxE0.js} +1 -1
  48. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CjqS6c6V.js → keyboard-shortcuts-settings-BPREtN8B.js} +1 -1
  49. package/dist/gateway/static/root/assets/logs-page-DefCgF4o.js +2 -0
  50. package/dist/gateway/static/root/assets/{markdown-split-DW8C47iB.js → markdown-split-ChbR9LGO.js} +1 -1
  51. package/dist/gateway/static/root/assets/{media-plugins-D6HwDhDT.js → media-plugins-B82oP80n.js} +1 -1
  52. package/dist/gateway/static/root/assets/messages-Cf1O9JB0.js +3 -0
  53. package/dist/gateway/static/root/assets/models-hub-panel-DmKiIihT.js +2 -0
  54. package/dist/gateway/static/root/assets/note-detail-page-CxxfLRJZ.js +2 -0
  55. package/dist/gateway/static/root/assets/{note-image-lightbox-pJM35Pz5.js → note-image-lightbox-CDknITM3.js} +1 -1
  56. package/dist/gateway/static/root/assets/notes-page-X2slSx7V.js +1 -0
  57. package/dist/gateway/static/root/assets/{preview-open-alternatives-CVwHuyN6.js → preview-open-alternatives-DV3xQsWB.js} +1 -1
  58. package/dist/gateway/static/root/assets/remote-access-hub-BvmUWqgu.js +1 -0
  59. package/dist/gateway/static/root/assets/{save-bar-controls-Ba-UEk7x.js → save-bar-controls-BODCXnvY.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schedule-field-CNN9595U.js → schedule-field-CgJSCD3B.js} +1 -1
  61. package/dist/gateway/static/root/assets/{schema-form-DnNMmtD5.js → schema-form-qtfEI6QM.js} +1 -1
  62. package/dist/gateway/static/root/assets/sessions-page-B0yESuuL.js +1 -0
  63. package/dist/gateway/static/root/assets/settings-advanced-gate-q2M8RKOo.js +1 -0
  64. package/dist/gateway/static/root/assets/{settings-collapsible-section-CmOz80i5.js → settings-collapsible-section-BHZKjVcS.js} +1 -1
  65. package/dist/gateway/static/root/assets/{settings-form-section-BmK7JJOV.js → settings-form-section-5i35D-J1.js} +1 -1
  66. package/dist/gateway/static/root/assets/settings-page-CGozabLD.js +1 -0
  67. package/dist/gateway/static/root/assets/setup-status-panel-FoOSe6nU.js +1 -0
  68. package/dist/gateway/static/root/assets/{share-preview-page-Dp2qGrHC.js → share-preview-page-B0H63tDv.js} +1 -1
  69. package/dist/gateway/static/root/assets/shares-settings-Cy5zWyYQ.js +1 -0
  70. package/dist/gateway/static/root/assets/skill-reload-api-DaZNFro9.js +1 -0
  71. package/dist/gateway/static/root/assets/skills-page-CnwtUzvw.js +2 -0
  72. package/dist/gateway/static/root/assets/system-settings-panel-DXs2VmBt.js +1 -0
  73. package/dist/gateway/static/root/assets/typed-models-lib-4gPuydz_.js +1 -0
  74. package/dist/gateway/static/root/assets/{use-channel-catalog-CHlO8J9G.js → use-channel-catalog-BCjP_VHb.js} +1 -1
  75. package/dist/gateway/static/root/assets/voice-api-key-field-DvKiOglO.js +1 -0
  76. package/dist/gateway/static/root/assets/{voice-player-store-DDDWYHvg.js → voice-player-store-BlF9V05n.js} +1 -1
  77. package/dist/gateway/static/root/assets/workflows-page-CAVZcONQ.js +18 -0
  78. package/dist/gateway/static/root/index.html +5 -5
  79. package/dist/package.js +1 -1
  80. package/dist/src/agent/agent-manager.d.ts +1 -1
  81. package/dist/src/agent/agent-manager.js +7 -8
  82. package/dist/src/agent/agent-manager.js.map +1 -1
  83. package/dist/src/agent/agent-scope.js +6 -8
  84. package/dist/src/agent/agent-scope.js.map +1 -1
  85. package/dist/src/agent/background-review/coordinator.js +0 -1
  86. package/dist/src/agent/background-review/coordinator.js.map +1 -1
  87. package/dist/src/agent/background-review/run-background-review.d.ts +0 -2
  88. package/dist/src/agent/background-review/run-background-review.js +2 -4
  89. package/dist/src/agent/background-review/run-background-review.js.map +1 -1
  90. package/dist/src/agent/background-review/settings.js +8 -7
  91. package/dist/src/agent/background-review/settings.js.map +1 -1
  92. package/dist/src/agent/bootstrap/bootstrap-context.d.ts +2 -2
  93. package/dist/src/agent/bootstrap/bootstrap-context.js +4 -4
  94. package/dist/src/agent/bootstrap/bootstrap-context.js.map +1 -1
  95. package/dist/src/agent/context/workspace-seed.js +1 -1
  96. package/dist/src/agent/embedded/run-for-session.js +1 -1
  97. package/dist/src/agent/embedded/run-for-session.js.map +1 -1
  98. package/dist/src/agent/fallback/candidates.js +6 -3
  99. package/dist/src/agent/fallback/candidates.js.map +1 -1
  100. package/dist/src/agent/goals/checklist-judge.d.ts +1 -0
  101. package/dist/src/agent/goals/checklist-judge.js +1 -1
  102. package/dist/src/agent/goals/checklist-judge.js.map +1 -1
  103. package/dist/src/agent/goals/evaluate-turn.d.ts +1 -0
  104. package/dist/src/agent/goals/evaluate-turn.js +1 -0
  105. package/dist/src/agent/goals/evaluate-turn.js.map +1 -1
  106. package/dist/src/agent/goals/post-turn.js +8 -1
  107. package/dist/src/agent/goals/post-turn.js.map +1 -1
  108. package/dist/src/agent/image/generation/runtime-types.d.ts +2 -0
  109. package/dist/src/agent/image/generation/runtime.js +1 -1
  110. package/dist/src/agent/image/generation/runtime.js.map +1 -1
  111. package/dist/src/agent/image/image-helpers.d.ts +1 -1
  112. package/dist/src/agent/image/image-helpers.js +4 -17
  113. package/dist/src/agent/image/image-helpers.js.map +1 -1
  114. package/dist/src/agent/image/image-model-fallback.js +1 -1
  115. package/dist/src/agent/image/image-model-fallback.js.map +1 -1
  116. package/dist/src/agent/image/inbound-image-handling.js +1 -1
  117. package/dist/src/agent/image/inbound-image-handling.js.map +1 -1
  118. package/dist/src/agent/image/tool-model-config.d.ts +1 -1
  119. package/dist/src/agent/image/tool-model-config.js +2 -2
  120. package/dist/src/agent/image/tool-model-config.js.map +1 -1
  121. package/dist/src/agent/image/understanding/pi-ai-provider.js +5 -2
  122. package/dist/src/agent/image/understanding/pi-ai-provider.js.map +1 -1
  123. package/dist/src/agent/image/understanding/provider-registry.d.ts +1 -0
  124. package/dist/src/agent/image/understanding/provider-registry.js +16 -2
  125. package/dist/src/agent/image/understanding/provider-registry.js.map +1 -1
  126. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +1 -1
  127. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +1 -1
  128. package/dist/src/agent/media-generation/runtime-shared.d.ts +5 -2
  129. package/dist/src/agent/media-generation/runtime-shared.js +1 -1
  130. package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
  131. package/dist/src/agent/memory/builtin-memory-store.d.ts +2 -0
  132. package/dist/src/agent/memory/builtin-memory-store.js +4 -0
  133. package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
  134. package/dist/src/agent/memory/builtin-provider.d.ts +31 -9
  135. package/dist/src/agent/memory/builtin-provider.js +261 -11
  136. package/dist/src/agent/memory/builtin-provider.js.map +1 -1
  137. package/dist/src/agent/memory/context-assembler.d.ts +10 -0
  138. package/dist/src/agent/memory/context-assembler.js +26 -0
  139. package/dist/src/agent/memory/context-assembler.js.map +1 -0
  140. package/dist/src/agent/memory/create-memory-manager.js +25 -7
  141. package/dist/src/agent/memory/create-memory-manager.js.map +1 -1
  142. package/dist/src/agent/memory/dreaming/config.d.ts +1 -6
  143. package/dist/src/agent/memory/dreaming/config.js +8 -8
  144. package/dist/src/agent/memory/dreaming/config.js.map +1 -1
  145. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +2 -0
  146. package/dist/src/agent/memory/dreaming/deep-promotion.js +24 -0
  147. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -1
  148. package/dist/src/agent/memory/index.d.ts +1 -0
  149. package/dist/src/agent/memory/index.js +4 -3
  150. package/dist/src/agent/memory/inject-prefetch.js +6 -2
  151. package/dist/src/agent/memory/inject-prefetch.js.map +1 -1
  152. package/dist/src/agent/memory/manager.d.ts +37 -1
  153. package/dist/src/agent/memory/manager.js +332 -40
  154. package/dist/src/agent/memory/manager.js.map +1 -1
  155. package/dist/src/agent/memory/memory-config.js +12 -15
  156. package/dist/src/agent/memory/memory-config.js.map +1 -1
  157. package/dist/src/agent/memory/plugin-discovery.d.ts +19 -5
  158. package/dist/src/agent/memory/plugin-discovery.js +97 -31
  159. package/dist/src/agent/memory/plugin-discovery.js.map +1 -1
  160. package/dist/src/agent/memory/provider.d.ts +20 -15
  161. package/dist/src/agent/memory/stub-memory-provider.d.ts +17 -2
  162. package/dist/src/agent/memory/stub-memory-provider.js +20 -3
  163. package/dist/src/agent/memory/stub-memory-provider.js.map +1 -1
  164. package/dist/src/agent/memory/types.d.ts +136 -0
  165. package/dist/src/agent/models/manager.d.ts +1 -1
  166. package/dist/src/agent/models/manager.js +1 -1
  167. package/dist/src/agent/models/manager.js.map +1 -1
  168. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +1 -1
  169. package/dist/src/agent/orchestration/agent-orchestrator.js +2 -1
  170. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  171. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +2 -2
  172. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
  173. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
  174. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +2 -6
  175. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +2 -8
  176. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +1 -1
  177. package/dist/src/agent/reply/post-compaction-context.js +11 -6
  178. package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
  179. package/dist/src/agent/reply/startup-context.js +8 -9
  180. package/dist/src/agent/reply/startup-context.js.map +1 -1
  181. package/dist/src/agent/service/process-direct-streaming.js +1 -4
  182. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  183. package/dist/src/agent/service/session-context-report.js +1 -1
  184. package/dist/src/agent/service/session-context-report.js.map +1 -1
  185. package/dist/src/agent/service.js +21 -25
  186. package/dist/src/agent/service.js.map +1 -1
  187. package/dist/src/agent/service.types.d.ts +1 -2
  188. package/dist/src/agent/session/session-hydrator.js +1 -2
  189. package/dist/src/agent/session/session-hydrator.js.map +1 -1
  190. package/dist/src/agent/session/session-inspector.d.ts +1 -1
  191. package/dist/src/agent/session/session-inspector.js +9 -14
  192. package/dist/src/agent/session/session-inspector.js.map +1 -1
  193. package/dist/src/agent/skills/hub-pull.js +1 -1
  194. package/dist/src/agent/starter-agents.d.ts +1 -3
  195. package/dist/src/agent/starter-agents.js +13 -21
  196. package/dist/src/agent/starter-agents.js.map +1 -1
  197. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -2
  198. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
  199. package/dist/src/agent/tools/composio-tool.d.ts +8 -0
  200. package/dist/src/agent/tools/composio-tool.js +46 -0
  201. package/dist/src/agent/tools/composio-tool.js.map +1 -0
  202. package/dist/src/agent/tools/curated-memory-tool.d.ts +2 -5
  203. package/dist/src/agent/tools/curated-memory-tool.js +20 -16
  204. package/dist/src/agent/tools/curated-memory-tool.js.map +1 -1
  205. package/dist/src/agent/tools/factory.d.ts +0 -4
  206. package/dist/src/agent/tools/factory.js +32 -66
  207. package/dist/src/agent/tools/factory.js.map +1 -1
  208. package/dist/src/agent/tools/image-generate-tool.d.ts +1 -1
  209. package/dist/src/agent/tools/image-generate-tool.js +19 -14
  210. package/dist/src/agent/tools/image-generate-tool.js.map +1 -1
  211. package/dist/src/agent/tools/image-tool.js +1 -3
  212. package/dist/src/agent/tools/image-tool.js.map +1 -1
  213. package/dist/src/agent/tools/index.d.ts +1 -0
  214. package/dist/src/agent/tools/index.js +2 -1
  215. package/dist/src/agent/tools/memory-tool.d.ts +2 -2
  216. package/dist/src/agent/tools/memory-tool.js +39 -14
  217. package/dist/src/agent/tools/memory-tool.js.map +1 -1
  218. package/dist/src/agent/tools/session-search-tool.js +1 -3
  219. package/dist/src/agent/tools/session-search-tool.js.map +1 -1
  220. package/dist/src/agent/tools/web-extract.js +6 -5
  221. package/dist/src/agent/tools/web-extract.js.map +1 -1
  222. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +1 -1
  223. package/dist/src/agent/workflow/builtins/audit-repo.js +15 -2
  224. package/dist/src/agent/workflow/builtins/audit-repo.js.map +1 -1
  225. package/dist/src/agent/workflow/builtins/client-proposal.d.ts +1 -1
  226. package/dist/src/agent/workflow/builtins/client-proposal.js +10 -1
  227. package/dist/src/agent/workflow/builtins/client-proposal.js.map +1 -1
  228. package/dist/src/agent/workflow/builtins/competitor-scan.d.ts +1 -1
  229. package/dist/src/agent/workflow/builtins/competitor-scan.js +16 -2
  230. package/dist/src/agent/workflow/builtins/competitor-scan.js.map +1 -1
  231. package/dist/src/agent/workflow/builtins/content-draft.d.ts +1 -1
  232. package/dist/src/agent/workflow/builtins/content-draft.js +15 -2
  233. package/dist/src/agent/workflow/builtins/content-draft.js.map +1 -1
  234. package/dist/src/agent/workflow/builtins/content-repurpose.d.ts +1 -1
  235. package/dist/src/agent/workflow/builtins/content-repurpose.js +10 -1
  236. package/dist/src/agent/workflow/builtins/content-repurpose.js.map +1 -1
  237. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +1 -1
  238. package/dist/src/agent/workflow/builtins/debug-incident.js +9 -1
  239. package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -1
  240. package/dist/src/agent/workflow/builtins/decision-compare.d.ts +1 -1
  241. package/dist/src/agent/workflow/builtins/decision-compare.js +16 -2
  242. package/dist/src/agent/workflow/builtins/decision-compare.js.map +1 -1
  243. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +1 -1
  244. package/dist/src/agent/workflow/builtins/implementation-plan.js +11 -1
  245. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +1 -1
  246. package/dist/src/agent/workflow/builtins/inbox-triage.d.ts +1 -1
  247. package/dist/src/agent/workflow/builtins/inbox-triage.js +11 -1
  248. package/dist/src/agent/workflow/builtins/inbox-triage.js.map +1 -1
  249. package/dist/src/agent/workflow/builtins/meeting-prep.d.ts +1 -1
  250. package/dist/src/agent/workflow/builtins/meeting-prep.js +9 -1
  251. package/dist/src/agent/workflow/builtins/meeting-prep.js.map +1 -1
  252. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +1 -1
  253. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +9 -1
  254. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +1 -1
  255. package/dist/src/agent/workflow/builtins/offer-design.d.ts +1 -1
  256. package/dist/src/agent/workflow/builtins/offer-design.js +10 -1
  257. package/dist/src/agent/workflow/builtins/offer-design.js.map +1 -1
  258. package/dist/src/agent/workflow/builtins/pr-review.d.ts +1 -1
  259. package/dist/src/agent/workflow/builtins/pr-review.js +9 -1
  260. package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -1
  261. package/dist/src/agent/workflow/builtins/release-check.d.ts +1 -1
  262. package/dist/src/agent/workflow/builtins/release-check.js +10 -1
  263. package/dist/src/agent/workflow/builtins/release-check.js.map +1 -1
  264. package/dist/src/agent/workflow/builtins/research.d.ts +1 -1
  265. package/dist/src/agent/workflow/builtins/research.js +16 -2
  266. package/dist/src/agent/workflow/builtins/research.js.map +1 -1
  267. package/dist/src/agent/workflow/builtins/weekly-review.d.ts +1 -1
  268. package/dist/src/agent/workflow/builtins/weekly-review.js +9 -1
  269. package/dist/src/agent/workflow/builtins/weekly-review.js.map +1 -1
  270. package/dist/src/agent/workflow/subagent-runner.js +1 -3
  271. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  272. package/dist/src/agent-manifest/index.d.ts +4 -0
  273. package/dist/src/agent-manifest/index.js +10 -0
  274. package/dist/src/agent-manifest/index.js.map +1 -0
  275. package/dist/src/agent-manifest/prompt.d.ts +2 -0
  276. package/dist/src/agent-manifest/prompt.js +57 -0
  277. package/dist/src/agent-manifest/prompt.js.map +1 -0
  278. package/dist/src/agent-manifest/resolver.d.ts +11 -0
  279. package/dist/src/agent-manifest/resolver.js +93 -0
  280. package/dist/src/agent-manifest/resolver.js.map +1 -0
  281. package/dist/src/agent-manifest/schema.d.ts +778 -0
  282. package/dist/src/agent-manifest/schema.js +267 -0
  283. package/dist/src/agent-manifest/schema.js.map +1 -0
  284. package/dist/src/agent-manifest/validator.d.ts +24 -0
  285. package/dist/src/agent-manifest/validator.js +87 -0
  286. package/dist/src/agent-manifest/validator.js.map +1 -0
  287. package/dist/src/agent-runtime/boundary-guard.d.ts +12 -0
  288. package/dist/src/agent-runtime/boundary-guard.js +23 -0
  289. package/dist/src/agent-runtime/boundary-guard.js.map +1 -0
  290. package/dist/src/agent-runtime/index.d.ts +7 -0
  291. package/dist/src/agent-runtime/index.js +8 -0
  292. package/dist/src/agent-runtime/memory-runtime.d.ts +21 -0
  293. package/dist/src/agent-runtime/memory-runtime.js +50 -0
  294. package/dist/src/agent-runtime/memory-runtime.js.map +1 -0
  295. package/dist/src/agent-runtime/model-router.d.ts +11 -0
  296. package/dist/src/agent-runtime/model-router.js +16 -0
  297. package/dist/src/agent-runtime/model-router.js.map +1 -0
  298. package/dist/src/agent-runtime/run-trace.d.ts +27 -0
  299. package/dist/src/agent-runtime/run-trace.js +53 -0
  300. package/dist/src/agent-runtime/run-trace.js.map +1 -0
  301. package/dist/src/agent-runtime/runtime-profile.d.ts +24 -0
  302. package/dist/src/agent-runtime/runtime-profile.js +44 -0
  303. package/dist/src/agent-runtime/runtime-profile.js.map +1 -0
  304. package/dist/src/agent-runtime/tool-registry.d.ts +28 -0
  305. package/dist/src/agent-runtime/tool-registry.js +52 -0
  306. package/dist/src/agent-runtime/tool-registry.js.map +1 -0
  307. package/dist/src/agent-runtime/workflow-runtime.d.ts +31 -0
  308. package/dist/src/agent-runtime/workflow-runtime.js +34 -0
  309. package/dist/src/agent-runtime/workflow-runtime.js.map +1 -0
  310. package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
  311. package/dist/src/browser/actions/extension-registry-bridge.js.map +1 -1
  312. package/dist/src/browser/actions/registry.js +5 -8
  313. package/dist/src/browser/actions/registry.js.map +1 -1
  314. package/dist/src/browser/backend-from-config.d.ts +1 -1
  315. package/dist/src/browser/backend-from-config.js +50 -71
  316. package/dist/src/browser/backend-from-config.js.map +1 -1
  317. package/dist/src/browser/browser-command-timeout.d.ts +0 -1
  318. package/dist/src/browser/browser-command-timeout.js +3 -7
  319. package/dist/src/browser/browser-command-timeout.js.map +1 -1
  320. package/dist/src/browser/providers/browser-ext-install.d.ts +2 -12
  321. package/dist/src/browser/providers/browser-ext-install.js +3 -8
  322. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  323. package/dist/src/browser/readiness.js +16 -16
  324. package/dist/src/browser/readiness.js.map +1 -1
  325. package/dist/src/browser/schemas.js +1 -1
  326. package/dist/src/browser/schemas.js.map +1 -1
  327. package/dist/src/chat-commands/builtins/config.js +4 -4
  328. package/dist/src/chat-commands/builtins/config.js.map +1 -1
  329. package/dist/src/chat-commands/builtins/thinking.js +16 -42
  330. package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
  331. package/dist/src/chat-commands/config-paths.js +1 -1
  332. package/dist/src/chat-commands/config-paths.js.map +1 -1
  333. package/dist/src/chat-commands/context.js +3 -4
  334. package/dist/src/chat-commands/context.js.map +1 -1
  335. package/dist/src/cli/command-manifest.js +1 -1
  336. package/dist/src/cli/command-manifest.js.map +1 -1
  337. package/dist/src/cli/commands/agent.js +3 -1
  338. package/dist/src/cli/commands/agent.js.map +1 -1
  339. package/dist/src/cli/commands/agents.js +3 -6
  340. package/dist/src/cli/commands/agents.js.map +1 -1
  341. package/dist/src/cli/commands/browser-cli-helpers.js +9 -11
  342. package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
  343. package/dist/src/cli/commands/config.js +5 -5
  344. package/dist/src/cli/commands/config.js.map +1 -1
  345. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  346. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -17
  347. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
  348. package/dist/src/cli/commands/goal.js +1 -1
  349. package/dist/src/cli/commands/image.js +13 -372
  350. package/dist/src/cli/commands/image.js.map +1 -1
  351. package/dist/src/cli/commands/models.js +26 -10
  352. package/dist/src/cli/commands/models.js.map +1 -1
  353. package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
  354. package/dist/src/cli/commands/onboard/model.js +20 -22
  355. package/dist/src/cli/commands/onboard/model.js.map +1 -1
  356. package/dist/src/cli/commands/onboard.js +1 -1
  357. package/dist/src/cli/commands/onboard.js.map +1 -1
  358. package/dist/src/cli/utils/init-workspace-core.d.ts +1 -4
  359. package/dist/src/cli/utils/init-workspace-core.js +7 -6
  360. package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
  361. package/dist/src/commands/agents.config.d.ts +0 -1
  362. package/dist/src/commands/agents.config.js +66 -12
  363. package/dist/src/commands/agents.config.js.map +1 -1
  364. package/dist/src/config/agent-profile.d.ts +5 -17
  365. package/dist/src/config/agent-profile.js +31 -64
  366. package/dist/src/config/agent-profile.js.map +1 -1
  367. package/dist/src/config/agent-typed-models.d.ts +1 -1
  368. package/dist/src/config/agent-typed-models.js +0 -1
  369. package/dist/src/config/agent-typed-models.js.map +1 -1
  370. package/dist/src/config/index.js +3 -3
  371. package/dist/src/config/integration.d.ts +1 -1
  372. package/dist/src/config/reload.js +1 -1
  373. package/dist/src/config/reload.js.map +1 -1
  374. package/dist/src/config/rules.js +6 -56
  375. package/dist/src/config/rules.js.map +1 -1
  376. package/dist/src/config/schema.d.ts +925 -781
  377. package/dist/src/config/schema.js +157 -424
  378. package/dist/src/config/schema.js.map +1 -1
  379. package/dist/src/connectors/composio-triggers.d.ts +10 -0
  380. package/dist/src/connectors/composio-triggers.js +32 -0
  381. package/dist/src/connectors/composio-triggers.js.map +1 -0
  382. package/dist/src/connectors/composio.d.ts +54 -0
  383. package/dist/src/connectors/composio.js +334 -0
  384. package/dist/src/connectors/composio.js.map +1 -0
  385. package/dist/src/connectors/health.js +16 -1
  386. package/dist/src/connectors/health.js.map +1 -1
  387. package/dist/src/connectors/install.d.ts +2 -1
  388. package/dist/src/connectors/install.js +50 -13
  389. package/dist/src/connectors/install.js.map +1 -1
  390. package/dist/src/connectors/instances.js +57 -6
  391. package/dist/src/connectors/instances.js.map +1 -1
  392. package/dist/src/connectors/lifecycle.d.ts +3 -0
  393. package/dist/src/connectors/lifecycle.js +23 -0
  394. package/dist/src/connectors/lifecycle.js.map +1 -0
  395. package/dist/src/connectors/materialize.js +2 -1
  396. package/dist/src/connectors/materialize.js.map +1 -1
  397. package/dist/src/connectors/providers.d.ts +1 -0
  398. package/dist/src/connectors/providers.js +10 -2
  399. package/dist/src/connectors/providers.js.map +1 -1
  400. package/dist/src/connectors/registries/modelscope.d.ts +2 -0
  401. package/dist/src/connectors/registries/modelscope.js +205 -0
  402. package/dist/src/connectors/registries/modelscope.js.map +1 -0
  403. package/dist/src/connectors/registries/official-mcp.d.ts +2 -0
  404. package/dist/src/connectors/registries/official-mcp.js +142 -0
  405. package/dist/src/connectors/registries/official-mcp.js.map +1 -0
  406. package/dist/src/connectors/registries/search.d.ts +12 -0
  407. package/dist/src/connectors/registries/search.js +89 -0
  408. package/dist/src/connectors/registries/search.js.map +1 -0
  409. package/dist/src/connectors/registries/smithery.d.ts +2 -0
  410. package/dist/src/connectors/registries/smithery.js +98 -0
  411. package/dist/src/connectors/registries/smithery.js.map +1 -0
  412. package/dist/src/connectors/registries/types.d.ts +20 -0
  413. package/dist/src/connectors/registries/types.js +1 -0
  414. package/dist/src/connectors/secret-store.js +4 -2
  415. package/dist/src/connectors/secret-store.js.map +1 -1
  416. package/dist/src/connectors/setup-secrets.d.ts +15 -0
  417. package/dist/src/connectors/setup-secrets.js +64 -0
  418. package/dist/src/connectors/setup-secrets.js.map +1 -0
  419. package/dist/src/connectors/supervisor.d.ts +15 -0
  420. package/dist/src/connectors/supervisor.js +73 -0
  421. package/dist/src/connectors/supervisor.js.map +1 -0
  422. package/dist/src/connectors/types.d.ts +27 -3
  423. package/dist/src/connectors/usage.js +6 -1
  424. package/dist/src/connectors/usage.js.map +1 -1
  425. package/dist/src/cron/index.js +1 -1
  426. package/dist/src/cron/service.js +1 -1
  427. package/dist/src/cron/validation.d.ts +3 -3
  428. package/dist/src/extensions/activation-context.js +13 -7
  429. package/dist/src/extensions/activation-context.js.map +1 -1
  430. package/dist/src/gateway/agents-admin.d.ts +17 -18
  431. package/dist/src/gateway/agents-admin.js +123 -88
  432. package/dist/src/gateway/agents-admin.js.map +1 -1
  433. package/dist/src/gateway/capability-presets-admin.d.ts +56 -0
  434. package/dist/src/gateway/capability-presets-admin.js +214 -0
  435. package/dist/src/gateway/capability-presets-admin.js.map +1 -0
  436. package/dist/src/gateway/hono/lib/agent-model.d.ts +1 -1
  437. package/dist/src/gateway/hono/lib/agent-model.js +1 -1
  438. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  439. package/dist/src/gateway/hono/lib/config-payload.d.ts +234 -127
  440. package/dist/src/gateway/hono/lib/config-payload.js +13 -37
  441. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  442. package/dist/src/gateway/hono/routes/agents.js +56 -33
  443. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  444. package/dist/src/gateway/hono/routes/browser.js +8 -15
  445. package/dist/src/gateway/hono/routes/browser.js.map +1 -1
  446. package/dist/src/gateway/hono/routes/capability-presets.d.ts +3 -0
  447. package/dist/src/gateway/hono/routes/capability-presets.js +145 -0
  448. package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -0
  449. package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +1 -17
  450. package/dist/src/gateway/hono/routes/config-patch/agents.js +2 -443
  451. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  452. package/dist/src/gateway/hono/routes/config-patch/misc.js +7 -1
  453. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  454. package/dist/src/gateway/hono/routes/config.js +1 -1
  455. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  456. package/dist/src/gateway/hono/routes/connectors.js +230 -3
  457. package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
  458. package/dist/src/gateway/hono/routes/dreaming.js +7 -0
  459. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
  460. package/dist/src/gateway/hono/routes/goals.js +52 -5
  461. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  462. package/dist/src/gateway/hono/routes/index.js +2 -0
  463. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  464. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  465. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  466. package/dist/src/gateway/hono/routes/memory.d.ts +3 -0
  467. package/dist/src/gateway/hono/routes/memory.js +290 -0
  468. package/dist/src/gateway/hono/routes/memory.js.map +1 -0
  469. package/dist/src/gateway/hono/routes/voice.js +14 -1
  470. package/dist/src/gateway/hono/routes/voice.js.map +1 -1
  471. package/dist/src/gateway/hono/sse.js.map +1 -1
  472. package/dist/src/gateway/service/agent-runner.d.ts +5 -12
  473. package/dist/src/gateway/service/agent-runner.js +8 -8
  474. package/dist/src/gateway/service/agent-runner.js.map +1 -1
  475. package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -10
  476. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  477. package/dist/src/gateway/service.d.ts +2 -2
  478. package/dist/src/gateway/service.js +20 -16
  479. package/dist/src/gateway/service.js.map +1 -1
  480. package/dist/src/gateway/user-turn-input.d.ts +18 -0
  481. package/dist/src/gateway/user-turn-input.js +16 -0
  482. package/dist/src/gateway/user-turn-input.js.map +1 -0
  483. package/dist/src/goals/goal-queue-store.d.ts +2 -1
  484. package/dist/src/goals/goal-queue-store.js +2 -2
  485. package/dist/src/goals/goal-queue-store.js.map +1 -1
  486. package/dist/src/goals/goal-queue-types.d.ts +4 -3
  487. package/dist/src/goals/goal-runner.js +25 -3
  488. package/dist/src/goals/goal-runner.js.map +1 -1
  489. package/dist/src/goals/goal-service.d.ts +6 -1
  490. package/dist/src/goals/goal-service.js +9 -2
  491. package/dist/src/goals/goal-service.js.map +1 -1
  492. package/dist/src/goals/goal-store.d.ts +7 -1
  493. package/dist/src/goals/goal-store.js +42 -0
  494. package/dist/src/goals/goal-store.js.map +1 -1
  495. package/dist/src/goals/types.d.ts +10 -0
  496. package/dist/src/notes/agent-context.js +2 -2
  497. package/dist/src/providers/index.d.ts +2 -2
  498. package/dist/src/providers/index.js +10 -14
  499. package/dist/src/providers/index.js.map +1 -1
  500. package/dist/src/session/index.js +1 -1
  501. package/dist/src/session/session-workspace.js +7 -2
  502. package/dist/src/session/session-workspace.js.map +1 -1
  503. package/dist/src/session/store.js +5 -0
  504. package/dist/src/session/store.js.map +1 -1
  505. package/dist/src/session/thinking-resolve.d.ts +1 -1
  506. package/dist/src/session/thinking-resolve.js +1 -1
  507. package/dist/src/session/thinking-resolve.js.map +1 -1
  508. package/dist/src/storage/sqlite/connection.js +1 -1
  509. package/dist/src/storage/sqlite/index.d.ts +1 -0
  510. package/dist/src/storage/sqlite/index.js +2 -1
  511. package/dist/src/storage/sqlite/memory-records-repository.d.ts +101 -0
  512. package/dist/src/storage/sqlite/memory-records-repository.js +309 -0
  513. package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -0
  514. package/dist/src/storage/sqlite/migrations/011_goal_context_messages.sql +8 -0
  515. package/dist/src/storage/sqlite/migrations/012_memory_records.sql +63 -0
  516. package/dist/src/storage/sqlite/migrations/013_memory_trace_events.sql +21 -0
  517. package/dist/src/storage/sqlite/migrations/runner.d.ts +2 -2
  518. package/dist/src/storage/sqlite/migrations/runner.js +4 -4
  519. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  520. package/dist/src/storage/sqlite/migrations/runner.ts +2 -2
  521. package/dist/src/storage/sqlite/schema.js +3 -3
  522. package/dist/src/storage/sqlite/schema.sql +95 -0
  523. package/dist/src/tui/backends/embedded-backend.js +6 -4
  524. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  525. package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
  526. package/dist/src/voice/tts/openai-compatible-speech.d.ts +1 -1
  527. package/dist/src/voice/tts/openai-compatible-speech.js.map +1 -1
  528. package/dist/src/voice/tts/providers/edge-speech.js +14 -2
  529. package/dist/src/voice/tts/providers/edge-speech.js.map +1 -1
  530. package/dist/src/voice/tts/speak-core.js +3 -3
  531. package/dist/src/voice/tts/speak-core.js.map +1 -1
  532. package/dist/src/voice/tts/speech-provider-types.d.ts +2 -2
  533. package/dist/src/voice/tts/types.js +1 -1
  534. package/dist/src/voice/tts/types.js.map +1 -1
  535. package/dist/src/workflows/domain/result.d.ts +0 -1
  536. package/dist/src/workflows/engine/workflow-engine.js +7 -23
  537. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  538. package/dist/src/workflows/service/workflow-run-service.js +3 -4
  539. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  540. package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
  541. package/package.json +4 -3
  542. package/dist/gateway/static/root/assets/agent-browser-settings-page-DPXc4hz8.js +0 -6
  543. package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-CTJ0YnRQ.js +0 -1
  544. package/dist/gateway/static/root/assets/agents-zJXQfJ_W.js +0 -71
  545. package/dist/gateway/static/root/assets/app-management-settings-panel-DzGbdr04.js +0 -1
  546. package/dist/gateway/static/root/assets/apps-page-CPjfyzSD.js +0 -1
  547. package/dist/gateway/static/root/assets/config-api-NOoPiIYz.js +0 -3
  548. package/dist/gateway/static/root/assets/connectors-settings-CAXYMOdp.js +0 -2
  549. package/dist/gateway/static/root/assets/cron-api-C9BOqAXd.js +0 -1
  550. package/dist/gateway/static/root/assets/cron-page-DuUbBeKI.js +0 -3
  551. package/dist/gateway/static/root/assets/dreaming-settings-DQ4DtiK1.js +0 -1
  552. package/dist/gateway/static/root/assets/gateway-config-api-C-xjn__h.js +0 -1
  553. package/dist/gateway/static/root/assets/gateway-settings-BMPwIjKI.js +0 -1
  554. package/dist/gateway/static/root/assets/goal-detail-page-BJsyjJnF.js +0 -1
  555. package/dist/gateway/static/root/assets/goals-page-BerDgIhw.js +0 -2
  556. package/dist/gateway/static/root/assets/goals-settings-ByTjeAto.js +0 -1
  557. package/dist/gateway/static/root/assets/heartbeat-settings-TbHgcjTn.js +0 -1
  558. package/dist/gateway/static/root/assets/index-AkTrf6Pb.js +0 -122
  559. package/dist/gateway/static/root/assets/index-fh5sXTj9.css +0 -1
  560. package/dist/gateway/static/root/assets/logs-page-DGXuPf5B.js +0 -2
  561. package/dist/gateway/static/root/assets/messages-upgxw6Ub.js +0 -3
  562. package/dist/gateway/static/root/assets/models-hub-panel-Bot16nn7.js +0 -2
  563. package/dist/gateway/static/root/assets/note-detail-page-Brlyou8M.js +0 -2
  564. package/dist/gateway/static/root/assets/notes-page-DvZ4pwc-.js +0 -1
  565. package/dist/gateway/static/root/assets/remote-access-hub-BZEDmxbZ.js +0 -1
  566. package/dist/gateway/static/root/assets/sessions-page-DdGGlsfn.js +0 -1
  567. package/dist/gateway/static/root/assets/settings-advanced-gate-DlkEkPf9.js +0 -1
  568. package/dist/gateway/static/root/assets/settings-page-DFPTrsPF.js +0 -1
  569. package/dist/gateway/static/root/assets/setup-status-panel-CYCCfgh4.js +0 -1
  570. package/dist/gateway/static/root/assets/shares-settings-Bff1pGd0.js +0 -1
  571. package/dist/gateway/static/root/assets/skill-reload-api-CJGKpBur.js +0 -1
  572. package/dist/gateway/static/root/assets/skills-page-C6ocduTD.js +0 -2
  573. package/dist/gateway/static/root/assets/system-settings-panel-5jrIEr5b.js +0 -1
  574. package/dist/gateway/static/root/assets/use-agent-defaults-form-BuiXLIs5.js +0 -1
  575. package/dist/gateway/static/root/assets/use-settings-tab-guard-CW5JORnl.js +0 -1
  576. package/dist/gateway/static/root/assets/voice-api-key-field-DDoQyghO.js +0 -1
  577. package/dist/gateway/static/root/assets/workflow-page.utils-CKjeEGqx.js +0 -1
  578. package/dist/gateway/static/root/assets/workflows-page-B604ehHG.js +0 -18
@@ -0,0 +1,309 @@
1
+ import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
2
+ import { escapeFts5Query } from "./fts.js";
3
+ import { randomUUID } from "node:crypto";
4
+ //#region src/storage/sqlite/memory-records-repository.ts
5
+ function parseStringArray(json) {
6
+ try {
7
+ const parsed = JSON.parse(json);
8
+ return Array.isArray(parsed) ? parsed.filter((v) => typeof v === "string") : [];
9
+ } catch {
10
+ return [];
11
+ }
12
+ }
13
+ function parseSource(json) {
14
+ try {
15
+ const parsed = JSON.parse(json);
16
+ return parsed && typeof parsed === "object" ? parsed : {};
17
+ } catch {
18
+ return {};
19
+ }
20
+ }
21
+ function rowToRecord(row) {
22
+ return {
23
+ id: row.record_id,
24
+ kind: row.kind,
25
+ scope: {
26
+ agentId: row.agent_id,
27
+ ...row.workspace_id ? { workspaceId: row.workspace_id } : {},
28
+ ...row.session_key ? { sessionKey: row.session_key } : {}
29
+ },
30
+ content: row.content,
31
+ source: parseSource(row.source_json),
32
+ ...row.confidence != null ? { confidence: row.confidence } : {},
33
+ createdAt: new Date(row.created_at).toISOString(),
34
+ updatedAt: new Date(row.updated_at).toISOString(),
35
+ tags: parseStringArray(row.tags_json)
36
+ };
37
+ }
38
+ function bm25ToScore(rank) {
39
+ return Math.max(0, Math.min(1, 1 / (1 + Math.max(0, rank))));
40
+ }
41
+ function upsertMemoryRecordFts(db, row) {
42
+ db.prepare(`DELETE FROM memory_records_fts WHERE record_id = ?`).run(row.id);
43
+ if (!row.content.trim()) return;
44
+ db.prepare(`INSERT INTO memory_records_fts (
45
+ content, record_id, provider_id, kind, agent_id, workspace_id
46
+ ) VALUES (?, ?, ?, ?, ?, ?)`).run(row.content, row.id, row.providerId, row.kind, row.agentId, row.workspaceId ?? null);
47
+ }
48
+ function upsertMemoryRecord(input) {
49
+ const id = input.id ?? randomUUID();
50
+ const now = input.nowMs ?? Date.now();
51
+ const source = {
52
+ ...input.source ?? {},
53
+ provider: input.source?.provider ?? input.providerId
54
+ };
55
+ runSqliteWriteTransaction((db) => {
56
+ db.prepare(`INSERT INTO memory_records (
57
+ record_id, provider_id, kind, agent_id, workspace_id, session_key,
58
+ content, source_json, confidence, tags_json, created_at, updated_at
59
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
60
+ ON CONFLICT(record_id) DO UPDATE SET
61
+ provider_id = excluded.provider_id,
62
+ kind = excluded.kind,
63
+ agent_id = excluded.agent_id,
64
+ workspace_id = excluded.workspace_id,
65
+ session_key = excluded.session_key,
66
+ content = excluded.content,
67
+ source_json = excluded.source_json,
68
+ confidence = excluded.confidence,
69
+ tags_json = excluded.tags_json,
70
+ updated_at = excluded.updated_at`).run(id, input.providerId, input.kind, input.agentId, input.workspaceId ?? null, input.sessionKey ?? null, input.content, JSON.stringify(source), input.confidence ?? null, JSON.stringify(input.tags ?? []), now, now);
71
+ upsertMemoryRecordFts(db, {
72
+ ...input,
73
+ id
74
+ });
75
+ });
76
+ return {
77
+ id,
78
+ kind: input.kind,
79
+ scope: {
80
+ agentId: input.agentId,
81
+ ...input.workspaceId ? { workspaceId: input.workspaceId } : {},
82
+ ...input.sessionKey ? { sessionKey: input.sessionKey } : {}
83
+ },
84
+ content: input.content,
85
+ source,
86
+ ...input.confidence != null ? { confidence: input.confidence } : {},
87
+ createdAt: new Date(now).toISOString(),
88
+ updatedAt: new Date(now).toISOString(),
89
+ tags: input.tags ?? []
90
+ };
91
+ }
92
+ function getMemoryRecord(recordId) {
93
+ const row = getSqliteDatabase().prepare(`SELECT * FROM memory_records WHERE record_id = ?`).get(recordId);
94
+ return row ? rowToRecord(row) : null;
95
+ }
96
+ function listMemoryRecords(options = {}) {
97
+ const where = [];
98
+ const params = [];
99
+ if (options.providerId) {
100
+ where.push("provider_id = ?");
101
+ params.push(options.providerId);
102
+ }
103
+ if (options.agentId) {
104
+ where.push("agent_id = ?");
105
+ params.push(options.agentId);
106
+ }
107
+ if (options.workspaceId) {
108
+ where.push("workspace_id = ?");
109
+ params.push(options.workspaceId);
110
+ }
111
+ if (options.kind) {
112
+ where.push("kind = ?");
113
+ params.push(options.kind);
114
+ }
115
+ const limit = Math.max(1, Math.min(500, options.limit ?? 100));
116
+ const offset = Math.max(0, options.offset ?? 0);
117
+ return getSqliteDatabase().prepare(`SELECT * FROM memory_records
118
+ ${where.length > 0 ? `WHERE ${where.join(" AND ")}` : ""}
119
+ ORDER BY updated_at DESC
120
+ LIMIT ? OFFSET ?`).all(...params, limit, offset).map(rowToRecord);
121
+ }
122
+ function searchMemoryRecords(options) {
123
+ const query = escapeFts5Query(options.query);
124
+ if (!query) return [];
125
+ const filters = ["memory_records_fts MATCH ?"];
126
+ const params = [query];
127
+ if (options.agentId) {
128
+ filters.push("f.agent_id = ?");
129
+ params.push(options.agentId);
130
+ }
131
+ if (options.workspaceId) {
132
+ filters.push("f.workspace_id = ?");
133
+ params.push(options.workspaceId);
134
+ }
135
+ if (options.providerId) {
136
+ filters.push("f.provider_id = ?");
137
+ params.push(options.providerId);
138
+ }
139
+ if (options.kinds && options.kinds.length > 0) {
140
+ filters.push(`f.kind IN (${options.kinds.map(() => "?").join(", ")})`);
141
+ params.push(...options.kinds);
142
+ }
143
+ const maxResults = Math.max(1, Math.min(50, options.maxResults ?? 5));
144
+ const minScore = options.minScore ?? 0;
145
+ return getSqliteDatabase().prepare(`SELECT
146
+ r.*,
147
+ bm25(memory_records_fts) AS rank
148
+ FROM memory_records_fts f
149
+ JOIN memory_records r ON r.record_id = f.record_id
150
+ WHERE ${filters.join(" AND ")}
151
+ ORDER BY rank
152
+ LIMIT ?`).all(...params, maxResults * 3).map((row) => {
153
+ const record = rowToRecord(row);
154
+ return {
155
+ record,
156
+ score: bm25ToScore(row.rank),
157
+ snippet: record.content,
158
+ citation: {
159
+ providerId: row.provider_id,
160
+ recordId: row.record_id,
161
+ path: record.source.path,
162
+ lineStart: record.source.lineStart,
163
+ lineEnd: record.source.lineEnd,
164
+ createdAt: record.createdAt
165
+ }
166
+ };
167
+ }).filter((result) => result.score >= minScore).slice(0, maxResults);
168
+ }
169
+ function deleteMemoryRecord(recordId) {
170
+ return runSqliteWriteTransaction((db) => {
171
+ db.prepare(`DELETE FROM memory_records_fts WHERE record_id = ?`).run(recordId);
172
+ return db.prepare(`DELETE FROM memory_records WHERE record_id = ?`).run(recordId).changes > 0;
173
+ });
174
+ }
175
+ function appendMemorySignal(input) {
176
+ const id = randomUUID();
177
+ const now = input.nowMs ?? Date.now();
178
+ runSqliteWriteTransaction((db) => {
179
+ db.prepare(`INSERT INTO memory_signals (
180
+ signal_id, source, record_id, provider_id, agent_id, workspace_id,
181
+ session_key, score, content, metadata_json, created_at
182
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, input.signal.source, input.signal.recordId ?? null, input.providerId ?? null, input.agentId ?? null, input.workspaceId ?? null, input.sessionKey ?? null, input.signal.score ?? null, input.signal.content ?? null, JSON.stringify(input.signal.metadata ?? {}), now);
183
+ if (input.signal.recordId) db.prepare(`UPDATE memory_records
184
+ SET recall_count = recall_count + 1, last_recalled_at = ?, updated_at = MAX(updated_at, ?)
185
+ WHERE record_id = ?`).run(now, now, input.signal.recordId);
186
+ });
187
+ return id;
188
+ }
189
+ function listMemorySignals(options = {}) {
190
+ const where = [];
191
+ const params = [];
192
+ if (options.recordId) {
193
+ where.push("record_id = ?");
194
+ params.push(options.recordId);
195
+ }
196
+ if (options.providerId) {
197
+ where.push("provider_id = ?");
198
+ params.push(options.providerId);
199
+ }
200
+ if (options.agentId) {
201
+ where.push("agent_id = ?");
202
+ params.push(options.agentId);
203
+ }
204
+ if (options.workspaceId) {
205
+ where.push("workspace_id = ?");
206
+ params.push(options.workspaceId);
207
+ }
208
+ const limit = Math.max(1, Math.min(500, options.limit ?? 100));
209
+ return getSqliteDatabase().prepare(`SELECT * FROM memory_signals
210
+ ${where.length > 0 ? `WHERE ${where.join(" AND ")}` : ""}
211
+ ORDER BY created_at DESC
212
+ LIMIT ?`).all(...params, limit).map((row) => {
213
+ let metadata = {};
214
+ try {
215
+ const parsed = JSON.parse(row.metadata_json);
216
+ if (parsed && typeof parsed === "object") metadata = parsed;
217
+ } catch {
218
+ metadata = {};
219
+ }
220
+ return {
221
+ signalId: row.signal_id,
222
+ source: row.source,
223
+ ...row.record_id ? { recordId: row.record_id } : {},
224
+ ...row.provider_id ? { providerId: row.provider_id } : {},
225
+ ...row.agent_id ? { agentId: row.agent_id } : {},
226
+ ...row.workspace_id ? { workspaceId: row.workspace_id } : {},
227
+ ...row.session_key ? { sessionKey: row.session_key } : {},
228
+ ...row.score != null ? { score: row.score } : {},
229
+ ...row.content ? { content: row.content } : {},
230
+ metadata,
231
+ createdAt: new Date(row.created_at).toISOString()
232
+ };
233
+ });
234
+ }
235
+ function getMemoryProviderState(providerId, scopeKey) {
236
+ const row = getSqliteDatabase().prepare(`SELECT state_json FROM memory_provider_state WHERE provider_id = ? AND scope_key = ?`).get(providerId, scopeKey);
237
+ if (!row) return null;
238
+ try {
239
+ return JSON.parse(row.state_json);
240
+ } catch {
241
+ return null;
242
+ }
243
+ }
244
+ function setMemoryProviderState(providerId, scopeKey, state) {
245
+ const now = Date.now();
246
+ runSqliteWriteTransaction((db) => {
247
+ db.prepare(`INSERT INTO memory_provider_state (provider_id, scope_key, state_json, updated_at)
248
+ VALUES (?, ?, ?, ?)
249
+ ON CONFLICT(provider_id, scope_key) DO UPDATE SET
250
+ state_json = excluded.state_json,
251
+ updated_at = excluded.updated_at`).run(providerId, scopeKey, JSON.stringify(state ?? null), now);
252
+ });
253
+ }
254
+ function appendMemoryTraceEvent(input) {
255
+ const id = randomUUID();
256
+ const now = input.nowMs ?? Date.now();
257
+ runSqliteWriteTransaction((db) => {
258
+ db.prepare(`INSERT INTO memory_trace_events (
259
+ trace_id, session_key, turn_id, phase, provider_id, request_json,
260
+ result_count, selected_record_ids_json, skipped_reason, error, duration_ms, created_at
261
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, input.sessionKey ?? null, input.turnId ?? null, input.phase, input.providerId, JSON.stringify(input.request ?? {}), input.resultCount ?? null, JSON.stringify(input.selectedRecordIds ?? []), input.skippedReason ?? null, input.error ?? null, Math.max(0, Math.floor(input.durationMs ?? 0)), now);
262
+ });
263
+ return id;
264
+ }
265
+ function listMemoryTraceEvents(options = {}) {
266
+ const where = [];
267
+ const params = [];
268
+ if (options.providerId) {
269
+ where.push("provider_id = ?");
270
+ params.push(options.providerId);
271
+ }
272
+ if (options.sessionKey) {
273
+ where.push("session_key = ?");
274
+ params.push(options.sessionKey);
275
+ }
276
+ if (options.phase) {
277
+ where.push("phase = ?");
278
+ params.push(options.phase);
279
+ }
280
+ const limit = Math.max(1, Math.min(500, options.limit ?? 100));
281
+ return getSqliteDatabase().prepare(`SELECT * FROM memory_trace_events
282
+ ${where.length > 0 ? `WHERE ${where.join(" AND ")}` : ""}
283
+ ORDER BY created_at DESC
284
+ LIMIT ?`).all(...params, limit).map((row) => ({
285
+ traceId: row.trace_id,
286
+ ...row.session_key ? { sessionKey: row.session_key } : {},
287
+ ...row.turn_id ? { turnId: row.turn_id } : {},
288
+ phase: row.phase,
289
+ providerId: row.provider_id,
290
+ request: parseJsonValue(row.request_json, {}),
291
+ ...row.result_count != null ? { resultCount: row.result_count } : {},
292
+ selectedRecordIds: parseStringArray(row.selected_record_ids_json),
293
+ ...row.skipped_reason ? { skippedReason: row.skipped_reason } : {},
294
+ ...row.error ? { error: row.error } : {},
295
+ durationMs: row.duration_ms,
296
+ createdAt: new Date(row.created_at).toISOString()
297
+ }));
298
+ }
299
+ function parseJsonValue(json, fallback) {
300
+ try {
301
+ return JSON.parse(json);
302
+ } catch {
303
+ return fallback;
304
+ }
305
+ }
306
+ //#endregion
307
+ export { appendMemorySignal, appendMemoryTraceEvent, deleteMemoryRecord, getMemoryProviderState, getMemoryRecord, listMemoryRecords, listMemorySignals, listMemoryTraceEvents, searchMemoryRecords, setMemoryProviderState, upsertMemoryRecord };
308
+
309
+ //# sourceMappingURL=memory-records-repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-records-repository.js","names":[],"sources":["../../../../src/storage/sqlite/memory-records-repository.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type {\n MemoryKind,\n MemoryRecord,\n MemorySearchResult,\n MemorySignal,\n} from '../../agent/memory/types.js';\nimport { escapeFts5Query } from './fts.js';\nimport { getSqliteDatabase, runSqliteWriteTransaction } from './transaction.js';\n\ntype MemoryRecordRow = {\n record_id: string;\n provider_id: string;\n kind: string;\n agent_id: string;\n workspace_id: string | null;\n session_key: string | null;\n content: string;\n source_json: string;\n confidence: number | null;\n tags_json: string;\n created_at: number;\n updated_at: number;\n};\n\ntype MemoryRecordSearchRow = MemoryRecordRow & {\n rank: number;\n};\n\nexport interface UpsertMemoryRecordInput {\n id?: string;\n providerId: string;\n kind: MemoryKind;\n agentId: string;\n workspaceId?: string;\n sessionKey?: string;\n content: string;\n source?: MemoryRecord['source'];\n confidence?: number;\n tags?: string[];\n nowMs?: number;\n}\n\nexport interface ListMemoryRecordsOptions {\n providerId?: string;\n agentId?: string;\n workspaceId?: string;\n kind?: MemoryKind;\n limit?: number;\n offset?: number;\n}\n\nexport interface SearchMemoryRecordsOptions {\n query: string;\n agentId?: string;\n workspaceId?: string;\n providerId?: string;\n kinds?: MemoryKind[];\n maxResults?: number;\n minScore?: number;\n}\n\nexport interface AppendMemorySignalInput {\n signal: MemorySignal;\n providerId?: string;\n agentId?: string;\n workspaceId?: string;\n sessionKey?: string;\n nowMs?: number;\n}\n\nexport interface MemorySignalRowPayload {\n signalId: string;\n source: string;\n recordId?: string;\n providerId?: string;\n agentId?: string;\n workspaceId?: string;\n sessionKey?: string;\n score?: number;\n content?: string;\n metadata: Record<string, unknown>;\n createdAt: string;\n}\n\ntype MemorySignalRow = {\n signal_id: string;\n source: string;\n record_id: string | null;\n provider_id: string | null;\n agent_id: string | null;\n workspace_id: string | null;\n session_key: string | null;\n score: number | null;\n content: string | null;\n metadata_json: string;\n created_at: number;\n};\n\ntype MemoryTraceRow = {\n trace_id: string;\n session_key: string | null;\n turn_id: string | null;\n phase: string;\n provider_id: string;\n request_json: string;\n result_count: number | null;\n selected_record_ids_json: string;\n skipped_reason: string | null;\n error: string | null;\n duration_ms: number;\n created_at: number;\n};\n\nexport interface AppendMemoryTraceEventInput {\n sessionKey?: string;\n turnId?: string;\n phase: 'search' | 'read' | 'write' | 'update' | 'delete' | 'sync' | 'inject' | 'test';\n providerId: string;\n request?: unknown;\n resultCount?: number;\n selectedRecordIds?: string[];\n skippedReason?: string;\n error?: string;\n durationMs?: number;\n nowMs?: number;\n}\n\nexport interface MemoryTraceEventPayload {\n traceId: string;\n sessionKey?: string;\n turnId?: string;\n phase: string;\n providerId: string;\n request: unknown;\n resultCount?: number;\n selectedRecordIds: string[];\n skippedReason?: string;\n error?: string;\n durationMs: number;\n createdAt: string;\n}\n\nfunction parseStringArray(json: string): string[] {\n try {\n const parsed = JSON.parse(json) as unknown;\n return Array.isArray(parsed) ? parsed.filter((v): v is string => typeof v === 'string') : [];\n } catch {\n return [];\n }\n}\n\nfunction parseSource(json: string): MemoryRecord['source'] {\n try {\n const parsed = JSON.parse(json) as unknown;\n return parsed && typeof parsed === 'object' ? (parsed as MemoryRecord['source']) : {};\n } catch {\n return {};\n }\n}\n\nfunction rowToRecord(row: MemoryRecordRow): MemoryRecord {\n return {\n id: row.record_id,\n kind: row.kind as MemoryKind,\n scope: {\n agentId: row.agent_id,\n ...(row.workspace_id ? { workspaceId: row.workspace_id } : {}),\n ...(row.session_key ? { sessionKey: row.session_key } : {}),\n },\n content: row.content,\n source: parseSource(row.source_json),\n ...(row.confidence != null ? { confidence: row.confidence } : {}),\n createdAt: new Date(row.created_at).toISOString(),\n updatedAt: new Date(row.updated_at).toISOString(),\n tags: parseStringArray(row.tags_json),\n };\n}\n\nfunction bm25ToScore(rank: number): number {\n return Math.max(0, Math.min(1, 1 / (1 + Math.max(0, rank))));\n}\n\nfunction upsertMemoryRecordFts(\n db: ReturnType<typeof getSqliteDatabase>,\n row: Pick<UpsertMemoryRecordInput, 'providerId' | 'kind' | 'agentId' | 'workspaceId' | 'content'> & { id: string },\n): void {\n db.prepare(`DELETE FROM memory_records_fts WHERE record_id = ?`).run(row.id);\n if (!row.content.trim()) return;\n db.prepare(\n `INSERT INTO memory_records_fts (\n content, record_id, provider_id, kind, agent_id, workspace_id\n ) VALUES (?, ?, ?, ?, ?, ?)`,\n ).run(row.content, row.id, row.providerId, row.kind, row.agentId, row.workspaceId ?? null);\n}\n\nexport function upsertMemoryRecord(input: UpsertMemoryRecordInput): MemoryRecord {\n const id = input.id ?? randomUUID();\n const now = input.nowMs ?? Date.now();\n const source = {\n ...(input.source ?? {}),\n provider: input.source?.provider ?? input.providerId,\n };\n\n runSqliteWriteTransaction((db) => {\n db.prepare(\n `INSERT INTO memory_records (\n record_id, provider_id, kind, agent_id, workspace_id, session_key,\n content, source_json, confidence, tags_json, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(record_id) DO UPDATE SET\n provider_id = excluded.provider_id,\n kind = excluded.kind,\n agent_id = excluded.agent_id,\n workspace_id = excluded.workspace_id,\n session_key = excluded.session_key,\n content = excluded.content,\n source_json = excluded.source_json,\n confidence = excluded.confidence,\n tags_json = excluded.tags_json,\n updated_at = excluded.updated_at`,\n ).run(\n id,\n input.providerId,\n input.kind,\n input.agentId,\n input.workspaceId ?? null,\n input.sessionKey ?? null,\n input.content,\n JSON.stringify(source),\n input.confidence ?? null,\n JSON.stringify(input.tags ?? []),\n now,\n now,\n );\n upsertMemoryRecordFts(db, { ...input, id });\n });\n\n return {\n id,\n kind: input.kind,\n scope: {\n agentId: input.agentId,\n ...(input.workspaceId ? { workspaceId: input.workspaceId } : {}),\n ...(input.sessionKey ? { sessionKey: input.sessionKey } : {}),\n },\n content: input.content,\n source,\n ...(input.confidence != null ? { confidence: input.confidence } : {}),\n createdAt: new Date(now).toISOString(),\n updatedAt: new Date(now).toISOString(),\n tags: input.tags ?? [],\n };\n}\n\nexport function getMemoryRecord(recordId: string): MemoryRecord | null {\n const row = getSqliteDatabase()\n .prepare(`SELECT * FROM memory_records WHERE record_id = ?`)\n .get(recordId) as MemoryRecordRow | undefined;\n return row ? rowToRecord(row) : null;\n}\n\nexport function listMemoryRecords(options: ListMemoryRecordsOptions = {}): MemoryRecord[] {\n const where: string[] = [];\n const params: Array<string | number | null> = [];\n if (options.providerId) {\n where.push('provider_id = ?');\n params.push(options.providerId);\n }\n if (options.agentId) {\n where.push('agent_id = ?');\n params.push(options.agentId);\n }\n if (options.workspaceId) {\n where.push('workspace_id = ?');\n params.push(options.workspaceId);\n }\n if (options.kind) {\n where.push('kind = ?');\n params.push(options.kind);\n }\n const limit = Math.max(1, Math.min(500, options.limit ?? 100));\n const offset = Math.max(0, options.offset ?? 0);\n const rows = getSqliteDatabase()\n .prepare(\n `SELECT * FROM memory_records\n ${where.length > 0 ? `WHERE ${where.join(' AND ')}` : ''}\n ORDER BY updated_at DESC\n LIMIT ? OFFSET ?`,\n )\n .all(...params, limit, offset) as MemoryRecordRow[];\n return rows.map(rowToRecord);\n}\n\nexport function searchMemoryRecords(options: SearchMemoryRecordsOptions): MemorySearchResult[] {\n const query = escapeFts5Query(options.query);\n if (!query) return [];\n\n const filters: string[] = ['memory_records_fts MATCH ?'];\n const params: Array<string | number | null> = [query];\n if (options.agentId) {\n filters.push('f.agent_id = ?');\n params.push(options.agentId);\n }\n if (options.workspaceId) {\n filters.push('f.workspace_id = ?');\n params.push(options.workspaceId);\n }\n if (options.providerId) {\n filters.push('f.provider_id = ?');\n params.push(options.providerId);\n }\n if (options.kinds && options.kinds.length > 0) {\n filters.push(`f.kind IN (${options.kinds.map(() => '?').join(', ')})`);\n params.push(...options.kinds);\n }\n\n const maxResults = Math.max(1, Math.min(50, options.maxResults ?? 5));\n const minScore = options.minScore ?? 0;\n const rows = getSqliteDatabase()\n .prepare(\n `SELECT\n r.*,\n bm25(memory_records_fts) AS rank\n FROM memory_records_fts f\n JOIN memory_records r ON r.record_id = f.record_id\n WHERE ${filters.join(' AND ')}\n ORDER BY rank\n LIMIT ?`,\n )\n .all(...params, maxResults * 3) as MemoryRecordSearchRow[];\n\n return rows\n .map((row) => {\n const record = rowToRecord(row);\n const score = bm25ToScore(row.rank);\n return {\n record,\n score,\n snippet: record.content,\n citation: {\n providerId: row.provider_id,\n recordId: row.record_id,\n path: record.source.path,\n lineStart: record.source.lineStart,\n lineEnd: record.source.lineEnd,\n createdAt: record.createdAt,\n },\n };\n })\n .filter((result) => result.score >= minScore)\n .slice(0, maxResults);\n}\n\nexport function deleteMemoryRecord(recordId: string): boolean {\n return runSqliteWriteTransaction((db) => {\n db.prepare(`DELETE FROM memory_records_fts WHERE record_id = ?`).run(recordId);\n const result = db.prepare(`DELETE FROM memory_records WHERE record_id = ?`).run(recordId);\n return result.changes > 0;\n });\n}\n\nexport function appendMemorySignal(input: AppendMemorySignalInput): string {\n const id = randomUUID();\n const now = input.nowMs ?? Date.now();\n runSqliteWriteTransaction((db) => {\n db.prepare(\n `INSERT INTO memory_signals (\n signal_id, source, record_id, provider_id, agent_id, workspace_id,\n session_key, score, content, metadata_json, created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n id,\n input.signal.source,\n input.signal.recordId ?? null,\n input.providerId ?? null,\n input.agentId ?? null,\n input.workspaceId ?? null,\n input.sessionKey ?? null,\n input.signal.score ?? null,\n input.signal.content ?? null,\n JSON.stringify(input.signal.metadata ?? {}),\n now,\n );\n if (input.signal.recordId) {\n db.prepare(\n `UPDATE memory_records\n SET recall_count = recall_count + 1, last_recalled_at = ?, updated_at = MAX(updated_at, ?)\n WHERE record_id = ?`,\n ).run(now, now, input.signal.recordId);\n }\n });\n return id;\n}\n\nexport function listMemorySignals(options: {\n recordId?: string;\n providerId?: string;\n agentId?: string;\n workspaceId?: string;\n limit?: number;\n} = {}): MemorySignalRowPayload[] {\n const where: string[] = [];\n const params: Array<string | number | null> = [];\n if (options.recordId) {\n where.push('record_id = ?');\n params.push(options.recordId);\n }\n if (options.providerId) {\n where.push('provider_id = ?');\n params.push(options.providerId);\n }\n if (options.agentId) {\n where.push('agent_id = ?');\n params.push(options.agentId);\n }\n if (options.workspaceId) {\n where.push('workspace_id = ?');\n params.push(options.workspaceId);\n }\n const limit = Math.max(1, Math.min(500, options.limit ?? 100));\n const rows = getSqliteDatabase()\n .prepare(\n `SELECT * FROM memory_signals\n ${where.length > 0 ? `WHERE ${where.join(' AND ')}` : ''}\n ORDER BY created_at DESC\n LIMIT ?`,\n )\n .all(...params, limit) as MemorySignalRow[];\n return rows.map((row) => {\n let metadata: Record<string, unknown> = {};\n try {\n const parsed = JSON.parse(row.metadata_json) as unknown;\n if (parsed && typeof parsed === 'object') metadata = parsed as Record<string, unknown>;\n } catch {\n metadata = {};\n }\n return {\n signalId: row.signal_id,\n source: row.source,\n ...(row.record_id ? { recordId: row.record_id } : {}),\n ...(row.provider_id ? { providerId: row.provider_id } : {}),\n ...(row.agent_id ? { agentId: row.agent_id } : {}),\n ...(row.workspace_id ? { workspaceId: row.workspace_id } : {}),\n ...(row.session_key ? { sessionKey: row.session_key } : {}),\n ...(row.score != null ? { score: row.score } : {}),\n ...(row.content ? { content: row.content } : {}),\n metadata,\n createdAt: new Date(row.created_at).toISOString(),\n };\n });\n}\n\nexport function getMemoryProviderState(providerId: string, scopeKey: string): unknown | null {\n const row = getSqliteDatabase()\n .prepare(`SELECT state_json FROM memory_provider_state WHERE provider_id = ? AND scope_key = ?`)\n .get(providerId, scopeKey) as { state_json: string } | undefined;\n if (!row) return null;\n try {\n return JSON.parse(row.state_json) as unknown;\n } catch {\n return null;\n }\n}\n\nexport function setMemoryProviderState(providerId: string, scopeKey: string, state: unknown): void {\n const now = Date.now();\n runSqliteWriteTransaction((db) => {\n db.prepare(\n `INSERT INTO memory_provider_state (provider_id, scope_key, state_json, updated_at)\n VALUES (?, ?, ?, ?)\n ON CONFLICT(provider_id, scope_key) DO UPDATE SET\n state_json = excluded.state_json,\n updated_at = excluded.updated_at`,\n ).run(providerId, scopeKey, JSON.stringify(state ?? null), now);\n });\n}\n\nexport function appendMemoryTraceEvent(input: AppendMemoryTraceEventInput): string {\n const id = randomUUID();\n const now = input.nowMs ?? Date.now();\n runSqliteWriteTransaction((db) => {\n db.prepare(\n `INSERT INTO memory_trace_events (\n trace_id, session_key, turn_id, phase, provider_id, request_json,\n result_count, selected_record_ids_json, skipped_reason, error, duration_ms, created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n id,\n input.sessionKey ?? null,\n input.turnId ?? null,\n input.phase,\n input.providerId,\n JSON.stringify(input.request ?? {}),\n input.resultCount ?? null,\n JSON.stringify(input.selectedRecordIds ?? []),\n input.skippedReason ?? null,\n input.error ?? null,\n Math.max(0, Math.floor(input.durationMs ?? 0)),\n now,\n );\n });\n return id;\n}\n\nexport function listMemoryTraceEvents(options: {\n providerId?: string;\n sessionKey?: string;\n phase?: string;\n limit?: number;\n} = {}): MemoryTraceEventPayload[] {\n const where: string[] = [];\n const params: Array<string | number | null> = [];\n if (options.providerId) {\n where.push('provider_id = ?');\n params.push(options.providerId);\n }\n if (options.sessionKey) {\n where.push('session_key = ?');\n params.push(options.sessionKey);\n }\n if (options.phase) {\n where.push('phase = ?');\n params.push(options.phase);\n }\n const limit = Math.max(1, Math.min(500, options.limit ?? 100));\n const rows = getSqliteDatabase()\n .prepare(\n `SELECT * FROM memory_trace_events\n ${where.length > 0 ? `WHERE ${where.join(' AND ')}` : ''}\n ORDER BY created_at DESC\n LIMIT ?`,\n )\n .all(...params, limit) as MemoryTraceRow[];\n return rows.map((row) => ({\n traceId: row.trace_id,\n ...(row.session_key ? { sessionKey: row.session_key } : {}),\n ...(row.turn_id ? { turnId: row.turn_id } : {}),\n phase: row.phase,\n providerId: row.provider_id,\n request: parseJsonValue(row.request_json, {}),\n ...(row.result_count != null ? { resultCount: row.result_count } : {}),\n selectedRecordIds: parseStringArray(row.selected_record_ids_json),\n ...(row.skipped_reason ? { skippedReason: row.skipped_reason } : {}),\n ...(row.error ? { error: row.error } : {}),\n durationMs: row.duration_ms,\n createdAt: new Date(row.created_at).toISOString(),\n }));\n}\n\nfunction parseJsonValue(json: string, fallback: unknown): unknown {\n try {\n return JSON.parse(json) as unknown;\n } catch {\n return fallback;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ CREATE TABLE IF NOT EXISTS goal_context_messages (
2
+ goal_id TEXT PRIMARY KEY,
3
+ text TEXT NOT NULL DEFAULT '',
4
+ attachments_json TEXT NOT NULL DEFAULT '[]',
5
+ created_at INTEGER NOT NULL,
6
+ updated_at INTEGER NOT NULL,
7
+ FOREIGN KEY (goal_id) REFERENCES goals(goal_id) ON DELETE CASCADE
8
+ );
@@ -0,0 +1,63 @@
1
+ CREATE TABLE IF NOT EXISTS memory_records (
2
+ record_id TEXT PRIMARY KEY,
3
+ provider_id TEXT NOT NULL,
4
+ kind TEXT NOT NULL,
5
+ agent_id TEXT NOT NULL,
6
+ workspace_id TEXT,
7
+ session_key TEXT,
8
+ content TEXT NOT NULL,
9
+ source_json TEXT NOT NULL,
10
+ confidence REAL,
11
+ tags_json TEXT NOT NULL DEFAULT '[]',
12
+ created_at INTEGER NOT NULL,
13
+ updated_at INTEGER NOT NULL,
14
+ last_recalled_at INTEGER,
15
+ recall_count INTEGER NOT NULL DEFAULT 0
16
+ );
17
+
18
+ CREATE INDEX IF NOT EXISTS idx_memory_records_scope_updated
19
+ ON memory_records(agent_id, workspace_id, updated_at DESC);
20
+ CREATE INDEX IF NOT EXISTS idx_memory_records_kind_updated
21
+ ON memory_records(kind, updated_at DESC);
22
+ CREATE INDEX IF NOT EXISTS idx_memory_records_provider
23
+ ON memory_records(provider_id, updated_at DESC);
24
+
25
+ CREATE VIRTUAL TABLE IF NOT EXISTS memory_records_fts USING fts5(
26
+ content,
27
+ record_id UNINDEXED,
28
+ provider_id UNINDEXED,
29
+ kind UNINDEXED,
30
+ agent_id UNINDEXED,
31
+ workspace_id UNINDEXED,
32
+ tokenize='unicode61'
33
+ );
34
+
35
+ CREATE TABLE IF NOT EXISTS memory_signals (
36
+ signal_id TEXT PRIMARY KEY,
37
+ source TEXT NOT NULL,
38
+ record_id TEXT,
39
+ provider_id TEXT,
40
+ agent_id TEXT,
41
+ workspace_id TEXT,
42
+ session_key TEXT,
43
+ score REAL,
44
+ content TEXT,
45
+ metadata_json TEXT NOT NULL DEFAULT '{}',
46
+ created_at INTEGER NOT NULL,
47
+ FOREIGN KEY (record_id) REFERENCES memory_records(record_id) ON DELETE SET NULL
48
+ );
49
+
50
+ CREATE INDEX IF NOT EXISTS idx_memory_signals_created
51
+ ON memory_signals(created_at DESC);
52
+ CREATE INDEX IF NOT EXISTS idx_memory_signals_record_created
53
+ ON memory_signals(record_id, created_at DESC);
54
+ CREATE INDEX IF NOT EXISTS idx_memory_signals_scope_created
55
+ ON memory_signals(agent_id, workspace_id, created_at DESC);
56
+
57
+ CREATE TABLE IF NOT EXISTS memory_provider_state (
58
+ provider_id TEXT NOT NULL,
59
+ scope_key TEXT NOT NULL,
60
+ state_json TEXT NOT NULL,
61
+ updated_at INTEGER NOT NULL,
62
+ PRIMARY KEY (provider_id, scope_key)
63
+ );
@@ -0,0 +1,21 @@
1
+ CREATE TABLE IF NOT EXISTS memory_trace_events (
2
+ trace_id TEXT PRIMARY KEY,
3
+ session_key TEXT,
4
+ turn_id TEXT,
5
+ phase TEXT NOT NULL,
6
+ provider_id TEXT NOT NULL,
7
+ request_json TEXT NOT NULL DEFAULT '{}',
8
+ result_count INTEGER,
9
+ selected_record_ids_json TEXT NOT NULL DEFAULT '[]',
10
+ skipped_reason TEXT,
11
+ error TEXT,
12
+ duration_ms INTEGER NOT NULL DEFAULT 0,
13
+ created_at INTEGER NOT NULL
14
+ );
15
+
16
+ CREATE INDEX IF NOT EXISTS idx_memory_trace_created
17
+ ON memory_trace_events(created_at DESC);
18
+ CREATE INDEX IF NOT EXISTS idx_memory_trace_provider_created
19
+ ON memory_trace_events(provider_id, created_at DESC);
20
+ CREATE INDEX IF NOT EXISTS idx_memory_trace_session_created
21
+ ON memory_trace_events(session_key, created_at DESC);
@@ -1,9 +1,9 @@
1
1
  import type { DatabaseSync } from 'node:sqlite';
2
2
  import type { ApplyMigrationsOptions } from './types.js';
3
3
  /** Baseline schema version applied from schema.sql on first open. */
4
- export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 10;
4
+ export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 10;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 13;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
@@ -10,9 +10,9 @@ import { fileURLToPath } from "node:url";
10
10
  init_logger();
11
11
  const log = createLogger("Sqlite:Migrations");
12
12
  /** Baseline schema version applied from schema.sql on first open. */
13
- const XOPC_DB_BASELINE_SCHEMA_VERSION = 10;
13
+ const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
14
14
  /** Latest schema version this release supports (increment when adding migrations). */
15
- const XOPC_DB_SCHEMA_VERSION = 10;
15
+ const XOPC_DB_SCHEMA_VERSION = 13;
16
16
  const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
17
17
  function resolveMigrationsDir(override) {
18
18
  if (override) return override;
@@ -46,7 +46,7 @@ function applySingleMigration(db, migration) {
46
46
  * Each step runs in its own transaction and updates schema_meta on success.
47
47
  */
48
48
  function applyPendingMigrations(db, options = {}) {
49
- const targetVersion = options.targetVersion ?? 10;
49
+ const targetVersion = options.targetVersion ?? 13;
50
50
  let currentVersion = readSchemaVersion(db);
51
51
  if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
52
52
  if (currentVersion >= targetVersion) return currentVersion;
@@ -62,7 +62,7 @@ function applyPendingMigrations(db, options = {}) {
62
62
  }
63
63
  /** Inspect schema version without mutating the database. */
64
64
  function inspectSchemaMigrationStatus(db, options = {}) {
65
- const appVersion = options.targetVersion ?? 10;
65
+ const appVersion = options.targetVersion ?? 13;
66
66
  const dbVersion = readSchemaVersion(db);
67
67
  if (dbVersion > appVersion) return {
68
68
  dbVersion,
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","names":[],"sources":["../../../../../src/storage/sqlite/migrations/runner.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport type { DatabaseSync } from 'node:sqlite';\n\nimport { createLogger } from '../../../utils/logger.js';\nimport { readSchemaVersion, setSchemaVersion } from '../schema-version.js';\nimport { discoverSqlMigrations } from './discover.js';\nimport {\n DatabaseSchemaMigrationGapError,\n DatabaseSchemaTooNewError,\n} from './errors.js';\nimport type { ApplyMigrationsOptions, SqlMigration } from './types.js';\n\nconst log = createLogger('Sqlite:Migrations');\n\n/** Baseline schema version applied from schema.sql on first open. */\nexport const XOPC_DB_BASELINE_SCHEMA_VERSION = 10;\n\n/** Latest schema version this release supports (increment when adding migrations). */\nexport const XOPC_DB_SCHEMA_VERSION = 10;\n\nconst MODULE_DIR = dirname(fileURLToPath(import.meta.url));\n\nexport function resolveMigrationsDir(override?: string): string {\n if (override) {\n return override;\n }\n // Packaged Electron gateway bundle: `out/server/index.js` + `out/server/migrations/`.\n const siblingDir = join(MODULE_DIR, 'migrations');\n if (existsSync(siblingDir)) {\n return siblingDir;\n }\n // Dev / dist: SQL files live next to `migrations/runner.js`.\n return MODULE_DIR;\n}\n\nfunction migrationByTarget(\n migrations: SqlMigration[],\n targetVersion: number,\n): SqlMigration | undefined {\n return migrations.find((migration) => migration.targetVersion === targetVersion);\n}\n\nfunction applySingleMigration(db: DatabaseSync, migration: SqlMigration): void {\n log.info({ targetVersion: migration.targetVersion, file: migration.filename }, 'Applying SQLite migration');\n db.exec('BEGIN IMMEDIATE');\n try {\n db.exec(migration.sql);\n setSchemaVersion(db, migration.targetVersion);\n db.exec('COMMIT');\n } catch (error) {\n try {\n db.exec('ROLLBACK');\n } catch {\n /* preserve original error */\n }\n const em = error instanceof Error ? error.message : String(error);\n throw new Error(\n `SQLite migration to v${migration.targetVersion} (${migration.filename}) failed: ${em}`,\n { cause: error },\n );\n }\n}\n\n/**\n * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.\n * Each step runs in its own transaction and updates schema_meta on success.\n */\nexport function applyPendingMigrations(\n db: DatabaseSync,\n options: ApplyMigrationsOptions = {},\n): number {\n const targetVersion = options.targetVersion ?? XOPC_DB_SCHEMA_VERSION;\n let currentVersion = readSchemaVersion(db);\n\n if (currentVersion > targetVersion) {\n throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);\n }\n\n if (currentVersion >= targetVersion) {\n return currentVersion;\n }\n\n const migrations = discoverSqlMigrations(resolveMigrationsDir(options.migrationsDir));\n\n while (currentVersion < targetVersion) {\n const nextVersion = currentVersion + 1;\n const migration = migrationByTarget(migrations, nextVersion);\n if (!migration) {\n throw new DatabaseSchemaMigrationGapError(currentVersion, targetVersion, nextVersion);\n }\n applySingleMigration(db, migration);\n currentVersion = nextVersion;\n }\n\n return currentVersion;\n}\n\nexport type SchemaMigrationStatus = {\n dbVersion: number;\n appVersion: number;\n pendingVersions: number[];\n isTooNew: boolean;\n hasMigrationGap: boolean;\n missingVersion: number | null;\n};\n\n/** Inspect schema version without mutating the database. */\nexport function inspectSchemaMigrationStatus(\n db: DatabaseSync,\n options: Pick<ApplyMigrationsOptions, 'migrationsDir' | 'targetVersion'> = {},\n): SchemaMigrationStatus {\n const appVersion = options.targetVersion ?? XOPC_DB_SCHEMA_VERSION;\n const dbVersion = readSchemaVersion(db);\n const isTooNew = dbVersion > appVersion;\n\n if (isTooNew) {\n return {\n dbVersion,\n appVersion,\n pendingVersions: [],\n isTooNew: true,\n hasMigrationGap: false,\n missingVersion: null,\n };\n }\n\n const migrations = discoverSqlMigrations(resolveMigrationsDir(options.migrationsDir));\n const pendingVersions: number[] = [];\n let hasMigrationGap = false;\n let missingVersion: number | null = null;\n\n for (let version = dbVersion + 1; version <= appVersion; version++) {\n if (migrationByTarget(migrations, version)) {\n pendingVersions.push(version);\n } else {\n hasMigrationGap = true;\n missingVersion = version;\n break;\n }\n }\n\n return {\n dbVersion,\n appVersion,\n pendingVersions,\n isTooNew: false,\n hasMigrationGap,\n missingVersion,\n };\n}\n"],"mappings":";;;;;;;;;aAMwD;AASxD,MAAM,MAAM,aAAa,oBAAoB;;AAG7C,MAAa,kCAAkC;;AAG/C,MAAa,yBAAyB;AAEtC,MAAM,aAAa,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC;AAE1D,SAAgB,qBAAqB,UAA2B;AAC9D,KAAI,SACF,QAAO;CAGT,MAAM,aAAa,KAAK,YAAY,aAAa;AACjD,KAAI,WAAW,WAAW,CACxB,QAAO;AAGT,QAAO;;AAGT,SAAS,kBACP,YACA,eAC0B;AAC1B,QAAO,WAAW,MAAM,cAAc,UAAU,kBAAkB,cAAc;;AAGlF,SAAS,qBAAqB,IAAkB,WAA+B;AAC7E,KAAI,KAAK;EAAE,eAAe,UAAU;EAAe,MAAM,UAAU;EAAU,EAAE,4BAA4B;AAC3G,IAAG,KAAK,kBAAkB;AAC1B,KAAI;AACF,KAAG,KAAK,UAAU,IAAI;AACtB,mBAAiB,IAAI,UAAU,cAAc;AAC7C,KAAG,KAAK,SAAS;UACV,OAAO;AACd,MAAI;AACF,MAAG,KAAK,WAAW;UACb;EAGR,MAAM,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACjE,QAAM,IAAI,MACR,wBAAwB,UAAU,cAAc,IAAI,UAAU,SAAS,YAAY,MACnF,EAAE,OAAO,OAAO,CACjB;;;;;;;AAQL,SAAgB,uBACd,IACA,UAAkC,EAAE,EAC5B;CACR,MAAM,gBAAgB,QAAQ,iBAAA;CAC9B,IAAI,iBAAiB,kBAAkB,GAAG;AAE1C,KAAI,iBAAiB,cACnB,OAAM,IAAI,0BAA0B,gBAAgB,cAAc;AAGpE,KAAI,kBAAkB,cACpB,QAAO;CAGT,MAAM,aAAa,sBAAsB,qBAAqB,QAAQ,cAAc,CAAC;AAErF,QAAO,iBAAiB,eAAe;EACrC,MAAM,cAAc,iBAAiB;EACrC,MAAM,YAAY,kBAAkB,YAAY,YAAY;AAC5D,MAAI,CAAC,UACH,OAAM,IAAI,gCAAgC,gBAAgB,eAAe,YAAY;AAEvF,uBAAqB,IAAI,UAAU;AACnC,mBAAiB;;AAGnB,QAAO;;;AAaT,SAAgB,6BACd,IACA,UAA2E,EAAE,EACtD;CACvB,MAAM,aAAa,QAAQ,iBAAA;CAC3B,MAAM,YAAY,kBAAkB,GAAG;AAGvC,KAFiB,YAAY,WAG3B,QAAO;EACL;EACA;EACA,iBAAiB,EAAE;EACnB,UAAU;EACV,iBAAiB;EACjB,gBAAgB;EACjB;CAGH,MAAM,aAAa,sBAAsB,qBAAqB,QAAQ,cAAc,CAAC;CACrF,MAAM,kBAA4B,EAAE;CACpC,IAAI,kBAAkB;CACtB,IAAI,iBAAgC;AAEpC,MAAK,IAAI,UAAU,YAAY,GAAG,WAAW,YAAY,UACvD,KAAI,kBAAkB,YAAY,QAAQ,CACxC,iBAAgB,KAAK,QAAQ;MACxB;AACL,oBAAkB;AAClB,mBAAiB;AACjB;;AAIJ,QAAO;EACL;EACA;EACA;EACA,UAAU;EACV;EACA;EACD"}
1
+ {"version":3,"file":"runner.js","names":[],"sources":["../../../../../src/storage/sqlite/migrations/runner.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport type { DatabaseSync } from 'node:sqlite';\n\nimport { createLogger } from '../../../utils/logger.js';\nimport { readSchemaVersion, setSchemaVersion } from '../schema-version.js';\nimport { discoverSqlMigrations } from './discover.js';\nimport {\n DatabaseSchemaMigrationGapError,\n DatabaseSchemaTooNewError,\n} from './errors.js';\nimport type { ApplyMigrationsOptions, SqlMigration } from './types.js';\n\nconst log = createLogger('Sqlite:Migrations');\n\n/** Baseline schema version applied from schema.sql on first open. */\nexport const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;\n\n/** Latest schema version this release supports (increment when adding migrations). */\nexport const XOPC_DB_SCHEMA_VERSION = 13;\n\nconst MODULE_DIR = dirname(fileURLToPath(import.meta.url));\n\nexport function resolveMigrationsDir(override?: string): string {\n if (override) {\n return override;\n }\n // Packaged Electron gateway bundle: `out/server/index.js` + `out/server/migrations/`.\n const siblingDir = join(MODULE_DIR, 'migrations');\n if (existsSync(siblingDir)) {\n return siblingDir;\n }\n // Dev / dist: SQL files live next to `migrations/runner.js`.\n return MODULE_DIR;\n}\n\nfunction migrationByTarget(\n migrations: SqlMigration[],\n targetVersion: number,\n): SqlMigration | undefined {\n return migrations.find((migration) => migration.targetVersion === targetVersion);\n}\n\nfunction applySingleMigration(db: DatabaseSync, migration: SqlMigration): void {\n log.info({ targetVersion: migration.targetVersion, file: migration.filename }, 'Applying SQLite migration');\n db.exec('BEGIN IMMEDIATE');\n try {\n db.exec(migration.sql);\n setSchemaVersion(db, migration.targetVersion);\n db.exec('COMMIT');\n } catch (error) {\n try {\n db.exec('ROLLBACK');\n } catch {\n /* preserve original error */\n }\n const em = error instanceof Error ? error.message : String(error);\n throw new Error(\n `SQLite migration to v${migration.targetVersion} (${migration.filename}) failed: ${em}`,\n { cause: error },\n );\n }\n}\n\n/**\n * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.\n * Each step runs in its own transaction and updates schema_meta on success.\n */\nexport function applyPendingMigrations(\n db: DatabaseSync,\n options: ApplyMigrationsOptions = {},\n): number {\n const targetVersion = options.targetVersion ?? XOPC_DB_SCHEMA_VERSION;\n let currentVersion = readSchemaVersion(db);\n\n if (currentVersion > targetVersion) {\n throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);\n }\n\n if (currentVersion >= targetVersion) {\n return currentVersion;\n }\n\n const migrations = discoverSqlMigrations(resolveMigrationsDir(options.migrationsDir));\n\n while (currentVersion < targetVersion) {\n const nextVersion = currentVersion + 1;\n const migration = migrationByTarget(migrations, nextVersion);\n if (!migration) {\n throw new DatabaseSchemaMigrationGapError(currentVersion, targetVersion, nextVersion);\n }\n applySingleMigration(db, migration);\n currentVersion = nextVersion;\n }\n\n return currentVersion;\n}\n\nexport type SchemaMigrationStatus = {\n dbVersion: number;\n appVersion: number;\n pendingVersions: number[];\n isTooNew: boolean;\n hasMigrationGap: boolean;\n missingVersion: number | null;\n};\n\n/** Inspect schema version without mutating the database. */\nexport function inspectSchemaMigrationStatus(\n db: DatabaseSync,\n options: Pick<ApplyMigrationsOptions, 'migrationsDir' | 'targetVersion'> = {},\n): SchemaMigrationStatus {\n const appVersion = options.targetVersion ?? XOPC_DB_SCHEMA_VERSION;\n const dbVersion = readSchemaVersion(db);\n const isTooNew = dbVersion > appVersion;\n\n if (isTooNew) {\n return {\n dbVersion,\n appVersion,\n pendingVersions: [],\n isTooNew: true,\n hasMigrationGap: false,\n missingVersion: null,\n };\n }\n\n const migrations = discoverSqlMigrations(resolveMigrationsDir(options.migrationsDir));\n const pendingVersions: number[] = [];\n let hasMigrationGap = false;\n let missingVersion: number | null = null;\n\n for (let version = dbVersion + 1; version <= appVersion; version++) {\n if (migrationByTarget(migrations, version)) {\n pendingVersions.push(version);\n } else {\n hasMigrationGap = true;\n missingVersion = version;\n break;\n }\n }\n\n return {\n dbVersion,\n appVersion,\n pendingVersions,\n isTooNew: false,\n hasMigrationGap,\n missingVersion,\n };\n}\n"],"mappings":";;;;;;;;;aAMwD;AASxD,MAAM,MAAM,aAAa,oBAAoB;;AAG7C,MAAa,kCAAkC;;AAG/C,MAAa,yBAAyB;AAEtC,MAAM,aAAa,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC;AAE1D,SAAgB,qBAAqB,UAA2B;AAC9D,KAAI,SACF,QAAO;CAGT,MAAM,aAAa,KAAK,YAAY,aAAa;AACjD,KAAI,WAAW,WAAW,CACxB,QAAO;AAGT,QAAO;;AAGT,SAAS,kBACP,YACA,eAC0B;AAC1B,QAAO,WAAW,MAAM,cAAc,UAAU,kBAAkB,cAAc;;AAGlF,SAAS,qBAAqB,IAAkB,WAA+B;AAC7E,KAAI,KAAK;EAAE,eAAe,UAAU;EAAe,MAAM,UAAU;EAAU,EAAE,4BAA4B;AAC3G,IAAG,KAAK,kBAAkB;AAC1B,KAAI;AACF,KAAG,KAAK,UAAU,IAAI;AACtB,mBAAiB,IAAI,UAAU,cAAc;AAC7C,KAAG,KAAK,SAAS;UACV,OAAO;AACd,MAAI;AACF,MAAG,KAAK,WAAW;UACb;EAGR,MAAM,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACjE,QAAM,IAAI,MACR,wBAAwB,UAAU,cAAc,IAAI,UAAU,SAAS,YAAY,MACnF,EAAE,OAAO,OAAO,CACjB;;;;;;;AAQL,SAAgB,uBACd,IACA,UAAkC,EAAE,EAC5B;CACR,MAAM,gBAAgB,QAAQ,iBAAA;CAC9B,IAAI,iBAAiB,kBAAkB,GAAG;AAE1C,KAAI,iBAAiB,cACnB,OAAM,IAAI,0BAA0B,gBAAgB,cAAc;AAGpE,KAAI,kBAAkB,cACpB,QAAO;CAGT,MAAM,aAAa,sBAAsB,qBAAqB,QAAQ,cAAc,CAAC;AAErF,QAAO,iBAAiB,eAAe;EACrC,MAAM,cAAc,iBAAiB;EACrC,MAAM,YAAY,kBAAkB,YAAY,YAAY;AAC5D,MAAI,CAAC,UACH,OAAM,IAAI,gCAAgC,gBAAgB,eAAe,YAAY;AAEvF,uBAAqB,IAAI,UAAU;AACnC,mBAAiB;;AAGnB,QAAO;;;AAaT,SAAgB,6BACd,IACA,UAA2E,EAAE,EACtD;CACvB,MAAM,aAAa,QAAQ,iBAAA;CAC3B,MAAM,YAAY,kBAAkB,GAAG;AAGvC,KAFiB,YAAY,WAG3B,QAAO;EACL;EACA;EACA,iBAAiB,EAAE;EACnB,UAAU;EACV,iBAAiB;EACjB,gBAAgB;EACjB;CAGH,MAAM,aAAa,sBAAsB,qBAAqB,QAAQ,cAAc,CAAC;CACrF,MAAM,kBAA4B,EAAE;CACpC,IAAI,kBAAkB;CACtB,IAAI,iBAAgC;AAEpC,MAAK,IAAI,UAAU,YAAY,GAAG,WAAW,YAAY,UACvD,KAAI,kBAAkB,YAAY,QAAQ,CACxC,iBAAgB,KAAK,QAAQ;MACxB;AACL,oBAAkB;AAClB,mBAAiB;AACjB;;AAIJ,QAAO;EACL;EACA;EACA;EACA,UAAU;EACV;EACA;EACD"}
@@ -16,10 +16,10 @@ import type { ApplyMigrationsOptions, SqlMigration } from './types.js';
16
16
  const log = createLogger('Sqlite:Migrations');
17
17
 
18
18
  /** Baseline schema version applied from schema.sql on first open. */
19
- export const XOPC_DB_BASELINE_SCHEMA_VERSION = 10;
19
+ export const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
20
20
 
21
21
  /** Latest schema version this release supports (increment when adding migrations). */
22
- export const XOPC_DB_SCHEMA_VERSION = 10;
22
+ export const XOPC_DB_SCHEMA_VERSION = 13;
23
23
 
24
24
  const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
25
25
 
@@ -12,7 +12,7 @@ function bootstrapFreshDatabase(db) {
12
12
  db.exec("BEGIN IMMEDIATE");
13
13
  try {
14
14
  db.exec(readSchemaSql());
15
- setSchemaVersion(db, 10);
15
+ setSchemaVersion(db, 11);
16
16
  db.exec("COMMIT");
17
17
  } catch (error) {
18
18
  try {
@@ -29,9 +29,9 @@ function ensureXopcDatabaseSchema(db) {
29
29
  let currentVersion = readSchemaVersion(db);
30
30
  if (currentVersion === 0) {
31
31
  bootstrapFreshDatabase(db);
32
- currentVersion = 10;
32
+ currentVersion = 11;
33
33
  }
34
- applyPendingMigrations(db, { targetVersion: 10 });
34
+ applyPendingMigrations(db, { targetVersion: 13 });
35
35
  }
36
36
  //#endregion
37
37
  export { SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION, ensureSchemaMetaTable, ensureXopcDatabaseSchema, readSchemaVersion, readSchemaVersionForTest, setSchemaVersion };