@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
@@ -1,20 +1,39 @@
1
+ import { appendMemorySignal, deleteMemoryRecord, getMemoryRecord, listMemoryRecords, searchMemoryRecords, upsertMemoryRecord } from "../../storage/sqlite/memory-records-repository.js";
2
+ import "../../storage/sqlite/index.js";
3
+ import { memoryGet, memorySearch } from "../prompt/memory/index.js";
1
4
  //#region src/agent/memory/builtin-provider.ts
2
5
  /**
3
- * Builtin curated store: snapshot is injected via {@link MemorySnapshot} in the system prompt builder.
4
- * This provider participates in prefetch/sync orchestration only as a no-op.
6
+ * Builtin local memory provider backed by agent-home curated files, workspace MEMORY.md,
7
+ * daily notes, and the local SQLite FTS index.
5
8
  */
6
9
  var BuiltinMemoryProvider = class {
7
- name = "builtin";
8
- constructor(_store) {
9
- this._store = _store;
10
+ id = "local";
11
+ displayName = "Local Markdown Memory";
12
+ capabilities = {
13
+ search: true,
14
+ read: true,
15
+ write: true,
16
+ update: true,
17
+ delete: true,
18
+ keywordSearch: true,
19
+ semanticSearch: false,
20
+ hybridSearch: false,
21
+ citations: true,
22
+ sync: false,
23
+ local: true
24
+ };
25
+ workspaceDir = "";
26
+ agentId = "main";
27
+ constructor(store) {
28
+ this.store = store;
10
29
  }
11
30
  isAvailable() {
12
31
  return true;
13
32
  }
14
- async initialize(_sessionId, _options) {
15
- this._store;
33
+ async initialize(_sessionId, options) {
34
+ this.workspaceDir = options?.workspace ?? options?.agentWorkspace ?? this.store.workspaceDir;
35
+ this.agentId = String(options?.agentId ?? this.agentId);
16
36
  }
17
- /** Curated blocks are injected separately as frozen snapshot; avoid duplicating in provider merge. */
18
37
  systemPromptBlock() {
19
38
  return "";
20
39
  }
@@ -22,15 +41,246 @@ var BuiltinMemoryProvider = class {
22
41
  return "";
23
42
  }
24
43
  queuePrefetch() {}
25
- syncTurn() {}
26
44
  getToolSchemas() {
27
45
  return [];
28
46
  }
29
- async handleToolCall() {
30
- return JSON.stringify({ error: "Built-in memory uses curated_memory tool" });
47
+ async search(request) {
48
+ const agentId = request.scope?.agentId ?? this.agentId;
49
+ const workspaceId = request.scope?.workspaceId ?? this.workspaceDir;
50
+ const recordHits = searchMemoryRecords({
51
+ query: request.query,
52
+ agentId,
53
+ workspaceId,
54
+ providerId: this.id,
55
+ kinds: request.kinds,
56
+ maxResults: request.maxResults,
57
+ minScore: request.minScore
58
+ });
59
+ if (recordHits.length > 0) return recordHits;
60
+ return (await memorySearch(this.workspaceDir, request.query, {
61
+ maxResults: request.maxResults,
62
+ minScore: request.minScore,
63
+ memoriesDir: this.store.memoriesDir,
64
+ agentId
65
+ })).map((entry) => {
66
+ const start = entry.lineNumbers[0] ?? 1;
67
+ const end = entry.lineNumbers[entry.lineNumbers.length - 1] ?? start;
68
+ const id = `${entry.file}#L${start}-L${end}`;
69
+ const kind = inferKindFromPath(entry.file);
70
+ return {
71
+ record: upsertMemoryRecord({
72
+ id,
73
+ providerId: this.id,
74
+ kind,
75
+ agentId,
76
+ workspaceId,
77
+ content: entry.lines,
78
+ source: {
79
+ provider: this.id,
80
+ path: entry.file,
81
+ lineStart: start,
82
+ lineEnd: end
83
+ },
84
+ confidence: entry.score
85
+ }),
86
+ score: entry.score,
87
+ snippet: entry.lines,
88
+ citation: {
89
+ providerId: this.id,
90
+ recordId: id,
91
+ path: entry.file,
92
+ lineStart: start,
93
+ lineEnd: end
94
+ }
95
+ };
96
+ });
97
+ }
98
+ async read(request) {
99
+ if (request.id && !request.path) {
100
+ const existing = getMemoryRecord(request.id);
101
+ if (existing) return { record: existing };
102
+ }
103
+ const result = memoryGet(this.workspaceDir, request.path ?? request.id ?? "", request.from, request.lines, this.store.memoriesDir);
104
+ if (!result) return null;
105
+ const path = request.path ?? request.id ?? "";
106
+ return {
107
+ record: upsertMemoryRecord({
108
+ id: `${path}#L${result.lineNumbers.start}-L${result.lineNumbers.end}`,
109
+ providerId: this.id,
110
+ kind: inferKindFromPath(path),
111
+ agentId: request.scope?.agentId ?? this.agentId,
112
+ workspaceId: request.scope?.workspaceId ?? this.workspaceDir,
113
+ content: result.content,
114
+ source: {
115
+ provider: this.id,
116
+ path,
117
+ lineStart: result.lineNumbers.start,
118
+ lineEnd: result.lineNumbers.end
119
+ }
120
+ }),
121
+ lineNumbers: result.lineNumbers
122
+ };
123
+ }
124
+ async get(id) {
125
+ const parsed = parseLineAddress(id);
126
+ return (await this.read({
127
+ path: parsed.path,
128
+ from: parsed.lineStart,
129
+ lines: parsed.lineEnd != null ? parsed.lineEnd - parsed.lineStart + 1 : void 0
130
+ }))?.record ?? null;
131
+ }
132
+ async list(request) {
133
+ const records = listMemoryRecords({
134
+ providerId: this.id,
135
+ agentId: request.scope?.agentId ?? this.agentId,
136
+ workspaceId: request.scope?.workspaceId ?? this.workspaceDir,
137
+ kind: request.kind,
138
+ limit: 200
139
+ });
140
+ if (records.length > 0 || request.kind) return request.target ? records.filter((record) => targetForKind(record.kind) === request.target) : records;
141
+ const target = request.target ?? (request.kind === "user_profile" ? "user" : "memory");
142
+ return this.store.getLiveEntries(target).map((content, index) => upsertMemoryRecord({
143
+ id: `curated:${target}:${index + 1}`,
144
+ providerId: this.id,
145
+ kind: target === "user" ? "user_profile" : "agent_note",
146
+ agentId: request.scope?.agentId ?? this.agentId,
147
+ workspaceId: request.scope?.workspaceId ?? this.workspaceDir,
148
+ content,
149
+ source: {
150
+ provider: this.id,
151
+ path: target === "user" ? "USER.md" : "MEMORY.md"
152
+ }
153
+ }));
154
+ }
155
+ async write(request) {
156
+ const target = request.target ?? (request.kind === "user_profile" ? "user" : "memory");
157
+ const result = await this.store.add(target, request.content);
158
+ if (!result.success) return {
159
+ success: false,
160
+ error: result.error
161
+ };
162
+ return {
163
+ success: true,
164
+ message: result.message,
165
+ record: upsertMemoryRecord({
166
+ id: `curated:${target}:${Date.now()}`,
167
+ providerId: this.id,
168
+ kind: target === "user" ? "user_profile" : request.kind,
169
+ agentId: request.scope?.agentId ?? this.agentId,
170
+ workspaceId: request.scope?.workspaceId ?? this.workspaceDir,
171
+ sessionKey: request.scope?.sessionKey,
172
+ content: request.content,
173
+ source: {
174
+ ...request.source ?? {},
175
+ provider: this.id,
176
+ path: target === "user" ? "USER.md" : "MEMORY.md"
177
+ },
178
+ tags: request.tags
179
+ })
180
+ };
181
+ }
182
+ async update(request) {
183
+ const target = request.target ?? "memory";
184
+ const result = await this.store.replace(target, request.matchText ?? request.id ?? "", request.content);
185
+ if (!result.success) return {
186
+ success: false,
187
+ error: result.error
188
+ };
189
+ if (request.id) {
190
+ const existing = getMemoryRecord(request.id);
191
+ upsertMemoryRecord({
192
+ id: request.id,
193
+ providerId: this.id,
194
+ kind: existing?.kind ?? (target === "user" ? "user_profile" : "agent_note"),
195
+ agentId: existing?.scope.agentId ?? request.scope?.agentId ?? this.agentId,
196
+ workspaceId: existing?.scope.workspaceId ?? request.scope?.workspaceId ?? this.workspaceDir,
197
+ sessionKey: existing?.scope.sessionKey ?? request.scope?.sessionKey,
198
+ content: request.content,
199
+ source: existing?.source ?? {
200
+ provider: this.id,
201
+ path: target === "user" ? "USER.md" : "MEMORY.md"
202
+ },
203
+ tags: existing?.tags
204
+ });
205
+ } else if (request.matchText) for (const existing of listMemoryRecords({
206
+ providerId: this.id,
207
+ agentId: request.scope?.agentId ?? this.agentId,
208
+ workspaceId: request.scope?.workspaceId ?? this.workspaceDir,
209
+ kind: target === "user" ? "user_profile" : "agent_note",
210
+ limit: 200
211
+ })) {
212
+ if (!existing.content.includes(request.matchText)) continue;
213
+ upsertMemoryRecord({
214
+ id: existing.id,
215
+ providerId: this.id,
216
+ kind: existing.kind,
217
+ agentId: existing.scope.agentId,
218
+ workspaceId: existing.scope.workspaceId,
219
+ sessionKey: existing.scope.sessionKey,
220
+ content: request.content,
221
+ source: existing.source,
222
+ tags: existing.tags
223
+ });
224
+ }
225
+ return {
226
+ success: true,
227
+ message: result.message
228
+ };
229
+ }
230
+ async delete(request) {
231
+ const target = request.target ?? "memory";
232
+ const result = await this.store.remove(target, request.matchText ?? request.id ?? "");
233
+ if (!result.success) return {
234
+ success: false,
235
+ error: result.error
236
+ };
237
+ if (request.id) deleteMemoryRecord(request.id);
238
+ else if (request.matchText) {
239
+ for (const existing of listMemoryRecords({
240
+ providerId: this.id,
241
+ agentId: request.scope?.agentId ?? this.agentId,
242
+ workspaceId: request.scope?.workspaceId ?? this.workspaceDir,
243
+ kind: target === "user" ? "user_profile" : "agent_note",
244
+ limit: 200
245
+ })) if (existing.content.includes(request.matchText)) deleteMemoryRecord(existing.id);
246
+ }
247
+ return {
248
+ success: true,
249
+ message: result.message
250
+ };
251
+ }
252
+ sync(event) {
253
+ if (event.type !== "signal") return;
254
+ appendMemorySignal({
255
+ signal: event.signal,
256
+ providerId: this.id,
257
+ agentId: this.agentId,
258
+ workspaceId: this.workspaceDir,
259
+ sessionKey: typeof event.signal.metadata?.sessionKey === "string" ? event.signal.metadata.sessionKey : void 0
260
+ });
31
261
  }
32
262
  async shutdown() {}
33
263
  };
264
+ function inferKindFromPath(path) {
265
+ if (path.endsWith("USER.md")) return "user_profile";
266
+ if (path.endsWith("MEMORY.md")) return "agent_note";
267
+ if (/^memory\/\d{4}-\d{2}-\d{2}\.md$/.test(path)) return "daily_note";
268
+ return "workspace_fact";
269
+ }
270
+ function targetForKind(kind) {
271
+ return kind === "user_profile" ? "user" : "memory";
272
+ }
273
+ function parseLineAddress(id) {
274
+ const match = /^(.*)#L(\d+)(?:-L(\d+))?$/.exec(id);
275
+ if (!match) return { path: id };
276
+ const lineStart = Number.parseInt(match[2] ?? "1", 10);
277
+ const lineEnd = Number.parseInt(match[3] ?? match[2] ?? "1", 10);
278
+ return {
279
+ path: match[1] ?? id,
280
+ lineStart: Number.isFinite(lineStart) ? lineStart : void 0,
281
+ lineEnd: Number.isFinite(lineEnd) ? lineEnd : void 0
282
+ };
283
+ }
34
284
  //#endregion
35
285
  export { BuiltinMemoryProvider };
36
286
 
@@ -1 +1 @@
1
- {"version":3,"file":"builtin-provider.js","names":[],"sources":["../../../../src/agent/memory/builtin-provider.ts"],"sourcesContent":["import type { BuiltinMemoryStore } from './builtin-memory-store.js';\nimport type { MemoryProvider, MemoryProviderInitOptions } from './provider.js';\n\n/**\n * Builtin curated store: snapshot is injected via {@link MemorySnapshot} in the system prompt builder.\n * This provider participates in prefetch/sync orchestration only as a no-op.\n */\nexport class BuiltinMemoryProvider implements MemoryProvider {\n readonly name = 'builtin';\n\n constructor(private readonly _store: BuiltinMemoryStore) {}\n\n isAvailable(): boolean {\n return true;\n }\n\n async initialize(_sessionId: string, _options?: MemoryProviderInitOptions): Promise<void> {\n void this._store;\n }\n\n /** Curated blocks are injected separately as frozen snapshot; avoid duplicating in provider merge. */\n systemPromptBlock(): string {\n return '';\n }\n\n async prefetch(): Promise<string> {\n return '';\n }\n\n queuePrefetch(): void {}\n\n syncTurn(): void {}\n\n getToolSchemas() {\n return [];\n }\n\n async handleToolCall(): Promise<string> {\n return JSON.stringify({ error: 'Built-in memory uses curated_memory tool' });\n }\n\n async shutdown(): Promise<void> {}\n}\n"],"mappings":";;;;;AAOA,IAAa,wBAAb,MAA6D;CAC3D,OAAgB;CAEhB,YAAY,QAA6C;AAA5B,OAAA,SAAA;;CAE7B,cAAuB;AACrB,SAAO;;CAGT,MAAM,WAAW,YAAoB,UAAqD;AACnF,OAAK;;;CAIZ,oBAA4B;AAC1B,SAAO;;CAGT,MAAM,WAA4B;AAChC,SAAO;;CAGT,gBAAsB;CAEtB,WAAiB;CAEjB,iBAAiB;AACf,SAAO,EAAE;;CAGX,MAAM,iBAAkC;AACtC,SAAO,KAAK,UAAU,EAAE,OAAO,4CAA4C,CAAC;;CAG9E,MAAM,WAA0B"}
1
+ {"version":3,"file":"builtin-provider.js","names":[],"sources":["../../../../src/agent/memory/builtin-provider.ts"],"sourcesContent":["import type { BuiltinMemoryStore } from './builtin-memory-store.js';\nimport type { MemoryProvider, MemoryProviderInitOptions } from './provider.js';\nimport { memoryGet, memorySearch } from '../prompt/memory/index.js';\nimport {\n appendMemorySignal,\n deleteMemoryRecord,\n getMemoryRecord,\n listMemoryRecords,\n searchMemoryRecords,\n upsertMemoryRecord,\n} from '../../storage/sqlite/index.js';\nimport type {\n MemoryDeleteRequest,\n MemoryListRequest,\n MemoryReadRequest,\n MemoryReadResult,\n MemoryRecord,\n MemorySearchRequest,\n MemorySearchResult,\n MemoryUpdateRequest,\n MemoryWriteRequest,\n MemoryWriteResult,\n MemorySyncEvent,\n} from './types.js';\n\n/**\n * Builtin local memory provider backed by agent-home curated files, workspace MEMORY.md,\n * daily notes, and the local SQLite FTS index.\n */\nexport class BuiltinMemoryProvider implements MemoryProvider {\n readonly id = 'local';\n readonly displayName = 'Local Markdown Memory';\n readonly capabilities = {\n search: true,\n read: true,\n write: true,\n update: true,\n delete: true,\n keywordSearch: true,\n semanticSearch: false,\n hybridSearch: false,\n citations: true,\n sync: false,\n local: true,\n };\n\n private workspaceDir = '';\n private agentId = 'main';\n\n constructor(private readonly store: BuiltinMemoryStore) {}\n\n isAvailable(): boolean {\n return true;\n }\n\n async initialize(_sessionId: string, options?: MemoryProviderInitOptions): Promise<void> {\n this.workspaceDir = options?.workspace ?? options?.agentWorkspace ?? this.store.workspaceDir;\n this.agentId = String(options?.agentId ?? this.agentId);\n }\n\n systemPromptBlock(): string {\n return '';\n }\n\n async prefetch(): Promise<string> {\n return '';\n }\n\n queuePrefetch(): void {}\n\n getToolSchemas() {\n return [];\n }\n\n async search(request: MemorySearchRequest): Promise<MemorySearchResult[]> {\n const agentId = request.scope?.agentId ?? this.agentId;\n const workspaceId = request.scope?.workspaceId ?? this.workspaceDir;\n const recordHits = searchMemoryRecords({\n query: request.query,\n agentId,\n workspaceId,\n providerId: this.id,\n kinds: request.kinds,\n maxResults: request.maxResults,\n minScore: request.minScore,\n });\n if (recordHits.length > 0) {\n return recordHits;\n }\n\n const results = await memorySearch(this.workspaceDir, request.query, {\n maxResults: request.maxResults,\n minScore: request.minScore,\n memoriesDir: this.store.memoriesDir,\n agentId,\n });\n return results.map((entry) => {\n const start = entry.lineNumbers[0] ?? 1;\n const end = entry.lineNumbers[entry.lineNumbers.length - 1] ?? start;\n const id = `${entry.file}#L${start}-L${end}`;\n const kind = inferKindFromPath(entry.file);\n const record = upsertMemoryRecord({\n id,\n providerId: this.id,\n kind,\n agentId,\n workspaceId,\n content: entry.lines,\n source: {\n provider: this.id,\n path: entry.file,\n lineStart: start,\n lineEnd: end,\n },\n confidence: entry.score,\n });\n return {\n record,\n score: entry.score,\n snippet: entry.lines,\n citation: {\n providerId: this.id,\n recordId: id,\n path: entry.file,\n lineStart: start,\n lineEnd: end,\n },\n };\n });\n }\n\n async read(request: MemoryReadRequest): Promise<MemoryReadResult | null> {\n if (request.id && !request.path) {\n const existing = getMemoryRecord(request.id);\n if (existing) {\n return { record: existing };\n }\n }\n const result = memoryGet(\n this.workspaceDir,\n request.path ?? request.id ?? '',\n request.from,\n request.lines,\n this.store.memoriesDir,\n );\n if (!result) return null;\n const path = request.path ?? request.id ?? '';\n const record = upsertMemoryRecord({\n id: `${path}#L${result.lineNumbers.start}-L${result.lineNumbers.end}`,\n providerId: this.id,\n kind: inferKindFromPath(path),\n agentId: request.scope?.agentId ?? this.agentId,\n workspaceId: request.scope?.workspaceId ?? this.workspaceDir,\n content: result.content,\n source: {\n provider: this.id,\n path,\n lineStart: result.lineNumbers.start,\n lineEnd: result.lineNumbers.end,\n },\n });\n return {\n record,\n lineNumbers: result.lineNumbers,\n };\n }\n\n async get(id: string): Promise<MemoryRecord | null> {\n const parsed = parseLineAddress(id);\n const result = await this.read({\n path: parsed.path,\n from: parsed.lineStart,\n lines: parsed.lineEnd != null ? parsed.lineEnd - parsed.lineStart + 1 : undefined,\n });\n return result?.record ?? null;\n }\n\n async list(request: MemoryListRequest): Promise<MemoryRecord[]> {\n const records = listMemoryRecords({\n providerId: this.id,\n agentId: request.scope?.agentId ?? this.agentId,\n workspaceId: request.scope?.workspaceId ?? this.workspaceDir,\n kind: request.kind,\n limit: 200,\n });\n if (records.length > 0 || request.kind) {\n return request.target\n ? records.filter((record) => targetForKind(record.kind) === request.target)\n : records;\n }\n\n const target = request.target ?? (request.kind === 'user_profile' ? 'user' : 'memory');\n return this.store.getLiveEntries(target).map((content, index) =>\n upsertMemoryRecord({\n id: `curated:${target}:${index + 1}`,\n providerId: this.id,\n kind: target === 'user' ? 'user_profile' : 'agent_note',\n agentId: request.scope?.agentId ?? this.agentId,\n workspaceId: request.scope?.workspaceId ?? this.workspaceDir,\n content,\n source: {\n provider: this.id,\n path: target === 'user' ? 'USER.md' : 'MEMORY.md',\n },\n }),\n );\n }\n\n async write(request: MemoryWriteRequest): Promise<MemoryWriteResult> {\n const target = request.target ?? (request.kind === 'user_profile' ? 'user' : 'memory');\n const result = await this.store.add(target, request.content);\n if (!result.success) return { success: false, error: result.error };\n return {\n success: true,\n message: result.message,\n record: upsertMemoryRecord({\n id: `curated:${target}:${Date.now()}`,\n providerId: this.id,\n kind: target === 'user' ? 'user_profile' : request.kind,\n agentId: request.scope?.agentId ?? this.agentId,\n workspaceId: request.scope?.workspaceId ?? this.workspaceDir,\n sessionKey: request.scope?.sessionKey,\n content: request.content,\n source: {\n ...(request.source ?? {}),\n provider: this.id,\n path: target === 'user' ? 'USER.md' : 'MEMORY.md',\n },\n tags: request.tags,\n }),\n };\n }\n\n async update(request: MemoryUpdateRequest): Promise<MemoryWriteResult> {\n const target = request.target ?? 'memory';\n const result = await this.store.replace(target, request.matchText ?? request.id ?? '', request.content);\n if (!result.success) return { success: false, error: result.error };\n if (request.id) {\n const existing = getMemoryRecord(request.id);\n upsertMemoryRecord({\n id: request.id,\n providerId: this.id,\n kind: existing?.kind ?? (target === 'user' ? 'user_profile' : 'agent_note'),\n agentId: existing?.scope.agentId ?? request.scope?.agentId ?? this.agentId,\n workspaceId: existing?.scope.workspaceId ?? request.scope?.workspaceId ?? this.workspaceDir,\n sessionKey: existing?.scope.sessionKey ?? request.scope?.sessionKey,\n content: request.content,\n source: existing?.source ?? { provider: this.id, path: target === 'user' ? 'USER.md' : 'MEMORY.md' },\n tags: existing?.tags,\n });\n } else if (request.matchText) {\n for (const existing of listMemoryRecords({\n providerId: this.id,\n agentId: request.scope?.agentId ?? this.agentId,\n workspaceId: request.scope?.workspaceId ?? this.workspaceDir,\n kind: target === 'user' ? 'user_profile' : 'agent_note',\n limit: 200,\n })) {\n if (!existing.content.includes(request.matchText)) continue;\n upsertMemoryRecord({\n id: existing.id,\n providerId: this.id,\n kind: existing.kind,\n agentId: existing.scope.agentId,\n workspaceId: existing.scope.workspaceId,\n sessionKey: existing.scope.sessionKey,\n content: request.content,\n source: existing.source,\n tags: existing.tags,\n });\n }\n }\n return { success: true, message: result.message };\n }\n\n async delete(request: MemoryDeleteRequest): Promise<MemoryWriteResult> {\n const target = request.target ?? 'memory';\n const result = await this.store.remove(target, request.matchText ?? request.id ?? '');\n if (!result.success) return { success: false, error: result.error };\n if (request.id) {\n deleteMemoryRecord(request.id);\n } else if (request.matchText) {\n for (const existing of listMemoryRecords({\n providerId: this.id,\n agentId: request.scope?.agentId ?? this.agentId,\n workspaceId: request.scope?.workspaceId ?? this.workspaceDir,\n kind: target === 'user' ? 'user_profile' : 'agent_note',\n limit: 200,\n })) {\n if (existing.content.includes(request.matchText)) {\n deleteMemoryRecord(existing.id);\n }\n }\n }\n return { success: true, message: result.message };\n }\n\n sync(event: MemorySyncEvent): void {\n if (event.type !== 'signal') return;\n appendMemorySignal({\n signal: event.signal,\n providerId: this.id,\n agentId: this.agentId,\n workspaceId: this.workspaceDir,\n sessionKey:\n typeof event.signal.metadata?.sessionKey === 'string'\n ? event.signal.metadata.sessionKey\n : undefined,\n });\n }\n\n async shutdown(): Promise<void> {}\n}\n\nfunction inferKindFromPath(path: string): MemoryRecord['kind'] {\n if (path.endsWith('USER.md')) return 'user_profile';\n if (path.endsWith('MEMORY.md')) return 'agent_note';\n if (/^memory\\/\\d{4}-\\d{2}-\\d{2}\\.md$/.test(path)) return 'daily_note';\n return 'workspace_fact';\n}\n\nfunction targetForKind(kind: MemoryRecord['kind']): 'memory' | 'user' {\n return kind === 'user_profile' ? 'user' : 'memory';\n}\n\nfunction parseLineAddress(id: string): { path: string; lineStart?: number; lineEnd?: number } {\n const match = /^(.*)#L(\\d+)(?:-L(\\d+))?$/.exec(id);\n if (!match) return { path: id };\n const lineStart = Number.parseInt(match[2] ?? '1', 10);\n const lineEnd = Number.parseInt(match[3] ?? match[2] ?? '1', 10);\n return {\n path: match[1] ?? id,\n lineStart: Number.isFinite(lineStart) ? lineStart : undefined,\n lineEnd: Number.isFinite(lineEnd) ? lineEnd : undefined,\n };\n}\n"],"mappings":";;;;;;;;AA6BA,IAAa,wBAAb,MAA6D;CAC3D,KAAc;CACd,cAAuB;CACvB,eAAwB;EACtB,QAAQ;EACR,MAAM;EACN,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,WAAW;EACX,MAAM;EACN,OAAO;EACR;CAED,eAAuB;CACvB,UAAkB;CAElB,YAAY,OAA4C;AAA3B,OAAA,QAAA;;CAE7B,cAAuB;AACrB,SAAO;;CAGT,MAAM,WAAW,YAAoB,SAAoD;AACvF,OAAK,eAAe,SAAS,aAAa,SAAS,kBAAkB,KAAK,MAAM;AAChF,OAAK,UAAU,OAAO,SAAS,WAAW,KAAK,QAAQ;;CAGzD,oBAA4B;AAC1B,SAAO;;CAGT,MAAM,WAA4B;AAChC,SAAO;;CAGT,gBAAsB;CAEtB,iBAAiB;AACf,SAAO,EAAE;;CAGX,MAAM,OAAO,SAA6D;EACxE,MAAM,UAAU,QAAQ,OAAO,WAAW,KAAK;EAC/C,MAAM,cAAc,QAAQ,OAAO,eAAe,KAAK;EACvD,MAAM,aAAa,oBAAoB;GACrC,OAAO,QAAQ;GACf;GACA;GACA,YAAY,KAAK;GACjB,OAAO,QAAQ;GACf,YAAY,QAAQ;GACpB,UAAU,QAAQ;GACnB,CAAC;AACF,MAAI,WAAW,SAAS,EACtB,QAAO;AAST,UAAO,MANe,aAAa,KAAK,cAAc,QAAQ,OAAO;GACnE,YAAY,QAAQ;GACpB,UAAU,QAAQ;GAClB,aAAa,KAAK,MAAM;GACxB;GACD,CAAC,EACa,KAAK,UAAU;GAC5B,MAAM,QAAQ,MAAM,YAAY,MAAM;GACtC,MAAM,MAAM,MAAM,YAAY,MAAM,YAAY,SAAS,MAAM;GAC/D,MAAM,KAAK,GAAG,MAAM,KAAK,IAAI,MAAM,IAAI;GACvC,MAAM,OAAO,kBAAkB,MAAM,KAAK;AAgB1C,UAAO;IACL,QAhBa,mBAAmB;KAChC;KACA,YAAY,KAAK;KACjB;KACA;KACA;KACA,SAAS,MAAM;KACf,QAAQ;MACN,UAAU,KAAK;MACf,MAAM,MAAM;MACZ,WAAW;MACX,SAAS;MACV;KACD,YAAY,MAAM;KACnB,CAEO;IACN,OAAO,MAAM;IACb,SAAS,MAAM;IACf,UAAU;KACR,YAAY,KAAK;KACjB,UAAU;KACV,MAAM,MAAM;KACZ,WAAW;KACX,SAAS;KACV;IACF;IACD;;CAGJ,MAAM,KAAK,SAA8D;AACvE,MAAI,QAAQ,MAAM,CAAC,QAAQ,MAAM;GAC/B,MAAM,WAAW,gBAAgB,QAAQ,GAAG;AAC5C,OAAI,SACF,QAAO,EAAE,QAAQ,UAAU;;EAG/B,MAAM,SAAS,UACb,KAAK,cACL,QAAQ,QAAQ,QAAQ,MAAM,IAC9B,QAAQ,MACR,QAAQ,OACR,KAAK,MAAM,YACZ;AACD,MAAI,CAAC,OAAQ,QAAO;EACpB,MAAM,OAAO,QAAQ,QAAQ,QAAQ,MAAM;AAe3C,SAAO;GACL,QAfa,mBAAmB;IAChC,IAAI,GAAG,KAAK,IAAI,OAAO,YAAY,MAAM,IAAI,OAAO,YAAY;IAChE,YAAY,KAAK;IACjB,MAAM,kBAAkB,KAAK;IAC7B,SAAS,QAAQ,OAAO,WAAW,KAAK;IACxC,aAAa,QAAQ,OAAO,eAAe,KAAK;IAChD,SAAS,OAAO;IAChB,QAAQ;KACN,UAAU,KAAK;KACf;KACA,WAAW,OAAO,YAAY;KAC9B,SAAS,OAAO,YAAY;KAC7B;IACF,CAEO;GACN,aAAa,OAAO;GACrB;;CAGH,MAAM,IAAI,IAA0C;EAClD,MAAM,SAAS,iBAAiB,GAAG;AAMnC,UAAO,MALc,KAAK,KAAK;GAC7B,MAAM,OAAO;GACb,MAAM,OAAO;GACb,OAAO,OAAO,WAAW,OAAO,OAAO,UAAU,OAAO,YAAY,IAAI,KAAA;GACzE,CAAC,GACa,UAAU;;CAG3B,MAAM,KAAK,SAAqD;EAC9D,MAAM,UAAU,kBAAkB;GAChC,YAAY,KAAK;GACjB,SAAS,QAAQ,OAAO,WAAW,KAAK;GACxC,aAAa,QAAQ,OAAO,eAAe,KAAK;GAChD,MAAM,QAAQ;GACd,OAAO;GACR,CAAC;AACF,MAAI,QAAQ,SAAS,KAAK,QAAQ,KAChC,QAAO,QAAQ,SACX,QAAQ,QAAQ,WAAW,cAAc,OAAO,KAAK,KAAK,QAAQ,OAAO,GACzE;EAGN,MAAM,SAAS,QAAQ,WAAW,QAAQ,SAAS,iBAAiB,SAAS;AAC7E,SAAO,KAAK,MAAM,eAAe,OAAO,CAAC,KAAK,SAAS,UACrD,mBAAmB;GACjB,IAAI,WAAW,OAAO,GAAG,QAAQ;GACjC,YAAY,KAAK;GACjB,MAAM,WAAW,SAAS,iBAAiB;GAC3C,SAAS,QAAQ,OAAO,WAAW,KAAK;GACxC,aAAa,QAAQ,OAAO,eAAe,KAAK;GAChD;GACA,QAAQ;IACN,UAAU,KAAK;IACf,MAAM,WAAW,SAAS,YAAY;IACvC;GACF,CAAC,CACH;;CAGH,MAAM,MAAM,SAAyD;EACnE,MAAM,SAAS,QAAQ,WAAW,QAAQ,SAAS,iBAAiB,SAAS;EAC7E,MAAM,SAAS,MAAM,KAAK,MAAM,IAAI,QAAQ,QAAQ,QAAQ;AAC5D,MAAI,CAAC,OAAO,QAAS,QAAO;GAAE,SAAS;GAAO,OAAO,OAAO;GAAO;AACnE,SAAO;GACL,SAAS;GACT,SAAS,OAAO;GAChB,QAAQ,mBAAmB;IACzB,IAAI,WAAW,OAAO,GAAG,KAAK,KAAK;IACnC,YAAY,KAAK;IACjB,MAAM,WAAW,SAAS,iBAAiB,QAAQ;IACnD,SAAS,QAAQ,OAAO,WAAW,KAAK;IACxC,aAAa,QAAQ,OAAO,eAAe,KAAK;IAChD,YAAY,QAAQ,OAAO;IAC3B,SAAS,QAAQ;IACjB,QAAQ;KACN,GAAI,QAAQ,UAAU,EAAE;KACxB,UAAU,KAAK;KACf,MAAM,WAAW,SAAS,YAAY;KACvC;IACD,MAAM,QAAQ;IACf,CAAC;GACH;;CAGH,MAAM,OAAO,SAA0D;EACrE,MAAM,SAAS,QAAQ,UAAU;EACjC,MAAM,SAAS,MAAM,KAAK,MAAM,QAAQ,QAAQ,QAAQ,aAAa,QAAQ,MAAM,IAAI,QAAQ,QAAQ;AACvG,MAAI,CAAC,OAAO,QAAS,QAAO;GAAE,SAAS;GAAO,OAAO,OAAO;GAAO;AACnE,MAAI,QAAQ,IAAI;GACd,MAAM,WAAW,gBAAgB,QAAQ,GAAG;AAC5C,sBAAmB;IACjB,IAAI,QAAQ;IACZ,YAAY,KAAK;IACjB,MAAM,UAAU,SAAS,WAAW,SAAS,iBAAiB;IAC9D,SAAS,UAAU,MAAM,WAAW,QAAQ,OAAO,WAAW,KAAK;IACnE,aAAa,UAAU,MAAM,eAAe,QAAQ,OAAO,eAAe,KAAK;IAC/E,YAAY,UAAU,MAAM,cAAc,QAAQ,OAAO;IACzD,SAAS,QAAQ;IACjB,QAAQ,UAAU,UAAU;KAAE,UAAU,KAAK;KAAI,MAAM,WAAW,SAAS,YAAY;KAAa;IACpG,MAAM,UAAU;IACjB,CAAC;aACO,QAAQ,UACjB,MAAK,MAAM,YAAY,kBAAkB;GACvC,YAAY,KAAK;GACjB,SAAS,QAAQ,OAAO,WAAW,KAAK;GACxC,aAAa,QAAQ,OAAO,eAAe,KAAK;GAChD,MAAM,WAAW,SAAS,iBAAiB;GAC3C,OAAO;GACR,CAAC,EAAE;AACF,OAAI,CAAC,SAAS,QAAQ,SAAS,QAAQ,UAAU,CAAE;AACnD,sBAAmB;IACjB,IAAI,SAAS;IACb,YAAY,KAAK;IACjB,MAAM,SAAS;IACf,SAAS,SAAS,MAAM;IACxB,aAAa,SAAS,MAAM;IAC5B,YAAY,SAAS,MAAM;IAC3B,SAAS,QAAQ;IACjB,QAAQ,SAAS;IACjB,MAAM,SAAS;IAChB,CAAC;;AAGN,SAAO;GAAE,SAAS;GAAM,SAAS,OAAO;GAAS;;CAGnD,MAAM,OAAO,SAA0D;EACrE,MAAM,SAAS,QAAQ,UAAU;EACjC,MAAM,SAAS,MAAM,KAAK,MAAM,OAAO,QAAQ,QAAQ,aAAa,QAAQ,MAAM,GAAG;AACrF,MAAI,CAAC,OAAO,QAAS,QAAO;GAAE,SAAS;GAAO,OAAO,OAAO;GAAO;AACnE,MAAI,QAAQ,GACV,oBAAmB,QAAQ,GAAG;WACrB,QAAQ;QACZ,MAAM,YAAY,kBAAkB;IACvC,YAAY,KAAK;IACjB,SAAS,QAAQ,OAAO,WAAW,KAAK;IACxC,aAAa,QAAQ,OAAO,eAAe,KAAK;IAChD,MAAM,WAAW,SAAS,iBAAiB;IAC3C,OAAO;IACR,CAAC,CACA,KAAI,SAAS,QAAQ,SAAS,QAAQ,UAAU,CAC9C,oBAAmB,SAAS,GAAG;;AAIrC,SAAO;GAAE,SAAS;GAAM,SAAS,OAAO;GAAS;;CAGnD,KAAK,OAA8B;AACjC,MAAI,MAAM,SAAS,SAAU;AAC7B,qBAAmB;GACjB,QAAQ,MAAM;GACd,YAAY,KAAK;GACjB,SAAS,KAAK;GACd,aAAa,KAAK;GAClB,YACE,OAAO,MAAM,OAAO,UAAU,eAAe,WACzC,MAAM,OAAO,SAAS,aACtB,KAAA;GACP,CAAC;;CAGJ,MAAM,WAA0B;;AAGlC,SAAS,kBAAkB,MAAoC;AAC7D,KAAI,KAAK,SAAS,UAAU,CAAE,QAAO;AACrC,KAAI,KAAK,SAAS,YAAY,CAAE,QAAO;AACvC,KAAI,kCAAkC,KAAK,KAAK,CAAE,QAAO;AACzD,QAAO;;AAGT,SAAS,cAAc,MAA+C;AACpE,QAAO,SAAS,iBAAiB,SAAS;;AAG5C,SAAS,iBAAiB,IAAoE;CAC5F,MAAM,QAAQ,4BAA4B,KAAK,GAAG;AAClD,KAAI,CAAC,MAAO,QAAO,EAAE,MAAM,IAAI;CAC/B,MAAM,YAAY,OAAO,SAAS,MAAM,MAAM,KAAK,GAAG;CACtD,MAAM,UAAU,OAAO,SAAS,MAAM,MAAM,MAAM,MAAM,KAAK,GAAG;AAChE,QAAO;EACL,MAAM,MAAM,MAAM;EAClB,WAAW,OAAO,SAAS,UAAU,GAAG,YAAY,KAAA;EACpD,SAAS,OAAO,SAAS,QAAQ,GAAG,UAAU,KAAA;EAC/C"}
@@ -0,0 +1,10 @@
1
+ import type { MemoryManager } from './manager.js';
2
+ export interface MemoryContextAssemblerOptions {
3
+ memoryManager: MemoryManager;
4
+ sessionKey: string;
5
+ query: string;
6
+ maxSearchResults?: number;
7
+ }
8
+ export declare class MemoryContextAssembler {
9
+ assemble(options: MemoryContextAssemblerOptions): Promise<string>;
10
+ }
@@ -0,0 +1,26 @@
1
+ import { buildMemoryContextBlock } from "./context-fence.js";
2
+ //#region src/agent/memory/context-assembler.ts
3
+ var MemoryContextAssembler = class {
4
+ async assemble(options) {
5
+ const query = options.query.trim();
6
+ if (!query) return "";
7
+ const [prefetch, searchResults] = await Promise.all([options.memoryManager.prefetchAll(query, { sessionId: options.sessionKey }), options.memoryManager.search({
8
+ query,
9
+ scope: { sessionKey: options.sessionKey },
10
+ maxResults: options.maxSearchResults ?? 3,
11
+ minScore: .2
12
+ }).catch(() => [])]);
13
+ const lines = [];
14
+ if (prefetch.trim()) lines.push(prefetch.trim());
15
+ for (const result of searchResults) {
16
+ const path = result.citation.path ?? result.record.id;
17
+ const range = result.citation.lineStart != null ? `#L${result.citation.lineStart}${result.citation.lineEnd && result.citation.lineEnd !== result.citation.lineStart ? `-L${result.citation.lineEnd}` : ""}` : "";
18
+ lines.push(`- ${result.snippet.trim()}\n Source: ${path}${range}`);
19
+ }
20
+ return buildMemoryContextBlock(lines.join("\n\n"));
21
+ }
22
+ };
23
+ //#endregion
24
+ export { MemoryContextAssembler };
25
+
26
+ //# sourceMappingURL=context-assembler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-assembler.js","names":[],"sources":["../../../../src/agent/memory/context-assembler.ts"],"sourcesContent":["import { buildMemoryContextBlock } from './context-fence.js';\nimport type { MemoryManager } from './manager.js';\n\nexport interface MemoryContextAssemblerOptions {\n memoryManager: MemoryManager;\n sessionKey: string;\n query: string;\n maxSearchResults?: number;\n}\n\nexport class MemoryContextAssembler {\n async assemble(options: MemoryContextAssemblerOptions): Promise<string> {\n const query = options.query.trim();\n if (!query) return '';\n\n const [prefetch, searchResults] = await Promise.all([\n options.memoryManager.prefetchAll(query, { sessionId: options.sessionKey }),\n options.memoryManager.search({\n query,\n scope: { sessionKey: options.sessionKey },\n maxResults: options.maxSearchResults ?? 3,\n minScore: 0.2,\n }).catch(() => []),\n ]);\n\n const lines: string[] = [];\n if (prefetch.trim()) {\n lines.push(prefetch.trim());\n }\n for (const result of searchResults) {\n const path = result.citation.path ?? result.record.id;\n const range =\n result.citation.lineStart != null\n ? `#L${result.citation.lineStart}${result.citation.lineEnd && result.citation.lineEnd !== result.citation.lineStart ? `-L${result.citation.lineEnd}` : ''}`\n : '';\n lines.push(`- ${result.snippet.trim()}\\n Source: ${path}${range}`);\n }\n\n return buildMemoryContextBlock(lines.join('\\n\\n'));\n }\n}\n"],"mappings":";;AAUA,IAAa,yBAAb,MAAoC;CAClC,MAAM,SAAS,SAAyD;EACtE,MAAM,QAAQ,QAAQ,MAAM,MAAM;AAClC,MAAI,CAAC,MAAO,QAAO;EAEnB,MAAM,CAAC,UAAU,iBAAiB,MAAM,QAAQ,IAAI,CAClD,QAAQ,cAAc,YAAY,OAAO,EAAE,WAAW,QAAQ,YAAY,CAAC,EAC3E,QAAQ,cAAc,OAAO;GAC3B;GACA,OAAO,EAAE,YAAY,QAAQ,YAAY;GACzC,YAAY,QAAQ,oBAAoB;GACxC,UAAU;GACX,CAAC,CAAC,YAAY,EAAE,CAAC,CACnB,CAAC;EAEF,MAAM,QAAkB,EAAE;AAC1B,MAAI,SAAS,MAAM,CACjB,OAAM,KAAK,SAAS,MAAM,CAAC;AAE7B,OAAK,MAAM,UAAU,eAAe;GAClC,MAAM,OAAO,OAAO,SAAS,QAAQ,OAAO,OAAO;GACnD,MAAM,QACJ,OAAO,SAAS,aAAa,OACzB,KAAK,OAAO,SAAS,YAAY,OAAO,SAAS,WAAW,OAAO,SAAS,YAAY,OAAO,SAAS,YAAY,KAAK,OAAO,SAAS,YAAY,OACrJ;AACN,SAAM,KAAK,KAAK,OAAO,QAAQ,MAAM,CAAC,cAAc,OAAO,QAAQ;;AAGrE,SAAO,wBAAwB,MAAM,KAAK,OAAO,CAAC"}
@@ -1,18 +1,36 @@
1
+ import { init_agent_scope, resolveAgentIdForWorkspacePath } from "../agent-scope.js";
2
+ import { resolveEffectiveAgentManifestForAgent } from "../../config/agent-profile.js";
1
3
  import { isMemorySubsystemEnabled } from "./memory-config.js";
2
4
  import { BuiltinMemoryProvider } from "./builtin-provider.js";
3
5
  import { MemoryManager } from "./manager.js";
4
- import { StubMemoryProvider } from "./stub-memory-provider.js";
6
+ import { loadMemoryPluginProviders } from "./plugin-discovery.js";
5
7
  //#region src/agent/memory/create-memory-manager.ts
8
+ init_agent_scope();
6
9
  function createMemoryManagerFromConfig(_workspaceDir, store, config) {
7
- const mgr = new MemoryManager();
10
+ const routing = resolveMemoryManagerOptions(_workspaceDir, config);
11
+ const enabled = isMemorySubsystemEnabled(config);
12
+ const mgr = new MemoryManager({
13
+ ...routing,
14
+ ...enabled ? { loadProviders: () => loadMemoryPluginProviders({ config }) } : {}
15
+ });
8
16
  mgr.addProvider(new BuiltinMemoryProvider(store));
9
- if (!isMemorySubsystemEnabled(config)) return mgr;
10
- if ((config?.agents?.defaults?.memory?.provider ?? "none") === "stub") {
11
- const stub = new StubMemoryProvider();
12
- if (stub.isAvailable()) mgr.addProvider(stub);
13
- }
17
+ if (!enabled) return mgr;
14
18
  return mgr;
15
19
  }
20
+ function resolveMemoryManagerOptions(workspaceDir, config) {
21
+ if (!config) return {};
22
+ const providerRouting = resolveEffectiveAgentManifestForAgent(config, resolveAgentIdForWorkspacePath(config, workspaceDir)).memory.providerRouting;
23
+ if (!providerRouting) return {};
24
+ return {
25
+ searchStrategy: providerRouting.searchStrategy,
26
+ writeStrategy: providerRouting.writeStrategy,
27
+ writePolicy: {
28
+ allowExternalWrites: providerRouting.allowExternalWrites,
29
+ allowedProviderIds: providerRouting.allowedProviderIds,
30
+ autoWriteKinds: providerRouting.autoWriteKinds
31
+ }
32
+ };
33
+ }
16
34
  //#endregion
17
35
  export { createMemoryManagerFromConfig };
18
36
 
@@ -1 +1 @@
1
- {"version":3,"file":"create-memory-manager.js","names":[],"sources":["../../../../src/agent/memory/create-memory-manager.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\nimport { BuiltinMemoryStore } from './builtin-memory-store.js';\nimport { BuiltinMemoryProvider } from './builtin-provider.js';\nimport { isMemorySubsystemEnabled } from './memory-config.js';\nimport { MemoryManager } from './manager.js';\nimport { StubMemoryProvider } from './stub-memory-provider.js';\n\nexport type MemoryProviderId = 'none' | 'stub';\n\nexport function createMemoryManagerFromConfig(\n _workspaceDir: string,\n store: BuiltinMemoryStore,\n config: Config | undefined,\n): MemoryManager {\n const mgr = new MemoryManager();\n mgr.addProvider(new BuiltinMemoryProvider(store));\n\n if (!isMemorySubsystemEnabled(config)) {\n return mgr;\n }\n\n const id = (config?.agents?.defaults?.memory?.provider ?? 'none') as MemoryProviderId;\n if (id === 'stub') {\n const stub = new StubMemoryProvider();\n if (stub.isAvailable()) {\n mgr.addProvider(stub);\n }\n }\n\n return mgr;\n}\n"],"mappings":";;;;;AASA,SAAgB,8BACd,eACA,OACA,QACe;CACf,MAAM,MAAM,IAAI,eAAe;AAC/B,KAAI,YAAY,IAAI,sBAAsB,MAAM,CAAC;AAEjD,KAAI,CAAC,yBAAyB,OAAO,CACnC,QAAO;AAIT,MADY,QAAQ,QAAQ,UAAU,QAAQ,YAAY,YAC/C,QAAQ;EACjB,MAAM,OAAO,IAAI,oBAAoB;AACrC,MAAI,KAAK,aAAa,CACpB,KAAI,YAAY,KAAK;;AAIzB,QAAO"}
1
+ {"version":3,"file":"create-memory-manager.js","names":[],"sources":["../../../../src/agent/memory/create-memory-manager.ts"],"sourcesContent":["import type { Config } from '../../config/schema.js';\nimport { resolveEffectiveAgentManifestForAgent } from '../../config/agent-profile.js';\nimport { resolveAgentIdForWorkspacePath } from '../agent-scope.js';\nimport { BuiltinMemoryStore } from './builtin-memory-store.js';\nimport { BuiltinMemoryProvider } from './builtin-provider.js';\nimport { isMemorySubsystemEnabled } from './memory-config.js';\nimport { MemoryManager, type MemoryManagerOptions } from './manager.js';\nimport { loadMemoryPluginProviders } from './plugin-discovery.js';\n\nexport type MemoryProviderId = 'none' | 'stub';\n\nexport function createMemoryManagerFromConfig(\n _workspaceDir: string,\n store: BuiltinMemoryStore,\n config: Config | undefined,\n): MemoryManager {\n const routing = resolveMemoryManagerOptions(_workspaceDir, config);\n const enabled = isMemorySubsystemEnabled(config);\n const mgr = new MemoryManager({\n ...routing,\n ...(enabled ? { loadProviders: () => loadMemoryPluginProviders({ config }) } : {}),\n });\n mgr.addProvider(new BuiltinMemoryProvider(store));\n\n if (!enabled) {\n return mgr;\n }\n\n return mgr;\n}\n\nfunction resolveMemoryManagerOptions(\n workspaceDir: string,\n config: Config | undefined,\n): Omit<MemoryManagerOptions, 'loadProviders'> {\n if (!config) return {};\n const agentId = resolveAgentIdForWorkspacePath(config, workspaceDir);\n const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n const providerRouting = manifest.memory.providerRouting;\n if (!providerRouting) return {};\n return {\n searchStrategy: providerRouting.searchStrategy,\n writeStrategy: providerRouting.writeStrategy,\n writePolicy: {\n allowExternalWrites: providerRouting.allowExternalWrites,\n allowedProviderIds: providerRouting.allowedProviderIds,\n autoWriteKinds: providerRouting.autoWriteKinds,\n },\n };\n}\n"],"mappings":";;;;;;;kBAEmE;AASnE,SAAgB,8BACd,eACA,OACA,QACe;CACf,MAAM,UAAU,4BAA4B,eAAe,OAAO;CAClE,MAAM,UAAU,yBAAyB,OAAO;CAChD,MAAM,MAAM,IAAI,cAAc;EAC5B,GAAG;EACH,GAAI,UAAU,EAAE,qBAAqB,0BAA0B,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE;EAClF,CAAC;AACF,KAAI,YAAY,IAAI,sBAAsB,MAAM,CAAC;AAEjD,KAAI,CAAC,QACH,QAAO;AAGT,QAAO;;AAGT,SAAS,4BACP,cACA,QAC6C;AAC7C,KAAI,CAAC,OAAQ,QAAO,EAAE;CAGtB,MAAM,kBADW,sCAAsC,QADvC,+BAA+B,QAAQ,aACe,CACtC,CAAC,OAAO;AACxC,KAAI,CAAC,gBAAiB,QAAO,EAAE;AAC/B,QAAO;EACL,gBAAgB,gBAAgB;EAChC,eAAe,gBAAgB;EAC/B,aAAa;GACX,qBAAqB,gBAAgB;GACrC,oBAAoB,gBAAgB;GACpC,gBAAgB,gBAAgB;GACjC;EACF"}
@@ -35,12 +35,7 @@ export type DreamingResolvedConfig = {
35
35
  };
36
36
  deep: DreamingDeepConfig;
37
37
  };
38
- /**
39
- * Resolve the full three-phase dreaming config from the app Config.
40
- *
41
- * Reads through `any` so it can ship independently of the schema evolution.
42
- * Expected shape: `agents.defaults.memory.dreaming.{ enabled, frequency, timezone, phases.{light,deep,rem}.* }`
43
- */
38
+ /** Resolve the full three-phase dreaming config from the default agent manifest. */
44
39
  export declare function resolveDreamingConfig(cfg: Config | undefined): DreamingResolvedConfig;
45
40
  /** Get the cron expression for a specific phase from resolved config. */
46
41
  export declare function getPhaseCron(config: DreamingResolvedConfig, phase: DreamingPhaseId): string;
@@ -1,5 +1,8 @@
1
+ import { init_agent_scope, resolveDefaultAgentId } from "../../agent-scope.js";
2
+ import { resolveEffectiveAgentManifestForAgent } from "../../../config/agent-profile.js";
1
3
  import { DEFAULT_DEEP_CRON, DEFAULT_LIGHT_CRON, DEFAULT_REM_CRON } from "./constants.js";
2
4
  //#region src/agent/memory/dreaming/config.ts
5
+ init_agent_scope();
3
6
  function clampScore(value, fallback) {
4
7
  if (!Number.isFinite(value)) return fallback;
5
8
  return Math.max(0, Math.min(1, value));
@@ -22,15 +25,12 @@ function trimmedStringOr(value, fallback) {
22
25
  function optionalTrimmedString(value) {
23
26
  return typeof value === "string" && value.trim() ? value.trim() : void 0;
24
27
  }
25
- /**
26
- * Resolve the full three-phase dreaming config from the app Config.
27
- *
28
- * Reads through `any` so it can ship independently of the schema evolution.
29
- * Expected shape: `agents.defaults.memory.dreaming.{ enabled, frequency, timezone, phases.{light,deep,rem}.* }`
30
- */
28
+ /** Resolve the full three-phase dreaming config from the default agent manifest. */
31
29
  function resolveDreamingConfig(cfg) {
32
- const dreaming = cfg?.agents?.defaults?.memory?.dreaming;
33
- const enabled = dreaming?.enabled === true;
30
+ const agentId = cfg ? resolveDefaultAgentId(cfg) : void 0;
31
+ const manifest = cfg && agentId ? resolveEffectiveAgentManifestForAgent(cfg, agentId) : void 0;
32
+ const dreaming = manifest?.memory.dreaming;
33
+ const enabled = dreaming?.enabled === true && manifest?.memory.mode !== "off";
34
34
  const frequency = trimmedStringOr(dreaming?.frequency, DEFAULT_DEEP_CRON);
35
35
  const timezone = optionalTrimmedString(dreaming?.timezone);
36
36
  const lightRaw = dreaming?.phases?.light ?? {};
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","names":["anyCfg"],"sources":["../../../../../src/agent/memory/dreaming/config.ts"],"sourcesContent":["import type { Config } from '../../../config/schema.js';\nimport {\n DEFAULT_DEEP_CRON,\n DEFAULT_LIGHT_CRON,\n DEFAULT_MAX_AGE_DAYS,\n DEFAULT_RECENCY_HALF_LIFE_DAYS,\n DEFAULT_REM_CRON,\n type DreamingPhaseId,\n} from './constants.js';\n\n// ── Phase config types ─────────────────────────────────────────────────\n\nexport type DreamingLightConfig = {\n enabled: boolean;\n cron: string;\n lookbackDays: number;\n limit: number;\n dedupeSimilarity: number;\n};\n\nexport type DreamingDeepConfig = {\n enabled: boolean;\n cron: string;\n minScore: number;\n minRecallCount: number;\n minUniqueQueries: number;\n limit: number;\n recencyHalfLifeDays: number;\n maxAgeDays: number;\n};\n\nexport type DreamingRemConfig = {\n enabled: boolean;\n cron: string;\n lookbackDays: number;\n limit: number;\n minPatternStrength: number;\n};\n\nexport type DreamingResolvedConfig = {\n enabled: boolean;\n frequency: string;\n timezone?: string;\n phases: {\n light: DreamingLightConfig;\n deep: DreamingDeepConfig;\n rem: DreamingRemConfig;\n };\n deep: DreamingDeepConfig;\n};\n\n// ── Helpers ────────────────────────────────────────────────────────────\n\nfunction clampScore(value: number, fallback: number): number {\n if (!Number.isFinite(value)) return fallback;\n return Math.max(0, Math.min(1, value));\n}\n\nfunction toPositiveInt(value: unknown, fallback: number): number {\n const num = typeof value === 'string' ? Number(value) : Number(value);\n if (!Number.isFinite(num)) return fallback;\n const floored = Math.floor(num);\n return floored > 0 ? floored : fallback;\n}\n\nfunction toNonNegInt(value: unknown, fallback: number): number {\n const num = typeof value === 'string' ? Number(value) : Number(value);\n if (!Number.isFinite(num)) return fallback;\n const floored = Math.floor(num);\n return floored >= 0 ? floored : fallback;\n}\n\nfunction trimmedStringOr(value: unknown, fallback: string): string {\n return typeof value === 'string' && value.trim() ? value.trim() : fallback;\n}\n\nfunction optionalTrimmedString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\n// ── Resolver ───────────────────────────────────────────────────────────\n\n/**\n * Resolve the full three-phase dreaming config from the app Config.\n *\n * Reads through `any` so it can ship independently of the schema evolution.\n * Expected shape: `agents.defaults.memory.dreaming.{ enabled, frequency, timezone, phases.{light,deep,rem}.* }`\n */\nexport function resolveDreamingConfig(cfg: Config | undefined): DreamingResolvedConfig {\n const anyCfg = cfg as any;\n const dreaming = anyCfg?.agents?.defaults?.memory?.dreaming;\n const enabled = dreaming?.enabled === true;\n\n const frequency = trimmedStringOr(dreaming?.frequency, DEFAULT_DEEP_CRON);\n const timezone = optionalTrimmedString(dreaming?.timezone);\n\n // ── Light phase ────────────────────────────────────────────────────\n const lightRaw = dreaming?.phases?.light ?? {};\n const light: DreamingLightConfig = {\n enabled: enabled && lightRaw?.enabled !== false,\n cron: trimmedStringOr(lightRaw?.cron, DEFAULT_LIGHT_CRON),\n lookbackDays: toPositiveInt(lightRaw?.lookbackDays, 2),\n limit: toNonNegInt(lightRaw?.limit, 100),\n dedupeSimilarity: clampScore(Number(lightRaw?.dedupeSimilarity), 0.9),\n };\n\n // ── Deep phase ─────────────────────────────────────────────────────\n const deepRaw = dreaming?.phases?.deep ?? {};\n const deep: DreamingDeepConfig = {\n enabled: enabled && deepRaw?.enabled !== false,\n cron: trimmedStringOr(deepRaw?.cron, frequency),\n minScore: clampScore(Number(deepRaw?.minScore), 0.8),\n minRecallCount: toPositiveInt(deepRaw?.minRecallCount, 3),\n minUniqueQueries: toPositiveInt(deepRaw?.minUniqueQueries, 3),\n limit: toNonNegInt(deepRaw?.limit, 10),\n recencyHalfLifeDays: toPositiveInt(deepRaw?.recencyHalfLifeDays, DEFAULT_RECENCY_HALF_LIFE_DAYS),\n maxAgeDays: toPositiveInt(deepRaw?.maxAgeDays, DEFAULT_MAX_AGE_DAYS),\n };\n\n // ── REM phase ──────────────────────────────────────────────────────\n const remRaw = dreaming?.phases?.rem ?? {};\n const rem: DreamingRemConfig = {\n enabled: enabled && remRaw?.enabled !== false,\n cron: trimmedStringOr(remRaw?.cron, DEFAULT_REM_CRON),\n lookbackDays: toPositiveInt(remRaw?.lookbackDays, 7),\n limit: toNonNegInt(remRaw?.limit, 10),\n minPatternStrength: clampScore(Number(remRaw?.minPatternStrength), 0.75),\n };\n\n return {\n enabled,\n frequency,\n ...(timezone ? { timezone } : {}),\n phases: { light, deep, rem },\n deep,\n };\n}\n\n/** Get the cron expression for a specific phase from resolved config. */\nexport function getPhaseCron(config: DreamingResolvedConfig, phase: DreamingPhaseId): string {\n return config.phases[phase].cron;\n}\n\n/** Check if a specific phase is enabled (global + phase-level). */\nexport function isPhaseEnabled(config: DreamingResolvedConfig, phase: DreamingPhaseId): boolean {\n return config.enabled && config.phases[phase].enabled;\n}\n\n"],"mappings":";;AAqDA,SAAS,WAAW,OAAe,UAA0B;AAC3D,KAAI,CAAC,OAAO,SAAS,MAAM,CAAE,QAAO;AACpC,QAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,CAAC;;AAGxC,SAAS,cAAc,OAAgB,UAA0B;CAC/D,MAAM,MAAM,OAAO,UAAU,WAAW,OAAO,MAAM,GAAG,OAAO,MAAM;AACrE,KAAI,CAAC,OAAO,SAAS,IAAI,CAAE,QAAO;CAClC,MAAM,UAAU,KAAK,MAAM,IAAI;AAC/B,QAAO,UAAU,IAAI,UAAU;;AAGjC,SAAS,YAAY,OAAgB,UAA0B;CAC7D,MAAM,MAAM,OAAO,UAAU,WAAW,OAAO,MAAM,GAAG,OAAO,MAAM;AACrE,KAAI,CAAC,OAAO,SAAS,IAAI,CAAE,QAAO;CAClC,MAAM,UAAU,KAAK,MAAM,IAAI;AAC/B,QAAO,WAAW,IAAI,UAAU;;AAGlC,SAAS,gBAAgB,OAAgB,UAA0B;AACjE,QAAO,OAAO,UAAU,YAAY,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG;;AAGpE,SAAS,sBAAsB,OAAoC;AACjE,QAAO,OAAO,UAAU,YAAY,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG,KAAA;;;;;;;;AAWpE,SAAgB,sBAAsB,KAAiD;CAErF,MAAM,WAAWA,KAAQ,QAAQ,UAAU,QAAQ;CACnD,MAAM,UAAU,UAAU,YAAY;CAEtC,MAAM,YAAY,gBAAgB,UAAU,WAAW,kBAAkB;CACzE,MAAM,WAAW,sBAAsB,UAAU,SAAS;CAG1D,MAAM,WAAW,UAAU,QAAQ,SAAS,EAAE;CAC9C,MAAM,QAA6B;EACjC,SAAS,WAAW,UAAU,YAAY;EAC1C,MAAM,gBAAgB,UAAU,MAAM,mBAAmB;EACzD,cAAc,cAAc,UAAU,cAAc,EAAE;EACtD,OAAO,YAAY,UAAU,OAAO,IAAI;EACxC,kBAAkB,WAAW,OAAO,UAAU,iBAAiB,EAAE,GAAI;EACtE;CAGD,MAAM,UAAU,UAAU,QAAQ,QAAQ,EAAE;CAC5C,MAAM,OAA2B;EAC/B,SAAS,WAAW,SAAS,YAAY;EACzC,MAAM,gBAAgB,SAAS,MAAM,UAAU;EAC/C,UAAU,WAAW,OAAO,SAAS,SAAS,EAAE,GAAI;EACpD,gBAAgB,cAAc,SAAS,gBAAgB,EAAE;EACzD,kBAAkB,cAAc,SAAS,kBAAkB,EAAE;EAC7D,OAAO,YAAY,SAAS,OAAO,GAAG;EACtC,qBAAqB,cAAc,SAAS,qBAAA,GAAoD;EAChG,YAAY,cAAc,SAAS,YAAA,GAAiC;EACrE;CAGD,MAAM,SAAS,UAAU,QAAQ,OAAO,EAAE;CAC1C,MAAM,MAAyB;EAC7B,SAAS,WAAW,QAAQ,YAAY;EACxC,MAAM,gBAAgB,QAAQ,MAAM,iBAAiB;EACrD,cAAc,cAAc,QAAQ,cAAc,EAAE;EACpD,OAAO,YAAY,QAAQ,OAAO,GAAG;EACrC,oBAAoB,WAAW,OAAO,QAAQ,mBAAmB,EAAE,IAAK;EACzE;AAED,QAAO;EACL;EACA;EACA,GAAI,WAAW,EAAE,UAAU,GAAG,EAAE;EAChC,QAAQ;GAAE;GAAO;GAAM;GAAK;EAC5B;EACD;;;AAIH,SAAgB,aAAa,QAAgC,OAAgC;AAC3F,QAAO,OAAO,OAAO,OAAO;;;AAI9B,SAAgB,eAAe,QAAgC,OAAiC;AAC9F,QAAO,OAAO,WAAW,OAAO,OAAO,OAAO"}
1
+ {"version":3,"file":"config.js","names":[],"sources":["../../../../../src/agent/memory/dreaming/config.ts"],"sourcesContent":["import type { Config } from '../../../config/schema.js';\nimport { resolveDefaultAgentId } from '../../agent-scope.js';\nimport { resolveEffectiveAgentManifestForAgent } from '../../../config/agent-profile.js';\nimport {\n DEFAULT_DEEP_CRON,\n DEFAULT_LIGHT_CRON,\n DEFAULT_MAX_AGE_DAYS,\n DEFAULT_RECENCY_HALF_LIFE_DAYS,\n DEFAULT_REM_CRON,\n type DreamingPhaseId,\n} from './constants.js';\n\n// ── Phase config types ─────────────────────────────────────────────────\n\nexport type DreamingLightConfig = {\n enabled: boolean;\n cron: string;\n lookbackDays: number;\n limit: number;\n dedupeSimilarity: number;\n};\n\nexport type DreamingDeepConfig = {\n enabled: boolean;\n cron: string;\n minScore: number;\n minRecallCount: number;\n minUniqueQueries: number;\n limit: number;\n recencyHalfLifeDays: number;\n maxAgeDays: number;\n};\n\nexport type DreamingRemConfig = {\n enabled: boolean;\n cron: string;\n lookbackDays: number;\n limit: number;\n minPatternStrength: number;\n};\n\nexport type DreamingResolvedConfig = {\n enabled: boolean;\n frequency: string;\n timezone?: string;\n phases: {\n light: DreamingLightConfig;\n deep: DreamingDeepConfig;\n rem: DreamingRemConfig;\n };\n deep: DreamingDeepConfig;\n};\n\n// ── Helpers ────────────────────────────────────────────────────────────\n\nfunction clampScore(value: number, fallback: number): number {\n if (!Number.isFinite(value)) return fallback;\n return Math.max(0, Math.min(1, value));\n}\n\nfunction toPositiveInt(value: unknown, fallback: number): number {\n const num = typeof value === 'string' ? Number(value) : Number(value);\n if (!Number.isFinite(num)) return fallback;\n const floored = Math.floor(num);\n return floored > 0 ? floored : fallback;\n}\n\nfunction toNonNegInt(value: unknown, fallback: number): number {\n const num = typeof value === 'string' ? Number(value) : Number(value);\n if (!Number.isFinite(num)) return fallback;\n const floored = Math.floor(num);\n return floored >= 0 ? floored : fallback;\n}\n\nfunction trimmedStringOr(value: unknown, fallback: string): string {\n return typeof value === 'string' && value.trim() ? value.trim() : fallback;\n}\n\nfunction optionalTrimmedString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\n// ── Resolver ───────────────────────────────────────────────────────────\n\n/** Resolve the full three-phase dreaming config from the default agent manifest. */\nexport function resolveDreamingConfig(cfg: Config | undefined): DreamingResolvedConfig {\n const agentId = cfg ? resolveDefaultAgentId(cfg) : undefined;\n const manifest = cfg && agentId ? resolveEffectiveAgentManifestForAgent(cfg, agentId) : undefined;\n const dreaming = manifest?.memory.dreaming;\n const enabled = dreaming?.enabled === true && manifest?.memory.mode !== 'off';\n\n const frequency = trimmedStringOr(dreaming?.frequency, DEFAULT_DEEP_CRON);\n const timezone = optionalTrimmedString(dreaming?.timezone);\n\n // ── Light phase ────────────────────────────────────────────────────\n const lightRaw = dreaming?.phases?.light ?? {};\n const light: DreamingLightConfig = {\n enabled: enabled && lightRaw?.enabled !== false,\n cron: trimmedStringOr(lightRaw?.cron, DEFAULT_LIGHT_CRON),\n lookbackDays: toPositiveInt(lightRaw?.lookbackDays, 2),\n limit: toNonNegInt(lightRaw?.limit, 100),\n dedupeSimilarity: clampScore(Number(lightRaw?.dedupeSimilarity), 0.9),\n };\n\n // ── Deep phase ─────────────────────────────────────────────────────\n const deepRaw = dreaming?.phases?.deep ?? {};\n const deep: DreamingDeepConfig = {\n enabled: enabled && deepRaw?.enabled !== false,\n cron: trimmedStringOr(deepRaw?.cron, frequency),\n minScore: clampScore(Number(deepRaw?.minScore), 0.8),\n minRecallCount: toPositiveInt(deepRaw?.minRecallCount, 3),\n minUniqueQueries: toPositiveInt(deepRaw?.minUniqueQueries, 3),\n limit: toNonNegInt(deepRaw?.limit, 10),\n recencyHalfLifeDays: toPositiveInt(deepRaw?.recencyHalfLifeDays, DEFAULT_RECENCY_HALF_LIFE_DAYS),\n maxAgeDays: toPositiveInt(deepRaw?.maxAgeDays, DEFAULT_MAX_AGE_DAYS),\n };\n\n // ── REM phase ──────────────────────────────────────────────────────\n const remRaw = dreaming?.phases?.rem ?? {};\n const rem: DreamingRemConfig = {\n enabled: enabled && remRaw?.enabled !== false,\n cron: trimmedStringOr(remRaw?.cron, DEFAULT_REM_CRON),\n lookbackDays: toPositiveInt(remRaw?.lookbackDays, 7),\n limit: toNonNegInt(remRaw?.limit, 10),\n minPatternStrength: clampScore(Number(remRaw?.minPatternStrength), 0.75),\n };\n\n return {\n enabled,\n frequency,\n ...(timezone ? { timezone } : {}),\n phases: { light, deep, rem },\n deep,\n };\n}\n\n/** Get the cron expression for a specific phase from resolved config. */\nexport function getPhaseCron(config: DreamingResolvedConfig, phase: DreamingPhaseId): string {\n return config.phases[phase].cron;\n}\n\n/** Check if a specific phase is enabled (global + phase-level). */\nexport function isPhaseEnabled(config: DreamingResolvedConfig, phase: DreamingPhaseId): boolean {\n return config.enabled && config.phases[phase].enabled;\n}\n"],"mappings":";;;;kBAC6D;AAsD7D,SAAS,WAAW,OAAe,UAA0B;AAC3D,KAAI,CAAC,OAAO,SAAS,MAAM,CAAE,QAAO;AACpC,QAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,MAAM,CAAC;;AAGxC,SAAS,cAAc,OAAgB,UAA0B;CAC/D,MAAM,MAAM,OAAO,UAAU,WAAW,OAAO,MAAM,GAAG,OAAO,MAAM;AACrE,KAAI,CAAC,OAAO,SAAS,IAAI,CAAE,QAAO;CAClC,MAAM,UAAU,KAAK,MAAM,IAAI;AAC/B,QAAO,UAAU,IAAI,UAAU;;AAGjC,SAAS,YAAY,OAAgB,UAA0B;CAC7D,MAAM,MAAM,OAAO,UAAU,WAAW,OAAO,MAAM,GAAG,OAAO,MAAM;AACrE,KAAI,CAAC,OAAO,SAAS,IAAI,CAAE,QAAO;CAClC,MAAM,UAAU,KAAK,MAAM,IAAI;AAC/B,QAAO,WAAW,IAAI,UAAU;;AAGlC,SAAS,gBAAgB,OAAgB,UAA0B;AACjE,QAAO,OAAO,UAAU,YAAY,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG;;AAGpE,SAAS,sBAAsB,OAAoC;AACjE,QAAO,OAAO,UAAU,YAAY,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG,KAAA;;;AAMpE,SAAgB,sBAAsB,KAAiD;CACrF,MAAM,UAAU,MAAM,sBAAsB,IAAI,GAAG,KAAA;CACnD,MAAM,WAAW,OAAO,UAAU,sCAAsC,KAAK,QAAQ,GAAG,KAAA;CACxF,MAAM,WAAW,UAAU,OAAO;CAClC,MAAM,UAAU,UAAU,YAAY,QAAQ,UAAU,OAAO,SAAS;CAExE,MAAM,YAAY,gBAAgB,UAAU,WAAW,kBAAkB;CACzE,MAAM,WAAW,sBAAsB,UAAU,SAAS;CAG1D,MAAM,WAAW,UAAU,QAAQ,SAAS,EAAE;CAC9C,MAAM,QAA6B;EACjC,SAAS,WAAW,UAAU,YAAY;EAC1C,MAAM,gBAAgB,UAAU,MAAM,mBAAmB;EACzD,cAAc,cAAc,UAAU,cAAc,EAAE;EACtD,OAAO,YAAY,UAAU,OAAO,IAAI;EACxC,kBAAkB,WAAW,OAAO,UAAU,iBAAiB,EAAE,GAAI;EACtE;CAGD,MAAM,UAAU,UAAU,QAAQ,QAAQ,EAAE;CAC5C,MAAM,OAA2B;EAC/B,SAAS,WAAW,SAAS,YAAY;EACzC,MAAM,gBAAgB,SAAS,MAAM,UAAU;EAC/C,UAAU,WAAW,OAAO,SAAS,SAAS,EAAE,GAAI;EACpD,gBAAgB,cAAc,SAAS,gBAAgB,EAAE;EACzD,kBAAkB,cAAc,SAAS,kBAAkB,EAAE;EAC7D,OAAO,YAAY,SAAS,OAAO,GAAG;EACtC,qBAAqB,cAAc,SAAS,qBAAA,GAAoD;EAChG,YAAY,cAAc,SAAS,YAAA,GAAiC;EACrE;CAGD,MAAM,SAAS,UAAU,QAAQ,OAAO,EAAE;CAC1C,MAAM,MAAyB;EAC7B,SAAS,WAAW,QAAQ,YAAY;EACxC,MAAM,gBAAgB,QAAQ,MAAM,iBAAiB;EACrD,cAAc,cAAc,QAAQ,cAAc,EAAE;EACpD,OAAO,YAAY,QAAQ,OAAO,GAAG;EACrC,oBAAoB,WAAW,OAAO,QAAQ,mBAAmB,EAAE,IAAK;EACzE;AAED,QAAO;EACL;EACA;EACA,GAAI,WAAW,EAAE,UAAU,GAAG,EAAE;EAChC,QAAQ;GAAE;GAAO;GAAM;GAAK;EAC5B;EACD;;;AAIH,SAAgB,aAAa,QAAgC,OAAgC;AAC3F,QAAO,OAAO,OAAO,OAAO;;;AAI9B,SAAgB,eAAe,QAAgC,OAAiC;AAC9F,QAAO,OAAO,WAAW,OAAO,OAAO,OAAO"}
@@ -1,5 +1,6 @@
1
1
  import { type DreamingStoreEntry } from './short-term-store.js';
2
2
  import type { DreamingDeepConfig } from './config.js';
3
+ import type { MemoryManager } from '../manager.js';
3
4
  export type { DreamingDeepConfig } from './config.js';
4
5
  export type DreamingPromotionCandidate = DreamingStoreEntry & {
5
6
  avgScore: number;
@@ -11,6 +12,7 @@ export type DreamingPromotionCandidate = DreamingStoreEntry & {
11
12
  export declare function runDreamingDeepPromotion(params: {
12
13
  workspaceDir: string;
13
14
  config?: Partial<DreamingDeepConfig>;
15
+ memoryManager?: MemoryManager;
14
16
  now?: Date;
15
17
  }): Promise<{
16
18
  ok: boolean;
@@ -184,6 +184,30 @@ async function runDreamingDeepPromotion(params) {
184
184
  await fs.writeFile(memoryPath, next, "utf-8");
185
185
  const nowIso = now.toISOString();
186
186
  for (const c of appliedCandidates) {
187
+ const writeResult = await params.memoryManager?.write({
188
+ kind: "derived_insight",
189
+ content: c.snippet,
190
+ source: {
191
+ provider: "dreaming",
192
+ path: c.path,
193
+ lineStart: c.startLine,
194
+ lineEnd: c.endLine
195
+ },
196
+ tags: ["dreaming", "promoted"]
197
+ });
198
+ params.memoryManager?.recordSignal({
199
+ source: "dreaming",
200
+ recordId: writeResult?.record?.id,
201
+ score: c.score,
202
+ content: c.snippet,
203
+ metadata: {
204
+ path: c.path,
205
+ startLine: c.startLine,
206
+ endLine: c.endLine,
207
+ recallCount: c.recallCount,
208
+ avgScore: c.avgScore
209
+ }
210
+ });
187
211
  const entry = store.entries[c.key];
188
212
  if (entry) {
189
213
  entry.promotedAt = nowIso;