@xopcai/xopc 0.0.111 → 0.0.113

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 (443) hide show
  1. package/dist/browser-ext/icons/icon-128.png +0 -0
  2. package/dist/browser-ext/icons/icon-16.png +0 -0
  3. package/dist/browser-ext/icons/icon-32.png +0 -0
  4. package/dist/browser-ext/icons/icon-48.png +0 -0
  5. package/dist/browser-ext/manifest.json +1 -1
  6. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  7. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  8. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
  9. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  10. package/dist/extensions/telegram/src/plugin.js +1 -1
  11. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  12. package/dist/extensions/telegram/src/update-offset-store.js +1 -1
  13. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  14. package/dist/extensions/telegram/xopc.extension.json +1 -1
  15. package/dist/extensions/weixin/src/api/api.js +2 -2
  16. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  17. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  18. package/dist/extensions/weixin/src/delivery-to.d.ts +3 -3
  19. package/dist/extensions/weixin/src/delivery-to.js.map +1 -1
  20. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  21. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  22. package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
  23. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  24. package/dist/extensions/weixin/src/plugin.js +1 -1
  25. package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
  26. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  27. package/dist/gateway/static/root/apple-touch-icon.png +0 -0
  28. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-zlx9l5Yp.js → agent-avatar-dicebear-CBlklyNr.js} +1 -1
  29. package/dist/gateway/static/root/assets/agent-browser-settings-page-rGbKc2Hh.js +6 -0
  30. package/dist/gateway/static/root/assets/{agent-defaults-tabbed-page-Bz7JWjRM.js → agent-defaults-tabbed-page-CtwVbjOA.js} +1 -1
  31. package/dist/gateway/static/root/assets/agents-CCBmGcwc.js +71 -0
  32. package/dist/gateway/static/root/assets/{app-management-settings-panel-DaQwdeCq.js → app-management-settings-panel-28E_WfMe.js} +1 -1
  33. package/dist/gateway/static/root/assets/{appearance-settings-D2zv6r3P.js → appearance-settings-Do1z0XgJ.js} +1 -1
  34. package/dist/gateway/static/root/assets/{apps-page-BIppe_jj.js → apps-page-xwCsJS15.js} +1 -1
  35. package/dist/gateway/static/root/assets/{archive-plugin-DEmu8eH7.js → archive-plugin-BAFlsov_.js} +1 -1
  36. package/dist/gateway/static/root/assets/{attachment-load-B98lJoN5.js → attachment-load-V3qGPC3x.js} +1 -1
  37. package/dist/gateway/static/root/assets/{binary-plugins-CL9QKmyo.js → binary-plugins-DT8NvA6W.js} +1 -1
  38. package/dist/gateway/static/root/assets/{block-editor-BOAhMAhT.js → block-editor-CdLMEcHd.js} +1 -1
  39. package/dist/gateway/static/root/assets/{channels-settings-Br8iRnXp.js → channels-settings-C044DcYk.js} +1 -1
  40. package/dist/gateway/static/root/assets/{config-api-0o1WYdz2.js → config-api-Bf5mjpu7.js} +1 -1
  41. package/dist/gateway/static/root/assets/config-reload-event-Bjh2zoKp.js +1 -0
  42. package/dist/gateway/static/root/assets/connectors-settings-8VEWUOTj.js +2 -0
  43. package/dist/gateway/static/root/assets/cron-api--pAB_rps.js +1 -0
  44. package/dist/gateway/static/root/assets/cron-page-DqmNGNOy.js +3 -0
  45. package/dist/gateway/static/root/assets/dreaming-settings-6UZE1FSK.js +1 -0
  46. package/dist/gateway/static/root/assets/{extension-debug-page-Cjx6pZVz.js → extension-debug-page-BGhE7msg.js} +1 -1
  47. package/dist/gateway/static/root/assets/{extension-page-BSPNL90V.js → extension-page-CvpI45WG.js} +1 -1
  48. package/dist/gateway/static/root/assets/extension-settings-page-DAmR5FUe.js +1 -0
  49. package/dist/gateway/static/root/assets/{fetch-Bs7in_4F.js → fetch-NZmjSXLl.js} +1 -1
  50. package/dist/gateway/static/root/assets/format-cron-label-BsotZDO5.js +2 -0
  51. package/dist/gateway/static/root/assets/{format-interval-label-CftJ5uXu.js → format-interval-label-qhth3BMV.js} +1 -1
  52. package/dist/gateway/static/root/assets/{gateway-config-api-Clfck-hW.js → gateway-config-api-CaXBt-9R.js} +1 -1
  53. package/dist/gateway/static/root/assets/gateway-settings-DphpbLBc.js +1 -0
  54. package/dist/gateway/static/root/assets/{gateway-startup-retry-BkjVJc38.js → gateway-startup-retry-Be1omjh3.js} +1 -1
  55. package/dist/gateway/static/root/assets/{goal-detail-page-kqJue0sE.js → goal-detail-page-bv0VRDaf.js} +1 -1
  56. package/dist/gateway/static/root/assets/goals-page-1Ywnt4Cb.js +2 -0
  57. package/dist/gateway/static/root/assets/{goals-settings-CJnzNSDo.js → goals-settings-ceEBjnfc.js} +1 -1
  58. package/dist/gateway/static/root/assets/{heartbeat-config-api-Cp7CPuIn.js → heartbeat-config-api-BzO6G4fD.js} +1 -1
  59. package/dist/gateway/static/root/assets/{heartbeat-settings-ifSI1Wbh.js → heartbeat-settings-DCST9-du.js} +1 -1
  60. package/dist/gateway/static/root/assets/index-Cxm6xsps.js +122 -0
  61. package/dist/gateway/static/root/assets/index-b_R4tKqt.css +1 -0
  62. package/dist/gateway/static/root/assets/interval-presets-DJmshV8n.js +1 -0
  63. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings--MI1rYl7.js → keyboard-shortcuts-settings-9AUUlQ5Q.js} +1 -1
  64. package/dist/gateway/static/root/assets/{logs-page-BwrVNlyW.js → logs-page-B_wrxhee.js} +1 -1
  65. package/dist/gateway/static/root/assets/{markdown-split-B_oc9lJe.js → markdown-split-CYYELqAr.js} +1 -1
  66. package/dist/gateway/static/root/assets/{media-plugins-DLPvB5H3.js → media-plugins-BEcMR2M8.js} +1 -1
  67. package/dist/gateway/static/root/assets/messages-CkT-lcgP.js +3 -0
  68. package/dist/gateway/static/root/assets/models-hub-panel-D0JDSbNu.js +2 -0
  69. package/dist/gateway/static/root/assets/note-detail-page-DpFV-EO6.js +2 -0
  70. package/dist/gateway/static/root/assets/{note-image-lightbox-rSqAgOi9.js → note-image-lightbox-DNAoPcmm.js} +1 -1
  71. package/dist/gateway/static/root/assets/{notes-page-C9ACGEty.js → notes-page-CdkjTch8.js} +1 -1
  72. package/dist/gateway/static/root/assets/{preview-open-alternatives-Bw_N2oZi.js → preview-open-alternatives-BPLz0AIv.js} +1 -1
  73. package/dist/gateway/static/root/assets/{remote-access-hub-BhcWIKuM.js → remote-access-hub-DSYVAi96.js} +1 -1
  74. package/dist/gateway/static/root/assets/{save-bar-controls-CNP2jmw0.js → save-bar-controls-CrWwWRVK.js} +1 -1
  75. package/dist/gateway/static/root/assets/schedule-field-CF2sadvN.js +1 -0
  76. package/dist/gateway/static/root/assets/{schema-form-CDPzua9q.js → schema-form-Di5cKjYE.js} +1 -1
  77. package/dist/gateway/static/root/assets/{sessions-page-DzkpSDZr.js → sessions-page-CenkcVjF.js} +1 -1
  78. package/dist/gateway/static/root/assets/settings-advanced-gate-D9sva86V.js +1 -0
  79. package/dist/gateway/static/root/assets/{settings-collapsible-section-C9bff85B.js → settings-collapsible-section-Chh282jW.js} +1 -1
  80. package/dist/gateway/static/root/assets/settings-form-section-Dq-83cQd.js +1 -0
  81. package/dist/gateway/static/root/assets/{settings-page-DWK4Zo7s.js → settings-page-DL35U0x0.js} +1 -1
  82. package/dist/gateway/static/root/assets/setup-status-panel-Ctwbp9Er.js +1 -0
  83. package/dist/gateway/static/root/assets/{share-preview-page-DnutoY_S.js → share-preview-page-0FXYnSUA.js} +1 -1
  84. package/dist/gateway/static/root/assets/{shares-settings-6oRgJMpn.js → shares-settings-DIM3JNsr.js} +1 -1
  85. package/dist/gateway/static/root/assets/skill-reload-api-DAlNaNzL.js +1 -0
  86. package/dist/gateway/static/root/assets/skills-page-CLrHVzAt.js +2 -0
  87. package/dist/gateway/static/root/assets/{system-settings-panel-qP1JDtDd.js → system-settings-panel-W1pTcojB.js} +1 -1
  88. package/dist/gateway/static/root/assets/use-agent-defaults-form-BVRvkK7m.js +1 -0
  89. package/dist/gateway/static/root/assets/{use-channel-catalog-C4mg1hjD.js → use-channel-catalog-CgJibfMM.js} +1 -1
  90. package/dist/gateway/static/root/assets/{use-settings-tab-guard-F6C0mpJt.js → use-settings-tab-guard-Bw_qkRQE.js} +1 -1
  91. package/dist/gateway/static/root/assets/{voice-api-key-field-BnDDb6qO.js → voice-api-key-field-vYAO71Gn.js} +1 -1
  92. package/dist/gateway/static/root/assets/{voice-player-store-B2EwIhtY.js → voice-player-store-C7lziaAx.js} +1 -1
  93. package/dist/gateway/static/root/assets/{workflow-page.utils-CRB7WX9l.js → workflow-page.utils-sgHjOXOm.js} +1 -1
  94. package/dist/gateway/static/root/assets/{workflows-page-2Fptr0je.js → workflows-page-DYyOTmFx.js} +1 -1
  95. package/dist/gateway/static/root/favicon-16x16.png +0 -0
  96. package/dist/gateway/static/root/favicon-32x32.png +0 -0
  97. package/dist/gateway/static/root/favicon-icon.svg +1 -0
  98. package/dist/gateway/static/root/favicon.ico +0 -0
  99. package/dist/gateway/static/root/favicon.png +0 -0
  100. package/dist/gateway/static/root/favicon.svg +24 -15
  101. package/dist/gateway/static/root/index.html +11 -10
  102. package/dist/gateway/static/root/logo-dark.svg +23 -15
  103. package/dist/gateway/static/root/logo.svg +23 -16
  104. package/dist/package.js +1 -1
  105. package/dist/src/agent/agent-manager.d.ts +28 -2
  106. package/dist/src/agent/agent-manager.js +82 -11
  107. package/dist/src/agent/agent-manager.js.map +1 -1
  108. package/dist/src/agent/agent-scope.js +1 -1
  109. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
  110. package/dist/src/agent/context/workspace-seed.js +2 -2
  111. package/dist/src/agent/context/workspace-state.js +1 -1
  112. package/dist/src/agent/context/workspace.js +1 -1
  113. package/dist/src/agent/goals/goal-locale.js +2 -2
  114. package/dist/src/agent/goals/persistent-goal-service.js +1 -1
  115. package/dist/src/agent/goals/post-turn.js +3 -3
  116. package/dist/src/agent/image/load-image-media.js +2 -2
  117. package/dist/src/agent/ipc/inbox.js +3 -3
  118. package/dist/src/agent/ipc/socket.js +1 -1
  119. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  120. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  121. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  122. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  123. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  124. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  125. package/dist/src/agent/memory/dreaming/events.js +1 -1
  126. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  127. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  128. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  129. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  130. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  131. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  132. package/dist/src/agent/memory/memory-flush.js +1 -1
  133. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  134. package/dist/src/agent/messaging/command-handler.d.ts +3 -0
  135. package/dist/src/agent/messaging/command-handler.js +5 -0
  136. package/dist/src/agent/messaging/command-handler.js.map +1 -1
  137. package/dist/src/agent/models/manager.js +1 -1
  138. package/dist/src/agent/prompt/memory/index.js +1 -1
  139. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  140. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  141. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  142. package/dist/src/agent/sandbox/path-policy.js +2 -2
  143. package/dist/src/agent/service/process-direct-streaming.js +9 -4
  144. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  145. package/dist/src/agent/service/reconcile-dreaming-cron.js +8 -5
  146. package/dist/src/agent/service/reconcile-dreaming-cron.js.map +1 -1
  147. package/dist/src/agent/service.d.ts +2 -1
  148. package/dist/src/agent/service.js +10 -5
  149. package/dist/src/agent/service.js.map +1 -1
  150. package/dist/src/agent/service.types.d.ts +4 -0
  151. package/dist/src/agent/session/session-config-service.d.ts +8 -0
  152. package/dist/src/agent/session/session-config-service.js +20 -0
  153. package/dist/src/agent/session/session-config-service.js.map +1 -1
  154. package/dist/src/agent/session/session-inspector.js +1 -1
  155. package/dist/src/agent/skills/config.js +2 -2
  156. package/dist/src/agent/skills/filesystem-watcher.d.ts +19 -0
  157. package/dist/src/agent/skills/filesystem-watcher.js +182 -0
  158. package/dist/src/agent/skills/filesystem-watcher.js.map +1 -0
  159. package/dist/src/agent/skills/hub-hash.js +2 -2
  160. package/dist/src/agent/skills/hub-lock.js +1 -1
  161. package/dist/src/agent/skills/hub-pull.js +30 -36
  162. package/dist/src/agent/skills/hub-pull.js.map +1 -1
  163. package/dist/src/agent/skills/index.js +82 -38
  164. package/dist/src/agent/skills/index.js.map +1 -1
  165. package/dist/src/agent/skills/installer.js +2 -2
  166. package/dist/src/agent/skills/managed-store.d.ts +19 -0
  167. package/dist/src/agent/skills/managed-store.js +97 -38
  168. package/dist/src/agent/skills/managed-store.js.map +1 -1
  169. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  170. package/dist/src/agent/skills/skill-manager.d.ts +16 -6
  171. package/dist/src/agent/skills/skill-manager.js +79 -24
  172. package/dist/src/agent/skills/skill-manager.js.map +1 -1
  173. package/dist/src/agent/skills/skill-view-path.js +1 -1
  174. package/dist/src/agent/skills/test-framework.js +1 -1
  175. package/dist/src/agent/skills/types.d.ts +11 -0
  176. package/dist/src/agent/skills/watcher.js +1 -1
  177. package/dist/src/agent/starter-agents.js +1 -1
  178. package/dist/src/agent/tools/cronjob-tool.d.ts +6 -3
  179. package/dist/src/agent/tools/cronjob-tool.js +58 -23
  180. package/dist/src/agent/tools/cronjob-tool.js.map +1 -1
  181. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  182. package/dist/src/agent/tools/factory.js +1 -1
  183. package/dist/src/agent/tools/find.js +1 -1
  184. package/dist/src/agent/tools/grep.js +1 -1
  185. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  186. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  187. package/dist/src/agent/tools/workflow-tool.js +1 -1
  188. package/dist/src/agent/workflow/catalog.js +1 -1
  189. package/dist/src/agent/workspace-runtime/registry.d.ts +5 -0
  190. package/dist/src/agent/workspace-runtime/registry.js +7 -0
  191. package/dist/src/agent/workspace-runtime/registry.js.map +1 -1
  192. package/dist/src/ai-assist/text-assist.d.ts +42 -0
  193. package/dist/src/ai-assist/text-assist.js +252 -0
  194. package/dist/src/ai-assist/text-assist.js.map +1 -0
  195. package/dist/src/auth/credentials.js +2 -2
  196. package/dist/src/auth/profiles/store.js +2 -2
  197. package/dist/src/auth/sync-provider-auth.js +1 -1
  198. package/dist/src/browser/cache-dir-policy.js +1 -1
  199. package/dist/src/browser/cdp-local-launcher.js +2 -2
  200. package/dist/src/browser/providers/browser-ext-install.js +4 -4
  201. package/dist/src/browser/providers/cloakbrowser.js +5 -5
  202. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  203. package/dist/src/browser/stealth.js +1 -1
  204. package/dist/src/channels/outbound/persist-store.js +1 -1
  205. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  206. package/dist/src/channels/pairing/pairing-store.js +2 -2
  207. package/dist/src/channels/plugins/types.adapters.d.ts +2 -2
  208. package/dist/src/chat-commands/agent-edit.js +2 -2
  209. package/dist/src/chat-commands/builtins/config.js +3 -3
  210. package/dist/src/chat-commands/builtins/system.js +11 -4
  211. package/dist/src/chat-commands/builtins/system.js.map +1 -1
  212. package/dist/src/chat-commands/context.d.ts +3 -0
  213. package/dist/src/chat-commands/context.js +7 -0
  214. package/dist/src/chat-commands/context.js.map +1 -1
  215. package/dist/src/chat-commands/types.d.ts +2 -0
  216. package/dist/src/cli/commands/config.js +1 -1
  217. package/dist/src/cli/commands/cron.js +55 -16
  218. package/dist/src/cli/commands/cron.js.map +1 -1
  219. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  220. package/dist/src/cli/commands/doctor/checks/cron-health.js +2 -83
  221. package/dist/src/cli/commands/doctor/checks/cron-health.js.map +1 -1
  222. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  223. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  224. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  225. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  226. package/dist/src/cli/commands/extension-create.js +1 -1
  227. package/dist/src/cli/commands/extension-dev.js +2 -2
  228. package/dist/src/cli/commands/extension-marketplace.js +2 -2
  229. package/dist/src/cli/commands/extension-pack.js +2 -2
  230. package/dist/src/cli/commands/extension.js +3 -3
  231. package/dist/src/cli/commands/gateway/logs.js +1 -1
  232. package/dist/src/cli/commands/image.js +1 -1
  233. package/dist/src/cli/commands/init.js +2 -2
  234. package/dist/src/cli/commands/models.js +1 -1
  235. package/dist/src/cli/commands/skills-test.js +1 -1
  236. package/dist/src/cli/templates.js +1 -1
  237. package/dist/src/cli/utils/gateway-client.js +1 -1
  238. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  239. package/dist/src/config/agent-profile.js +1 -1
  240. package/dist/src/config/agent-typed-models.js +1 -1
  241. package/dist/src/config/gateway-bind.js +1 -1
  242. package/dist/src/config/index.js +7 -7
  243. package/dist/src/config/loader.js +4 -4
  244. package/dist/src/config/models-json.js +2 -2
  245. package/dist/src/config/paths-state.js +1 -1
  246. package/dist/src/config/paths.js +1 -1
  247. package/dist/src/config/profile.js +1 -1
  248. package/dist/src/config/reload.js +1 -1
  249. package/dist/src/config/schema.d.ts +0 -2
  250. package/dist/src/config/schema.js +0 -3
  251. package/dist/src/config/schema.js.map +1 -1
  252. package/dist/src/config/web-patch.d.ts +0 -1
  253. package/dist/src/config/web-patch.js +0 -2
  254. package/dist/src/config/web-patch.js.map +1 -1
  255. package/dist/src/config/workspace-path.js +1 -1
  256. package/dist/src/cron/executor.js +102 -71
  257. package/dist/src/cron/executor.js.map +1 -1
  258. package/dist/src/cron/index.d.ts +1 -1
  259. package/dist/src/cron/index.js +3 -3
  260. package/dist/src/cron/run-log-store.d.ts +1 -0
  261. package/dist/src/cron/run-log-store.js +4 -2
  262. package/dist/src/cron/run-log-store.js.map +1 -1
  263. package/dist/src/cron/schedule.d.ts +10 -0
  264. package/dist/src/cron/schedule.js +85 -0
  265. package/dist/src/cron/schedule.js.map +1 -0
  266. package/dist/src/cron/service.d.ts +34 -77
  267. package/dist/src/cron/service.js +327 -264
  268. package/dist/src/cron/service.js.map +1 -1
  269. package/dist/src/cron/types.d.ts +80 -50
  270. package/dist/src/cron/validation.d.ts +358 -90
  271. package/dist/src/cron/validation.js +152 -132
  272. package/dist/src/cron/validation.js.map +1 -1
  273. package/dist/src/cron/workflow-run-completion.js +1 -1
  274. package/dist/src/daemon/constants.js +1 -1
  275. package/dist/src/daemon/install-plan.js +2 -2
  276. package/dist/src/daemon/launchd.js +2 -2
  277. package/dist/src/daemon/schtasks.js +2 -2
  278. package/dist/src/daemon/systemd.js +2 -2
  279. package/dist/src/extensions/bundle-mcp.js +1 -1
  280. package/dist/src/extensions/discover-extensions.js +2 -2
  281. package/dist/src/extensions/health.js +1 -1
  282. package/dist/src/extensions/install.js +2 -2
  283. package/dist/src/extensions/loader.js +2 -2
  284. package/dist/src/extensions/lockfile.js +3 -3
  285. package/dist/src/extensions/security.js +1 -1
  286. package/dist/src/extensions/update.js +2 -2
  287. package/dist/src/gateway/agents-admin.js +2 -2
  288. package/dist/src/gateway/chat-stream/mapper.d.ts +1 -0
  289. package/dist/src/gateway/chat-stream/mapper.js +6 -2
  290. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  291. package/dist/src/gateway/chat-stream/protocol.d.ts +2 -0
  292. package/dist/src/gateway/file-path-classifier.js +2 -2
  293. package/dist/src/gateway/hono/lib/config-payload.d.ts +0 -1
  294. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  295. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  296. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  297. package/dist/src/gateway/hono/oauth-async.js +1 -1
  298. package/dist/src/gateway/hono/routes/agents.js +1 -1
  299. package/dist/src/gateway/hono/routes/ai-assist.d.ts +3 -0
  300. package/dist/src/gateway/hono/routes/ai-assist.js +66 -0
  301. package/dist/src/gateway/hono/routes/ai-assist.js.map +1 -0
  302. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  303. package/dist/src/gateway/hono/routes/commands-skills.js +7 -0
  304. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  305. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  306. package/dist/src/gateway/hono/routes/cron.js +24 -5
  307. package/dist/src/gateway/hono/routes/cron.js.map +1 -1
  308. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  309. package/dist/src/gateway/hono/routes/home.js +5 -3
  310. package/dist/src/gateway/hono/routes/home.js.map +1 -1
  311. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  312. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  313. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  314. package/dist/src/gateway/hono/routes/models.js +1 -1
  315. package/dist/src/gateway/hono/routes/shares.js +1 -1
  316. package/dist/src/gateway/hono/routes/workflows.js +2 -2
  317. package/dist/src/gateway/hono/routes/workspace.js +2 -2
  318. package/dist/src/gateway/lock.js +3 -3
  319. package/dist/src/gateway/ports.js +1 -1
  320. package/dist/src/gateway/service/agent-runner.js +2 -2
  321. package/dist/src/gateway/service/config-coordinator.js +1 -1
  322. package/dist/src/gateway/service/marketplace-service.d.ts +22 -10
  323. package/dist/src/gateway/service/marketplace-service.js +46 -5
  324. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  325. package/dist/src/gateway/service.js +11 -5
  326. package/dist/src/gateway/service.js.map +1 -1
  327. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  328. package/dist/src/goals/goal-notifications.js +1 -1
  329. package/dist/src/goals/goal-workflow-judge.js +3 -3
  330. package/dist/src/i18n/goals-bundle.js +1 -1
  331. package/dist/src/i18n/index.js +1 -1
  332. package/dist/src/i18n/share-tool-bundle.js +2 -2
  333. package/dist/src/infra/brew.js +1 -1
  334. package/dist/src/infra/package-json.js +1 -1
  335. package/dist/src/infra/package-update-steps.js +1 -1
  336. package/dist/src/infra/path-env.js +2 -2
  337. package/dist/src/infra/restart.js +1 -1
  338. package/dist/src/infra/stable-node-path.js +1 -1
  339. package/dist/src/infra/update-check.js +1 -1
  340. package/dist/src/infra/update-global.js +1 -1
  341. package/dist/src/infra/update-lock.js +2 -2
  342. package/dist/src/infra/update-restart.js +1 -1
  343. package/dist/src/infra/update-runner.js +1 -1
  344. package/dist/src/infra/update-startup.js +1 -1
  345. package/dist/src/infra/write-file-atomic.js +2 -2
  346. package/dist/src/media/store.js +1 -1
  347. package/dist/src/notes/agent-context.js +1 -1
  348. package/dist/src/notes/service.js +1 -1
  349. package/dist/src/notes/store.js +2 -2
  350. package/dist/src/project-trust/trust-store.js +2 -2
  351. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  352. package/dist/src/providers/index.js +1 -1
  353. package/dist/src/providers/model-registry.js +4 -4
  354. package/dist/src/session/init-session-turn.js +2 -2
  355. package/dist/src/session/resolve-session.js +3 -3
  356. package/dist/src/session/session-title.js +2 -2
  357. package/dist/src/session/store-reader.d.ts +5 -0
  358. package/dist/src/session/store-reader.js +1 -0
  359. package/dist/src/session/store.js +1 -1
  360. package/dist/src/share/share-auto.js +2 -2
  361. package/dist/src/share/share-store.js +3 -3
  362. package/dist/src/share/share-thumbnail.js +2 -2
  363. package/dist/src/share/share-zip.js +1 -1
  364. package/dist/src/share/site-share-store.js +3 -3
  365. package/dist/src/share/site-static-serve.js +1 -1
  366. package/dist/src/storage/sqlite/connection.js +1 -1
  367. package/dist/src/storage/sqlite/cron-job-repository.d.ts +6 -0
  368. package/dist/src/storage/sqlite/cron-job-repository.js +70 -0
  369. package/dist/src/storage/sqlite/cron-job-repository.js.map +1 -0
  370. package/dist/src/storage/sqlite/cron-run-repository.js +0 -1
  371. package/dist/src/storage/sqlite/cron-run-repository.js.map +1 -1
  372. package/dist/src/storage/sqlite/index.d.ts +1 -0
  373. package/dist/src/storage/sqlite/index.js +2 -1
  374. package/dist/src/storage/sqlite/memory-index-repository.js +2 -2
  375. package/dist/src/storage/sqlite/migrations/009_cron_jobs.sql +24 -0
  376. package/dist/src/storage/sqlite/migrations/discover.js +1 -1
  377. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  378. package/dist/src/storage/sqlite/migrations/runner.js +4 -4
  379. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  380. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  381. package/dist/src/storage/sqlite/schema.js +2 -2
  382. package/dist/src/storage/sqlite/schema.sql +25 -0
  383. package/dist/src/tui/clipboard-image.js +3 -3
  384. package/dist/src/tui/extension-host/load-extensions.js +1 -1
  385. package/dist/src/tui/theme-manager.js +1 -1
  386. package/dist/src/tui/tui-command-formatters.js +4 -4
  387. package/dist/src/tui/tui-commands.js +2 -2
  388. package/dist/src/tui/tui-keybindings-file.js +1 -1
  389. package/dist/src/tui/tui-scoped-models.js +2 -2
  390. package/dist/src/tui/tui-settings.js +1 -1
  391. package/dist/src/tui/tui-startup-resources.js +1 -1
  392. package/dist/src/tui/tui.js +6 -6
  393. package/dist/src/tunnel/frpc-binary.js +4 -4
  394. package/dist/src/tunnel/frpc-config.js +1 -1
  395. package/dist/src/tunnel/frpc-extract.js +1 -1
  396. package/dist/src/tunnel/tunnel-state.js +1 -1
  397. package/dist/src/utils/logger/audit.js +1 -1
  398. package/dist/src/utils/logger/log-store.js +1 -1
  399. package/dist/src/utils/logger/rotation.js +1 -1
  400. package/dist/src/utils/logger/streams.js +1 -1
  401. package/dist/src/voice/tts/audio.js +1 -1
  402. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  403. package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
  404. package/dist/src/workflows/engine/projector.js +23 -14
  405. package/dist/src/workflows/engine/projector.js.map +1 -1
  406. package/dist/src/workflows/engine/workflow-engine.d.ts +1 -0
  407. package/dist/src/workflows/engine/workflow-engine.js +36 -0
  408. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  409. package/dist/src/workflows/index.js +1 -1
  410. package/dist/src/workflows/service/workflow-run-service.js +2 -2
  411. package/dist/src/workflows/service/workflow-session-bridge.js +2 -2
  412. package/dist/src/workflows/store/event-store.js +1 -1
  413. package/dist/src/workflows/store/run-store.js +1 -1
  414. package/package.json +2 -3
  415. package/dist/gateway/static/root/assets/agent-browser-settings-page-B-0zGjt8.js +0 -6
  416. package/dist/gateway/static/root/assets/agents-DwDnJlXT.js +0 -71
  417. package/dist/gateway/static/root/assets/connectors-settings-DDvHo9in.js +0 -2
  418. package/dist/gateway/static/root/assets/cron-api-Dj_UZKST.js +0 -1
  419. package/dist/gateway/static/root/assets/cron-page-Dv7GII9G.js +0 -1
  420. package/dist/gateway/static/root/assets/cron-schedule-picker-DH10KgD6.js +0 -1
  421. package/dist/gateway/static/root/assets/dreaming-settings-L2rgZDQl.js +0 -1
  422. package/dist/gateway/static/root/assets/extension-settings-page-m_UQYkVc.js +0 -1
  423. package/dist/gateway/static/root/assets/gateway-settings-CS177xni.js +0 -1
  424. package/dist/gateway/static/root/assets/goals-page-C0FujUB5.js +0 -2
  425. package/dist/gateway/static/root/assets/index-COkF54xv.js +0 -121
  426. package/dist/gateway/static/root/assets/index-DIaSNGEO.css +0 -1
  427. package/dist/gateway/static/root/assets/interval-presets-B29Ss_2y.js +0 -2
  428. package/dist/gateway/static/root/assets/messages-Csef1aW7.js +0 -3
  429. package/dist/gateway/static/root/assets/models-hub-panel-DHGiTIvf.js +0 -2
  430. package/dist/gateway/static/root/assets/note-detail-page-BM7zlDiT.js +0 -2
  431. package/dist/gateway/static/root/assets/schedule-field-BPAWui3P.js +0 -1
  432. package/dist/gateway/static/root/assets/schedule-summary-B-hdSRdR.js +0 -1
  433. package/dist/gateway/static/root/assets/settings-advanced-gate-BYS-rpzn.js +0 -1
  434. package/dist/gateway/static/root/assets/settings-form-section-BsrK7TBF.js +0 -1
  435. package/dist/gateway/static/root/assets/setup-status-panel-DJiksNu4.js +0 -1
  436. package/dist/gateway/static/root/assets/skill-reload-api-CU9i0nJV.js +0 -1
  437. package/dist/gateway/static/root/assets/skills-page-ERbdWENm.js +0 -2
  438. package/dist/gateway/static/root/assets/use-agent-defaults-form-D3FGVLZb.js +0 -1
  439. package/dist/gateway/static/root/favicon-16.png +0 -0
  440. package/dist/gateway/static/root/favicon-32.png +0 -0
  441. package/dist/src/cron/persistence.d.ts +0 -62
  442. package/dist/src/cron/persistence.js +0 -188
  443. package/dist/src/cron/persistence.js.map +0 -1
@@ -1,172 +1,192 @@
1
1
  import { z } from "zod";
2
- import nodeCron from "node-cron";
2
+ import { CronExpressionParser } from "cron-parser";
3
3
  //#region src/cron/validation.ts
4
- const cronExpression = z.string().superRefine((val, ctx) => {
5
- if (!nodeCron.validate(val)) ctx.addIssue({
6
- code: z.ZodIssueCode.custom,
7
- message: `Invalid cron expression: ${val}`
8
- });
9
- });
10
- const validTimezones = [
11
- "UTC",
12
- "America/New_York",
13
- "America/Chicago",
14
- "America/Denver",
15
- "America/Los_Angeles",
16
- "America/Toronto",
17
- "Europe/London",
18
- "Europe/Paris",
19
- "Europe/Berlin",
20
- "Europe/Moscow",
21
- "Asia/Tokyo",
22
- "Asia/Shanghai",
23
- "Asia/Hong_Kong",
24
- "Asia/Singapore",
25
- "Asia/Seoul",
26
- "Asia/Dubai",
27
- "Asia/Mumbai",
28
- "Australia/Sydney",
29
- "Pacific/Auckland"
30
- ];
31
- const CronDeliveryMode = z.enum([
32
- "none",
33
- "announce",
34
- "direct"
35
- ]);
36
- /** Treat `''` / `null` / whitespace-only as absent so optional fields do not fail `.min(1)` */
37
- function optionalTrimmedString(max, min = 1) {
38
- return z.preprocess((v) => {
39
- if (v === null || v === void 0) return void 0;
40
- if (typeof v !== "string") return v;
41
- const t = v.trim();
42
- return t.length === 0 ? void 0 : t;
43
- }, z.string().min(min).max(max).optional());
44
- }
45
- /** Optional agent id on create; empty string → undefined. */
46
- const optionalJobAgentId = optionalTrimmedString(64, 1);
47
- /** Optional absolute workspace path on create; empty string → undefined. */
48
- const optionalJobWorkingDirectory = optionalTrimmedString(4096, 1);
49
- /**
50
- * PATCH: set string, or `null` / empty to clear `workingDirectory` on the job.
51
- */
52
- const patchJobWorkingDirectory = z.preprocess((v) => {
53
- if (v === null) return null;
4
+ const nonEmptyString = z.string().trim().min(1);
5
+ const optionalTrimmedString = (max) => z.preprocess((v) => {
54
6
  if (v === void 0) return void 0;
7
+ if (v === null) return v;
55
8
  if (typeof v !== "string") return v;
56
9
  const t = v.trim();
57
- return t.length === 0 ? null : t;
58
- }, z.union([z.string().min(1).max(4096), z.null()]).optional());
59
- /**
60
- * PATCH: set string, or `null` / empty to clear `agentId` on the job.
61
- */
62
- const patchJobAgentId = z.preprocess((v) => {
63
- if (v === null) return null;
64
- if (v === void 0) return void 0;
65
- if (typeof v !== "string") return v;
66
- const t = v.trim();
67
- return t.length === 0 ? null : t;
68
- }, z.union([z.string().min(1).max(64), z.null()]).optional());
10
+ return t.length === 0 ? void 0 : t;
11
+ }, z.string().min(1).max(max).optional());
12
+ const CronScheduleSchema = z.discriminatedUnion("kind", [
13
+ z.object({
14
+ kind: z.literal("at"),
15
+ at: nonEmptyString
16
+ }).strict(),
17
+ z.object({
18
+ kind: z.literal("every"),
19
+ everyMs: z.number().int().min(1),
20
+ anchorMs: z.number().int().nonnegative().optional()
21
+ }).strict(),
22
+ z.object({
23
+ kind: z.literal("cron"),
24
+ expr: nonEmptyString.superRefine((val, ctx) => {
25
+ try {
26
+ CronExpressionParser.parse(val);
27
+ } catch {
28
+ ctx.addIssue({
29
+ code: z.ZodIssueCode.custom,
30
+ message: `Invalid cron expression: ${val}`
31
+ });
32
+ }
33
+ }),
34
+ tz: optionalTrimmedString(100),
35
+ staggerMs: z.number().int().nonnegative().optional()
36
+ }).strict()
37
+ ]);
38
+ const CronDeliverySchema = z.discriminatedUnion("mode", [
39
+ z.object({ mode: z.literal("none") }).strict(),
40
+ z.object({
41
+ mode: z.literal("announce"),
42
+ channel: optionalTrimmedString(32),
43
+ to: optionalTrimmedString(200),
44
+ accountId: optionalTrimmedString(100),
45
+ threadId: z.union([z.string(), z.number()]).optional(),
46
+ bestEffort: z.boolean().optional(),
47
+ completionDestination: z.object({
48
+ mode: z.literal("webhook"),
49
+ to: nonEmptyString
50
+ }).strict().optional(),
51
+ failureDestination: z.object({
52
+ mode: z.enum(["announce", "webhook"]).optional(),
53
+ channel: optionalTrimmedString(32),
54
+ to: optionalTrimmedString(500),
55
+ accountId: optionalTrimmedString(100)
56
+ }).strict().optional()
57
+ }).strict(),
58
+ z.object({
59
+ mode: z.literal("webhook"),
60
+ to: nonEmptyString,
61
+ bestEffort: z.boolean().optional()
62
+ }).strict()
63
+ ]);
69
64
  const CronSystemEventPayloadSchema = z.object({
70
65
  kind: z.literal("systemEvent"),
71
66
  text: z.string().min(1).max(5e4)
72
- });
67
+ }).strict();
73
68
  const CronAgentTurnPayloadSchema = z.object({
74
69
  kind: z.literal("agentTurn"),
75
70
  message: z.string().min(1).max(5e4),
76
- model: optionalTrimmedString(100, 1),
77
- timeoutSeconds: z.number().int().min(10).max(3600).optional()
78
- });
71
+ model: optionalTrimmedString(100),
72
+ thinking: optionalTrimmedString(50),
73
+ toolsAllow: z.array(z.string().trim().min(1)).optional(),
74
+ timeoutSeconds: z.number().int().min(1).max(86400).optional()
75
+ }).strict();
79
76
  const CronGoalContinuePayloadSchema = z.object({
80
77
  kind: z.literal("goalContinue"),
81
- goalId: z.string().min(1).max(100),
82
- message: optionalTrimmedString(5e4, 1),
78
+ goalId: nonEmptyString.max(100),
79
+ message: optionalTrimmedString(5e4),
83
80
  maxRetries: z.number().int().min(0).max(10).optional()
84
- });
81
+ }).strict();
85
82
  const WorkflowRunInputEnvelopeSchema = z.object({
86
83
  payload: z.unknown(),
87
- goal: optionalTrimmedString(5e3, 1),
84
+ goal: optionalTrimmedString(5e3),
88
85
  variables: z.record(z.string(), z.unknown()).optional(),
89
86
  context: z.record(z.string(), z.unknown()).optional()
90
- });
87
+ }).strict();
91
88
  const CronWorkflowRunPayloadSchema = z.object({
92
89
  kind: z.literal("workflowRun"),
93
- definitionId: z.string().min(1).max(200),
90
+ definitionId: nonEmptyString.max(200),
94
91
  input: z.unknown().optional(),
95
92
  inputEnvelope: WorkflowRunInputEnvelopeSchema.optional(),
96
- goal: optionalTrimmedString(5e3, 1),
97
- agentId: optionalTrimmedString(64, 1),
98
- sessionKey: optionalTrimmedString(300, 1),
93
+ goal: optionalTrimmedString(5e3),
94
+ agentId: optionalTrimmedString(64),
95
+ sessionKey: optionalTrimmedString(300),
96
+ maxRetries: z.number().int().min(0).max(10).optional(),
99
97
  waitForCompletion: z.boolean().optional(),
100
98
  source: z.object({
101
99
  kind: z.literal("cron").optional(),
102
- scheduleId: optionalTrimmedString(200, 1),
103
- fireId: optionalTrimmedString(200, 1),
100
+ scheduleId: optionalTrimmedString(200),
101
+ fireId: optionalTrimmedString(200),
104
102
  scheduledAtMs: z.number().int().nonnegative().optional()
105
- }).optional()
106
- });
107
- const CronPayloadSchema = z.union([
103
+ }).strict().optional()
104
+ }).strict();
105
+ const CronPayloadSchema = z.discriminatedUnion("kind", [
108
106
  CronSystemEventPayloadSchema,
109
107
  CronAgentTurnPayloadSchema,
110
108
  CronGoalContinuePayloadSchema,
111
109
  CronWorkflowRunPayloadSchema
112
110
  ]);
113
- const CronDeliverySchema = z.object({
114
- mode: CronDeliveryMode.default("none"),
115
- channel: optionalTrimmedString(32, 1),
116
- to: z.preprocess((v) => v === "" || v === null || v === void 0 ? void 0 : v, z.string().max(100).optional()),
117
- bestEffort: z.boolean().optional()
118
- });
111
+ const CronFailureAlertSchema = z.object({
112
+ after: z.number().int().min(1).optional(),
113
+ cooldownMs: z.number().int().nonnegative().optional(),
114
+ includeSkipped: z.boolean().optional(),
115
+ mode: z.enum(["announce", "webhook"]).optional(),
116
+ channel: optionalTrimmedString(32),
117
+ to: optionalTrimmedString(500),
118
+ accountId: optionalTrimmedString(100)
119
+ }).strict();
120
+ const JobStateSchema = z.object({
121
+ nextRunAtMs: z.number().int().nonnegative().optional(),
122
+ runningAtMs: z.number().int().nonnegative().optional(),
123
+ runningSessionKey: optionalTrimmedString(300),
124
+ lastRunAtMs: z.number().int().nonnegative().optional(),
125
+ lastRunStatus: z.enum([
126
+ "ok",
127
+ "error",
128
+ "skipped"
129
+ ]).optional(),
130
+ lastError: z.string().optional(),
131
+ lastDurationMs: z.number().int().nonnegative().optional(),
132
+ consecutiveErrors: z.number().int().nonnegative().optional(),
133
+ consecutiveSkipped: z.number().int().nonnegative().optional(),
134
+ lastDeliveryStatus: z.enum([
135
+ "delivered",
136
+ "not-delivered",
137
+ "unknown",
138
+ "not-requested"
139
+ ]).optional(),
140
+ lastDeliveryError: z.string().optional(),
141
+ lastFailureAlertAtMs: z.number().int().nonnegative().optional()
142
+ }).strict();
119
143
  const JobDataSchema = z.object({
120
- id: z.string().min(1).max(32),
121
- name: z.string().max(100).optional(),
122
- schedule: cronExpression,
144
+ id: nonEmptyString.max(64),
145
+ name: nonEmptyString.max(200),
146
+ description: z.string().max(2e3).optional(),
123
147
  enabled: z.boolean(),
124
- timezone: z.string().superRefine((val, ctx) => {
125
- if (val && !validTimezones.includes(val)) ctx.addIssue({
126
- code: z.ZodIssueCode.custom,
127
- message: `Invalid timezone: ${val}. Use IANA timezone names.`
128
- });
129
- }).optional(),
130
- maxRetries: z.number().int().min(0).max(10).default(3),
131
- timeout: z.number().int().min(1e3).max(72e5).default(18e4),
132
- created_at: z.string().datetime(),
133
- updated_at: z.string().datetime(),
134
- sessionTarget: z.enum(["main", "isolated"]).optional(),
135
- agentId: optionalTrimmedString(64, 1),
136
- workingDirectory: optionalJobWorkingDirectory,
148
+ deleteAfterRun: z.boolean().optional(),
149
+ createdAtMs: z.number().int().nonnegative(),
150
+ updatedAtMs: z.number().int().nonnegative(),
151
+ schedule: CronScheduleSchema,
152
+ sessionTarget: z.union([
153
+ z.literal("main"),
154
+ z.literal("isolated"),
155
+ z.literal("current"),
156
+ z.string().regex(/^session:.+$/)
157
+ ]),
158
+ wakeMode: z.enum(["now", "next-heartbeat"]),
159
+ agentId: optionalTrimmedString(64),
160
+ sessionKey: optionalTrimmedString(300),
161
+ workingDirectory: optionalTrimmedString(4096),
137
162
  payload: CronPayloadSchema,
138
163
  delivery: CronDeliverySchema.optional(),
139
- model: optionalTrimmedString(100, 1),
140
- state: z.any().optional()
164
+ failureAlert: z.union([z.literal(false), CronFailureAlertSchema]).optional(),
165
+ state: JobStateSchema.default({})
141
166
  }).strict();
142
- const AddJobRequestSchema = z.object({
143
- schedule: cronExpression,
144
- name: z.string().max(100).optional(),
145
- timezone: z.string().optional(),
146
- maxRetries: z.number().int().min(0).max(10).optional(),
147
- timeout: z.number().int().min(1e3).max(72e5).optional(),
148
- sessionTarget: z.enum(["main", "isolated"]).optional(),
149
- agentId: optionalJobAgentId,
150
- workingDirectory: optionalJobWorkingDirectory,
151
- payload: CronPayloadSchema,
152
- delivery: CronDeliverySchema.optional(),
153
- model: optionalTrimmedString(100, 1)
154
- });
155
- const UpdateJobRequestSchema = z.object({
156
- name: z.string().max(100).optional(),
157
- schedule: cronExpression.optional(),
158
- timezone: z.string().optional(),
159
- maxRetries: z.number().int().min(0).max(10).optional(),
160
- timeout: z.number().int().min(1e3).max(72e5).optional(),
167
+ const AddJobRequestSchema = JobDataSchema.omit({
168
+ id: true,
169
+ name: true,
170
+ enabled: true,
171
+ createdAtMs: true,
172
+ updatedAtMs: true,
173
+ sessionTarget: true,
174
+ wakeMode: true,
175
+ state: true
176
+ }).extend({
177
+ id: optionalTrimmedString(64),
178
+ name: optionalTrimmedString(200),
161
179
  enabled: z.boolean().optional(),
162
- sessionTarget: z.enum(["main", "isolated"]).optional(),
163
- agentId: patchJobAgentId,
164
- workingDirectory: patchJobWorkingDirectory,
165
- payload: CronPayloadSchema.optional(),
166
- delivery: CronDeliverySchema.optional(),
167
- model: optionalTrimmedString(100, 1)
168
- }).refine((data) => Object.keys(data).length > 0, { message: "At least one field must be provided for update" });
180
+ sessionTarget: JobDataSchema.shape.sessionTarget.optional(),
181
+ wakeMode: JobDataSchema.shape.wakeMode.optional(),
182
+ state: JobStateSchema.partial().optional()
183
+ });
184
+ const UpdateJobRequestSchema = JobDataSchema.omit({
185
+ id: true,
186
+ createdAtMs: true,
187
+ updatedAtMs: true
188
+ }).partial().refine((data) => Object.keys(data).length > 0, { message: "At least one field must be provided for update" });
169
189
  //#endregion
170
- export { AddJobRequestSchema, JobDataSchema, UpdateJobRequestSchema, cronExpression };
190
+ export { AddJobRequestSchema, CronDeliverySchema, CronFailureAlertSchema, CronPayloadSchema, CronScheduleSchema, JobDataSchema, JobStateSchema, UpdateJobRequestSchema };
171
191
 
172
192
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","names":[],"sources":["../../../src/cron/validation.ts"],"sourcesContent":["// Cron input validation using Zod\nimport { z } from 'zod';\nimport nodeCron from 'node-cron';\n\n// Custom cron validation\nconst cronExpression = z.string().superRefine((val, ctx) => {\n if (!nodeCron.validate(val)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Invalid cron expression: ${val}`,\n });\n }\n});\n\n// Valid timezones (subset of IANA timezones)\nconst validTimezones = [\n 'UTC',\n 'America/New_York',\n 'America/Chicago',\n 'America/Denver',\n 'America/Los_Angeles',\n 'America/Toronto',\n 'Europe/London',\n 'Europe/Paris',\n 'Europe/Berlin',\n 'Europe/Moscow',\n 'Asia/Tokyo',\n 'Asia/Shanghai',\n 'Asia/Hong_Kong',\n 'Asia/Singapore',\n 'Asia/Seoul',\n 'Asia/Dubai',\n 'Asia/Mumbai',\n 'Australia/Sydney',\n 'Pacific/Auckland',\n];\n\nconst CronDeliveryMode = z.enum(['none', 'announce', 'direct']);\n\n/** Treat `''` / `null` / whitespace-only as absent so optional fields do not fail `.min(1)` */\nfunction optionalTrimmedString(max: number, min = 1) {\n return z.preprocess((v) => {\n if (v === null || v === undefined) return undefined;\n if (typeof v !== 'string') return v;\n const t = v.trim();\n return t.length === 0 ? undefined : t;\n }, z.string().min(min).max(max).optional());\n}\n\n/** Optional agent id on create; empty string → undefined. */\nconst optionalJobAgentId = optionalTrimmedString(64, 1);\n\n/** Optional absolute workspace path on create; empty string → undefined. */\nconst optionalJobWorkingDirectory = optionalTrimmedString(4096, 1);\n\n/**\n * PATCH: set string, or `null` / empty to clear `workingDirectory` on the job.\n */\nconst patchJobWorkingDirectory = z.preprocess((v) => {\n if (v === null) return null;\n if (v === undefined) return undefined;\n if (typeof v !== 'string') return v;\n const t = v.trim();\n return t.length === 0 ? null : t;\n}, z.union([z.string().min(1).max(4096), z.null()]).optional());\n\n/**\n * PATCH: set string, or `null` / empty to clear `agentId` on the job.\n */\nconst patchJobAgentId = z.preprocess((v) => {\n if (v === null) return null;\n if (v === undefined) return undefined;\n if (typeof v !== 'string') return v;\n const t = v.trim();\n return t.length === 0 ? null : t;\n}, z.union([z.string().min(1).max(64), z.null()]).optional());\n\n// CronPayload validation\nconst CronSystemEventPayloadSchema = z.object({\n kind: z.literal('systemEvent'),\n text: z.string().min(1).max(50000),\n});\n\nconst CronAgentTurnPayloadSchema = z.object({\n kind: z.literal('agentTurn'),\n message: z.string().min(1).max(50000),\n model: optionalTrimmedString(100, 1),\n timeoutSeconds: z.number().int().min(10).max(3600).optional(),\n});\n\nconst CronGoalContinuePayloadSchema = z.object({\n kind: z.literal('goalContinue'),\n goalId: z.string().min(1).max(100),\n message: optionalTrimmedString(50000, 1),\n maxRetries: z.number().int().min(0).max(10).optional(),\n});\n\nconst WorkflowRunInputEnvelopeSchema = z.object({\n payload: z.unknown(),\n goal: optionalTrimmedString(5000, 1),\n variables: z.record(z.string(), z.unknown()).optional(),\n context: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst CronWorkflowRunPayloadSchema = z.object({\n kind: z.literal('workflowRun'),\n definitionId: z.string().min(1).max(200),\n input: z.unknown().optional(),\n inputEnvelope: WorkflowRunInputEnvelopeSchema.optional(),\n goal: optionalTrimmedString(5000, 1),\n agentId: optionalTrimmedString(64, 1),\n sessionKey: optionalTrimmedString(300, 1),\n waitForCompletion: z.boolean().optional(),\n source: z.object({\n kind: z.literal('cron').optional(),\n scheduleId: optionalTrimmedString(200, 1),\n fireId: optionalTrimmedString(200, 1),\n scheduledAtMs: z.number().int().nonnegative().optional(),\n }).optional(),\n});\n\nconst CronPayloadSchema = z.union([\n CronSystemEventPayloadSchema,\n CronAgentTurnPayloadSchema,\n CronGoalContinuePayloadSchema,\n CronWorkflowRunPayloadSchema,\n]);\n\n// CronDelivery validation — channel must match gateway UI / message bus ids (telegram, weixin, cli, local, …)\nconst CronDeliverySchema = z.object({\n mode: CronDeliveryMode.default('none'),\n channel: optionalTrimmedString(32, 1),\n to: z.preprocess(\n (v) => (v === '' || v === null || v === undefined ? undefined : v),\n z.string().max(100).optional(),\n ),\n bestEffort: z.boolean().optional(),\n});\n\nexport const JobDataSchema = z\n .object({\n id: z.string().min(1).max(32),\n name: z.string().max(100).optional(),\n schedule: cronExpression,\n enabled: z.boolean(),\n timezone: z.string().superRefine((val, ctx) => {\n if (val && !validTimezones.includes(val)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Invalid timezone: ${val}. Use IANA timezone names.`,\n });\n }\n }).optional(),\n maxRetries: z.number().int().min(0).max(10).default(3),\n timeout: z.number().int().min(1000).max(7_200_000).default(180000),\n created_at: z.string().datetime(),\n updated_at: z.string().datetime(),\n sessionTarget: z.enum(['main', 'isolated']).optional(),\n agentId: optionalTrimmedString(64, 1),\n workingDirectory: optionalJobWorkingDirectory,\n payload: CronPayloadSchema,\n delivery: CronDeliverySchema.optional(),\n model: optionalTrimmedString(100, 1),\n state: z.any().optional(),\n })\n .strict();\n\nexport const AddJobRequestSchema = z.object({\n schedule: cronExpression,\n name: z.string().max(100).optional(),\n timezone: z.string().optional(),\n maxRetries: z.number().int().min(0).max(10).optional(),\n timeout: z.number().int().min(1000).max(7_200_000).optional(),\n sessionTarget: z.enum(['main', 'isolated']).optional(),\n agentId: optionalJobAgentId,\n workingDirectory: optionalJobWorkingDirectory,\n payload: CronPayloadSchema,\n delivery: CronDeliverySchema.optional(),\n model: optionalTrimmedString(100, 1),\n});\n\nexport const UpdateJobRequestSchema = z.object({\n name: z.string().max(100).optional(),\n schedule: cronExpression.optional(),\n timezone: z.string().optional(),\n maxRetries: z.number().int().min(0).max(10).optional(),\n timeout: z.number().int().min(1000).max(7_200_000).optional(),\n enabled: z.boolean().optional(),\n sessionTarget: z.enum(['main', 'isolated']).optional(),\n agentId: patchJobAgentId,\n workingDirectory: patchJobWorkingDirectory,\n payload: CronPayloadSchema.optional(),\n delivery: CronDeliverySchema.optional(),\n model: optionalTrimmedString(100, 1),\n}).refine(\n (data) => Object.keys(data).length > 0,\n { message: 'At least one field must be provided for update' }\n);\n\nexport type ValidatedJobData = z.infer<typeof JobDataSchema>;\nexport type ValidatedAddJobRequest = z.infer<typeof AddJobRequestSchema>;\nexport type ValidatedUpdateJobRequest = z.infer<typeof UpdateJobRequestSchema>;\nexport type ValidatedCronPayload = z.infer<typeof CronPayloadSchema>;\nexport type ValidatedCronDelivery = z.infer<typeof CronDeliverySchema>;\n\n// Re-export common validation helpers\nexport { cronExpression };\n"],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","names":[],"sources":["../../../src/cron/validation.ts"],"sourcesContent":["import { CronExpressionParser } from 'cron-parser';\nimport { z } from 'zod';\n\nconst nonEmptyString = z.string().trim().min(1);\n\nconst optionalTrimmedString = (max: number) =>\n z.preprocess((v) => {\n if (v === undefined) return undefined;\n if (v === null) return v;\n if (typeof v !== 'string') return v;\n const t = v.trim();\n return t.length === 0 ? undefined : t;\n }, z.string().min(1).max(max).optional());\n\nexport const CronScheduleSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('at'),\n at: nonEmptyString,\n }).strict(),\n z.object({\n kind: z.literal('every'),\n everyMs: z.number().int().min(1),\n anchorMs: z.number().int().nonnegative().optional(),\n }).strict(),\n z.object({\n kind: z.literal('cron'),\n expr: nonEmptyString.superRefine((val, ctx) => {\n try {\n CronExpressionParser.parse(val);\n } catch {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Invalid cron expression: ${val}`,\n });\n }\n }),\n tz: optionalTrimmedString(100),\n staggerMs: z.number().int().nonnegative().optional(),\n }).strict(),\n]);\n\nexport const CronDeliverySchema = z.discriminatedUnion('mode', [\n z.object({ mode: z.literal('none') }).strict(),\n z.object({\n mode: z.literal('announce'),\n channel: optionalTrimmedString(32),\n to: optionalTrimmedString(200),\n accountId: optionalTrimmedString(100),\n threadId: z.union([z.string(), z.number()]).optional(),\n bestEffort: z.boolean().optional(),\n completionDestination: z.object({\n mode: z.literal('webhook'),\n to: nonEmptyString,\n }).strict().optional(),\n failureDestination: z.object({\n mode: z.enum(['announce', 'webhook']).optional(),\n channel: optionalTrimmedString(32),\n to: optionalTrimmedString(500),\n accountId: optionalTrimmedString(100),\n }).strict().optional(),\n }).strict(),\n z.object({\n mode: z.literal('webhook'),\n to: nonEmptyString,\n bestEffort: z.boolean().optional(),\n }).strict(),\n]);\n\nconst CronSystemEventPayloadSchema = z.object({\n kind: z.literal('systemEvent'),\n text: z.string().min(1).max(50000),\n}).strict();\n\nconst CronAgentTurnPayloadSchema = z.object({\n kind: z.literal('agentTurn'),\n message: z.string().min(1).max(50000),\n model: optionalTrimmedString(100),\n thinking: optionalTrimmedString(50),\n toolsAllow: z.array(z.string().trim().min(1)).optional(),\n timeoutSeconds: z.number().int().min(1).max(86400).optional(),\n}).strict();\n\nconst CronGoalContinuePayloadSchema = z.object({\n kind: z.literal('goalContinue'),\n goalId: nonEmptyString.max(100),\n message: optionalTrimmedString(50000),\n maxRetries: z.number().int().min(0).max(10).optional(),\n}).strict();\n\nconst WorkflowRunInputEnvelopeSchema = z.object({\n payload: z.unknown(),\n goal: optionalTrimmedString(5000),\n variables: z.record(z.string(), z.unknown()).optional(),\n context: z.record(z.string(), z.unknown()).optional(),\n}).strict();\n\nconst CronWorkflowRunPayloadSchema = z.object({\n kind: z.literal('workflowRun'),\n definitionId: nonEmptyString.max(200),\n input: z.unknown().optional(),\n inputEnvelope: WorkflowRunInputEnvelopeSchema.optional(),\n goal: optionalTrimmedString(5000),\n agentId: optionalTrimmedString(64),\n sessionKey: optionalTrimmedString(300),\n maxRetries: z.number().int().min(0).max(10).optional(),\n waitForCompletion: z.boolean().optional(),\n source: z.object({\n kind: z.literal('cron').optional(),\n scheduleId: optionalTrimmedString(200),\n fireId: optionalTrimmedString(200),\n scheduledAtMs: z.number().int().nonnegative().optional(),\n }).strict().optional(),\n}).strict();\n\nexport const CronPayloadSchema = z.discriminatedUnion('kind', [\n CronSystemEventPayloadSchema,\n CronAgentTurnPayloadSchema,\n CronGoalContinuePayloadSchema,\n CronWorkflowRunPayloadSchema,\n]);\n\nexport const CronFailureAlertSchema = z.object({\n after: z.number().int().min(1).optional(),\n cooldownMs: z.number().int().nonnegative().optional(),\n includeSkipped: z.boolean().optional(),\n mode: z.enum(['announce', 'webhook']).optional(),\n channel: optionalTrimmedString(32),\n to: optionalTrimmedString(500),\n accountId: optionalTrimmedString(100),\n}).strict();\n\nexport const JobStateSchema = z.object({\n nextRunAtMs: z.number().int().nonnegative().optional(),\n runningAtMs: z.number().int().nonnegative().optional(),\n runningSessionKey: optionalTrimmedString(300),\n lastRunAtMs: z.number().int().nonnegative().optional(),\n lastRunStatus: z.enum(['ok', 'error', 'skipped']).optional(),\n lastError: z.string().optional(),\n lastDurationMs: z.number().int().nonnegative().optional(),\n consecutiveErrors: z.number().int().nonnegative().optional(),\n consecutiveSkipped: z.number().int().nonnegative().optional(),\n lastDeliveryStatus: z.enum(['delivered', 'not-delivered', 'unknown', 'not-requested']).optional(),\n lastDeliveryError: z.string().optional(),\n lastFailureAlertAtMs: z.number().int().nonnegative().optional(),\n}).strict();\n\nexport const JobDataSchema = z.object({\n id: nonEmptyString.max(64),\n name: nonEmptyString.max(200),\n description: z.string().max(2000).optional(),\n enabled: z.boolean(),\n deleteAfterRun: z.boolean().optional(),\n createdAtMs: z.number().int().nonnegative(),\n updatedAtMs: z.number().int().nonnegative(),\n schedule: CronScheduleSchema,\n sessionTarget: z.union([\n z.literal('main'),\n z.literal('isolated'),\n z.literal('current'),\n z.string().regex(/^session:.+$/),\n ]),\n wakeMode: z.enum(['now', 'next-heartbeat']),\n agentId: optionalTrimmedString(64),\n sessionKey: optionalTrimmedString(300),\n workingDirectory: optionalTrimmedString(4096),\n payload: CronPayloadSchema,\n delivery: CronDeliverySchema.optional(),\n failureAlert: z.union([z.literal(false), CronFailureAlertSchema]).optional(),\n state: JobStateSchema.default({}),\n}).strict();\n\nexport const AddJobRequestSchema = JobDataSchema.omit({\n id: true,\n name: true,\n enabled: true,\n createdAtMs: true,\n updatedAtMs: true,\n sessionTarget: true,\n wakeMode: true,\n state: true,\n}).extend({\n id: optionalTrimmedString(64),\n name: optionalTrimmedString(200),\n enabled: z.boolean().optional(),\n sessionTarget: JobDataSchema.shape.sessionTarget.optional(),\n wakeMode: JobDataSchema.shape.wakeMode.optional(),\n state: JobStateSchema.partial().optional(),\n});\n\nexport const UpdateJobRequestSchema = JobDataSchema.omit({\n id: true,\n createdAtMs: true,\n updatedAtMs: true,\n}).partial().refine(\n (data) => Object.keys(data).length > 0,\n { message: 'At least one field must be provided for update' },\n);\n\nexport type ValidatedJobData = z.infer<typeof JobDataSchema>;\nexport type ValidatedAddJobRequest = z.infer<typeof AddJobRequestSchema>;\nexport type ValidatedUpdateJobRequest = z.infer<typeof UpdateJobRequestSchema>;\nexport type ValidatedCronPayload = z.infer<typeof CronPayloadSchema>;\nexport type ValidatedCronDelivery = z.infer<typeof CronDeliverySchema>;\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { renderWorkflowText } from "../agent/workflow/snapshot.js";
2
+ import { runViewToSnapshot } from "../workflows/service/run-view-to-snapshot.js";
2
3
  import { isTerminalWorkflowRunStatus } from "../workflows/domain/run.js";
3
4
  import "../workflows/domain/index.js";
4
- import { runViewToSnapshot } from "../workflows/service/run-view-to-snapshot.js";
5
5
  //#region src/cron/workflow-run-completion.ts
6
6
  /** Default wait budget for cron workflow runs (35 minutes). */
7
7
  const DEFAULT_WORKFLOW_CRON_WAIT_MS = 2100 * 1e3;
@@ -1,5 +1,5 @@
1
- import os from "node:os";
2
1
  import path from "node:path";
2
+ import os from "node:os";
3
3
  //#region src/daemon/constants.ts
4
4
  /**
5
5
  * Daemon Constants - Service labels, paths, and configuration values
@@ -2,9 +2,9 @@ import { PACKAGE_VERSION, init_package_version } from "../package-version.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
4
  import { SERVICE_VERSION_ENV_KEY, formatGatewayServiceDescription } from "./constants.js";
5
- import { homedir } from "node:os";
6
- import path from "node:path";
7
5
  import { existsSync } from "node:fs";
6
+ import path from "node:path";
7
+ import { homedir } from "node:os";
8
8
  //#region src/daemon/install-plan.ts
9
9
  /**
10
10
  * Install Plan Builder - Build gateway installation configuration
@@ -1,10 +1,10 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { resolveGatewayLaunchAgentLabel, resolveLaunchAgentPlistPath as resolveLaunchAgentPlistPath$1 } from "./constants.js";
4
- import os from "node:os";
5
- import path from "node:path";
6
4
  import { existsSync } from "node:fs";
7
5
  import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
6
+ import path from "node:path";
7
+ import os from "node:os";
8
8
  import { spawn, spawnSync } from "node:child_process";
9
9
  //#region src/daemon/launchd.ts
10
10
  /**
@@ -1,9 +1,9 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { resolveGatewayWindowsTaskName } from "./constants.js";
4
- import os from "node:os";
5
- import path from "node:path";
6
4
  import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
5
+ import path from "node:path";
6
+ import os from "node:os";
7
7
  import { spawn, spawnSync } from "node:child_process";
8
8
  //#region src/daemon/schtasks.ts
9
9
  /**
@@ -1,10 +1,10 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { resolveGatewaySystemdServiceName, resolveSystemdUnitPath } from "./constants.js";
4
- import os from "node:os";
5
- import path from "node:path";
6
4
  import { existsSync } from "node:fs";
7
5
  import { access, constants as constants$1, mkdir, readFile, rm, writeFile } from "node:fs/promises";
6
+ import path from "node:path";
7
+ import os from "node:os";
8
8
  import { spawn, spawnSync } from "node:child_process";
9
9
  //#region src/daemon/systemd.ts
10
10
  /**
@@ -1,8 +1,8 @@
1
1
  import { init_paths, resolveBundledExtensionsDir, resolveExtensionsDir } from "../config/paths.js";
2
2
  import { isRecord } from "../utils/is-record.js";
3
3
  import { normalizeConfiguredMcpServers } from "../config/mcp-config-normalize.js";
4
- import { join } from "node:path";
5
4
  import { existsSync, readFileSync, readdirSync } from "node:fs";
5
+ import { join } from "node:path";
6
6
  //#region src/extensions/bundle-mcp.ts
7
7
  init_paths();
8
8
  function extractMcpServerMap(raw) {
@@ -1,11 +1,11 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_agent_scope, resolveDefaultAgentId } from "../agent/agent-scope.js";
3
+ import { init_paths, resolveBundledExtensionsDir, resolveExtensionsDir, resolveWorkspaceExtensionsDir } from "../config/paths.js";
3
4
  import { createLogger } from "../utils/logger/index.js";
4
5
  import { init_logger } from "../utils/logger.js";
5
- import { init_paths, resolveBundledExtensionsDir, resolveExtensionsDir, resolveWorkspaceExtensionsDir } from "../config/paths.js";
6
6
  import { init_normalize_manifest, normalizeExtensionManifest } from "./normalize-manifest.js";
7
- import { join } from "path";
8
7
  import { existsSync, readFileSync, readdirSync } from "fs";
8
+ import { join } from "path";
9
9
  //#region src/extensions/discover-extensions.ts
10
10
  /**
11
11
  * Filesystem-only extension discovery (manifest parse, no module load).
@@ -1,7 +1,7 @@
1
1
  import { init_paths, resolveExtensionsDir } from "../config/paths.js";
2
2
  import { getExtensionLockfileManager } from "./lockfile.js";
3
- import { join } from "path";
4
3
  import { existsSync } from "fs";
4
+ import { join } from "path";
5
5
  import { readFile, readdir } from "fs/promises";
6
6
  //#region src/extensions/health.ts
7
7
  init_paths();
@@ -1,13 +1,13 @@
1
1
  import { PACKAGE_VERSION, init_package_version } from "../package-version.js";
2
+ import { init_paths, resolveBundledExtensionsDir, resolveExtensionsDir as resolveExtensionsDir$1 } from "../config/paths.js";
2
3
  import { createLogger } from "../utils/logger/index.js";
3
4
  import { init_logger } from "../utils/logger.js";
4
- import { init_paths, resolveBundledExtensionsDir, resolveExtensionsDir as resolveExtensionsDir$1 } from "../config/paths.js";
5
5
  import { checkEngineCompatibility } from "./engine-check.js";
6
6
  import { collectExtensionPackageDependencyIssues } from "./package-contract.js";
7
7
  import { MAX_EXTENSION_STORE_ZIP_BYTES } from "./store-zip-limits.js";
8
- import { dirname, isAbsolute, join, resolve, sep } from "path";
9
8
  import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, writeFileSync } from "fs";
10
9
  import { execSync } from "child_process";
10
+ import { dirname, isAbsolute, join, resolve, sep } from "path";
11
11
  import { tmpdir } from "os";
12
12
  import AdmZip from "adm-zip";
13
13
  //#region src/extensions/install.ts
@@ -1,8 +1,8 @@
1
1
  import { PACKAGE_VERSION, init_package_version } from "../package-version.js";
2
2
  import { init_agent_scope, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
3
+ import { init_paths, resolveBundledExtensionsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveWorkspaceExtensionsDir } from "../config/paths.js";
3
4
  import { createLogger, createServiceLogger } from "../utils/logger/index.js";
4
5
  import { init_logger } from "../utils/logger.js";
5
- import { init_paths, resolveBundledExtensionsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveWorkspaceExtensionsDir } from "../config/paths.js";
6
6
  import { init_normalize_manifest, normalizeExtensionManifest } from "./normalize-manifest.js";
7
7
  import { areExtensionsGloballyDisabled, discoverExtensionsFromDisk, init_discover_extensions } from "./discover-extensions.js";
8
8
  import { ManifestRegistry, init_manifest_registry } from "./manifest-registry.js";
@@ -18,8 +18,8 @@ import { validateMediaUnderstandingProviderContracts } from "./media-provider-co
18
18
  import { DEFAULT_SECURITY_CONFIG, checkExtensionPathSafety, isExtensionAllowed, logSecurityIssue, provenanceTracker } from "./security.js";
19
19
  import { getSlotRegistry } from "./slots.js";
20
20
  import { getExtensionCache, getExtensionDiagnostics } from "./diagnostics.js";
21
- import { dirname, isAbsolute, join } from "path";
22
21
  import { existsSync, readFileSync } from "fs";
22
+ import { dirname, isAbsolute, join } from "path";
23
23
  import { fileURLToPath, pathToFileURL } from "node:url";
24
24
  import { createJiti } from "jiti";
25
25
  //#region src/extensions/loader.ts
@@ -1,9 +1,9 @@
1
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
2
+ import { init_paths, resolveExtensionsDir, resolveExtensionsLockPath } from "../config/paths.js";
1
3
  import { createLogger } from "../utils/logger/index.js";
2
4
  import { init_logger } from "../utils/logger.js";
3
- import { init_paths, resolveExtensionsDir, resolveExtensionsLockPath } from "../config/paths.js";
4
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
5
- import { dirname, join } from "path";
6
5
  import { existsSync } from "fs";
6
+ import { dirname, join } from "path";
7
7
  import { mkdir, readFile } from "fs/promises";
8
8
  import { createHash } from "crypto";
9
9
  //#region src/extensions/lockfile.ts
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
- import * as path$1 from "path";
4
3
  import * as fs from "fs";
4
+ import * as path$1 from "path";
5
5
  //#region src/extensions/security.ts
6
6
  /**
7
7
  * Extension Security Module
@@ -1,13 +1,13 @@
1
+ import { init_paths, resolveBundledExtensionsDir, resolveExtensionsDir } from "../config/paths.js";
1
2
  import { createLogger } from "../utils/logger/index.js";
2
3
  import { init_logger } from "../utils/logger.js";
3
- import { init_paths, resolveBundledExtensionsDir, resolveExtensionsDir } from "../config/paths.js";
4
4
  import { init_loader, loadConfig } from "../config/loader.js";
5
5
  import { getExtensionLockfileManager } from "./lockfile.js";
6
6
  import { installExtensionFromStoreZip, installFromNpm } from "./install.js";
7
7
  import { findExtension } from "./marketplace.js";
8
8
  import { downloadExtensionStoreZipBuffer, resolveExtensionZipDownloadUrl, resolveExtensionsStoreBaseUrl } from "../agent/skills/marketplace/adapters/store/store-api-client.js";
9
- import { join } from "node:path";
10
9
  import { existsSync, readFileSync, readdirSync, rmSync } from "node:fs";
10
+ import { join } from "node:path";
11
11
  import semver from "semver";
12
12
  //#region src/extensions/update.ts
13
13
  /**
@@ -1,14 +1,14 @@
1
1
  import { DEFAULT_AGENT_ID, init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
2
- import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
3
2
  import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
3
+ import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
4
4
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES } from "../agent/context/workspace.js";
5
5
  import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
6
6
  import { applyAgentConfig, findAgentEntryIndex, pruneAgentConfig, removeAgentDirsFromDisk } from "../commands/agents.config.js";
7
7
  import { resolveEffectiveTypedModels } from "../config/agent-typed-models.js";
8
8
  import { GATEWAY_BUILTIN_TOOL_IDS } from "./agent-builtin-tools.js";
9
9
  import { seedAgentProfileMarkdownFiles } from "../agent/context/workspace-seed.js";
10
- import { join, resolve } from "node:path";
11
10
  import { cp, mkdir, readFile, readdir, realpath, stat, unlink, writeFile } from "node:fs/promises";
11
+ import { join, resolve } from "node:path";
12
12
  //#region src/gateway/agents-admin.ts
13
13
  /**
14
14
  * Gateway REST helpers for multi-agent management.
@@ -13,6 +13,7 @@ export declare class ChatStreamMapper {
13
13
  private readonly opts;
14
14
  private assistantIndex;
15
15
  private currentAssistantMessageId;
16
+ private lastAssistantMessageId;
16
17
  private currentAssistantText;
17
18
  private toolCallToMessageId;
18
19
  private started;
@@ -2,6 +2,7 @@
2
2
  var ChatStreamMapper = class {
3
3
  assistantIndex = 0;
4
4
  currentAssistantMessageId;
5
+ lastAssistantMessageId;
5
6
  currentAssistantText = "";
6
7
  toolCallToMessageId = /* @__PURE__ */ new Map();
7
8
  started = false;
@@ -13,7 +14,7 @@ var ChatStreamMapper = class {
13
14
  const event = input;
14
15
  switch (event.type) {
15
16
  case "agent_start": return this.start();
16
- case "agent_end": return this.end("success");
17
+ case "agent_end": return [];
17
18
  case "message_start": return this.mapMessageStart(event.message);
18
19
  case "message_update": return this.mapMessageUpdate(event);
19
20
  case "message_end": return this.mapMessageEnd(event.message);
@@ -38,7 +39,9 @@ var ChatStreamMapper = class {
38
39
  case "tts_audio": return [this.make("tts_audio", {
39
40
  uri: String(event.uri ?? ""),
40
41
  mimeType: String(event.mimeType ?? "audio/mpeg"),
41
- name: String(event.name ?? "voice.mp3")
42
+ name: String(event.name ?? "voice.mp3"),
43
+ attachTo: "last_assistant",
44
+ ...this.lastAssistantMessageId ? { messageId: this.lastAssistantMessageId } : {}
42
45
  })];
43
46
  case "clarify_request": return [this.make("clarify_request", {
44
47
  requestId: String(event.requestId ?? ""),
@@ -120,6 +123,7 @@ var ChatStreamMapper = class {
120
123
  messageId,
121
124
  usage: extractUsage(message)
122
125
  }));
126
+ this.lastAssistantMessageId = messageId;
123
127
  this.currentAssistantMessageId = void 0;
124
128
  this.currentAssistantText = "";
125
129
  return events;