@xopcai/xopc 0.0.116 → 0.0.118

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 (677) hide show
  1. package/README.md +44 -28
  2. package/README.zh-CN.md +63 -45
  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/outbound/media-load.js +1 -1
  9. package/dist/extensions/feishu/src/schema/config-schema.d.ts +3 -3
  10. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  11. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
  12. package/dist/extensions/telegram/src/command-handler.js +1 -2
  13. package/dist/extensions/telegram/src/command-handler.js.map +1 -1
  14. package/dist/extensions/telegram/src/config-schema.d.ts +8 -8
  15. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  16. package/dist/extensions/telegram/src/plugin.js +1 -1
  17. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  18. package/dist/extensions/telegram/src/update-offset-store.js +1 -1
  19. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  20. package/dist/extensions/telegram/xopc.extension.json +1 -1
  21. package/dist/extensions/weixin/src/api/api.js +2 -2
  22. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  23. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  24. package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
  25. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  26. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  27. package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
  28. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  29. package/dist/extensions/weixin/src/plugin.js +1 -1
  30. package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
  31. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  32. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CWM1UU5P.js → agent-avatar-dicebear-dzUrQoeZ.js} +1 -1
  33. package/dist/gateway/static/root/assets/agents-BCxZbkOw.js +2 -0
  34. package/dist/gateway/static/root/assets/{app-management-settings-panel-yXSXY_bu.js → app-management-settings-panel-bxYJVJpx.js} +1 -1
  35. package/dist/gateway/static/root/assets/{appearance-settings-DjY1P_ug.js → appearance-settings-BCIykXlI.js} +1 -1
  36. package/dist/gateway/static/root/assets/apps-page--wMEL00f.js +1 -0
  37. package/dist/gateway/static/root/assets/{archive-plugin-CytE5j-e.js → archive-plugin-Cki4SfU2.js} +1 -1
  38. package/dist/gateway/static/root/assets/{attachment-load-BvvrN6rF.js → attachment-load-D-KnS2Do.js} +1 -1
  39. package/dist/gateway/static/root/assets/{binary-plugins-IBWSitnj.js → binary-plugins-D2sgvJja.js} +1 -1
  40. package/dist/gateway/static/root/assets/{block-editor-C-wDpsf-.js → block-editor-DIq-4Gvb.js} +27 -27
  41. package/dist/gateway/static/root/assets/browser-settings-page-DRhKdn81.js +8 -0
  42. package/dist/gateway/static/root/assets/capability-presets-api-CorhiHlg.js +1 -0
  43. package/dist/gateway/static/root/assets/capability-presets-settings-panel-qFx9Jtce.js +1 -0
  44. package/dist/gateway/static/root/assets/channels-settings-BAwAkqIA.js +1 -0
  45. package/dist/gateway/static/root/assets/connectors-page-BQLcfitM.js +2 -0
  46. package/dist/gateway/static/root/assets/cron-api-qGwmL-24.js +1 -0
  47. package/dist/gateway/static/root/assets/cron-page-BBWMAj8-.js +3 -0
  48. package/dist/gateway/static/root/assets/dreaming-settings-Dw89Obml.js +1 -0
  49. package/dist/gateway/static/root/assets/{extension-debug-page-BAIyjDlq.js → extension-debug-page-DYu1KaFQ.js} +1 -1
  50. package/dist/gateway/static/root/assets/{extension-page-DEhv2GpC.js → extension-page-B3W6QwlZ.js} +1 -1
  51. package/dist/gateway/static/root/assets/{extension-settings-page-DOuAxTDW.js → extension-settings-page-D7VQ-cxE.js} +1 -1
  52. package/dist/gateway/static/root/assets/{fetch-CTsREQIe.js → fetch-B7xDPu-R.js} +1 -1
  53. package/dist/gateway/static/root/assets/{format-interval-label-D35Bfhtx.js → format-interval-label-BzxafKxR.js} +1 -1
  54. package/dist/gateway/static/root/assets/gateway-config-api-BTBLSeUu.js +1 -0
  55. package/dist/gateway/static/root/assets/gateway-settings-Cmwy58rS.js +1 -0
  56. package/dist/gateway/static/root/assets/{gateway-startup-retry-C1KAHrd2.js → gateway-startup-retry-CYj9FWCp.js} +1 -1
  57. package/dist/gateway/static/root/assets/goal-detail-page-l7mu5GWX.js +1 -0
  58. package/dist/gateway/static/root/assets/{goals-config-api-KnLGpu6h.js → goals-config-api-CQQgzPr3.js} +1 -1
  59. package/dist/gateway/static/root/assets/goals-page-BHitvJAv.js +2 -0
  60. package/dist/gateway/static/root/assets/{goals-settings-DtPtqZi8.js → goals-settings-CYVY4NGp.js} +1 -1
  61. package/dist/gateway/static/root/assets/{heartbeat-config-api-uKw1f0IG.js → heartbeat-config-api-DriO_CN9.js} +1 -1
  62. package/dist/gateway/static/root/assets/heartbeat-settings-CUQTKxg7.js +1 -0
  63. package/dist/gateway/static/root/assets/index-C17Tsd_b.css +1 -0
  64. package/dist/gateway/static/root/assets/index-Cc41r16l.js +191 -0
  65. package/dist/gateway/static/root/assets/{interval-presets-Dq0FXJ65.js → interval-presets-DFPCKW_W.js} +1 -1
  66. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-C9_t4m7t.js → keyboard-shortcuts-settings-CcVcqstx.js} +1 -1
  67. package/dist/gateway/static/root/assets/{logs-page-SNkWzidV.js → logs-page-C2Uqvae9.js} +2 -2
  68. package/dist/gateway/static/root/assets/{markdown-split-Ca87W8-h.js → markdown-split-BwOFrJ2E.js} +1 -1
  69. package/dist/gateway/static/root/assets/{media-plugins-BAcUjPRJ.js → media-plugins-Cnz6Q5G6.js} +1 -1
  70. package/dist/gateway/static/root/assets/messages-B1iSKjiw.js +3 -0
  71. package/dist/gateway/static/root/assets/models-hub-panel-BfLfcta8.js +2 -0
  72. package/dist/gateway/static/root/assets/note-detail-page-BjwOQBfT.js +2 -0
  73. package/dist/gateway/static/root/assets/{note-image-lightbox-hnSX5SSn.js → note-image-lightbox-B-Svpmza.js} +1 -1
  74. package/dist/gateway/static/root/assets/notes-page-DktdBiwB.js +1 -0
  75. package/dist/gateway/static/root/assets/{preview-open-alternatives-CNgM20H5.js → preview-open-alternatives-Bss4TiwP.js} +1 -1
  76. package/dist/gateway/static/root/assets/remote-access-hub-rfVx96fq.js +1 -0
  77. package/dist/gateway/static/root/assets/{save-bar-controls-CcdjGcfT.js → save-bar-controls-BRNjdgKq.js} +1 -1
  78. package/dist/gateway/static/root/assets/{schedule-field-CYr39z76.js → schedule-field-CUCKODde.js} +1 -1
  79. package/dist/gateway/static/root/assets/{schema-form-BRAJgZQ2.js → schema-form-Dub9sy8r.js} +1 -1
  80. package/dist/gateway/static/root/assets/sessions-page-DbtMFuuH.js +1 -0
  81. package/dist/gateway/static/root/assets/settings-advanced-gate-5re5gAnP.js +1 -0
  82. package/dist/gateway/static/root/assets/{settings-collapsible-section-BhzjeGWi.js → settings-collapsible-section-BeFLavGi.js} +1 -1
  83. package/dist/gateway/static/root/assets/{settings-form-section-Cz3Pcr9b.js → settings-form-section-dmyaPOTG.js} +1 -1
  84. package/dist/gateway/static/root/assets/settings-page-D-WMyLlj.js +1 -0
  85. package/dist/gateway/static/root/assets/setup-status-panel-Cl-DEJAU.js +1 -0
  86. package/dist/gateway/static/root/assets/{share-preview-page-DL4y9K5e.js → share-preview-page-C8glrdqe.js} +1 -1
  87. package/dist/gateway/static/root/assets/shares-settings-CyPVvbLt.js +1 -0
  88. package/dist/gateway/static/root/assets/skill-reload-api-CleTH1oz.js +1 -0
  89. package/dist/gateway/static/root/assets/skills-page-Ck8hdXqR.js +2 -0
  90. package/dist/gateway/static/root/assets/{system-settings-panel-FD2jxRZ3.js → system-settings-panel-DI-LN_8G.js} +1 -1
  91. package/dist/gateway/static/root/assets/typed-models-lib-kX9duch4.js +1 -0
  92. package/dist/gateway/static/root/assets/{use-channel-catalog-BInPrfR5.js → use-channel-catalog-DqlWTsDb.js} +1 -1
  93. package/dist/gateway/static/root/assets/user-profile-settings-panel-B-UFPMXy.js +1 -0
  94. package/dist/gateway/static/root/assets/utils-Dm0hKalR.js +1 -0
  95. package/dist/gateway/static/root/assets/voice-api-key-field-C73IVZeC.js +1 -0
  96. package/dist/gateway/static/root/assets/{voice-player-store-1U3vFppm.js → voice-player-store-C_ArLJPM.js} +1 -1
  97. package/dist/gateway/static/root/assets/workflows-page-BtFGp2y_.js +18 -0
  98. package/dist/gateway/static/root/index.html +5 -5
  99. package/dist/package.js +1 -1
  100. package/dist/src/agent/agent-manager.d.ts +1 -1
  101. package/dist/src/agent/agent-manager.js +14 -14
  102. package/dist/src/agent/agent-manager.js.map +1 -1
  103. package/dist/src/agent/agent-scope.js +5 -9
  104. package/dist/src/agent/agent-scope.js.map +1 -1
  105. package/dist/src/agent/background-review/coordinator.js +0 -1
  106. package/dist/src/agent/background-review/coordinator.js.map +1 -1
  107. package/dist/src/agent/background-review/prompts.d.ts +2 -2
  108. package/dist/src/agent/background-review/prompts.js +2 -2
  109. package/dist/src/agent/background-review/prompts.js.map +1 -1
  110. package/dist/src/agent/background-review/run-background-review.d.ts +0 -2
  111. package/dist/src/agent/background-review/run-background-review.js +2 -4
  112. package/dist/src/agent/background-review/run-background-review.js.map +1 -1
  113. package/dist/src/agent/background-review/settings.d.ts +1 -1
  114. package/dist/src/agent/background-review/settings.js +8 -8
  115. package/dist/src/agent/background-review/settings.js.map +1 -1
  116. package/dist/src/agent/bootstrap/bootstrap-cache.d.ts +1 -0
  117. package/dist/src/agent/bootstrap/bootstrap-cache.js +4 -3
  118. package/dist/src/agent/bootstrap/bootstrap-cache.js.map +1 -1
  119. package/dist/src/agent/bootstrap/bootstrap-context.d.ts +2 -2
  120. package/dist/src/agent/bootstrap/bootstrap-context.js +4 -4
  121. package/dist/src/agent/bootstrap/bootstrap-context.js.map +1 -1
  122. package/dist/src/agent/bootstrap/bootstrap-files.d.ts +4 -0
  123. package/dist/src/agent/bootstrap/bootstrap-files.js +4 -3
  124. package/dist/src/agent/bootstrap/bootstrap-files.js.map +1 -1
  125. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +4 -2
  126. package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +1 -1
  127. package/dist/src/agent/bootstrap/load-bootstrap-files.d.ts +2 -1
  128. package/dist/src/agent/bootstrap/load-bootstrap-files.js +18 -17
  129. package/dist/src/agent/bootstrap/load-bootstrap-files.js.map +1 -1
  130. package/dist/src/agent/bootstrap/project-agents-context.js +1 -1
  131. package/dist/src/agent/bootstrap/types.d.ts +1 -1
  132. package/dist/src/agent/context/workspace-seed.js +3 -3
  133. package/dist/src/agent/context/workspace-state.js +1 -1
  134. package/dist/src/agent/context/workspace-templates/AGENTS.md +1 -1
  135. package/dist/src/agent/context/workspace.d.ts +4 -2
  136. package/dist/src/agent/context/workspace.js +6 -5
  137. package/dist/src/agent/context/workspace.js.map +1 -1
  138. package/dist/src/agent/embedded/run-for-session.js +4 -1
  139. package/dist/src/agent/embedded/run-for-session.js.map +1 -1
  140. package/dist/src/agent/fallback/candidates.js +11 -9
  141. package/dist/src/agent/fallback/candidates.js.map +1 -1
  142. package/dist/src/agent/goals/goal-locale.js +2 -2
  143. package/dist/src/agent/goals/post-turn.js +3 -3
  144. package/dist/src/agent/image/generation/runtime-types.d.ts +2 -0
  145. package/dist/src/agent/image/generation/runtime.js +1 -1
  146. package/dist/src/agent/image/generation/runtime.js.map +1 -1
  147. package/dist/src/agent/image/image-helpers.d.ts +1 -1
  148. package/dist/src/agent/image/image-helpers.js +4 -17
  149. package/dist/src/agent/image/image-helpers.js.map +1 -1
  150. package/dist/src/agent/image/image-model-fallback.js +1 -1
  151. package/dist/src/agent/image/image-model-fallback.js.map +1 -1
  152. package/dist/src/agent/image/inbound-image-handling.js +1 -1
  153. package/dist/src/agent/image/inbound-image-handling.js.map +1 -1
  154. package/dist/src/agent/image/load-image-media.js +2 -2
  155. package/dist/src/agent/image/tool-model-config.d.ts +1 -1
  156. package/dist/src/agent/image/tool-model-config.js +2 -2
  157. package/dist/src/agent/image/tool-model-config.js.map +1 -1
  158. package/dist/src/agent/ipc/inbox.js +3 -3
  159. package/dist/src/agent/ipc/socket.js +1 -1
  160. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  161. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  162. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  163. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  164. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js +1 -1
  165. package/dist/src/agent/mcp/resolve-embedded-mcp-tools.js.map +1 -1
  166. package/dist/src/agent/media-generation/runtime-shared.d.ts +5 -2
  167. package/dist/src/agent/media-generation/runtime-shared.js +1 -1
  168. package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
  169. package/dist/src/agent/memory/builtin-memory-store.d.ts +6 -2
  170. package/dist/src/agent/memory/builtin-memory-store.js +15 -6
  171. package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
  172. package/dist/src/agent/memory/builtin-provider.d.ts +31 -9
  173. package/dist/src/agent/memory/builtin-provider.js +290 -11
  174. package/dist/src/agent/memory/builtin-provider.js.map +1 -1
  175. package/dist/src/agent/memory/candidate-extractor.d.ts +6 -0
  176. package/dist/src/agent/memory/candidate-extractor.js +60 -0
  177. package/dist/src/agent/memory/candidate-extractor.js.map +1 -0
  178. package/dist/src/agent/memory/context-assembler.d.ts +10 -0
  179. package/dist/src/agent/memory/context-assembler.js +26 -0
  180. package/dist/src/agent/memory/context-assembler.js.map +1 -0
  181. package/dist/src/agent/memory/create-memory-manager.js +25 -7
  182. package/dist/src/agent/memory/create-memory-manager.js.map +1 -1
  183. package/dist/src/agent/memory/dreaming/config.d.ts +1 -6
  184. package/dist/src/agent/memory/dreaming/config.js +8 -8
  185. package/dist/src/agent/memory/dreaming/config.js.map +1 -1
  186. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +2 -0
  187. package/dist/src/agent/memory/dreaming/deep-promotion.js +25 -1
  188. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -1
  189. package/dist/src/agent/memory/dreaming/events.js +1 -1
  190. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  191. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  192. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  193. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  194. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  195. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  196. package/dist/src/agent/memory/index.d.ts +1 -0
  197. package/dist/src/agent/memory/index.js +4 -3
  198. package/dist/src/agent/memory/inject-prefetch.js +6 -2
  199. package/dist/src/agent/memory/inject-prefetch.js.map +1 -1
  200. package/dist/src/agent/memory/manager.d.ts +39 -2
  201. package/dist/src/agent/memory/manager.js +355 -39
  202. package/dist/src/agent/memory/manager.js.map +1 -1
  203. package/dist/src/agent/memory/memory-config.js +15 -15
  204. package/dist/src/agent/memory/memory-config.js.map +1 -1
  205. package/dist/src/agent/memory/memory-flush.js +1 -1
  206. package/dist/src/agent/memory/plugin-discovery.d.ts +19 -5
  207. package/dist/src/agent/memory/plugin-discovery.js +97 -31
  208. package/dist/src/agent/memory/plugin-discovery.js.map +1 -1
  209. package/dist/src/agent/memory/prefetch-coordinator.js.map +1 -1
  210. package/dist/src/agent/memory/provider.d.ts +20 -15
  211. package/dist/src/agent/memory/stub-memory-provider.d.ts +17 -2
  212. package/dist/src/agent/memory/stub-memory-provider.js +20 -3
  213. package/dist/src/agent/memory/stub-memory-provider.js.map +1 -1
  214. package/dist/src/agent/memory/types.d.ts +162 -3
  215. package/dist/src/agent/models/manager.d.ts +1 -1
  216. package/dist/src/agent/models/manager.js +2 -2
  217. package/dist/src/agent/models/manager.js.map +1 -1
  218. package/dist/src/agent/orchestration/agent-orchestrator.d.ts +1 -1
  219. package/dist/src/agent/orchestration/agent-orchestrator.js +2 -1
  220. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  221. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.d.ts +2 -2
  222. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js +1 -1
  223. package/dist/src/agent/orchestration/run-agent-turn-with-fallbacks.js.map +1 -1
  224. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +2 -6
  225. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +2 -8
  226. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js.map +1 -1
  227. package/dist/src/agent/prompt/memory/index.d.ts +4 -2
  228. package/dist/src/agent/prompt/memory/index.js +19 -13
  229. package/dist/src/agent/prompt/memory/index.js.map +1 -1
  230. package/dist/src/agent/prompt/sections/memory-skills.js +1 -1
  231. package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -1
  232. package/dist/src/agent/prompt/service-prompt-builder.js +5 -20
  233. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  234. package/dist/src/agent/reply/post-compaction-context.js +10 -7
  235. package/dist/src/agent/reply/post-compaction-context.js.map +1 -1
  236. package/dist/src/agent/reply/startup-context.js +7 -12
  237. package/dist/src/agent/reply/startup-context.js.map +1 -1
  238. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  239. package/dist/src/agent/sandbox/path-policy.js +2 -2
  240. package/dist/src/agent/service/process-direct-streaming.js +1 -4
  241. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  242. package/dist/src/agent/service/session-context-report.js +1 -1
  243. package/dist/src/agent/service/session-context-report.js.map +1 -1
  244. package/dist/src/agent/service.d.ts +3 -3
  245. package/dist/src/agent/service.js +30 -35
  246. package/dist/src/agent/service.js.map +1 -1
  247. package/dist/src/agent/service.types.d.ts +1 -2
  248. package/dist/src/agent/session/session-hydrator.js +1 -2
  249. package/dist/src/agent/session/session-hydrator.js.map +1 -1
  250. package/dist/src/agent/session/session-inspector.d.ts +1 -1
  251. package/dist/src/agent/session/session-inspector.js +10 -15
  252. package/dist/src/agent/session/session-inspector.js.map +1 -1
  253. package/dist/src/agent/skills/config.js +2 -2
  254. package/dist/src/agent/skills/filesystem-watcher.js +1 -1
  255. package/dist/src/agent/skills/hub-hash.js +2 -2
  256. package/dist/src/agent/skills/hub-lock.js +1 -1
  257. package/dist/src/agent/skills/hub-pull.js +3 -3
  258. package/dist/src/agent/skills/index.js +2 -2
  259. package/dist/src/agent/skills/installer.js +2 -2
  260. package/dist/src/agent/skills/managed-store.js +1 -1
  261. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  262. package/dist/src/agent/skills/skill-manager.js +1 -1
  263. package/dist/src/agent/skills/skill-view-path.js +1 -1
  264. package/dist/src/agent/skills/test-framework.js +1 -1
  265. package/dist/src/agent/starter-agents.d.ts +1 -3
  266. package/dist/src/agent/starter-agents.js +14 -22
  267. package/dist/src/agent/starter-agents.js.map +1 -1
  268. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -2
  269. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
  270. package/dist/src/agent/tools/curated-memory-tool.d.ts +2 -5
  271. package/dist/src/agent/tools/curated-memory-tool.js +77 -18
  272. package/dist/src/agent/tools/curated-memory-tool.js.map +1 -1
  273. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  274. package/dist/src/agent/tools/factory.d.ts +0 -4
  275. package/dist/src/agent/tools/factory.js +19 -58
  276. package/dist/src/agent/tools/factory.js.map +1 -1
  277. package/dist/src/agent/tools/find.js +1 -1
  278. package/dist/src/agent/tools/grep.js +1 -1
  279. package/dist/src/agent/tools/image-generate-tool.d.ts +1 -1
  280. package/dist/src/agent/tools/image-generate-tool.js +20 -15
  281. package/dist/src/agent/tools/image-generate-tool.js.map +1 -1
  282. package/dist/src/agent/tools/image-tool.js +1 -3
  283. package/dist/src/agent/tools/image-tool.js.map +1 -1
  284. package/dist/src/agent/tools/memory-tool.d.ts +2 -2
  285. package/dist/src/agent/tools/memory-tool.js +39 -14
  286. package/dist/src/agent/tools/memory-tool.js.map +1 -1
  287. package/dist/src/agent/tools/session-search-tool.js +1 -3
  288. package/dist/src/agent/tools/session-search-tool.js.map +1 -1
  289. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  290. package/dist/src/agent/tools/web-extract.js +8 -9
  291. package/dist/src/agent/tools/web-extract.js.map +1 -1
  292. package/dist/src/agent/tools/workflow-tool.js +1 -1
  293. package/dist/src/agent/workflow/catalog.js +1 -1
  294. package/dist/src/agent/workflow/subagent-runner.js +1 -3
  295. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  296. package/dist/src/agent-manifest/index.d.ts +4 -0
  297. package/dist/src/agent-manifest/index.js +10 -0
  298. package/dist/src/agent-manifest/index.js.map +1 -0
  299. package/dist/src/agent-manifest/prompt.d.ts +2 -0
  300. package/dist/src/agent-manifest/prompt.js +57 -0
  301. package/dist/src/agent-manifest/prompt.js.map +1 -0
  302. package/dist/src/agent-manifest/resolver.d.ts +12 -0
  303. package/dist/src/agent-manifest/resolver.js +95 -0
  304. package/dist/src/agent-manifest/resolver.js.map +1 -0
  305. package/dist/src/agent-manifest/schema.d.ts +1010 -0
  306. package/dist/src/agent-manifest/schema.js +269 -0
  307. package/dist/src/agent-manifest/schema.js.map +1 -0
  308. package/dist/src/agent-manifest/validator.d.ts +25 -0
  309. package/dist/src/agent-manifest/validator.js +88 -0
  310. package/dist/src/agent-manifest/validator.js.map +1 -0
  311. package/dist/src/agent-runtime/boundary-guard.d.ts +12 -0
  312. package/dist/src/agent-runtime/boundary-guard.js +23 -0
  313. package/dist/src/agent-runtime/boundary-guard.js.map +1 -0
  314. package/dist/src/agent-runtime/index.d.ts +7 -0
  315. package/dist/src/agent-runtime/index.js +8 -0
  316. package/dist/src/agent-runtime/memory-runtime.d.ts +21 -0
  317. package/dist/src/agent-runtime/memory-runtime.js +50 -0
  318. package/dist/src/agent-runtime/memory-runtime.js.map +1 -0
  319. package/dist/src/agent-runtime/model-router.d.ts +11 -0
  320. package/dist/src/agent-runtime/model-router.js +16 -0
  321. package/dist/src/agent-runtime/model-router.js.map +1 -0
  322. package/dist/src/agent-runtime/run-trace.d.ts +27 -0
  323. package/dist/src/agent-runtime/run-trace.js +53 -0
  324. package/dist/src/agent-runtime/run-trace.js.map +1 -0
  325. package/dist/src/agent-runtime/runtime-profile.d.ts +24 -0
  326. package/dist/src/agent-runtime/runtime-profile.js +44 -0
  327. package/dist/src/agent-runtime/runtime-profile.js.map +1 -0
  328. package/dist/src/agent-runtime/tool-registry.d.ts +28 -0
  329. package/dist/src/agent-runtime/tool-registry.js +52 -0
  330. package/dist/src/agent-runtime/tool-registry.js.map +1 -0
  331. package/dist/src/agent-runtime/workflow-runtime.d.ts +31 -0
  332. package/dist/src/agent-runtime/workflow-runtime.js +34 -0
  333. package/dist/src/agent-runtime/workflow-runtime.js.map +1 -0
  334. package/dist/src/ai-assist/text-assist.js +1 -1
  335. package/dist/src/auth/credentials.js +2 -2
  336. package/dist/src/auth/profiles/store.js +2 -2
  337. package/dist/src/auth/sync-provider-auth.js +1 -1
  338. package/dist/src/browser/actions/extension-registry-bridge.js +1 -1
  339. package/dist/src/browser/actions/extension-registry-bridge.js.map +1 -1
  340. package/dist/src/browser/actions/registry.js +5 -8
  341. package/dist/src/browser/actions/registry.js.map +1 -1
  342. package/dist/src/browser/backend-from-config.d.ts +1 -1
  343. package/dist/src/browser/backend-from-config.js +50 -71
  344. package/dist/src/browser/backend-from-config.js.map +1 -1
  345. package/dist/src/browser/browser-command-timeout.d.ts +0 -1
  346. package/dist/src/browser/browser-command-timeout.js +3 -7
  347. package/dist/src/browser/browser-command-timeout.js.map +1 -1
  348. package/dist/src/browser/cache-dir-policy.js +1 -1
  349. package/dist/src/browser/cdp-local-launcher.js +2 -2
  350. package/dist/src/browser/pipeline/source.js +1 -1
  351. package/dist/src/browser/providers/browser-ext-install.d.ts +2 -12
  352. package/dist/src/browser/providers/browser-ext-install.js +7 -12
  353. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  354. package/dist/src/browser/providers/cloakbrowser.js +5 -5
  355. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  356. package/dist/src/browser/readiness.js +16 -16
  357. package/dist/src/browser/readiness.js.map +1 -1
  358. package/dist/src/browser/schemas.js +1 -1
  359. package/dist/src/browser/schemas.js.map +1 -1
  360. package/dist/src/browser/stealth.js +1 -1
  361. package/dist/src/channels/catalog/channel-catalog-service.js +1 -1
  362. package/dist/src/channels/outbound/persist-store.js +1 -1
  363. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  364. package/dist/src/channels/pairing/pairing-store.js +2 -2
  365. package/dist/src/channels/pipeline.d.ts +1 -1
  366. package/dist/src/channels/pipeline.js.map +1 -1
  367. package/dist/src/chat-commands/agent-edit.js +2 -3
  368. package/dist/src/chat-commands/agent-edit.js.map +1 -1
  369. package/dist/src/chat-commands/builtins/config.js +6 -6
  370. package/dist/src/chat-commands/builtins/config.js.map +1 -1
  371. package/dist/src/chat-commands/builtins/model.js +2 -2
  372. package/dist/src/chat-commands/builtins/model.js.map +1 -1
  373. package/dist/src/chat-commands/builtins/thinking.js +16 -42
  374. package/dist/src/chat-commands/builtins/thinking.js.map +1 -1
  375. package/dist/src/chat-commands/config-paths.js +1 -1
  376. package/dist/src/chat-commands/config-paths.js.map +1 -1
  377. package/dist/src/chat-commands/context.js +3 -4
  378. package/dist/src/chat-commands/context.js.map +1 -1
  379. package/dist/src/cli/command-manifest.d.ts +1 -1
  380. package/dist/src/cli/command-manifest.js +2 -2
  381. package/dist/src/cli/command-manifest.js.map +1 -1
  382. package/dist/src/cli/commands/agent.js +3 -1
  383. package/dist/src/cli/commands/agent.js.map +1 -1
  384. package/dist/src/cli/commands/agents.js +3 -6
  385. package/dist/src/cli/commands/agents.js.map +1 -1
  386. package/dist/src/cli/commands/browser-cli-helpers.js +9 -11
  387. package/dist/src/cli/commands/browser-cli-helpers.js.map +1 -1
  388. package/dist/src/cli/commands/config.js +6 -6
  389. package/dist/src/cli/commands/config.js.map +1 -1
  390. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  391. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  392. package/dist/src/cli/commands/doctor/checks/provider-auth.js +3 -18
  393. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -1
  394. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  395. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -2
  396. package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +1 -1
  397. package/dist/src/cli/commands/extension-create.js +1 -1
  398. package/dist/src/cli/commands/extension-dev.js +2 -2
  399. package/dist/src/cli/commands/extension-marketplace.js +2 -2
  400. package/dist/src/cli/commands/extension-pack.js +2 -2
  401. package/dist/src/cli/commands/extension.js +3 -3
  402. package/dist/src/cli/commands/gateway/logs.js +1 -1
  403. package/dist/src/cli/commands/goal.js +1 -1
  404. package/dist/src/cli/commands/image.js +13 -372
  405. package/dist/src/cli/commands/image.js.map +1 -1
  406. package/dist/src/cli/commands/init.js +7 -6
  407. package/dist/src/cli/commands/init.js.map +1 -1
  408. package/dist/src/cli/commands/models.js +14 -16
  409. package/dist/src/cli/commands/models.js.map +1 -1
  410. package/dist/src/cli/commands/onboard/channels/registry.js.map +1 -1
  411. package/dist/src/cli/commands/onboard/model.js +28 -23
  412. package/dist/src/cli/commands/onboard/model.js.map +1 -1
  413. package/dist/src/cli/commands/onboard.js +3 -3
  414. package/dist/src/cli/commands/onboard.js.map +1 -1
  415. package/dist/src/cli/commands/skills-test.js +1 -1
  416. package/dist/src/cli/commands/tui.js +2 -2
  417. package/dist/src/cli/commands/tui.js.map +1 -1
  418. package/dist/src/cli/index.d.ts +1 -0
  419. package/dist/src/cli/index.js +10 -5
  420. package/dist/src/cli/index.js.map +1 -1
  421. package/dist/src/cli/registry.js +1 -1
  422. package/dist/src/cli/registry.js.map +1 -1
  423. package/dist/src/cli/templates.d.ts +1 -1
  424. package/dist/src/cli/templates.js +2 -12
  425. package/dist/src/cli/templates.js.map +1 -1
  426. package/dist/src/cli/utils/gateway-client.js +1 -1
  427. package/dist/src/cli/utils/init-workspace-core.d.ts +1 -4
  428. package/dist/src/cli/utils/init-workspace-core.js +9 -8
  429. package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
  430. package/dist/src/commands/agents.config.d.ts +0 -1
  431. package/dist/src/commands/agents.config.js +59 -13
  432. package/dist/src/commands/agents.config.js.map +1 -1
  433. package/dist/src/config/agent-profile.d.ts +5 -17
  434. package/dist/src/config/agent-profile.js +32 -64
  435. package/dist/src/config/agent-profile.js.map +1 -1
  436. package/dist/src/config/agent-typed-models.d.ts +1 -1
  437. package/dist/src/config/agent-typed-models.js +3 -6
  438. package/dist/src/config/agent-typed-models.js.map +1 -1
  439. package/dist/src/config/gateway-bind.js +1 -1
  440. package/dist/src/config/index.js +9 -9
  441. package/dist/src/config/integration.d.ts +1 -1
  442. package/dist/src/config/loader.js +4 -4
  443. package/dist/src/config/models-json.js +2 -2
  444. package/dist/src/config/paths-state.js +1 -1
  445. package/dist/src/config/paths.d.ts +8 -1
  446. package/dist/src/config/paths.js +17 -4
  447. package/dist/src/config/paths.js.map +1 -1
  448. package/dist/src/config/profile.js +1 -1
  449. package/dist/src/config/reload.js +2 -2
  450. package/dist/src/config/reload.js.map +1 -1
  451. package/dist/src/config/rules.js +6 -56
  452. package/dist/src/config/rules.js.map +1 -1
  453. package/dist/src/config/schema.d.ts +916 -779
  454. package/dist/src/config/schema.js +174 -423
  455. package/dist/src/config/schema.js.map +1 -1
  456. package/dist/src/config/workspace-path.js +1 -1
  457. package/dist/src/connectors/composio-triggers.js +1 -1
  458. package/dist/src/cron/executor.js +1 -1
  459. package/dist/src/cron/index.js +1 -1
  460. package/dist/src/cron/service.js +2 -2
  461. package/dist/src/cron/validation.d.ts +3 -3
  462. package/dist/src/daemon/constants.js +1 -1
  463. package/dist/src/daemon/install-plan.js +2 -2
  464. package/dist/src/daemon/launchd.js +2 -2
  465. package/dist/src/daemon/schtasks.js +2 -2
  466. package/dist/src/daemon/systemd.js +2 -2
  467. package/dist/src/extensions/activation-context.js +13 -7
  468. package/dist/src/extensions/activation-context.js.map +1 -1
  469. package/dist/src/extensions/bundle-mcp.js +1 -1
  470. package/dist/src/extensions/discover-extensions.js +2 -2
  471. package/dist/src/extensions/health.js +1 -1
  472. package/dist/src/extensions/install.js +2 -2
  473. package/dist/src/extensions/loader.js +2 -2
  474. package/dist/src/extensions/lockfile.js +3 -3
  475. package/dist/src/extensions/security.js +1 -1
  476. package/dist/src/extensions/update.js +2 -2
  477. package/dist/src/gateway/agents-admin.d.ts +24 -18
  478. package/dist/src/gateway/agents-admin.js +158 -92
  479. package/dist/src/gateway/agents-admin.js.map +1 -1
  480. package/dist/src/gateway/capability-presets-admin.d.ts +56 -0
  481. package/dist/src/gateway/capability-presets-admin.js +214 -0
  482. package/dist/src/gateway/capability-presets-admin.js.map +1 -0
  483. package/dist/src/gateway/chat-stream/mapper.js +9 -2
  484. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  485. package/dist/src/gateway/file-path-classifier.js +2 -2
  486. package/dist/src/gateway/global-defaults-admin.d.ts +36 -0
  487. package/dist/src/gateway/global-defaults-admin.js +146 -0
  488. package/dist/src/gateway/global-defaults-admin.js.map +1 -0
  489. package/dist/src/gateway/hono/lib/agent-model.d.ts +1 -1
  490. package/dist/src/gateway/hono/lib/agent-model.js +1 -1
  491. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  492. package/dist/src/gateway/hono/lib/config-payload.d.ts +234 -127
  493. package/dist/src/gateway/hono/lib/config-payload.js +14 -38
  494. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  495. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  496. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  497. package/dist/src/gateway/hono/routes/agents.js +88 -33
  498. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  499. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  500. package/dist/src/gateway/hono/routes/browser.js +8 -15
  501. package/dist/src/gateway/hono/routes/browser.js.map +1 -1
  502. package/dist/src/gateway/hono/routes/capability-presets.d.ts +3 -0
  503. package/dist/src/gateway/hono/routes/capability-presets.js +145 -0
  504. package/dist/src/gateway/hono/routes/capability-presets.js.map +1 -0
  505. package/dist/src/gateway/hono/routes/commands-skills.js +4 -5
  506. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  507. package/dist/src/gateway/hono/routes/config-patch/agents.d.ts +1 -17
  508. package/dist/src/gateway/hono/routes/config-patch/agents.js +2 -443
  509. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  510. package/dist/src/gateway/hono/routes/config-patch/misc.js +7 -1
  511. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  512. package/dist/src/gateway/hono/routes/config.js +1 -1
  513. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  514. package/dist/src/gateway/hono/routes/dreaming.js +8 -1
  515. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
  516. package/dist/src/gateway/hono/routes/global-defaults.d.ts +3 -0
  517. package/dist/src/gateway/hono/routes/global-defaults.js +61 -0
  518. package/dist/src/gateway/hono/routes/global-defaults.js.map +1 -0
  519. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  520. package/dist/src/gateway/hono/routes/index.js +2 -0
  521. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  522. package/dist/src/gateway/hono/routes/lazy-bundles.js +17 -1
  523. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  524. package/dist/src/gateway/hono/routes/memory.d.ts +3 -0
  525. package/dist/src/gateway/hono/routes/memory.js +361 -0
  526. package/dist/src/gateway/hono/routes/memory.js.map +1 -0
  527. package/dist/src/gateway/hono/routes/models.js +2 -2
  528. package/dist/src/gateway/hono/routes/shares.js +1 -1
  529. package/dist/src/gateway/hono/routes/workflows.js +1 -1
  530. package/dist/src/gateway/hono/routes/workspace.js +2 -2
  531. package/dist/src/gateway/lock.js +3 -3
  532. package/dist/src/gateway/ports.js +1 -1
  533. package/dist/src/gateway/service/config-coordinator.js +1 -1
  534. package/dist/src/gateway/service/marketplace-service.d.ts +4 -4
  535. package/dist/src/gateway/service/marketplace-service.js +13 -9
  536. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  537. package/dist/src/gateway/service.d.ts +1 -1
  538. package/dist/src/gateway/service.js +15 -16
  539. package/dist/src/gateway/service.js.map +1 -1
  540. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  541. package/dist/src/goals/goal-workflow-judge.js +2 -2
  542. package/dist/src/i18n/goals-bundle.js +1 -1
  543. package/dist/src/i18n/index.js +1 -1
  544. package/dist/src/i18n/share-tool-bundle.js +2 -2
  545. package/dist/src/infra/brew.js +1 -1
  546. package/dist/src/infra/package-json.js +1 -1
  547. package/dist/src/infra/package-update-steps.js +1 -1
  548. package/dist/src/infra/path-env.js +2 -2
  549. package/dist/src/infra/restart.js +1 -1
  550. package/dist/src/infra/stable-node-path.js +1 -1
  551. package/dist/src/infra/update-check.js +1 -1
  552. package/dist/src/infra/update-global.js +1 -1
  553. package/dist/src/infra/update-lock.js +2 -2
  554. package/dist/src/infra/update-restart.js +1 -1
  555. package/dist/src/infra/update-runner.js +1 -1
  556. package/dist/src/infra/update-startup.js +1 -1
  557. package/dist/src/infra/write-file-atomic.js +2 -2
  558. package/dist/src/media/store.js +1 -1
  559. package/dist/src/notes/agent-context.js +3 -3
  560. package/dist/src/notes/service.js +4 -2
  561. package/dist/src/notes/service.js.map +1 -1
  562. package/dist/src/notes/store.js +2 -2
  563. package/dist/src/project-trust/trust-store.js +2 -2
  564. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  565. package/dist/src/providers/index.d.ts +5 -6
  566. package/dist/src/providers/index.js +26 -30
  567. package/dist/src/providers/index.js.map +1 -1
  568. package/dist/src/providers/model-registry.js +4 -4
  569. package/dist/src/session/index.js +1 -1
  570. package/dist/src/session/init-session-turn.js +1 -1
  571. package/dist/src/session/resolve-session.js +1 -1
  572. package/dist/src/session/session-title.js +2 -2
  573. package/dist/src/session/store.js +1 -1
  574. package/dist/src/session/thinking-resolve.d.ts +1 -1
  575. package/dist/src/session/thinking-resolve.js +1 -1
  576. package/dist/src/session/thinking-resolve.js.map +1 -1
  577. package/dist/src/share/share-auto.js +2 -2
  578. package/dist/src/share/share-store.js +3 -3
  579. package/dist/src/share/share-thumbnail.js +2 -2
  580. package/dist/src/share/share-zip.js +1 -1
  581. package/dist/src/share/site-share-store.js +3 -3
  582. package/dist/src/share/site-static-serve.js +1 -1
  583. package/dist/src/storage/sqlite/connection.js +2 -2
  584. package/dist/src/storage/sqlite/index.d.ts +1 -0
  585. package/dist/src/storage/sqlite/index.js +2 -1
  586. package/dist/src/storage/sqlite/memory-index-repository.d.ts +1 -0
  587. package/dist/src/storage/sqlite/memory-index-repository.js +17 -16
  588. package/dist/src/storage/sqlite/memory-index-repository.js.map +1 -1
  589. package/dist/src/storage/sqlite/memory-records-repository.d.ts +144 -0
  590. package/dist/src/storage/sqlite/memory-records-repository.js +453 -0
  591. package/dist/src/storage/sqlite/memory-records-repository.js.map +1 -0
  592. package/dist/src/storage/sqlite/migrations/012_memory_records.sql +63 -0
  593. package/dist/src/storage/sqlite/migrations/013_memory_trace_events.sql +21 -0
  594. package/dist/src/storage/sqlite/migrations/014_memory_record_governance.sql +10 -0
  595. package/dist/src/storage/sqlite/migrations/015_memory_trace_feedback.sql +4 -0
  596. package/dist/src/storage/sqlite/migrations/discover.js +1 -1
  597. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  598. package/dist/src/storage/sqlite/migrations/runner.js +4 -4
  599. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  600. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  601. package/dist/src/storage/sqlite/schema.js +2 -2
  602. package/dist/src/storage/sqlite/schema.sql +86 -0
  603. package/dist/src/tui/backends/embedded-backend.d.ts +3 -0
  604. package/dist/src/tui/backends/embedded-backend.js +43 -24
  605. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  606. package/dist/src/tui/backends/gateway-sse-backend.d.ts +1 -0
  607. package/dist/src/tui/backends/gateway-sse-backend.js +16 -3
  608. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  609. package/dist/src/tui/clipboard-image.js +3 -3
  610. package/dist/src/tui/components/tui-header.d.ts +0 -1
  611. package/dist/src/tui/components/tui-header.js +3 -8
  612. package/dist/src/tui/components/tui-header.js.map +1 -1
  613. package/dist/src/tui/extension-host/load-extensions.js +1 -1
  614. package/dist/src/tui/extension-host/load-extensions.js.map +1 -1
  615. package/dist/src/tui/theme-manager.js +1 -1
  616. package/dist/src/tui/tui-command-formatters.js +4 -4
  617. package/dist/src/tui/tui-commands.js +2 -2
  618. package/dist/src/tui/tui-keybindings-file.js +1 -1
  619. package/dist/src/tui/tui-scoped-models.js +2 -2
  620. package/dist/src/tui/tui-settings.js +1 -1
  621. package/dist/src/tui/tui-startup-resources.js +2 -1
  622. package/dist/src/tui/tui-startup-resources.js.map +1 -1
  623. package/dist/src/tui/tui-startup-text.js +12 -12
  624. package/dist/src/tui/tui-startup-text.js.map +1 -1
  625. package/dist/src/tui/tui.js +10 -7
  626. package/dist/src/tui/tui.js.map +1 -1
  627. package/dist/src/tunnel/frpc-binary.js +4 -4
  628. package/dist/src/tunnel/frpc-config.js +1 -1
  629. package/dist/src/tunnel/frpc-extract.js +1 -1
  630. package/dist/src/tunnel/tunnel-state.js +1 -1
  631. package/dist/src/utils/logger/audit.js +1 -1
  632. package/dist/src/utils/logger/log-store.js +1 -1
  633. package/dist/src/utils/logger/rotation.js +1 -1
  634. package/dist/src/utils/logger/streams.js +1 -1
  635. package/dist/src/voice/tts/audio.js +1 -1
  636. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  637. package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
  638. package/dist/src/workflows/service/workflow-run-service.js +4 -5
  639. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  640. package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
  641. package/dist/src/workflows/store/event-store.js +1 -1
  642. package/dist/src/workflows/store/run-store.js +1 -1
  643. package/package.json +3 -2
  644. package/dist/gateway/static/root/assets/agent-browser-settings-page-D1SyFYeh.js +0 -6
  645. package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-C9YxgvuI.js +0 -1
  646. package/dist/gateway/static/root/assets/agents-CteVs3UO.js +0 -71
  647. package/dist/gateway/static/root/assets/apps-page-CVQ1M8Ax.js +0 -1
  648. package/dist/gateway/static/root/assets/channels-settings-Cd3JbeQ1.js +0 -1
  649. package/dist/gateway/static/root/assets/config-api-C4RAtTKW.js +0 -3
  650. package/dist/gateway/static/root/assets/connectors-page-MsMa5qBr.js +0 -2
  651. package/dist/gateway/static/root/assets/cron-api-sJNMqB6P.js +0 -1
  652. package/dist/gateway/static/root/assets/cron-page-D30CSwkn.js +0 -3
  653. package/dist/gateway/static/root/assets/dreaming-settings-6fCUWRQf.js +0 -1
  654. package/dist/gateway/static/root/assets/gateway-config-api-C6989a-W.js +0 -1
  655. package/dist/gateway/static/root/assets/gateway-settings-BpF26t91.js +0 -1
  656. package/dist/gateway/static/root/assets/goal-detail-page-DOjhmRyf.js +0 -1
  657. package/dist/gateway/static/root/assets/goals-page-Xl9_wrFc.js +0 -2
  658. package/dist/gateway/static/root/assets/heartbeat-settings-DN9vEj9P.js +0 -1
  659. package/dist/gateway/static/root/assets/index-C8ytlAF2.js +0 -122
  660. package/dist/gateway/static/root/assets/index-CVpJW2NS.css +0 -1
  661. package/dist/gateway/static/root/assets/messages-BqzIDrlr.js +0 -3
  662. package/dist/gateway/static/root/assets/models-hub-panel-BO4o-GmO.js +0 -2
  663. package/dist/gateway/static/root/assets/note-detail-page-DLV_XDmT.js +0 -2
  664. package/dist/gateway/static/root/assets/notes-page-ycsDlkFA.js +0 -1
  665. package/dist/gateway/static/root/assets/remote-access-hub-DQpnE8K9.js +0 -1
  666. package/dist/gateway/static/root/assets/sessions-page-BZui7iAY.js +0 -1
  667. package/dist/gateway/static/root/assets/settings-advanced-gate-DEfzZ1ax.js +0 -1
  668. package/dist/gateway/static/root/assets/settings-page-CLuSsu1-.js +0 -1
  669. package/dist/gateway/static/root/assets/setup-status-panel-Cq4qpXLi.js +0 -1
  670. package/dist/gateway/static/root/assets/shares-settings-B9F3HyYQ.js +0 -1
  671. package/dist/gateway/static/root/assets/skill-reload-api-Bp9UPPwm.js +0 -1
  672. package/dist/gateway/static/root/assets/skills-page-BIoBsfSV.js +0 -2
  673. package/dist/gateway/static/root/assets/use-agent-defaults-form-Cz2_pPzu.js +0 -1
  674. package/dist/gateway/static/root/assets/use-settings-tab-guard-nuHMmZQv.js +0 -1
  675. package/dist/gateway/static/root/assets/voice-api-key-field-BUIrKb8s.js +0 -1
  676. package/dist/gateway/static/root/assets/workflows-page-qE3SexnO.js +0 -18
  677. package/dist/src/agent/context/workspace-templates/USER.md +0 -24
@@ -1,26 +1,30 @@
1
1
  import { init_agent_scope, resolveAgentHomeDir, resolveAgentIdForWorkspacePath } from "../agent-scope.js";
2
+ import { resolveEffectiveAgentManifestForAgent } from "../../config/agent-profile.js";
3
+ import { init_paths, resolveUserMemoryPath } from "../../config/paths.js";
2
4
  import { join } from "node:path";
3
5
  //#region src/agent/memory/memory-config.ts
6
+ init_paths();
4
7
  init_agent_scope();
5
8
  /** When false, curated `memories/` (under agent home) + external memory providers are off. */
6
9
  function isMemorySubsystemEnabled(config) {
7
- return config?.agents?.defaults?.memory?.enabled !== false;
10
+ if (!config) return true;
11
+ return config.agents.list.some((agent) => agent.enabled !== false && agent.memory.mode !== "off");
8
12
  }
9
13
  /** Curated memory tool + agent-home `memories/` store (not injected into system prompt). */
10
14
  function isCuratedMemoryInPrompt(config) {
11
- const m = config?.agents?.defaults?.memory;
12
- if (m?.enabled === false) return false;
13
- if (m?.useEnhancedSystem === false) return false;
14
- return true;
15
+ if (!config) return true;
16
+ return config.agents.list.some((agent) => agent.enabled !== false && agent.memory.sources.includes("curated"));
15
17
  }
16
18
  function resolveBuiltinMemoryStoreConfig(workspaceDir, config) {
17
- const m = config?.agents?.defaults?.memory;
19
+ const agentId = config != null ? resolveAgentIdForWorkspacePath(config, workspaceDir) : void 0;
20
+ const manifest = config && agentId ? resolveEffectiveAgentManifestForAgent(config, agentId) : void 0;
18
21
  return {
19
22
  workspaceDir,
20
- memoriesDir: config != null ? join(resolveAgentHomeDir(config, resolveAgentIdForWorkspacePath(config, workspaceDir)), "memories") : join(workspaceDir, "memories"),
21
- memoryCharLimit: m?.memoryCharLimit ?? 2200,
22
- userCharLimit: m?.userCharLimit ?? 1375,
23
- userProfileEnabled: m?.userProfileEnabled !== false
23
+ memoriesDir: config != null ? join(resolveAgentHomeDir(config, agentId ?? "main"), "memories") : join(workspaceDir, "memories"),
24
+ userMemoryPath: config != null ? resolveUserMemoryPath() : join(workspaceDir, "user", "MEMORY.md"),
25
+ memoryCharLimit: manifest?.memory.retention?.maxItems ?? 2200,
26
+ userCharLimit: 1375,
27
+ userProfileEnabled: manifest?.memory.sources.includes("userProfile") ?? true
24
28
  };
25
29
  }
26
30
  /**
@@ -28,11 +32,7 @@ function resolveBuiltinMemoryStoreConfig(workspaceDir, config) {
28
32
  * `first-turn` only injects on turn 1. `contextCadence` N injects on turns 1, N+1, 2N+1, …
29
33
  */
30
34
  function shouldInjectMemoryPrefetchThisTurn(config, turnNumber) {
31
- const m = config?.agents?.defaults?.memory;
32
- if ((m?.injectionFrequency ?? "every-turn") === "first-turn") return turnNumber === 1;
33
- const cadence = m?.contextCadence ?? 1;
34
- if (cadence <= 1) return true;
35
- return (turnNumber - 1) % cadence === 0;
35
+ return turnNumber >= 1;
36
36
  }
37
37
  function shouldRegisterCuratedMemoryTool(config) {
38
38
  return isCuratedMemoryInPrompt(config);
@@ -1 +1 @@
1
- {"version":3,"file":"memory-config.js","names":[],"sources":["../../../../src/agent/memory/memory-config.ts"],"sourcesContent":["import { join } from 'node:path';\n\nimport type { Config } from '../../config/schema.js';\nimport { resolveAgentHomeDir, resolveAgentIdForWorkspacePath } from '../agent-scope.js';\n\nimport type { MemoryStoreConfig } from './types.js';\n\n/** When false, curated `memories/` (under agent home) + external memory providers are off. */\nexport function isMemorySubsystemEnabled(config: Config | undefined): boolean {\n return config?.agents?.defaults?.memory?.enabled !== false;\n}\n\n/** Curated memory tool + agent-home `memories/` store (not injected into system prompt). */\nexport function isCuratedMemoryInPrompt(config: Config | undefined): boolean {\n const m = config?.agents?.defaults?.memory;\n if (m?.enabled === false) {\n return false;\n }\n if (m?.useEnhancedSystem === false) {\n return false;\n }\n return true;\n}\n\nexport function resolveBuiltinMemoryStoreConfig(\n workspaceDir: string,\n config: Config | undefined,\n): MemoryStoreConfig {\n const m = config?.agents?.defaults?.memory;\n const memoriesDir =\n config != null\n ? join(\n resolveAgentHomeDir(config, resolveAgentIdForWorkspacePath(config, workspaceDir)),\n 'memories',\n )\n : join(workspaceDir, 'memories');\n return {\n workspaceDir,\n memoriesDir,\n memoryCharLimit: m?.memoryCharLimit ?? 2200,\n userCharLimit: m?.userCharLimit ?? 1375,\n userProfileEnabled: m?.userProfileEnabled !== false,\n };\n}\n\n/**\n * Whether to prefix the user message with prefetched external memory this turn.\n * `first-turn` only injects on turn 1. `contextCadence` N injects on turns 1, N+1, 2N+1, …\n */\nexport function shouldInjectMemoryPrefetchThisTurn(\n config: Config | undefined,\n turnNumber: number,\n): boolean {\n const m = config?.agents?.defaults?.memory;\n const freq = m?.injectionFrequency ?? 'every-turn';\n if (freq === 'first-turn') {\n return turnNumber === 1;\n }\n const cadence = m?.contextCadence ?? 1;\n if (cadence <= 1) {\n return true;\n }\n return (turnNumber - 1) % cadence === 0;\n}\n\nexport function shouldRegisterCuratedMemoryTool(config: Config | undefined): boolean {\n return isCuratedMemoryInPrompt(config);\n}\n"],"mappings":";;;kBAGwF;;AAKxF,SAAgB,yBAAyB,QAAqC;AAC5E,QAAO,QAAQ,QAAQ,UAAU,QAAQ,YAAY;;;AAIvD,SAAgB,wBAAwB,QAAqC;CAC3E,MAAM,IAAI,QAAQ,QAAQ,UAAU;AACpC,KAAI,GAAG,YAAY,MACjB,QAAO;AAET,KAAI,GAAG,sBAAsB,MAC3B,QAAO;AAET,QAAO;;AAGT,SAAgB,gCACd,cACA,QACmB;CACnB,MAAM,IAAI,QAAQ,QAAQ,UAAU;AAQpC,QAAO;EACL;EACA,aARA,UAAU,OACN,KACE,oBAAoB,QAAQ,+BAA+B,QAAQ,aAAa,CAAC,EACjF,WACD,GACD,KAAK,cAAc,WAAW;EAIlC,iBAAiB,GAAG,mBAAmB;EACvC,eAAe,GAAG,iBAAiB;EACnC,oBAAoB,GAAG,uBAAuB;EAC/C;;;;;;AAOH,SAAgB,mCACd,QACA,YACS;CACT,MAAM,IAAI,QAAQ,QAAQ,UAAU;AAEpC,MADa,GAAG,sBAAsB,kBACzB,aACX,QAAO,eAAe;CAExB,MAAM,UAAU,GAAG,kBAAkB;AACrC,KAAI,WAAW,EACb,QAAO;AAET,SAAQ,aAAa,KAAK,YAAY;;AAGxC,SAAgB,gCAAgC,QAAqC;AACnF,QAAO,wBAAwB,OAAO"}
1
+ {"version":3,"file":"memory-config.js","names":[],"sources":["../../../../src/agent/memory/memory-config.ts"],"sourcesContent":["import { join } from 'node:path';\n\nimport type { Config } from '../../config/schema.js';\nimport { resolveUserMemoryPath } from '../../config/paths.js';\nimport { resolveEffectiveAgentManifestForAgent } from '../../config/agent-profile.js';\nimport { resolveAgentHomeDir, resolveAgentIdForWorkspacePath } from '../agent-scope.js';\n\nimport type { MemoryStoreConfig } from './types.js';\n\n/** When false, curated `memories/` (under agent home) + external memory providers are off. */\nexport function isMemorySubsystemEnabled(config: Config | undefined): boolean {\n if (!config) return true;\n return config.agents.list.some((agent) => agent.enabled !== false && agent.memory.mode !== 'off');\n}\n\n/** Curated memory tool + agent-home `memories/` store (not injected into system prompt). */\nexport function isCuratedMemoryInPrompt(config: Config | undefined): boolean {\n if (!config) return true;\n return config.agents.list.some((agent) => agent.enabled !== false && agent.memory.sources.includes('curated'));\n}\n\nexport function resolveBuiltinMemoryStoreConfig(\n workspaceDir: string,\n config: Config | undefined,\n): MemoryStoreConfig {\n const agentId = config != null ? resolveAgentIdForWorkspacePath(config, workspaceDir) : undefined;\n const manifest = config && agentId ? resolveEffectiveAgentManifestForAgent(config, agentId) : undefined;\n const memoriesDir =\n config != null\n ? join(\n resolveAgentHomeDir(config, agentId ?? 'main'),\n 'memories',\n )\n : join(workspaceDir, 'memories');\n return {\n workspaceDir,\n memoriesDir,\n userMemoryPath: config != null ? resolveUserMemoryPath() : join(workspaceDir, 'user', 'MEMORY.md'),\n memoryCharLimit: manifest?.memory.retention?.maxItems ?? 2200,\n userCharLimit: 1375,\n userProfileEnabled: manifest?.memory.sources.includes('userProfile') ?? true,\n };\n}\n\n/**\n * Whether to prefix the user message with prefetched external memory this turn.\n * `first-turn` only injects on turn 1. `contextCadence` N injects on turns 1, N+1, 2N+1, …\n */\nexport function shouldInjectMemoryPrefetchThisTurn(\n config: Config | undefined,\n turnNumber: number,\n): boolean {\n return turnNumber >= 1;\n}\n\nexport function shouldRegisterCuratedMemoryTool(config: Config | undefined): boolean {\n return isCuratedMemoryInPrompt(config);\n}\n"],"mappings":";;;;;YAG8D;kBAE0B;;AAKxF,SAAgB,yBAAyB,QAAqC;AAC5E,KAAI,CAAC,OAAQ,QAAO;AACpB,QAAO,OAAO,OAAO,KAAK,MAAM,UAAU,MAAM,YAAY,SAAS,MAAM,OAAO,SAAS,MAAM;;;AAInG,SAAgB,wBAAwB,QAAqC;AAC3E,KAAI,CAAC,OAAQ,QAAO;AACpB,QAAO,OAAO,OAAO,KAAK,MAAM,UAAU,MAAM,YAAY,SAAS,MAAM,OAAO,QAAQ,SAAS,UAAU,CAAC;;AAGhH,SAAgB,gCACd,cACA,QACmB;CACnB,MAAM,UAAU,UAAU,OAAO,+BAA+B,QAAQ,aAAa,GAAG,KAAA;CACxF,MAAM,WAAW,UAAU,UAAU,sCAAsC,QAAQ,QAAQ,GAAG,KAAA;AAQ9F,QAAO;EACL;EACA,aARA,UAAU,OACN,KACE,oBAAoB,QAAQ,WAAW,OAAO,EAC9C,WACD,GACD,KAAK,cAAc,WAAW;EAIlC,gBAAgB,UAAU,OAAO,uBAAuB,GAAG,KAAK,cAAc,QAAQ,YAAY;EAClG,iBAAiB,UAAU,OAAO,WAAW,YAAY;EACzD,eAAe;EACf,oBAAoB,UAAU,OAAO,QAAQ,SAAS,cAAc,IAAI;EACzE;;;;;;AAOH,SAAgB,mCACd,QACA,YACS;AACT,QAAO,cAAc;;AAGvB,SAAgB,gCAAgC,QAAqC;AACnF,QAAO,wBAAwB,OAAO"}
@@ -1,8 +1,8 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { join } from "node:path";
3
4
  import { existsSync } from "node:fs";
4
5
  import { appendFile, mkdir, readFile, writeFile } from "node:fs/promises";
5
- import { join } from "node:path";
6
6
  //#region src/agent/memory/memory-flush.ts
7
7
  init_logger();
8
8
  const log = createLogger("MemoryFlush");
@@ -1,10 +1,24 @@
1
- /**
2
- * Discover optional `plugins/memory/<name>/` packages (extension point).
3
- * Compiled layout: `dist/src/plugins/memory/...` relative to this module.
4
- */
1
+ import type { Config } from '../../config/schema.js';
2
+ import type { DiscoveredExtension } from '../../extensions/types/loader.js';
3
+ import type { MemoryProvider } from './provider.js';
4
+ import type { MemoryProviderManifest } from './types.js';
5
5
  export interface MemoryPluginMetadata {
6
6
  name: string;
7
7
  description: string;
8
8
  available: boolean;
9
+ manifest?: MemoryProviderManifest;
9
10
  }
10
- export declare function discoverMemoryPlugins(): Promise<MemoryPluginMetadata[]>;
11
+ export interface MemoryPluginProviderContext {
12
+ config?: Config;
13
+ manifest?: MemoryProviderManifest;
14
+ extension?: {
15
+ id: string;
16
+ path: string;
17
+ source: DiscoveredExtension['source'];
18
+ config?: Record<string, unknown>;
19
+ };
20
+ }
21
+ export declare function discoverMemoryPlugins(config?: Config): Promise<MemoryPluginMetadata[]>;
22
+ export declare function loadMemoryPluginProviders(params?: {
23
+ config?: Config;
24
+ }): Promise<MemoryProvider[]>;
@@ -1,39 +1,105 @@
1
- import { readdir, stat } from "node:fs/promises";
2
- import { dirname, join } from "node:path";
3
- import { fileURLToPath } from "node:url";
1
+ import { discoverExtensionsFromDisk, init_discover_extensions } from "../../extensions/discover-extensions.js";
2
+ import { isAbsolute, join } from "node:path";
3
+ import { stat } from "node:fs/promises";
4
+ import { pathToFileURL } from "node:url";
4
5
  //#region src/agent/memory/plugin-discovery.ts
5
- async function discoverMemoryPlugins() {
6
- const pluginsDir = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "plugins", "memory");
7
- try {
8
- const entries = await readdir(pluginsDir);
9
- const plugins = [];
10
- for (const entry of entries) {
11
- const fullPath = join(pluginsDir, entry);
12
- if (!(await stat(fullPath)).isDirectory() || entry.startsWith("_") || entry.startsWith(".")) continue;
13
- const initPath = join(fullPath, "index.js");
14
- try {
15
- await stat(initPath);
16
- const mod = await import(initPath);
17
- const available = mod.isAvailable?.() ?? true;
18
- plugins.push({
19
- name: entry,
20
- description: mod.description ?? `${entry} memory plugin`,
21
- available
22
- });
23
- } catch {
24
- plugins.push({
25
- name: entry,
26
- description: `${entry} memory plugin`,
27
- available: false
28
- });
29
- }
6
+ init_discover_extensions();
7
+ async function discoverMemoryPlugins(config) {
8
+ const plugins = [];
9
+ for (const extension of discoverMemoryProviderExtensions(config)) for (const providerId of extension.manifest.contracts?.memoryProviders ?? []) plugins.push({
10
+ name: providerId,
11
+ description: extension.manifest.description ?? `${extension.manifest.name} memory provider`,
12
+ available: true,
13
+ manifest: {
14
+ type: "memory-provider",
15
+ id: providerId,
16
+ displayName: extension.manifest.name || providerId,
17
+ entry: extension.manifest.main,
18
+ capabilities: {}
30
19
  }
31
- return plugins.sort((a, b) => a.name.localeCompare(b.name));
20
+ });
21
+ return plugins.sort((a, b) => a.name.localeCompare(b.name));
22
+ }
23
+ async function loadMemoryPluginProviders(params = {}) {
24
+ const providers = [];
25
+ for (const extension of discoverMemoryProviderExtensions(params.config)) {
26
+ const module = await loadMemoryProviderModule(extension);
27
+ if (!module?.createMemoryProvider) continue;
28
+ if (module.isAvailable?.() === false) continue;
29
+ const fallbackId = (extension.manifest.contracts?.memoryProviders ?? [])[0] ?? extension.id;
30
+ const manifest = normalizeMemoryProviderManifest(fallbackId, module.manifest) ?? {
31
+ type: "memory-provider",
32
+ id: fallbackId,
33
+ displayName: extension.manifest.name || fallbackId,
34
+ entry: extension.manifest.main,
35
+ capabilities: {}
36
+ };
37
+ const provider = await module.createMemoryProvider({
38
+ config: params.config,
39
+ manifest,
40
+ extension: {
41
+ id: extension.id,
42
+ path: extension.path,
43
+ source: extension.source,
44
+ config: extensionConfig(params.config, extension.id)
45
+ }
46
+ });
47
+ providers.push(provider);
48
+ }
49
+ return providers;
50
+ }
51
+ function discoverMemoryProviderExtensions(config) {
52
+ if (areExtensionsDisabled(config)) return [];
53
+ const disabled = new Set(extensionIds(config?.extensions?.disabled));
54
+ const enabled = config?.extensions?.enabled;
55
+ const enabledSet = Array.isArray(enabled) ? new Set(extensionIds(enabled)) : null;
56
+ return discoverExtensionsFromDisk({}, config).filter((extension) => (extension.manifest.contracts?.memoryProviders?.length ?? 0) > 0).filter((extension) => !disabled.has(extension.id)).filter((extension) => extension.manifest.enabledByDefault === true || enabledSet?.has(extension.id));
57
+ }
58
+ async function loadMemoryProviderModule(extension) {
59
+ if (!extension.manifest.main) return null;
60
+ const resolved = await resolveModuleEntry(isAbsolute(extension.manifest.main) ? extension.manifest.main : join(extension.path, extension.manifest.main));
61
+ try {
62
+ const mod = await import(pathToFileURL(resolved).href);
63
+ return "default" in mod && mod.default ? mod.default : mod;
32
64
  } catch {
33
- return [];
65
+ return null;
34
66
  }
35
67
  }
68
+ async function resolveModuleEntry(entryPath) {
69
+ for (const candidate of entryCandidates(entryPath)) try {
70
+ await stat(candidate);
71
+ return candidate;
72
+ } catch {}
73
+ return entryPath;
74
+ }
75
+ function entryCandidates(entryPath) {
76
+ const candidates = [entryPath];
77
+ if (entryPath.endsWith(".js")) candidates.push(`${entryPath.slice(0, -3)}.ts`);
78
+ return candidates;
79
+ }
80
+ function extensionIds(value) {
81
+ return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
82
+ }
83
+ function areExtensionsDisabled(config) {
84
+ return config?.extensions?.enabled === false;
85
+ }
86
+ function extensionConfig(config, extensionId) {
87
+ const raw = config?.extensions?.[extensionId];
88
+ return raw && typeof raw === "object" && !Array.isArray(raw) ? raw : void 0;
89
+ }
90
+ function normalizeMemoryProviderManifest(fallbackId, manifest) {
91
+ if (!manifest || manifest.type !== "memory-provider") return void 0;
92
+ const id = typeof manifest.id === "string" && manifest.id.trim() ? manifest.id.trim() : fallbackId;
93
+ return {
94
+ type: "memory-provider",
95
+ id,
96
+ displayName: typeof manifest.displayName === "string" && manifest.displayName.trim() ? manifest.displayName.trim() : id,
97
+ ...manifest.entry ? { entry: manifest.entry } : {},
98
+ capabilities: manifest.capabilities ?? {},
99
+ ...manifest.configSchema ? { configSchema: manifest.configSchema } : {}
100
+ };
101
+ }
36
102
  //#endregion
37
- export { discoverMemoryPlugins };
103
+ export { discoverMemoryPlugins, loadMemoryPluginProviders };
38
104
 
39
105
  //# sourceMappingURL=plugin-discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-discovery.js","names":[],"sources":["../../../../src/agent/memory/plugin-discovery.ts"],"sourcesContent":["import { readdir, stat } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Discover optional `plugins/memory/<name>/` packages (extension point).\n * Compiled layout: `dist/src/plugins/memory/...` relative to this module.\n */\nexport interface MemoryPluginMetadata {\n name: string;\n description: string;\n available: boolean;\n}\n\nexport async function discoverMemoryPlugins(): Promise<MemoryPluginMetadata[]> {\n const here = dirname(fileURLToPath(import.meta.url));\n const pluginsDir = join(here, '..', '..', 'plugins', 'memory');\n\n try {\n const entries = await readdir(pluginsDir);\n const plugins: MemoryPluginMetadata[] = [];\n\n for (const entry of entries) {\n const fullPath = join(pluginsDir, entry);\n const stats = await stat(fullPath);\n if (!stats.isDirectory() || entry.startsWith('_') || entry.startsWith('.')) {\n continue;\n }\n\n const initPath = join(fullPath, 'index.js');\n try {\n await stat(initPath);\n const mod = (await import(initPath)) as {\n isAvailable?: () => boolean;\n description?: string;\n };\n const available = mod.isAvailable?.() ?? true;\n plugins.push({\n name: entry,\n description: mod.description ?? `${entry} memory plugin`,\n available,\n });\n } catch {\n plugins.push({\n name: entry,\n description: `${entry} memory plugin`,\n available: false,\n });\n }\n }\n\n return plugins.sort((a, b) => a.name.localeCompare(b.name));\n } catch {\n return [];\n }\n}\n"],"mappings":";;;;AAcA,eAAsB,wBAAyD;CAE7E,MAAM,aAAa,KADN,QAAQ,cAAc,OAAO,KAAK,IAAI,CACvB,EAAE,MAAM,MAAM,WAAW,SAAS;AAE9D,KAAI;EACF,MAAM,UAAU,MAAM,QAAQ,WAAW;EACzC,MAAM,UAAkC,EAAE;AAE1C,OAAK,MAAM,SAAS,SAAS;GAC3B,MAAM,WAAW,KAAK,YAAY,MAAM;AAExC,OAAI,EAAC,MADe,KAAK,SAAS,EACvB,aAAa,IAAI,MAAM,WAAW,IAAI,IAAI,MAAM,WAAW,IAAI,CACxE;GAGF,MAAM,WAAW,KAAK,UAAU,WAAW;AAC3C,OAAI;AACF,UAAM,KAAK,SAAS;IACpB,MAAM,MAAO,MAAM,OAAO;IAI1B,MAAM,YAAY,IAAI,eAAe,IAAI;AACzC,YAAQ,KAAK;KACX,MAAM;KACN,aAAa,IAAI,eAAe,GAAG,MAAM;KACzC;KACD,CAAC;WACI;AACN,YAAQ,KAAK;KACX,MAAM;KACN,aAAa,GAAG,MAAM;KACtB,WAAW;KACZ,CAAC;;;AAIN,SAAO,QAAQ,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,KAAK,CAAC;SACrD;AACN,SAAO,EAAE"}
1
+ {"version":3,"file":"plugin-discovery.js","names":[],"sources":["../../../../src/agent/memory/plugin-discovery.ts"],"sourcesContent":["import { stat } from 'node:fs/promises';\nimport { isAbsolute, join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport type { Config } from '../../config/schema.js';\nimport { discoverExtensionsFromDisk } from '../../extensions/discover-extensions.js';\nimport type { DiscoveredExtension } from '../../extensions/types/loader.js';\nimport type { MemoryProvider } from './provider.js';\nimport type { MemoryProviderManifest } from './types.js';\n\nexport interface MemoryPluginMetadata {\n name: string;\n description: string;\n available: boolean;\n manifest?: MemoryProviderManifest;\n}\n\nexport interface MemoryPluginProviderContext {\n config?: Config;\n manifest?: MemoryProviderManifest;\n extension?: {\n id: string;\n path: string;\n source: DiscoveredExtension['source'];\n config?: Record<string, unknown>;\n };\n}\n\ntype MemoryPluginModule = {\n isAvailable?: () => boolean;\n description?: string;\n manifest?: MemoryProviderManifest;\n createMemoryProvider?: (\n context: MemoryPluginProviderContext,\n ) => MemoryProvider | Promise<MemoryProvider>;\n};\n\nexport async function discoverMemoryPlugins(config?: Config): Promise<MemoryPluginMetadata[]> {\n const plugins: MemoryPluginMetadata[] = [];\n for (const extension of discoverMemoryProviderExtensions(config)) {\n for (const providerId of extension.manifest.contracts?.memoryProviders ?? []) {\n plugins.push({\n name: providerId,\n description: extension.manifest.description ?? `${extension.manifest.name} memory provider`,\n available: true,\n manifest: {\n type: 'memory-provider',\n id: providerId,\n displayName: extension.manifest.name || providerId,\n entry: extension.manifest.main,\n capabilities: {},\n },\n });\n }\n }\n return plugins.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport async function loadMemoryPluginProviders(params: {\n config?: Config;\n} = {}): Promise<MemoryProvider[]> {\n const providers: MemoryProvider[] = [];\n for (const extension of discoverMemoryProviderExtensions(params.config)) {\n const module = await loadMemoryProviderModule(extension);\n if (!module?.createMemoryProvider) continue;\n if (module.isAvailable?.() === false) continue;\n\n const declaredProviderIds = extension.manifest.contracts?.memoryProviders ?? [];\n const fallbackId = declaredProviderIds[0] ?? extension.id;\n const manifest = normalizeMemoryProviderManifest(fallbackId, module.manifest) ?? {\n type: 'memory-provider',\n id: fallbackId,\n displayName: extension.manifest.name || fallbackId,\n entry: extension.manifest.main,\n capabilities: {},\n };\n\n const provider = await module.createMemoryProvider({\n config: params.config,\n manifest,\n extension: {\n id: extension.id,\n path: extension.path,\n source: extension.source,\n config: extensionConfig(params.config, extension.id),\n },\n });\n providers.push(provider);\n }\n return providers;\n}\n\nfunction discoverMemoryProviderExtensions(config?: Config): DiscoveredExtension[] {\n if (areExtensionsDisabled(config)) return [];\n const disabled = new Set(extensionIds(config?.extensions?.disabled));\n const enabled = config?.extensions?.enabled;\n const enabledSet = Array.isArray(enabled) ? new Set(extensionIds(enabled)) : null;\n return discoverExtensionsFromDisk({}, config as unknown as Record<string, unknown> | undefined)\n .filter((extension) => (extension.manifest.contracts?.memoryProviders?.length ?? 0) > 0)\n .filter((extension) => !disabled.has(extension.id))\n .filter((extension) => extension.manifest.enabledByDefault === true || enabledSet?.has(extension.id));\n}\n\nasync function loadMemoryProviderModule(extension: DiscoveredExtension): Promise<MemoryPluginModule | null> {\n if (!extension.manifest.main) return null;\n const entryPath = isAbsolute(extension.manifest.main)\n ? extension.manifest.main\n : join(extension.path, extension.manifest.main);\n const resolved = await resolveModuleEntry(entryPath);\n try {\n const mod = (await import(pathToFileURL(resolved).href)) as MemoryPluginModule | { default?: MemoryPluginModule };\n return 'default' in mod && mod.default ? mod.default : (mod as MemoryPluginModule);\n } catch {\n return null;\n }\n}\n\nasync function resolveModuleEntry(entryPath: string): Promise<string> {\n for (const candidate of entryCandidates(entryPath)) {\n try {\n await stat(candidate);\n return candidate;\n } catch {\n // Try the next candidate; source tests use .ts, builds use .js.\n }\n }\n return entryPath;\n}\n\nfunction entryCandidates(entryPath: string): string[] {\n const candidates = [entryPath];\n if (entryPath.endsWith('.js')) {\n candidates.push(`${entryPath.slice(0, -3)}.ts`);\n }\n return candidates;\n}\n\nfunction extensionIds(value: unknown): string[] {\n return Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : [];\n}\n\nfunction areExtensionsDisabled(config?: Config): boolean {\n return config?.extensions?.enabled === false;\n}\n\nfunction extensionConfig(config: Config | undefined, extensionId: string): Record<string, unknown> | undefined {\n const raw = config?.extensions?.[extensionId as keyof Config['extensions']];\n return raw && typeof raw === 'object' && !Array.isArray(raw) ? (raw as Record<string, unknown>) : undefined;\n}\n\nfunction normalizeMemoryProviderManifest(\n fallbackId: string,\n manifest: MemoryProviderManifest | undefined,\n): MemoryProviderManifest | undefined {\n if (!manifest || manifest.type !== 'memory-provider') return undefined;\n const id = typeof manifest.id === 'string' && manifest.id.trim() ? manifest.id.trim() : fallbackId;\n const displayName =\n typeof manifest.displayName === 'string' && manifest.displayName.trim()\n ? manifest.displayName.trim()\n : id;\n return {\n type: 'memory-provider',\n id,\n displayName,\n ...(manifest.entry ? { entry: manifest.entry } : {}),\n capabilities: manifest.capabilities ?? {},\n ...(manifest.configSchema ? { configSchema: manifest.configSchema } : {}),\n };\n}\n"],"mappings":";;;;;0BAKqF;AAgCrF,eAAsB,sBAAsB,QAAkD;CAC5F,MAAM,UAAkC,EAAE;AAC1C,MAAK,MAAM,aAAa,iCAAiC,OAAO,CAC9D,MAAK,MAAM,cAAc,UAAU,SAAS,WAAW,mBAAmB,EAAE,CAC1E,SAAQ,KAAK;EACX,MAAM;EACN,aAAa,UAAU,SAAS,eAAe,GAAG,UAAU,SAAS,KAAK;EAC1E,WAAW;EACX,UAAU;GACR,MAAM;GACN,IAAI;GACJ,aAAa,UAAU,SAAS,QAAQ;GACxC,OAAO,UAAU,SAAS;GAC1B,cAAc,EAAE;GACjB;EACF,CAAC;AAGN,QAAO,QAAQ,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,KAAK,CAAC;;AAG7D,eAAsB,0BAA0B,SAE5C,EAAE,EAA6B;CACjC,MAAM,YAA8B,EAAE;AACtC,MAAK,MAAM,aAAa,iCAAiC,OAAO,OAAO,EAAE;EACvE,MAAM,SAAS,MAAM,yBAAyB,UAAU;AACxD,MAAI,CAAC,QAAQ,qBAAsB;AACnC,MAAI,OAAO,eAAe,KAAK,MAAO;EAGtC,MAAM,cADsB,UAAU,SAAS,WAAW,mBAAmB,EAAE,EACxC,MAAM,UAAU;EACvD,MAAM,WAAW,gCAAgC,YAAY,OAAO,SAAS,IAAI;GAC/E,MAAM;GACN,IAAI;GACJ,aAAa,UAAU,SAAS,QAAQ;GACxC,OAAO,UAAU,SAAS;GAC1B,cAAc,EAAE;GACjB;EAED,MAAM,WAAW,MAAM,OAAO,qBAAqB;GACjD,QAAQ,OAAO;GACf;GACA,WAAW;IACT,IAAI,UAAU;IACd,MAAM,UAAU;IAChB,QAAQ,UAAU;IAClB,QAAQ,gBAAgB,OAAO,QAAQ,UAAU,GAAG;IACrD;GACF,CAAC;AACF,YAAU,KAAK,SAAS;;AAE1B,QAAO;;AAGT,SAAS,iCAAiC,QAAwC;AAChF,KAAI,sBAAsB,OAAO,CAAE,QAAO,EAAE;CAC5C,MAAM,WAAW,IAAI,IAAI,aAAa,QAAQ,YAAY,SAAS,CAAC;CACpE,MAAM,UAAU,QAAQ,YAAY;CACpC,MAAM,aAAa,MAAM,QAAQ,QAAQ,GAAG,IAAI,IAAI,aAAa,QAAQ,CAAC,GAAG;AAC7E,QAAO,2BAA2B,EAAE,EAAE,OAAyD,CAC5F,QAAQ,eAAe,UAAU,SAAS,WAAW,iBAAiB,UAAU,KAAK,EAAE,CACvF,QAAQ,cAAc,CAAC,SAAS,IAAI,UAAU,GAAG,CAAC,CAClD,QAAQ,cAAc,UAAU,SAAS,qBAAqB,QAAQ,YAAY,IAAI,UAAU,GAAG,CAAC;;AAGzG,eAAe,yBAAyB,WAAoE;AAC1G,KAAI,CAAC,UAAU,SAAS,KAAM,QAAO;CAIrC,MAAM,WAAW,MAAM,mBAHL,WAAW,UAAU,SAAS,KAAK,GACjD,UAAU,SAAS,OACnB,KAAK,UAAU,MAAM,UAAU,SAAS,KAAK,CACG;AACpD,KAAI;EACF,MAAM,MAAO,MAAM,OAAO,cAAc,SAAS,CAAC;AAClD,SAAO,aAAa,OAAO,IAAI,UAAU,IAAI,UAAW;SAClD;AACN,SAAO;;;AAIX,eAAe,mBAAmB,WAAoC;AACpE,MAAK,MAAM,aAAa,gBAAgB,UAAU,CAChD,KAAI;AACF,QAAM,KAAK,UAAU;AACrB,SAAO;SACD;AAIV,QAAO;;AAGT,SAAS,gBAAgB,WAA6B;CACpD,MAAM,aAAa,CAAC,UAAU;AAC9B,KAAI,UAAU,SAAS,MAAM,CAC3B,YAAW,KAAK,GAAG,UAAU,MAAM,GAAG,GAAG,CAAC,KAAK;AAEjD,QAAO;;AAGT,SAAS,aAAa,OAA0B;AAC9C,QAAO,MAAM,QAAQ,MAAM,GAAG,MAAM,QAAQ,SAAyB,OAAO,SAAS,SAAS,GAAG,EAAE;;AAGrG,SAAS,sBAAsB,QAA0B;AACvD,QAAO,QAAQ,YAAY,YAAY;;AAGzC,SAAS,gBAAgB,QAA4B,aAA0D;CAC7G,MAAM,MAAM,QAAQ,aAAa;AACjC,QAAO,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAI,MAAkC,KAAA;;AAGpG,SAAS,gCACP,YACA,UACoC;AACpC,KAAI,CAAC,YAAY,SAAS,SAAS,kBAAmB,QAAO,KAAA;CAC7D,MAAM,KAAK,OAAO,SAAS,OAAO,YAAY,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG;AAKxF,QAAO;EACL,MAAM;EACN;EACA,aANA,OAAO,SAAS,gBAAgB,YAAY,SAAS,YAAY,MAAM,GACnE,SAAS,YAAY,MAAM,GAC3B;EAKJ,GAAI,SAAS,QAAQ,EAAE,OAAO,SAAS,OAAO,GAAG,EAAE;EACnD,cAAc,SAAS,gBAAgB,EAAE;EACzC,GAAI,SAAS,eAAe,EAAE,cAAc,SAAS,cAAc,GAAG,EAAE;EACzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"prefetch-coordinator.js","names":[],"sources":["../../../../src/agent/memory/prefetch-coordinator.ts"],"sourcesContent":["/**\n * MemoryPrefetchCoordinator — owns the per-session memory prefetch cadence and\n * the post-turn sync hand-off to external memory providers.\n *\n * Previously these lived as two methods + a private `Map<sessionKey, turn>` on\n * `AgentManager`. Moving them out makes the memory layer a stand-alone concern\n * with a single owner that handles both \"what to prefix on the user turn\" and\n * \"what to sync after the turn ends\".\n */\n\nimport type { AgentMessage } from '@earendil-works/pi-agent-core';\n\nimport type { Config } from '../../config/schema.js';\nimport type { MemoryManager } from './manager.js';\nimport { extractAgentUserPlainText } from './user-message-text.js';\nimport { injectPrefetchIntoUserMessage } from './inject-prefetch.js';\nimport {\n isMemorySubsystemEnabled,\n shouldInjectMemoryPrefetchThisTurn,\n} from './memory-config.js';\n\nexport interface MemoryPrefetchCoordinatorOptions {\n /** Effective config snapshot accessor; tested against `isMemorySubsystemEnabled`. */\n getConfig: () => Config | undefined;\n /** Resolve the per-session memory manager (workspace runtime lookup lives in AgentManager). */\n getMemoryManagerForSession: (sessionKey: string) => MemoryManager;\n /** Return the last assistant text for a session — fed into external `syncAll`. */\n getLastAssistantContent: (sessionKey: string) => string | null;\n}\n\nexport class MemoryPrefetchCoordinator {\n private readonly opts: MemoryPrefetchCoordinatorOptions;\n /** Per-session user-message index, incremented before each `applyPrefetch` call. */\n private readonly prefetchUserTurn = new Map<string, number>();\n\n constructor(opts: MemoryPrefetchCoordinatorOptions) {\n this.opts = opts;\n }\n\n /** Forget a session entirely (called when AgentManager removes the agent). */\n forgetSession(sessionKey: string): void {\n this.prefetchUserTurn.delete(sessionKey);\n }\n\n /** Tear down all per-session state (process stop / hot reload). */\n clear(): void {\n this.prefetchUserTurn.clear();\n }\n\n /**\n * Prepend the prefetched memory fence to the user turn when the cadence\n * config says we should. Returns the original message untouched otherwise.\n */\n async applyToUserMessage(\n userMessage: AgentMessage,\n sessionKey: string,\n ): Promise<AgentMessage> {\n const cfg = this.opts.getConfig();\n if (!isMemorySubsystemEnabled(cfg)) {\n return userMessage;\n }\n const plain = extractAgentUserPlainText(userMessage);\n const turn = (this.prefetchUserTurn.get(sessionKey) ?? 0) + 1;\n this.prefetchUserTurn.set(sessionKey, turn);\n if (!shouldInjectMemoryPrefetchThisTurn(cfg, turn)) {\n return userMessage;\n }\n return injectPrefetchIntoUserMessage(\n this.opts.getMemoryManagerForSession(sessionKey),\n sessionKey,\n userMessage,\n plain,\n );\n }\n\n /** Post-turn: push the latest exchange to external providers + warm next prefetch. */\n afterTurn(sessionKey: string, userPlainText: string): void {\n const cfg = this.opts.getConfig();\n if (!isMemorySubsystemEnabled(cfg)) {\n return;\n }\n const assistant = this.opts.getLastAssistantContent(sessionKey) ?? '';\n const mm = this.opts.getMemoryManagerForSession(sessionKey);\n mm.syncAll(userPlainText, assistant, { sessionId: sessionKey });\n mm.queuePrefetchAll(userPlainText, { sessionId: sessionKey });\n }\n}\n"],"mappings":";;;;AA8BA,IAAa,4BAAb,MAAuC;CACrC;;CAEA,mCAAoC,IAAI,KAAqB;CAE7D,YAAY,MAAwC;AAClD,OAAK,OAAO;;;CAId,cAAc,YAA0B;AACtC,OAAK,iBAAiB,OAAO,WAAW;;;CAI1C,QAAc;AACZ,OAAK,iBAAiB,OAAO;;;;;;CAO/B,MAAM,mBACJ,aACA,YACuB;EACvB,MAAM,MAAM,KAAK,KAAK,WAAW;AACjC,MAAI,CAAC,yBAAyB,IAAI,CAChC,QAAO;EAET,MAAM,QAAQ,0BAA0B,YAAY;EACpD,MAAM,QAAQ,KAAK,iBAAiB,IAAI,WAAW,IAAI,KAAK;AAC5D,OAAK,iBAAiB,IAAI,YAAY,KAAK;AAC3C,MAAI,CAAC,mCAAmC,KAAK,KAAK,CAChD,QAAO;AAET,SAAO,8BACL,KAAK,KAAK,2BAA2B,WAAW,EAChD,YACA,aACA,MACD;;;CAIH,UAAU,YAAoB,eAA6B;AAEzD,MAAI,CAAC,yBADO,KAAK,KAAK,WACW,CAAC,CAChC;EAEF,MAAM,YAAY,KAAK,KAAK,wBAAwB,WAAW,IAAI;EACnE,MAAM,KAAK,KAAK,KAAK,2BAA2B,WAAW;AAC3D,KAAG,QAAQ,eAAe,WAAW,EAAE,WAAW,YAAY,CAAC;AAC/D,KAAG,iBAAiB,eAAe,EAAE,WAAW,YAAY,CAAC"}
1
+ {"version":3,"file":"prefetch-coordinator.js","names":[],"sources":["../../../../src/agent/memory/prefetch-coordinator.ts"],"sourcesContent":["/**\n * MemoryPrefetchCoordinator — owns the per-session memory prefetch cadence and\n * the post-turn sync hand-off to external memory providers.\n *\n * Previously these lived as two methods + a private `Map<sessionKey, turn>` on\n * `AgentManager`. Moving them out makes the memory layer a stand-alone concern\n * with a single owner that handles both \"what to prefix on the user turn\" and\n * \"what to sync after the turn ends\".\n */\n\nimport type { AgentMessage } from '@earendil-works/pi-agent-core';\n\nimport type { Config } from '../../config/schema.js';\nimport type { MemoryManager } from './manager.js';\nimport { extractAgentUserPlainText } from './user-message-text.js';\nimport { injectPrefetchIntoUserMessage } from './inject-prefetch.js';\nimport {\n isMemorySubsystemEnabled,\n shouldInjectMemoryPrefetchThisTurn,\n} from './memory-config.js';\n\nexport interface MemoryPrefetchCoordinatorOptions {\n /** Effective config snapshot accessor; tested against `isMemorySubsystemEnabled`. */\n getConfig: () => Config | undefined;\n /** Resolve the per-session memory manager (workspace runtime lookup lives in AgentManager). */\n getMemoryManagerForSession: (sessionKey: string) => MemoryManager;\n /** Return the last assistant text for a session — fed into external `syncAll`. */\n getLastAssistantContent: (sessionKey: string) => string | null;\n}\n\nexport class MemoryPrefetchCoordinator {\n private readonly opts: MemoryPrefetchCoordinatorOptions;\n /** Per-session user-message index, incremented before each `applyPrefetch` call. */\n private readonly prefetchUserTurn = new Map<string, number>();\n\n constructor(opts: MemoryPrefetchCoordinatorOptions) {\n this.opts = opts;\n }\n\n /** Forget a session entirely (called when AgentManager removes the agent). */\n forgetSession(sessionKey: string): void {\n this.prefetchUserTurn.delete(sessionKey);\n }\n\n /** Tear down all per-session state (process stop / hot reload). */\n clear(): void {\n this.prefetchUserTurn.clear();\n }\n\n /**\n * Prepend the prefetched memory fence to the user turn when the cadence\n * config says we should. Returns the original message untouched otherwise.\n */\n async applyToUserMessage(\n userMessage: AgentMessage,\n sessionKey: string,\n ): Promise<AgentMessage> {\n const cfg = this.opts.getConfig();\n if (!isMemorySubsystemEnabled(cfg)) {\n return userMessage;\n }\n const plain = extractAgentUserPlainText(userMessage);\n const turn = (this.prefetchUserTurn.get(sessionKey) ?? 0) + 1;\n this.prefetchUserTurn.set(sessionKey, turn);\n if (!shouldInjectMemoryPrefetchThisTurn(cfg, turn)) {\n return userMessage;\n }\n return injectPrefetchIntoUserMessage(\n this.opts.getMemoryManagerForSession(sessionKey),\n sessionKey,\n userMessage,\n plain,\n );\n }\n\n /** Post-turn: push the latest exchange to external providers + warm next prefetch. */\n afterTurn(sessionKey: string, userPlainText: string): void {\n const cfg = this.opts.getConfig();\n if (!isMemorySubsystemEnabled(cfg)) {\n return;\n }\n const assistant = this.opts.getLastAssistantContent(sessionKey) ?? '';\n const mm = this.opts.getMemoryManagerForSession(sessionKey);\n void mm.syncAll(userPlainText, assistant, { sessionId: sessionKey });\n mm.queuePrefetchAll(userPlainText, { sessionId: sessionKey });\n }\n}\n"],"mappings":";;;;AA8BA,IAAa,4BAAb,MAAuC;CACrC;;CAEA,mCAAoC,IAAI,KAAqB;CAE7D,YAAY,MAAwC;AAClD,OAAK,OAAO;;;CAId,cAAc,YAA0B;AACtC,OAAK,iBAAiB,OAAO,WAAW;;;CAI1C,QAAc;AACZ,OAAK,iBAAiB,OAAO;;;;;;CAO/B,MAAM,mBACJ,aACA,YACuB;EACvB,MAAM,MAAM,KAAK,KAAK,WAAW;AACjC,MAAI,CAAC,yBAAyB,IAAI,CAChC,QAAO;EAET,MAAM,QAAQ,0BAA0B,YAAY;EACpD,MAAM,QAAQ,KAAK,iBAAiB,IAAI,WAAW,IAAI,KAAK;AAC5D,OAAK,iBAAiB,IAAI,YAAY,KAAK;AAC3C,MAAI,CAAC,mCAAmC,KAAK,KAAK,CAChD,QAAO;AAET,SAAO,8BACL,KAAK,KAAK,2BAA2B,WAAW,EAChD,YACA,aACA,MACD;;;CAIH,UAAU,YAAoB,eAA6B;AAEzD,MAAI,CAAC,yBADO,KAAK,KAAK,WACW,CAAC,CAChC;EAEF,MAAM,YAAY,KAAK,KAAK,wBAAwB,WAAW,IAAI;EACnE,MAAM,KAAK,KAAK,KAAK,2BAA2B,WAAW;AACtD,KAAG,QAAQ,eAAe,WAAW,EAAE,WAAW,YAAY,CAAC;AACpE,KAAG,iBAAiB,eAAe,EAAE,WAAW,YAAY,CAAC"}
@@ -1,35 +1,40 @@
1
- /**
2
- * Pluggable memory provider. Builtin curated files use `BuiltinMemoryStore` + `curated_memory`;
3
- * external providers add instructions, prefetch/sync, and optional tools.
4
- */
5
1
  import type { AgentTool } from '@earendil-works/pi-agent-core';
2
+ import type { MemoryCapabilities, MemoryDeleteRequest, MemoryListRequest, MemoryProviderManifest, MemoryReadRequest, MemoryReadResult, MemorySearchRequest, MemorySearchResult, MemorySyncEvent, MemoryUpdateRequest, MemoryWriteRequest, MemoryWriteResult, MemoryRecord } from './types.js';
6
3
  export interface MemoryProviderInitOptions {
7
4
  workspace?: string;
8
5
  agentWorkspace?: string;
9
6
  sessionId?: string;
7
+ config?: Record<string, unknown>;
10
8
  [key: string]: unknown;
11
9
  }
12
10
  export interface MemoryProvider {
13
- readonly name: string;
11
+ readonly id: string;
12
+ readonly displayName?: string;
13
+ readonly manifest?: MemoryProviderManifest;
14
+ readonly capabilities: MemoryCapabilities;
14
15
  isAvailable(): boolean;
15
16
  initialize(sessionId: string, options?: MemoryProviderInitOptions): Promise<void> | void;
16
- /** Static text merged into system prompt (external providers only; builtin uses curated snapshot separately). */
17
- systemPromptBlock(): string;
18
- prefetch(query: string, options?: {
17
+ /** Static text merged into the system prompt. */
18
+ systemPromptBlock?(): string;
19
+ prefetch?(query: string, options?: {
19
20
  sessionId?: string;
20
21
  }): Promise<string>;
21
- queuePrefetch(query: string, options?: {
22
+ queuePrefetch?(query: string, options?: {
22
23
  sessionId?: string;
23
24
  }): void;
24
- syncTurn(userContent: string, assistantContent: string, options?: {
25
- sessionId?: string;
26
- }): void;
27
- getToolSchemas(): AgentTool[];
25
+ sync?(event: MemorySyncEvent): Promise<void> | void;
26
+ search?(request: MemorySearchRequest): Promise<MemorySearchResult[]>;
27
+ read?(request: MemoryReadRequest): Promise<MemoryReadResult | null>;
28
+ get?(id: string): Promise<MemoryRecord | null>;
29
+ list?(request: MemoryListRequest): Promise<MemoryRecord[]>;
30
+ write?(request: MemoryWriteRequest): Promise<MemoryWriteResult>;
31
+ update?(request: MemoryUpdateRequest): Promise<MemoryWriteResult>;
32
+ delete?(request: MemoryDeleteRequest): Promise<MemoryWriteResult>;
33
+ getToolSchemas?(): AgentTool[];
28
34
  /** JSON string result for tool calls routed by name (when not using inline AgentTool.execute only). */
29
- handleToolCall(toolName: string, args: Record<string, unknown>): Promise<string>;
35
+ handleToolCall?(toolName: string, args: Record<string, unknown>): Promise<string>;
30
36
  shutdown(): Promise<void> | void;
31
37
  onTurnStart?(turnNumber: number, message: string, metadata?: Record<string, unknown>): void;
32
38
  onSessionEnd?(messages: unknown[]): void;
33
39
  onPreCompress?(messages: unknown[]): string;
34
- onMemoryWrite?(action: 'add' | 'replace' | 'remove', target: 'memory' | 'user', content: string): void;
35
40
  }
@@ -3,14 +3,29 @@ import type { MemoryProvider, MemoryProviderInitOptions } from './provider.js';
3
3
  * Placeholder external provider — enables wiring tests without cloud deps.
4
4
  */
5
5
  export declare class StubMemoryProvider implements MemoryProvider {
6
- readonly name = "stub";
6
+ readonly id = "stub";
7
+ readonly displayName = "Stub Memory Provider";
8
+ readonly capabilities: {
9
+ search: boolean;
10
+ read: boolean;
11
+ write: boolean;
12
+ update: boolean;
13
+ delete: boolean;
14
+ keywordSearch: boolean;
15
+ semanticSearch: boolean;
16
+ hybridSearch: boolean;
17
+ citations: boolean;
18
+ sync: boolean;
19
+ local: boolean;
20
+ };
7
21
  isAvailable(): boolean;
8
22
  initialize(_sessionId: string, _options?: MemoryProviderInitOptions): Promise<void>;
9
23
  systemPromptBlock(): string;
10
24
  prefetch(query: string): Promise<string>;
11
25
  queuePrefetch(): void;
12
- syncTurn(_user: string, _assistant: string): void;
26
+ sync(): void;
13
27
  getToolSchemas(): any[];
14
28
  handleToolCall(toolName: string): Promise<string>;
29
+ search(): Promise<[]>;
15
30
  shutdown(): Promise<void>;
16
31
  }
@@ -3,13 +3,27 @@
3
3
  * Placeholder external provider — enables wiring tests without cloud deps.
4
4
  */
5
5
  var StubMemoryProvider = class {
6
- name = "stub";
6
+ id = "stub";
7
+ displayName = "Stub Memory Provider";
8
+ capabilities = {
9
+ search: true,
10
+ read: false,
11
+ write: false,
12
+ update: false,
13
+ delete: false,
14
+ keywordSearch: false,
15
+ semanticSearch: false,
16
+ hybridSearch: false,
17
+ citations: false,
18
+ sync: true,
19
+ local: false
20
+ };
7
21
  isAvailable() {
8
22
  return true;
9
23
  }
10
24
  async initialize(_sessionId, _options) {}
11
25
  systemPromptBlock() {
12
- return "External memory provider: stub (wiring only; no cloud backend). Set `agents.defaults.memory.provider` to `none` to hide.";
26
+ return "External memory provider: stub (wiring only; no cloud backend).";
13
27
  }
14
28
  async prefetch(query) {
15
29
  const q = query.trim();
@@ -17,13 +31,16 @@ var StubMemoryProvider = class {
17
31
  return `[stub prefetch] query length=${q.length}`;
18
32
  }
19
33
  queuePrefetch() {}
20
- syncTurn(_user, _assistant) {}
34
+ sync() {}
21
35
  getToolSchemas() {
22
36
  return [];
23
37
  }
24
38
  async handleToolCall(toolName) {
25
39
  return JSON.stringify({ error: `stub provider has no tools (${toolName})` });
26
40
  }
41
+ async search() {
42
+ return [];
43
+ }
27
44
  async shutdown() {}
28
45
  };
29
46
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"stub-memory-provider.js","names":[],"sources":["../../../../src/agent/memory/stub-memory-provider.ts"],"sourcesContent":["import type { MemoryProvider, MemoryProviderInitOptions } from './provider.js';\n\n/**\n * Placeholder external provider — enables wiring tests without cloud deps.\n */\nexport class StubMemoryProvider implements MemoryProvider {\n readonly name = 'stub';\n\n isAvailable(): boolean {\n return true;\n }\n\n async initialize(_sessionId: string, _options?: MemoryProviderInitOptions): Promise<void> {}\n\n systemPromptBlock(): string {\n return 'External memory provider: stub (wiring only; no cloud backend). Set `agents.defaults.memory.provider` to `none` to hide.';\n }\n\n async prefetch(query: string): Promise<string> {\n const q = query.trim();\n if (!q) {\n return '';\n }\n return `[stub prefetch] query length=${q.length}`;\n }\n\n queuePrefetch(): void {}\n\n syncTurn(_user: string, _assistant: string): void {}\n\n getToolSchemas() {\n return [];\n }\n\n async handleToolCall(toolName: string): Promise<string> {\n return JSON.stringify({ error: `stub provider has no tools (${toolName})` });\n }\n\n async shutdown(): Promise<void> {}\n}\n"],"mappings":";;;;AAKA,IAAa,qBAAb,MAA0D;CACxD,OAAgB;CAEhB,cAAuB;AACrB,SAAO;;CAGT,MAAM,WAAW,YAAoB,UAAqD;CAE1F,oBAA4B;AAC1B,SAAO;;CAGT,MAAM,SAAS,OAAgC;EAC7C,MAAM,IAAI,MAAM,MAAM;AACtB,MAAI,CAAC,EACH,QAAO;AAET,SAAO,gCAAgC,EAAE;;CAG3C,gBAAsB;CAEtB,SAAS,OAAe,YAA0B;CAElD,iBAAiB;AACf,SAAO,EAAE;;CAGX,MAAM,eAAe,UAAmC;AACtD,SAAO,KAAK,UAAU,EAAE,OAAO,+BAA+B,SAAS,IAAI,CAAC;;CAG9E,MAAM,WAA0B"}
1
+ {"version":3,"file":"stub-memory-provider.js","names":[],"sources":["../../../../src/agent/memory/stub-memory-provider.ts"],"sourcesContent":["import type { MemoryProvider, MemoryProviderInitOptions } from './provider.js';\n\n/**\n * Placeholder external provider — enables wiring tests without cloud deps.\n */\nexport class StubMemoryProvider implements MemoryProvider {\n readonly id = 'stub';\n readonly displayName = 'Stub Memory Provider';\n readonly capabilities = {\n search: true,\n read: false,\n write: false,\n update: false,\n delete: false,\n keywordSearch: false,\n semanticSearch: false,\n hybridSearch: false,\n citations: false,\n sync: true,\n local: false,\n };\n\n isAvailable(): boolean {\n return true;\n }\n\n async initialize(_sessionId: string, _options?: MemoryProviderInitOptions): Promise<void> {}\n\n systemPromptBlock(): string {\n return 'External memory provider: stub (wiring only; no cloud backend).';\n }\n\n async prefetch(query: string): Promise<string> {\n const q = query.trim();\n if (!q) {\n return '';\n }\n return `[stub prefetch] query length=${q.length}`;\n }\n\n queuePrefetch(): void {}\n\n sync(): void {}\n\n getToolSchemas() {\n return [];\n }\n\n async handleToolCall(toolName: string): Promise<string> {\n return JSON.stringify({ error: `stub provider has no tools (${toolName})` });\n }\n\n async search(): Promise<[]> {\n return [];\n }\n\n async shutdown(): Promise<void> {}\n}\n"],"mappings":";;;;AAKA,IAAa,qBAAb,MAA0D;CACxD,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,cAAuB;AACrB,SAAO;;CAGT,MAAM,WAAW,YAAoB,UAAqD;CAE1F,oBAA4B;AAC1B,SAAO;;CAGT,MAAM,SAAS,OAAgC;EAC7C,MAAM,IAAI,MAAM,MAAM;AACtB,MAAI,CAAC,EACH,QAAO;AAET,SAAO,gCAAgC,EAAE;;CAG3C,gBAAsB;CAEtB,OAAa;CAEb,iBAAiB;AACf,SAAO,EAAE;;CAGX,MAAM,eAAe,UAAmC;AACtD,SAAO,KAAK,UAAU,EAAE,OAAO,+BAA+B,SAAS,IAAI,CAAC;;CAG9E,MAAM,SAAsB;AAC1B,SAAO,EAAE;;CAGX,MAAM,WAA0B"}
@@ -1,15 +1,19 @@
1
1
  /**
2
- * Built-in curated memory (MEMORY.md + USER.md under the agent home `memories/` dir).
2
+ * Built-in curated memory:
3
+ * - agent notes: `~/.xopc/agents/<id>/memories/MEMORY.md`
4
+ * - user memory: `~/.xopc/user/MEMORY.md`
3
5
  */
4
6
  export interface MemoryStoreConfig {
5
7
  workspaceDir: string;
6
8
  /** Absolute path to `…/agents/<id>/memories/` (not under markdown workspace). */
7
9
  memoriesDir: string;
10
+ /** Absolute path to global user memory (`~/.xopc/user/MEMORY.md`). */
11
+ userMemoryPath: string;
8
12
  /** Max chars for MEMORY.md entries (excluding delimiter overhead in limit check uses joined body). */
9
13
  memoryCharLimit: number;
10
- /** Max chars for USER.md entries. */
14
+ /** Max chars for global user memory entries. */
11
15
  userCharLimit: number;
12
- /** When false, USER.md is not loaded into the snapshot or shown in the system prompt. */
16
+ /** When false, global user memory is not loaded into the snapshot or shown in the system prompt. */
13
17
  userProfileEnabled?: boolean;
14
18
  }
15
19
  /** Frozen at session start; not updated when tools mutate disk mid-session. */
@@ -17,3 +21,158 @@ export interface MemorySnapshot {
17
21
  memory: string;
18
22
  user: string;
19
23
  }
24
+ export type MemoryKind = 'user_profile' | 'agent_note' | 'workspace_fact' | 'daily_note' | 'session_summary' | 'derived_insight' | 'task_lesson' | 'tool_preference' | 'long_term_goal';
25
+ export type MemoryStatus = 'candidate' | 'active' | 'needs_review' | 'stale' | 'archived' | 'rejected';
26
+ export type MemorySensitivity = 'normal' | 'personal' | 'secret' | 'regulated';
27
+ export interface MemoryEvidence {
28
+ sessionKey?: string;
29
+ turnId?: string;
30
+ toolCallId?: string;
31
+ sourceText?: string;
32
+ }
33
+ export interface MemoryScope {
34
+ agentId: string;
35
+ workspaceId?: string;
36
+ sessionKey?: string;
37
+ }
38
+ export interface MemoryCitation {
39
+ providerId: string;
40
+ recordId: string;
41
+ title?: string;
42
+ uri?: string;
43
+ path?: string;
44
+ lineStart?: number;
45
+ lineEnd?: number;
46
+ createdAt?: string;
47
+ }
48
+ export interface MemoryRecord {
49
+ id: string;
50
+ kind: MemoryKind;
51
+ status?: MemoryStatus;
52
+ scope: MemoryScope;
53
+ content: string;
54
+ source: {
55
+ path?: string;
56
+ lineStart?: number;
57
+ lineEnd?: number;
58
+ sessionEntryId?: string;
59
+ provider?: string;
60
+ };
61
+ confidence?: number;
62
+ sensitivity?: MemorySensitivity;
63
+ evidence?: MemoryEvidence[];
64
+ reviewAfter?: string;
65
+ expiresAt?: string;
66
+ createdAt: string;
67
+ updatedAt: string;
68
+ tags?: string[];
69
+ }
70
+ export interface MemorySearchRequest {
71
+ query: string;
72
+ scope?: Partial<MemoryScope>;
73
+ kinds?: MemoryKind[];
74
+ maxResults?: number;
75
+ minScore?: number;
76
+ }
77
+ export interface MemorySearchResult {
78
+ record: MemoryRecord;
79
+ score: number;
80
+ snippet: string;
81
+ citation: MemoryCitation;
82
+ }
83
+ export interface MemoryReadRequest {
84
+ id?: string;
85
+ path?: string;
86
+ from?: number;
87
+ lines?: number;
88
+ scope?: Partial<MemoryScope>;
89
+ }
90
+ export interface MemoryReadResult {
91
+ record: MemoryRecord;
92
+ lineNumbers?: {
93
+ start: number;
94
+ end: number;
95
+ };
96
+ }
97
+ export interface MemoryListRequest {
98
+ kind?: MemoryKind;
99
+ target?: 'memory' | 'user';
100
+ scope?: Partial<MemoryScope>;
101
+ }
102
+ export interface MemoryWriteRequest {
103
+ kind: MemoryKind;
104
+ content: string;
105
+ scope?: Partial<MemoryScope>;
106
+ target?: 'memory' | 'user';
107
+ tags?: string[];
108
+ source?: MemoryRecord['source'];
109
+ confidence?: number;
110
+ status?: MemoryStatus;
111
+ sensitivity?: MemorySensitivity;
112
+ evidence?: MemoryEvidence[];
113
+ reviewAfter?: string;
114
+ expiresAt?: string;
115
+ approved?: boolean;
116
+ }
117
+ export interface MemoryUpdateRequest {
118
+ id?: string;
119
+ matchText?: string;
120
+ content: string;
121
+ scope?: Partial<MemoryScope>;
122
+ target?: 'memory' | 'user';
123
+ approved?: boolean;
124
+ }
125
+ export interface MemoryDeleteRequest {
126
+ id?: string;
127
+ matchText?: string;
128
+ scope?: Partial<MemoryScope>;
129
+ target?: 'memory' | 'user';
130
+ }
131
+ export interface MemoryWriteResult {
132
+ success: boolean;
133
+ message?: string;
134
+ error?: string;
135
+ record?: MemoryRecord;
136
+ }
137
+ export interface MemoryCapabilities {
138
+ search: boolean;
139
+ read: boolean;
140
+ write: boolean;
141
+ update: boolean;
142
+ delete: boolean;
143
+ keywordSearch?: boolean;
144
+ semanticSearch?: boolean;
145
+ hybridSearch?: boolean;
146
+ citations?: boolean;
147
+ sync?: boolean;
148
+ local?: boolean;
149
+ }
150
+ export interface MemoryProviderManifest {
151
+ type: 'memory-provider';
152
+ id: string;
153
+ displayName: string;
154
+ entry?: string;
155
+ capabilities: Partial<MemoryCapabilities>;
156
+ configSchema?: string;
157
+ }
158
+ export type MemorySyncEvent = {
159
+ type: 'turn';
160
+ userContent: string;
161
+ assistantContent: string;
162
+ sessionId?: string;
163
+ } | {
164
+ type: 'write';
165
+ action: 'add' | 'replace' | 'remove';
166
+ target?: 'memory' | 'user';
167
+ content: string;
168
+ } | {
169
+ type: 'signal';
170
+ signal: MemorySignal;
171
+ };
172
+ export interface MemorySignal {
173
+ source: 'search_recall' | 'session_summary' | 'explicit_remember' | 'background_review' | 'dreaming';
174
+ recordId?: string;
175
+ score?: number;
176
+ content?: string;
177
+ metadata?: Record<string, unknown>;
178
+ }