@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 +1 @@
1
- {"version":3,"file":"workflow-engine.js","names":[],"sources":["../../../../src/workflows/engine/workflow-engine.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type { WorkflowDefinition } from '../domain/definition.js';\nimport type { WorkflowEventEnvelope, WorkflowEventPayload, WorkflowEventType } from '../domain/event.js';\nimport type { WorkflowRun, WorkflowRunError, WorkflowRunMetadata, WorkflowRunSource, WorkflowRunView } from '../domain/run.js';\nimport type { WorkflowResultEnvelope } from '../domain/result.js';\nimport { validateWorkflowJsonSchema } from '../domain/schema-validation.js';\nimport { WorkflowEventStore } from '../store/event-store.js';\nimport { WorkflowRunStore } from '../store/run-store.js';\nimport { createScriptWorkflowRuntime } from '../runtime/script-workflow-runtime.js';\nimport type { WorkflowRuntime } from '../runtime/workflow-runtime-port.js';\nimport type { Api, Model } from '@earendil-works/pi-ai';\n\nimport { workflowStepLabel } from '../../agent/workflow/step-labels.js';\nimport type { SubagentProgressEvent } from '../../agent/workflow/types.js';\nimport type { WorkflowScriptSubagentRunner } from '../runtime/script-runtime.js';\nimport type { WorkflowAgentInvocationSnapshot } from '../domain/index.js';\n\nexport interface WorkflowEngineOptions {\n cwd: string;\n eventStore: WorkflowEventStore;\n runStore: WorkflowRunStore;\n runner: WorkflowScriptSubagentRunner;\n runtime?: WorkflowRuntime;\n hooks?: WorkflowEngineHook[];\n subagentSessionKeyFactory?: (ctx: { runId: string; agentId: string }) => string;\n parentSessionKey?: string;\n onEventAppended?: (event: WorkflowEventEnvelope) => void;\n onRunViewUpdated?: (view: WorkflowRunView) => void;\n resolveModelId?: (modelId: string) => Model<Api>;\n}\n\nexport interface WorkflowEngineHook {\n beforeRun?(ctx: WorkflowRunHookContext): Promise<void> | void;\n beforeAgent?(ctx: WorkflowAgentHookContext): Promise<void> | void;\n afterAgent?(ctx: WorkflowAgentCompletedHookContext): Promise<void> | void;\n afterRun?(ctx: WorkflowRunCompletedHookContext): Promise<void> | void;\n}\n\nexport interface WorkflowRunHookContext {\n definition: WorkflowDefinition;\n run: WorkflowRun;\n}\n\nexport interface WorkflowAgentHookContext {\n runId: string;\n agentId: string;\n label: string;\n phaseId?: string;\n prompt: string;\n}\n\nexport interface WorkflowAgentCompletedHookContext {\n runId: string;\n agentId: string;\n status: 'done' | 'error' | 'skipped';\n resultPreview?: string;\n}\n\nexport interface WorkflowRunCompletedHookContext {\n runId: string;\n status: 'succeeded' | 'failed' | 'cancelled';\n}\n\nexport interface StartWorkflowRunOptions {\n input?: unknown;\n source: WorkflowRunSource;\n metadata?: WorkflowRunMetadata;\n goal?: string;\n runId?: string;\n signal?: AbortSignal;\n concurrency?: number;\n maxSubagents?: number;\n tokenBudget?: number | null;\n timeoutSec?: number;\n}\n\nexport interface WorkflowReplayAgentTarget {\n agentId: string;\n label: string;\n phaseId?: string;\n phaseTitle?: string;\n prompt: string;\n invocation?: WorkflowAgentInvocationSnapshot;\n}\n\nexport interface StartWorkflowReplayRunOptions extends StartWorkflowRunOptions {\n sourceRunId: string;\n replayScope: 'failed_agents' | 'failed_phases';\n targets: WorkflowReplayAgentTarget[];\n}\n\nexport class WorkflowEngine {\n constructor(private readonly options: WorkflowEngineOptions) {}\n\n async startRun(definition: WorkflowDefinition, options: StartWorkflowRunOptions): Promise<WorkflowRunView> {\n const runId = options.runId ?? randomUUID();\n const createdAtMs = Date.now();\n const phaseTitleToId = buildPhaseTitleToId(definition);\n let currentPhaseId: string | undefined;\n let eventQueue = Promise.resolve();\n const progressRecorders = new Map<number, AgentProgressRecorder>();\n const subagentSessionKeys = new Map<number, string>();\n\n const run: WorkflowRun = {\n id: runId,\n definitionId: definition.id,\n definitionVersion: definition.version,\n title: definition.title,\n goal: options.goal ?? definition.description,\n input: options.input ?? {},\n status: 'queued',\n source: options.source,\n metadata: options.metadata,\n metrics: {\n agentCount: 0,\n doneAgentCount: 0,\n errorAgentCount: 0,\n skippedAgentCount: 0,\n artifactCount: 0,\n },\n createdAtMs,\n };\n\n const appendEvent = (type: WorkflowEventType, payload: WorkflowEventPayload, createdAtMsOverride?: number) => {\n eventQueue = eventQueue\n .then(() =>\n this.options.eventStore.append({\n runId,\n type,\n payload,\n createdAtMs: createdAtMsOverride,\n }),\n )\n .then(async (event) => {\n this.options.onEventAppended?.(event);\n const view = await this.options.runStore.rebuildRunView(runId);\n if (view) {\n this.options.onRunViewUpdated?.(view);\n }\n });\n return eventQueue;\n };\n\n await appendEvent('run_queued', { run }, createdAtMs);\n await this.callHooks((hook) => hook.beforeRun?.({ definition, run }));\n await appendEvent('run_started', { startedAtMs: Date.now() });\n\n try {\n const runtime = this.options.runtime ?? createScriptWorkflowRuntime();\n const runtimeResult = await withWorkflowTimeout(\n runtime.run<unknown>(\n definition.runtime.source,\n {\n runner: this.options.runner,\n resolveModelId: this.options.resolveModelId,\n },\n {\n cwd: this.options.cwd,\n args: options.input,\n signal: options.signal,\n concurrency: options.concurrency ?? definition.defaults.concurrency,\n maxSubagents: options.maxSubagents ?? definition.defaults.maxSubagents,\n tokenBudget: options.tokenBudget,\n onPhase: (title) => {\n const nextPhaseId = phaseTitleToId.get(title) ?? normalizePhaseId(title);\n if (currentPhaseId && currentPhaseId !== nextPhaseId) {\n void appendEvent('phase_completed', { phaseId: currentPhaseId });\n }\n currentPhaseId = nextPhaseId;\n void appendEvent('phase_started', { phaseId: nextPhaseId, title });\n },\n onLog: (message) => {\n void appendEvent('log_appended', { message });\n },\n onAgentQueued: (event) => {\n const agentId = formatRuntimeAgentId(event.id);\n const subagentSessionKey = this.options.subagentSessionKeyFactory?.({ runId, agentId }) ?? defaultSubagentSessionKey(runId, agentId);\n subagentSessionKeys.set(event.id, subagentSessionKey);\n const phaseId = event.phase ? (phaseTitleToId.get(event.phase) ?? normalizePhaseId(event.phase)) : currentPhaseId;\n void this.callHooks((hook) => hook.beforeAgent?.({\n runId,\n agentId,\n label: event.label,\n phaseId,\n prompt: event.prompt,\n }));\n void appendEvent('agent_queued', {\n agentId,\n label: event.label,\n phaseId,\n prompt: event.prompt,\n sessionKey: subagentSessionKey,\n invocation: event.invocation,\n });\n },\n onAgentStart: (event) => {\n void appendEvent('agent_started', { agentId: formatRuntimeAgentId(event.id) });\n },\n onAgentEnd: (event) => {\n const agentId = formatRuntimeAgentId(event.id);\n const completedStatus = normalizeCompletedAgentStatus(event.status);\n const resultPreview = previewWorkflowValue(event.result);\n progressRecorders.get(event.id)?.completeOpenSteps(completedStatus === 'done' ? 'done' : 'error');\n progressRecorders.delete(event.id);\n void appendEvent('agent_completed', {\n agentId,\n status: completedStatus,\n resultPreview,\n error: completedStatus === 'error' ? 'Subagent failed' : undefined,\n }).then(() => this.callHooks((hook) => hook.afterAgent?.({\n runId,\n agentId,\n status: completedStatus,\n resultPreview,\n })).catch(() => undefined));\n },\n enhanceSubagentRun: (ctx) => {\n const recorder = new AgentProgressRecorder({\n agentId: formatRuntimeAgentId(ctx.id),\n appendEvent,\n });\n progressRecorders.set(ctx.id, recorder);\n const agentId = formatRuntimeAgentId(ctx.id);\n const sessionKey = subagentSessionKeys.get(ctx.id)\n ?? this.options.subagentSessionKeyFactory?.({ runId, agentId })\n ?? defaultSubagentSessionKey(runId, agentId);\n subagentSessionKeys.set(ctx.id, sessionKey);\n return {\n sessionKey,\n sessionMetadata: {\n parentSessionKey: this.options.parentSessionKey,\n workflowRunId: runId,\n workflowDefinitionId: definition.id,\n workflowAgentId: agentId,\n workflowAgentLabel: ctx.label,\n },\n onProgress: (event) => recorder.onProgress(event),\n };\n },\n },\n ),\n options.timeoutSec ?? definition.defaults.timeoutSec,\n );\n\n await eventQueue;\n if (currentPhaseId) {\n await appendEvent('phase_completed', { phaseId: currentPhaseId });\n }\n assertWorkflowOutput(definition, runtimeResult.result);\n await appendEvent('run_completed', { result: toWorkflowResultEnvelope(runtimeResult.result) });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'succeeded' }));\n } catch (err) {\n await eventQueue;\n const error = toWorkflowRunError(err, options.signal?.aborted === true, options.signal?.reason);\n if (error.code === 'cancelled') {\n await appendEvent('run_cancelled', { reason: error.message });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'cancelled' }));\n } else {\n await appendEvent('run_failed', { error });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'failed' }));\n }\n }\n\n const view = await this.options.runStore.readRunView(runId);\n if (!view) {\n throw new Error(`workflow run view was not created for ${runId}`);\n }\n return view;\n }\n\n async startReplayRun(definition: WorkflowDefinition, options: StartWorkflowReplayRunOptions): Promise<WorkflowRunView> {\n const runId = options.runId ?? randomUUID();\n const createdAtMs = Date.now();\n let eventQueue = Promise.resolve();\n const progressRecorders = new Map<string, AgentProgressRecorder>();\n\n const run: WorkflowRun = {\n id: runId,\n definitionId: definition.id,\n definitionVersion: definition.version,\n title: `${definition.title} replay`,\n goal: options.goal ?? definition.description,\n input: options.input ?? {},\n status: 'queued',\n source: options.source,\n metadata: options.metadata,\n metrics: {\n agentCount: 0,\n doneAgentCount: 0,\n errorAgentCount: 0,\n skippedAgentCount: 0,\n artifactCount: 0,\n },\n createdAtMs,\n };\n\n const appendEvent = (type: WorkflowEventType, payload: WorkflowEventPayload, createdAtMsOverride?: number) => {\n eventQueue = eventQueue\n .then(() =>\n this.options.eventStore.append({\n runId,\n type,\n payload,\n createdAtMs: createdAtMsOverride,\n }),\n )\n .then(async (event) => {\n this.options.onEventAppended?.(event);\n const view = await this.options.runStore.rebuildRunView(runId);\n if (view) {\n this.options.onRunViewUpdated?.(view);\n }\n });\n return eventQueue;\n };\n\n await appendEvent('run_queued', { run }, createdAtMs);\n await this.callHooks((hook) => hook.beforeRun?.({ definition, run }));\n await appendEvent('run_started', { startedAtMs: Date.now() });\n\n try {\n const result = await withWorkflowTimeout(\n this.runReplayTargets({\n definition,\n runId,\n targets: options.targets,\n signal: options.signal,\n appendEvent,\n progressRecorders,\n }),\n options.timeoutSec ?? definition.defaults.timeoutSec,\n );\n\n await eventQueue;\n if (result.errors.length > 0) {\n await appendEvent('run_failed', {\n error: {\n code: 'runtime_error',\n message: `Replay completed with ${result.errors.length} failed target${result.errors.length === 1 ? '' : 's'}.`,\n detail: result.errors.join('\\n'),\n recoverable: true,\n },\n });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'failed' }));\n } else {\n await appendEvent('run_completed', { result: buildReplayResultEnvelope(options, result.results) });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'succeeded' }));\n }\n } catch (err) {\n await eventQueue;\n const error = toWorkflowRunError(err, options.signal?.aborted === true, options.signal?.reason);\n if (error.code === 'cancelled') {\n await appendEvent('run_cancelled', { reason: error.message });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'cancelled' }));\n } else {\n await appendEvent('run_failed', { error });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'failed' }));\n }\n }\n\n const view = await this.options.runStore.readRunView(runId);\n if (!view) {\n throw new Error(`workflow replay run view was not created for ${runId}`);\n }\n return view;\n }\n\n private async runReplayTargets(params: {\n definition: WorkflowDefinition;\n runId: string;\n targets: WorkflowReplayAgentTarget[];\n signal?: AbortSignal;\n appendEvent: AppendWorkflowEvent;\n progressRecorders: Map<string, AgentProgressRecorder>;\n }): Promise<{ results: WorkflowReplayTargetResult[]; errors: string[] }> {\n const results: WorkflowReplayTargetResult[] = [];\n const errors: string[] = [];\n const targetsByPhase = groupReplayTargetsByPhase(params.targets);\n\n for (const group of targetsByPhase) {\n throwIfSignalAborted(params.signal);\n if (group.phaseId && group.phaseTitle) {\n await params.appendEvent('phase_started', { phaseId: group.phaseId, title: group.phaseTitle });\n }\n\n const phaseResults = await Promise.all(\n group.targets.map((target) => this.runReplayTarget({ ...params, target })),\n );\n results.push(...phaseResults);\n errors.push(...phaseResults.filter((item) => item.status === 'error').map((item) => `${item.label}: ${item.error ?? 'failed'}`));\n\n if (group.phaseId && phaseResults.every((item) => item.status === 'done')) {\n await params.appendEvent('phase_completed', { phaseId: group.phaseId });\n }\n }\n\n return { results, errors };\n }\n\n private async runReplayTarget(params: {\n definition: WorkflowDefinition;\n runId: string;\n target: WorkflowReplayAgentTarget;\n signal?: AbortSignal;\n appendEvent: AppendWorkflowEvent;\n progressRecorders: Map<string, AgentProgressRecorder>;\n }): Promise<WorkflowReplayTargetResult> {\n const { target } = params;\n const invocation = normalizeReplayInvocation(target);\n const sessionKey = this.options.subagentSessionKeyFactory?.({ runId: params.runId, agentId: target.agentId })\n ?? defaultSubagentSessionKey(params.runId, target.agentId);\n await this.callHooks((hook) => hook.beforeAgent?.({\n runId: params.runId,\n agentId: target.agentId,\n label: invocation.label,\n phaseId: target.phaseId,\n prompt: invocation.prompt,\n }));\n await params.appendEvent('agent_queued', {\n agentId: target.agentId,\n label: invocation.label,\n phaseId: target.phaseId,\n prompt: invocation.prompt,\n sessionKey,\n invocation,\n });\n await params.appendEvent('agent_started', { agentId: target.agentId });\n\n const recorder = new AgentProgressRecorder({\n agentId: target.agentId,\n appendEvent: params.appendEvent,\n });\n params.progressRecorders.set(target.agentId, recorder);\n\n try {\n throwIfSignalAborted(params.signal);\n const model = resolveReplayModel(invocation, this.options.resolveModelId);\n const result = await this.options.runner.run<unknown>(invocation.prompt, {\n label: invocation.label,\n schema: invocation.schema as never,\n allowedToolNames: invocation.toolset,\n maxIterations: invocation.maxIterations,\n phase: invocation.phase ?? target.phaseTitle,\n signal: params.signal,\n model,\n sessionKey,\n sessionMetadata: {\n parentSessionKey: this.options.parentSessionKey,\n workflowRunId: params.runId,\n workflowDefinitionId: params.definition.id,\n workflowAgentId: target.agentId,\n workflowAgentLabel: invocation.label,\n },\n onProgress: (event) => recorder.onProgress(event),\n });\n throwIfSignalAborted(params.signal);\n const status = result === null ? 'error' : 'done';\n const resultPreview = previewWorkflowValue(result);\n recorder.completeOpenSteps(status === 'done' ? 'done' : 'error');\n await params.appendEvent('agent_completed', {\n agentId: target.agentId,\n status,\n resultPreview,\n error: status === 'error' ? 'Replay target failed' : undefined,\n });\n await this.callHooks((hook) => hook.afterAgent?.({\n runId: params.runId,\n agentId: target.agentId,\n status,\n resultPreview,\n }));\n return { agentId: target.agentId, label: invocation.label, phaseId: target.phaseId, status, resultPreview };\n } catch (err) {\n if (params.signal?.aborted) throw err;\n const message = err instanceof Error ? err.message : String(err);\n recorder.completeOpenSteps('error');\n await params.appendEvent('agent_completed', {\n agentId: target.agentId,\n status: 'error',\n error: message,\n });\n await this.callHooks((hook) => hook.afterAgent?.({\n runId: params.runId,\n agentId: target.agentId,\n status: 'error',\n }));\n return { agentId: target.agentId, label: invocation.label, phaseId: target.phaseId, status: 'error', error: message };\n } finally {\n params.progressRecorders.delete(target.agentId);\n }\n }\n\n private async callHooks(call: (hook: WorkflowEngineHook) => Promise<void> | void | undefined): Promise<void> {\n for (const hook of this.options.hooks ?? []) {\n try {\n await call(hook);\n } catch {\n // Hooks are extension points; workflow execution remains authoritative.\n }\n }\n }\n}\n\ninterface WorkflowReplayTargetResult {\n agentId: string;\n label: string;\n phaseId?: string;\n status: 'done' | 'error';\n resultPreview?: string;\n error?: string;\n}\n\nclass WorkflowEngineRunError extends Error {\n constructor(\n readonly code: WorkflowRunError['code'],\n message: string,\n readonly recoverable: boolean,\n readonly detail?: string,\n ) {\n super(message);\n this.name = 'WorkflowEngineRunError';\n }\n}\n\ntype AppendWorkflowEvent = (\n type: WorkflowEventType,\n payload: WorkflowEventPayload,\n createdAtMsOverride?: number,\n) => Promise<void>;\n\nclass AgentProgressRecorder {\n private readonly activeToolStepIds = new Map<string, string>();\n private activeIterationStepId: string | null = null;\n private activeThinkingStepId: string | null = null;\n private activeLlmStepId: string | null = null;\n private sequence = 0;\n\n constructor(\n private readonly options: {\n agentId: string;\n appendEvent: AppendWorkflowEvent;\n },\n ) {}\n\n onProgress(event: SubagentProgressEvent): void {\n switch (event.type) {\n case 'tool_start':\n this.startToolStep(event);\n return;\n case 'tool_end':\n this.completeToolStep(event);\n return;\n case 'iteration':\n this.replaceSingletonStep('iteration', this.buildIterationLabel(event.count, event.max), 'llm');\n return;\n case 'thinking_delta':\n this.ensureSingletonStep('thinking', 'Thinking', 'thinking');\n return;\n case 'text_delta':\n this.ensureSingletonStep('llm', 'Writing response', 'llm');\n return;\n default:\n return;\n }\n }\n\n completeOpenSteps(status: 'done' | 'error'): void {\n for (const stepId of this.activeToolStepIds.values()) {\n void this.options.appendEvent('agent_step_completed', {\n agentId: this.options.agentId,\n stepId,\n status,\n });\n }\n this.activeToolStepIds.clear();\n this.completeSingletonStep('iteration', status);\n this.completeSingletonStep('thinking', status);\n this.completeSingletonStep('llm', status);\n }\n\n private startToolStep(event: Extract<SubagentProgressEvent, { type: 'tool_start' }>): void {\n const stepId = this.nextStepId('tool');\n const { label, detail } = workflowStepLabel(event.toolName, event.args);\n this.activeToolStepIds.set(event.toolCallId, stepId);\n void this.options.appendEvent('agent_step_started', {\n agentId: this.options.agentId,\n stepId,\n label,\n kind: 'tool',\n toolName: event.toolName,\n detail: detail ?? previewWorkflowValue(event.args),\n });\n }\n\n private completeToolStep(event: Extract<SubagentProgressEvent, { type: 'tool_end' }>): void {\n const stepId = this.activeToolStepIds.get(event.toolCallId);\n if (!stepId) return;\n this.activeToolStepIds.delete(event.toolCallId);\n void this.options.appendEvent('agent_step_completed', {\n agentId: this.options.agentId,\n stepId,\n status: event.isError ? 'error' : 'done',\n resultPreview: event.resultPreview,\n error: event.error,\n });\n }\n\n private replaceSingletonStep(\n slot: 'iteration' | 'thinking' | 'llm',\n label: string,\n kind: 'tool' | 'llm' | 'thinking',\n ): void {\n this.completeSingletonStep(slot, 'done');\n this.ensureSingletonStep(slot, label, kind);\n }\n\n private ensureSingletonStep(\n slot: 'iteration' | 'thinking' | 'llm',\n label: string,\n kind: 'tool' | 'llm' | 'thinking',\n ): void {\n if (this.getSingletonStepId(slot)) return;\n const stepId = this.nextStepId(slot);\n this.setSingletonStepId(slot, stepId);\n void this.options.appendEvent('agent_step_started', {\n agentId: this.options.agentId,\n stepId,\n label,\n kind,\n });\n }\n\n private completeSingletonStep(slot: 'iteration' | 'thinking' | 'llm', status: 'done' | 'error'): void {\n const stepId = this.getSingletonStepId(slot);\n if (!stepId) return;\n this.setSingletonStepId(slot, null);\n void this.options.appendEvent('agent_step_completed', {\n agentId: this.options.agentId,\n stepId,\n status,\n });\n }\n\n private getSingletonStepId(slot: 'iteration' | 'thinking' | 'llm'): string | null {\n if (slot === 'iteration') return this.activeIterationStepId;\n if (slot === 'thinking') return this.activeThinkingStepId;\n return this.activeLlmStepId;\n }\n\n private setSingletonStepId(slot: 'iteration' | 'thinking' | 'llm', stepId: string | null): void {\n if (slot === 'iteration') {\n this.activeIterationStepId = stepId;\n return;\n }\n if (slot === 'thinking') {\n this.activeThinkingStepId = stepId;\n return;\n }\n this.activeLlmStepId = stepId;\n }\n\n private buildIterationLabel(count: number, max: number): string {\n if (max > 0) return `Iteration ${count}/${max}`;\n return `Iteration ${count}`;\n }\n\n private nextStepId(kind: string): string {\n this.sequence += 1;\n return `${this.options.agentId}-${kind}-${this.sequence}`;\n }\n}\n\nfunction buildPhaseTitleToId(definition: WorkflowDefinition): Map<string, string> {\n const phaseTitleToId = new Map<string, string>();\n for (const phase of definition.phases) {\n phaseTitleToId.set(phase.title, phase.id);\n }\n return phaseTitleToId;\n}\n\nfunction normalizePhaseId(title: string): string {\n const normalized = title\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n return normalized || 'phase';\n}\n\nfunction withWorkflowTimeout<T>(promise: Promise<T>, timeoutSec: number | undefined): Promise<T> {\n if (typeof timeoutSec !== 'number' || !Number.isFinite(timeoutSec) || timeoutSec <= 0) {\n return promise;\n }\n\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<never>((_resolve, reject) => {\n timeout = setTimeout(() => {\n reject(new Error(`workflow timed out after ${timeoutSec}s`));\n }, timeoutSec * 1000);\n });\n\n return Promise.race([promise, timeoutPromise]).finally(() => {\n if (timeout) clearTimeout(timeout);\n });\n}\n\nfunction throwIfSignalAborted(signal: AbortSignal | undefined): void {\n if (!signal?.aborted) return;\n const reason = signal.reason;\n if (reason instanceof Error) throw reason;\n if (reason) throw new Error(String(reason));\n throw new Error('workflow aborted');\n}\n\nfunction groupReplayTargetsByPhase(targets: WorkflowReplayAgentTarget[]): Array<{\n phaseId?: string;\n phaseTitle?: string;\n targets: WorkflowReplayAgentTarget[];\n}> {\n const groups: Array<{\n key: string;\n phaseId?: string;\n phaseTitle?: string;\n targets: WorkflowReplayAgentTarget[];\n }> = [];\n\n for (const target of targets) {\n const key = target.phaseId ?? '';\n let group = groups.find((item) => item.key === key);\n if (!group) {\n group = {\n key,\n phaseId: target.phaseId,\n phaseTitle: target.phaseTitle,\n targets: [],\n };\n groups.push(group);\n }\n group.targets.push(target);\n }\n\n return groups.map(({ key: _key, ...group }) => group);\n}\n\nfunction buildReplayResultEnvelope(\n options: StartWorkflowReplayRunOptions,\n results: WorkflowReplayTargetResult[],\n): WorkflowResultEnvelope {\n const done = results.filter((item) => item.status === 'done').length;\n return {\n summary: `Replay completed for ${done}/${results.length} target${results.length === 1 ? '' : 's'}.`,\n sections: [\n {\n kind: 'json',\n title: 'Replay targets',\n value: {\n sourceRunId: options.sourceRunId,\n scope: options.replayScope,\n targets: results,\n },\n },\n ],\n structuredOutput: {\n replay: {\n sourceRunId: options.sourceRunId,\n scope: options.replayScope,\n targets: results,\n },\n },\n };\n}\n\nfunction normalizeReplayInvocation(target: WorkflowReplayAgentTarget): WorkflowAgentInvocationSnapshot {\n return {\n prompt: target.invocation?.prompt ?? target.prompt,\n label: target.invocation?.label ?? target.label,\n phase: target.invocation?.phase ?? target.phaseTitle,\n modelRef: target.invocation?.modelRef,\n resolvedModelRef: target.invocation?.resolvedModelRef,\n schema: target.invocation?.schema,\n toolset: target.invocation?.toolset ? [...target.invocation.toolset] : undefined,\n maxIterations: target.invocation?.maxIterations,\n };\n}\n\nfunction resolveReplayModel(\n invocation: WorkflowAgentInvocationSnapshot,\n resolveModelId: ((modelId: string) => Model<Api>) | undefined,\n): Model<Api> | undefined {\n const modelRef = invocation.resolvedModelRef ?? invocation.modelRef;\n if (!modelRef) return undefined;\n if (!resolveModelId) {\n throw new Error(`workflow replay missing resolveModelId; cannot resolve model '${modelRef}'`);\n }\n return resolveModelId(modelRef);\n}\n\nfunction formatRuntimeAgentId(id: number): string {\n return `agent-${id}`;\n}\n\nfunction defaultSubagentSessionKey(runId: string, agentId: string): string {\n return `workflow:${runId}:subagent:${agentId}`;\n}\n\nfunction normalizeCompletedAgentStatus(status: string): 'done' | 'error' | 'skipped' {\n if (status === 'done' || status === 'error' || status === 'skipped') {\n return status;\n }\n return 'error';\n}\n\nfunction previewWorkflowValue(value: unknown): string | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === 'string') {\n return truncate(value, 300);\n }\n try {\n return truncate(JSON.stringify(value), 300);\n } catch {\n return truncate(String(value), 300);\n }\n}\n\nfunction truncate(value: string, maxLength: number): string {\n const trimmed = value.trim();\n if (trimmed.length <= maxLength) {\n return trimmed;\n }\n return `${trimmed.slice(0, maxLength - 1)}…`;\n}\n\nfunction toWorkflowResultEnvelope(value: unknown): WorkflowResultEnvelope {\n if (isWorkflowResultEnvelope(value)) {\n return value;\n }\n if (typeof value === 'string') {\n return {\n summary: truncate(value, 800),\n sections: [{ kind: 'text', title: 'Result', content: value }],\n raw: value,\n };\n }\n return {\n summary: 'Workflow completed.',\n sections: [{ kind: 'json', title: 'Result', value }],\n raw: value,\n };\n}\n\nfunction assertWorkflowOutput(definition: WorkflowDefinition, value: unknown): void {\n const validation = validateWorkflowJsonSchema(definition.outputSchema, value);\n if (validation.ok) return;\n throw new WorkflowEngineRunError(\n 'result_validation_failed',\n validation.message ?? 'Workflow result did not match output schema',\n false,\n JSON.stringify(validation.errors ?? []),\n );\n}\n\nfunction isWorkflowResultEnvelope(value: unknown): value is WorkflowResultEnvelope {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const record = value as Partial<WorkflowResultEnvelope>;\n return typeof record.summary === 'string' && Array.isArray(record.sections);\n}\n\nfunction toWorkflowRunError(err: unknown, wasAborted: boolean, abortReason?: unknown): WorkflowRunError {\n if (err instanceof WorkflowEngineRunError) {\n return {\n code: err.code,\n message: err.message,\n detail: err.detail,\n recoverable: err.recoverable,\n };\n }\n const abortMessage = abortReason instanceof Error ? abortReason.message : abortReason ? String(abortReason) : '';\n const message = abortMessage || (err instanceof Error ? err.message : String(err));\n if (/timeout|timed out/i.test(message)) {\n return {\n code: 'timeout',\n message,\n recoverable: true,\n };\n }\n if (wasAborted || /aborted|cancelled/i.test(message)) {\n return {\n code: 'cancelled',\n message: message || 'Workflow run cancelled',\n recoverable: true,\n };\n }\n if (/quota/i.test(message)) {\n return {\n code: 'agent_quota_exceeded',\n message,\n recoverable: true,\n };\n }\n return {\n code: 'runtime_error',\n message,\n recoverable: false,\n };\n}\n"],"mappings":";;;;;AA4FA,IAAa,iBAAb,MAA4B;CAC1B,YAAY,SAAiD;AAAhC,OAAA,UAAA;;CAE7B,MAAM,SAAS,YAAgC,SAA4D;EACzG,MAAM,QAAQ,QAAQ,SAAS,YAAY;EAC3C,MAAM,cAAc,KAAK,KAAK;EAC9B,MAAM,iBAAiB,oBAAoB,WAAW;EACtD,IAAI;EACJ,IAAI,aAAa,QAAQ,SAAS;EAClC,MAAM,oCAAoB,IAAI,KAAoC;EAClE,MAAM,sCAAsB,IAAI,KAAqB;EAErD,MAAM,MAAmB;GACvB,IAAI;GACJ,cAAc,WAAW;GACzB,mBAAmB,WAAW;GAC9B,OAAO,WAAW;GAClB,MAAM,QAAQ,QAAQ,WAAW;GACjC,OAAO,QAAQ,SAAS,EAAE;GAC1B,QAAQ;GACR,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,SAAS;IACP,YAAY;IACZ,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,eAAe;IAChB;GACD;GACD;EAED,MAAM,eAAe,MAAyB,SAA+B,wBAAiC;AAC5G,gBAAa,WACV,WACC,KAAK,QAAQ,WAAW,OAAO;IAC7B;IACA;IACA;IACA,aAAa;IACd,CAAC,CACH,CACA,KAAK,OAAO,UAAU;AACrB,SAAK,QAAQ,kBAAkB,MAAM;IACrC,MAAM,OAAO,MAAM,KAAK,QAAQ,SAAS,eAAe,MAAM;AAC9D,QAAI,KACF,MAAK,QAAQ,mBAAmB,KAAK;KAEvC;AACJ,UAAO;;AAGT,QAAM,YAAY,cAAc,EAAE,KAAK,EAAE,YAAY;AACrD,QAAM,KAAK,WAAW,SAAS,KAAK,YAAY;GAAE;GAAY;GAAK,CAAC,CAAC;AACrE,QAAM,YAAY,eAAe,EAAE,aAAa,KAAK,KAAK,EAAE,CAAC;AAE7D,MAAI;GAEF,MAAM,gBAAgB,MAAM,qBADZ,KAAK,QAAQ,WAAW,6BAA6B,EAE3D,IACN,WAAW,QAAQ,QACnB;IACE,QAAQ,KAAK,QAAQ;IACrB,gBAAgB,KAAK,QAAQ;IAC9B,EACD;IACE,KAAK,KAAK,QAAQ;IAClB,MAAM,QAAQ;IACd,QAAQ,QAAQ;IAChB,aAAa,QAAQ,eAAe,WAAW,SAAS;IACxD,cAAc,QAAQ,gBAAgB,WAAW,SAAS;IAC1D,aAAa,QAAQ;IACrB,UAAU,UAAU;KAClB,MAAM,cAAc,eAAe,IAAI,MAAM,IAAI,iBAAiB,MAAM;AACxE,SAAI,kBAAkB,mBAAmB,YAClC,aAAY,mBAAmB,EAAE,SAAS,gBAAgB,CAAC;AAElE,sBAAiB;AACZ,iBAAY,iBAAiB;MAAE,SAAS;MAAa;MAAO,CAAC;;IAEpE,QAAQ,YAAY;AACb,iBAAY,gBAAgB,EAAE,SAAS,CAAC;;IAE/C,gBAAgB,UAAU;KACxB,MAAM,UAAU,qBAAqB,MAAM,GAAG;KAC9C,MAAM,qBAAqB,KAAK,QAAQ,4BAA4B;MAAE;MAAO;MAAS,CAAC,IAAI,0BAA0B,OAAO,QAAQ;AACpI,yBAAoB,IAAI,MAAM,IAAI,mBAAmB;KACrD,MAAM,UAAU,MAAM,QAAS,eAAe,IAAI,MAAM,MAAM,IAAI,iBAAiB,MAAM,MAAM,GAAI;AAC9F,UAAK,WAAW,SAAS,KAAK,cAAc;MAC/C;MACA;MACA,OAAO,MAAM;MACb;MACA,QAAQ,MAAM;MACf,CAAC,CAAC;AACE,iBAAY,gBAAgB;MAC/B;MACA,OAAO,MAAM;MACb;MACA,QAAQ,MAAM;MACd,YAAY;MACZ,YAAY,MAAM;MACnB,CAAC;;IAEJ,eAAe,UAAU;AAClB,iBAAY,iBAAiB,EAAE,SAAS,qBAAqB,MAAM,GAAG,EAAE,CAAC;;IAEhF,aAAa,UAAU;KACrB,MAAM,UAAU,qBAAqB,MAAM,GAAG;KAC9C,MAAM,kBAAkB,8BAA8B,MAAM,OAAO;KACnE,MAAM,gBAAgB,qBAAqB,MAAM,OAAO;AACxD,uBAAkB,IAAI,MAAM,GAAG,EAAE,kBAAkB,oBAAoB,SAAS,SAAS,QAAQ;AACjG,uBAAkB,OAAO,MAAM,GAAG;AAC7B,iBAAY,mBAAmB;MAClC;MACA,QAAQ;MACR;MACA,OAAO,oBAAoB,UAAU,oBAAoB,KAAA;MAC1D,CAAC,CAAC,WAAW,KAAK,WAAW,SAAS,KAAK,aAAa;MACvD;MACA;MACA,QAAQ;MACR;MACD,CAAC,CAAC,CAAC,YAAY,KAAA,EAAU,CAAC;;IAE7B,qBAAqB,QAAQ;KAC3B,MAAM,WAAW,IAAI,sBAAsB;MACzC,SAAS,qBAAqB,IAAI,GAAG;MACrC;MACD,CAAC;AACF,uBAAkB,IAAI,IAAI,IAAI,SAAS;KACvC,MAAM,UAAU,qBAAqB,IAAI,GAAG;KAC5C,MAAM,aAAa,oBAAoB,IAAI,IAAI,GAAG,IAC7C,KAAK,QAAQ,4BAA4B;MAAE;MAAO;MAAS,CAAC,IAC5D,0BAA0B,OAAO,QAAQ;AAC9C,yBAAoB,IAAI,IAAI,IAAI,WAAW;AAC3C,YAAO;MACL;MACA,iBAAiB;OACf,kBAAkB,KAAK,QAAQ;OAC/B,eAAe;OACf,sBAAsB,WAAW;OACjC,iBAAiB;OACjB,oBAAoB,IAAI;OACzB;MACD,aAAa,UAAU,SAAS,WAAW,MAAM;MAClD;;IAEJ,CACF,EACD,QAAQ,cAAc,WAAW,SAAS,WAC3C;AAED,SAAM;AACN,OAAI,eACF,OAAM,YAAY,mBAAmB,EAAE,SAAS,gBAAgB,CAAC;AAEnE,wBAAqB,YAAY,cAAc,OAAO;AACtD,SAAM,YAAY,iBAAiB,EAAE,QAAQ,yBAAyB,cAAc,OAAO,EAAE,CAAC;AAC9F,SAAM,KAAK,WAAW,SAAS,KAAK,WAAW;IAAE;IAAO,QAAQ;IAAa,CAAC,CAAC;WACxE,KAAK;AACZ,SAAM;GACN,MAAM,QAAQ,mBAAmB,KAAK,QAAQ,QAAQ,YAAY,MAAM,QAAQ,QAAQ,OAAO;AAC/F,OAAI,MAAM,SAAS,aAAa;AAC9B,UAAM,YAAY,iBAAiB,EAAE,QAAQ,MAAM,SAAS,CAAC;AAC7D,UAAM,KAAK,WAAW,SAAS,KAAK,WAAW;KAAE;KAAO,QAAQ;KAAa,CAAC,CAAC;UAC1E;AACL,UAAM,YAAY,cAAc,EAAE,OAAO,CAAC;AAC1C,UAAM,KAAK,WAAW,SAAS,KAAK,WAAW;KAAE;KAAO,QAAQ;KAAU,CAAC,CAAC;;;EAIhF,MAAM,OAAO,MAAM,KAAK,QAAQ,SAAS,YAAY,MAAM;AAC3D,MAAI,CAAC,KACH,OAAM,IAAI,MAAM,yCAAyC,QAAQ;AAEnE,SAAO;;CAGT,MAAM,eAAe,YAAgC,SAAkE;EACrH,MAAM,QAAQ,QAAQ,SAAS,YAAY;EAC3C,MAAM,cAAc,KAAK,KAAK;EAC9B,IAAI,aAAa,QAAQ,SAAS;EAClC,MAAM,oCAAoB,IAAI,KAAoC;EAElE,MAAM,MAAmB;GACvB,IAAI;GACJ,cAAc,WAAW;GACzB,mBAAmB,WAAW;GAC9B,OAAO,GAAG,WAAW,MAAM;GAC3B,MAAM,QAAQ,QAAQ,WAAW;GACjC,OAAO,QAAQ,SAAS,EAAE;GAC1B,QAAQ;GACR,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,SAAS;IACP,YAAY;IACZ,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,eAAe;IAChB;GACD;GACD;EAED,MAAM,eAAe,MAAyB,SAA+B,wBAAiC;AAC5G,gBAAa,WACV,WACC,KAAK,QAAQ,WAAW,OAAO;IAC7B;IACA;IACA;IACA,aAAa;IACd,CAAC,CACH,CACA,KAAK,OAAO,UAAU;AACrB,SAAK,QAAQ,kBAAkB,MAAM;IACrC,MAAM,OAAO,MAAM,KAAK,QAAQ,SAAS,eAAe,MAAM;AAC9D,QAAI,KACF,MAAK,QAAQ,mBAAmB,KAAK;KAEvC;AACJ,UAAO;;AAGT,QAAM,YAAY,cAAc,EAAE,KAAK,EAAE,YAAY;AACrD,QAAM,KAAK,WAAW,SAAS,KAAK,YAAY;GAAE;GAAY;GAAK,CAAC,CAAC;AACrE,QAAM,YAAY,eAAe,EAAE,aAAa,KAAK,KAAK,EAAE,CAAC;AAE7D,MAAI;GACF,MAAM,SAAS,MAAM,oBACnB,KAAK,iBAAiB;IACpB;IACA;IACA,SAAS,QAAQ;IACjB,QAAQ,QAAQ;IAChB;IACA;IACD,CAAC,EACF,QAAQ,cAAc,WAAW,SAAS,WAC3C;AAED,SAAM;AACN,OAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,UAAM,YAAY,cAAc,EAC9B,OAAO;KACL,MAAM;KACN,SAAS,yBAAyB,OAAO,OAAO,OAAO,gBAAgB,OAAO,OAAO,WAAW,IAAI,KAAK,IAAI;KAC7G,QAAQ,OAAO,OAAO,KAAK,KAAK;KAChC,aAAa;KACd,EACF,CAAC;AACF,UAAM,KAAK,WAAW,SAAS,KAAK,WAAW;KAAE;KAAO,QAAQ;KAAU,CAAC,CAAC;UACvE;AACL,UAAM,YAAY,iBAAiB,EAAE,QAAQ,0BAA0B,SAAS,OAAO,QAAQ,EAAE,CAAC;AAClG,UAAM,KAAK,WAAW,SAAS,KAAK,WAAW;KAAE;KAAO,QAAQ;KAAa,CAAC,CAAC;;WAE1E,KAAK;AACZ,SAAM;GACN,MAAM,QAAQ,mBAAmB,KAAK,QAAQ,QAAQ,YAAY,MAAM,QAAQ,QAAQ,OAAO;AAC/F,OAAI,MAAM,SAAS,aAAa;AAC9B,UAAM,YAAY,iBAAiB,EAAE,QAAQ,MAAM,SAAS,CAAC;AAC7D,UAAM,KAAK,WAAW,SAAS,KAAK,WAAW;KAAE;KAAO,QAAQ;KAAa,CAAC,CAAC;UAC1E;AACL,UAAM,YAAY,cAAc,EAAE,OAAO,CAAC;AAC1C,UAAM,KAAK,WAAW,SAAS,KAAK,WAAW;KAAE;KAAO,QAAQ;KAAU,CAAC,CAAC;;;EAIhF,MAAM,OAAO,MAAM,KAAK,QAAQ,SAAS,YAAY,MAAM;AAC3D,MAAI,CAAC,KACH,OAAM,IAAI,MAAM,gDAAgD,QAAQ;AAE1E,SAAO;;CAGT,MAAc,iBAAiB,QAO0C;EACvE,MAAM,UAAwC,EAAE;EAChD,MAAM,SAAmB,EAAE;EAC3B,MAAM,iBAAiB,0BAA0B,OAAO,QAAQ;AAEhE,OAAK,MAAM,SAAS,gBAAgB;AAClC,wBAAqB,OAAO,OAAO;AACnC,OAAI,MAAM,WAAW,MAAM,WACzB,OAAM,OAAO,YAAY,iBAAiB;IAAE,SAAS,MAAM;IAAS,OAAO,MAAM;IAAY,CAAC;GAGhG,MAAM,eAAe,MAAM,QAAQ,IACjC,MAAM,QAAQ,KAAK,WAAW,KAAK,gBAAgB;IAAE,GAAG;IAAQ;IAAQ,CAAC,CAAC,CAC3E;AACD,WAAQ,KAAK,GAAG,aAAa;AAC7B,UAAO,KAAK,GAAG,aAAa,QAAQ,SAAS,KAAK,WAAW,QAAQ,CAAC,KAAK,SAAS,GAAG,KAAK,MAAM,IAAI,KAAK,SAAS,WAAW,CAAC;AAEhI,OAAI,MAAM,WAAW,aAAa,OAAO,SAAS,KAAK,WAAW,OAAO,CACvE,OAAM,OAAO,YAAY,mBAAmB,EAAE,SAAS,MAAM,SAAS,CAAC;;AAI3E,SAAO;GAAE;GAAS;GAAQ;;CAG5B,MAAc,gBAAgB,QAOU;EACtC,MAAM,EAAE,WAAW;EACnB,MAAM,aAAa,0BAA0B,OAAO;EACpD,MAAM,aAAa,KAAK,QAAQ,4BAA4B;GAAE,OAAO,OAAO;GAAO,SAAS,OAAO;GAAS,CAAC,IACxG,0BAA0B,OAAO,OAAO,OAAO,QAAQ;AAC5D,QAAM,KAAK,WAAW,SAAS,KAAK,cAAc;GAChD,OAAO,OAAO;GACd,SAAS,OAAO;GAChB,OAAO,WAAW;GAClB,SAAS,OAAO;GAChB,QAAQ,WAAW;GACpB,CAAC,CAAC;AACH,QAAM,OAAO,YAAY,gBAAgB;GACvC,SAAS,OAAO;GAChB,OAAO,WAAW;GAClB,SAAS,OAAO;GAChB,QAAQ,WAAW;GACnB;GACA;GACD,CAAC;AACF,QAAM,OAAO,YAAY,iBAAiB,EAAE,SAAS,OAAO,SAAS,CAAC;EAEtE,MAAM,WAAW,IAAI,sBAAsB;GACzC,SAAS,OAAO;GAChB,aAAa,OAAO;GACrB,CAAC;AACF,SAAO,kBAAkB,IAAI,OAAO,SAAS,SAAS;AAEtD,MAAI;AACF,wBAAqB,OAAO,OAAO;GACnC,MAAM,QAAQ,mBAAmB,YAAY,KAAK,QAAQ,eAAe;GACzE,MAAM,SAAS,MAAM,KAAK,QAAQ,OAAO,IAAa,WAAW,QAAQ;IACvE,OAAO,WAAW;IAClB,QAAQ,WAAW;IACnB,kBAAkB,WAAW;IAC7B,eAAe,WAAW;IAC1B,OAAO,WAAW,SAAS,OAAO;IAClC,QAAQ,OAAO;IACf;IACA;IACA,iBAAiB;KACf,kBAAkB,KAAK,QAAQ;KAC/B,eAAe,OAAO;KACtB,sBAAsB,OAAO,WAAW;KACxC,iBAAiB,OAAO;KACxB,oBAAoB,WAAW;KAChC;IACD,aAAa,UAAU,SAAS,WAAW,MAAM;IAClD,CAAC;AACF,wBAAqB,OAAO,OAAO;GACnC,MAAM,SAAS,WAAW,OAAO,UAAU;GAC3C,MAAM,gBAAgB,qBAAqB,OAAO;AAClD,YAAS,kBAAkB,WAAW,SAAS,SAAS,QAAQ;AAChE,SAAM,OAAO,YAAY,mBAAmB;IAC1C,SAAS,OAAO;IAChB;IACA;IACA,OAAO,WAAW,UAAU,yBAAyB,KAAA;IACtD,CAAC;AACF,SAAM,KAAK,WAAW,SAAS,KAAK,aAAa;IAC/C,OAAO,OAAO;IACd,SAAS,OAAO;IAChB;IACA;IACD,CAAC,CAAC;AACH,UAAO;IAAE,SAAS,OAAO;IAAS,OAAO,WAAW;IAAO,SAAS,OAAO;IAAS;IAAQ;IAAe;WACpG,KAAK;AACZ,OAAI,OAAO,QAAQ,QAAS,OAAM;GAClC,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AAChE,YAAS,kBAAkB,QAAQ;AACnC,SAAM,OAAO,YAAY,mBAAmB;IAC1C,SAAS,OAAO;IAChB,QAAQ;IACR,OAAO;IACR,CAAC;AACF,SAAM,KAAK,WAAW,SAAS,KAAK,aAAa;IAC/C,OAAO,OAAO;IACd,SAAS,OAAO;IAChB,QAAQ;IACT,CAAC,CAAC;AACH,UAAO;IAAE,SAAS,OAAO;IAAS,OAAO,WAAW;IAAO,SAAS,OAAO;IAAS,QAAQ;IAAS,OAAO;IAAS;YAC7G;AACR,UAAO,kBAAkB,OAAO,OAAO,QAAQ;;;CAInD,MAAc,UAAU,MAAqF;AAC3G,OAAK,MAAM,QAAQ,KAAK,QAAQ,SAAS,EAAE,CACzC,KAAI;AACF,SAAM,KAAK,KAAK;UACV;;;AAgBd,IAAM,yBAAN,cAAqC,MAAM;CACzC,YACE,MACA,SACA,aACA,QACA;AACA,QAAM,QAAQ;AALL,OAAA,OAAA;AAEA,OAAA,cAAA;AACA,OAAA,SAAA;AAGT,OAAK,OAAO;;;AAUhB,IAAM,wBAAN,MAA4B;CAC1B,oCAAqC,IAAI,KAAqB;CAC9D,wBAA+C;CAC/C,uBAA8C;CAC9C,kBAAyC;CACzC,WAAmB;CAEnB,YACE,SAIA;AAJiB,OAAA,UAAA;;CAMnB,WAAW,OAAoC;AAC7C,UAAQ,MAAM,MAAd;GACE,KAAK;AACH,SAAK,cAAc,MAAM;AACzB;GACF,KAAK;AACH,SAAK,iBAAiB,MAAM;AAC5B;GACF,KAAK;AACH,SAAK,qBAAqB,aAAa,KAAK,oBAAoB,MAAM,OAAO,MAAM,IAAI,EAAE,MAAM;AAC/F;GACF,KAAK;AACH,SAAK,oBAAoB,YAAY,YAAY,WAAW;AAC5D;GACF,KAAK;AACH,SAAK,oBAAoB,OAAO,oBAAoB,MAAM;AAC1D;GACF,QACE;;;CAIN,kBAAkB,QAAgC;AAChD,OAAK,MAAM,UAAU,KAAK,kBAAkB,QAAQ,CAC7C,MAAK,QAAQ,YAAY,wBAAwB;GACpD,SAAS,KAAK,QAAQ;GACtB;GACA;GACD,CAAC;AAEJ,OAAK,kBAAkB,OAAO;AAC9B,OAAK,sBAAsB,aAAa,OAAO;AAC/C,OAAK,sBAAsB,YAAY,OAAO;AAC9C,OAAK,sBAAsB,OAAO,OAAO;;CAG3C,cAAsB,OAAqE;EACzF,MAAM,SAAS,KAAK,WAAW,OAAO;EACtC,MAAM,EAAE,OAAO,WAAW,kBAAkB,MAAM,UAAU,MAAM,KAAK;AACvE,OAAK,kBAAkB,IAAI,MAAM,YAAY,OAAO;AAC/C,OAAK,QAAQ,YAAY,sBAAsB;GAClD,SAAS,KAAK,QAAQ;GACtB;GACA;GACA,MAAM;GACN,UAAU,MAAM;GAChB,QAAQ,UAAU,qBAAqB,MAAM,KAAK;GACnD,CAAC;;CAGJ,iBAAyB,OAAmE;EAC1F,MAAM,SAAS,KAAK,kBAAkB,IAAI,MAAM,WAAW;AAC3D,MAAI,CAAC,OAAQ;AACb,OAAK,kBAAkB,OAAO,MAAM,WAAW;AAC1C,OAAK,QAAQ,YAAY,wBAAwB;GACpD,SAAS,KAAK,QAAQ;GACtB;GACA,QAAQ,MAAM,UAAU,UAAU;GAClC,eAAe,MAAM;GACrB,OAAO,MAAM;GACd,CAAC;;CAGJ,qBACE,MACA,OACA,MACM;AACN,OAAK,sBAAsB,MAAM,OAAO;AACxC,OAAK,oBAAoB,MAAM,OAAO,KAAK;;CAG7C,oBACE,MACA,OACA,MACM;AACN,MAAI,KAAK,mBAAmB,KAAK,CAAE;EACnC,MAAM,SAAS,KAAK,WAAW,KAAK;AACpC,OAAK,mBAAmB,MAAM,OAAO;AAChC,OAAK,QAAQ,YAAY,sBAAsB;GAClD,SAAS,KAAK,QAAQ;GACtB;GACA;GACA;GACD,CAAC;;CAGJ,sBAA8B,MAAwC,QAAgC;EACpG,MAAM,SAAS,KAAK,mBAAmB,KAAK;AAC5C,MAAI,CAAC,OAAQ;AACb,OAAK,mBAAmB,MAAM,KAAK;AAC9B,OAAK,QAAQ,YAAY,wBAAwB;GACpD,SAAS,KAAK,QAAQ;GACtB;GACA;GACD,CAAC;;CAGJ,mBAA2B,MAAuD;AAChF,MAAI,SAAS,YAAa,QAAO,KAAK;AACtC,MAAI,SAAS,WAAY,QAAO,KAAK;AACrC,SAAO,KAAK;;CAGd,mBAA2B,MAAwC,QAA6B;AAC9F,MAAI,SAAS,aAAa;AACxB,QAAK,wBAAwB;AAC7B;;AAEF,MAAI,SAAS,YAAY;AACvB,QAAK,uBAAuB;AAC5B;;AAEF,OAAK,kBAAkB;;CAGzB,oBAA4B,OAAe,KAAqB;AAC9D,MAAI,MAAM,EAAG,QAAO,aAAa,MAAM,GAAG;AAC1C,SAAO,aAAa;;CAGtB,WAAmB,MAAsB;AACvC,OAAK,YAAY;AACjB,SAAO,GAAG,KAAK,QAAQ,QAAQ,GAAG,KAAK,GAAG,KAAK;;;AAInD,SAAS,oBAAoB,YAAqD;CAChF,MAAM,iCAAiB,IAAI,KAAqB;AAChD,MAAK,MAAM,SAAS,WAAW,OAC7B,gBAAe,IAAI,MAAM,OAAO,MAAM,GAAG;AAE3C,QAAO;;AAGT,SAAS,iBAAiB,OAAuB;AAM/C,QALmB,MAChB,MAAM,CACN,aAAa,CACb,QAAQ,eAAe,IAAI,CAC3B,QAAQ,YAAY,GACN,IAAI;;AAGvB,SAAS,oBAAuB,SAAqB,YAA4C;AAC/F,KAAI,OAAO,eAAe,YAAY,CAAC,OAAO,SAAS,WAAW,IAAI,cAAc,EAClF,QAAO;CAGT,IAAI;CACJ,MAAM,iBAAiB,IAAI,SAAgB,UAAU,WAAW;AAC9D,YAAU,iBAAiB;AACzB,0BAAO,IAAI,MAAM,4BAA4B,WAAW,GAAG,CAAC;KAC3D,aAAa,IAAK;GACrB;AAEF,QAAO,QAAQ,KAAK,CAAC,SAAS,eAAe,CAAC,CAAC,cAAc;AAC3D,MAAI,QAAS,cAAa,QAAQ;GAClC;;AAGJ,SAAS,qBAAqB,QAAuC;AACnE,KAAI,CAAC,QAAQ,QAAS;CACtB,MAAM,SAAS,OAAO;AACtB,KAAI,kBAAkB,MAAO,OAAM;AACnC,KAAI,OAAQ,OAAM,IAAI,MAAM,OAAO,OAAO,CAAC;AAC3C,OAAM,IAAI,MAAM,mBAAmB;;AAGrC,SAAS,0BAA0B,SAIhC;CACD,MAAM,SAKD,EAAE;AAEP,MAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,MAAM,OAAO,WAAW;EAC9B,IAAI,QAAQ,OAAO,MAAM,SAAS,KAAK,QAAQ,IAAI;AACnD,MAAI,CAAC,OAAO;AACV,WAAQ;IACN;IACA,SAAS,OAAO;IAChB,YAAY,OAAO;IACnB,SAAS,EAAE;IACZ;AACD,UAAO,KAAK,MAAM;;AAEpB,QAAM,QAAQ,KAAK,OAAO;;AAG5B,QAAO,OAAO,KAAK,EAAE,KAAK,MAAM,GAAG,YAAY,MAAM;;AAGvD,SAAS,0BACP,SACA,SACwB;AAExB,QAAO;EACL,SAAS,wBAFE,QAAQ,QAAQ,SAAS,KAAK,WAAW,OAAO,CAAC,OAEtB,GAAG,QAAQ,OAAO,SAAS,QAAQ,WAAW,IAAI,KAAK,IAAI;EACjG,UAAU,CACR;GACE,MAAM;GACN,OAAO;GACP,OAAO;IACL,aAAa,QAAQ;IACrB,OAAO,QAAQ;IACf,SAAS;IACV;GACF,CACF;EACD,kBAAkB,EAChB,QAAQ;GACN,aAAa,QAAQ;GACrB,OAAO,QAAQ;GACf,SAAS;GACV,EACF;EACF;;AAGH,SAAS,0BAA0B,QAAoE;AACrG,QAAO;EACL,QAAQ,OAAO,YAAY,UAAU,OAAO;EAC5C,OAAO,OAAO,YAAY,SAAS,OAAO;EAC1C,OAAO,OAAO,YAAY,SAAS,OAAO;EAC1C,UAAU,OAAO,YAAY;EAC7B,kBAAkB,OAAO,YAAY;EACrC,QAAQ,OAAO,YAAY;EAC3B,SAAS,OAAO,YAAY,UAAU,CAAC,GAAG,OAAO,WAAW,QAAQ,GAAG,KAAA;EACvE,eAAe,OAAO,YAAY;EACnC;;AAGH,SAAS,mBACP,YACA,gBACwB;CACxB,MAAM,WAAW,WAAW,oBAAoB,WAAW;AAC3D,KAAI,CAAC,SAAU,QAAO,KAAA;AACtB,KAAI,CAAC,eACH,OAAM,IAAI,MAAM,iEAAiE,SAAS,GAAG;AAE/F,QAAO,eAAe,SAAS;;AAGjC,SAAS,qBAAqB,IAAoB;AAChD,QAAO,SAAS;;AAGlB,SAAS,0BAA0B,OAAe,SAAyB;AACzE,QAAO,YAAY,MAAM,YAAY;;AAGvC,SAAS,8BAA8B,QAA8C;AACnF,KAAI,WAAW,UAAU,WAAW,WAAW,WAAW,UACxD,QAAO;AAET,QAAO;;AAGT,SAAS,qBAAqB,OAAoC;AAChE,KAAI,UAAU,QAAQ,UAAU,KAAA,EAC9B;AAEF,KAAI,OAAO,UAAU,SACnB,QAAO,SAAS,OAAO,IAAI;AAE7B,KAAI;AACF,SAAO,SAAS,KAAK,UAAU,MAAM,EAAE,IAAI;SACrC;AACN,SAAO,SAAS,OAAO,MAAM,EAAE,IAAI;;;AAIvC,SAAS,SAAS,OAAe,WAA2B;CAC1D,MAAM,UAAU,MAAM,MAAM;AAC5B,KAAI,QAAQ,UAAU,UACpB,QAAO;AAET,QAAO,GAAG,QAAQ,MAAM,GAAG,YAAY,EAAE,CAAC;;AAG5C,SAAS,yBAAyB,OAAwC;AACxE,KAAI,yBAAyB,MAAM,CACjC,QAAO;AAET,KAAI,OAAO,UAAU,SACnB,QAAO;EACL,SAAS,SAAS,OAAO,IAAI;EAC7B,UAAU,CAAC;GAAE,MAAM;GAAQ,OAAO;GAAU,SAAS;GAAO,CAAC;EAC7D,KAAK;EACN;AAEH,QAAO;EACL,SAAS;EACT,UAAU,CAAC;GAAE,MAAM;GAAQ,OAAO;GAAU;GAAO,CAAC;EACpD,KAAK;EACN;;AAGH,SAAS,qBAAqB,YAAgC,OAAsB;CAClF,MAAM,aAAa,2BAA2B,WAAW,cAAc,MAAM;AAC7E,KAAI,WAAW,GAAI;AACnB,OAAM,IAAI,uBACR,4BACA,WAAW,WAAW,+CACtB,OACA,KAAK,UAAU,WAAW,UAAU,EAAE,CAAC,CACxC;;AAGH,SAAS,yBAAyB,OAAiD;AACjF,KAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,MAAM,CAC7D,QAAO;CAET,MAAM,SAAS;AACf,QAAO,OAAO,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,SAAS;;AAG7E,SAAS,mBAAmB,KAAc,YAAqB,aAAyC;AACtG,KAAI,eAAe,uBACjB,QAAO;EACL,MAAM,IAAI;EACV,SAAS,IAAI;EACb,QAAQ,IAAI;EACZ,aAAa,IAAI;EAClB;CAGH,MAAM,WADe,uBAAuB,QAAQ,YAAY,UAAU,cAAc,OAAO,YAAY,GAAG,QAC7E,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;AACjF,KAAI,qBAAqB,KAAK,QAAQ,CACpC,QAAO;EACL,MAAM;EACN;EACA,aAAa;EACd;AAEH,KAAI,cAAc,qBAAqB,KAAK,QAAQ,CAClD,QAAO;EACL,MAAM;EACN,SAAS,WAAW;EACpB,aAAa;EACd;AAEH,KAAI,SAAS,KAAK,QAAQ,CACxB,QAAO;EACL,MAAM;EACN;EACA,aAAa;EACd;AAEH,QAAO;EACL,MAAM;EACN;EACA,aAAa;EACd"}
1
+ {"version":3,"file":"workflow-engine.js","names":[],"sources":["../../../../src/workflows/engine/workflow-engine.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport type { WorkflowDefinition } from '../domain/definition.js';\nimport type { WorkflowEventEnvelope, WorkflowEventPayload, WorkflowEventType } from '../domain/event.js';\nimport type { WorkflowAgentStatus, WorkflowRun, WorkflowRunError, WorkflowRunMetadata, WorkflowRunSource, WorkflowRunView } from '../domain/run.js';\nimport type { WorkflowResultEnvelope } from '../domain/result.js';\nimport { validateWorkflowJsonSchema } from '../domain/schema-validation.js';\nimport { WorkflowEventStore } from '../store/event-store.js';\nimport { WorkflowRunStore } from '../store/run-store.js';\nimport { createScriptWorkflowRuntime } from '../runtime/script-workflow-runtime.js';\nimport type { WorkflowRuntime } from '../runtime/workflow-runtime-port.js';\nimport type { Api, Model } from '@earendil-works/pi-ai';\n\nimport { workflowStepLabel } from '../../agent/workflow/step-labels.js';\nimport type { SubagentProgressEvent } from '../../agent/workflow/types.js';\nimport type { WorkflowScriptSubagentRunner } from '../runtime/script-runtime.js';\nimport type { WorkflowAgentInvocationSnapshot } from '../domain/index.js';\n\nexport interface WorkflowEngineOptions {\n cwd: string;\n eventStore: WorkflowEventStore;\n runStore: WorkflowRunStore;\n runner: WorkflowScriptSubagentRunner;\n runtime?: WorkflowRuntime;\n hooks?: WorkflowEngineHook[];\n subagentSessionKeyFactory?: (ctx: { runId: string; agentId: string }) => string;\n parentSessionKey?: string;\n onEventAppended?: (event: WorkflowEventEnvelope) => void;\n onRunViewUpdated?: (view: WorkflowRunView) => void;\n resolveModelId?: (modelId: string) => Model<Api>;\n}\n\nexport interface WorkflowEngineHook {\n beforeRun?(ctx: WorkflowRunHookContext): Promise<void> | void;\n beforeAgent?(ctx: WorkflowAgentHookContext): Promise<void> | void;\n afterAgent?(ctx: WorkflowAgentCompletedHookContext): Promise<void> | void;\n afterRun?(ctx: WorkflowRunCompletedHookContext): Promise<void> | void;\n}\n\nexport interface WorkflowRunHookContext {\n definition: WorkflowDefinition;\n run: WorkflowRun;\n}\n\nexport interface WorkflowAgentHookContext {\n runId: string;\n agentId: string;\n label: string;\n phaseId?: string;\n prompt: string;\n}\n\nexport interface WorkflowAgentCompletedHookContext {\n runId: string;\n agentId: string;\n status: 'done' | 'error' | 'skipped';\n resultPreview?: string;\n}\n\nexport interface WorkflowRunCompletedHookContext {\n runId: string;\n status: 'succeeded' | 'failed' | 'cancelled';\n}\n\nexport interface StartWorkflowRunOptions {\n input?: unknown;\n source: WorkflowRunSource;\n metadata?: WorkflowRunMetadata;\n goal?: string;\n runId?: string;\n signal?: AbortSignal;\n concurrency?: number;\n maxSubagents?: number;\n tokenBudget?: number | null;\n timeoutSec?: number;\n}\n\nexport interface WorkflowReplayAgentTarget {\n agentId: string;\n label: string;\n phaseId?: string;\n phaseTitle?: string;\n prompt: string;\n invocation?: WorkflowAgentInvocationSnapshot;\n}\n\nexport interface StartWorkflowReplayRunOptions extends StartWorkflowRunOptions {\n sourceRunId: string;\n replayScope: 'failed_agents' | 'failed_phases';\n targets: WorkflowReplayAgentTarget[];\n}\n\nexport class WorkflowEngine {\n constructor(private readonly options: WorkflowEngineOptions) {}\n\n async startRun(definition: WorkflowDefinition, options: StartWorkflowRunOptions): Promise<WorkflowRunView> {\n const runId = options.runId ?? randomUUID();\n const createdAtMs = Date.now();\n const phaseTitleToId = buildPhaseTitleToId(definition);\n let currentPhaseId: string | undefined;\n let eventQueue = Promise.resolve();\n const progressRecorders = new Map<number, AgentProgressRecorder>();\n const runtimeAgentStatuses = new Map<number, WorkflowAgentStatus | 'queued'>();\n const subagentSessionKeys = new Map<number, string>();\n\n const run: WorkflowRun = {\n id: runId,\n definitionId: definition.id,\n definitionVersion: definition.version,\n title: definition.title,\n goal: options.goal ?? definition.description,\n input: options.input ?? {},\n status: 'queued',\n source: options.source,\n metadata: options.metadata,\n metrics: {\n agentCount: 0,\n doneAgentCount: 0,\n errorAgentCount: 0,\n skippedAgentCount: 0,\n artifactCount: 0,\n },\n createdAtMs,\n };\n\n const appendEvent = (type: WorkflowEventType, payload: WorkflowEventPayload, createdAtMsOverride?: number) => {\n eventQueue = eventQueue\n .then(() =>\n this.options.eventStore.append({\n runId,\n type,\n payload,\n createdAtMs: createdAtMsOverride,\n }),\n )\n .then(async (event) => {\n this.options.onEventAppended?.(event);\n const view = await this.options.runStore.rebuildRunView(runId);\n if (view) {\n this.options.onRunViewUpdated?.(view);\n }\n });\n return eventQueue;\n };\n\n await appendEvent('run_queued', { run }, createdAtMs);\n await this.callHooks((hook) => hook.beforeRun?.({ definition, run }));\n await appendEvent('run_started', { startedAtMs: Date.now() });\n\n try {\n const runtime = this.options.runtime ?? createScriptWorkflowRuntime();\n const runtimeResult = await withWorkflowTimeout(\n runtime.run<unknown>(\n definition.runtime.source,\n {\n runner: this.options.runner,\n resolveModelId: this.options.resolveModelId,\n },\n {\n cwd: this.options.cwd,\n args: options.input,\n signal: options.signal,\n concurrency: options.concurrency ?? definition.defaults.concurrency,\n maxSubagents: options.maxSubagents ?? definition.defaults.maxSubagents,\n tokenBudget: options.tokenBudget,\n onPhase: (title) => {\n const nextPhaseId = phaseTitleToId.get(title) ?? normalizePhaseId(title);\n if (currentPhaseId && currentPhaseId !== nextPhaseId) {\n void appendEvent('phase_completed', { phaseId: currentPhaseId });\n }\n currentPhaseId = nextPhaseId;\n void appendEvent('phase_started', { phaseId: nextPhaseId, title });\n },\n onLog: (message) => {\n void appendEvent('log_appended', { message });\n },\n onAgentQueued: (event) => {\n const agentId = formatRuntimeAgentId(event.id);\n const subagentSessionKey = this.options.subagentSessionKeyFactory?.({ runId, agentId }) ?? defaultSubagentSessionKey(runId, agentId);\n subagentSessionKeys.set(event.id, subagentSessionKey);\n runtimeAgentStatuses.set(event.id, 'queued');\n const phaseId = event.phase ? (phaseTitleToId.get(event.phase) ?? normalizePhaseId(event.phase)) : currentPhaseId;\n void this.callHooks((hook) => hook.beforeAgent?.({\n runId,\n agentId,\n label: event.label,\n phaseId,\n prompt: event.prompt,\n }));\n void appendEvent('agent_queued', {\n agentId,\n label: event.label,\n phaseId,\n prompt: event.prompt,\n sessionKey: subagentSessionKey,\n invocation: event.invocation,\n });\n },\n onAgentStart: (event) => {\n const currentStatus = runtimeAgentStatuses.get(event.id);\n if (currentStatus && currentStatus !== 'queued' && currentStatus !== 'running') {\n return;\n }\n runtimeAgentStatuses.set(event.id, 'running');\n void appendEvent('agent_started', { agentId: formatRuntimeAgentId(event.id) });\n },\n onAgentEnd: (event) => {\n const currentStatus = runtimeAgentStatuses.get(event.id);\n if (currentStatus && currentStatus !== 'queued' && currentStatus !== 'running') {\n return;\n }\n const agentId = formatRuntimeAgentId(event.id);\n const completedStatus = normalizeCompletedAgentStatus(event.status);\n runtimeAgentStatuses.set(event.id, completedStatus);\n const resultPreview = previewWorkflowValue(event.result);\n progressRecorders.get(event.id)?.completeOpenSteps(completedStatus === 'done' ? 'done' : 'error');\n progressRecorders.delete(event.id);\n void appendEvent('agent_completed', {\n agentId,\n status: completedStatus,\n resultPreview,\n error: completedStatus === 'error' ? 'Subagent failed' : undefined,\n }).then(() => this.callHooks((hook) => hook.afterAgent?.({\n runId,\n agentId,\n status: completedStatus,\n resultPreview,\n })).catch(() => undefined));\n },\n enhanceSubagentRun: (ctx) => {\n const recorder = new AgentProgressRecorder({\n agentId: formatRuntimeAgentId(ctx.id),\n appendEvent,\n });\n progressRecorders.set(ctx.id, recorder);\n const agentId = formatRuntimeAgentId(ctx.id);\n const sessionKey = subagentSessionKeys.get(ctx.id)\n ?? this.options.subagentSessionKeyFactory?.({ runId, agentId })\n ?? defaultSubagentSessionKey(runId, agentId);\n subagentSessionKeys.set(ctx.id, sessionKey);\n return {\n sessionKey,\n sessionMetadata: {\n parentSessionKey: this.options.parentSessionKey,\n workflowRunId: runId,\n workflowDefinitionId: definition.id,\n workflowAgentId: agentId,\n workflowAgentLabel: ctx.label,\n },\n onProgress: (event) => recorder.onProgress(event),\n };\n },\n },\n ),\n options.timeoutSec ?? definition.defaults.timeoutSec,\n );\n\n await eventQueue;\n if (currentPhaseId) {\n await appendEvent('phase_completed', { phaseId: currentPhaseId });\n }\n assertWorkflowOutput(definition, runtimeResult.result);\n await appendEvent('run_completed', { result: toWorkflowResultEnvelope(runtimeResult.result) });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'succeeded' }));\n } catch (err) {\n await eventQueue;\n const error = toWorkflowRunError(err, options.signal?.aborted === true, options.signal?.reason);\n const terminalAgentStatus: WorkflowAgentStatus = error.code === 'cancelled' || error.code === 'timeout' ? 'skipped' : 'error';\n await this.completeOutstandingRuntimeAgents({\n runId,\n statuses: runtimeAgentStatuses,\n progressRecorders,\n appendEvent,\n status: terminalAgentStatus,\n error: terminalAgentStatus === 'error' ? error.message : undefined,\n });\n if (error.code === 'cancelled') {\n await appendEvent('run_cancelled', { reason: error.message });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'cancelled' }));\n } else {\n await appendEvent('run_failed', { error });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'failed' }));\n }\n }\n\n const view = await this.options.runStore.readRunView(runId);\n if (!view) {\n throw new Error(`workflow run view was not created for ${runId}`);\n }\n return view;\n }\n\n async startReplayRun(definition: WorkflowDefinition, options: StartWorkflowReplayRunOptions): Promise<WorkflowRunView> {\n const runId = options.runId ?? randomUUID();\n const createdAtMs = Date.now();\n let eventQueue = Promise.resolve();\n const progressRecorders = new Map<string, AgentProgressRecorder>();\n\n const run: WorkflowRun = {\n id: runId,\n definitionId: definition.id,\n definitionVersion: definition.version,\n title: `${definition.title} replay`,\n goal: options.goal ?? definition.description,\n input: options.input ?? {},\n status: 'queued',\n source: options.source,\n metadata: options.metadata,\n metrics: {\n agentCount: 0,\n doneAgentCount: 0,\n errorAgentCount: 0,\n skippedAgentCount: 0,\n artifactCount: 0,\n },\n createdAtMs,\n };\n\n const appendEvent = (type: WorkflowEventType, payload: WorkflowEventPayload, createdAtMsOverride?: number) => {\n eventQueue = eventQueue\n .then(() =>\n this.options.eventStore.append({\n runId,\n type,\n payload,\n createdAtMs: createdAtMsOverride,\n }),\n )\n .then(async (event) => {\n this.options.onEventAppended?.(event);\n const view = await this.options.runStore.rebuildRunView(runId);\n if (view) {\n this.options.onRunViewUpdated?.(view);\n }\n });\n return eventQueue;\n };\n\n await appendEvent('run_queued', { run }, createdAtMs);\n await this.callHooks((hook) => hook.beforeRun?.({ definition, run }));\n await appendEvent('run_started', { startedAtMs: Date.now() });\n\n try {\n const result = await withWorkflowTimeout(\n this.runReplayTargets({\n definition,\n runId,\n targets: options.targets,\n signal: options.signal,\n appendEvent,\n progressRecorders,\n }),\n options.timeoutSec ?? definition.defaults.timeoutSec,\n );\n\n await eventQueue;\n if (result.errors.length > 0) {\n await appendEvent('run_failed', {\n error: {\n code: 'runtime_error',\n message: `Replay completed with ${result.errors.length} failed target${result.errors.length === 1 ? '' : 's'}.`,\n detail: result.errors.join('\\n'),\n recoverable: true,\n },\n });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'failed' }));\n } else {\n await appendEvent('run_completed', { result: buildReplayResultEnvelope(options, result.results) });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'succeeded' }));\n }\n } catch (err) {\n await eventQueue;\n const error = toWorkflowRunError(err, options.signal?.aborted === true, options.signal?.reason);\n if (error.code === 'cancelled') {\n await appendEvent('run_cancelled', { reason: error.message });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'cancelled' }));\n } else {\n await appendEvent('run_failed', { error });\n await this.callHooks((hook) => hook.afterRun?.({ runId, status: 'failed' }));\n }\n }\n\n const view = await this.options.runStore.readRunView(runId);\n if (!view) {\n throw new Error(`workflow replay run view was not created for ${runId}`);\n }\n return view;\n }\n\n private async runReplayTargets(params: {\n definition: WorkflowDefinition;\n runId: string;\n targets: WorkflowReplayAgentTarget[];\n signal?: AbortSignal;\n appendEvent: AppendWorkflowEvent;\n progressRecorders: Map<string, AgentProgressRecorder>;\n }): Promise<{ results: WorkflowReplayTargetResult[]; errors: string[] }> {\n const results: WorkflowReplayTargetResult[] = [];\n const errors: string[] = [];\n const targetsByPhase = groupReplayTargetsByPhase(params.targets);\n\n for (const group of targetsByPhase) {\n throwIfSignalAborted(params.signal);\n if (group.phaseId && group.phaseTitle) {\n await params.appendEvent('phase_started', { phaseId: group.phaseId, title: group.phaseTitle });\n }\n\n const phaseResults = await Promise.all(\n group.targets.map((target) => this.runReplayTarget({ ...params, target })),\n );\n results.push(...phaseResults);\n errors.push(...phaseResults.filter((item) => item.status === 'error').map((item) => `${item.label}: ${item.error ?? 'failed'}`));\n\n if (group.phaseId && phaseResults.every((item) => item.status === 'done')) {\n await params.appendEvent('phase_completed', { phaseId: group.phaseId });\n }\n }\n\n return { results, errors };\n }\n\n private async runReplayTarget(params: {\n definition: WorkflowDefinition;\n runId: string;\n target: WorkflowReplayAgentTarget;\n signal?: AbortSignal;\n appendEvent: AppendWorkflowEvent;\n progressRecorders: Map<string, AgentProgressRecorder>;\n }): Promise<WorkflowReplayTargetResult> {\n const { target } = params;\n const invocation = normalizeReplayInvocation(target);\n const sessionKey = this.options.subagentSessionKeyFactory?.({ runId: params.runId, agentId: target.agentId })\n ?? defaultSubagentSessionKey(params.runId, target.agentId);\n await this.callHooks((hook) => hook.beforeAgent?.({\n runId: params.runId,\n agentId: target.agentId,\n label: invocation.label,\n phaseId: target.phaseId,\n prompt: invocation.prompt,\n }));\n await params.appendEvent('agent_queued', {\n agentId: target.agentId,\n label: invocation.label,\n phaseId: target.phaseId,\n prompt: invocation.prompt,\n sessionKey,\n invocation,\n });\n await params.appendEvent('agent_started', { agentId: target.agentId });\n\n const recorder = new AgentProgressRecorder({\n agentId: target.agentId,\n appendEvent: params.appendEvent,\n });\n params.progressRecorders.set(target.agentId, recorder);\n\n try {\n throwIfSignalAborted(params.signal);\n const model = resolveReplayModel(invocation, this.options.resolveModelId);\n const result = await this.options.runner.run<unknown>(invocation.prompt, {\n label: invocation.label,\n schema: invocation.schema as never,\n allowedToolNames: invocation.toolset,\n maxIterations: invocation.maxIterations,\n phase: invocation.phase ?? target.phaseTitle,\n signal: params.signal,\n model,\n sessionKey,\n sessionMetadata: {\n parentSessionKey: this.options.parentSessionKey,\n workflowRunId: params.runId,\n workflowDefinitionId: params.definition.id,\n workflowAgentId: target.agentId,\n workflowAgentLabel: invocation.label,\n },\n onProgress: (event) => recorder.onProgress(event),\n });\n throwIfSignalAborted(params.signal);\n const status = result === null ? 'error' : 'done';\n const resultPreview = previewWorkflowValue(result);\n recorder.completeOpenSteps(status === 'done' ? 'done' : 'error');\n await params.appendEvent('agent_completed', {\n agentId: target.agentId,\n status,\n resultPreview,\n error: status === 'error' ? 'Replay target failed' : undefined,\n });\n await this.callHooks((hook) => hook.afterAgent?.({\n runId: params.runId,\n agentId: target.agentId,\n status,\n resultPreview,\n }));\n return { agentId: target.agentId, label: invocation.label, phaseId: target.phaseId, status, resultPreview };\n } catch (err) {\n if (params.signal?.aborted) throw err;\n const message = err instanceof Error ? err.message : String(err);\n recorder.completeOpenSteps('error');\n await params.appendEvent('agent_completed', {\n agentId: target.agentId,\n status: 'error',\n error: message,\n });\n await this.callHooks((hook) => hook.afterAgent?.({\n runId: params.runId,\n agentId: target.agentId,\n status: 'error',\n }));\n return { agentId: target.agentId, label: invocation.label, phaseId: target.phaseId, status: 'error', error: message };\n } finally {\n params.progressRecorders.delete(target.agentId);\n }\n }\n\n private async completeOutstandingRuntimeAgents(params: {\n runId: string;\n statuses: Map<number, WorkflowAgentStatus | 'queued'>;\n progressRecorders: Map<number, AgentProgressRecorder>;\n appendEvent: AppendWorkflowEvent;\n status: Extract<WorkflowAgentStatus, 'done' | 'error' | 'skipped'>;\n error?: string;\n }): Promise<void> {\n for (const [id, currentStatus] of params.statuses) {\n if (currentStatus !== 'queued' && currentStatus !== 'running') {\n continue;\n }\n params.statuses.set(id, params.status);\n const recorder = params.progressRecorders.get(id);\n recorder?.completeOpenSteps(params.status === 'done' ? 'done' : 'error');\n params.progressRecorders.delete(id);\n const agentId = formatRuntimeAgentId(id);\n await params.appendEvent('agent_completed', {\n agentId,\n status: params.status,\n error: params.error,\n });\n await this.callHooks((hook) => hook.afterAgent?.({\n runId: params.runId,\n agentId,\n status: params.status,\n }));\n }\n }\n\n private async callHooks(call: (hook: WorkflowEngineHook) => Promise<void> | void | undefined): Promise<void> {\n for (const hook of this.options.hooks ?? []) {\n try {\n await call(hook);\n } catch {\n // Hooks are extension points; workflow execution remains authoritative.\n }\n }\n }\n}\n\ninterface WorkflowReplayTargetResult {\n agentId: string;\n label: string;\n phaseId?: string;\n status: 'done' | 'error';\n resultPreview?: string;\n error?: string;\n}\n\nclass WorkflowEngineRunError extends Error {\n constructor(\n readonly code: WorkflowRunError['code'],\n message: string,\n readonly recoverable: boolean,\n readonly detail?: string,\n ) {\n super(message);\n this.name = 'WorkflowEngineRunError';\n }\n}\n\ntype AppendWorkflowEvent = (\n type: WorkflowEventType,\n payload: WorkflowEventPayload,\n createdAtMsOverride?: number,\n) => Promise<void>;\n\nclass AgentProgressRecorder {\n private readonly activeToolStepIds = new Map<string, string>();\n private activeIterationStepId: string | null = null;\n private activeThinkingStepId: string | null = null;\n private activeLlmStepId: string | null = null;\n private sequence = 0;\n\n constructor(\n private readonly options: {\n agentId: string;\n appendEvent: AppendWorkflowEvent;\n },\n ) {}\n\n onProgress(event: SubagentProgressEvent): void {\n switch (event.type) {\n case 'tool_start':\n this.startToolStep(event);\n return;\n case 'tool_end':\n this.completeToolStep(event);\n return;\n case 'iteration':\n this.replaceSingletonStep('iteration', this.buildIterationLabel(event.count, event.max), 'llm');\n return;\n case 'thinking_delta':\n this.ensureSingletonStep('thinking', 'Thinking', 'thinking');\n return;\n case 'text_delta':\n this.ensureSingletonStep('llm', 'Writing response', 'llm');\n return;\n default:\n return;\n }\n }\n\n completeOpenSteps(status: 'done' | 'error'): void {\n for (const stepId of this.activeToolStepIds.values()) {\n void this.options.appendEvent('agent_step_completed', {\n agentId: this.options.agentId,\n stepId,\n status,\n });\n }\n this.activeToolStepIds.clear();\n this.completeSingletonStep('iteration', status);\n this.completeSingletonStep('thinking', status);\n this.completeSingletonStep('llm', status);\n }\n\n private startToolStep(event: Extract<SubagentProgressEvent, { type: 'tool_start' }>): void {\n const stepId = this.nextStepId('tool');\n const { label, detail } = workflowStepLabel(event.toolName, event.args);\n this.activeToolStepIds.set(event.toolCallId, stepId);\n void this.options.appendEvent('agent_step_started', {\n agentId: this.options.agentId,\n stepId,\n label,\n kind: 'tool',\n toolName: event.toolName,\n detail: detail ?? previewWorkflowValue(event.args),\n });\n }\n\n private completeToolStep(event: Extract<SubagentProgressEvent, { type: 'tool_end' }>): void {\n const stepId = this.activeToolStepIds.get(event.toolCallId);\n if (!stepId) return;\n this.activeToolStepIds.delete(event.toolCallId);\n void this.options.appendEvent('agent_step_completed', {\n agentId: this.options.agentId,\n stepId,\n status: event.isError ? 'error' : 'done',\n resultPreview: event.resultPreview,\n error: event.error,\n });\n }\n\n private replaceSingletonStep(\n slot: 'iteration' | 'thinking' | 'llm',\n label: string,\n kind: 'tool' | 'llm' | 'thinking',\n ): void {\n this.completeSingletonStep(slot, 'done');\n this.ensureSingletonStep(slot, label, kind);\n }\n\n private ensureSingletonStep(\n slot: 'iteration' | 'thinking' | 'llm',\n label: string,\n kind: 'tool' | 'llm' | 'thinking',\n ): void {\n if (this.getSingletonStepId(slot)) return;\n const stepId = this.nextStepId(slot);\n this.setSingletonStepId(slot, stepId);\n void this.options.appendEvent('agent_step_started', {\n agentId: this.options.agentId,\n stepId,\n label,\n kind,\n });\n }\n\n private completeSingletonStep(slot: 'iteration' | 'thinking' | 'llm', status: 'done' | 'error'): void {\n const stepId = this.getSingletonStepId(slot);\n if (!stepId) return;\n this.setSingletonStepId(slot, null);\n void this.options.appendEvent('agent_step_completed', {\n agentId: this.options.agentId,\n stepId,\n status,\n });\n }\n\n private getSingletonStepId(slot: 'iteration' | 'thinking' | 'llm'): string | null {\n if (slot === 'iteration') return this.activeIterationStepId;\n if (slot === 'thinking') return this.activeThinkingStepId;\n return this.activeLlmStepId;\n }\n\n private setSingletonStepId(slot: 'iteration' | 'thinking' | 'llm', stepId: string | null): void {\n if (slot === 'iteration') {\n this.activeIterationStepId = stepId;\n return;\n }\n if (slot === 'thinking') {\n this.activeThinkingStepId = stepId;\n return;\n }\n this.activeLlmStepId = stepId;\n }\n\n private buildIterationLabel(count: number, max: number): string {\n if (max > 0) return `Iteration ${count}/${max}`;\n return `Iteration ${count}`;\n }\n\n private nextStepId(kind: string): string {\n this.sequence += 1;\n return `${this.options.agentId}-${kind}-${this.sequence}`;\n }\n}\n\nfunction buildPhaseTitleToId(definition: WorkflowDefinition): Map<string, string> {\n const phaseTitleToId = new Map<string, string>();\n for (const phase of definition.phases) {\n phaseTitleToId.set(phase.title, phase.id);\n }\n return phaseTitleToId;\n}\n\nfunction normalizePhaseId(title: string): string {\n const normalized = title\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n return normalized || 'phase';\n}\n\nfunction withWorkflowTimeout<T>(promise: Promise<T>, timeoutSec: number | undefined): Promise<T> {\n if (typeof timeoutSec !== 'number' || !Number.isFinite(timeoutSec) || timeoutSec <= 0) {\n return promise;\n }\n\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const timeoutPromise = new Promise<never>((_resolve, reject) => {\n timeout = setTimeout(() => {\n reject(new Error(`workflow timed out after ${timeoutSec}s`));\n }, timeoutSec * 1000);\n });\n\n return Promise.race([promise, timeoutPromise]).finally(() => {\n if (timeout) clearTimeout(timeout);\n });\n}\n\nfunction throwIfSignalAborted(signal: AbortSignal | undefined): void {\n if (!signal?.aborted) return;\n const reason = signal.reason;\n if (reason instanceof Error) throw reason;\n if (reason) throw new Error(String(reason));\n throw new Error('workflow aborted');\n}\n\nfunction groupReplayTargetsByPhase(targets: WorkflowReplayAgentTarget[]): Array<{\n phaseId?: string;\n phaseTitle?: string;\n targets: WorkflowReplayAgentTarget[];\n}> {\n const groups: Array<{\n key: string;\n phaseId?: string;\n phaseTitle?: string;\n targets: WorkflowReplayAgentTarget[];\n }> = [];\n\n for (const target of targets) {\n const key = target.phaseId ?? '';\n let group = groups.find((item) => item.key === key);\n if (!group) {\n group = {\n key,\n phaseId: target.phaseId,\n phaseTitle: target.phaseTitle,\n targets: [],\n };\n groups.push(group);\n }\n group.targets.push(target);\n }\n\n return groups.map(({ key: _key, ...group }) => group);\n}\n\nfunction buildReplayResultEnvelope(\n options: StartWorkflowReplayRunOptions,\n results: WorkflowReplayTargetResult[],\n): WorkflowResultEnvelope {\n const done = results.filter((item) => item.status === 'done').length;\n return {\n summary: `Replay completed for ${done}/${results.length} target${results.length === 1 ? '' : 's'}.`,\n sections: [\n {\n kind: 'json',\n title: 'Replay targets',\n value: {\n sourceRunId: options.sourceRunId,\n scope: options.replayScope,\n targets: results,\n },\n },\n ],\n structuredOutput: {\n replay: {\n sourceRunId: options.sourceRunId,\n scope: options.replayScope,\n targets: results,\n },\n },\n };\n}\n\nfunction normalizeReplayInvocation(target: WorkflowReplayAgentTarget): WorkflowAgentInvocationSnapshot {\n return {\n prompt: target.invocation?.prompt ?? target.prompt,\n label: target.invocation?.label ?? target.label,\n phase: target.invocation?.phase ?? target.phaseTitle,\n modelRef: target.invocation?.modelRef,\n resolvedModelRef: target.invocation?.resolvedModelRef,\n schema: target.invocation?.schema,\n toolset: target.invocation?.toolset ? [...target.invocation.toolset] : undefined,\n maxIterations: target.invocation?.maxIterations,\n };\n}\n\nfunction resolveReplayModel(\n invocation: WorkflowAgentInvocationSnapshot,\n resolveModelId: ((modelId: string) => Model<Api>) | undefined,\n): Model<Api> | undefined {\n const modelRef = invocation.resolvedModelRef ?? invocation.modelRef;\n if (!modelRef) return undefined;\n if (!resolveModelId) {\n throw new Error(`workflow replay missing resolveModelId; cannot resolve model '${modelRef}'`);\n }\n return resolveModelId(modelRef);\n}\n\nfunction formatRuntimeAgentId(id: number): string {\n return `agent-${id}`;\n}\n\nfunction defaultSubagentSessionKey(runId: string, agentId: string): string {\n return `workflow:${runId}:subagent:${agentId}`;\n}\n\nfunction normalizeCompletedAgentStatus(status: string): 'done' | 'error' | 'skipped' {\n if (status === 'done' || status === 'error' || status === 'skipped') {\n return status;\n }\n return 'error';\n}\n\nfunction previewWorkflowValue(value: unknown): string | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === 'string') {\n return truncate(value, 300);\n }\n try {\n return truncate(JSON.stringify(value), 300);\n } catch {\n return truncate(String(value), 300);\n }\n}\n\nfunction truncate(value: string, maxLength: number): string {\n const trimmed = value.trim();\n if (trimmed.length <= maxLength) {\n return trimmed;\n }\n return `${trimmed.slice(0, maxLength - 1)}…`;\n}\n\nfunction toWorkflowResultEnvelope(value: unknown): WorkflowResultEnvelope {\n if (isWorkflowResultEnvelope(value)) {\n return value;\n }\n if (typeof value === 'string') {\n return {\n summary: truncate(value, 800),\n sections: [{ kind: 'text', title: 'Result', content: value }],\n raw: value,\n };\n }\n return {\n summary: 'Workflow completed.',\n sections: [{ kind: 'json', title: 'Result', value }],\n raw: value,\n };\n}\n\nfunction assertWorkflowOutput(definition: WorkflowDefinition, value: unknown): void {\n const validation = validateWorkflowJsonSchema(definition.outputSchema, value);\n if (validation.ok) return;\n throw new WorkflowEngineRunError(\n 'result_validation_failed',\n validation.message ?? 'Workflow result did not match output schema',\n false,\n JSON.stringify(validation.errors ?? []),\n );\n}\n\nfunction isWorkflowResultEnvelope(value: unknown): value is WorkflowResultEnvelope {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const record = value as Partial<WorkflowResultEnvelope>;\n return typeof record.summary === 'string' && Array.isArray(record.sections);\n}\n\nfunction toWorkflowRunError(err: unknown, wasAborted: boolean, abortReason?: unknown): WorkflowRunError {\n if (err instanceof WorkflowEngineRunError) {\n return {\n code: err.code,\n message: err.message,\n detail: err.detail,\n recoverable: err.recoverable,\n };\n }\n const abortMessage = abortReason instanceof Error ? abortReason.message : abortReason ? String(abortReason) : '';\n const message = abortMessage || (err instanceof Error ? err.message : String(err));\n if (/timeout|timed out/i.test(message)) {\n return {\n code: 'timeout',\n message,\n recoverable: true,\n };\n }\n if (wasAborted || /aborted|cancelled/i.test(message)) {\n return {\n code: 'cancelled',\n message: message || 'Workflow run cancelled',\n recoverable: true,\n };\n }\n if (/quota/i.test(message)) {\n return {\n code: 'agent_quota_exceeded',\n message,\n recoverable: true,\n };\n }\n return {\n code: 'runtime_error',\n message,\n recoverable: false,\n };\n}\n"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { parseWorkflowScript } from "../agent/workflow/parser.js";
2
2
  import { runWorkflow } from "../agent/workflow/runtime.js";
3
+ import { runViewToSnapshot } from "./service/run-view-to-snapshot.js";
3
4
  import { DEFAULT_WORKFLOW_CONCURRENCY, DEFAULT_WORKFLOW_MAX_SUBAGENTS, DEFAULT_WORKFLOW_TIMEOUT_SEC, buildWorkflowDefinition, hashWorkflowStableValue, normalizeWorkflowDefinitionId, toWorkflowDefinitionTitle } from "./domain/definition-utils.js";
4
5
  import { isTerminalWorkflowRunStatus } from "./domain/run.js";
5
6
  import { validateWorkflowDefinitionInput } from "./domain/validation.js";
6
7
  import { validateWorkflowJsonSchema } from "./domain/schema-validation.js";
7
8
  import "./domain/index.js";
8
- import { runViewToSnapshot } from "./service/run-view-to-snapshot.js";
9
9
  import { CatalogWorkflowDefinitionRegistry } from "./registry/catalog-workflow-definition-registry.js";
10
10
  import { projectWorkflowRunView } from "./engine/projector.js";
11
11
  import { ScriptWorkflowRuntime, createScriptWorkflowRuntime } from "./runtime/script-workflow-runtime.js";
@@ -1,10 +1,10 @@
1
- import { extractProfileAgentId } from "../../config/agent-profile.js";
2
1
  import { init_providers, resolveModel } from "../../providers/index.js";
2
+ import { extractProfileAgentId } from "../../config/agent-profile.js";
3
3
  import { DelegateSubagentRunner } from "../../agent/workflow/subagent-runner.js";
4
+ import { resolveModelRef } from "../../config/agent-typed-models.js";
4
5
  import { isTerminalWorkflowRunStatus } from "../domain/run.js";
5
6
  import { validateWorkflowJsonSchema } from "../domain/schema-validation.js";
6
7
  import "../domain/index.js";
7
- import { resolveModelRef } from "../../config/agent-typed-models.js";
8
8
  import { CatalogWorkflowDefinitionRegistry } from "../registry/catalog-workflow-definition-registry.js";
9
9
  import { WorkflowEngine } from "../engine/workflow-engine.js";
10
10
  import "../engine/index.js";
@@ -1,10 +1,10 @@
1
1
  import "../../session/types.js";
2
2
  import { renderWorkflowText } from "../../agent/workflow/snapshot.js";
3
- import { isTerminalWorkflowRunStatus } from "../domain/run.js";
4
- import "../domain/index.js";
5
3
  import { runViewToSnapshot } from "./run-view-to-snapshot.js";
6
4
  import { GoalWorkflowJudge } from "../../goals/goal-workflow-judge.js";
7
5
  import "../../goals/index.js";
6
+ import { isTerminalWorkflowRunStatus } from "../domain/run.js";
7
+ import "../domain/index.js";
8
8
  import { buildWorkflowRunSessionKey } from "./workflow-session-key.js";
9
9
  import { randomUUID } from "node:crypto";
10
10
  //#region src/workflows/service/workflow-session-bridge.ts
@@ -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 { resolveWorkflowRunEventsPath, resolveWorkflowRunsDir } from "./paths.js";
4
- import { dirname } from "node:path";
5
4
  import { randomUUID } from "node:crypto";
6
5
  import { appendFile, mkdir, readFile, readdir } from "node:fs/promises";
6
+ import { dirname } from "node:path";
7
7
  //#region src/workflows/store/event-store.ts
8
8
  init_logger();
9
9
  const log = createLogger("WorkflowEventStore");
@@ -1,6 +1,6 @@
1
+ import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
1
2
  import { createLogger } from "../../utils/logger/index.js";
2
3
  import { init_logger } from "../../utils/logger.js";
3
- import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
4
4
  import { projectWorkflowRunView } from "../engine/projector.js";
5
5
  import { resolveWorkflowRunViewPath } from "./paths.js";
6
6
  import { WorkflowEventStore } from "./event-store.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.111",
3
+ "version": "0.0.113",
4
4
  "description": "Local-first Goal Loop OS for long-term AI work across terminal, web, desktop, mobile app, and messengers.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -82,6 +82,7 @@
82
82
  "adm-zip": "^0.5.17",
83
83
  "ajv": "^8.20.0",
84
84
  "chalk": "^5.6.2",
85
+ "chokidar": "^5.0.0",
85
86
  "cli-table3": "^0.6.5",
86
87
  "commander": "^14.0.3",
87
88
  "cron-parser": "^5.5.0",
@@ -94,7 +95,6 @@
94
95
  "js-yaml": "^4.1.1",
95
96
  "jsdom": "^29.1.1",
96
97
  "markdown-it": "^14.2.0",
97
- "node-cron": "^4.2.1",
98
98
  "node-edge-tts": "^1.2.10",
99
99
  "openai": "^6.39.1",
100
100
  "pino": "^10.3.1",
@@ -116,7 +116,6 @@
116
116
  "@types/jsdom": "^28.0.3",
117
117
  "@types/markdown-it": "^14.1.2",
118
118
  "@types/node": "^25.9.1",
119
- "@types/node-cron": "^3.0.11",
120
119
  "@types/qrcode-terminal": "^0.12.2",
121
120
  "@types/ws": "^8.18.1",
122
121
  "@vitejs/plugin-react-swc": "^4.3.1",
@@ -1,6 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./cn-JdwAhgNB.js";import{t as a}from"./messages-Csef1aW7.js";import{t as o}from"./locale-store-DjbfSsfA.js";import{i as s,t as c}from"./fetch-Bs7in_4F.js";import{B as l,Da as u,Ds as d,Go as f,Jo as p,Mo as m,Ni as h,Oa as g,Vi as _,Wo as v,Xt as y,Zo as b,_i as x,aa as S,ba as C,ca as w,ci as T,ea as E,gi as D,ka as O,ko as k,mi as A,p as j,qa as M,sa as N,ts as P,wa as F,xi as I,yo as L,za as R,zi as z,zo as B}from"./index-COkF54xv.js";import{t as ee}from"./settings-advanced-gate-BYS-rpzn.js";import{n as V,t as H}from"./settings-form-section-BsrK7TBF.js";import{i as te,n as U,o as W}from"./use-settings-tab-guard-F6C0mpJt.js";import{l as G}from"./config-api-0o1WYdz2.js";import{a as K,i as q,n as J,t as ne}from"./use-agent-defaults-form-D3FGVLZb.js";import{i as re}from"./gateway-config-api-Clfck-hW.js";var Y=e(t(),1),X=n(),Z=r();function ie(e){switch(e){case`ready`:return`bg-emerald-500`;case`not_installed`:case`checking`:return`bg-amber-500`;case`error`:return`bg-red-500`;default:return`bg-fg-subtle/60`}}function ae(e){let t=(0,X.c)(28),{value:n,onChange:r,onOpenConfig:a,options:o,m:s}=e,c;if(t[0]!==s.browserGoToConfigure||t[1]!==s.browserPickerSubtitle||t[2]!==s.browserPickerTitle||t[3]!==r||t[4]!==a||t[5]!==o||t[6]!==n){let e=o.find(e=>e.value===n)??o[0],l;t[8]===s.browserPickerTitle?l=t[9]:(l=(0,Z.jsx)(`label`,{htmlFor:`browser-backend-select`,className:`text-sm font-medium text-fg`,children:s.browserPickerTitle}),t[8]=s.browserPickerTitle,t[9]=l);let u;t[10]===s.browserPickerSubtitle?u=t[11]:(u=(0,Z.jsx)(`p`,{className:`text-xs leading-relaxed text-fg-muted`,children:s.browserPickerSubtitle}),t[10]=s.browserPickerSubtitle,t[11]=u);let d;t[12]!==l||t[13]!==u?(d=(0,Z.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[l,u]}),t[12]=l,t[13]=u,t[14]=d):d=t[14];let f;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(f=i(K(),`min-w-0 flex-1 sm:max-w-md`),t[15]=f):f=t[15];let p;t[16]===r?p=t[17]:(p=e=>r(e.target.value),t[16]=r,t[17]=p);let m=s.browserPickerTitle,h;t[18]===o?h=t[19]:(h=o.map(oe),t[18]=o,t[19]=h);let g;t[20]!==s.browserPickerTitle||t[21]!==p||t[22]!==h||t[23]!==n?(g=(0,Z.jsx)(`select`,{id:`browser-backend-select`,className:f,value:n,onChange:p,"aria-label":m,children:h}),t[20]=s.browserPickerTitle,t[21]=p,t[22]=h,t[23]=n,t[24]=g):g=t[24];let _=a?(0,Z.jsxs)(`button`,{type:`button`,className:i(`inline-flex shrink-0 items-center justify-center gap-1 rounded-lg border border-edge bg-surface-panel px-3 py-2 text-xs font-medium text-accent`,`transition-colors hover:border-edge-strong hover:bg-surface-hover`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base`),onClick:()=>a(n),"aria-label":`${e?.name??n} — ${s.browserGoToConfigure}`,children:[(0,Z.jsx)(`span`,{children:s.browserGoToConfigure}),(0,Z.jsx)(P,{className:`size-4 shrink-0`,"aria-hidden":!0})]}):null,v;t[25]!==_||t[26]!==g?(v=(0,Z.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:gap-2`,children:[g,_]}),t[25]=_,t[26]=g,t[27]=v):v=t[27],c=(0,Z.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[d,v,e?(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1.5 rounded-lg border border-edge-subtle bg-surface-panel px-3 py-2.5`,children:[(0,Z.jsx)(`div`,{className:`flex flex-wrap items-center gap-2`,children:e.statusLabel?(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-[11px] font-medium text-fg-muted`,"aria-label":e.statusLabel,children:[(0,Z.jsx)(`span`,{className:i(`inline-block size-1.5 rounded-full`,ie(e.status)),"aria-hidden":!0}),e.statusLabel]}):null}),(0,Z.jsx)(`p`,{className:`text-xs leading-relaxed text-fg-muted`,children:e.tagline})]}):null]}),t[0]=s.browserGoToConfigure,t[1]=s.browserPickerSubtitle,t[2]=s.browserPickerTitle,t[3]=r,t[4]=a,t[5]=o,t[6]=n,t[7]=c}else c=t[7];return c}function oe(e){return(0,Z.jsx)(`option`,{value:e.value,children:e.name},e.value)}function se(e){return`browser-focus-${e}`}function ce(e){switch(e){case`connection`:case`extension`:case`local`:case`cloak`:case`cdp`:case`cloud`:case`runtime`:case`security`:return e;default:return null}}function le(e){let t=(0,X.c)(89),{a:n,form:r,update:i}=e,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=se(`runtime`),t[0]=a):a=t[0];let o;t[1]===n.browserBehaviorShow?o=t[2]:(o=(0,Z.jsx)(V,{icon:S,title:n.browserBehaviorShow}),t[1]=n.browserBehaviorShow,t[2]=o);let s;t[3]===i?s=t[4]:(s=e=>i({browserHeadless:e.target.checked}),t[3]=i,t[4]=s);let c;t[5]!==r.browserHeadless||t[6]!==s?(c=(0,Z.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.browserHeadless,onChange:s}),t[5]=r.browserHeadless,t[6]=s,t[7]=c):c=t[7];let l;t[8]===n.browserHeadlessOn?l=t[9]:(l=(0,Z.jsx)(`span`,{children:n.browserHeadlessOn}),t[8]=n.browserHeadlessOn,t[9]=l);let u;t[10]!==c||t[11]!==l?(u=(0,Z.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[c,l]}),t[10]=c,t[11]=l,t[12]=u):u=t[12];let d;t[13]!==n.desc.browserHeadless||t[14]!==n.label.browserHeadless||t[15]!==u?(d=(0,Z.jsx)(G,{label:n.label.browserHeadless,description:n.desc.browserHeadless,children:u}),t[13]=n.desc.browserHeadless,t[14]=n.label.browserHeadless,t[15]=u,t[16]=d):d=t[16];let f=n.label.browserDialogPolicy,p=n.desc.browserDialogPolicy,m;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(m=K(),t[17]=m):m=t[17];let h;t[18]===i?h=t[19]:(h=e=>i({browserDialogPolicy:e.target.value}),t[18]=i,t[19]=h);let g;t[20]===n.browserDialogPolicyMustRespond?g=t[21]:(g=(0,Z.jsx)(`option`,{value:`must_respond`,children:n.browserDialogPolicyMustRespond}),t[20]=n.browserDialogPolicyMustRespond,t[21]=g);let _;t[22]===n.browserDialogPolicyAutoDismiss?_=t[23]:(_=(0,Z.jsx)(`option`,{value:`auto_dismiss`,children:n.browserDialogPolicyAutoDismiss}),t[22]=n.browserDialogPolicyAutoDismiss,t[23]=_);let v;t[24]===n.browserDialogPolicyAutoAccept?v=t[25]:(v=(0,Z.jsx)(`option`,{value:`auto_accept`,children:n.browserDialogPolicyAutoAccept}),t[24]=n.browserDialogPolicyAutoAccept,t[25]=v);let y;t[26]!==r.browserDialogPolicy||t[27]!==h||t[28]!==g||t[29]!==_||t[30]!==v?(y=(0,Z.jsxs)(`select`,{className:m,value:r.browserDialogPolicy,onChange:h,children:[g,_,v]}),t[26]=r.browserDialogPolicy,t[27]=h,t[28]=g,t[29]=_,t[30]=v,t[31]=y):y=t[31];let b;t[32]!==n.desc.browserDialogPolicy||t[33]!==n.label.browserDialogPolicy||t[34]!==y?(b=(0,Z.jsx)(G,{label:f,description:p,children:y}),t[32]=n.desc.browserDialogPolicy,t[33]=n.label.browserDialogPolicy,t[34]=y,t[35]=b):b=t[35];let x=n.label.browserDialogTimeout,C=n.desc.browserDialogTimeout,T;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(T=q(),t[36]=T):T=t[36];let E=r.browserDialogTimeout??``,D;t[37]===i?D=t[38]:(D=e=>{let t=e.target.value;i({browserDialogTimeout:t===``?void 0:Number.parseInt(t,10)})},t[37]=i,t[38]=D);let O;t[39]!==E||t[40]!==D?(O=(0,Z.jsx)(`input`,{type:`number`,className:T,min:1,value:E,placeholder:`300`,onChange:D}),t[39]=E,t[40]=D,t[41]=O):O=t[41];let k;t[42]!==n.desc.browserDialogTimeout||t[43]!==n.label.browserDialogTimeout||t[44]!==O?(k=(0,Z.jsx)(G,{label:x,description:C,children:O}),t[42]=n.desc.browserDialogTimeout,t[43]=n.label.browserDialogTimeout,t[44]=O,t[45]=k):k=t[45];let A;t[46]!==b||t[47]!==k||t[48]!==d?(A=(0,Z.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[d,b,k]}),t[46]=b,t[47]=k,t[48]=d,t[49]=A):A=t[49];let j;t[50]!==o||t[51]!==A?(j=(0,Z.jsx)(`div`,{id:a,className:`scroll-mt-24`,children:(0,Z.jsxs)(H,{children:[o,A]})}),t[50]=o,t[51]=A,t[52]=j):j=t[52];let M;t[53]===Symbol.for(`react.memo_cache_sentinel`)?(M=se(`security`),t[53]=M):M=t[53];let N;t[54]===n.browserSecurityShow?N=t[55]:(N=(0,Z.jsx)(V,{icon:w,title:n.browserSecurityShow}),t[54]=n.browserSecurityShow,t[55]=N);let P;t[56]===i?P=t[57]:(P=e=>i({browserAllowPrivateUrls:e.target.checked}),t[56]=i,t[57]=P);let F;t[58]!==r.browserAllowPrivateUrls||t[59]!==P?(F=(0,Z.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.browserAllowPrivateUrls,onChange:P}),t[58]=r.browserAllowPrivateUrls,t[59]=P,t[60]=F):F=t[60];let I;t[61]===n.browserAllowPrivateOn?I=t[62]:(I=(0,Z.jsx)(`span`,{children:n.browserAllowPrivateOn}),t[61]=n.browserAllowPrivateOn,t[62]=I);let L;t[63]!==F||t[64]!==I?(L=(0,Z.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[F,I]}),t[63]=F,t[64]=I,t[65]=L):L=t[65];let R;t[66]!==n.desc.browserAllowPrivateUrls||t[67]!==n.label.browserAllowPrivateUrls||t[68]!==L?(R=(0,Z.jsx)(G,{label:n.label.browserAllowPrivateUrls,description:n.desc.browserAllowPrivateUrls,children:L}),t[66]=n.desc.browserAllowPrivateUrls,t[67]=n.label.browserAllowPrivateUrls,t[68]=L,t[69]=R):R=t[69];let z=n.label.browserCommandTimeout,B=n.desc.browserCommandTimeout,ee;t[70]===Symbol.for(`react.memo_cache_sentinel`)?(ee=q(),t[70]=ee):ee=t[70];let te=r.browserCommandTimeout??``,U;t[71]===i?U=t[72]:(U=e=>{let t=e.target.value;i({browserCommandTimeout:t===``?void 0:Number.parseInt(t,10)})},t[71]=i,t[72]=U);let W;t[73]!==te||t[74]!==U?(W=(0,Z.jsx)(`input`,{type:`number`,className:ee,min:5,value:te,placeholder:`30`,onChange:U}),t[73]=te,t[74]=U,t[75]=W):W=t[75];let J;t[76]!==n.desc.browserCommandTimeout||t[77]!==n.label.browserCommandTimeout||t[78]!==W?(J=(0,Z.jsx)(G,{label:z,description:B,children:W}),t[76]=n.desc.browserCommandTimeout,t[77]=n.label.browserCommandTimeout,t[78]=W,t[79]=J):J=t[79];let ne;t[80]!==R||t[81]!==J?(ne=(0,Z.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[R,J]}),t[80]=R,t[81]=J,t[82]=ne):ne=t[82];let re;t[83]!==N||t[84]!==ne?(re=(0,Z.jsx)(`div`,{id:M,className:`scroll-mt-24`,children:(0,Z.jsxs)(H,{className:`border border-amber-500/20`,children:[N,ne]})}),t[83]=N,t[84]=ne,t[85]=re):re=t[85];let Y;return t[86]!==j||t[87]!==re?(Y=(0,Z.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[j,re]}),t[86]=j,t[87]=re,t[88]=Y):Y=t[88],Y}function ue(e){let t=(0,X.c)(9),{language:n,label:r,className:a}=e,o;t[0]===n?o=t[1]:(o=T(n),t[0]=n,t[1]=o);let s;t[2]===a?s=t[3]:(s=i(`inline-flex items-center gap-1 text-xs font-medium text-accent hover:underline`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,a),t[2]=a,t[3]=s);let c;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,Z.jsx)(k,{className:`size-3 shrink-0`,"aria-hidden":!0}),t[4]=c):c=t[4];let l;return t[5]!==r||t[6]!==o||t[7]!==s?(l=(0,Z.jsxs)(`a`,{href:o,target:`_blank`,rel:`noreferrer`,className:s,children:[r,c]}),t[5]=r,t[6]=o,t[7]=s,t[8]=l):l=t[8],l}function de(e){let t=(0,X.c)(27),{title:n,description:r,recommended:a,recommendedLabel:o,icon:s,onSelect:c,selectLabel:l}=e,u=`${n} — ${l}`,d;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(d=i(`group flex w-full flex-col rounded-xl border border-edge bg-surface-panel px-3 py-3 text-left transition-colors`,`hover:border-edge-strong hover:bg-surface-hover/40`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`),t[0]=d):d=t[0];let f;t[1]===s?f=t[2]:(f=(0,Z.jsx)(`span`,{className:`flex size-8 shrink-0 items-center justify-center rounded-lg bg-surface-hover text-fg-muted`,children:(0,Z.jsx)(s,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0})}),t[1]=s,t[2]=f);let p;t[3]===n?p=t[4]:(p=(0,Z.jsx)(`h3`,{className:`text-sm font-semibold text-fg`,children:n}),t[3]=n,t[4]=p);let m;t[5]!==a||t[6]!==o?(m=a&&o?(0,Z.jsx)(`span`,{className:`rounded-full bg-accent/15 px-2 py-0.5 text-[10px] font-medium text-accent`,children:o}):null,t[5]=a,t[6]=o,t[7]=m):m=t[7];let h;t[8]!==p||t[9]!==m?(h=(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[p,m]}),t[8]=p,t[9]=m,t[10]=h):h=t[10];let g;t[11]===r?g=t[12]:(g=(0,Z.jsx)(`p`,{className:`mt-1 text-xs leading-relaxed text-fg-muted`,children:r}),t[11]=r,t[12]=g);let _;t[13]!==h||t[14]!==g?(_=(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[h,g]}),t[13]=h,t[14]=g,t[15]=_):_=t[15];let v;t[16]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,Z.jsx)(P,{className:`mt-0.5 size-4 shrink-0 text-fg-subtle transition-transform group-hover:translate-x-0.5`,"aria-hidden":!0}),t[16]=v):v=t[16];let y;t[17]!==f||t[18]!==_?(y=(0,Z.jsxs)(`div`,{className:`flex items-start gap-3`,children:[f,_,v]}),t[17]=f,t[18]=_,t[19]=y):y=t[19];let b;t[20]===l?b=t[21]:(b=(0,Z.jsx)(`span`,{className:`mt-2 text-[11px] font-medium text-accent`,children:l}),t[20]=l,t[21]=b);let x;return t[22]!==c||t[23]!==u||t[24]!==y||t[25]!==b?(x=(0,Z.jsxs)(`button`,{type:`button`,onClick:c,"aria-label":u,className:d,children:[y,b]}),t[22]=c,t[23]=u,t[24]=y,t[25]=b,t[26]=x):x=t[26],x}function fe(e){let t=(0,X.c)(25),{m:n,onStart:r}=e,i=y(pe),a;t[0]!==n.browserBackendCloakBrowser||t[1]!==n.browserModeCloakTagline||t[2]!==n.browserSetupCloudDesc||t[3]!==n.browserSetupCloudTitle||t[4]!==n.browserSetupExtDesc||t[5]!==n.browserSetupExtTitle||t[6]!==n.browserSetupLocalDesc||t[7]!==n.browserSetupLocalTitle||t[8]!==i?(a=[{id:`extension`,icon:F,title:n.browserSetupExtTitle,description:n.browserSetupExtDesc,recommended:!0},{id:`cloakbrowser`,icon:N,title:n.browserBackendCloakBrowser,description:n.browserModeCloakTagline},{id:`local`,icon:R,title:n.browserSetupLocalTitle,description:n.browserSetupLocalDesc},{id:`cloud`,icon:B,title:n.browserSetupCloudTitle,description:n.browserSetupCloudDesc}].filter(e=>te(e.id,i)),t[0]=n.browserBackendCloakBrowser,t[1]=n.browserModeCloakTagline,t[2]=n.browserSetupCloudDesc,t[3]=n.browserSetupCloudTitle,t[4]=n.browserSetupExtDesc,t[5]=n.browserSetupExtTitle,t[6]=n.browserSetupLocalDesc,t[7]=n.browserSetupLocalTitle,t[8]=i,t[9]=a):a=t[9];let o=a,s;t[10]===n.browserSetupTitle?s=t[11]:(s=(0,Z.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:n.browserSetupTitle}),t[10]=n.browserSetupTitle,t[11]=s);let c;t[12]===n.browserSetupSubtitle?c=t[13]:(c=(0,Z.jsx)(`p`,{className:`mt-1 text-xs leading-relaxed text-fg-muted`,children:n.browserSetupSubtitle}),t[12]=n.browserSetupSubtitle,t[13]=c);let l;t[14]!==s||t[15]!==c?(l=(0,Z.jsxs)(`div`,{children:[s,c]}),t[14]=s,t[15]=c,t[16]=l):l=t[16];let u;t[17]!==n.browserSetupRecommended||t[18]!==n.browserSetupSelect||t[19]!==o||t[20]!==r?(u=(0,Z.jsx)(`div`,{className:`flex flex-col gap-2`,children:o.map(e=>(0,Z.jsx)(de,{icon:e.icon,title:e.title,description:e.description,recommended:e.recommended,recommendedLabel:n.browserSetupRecommended,selectLabel:n.browserSetupSelect,onSelect:()=>r(e.id)},e.id))}),t[17]=n.browserSetupRecommended,t[18]=n.browserSetupSelect,t[19]=o,t[20]=r,t[21]=u):u=t[21];let d;return t[22]!==l||t[23]!==u?(d=(0,Z.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-xl border border-edge-subtle bg-surface-base px-4 py-4`,children:[l,u]}),t[22]=l,t[23]=u,t[24]=d):d=t[24],d}function pe(e){return e.mode}function me(e){if(e.kind===`loading`)return`checking`;if(e.kind===`error`)return`error`;if(e.kind===`ok`)return e.data.installed?`ready`:`not_installed`}function he(e,t){if(e)return{ready:t.browserStatusReady,not_installed:t.browserStatusNotInstalled,checking:t.browserStatusChecking,unknown:t.browserStatusUnknown,error:t.browserStatusError}[e]}function ge(e){if(e.kind!==`idle`)return e.kind===`loading`?`checking`:e.kind===`error`?`error`:e.data.connected?`ready`:(e.data.running,`not_installed`)}function _e(e,t){if(e.kind!==`idle`)return e.kind===`loading`?t.browserStatusChecking:e.kind===`error`?t.browserStatusError:e.data.connected?t.browserExtensionConnected:e.data.running?t.browserExtensionWaiting:t.browserExtensionServerOff}var ve=[`overview`,`extension`,`local`,`cloakbrowser`,`cdp`,`cloud`],ye=[`extension`,`local`,`cloakbrowser`,`cdp`,`cloud`],be={connection:`overview`,extension:`extension`,local:`local`,cloak:`cloakbrowser`,cdp:`cdp`,cloud:`cloud`,runtime:`overview`,security:`overview`};function xe(e){let t=(e??``).trim();return t===`behavior`?`overview`:ve.includes(t)?t:`overview`}function Se(e){return ye.includes(e)}function Ce(e){let t=(0,X.c)(46),{icon:n,title:r,description:i,status:a,statusDetail:o,primaryAction:s,children:c,advanced:l,m:u,embedded:d,sectionTitle:f,advancedTitle:p}=e,m=d===void 0?!1:d,h;t[0]!==l||t[1]!==p?(h=l?(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[p?(0,Z.jsx)(`h4`,{className:`text-sm font-medium text-fg`,children:p}):null,l]}):null,t[0]=l,t[1]=p,t[2]=h):h=t[2];let g=h;if(m){let e;t[3]!==i||t[4]!==f?(e=f?(0,Z.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Z.jsx)(`h4`,{className:`text-sm font-medium text-fg`,children:f}),i?(0,Z.jsx)(`p`,{className:`text-xs leading-relaxed text-fg-muted`,children:i}):null]}):null,t[3]=i,t[4]=f,t[5]=e):e=t[5];let n;t[6]!==u||t[7]!==s||t[8]!==a||t[9]!==o?(n=a||s?(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[a?(0,Z.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,Z.jsx)(we,{kind:a,detail:o,m:u})}):(0,Z.jsx)(`span`,{}),s?(0,Z.jsx)(`div`,{className:`shrink-0`,children:s}):null]}):null,t[6]=u,t[7]=s,t[8]=a,t[9]=o,t[10]=n):n=t[10];let r;t[11]===c?r=t[12]:(r=c?(0,Z.jsx)(`div`,{className:`flex flex-col gap-4`,children:c}):null,t[11]=c,t[12]=r);let l;return t[13]!==g||t[14]!==e||t[15]!==n||t[16]!==r?(l=(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[e,n,r,g]}),t[13]=g,t[14]=e,t[15]=n,t[16]=r,t[17]=l):l=t[17],l}let _;t[18]===n?_=t[19]:(_=(0,Z.jsx)(`div`,{className:`flex size-9 shrink-0 items-center justify-center rounded-lg bg-surface-hover text-fg-muted`,children:(0,Z.jsx)(n,{className:`size-4`,strokeWidth:1.75})}),t[18]=n,t[19]=_);let v;t[20]===r?v=t[21]:(v=(0,Z.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:r}),t[20]=r,t[21]=v);let y;t[22]!==u||t[23]!==a||t[24]!==o?(y=a?(0,Z.jsx)(we,{kind:a,detail:o,m:u}):null,t[22]=u,t[23]=a,t[24]=o,t[25]=y):y=t[25];let b;t[26]!==v||t[27]!==y?(b=(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[v,y]}),t[26]=v,t[27]=y,t[28]=b):b=t[28];let x;t[29]===i?x=t[30]:(x=(0,Z.jsx)(`p`,{className:`text-xs leading-relaxed text-fg-muted`,children:i}),t[29]=i,t[30]=x);let S;t[31]!==b||t[32]!==x?(S=(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-1`,children:[b,x]}),t[31]=b,t[32]=x,t[33]=S):S=t[33];let C;t[34]===s?C=t[35]:(C=s?(0,Z.jsx)(`div`,{className:`shrink-0`,children:s}):null,t[34]=s,t[35]=C);let w;t[36]!==_||t[37]!==S||t[38]!==C?(w=(0,Z.jsxs)(`div`,{className:`flex items-start gap-3`,children:[_,S,C]}),t[36]=_,t[37]=S,t[38]=C,t[39]=w):w=t[39];let T;t[40]===c?T=t[41]:(T=c?(0,Z.jsx)(`div`,{className:`flex flex-col gap-4`,children:c}):null,t[40]=c,t[41]=T);let E;return t[42]!==g||t[43]!==w||t[44]!==T?(E=(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4 rounded-xl border border-edge bg-surface-panel p-4`,children:[w,T,g]}),t[42]=g,t[43]=w,t[44]=T,t[45]=E):E=t[45],E}function we(e){let t=(0,X.c)(27),{kind:n,detail:r,m:a}=e,o,s,c,l;if(t[0]!==n||t[1]!==a.browserStatusChecking||t[2]!==a.browserStatusError||t[3]!==a.browserStatusNotInstalled||t[4]!==a.browserStatusReady||t[5]!==a.browserStatusUnknown){let{icon:e,color:r,label:u}={ready:{icon:b,color:`text-green-600 dark:text-green-400`,label:a.browserStatusReady},not_installed:{icon:_,color:`text-amber-600 dark:text-amber-400`,label:a.browserStatusNotInstalled},checking:{icon:M,color:`text-fg-muted`,label:a.browserStatusChecking},unknown:{icon:p,color:`text-fg-muted`,label:a.browserStatusUnknown},error:{icon:f,color:`text-red-600 dark:text-red-400`,label:a.browserStatusError}}[n];o=e,s=u,l=`inline-flex min-w-0 flex-col items-start gap-1`,c=i(`inline-flex shrink-0 items-center gap-1 whitespace-nowrap text-xs font-medium`,r),t[0]=n,t[1]=a.browserStatusChecking,t[2]=a.browserStatusError,t[3]=a.browserStatusNotInstalled,t[4]=a.browserStatusReady,t[5]=a.browserStatusUnknown,t[6]=o,t[7]=s,t[8]=c,t[9]=l}else o=t[6],s=t[7],c=t[8],l=t[9];let u=n===`checking`&&`animate-spin`,d;t[10]===u?d=t[11]:(d=i(`size-3.5 shrink-0`,u),t[10]=u,t[11]=d);let m;t[12]!==o||t[13]!==d?(m=(0,Z.jsx)(o,{className:d}),t[12]=o,t[13]=d,t[14]=m):m=t[14];let h;t[15]===s?h=t[16]:(h=(0,Z.jsx)(`span`,{children:s}),t[15]=s,t[16]=h);let g;t[17]!==c||t[18]!==m||t[19]!==h?(g=(0,Z.jsxs)(`span`,{className:c,children:[m,h]}),t[17]=c,t[18]=m,t[19]=h,t[20]=g):g=t[20];let v;t[21]===r?v=t[22]:(v=r?(0,Z.jsx)(`span`,{className:`break-all font-mono text-[11px] leading-snug text-fg-subtle`,children:r}):null,t[21]=r,t[22]=v);let y;return t[23]!==l||t[24]!==g||t[25]!==v?(y=(0,Z.jsxs)(`span`,{className:l,children:[g,v]}),t[23]=l,t[24]=g,t[25]=v,t[26]=y):y=t[26],y}function Q(e){let t=(0,X.c)(5),{kind:n,message:r}=e,a=n===`success`?`border-green-500/30 bg-green-500/10 text-green-700 dark:text-green-300`:`border-red-500/30 bg-red-500/10 text-red-600 dark:text-red-300`,o;t[0]===a?o=t[1]:(o=i(`rounded-lg border px-3 py-2 text-xs leading-relaxed`,a),t[0]=a,t[1]=o);let s;return t[2]!==r||t[3]!==o?(s=(0,Z.jsx)(`div`,{className:o,children:r}),t[2]=r,t[3]=o,t[4]=s):s=t[4],s}var Te={instances:[],launchStatus:`idle`,launchMessage:null,testStatus:`idle`,testMessage:null,executablePath:``};function Ee({m:e,cdpUrl:t,onCdpUrlChange:n,launch:r,stop:i,listInstances:a,ping:o,embedded:s=!1}){let[c,d]=(0,Y.useReducer)(l,Te),{instances:f,launchStatus:p,launchMessage:m,testStatus:_,testMessage:v,executablePath:y}=c,b=(0,Y.useCallback)(async()=>{try{d({type:`patch`,patch:{instances:await a()}})}catch{}},[a]);(0,Y.useEffect)(()=>{b();let e=setInterval(()=>void b(),8e3);return()=>clearInterval(e)},[b]);let x=(0,Y.useCallback)(async()=>{if(p!==`pending`){d({type:`patch`,patch:{launchStatus:`pending`,launchMessage:null}});try{let t=await r(y.trim()||void 0);d({type:`patch`,patch:{launchStatus:`ok`,launchMessage:e.browserCdpLaunchedAtPort.replace(`{{port}}`,String(t.port))}}),n(t.wsEndpoint),await b()}catch(e){d({type:`patch`,patch:{launchStatus:`error`,launchMessage:e instanceof Error?e.message:String(e)}})}}},[y,r,p,e.browserCdpLaunchedAtPort,n,b]),S=(0,Y.useCallback)(async e=>{await i(e),await b()},[b,i]),C=(0,Y.useCallback)(async()=>{if(t.trim()){d({type:`patch`,patch:{testStatus:`pending`,testMessage:null}});try{let n=await o(t.trim());n.reachable?d({type:`patch`,patch:{testStatus:`ok`,testMessage:e.browserCdpReachable.replace(`{{browser}}`,n.browser??`—`)}}):d({type:`patch`,patch:{testStatus:`error`,testMessage:e.browserCdpUnreachable.replace(`{{error}}`,n.error??`—`)}})}catch(t){d({type:`patch`,patch:{testStatus:`error`,testMessage:e.browserCdpUnreachable.replace(`{{error}}`,t instanceof Error?t.message:String(t))}})}}},[t,e.browserCdpReachable,e.browserCdpUnreachable,o]);return(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Z.jsxs)(Ce,{icon:g,title:e.browserCdpLaunchLocal,description:e.browserCdpLaunchLocalDesc,m:e,embedded:s,sectionTitle:s?e.browserCdpLaunchLocal:void 0,primaryAction:(0,Z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:p===`pending`,onClick:()=>void x(),children:[p===`pending`?(0,Z.jsx)(M,{className:`size-3.5 animate-spin`}):(0,Z.jsx)(g,{className:`size-3.5`}),p===`pending`?e.browserCdpLaunching:e.browserCdpLaunchLocal]}),children:[m?(0,Z.jsx)(Q,{kind:p===`error`?`error`:`success`,message:m}):null,(0,Z.jsx)(G,{label:e.browserCdpChromePath,description:e.browserCdpChromePathDesc,children:(0,Z.jsx)(`input`,{type:`text`,className:q(),value:y,placeholder:`/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`,onChange:e=>d({type:`patch`,patch:{executablePath:e.target.value}}),autoComplete:`off`})}),f.length>0?(0,Z.jsx)(`div`,{className:`flex flex-col gap-2 rounded-lg border border-edge bg-surface-base p-3 text-xs`,children:f.map(t=>(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,Z.jsxs)(`span`,{className:`font-mono text-fg`,children:[`port `,t.port,` · pid `,t.pid]}),(0,Z.jsx)(`span`,{className:`truncate text-fg-subtle`,children:t.wsEndpoint})]}),(0,Z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 rounded-md border border-edge bg-surface-panel px-2 py-1 text-xs font-medium text-fg hover:bg-surface-raised`,onClick:()=>void S(t.port),children:[(0,Z.jsx)(E,{className:`size-3`}),e.browserCdpStopLocal]})]},t.port))}):null]}),(0,Z.jsxs)(Ce,{icon:h,title:e.label.browserCdpUrl,description:e.desc.browserCdpUrl,m:e,embedded:s,sectionTitle:s?e.label.browserCdpUrl:void 0,primaryAction:(0,Z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:!t.trim()||_===`pending`,onClick:()=>void C(),children:[_===`pending`?(0,Z.jsx)(M,{className:`size-3.5 animate-spin`}):(0,Z.jsx)(u,{className:`size-3.5`}),_===`pending`?e.browserCdpTesting:e.browserCdpTestConnection]}),children:[(0,Z.jsx)(`input`,{type:`text`,className:q(),value:t,placeholder:`ws://127.0.0.1:9222`,onChange:e=>n(e.target.value),autoComplete:`off`}),(0,Z.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:e.browserCdpLoopbackOnly}),v?(0,Z.jsx)(Q,{kind:_===`error`?`error`:`success`,message:v}):null]})]})}function De(e,t){let n=t.phase;if(!n)return e.browserInstallPhaseStarting;if(n===`downloading`)return t.percent==null?e.browserInstallPhaseDownloading:e.browserInstallPhaseDownloadingPercent.replace(`{{percent}}`,String(t.percent));switch(n){case`starting`:return e.browserInstallPhaseStarting;case`verifying`:return e.browserInstallPhaseVerifying;case`extracting`:return e.browserInstallPhaseExtracting;case`running`:return t.message??e.browserInstallPhaseRunning;case`ready`:return e.browserInstallPhaseReady;default:return t.message??e.browserInstallPhaseRunning}}function Oe(e){let t=(0,X.c)(32),{m:n,progress:r,showLogs:i,onCancel:a,cancelling:o}=e,s=i===void 0?!1:i,c=o===void 0?!1:o;if(!r.phase)return null;let l;t[0]!==n||t[1]!==r?(l=De(n,r),t[0]=n,t[1]=r,t[2]=l):l=t[2];let u=l,d=r.percent==null?(r.phase===`extracting`||r.phase===`verifying`||r.phase===`running`||r.phase,null):Math.min(100,Math.max(0,r.percent)),f;t[3]===u?f=t[4]:(f=(0,Z.jsx)(`span`,{className:`text-fg`,children:u}),t[3]=u,t[4]=f);let p;t[5]===d?p=t[6]:(p=d==null?null:(0,Z.jsxs)(`span`,{className:`tabular-nums`,children:[d,`%`]}),t[5]=d,t[6]=p);let m;t[7]!==c||t[8]!==n||t[9]!==a?(m=a?(0,Z.jsx)(`button`,{type:`button`,className:`rounded-md border border-edge px-2 py-0.5 text-[11px] font-medium text-fg-muted hover:bg-surface-raised hover:text-fg disabled:cursor-not-allowed disabled:opacity-60`,disabled:c,onClick:()=>void a(),children:c?n.browserInstallCancelling:n.browserInstallCancel}):null,t[7]=c,t[8]=n,t[9]=a,t[10]=m):m=t[10];let h;t[11]!==p||t[12]!==m?(h=(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[p,m]}),t[11]=p,t[12]=m,t[13]=h):h=t[13];let g;t[14]!==f||t[15]!==h?(g=(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-xs text-fg-muted`,children:[f,h]}),t[14]=f,t[15]=h,t[16]=g):g=t[16];let _;t[17]===d?_=t[18]:(_=(0,Z.jsx)(`div`,{className:`h-1.5 overflow-hidden rounded-full bg-surface-raised`,children:d==null?(0,Z.jsx)(`div`,{className:`h-full w-1/3 animate-pulse rounded-full bg-accent/70`}):(0,Z.jsx)(`div`,{className:`h-full rounded-full bg-accent transition-[width] duration-300 ease-out`,style:{width:`${d}%`}})}),t[17]=d,t[18]=_);let v;t[19]!==r.lines||t[20]!==s?(v=s&&r.lines.length>0?(0,Z.jsx)(`div`,{className:`max-h-28 overflow-y-auto rounded-md border border-edge bg-surface-panel px-2 py-1.5 font-mono text-[10px] leading-relaxed text-fg-muted`,children:r.lines.map(ke)}):null,t[19]=r.lines,t[20]=s,t[21]=v):v=t[21];let y;t[22]!==r.message||t[23]!==r.percent||t[24]!==r.phase||t[25]!==s?(y=!s&&r.phase===`downloading`&&r.message&&r.percent==null?(0,Z.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:r.message}):null,t[22]=r.message,t[23]=r.percent,t[24]=r.phase,t[25]=s,t[26]=y):y=t[26];let b;return t[27]!==v||t[28]!==y||t[29]!==g||t[30]!==_?(b=(0,Z.jsxs)(`div`,{className:`space-y-2 rounded-lg border border-edge bg-surface-base px-3 py-2.5`,children:[g,_,v,y]}),t[27]=v,t[28]=y,t[29]=g,t[30]=_,t[31]=b):b=t[31],b}function ke(e){return(0,Z.jsx)(`div`,{className:`truncate`,children:e},e)}var Ae={confirmOpen:!1,installStatus:`idle`,installMessage:null,openStatus:`idle`,openMessage:null,runtime:null};function je({m:e,doctor:t,refetch:n,applyDoctor:r,installStream:i,fetchRuntimeStatus:a,launchCloak:o,form:s,onChange:c,embedded:u=!1}){let[d,f]=(0,Y.useReducer)(l,Ae),{confirmOpen:p,installStatus:h,installMessage:_,openStatus:v,openMessage:y,runtime:x}=d,{progress:S,running:w,cancelling:T,run:E,reset:D,cancel:O}=i,k=t.kind===`ok`?t.data:null,A=k?.installed===!0,P=h===`installing`||w,F=(0,Y.useCallback)(async()=>{if(A)try{f({type:`patch`,patch:{runtime:await a()}})}catch{}},[a,A]);(0,Y.useEffect)(()=>{if(!A){f({type:`patch`,patch:{runtime:null}});return}F();let e=setInterval(()=>void F(),8e3);return()=>clearInterval(e)},[A,F]);let I=(0,Y.useCallback)(async()=>{f({type:`patch`,patch:{confirmOpen:!1,installStatus:`installing`,installMessage:null}}),D();let t=await E({body:{cacheDir:s.cacheDir.trim()||void 0,binaryPath:s.binaryPath.trim()||void 0},fallbackError:e.browserCloakInstallFailed});if(!t.ok){if(t.error===`busy`){f({type:`patch`,patch:{installStatus:`installing`}});return}if(t.error===`cancelled`){f({type:`patch`,patch:{installStatus:`idle`,installMessage:null}}),D();return}f({type:`patch`,patch:{installStatus:`failed`,installMessage:t.errorMessage??e.browserCloakInstallFailed}});return}t.payload&&r?.(t.payload),f({type:`patch`,patch:{installStatus:`installed`,installMessage:t.payload?.binaryPath?`${e.browserCloakInstalled}: ${t.payload.binaryPath}`:e.browserCloakInstalled}}),await n({cacheDir:s.cacheDir,binaryPath:s.binaryPath}),await F()},[r,s.binaryPath,s.cacheDir,e.browserCloakInstallFailed,e.browserCloakInstalled,n,F,D,E]),L=(0,Y.useCallback)(async()=>{if(v!==`pending`){f({type:`patch`,patch:{openStatus:`pending`,openMessage:null}});try{let t=await o();f({type:`patch`,patch:{openStatus:`ok`,openMessage:t.reused?e.browserCloakOpenReused.replace(`{{port}}`,String(t.port)):e.browserCloakOpenLaunched.replace(`{{port}}`,String(t.port)),runtime:t}})}catch(e){f({type:`patch`,patch:{openStatus:`error`,openMessage:e instanceof Error?e.message:String(e)}})}}},[o,e.browserCloakOpenLaunched,e.browserCloakOpenReused,v]),R=t.kind===`loading`?`checking`:t.kind===`error`?`error`:A?`ready`:`not_installed`,z=A&&k?.version?`v${k.version} (${k.platform})`:void 0;return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(Ce,{icon:N,title:e.browserCloakGuideTitle,description:e.browserCloakGuideDesc,status:R,statusDetail:z,m:e,embedded:u,primaryAction:(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[A?(0,Z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:v===`pending`,onClick:()=>void L(),children:[v===`pending`?(0,Z.jsx)(M,{className:`size-3.5 animate-spin`}):(0,Z.jsx)(g,{className:`size-3.5`}),v===`pending`?e.browserCloakOpening:e.browserCloakOpen]}):null,(0,Z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:P,onClick:()=>f({type:`patch`,patch:{confirmOpen:!0}}),children:[P?(0,Z.jsx)(M,{className:`size-3.5 animate-spin`}):A?(0,Z.jsx)(C,{className:`size-3.5`}):h===`installed`?(0,Z.jsx)(b,{className:`size-3.5 text-green-500`}):(0,Z.jsx)(m,{className:`size-3.5`}),P?e.browserCloakInstalling:A?e.browserReinstall:e.browserCloakDownload]})]}),children:[w?(0,Z.jsx)(Oe,{m:e,progress:S,cancelling:T,onCancel:()=>void O()}):null,_?(0,Z.jsx)(Q,{kind:h===`failed`?`error`:`success`,message:_}):null,y?(0,Z.jsx)(Q,{kind:v===`error`?`error`:`success`,message:y}):null,A&&x?(0,Z.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-lg border border-edge bg-surface-base p-3 text-xs`,children:[(0,Z.jsx)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:(0,Z.jsx)(`span`,{className:`font-medium text-fg`,children:x.running?e.browserCloakRuntimeRunning.replace(`{{port}}`,String(x.port)):e.browserCloakRuntimeOff})}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Z.jsx)(`span`,{className:`text-fg-subtle`,children:e.browserCloakProfileLabel}),(0,Z.jsx)(`span`,{className:`break-all font-mono text-[11px] text-fg-muted`,children:x.userDataDir})]}),(0,Z.jsx)(`p`,{className:`text-[11px] leading-relaxed text-fg-subtle`,children:e.browserCloakProfileAgentHint}),x.temporaryProfile?(0,Z.jsx)(`p`,{className:`text-[11px] text-amber-600 dark:text-amber-400`,children:e.browserCloakTemporaryProfileHint}):null]}):null,(0,Z.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,Z.jsx)(G,{label:e.label.browserCloakKeepOpen,description:e.desc.browserCloakKeepOpen,children:(0,Z.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,Z.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:s.keepOpen,onChange:e=>c({keepOpen:e.target.checked})}),(0,Z.jsx)(`span`,{children:e.browserCloakKeepOpenOn})]})}),(0,Z.jsx)(G,{label:e.label.browserCloakTemporaryProfile,description:e.desc.browserCloakTemporaryProfile,children:(0,Z.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,Z.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:s.temporaryProfile,onChange:e=>c({temporaryProfile:e.target.checked})}),(0,Z.jsx)(`span`,{children:e.browserCloakTemporaryProfileOn})]})}),(0,Z.jsx)(G,{label:e.label.browserHumanize,description:e.desc.browserHumanize,children:(0,Z.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,Z.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:s.humanize,onChange:e=>c({humanize:e.target.checked})}),(0,Z.jsx)(`span`,{children:e.browserHumanizeOn})]})}),(0,Z.jsx)(G,{label:e.label.browserHumanPreset,description:e.desc.browserHumanPreset,children:(0,Z.jsxs)(`select`,{className:K(),value:s.humanPreset,onChange:e=>c({humanPreset:e.target.value}),children:[(0,Z.jsx)(`option`,{value:`careful`,children:e.browserHumanPresetCareful}),(0,Z.jsx)(`option`,{value:`default`,children:e.browserHumanPresetDefault})]})})]})]}),(0,Z.jsxs)(H,{className:`mt-4 border border-edge-subtle`,children:[(0,Z.jsx)(V,{icon:N,title:e.browserCloakAdvancedShow}),(0,Z.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,Z.jsxs)(G,{label:e.label.browserCloakCacheDir,description:e.desc.browserCloakCacheDir,children:[(0,Z.jsx)(`input`,{type:`text`,className:q(),value:s.cacheDir,placeholder:`~/.xopc/bin/cloakbrowser`,onChange:e=>c({cacheDir:e.target.value}),autoComplete:`off`}),(0,Z.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:e.browserCacheDirHomeOnly})]}),(0,Z.jsxs)(G,{label:e.label.browserCloakBinaryPath,description:e.desc.browserCloakBinaryPath,children:[(0,Z.jsx)(`input`,{type:`text`,className:q(),value:s.binaryPath,placeholder:`~/.xopc/bin/cloakbrowser/chromium-v.../Chromium.app/Contents/MacOS/Chromium`,onChange:e=>c({binaryPath:e.target.value}),autoComplete:`off`}),s.binaryPath.trim()?(0,Z.jsx)(`p`,{className:`text-[11px] text-amber-600 dark:text-amber-400`,children:e.browserBinaryPathWarning}):null]}),(0,Z.jsx)(G,{label:e.label.browserCloakTimezone,description:e.desc.browserCloakTimezone,children:(0,Z.jsx)(`input`,{type:`text`,className:q(),value:s.timezone,placeholder:`America/New_York`,onChange:e=>c({timezone:e.target.value}),autoComplete:`off`})}),(0,Z.jsx)(G,{label:e.label.browserCloakLocale,description:e.desc.browserCloakLocale,children:(0,Z.jsx)(`input`,{type:`text`,className:q(),value:s.locale,placeholder:`en-US`,onChange:e=>c({locale:e.target.value}),autoComplete:`off`})}),(0,Z.jsx)(G,{label:e.label.browserCloakWebrtcIp,description:e.desc.browserCloakWebrtcIp,children:(0,Z.jsx)(`input`,{type:`text`,className:q(),value:s.webrtcIp,placeholder:`203.0.113.10`,onChange:e=>c({webrtcIp:e.target.value}),autoComplete:`off`})}),(0,Z.jsx)(G,{label:e.label.browserCloakFingerprintPlatform,description:e.desc.browserCloakFingerprintPlatform,children:(0,Z.jsx)(`input`,{type:`text`,className:q(),value:s.fingerprintPlatform,placeholder:`macos`,onChange:e=>c({fingerprintPlatform:e.target.value}),autoComplete:`off`})}),(0,Z.jsx)(`div`,{className:`sm:col-span-2`,children:(0,Z.jsx)(G,{label:e.label.browserCloakExtraArgs,description:e.desc.browserCloakExtraArgs,children:(0,Z.jsx)(`textarea`,{className:Me(),value:s.extraArgs,placeholder:`--disable-dev-shm-usage`,rows:3,onChange:e=>c({extraArgs:e.target.value})})})})]})]}),(0,Z.jsx)(j,{open:p,title:e.browserConfirmDownloadTitle,description:Ne(e,k),confirmLabel:e.browserConfirmDownloadConfirm,cancelLabel:e.browserConfirmDownloadCancel,onConfirm:()=>void I(),onCancel:()=>f({type:`patch`,patch:{confirmOpen:!1}})})]})}function Me(){return`${q()} min-h-[4.5rem] resize-y font-mono text-xs`}function Ne(e,t){if(!t)return e.browserConfirmDownloadBody;let n=[e.browserConfirmDownloadBody.replace(`{{version}}`,t.version??`—`).replace(`{{platform}}`,t.platform).replace(`{{url}}`,t.downloadUrl||`—`)];return t.expectedSha256?n.push(`SHA-256: ${t.expectedSha256.slice(0,16)}…`):n.push(e.browserCloakSha256Skipped),n.join(`
2
- `)}function Pe({m:e,form:t,onChange:n,testCloud:r,embedded:i=!1}){let[s,c]=(0,Y.useState)(`idle`),[l,d]=(0,Y.useState)(null),f=t.provider===`local`?`browserbase`:t.provider,p=a(o(e=>e.language)).providersSettings,m=A({show:p.show,hide:p.hide,copy:p.copy,copied:p.copied}),h=(0,Y.useCallback)(()=>re().then(e=>e.apiKey??null),[]),g=(0,Y.useCallback)(async()=>{c(`pending`),d(null);try{let n=await r(f,t.apiKey);n.reachable?(c(`ok`),d(e.browserCloudTestOk)):(c(`error`),d(e.browserCloudTestFailed.replace(`{{error}}`,n.error??`—`)))}catch(t){c(`error`),d(e.browserCloudTestFailed.replace(`{{error}}`,t instanceof Error?t.message:String(t)))}},[t.apiKey,e.browserCloudTestFailed,e.browserCloudTestOk,f,r]);return(0,Z.jsxs)(Ce,{icon:B,title:e.label.browserCloudProvider,description:e.desc.browserCloudProvider,m:e,embedded:i,primaryAction:(0,Z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:s===`pending`,onClick:()=>void g(),children:[s===`pending`?(0,Z.jsx)(M,{className:`size-3.5 animate-spin`}):(0,Z.jsx)(u,{className:`size-3.5`}),e.browserCloudTestConnection]}),children:[(0,Z.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,Z.jsx)(G,{label:e.label.browserCloudProvider,description:e.desc.browserCloudProvider,children:(0,Z.jsxs)(`select`,{className:K(),value:f,onChange:e=>n({provider:e.target.value}),children:[(0,Z.jsx)(`option`,{value:`browserbase`,children:e.browserCloudProviderBrowserbase}),(0,Z.jsx)(`option`,{value:`browser-use`,children:e.browserCloudProviderBrowserUse})]})}),(0,Z.jsx)(G,{label:e.label.browserCloudApiKey,description:e.desc.browserCloudApiKey,children:(0,Z.jsx)(D,{value:t.apiKey,onChange:e=>n({apiKey:e}),placeholder:f===`browserbase`?`BROWSERBASE_API_KEY`:`BROWSER_USE_API_KEY`,labels:m,reveal:h,loadFailedLabel:`Failed to load key`})}),f===`browserbase`?(0,Z.jsx)(G,{label:e.label.browserCloudProjectId,description:e.desc.browserCloudProjectId,children:(0,Z.jsx)(`input`,{type:`text`,className:q(),value:t.projectId,placeholder:`BROWSERBASE_PROJECT_ID`,onChange:e=>n({projectId:e.target.value}),autoComplete:`off`})}):null,(0,Z.jsx)(G,{label:e.label.browserCloudRegion,description:e.desc.browserCloudRegion,children:(0,Z.jsx)(`input`,{type:`text`,className:q(),value:t.region,placeholder:`us-west-2`,onChange:e=>n({region:e.target.value}),autoComplete:`off`})})]}),l?(0,Z.jsx)(Q,{kind:s===`error`?`error`:`success`,message:l}):null]})}function Fe(e){let t=(0,X.c)(45),{m:n,installed:r,extensionDir:a,connected:o,busy:s,onOpenChrome:c,onRevealFolder:l,folderBusy:u}=e,d;t[0]!==r||t[1]!==n.browserExtensionInstallStep1?(d={id:`install`,label:n.browserExtensionInstallStep1,done:r},t[0]=r,t[1]=n.browserExtensionInstallStep1,t[2]=d):d=t[2];let f=!!a&&o,p;t[3]!==s||t[4]!==a||t[5]!==u||t[6]!==n.browserExtensionInstallStep2FolderLabel||t[7]!==n.browserExtensionInstalling||t[8]!==n.browserExtensionOpenChrome||t[9]!==n.browserExtensionRevealFolder||t[10]!==c||t[11]!==l?(p=a?(0,Z.jsxs)(`div`,{className:`mt-2 rounded-md border border-edge bg-surface-raised px-2.5 py-2`,children:[(0,Z.jsx)(`p`,{className:`text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:n.browserExtensionInstallStep2FolderLabel}),(0,Z.jsx)(`p`,{className:`mt-1 break-all font-mono text-[11px] text-fg`,children:a}),(0,Z.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-3`,children:[(0,Z.jsx)(`button`,{type:`button`,className:`inline-flex items-center gap-1 text-[11px] text-accent hover:underline disabled:opacity-60`,disabled:s,onClick:c,children:n.browserExtensionOpenChrome}),(0,Z.jsx)(`button`,{type:`button`,className:`inline-flex items-center gap-1 text-[11px] text-accent hover:underline disabled:opacity-60`,disabled:s,onClick:l,title:a,children:u?n.browserExtensionInstalling:n.browserExtensionRevealFolder})]})]}):null,t[3]=s,t[4]=a,t[5]=u,t[6]=n.browserExtensionInstallStep2FolderLabel,t[7]=n.browserExtensionInstalling,t[8]=n.browserExtensionOpenChrome,t[9]=n.browserExtensionRevealFolder,t[10]=c,t[11]=l,t[12]=p):p=t[12];let m;t[13]!==n.browserExtensionInstallStep2||t[14]!==f||t[15]!==p?(m={id:`load`,label:n.browserExtensionInstallStep2,done:f,detail:p},t[13]=n.browserExtensionInstallStep2,t[14]=f,t[15]=p,t[16]=m):m=t[16];let h;t[17]!==o||t[18]!==n.browserExtensionInstallStep3?(h={id:`connect`,label:n.browserExtensionInstallStep3,done:o},t[17]=o,t[18]=n.browserExtensionInstallStep3,t[19]=h):h=t[19];let g;t[20]!==d||t[21]!==m||t[22]!==h?(g=[d,m,h],t[20]=d,t[21]=m,t[22]=h,t[23]=g):g=t[23];let _=g,y;t[24]===_?y=t[25]:(y=_.filter(Ie),t[24]=_,t[25]=y);let x=y.length,S=n.browserExtensionInstallGuideTitle,C;t[26]===n.browserExtensionInstallGuideTitle?C=t[27]:(C=(0,Z.jsx)(`h4`,{className:`text-sm font-medium text-fg`,children:n.browserExtensionInstallGuideTitle}),t[26]=n.browserExtensionInstallGuideTitle,t[27]=C);let w;t[28]!==x||t[29]!==n.browserExtensionChecklistProgress||t[30]!==_.length?(w=n.browserExtensionChecklistProgress.replace(`{{done}}`,String(x)).replace(`{{total}}`,String(_.length)),t[28]=x,t[29]=n.browserExtensionChecklistProgress,t[30]=_.length,t[31]=w):w=t[31];let T;t[32]===w?T=t[33]:(T=(0,Z.jsx)(`span`,{className:`ml-auto text-xs font-normal text-fg-muted`,children:w}),t[32]=w,t[33]=T);let E;t[34]!==T||t[35]!==C?(E=(0,Z.jsxs)(`div`,{className:`mb-3 flex items-center gap-2`,children:[C,T]}),t[34]=T,t[35]=C,t[36]=E):E=t[36];let D;t[37]!==n.browserExtensionChecklistDone||t[38]!==n.browserExtensionChecklistPending||t[39]!==_?(D=(0,Z.jsx)(`ol`,{className:`flex flex-col gap-3`,children:_.map((e,t)=>(0,Z.jsxs)(`li`,{className:`flex gap-2.5`,children:[(0,Z.jsx)(`span`,{className:`mt-0.5 shrink-0`,"aria-hidden":!0,children:e.done?(0,Z.jsx)(b,{className:`size-4 text-emerald-500`,strokeWidth:2}):(0,Z.jsx)(v,{className:`size-4 text-fg-subtle`,strokeWidth:1.75})}),(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsxs)(`p`,{className:i(`text-[11px] leading-relaxed`,e.done?`text-fg-muted line-through decoration-fg-subtle/60`:`text-fg`),children:[(0,Z.jsxs)(`span`,{className:`sr-only`,children:[e.done?n.browserExtensionChecklistDone:n.browserExtensionChecklistPending,` `]}),t+1,`. `,e.label]}),e.detail]})]},e.id))}),t[37]=n.browserExtensionChecklistDone,t[38]=n.browserExtensionChecklistPending,t[39]=_,t[40]=D):D=t[40];let O;return t[41]!==n.browserExtensionInstallGuideTitle||t[42]!==E||t[43]!==D?(O=(0,Z.jsxs)(`div`,{"aria-label":S,className:`rounded-xl border border-edge bg-surface-base px-3 py-3`,children:[E,D]}),t[41]=n.browserExtensionInstallGuideTitle,t[42]=E,t[43]=D,t[44]=O):O=t[44],O}function Ie(e){return e.done}var Le=19820,Re=3e4;function ze({m:e,probe:t,artifacts:n,onChange:r,startBridge:i,stopBridge:a,disconnectExtension:o,installArtifacts:s,refetchArtifacts:c,openExtensionChrome:l,revealExtensionFolder:d,form:f,embedded:p=!1}){let[h,_]=(0,Y.useState)(null),[v,y]=(0,Y.useState)(null),[b,S]=(0,Y.useState)(null),C=f.port??Le,w=f.host||`127.0.0.1`,T=`ws://${w}:${C}/browser-ext`,D=t.kind===`ok`&&t.data.running,k=t.kind===`ok`&&t.data.connected,A=t.kind===`ok`&&t.data.bridgeHeld===!0,j=t.kind===`ok`&&t.data.portConflict===!0,N=D||A,P=n.kind===`ok`?n.data:t.kind===`ok`?t.data.artifacts:void 0,I=P?.installed===!0,L=P?.extensionDir,R=P?.needsChromeReload===!0,B=t.kind===`ok`?k?{icon:O,color:`text-green-500`,label:e.browserExtensionConnected}:D?{icon:u,color:`text-amber-500`,label:e.browserExtensionWaiting}:{icon:z,color:`text-fg-muted`,label:e.browserExtensionServerOff}:{icon:z,color:`text-fg-muted`,label:`…`},ee=B.icon,V=(0,Y.useCallback)(async()=>{if(!h){_(`start`),y(null);try{await i({host:w,port:C})}catch(e){y(e instanceof Error?e.message:String(e))}finally{_(null)}}},[h,w,C,i]),H=(0,Y.useCallback)(async()=>{if(!h){_(`stop`),y(null);try{await a()}catch(e){y(e instanceof Error?e.message:String(e))}finally{_(null)}}},[h,a]),te=(0,Y.useCallback)(async()=>{if(!h){_(`disconnect`),y(null);try{await o()}catch(e){y(e instanceof Error?e.message:String(e))}finally{_(null)}}},[h,o]),U=(0,Y.useCallback)(async()=>{if(!h){_(`install`),y(null),S(null);try{let t=await s({force:I});t?.extensionDir?S(`${e.browserExtensionInstalled}: ${t.extensionDir}`):S(e.browserExtensionInstalled),await c()}catch(e){y(e instanceof Error?e.message:String(e))}finally{_(null)}}},[h,s,I,e.browserExtensionInstalled,c]),W=(0,Y.useCallback)(async()=>{if(!h){_(`open`),y(null);try{await l()}catch(e){y(e instanceof Error?e.message:String(e))}finally{_(null)}}},[h,l]),K=(0,Y.useCallback)(async()=>{if(!(!L||h)){_(`folder`),y(null),S(null);try{let t=await x(L);await d(),S(t?e.browserExtensionPathCopied:e.browserExtensionFolderOpened)}catch(e){y(e instanceof Error?e.message:String(e))}finally{_(null)}}},[h,L,e.browserExtensionFolderOpened,e.browserExtensionPathCopied,d]),J=(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:h!==null,onClick:()=>void U(),children:[h===`install`?(0,Z.jsx)(M,{className:`size-3.5 animate-spin`}):(0,Z.jsx)(m,{className:`size-3.5`}),h===`install`?e.browserExtensionInstalling:e.browserExtensionInstall]}),N?(0,Z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:h!==null,onClick:()=>void H(),children:[h===`stop`?(0,Z.jsx)(M,{className:`size-3.5 animate-spin`}):(0,Z.jsx)(E,{className:`size-3.5`}),e.browserExtensionStopBridge]}):(0,Z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:h!==null,onClick:()=>void V(),children:[h===`start`?(0,Z.jsx)(M,{className:`size-3.5 animate-spin`}):(0,Z.jsx)(g,{className:`size-3.5`}),h===`start`?e.browserExtensionStarting:e.browserExtensionStartBridge]}),k?(0,Z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:h!==null,onClick:()=>void te(),children:[h===`disconnect`?(0,Z.jsx)(M,{className:`size-3.5 animate-spin`}):(0,Z.jsx)(z,{className:`size-3.5`}),e.browserExtensionDisconnect]}):null]});return(0,Z.jsx)(Ce,{icon:F,title:e.browserBackendExtension,description:e.browserExtensionDownloadHint,m:e,embedded:p,primaryAction:J,advancedTitle:e.browserAdvancedShow,advanced:(0,Z.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,Z.jsx)(G,{label:e.label.browserExtensionPort,description:e.desc.browserExtensionPort,children:(0,Z.jsx)(`input`,{type:`number`,className:q(),min:1024,max:65535,value:f.port??``,placeholder:String(Le),onChange:e=>{let t=e.target.value;r({port:t===``?void 0:Number.parseInt(t,10)})}})}),(0,Z.jsx)(G,{label:e.label.browserExtensionHost,description:e.desc.browserExtensionHost,children:(0,Z.jsx)(`input`,{type:`text`,className:q(),value:f.host,placeholder:`127.0.0.1`,onChange:e=>r({host:e.target.value}),autoComplete:`off`})}),(0,Z.jsx)(G,{label:e.label.browserExtensionConnectionTimeout,description:e.desc.browserExtensionConnectionTimeout,children:(0,Z.jsx)(`input`,{type:`number`,className:q(),min:1,step:1,value:f.connectionTimeoutMs==null?``:Math.round(f.connectionTimeoutMs/1e3),placeholder:String(Re/1e3),onChange:e=>{let t=e.target.value;r({connectionTimeoutMs:t===``?void 0:Math.max(1,Number.parseInt(t,10))*1e3})}})})]}),children:(0,Z.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-lg border border-edge bg-surface-base px-3 py-2`,children:[(0,Z.jsx)(`span`,{className:`font-mono text-xs text-fg-muted`,children:T}),(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs ${B.color}`,children:[(0,Z.jsx)(ee,{className:`size-3.5`}),(0,Z.jsx)(`span`,{children:B.label})]})]}),(0,Z.jsx)(Fe,{m:e,installed:I,extensionDir:L,connected:k,busy:h!==null,folderBusy:h===`folder`,onOpenChrome:()=>void W(),onRevealFolder:()=>void K()}),R?(0,Z.jsx)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-xs leading-relaxed text-amber-800 dark:text-amber-200`,children:e.browserExtensionNeedsChromeReload}):null,j?(0,Z.jsx)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-xs leading-relaxed text-amber-800 dark:text-amber-200`,children:e.browserExtensionPortConflict.replace(`{{port}}`,String(C))}):null,b?(0,Z.jsx)(Q,{kind:`success`,message:b}):null,v?(0,Z.jsx)(Q,{kind:`error`,message:v}):null]})})}function Be(e){let t=(0,X.c)(41),{m:n,doctor:r,refetch:i,applyDoctor:a,installStream:o,embedded:s}=e,c=s===void 0?!1:s,[l,u]=(0,Y.useState)(`idle`),[d,f]=(0,Y.useState)(null),{progress:p,running:h,cancelling:g,run:_,reset:v,cancel:y}=o,x;t[0]!==a||t[1]!==n.browserPlaywrightInstallFailed||t[2]!==n.browserPlaywrightInstalled||t[3]!==i||t[4]!==v||t[5]!==_?(x=async()=>{u(`installing`),f(null),v();let e=await _({fallbackError:n.browserPlaywrightInstallFailed});if(!e.ok){if(e.error===`busy`){u(`installing`);return}if(e.error===`cancelled`){u(`idle`),f(null),v();return}u(`failed`),f(e.errorMessage??n.browserPlaywrightInstallFailed);return}e.payload&&a?.(e.payload),u(`installed`),f(e.payload?.executablePath?`${n.browserPlaywrightInstalled}: ${e.payload.executablePath}`:n.browserPlaywrightInstalled),await i()},t[0]=a,t[1]=n.browserPlaywrightInstallFailed,t[2]=n.browserPlaywrightInstalled,t[3]=i,t[4]=v,t[5]=_,t[6]=x):x=t[6];let S=x,w=r.kind===`loading`?`checking`:r.kind===`error`?`error`:r.kind===`ok`?r.data.installed?`ready`:`not_installed`:`unknown`,T=r.kind===`ok`&&r.data.installed&&r.data.executablePath?r.data.executablePath:void 0,E=r.kind===`ok`&&r.data.installed,D=l===`installing`||h,O;t[7]===S?O=t[8]:(O=()=>void S(),t[7]=S,t[8]=O);let k;t[9]!==E||t[10]!==D||t[11]!==l?(k=D?(0,Z.jsx)(M,{className:`size-3.5 animate-spin`}):E?(0,Z.jsx)(C,{className:`size-3.5`}):l===`installed`?(0,Z.jsx)(b,{className:`size-3.5 text-green-500`}):(0,Z.jsx)(m,{className:`size-3.5`}),t[9]=E,t[10]=D,t[11]=l,t[12]=k):k=t[12];let A=D?n.browserPlaywrightInstalling:E?n.browserReinstall:n.browserPlaywrightInstall,j;t[13]!==D||t[14]!==O||t[15]!==k||t[16]!==A?(j=(0,Z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-panel px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:D,onClick:O,children:[k,A]}),t[13]=D,t[14]=O,t[15]=k,t[16]=A,t[17]=j):j=t[17];let N;t[18]===n.browserPlaywrightManualInstall?N=t[19]:(N=(0,Z.jsx)(`p`,{className:`text-fg-muted`,children:n.browserPlaywrightManualInstall}),t[18]=n.browserPlaywrightManualInstall,t[19]=N);let P;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,Z.jsx)(`code`,{className:`mt-2 block w-fit rounded-md border border-edge bg-surface-base px-2 py-1 text-xs text-fg`,children:`node node_modules/playwright-core/cli.js install chromium`}),t[20]=P):P=t[20];let F;t[21]===N?F=t[22]:(F=(0,Z.jsxs)(`div`,{className:`text-xs`,children:[N,P]}),t[21]=N,t[22]=F);let I;t[23]!==y||t[24]!==g||t[25]!==n||t[26]!==p||t[27]!==h?(I=h?(0,Z.jsx)(Oe,{m:n,progress:p,showLogs:!0,cancelling:g,onCancel:()=>void y()}):null,t[23]=y,t[24]=g,t[25]=n,t[26]=p,t[27]=h,t[28]=I):I=t[28];let L;t[29]!==d||t[30]!==l?(L=d?(0,Z.jsx)(Q,{kind:l===`failed`?`error`:`success`,message:d}):null,t[29]=d,t[30]=l,t[31]=L):L=t[31];let z;return t[32]!==c||t[33]!==n||t[34]!==T||t[35]!==w||t[36]!==I||t[37]!==L||t[38]!==j||t[39]!==F?(z=(0,Z.jsxs)(Ce,{icon:R,title:n.browserPlaywrightGuideTitle,description:n.browserPlaywrightGuideDesc,status:w,statusDetail:T,m:n,embedded:c,primaryAction:j,children:[F,I,L]}),t[32]=c,t[33]=n,t[34]=T,t[35]=w,t[36]=I,t[37]=L,t[38]=j,t[39]=F,t[40]=z):z=t[40],z}async function Ve(e){let t=await c(e),n=await t.json().catch(()=>({}));if(!t.ok||n.ok===!1){let e=typeof n.error==`string`?n.error:n.error?.message;throw Error(e||`Request failed: ${t.status}`)}if(n.payload===void 0)throw Error(`Empty payload`);return n.payload}async function $(e,t){let n=await c(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t??{})}),r=await n.json().catch(()=>({}));if(!n.ok||r.ok===!1){let e=typeof r.error==`string`?r.error:r.error?.message;throw Error(e||`Request failed: ${n.status}`)}if(r.payload===void 0)throw Error(`Empty payload`);return r.payload}var He={playwright:{kind:`idle`},cloak:{kind:`idle`},extension:{kind:`idle`},extensionArtifacts:{kind:`idle`}};function Ue(e,t){switch(t.type){case`playwright`:return{...e,playwright:t.state};case`cloak`:return{...e,cloak:t.state};case`extension`:return{...e,extension:t.state};case`extension-artifacts`:return{...e,extensionArtifacts:t.state};case`playwright-idle`:return{...e,playwright:{kind:`idle`}};case`cloak-idle`:return{...e,cloak:{kind:`idle`}};case`extension-idle`:return{...e,extension:{kind:`idle`},extensionArtifacts:{kind:`idle`}};case`extension-start-probe`:return{...e,extension:e.extension.kind===`ok`?e.extension:{kind:`loading`}};case`extension-artifacts-start-probe`:return{...e,extensionArtifacts:e.extensionArtifacts.kind===`ok`?e.extensionArtifacts:{kind:`loading`}}}}function We(e){let[t,n]=(0,Y.useReducer)(Ue,He),{playwright:r,cloak:i,extension:a,extensionArtifacts:o}=t,l=(0,Y.useCallback)(async()=>{n({type:`playwright`,state:{kind:`loading`}});try{n({type:`playwright`,state:{kind:`ok`,data:await Ve(s(`/api/browser/playwright/doctor`))}})}catch(e){n({type:`playwright`,state:{kind:`error`,message:e instanceof Error?e.message:String(e)}})}},[]),u=(0,Y.useCallback)(async t=>{n({type:`cloak`,state:{kind:`loading`}});let r=(t?.cacheDir??e.cacheDir??``).trim(),i=(t?.binaryPath??e.binaryPath??``).trim(),a=new URLSearchParams;r&&a.set(`cacheDir`,r),i&&a.set(`binaryPath`,i);try{let e=await Ve(s(`/api/browser/cloakbrowser/doctor${a.size?`?${a}`:``}`));return n({type:`cloak`,state:{kind:`ok`,data:e}}),e}catch(e){return n({type:`cloak`,state:{kind:`error`,message:e instanceof Error?e.message:String(e)}}),null}},[e.binaryPath,e.cacheDir]),d=(0,Y.useCallback)(e=>{n({type:`playwright`,state:{kind:`ok`,data:e}})},[]),f=(0,Y.useCallback)(e=>{n({type:`cloak`,state:{kind:`ok`,data:e}})},[]),p=(0,Y.useCallback)(async()=>Ve(s(`/api/browser/cloakbrowser/status`)),[]),m=(0,Y.useCallback)(async()=>$(s(`/api/browser/cloakbrowser/launch`),{}),[]),h=e.browserEnabled===!0&&e.probeExtension===!0,g=e.browserEnabled===!0&&e.probeLocal===!0,_=e.browserEnabled===!0&&e.probeCloak===!0,{extensionHost:v,extensionPort:y}=e,b=(0,Y.useCallback)(async()=>{let e=new URLSearchParams({probe:`1`});v&&e.set(`host`,v),y!==void 0&&e.set(`port`,String(y)),n({type:`extension-start-probe`});try{let t=await c(s(`/api/browser/extension-status?${e}`),{signal:AbortSignal.timeout(3e3)}),r=await t.json().catch(()=>({}));if(!t.ok){n({type:`extension`,state:{kind:`error`,message:`HTTP ${t.status}`}});return}n({type:`extension`,state:{kind:`ok`,data:{running:r.running===!0,connected:r.connected===!0,backend:r.backend,artifacts:r.artifacts,bridgeHeld:r.bridgeHeld===!0,refCount:typeof r.refCount==`number`?r.refCount:void 0,manualBridge:r.manualBridge===!0,portConflict:r.portConflict===!0}}})}catch(e){n({type:`extension`,state:{kind:`error`,message:e instanceof Error?e.message:String(e)}})}},[v,y]),x=(0,Y.useCallback)(async()=>{n({type:`extension-artifacts-start-probe`});try{let e=await Ve(s(`/api/browser/extension/doctor`));return n({type:`extension-artifacts`,state:{kind:`ok`,data:e}}),e}catch(e){return n({type:`extension-artifacts`,state:{kind:`error`,message:e instanceof Error?e.message:String(e)}}),null}},[]),S=(0,Y.useCallback)(async e=>{let t=(await $(s(`/api/browser/extension/install`),{force:e?.force??!1})).doctor;return n({type:`extension-artifacts`,state:{kind:`ok`,data:t}}),await b(),t},[b]),C=(0,Y.useCallback)(async()=>{await $(s(`/api/browser/extension/open`),{action:`chrome`})},[]),w=(0,Y.useCallback)(async()=>{await $(s(`/api/browser/extension/open`),{action:`folder`})},[]);(0,Y.useEffect)(()=>{if(!g){n({type:`playwright-idle`});return}l()},[g,l]),(0,Y.useEffect)(()=>{if(!_){n({type:`cloak-idle`});return}u()},[_,u]);let T=(0,Y.useRef)(h);T.current!==h&&(T.current=h,h||n({type:`extension-idle`})),(0,Y.useEffect)(()=>{if(!h)return;b(),x();let e=setInterval(()=>void b(),5e3);return()=>clearInterval(e)},[h,b,x]);let E=(0,Y.useCallback)(async e=>{await $(s(`/api/browser/extension/start`),{host:e?.host??v,port:e?.port??y}),await b()},[v,y,b]),D=(0,Y.useCallback)(async()=>{await $(s(`/api/browser/extension/stop`),{}),await b()},[b]),O=(0,Y.useCallback)(async()=>{await $(s(`/api/browser/extension/disconnect`),{}),await b()},[b]),k=(0,Y.useRef)(null);return(0,Y.useEffect)(()=>{if(!h||e.activeBackend!==`extension`){k.current=null;return}if(a.kind!==`ok`||a.data.running||a.data.bridgeHeld)return;let t=`${v}:${y??19820}`;k.current!==t&&(k.current=t,E({host:v,port:y}).catch(()=>{k.current=null}))},[h,a,v,y,e.activeBackend,E]),{playwright:r,cloak:i,extension:a,extensionArtifacts:o,refetchPlaywright:l,applyPlaywrightDoctor:d,refetchCloak:u,applyCloakDoctor:f,fetchCloakRuntimeStatus:p,launchCloak:m,refetchExtension:b,refetchExtensionArtifacts:x,installExtensionArtifacts:S,openExtensionChrome:C,revealExtensionFolder:w,pingCdp:(0,Y.useCallback)(async e=>$(s(`/api/browser/cdp/ping`),{cdpUrl:e}),[]),testCloud:(0,Y.useCallback)(async(e,t)=>$(s(`/api/browser/cloud/test-connection`),{provider:e,apiKey:t}),[]),launchCdp:(0,Y.useCallback)(async e=>$(s(`/api/browser/cdp/launch`),{executablePath:e}),[]),stopCdp:(0,Y.useCallback)(async e=>{await $(s(`/api/browser/cdp/stop`),{port:e})},[]),listCdpInstances:(0,Y.useCallback)(async()=>(await Ve(s(`/api/browser/cdp/instances`))).instances,[]),startExtensionBridge:E,stopExtensionBridge:D,disconnectExtension:O}}var Ge=`
3
-
4
- `,Ke=/\r\n/g,qe={playwright:`/api/browser/playwright/install/stream`,cloakbrowser:`/api/browser/cloakbrowser/install/stream`},Je={playwright:`/api/browser/playwright/install/cancel`,cloakbrowser:`/api/browser/cloakbrowser/install/cancel`},Ye=8;function Xe(){return{phase:null,message:null,percent:null,lines:[]}}function Ze(e,t){let n={phase:t.phase,message:t.message??t.line??e.message,percent:t.percent??e.percent,lines:e.lines};if(t.line){let r=[...e.lines,t.line];n.lines=r.length>Ye?r.slice(-8):r}return n}async function Qe(e,t,n){let r=e.getReader(),i=new TextDecoder,a=``,o=null,s=e=>{let n=``,r=``;for(let t of e.split(`
5
- `)){let e=t.replace(/\r$/,``);e.startsWith(`event:`)?n=e.slice(6).trim():e.startsWith(`data:`)&&(r+=e.slice(5).trimStart())}if(r){if(n===`progress`){try{let e=JSON.parse(r);e&&typeof e==`object`&&typeof e.phase==`string`&&t(e)}catch{}return}if(n===`result`)try{let e=JSON.parse(r);o=e.ok?{ok:!0,payload:e.payload}:{ok:!1,error:String(e.error??`unknown`),message:typeof e.message==`string`?e.message:void 0,status:e.error===`busy`?409:e.error===`cancelled`?499:500}}catch{o={ok:!1,error:`parse`,status:0}}}};try{let e=async()=>{if(o!==null)return o;if(n?.aborted)return await r.cancel().catch(()=>{}),{ok:!1,error:`cancelled`,status:499};let{done:t,value:c}=await r.read();if(t)return o??{ok:!1,error:`no-result`,status:0};a+=i.decode(c,{stream:!0}),a=a.replace(Ke,`
6
- `);let l=a.split(Ge);a=l.pop()??``;for(let e of l)e.length&&s(e);return e()},t=await e();if(t)return t}catch(e){if(n?.aborted||e instanceof DOMException&&e.name===`AbortError`)return{ok:!1,error:`cancelled`,status:499};throw e}finally{r.releaseLock()}return o||(n?.aborted?{ok:!1,error:`cancelled`,status:499}:{ok:!1,error:`no-result`,status:0})}function $e(e){let[t,n]=(0,Y.useState)(Xe),[r,i]=(0,Y.useState)(!1),[a,o]=(0,Y.useState)(!1),l=(0,Y.useRef)(!1),u=(0,Y.useRef)(null),d=(0,Y.useCallback)(()=>{l.current||n(Xe())},[]),f=(0,Y.useCallback)(async()=>{if(l.current){o(!0);try{await c(s(Je[e]),{method:`POST`}).catch(()=>{}),u.current?.abort()}finally{o(!1)}}},[e]);return{progress:t,running:r,cancelling:a,run:(0,Y.useCallback)(async t=>{if(l.current)return{ok:!1,error:`busy`,status:409,errorMessage:`An install for this browser type is already in progress.`};let r=new AbortController;u.current=r,l.current=!0,i(!0),n(Xe());try{let i=await c(s(qe[e]),{method:`POST`,headers:{Accept:`text/event-stream`,...t.body===void 0?{}:{"Content-Type":`application/json`}},body:t.body===void 0?void 0:JSON.stringify(t.body),signal:r.signal});if(!i.ok||!i.body){let e=await i.text().catch(()=>``),t=`HTTP ${i.status}`;try{let n=JSON.parse(e);typeof n.message==`string`?t=n.message:typeof n.error==`string`&&(t=n.error)}catch{e&&(t=e.slice(0,500))}return{ok:!1,error:i.status===409?`busy`:`http`,status:i.status,errorMessage:t}}let a=await Qe(i.body,e=>{n(t=>Ze(t,e))},r.signal);return a.ok?a:a.error===`cancelled`?{...a,errorMessage:void 0}:{...a,errorMessage:a.message??(a.error===`busy`?`An install for this browser type is already in progress.`:t.fallbackError)}}catch(e){return r.signal.aborted||e instanceof DOMException&&e.name===`AbortError`?{ok:!1,error:`cancelled`,status:499}:{ok:!1,error:`network`,errorMessage:e instanceof Error?e.message:t.fallbackError}}finally{u.current===r&&(u.current=null),l.current=!1,i(!1),o(!1)}},[e]),reset:d,cancel:f}}function et(e){let t=(0,X.c)(150),{a:n,form:r,update:a,activeTab:s,setActiveTab:c}=e,l=o(nt),u=y(tt),d=$e(`playwright`),f=$e(`cloakbrowser`),p=r.browserEnabled&&(s===`overview`||s===`extension`),m=r.browserEnabled&&(s===`overview`||s===`local`),g=r.browserEnabled&&(s===`overview`||s===`cloakbrowser`),_;t[0]!==r.browserBackend||t[1]!==r.browserCloakBinaryPath||t[2]!==r.browserCloakCacheDir||t[3]!==r.browserEnabled||t[4]!==r.browserExtensionHost||t[5]!==r.browserExtensionPort||t[6]!==g||t[7]!==p||t[8]!==m?(_={cacheDir:r.browserCloakCacheDir,binaryPath:r.browserCloakBinaryPath,browserEnabled:r.browserEnabled,activeBackend:r.browserBackend,probeExtension:p,probeLocal:m,probeCloak:g,extensionHost:r.browserExtensionHost,extensionPort:r.browserExtensionPort},t[0]=r.browserBackend,t[1]=r.browserCloakBinaryPath,t[2]=r.browserCloakCacheDir,t[3]=r.browserEnabled,t[4]=r.browserExtensionHost,t[5]=r.browserExtensionPort,t[6]=g,t[7]=p,t[8]=m,t[9]=_):_=t[9];let v=We(_),b;t[10]===v.playwright?b=t[11]:(b=me(v.playwright),t[10]=v.playwright,t[11]=b);let x=b,S;t[12]===v.cloak?S=t[13]:(S=me(v.cloak),t[12]=v.cloak,t[13]=S);let C=S,w;t[14]===v.extension?w=t[15]:(w=ge(v.extension),t[14]=v.extension,t[15]=w);let T=w,E;t[16]!==n||t[17]!==v.extension?(E=_e(v.extension,n),t[16]=n,t[17]=v.extension,t[18]=E):E=t[18];let D=E,O;t[19]!==n||t[20]!==C||t[21]!==T||t[22]!==D||t[23]!==x||t[24]!==u?(O=[{value:`extension`,icon:F,name:n.browserBackendExtension,tagline:n.browserModeExtTagline,status:T,statusLabel:D},{value:`local`,icon:R,name:n.browserBackendLocal,tagline:n.browserModeLocalTagline,status:x,statusLabel:he(x,n)},{value:`cloakbrowser`,icon:N,name:n.browserBackendCloakBrowser,tagline:n.browserModeCloakTagline,status:C,statusLabel:he(C,n)},{value:`cdp`,icon:h,name:n.browserBackendCdp,tagline:n.browserModeCdpTagline},{value:`cloud`,icon:B,name:n.browserBackendCloud,tagline:n.browserModeCloudTagline}].filter(e=>te(e.value,u)),t[19]=n,t[20]=C,t[21]=T,t[22]=D,t[23]=x,t[24]=u,t[25]=O):O=t[25];let k=O,A;t[26]!==c||t[27]!==a?(A=e=>{a({browserEnabled:!0,browserBackend:e}),c(e)},t[26]=c,t[27]=a,t[28]=A):A=t[28];let j=A,M=!r.browserEnabled&&`pointer-events-none opacity-40`,P;t[29]===M?P=t[30]:(P=i(`flex flex-col gap-5 transition-opacity`,M),t[29]=M,t[30]=P);let I=!r.browserEnabled,z;t[31]!==n||t[32]!==s||t[33]!==v.disconnectExtension||t[34]!==v.extension||t[35]!==v.extensionArtifacts||t[36]!==v.installExtensionArtifacts||t[37]!==v.openExtensionChrome||t[38]!==v.refetchExtensionArtifacts||t[39]!==v.revealExtensionFolder||t[40]!==v.startExtensionBridge||t[41]!==v.stopExtensionBridge||t[42]!==r.browserExtensionConnectionTimeout||t[43]!==r.browserExtensionHost||t[44]!==r.browserExtensionPort||t[45]!==a?(z=s===`extension`?(0,Z.jsx)(H,{children:(0,Z.jsx)(ze,{embedded:!0,m:n,probe:v.extension,artifacts:v.extensionArtifacts,form:{port:r.browserExtensionPort,host:r.browserExtensionHost,connectionTimeoutMs:r.browserExtensionConnectionTimeout},onChange:e=>a({...e.port===void 0?{}:{browserExtensionPort:e.port},...e.host===void 0?{}:{browserExtensionHost:e.host},...e.connectionTimeoutMs===void 0?{}:{browserExtensionConnectionTimeout:e.connectionTimeoutMs}}),startBridge:v.startExtensionBridge,stopBridge:v.stopExtensionBridge,disconnectExtension:v.disconnectExtension,installArtifacts:v.installExtensionArtifacts,refetchArtifacts:v.refetchExtensionArtifacts,openExtensionChrome:v.openExtensionChrome,revealExtensionFolder:v.revealExtensionFolder})}):null,t[31]=n,t[32]=s,t[33]=v.disconnectExtension,t[34]=v.extension,t[35]=v.extensionArtifacts,t[36]=v.installExtensionArtifacts,t[37]=v.openExtensionChrome,t[38]=v.refetchExtensionArtifacts,t[39]=v.revealExtensionFolder,t[40]=v.startExtensionBridge,t[41]=v.stopExtensionBridge,t[42]=r.browserExtensionConnectionTimeout,t[43]=r.browserExtensionHost,t[44]=r.browserExtensionPort,t[45]=a,t[46]=z):z=t[46];let V;t[47]!==n||t[48]!==s||t[49]!==v.applyPlaywrightDoctor||t[50]!==v.playwright||t[51]!==v.refetchPlaywright||t[52]!==d?(V=s===`local`?(0,Z.jsx)(H,{children:(0,Z.jsx)(Be,{embedded:!0,m:n,doctor:v.playwright,refetch:v.refetchPlaywright,applyDoctor:v.applyPlaywrightDoctor,installStream:d})}):null,t[47]=n,t[48]=s,t[49]=v.applyPlaywrightDoctor,t[50]=v.playwright,t[51]=v.refetchPlaywright,t[52]=d,t[53]=V):V=t[53];let U;t[54]!==n||t[55]!==s||t[56]!==f||t[57]!==v.applyCloakDoctor||t[58]!==v.cloak||t[59]!==v.fetchCloakRuntimeStatus||t[60]!==v.launchCloak||t[61]!==v.refetchCloak||t[62]!==r.browserCloakBinaryPath||t[63]!==r.browserCloakCacheDir||t[64]!==r.browserCloakExtraArgs||t[65]!==r.browserCloakFingerprintPlatform||t[66]!==r.browserCloakKeepOpen||t[67]!==r.browserCloakLocale||t[68]!==r.browserCloakTemporaryProfile||t[69]!==r.browserCloakTimezone||t[70]!==r.browserCloakWebrtcIp||t[71]!==r.browserHumanPreset||t[72]!==r.browserHumanize||t[73]!==a?(U=s===`cloakbrowser`?(0,Z.jsx)(H,{children:(0,Z.jsx)(je,{embedded:!0,m:n,doctor:v.cloak,refetch:v.refetchCloak,applyDoctor:v.applyCloakDoctor,installStream:f,fetchRuntimeStatus:v.fetchCloakRuntimeStatus,launchCloak:v.launchCloak,form:{cacheDir:r.browserCloakCacheDir,binaryPath:r.browserCloakBinaryPath,keepOpen:r.browserCloakKeepOpen,temporaryProfile:r.browserCloakTemporaryProfile,humanize:r.browserHumanize,humanPreset:r.browserHumanPreset,timezone:r.browserCloakTimezone,locale:r.browserCloakLocale,webrtcIp:r.browserCloakWebrtcIp,fingerprintPlatform:r.browserCloakFingerprintPlatform,extraArgs:r.browserCloakExtraArgs},onChange:e=>a({...e.cacheDir===void 0?{}:{browserCloakCacheDir:e.cacheDir},...e.binaryPath===void 0?{}:{browserCloakBinaryPath:e.binaryPath},...e.keepOpen===void 0?{}:{browserCloakKeepOpen:e.keepOpen},...e.temporaryProfile===void 0?{}:{browserCloakTemporaryProfile:e.temporaryProfile},...e.humanize===void 0?{}:{browserHumanize:e.humanize},...e.humanPreset===void 0?{}:{browserHumanPreset:e.humanPreset},...e.timezone===void 0?{}:{browserCloakTimezone:e.timezone},...e.locale===void 0?{}:{browserCloakLocale:e.locale},...e.webrtcIp===void 0?{}:{browserCloakWebrtcIp:e.webrtcIp},...e.fingerprintPlatform===void 0?{}:{browserCloakFingerprintPlatform:e.fingerprintPlatform},...e.extraArgs===void 0?{}:{browserCloakExtraArgs:e.extraArgs}})})}):null,t[54]=n,t[55]=s,t[56]=f,t[57]=v.applyCloakDoctor,t[58]=v.cloak,t[59]=v.fetchCloakRuntimeStatus,t[60]=v.launchCloak,t[61]=v.refetchCloak,t[62]=r.browserCloakBinaryPath,t[63]=r.browserCloakCacheDir,t[64]=r.browserCloakExtraArgs,t[65]=r.browserCloakFingerprintPlatform,t[66]=r.browserCloakKeepOpen,t[67]=r.browserCloakLocale,t[68]=r.browserCloakTemporaryProfile,t[69]=r.browserCloakTimezone,t[70]=r.browserCloakWebrtcIp,t[71]=r.browserHumanPreset,t[72]=r.browserHumanize,t[73]=a,t[74]=U):U=t[74];let W;t[75]!==n||t[76]!==s||t[77]!==v.launchCdp||t[78]!==v.listCdpInstances||t[79]!==v.pingCdp||t[80]!==v.stopCdp||t[81]!==r.browserCdpUrl||t[82]!==a?(W=s===`cdp`?(0,Z.jsx)(H,{children:(0,Z.jsx)(Ee,{embedded:!0,m:n,cdpUrl:r.browserCdpUrl,onCdpUrlChange:e=>a({browserCdpUrl:e}),launch:v.launchCdp,stop:v.stopCdp,listInstances:v.listCdpInstances,ping:v.pingCdp})}):null,t[75]=n,t[76]=s,t[77]=v.launchCdp,t[78]=v.listCdpInstances,t[79]=v.pingCdp,t[80]=v.stopCdp,t[81]=r.browserCdpUrl,t[82]=a,t[83]=W):W=t[83];let K;t[84]!==n||t[85]!==s||t[86]!==v.testCloud||t[87]!==r.browserCloudApiKey||t[88]!==r.browserCloudProjectId||t[89]!==r.browserCloudProvider||t[90]!==r.browserCloudRegion||t[91]!==a?(K=s===`cloud`?(0,Z.jsx)(H,{children:(0,Z.jsx)(Pe,{embedded:!0,m:n,form:{provider:r.browserCloudProvider,apiKey:r.browserCloudApiKey,projectId:r.browserCloudProjectId,region:r.browserCloudRegion},onChange:e=>a({...e.provider===void 0?{}:{browserCloudProvider:e.provider},...e.apiKey===void 0?{}:{browserCloudApiKey:e.apiKey},...e.projectId===void 0?{}:{browserCloudProjectId:e.projectId},...e.region===void 0?{}:{browserCloudRegion:e.region}}),testCloud:v.testCloud})}):null,t[84]=n,t[85]=s,t[86]=v.testCloud,t[87]=r.browserCloudApiKey,t[88]=r.browserCloudProjectId,t[89]=r.browserCloudProvider,t[90]=r.browserCloudRegion,t[91]=a,t[92]=K):K=t[92];let q;t[93]!==z||t[94]!==V||t[95]!==U||t[96]!==W||t[97]!==K||t[98]!==P||t[99]!==I?(q=(0,Z.jsxs)(`div`,{className:P,"aria-hidden":I,children:[z,V,U,W,K]}),t[93]=z,t[94]=V,t[95]=U,t[96]=W,t[97]=K,t[98]=P,t[99]=I,t[100]=q):q=t[100];let J=q;if(s===`overview`){let e;t[101]!==n||t[102]!==r.browserEnabled||t[103]!==j?(e=r.browserEnabled?null:(0,Z.jsx)(fe,{m:n,onStart:j}),t[101]=n,t[102]=r.browserEnabled,t[103]=j,t[104]=e):e=t[104];let o;t[105]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,Z.jsx)(`div`,{className:`flex size-9 shrink-0 items-center justify-center rounded-lg bg-surface-hover/90 text-fg-muted`,"aria-hidden":!0,children:(0,Z.jsx)(L,{className:`size-4`,strokeWidth:1.75})}),t[105]=o):o=t[105];let s;t[106]===a?s=t[107]:(s=e=>a({browserEnabled:e.target.checked}),t[106]=a,t[107]=s);let u;t[108]!==r.browserEnabled||t[109]!==s?(u=(0,Z.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.browserEnabled,onChange:s}),t[108]=r.browserEnabled,t[109]=s,t[110]=u):u=t[110];let d;t[111]===n.browserEnabledOn?d=t[112]:(d=(0,Z.jsx)(`span`,{children:n.browserEnabledOn}),t[111]=n.browserEnabledOn,t[112]=d);let f;t[113]!==u||t[114]!==d?(f=(0,Z.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm font-medium text-fg`,children:[u,d]}),t[113]=u,t[114]=d,t[115]=f):f=t[115];let p;t[116]!==n.desc.browserEnabled||t[117]!==n.label.browserEnabled||t[118]!==f?(p=(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-3`,children:[o,(0,Z.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,Z.jsx)(G,{label:n.label.browserEnabled,description:n.desc.browserEnabled,children:f})})]}),t[116]=n.desc.browserEnabled,t[117]=n.label.browserEnabled,t[118]=f,t[119]=p):p=t[119];let m;t[120]!==n.browserDocsLink||t[121]!==l?(m=(0,Z.jsx)(ue,{language:l,label:n.browserDocsLink,className:`shrink-0 pt-1`}),t[120]=n.browserDocsLink,t[121]=l,t[122]=m):m=t[122];let h;t[123]!==p||t[124]!==m?(h=(0,Z.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[p,m]}),t[123]=p,t[124]=m,t[125]=h):h=t[125];let g;t[126]!==n||t[127]!==r.browserBackend||t[128]!==r.browserEnabled||t[129]!==k||t[130]!==c||t[131]!==a?(g=r.browserEnabled?(0,Z.jsx)(`div`,{id:se(`connection`),className:i(`scroll-mt-24 transition-opacity`,!r.browserEnabled&&`pointer-events-none opacity-40`),children:(0,Z.jsx)(ae,{m:n,value:r.browserBackend,onChange:e=>a({browserBackend:e}),onOpenConfig:c,options:k})}):(0,Z.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n.browserDisabledHint}),t[126]=n,t[127]=r.browserBackend,t[128]=r.browserEnabled,t[129]=k,t[130]=c,t[131]=a,t[132]=g):g=t[132];let _;t[133]!==h||t[134]!==g?(_=(0,Z.jsx)(H,{children:(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[h,g]})}),t[133]=h,t[134]=g,t[135]=_):_=t[135];let v=!r.browserEnabled&&`pointer-events-none opacity-40`,y;t[136]===v?y=t[137]:(y=i(`transition-opacity`,v),t[136]=v,t[137]=y);let b=!r.browserEnabled,x;t[138]!==n||t[139]!==r||t[140]!==a?(x=(0,Z.jsx)(le,{a:n,form:r,update:a}),t[138]=n,t[139]=r,t[140]=a,t[141]=x):x=t[141];let S;t[142]!==y||t[143]!==b||t[144]!==x?(S=(0,Z.jsx)(ee,{children:(0,Z.jsx)(`div`,{className:y,"aria-hidden":b,children:x})}),t[142]=y,t[143]=b,t[144]=x,t[145]=S):S=t[145];let C;return t[146]!==e||t[147]!==_||t[148]!==S?(C=(0,Z.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[e,_,S]}),t[146]=e,t[147]=_,t[148]=S,t[149]=C):C=t[149],C}return Se(s)?J:null}function tt(e){return e.mode}function nt(e){return e.language}function rt(e,t){return e.browserTabs[t]}function it(){let e=(0,X.c)(52),t=o(ot),n;e[0]===t?n=e[1]:(n=a(t),e[0]=t,e[1]=n);let r=n,s=r.agentSettings,c=r.chat,l=y(at),u=ne(s),[f,p]=d(),m;e[2]===l?m=e[3]:(m=W(ve,l),e[2]=l,e[3]=m);let h=m,g;e[4]===f?g=e[5]:(g=ce(f.get(`focus`)),e[4]=f,e[5]=g);let _=g,v;e[6]!==_||e[7]!==f?(v=_?be[_]??xe(f.get(`tab`)):xe(f.get(`tab`)),e[6]=_,e[7]=f,e[8]=v):v=e[8];let b=v,x;bb0:{if(!u.form){x=null;break bb0}let t;e[9]!==s||e[10]!==c||e[11]!==u.form||e[12]!==u.update?(t={form:u.form,update:u.update,a:s,chat:c},e[9]=s,e[10]=c,e[11]=u.form,e[12]=u.update,e[13]=t):t=e[13],x=t}let S=x,C;e[14]===p?C=e[15]:(C=e=>{p(t=>{let n=new URLSearchParams(t);return n.delete(`focus`),e===`overview`?n.delete(`tab`):n.set(`tab`,e),n},{replace:!0})},e[14]=p,e[15]=C);let w=C;U(b,w);let T,E;e[16]!==_||e[17]!==f||e[18]!==p?(T=()=>{if(!_)return;let e=be[_]??xe(f.get(`tab`));p(t=>{let n=new URLSearchParams(t);return n.delete(`focus`),e===`overview`?n.delete(`tab`):n.set(`tab`,e),n},{replace:!0});let t=_===`runtime`||_===`security`?se(_):null;if(!t)return;let n=window.setTimeout(()=>{document.getElementById(t)?.scrollIntoView({behavior:`smooth`,block:`start`})},80);return()=>window.clearTimeout(n)},E=[_,f,p],e[16]=_,e[17]=f,e[18]=p,e[19]=T,e[20]=E):(T=e[19],E=e[20]),(0,Y.useEffect)(T,E);let D=s.browserTabsAria,O;e[21]!==b||e[22]!==w||e[23]!==h?(O=e=>{if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault();let t=h.indexOf(b);if(t<0)return;let n=h[(t+(e.key===`ArrowRight`?1:-1)+h.length)%h.length];w(n)},e[21]=b,e[22]=w,e[23]=h,e[24]=O):O=e[24];let k;if(e[25]!==b||e[26]!==s||e[27]!==w||e[28]!==h){let t;e[30]!==b||e[31]!==s||e[32]!==w?(t=e=>{let t=e===b;return(0,Z.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":t,id:`agent-browser-tab-${e}`,"aria-controls":`agent-browser-panel-${e}`,className:i(`shrink-0 rounded-lg px-3 py-2 text-sm font-medium transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,I.press,t?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover hover:text-fg`),onClick:()=>w(e),children:rt(s,e)},e)},e[30]=b,e[31]=s,e[32]=w,e[33]=t):t=e[33],k=h.map(t),e[25]=b,e[26]=s,e[27]=w,e[28]=h,e[29]=k}else k=e[29];let A;e[34]===k?A=e[35]:(A=(0,Z.jsx)(`div`,{className:`-mx-1 flex gap-1 overflow-x-auto px-1 pb-1`,children:k}),e[34]=k,e[35]=A);let j=`agent-browser-panel-${b}`,M=`agent-browser-tab-${b}`,N;e[36]!==b||e[37]!==S||e[38]!==w?(N=S?(0,Z.jsx)(et,{...S,activeTab:b,setActiveTab:w}):null,e[36]=b,e[37]=S,e[38]=w,e[39]=N):N=e[39];let P;e[40]!==j||e[41]!==M||e[42]!==N?(P=(0,Z.jsx)(`div`,{role:`tabpanel`,id:j,"aria-labelledby":M,className:`min-w-0`,children:N}),e[40]=j,e[41]=M,e[42]=N,e[43]=P):P=e[43];let F;e[44]!==s.browserTabsAria||e[45]!==A||e[46]!==P||e[47]!==O?(F=(0,Z.jsxs)(`div`,{className:`flex flex-col gap-5`,role:`tablist`,"aria-label":D,onKeyDown:O,children:[A,P]}),e[44]=s.browserTabsAria,e[45]=A,e[46]=P,e[47]=O,e[48]=F):F=e[48];let L;return e[49]!==F||e[50]!==u?(L=(0,Z.jsx)(J,{sectionId:`agent-browser`,intro:``,vm:u,tabbed:!0,children:F}),e[49]=F,e[50]=u,e[51]=L):L=e[51],L}function at(e){return e.mode}function ot(e){return e.language}export{it as AgentBrowserSettingsPage};