@xopcai/xopc 0.0.110 → 0.0.112

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 (583) hide show
  1. package/README.md +46 -4
  2. package/README.zh-CN.md +46 -4
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  5. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  6. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
  7. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  8. package/dist/extensions/telegram/src/plugin.js +1 -1
  9. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  10. package/dist/extensions/telegram/src/update-offset-store.js +1 -1
  11. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  12. package/dist/extensions/telegram/xopc.extension.json +1 -1
  13. package/dist/extensions/weixin/src/api/api.js +2 -2
  14. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  15. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  16. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  17. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  18. package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
  19. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  20. package/dist/extensions/weixin/src/plugin.js +1 -1
  21. package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
  22. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  23. package/dist/gateway/static/root/apple-touch-icon.png +0 -0
  24. package/dist/gateway/static/root/assets/Combination-BzaXOLd9.js +41 -0
  25. package/dist/gateway/static/root/assets/agent-avatar-dicebear-EhRp-ZMa.js +1 -0
  26. package/dist/gateway/static/root/assets/agent-browser-settings-page-H4foVCiS.js +6 -0
  27. package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-DDNw2oNU.js +1 -0
  28. package/dist/gateway/static/root/assets/agents-E_X2kzS1.js +71 -0
  29. package/dist/gateway/static/root/assets/app-management-settings-panel-BIy7KEsM.js +1 -0
  30. package/dist/gateway/static/root/assets/appearance-settings-DGQG8NwA.js +1 -0
  31. package/dist/gateway/static/root/assets/apps-page-BZLvInLr.js +1 -0
  32. package/dist/gateway/static/root/assets/archive-plugin-uuQPupqx.js +1 -0
  33. package/dist/gateway/static/root/assets/attachment-load-DBkv0cAv.js +2 -0
  34. package/dist/gateway/static/root/assets/{attachment-preview-renderer-CybMSIoS.js → attachment-preview-renderer-DonnL2dL.js} +1 -1
  35. package/dist/gateway/static/root/assets/binary-plugins-DxxN_VAR.js +2 -0
  36. package/dist/gateway/static/root/assets/block-editor-CwnUlRmO.js +180 -0
  37. package/dist/gateway/static/root/assets/channels-settings-BHvUKlzw.js +1 -0
  38. package/dist/gateway/static/root/assets/cn-JdwAhgNB.js +1 -0
  39. package/dist/gateway/static/root/assets/code-editor-dZTY2dRW.js +1 -0
  40. package/dist/gateway/static/root/assets/config-api-BD-NcD5d.js +3 -0
  41. package/dist/gateway/static/root/assets/config-reload-event-Bjh2zoKp.js +1 -0
  42. package/dist/gateway/static/root/assets/connectors-settings-VBzXcEXL.js +2 -0
  43. package/dist/gateway/static/root/assets/cron-api-C5DoipZA.js +1 -0
  44. package/dist/gateway/static/root/assets/cron-dreaming-jobs-nCMWCf0p.js +1 -0
  45. package/dist/gateway/static/root/assets/cron-page-BLTpdm34.js +3 -0
  46. package/dist/gateway/static/root/assets/dist-By6Rh2ee.js +1 -0
  47. package/dist/gateway/static/root/assets/dist-CkobR7mk.js +1 -0
  48. package/dist/gateway/static/root/assets/dist-DokQNVMQ.js +1 -0
  49. package/dist/gateway/static/root/assets/dreaming-scene-BHMRVEUS.js +4585 -0
  50. package/dist/gateway/static/root/assets/dreaming-settings-DSVhXTPq.js +1 -0
  51. package/dist/gateway/static/root/assets/extension-debug-page-BDHA9o_e.js +1 -0
  52. package/dist/gateway/static/root/assets/{extension-page-W1wiG38F.js → extension-page-DmDLVSPE.js} +1 -1
  53. package/dist/gateway/static/root/assets/extension-settings-page-1124aHw_.js +1 -0
  54. package/dist/gateway/static/root/assets/fetch-DOe56Wmy.js +1 -0
  55. package/dist/gateway/static/root/assets/format-cron-label-BsotZDO5.js +2 -0
  56. package/dist/gateway/static/root/assets/format-interval-label-tsMSvBSR.js +1 -0
  57. package/dist/gateway/static/root/assets/gateway-config-api-CsD4FC9D.js +1 -0
  58. package/dist/gateway/static/root/assets/gateway-settings-HQ8FBhY2.js +1 -0
  59. package/dist/gateway/static/root/assets/gateway-startup-retry-C1zg7pH3.js +1 -0
  60. package/dist/gateway/static/root/assets/goal-detail-page-BG3Onph0.js +1 -0
  61. package/dist/gateway/static/root/assets/goals-page-DgeKn8zL.js +2 -0
  62. package/dist/gateway/static/root/assets/goals-settings-B5nI6lgz.js +1 -0
  63. package/dist/gateway/static/root/assets/heartbeat-config-api-CIv42nJD.js +1 -0
  64. package/dist/gateway/static/root/assets/heartbeat-settings-DFcVuJ3M.js +1 -0
  65. package/dist/gateway/static/root/assets/html-workspace-editor-CQLWDiwE.js +1 -0
  66. package/dist/gateway/static/root/assets/index-5A_ZaABy.css +1 -0
  67. package/dist/gateway/static/root/assets/index-BTmbp2AU.js +121 -0
  68. package/dist/gateway/static/root/assets/interval-presets-DGP3S7OB.js +1 -0
  69. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-fETaDYQP.js +1 -0
  70. package/dist/gateway/static/root/assets/locale-store-DjbfSsfA.js +1 -0
  71. package/dist/gateway/static/root/assets/logs-page-B1-b27lK.js +2 -0
  72. package/dist/gateway/static/root/assets/markdown-editor-AssmZFx4.js +2 -0
  73. package/dist/gateway/static/root/assets/markdown-split-CgeBJMOD.js +1 -0
  74. package/dist/gateway/static/root/assets/media-plugins-C30GzlV2.js +1 -0
  75. package/dist/gateway/static/root/assets/mermaid-render-BbqDc_LQ.js +134 -0
  76. package/dist/gateway/static/root/assets/messages-BUUfPaZ9.js +3 -0
  77. package/dist/gateway/static/root/assets/middleware-Pd0e8Igk.js +1 -0
  78. package/dist/gateway/static/root/assets/models-hub-panel-DPcTS1-u.js +2 -0
  79. package/dist/gateway/static/root/assets/note-detail-page-xeGb4owe.js +2 -0
  80. package/dist/gateway/static/root/assets/note-image-lightbox-t1g0qZYh.js +1 -0
  81. package/dist/gateway/static/root/assets/note-time-hm6JO_Wi.js +1 -0
  82. package/dist/gateway/static/root/assets/notes-page-C_TdnKBe.js +1 -0
  83. package/dist/gateway/static/root/assets/preview-open-alternatives-DeWp9x5g.js +1 -0
  84. package/dist/gateway/static/root/assets/remote-access-hub-BtkPmJIN.js +1 -0
  85. package/dist/gateway/static/root/assets/save-bar-controls-BOaAOJI3.js +1 -0
  86. package/dist/gateway/static/root/assets/schedule-field-BLWLKqgw.js +1 -0
  87. package/dist/gateway/static/root/assets/schema-form-plqRFYT8.js +1 -0
  88. package/dist/gateway/static/root/assets/sessions-page-DOUjxzJm.js +1 -0
  89. package/dist/gateway/static/root/assets/settings-advanced-gate-qK_bnTrw.js +1 -0
  90. package/dist/gateway/static/root/assets/settings-collapsible-section-BP5zRrDI.js +1 -0
  91. package/dist/gateway/static/root/assets/settings-form-section-Bv8MZplG.js +1 -0
  92. package/dist/gateway/static/root/assets/settings-page-DmDfE1ww.js +1 -0
  93. package/dist/gateway/static/root/assets/setup-status-panel-BEFwNcIZ.js +1 -0
  94. package/dist/gateway/static/root/assets/share-preview-page-4OX1YCgp.js +2 -0
  95. package/dist/gateway/static/root/assets/shares-settings-CbKmJZot.js +1 -0
  96. package/dist/gateway/static/root/assets/skill-reload-api-YdtnUHtK.js +1 -0
  97. package/dist/gateway/static/root/assets/skills-page-DwW1IzQ0.js +2 -0
  98. package/dist/gateway/static/root/assets/system-settings-panel-CGy4f_s2.js +1 -0
  99. package/dist/gateway/static/root/assets/theme-store-CD2wtgZV.js +1 -0
  100. package/dist/gateway/static/root/assets/use-agent-defaults-form-BMuMvzl_.js +1 -0
  101. package/dist/gateway/static/root/assets/use-blob-object-url-D4BFuzZB.js +1 -0
  102. package/dist/gateway/static/root/assets/use-channel-catalog-CjGHnDvN.js +1 -0
  103. package/dist/gateway/static/root/assets/use-settings-tab-guard-BMMFa0oA.js +1 -0
  104. package/dist/gateway/static/root/assets/vendor-codemirror-CNP1wPe7.js +45 -0
  105. package/dist/gateway/static/root/assets/voice-api-key-field-DnRbhMNq.js +1 -0
  106. package/dist/gateway/static/root/assets/voice-player-store-D5vzWwls.js +1 -0
  107. package/dist/gateway/static/root/assets/{workflow-page.utils-EYg_xBQS.js → workflow-page.utils-tjGpRVnw.js} +1 -1
  108. package/dist/gateway/static/root/assets/workflows-page-DqqHKGj2.js +18 -0
  109. package/dist/gateway/static/root/favicon-16x16.png +0 -0
  110. package/dist/gateway/static/root/favicon-32x32.png +0 -0
  111. package/dist/gateway/static/root/favicon.ico +0 -0
  112. package/dist/gateway/static/root/favicon.svg +14 -12
  113. package/dist/gateway/static/root/index.html +18 -15
  114. package/dist/package.js +1 -1
  115. package/dist/src/agent/agent-manager.d.ts +28 -2
  116. package/dist/src/agent/agent-manager.js +82 -11
  117. package/dist/src/agent/agent-manager.js.map +1 -1
  118. package/dist/src/agent/agent-scope.js +1 -1
  119. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
  120. package/dist/src/agent/context/workspace-seed.js +2 -2
  121. package/dist/src/agent/context/workspace-state.js +1 -1
  122. package/dist/src/agent/context/workspace.js +1 -1
  123. package/dist/src/agent/goals/checklist-judge.d.ts +5 -0
  124. package/dist/src/agent/goals/checklist-judge.js +26 -2
  125. package/dist/src/agent/goals/checklist-judge.js.map +1 -1
  126. package/dist/src/agent/goals/evaluate-turn.d.ts +5 -1
  127. package/dist/src/agent/goals/evaluate-turn.js +29 -3
  128. package/dist/src/agent/goals/evaluate-turn.js.map +1 -1
  129. package/dist/src/agent/goals/goal-locale.d.ts +0 -2
  130. package/dist/src/agent/goals/goal-locale.js +3 -16
  131. package/dist/src/agent/goals/goal-locale.js.map +1 -1
  132. package/dist/src/agent/goals/persistent-goal-service.d.ts +9 -0
  133. package/dist/src/agent/goals/persistent-goal-service.js +3 -2
  134. package/dist/src/agent/goals/persistent-goal-service.js.map +1 -1
  135. package/dist/src/agent/goals/post-turn.d.ts +7 -0
  136. package/dist/src/agent/goals/post-turn.js +70 -25
  137. package/dist/src/agent/goals/post-turn.js.map +1 -1
  138. package/dist/src/agent/goals/state.d.ts +0 -5
  139. package/dist/src/agent/goals/state.js +1 -96
  140. package/dist/src/agent/goals/state.js.map +1 -1
  141. package/dist/src/agent/image/load-image-media.js +2 -2
  142. package/dist/src/agent/ipc/inbox.js +3 -3
  143. package/dist/src/agent/ipc/socket.js +1 -1
  144. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  145. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  146. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  147. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  148. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  149. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  150. package/dist/src/agent/memory/dreaming/events.js +1 -1
  151. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  152. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  153. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  154. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  155. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  156. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  157. package/dist/src/agent/memory/memory-flush.js +1 -1
  158. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  159. package/dist/src/agent/messaging/command-handler.d.ts +7 -0
  160. package/dist/src/agent/messaging/command-handler.js +11 -2
  161. package/dist/src/agent/messaging/command-handler.js.map +1 -1
  162. package/dist/src/agent/models/manager.js +1 -1
  163. package/dist/src/agent/prompt/memory/index.js +1 -1
  164. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  165. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  166. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  167. package/dist/src/agent/sandbox/path-policy.js +2 -2
  168. package/dist/src/agent/service/direct-turn-helpers.d.ts +2 -0
  169. package/dist/src/agent/service/direct-turn-helpers.js +3 -2
  170. package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
  171. package/dist/src/agent/service/process-direct-streaming.js +10 -1
  172. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  173. package/dist/src/agent/service/reconcile-dreaming-cron.js +8 -5
  174. package/dist/src/agent/service/reconcile-dreaming-cron.js.map +1 -1
  175. package/dist/src/agent/service.d.ts +2 -1
  176. package/dist/src/agent/service.js +30 -6
  177. package/dist/src/agent/service.js.map +1 -1
  178. package/dist/src/agent/service.types.d.ts +12 -0
  179. package/dist/src/agent/session/session-config-service.d.ts +8 -0
  180. package/dist/src/agent/session/session-config-service.js +20 -0
  181. package/dist/src/agent/session/session-config-service.js.map +1 -1
  182. package/dist/src/agent/session/session-inspector.js +1 -1
  183. package/dist/src/agent/skills/config.js +2 -2
  184. package/dist/src/agent/skills/filesystem-watcher.d.ts +19 -0
  185. package/dist/src/agent/skills/filesystem-watcher.js +182 -0
  186. package/dist/src/agent/skills/filesystem-watcher.js.map +1 -0
  187. package/dist/src/agent/skills/hub-hash.js +2 -2
  188. package/dist/src/agent/skills/hub-lock.js +1 -1
  189. package/dist/src/agent/skills/hub-pull.js +30 -36
  190. package/dist/src/agent/skills/hub-pull.js.map +1 -1
  191. package/dist/src/agent/skills/index.js +82 -38
  192. package/dist/src/agent/skills/index.js.map +1 -1
  193. package/dist/src/agent/skills/installer.js +2 -2
  194. package/dist/src/agent/skills/managed-store.d.ts +19 -0
  195. package/dist/src/agent/skills/managed-store.js +97 -38
  196. package/dist/src/agent/skills/managed-store.js.map +1 -1
  197. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  198. package/dist/src/agent/skills/skill-manager.d.ts +16 -6
  199. package/dist/src/agent/skills/skill-manager.js +79 -24
  200. package/dist/src/agent/skills/skill-manager.js.map +1 -1
  201. package/dist/src/agent/skills/skill-view-path.js +1 -1
  202. package/dist/src/agent/skills/test-framework.js +1 -1
  203. package/dist/src/agent/skills/types.d.ts +11 -0
  204. package/dist/src/agent/skills/watcher.js +1 -1
  205. package/dist/src/agent/starter-agents.js +1 -1
  206. package/dist/src/agent/tools/cronjob-tool.d.ts +8 -3
  207. package/dist/src/agent/tools/cronjob-tool.js +82 -24
  208. package/dist/src/agent/tools/cronjob-tool.js.map +1 -1
  209. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  210. package/dist/src/agent/tools/edit.d.ts +2 -0
  211. package/dist/src/agent/tools/edit.js +10 -0
  212. package/dist/src/agent/tools/edit.js.map +1 -1
  213. package/dist/src/agent/tools/factory.js +17 -4
  214. package/dist/src/agent/tools/factory.js.map +1 -1
  215. package/dist/src/agent/tools/find.js +1 -1
  216. package/dist/src/agent/tools/goal-evidence-recorder.d.ts +6 -0
  217. package/dist/src/agent/tools/goal-evidence-recorder.js +34 -0
  218. package/dist/src/agent/tools/goal-evidence-recorder.js.map +1 -0
  219. package/dist/src/agent/tools/goal-tool.d.ts +19 -0
  220. package/dist/src/agent/tools/goal-tool.js +101 -0
  221. package/dist/src/agent/tools/goal-tool.js.map +1 -0
  222. package/dist/src/agent/tools/grep.js +1 -1
  223. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  224. package/dist/src/agent/tools/index.d.ts +1 -0
  225. package/dist/src/agent/tools/index.js +2 -1
  226. package/dist/src/agent/tools/shell.d.ts +2 -0
  227. package/dist/src/agent/tools/shell.js +17 -2
  228. package/dist/src/agent/tools/shell.js.map +1 -1
  229. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  230. package/dist/src/agent/tools/workflow-tool.d.ts +1 -0
  231. package/dist/src/agent/tools/workflow-tool.js +11 -3
  232. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  233. package/dist/src/agent/tools/write.d.ts +2 -0
  234. package/dist/src/agent/tools/write.js +11 -0
  235. package/dist/src/agent/tools/write.js.map +1 -1
  236. package/dist/src/agent/workflow/catalog.js +1 -1
  237. package/dist/src/agent/workspace-runtime/registry.d.ts +5 -0
  238. package/dist/src/agent/workspace-runtime/registry.js +7 -0
  239. package/dist/src/agent/workspace-runtime/registry.js.map +1 -1
  240. package/dist/src/ai-assist/text-assist.d.ts +39 -0
  241. package/dist/src/ai-assist/text-assist.js +234 -0
  242. package/dist/src/ai-assist/text-assist.js.map +1 -0
  243. package/dist/src/auth/credentials.js +2 -2
  244. package/dist/src/auth/profiles/store.js +2 -2
  245. package/dist/src/auth/sync-provider-auth.js +1 -1
  246. package/dist/src/browser/cache-dir-policy.js +1 -1
  247. package/dist/src/browser/cdp-local-launcher.js +2 -2
  248. package/dist/src/browser/providers/browser-ext-install.js +4 -4
  249. package/dist/src/browser/providers/cloakbrowser.js +5 -5
  250. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  251. package/dist/src/browser/stealth.js +1 -1
  252. package/dist/src/channels/attachments/inbound-persist.d.ts +7 -0
  253. package/dist/src/channels/attachments/inbound-persist.js +20 -2
  254. package/dist/src/channels/attachments/inbound-persist.js.map +1 -1
  255. package/dist/src/channels/outbound/persist-store.js +1 -1
  256. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  257. package/dist/src/channels/pairing/pairing-store.js +2 -2
  258. package/dist/src/chat-commands/agent-edit.js +2 -2
  259. package/dist/src/chat-commands/builtins/config.js +3 -3
  260. package/dist/src/chat-commands/builtins/goal.d.ts +1 -1
  261. package/dist/src/chat-commands/builtins/goal.js +55 -97
  262. package/dist/src/chat-commands/builtins/goal.js.map +1 -1
  263. package/dist/src/chat-commands/builtins/subgoal.d.ts +1 -1
  264. package/dist/src/chat-commands/builtins/subgoal.js +49 -108
  265. package/dist/src/chat-commands/builtins/subgoal.js.map +1 -1
  266. package/dist/src/chat-commands/builtins/system.js +11 -4
  267. package/dist/src/chat-commands/builtins/system.js.map +1 -1
  268. package/dist/src/chat-commands/builtins/workflow.js +132 -8
  269. package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
  270. package/dist/src/chat-commands/context.d.ts +6 -0
  271. package/dist/src/chat-commands/context.js +12 -0
  272. package/dist/src/chat-commands/context.js.map +1 -1
  273. package/dist/src/chat-commands/types.d.ts +7 -0
  274. package/dist/src/cli/command-catalog.js +43 -0
  275. package/dist/src/cli/command-catalog.js.map +1 -1
  276. package/dist/src/cli/command-loaders.js +1 -0
  277. package/dist/src/cli/command-loaders.js.map +1 -1
  278. package/dist/src/cli/command-manifest.js +4 -0
  279. package/dist/src/cli/command-manifest.js.map +1 -1
  280. package/dist/src/cli/commands/config.js +1 -1
  281. package/dist/src/cli/commands/cron.js +55 -16
  282. package/dist/src/cli/commands/cron.js.map +1 -1
  283. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  284. package/dist/src/cli/commands/doctor/checks/cron-health.js +2 -83
  285. package/dist/src/cli/commands/doctor/checks/cron-health.js.map +1 -1
  286. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  287. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  288. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  289. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  290. package/dist/src/cli/commands/extension-create.js +1 -1
  291. package/dist/src/cli/commands/extension-dev.js +2 -2
  292. package/dist/src/cli/commands/extension-marketplace.js +2 -2
  293. package/dist/src/cli/commands/extension-pack.js +2 -2
  294. package/dist/src/cli/commands/extension.js +3 -3
  295. package/dist/src/cli/commands/gateway/logs.js +1 -1
  296. package/dist/src/cli/commands/goal.d.ts +4 -0
  297. package/dist/src/cli/commands/goal.js +213 -0
  298. package/dist/src/cli/commands/goal.js.map +1 -0
  299. package/dist/src/cli/commands/image.js +1 -1
  300. package/dist/src/cli/commands/init.js +2 -2
  301. package/dist/src/cli/commands/models.js +1 -1
  302. package/dist/src/cli/commands/onboard.js +11 -5
  303. package/dist/src/cli/commands/onboard.js.map +1 -1
  304. package/dist/src/cli/commands/skills-test.js +1 -1
  305. package/dist/src/cli/templates.js +1 -1
  306. package/dist/src/cli/utils/gateway-client.js +1 -1
  307. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  308. package/dist/src/config/agent-profile.js +1 -1
  309. package/dist/src/config/agent-typed-models.js +1 -1
  310. package/dist/src/config/gateway-bind.js +1 -1
  311. package/dist/src/config/index.js +8 -8
  312. package/dist/src/config/loader.js +4 -4
  313. package/dist/src/config/models-json.js +2 -2
  314. package/dist/src/config/paths-state.js +1 -1
  315. package/dist/src/config/paths.js +1 -1
  316. package/dist/src/config/profile.js +1 -1
  317. package/dist/src/config/reload.js +1 -1
  318. package/dist/src/config/schema.d.ts +115 -2
  319. package/dist/src/config/schema.js +63 -7
  320. package/dist/src/config/schema.js.map +1 -1
  321. package/dist/src/config/web-patch.d.ts +14 -1
  322. package/dist/src/config/web-patch.js +45 -8
  323. package/dist/src/config/web-patch.js.map +1 -1
  324. package/dist/src/config/workspace-path.js +1 -1
  325. package/dist/src/cron/executor.d.ts +2 -0
  326. package/dist/src/cron/executor.js +126 -70
  327. package/dist/src/cron/executor.js.map +1 -1
  328. package/dist/src/cron/index.d.ts +1 -1
  329. package/dist/src/cron/index.js +3 -3
  330. package/dist/src/cron/job-content.js +1 -0
  331. package/dist/src/cron/job-content.js.map +1 -1
  332. package/dist/src/cron/run-log-store.d.ts +1 -0
  333. package/dist/src/cron/run-log-store.js +4 -2
  334. package/dist/src/cron/run-log-store.js.map +1 -1
  335. package/dist/src/cron/schedule.d.ts +10 -0
  336. package/dist/src/cron/schedule.js +85 -0
  337. package/dist/src/cron/schedule.js.map +1 -0
  338. package/dist/src/cron/service.d.ts +34 -77
  339. package/dist/src/cron/service.js +327 -264
  340. package/dist/src/cron/service.js.map +1 -1
  341. package/dist/src/cron/types.d.ts +97 -49
  342. package/dist/src/cron/validation.d.ts +374 -86
  343. package/dist/src/cron/validation.js +156 -129
  344. package/dist/src/cron/validation.js.map +1 -1
  345. package/dist/src/cron/workflow-run-completion.js +1 -1
  346. package/dist/src/daemon/constants.js +1 -1
  347. package/dist/src/daemon/install-plan.js +2 -2
  348. package/dist/src/daemon/launchd.js +2 -2
  349. package/dist/src/daemon/schtasks.js +2 -2
  350. package/dist/src/daemon/systemd.js +2 -2
  351. package/dist/src/extensions/bundle-mcp.js +1 -1
  352. package/dist/src/extensions/discover-extensions.js +2 -2
  353. package/dist/src/extensions/health.js +1 -1
  354. package/dist/src/extensions/install.js +2 -2
  355. package/dist/src/extensions/loader.js +2 -2
  356. package/dist/src/extensions/lockfile.js +3 -3
  357. package/dist/src/extensions/security.js +1 -1
  358. package/dist/src/extensions/update.js +2 -2
  359. package/dist/src/gateway/agents-admin.js +2 -2
  360. package/dist/src/gateway/chat-stream/mapper.d.ts +1 -0
  361. package/dist/src/gateway/chat-stream/mapper.js +6 -2
  362. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  363. package/dist/src/gateway/chat-stream/protocol.d.ts +2 -0
  364. package/dist/src/gateway/file-path-classifier.js +2 -2
  365. package/dist/src/gateway/hono/lib/config-payload.d.ts +14 -1
  366. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  367. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  368. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  369. package/dist/src/gateway/hono/oauth-async.js +1 -1
  370. package/dist/src/gateway/hono/routes/agents.js +1 -1
  371. package/dist/src/gateway/hono/routes/ai-assist.d.ts +3 -0
  372. package/dist/src/gateway/hono/routes/ai-assist.js +66 -0
  373. package/dist/src/gateway/hono/routes/ai-assist.js.map +1 -0
  374. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  375. package/dist/src/gateway/hono/routes/commands-skills.js +7 -0
  376. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  377. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  378. package/dist/src/gateway/hono/routes/cron.js +24 -5
  379. package/dist/src/gateway/hono/routes/cron.js.map +1 -1
  380. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  381. package/dist/src/gateway/hono/routes/goals.d.ts +1 -1
  382. package/dist/src/gateway/hono/routes/goals.js +670 -173
  383. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  384. package/dist/src/gateway/hono/routes/home.d.ts +5 -0
  385. package/dist/src/gateway/hono/routes/home.js +90 -3
  386. package/dist/src/gateway/hono/routes/home.js.map +1 -1
  387. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  388. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  389. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  390. package/dist/src/gateway/hono/routes/models.js +1 -1
  391. package/dist/src/gateway/hono/routes/notes.js +20 -14
  392. package/dist/src/gateway/hono/routes/notes.js.map +1 -1
  393. package/dist/src/gateway/hono/routes/shares.js +1 -1
  394. package/dist/src/gateway/hono/routes/workflows.js +8 -4
  395. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  396. package/dist/src/gateway/hono/routes/workspace.js +2 -2
  397. package/dist/src/gateway/hono/sse.js.map +1 -1
  398. package/dist/src/gateway/lock.js +3 -3
  399. package/dist/src/gateway/ports.js +1 -1
  400. package/dist/src/gateway/service/agent-runner.d.ts +2 -0
  401. package/dist/src/gateway/service/agent-runner.js +8 -4
  402. package/dist/src/gateway/service/agent-runner.js.map +1 -1
  403. package/dist/src/gateway/service/config-coordinator.js +1 -1
  404. package/dist/src/gateway/service/marketplace-service.d.ts +22 -10
  405. package/dist/src/gateway/service/marketplace-service.js +46 -5
  406. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  407. package/dist/src/gateway/service/run-gateway-agent.d.ts +3 -0
  408. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  409. package/dist/src/gateway/service.d.ts +8 -0
  410. package/dist/src/gateway/service.js +79 -6
  411. package/dist/src/gateway/service.js.map +1 -1
  412. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  413. package/dist/src/goals/goal-notifications.d.ts +29 -0
  414. package/dist/src/goals/goal-notifications.js +154 -0
  415. package/dist/src/goals/goal-notifications.js.map +1 -0
  416. package/dist/src/goals/goal-queue-store.d.ts +16 -0
  417. package/dist/src/goals/goal-queue-store.js +131 -0
  418. package/dist/src/goals/goal-queue-store.js.map +1 -0
  419. package/dist/src/goals/goal-queue-types.d.ts +31 -0
  420. package/dist/src/goals/goal-queue-types.js +1 -0
  421. package/dist/src/goals/goal-runner.d.ts +17 -0
  422. package/dist/src/goals/goal-runner.js +127 -0
  423. package/dist/src/goals/goal-runner.js.map +1 -0
  424. package/dist/src/goals/goal-service.d.ts +77 -0
  425. package/dist/src/goals/goal-service.js +261 -0
  426. package/dist/src/goals/goal-service.js.map +1 -0
  427. package/dist/src/goals/goal-store.d.ts +38 -0
  428. package/dist/src/goals/goal-store.js +404 -0
  429. package/dist/src/goals/goal-store.js.map +1 -0
  430. package/dist/src/goals/goal-workflow-judge.d.ts +13 -0
  431. package/dist/src/goals/goal-workflow-judge.js +147 -0
  432. package/dist/src/goals/goal-workflow-judge.js.map +1 -0
  433. package/dist/src/goals/index.d.ts +10 -0
  434. package/dist/src/goals/index.js +7 -0
  435. package/dist/src/goals/types.d.ts +119 -0
  436. package/dist/src/goals/types.js +1 -0
  437. package/dist/src/i18n/goals-bundle.js +1 -1
  438. package/dist/src/i18n/index.js +1 -1
  439. package/dist/src/i18n/share-tool-bundle.js +2 -2
  440. package/dist/src/infra/brew.js +1 -1
  441. package/dist/src/infra/package-json.js +1 -1
  442. package/dist/src/infra/package-update-steps.js +1 -1
  443. package/dist/src/infra/path-env.js +2 -2
  444. package/dist/src/infra/restart.js +1 -1
  445. package/dist/src/infra/stable-node-path.js +1 -1
  446. package/dist/src/infra/update-check.js +1 -1
  447. package/dist/src/infra/update-global.js +1 -1
  448. package/dist/src/infra/update-lock.js +2 -2
  449. package/dist/src/infra/update-restart.js +1 -1
  450. package/dist/src/infra/update-runner.js +1 -1
  451. package/dist/src/infra/update-startup.js +1 -1
  452. package/dist/src/infra/write-file-atomic.js +2 -2
  453. package/dist/src/media/store.js +1 -1
  454. package/dist/src/notes/agent-context.js +1 -1
  455. package/dist/src/notes/service.js +1 -1
  456. package/dist/src/notes/store.js +2 -2
  457. package/dist/src/project-trust/trust-store.js +2 -2
  458. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  459. package/dist/src/providers/index.js +1 -1
  460. package/dist/src/providers/model-registry.js +4 -4
  461. package/dist/src/session/init-session-turn.js +2 -2
  462. package/dist/src/session/resolve-session.js +3 -3
  463. package/dist/src/session/session-title.js +2 -2
  464. package/dist/src/session/store.js +1 -1
  465. package/dist/src/share/share-auto.js +2 -2
  466. package/dist/src/share/share-store.js +3 -3
  467. package/dist/src/share/share-thumbnail.js +2 -2
  468. package/dist/src/share/share-zip.js +1 -1
  469. package/dist/src/share/site-share-store.js +3 -3
  470. package/dist/src/share/site-static-serve.js +1 -1
  471. package/dist/src/storage/sqlite/connection.js +1 -1
  472. package/dist/src/storage/sqlite/cron-job-repository.d.ts +6 -0
  473. package/dist/src/storage/sqlite/cron-job-repository.js +70 -0
  474. package/dist/src/storage/sqlite/cron-job-repository.js.map +1 -0
  475. package/dist/src/storage/sqlite/cron-run-repository.js +0 -1
  476. package/dist/src/storage/sqlite/cron-run-repository.js.map +1 -1
  477. package/dist/src/storage/sqlite/index.d.ts +1 -0
  478. package/dist/src/storage/sqlite/index.js +2 -1
  479. package/dist/src/storage/sqlite/memory-index-repository.js +2 -2
  480. package/dist/src/storage/sqlite/migrations/006_add_goals.sql +108 -0
  481. package/dist/src/storage/sqlite/migrations/007_goal_run_judge_schema.sql +4 -0
  482. package/dist/src/storage/sqlite/migrations/008_goal_queue_workflow_runs.sql +53 -0
  483. package/dist/src/storage/sqlite/migrations/009_cron_jobs.sql +24 -0
  484. package/dist/src/storage/sqlite/migrations/discover.js +1 -1
  485. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  486. package/dist/src/storage/sqlite/migrations/runner.js +4 -4
  487. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  488. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  489. package/dist/src/storage/sqlite/schema.js +2 -2
  490. package/dist/src/storage/sqlite/schema.sql +188 -0
  491. package/dist/src/tui/clipboard-image.js +3 -3
  492. package/dist/src/tui/extension-host/load-extensions.js +1 -1
  493. package/dist/src/tui/theme-manager.js +1 -1
  494. package/dist/src/tui/tui-command-formatters.js +4 -4
  495. package/dist/src/tui/tui-commands.js +2 -2
  496. package/dist/src/tui/tui-keybindings-file.js +1 -1
  497. package/dist/src/tui/tui-scoped-models.js +2 -2
  498. package/dist/src/tui/tui-settings.js +1 -1
  499. package/dist/src/tui/tui-startup-resources.js +1 -1
  500. package/dist/src/tui/tui.js +6 -6
  501. package/dist/src/tunnel/frpc-binary.js +4 -4
  502. package/dist/src/tunnel/frpc-config.js +1 -1
  503. package/dist/src/tunnel/frpc-extract.js +1 -1
  504. package/dist/src/tunnel/tunnel-state.js +1 -1
  505. package/dist/src/utils/logger/audit.js +1 -1
  506. package/dist/src/utils/logger/log-store.js +1 -1
  507. package/dist/src/utils/logger/rotation.js +1 -1
  508. package/dist/src/utils/logger/stats.d.ts +1 -1
  509. package/dist/src/utils/logger/streams.js +1 -1
  510. package/dist/src/voice/tts/audio.js +1 -1
  511. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  512. package/dist/src/workflows/domain/run.d.ts +1 -0
  513. package/dist/src/workflows/domain/run.js.map +1 -1
  514. package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
  515. package/dist/src/workflows/engine/projector.js +23 -14
  516. package/dist/src/workflows/engine/projector.js.map +1 -1
  517. package/dist/src/workflows/engine/workflow-engine.d.ts +1 -0
  518. package/dist/src/workflows/engine/workflow-engine.js +36 -0
  519. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  520. package/dist/src/workflows/index.js +1 -1
  521. package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
  522. package/dist/src/workflows/service/workflow-run-service.js +7 -3
  523. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  524. package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -0
  525. package/dist/src/workflows/service/workflow-session-bridge.js +8 -1
  526. package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
  527. package/dist/src/workflows/store/event-store.js +1 -1
  528. package/dist/src/workflows/store/run-index-store.d.ts +8 -0
  529. package/dist/src/workflows/store/run-index-store.js +58 -0
  530. package/dist/src/workflows/store/run-index-store.js.map +1 -0
  531. package/dist/src/workflows/store/run-store.d.ts +2 -0
  532. package/dist/src/workflows/store/run-store.js +15 -22
  533. package/dist/src/workflows/store/run-store.js.map +1 -1
  534. package/package.json +10 -5
  535. package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +0 -41
  536. package/dist/gateway/static/root/assets/agents-CFFioJCI.js +0 -78
  537. package/dist/gateway/static/root/assets/apps-page-BYDmkbzG.js +0 -1
  538. package/dist/gateway/static/root/assets/channels-settings-CsbDaMvd.js +0 -1
  539. package/dist/gateway/static/root/assets/circle-check-C23XjkUj.js +0 -1
  540. package/dist/gateway/static/root/assets/copy-Dv6d4Dvw.js +0 -1
  541. package/dist/gateway/static/root/assets/cron-page-Apk-7p4p.js +0 -1
  542. package/dist/gateway/static/root/assets/dist-DmGDgpy2.js +0 -1
  543. package/dist/gateway/static/root/assets/extension-debug-page-pxFC-tUa.js +0 -1
  544. package/dist/gateway/static/root/assets/extension-settings-page-COXSv6xP.js +0 -1
  545. package/dist/gateway/static/root/assets/fetch-CFdKBnE6.js +0 -1
  546. package/dist/gateway/static/root/assets/gateway-startup-retry-DdngdObI.js +0 -1
  547. package/dist/gateway/static/root/assets/heartbeat-config-api-DcmAMYmN.js +0 -1
  548. package/dist/gateway/static/root/assets/index-C_2yKRJX.js +0 -4845
  549. package/dist/gateway/static/root/assets/index-DI5_GsZt.css +0 -1
  550. package/dist/gateway/static/root/assets/logs-page-DvTWUOzd.js +0 -2
  551. package/dist/gateway/static/root/assets/note-detail-page-CZbdugWZ.js +0 -180
  552. package/dist/gateway/static/root/assets/note-time-RdyBZxj3.js +0 -1
  553. package/dist/gateway/static/root/assets/notes-page-mEAwy3e1.js +0 -1
  554. package/dist/gateway/static/root/assets/schema-form-DEvdni_r.js +0 -1
  555. package/dist/gateway/static/root/assets/sessions-page-BsgffzV4.js +0 -1
  556. package/dist/gateway/static/root/assets/settings-advanced-gate-t6v8Dwb8.js +0 -2
  557. package/dist/gateway/static/root/assets/settings-form-section-BoYYZmJG.js +0 -1
  558. package/dist/gateway/static/root/assets/settings-page-ClIthYF8.js +0 -3
  559. package/dist/gateway/static/root/assets/share-preview-page-Dd9et7KD.js +0 -2
  560. package/dist/gateway/static/root/assets/skills-page-DEXtxyfQ.js +0 -2
  561. package/dist/gateway/static/root/assets/theme-store-BZozwAeK.js +0 -1
  562. package/dist/gateway/static/root/assets/url-DQRqHuL-.js +0 -3
  563. package/dist/gateway/static/root/assets/vendor-codemirror-DYoKfS8f.js +0 -45
  564. package/dist/gateway/static/root/assets/voice-api-key-field-CNrKzQrf.js +0 -1
  565. package/dist/gateway/static/root/assets/workflows-page-EMZkzJNN.js +0 -18
  566. package/dist/gateway/static/root/favicon-16.png +0 -0
  567. package/dist/gateway/static/root/favicon-32.png +0 -0
  568. package/dist/src/agent/goals/checklist-user.d.ts +0 -24
  569. package/dist/src/agent/goals/checklist-user.js +0 -92
  570. package/dist/src/agent/goals/checklist-user.js.map +0 -1
  571. package/dist/src/agent/goals/goal-run-store.d.ts +0 -19
  572. package/dist/src/agent/goals/goal-run-store.js +0 -138
  573. package/dist/src/agent/goals/goal-run-store.js.map +0 -1
  574. package/dist/src/agent/goals/goal-run-types.d.ts +0 -28
  575. package/dist/src/agent/goals/goal-run-types.js +0 -6
  576. package/dist/src/agent/goals/goal-run-types.js.map +0 -1
  577. package/dist/src/agent/goals/patch-from-user-action.d.ts +0 -20
  578. package/dist/src/agent/goals/patch-from-user-action.js +0 -103
  579. package/dist/src/agent/goals/patch-from-user-action.js.map +0 -1
  580. package/dist/src/cron/persistence.d.ts +0 -62
  581. package/dist/src/cron/persistence.js +0 -188
  582. package/dist/src/cron/persistence.js.map +0 -1
  583. /package/dist/gateway/static/root/assets/{note-detail-page-D4ZIVQbk.css → block-editor-D4ZIVQbk.css} +0 -0
@@ -0,0 +1,131 @@
1
+ import { getSqliteDatabase, runSqliteWriteTransaction } from "../storage/sqlite/transaction.js";
2
+ import { randomUUID } from "node:crypto";
3
+ //#region src/goals/goal-queue-store.ts
4
+ function parsePayload(raw) {
5
+ try {
6
+ const parsed = JSON.parse(raw);
7
+ return parsed && typeof parsed === "object" ? parsed : {};
8
+ } catch {
9
+ return {};
10
+ }
11
+ }
12
+ function rowToSnapshot(row) {
13
+ const payload = parsePayload(row.payload_json);
14
+ return {
15
+ id: row.queue_id,
16
+ goalId: row.goal_id,
17
+ status: row.status,
18
+ attempts: row.attempts,
19
+ maxRetries: row.max_retries,
20
+ enqueuedAt: row.enqueued_at,
21
+ startedAt: row.started_at ?? void 0,
22
+ finishedAt: row.finished_at ?? void 0,
23
+ nextRunAt: row.next_run_at ?? void 0,
24
+ sessionKey: row.session_key ?? void 0,
25
+ message: payload.message,
26
+ lastError: row.last_error ?? void 0,
27
+ source: row.source
28
+ };
29
+ }
30
+ var GoalQueueStore = class {
31
+ enqueue(input) {
32
+ return runSqliteWriteTransaction((db) => {
33
+ const existing = db.prepare(`SELECT * FROM goal_queue
34
+ WHERE goal_id = ?
35
+ AND status IN ('queued', 'running', 'retry_waiting')
36
+ ORDER BY enqueued_at DESC
37
+ LIMIT 1`).get(input.goalId);
38
+ if (existing) return rowToSnapshot(existing);
39
+ const now = Date.now();
40
+ const row = {
41
+ queue_id: randomUUID(),
42
+ goal_id: input.goalId,
43
+ status: "queued",
44
+ payload_json: JSON.stringify({ message: input.message }),
45
+ attempts: 0,
46
+ max_retries: input.maxRetries,
47
+ enqueued_at: now,
48
+ started_at: null,
49
+ finished_at: null,
50
+ next_run_at: null,
51
+ session_key: null,
52
+ last_error: null,
53
+ source: input.source
54
+ };
55
+ db.prepare(`INSERT INTO goal_queue (
56
+ queue_id, goal_id, status, payload_json, attempts, max_retries,
57
+ enqueued_at, source
58
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(row.queue_id, row.goal_id, row.status, row.payload_json, row.attempts, row.max_retries, row.enqueued_at, row.source);
59
+ return rowToSnapshot(row);
60
+ });
61
+ }
62
+ claimNext(now = Date.now()) {
63
+ return runSqliteWriteTransaction((db) => {
64
+ const row = db.prepare(`SELECT * FROM goal_queue
65
+ WHERE status = 'queued'
66
+ OR (status = 'retry_waiting' AND COALESCE(next_run_at, 0) <= ?)
67
+ ORDER BY enqueued_at ASC
68
+ LIMIT 1`).get(now);
69
+ if (!row) return null;
70
+ const startedAt = Date.now();
71
+ db.prepare(`UPDATE goal_queue
72
+ SET status = 'running',
73
+ started_at = ?,
74
+ attempts = attempts + 1,
75
+ last_error = NULL
76
+ WHERE queue_id = ?`).run(startedAt, row.queue_id);
77
+ return rowToSnapshot(db.prepare(`SELECT * FROM goal_queue WHERE queue_id = ?`).get(row.queue_id));
78
+ });
79
+ }
80
+ markRetry(itemId, error, nextRunAt) {
81
+ return this.update(itemId, {
82
+ status: "retry_waiting",
83
+ next_run_at: nextRunAt,
84
+ last_error: error,
85
+ finished_at: null
86
+ });
87
+ }
88
+ markFinished(itemId, status, error) {
89
+ return this.update(itemId, {
90
+ status,
91
+ finished_at: Date.now(),
92
+ last_error: error ?? null
93
+ });
94
+ }
95
+ setSessionKey(itemId, sessionKey) {
96
+ return this.update(itemId, { session_key: sessionKey });
97
+ }
98
+ list(limit = 200) {
99
+ const safeLimit = Math.min(500, Math.max(1, Math.floor(limit)));
100
+ return getSqliteDatabase().prepare(`SELECT * FROM goal_queue ORDER BY enqueued_at DESC LIMIT ?`).all(safeLimit).map(rowToSnapshot);
101
+ }
102
+ resetRunningToRetry(reason = "Gateway restarted during goal run") {
103
+ return runSqliteWriteTransaction((db) => {
104
+ const result = db.prepare(`UPDATE goal_queue
105
+ SET status = 'retry_waiting',
106
+ next_run_at = ?,
107
+ last_error = ?
108
+ WHERE status = 'running'`).run(Date.now(), reason);
109
+ return Number(result.changes ?? 0);
110
+ });
111
+ }
112
+ update(itemId, patch) {
113
+ return runSqliteWriteTransaction((db) => {
114
+ const row = db.prepare(`SELECT * FROM goal_queue WHERE queue_id = ?`).get(itemId);
115
+ if (!row) return null;
116
+ const next = {
117
+ ...row,
118
+ ...patch
119
+ };
120
+ db.prepare(`UPDATE goal_queue SET
121
+ status = ?, attempts = ?, started_at = ?, finished_at = ?,
122
+ next_run_at = ?, session_key = ?, last_error = ?
123
+ WHERE queue_id = ?`).run(next.status, next.attempts, next.started_at, next.finished_at, next.next_run_at, next.session_key, next.last_error, itemId);
124
+ return rowToSnapshot(db.prepare(`SELECT * FROM goal_queue WHERE queue_id = ?`).get(itemId));
125
+ });
126
+ }
127
+ };
128
+ //#endregion
129
+ export { GoalQueueStore };
130
+
131
+ //# sourceMappingURL=goal-queue-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-queue-store.js","names":[],"sources":["../../../src/goals/goal-queue-store.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport { getSqliteDatabase, runSqliteWriteTransaction } from '../storage/sqlite/transaction.js';\n\nimport type { GoalQueueItemSnapshot, GoalQueueStatus } from './goal-queue-types.js';\n\ntype GoalQueueRow = {\n queue_id: string;\n goal_id: string;\n status: GoalQueueStatus;\n payload_json: string;\n attempts: number;\n max_retries: number;\n enqueued_at: number;\n started_at: number | null;\n finished_at: number | null;\n next_run_at: number | null;\n session_key: string | null;\n last_error: string | null;\n source: GoalQueueItemSnapshot['source'];\n};\n\ntype GoalQueuePayload = {\n message?: string;\n};\n\nfunction parsePayload(raw: string): GoalQueuePayload {\n try {\n const parsed = JSON.parse(raw) as GoalQueuePayload;\n return parsed && typeof parsed === 'object' ? parsed : {};\n } catch {\n return {};\n }\n}\n\nfunction rowToSnapshot(row: GoalQueueRow): GoalQueueItemSnapshot {\n const payload = parsePayload(row.payload_json);\n return {\n id: row.queue_id,\n goalId: row.goal_id,\n status: row.status,\n attempts: row.attempts,\n maxRetries: row.max_retries,\n enqueuedAt: row.enqueued_at,\n startedAt: row.started_at ?? undefined,\n finishedAt: row.finished_at ?? undefined,\n nextRunAt: row.next_run_at ?? undefined,\n sessionKey: row.session_key ?? undefined,\n message: payload.message,\n lastError: row.last_error ?? undefined,\n source: row.source,\n };\n}\n\nexport class GoalQueueStore {\n enqueue(input: {\n goalId: string;\n message?: string;\n maxRetries: number;\n source: GoalQueueItemSnapshot['source'];\n }): GoalQueueItemSnapshot {\n return runSqliteWriteTransaction((db) => {\n const existing = db\n .prepare(\n `SELECT * FROM goal_queue\n WHERE goal_id = ?\n AND status IN ('queued', 'running', 'retry_waiting')\n ORDER BY enqueued_at DESC\n LIMIT 1`,\n )\n .get(input.goalId) as GoalQueueRow | undefined;\n if (existing) return rowToSnapshot(existing);\n\n const now = Date.now();\n const row: GoalQueueRow = {\n queue_id: randomUUID(),\n goal_id: input.goalId,\n status: 'queued',\n payload_json: JSON.stringify({ message: input.message }),\n attempts: 0,\n max_retries: input.maxRetries,\n enqueued_at: now,\n started_at: null,\n finished_at: null,\n next_run_at: null,\n session_key: null,\n last_error: null,\n source: input.source,\n };\n db.prepare(\n `INSERT INTO goal_queue (\n queue_id, goal_id, status, payload_json, attempts, max_retries,\n enqueued_at, source\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n row.queue_id,\n row.goal_id,\n row.status,\n row.payload_json,\n row.attempts,\n row.max_retries,\n row.enqueued_at,\n row.source,\n );\n return rowToSnapshot(row);\n });\n }\n\n claimNext(now = Date.now()): GoalQueueItemSnapshot | null {\n return runSqliteWriteTransaction((db) => {\n const row = db\n .prepare(\n `SELECT * FROM goal_queue\n WHERE status = 'queued'\n OR (status = 'retry_waiting' AND COALESCE(next_run_at, 0) <= ?)\n ORDER BY enqueued_at ASC\n LIMIT 1`,\n )\n .get(now) as GoalQueueRow | undefined;\n if (!row) return null;\n\n const startedAt = Date.now();\n db.prepare(\n `UPDATE goal_queue\n SET status = 'running',\n started_at = ?,\n attempts = attempts + 1,\n last_error = NULL\n WHERE queue_id = ?`,\n ).run(startedAt, row.queue_id);\n\n const next = db\n .prepare(`SELECT * FROM goal_queue WHERE queue_id = ?`)\n .get(row.queue_id) as GoalQueueRow;\n return rowToSnapshot(next);\n });\n }\n\n markRetry(itemId: string, error: string, nextRunAt: number): GoalQueueItemSnapshot | null {\n return this.update(itemId, {\n status: 'retry_waiting',\n next_run_at: nextRunAt,\n last_error: error,\n finished_at: null,\n });\n }\n\n markFinished(itemId: string, status: GoalQueueStatus, error?: string): GoalQueueItemSnapshot | null {\n return this.update(itemId, {\n status,\n finished_at: Date.now(),\n last_error: error ?? null,\n });\n }\n\n setSessionKey(itemId: string, sessionKey: string): GoalQueueItemSnapshot | null {\n return this.update(itemId, { session_key: sessionKey });\n }\n\n list(limit = 200): GoalQueueItemSnapshot[] {\n const safeLimit = Math.min(500, Math.max(1, Math.floor(limit)));\n const rows = getSqliteDatabase()\n .prepare(`SELECT * FROM goal_queue ORDER BY enqueued_at DESC LIMIT ?`)\n .all(safeLimit) as GoalQueueRow[];\n return rows.map(rowToSnapshot);\n }\n\n resetRunningToRetry(reason = 'Gateway restarted during goal run'): number {\n return runSqliteWriteTransaction((db) => {\n const result = db\n .prepare(\n `UPDATE goal_queue\n SET status = 'retry_waiting',\n next_run_at = ?,\n last_error = ?\n WHERE status = 'running'`,\n )\n .run(Date.now(), reason);\n return Number(result.changes ?? 0);\n });\n }\n\n private update(itemId: string, patch: Partial<GoalQueueRow>): GoalQueueItemSnapshot | null {\n return runSqliteWriteTransaction((db) => {\n const row = db\n .prepare(`SELECT * FROM goal_queue WHERE queue_id = ?`)\n .get(itemId) as GoalQueueRow | undefined;\n if (!row) return null;\n const next = { ...row, ...patch };\n db.prepare(\n `UPDATE goal_queue SET\n status = ?, attempts = ?, started_at = ?, finished_at = ?,\n next_run_at = ?, session_key = ?, last_error = ?\n WHERE queue_id = ?`,\n ).run(\n next.status,\n next.attempts,\n next.started_at,\n next.finished_at,\n next.next_run_at,\n next.session_key,\n next.last_error,\n itemId,\n );\n const updated = db\n .prepare(`SELECT * FROM goal_queue WHERE queue_id = ?`)\n .get(itemId) as GoalQueueRow;\n return rowToSnapshot(updated);\n });\n }\n}\n\n"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { GoalWithDetails } from './types.js';
2
+ export type GoalQueueStatus = 'queued' | 'running' | 'retry_waiting' | 'succeeded' | 'failed' | 'skipped';
3
+ export interface GoalQueueItemSnapshot {
4
+ id: string;
5
+ goalId: string;
6
+ status: GoalQueueStatus;
7
+ attempts: number;
8
+ maxRetries: number;
9
+ enqueuedAt: number;
10
+ startedAt?: number;
11
+ finishedAt?: number;
12
+ nextRunAt?: number;
13
+ sessionKey?: string;
14
+ message?: string;
15
+ lastError?: string;
16
+ source: 'api' | 'cron' | 'workflow' | 'system';
17
+ }
18
+ export interface GoalRunnerOptions {
19
+ maxConcurrent?: number;
20
+ defaultMaxRetries?: number;
21
+ retryBaseMs?: number;
22
+ ensureSession: (goal: GoalWithDetails) => Promise<string>;
23
+ hasActiveRun: (sessionKey: string) => boolean;
24
+ runContinuation: (sessionKey: string, message: string) => Promise<void>;
25
+ emit?: (type: string, payload: unknown) => void;
26
+ }
27
+ export interface EnqueueGoalRunOptions {
28
+ message?: string;
29
+ maxRetries?: number;
30
+ source?: GoalQueueItemSnapshot['source'];
31
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ import type { EnqueueGoalRunOptions, GoalQueueItemSnapshot, GoalRunnerOptions } from './goal-queue-types.js';
2
+ export declare class GoalRunner {
3
+ private readonly opts;
4
+ private readonly goals;
5
+ private readonly store;
6
+ private active;
7
+ private pumpTimer;
8
+ constructor(opts: GoalRunnerOptions);
9
+ enqueue(goalId: string, options?: EnqueueGoalRunOptions): GoalQueueItemSnapshot;
10
+ snapshot(): GoalQueueItemSnapshot[];
11
+ private schedulePump;
12
+ private pump;
13
+ private runItem;
14
+ private retry;
15
+ private finish;
16
+ private emit;
17
+ }
@@ -0,0 +1,127 @@
1
+ import { createLogger } from "../utils/logger/index.js";
2
+ import { init_logger } from "../utils/logger.js";
3
+ import { GoalService } from "./goal-service.js";
4
+ import { GoalQueueStore } from "./goal-queue-store.js";
5
+ //#region src/goals/goal-runner.ts
6
+ init_logger();
7
+ const log = createLogger("GoalRunner");
8
+ function terminalGoalStatus(status) {
9
+ return status === "done" || status === "archived";
10
+ }
11
+ var GoalRunner = class {
12
+ goals = new GoalService();
13
+ store = new GoalQueueStore();
14
+ active = 0;
15
+ pumpTimer = null;
16
+ constructor(opts) {
17
+ this.opts = opts;
18
+ this.store.resetRunningToRetry();
19
+ this.schedulePump(0);
20
+ }
21
+ enqueue(goalId, options = {}) {
22
+ const item = this.store.enqueue({
23
+ goalId,
24
+ maxRetries: Math.max(0, Math.floor(options.maxRetries ?? this.opts.defaultMaxRetries ?? 2)),
25
+ message: options.message?.trim() || void 0,
26
+ source: options.source ?? "api"
27
+ });
28
+ this.emit("goal.queue.updated", item);
29
+ this.schedulePump(0);
30
+ return item;
31
+ }
32
+ snapshot() {
33
+ return this.store.list();
34
+ }
35
+ schedulePump(delayMs) {
36
+ if (this.pumpTimer) return;
37
+ this.pumpTimer = setTimeout(() => {
38
+ this.pumpTimer = null;
39
+ this.pump();
40
+ }, delayMs);
41
+ }
42
+ async pump() {
43
+ const maxConcurrent = Math.max(1, Math.floor(this.opts.maxConcurrent ?? 1));
44
+ while (this.active < maxConcurrent) {
45
+ const item = this.store.claimNext();
46
+ if (!item) break;
47
+ this.active += 1;
48
+ this.runItem(item).finally(() => {
49
+ this.active -= 1;
50
+ this.schedulePump(0);
51
+ });
52
+ }
53
+ const nextRetry = this.store.list().filter((item) => item.status === "retry_waiting" && item.nextRunAt).sort((a, b) => (a.nextRunAt ?? 0) - (b.nextRunAt ?? 0))[0];
54
+ if (nextRetry) this.schedulePump(Math.max(0, (nextRetry.nextRunAt ?? Date.now()) - Date.now()));
55
+ }
56
+ async runItem(item) {
57
+ this.emit("goal.queue.updated", item);
58
+ try {
59
+ const goal = this.goals.get(item.goalId);
60
+ if (!goal) {
61
+ this.finish(item, "failed", "Goal not found");
62
+ return;
63
+ }
64
+ if (terminalGoalStatus(goal.status)) {
65
+ this.finish(item, "skipped", `Goal is ${goal.status}`);
66
+ return;
67
+ }
68
+ const activeGoal = goal.status === "paused" || goal.status === "blocked" || goal.status === "needs_input" ? this.goals.resume(goal.id) : goal;
69
+ if (!activeGoal) {
70
+ this.finish(item, "failed", "Goal not found");
71
+ return;
72
+ }
73
+ const sessionKey = activeGoal.activeSessionKey ?? await this.opts.ensureSession(activeGoal);
74
+ item = this.store.setSessionKey(item.id, sessionKey) ?? {
75
+ ...item,
76
+ sessionKey
77
+ };
78
+ if (this.opts.hasActiveRun(sessionKey)) {
79
+ this.retry(item, "Goal session already has an active run");
80
+ return;
81
+ }
82
+ const message = item.message || activeGoal.nextAction || activeGoal.title;
83
+ await this.opts.runContinuation(sessionKey, message);
84
+ this.finish(item, "succeeded");
85
+ } catch (err) {
86
+ const message = err instanceof Error ? err.message : String(err);
87
+ if (item.attempts <= item.maxRetries) this.retry(item, message);
88
+ else this.finish(item, "failed", message);
89
+ }
90
+ }
91
+ retry(item, error) {
92
+ const base = Math.max(1e3, this.opts.retryBaseMs ?? 5e3);
93
+ item.status = "retry_waiting";
94
+ item.lastError = error;
95
+ item.nextRunAt = Date.now() + base * 2 ** Math.max(0, item.attempts - 1);
96
+ item = this.store.markRetry(item.id, error, item.nextRunAt) ?? item;
97
+ log.warn({
98
+ goalId: item.goalId,
99
+ attempts: item.attempts,
100
+ nextRunAt: item.nextRunAt,
101
+ errorMessage: error
102
+ }, `Goal run queued for retry: ${error}`);
103
+ this.emit("goal.queue.updated", item);
104
+ this.schedulePump(Math.max(0, item.nextRunAt - Date.now()));
105
+ }
106
+ finish(item, status, error) {
107
+ item = this.store.markFinished(item.id, status, error) ?? {
108
+ ...item,
109
+ status,
110
+ finishedAt: Date.now(),
111
+ lastError: error
112
+ };
113
+ if (status === "failed") log.warn({
114
+ goalId: item.goalId,
115
+ attempts: item.attempts,
116
+ errorMessage: error
117
+ }, `Goal run failed: ${error}`);
118
+ this.emit("goal.queue.updated", item);
119
+ }
120
+ emit(type, item) {
121
+ this.opts.emit?.(type, { item: { ...item } });
122
+ }
123
+ };
124
+ //#endregion
125
+ export { GoalRunner };
126
+
127
+ //# sourceMappingURL=goal-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal-runner.js","names":[],"sources":["../../../src/goals/goal-runner.ts"],"sourcesContent":["import { GoalQueueStore } from './goal-queue-store.js';\nimport { GoalService } from './goal-service.js';\nimport type { EnqueueGoalRunOptions, GoalQueueItemSnapshot, GoalQueueStatus, GoalRunnerOptions } from './goal-queue-types.js';\nimport type { GoalWithDetails } from './types.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('GoalRunner');\n\nfunction terminalGoalStatus(status: GoalWithDetails['status']): boolean {\n return status === 'done' || status === 'archived';\n}\n\nexport class GoalRunner {\n private readonly goals = new GoalService();\n private readonly store = new GoalQueueStore();\n private active = 0;\n private pumpTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(private readonly opts: GoalRunnerOptions) {\n this.store.resetRunningToRetry();\n this.schedulePump(0);\n }\n\n enqueue(goalId: string, options: EnqueueGoalRunOptions = {}): GoalQueueItemSnapshot {\n const item = this.store.enqueue({\n goalId,\n maxRetries: Math.max(0, Math.floor(options.maxRetries ?? this.opts.defaultMaxRetries ?? 2)),\n message: options.message?.trim() || undefined,\n source: options.source ?? 'api',\n });\n this.emit('goal.queue.updated', item);\n this.schedulePump(0);\n return item;\n }\n\n snapshot(): GoalQueueItemSnapshot[] {\n return this.store.list();\n }\n\n private schedulePump(delayMs: number): void {\n if (this.pumpTimer) return;\n this.pumpTimer = setTimeout(() => {\n this.pumpTimer = null;\n void this.pump();\n }, delayMs);\n }\n\n private async pump(): Promise<void> {\n const maxConcurrent = Math.max(1, Math.floor(this.opts.maxConcurrent ?? 1));\n while (this.active < maxConcurrent) {\n const item = this.store.claimNext();\n if (!item) break;\n this.active += 1;\n void this.runItem(item).finally(() => {\n this.active -= 1;\n this.schedulePump(0);\n });\n }\n\n const nextRetry = this.store.list()\n .filter((item) => item.status === 'retry_waiting' && item.nextRunAt)\n .sort((a, b) => (a.nextRunAt ?? 0) - (b.nextRunAt ?? 0))[0];\n if (nextRetry) this.schedulePump(Math.max(0, (nextRetry.nextRunAt ?? Date.now()) - Date.now()));\n }\n\n private async runItem(item: GoalQueueItemSnapshot): Promise<void> {\n this.emit('goal.queue.updated', item);\n try {\n const goal = this.goals.get(item.goalId);\n if (!goal) {\n this.finish(item, 'failed', 'Goal not found');\n return;\n }\n if (terminalGoalStatus(goal.status)) {\n this.finish(item, 'skipped', `Goal is ${goal.status}`);\n return;\n }\n const activeGoal =\n goal.status === 'paused' || goal.status === 'blocked' || goal.status === 'needs_input'\n ? this.goals.resume(goal.id)\n : goal;\n if (!activeGoal) {\n this.finish(item, 'failed', 'Goal not found');\n return;\n }\n const sessionKey = activeGoal.activeSessionKey ?? (await this.opts.ensureSession(activeGoal));\n item = this.store.setSessionKey(item.id, sessionKey) ?? { ...item, sessionKey };\n if (this.opts.hasActiveRun(sessionKey)) {\n this.retry(item, 'Goal session already has an active run');\n return;\n }\n const message = item.message || activeGoal.nextAction || activeGoal.title;\n await this.opts.runContinuation(sessionKey, message);\n this.finish(item, 'succeeded');\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (item.attempts <= item.maxRetries) {\n this.retry(item, message);\n } else {\n this.finish(item, 'failed', message);\n }\n }\n }\n\n private retry(item: GoalQueueItemSnapshot, error: string): void {\n const base = Math.max(1_000, this.opts.retryBaseMs ?? 5_000);\n item.status = 'retry_waiting';\n item.lastError = error;\n item.nextRunAt = Date.now() + base * 2 ** Math.max(0, item.attempts - 1);\n item = this.store.markRetry(item.id, error, item.nextRunAt) ?? item;\n log.warn({ goalId: item.goalId, attempts: item.attempts, nextRunAt: item.nextRunAt, errorMessage: error }, `Goal run queued for retry: ${error}`);\n this.emit('goal.queue.updated', item);\n this.schedulePump(Math.max(0, item.nextRunAt - Date.now()));\n }\n\n private finish(item: GoalQueueItemSnapshot, status: GoalQueueStatus, error?: string): void {\n item = this.store.markFinished(item.id, status, error) ?? { ...item, status, finishedAt: Date.now(), lastError: error };\n if (status === 'failed') {\n log.warn({ goalId: item.goalId, attempts: item.attempts, errorMessage: error }, `Goal run failed: ${error}`);\n }\n this.emit('goal.queue.updated', item);\n }\n\n private emit(type: string, item: GoalQueueItemSnapshot): void {\n this.opts.emit?.(type, { item: { ...item } });\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import type { Config } from '../config/schema.js';
2
+ import { GoalStore } from './goal-store.js';
3
+ import type { CreateGoalInput, Goal, GoalChecklistAddedBy, GoalChecklistStatus, GoalJudgeDecision, GoalListQuery, GoalSource, GoalStatus, GoalUiLocale, GoalWithDetails } from './types.js';
4
+ export declare class GoalService {
5
+ private readonly store;
6
+ constructor(store?: GoalStore);
7
+ create(input: Omit<CreateGoalInput, 'maxTurns' | 'agentId'> & {
8
+ maxTurns?: number;
9
+ agentId?: string;
10
+ config?: Config;
11
+ }): Goal;
12
+ get(goalId: string): GoalWithDetails | null;
13
+ getActiveForSession(sessionKey: string): GoalWithDetails | null;
14
+ list(query?: GoalListQuery): GoalWithDetails[];
15
+ update(goalId: string, patch: Partial<Pick<Goal, 'title' | 'description' | 'priority' | 'deadlineAt' | 'maxTurns' | 'judgeModelRef' | 'nextAction' | 'blockedReason' | 'activeSessionKey' | 'uiLocale'>>): GoalWithDetails | null;
16
+ setStatus(goalId: string, status: GoalStatus, opts?: {
17
+ reason?: string;
18
+ }): GoalWithDetails | null;
19
+ pause(goalId: string, reason?: string): GoalWithDetails | null;
20
+ resume(goalId: string): GoalWithDetails | null;
21
+ reopen(goalId: string): GoalWithDetails | null;
22
+ complete(goalId: string): GoalWithDetails | null;
23
+ archive(goalId: string): GoalWithDetails | null;
24
+ unarchive(goalId: string): GoalWithDetails | null;
25
+ attachSession(goalId: string, sessionKey: string): GoalWithDetails | null;
26
+ updateChecklist(goalId: string, op: {
27
+ type: 'add';
28
+ text: string;
29
+ addedBy?: GoalChecklistAddedBy;
30
+ } | {
31
+ type: 'mark';
32
+ itemId: string;
33
+ status: GoalChecklistStatus;
34
+ evidenceSummary?: string;
35
+ } | {
36
+ type: 'remove';
37
+ itemId: string;
38
+ } | {
39
+ type: 'reset';
40
+ }): GoalWithDetails | null;
41
+ recordJudgeDecision(input: {
42
+ goalId: string;
43
+ sessionKey: string;
44
+ source: GoalSource;
45
+ decision: GoalJudgeDecision;
46
+ }): GoalWithDetails | null;
47
+ syncPostTurnState(input: {
48
+ goalId: string;
49
+ sessionKey: string;
50
+ source: GoalSource;
51
+ status: GoalStatus;
52
+ turnsUsed: number;
53
+ maxTurns: number;
54
+ reason?: string;
55
+ nextAction?: string;
56
+ assistantPreview?: string;
57
+ verdict: 'continue' | 'done' | 'blocked' | 'needs_input' | 'decompose';
58
+ confidence?: number;
59
+ missingEvidence?: string[];
60
+ userQuestion?: string;
61
+ completedChecklistItemIds?: string[];
62
+ checklist?: Array<{
63
+ text: string;
64
+ status: 'pending' | 'completed' | 'impossible';
65
+ addedBy: 'user' | 'judge';
66
+ addedAt?: number;
67
+ completedAt?: number;
68
+ evidenceSummary?: string;
69
+ }>;
70
+ }): GoalWithDetails | null;
71
+ listRuns(goalId: string, limit?: number): import("./types.js").GoalRun[];
72
+ listRunsForSession(sessionKey: string, limit?: number): import("./types.js").GoalRun[];
73
+ listEvents(goalId: string, limit?: number): import("./types.js").GoalEvent[];
74
+ addEvidence(input: Parameters<GoalStore['addEvidence']>[0]): import("./types.js").GoalEvidence;
75
+ listEvidence(goalId: string, limit?: number): import("./types.js").GoalEvidence[];
76
+ }
77
+ export declare function normalizeGoalUiLocale(raw: unknown): GoalUiLocale | undefined;