@xopcai/xopc 0.0.86 → 0.0.88

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 (658) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/feishu/src/adapters/cli-login.js +3 -3
  3. package/dist/extensions/feishu/src/adapters/cli-login.js.map +1 -1
  4. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  5. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  6. package/dist/extensions/telegram/src/delivery-chat-id.d.ts +1 -1
  7. package/dist/extensions/telegram/src/delivery-chat-id.js +1 -1
  8. package/dist/extensions/telegram/src/delivery-chat-id.js.map +1 -1
  9. package/dist/extensions/telegram/src/plugin.js +1 -1
  10. package/dist/extensions/telegram/src/routing-integration.js +3 -2
  11. package/dist/extensions/telegram/src/routing-integration.js.map +1 -1
  12. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  13. package/dist/extensions/telegram/xopc.extension.json +1 -1
  14. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js +2 -2
  15. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js.map +1 -1
  16. package/dist/extensions/weixin/src/api/api.js +3 -3
  17. package/dist/extensions/weixin/src/api/api.js.map +1 -1
  18. package/dist/extensions/weixin/src/auth/accounts.js +12 -12
  19. package/dist/extensions/weixin/src/auth/accounts.js.map +1 -1
  20. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  21. package/dist/extensions/weixin/src/delivery-to.js +2 -2
  22. package/dist/extensions/weixin/src/delivery-to.js.map +1 -1
  23. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  24. package/dist/extensions/weixin/src/messaging/debug-mode.js +5 -5
  25. package/dist/extensions/weixin/src/messaging/debug-mode.js.map +1 -1
  26. package/dist/extensions/weixin/src/messaging/inbound.js +11 -11
  27. package/dist/extensions/weixin/src/messaging/inbound.js.map +1 -1
  28. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  29. package/dist/extensions/weixin/src/plugin.js +1 -1
  30. package/dist/extensions/weixin/src/storage/sync-buf.js +4 -4
  31. package/dist/extensions/weixin/src/storage/sync-buf.js.map +1 -1
  32. package/dist/extensions/weixin/src/workflow-progress.d.ts +1 -1
  33. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  34. package/dist/extensions/weixin/src/workflow-progress.js.map +1 -1
  35. package/dist/gateway/static/root/assets/agents-CRxETUZx.js +222 -0
  36. package/dist/gateway/static/root/assets/{apps-page-DrfytjOb.js → apps-page-wKWf3l57.js} +1 -1
  37. package/dist/gateway/static/root/assets/channels-settings-DDbqVNkx.js +1 -0
  38. package/dist/gateway/static/root/assets/{channels-status-swr-Bs5kMCMI.js → channels-status-swr-DIsl75Y3.js} +1 -1
  39. package/dist/gateway/static/root/assets/copy-SxMW6Xpc.js +1 -0
  40. package/dist/gateway/static/root/assets/{cron-api-BuVcZ5zR.js → cron-api-N9hvuRrn.js} +1 -1
  41. package/dist/gateway/static/root/assets/{cron-page-BMrloeFH.js → cron-page-tlNGNxhP.js} +1 -1
  42. package/dist/gateway/static/root/assets/{dist-CKU1OOTf.js → dist-CJwfHYvT.js} +1 -1
  43. package/dist/gateway/static/root/assets/{extension-debug-page-BdW_46sN.js → extension-debug-page-BVJohZoZ.js} +1 -1
  44. package/dist/gateway/static/root/assets/{extension-page-DW47KI82.js → extension-page-BT2tmElC.js} +1 -1
  45. package/dist/gateway/static/root/assets/extension-settings-page-BSS47c2j.js +1 -0
  46. package/dist/gateway/static/root/assets/{fetch-B2MYHbWg.js → fetch-BaFNUtkE.js} +1 -1
  47. package/dist/gateway/static/root/assets/{field-primitives-DPG-oJmx.js → field-primitives-QwYEq6Hz.js} +1 -1
  48. package/dist/gateway/static/root/assets/{heartbeat-config-api-C8dNts9i.js → heartbeat-config-api-BVSidEDJ.js} +1 -1
  49. package/dist/gateway/static/root/assets/index-CqZzHNEg.css +1 -0
  50. package/dist/gateway/static/root/assets/{index-BmVYculr.js → index-qNrVJp-y.js} +97 -95
  51. package/dist/gateway/static/root/assets/{logs-page-sTsVWz0X.js → logs-page-DDonPVLn.js} +1 -1
  52. package/dist/gateway/static/root/assets/sessions-page-DKt-Wmib.js +1 -0
  53. package/dist/gateway/static/root/assets/{settings-form-section-DuvRQW--.js → settings-form-section-B8N3A3Zo.js} +1 -1
  54. package/dist/gateway/static/root/assets/settings-page-DcJjvvw4.js +3 -0
  55. package/dist/gateway/static/root/assets/{share-preview-page-BtG2kLDh.js → share-preview-page-Q7KqkO-u.js} +1 -1
  56. package/dist/gateway/static/root/assets/skills-page-DuJ4BTO3.js +2 -0
  57. package/dist/gateway/static/root/assets/{theme-store-DryYl3qD.js → theme-store-BbRc5ugR.js} +1 -1
  58. package/dist/gateway/static/root/assets/url-D6jvVYIA.js +7 -0
  59. package/dist/gateway/static/root/assets/{utils-BY7bU1DT.js → utils-CxDGduqK.js} +1 -1
  60. package/dist/gateway/static/root/assets/voice-api-key-field-CTyHz7L_.js +1 -0
  61. package/dist/gateway/static/root/assets/workflows-page-GacJ41Fv.js +27 -0
  62. package/dist/gateway/static/root/index.html +6 -5
  63. package/dist/package.js +1 -1
  64. package/dist/src/agent/agent-manager.js +7 -7
  65. package/dist/src/agent/agent-scope.d.ts +4 -0
  66. package/dist/src/agent/agent-scope.js +53 -10
  67. package/dist/src/agent/agent-scope.js.map +1 -1
  68. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +2 -1
  69. package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +1 -1
  70. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
  71. package/dist/src/agent/child-agent-factory.d.ts +15 -0
  72. package/dist/src/agent/child-agent-factory.js +35 -2
  73. package/dist/src/agent/child-agent-factory.js.map +1 -1
  74. package/dist/src/agent/client-error-format.d.ts +20 -0
  75. package/dist/src/agent/client-error-format.js +97 -0
  76. package/dist/src/agent/client-error-format.js.map +1 -0
  77. package/dist/src/agent/context/workspace-seed.js +2 -2
  78. package/dist/src/agent/embedded/run-turn.js +23 -4
  79. package/dist/src/agent/embedded/run-turn.js.map +1 -1
  80. package/dist/src/agent/embedded/session-tool-result-guard.js +2 -1
  81. package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
  82. package/dist/src/agent/embedded/tool-result-truncation.js +2 -1
  83. package/dist/src/agent/embedded/tool-result-truncation.js.map +1 -1
  84. package/dist/src/agent/fallback/candidates.js +2 -2
  85. package/dist/src/agent/fallback/candidates.js.map +1 -1
  86. package/dist/src/agent/goals/goal-locale.d.ts +1 -1
  87. package/dist/src/agent/goals/goal-run-store.js +4 -4
  88. package/dist/src/agent/goals/persistent-goal-apis.d.ts +0 -2
  89. package/dist/src/agent/goals/persistent-goal-service.js +1 -2
  90. package/dist/src/agent/goals/persistent-goal-service.js.map +1 -1
  91. package/dist/src/agent/goals/post-turn.js +2 -2
  92. package/dist/src/agent/image/generation/normalization.js +2 -12
  93. package/dist/src/agent/image/generation/normalization.js.map +1 -1
  94. package/dist/src/agent/image/generation/provider-registry.d.ts +4 -8
  95. package/dist/src/agent/image/generation/provider-registry.js.map +1 -1
  96. package/dist/src/agent/image/generation/runtime.d.ts +2 -2
  97. package/dist/src/agent/image/generation/runtime.js.map +1 -1
  98. package/dist/src/agent/image/generation/types.d.ts +0 -18
  99. package/dist/src/agent/image/image-helpers.js +6 -1
  100. package/dist/src/agent/image/image-helpers.js.map +1 -1
  101. package/dist/src/agent/image/index.d.ts +1 -1
  102. package/dist/src/agent/image/load-image-media.js +2 -2
  103. package/dist/src/agent/inbound/inbound-loop.d.ts +5 -0
  104. package/dist/src/agent/inbound/inbound-loop.js +41 -10
  105. package/dist/src/agent/inbound/inbound-loop.js.map +1 -1
  106. package/dist/src/agent/inbound/turn-dispatcher.d.ts +4 -0
  107. package/dist/src/agent/inbound/turn-dispatcher.js +7 -5
  108. package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
  109. package/dist/src/agent/ipc/bus.js +1 -1
  110. package/dist/src/agent/ipc/inbox.js +2 -2
  111. package/dist/src/agent/ipc/socket.js +1 -1
  112. package/dist/src/agent/mcp/bundle-mcp-materialize.js +2 -1
  113. package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +1 -1
  114. package/dist/src/agent/mcp/bundle-mcp-names.js +2 -1
  115. package/dist/src/agent/mcp/bundle-mcp-names.js.map +1 -1
  116. package/dist/src/agent/mcp/bundle-mcp-runtime.js +2 -1
  117. package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
  118. package/dist/src/agent/mcp/mcp-transport-config.js +2 -1
  119. package/dist/src/agent/mcp/mcp-transport-config.js.map +1 -1
  120. package/dist/src/agent/mcp/mcp-transport.js +2 -1
  121. package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
  122. package/dist/src/agent/media-generation/runtime-shared.js +2 -9
  123. package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
  124. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  125. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  126. package/dist/src/agent/memory/dreaming/events.js +1 -1
  127. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  128. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  129. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  130. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  131. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  132. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  133. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  134. package/dist/src/agent/messaging/command-handler.d.ts +6 -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/orchestration/llm-turn-retry.d.ts +2 -0
  139. package/dist/src/agent/orchestration/llm-turn-retry.js +9 -1
  140. package/dist/src/agent/orchestration/llm-turn-retry.js.map +1 -1
  141. package/dist/src/agent/prompt/safety.d.ts +0 -7
  142. package/dist/src/agent/prompt/safety.js +1 -20
  143. package/dist/src/agent/prompt/safety.js.map +1 -1
  144. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  145. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  146. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  147. package/dist/src/agent/sandbox/path-policy.js +2 -2
  148. package/dist/src/agent/service/build-direct-message-content.js +2 -2
  149. package/dist/src/agent/service/build-direct-message-content.js.map +1 -1
  150. package/dist/src/agent/service/direct-turn-helpers.d.ts +3 -1
  151. package/dist/src/agent/service/direct-turn-helpers.js +6 -1
  152. package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
  153. package/dist/src/agent/service/process-direct-one-shot.d.ts +4 -0
  154. package/dist/src/agent/service/process-direct-one-shot.js +15 -2
  155. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
  156. package/dist/src/agent/service/process-direct-streaming.d.ts +4 -0
  157. package/dist/src/agent/service/process-direct-streaming.js +53 -7
  158. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  159. package/dist/src/agent/service/webchat-tts.d.ts +1 -2
  160. package/dist/src/agent/service/webchat-tts.js +2 -2
  161. package/dist/src/agent/service/webchat-tts.js.map +1 -1
  162. package/dist/src/agent/service.d.ts +8 -0
  163. package/dist/src/agent/service.js +25 -5
  164. package/dist/src/agent/service.js.map +1 -1
  165. package/dist/src/agent/session/session-inspector.js +1 -1
  166. package/dist/src/agent/skills/config.js +1 -1
  167. package/dist/src/agent/skills/hub-hash.js +2 -2
  168. package/dist/src/agent/skills/hub-lock.js +1 -1
  169. package/dist/src/agent/skills/hub-pull.js +2 -2
  170. package/dist/src/agent/skills/index.js +1 -1
  171. package/dist/src/agent/skills/managed-store.js +1 -1
  172. package/dist/src/agent/skills/scanner.js +1 -1
  173. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  174. package/dist/src/agent/skills/skill-manager.js +1 -1
  175. package/dist/src/agent/tools/create-share-tool.js +27 -20
  176. package/dist/src/agent/tools/create-share-tool.js.map +1 -1
  177. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  178. package/dist/src/agent/tools/factory.js +2 -2
  179. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  180. package/dist/src/agent/tools/index.d.ts +0 -1
  181. package/dist/src/agent/tools/index.js +4 -5
  182. package/dist/src/agent/tools/send-media.js +1 -1
  183. package/dist/src/agent/tools/shell.js +0 -13
  184. package/dist/src/agent/tools/shell.js.map +1 -1
  185. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  186. package/dist/src/agent/tools/workflow-tool.js +70 -16
  187. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  188. package/dist/src/agent/tools/write.js +1 -1
  189. package/dist/src/agent/workflow/agent-progress.d.ts +5 -0
  190. package/dist/src/agent/workflow/agent-progress.js +65 -0
  191. package/dist/src/agent/workflow/agent-progress.js.map +1 -0
  192. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +1 -1
  193. package/dist/src/agent/workflow/builtins/audit-repo.js +14 -0
  194. package/dist/src/agent/workflow/builtins/audit-repo.js.map +1 -1
  195. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +1 -1
  196. package/dist/src/agent/workflow/builtins/debug-incident.js +14 -0
  197. package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -1
  198. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +12 -0
  199. package/dist/src/agent/workflow/builtins/implementation-plan.js +175 -0
  200. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +1 -0
  201. package/dist/src/agent/workflow/builtins/index.d.ts +3 -1
  202. package/dist/src/agent/workflow/builtins/index.js +11 -1
  203. package/dist/src/agent/workflow/builtins/index.js.map +1 -1
  204. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +1 -1
  205. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +14 -0
  206. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +1 -1
  207. package/dist/src/agent/workflow/builtins/pr-review.d.ts +1 -1
  208. package/dist/src/agent/workflow/builtins/pr-review.js +14 -0
  209. package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -1
  210. package/dist/src/agent/workflow/builtins/release-check.d.ts +11 -0
  211. package/dist/src/agent/workflow/builtins/release-check.js +165 -0
  212. package/dist/src/agent/workflow/builtins/release-check.js.map +1 -0
  213. package/dist/src/agent/workflow/builtins/research.d.ts +1 -1
  214. package/dist/src/agent/workflow/builtins/research.js +14 -0
  215. package/dist/src/agent/workflow/builtins/research.js.map +1 -1
  216. package/dist/src/agent/workflow/catalog.js +1 -1
  217. package/dist/src/agent/workflow/channel-capability.d.ts +3 -3
  218. package/dist/src/agent/workflow/index.d.ts +2 -1
  219. package/dist/src/agent/workflow/index.js +3 -2
  220. package/dist/src/agent/workflow/lint.d.ts +38 -0
  221. package/dist/src/agent/workflow/lint.js +74 -0
  222. package/dist/src/agent/workflow/lint.js.map +1 -0
  223. package/dist/src/agent/workflow/meta-locale.d.ts +12 -0
  224. package/dist/src/agent/workflow/meta-locale.js +62 -0
  225. package/dist/src/agent/workflow/meta-locale.js.map +1 -0
  226. package/dist/src/agent/workflow/parser.js +7 -1
  227. package/dist/src/agent/workflow/parser.js.map +1 -1
  228. package/dist/src/agent/workflow/runtime.d.ts +4 -1
  229. package/dist/src/agent/workflow/runtime.js +88 -8
  230. package/dist/src/agent/workflow/runtime.js.map +1 -1
  231. package/dist/src/agent/workflow/snapshot.js +2 -12
  232. package/dist/src/agent/workflow/snapshot.js.map +1 -1
  233. package/dist/src/agent/workflow/step-labels.d.ts +8 -0
  234. package/dist/src/agent/workflow/step-labels.js +48 -0
  235. package/dist/src/agent/workflow/step-labels.js.map +1 -0
  236. package/dist/src/agent/workflow/subagent-runner.js +46 -1
  237. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  238. package/dist/src/agent/workflow/types.d.ts +76 -1
  239. package/dist/src/auth/credentials.d.ts +5 -0
  240. package/dist/src/auth/credentials.js +12 -3
  241. package/dist/src/auth/credentials.js.map +1 -1
  242. package/dist/src/auth/profiles/store.js +1 -1
  243. package/dist/src/auth/sync-provider-auth.js +1 -1
  244. package/dist/src/browser/cache-dir-policy.js +1 -1
  245. package/dist/src/browser/cdp-local-launcher.js +2 -2
  246. package/dist/src/browser/index.js +4 -4
  247. package/dist/src/browser/manager.d.ts +1 -3
  248. package/dist/src/browser/manager.js +0 -6
  249. package/dist/src/browser/manager.js.map +1 -1
  250. package/dist/src/browser/providers/browser-ext-install.d.ts +4 -4
  251. package/dist/src/browser/providers/browser-ext-install.js +41 -88
  252. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  253. package/dist/src/browser/providers/cloakbrowser.d.ts +0 -5
  254. package/dist/src/browser/providers/cloakbrowser.js +6 -59
  255. package/dist/src/browser/providers/cloakbrowser.js.map +1 -1
  256. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  257. package/dist/src/browser/stealth.js +1 -1
  258. package/dist/src/channels/attachments/inbound-persist.js +1 -1
  259. package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
  260. package/dist/src/channels/attachments/voice-stt-webchat.js +10 -8
  261. package/dist/src/channels/attachments/voice-stt-webchat.js.map +1 -1
  262. package/dist/src/channels/outbound/persist-store.js +1 -1
  263. package/dist/src/channels/pairing/allow-from-file.js +9 -9
  264. package/dist/src/channels/pairing/allow-from-file.js.map +1 -1
  265. package/dist/src/channels/pairing/pairing-store.js +7 -7
  266. package/dist/src/channels/pairing/pairing-store.js.map +1 -1
  267. package/dist/src/chat-commands/builtins/config.js +2 -2
  268. package/dist/src/chat-commands/builtins/session.js +1 -1
  269. package/dist/src/chat-commands/builtins/session.js.map +1 -1
  270. package/dist/src/chat-commands/builtins/tts.js +2 -2
  271. package/dist/src/chat-commands/builtins/tts.js.map +1 -1
  272. package/dist/src/chat-commands/context.d.ts +3 -0
  273. package/dist/src/chat-commands/context.js +22 -4
  274. package/dist/src/chat-commands/context.js.map +1 -1
  275. package/dist/src/chat-commands/session-key.d.ts +4 -37
  276. package/dist/src/chat-commands/session-key.js +49 -85
  277. package/dist/src/chat-commands/session-key.js.map +1 -1
  278. package/dist/src/chat-commands/types.d.ts +2 -0
  279. package/dist/src/cli/commands/agent/interactive.js +2 -2
  280. package/dist/src/cli/commands/agent/interactive.js.map +1 -1
  281. package/dist/src/cli/commands/agent/sessions.js +2 -2
  282. package/dist/src/cli/commands/agent/sessions.js.map +1 -1
  283. package/dist/src/cli/commands/agent.js +4 -5
  284. package/dist/src/cli/commands/agent.js.map +1 -1
  285. package/dist/src/cli/commands/channels.js +1 -5
  286. package/dist/src/cli/commands/channels.js.map +1 -1
  287. package/dist/src/cli/commands/config.js +1 -1
  288. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  289. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  290. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
  291. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  292. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  293. package/dist/src/cli/commands/extension-dev.js +1 -1
  294. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  295. package/dist/src/cli/commands/extension-pack.js +1 -1
  296. package/dist/src/cli/commands/gateway/lifecycle-core.js +1 -1
  297. package/dist/src/cli/commands/gateway/lifecycle-core.js.map +1 -1
  298. package/dist/src/cli/commands/gateway/logs.d.ts +9 -0
  299. package/dist/src/cli/commands/gateway/logs.js +50 -17
  300. package/dist/src/cli/commands/gateway/logs.js.map +1 -1
  301. package/dist/src/cli/commands/image.js +23 -22
  302. package/dist/src/cli/commands/image.js.map +1 -1
  303. package/dist/src/cli/commands/init.js +4 -4
  304. package/dist/src/cli/commands/onboard.js +1 -1
  305. package/dist/src/cli/commands/session/utils.js +2 -2
  306. package/dist/src/cli/commands/session/utils.js.map +1 -1
  307. package/dist/src/cli/commands/update.js +26 -46
  308. package/dist/src/cli/commands/update.js.map +1 -1
  309. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  310. package/dist/src/cli/utils/session.d.ts +0 -5
  311. package/dist/src/cli/utils/session.js +1 -6
  312. package/dist/src/cli/utils/session.js.map +1 -1
  313. package/dist/src/commands/agents.config.js +1 -1
  314. package/dist/src/commands/agents.config.js.map +1 -1
  315. package/dist/src/config/agent-profile.js +6 -28
  316. package/dist/src/config/agent-profile.js.map +1 -1
  317. package/dist/src/config/agent-typed-models.d.ts +18 -0
  318. package/dist/src/config/agent-typed-models.js +53 -0
  319. package/dist/src/config/agent-typed-models.js.map +1 -0
  320. package/dist/src/config/gateway-bind.js +1 -1
  321. package/dist/src/config/index.js +6 -6
  322. package/dist/src/config/loader.js +2 -2
  323. package/dist/src/config/model-input.js +2 -5
  324. package/dist/src/config/model-input.js.map +1 -1
  325. package/dist/src/config/models-json.js +2 -2
  326. package/dist/src/config/paths-state.js +1 -1
  327. package/dist/src/config/profile.js +2 -2
  328. package/dist/src/config/schema.d.ts +253 -217
  329. package/dist/src/config/schema.js +91 -40
  330. package/dist/src/config/schema.js.map +1 -1
  331. package/dist/src/config/voice.d.ts +3 -28
  332. package/dist/src/config/voice.js +27 -261
  333. package/dist/src/config/voice.js.map +1 -1
  334. package/dist/src/config/workspace-path-helpers.d.ts +1 -2
  335. package/dist/src/config/workspace-path-helpers.js.map +1 -1
  336. package/dist/src/config/workspace-path.js +1 -1
  337. package/dist/src/cron/executor.js +2 -2
  338. package/dist/src/cron/persistence.js +1 -1
  339. package/dist/src/cron/run-log-store.js +1 -1
  340. package/dist/src/daemon/constants.js +1 -1
  341. package/dist/src/daemon/install-plan.js +27 -3
  342. package/dist/src/daemon/install-plan.js.map +1 -1
  343. package/dist/src/daemon/launchd.d.ts +8 -0
  344. package/dist/src/daemon/launchd.js +7 -14
  345. package/dist/src/daemon/launchd.js.map +1 -1
  346. package/dist/src/daemon/schtasks.d.ts +25 -0
  347. package/dist/src/daemon/schtasks.js +168 -48
  348. package/dist/src/daemon/schtasks.js.map +1 -1
  349. package/dist/src/daemon/service.js +5 -4
  350. package/dist/src/daemon/service.js.map +1 -1
  351. package/dist/src/daemon/systemd.d.ts +6 -0
  352. package/dist/src/daemon/systemd.js +20 -5
  353. package/dist/src/daemon/systemd.js.map +1 -1
  354. package/dist/src/extensions/activation-context.js +0 -1
  355. package/dist/src/extensions/activation-context.js.map +1 -1
  356. package/dist/src/extensions/bundle-mcp.js +1 -1
  357. package/dist/src/extensions/discover-extensions.js +1 -1
  358. package/dist/src/extensions/health.js +1 -1
  359. package/dist/src/extensions/loader.js +1 -1
  360. package/dist/src/extensions/lockfile.js +2 -2
  361. package/dist/src/extensions/normalize-manifest.js +0 -1
  362. package/dist/src/extensions/normalize-manifest.js.map +1 -1
  363. package/dist/src/extensions/types/manifest.d.ts +0 -2
  364. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  365. package/dist/src/gateway/agent-builtin-tools.js +1 -0
  366. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  367. package/dist/src/gateway/agents-admin.d.ts +9 -0
  368. package/dist/src/gateway/agents-admin.js +28 -4
  369. package/dist/src/gateway/agents-admin.js.map +1 -1
  370. package/dist/src/gateway/config-tools-web.js +3 -2
  371. package/dist/src/gateway/config-tools-web.js.map +1 -1
  372. package/dist/src/gateway/file-path-classifier.js +2 -2
  373. package/dist/src/gateway/heartbeat/service.js +2 -2
  374. package/dist/src/gateway/heartbeat/service.js.map +1 -1
  375. package/dist/src/gateway/hono/app.js +1 -1
  376. package/dist/src/gateway/hono/lib/agent-model.d.ts +25 -10
  377. package/dist/src/gateway/hono/lib/agent-model.js +60 -36
  378. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  379. package/dist/src/gateway/hono/lib/config-payload.js +29 -6
  380. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  381. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  382. package/dist/src/gateway/hono/lib/mask-secret-length.d.ts +6 -0
  383. package/dist/src/gateway/hono/lib/mask-secret-length.js +16 -0
  384. package/dist/src/gateway/hono/lib/mask-secret-length.js.map +1 -0
  385. package/dist/src/gateway/hono/lib/safe-providers-config.d.ts +1 -1
  386. package/dist/src/gateway/hono/lib/safe-providers-config.js +2 -1
  387. package/dist/src/gateway/hono/lib/safe-providers-config.js.map +1 -1
  388. package/dist/src/gateway/hono/lib/safe-voice-config.js +16 -54
  389. package/dist/src/gateway/hono/lib/safe-voice-config.js.map +1 -1
  390. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  391. package/dist/src/gateway/hono/oauth.js +1 -1
  392. package/dist/src/gateway/hono/routes/agents.js +2 -2
  393. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  394. package/dist/src/gateway/hono/routes/config-patch/agents.js +25 -7
  395. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  396. package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -11
  397. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
  398. package/dist/src/gateway/hono/routes/config-patch/gateway.js +3 -2
  399. package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +1 -1
  400. package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -3
  401. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  402. package/dist/src/gateway/hono/routes/config.js +59 -0
  403. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  404. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  405. package/dist/src/gateway/hono/routes/goals.js +1 -1
  406. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  407. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  408. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  409. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  410. package/dist/src/gateway/hono/routes/models.js +75 -12
  411. package/dist/src/gateway/hono/routes/models.js.map +1 -1
  412. package/dist/src/gateway/hono/routes/sessions.js +28 -7
  413. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  414. package/dist/src/gateway/hono/routes/shares.js +15 -13
  415. package/dist/src/gateway/hono/routes/shares.js.map +1 -1
  416. package/dist/src/gateway/hono/routes/tunnel.js +1 -1
  417. package/dist/src/gateway/hono/routes/update.js +4 -2
  418. package/dist/src/gateway/hono/routes/update.js.map +1 -1
  419. package/dist/src/gateway/hono/routes/voice.js +75 -0
  420. package/dist/src/gateway/hono/routes/voice.js.map +1 -1
  421. package/dist/src/gateway/hono/routes/workflows.d.ts +3 -0
  422. package/dist/src/gateway/hono/routes/workflows.js +347 -0
  423. package/dist/src/gateway/hono/routes/workflows.js.map +1 -0
  424. package/dist/src/gateway/hono/routes/workspace.js +4 -4
  425. package/dist/src/gateway/hono/sse.js +16 -33
  426. package/dist/src/gateway/hono/sse.js.map +1 -1
  427. package/dist/src/gateway/lock.js +11 -11
  428. package/dist/src/gateway/lock.js.map +1 -1
  429. package/dist/src/gateway/ports.js +6 -6
  430. package/dist/src/gateway/ports.js.map +1 -1
  431. package/dist/src/gateway/resolve-webchat-session-key.d.ts +19 -0
  432. package/dist/src/gateway/resolve-webchat-session-key.js +46 -0
  433. package/dist/src/gateway/resolve-webchat-session-key.js.map +1 -0
  434. package/dist/src/gateway/service/agent-runner.js +2 -2
  435. package/dist/src/gateway/service/marketplace-service.js +2 -2
  436. package/dist/src/gateway/service/run-gateway-agent.js +9 -11
  437. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  438. package/dist/src/gateway/service/sessions-api.d.ts +3 -0
  439. package/dist/src/gateway/service/sessions-api.js +8 -0
  440. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  441. package/dist/src/gateway/service.d.ts +3 -2
  442. package/dist/src/gateway/service.js +9 -8
  443. package/dist/src/gateway/service.js.map +1 -1
  444. package/dist/src/gateway/session-reset-service.d.ts +20 -0
  445. package/dist/src/gateway/session-reset-service.js +54 -0
  446. package/dist/src/gateway/session-reset-service.js.map +1 -0
  447. package/dist/src/gateway/startup-readiness.d.ts +1 -1
  448. package/dist/src/gateway/startup-readiness.js +1 -0
  449. package/dist/src/gateway/startup-readiness.js.map +1 -1
  450. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  451. package/dist/src/heartbeat/index.js +1 -1
  452. package/dist/src/infra/gateway-processes.js +2 -2
  453. package/dist/src/infra/gateway-processes.js.map +1 -1
  454. package/dist/src/infra/restart.js +2 -2
  455. package/dist/src/infra/run-command.d.ts +16 -0
  456. package/dist/src/infra/run-command.js +67 -0
  457. package/dist/src/infra/run-command.js.map +1 -0
  458. package/dist/src/infra/update-check.js +1 -1
  459. package/dist/src/infra/update-global.d.ts +45 -0
  460. package/dist/src/infra/update-global.js +224 -0
  461. package/dist/src/infra/update-global.js.map +1 -0
  462. package/dist/src/infra/update-lock.js +3 -3
  463. package/dist/src/infra/update-runner.js +1 -1
  464. package/dist/src/infra/update-startup.js +2 -2
  465. package/dist/src/infra/write-file-atomic.js +2 -2
  466. package/dist/src/mcp/channel-shared.js +2 -1
  467. package/dist/src/mcp/channel-shared.js.map +1 -1
  468. package/dist/src/providers/auth-runtime/auth-profile-store.js +2 -2
  469. package/dist/src/providers/auth-runtime/auth-profile-store.js.map +1 -1
  470. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -12
  471. package/dist/src/providers/auth-runtime/resolve-auth.js.map +1 -1
  472. package/dist/src/providers/auth-runtime/types.d.ts +6 -12
  473. package/dist/src/providers/index.js +2 -2
  474. package/dist/src/providers/model-registry.js +1 -1
  475. package/dist/src/routing/agent-session-key.d.ts +58 -0
  476. package/dist/src/routing/agent-session-key.js +164 -0
  477. package/dist/src/routing/agent-session-key.js.map +1 -0
  478. package/dist/src/routing/index.d.ts +1 -1
  479. package/dist/src/routing/index.js +4 -2
  480. package/dist/src/routing/index.js.map +1 -1
  481. package/dist/src/routing/resolve-route.d.ts +15 -0
  482. package/dist/src/routing/resolve-route.js +41 -20
  483. package/dist/src/routing/resolve-route.js.map +1 -1
  484. package/dist/src/routing/resolve-tui-session-key.d.ts +25 -0
  485. package/dist/src/routing/resolve-tui-session-key.js +54 -0
  486. package/dist/src/routing/resolve-tui-session-key.js.map +1 -0
  487. package/dist/src/routing/session-key-utils.d.ts +24 -0
  488. package/dist/src/routing/session-key-utils.js +92 -0
  489. package/dist/src/routing/session-key-utils.js.map +1 -0
  490. package/dist/src/routing/session-key.d.ts +19 -49
  491. package/dist/src/routing/session-key.js +143 -116
  492. package/dist/src/routing/session-key.js.map +1 -1
  493. package/dist/src/session/config-store.js +2 -2
  494. package/dist/src/session/index.d.ts +6 -0
  495. package/dist/src/session/index.js +7 -1
  496. package/dist/src/session/init-session-turn.d.ts +30 -0
  497. package/dist/src/session/init-session-turn.js +102 -0
  498. package/dist/src/session/init-session-turn.js.map +1 -0
  499. package/dist/src/session/lifecycle-timestamps.d.ts +8 -0
  500. package/dist/src/session/lifecycle-timestamps.js +16 -0
  501. package/dist/src/session/lifecycle-timestamps.js.map +1 -0
  502. package/dist/src/session/manager.d.ts +7 -1
  503. package/dist/src/session/manager.js +8 -1
  504. package/dist/src/session/manager.js.map +1 -1
  505. package/dist/src/session/parity/jsonl-transcript-io.js +2 -2
  506. package/dist/src/session/parity/sessions-json-file.js +1 -1
  507. package/dist/src/session/parity/transcript-file-lock.js +2 -2
  508. package/dist/src/session/parity/transcript-paths.js +2 -2
  509. package/dist/src/session/parity/transcript-paths.js.map +1 -1
  510. package/dist/src/session/parity/xopc-session-disk-entry.d.ts +6 -0
  511. package/dist/src/session/reset-policy.d.ts +32 -0
  512. package/dist/src/session/reset-policy.js +65 -0
  513. package/dist/src/session/reset-policy.js.map +1 -0
  514. package/dist/src/session/reset-triggers.d.ts +20 -0
  515. package/dist/src/session/reset-triggers.js +63 -0
  516. package/dist/src/session/reset-triggers.js.map +1 -0
  517. package/dist/src/session/reset-type.d.ts +12 -0
  518. package/dist/src/session/reset-type.js +25 -0
  519. package/dist/src/session/reset-type.js.map +1 -0
  520. package/dist/src/session/resolve-session.d.ts +30 -0
  521. package/dist/src/session/resolve-session.js +93 -0
  522. package/dist/src/session/resolve-session.js.map +1 -0
  523. package/dist/src/session/search-index-cache.js +1 -1
  524. package/dist/src/session/search-index.js +1 -1
  525. package/dist/src/session/session-title.js +3 -2
  526. package/dist/src/session/session-title.js.map +1 -1
  527. package/dist/src/session/store.d.ts +11 -4
  528. package/dist/src/session/store.js +62 -11
  529. package/dist/src/session/store.js.map +1 -1
  530. package/dist/src/session/transcript-events.js +2 -1
  531. package/dist/src/session/transcript-events.js.map +1 -1
  532. package/dist/src/share/share-auto.js +2 -2
  533. package/dist/src/share/share-store.js +3 -3
  534. package/dist/src/share/share-thumbnail.js +2 -2
  535. package/dist/src/share/share-url.d.ts +33 -0
  536. package/dist/src/share/share-url.js +56 -14
  537. package/dist/src/share/share-url.js.map +1 -1
  538. package/dist/src/share/share-zip.js +1 -1
  539. package/dist/src/share/site-share-store.js +3 -3
  540. package/dist/src/share/site-static-serve.js +1 -1
  541. package/dist/src/tui/backends/embedded-backend.js +4 -9
  542. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  543. package/dist/src/tui/backends/gateway-sse-backend.js +1 -1
  544. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  545. package/dist/src/tui/clipboard-image.js +3 -3
  546. package/dist/src/tui/components/chat-log.js +3 -3
  547. package/dist/src/tui/components/chat-log.js.map +1 -1
  548. package/dist/src/tui/theme-manager.js +1 -1
  549. package/dist/src/tui/theme.d.ts +0 -2
  550. package/dist/src/tui/theme.js +1 -3
  551. package/dist/src/tui/theme.js.map +1 -1
  552. package/dist/src/tui/tui-agent-events.js +2 -1
  553. package/dist/src/tui/tui-agent-events.js.map +1 -1
  554. package/dist/src/tui/tui-commands.d.ts +3 -0
  555. package/dist/src/tui/tui-commands.js +45 -10
  556. package/dist/src/tui/tui-commands.js.map +1 -1
  557. package/dist/src/tui/tui-keybindings-file.js +2 -22
  558. package/dist/src/tui/tui-keybindings-file.js.map +1 -1
  559. package/dist/src/tui/tui-scoped-models.js +2 -2
  560. package/dist/src/tui/tui-session-actions.d.ts +28 -0
  561. package/dist/src/tui/tui-session-actions.js +88 -0
  562. package/dist/src/tui/tui-session-actions.js.map +1 -0
  563. package/dist/src/tui/tui-settings.js +1 -1
  564. package/dist/src/tui/tui.js +54 -49
  565. package/dist/src/tui/tui.js.map +1 -1
  566. package/dist/src/tunnel/frpc-binary.js +3 -3
  567. package/dist/src/tunnel/frpc-config.js +1 -1
  568. package/dist/src/tunnel/frpc-extract.js +1 -1
  569. package/dist/src/tunnel/tunnel-state.js +1 -1
  570. package/dist/src/utils/logger/audit.js +1 -1
  571. package/dist/src/utils/logger/log-store.js +1 -1
  572. package/dist/src/utils/logger/rotation.js +1 -1
  573. package/dist/src/utils/string-coerce.d.ts +2 -0
  574. package/dist/src/utils/string-coerce.js +10 -1
  575. package/dist/src/utils/string-coerce.js.map +1 -1
  576. package/dist/src/voice/metadata/builtin.d.ts +2 -0
  577. package/dist/src/voice/metadata/builtin.js +420 -0
  578. package/dist/src/voice/metadata/builtin.js.map +1 -0
  579. package/dist/src/voice/metadata/index.d.ts +4 -0
  580. package/dist/src/voice/metadata/index.js +3 -0
  581. package/dist/src/voice/metadata/registry.d.ts +5 -0
  582. package/dist/src/voice/metadata/registry.js +34 -0
  583. package/dist/src/voice/metadata/registry.js.map +1 -0
  584. package/dist/src/voice/metadata/types.d.ts +41 -0
  585. package/dist/src/voice/metadata/types.js +1 -0
  586. package/dist/src/voice/stt/config-slice.d.ts +2 -5
  587. package/dist/src/voice/stt/config-slice.js +5 -26
  588. package/dist/src/voice/stt/config-slice.js.map +1 -1
  589. package/dist/src/voice/stt/list-providers.d.ts +3 -3
  590. package/dist/src/voice/stt/list-providers.js +41 -6
  591. package/dist/src/voice/stt/list-providers.js.map +1 -1
  592. package/dist/src/voice/stt/types.d.ts +1 -18
  593. package/dist/src/voice/stt/types.js +4 -2
  594. package/dist/src/voice/stt/types.js.map +1 -1
  595. package/dist/src/voice/tts/audio.js +1 -1
  596. package/dist/src/voice/tts/config-slice.d.ts +3 -7
  597. package/dist/src/voice/tts/config-slice.js +7 -38
  598. package/dist/src/voice/tts/config-slice.js.map +1 -1
  599. package/dist/src/voice/tts/list-providers.d.ts +3 -3
  600. package/dist/src/voice/tts/list-providers.js +41 -6
  601. package/dist/src/voice/tts/list-providers.js.map +1 -1
  602. package/dist/src/voice/tts/merge-config.js +2 -48
  603. package/dist/src/voice/tts/merge-config.js.map +1 -1
  604. package/dist/src/voice/tts/providers/alibaba-speech.js +1 -1
  605. package/dist/src/voice/tts/providers/alibaba-speech.js.map +1 -1
  606. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  607. package/dist/src/voice/tts/types.d.ts +1 -29
  608. package/dist/src/voice/tts/types.js +19 -17
  609. package/dist/src/voice/tts/types.js.map +1 -1
  610. package/dist/src/workflows/domain/command.d.ts +18 -0
  611. package/dist/src/workflows/domain/command.js +1 -0
  612. package/dist/src/workflows/domain/definition.d.ts +62 -0
  613. package/dist/src/workflows/domain/definition.js +1 -0
  614. package/dist/src/workflows/domain/event.d.ts +67 -0
  615. package/dist/src/workflows/domain/event.js +1 -0
  616. package/dist/src/workflows/domain/index.d.ts +5 -0
  617. package/dist/src/workflows/domain/index.js +2 -0
  618. package/dist/src/workflows/domain/result.d.ts +65 -0
  619. package/dist/src/workflows/domain/result.js +1 -0
  620. package/dist/src/workflows/domain/run.d.ts +120 -0
  621. package/dist/src/workflows/domain/run.js +14 -0
  622. package/dist/src/workflows/domain/run.js.map +1 -0
  623. package/dist/src/workflows/engine/index.d.ts +2 -0
  624. package/dist/src/workflows/engine/index.js +3 -0
  625. package/dist/src/workflows/engine/projector.d.ts +3 -0
  626. package/dist/src/workflows/engine/projector.js +205 -0
  627. package/dist/src/workflows/engine/projector.js.map +1 -0
  628. package/dist/src/workflows/engine/workflow-engine.d.ts +31 -0
  629. package/dist/src/workflows/engine/workflow-engine.js +188 -0
  630. package/dist/src/workflows/engine/workflow-engine.js.map +1 -0
  631. package/dist/src/workflows/index.d.ts +6 -0
  632. package/dist/src/workflows/index.js +11 -0
  633. package/dist/src/workflows/runtime/index.d.ts +1 -0
  634. package/dist/src/workflows/runtime/index.js +4 -0
  635. package/dist/src/workflows/runtime/script-runtime.d.ts +3 -0
  636. package/dist/src/workflows/runtime/script-runtime.js +3 -0
  637. package/dist/src/workflows/store/event-store.d.ts +17 -0
  638. package/dist/src/workflows/store/event-store.js +83 -0
  639. package/dist/src/workflows/store/event-store.js.map +1 -0
  640. package/dist/src/workflows/store/paths.d.ts +7 -0
  641. package/dist/src/workflows/store/paths.js +26 -0
  642. package/dist/src/workflows/store/paths.js.map +1 -0
  643. package/dist/src/workflows/store/run-store.d.ts +13 -0
  644. package/dist/src/workflows/store/run-store.js +68 -0
  645. package/dist/src/workflows/store/run-store.js.map +1 -0
  646. package/package.json +5 -8
  647. package/dist/gateway/static/root/assets/agents-mS3_HpRI.js +0 -222
  648. package/dist/gateway/static/root/assets/channels-settings-BG6b9KrW.js +0 -1
  649. package/dist/gateway/static/root/assets/extension-settings-page-B-W4x2xP.js +0 -1
  650. package/dist/gateway/static/root/assets/index-ew_2L2We.css +0 -1
  651. package/dist/gateway/static/root/assets/sessions-page-FaG_Vlkb.js +0 -1
  652. package/dist/gateway/static/root/assets/settings-page-Bet1OerL.js +0 -3
  653. package/dist/gateway/static/root/assets/skills-page-DhUO235y.js +0 -2
  654. package/dist/gateway/static/root/assets/url-BwNL6Rgk.js +0 -3
  655. package/dist/gateway/static/root/assets/voice-api-key-field-CGEydndO.js +0 -1
  656. package/dist/src/agent/tools/browser-legacy-tools.d.ts +0 -17
  657. package/dist/src/agent/tools/browser-legacy-tools.js +0 -766
  658. package/dist/src/agent/tools/browser-legacy-tools.js.map +0 -1
@@ -1 +1 @@
1
- import{$n as e,Zn as t,er as n,nr as r}from"./index-BmVYculr.js";function i(){return r(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,n,`dark:border-edge`)}function a(){return r(e,t)}function o(e){return e.split(/[,\n]/).flatMap(e=>{let t=e.trim();return t?[/^-?\d+$/.test(t)?Number(t):t]:[]})}function s(e){return e.map(String).join(`, `)}function c(e){let t=e.accounts?.default?.botToken;return typeof t==`string`?t:``}function l(e){return Object.values(e.accounts??{}).some(e=>typeof e.botToken==`string`&&e.botToken.trim().length>0)}function u(e){return Object.keys(e.accounts??{}).length>0||e.allowFrom.length>0}function d(e){return!!(e.appId?.trim()&&e.appSecret?.trim())||Object.keys(e.accounts??{}).length>0}export{u as a,c,l as i,a as n,s as o,d as r,o as s,i as t};
1
+ import{dr as e,fr as t,lr as n,mr as r}from"./index-qNrVJp-y.js";function i(){return r(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,t,`dark:border-edge`)}function a(){return r(e,n)}function o(e){return e.split(/[,\n]/).flatMap(e=>{let t=e.trim();return t?[/^-?\d+$/.test(t)?Number(t):t]:[]})}function s(e){return e.map(String).join(`, `)}function c(e){let t=e.accounts?.default?.botToken;return typeof t==`string`?t:``}function l(e){return Object.values(e.accounts??{}).some(e=>typeof e.botToken==`string`&&e.botToken.trim().length>0)}function u(e){return Object.keys(e.accounts??{}).length>0||e.allowFrom.length>0}function d(e){return!!(e.appId?.trim()&&e.appSecret?.trim())||Object.keys(e.accounts??{}).length>0}export{u as a,c,l as i,a as n,s as o,d as r,o as s,i as t};
@@ -0,0 +1 @@
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"./url-D6jvVYIA.js";import{o as a}from"./vendor-swr-BIWyz7Rc.js";import{a as o,n as s}from"./fetch-BaFNUtkE.js";import{I as c,Jr as l,L as u,Li as d,O as f,Sn as p,er as m,fr as h,ga as g,hi as _,ia as v,mr as y,pr as b,xn as x}from"./index-qNrVJp-y.js";var S=`/api/image/providers`;async function ee(){return(await s(i(`/api/image/providers`)))?.payload?.providers??[]}var C=e(t(),1),te=n();function w(){return{apiKey:``,region:``,baseUrl:``,imageBaseUrl:``}}function ne(e){return e?.apiKey?`••••••••••••`:``}function T(e,t){let n=(()=>{if(!e||typeof e!=`object`||!(`providersConfig`in e))return;let t=e.providersConfig;if(!(!t||typeof t!=`object`||Array.isArray(t)))return t})(),r={};for(let e of t){let t=n?.[e];r[e]={apiKey:ne(t),region:t?.region??``,baseUrl:t?.baseUrl??``,imageBaseUrl:t?.imageBaseUrl??``}}return r}function E(e,t,n){let r=e[n].trim();if(r!==t[n].trim())return r||null}function D(e,t){let n=e.trim(),r=t.trim();if(n!==r&&!(f(n)&&f(r)))return n||(r?null:void 0)}function O(e,t,n){let r={};for(let i of e){let e=t[i]??w(),a=n[i]??w();if(JSON.stringify(e)===JSON.stringify(a))continue;let o={},s=D(e.apiKey,a.apiKey);s!==void 0&&(o.apiKey=s);let c=E(e,a,`region`);c!==void 0&&(o.region=c);let l=E(e,a,`baseUrl`);l!==void 0&&(o.baseUrl=l);let u=E(e,a,`imageBaseUrl`);u!==void 0&&(o.imageBaseUrl=u),Object.keys(o).length>0&&(r[i]=o)}return r}async function k(e){let t=await s(i(`/api/image/providers/${encodeURIComponent(e)}/reveal-api-key`),{method:`POST`,headers:{"Content-Type":`application/json`},body:`{}`});if(!t.ok||!t.payload)throw Error(t.error?.message??`Reveal failed`);return t.payload}async function A(e){Object.keys(e).length!==0&&(await s(i(`/api/config`),{method:`PATCH`,body:JSON.stringify({providersConfig:e})}),await x())}var j=r();function re(e){let t=(0,te.c)(18),{providerId:n,value:r,onChange:i,labels:a,apiKeyLinks:o,apiKeyLinkLabels:s}=e,c;t[0]===n?c=t[1]:(c=()=>k(n).then(M),t[0]=n,t[1]=c);let l=c,f=`img-cred-key-${n}`,p;t[2]!==a.apiKeyLabel||t[3]!==f?(p=(0,j.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:f,children:a.apiKeyLabel}),t[2]=a.apiKeyLabel,t[3]=f,t[4]=p):p=t[4];let h;t[5]!==s||t[6]!==o?(h=o.length>0?(0,j.jsx)(`div`,{className:`flex flex-col gap-1`,children:o.map(e=>(0,j.jsxs)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex w-fit items-center gap-1 text-xs font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:[u(e.kind,s),(0,j.jsx)(d,{className:`size-3`,"aria-hidden":!0})]},`${e.kind}-${e.href}`))}):null,t[5]=s,t[6]=o,t[7]=h):h=t[7];let g=`img-cred-key-${n}`,_;t[8]!==a||t[9]!==i||t[10]!==l||t[11]!==g||t[12]!==r?(_=(0,j.jsx)(m,{id:g,value:r,onChange:i,placeholder:a.optionalPlaceholder,labels:a,reveal:l,loadFailedLabel:a.loadFailed,maskedHelp:a.maskedHelp,notInConfigFile:a.notInConfigFile}),t[8]=a,t[9]=i,t[10]=l,t[11]=g,t[12]=r,t[13]=_):_=t[13];let v;return t[14]!==p||t[15]!==h||t[16]!==_?(v=(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[p,h,_]}),t[14]=p,t[15]=h,t[16]=_,t[17]=v):v=t[17],v}function M(e){return e.apiKey??null}function N(){return y(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,h)}function ie(){return y(N(),`appearance-none bg-[length:1rem] bg-[right_0.5rem_center] bg-no-repeat pr-9`)}var P=`__custom__`;function ae(e,t){if(!e.region.trim()&&!e.imageBaseUrl.trim())return``;let n=e.region.trim().toLowerCase();return t.some(e=>e.value===n)?n:P}function oe(e,t){let n=e.baseUrl.trim().replace(/\/+$/,``);if(!n)return``;let r=t.map(e=>e.value.replace(/\/+$/,``)).indexOf(n);return r>=0?t[r].value:P}function se(e,t,n){return t===`beijing`?e.dashscopeRegion_beijing:t===`singapore`?e.dashscopeRegion_singapore:t===`us`?e.dashscopeRegion_us:n}function ce(e,t){return t===`minimax`?e.minimaxClusterLabel:t===`fal`?e.falQueueBaseLabel:e.baseUrlLabel}function le(e,t){return t===`minimax`?e.minimaxClusterHint:t===`fal`?e.falQueueBaseHint:null}function ue(e,t){return JSON.stringify(e)!==JSON.stringify(t)}function de(e,t){return t===1?e.modelCountOne:e.modelCountMany.replace(`{count}`,String(t))}function fe(e){let t=(0,te.c)(76),{summaries:n,credDraft:r,credBaseline:i,credDirty:a,credSaving:o,credError:s,credSavedFlash:u,credNoopFlash:f,updateCredRow:p,onDiscardCredentials:m,onSaveCredentials:h,extensionIds:x,showExtensionLinks:S,showImageModelsLink:ee,hideActions:ne,language:T,apiKeyLinkLabels:E,messages:D}=e,O=ne===void 0?!1:ne,k;t[0]===n?k=t[1]:(k=n.some(_e),t[0]=n,t[1]=k);let A=k,M;t[2]===n?M=t[3]:(M=n.some(ge),t[2]=n,t[3]=M);let fe=M,[F,ve]=(0,C.useState)(he),[I,L]=(0,C.useState)(me),R;if(t[4]!==i||t[5]!==r||t[6]!==n){R=new Set;for(let e of n)ue(r[e.id]??w(),i[e.id]??w())&&R.add(e.id);t[4]=i,t[5]=r,t[6]=n,t[7]=R}else R=t[7];let z=R,B;t[8]!==z||t[9]!==I||t[10]!==F?(B=e=>I.has(e)?!1:F.has(e)?!0:z.has(e),t[8]=z,t[9]=I,t[10]=F,t[11]=B):B=t[11];let V=B,H;t[12]===V?H=t[13]:(H=e=>{if(V(e)){L(t=>new Set(t).add(e)),ve(t=>{let n=new Set(t);return n.delete(e),n});return}L(t=>{let n=new Set(t);return n.delete(e),n}),ve(t=>new Set(t).add(e))},t[12]=V,t[13]=H);let U=H;if(n.length===0)return null;let W;t[14]===D.credentialsIntro?W=t[15]:(W=(0,j.jsx)(`p`,{children:D.credentialsIntro}),t[14]=D.credentialsIntro,t[15]=W);let G;t[16]!==A||t[17]!==D.regionHint?(G=A?(0,j.jsx)(`p`,{className:`text-fg-subtle`,children:D.regionHint}):null,t[16]=A,t[17]=D.regionHint,t[18]=G):G=t[18];let K;t[19]!==fe||t[20]!==D.endpointPresetsHint?(K=fe?(0,j.jsx)(`p`,{className:`text-fg-subtle`,children:D.endpointPresetsHint}):null,t[19]=fe,t[20]=D.endpointPresetsHint,t[21]=K):K=t[21];let q;t[22]!==ee||t[23]!==D.imageModelsLinkTitle||t[24]!==D.openImageModelsPage?(q=ee?(0,j.jsx)(`p`,{children:(0,j.jsx)(g,{to:`/settings/credentials?tab=image-models`,className:`font-medium text-accent hover:underline`,title:D.imageModelsLinkTitle,children:D.openImageModelsPage})}):null,t[22]=ee,t[23]=D.imageModelsLinkTitle,t[24]=D.openImageModelsPage,t[25]=q):q=t[25];let J;t[26]!==W||t[27]!==G||t[28]!==K||t[29]!==q?(J=(0,j.jsxs)(`div`,{className:`flex flex-col gap-1 text-xs leading-relaxed text-fg-muted`,children:[W,G,K,q]}),t[26]=W,t[27]=G,t[28]=K,t[29]=q,t[30]=J):J=t[30];let Y;t[31]===s?Y=t[32]:(Y=s?(0,j.jsx)(`div`,{className:`rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-sm text-red-700 dark:text-red-300`,children:s}):null,t[31]=s,t[32]=Y);let X;t[33]!==a||t[34]!==f||t[35]!==u||t[36]!==o||t[37]!==O||t[38]!==m||t[39]!==h||t[40]!==D.credentialsNothingToSave||t[41]!==D.credentialsSaved||t[42]!==D.discardCredentials||t[43]!==D.saveCredentials||t[44]!==D.savingCredentials?(X=O?null:(0,j.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[u?(0,j.jsx)(`span`,{className:`text-sm text-fg-muted`,children:D.credentialsSaved}):null,f?(0,j.jsx)(`span`,{className:`text-sm text-fg-muted`,children:D.credentialsNothingToSave}):null,(0,j.jsx)(b,{type:`button`,variant:`secondary`,onClick:m,disabled:!a||o,children:D.discardCredentials}),(0,j.jsx)(b,{type:`button`,variant:`primary`,onClick:h,disabled:!a||o,children:o?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(_,{className:`size-3.5 animate-spin`}),(0,j.jsx)(`span`,{className:`ml-1.5`,children:D.savingCredentials})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(l,{className:`size-3.5`}),(0,j.jsx)(`span`,{className:`ml-1.5`,children:D.saveCredentials})]})})]}),t[33]=a,t[34]=f,t[35]=u,t[36]=o,t[37]=O,t[38]=m,t[39]=h,t[40]=D.credentialsNothingToSave,t[41]=D.credentialsSaved,t[42]=D.discardCredentials,t[43]=D.saveCredentials,t[44]=D.savingCredentials,t[45]=X):X=t[45];let Z;if(t[46]!==E||t[47]!==i||t[48]!==r||t[49]!==x||t[50]!==V||t[51]!==T||t[52]!==S||t[53]!==n||t[54]!==D||t[55]!==U||t[56]!==p){let e;t[58]!==E||t[59]!==i||t[60]!==r||t[61]!==x||t[62]!==V||t[63]!==T||t[64]!==S||t[65]!==D||t[66]!==U||t[67]!==p?(e=e=>{let t=r[e.id]??w(),n=e.ui,a=S&&x.has(e.id)?`/settings/ext/${encodeURIComponent(e.id)}`:null,o=ue(t,i[e.id]??w()),s=V(e.id),l=e.label??e.id,u=de(D,e.models.length);return(0,j.jsxs)(`section`,{className:y(`overflow-hidden rounded-xl border bg-surface-panel shadow-sm transition-colors dark:shadow-none`,o?`border-accent/50`:`border-edge`),children:[(0,j.jsxs)(`button`,{type:`button`,className:`flex w-full items-start justify-between gap-3 px-4 py-3 text-left hover:bg-surface-hover/70`,"aria-expanded":s,"aria-controls":`img-provider-credentials-${e.id}`,onClick:()=>U(e.id),children:[(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,j.jsx)(`span`,{className:`truncate text-sm font-semibold text-fg`,children:l}),(0,j.jsx)(`span`,{className:`rounded-full bg-surface-subtle px-2 py-0.5 text-[11px] font-medium text-fg-muted`,children:e.id}),o?(0,j.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:D.unsavedChanges}):null,e.configured?(0,j.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:D.configured}):(0,j.jsx)(`span`,{className:`rounded-full border border-amber-500/40 bg-amber-500/10 px-2 py-0.5 text-[11px] font-medium text-amber-700 dark:text-amber-300`,children:D.missingKey})]}),(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-subtle`,children:[(0,j.jsx)(`span`,{children:u}),e.defaultModel?(0,j.jsxs)(`span`,{className:`min-w-0 truncate`,children:[(0,j.jsxs)(`span`,{className:`text-fg-muted`,children:[D.defaultModel,`:`]}),` `,e.id,`/`,e.defaultModel]}):null]})]}),(0,j.jsx)(v,{className:y(`mt-0.5 size-4 shrink-0 text-fg-subtle transition-transform`,s?`rotate-180`:`rotate-0`),"aria-hidden":`true`}),(0,j.jsx)(`span`,{className:`sr-only`,children:s?D.collapseProvider:D.expandProvider})]}),s?(0,j.jsxs)(`div`,{id:`img-provider-credentials-${e.id}`,className:`border-t border-edge px-4 py-4`,children:[a?(0,j.jsxs)(g,{to:a,className:`mb-3 inline-flex items-center gap-1 text-xs font-medium text-accent hover:underline`,title:D.extensionSettingsLinkTitle,children:[(0,j.jsx)(d,{className:`size-3`}),D.openExtensionSettings]}):null,e.models.length>0?(0,j.jsxs)(`p`,{className:`mb-3 text-xs leading-relaxed text-fg-subtle`,children:[(0,j.jsxs)(`span`,{className:`text-fg-muted`,children:[D.modelsLabel,`:`]}),` `,e.models.map(t=>`${e.id}/${t}`).join(`, `)]}):null,(0,j.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,j.jsx)(re,{providerId:e.id,value:t.apiKey,onChange:t=>p(e.id,{apiKey:t}),apiKeyLinks:c(e.id,T),apiKeyLinkLabels:E,labels:{apiKeyLabel:D.apiKeyLabel,optionalPlaceholder:D.optionalPlaceholder,maskedHelp:D.apiKeyMaskedHelp,copy:D.apiKeyCopy,copied:D.apiKeyCopied,show:D.apiKeyShow,hide:D.apiKeyHide,notInConfigFile:D.apiKeyNotInConfigFile,loadFailed:D.apiKeyRevealFailed}}),n?.regions?.length?(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,j.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-region-preset-${e.id}`,children:D.regionLabel}),(0,j.jsxs)(`select`,{id:`img-cred-region-preset-${e.id}`,className:ie(),value:ae(t,n.regions),onChange:t=>{let r=t.target.value;if(r===``){p(e.id,{region:``,imageBaseUrl:``});return}if(r===P){p(e.id,{region:``,imageBaseUrl:``});return}let i=n.regions.find(e=>e.value===r);i&&p(e.id,{region:i.value,imageBaseUrl:i.imageBaseUrl})},children:[(0,j.jsx)(`option`,{value:``,children:D.regionPresetDefault}),n.regions.map(e=>(0,j.jsx)(`option`,{value:e.value,children:se(D,e.value,e.label)},e.value)),(0,j.jsx)(`option`,{value:P,children:D.regionPresetCustom})]}),ae(t,n.regions)===P?(0,j.jsxs)(`div`,{className:`mt-2 grid gap-2 sm:grid-cols-2`,children:[(0,j.jsx)(`input`,{type:`text`,className:N(),value:t.region,placeholder:`region`,onChange:t=>p(e.id,{region:t.target.value})}),(0,j.jsx)(`input`,{type:`url`,className:N(),value:t.imageBaseUrl,placeholder:D.imageBaseUrlLabel,onChange:t=>p(e.id,{imageBaseUrl:t.target.value})})]}):null]}):null,n?.baseUrlPresets?.length?(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,j.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-base-preset-${e.id}`,children:ce(D,n.baseUrlPresetKind)}),le(D,n.baseUrlPresetKind)?(0,j.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:le(D,n.baseUrlPresetKind)}):null,(0,j.jsxs)(`select`,{id:`img-cred-base-preset-${e.id}`,className:ie(),value:oe(t,n.baseUrlPresets),onChange:t=>{let n=t.target.value;if(n===``){p(e.id,{baseUrl:``});return}if(n===P){p(e.id,{baseUrl:``});return}p(e.id,{baseUrl:n.replace(/\/+$/,``)})},children:[(0,j.jsx)(`option`,{value:``,children:D.baseUrlPresetDefault}),n.baseUrlPresets.map(pe),(0,j.jsx)(`option`,{value:P,children:D.baseUrlPresetCustom})]}),oe(t,n.baseUrlPresets)===P?(0,j.jsx)(`input`,{type:`url`,className:y(N(),`mt-2`),value:t.baseUrl,placeholder:`https://…`,onChange:t=>p(e.id,{baseUrl:t.target.value})}):null]}):null,n?.regions?.length&&ae(t,n.regions)!==P?(0,j.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,j.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-imgbase-ro-${e.id}`,children:D.imageBaseUrlLabel}),(0,j.jsx)(`input`,{id:`img-cred-imgbase-ro-${e.id}`,type:`url`,readOnly:!0,className:y(N(),`cursor-not-allowed opacity-90`),value:t.imageBaseUrl,title:D.imageBaseUrlPresetHint}),(0,j.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:D.imageBaseUrlPresetHint})]}):null]})]}):null]},e.id)},t[58]=E,t[59]=i,t[60]=r,t[61]=x,t[62]=V,t[63]=T,t[64]=S,t[65]=D,t[66]=U,t[67]=p,t[68]=e):e=t[68],Z=n.map(e),t[46]=E,t[47]=i,t[48]=r,t[49]=x,t[50]=V,t[51]=T,t[52]=S,t[53]=n,t[54]=D,t[55]=U,t[56]=p,t[57]=Z}else Z=t[57];let Q;t[69]===Z?Q=t[70]:(Q=(0,j.jsx)(`div`,{className:`flex flex-col gap-4`,children:Z}),t[69]=Z,t[70]=Q);let $;return t[71]!==J||t[72]!==Y||t[73]!==X||t[74]!==Q?($=(0,j.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[J,Y,X,Q]}),t[71]=J,t[72]=Y,t[73]=X,t[74]=Q,t[75]=$):$=t[75],$}function pe(e){return(0,j.jsx)(`option`,{value:e.value,children:e.label},e.value)}function me(){return new Set}function he(){return new Set}function ge(e){return(e.ui?.baseUrlPresets?.length??0)>0}function _e(e){return(e.ui?.regions?.length??0)>0}function F(e){let t=p(o(e=>!!e.token)),n=t.data,r=(0,C.useMemo)(()=>e.map(e=>e.id),[e]),s=(0,C.useRef)(!1),[c,l]=(0,C.useState)(null),[u,d]=(0,C.useState)(!1),[f,m]=(0,C.useState)(null),[h,g]=(0,C.useState)(!1),[_,v]=(0,C.useState)(!1),y=(0,C.useMemo)(()=>T(n?.payload?.config,r),[n?.payload?.config,r]),b=c??y,x=y;return{gwSwr:t,credDraft:b,credBaseline:x,credDirty:(0,C.useMemo)(()=>JSON.stringify(b)!==JSON.stringify(x),[b,x]),credSaving:u,credError:f,credSavedFlash:h,credNoopFlash:_,updateCredRow:(0,C.useCallback)((e,t)=>{s.current=!0,l(n=>{let r=n??y,i=r[e]??w();return{...r,[e]:{...i,...t}}})},[y]),onDiscardCredentials:(0,C.useCallback)(()=>{s.current=!1,l(null),m(null),g(!1),v(!1)},[]),saveCredentials:(0,C.useCallback)(async e=>{let n=O(r,b,x);if(Object.keys(n).length===0){v(!0),window.setTimeout(()=>v(!1),2200);return}d(!0),m(null),g(!1);try{await A(n),await t.mutate?.(),a(i(S)),s.current=!1,l(null),g(!0),window.setTimeout(()=>g(!1),2e3)}catch(t){m(t instanceof Error?t.message:e)}finally{d(!1)}},[r,b,x,t])}}function ve(){return{enabled:!1,provider:`alibaba`,alibaba:{model:`paraformer-v2`},openai:{model:`whisper-1`},fallback:{enabled:!0,order:[`alibaba`,`openai`]}}}function I(){return{enabled:!1,provider:`openai`,trigger:`always`,maxTextLength:512,timeoutMs:6e4,alibaba:{model:`qwen-tts`,voice:`Cherry`},openai:{model:`tts-1`,voice:`alloy`},edge:{voice:`en-US-MichelleNeural`},minimax:{model:`speech-2.8-hd`,voice:`male-qn-qingse`},"tts-local-cli":{command:``,outputFormat:`wav`}}}function L(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function R(e){return typeof e==`string`&&e.trim().length>0?e.trim():`alibaba`}function z(e,t,n){let r=L(e.providers)?e.providers:void 0,i=r&&L(r[t])?r[t]:void 0;return{...n,...i??{}}}function B(e){let t=ve();if(!L(e))return t;let n=R(e.provider),r=z(e,`alibaba`,t.alibaba??{}),i=z(e,`openai`,t.openai??{}),a=t.fallback??{enabled:!0,order:[`alibaba`,`openai`]};if(L(e.fallback)){let t=Array.isArray(e.fallback.order)?e.fallback.order.filter(e=>typeof e==`string`&&e.trim().length>0):a.order;a={enabled:typeof e.fallback.enabled==`boolean`?e.fallback.enabled:a.enabled,order:t.length?t:a.order}}let o=L(e.providers)?Object.fromEntries(Object.entries(e.providers).map(([e,t])=>[e,L(t)?{...t}:{}])):void 0;return{enabled:!!e.enabled,provider:n,alibaba:r,openai:i,...o?{providers:o}:{},fallback:a}}function V(e){return typeof e==`string`&&e.trim().length>0?e.trim():`openai`}function H(e){let t=I();if(!L(e))return t;let n=V(e.provider),r=e.trigger===`off`||e.trigger===`always`||e.trigger===`inbound`||e.trigger===`tagged`?e.trigger:`always`,i=t[`tts-local-cli`]??{},a=L(e.providers)?Object.fromEntries(Object.entries(e.providers).map(([e,t])=>[e,L(t)?{...t}:{}])):void 0;return{enabled:!!e.enabled,provider:n,trigger:r,maxTextLength:typeof e.maxTextLength==`number`&&Number.isFinite(e.maxTextLength)?e.maxTextLength:t.maxTextLength,timeoutMs:typeof e.timeoutMs==`number`&&Number.isFinite(e.timeoutMs)?e.timeoutMs:t.timeoutMs,...a?{providers:a}:{},alibaba:z(e,`alibaba`,t.alibaba??{}),openai:z(e,`openai`,t.openai??{}),edge:z(e,`edge`,t.edge??{}),minimax:z(e,`minimax`,t.minimax??{}),"tts-local-cli":z(e,`tts-local-cli`,i)}}function U(e){let{alibaba:t,openai:n,providers:r,...i}=e,a={...r??{}};return t&&(a.alibaba={...a.alibaba??{},...t}),n&&(a.openai={...a.openai??{},...n}),{...i,...Object.keys(a).length>0?{providers:a}:{}}}function W(e){let{alibaba:t,openai:n,edge:r,minimax:i,"tts-local-cli":a,providers:o,...s}=e,c={...o??{}};return t&&(c.alibaba={...c.alibaba??{},...t}),n&&(c.openai={...c.openai??{},...n}),r&&(c.edge={...c.edge??{},...r}),i&&(c.minimax={...c.minimax??{},...i}),a&&(c[`tts-local-cli`]={...c[`tts-local-cli`]??{},...a}),{...s,...Object.keys(c).length>0?{providers:c}:{}}}function G(e){let t=L(e)?e:{};return{stt:B(t.stt),tts:H(t.tts)}}async function K(){return G((await s(i(`/api/config`))).payload?.config??{})}async function q(e){await s(i(`/api/config`),{method:`PATCH`,body:JSON.stringify({stt:U(e.stt),tts:W(e.tts)})}),x()}async function J(){let e=await s(i(`/api/voice/models`));if(!e.payload?.models)throw Error(`Missing voice models payload`);return e.payload.models}async function Y(){let e=await s(i(`/api/voice/providers`));if(!e.payload?.providers)throw Error(`Missing voice providers payload`);return e.payload}async function X(){let e=await s(i(`/api/voice/stt-providers`));if(!e.payload?.providers)throw Error(`Missing STT providers payload`);return e.payload}async function Z(e){let t=await s(i(`/api/voice/reveal-api-key`),{method:`POST`,body:JSON.stringify(e)});if(!t.payload)throw Error(`Missing reveal payload`);return t.payload}function Q(e){let t=(0,te.c)(15),{kind:n,providerId:r,fieldId:i,value:a,onChange:o,labels:s,placeholder:c,className:l}=e,u=c===void 0?`sk-...`:c,d;t[0]!==n||t[1]!==r?(d=()=>Z({kind:n,provider:r}).then($),t[0]=n,t[1]=r,t[2]=d):d=t[2];let f=d,p;t[3]===l?p=t[4]:(p=y(`flex min-w-0 flex-col gap-1.5`,l),t[3]=l,t[4]=p);let h;t[5]!==i||t[6]!==s||t[7]!==o||t[8]!==u||t[9]!==f||t[10]!==a?(h=(0,j.jsx)(m,{id:i,value:a,onChange:o,placeholder:u,labels:s,reveal:f,loadFailedLabel:s.loadFailed,maskedHelp:s.maskedHelp,notInConfigFile:s.notInConfigFile,inputClassName:`text-xs`}),t[5]=i,t[6]=s,t[7]=o,t[8]=u,t[9]=f,t[10]=a,t[11]=h):h=t[11];let g;return t[12]!==p||t[13]!==h?(g=(0,j.jsx)(`div`,{className:p,children:h}),t[12]=p,t[13]=h,t[14]=g):g=t[14],g}function $(e){return e.apiKey??null}export{X as a,F as c,S as d,K as i,fe as l,J as n,G as o,Y as r,q as s,Q as t,ee as u};
@@ -0,0 +1,27 @@
1
+ import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{i,o as a,t as o}from"./url-D6jvVYIA.js";import{i as s}from"./vendor-swr-BIWyz7Rc.js";import{t as c}from"./copy-SxMW6Xpc.js";import{a as l,i as u,n as d,o as f,r as p,s as m}from"./dist-BTWC-BTN.js";import{a as h,n as g}from"./fetch-BaFNUtkE.js";import{Fi as _,Tr as v,Un as y,Wr as b,Xr as x,Zi as S,Zr as C,a as w,aa as T,ar as E,ei as D,fi as O,i as k,ia as A,ki as j,mr as M,n as N,ni as P,o as F,pr as I,r as L,rt as R,s as z,tr as B,xa as ee,ya as V,zi as H}from"./index-qNrVJp-y.js";var U=e(t(),1),W=n();function G(e){return e===`zh`?`zh`:`en`}function te(e,t){let n=G(t),r=n===`en`?void 0:e.metadata.i18n?.[n],i=r?.examplePrompts&&r.examplePrompts.length>0?r.examplePrompts:e.metadata.examplePrompts??[];return{description:q(r?.description,e.description),whenToUse:ne(r?.whenToUse,e.metadata.whenToUse),examplePrompts:i}}function K(e){return[e.name,e.title,e.description,e.metadata.whenToUse??``,...(e.metadata.examplePrompts??[]).map(e=>e.text),...Object.values(e.metadata.i18n??{}).flatMap(e=>[e.description??``,e.whenToUse??``,...(e.examplePrompts??[]).map(e=>e.text)]),...e.metadata.tags].join(` `).toLowerCase()}function q(e,t){return e?.trim()||t}function ne(e,t){return e?.trim()||t?.trim()||void 0}function J(e,t,n){if(e.field===`goal`){t(e.text);return}n(t=>({...t,[e.field]:e.text}))}var re=new Set([`catalog`,`active`,`history`]),ie=[`all`,`code-review`,`planning`,`research`];new Set(ie);var ae=[`all`,`builtin`,`user`];new Set(ae);var oe=`start`,se={"code-review":[`code-review`,`pr`,`release`],planning:[`planning`,`implementation`,`architecture`,`decision`,`review`],research:[`research`,`investigation`,`debug`,`incident`,`troubleshooting`]},ce={research:[{key:`question`,labelKey:`argQuestion`,placeholderKey:`argQuestionPlaceholder`,required:!0,multiline:!0}],multi_perspective_review:[{key:`target`,labelKey:`argTarget`,placeholderKey:`argTargetPlaceholder`,multiline:!0}],pr_review:[{key:`target`,labelKey:`argDiff`,placeholderKey:`argDiffPlaceholder`,multiline:!0}],debug_incident:[{key:`error`,labelKey:`argError`,placeholderKey:`argErrorPlaceholder`,required:!0,multiline:!0},{key:`context`,labelKey:`argContext`,placeholderKey:`argContextPlaceholder`,multiline:!0}],implementation_plan:[{key:`request`,labelKey:`argRequest`,placeholderKey:`argRequestPlaceholder`,required:!0,multiline:!0},{key:`scope`,labelKey:`argScope`,placeholderKey:`argScopePlaceholder`}],release_check:[{key:`target`,labelKey:`argTarget`,placeholderKey:`argReleaseTargetPlaceholder`,multiline:!0}]},le=new Set([`queued`,`running`]),Y=new Set([`succeeded`,`failed`,`cancelled`,`timeout`]);function ue(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>String(t[n]??``))}function de(e,t){return e?new Intl.DateTimeFormat(t,{month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`}).format(new Date(e)):`—`}function fe(e){if(!e||!Number.isFinite(e))return`—`;let t=Math.max(0,Math.floor(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60),r=t%60;if(n<60)return r?`${n}m ${r}s`:`${n}m`;let i=Math.floor(n/60),a=n%60;return a?`${i}h ${a}m`:`${i}h`}function pe(e){return e===`succeeded`?`bg-emerald-500/15 text-emerald-700 dark:text-emerald-300`:e===`failed`||e===`timeout`?`bg-red-500/15 text-red-700 dark:text-red-300`:e===`cancelled`?`bg-amber-500/15 text-amber-700 dark:text-amber-300`:`bg-accent-soft text-accent-fg`}function X(e,t){if(t===`all`)return!0;let n=e.metadata.tags.map(e=>e.toLowerCase());return se[t].some(e=>n.includes(e))}function me(e,t){return t===`all`?!0:t===`builtin`?e.metadata.builtIn:e.metadata.source===`user`}function Z(e,t,n,r){let i=t.trim().toLowerCase();return e.filter(e=>!X(e,n)||!me(e,r)?!1:i?K(e).includes(i):!0)}function he(e,t){return t===`active`?e.filter(e=>le.has(e.status)):e.filter(e=>Y.has(e.status))}function ge(e){if(e==null)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function _e(e){if(e==null)return e;if(typeof e==`object`&&e&&`raw`in e){let t=e.raw;return t===void 0?e:t}return e}function ve(e){let t={};for(let[n,r]of Object.entries(e)){let e=r.trim();e&&(t[n]=e)}return Object.keys(t).length>0?t:void 0}var Q=r();function ye(e,t){let n=e.metadata.estimatedAgents;return n?n.min===n.max?ue(t.agentScaleExact,{count:n.min}):ue(t.agentScaleRange,{min:n.min,max:n.max}):null}function be(e){let t=(0,W.c)(57),{definition:n,language:r,onRun:i,onDetail:o,onDelete:s}=e,c,l,u;t[0]!==n||t[1]!==r?(c=a(r).workflows,l=te(n,r),u=ye(n,c),t[0]=n,t[1]=r,t[2]=c,t[3]=l,t[4]=u):(c=t[2],l=t[3],u=t[4]);let d=u,f=n.metadata.source===`user`,p;t[5]===n.title?p=t[6]:(p=(0,Q.jsx)(`h3`,{className:`truncate text-sm font-semibold text-fg`,children:n.title}),t[5]=n.title,t[6]=p);let m;t[7]===n.name?m=t[8]:(m=(0,Q.jsx)(`p`,{className:`mt-0.5 font-mono text-[11px] text-fg-subtle`,children:n.name}),t[7]=n.name,t[8]=m);let h;t[9]!==p||t[10]!==m?(h=(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[p,m]}),t[9]=p,t[10]=m,t[11]=h):h=t[11];let g=f?`bg-accent-soft text-accent-fg`:`bg-surface-hover text-fg-muted`,y;t[12]===g?y=t[13]:(y=M(`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium`,g),t[12]=g,t[13]=y);let b=f?c.badgeUser:c.badgeBuiltin,x;t[14]!==y||t[15]!==b?(x=(0,Q.jsx)(`span`,{className:y,children:b}),t[14]=y,t[15]=b,t[16]=x):x=t[16];let S;t[17]!==h||t[18]!==x?(S=(0,Q.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[h,x]}),t[17]=h,t[18]=x,t[19]=S):S=t[19];let C;t[20]===l.description?C=t[21]:(C=(0,Q.jsx)(`p`,{className:`mt-3 line-clamp-2 text-xs leading-5 text-fg-muted`,children:l.description}),t[20]=l.description,t[21]=C);let w;t[22]===l.whenToUse?w=t[23]:(w=l.whenToUse?(0,Q.jsx)(`p`,{className:`mt-2 line-clamp-2 text-xs leading-5 text-fg-subtle`,children:l.whenToUse}):null,t[22]=l.whenToUse,t[23]=w);let T;t[24]===n.phases?T=t[25]:(T=n.phases.length>0?(0,Q.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-1`,children:n.phases.slice(0,4).map(Se)}):null,t[24]=n.phases,t[25]=T);let E;t[26]===d?E=t[27]:(E=d?(0,Q.jsx)(`span`,{className:`rounded-md bg-surface-hover px-1.5 py-0.5 text-[10px] text-fg-muted`,children:d}):null,t[26]=d,t[27]=E);let D;t[28]===n.metadata.tags?D=t[29]:(D=n.metadata.tags.slice(0,3).map(xe),t[28]=n.metadata.tags,t[29]=D);let O;t[30]!==E||t[31]!==D?(O=(0,Q.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-1.5`,children:[E,D]}),t[30]=E,t[31]=D,t[32]=O):O=t[32];let k;t[33]!==C||t[34]!==w||t[35]!==T||t[36]!==O||t[37]!==S?(k=(0,Q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[S,C,w,T,O]}),t[33]=C,t[34]=w,t[35]=T,t[36]=O,t[37]=S,t[38]=k):k=t[38];let A;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(A=(0,Q.jsx)(P,{className:`size-4`,"aria-hidden":!0}),t[39]=A):A=t[39];let j;t[40]!==c.runWorkflow||t[41]!==i?(j=(0,Q.jsxs)(I,{variant:`primary`,className:`flex-1`,onClick:i,children:[A,c.runWorkflow]}),t[40]=c.runWorkflow,t[41]=i,t[42]=j):j=t[42];let N;t[43]===Symbol.for(`react.memo_cache_sentinel`)?(N=(0,Q.jsx)(_,{className:`size-4`,"aria-hidden":!0}),t[43]=N):N=t[43];let F;t[44]!==c.viewDetails||t[45]!==o?(F=(0,Q.jsxs)(I,{variant:`secondary`,onClick:o,children:[N,c.viewDetails]}),t[44]=c.viewDetails,t[45]=o,t[46]=F):F=t[46];let L;t[47]!==c.deleteWorkflow||t[48]!==s?(L=s?(0,Q.jsxs)(I,{variant:`secondary`,onClick:s,className:`text-red-600 dark:text-red-300`,children:[(0,Q.jsx)(v,{className:`size-4`,"aria-hidden":!0}),c.deleteWorkflow]}):null,t[47]=c.deleteWorkflow,t[48]=s,t[49]=L):L=t[49];let R;t[50]!==j||t[51]!==F||t[52]!==L?(R=(0,Q.jsxs)(`div`,{className:`mt-4 flex flex-wrap gap-2`,children:[j,F,L]}),t[50]=j,t[51]=F,t[52]=L,t[53]=R):R=t[53];let z;return t[54]!==k||t[55]!==R?(z=(0,Q.jsxs)(`article`,{className:`flex h-full flex-col rounded-2xl border border-edge bg-surface-panel p-4`,children:[k,R]}),t[54]=k,t[55]=R,t[56]=z):z=t[56],z}function xe(e){return(0,Q.jsx)(`span`,{className:`rounded-md bg-surface-hover px-1.5 py-0.5 text-[10px] text-fg-muted`,children:e},e)}function Se(e){return(0,Q.jsx)(`span`,{className:`rounded-md bg-surface-hover px-1.5 py-0.5 text-[10px] text-fg-muted`,children:e.title},e.id)}function $(e){let t=(0,W.c)(45),{open:n,definition:r,language:i,onClose:o,onRun:s}=e,c;t[0]===i?c=t[1]:(c=a(i),t[0]=i,t[1]=c);let h=c.workflows;if(!r)return null;let g;t[2]!==r||t[3]!==i?(g=te(r,i),t[2]=r,t[3]=i,t[4]=g):g=t[4];let _=g,v=r.runtime?.source??``,y;t[5]===o?y=t[6]:(y=e=>!e&&o(),t[5]=o,t[6]=y);let b;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(b=(0,Q.jsx)(u,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),t[7]=b):b=t[7];let x;t[8]===r.title?x=t[9]:(x=(0,Q.jsx)(m,{className:`text-base font-semibold text-fg`,children:r.title}),t[8]=r.title,t[9]=x);let S;t[10]===_.description?S=t[11]:(S=(0,Q.jsx)(p,{className:`mt-1 text-sm text-fg-muted`,children:_.description}),t[10]=_.description,t[11]=S);let C;t[12]!==x||t[13]!==S?(C=(0,Q.jsxs)(`div`,{className:`border-b border-edge px-5 py-4`,children:[x,S]}),t[12]=x,t[13]=S,t[14]=C):C=t[14];let w;t[15]!==h.whenToUseHeading||t[16]!==_.whenToUse?(w=_.whenToUse?(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:h.whenToUseHeading}),(0,Q.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-fg-muted`,children:_.whenToUse})]}):null,t[15]=h.whenToUseHeading,t[16]=_.whenToUse,t[17]=w):w=t[17];let T;t[18]!==r.phases||t[19]!==h.phasesHeading?(T=r.phases.length>0?(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:h.phasesHeading}),(0,Q.jsx)(`ol`,{className:`mt-2 space-y-2`,children:r.phases.map(Ce)})]}):null,t[18]=r.phases,t[19]=h.phasesHeading,t[20]=T):T=t[20];let E;t[21]!==h.scriptHeading||t[22]!==v?(E=v?(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:h.scriptHeading}),(0,Q.jsx)(`pre`,{className:`mt-2 max-h-64 overflow-auto rounded-xl border border-edge bg-surface-base/50 p-3 font-mono text-xs leading-5 text-fg-muted`,children:v})]}):null,t[21]=h.scriptHeading,t[22]=v,t[23]=E):E=t[23];let D;t[24]!==E||t[25]!==w||t[26]!==T?(D=(0,Q.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-auto px-5 py-4`,children:[w,T,E]}),t[24]=E,t[25]=w,t[26]=T,t[27]=D):D=t[27];let O;t[28]!==h.closeResult||t[29]!==o?(O=(0,Q.jsx)(I,{variant:`secondary`,onClick:o,children:h.closeResult}),t[28]=h.closeResult,t[29]=o,t[30]=O):O=t[30];let k;t[31]!==h.runWorkflow||t[32]!==s?(k=(0,Q.jsx)(I,{variant:`primary`,onClick:s,children:h.runWorkflow}),t[31]=h.runWorkflow,t[32]=s,t[33]=k):k=t[33];let A;t[34]!==O||t[35]!==k?(A=(0,Q.jsxs)(`div`,{className:`flex justify-end gap-2 border-t border-edge px-5 py-4`,children:[O,k]}),t[34]=O,t[35]=k,t[36]=A):A=t[36];let j;t[37]!==D||t[38]!==A||t[39]!==C?(j=(0,Q.jsxs)(l,{children:[b,(0,Q.jsxs)(d,{className:`fixed left-1/2 top-1/2 z-66 flex max-h-[min(85vh,44rem)] w-[min(100%-2rem,48rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none`,children:[C,D,A]})]}),t[37]=D,t[38]=A,t[39]=C,t[40]=j):j=t[40];let M;return t[41]!==n||t[42]!==j||t[43]!==y?(M=(0,Q.jsx)(f,{open:n,onOpenChange:y,children:j}),t[41]=n,t[42]=j,t[43]=y,t[44]=M):M=t[44],M}function Ce(e,t){return(0,Q.jsxs)(`li`,{className:`rounded-xl border border-edge bg-surface-base/40 px-3 py-2`,children:[(0,Q.jsxs)(`div`,{className:`text-sm font-medium text-fg`,children:[t+1,`. `,e.title]}),e.description?(0,Q.jsx)(`p`,{className:`mt-1 text-xs leading-5 text-fg-muted`,children:e.description}):null]},e.id)}function we(e){let t=(0,W.c)(62),{open:n,language:r,saving:i,onClose:o,onSave:s}=e,c;t[0]===r?c=t[1]:(c=a(r),t[0]=r,t[1]=c);let h=c.workflows,[g,_]=(0,U.useState)(``),[v,y]=(0,U.useState)(``),b,x;t[2]===n?(b=t[3],x=t[4]):(b=()=>{n&&(_(``),y(`export const meta = {
2
+ name: 'my_workflow',
3
+ description: 'Describe what this workflow does.',
4
+ whenToUse: 'When the user asks for …',
5
+ examplePrompts: [
6
+ { field: 'goal', text: 'Example goal for this workflow' },
7
+ ],
8
+ i18n: {
9
+ zh: {
10
+ description: '描述此工作流做什么。',
11
+ whenToUse: '当用户需要 … 时使用',
12
+ examplePrompts: [
13
+ { field: 'goal', text: '此工作流的示例目标' },
14
+ ],
15
+ },
16
+ },
17
+ tags: ['custom'],
18
+ estimatedAgents: { min: 2, max: 4 },
19
+ phases: [{ title: 'Step 1' }, { title: 'Synthesize' }],
20
+ }
21
+
22
+ phase('Step 1')
23
+ const first = await agent('Do the first step.', { label: 'step 1' })
24
+
25
+ phase('Synthesize')
26
+ return await agent('Summarize:\\n\\n' + first, { label: 'synthesis' })
27
+ `))},x=[n],t[2]=n,t[3]=b,t[4]=x),(0,U.useEffect)(b,x);let S;t[5]===o?S=t[6]:(S=e=>!e&&o(),t[5]=o,t[6]=S);let C;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(C=(0,Q.jsx)(u,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),t[7]=C):C=t[7];let w;t[8]===h.manageDialogTitle?w=t[9]:(w=(0,Q.jsx)(m,{className:`text-base font-semibold text-fg`,children:h.manageDialogTitle}),t[8]=h.manageDialogTitle,t[9]=w);let T;t[10]===h.manageDialogHint?T=t[11]:(T=(0,Q.jsx)(p,{className:`mt-1 text-sm text-fg-muted`,children:h.manageDialogHint}),t[10]=h.manageDialogHint,t[11]=T);let E;t[12]!==w||t[13]!==T?(E=(0,Q.jsxs)(`div`,{className:`border-b border-edge px-5 py-4`,children:[w,T]}),t[12]=w,t[13]=T,t[14]=E):E=t[14];let D;t[15]===h.workflowNameLabel?D=t[16]:(D=(0,Q.jsx)(`span`,{className:`text-xs font-medium text-fg`,children:h.workflowNameLabel}),t[15]=h.workflowNameLabel,t[16]=D);let O;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(O=e=>_(e.target.value),t[17]=O):O=t[17];let k;t[18]!==h.workflowNamePlaceholder||t[19]!==g?(k=(0,Q.jsx)(`input`,{value:g,onChange:O,placeholder:h.workflowNamePlaceholder,className:`mt-1.5 w-full rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm font-mono text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`}),t[18]=h.workflowNamePlaceholder,t[19]=g,t[20]=k):k=t[20];let A;t[21]!==k||t[22]!==D?(A=(0,Q.jsxs)(`label`,{className:`block`,children:[D,k]}),t[21]=k,t[22]=D,t[23]=A):A=t[23];let j;t[24]===h.workflowScriptLabel?j=t[25]:(j=(0,Q.jsx)(`span`,{className:`text-xs font-medium text-fg`,children:h.workflowScriptLabel}),t[24]=h.workflowScriptLabel,t[25]=j);let M;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(M=e=>y(e.target.value),t[26]=M):M=t[26];let N;t[27]===v?N=t[28]:(N=(0,Q.jsx)(`textarea`,{value:v,onChange:M,spellCheck:!1,className:`mt-1.5 min-h-72 w-full resize-y rounded-xl border border-edge bg-surface-base px-3 py-2 font-mono text-xs leading-5 text-fg outline-none focus:border-accent focus:ring-2 focus:ring-accent/20`}),t[27]=v,t[28]=N);let P;t[29]!==j||t[30]!==N?(P=(0,Q.jsxs)(`label`,{className:`block`,children:[j,N]}),t[29]=j,t[30]=N,t[31]=P):P=t[31];let F;t[32]!==A||t[33]!==P?(F=(0,Q.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-3 overflow-auto px-5 py-4`,children:[A,P]}),t[32]=A,t[33]=P,t[34]=F):F=t[34];let L;t[35]!==h.cancelDialog||t[36]!==o||t[37]!==i?(L=(0,Q.jsx)(I,{variant:`secondary`,onClick:o,disabled:i,children:h.cancelDialog}),t[35]=h.cancelDialog,t[36]=o,t[37]=i,t[38]=L):L=t[38];let R;t[39]!==g||t[40]!==i||t[41]!==v?(R=i||!g.trim()||!v.trim(),t[39]=g,t[40]=i,t[41]=v,t[42]=R):R=t[42];let z;t[43]!==g||t[44]!==s||t[45]!==v?(z=()=>s({name:g.trim(),script:v}),t[43]=g,t[44]=s,t[45]=v,t[46]=z):z=t[46];let B=i?h.savingWorkflow:h.saveWorkflow,ee;t[47]!==R||t[48]!==z||t[49]!==B?(ee=(0,Q.jsx)(I,{variant:`primary`,disabled:R,onClick:z,children:B}),t[47]=R,t[48]=z,t[49]=B,t[50]=ee):ee=t[50];let V;t[51]!==L||t[52]!==ee?(V=(0,Q.jsxs)(`div`,{className:`flex justify-end gap-2 border-t border-edge px-5 py-4`,children:[L,ee]}),t[51]=L,t[52]=ee,t[53]=V):V=t[53];let H;t[54]!==F||t[55]!==V||t[56]!==E?(H=(0,Q.jsxs)(l,{children:[C,(0,Q.jsxs)(d,{className:`fixed left-1/2 top-1/2 z-66 flex max-h-[min(90vh,44rem)] w-[min(100%-2rem,48rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none`,children:[E,F,V]})]}),t[54]=F,t[55]=V,t[56]=E,t[57]=H):H=t[57];let G;return t[58]!==n||t[59]!==H||t[60]!==S?(G=(0,Q.jsx)(f,{open:n,onOpenChange:S,children:H}),t[58]=n,t[59]=H,t[60]=S,t[61]=G):G=t[61],G}function Te(e,t){let n=Number.parseInt(e,10);return Number.isFinite(n)?n:t+1}function Ee(e){if(e!=null){if(typeof e==`object`&&e&&`raw`in e){let t=e.raw;return t===void 0?e:t}return e}}function De(e){let t=new Map(e.phases.map(e=>[e.id,e.title])),n=e.phases.find(e=>e.status===`running`),r=e.agents.map((e,n)=>({id:Te(e.id,n),label:e.label,phase:e.phaseId?t.get(e.phaseId):void 0,prompt:e.prompt??``,status:e.status,resultPreview:e.resultPreview,error:e.error,startedAtMs:e.startedAtMs,durationMs:e.startedAtMs!=null&&e.completedAtMs!=null?e.completedAtMs-e.startedAtMs:void 0,currentStep:e.currentStep,steps:e.steps?.map(e=>({id:e.id,kind:e.kind,toolName:e.kind===`tool`?e.label:void 0,label:e.label,detail:e.detail,status:e.status,startedAtMs:e.startedAtMs,durationMs:e.startedAtMs!=null&&e.completedAtMs!=null?e.completedAtMs-e.startedAtMs:void 0}))})),{metrics:i}=e.run;return{name:e.run.definitionId,description:e.run.goal||e.run.title,phases:e.phases.map(e=>e.title),currentPhase:n?.title,logs:e.logs.map(e=>e.message),agents:r,agentCount:i.agentCount,runningCount:Math.max(0,i.agentCount-i.doneAgentCount-i.errorAgentCount-i.skippedAgentCount),doneCount:i.doneAgentCount,errorCount:i.errorAgentCount,skippedCount:i.skippedAgentCount,durationMs:i.durationMs,result:Ee(e.run.result)}}function Oe(e,t){return t.status[e]??e}function ke(e,t){return t.phaseStatus[e]??e}function Ae(e){let t=(0,W.c)(179),{view:n,loading:r,language:i,localeTag:o,onCancel:s,onRetry:l}=e,u;t[0]===i?u=t[1]:(u=a(i),t[0]=i,t[1]=u);let d=u.workflows,f;t[2]===i?f=t[3]:(f=N(i),t[2]=i,t[3]=f);let p=f,m=V(),[h,g]=(0,U.useState)(!0),[_,v]=(0,U.useState)(!1),[y,b]=(0,U.useState)(null),[C,E]=(0,U.useState)(!1),[,D]=(0,U.useState)(0),A=n?.run.status,j;t[4]===A?j=t[5]:(j=A?le.has(A):!1,t[4]=A,t[5]=j);let P=j,ee;t[6]!==P||t[7]!==n?.run.id?(ee=()=>{n?.run.id&&(g(P),b(null))},t[6]=P,t[7]=n?.run.id,t[8]=ee):ee=t[8];let G=n?.run.id,te;t[9]!==P||t[10]!==G?(te=[G,P],t[9]=P,t[10]=G,t[11]=te):te=t[11],(0,U.useEffect)(ee,te);let K;t[12]!==P||t[13]!==D?(K=()=>{if(!P)return;let e=window.setInterval(()=>D(Fe),1e3);return()=>window.clearInterval(e)},t[12]=P,t[13]=D,t[14]=K):K=t[14];let q;t[15]===P?q=t[16]:(q=[P],t[15]=P,t[16]=q),(0,U.useEffect)(K,q);let ne;t[17]===n?ne=t[18]:(ne=n?De(n):null,t[17]=n,t[18]=ne);let J=ne,re;t[19]===J?re=t[20]:(re=J?z(J):{phases:[],unphased:null},t[19]=J,t[20]=re);let ie=re,ae;bb0:{if(y==null||!J){ae=null;break bb0}let e;t[21]!==y||t[22]!==J.agents?(e=J.agents.find(e=>e.id===y)??null,t[21]=y,t[22]=J.agents,t[23]=e):e=t[23],ae=e}let oe=ae,se;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(se=e=>{b(e.id)},t[24]=se):se=t[24];let ce=se,Y,X,me;t[25]===n?(Y=t[26],X=t[27],me=t[28]):(Y=n?_e(n.run.result):void 0,X=ge(Y),me=X.trim(),t[25]=n,t[26]=Y,t[27]=X,t[28]=me);let Z=me.length>0,he;t[29]!==Z||t[30]!==X?(he=async()=>{Z&&await B(X)&&(E(!0),window.setTimeout(()=>E(!1),1500))},t[29]=Z,t[30]=X,t[31]=he):he=t[31];let ve=he,ye;t[32]!==Z||t[33]!==X||t[34]!==n?(ye=()=>{if(!Z||!n)return;let e=new Blob([X],{type:`text/markdown;charset=utf-8`}),t=URL.createObjectURL(e),r=document.createElement(`a`);r.href=t,r.download=`${n.run.definitionId}-${n.run.id.slice(0,8)}.md`,r.click(),URL.revokeObjectURL(t)},t[32]=Z,t[33]=X,t[34]=n,t[35]=ye):ye=t[35];let be=ye,xe;t[36]!==d.continueInChatPrompt||t[37]!==m||t[38]!==n?(xe=()=>{n&&(R(ue(d.continueInChatPrompt,{workflow:n.run.definitionId,goal:n.run.goal||n.run.title})),m(`/chat`))},t[36]=d.continueInChatPrompt,t[37]=m,t[38]=n,t[39]=xe):xe=t[39];let Se=xe;if(r){let e;return t[40]===d.loading?e=t[41]:(e=(0,Q.jsx)(`div`,{className:`rounded-2xl border border-edge bg-surface-panel p-6 text-sm text-fg-muted`,children:d.loading}),t[40]=d.loading,t[41]=e),e}if(!n||!J){let e;return t[42]===d.selectRunHint?e=t[43]:(e=(0,Q.jsx)(`div`,{className:`rounded-2xl border border-dashed border-edge p-6 text-sm text-fg-muted`,children:d.selectRunHint}),t[42]=d.selectRunHint,t[43]=e),e}let{run:$}=n,Ce=n.controls.canCancel&&P,we;t[44]!==P||t[45]!==$.metrics.durationMs||t[46]!==$.startedAtMs?(we=P&&$.startedAtMs!=null?fe(Date.now()-$.startedAtMs):fe($.metrics.durationMs??void 0),t[44]=P,t[45]=$.metrics.durationMs,t[46]=$.startedAtMs,t[47]=we):we=t[47];let Te=we,Ee;t[48]===$.title?Ee=t[49]:(Ee=(0,Q.jsx)(`h2`,{className:`text-lg font-semibold text-fg`,children:$.title}),t[48]=$.title,t[49]=Ee);let Ae;t[50]===$.status?Ae=t[51]:(Ae=M(`rounded-full px-2 py-0.5 text-xs font-medium`,pe($.status)),t[50]=$.status,t[51]=Ae);let Le;t[52]!==d||t[53]!==$.status?(Le=Oe($.status,d),t[52]=d,t[53]=$.status,t[54]=Le):Le=t[54];let Re;t[55]!==Ae||t[56]!==Le?(Re=(0,Q.jsx)(`span`,{className:Ae,children:Le}),t[55]=Ae,t[56]=Le,t[57]=Re):Re=t[57];let ze;t[58]!==Ee||t[59]!==Re?(ze=(0,Q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[Ee,Re]}),t[58]=Ee,t[59]=Re,t[60]=ze):ze=t[60];let Be;t[61]===$.definitionId?Be=t[62]:(Be=(0,Q.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:$.definitionId}),t[61]=$.definitionId,t[62]=Be);let Ve;t[63]===$.goal?Ve=t[64]:(Ve=$.goal?(0,Q.jsx)(`p`,{className:`mt-3 text-sm leading-6 text-fg-muted`,children:$.goal}):null,t[63]=$.goal,t[64]=Ve);let He;t[65]===$.error?He=t[66]:(He=$.error?(0,Q.jsx)(`p`,{className:`mt-3 text-sm leading-6 text-red-600 dark:text-red-300`,children:$.error.message}):null,t[65]=$.error,t[66]=He);let Ue;t[67]!==ze||t[68]!==Be||t[69]!==Ve||t[70]!==He?(Ue=(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[ze,Be,Ve,He]}),t[67]=ze,t[68]=Be,t[69]=Ve,t[70]=He,t[71]=Ue):Ue=t[71];let We;t[72]!==Ce||t[73]!==d.cancel||t[74]!==s?(We=Ce?(0,Q.jsxs)(I,{variant:`secondary`,onClick:s,className:`text-red-600 dark:text-red-300`,children:[(0,Q.jsx)(S,{className:`size-4`,"aria-hidden":!0}),d.cancel]}):null,t[72]=Ce,t[73]=d.cancel,t[74]=s,t[75]=We):We=t[75];let Ge;t[76]!==d.rerun||t[77]!==l||t[78]!==n.controls.canRetry?(Ge=n.controls.canRetry?(0,Q.jsxs)(I,{variant:`secondary`,onClick:l,children:[(0,Q.jsx)(x,{className:`size-4`,"aria-hidden":!0}),d.rerun]}):null,t[76]=d.rerun,t[77]=l,t[78]=n.controls.canRetry,t[79]=Ge):Ge=t[79];let Ke;t[80]!==We||t[81]!==Ge?(Ke=(0,Q.jsxs)(`div`,{className:`flex shrink-0 flex-wrap gap-2`,children:[We,Ge]}),t[80]=We,t[81]=Ge,t[82]=Ke):Ke=t[82];let qe;t[83]!==Ue||t[84]!==Ke?(qe=(0,Q.jsxs)(`div`,{className:`flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between`,children:[Ue,Ke]}),t[83]=Ue,t[84]=Ke,t[85]=qe):qe=t[85];let Je=d.metrics.startedAt,Ye=$.startedAtMs??$.createdAtMs,Xe;t[86]!==o||t[87]!==Ye?(Xe=de(Ye,o),t[86]=o,t[87]=Ye,t[88]=Xe):Xe=t[88];let Ze;t[89]!==d.metrics.startedAt||t[90]!==Xe?(Ze=(0,Q.jsx)(Ie,{label:Je,value:Xe}),t[89]=d.metrics.startedAt,t[90]=Xe,t[91]=Ze):Ze=t[91];let Qe;t[92]!==Te||t[93]!==d.metrics.duration?(Qe=(0,Q.jsx)(Ie,{label:d.metrics.duration,value:Te}),t[92]=Te,t[93]=d.metrics.duration,t[94]=Qe):Qe=t[94];let $e=d.metrics.agents,et;t[95]!==d.agentProgress||t[96]!==$.metrics.agentCount||t[97]!==$.metrics.doneAgentCount?(et=ue(d.agentProgress,{done:$.metrics.doneAgentCount,total:$.metrics.agentCount}),t[95]=d.agentProgress,t[96]=$.metrics.agentCount,t[97]=$.metrics.doneAgentCount,t[98]=et):et=t[98];let tt;t[99]!==d.metrics.agents||t[100]!==et?(tt=(0,Q.jsx)(Ie,{label:$e,value:et}),t[99]=d.metrics.agents,t[100]=et,t[101]=tt):tt=t[101];let nt=d.metrics.artifacts,rt=String($.metrics.artifactCount),it;t[102]!==d.metrics.artifacts||t[103]!==rt?(it=(0,Q.jsx)(Ie,{label:nt,value:rt}),t[102]=d.metrics.artifacts,t[103]=rt,t[104]=it):it=t[104];let at;t[105]!==Ze||t[106]!==Qe||t[107]!==tt||t[108]!==it?(at=(0,Q.jsxs)(`dl`,{className:`mt-5 grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[Ze,Qe,tt,it]}),t[105]=Ze,t[106]=Qe,t[107]=tt,t[108]=it,t[109]=at):at=t[109];let ot;t[110]===Symbol.for(`react.memo_cache_sentinel`)?(ot=()=>g(Pe),t[110]=ot):ot=t[110];let st;t[111]===d.process?st=t[112]:(st=(0,Q.jsx)(`h3`,{className:`text-sm font-semibold text-fg`,children:d.process}),t[111]=d.process,t[112]=st);let ct;t[113]!==d.agentProgress||t[114]!==$.metrics.agentCount||t[115]!==$.metrics.doneAgentCount?(ct=ue(d.agentProgress,{done:$.metrics.doneAgentCount,total:$.metrics.agentCount}),t[113]=d.agentProgress,t[114]=$.metrics.agentCount,t[115]=$.metrics.doneAgentCount,t[116]=ct):ct=t[116];let lt;t[117]!==Te||t[118]!==ct?(lt=(0,Q.jsxs)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:[ct,` · `,Te]}),t[117]=Te,t[118]=ct,t[119]=lt):lt=t[119];let ut;t[120]!==st||t[121]!==lt?(ut=(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[st,lt]}),t[120]=st,t[121]=lt,t[122]=ut):ut=t[122];let dt=h?d.collapse:d.expand,ft;t[123]===dt?ft=t[124]:(ft=(0,Q.jsx)(`span`,{className:`text-xs text-fg-muted`,children:dt}),t[123]=dt,t[124]=ft);let pt;t[125]!==h||t[126]!==ut||t[127]!==ft?(pt=(0,Q.jsxs)(`button`,{type:`button`,className:`flex w-full items-center justify-between gap-4 px-4 py-3 text-left`,onClick:ot,"aria-expanded":h,children:[ut,ft]}),t[125]=h,t[126]=ut,t[127]=ft,t[128]=pt):pt=t[128];let mt;t[129]!==p||t[130]!==y||t[131]!==P||t[132]!==d||t[133]!==_||t[134]!==h||t[135]!==ie||t[136]!==J||t[137]!==n.phases?(mt=h?(0,Q.jsxs)(`div`,{className:`border-t border-edge px-4 pb-4 pt-4`,children:[P?(0,Q.jsx)(w,{snapshot:J,labels:p,logsExpanded:_,onToggleLogs:()=>v(Ne),selectedAgentId:y,onSelectAgent:ce}):(0,Q.jsx)(k,{rollup:ie,currentPhase:J.currentPhase,labels:p.phase,recentLogs:J.logs,recentLogsHeading:p.recentLogsHeading,showAllLogsLabel:p.showAllLogs,logsExpanded:_,onToggleLogs:()=>v(Me),selectedAgentId:y,onSelectAgent:ce}),n.phases.length>0?(0,Q.jsx)(`div`,{className:`mt-4 grid gap-2 sm:grid-cols-2`,children:n.phases.map(e=>(0,Q.jsx)(`div`,{className:`rounded-xl border border-edge bg-surface-panel px-3 py-2`,children:(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Q.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:e.title}),(0,Q.jsx)(`span`,{className:`text-xs text-fg-subtle`,children:ke(e.status,d)})]})},e.id))}):null]}):null,t[129]=p,t[130]=y,t[131]=P,t[132]=d,t[133]=_,t[134]=h,t[135]=ie,t[136]=J,t[137]=n.phases,t[138]=mt):mt=t[138];let ht;t[139]!==pt||t[140]!==mt?(ht=(0,Q.jsxs)(`div`,{className:`mt-6 rounded-2xl border border-edge bg-surface-base/35`,children:[pt,mt]}),t[139]=pt,t[140]=mt,t[141]=ht):ht=t[141];let gt;t[142]===d.resultTitle?gt=t[143]:(gt=(0,Q.jsx)(`h3`,{className:`text-sm font-semibold text-fg`,children:d.resultTitle}),t[142]=d.resultTitle,t[143]=gt);let _t;t[144]!==Se||t[145]!==C||t[146]!==ve||t[147]!==be||t[148]!==Z||t[149]!==d.continueInChat||t[150]!==d.copied||t[151]!==d.copyResult||t[152]!==d.exportResult?(_t=Z?(0,Q.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Q.jsxs)(I,{variant:`secondary`,onClick:ve,children:[C?(0,Q.jsx)(T,{className:`size-4`,"aria-hidden":!0}):(0,Q.jsx)(c,{className:`size-4`,"aria-hidden":!0}),C?d.copied:d.copyResult]}),(0,Q.jsxs)(I,{variant:`secondary`,onClick:be,children:[(0,Q.jsx)(H,{className:`size-4`,"aria-hidden":!0}),d.exportResult]}),(0,Q.jsxs)(I,{variant:`secondary`,onClick:Se,children:[(0,Q.jsx)(O,{className:`size-4`,"aria-hidden":!0}),d.continueInChat]})]}):null,t[144]=Se,t[145]=C,t[146]=ve,t[147]=be,t[148]=Z,t[149]=d.continueInChat,t[150]=d.copied,t[151]=d.copyResult,t[152]=d.exportResult,t[153]=_t):_t=t[153];let vt;t[154]!==gt||t[155]!==_t?(vt=(0,Q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[gt,_t]}),t[154]=gt,t[155]=_t,t[156]=vt):vt=t[156];let yt;t[157]!==p.result||t[158]!==Z||t[159]!==d.noResult||t[160]!==Y?(yt=Z?(0,Q.jsx)(`div`,{className:`mt-3 rounded-xl border border-edge bg-surface-base/50 p-3`,children:(0,Q.jsx)(L,{result:Y,labels:p.result})}):(0,Q.jsx)(`div`,{className:`mt-3 rounded-xl border border-dashed border-edge p-4 text-sm text-fg-muted`,children:d.noResult}),t[157]=p.result,t[158]=Z,t[159]=d.noResult,t[160]=Y,t[161]=yt):yt=t[161];let bt;t[162]!==vt||t[163]!==yt?(bt=(0,Q.jsxs)(`div`,{className:`mt-6`,children:[vt,yt]}),t[162]=vt,t[163]=yt,t[164]=bt):bt=t[164];let xt;t[165]!==qe||t[166]!==at||t[167]!==ht||t[168]!==bt?(xt=(0,Q.jsxs)(`section`,{className:`rounded-2xl border border-edge bg-surface-panel p-5`,children:[qe,at,ht,bt]}),t[165]=qe,t[166]=at,t[167]=ht,t[168]=bt,t[169]=xt):xt=t[169];let St=y!=null&&oe!=null,Ct;t[170]===Symbol.for(`react.memo_cache_sentinel`)?(Ct=()=>b(null),t[170]=Ct):Ct=t[170];let wt;t[171]!==p.drawer||t[172]!==oe||t[173]!==J||t[174]!==St?(wt=(0,Q.jsx)(F,{open:St,agent:oe,snapshot:J,sessionKey:null,pinnedAgentId:null,onPinAgent:je,onClose:Ct,labels:p.drawer}),t[171]=p.drawer,t[172]=oe,t[173]=J,t[174]=St,t[175]=wt):wt=t[175];let Tt;return t[176]!==xt||t[177]!==wt?(Tt=(0,Q.jsxs)(Q.Fragment,{children:[xt,wt]}),t[176]=xt,t[177]=wt,t[178]=Tt):Tt=t[178],Tt}function je(){}function Me(e){return!e}function Ne(e){return!e}function Pe(e){return!e}function Fe(e){return e+1}function Ie(e){let t=(0,W.c)(7),{label:n,value:r}=e,i;t[0]===n?i=t[1]:(i=(0,Q.jsx)(`dt`,{className:`text-xs text-fg-subtle`,children:n}),t[0]=n,t[1]=i);let a;t[2]===r?a=t[3]:(a=(0,Q.jsx)(`dd`,{className:`mt-1 text-sm font-semibold text-fg`,children:r}),t[2]=r,t[3]=a);let o;return t[4]!==i||t[5]!==a?(o=(0,Q.jsxs)(`div`,{className:`rounded-xl border border-edge bg-surface-base/40 p-3`,children:[i,a]}),t[4]=i,t[5]=a,t[6]=o):o=t[6],o}function Le(e,t){return t.status[e]??e}function Re(e){let t=(0,W.c)(49),{run:n,selected:r,language:i,localeTag:o,onSelect:s}=e,c,l,u,d,f,p,m;if(t[0]!==i||t[1]!==s||t[2]!==n.definitionId||t[3]!==n.metrics.agentCount||t[4]!==n.metrics.doneAgentCount||t[5]!==n.status||t[6]!==n.title||t[7]!==r){let e=a(i).workflows,o;t[15]!==n.metrics.agentCount||t[16]!==n.metrics.doneAgentCount?(o=n.metrics.agentCount>0?Math.round(n.metrics.doneAgentCount/n.metrics.agentCount*100):0,t[15]=n.metrics.agentCount,t[16]=n.metrics.doneAgentCount,t[17]=o):o=t[17];let h=o;u=`button`,d=s;let g=r?`border-accent bg-accent-soft/35`:`border-edge bg-surface-panel hover:bg-surface-hover/60`;t[18]===g?f=t[19]:(f=M(`w-full rounded-xl border p-3 text-left transition-colors`,g),t[18]=g,t[19]=f);let _;t[20]===n.title?_=t[21]:(_=(0,Q.jsx)(`div`,{className:`truncate text-sm font-medium text-fg`,children:n.title}),t[20]=n.title,t[21]=_);let v;t[22]===n.definitionId?v=t[23]:(v=(0,Q.jsx)(`div`,{className:`mt-1 truncate text-xs text-fg-subtle`,children:n.definitionId}),t[22]=n.definitionId,t[23]=v);let y;t[24]!==_||t[25]!==v?(y=(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[_,v]}),t[24]=_,t[25]=v,t[26]=y):y=t[26];let b;t[27]===n.status?b=t[28]:(b=M(`shrink-0 rounded-full px-2 py-0.5 text-[11px] font-medium`,pe(n.status)),t[27]=n.status,t[28]=b),p=(0,Q.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[y,(0,Q.jsx)(`span`,{className:b,children:Le(n.status,e)})]});let x=`${h}%`;t[29]===x?m=t[30]:(m=(0,Q.jsx)(`div`,{className:`mt-3 h-1.5 overflow-hidden rounded-full bg-surface-hover`,children:(0,Q.jsx)(`div`,{className:`h-full rounded-full bg-accent transition-all`,style:{width:x}})}),t[29]=x,t[30]=m),l=`mt-2 flex items-center justify-between text-[11px] text-fg-subtle`,c=ue(e.agentProgress,{done:n.metrics.doneAgentCount,total:n.metrics.agentCount}),t[0]=i,t[1]=s,t[2]=n.definitionId,t[3]=n.metrics.agentCount,t[4]=n.metrics.doneAgentCount,t[5]=n.status,t[6]=n.title,t[7]=r,t[8]=c,t[9]=l,t[10]=u,t[11]=d,t[12]=f,t[13]=p,t[14]=m}else c=t[8],l=t[9],u=t[10],d=t[11],f=t[12],p=t[13],m=t[14];let h;t[31]===c?h=t[32]:(h=(0,Q.jsx)(`span`,{children:c}),t[31]=c,t[32]=h);let g;t[33]!==o||t[34]!==n.createdAtMs?(g=de(n.createdAtMs,o),t[33]=o,t[34]=n.createdAtMs,t[35]=g):g=t[35];let _;t[36]===g?_=t[37]:(_=(0,Q.jsx)(`span`,{children:g}),t[36]=g,t[37]=_);let v;t[38]!==_||t[39]!==l||t[40]!==h?(v=(0,Q.jsxs)(`div`,{className:l,children:[h,_]}),t[38]=_,t[39]=l,t[40]=h,t[41]=v):v=t[41];let y;return t[42]!==v||t[43]!==u||t[44]!==d||t[45]!==f||t[46]!==p||t[47]!==m?(y=(0,Q.jsxs)(`button`,{type:u,onClick:d,className:f,children:[p,m,v]}),t[42]=v,t[43]=u,t[44]=d,t[45]=f,t[46]=p,t[47]=m,t[48]=y):y=t[48],y}function ze(e){let t=(0,W.c)(12),{examples:n,labels:r,onSelect:i}=e;if(n.length===0)return null;let a;t[0]===r.examplePrompts?a=t[1]:(a=(0,Q.jsx)(`div`,{className:`text-xs font-medium text-fg-muted`,children:r.examplePrompts}),t[0]=r.examplePrompts,t[1]=a);let o;if(t[2]!==n||t[3]!==i){let e;t[5]===i?e=t[6]:(e=e=>(0,Q.jsx)(`button`,{type:`button`,onClick:()=>i(e),className:`rounded-lg border border-edge bg-surface-base/50 px-3 py-2 text-left text-xs text-fg-muted hover:bg-surface-hover`,children:e.text},`${e.field}:${e.text}`),t[5]=i,t[6]=e),o=n.map(e),t[2]=n,t[3]=i,t[4]=o}else o=t[4];let s;t[7]===o?s=t[8]:(s=(0,Q.jsx)(`div`,{className:`mt-2 flex flex-col gap-1.5`,children:o}),t[7]=o,t[8]=s);let c;return t[9]!==a||t[10]!==s?(c=(0,Q.jsxs)(`div`,{children:[a,s]}),t[9]=a,t[10]=s,t[11]=c):c=t[11],c}function Be(e){let t=(0,W.c)(44),{open:n,definition:r,language:i,starting:o,onClose:s,onStart:c}=e,h=a(i).workflows,[g,_]=(0,U.useState)(``),v;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(v={},t[0]=v):v=t[0];let[y,b]=(0,U.useState)(v),[x,S]=(0,U.useState)(``),[C,w]=(0,U.useState)(``),[T,E]=(0,U.useState)(!1),D;t[1]!==r||t[2]!==i?(D=r?te(r,i):null,t[1]=r,t[2]=i,t[3]=D):D=t[3];let O=D,k;t[4]===r?k=t[5]:(k=r?ce[r.name]??[]:[],t[4]=r,t[5]=k);let j=k,N;t[6]===O?.examplePrompts?N=t[7]:(N=O?.examplePrompts??[],t[6]=O?.examplePrompts,t[7]=N);let P=N,F=j.length>0,L;t[8]!==r||t[9]!==n?(L=()=>{!n||!r||(_(``),b({}),S(``),w(``),E(!1))},t[8]=r,t[9]=n,t[10]=L):L=t[10];let R=r?.id,z;if(t[11]!==n||t[12]!==R?(z=[n,R],t[11]=n,t[12]=R,t[13]=z):z=t[13],(0,U.useEffect)(L,z),!r||!O)return null;let B;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(B=e=>{J(e,_,b)},t[14]=B):B=t[14];let ee=B,V;t[15]!==y||t[16]!==x||t[17]!==g||t[18]!==O.description||t[19]!==C||t[20]!==c?(V=()=>{let e=ve(y);c({goal:g.trim()||O.description,input:e,concurrency:x.trim()?Number(x):void 0,maxSubagents:C.trim()?Number(C):void 0})},t[15]=y,t[16]=x,t[17]=g,t[18]=O.description,t[19]=C,t[20]=c,t[21]=V):V=t[21];let H=V,G;t[22]===s?G=t[23]:(G=e=>!e&&s(),t[22]=s,t[23]=G);let K;t[24]===Symbol.for(`react.memo_cache_sentinel`)?(K=(0,Q.jsx)(u,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),t[24]=K):K=t[24];let q;t[25]===O.description?q=t[26]:(q=(0,Q.jsx)(p,{className:`mt-1 text-sm text-fg-muted`,children:O.description}),t[25]=O.description,t[26]=q);let ne=j.map(e=>(0,Q.jsxs)(`label`,{className:`block`,children:[(0,Q.jsxs)(`span`,{className:`text-xs font-medium text-fg`,children:[He(h,e.labelKey),e.required?` *`:``]}),e.multiline?(0,Q.jsx)(`textarea`,{value:y[e.key]??``,onChange:t=>b(n=>({...n,[e.key]:t.target.value})),placeholder:He(h,e.placeholderKey),className:`mt-1.5 min-h-20 w-full resize-y rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`}):(0,Q.jsx)(`input`,{value:y[e.key]??``,onChange:t=>b(n=>({...n,[e.key]:t.target.value})),placeholder:He(h,e.placeholderKey),className:`mt-1.5 w-full rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`})]},e.key)),re;t[27]===Symbol.for(`react.memo_cache_sentinel`)?(re=e=>_(e.target.value),t[27]=re):re=t[27];let ie;t[28]===Symbol.for(`react.memo_cache_sentinel`)?(ie=()=>E(Ve),t[28]=ie):ie=t[28];let ae=h.advancedSettings,oe=T&&`rotate-180`,se;t[29]===oe?se=t[30]:(se=M(`size-4 transition-transform`,oe),t[29]=oe,t[30]=se);let le;t[31]===se?le=t[32]:(le=(0,Q.jsx)(A,{className:se}),t[31]=se,t[32]=le);let Y;t[33]!==h.cancelDialog||t[34]!==s||t[35]!==o?(Y=(0,Q.jsx)(I,{variant:`secondary`,onClick:s,disabled:o,children:h.cancelDialog}),t[33]=h.cancelDialog,t[34]=s,t[35]=o,t[36]=Y):Y=t[36];let de=o?h.starting:h.start,fe;t[37]!==o||t[38]!==H||t[39]!==de?(fe=(0,Q.jsx)(I,{variant:`primary`,onClick:H,disabled:o,children:de}),t[37]=o,t[38]=H,t[39]=de,t[40]=fe):fe=t[40];let pe;return t[41]!==Y||t[42]!==fe?(pe=(0,Q.jsxs)(`div`,{className:`flex justify-end gap-2 border-t border-edge px-5 py-4`,children:[Y,fe]}),t[41]=Y,t[42]=fe,t[43]=pe):pe=t[43],(0,Q.jsx)(f,{open:n,onOpenChange:G,children:(0,Q.jsxs)(l,{children:[K,(0,Q.jsxs)(d,{className:`fixed left-1/2 top-1/2 z-66 flex max-h-[min(85vh,40rem)] w-[min(100%-2rem,32rem)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none`,children:[(0,Q.jsxs)(`div`,{className:`border-b border-edge px-5 py-4`,children:[(0,Q.jsxs)(m,{className:`text-base font-semibold text-fg`,children:[h.startTitle,` · `,r.title]}),q]}),(0,Q.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-auto px-5 py-4`,children:[ne,F?(0,Q.jsx)(ze,{examples:P,labels:h,onSelect:ee}):null,(0,Q.jsxs)(`label`,{className:`block`,children:[(0,Q.jsx)(`span`,{className:`text-xs font-medium text-fg`,children:h.goalLabel}),(0,Q.jsx)(`textarea`,{value:g,onChange:re,placeholder:h.goalPlaceholder,className:`mt-1.5 min-h-24 w-full resize-y rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`})]}),F?null:(0,Q.jsx)(ze,{examples:P,labels:h,onSelect:ee}),(0,Q.jsxs)(`div`,{className:`rounded-xl border border-edge`,children:[(0,Q.jsxs)(`button`,{type:`button`,className:`flex w-full items-center justify-between px-3 py-2.5 text-left text-sm text-fg`,onClick:ie,children:[ae,le]}),T?(0,Q.jsxs)(`div`,{className:`grid gap-3 border-t border-edge px-3 pb-3 pt-3 sm:grid-cols-2`,children:[(0,Q.jsx)(`input`,{value:x,onChange:e=>S(e.target.value),placeholder:ue(h.concurrencyPlaceholder,{default:r.defaults.concurrency}),inputMode:`numeric`,className:`rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`}),(0,Q.jsx)(`input`,{value:C,onChange:e=>w(e.target.value),placeholder:ue(h.maxSubagentsPlaceholder,{default:r.defaults.maxSubagents}),inputMode:`numeric`,className:`rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg outline-none placeholder:text-fg-subtle focus:border-accent focus:ring-2 focus:ring-accent/20`})]}):null]})]}),pe]})]})})}function Ve(e){return!e}function He(e,t){return e.args[t]??t}function Ue(e){let t=(0,W.c)(28),{stats:n,language:r}=e,i,o,s;if(t[0]!==r||t[1]!==n){s=Symbol.for(`react.early_return_sentinel`);bb0:{if(i=a(r).workflows,!n||n.totalRuns===0){s=null;break bb0}o=n.topDefinitions[0]?ue(i.statsTopWorkflow,{name:n.topDefinitions[0].definitionId,count:n.topDefinitions[0].count}):null}t[0]=r,t[1]=n,t[2]=i,t[3]=o,t[4]=s}else i=t[2],o=t[3],s=t[4];if(s!==Symbol.for(`react.early_return_sentinel`))return s;let c=o,l=i.statsTotalRuns,u=String(n.totalRuns),d;t[5]!==i.statsTotalRuns||t[6]!==u?(d=(0,Q.jsx)(We,{label:l,value:u}),t[5]=i.statsTotalRuns,t[6]=u,t[7]=d):d=t[7];let f=i.statsActiveRuns,p=String(n.activeRuns),m;t[8]!==i.statsActiveRuns||t[9]!==p?(m=(0,Q.jsx)(We,{label:f,value:p}),t[8]=i.statsActiveRuns,t[9]=p,t[10]=m):m=t[10];let h;t[11]!==n.succeededRuns||t[12]!==n.totalRuns?(h=n.totalRuns>0?`${Math.round(n.succeededRuns/n.totalRuns*100)}%`:`—`,t[11]=n.succeededRuns,t[12]=n.totalRuns,t[13]=h):h=t[13];let g;t[14]!==i.statsSuccessRate||t[15]!==h?(g=(0,Q.jsx)(We,{label:i.statsSuccessRate,value:h}),t[14]=i.statsSuccessRate,t[15]=h,t[16]=g):g=t[16];let _;t[17]===n.averageDurationMs?_=t[18]:(_=n.averageDurationMs==null?`—`:fe(n.averageDurationMs),t[17]=n.averageDurationMs,t[18]=_);let v=c??void 0,y;t[19]!==i.statsAvgDuration||t[20]!==_||t[21]!==v?(y=(0,Q.jsx)(We,{label:i.statsAvgDuration,value:_,hint:v}),t[19]=i.statsAvgDuration,t[20]=_,t[21]=v,t[22]=y):y=t[22];let b;return t[23]!==g||t[24]!==y||t[25]!==d||t[26]!==m?(b=(0,Q.jsxs)(`section`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[d,m,g,y]}),t[23]=g,t[24]=y,t[25]=d,t[26]=m,t[27]=b):b=t[27],b}function We(e){let t=(0,W.c)(10),{label:n,value:r,hint:i}=e,a;t[0]===n?a=t[1]:(a=(0,Q.jsx)(`div`,{className:`text-xs text-fg-subtle`,children:n}),t[0]=n,t[1]=a);let o;t[2]===r?o=t[3]:(o=(0,Q.jsx)(`div`,{className:`mt-1 text-lg font-semibold tabular-nums text-fg`,children:r}),t[2]=r,t[3]=o);let s;t[4]===i?s=t[5]:(s=i?(0,Q.jsx)(`div`,{className:`mt-1 truncate text-[11px] text-fg-muted`,children:i}):null,t[4]=i,t[5]=s);let c;return t[6]!==a||t[7]!==o||t[8]!==s?(c=(0,Q.jsxs)(`div`,{className:`rounded-xl border border-edge bg-surface-panel px-4 py-3`,children:[a,o,s]}),t[6]=a,t[7]=o,t[8]=s,t[9]=c):c=t[9],c}function Ge(e){let t=(0,W.c)(27),{vm:n}=e,{labels:r,loading:i,searchQuery:a,setSearchQuery:o,refreshAll:s,setManageOpen:c}=n,l;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,Q.jsx)(b,{className:`pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-fg-subtle`,"aria-hidden":!0}),t[0]=l):l=t[0];let u;t[1]===o?u=t[2]:(u=e=>o(e.target.value),t[1]=o,t[2]=u);let d=r.searchPlaceholder,f;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(f=M(`h-9 w-full rounded-lg border border-edge bg-surface-panel py-2 pl-9 pr-3 text-sm text-fg shadow-surface`,`placeholder:text-fg-subtle`,E.focusRingPanel),t[3]=f):f=t[3];let p;t[4]!==r.searchPlaceholder||t[5]!==a||t[6]!==u?(p=(0,Q.jsxs)(`div`,{className:`relative min-w-[12rem] flex-1 sm:max-w-xs`,children:[l,(0,Q.jsx)(`input`,{value:a,onChange:u,placeholder:d,className:f})]}),t[4]=r.searchPlaceholder,t[5]=a,t[6]=u,t[7]=p):p=t[7];let m;t[8]===c?m=t[9]:(m=()=>c(!0),t[8]=c,t[9]=m);let h;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,Q.jsx)(D,{className:`size-4`,"aria-hidden":!0}),t[10]=h):h=t[10];let g;t[11]!==r.addWorkflow||t[12]!==m?(g=(0,Q.jsxs)(I,{variant:`secondary`,onClick:m,children:[h,r.addWorkflow]}),t[11]=r.addWorkflow,t[12]=m,t[13]=g):g=t[13];let _=i&&`animate-spin`,v;t[14]===_?v=t[15]:(v=M(`size-4`,_),t[14]=_,t[15]=v);let y;t[16]===v?y=t[17]:(y=(0,Q.jsx)(C,{className:v,"aria-hidden":!0}),t[16]=v,t[17]=y);let x;t[18]!==r.refresh||t[19]!==i||t[20]!==s||t[21]!==y?(x=(0,Q.jsxs)(I,{variant:`secondary`,onClick:s,disabled:i,children:[y,r.refresh]}),t[18]=r.refresh,t[19]=i,t[20]=s,t[21]=y,t[22]=x):x=t[22];let S;return t[23]!==x||t[24]!==p||t[25]!==g?(S=(0,Q.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[p,g,x]}),t[23]=x,t[24]=p,t[25]=g,t[26]=S):S=t[26],S}function Ke(e){let t=(0,W.c)(173),{vm:n}=e,{language:r,localeTag:i,labels:a,hasToken:o,mainTab:s,setMainTab:c,categoryFilter:l,setCategoryFilter:u,sourceFilter:d,setSourceFilter:f,filteredDefinitions:p,activeRuns:m,visibleRuns:h,selectedRunId:g,selectRun:_,startDefinition:v,setStartDefinition:b,detailDefinition:x,setDetailDefinition:S,manageOpen:C,setManageOpen:w,actionError:T,actionFeedback:E,starting:D,savingWorkflow:O,loading:k,error:A,searchQuery:M,stats:N,runView:P,runLoading:F,submitStart:L,cancelSelectedRun:R,retrySelectedRun:z,saveCustomWorkflow:B,removeCustomWorkflow:ee}=n,V=y(Je),H=y(qe),G;t[0]!==H||t[1]!==o||t[2]!==V||t[3]!==n?(G=()=>{if(!o){H();return}return V({startExtra:null,main:null,end:(0,Q.jsx)(Ge,{vm:n})}),()=>H()},t[0]=H,t[1]=o,t[2]=V,t[3]=n,t[4]=G):G=t[4];let te;if(t[5]!==H||t[6]!==o||t[7]!==k||t[8]!==M||t[9]!==V||t[10]!==n.refreshAll||t[11]!==n.setManageOpen||t[12]!==n.setSearchQuery?(te=[H,o,k,M,V,n.refreshAll,n.setManageOpen,n.setSearchQuery],t[5]=H,t[6]=o,t[7]=k,t[8]=M,t[9]=V,t[10]=n.refreshAll,t[11]=n.setManageOpen,t[12]=n.setSearchQuery,t[13]=te):te=t[13],(0,U.useLayoutEffect)(G,te),!o){let e;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,Q.jsx)(j,{className:`size-10 text-accent-fg`,"aria-hidden":!0}),t[14]=e):e=t[14];let n;t[15]===a.title?n=t[16]:(n=(0,Q.jsx)(`h1`,{className:`mt-4 text-xl font-semibold text-fg`,children:a.title}),t[15]=a.title,t[16]=n);let r;t[17]===a.needToken?r=t[18]:(r=(0,Q.jsx)(`p`,{className:`mt-2 max-w-md text-sm leading-6 text-fg-muted`,children:a.needToken}),t[17]=a.needToken,t[18]=r);let i;return t[19]!==n||t[20]!==r?(i=(0,Q.jsx)(`main`,{className:`min-h-0 flex-1 overflow-auto bg-surface-base`,children:(0,Q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col items-center px-4 py-16 text-center sm:px-8`,children:[e,n,r]})}),t[19]=n,t[20]=r,t[21]=i):i=t[21],i}let K;t[22]===a.title?K=t[23]:(K=(0,Q.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight text-fg`,children:a.title}),t[22]=a.title,t[23]=K);let q;t[24]===a.subtitle?q=t[25]:(q=(0,Q.jsx)(`p`,{className:`mt-1 max-w-2xl text-sm leading-6 text-fg-muted`,children:a.subtitle}),t[24]=a.subtitle,t[25]=q);let ne;t[26]!==K||t[27]!==q?(ne=(0,Q.jsxs)(`header`,{children:[K,q]}),t[26]=K,t[27]=q,t[28]=ne):ne=t[28];let J;t[29]===E?J=t[30]:(J=E?(0,Q.jsx)(`div`,{className:`rounded-xl border border-emerald-500/25 bg-emerald-500/10 px-3 py-2 text-sm text-emerald-800 dark:text-emerald-200`,children:E}):null,t[29]=E,t[30]=J);let re;t[31]!==T||t[32]!==A?(re=T??A?(0,Q.jsx)(`div`,{className:`rounded-xl border border-red-500/25 bg-red-500/10 px-3 py-2 text-sm text-red-700 dark:text-red-300`,children:T??A}):null,t[31]=T,t[32]=A,t[33]=re):re=t[33];let oe;t[34]!==r||t[35]!==N?(oe=(0,Q.jsx)(Ue,{stats:N,language:r}),t[34]=r,t[35]=N,t[36]=oe):oe=t[36];let se=s===`catalog`,ce;t[37]===c?ce=t[38]:(ce=()=>c(`catalog`),t[37]=c,t[38]=ce);let le;t[39]!==a.tabCatalog||t[40]!==ce||t[41]!==se?(le=(0,Q.jsx)(Ye,{active:se,onClick:ce,children:a.tabCatalog}),t[39]=a.tabCatalog,t[40]=ce,t[41]=se,t[42]=le):le=t[42];let Y=s===`active`,ue;t[43]===c?ue=t[44]:(ue=()=>c(`active`),t[43]=c,t[44]=ue);let de;t[45]===m.length?de=t[46]:(de=m.length>0?(0,Q.jsxs)(`span`,{className:`ml-1 tabular-nums text-fg-muted`,children:[`(`,m.length,`)`]}):null,t[45]=m.length,t[46]=de);let fe;t[47]!==a.tabActive||t[48]!==Y||t[49]!==ue||t[50]!==de?(fe=(0,Q.jsxs)(Ye,{active:Y,onClick:ue,children:[a.tabActive,de]}),t[47]=a.tabActive,t[48]=Y,t[49]=ue,t[50]=de,t[51]=fe):fe=t[51];let pe=s===`history`,X;t[52]===c?X=t[53]:(X=()=>c(`history`),t[52]=c,t[53]=X);let me;t[54]!==a.tabHistory||t[55]!==pe||t[56]!==X?(me=(0,Q.jsx)(Ye,{active:pe,onClick:X,children:a.tabHistory}),t[54]=a.tabHistory,t[55]=pe,t[56]=X,t[57]=me):me=t[57];let Z;t[58]!==a.navAria||t[59]!==le||t[60]!==fe||t[61]!==me?(Z=(0,Q.jsxs)(`div`,{className:`flex flex-wrap gap-x-1`,role:`tablist`,"aria-label":a.navAria,children:[le,fe,me]}),t[58]=a.navAria,t[59]=le,t[60]=fe,t[61]=me,t[62]=Z):Z=t[62];let he;t[63]!==l||t[64]!==a.categories||t[65]!==a.categoryFilterAria||t[66]!==a.sourceFilterAria||t[67]!==a.sources||t[68]!==s||t[69]!==u||t[70]!==f||t[71]!==d?(he=s===`catalog`?(0,Q.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Q.jsx)(Xe,{value:l,options:ie.map(e=>({value:e,label:a.categories[e]})),onChange:e=>u(e),ariaLabel:a.categoryFilterAria}),(0,Q.jsx)(Xe,{value:d,options:ae.map(e=>({value:e,label:a.sources[e]})),onChange:e=>f(e),ariaLabel:a.sourceFilterAria})]}):null,t[63]=l,t[64]=a.categories,t[65]=a.categoryFilterAria,t[66]=a.sourceFilterAria,t[67]=a.sources,t[68]=s,t[69]=u,t[70]=f,t[71]=d,t[72]=he):he=t[72];let ge;t[73]!==Z||t[74]!==he?(ge=(0,Q.jsxs)(`div`,{className:`flex flex-col gap-3 border-b border-edge-subtle pb-3 sm:flex-row sm:items-center sm:justify-between`,children:[Z,he]}),t[73]=Z,t[74]=he,t[75]=ge):ge=t[75];let _e=s!==`catalog`,ve;t[76]!==p||t[77]!==a.addWorkflow||t[78]!==a.noDefinitions||t[79]!==a.noDefinitionsHint||t[80]!==r||t[81]!==ee||t[82]!==S||t[83]!==w||t[84]!==b?(ve=p.length===0?(0,Q.jsx)(Qe,{title:a.noDefinitions,hint:a.noDefinitionsHint,children:(0,Q.jsx)(I,{variant:`primary`,onClick:()=>w(!0),children:a.addWorkflow})}):(0,Q.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2 xl:grid-cols-3`,children:p.map(e=>(0,Q.jsx)(be,{definition:e,language:r,onRun:()=>b(e),onDetail:()=>S(e),onDelete:e.metadata.source===`user`?()=>void ee(e):void 0},e.id))}),t[76]=p,t[77]=a.addWorkflow,t[78]=a.noDefinitions,t[79]=a.noDefinitionsHint,t[80]=r,t[81]=ee,t[82]=S,t[83]=w,t[84]=b,t[85]=ve):ve=t[85];let ye;t[86]!==_e||t[87]!==ve?(ye=(0,Q.jsx)(`div`,{className:`space-y-6`,hidden:_e,children:ve}),t[86]=_e,t[87]=ve,t[88]=ye):ye=t[88];let xe=s===`catalog`,Se;t[89]!==a.historyRunsHeading||t[90]!==s?(Se=s===`history`?(0,Q.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:a.historyRunsHeading}):null,t[89]=a.historyRunsHeading,t[90]=s,t[91]=Se):Se=t[91];let Ce;t[92]!==a.browseCatalog||t[93]!==a.loading||t[94]!==a.noActiveRuns||t[95]!==a.noActiveRunsHint||t[96]!==a.noRuns||t[97]!==a.noRunsHint||t[98]!==r||t[99]!==k||t[100]!==i||t[101]!==s||t[102]!==_||t[103]!==g||t[104]!==c||t[105]!==h?(Ce=k&&h.length===0?(0,Q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:a.loading}):h.length===0?(0,Q.jsx)(Qe,{title:s===`active`?a.noActiveRuns:a.noRuns,hint:s===`active`?a.noActiveRunsHint:a.noRunsHint,children:(0,Q.jsx)(I,{variant:`primary`,onClick:()=>c(`catalog`),children:a.browseCatalog})}):h.map(e=>(0,Q.jsx)(Re,{run:e,selected:g===e.id,language:r,localeTag:i,onSelect:()=>_(e.id)},e.id)),t[92]=a.browseCatalog,t[93]=a.loading,t[94]=a.noActiveRuns,t[95]=a.noActiveRunsHint,t[96]=a.noRuns,t[97]=a.noRunsHint,t[98]=r,t[99]=k,t[100]=i,t[101]=s,t[102]=_,t[103]=g,t[104]=c,t[105]=h,t[106]=Ce):Ce=t[106];let Te;t[107]!==Se||t[108]!==Ce?(Te=(0,Q.jsxs)(`div`,{className:`space-y-3`,children:[Se,Ce]}),t[107]=Se,t[108]=Ce,t[109]=Te):Te=t[109];let Ee;t[110]===R?Ee=t[111]:(Ee=()=>void R(),t[110]=R,t[111]=Ee);let De;t[112]===z?De=t[113]:(De=()=>void z(),t[112]=z,t[113]=De);let Oe;t[114]!==r||t[115]!==i||t[116]!==F||t[117]!==P||t[118]!==Ee||t[119]!==De?(Oe=(0,Q.jsx)(Ae,{view:P,loading:F,language:r,localeTag:i,onCancel:Ee,onRetry:De}),t[114]=r,t[115]=i,t[116]=F,t[117]=P,t[118]=Ee,t[119]=De,t[120]=Oe):Oe=t[120];let ke;t[121]!==xe||t[122]!==Te||t[123]!==Oe?(ke=(0,Q.jsxs)(`div`,{className:`grid gap-6 xl:grid-cols-[minmax(16rem,0.75fr)_minmax(0,1.25fr)]`,hidden:xe,children:[Te,Oe]}),t[121]=xe,t[122]=Te,t[123]=Oe,t[124]=ke):ke=t[124];let je;t[125]!==ge||t[126]!==ye||t[127]!==ke?(je=(0,Q.jsxs)(`section`,{className:`flex flex-col gap-4`,children:[ge,ye,ke]}),t[125]=ge,t[126]=ye,t[127]=ke,t[128]=je):je=t[128];let Me;t[129]!==je||t[130]!==ne||t[131]!==J||t[132]!==re||t[133]!==oe?(Me=(0,Q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6 lg:px-6`,children:[ne,J,re,oe,je]}),t[129]=je,t[130]=ne,t[131]=J,t[132]=re,t[133]=oe,t[134]=Me):Me=t[134];let Ne=v!=null,Pe;t[135]===b?Pe=t[136]:(Pe=()=>b(null),t[135]=b,t[136]=Pe);let Fe;t[137]===L?Fe=t[138]:(Fe=e=>void L(e),t[137]=L,t[138]=Fe);let Ie;t[139]!==r||t[140]!==v||t[141]!==D||t[142]!==Ne||t[143]!==Pe||t[144]!==Fe?(Ie=(0,Q.jsx)(Be,{open:Ne,definition:v,language:r,starting:D,onClose:Pe,onStart:Fe}),t[139]=r,t[140]=v,t[141]=D,t[142]=Ne,t[143]=Pe,t[144]=Fe,t[145]=Ie):Ie=t[145];let Le=x!=null,ze;t[146]===S?ze=t[147]:(ze=()=>S(null),t[146]=S,t[147]=ze);let Ve;t[148]!==x||t[149]!==S||t[150]!==b?(Ve=()=>{x&&(S(null),b(x))},t[148]=x,t[149]=S,t[150]=b,t[151]=Ve):Ve=t[151];let He;t[152]!==x||t[153]!==r||t[154]!==Le||t[155]!==ze||t[156]!==Ve?(He=(0,Q.jsx)($,{open:Le,definition:x,language:r,onClose:ze,onRun:Ve}),t[152]=x,t[153]=r,t[154]=Le,t[155]=ze,t[156]=Ve,t[157]=He):He=t[157];let We;t[158]===w?We=t[159]:(We=()=>w(!1),t[158]=w,t[159]=We);let Ke;t[160]===B?Ke=t[161]:(Ke=e=>void B(e),t[160]=B,t[161]=Ke);let Ze;t[162]!==r||t[163]!==C||t[164]!==O||t[165]!==We||t[166]!==Ke?(Ze=(0,Q.jsx)(we,{open:C,language:r,saving:O,onClose:We,onSave:Ke}),t[162]=r,t[163]=C,t[164]=O,t[165]=We,t[166]=Ke,t[167]=Ze):Ze=t[167];let $e;return t[168]!==Me||t[169]!==Ie||t[170]!==He||t[171]!==Ze?($e=(0,Q.jsxs)(`main`,{className:`min-h-0 flex-1 overflow-auto bg-surface-base`,children:[Me,Ie,He,Ze]}),t[168]=Me,t[169]=Ie,t[170]=He,t[171]=Ze,t[172]=$e):$e=t[172],$e}function qe(e){return e.clearPageHeader}function Je(e){return e.setPageHeader}function Ye(e){let t=(0,W.c)(8),{active:n,onClick:r,children:i}=e,a=n?`text-fg`:`text-fg-muted hover:text-fg`,o=n&&`after:absolute after:bottom-0 after:left-1/2 after:h-0.5 after:w-9 after:-translate-x-1/2 after:rounded-full after:bg-accent`,s;t[0]!==a||t[1]!==o?(s=M(`relative rounded-md px-3 py-2 text-sm font-medium transition-colors`,a,o),t[0]=a,t[1]=o,t[2]=s):s=t[2];let c;return t[3]!==n||t[4]!==i||t[5]!==r||t[6]!==s?(c=(0,Q.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":n,onClick:r,className:s,children:i}),t[3]=n,t[4]=i,t[5]=r,t[6]=s,t[7]=c):c=t[7],c}function Xe(e){let t=(0,W.c)(10),{value:n,options:r,onChange:i,ariaLabel:a}=e,o;t[0]===i?o=t[1]:(o=e=>i(e.target.value),t[0]=i,t[1]=o);let s;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=M(`h-9 rounded-lg border border-edge bg-surface-panel px-2.5 text-xs font-medium text-fg shadow-surface`,E.focusRingPanel),t[2]=s):s=t[2];let c;t[3]===r?c=t[4]:(c=r.map(Ze),t[3]=r,t[4]=c);let l;return t[5]!==a||t[6]!==o||t[7]!==c||t[8]!==n?(l=(0,Q.jsx)(`select`,{value:n,"aria-label":a,onChange:o,className:s,children:c}),t[5]=a,t[6]=o,t[7]=c,t[8]=n,t[9]=l):l=t[9],l}function Ze(e){return(0,Q.jsx)(`option`,{value:e.value,children:e.label},e.value)}function Qe(e){let t=(0,W.c)(10),{title:n,hint:r,children:i}=e,a;t[0]===n?a=t[1]:(a=(0,Q.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:n}),t[0]=n,t[1]=a);let o;t[2]===r?o=t[3]:(o=(0,Q.jsx)(`p`,{className:`mx-auto mt-2 max-w-md text-sm leading-6 text-fg-muted`,children:r}),t[2]=r,t[3]=o);let s;t[4]===i?s=t[5]:(s=i?(0,Q.jsx)(`div`,{className:`mt-4 flex justify-center`,children:i}):null,t[4]=i,t[5]=s);let c;return t[6]!==a||t[7]!==o||t[8]!==s?(c=(0,Q.jsxs)(`div`,{className:`rounded-2xl border border-dashed border-edge bg-surface-panel/40 px-6 py-10 text-center`,children:[a,o,s]}),t[6]=a,t[7]=o,t[8]=s,t[9]=c):c=t[9],c}async function $e(){return(await g(o(`/api/workflows/definitions`))).definitions??[]}async function et(e,t){return(await g(o(`/api/workflows/definitions`),{method:`POST`,body:JSON.stringify({name:e,script:t})})).definition}async function tt(e){await g(o(`/api/workflows/definitions/${encodeURIComponent(e)}`),{method:`DELETE`})}async function nt(){return(await g(o(`/api/workflows/stats`))).stats}async function rt(e=50){return(await g(o(`/api/workflows/runs?limit=${e}`))).runs??[]}async function it(e){return(await g(o(`/api/workflows/runs/${encodeURIComponent(e)}`))).view}async function at(e){return g(o(`/api/workflows/runs`),{method:`POST`,body:JSON.stringify(e)})}async function ot(e){await g(o(`/api/workflows/runs/${encodeURIComponent(e)}/cancel`),{method:`POST`})}async function st(e){return g(o(`/api/workflows/runs/${encodeURIComponent(e)}/retry`),{method:`POST`})}function ct(e){let t=e.get(`tab`);return re.has(t??``)?t:`catalog`}function lt(){let e=i(e=>e.language),t=a(e).workflows,n=e===`zh`?`zh-CN`:`en-US`,r=h(e=>e.token),o=!!r,[c,l]=ee(),u=ct(c),d=c.get(`q`)??``,f=c.get(`run`)?.trim()??``,p=u===`catalog`?``:f,[m,g]=(0,U.useState)(`all`),[_,v]=(0,U.useState)(`all`),[y,b]=(0,U.useState)(null),[x,S]=(0,U.useState)(null),[C,w]=(0,U.useState)(!1),[T,E]=(0,U.useState)(null),[D,O]=(0,U.useState)(null),[k,A]=(0,U.useState)(!1),[j,M]=(0,U.useState)(!1),N=s(o?[`workflow-definitions`,r]:null,$e,{revalidateOnFocus:!1}),P=s(o?[`workflow-runs`,r]:null,()=>rt(100),{revalidateOnFocus:!1}),F=s(o?[`workflow-stats`,r]:null,nt,{revalidateOnFocus:!1}),I=s(o&&p?[`workflow-run`,p,r]:null,()=>it(p),{revalidateOnFocus:!1,keepPreviousData:!1,refreshInterval:e=>e&&(e.run.status===`queued`||e.run.status===`running`)?3e3:0});(0,U.useEffect)(()=>{if(!D)return;let e=window.setTimeout(()=>O(null),4e3);return()=>window.clearTimeout(e)},[D]);let L=N.data??[],R=P.data??[],z=(0,U.useMemo)(()=>Z(L,d,m,_),[L,d,m,_]),B=(0,U.useMemo)(()=>he(R,`active`),[R]),V=(0,U.useMemo)(()=>he(R,`history`),[R]),H=u===`active`?B:V,W=(0,U.useCallback)(e=>{l(t=>{let n=new URLSearchParams(t);return e(n,t),n},{replace:!0})},[l]),G=(0,U.useCallback)(e=>{W(t=>{if(t.set(`tab`,e),e===`catalog`){t.delete(`run`);return}let n=e===`active`?B:V,r=t.get(`run`)?.trim();r&&n.some(e=>e.id===r)||(n[0]?.id?t.set(`run`,n[0].id):P.isLoading||t.delete(`run`))})},[B,V,W,P.isLoading]),te=(0,U.useCallback)(e=>{W(t=>{let n=e.trim();n?t.set(`q`,n):t.delete(`q`)})},[W]),K=(0,U.useCallback)(e=>{W(t=>{t.set(`run`,e)})},[W]);(0,U.useEffect)(()=>{u!==`catalog`||!f||W(e=>{e.delete(`run`)})},[u,W,f]),(0,U.useEffect)(()=>{let e=c.get(`def`),t=c.get(oe)===`1`;if(!e||!L.length)return;let n=L.find(t=>t.id===e||t.name===e);n&&(t?b(n):S(n))},[L,c]),(0,U.useEffect)(()=>{if(c.get(`tab`)||!f||!R.length)return;let e=R.find(e=>e.id===f);if(!e)return;let t=le.has(e.status)?`active`:`history`;W(e=>{e.set(`tab`,t),e.set(`run`,f)})},[W,f,R,c]),(0,U.useEffect)(()=>{if(u===`catalog`||P.isLoading)return;let e=u===`active`?B:V;if(!e.length){f&&W(e=>{e.delete(`run`)});return}f&&e.some(e=>e.id===f)||W(t=>{t.set(`run`,e[0].id)})},[B,V,u,W,f,P.isLoading]),(0,U.useEffect)(()=>{let e=()=>void P.mutate(),t=e=>{let t=e.detail;P.mutate(),F.mutate(),t?.runId&&t.runId===p&&I.mutate(t.view,{revalidate:!1})};return window.addEventListener(`workflow-event-appended`,e),window.addEventListener(`workflow-run-updated`,t),window.addEventListener(`workflow-run-error`,e),()=>{window.removeEventListener(`workflow-event-appended`,e),window.removeEventListener(`workflow-run-updated`,t),window.removeEventListener(`workflow-run-error`,e)}},[I,P,p,F]);let q=(0,U.useCallback)(()=>{N.mutate(),P.mutate(),F.mutate(),I.mutate()},[N,I,P,F]),ne=(0,U.useCallback)(async e=>{if(y){A(!0),E(null);try{let n=await at({definitionId:y.id,goal:e.goal,input:e.input,concurrency:e.concurrency,maxSubagents:e.maxSubagents});b(null),W(e=>{e.set(`tab`,`active`),e.set(`run`,n.runId)}),await P.mutate(),await F.mutate(),O(t.startSuccess)}catch(e){E(e instanceof Error?e.message:t.startFailed)}finally{A(!1)}}},[t.startFailed,t.startSuccess,W,P,y,F]),J=(0,U.useCallback)(async()=>{if(p)try{await ot(p),await P.mutate(),await I.mutate()}catch(e){let n=e instanceof Error?e.message:t.cancelFailed;if(/not active|already finished/i.test(n)){await P.mutate(),await I.mutate();return}E(n)}},[I,t.cancelFailed,P,p]),re=(0,U.useCallback)(async()=>{if(p)try{let e=await st(p);W(t=>{t.set(`tab`,`active`),t.set(`run`,e.runId)}),await P.mutate(),await F.mutate()}catch(e){E(e instanceof Error?e.message:t.retryFailed)}},[t.retryFailed,W,P,p,F]),ie=(0,U.useCallback)(async e=>{M(!0),E(null);try{await et(e.name,e.script),w(!1),await N.mutate(),O(t.saveWorkflowSuccess)}catch(e){E(e instanceof Error?e.message:t.saveWorkflowFailed)}finally{M(!1)}},[N,t.saveWorkflowFailed,t.saveWorkflowSuccess]),ae=(0,U.useCallback)(async e=>{if(e.metadata.source===`user`&&window.confirm(ue(t.deleteConfirm,{name:e.name}))){E(null);try{await tt(e.id),await N.mutate(),O(t.deleteWorkflowSuccess)}catch(e){E(e instanceof Error?e.message:t.deleteWorkflowFailed)}}},[N,t]),se=N.isLoading||P.isLoading,ce=N.error?.message??P.error?.message??null,Y=I.data?.run.id===p?I.data:void 0,de=!!p&&!Y&&I.isLoading;return{language:e,localeTag:n,labels:t,hasToken:o,mainTab:u,setMainTab:G,searchQuery:d,setSearchQuery:te,categoryFilter:m,setCategoryFilter:g,sourceFilter:_,setSourceFilter:v,filteredDefinitions:z,activeRuns:B,historyRuns:V,visibleRuns:H,selectedRunId:p,selectRun:K,startDefinition:y,setStartDefinition:b,detailDefinition:x,setDetailDefinition:S,manageOpen:C,setManageOpen:w,actionError:T,actionFeedback:D,starting:k,savingWorkflow:j,loading:se,error:ce,stats:F.data,runView:Y,runLoading:de,refreshAll:q,submitStart:ne,cancelSelectedRun:J,retrySelectedRun:re,saveCustomWorkflow:ie,removeCustomWorkflow:ae}}function ut(){let e=(0,W.c)(2),t=lt(),n;return e[0]===t?n=e[1]:(n=(0,Q.jsx)(Ke,{vm:t}),e[0]=t,e[1]=n),n}export{ut as WorkflowsPage};
@@ -9,17 +9,18 @@
9
9
  <link rel="icon" type="image/svg+xml" href="/logo.svg" />
10
10
  <link rel="apple-touch-icon" href="/logo.svg" />
11
11
  <title>xopc</title>
12
- <script type="module" crossorigin src="/assets/index-BmVYculr.js"></script>
12
+ <script type="module" crossorigin src="/assets/index-qNrVJp-y.js"></script>
13
13
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/vendor-codemirror-D0yxdRpg.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/dist-BTWC-BTN.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/vendor-swr-BIWyz7Rc.js">
18
- <link rel="modulepreload" crossorigin href="/assets/url-BwNL6Rgk.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/url-D6jvVYIA.js">
19
19
  <link rel="modulepreload" crossorigin href="/assets/createLucideIcon-DPHK1VkS.js">
20
- <link rel="modulepreload" crossorigin href="/assets/theme-store-DryYl3qD.js">
21
- <link rel="modulepreload" crossorigin href="/assets/fetch-B2MYHbWg.js">
22
- <link rel="stylesheet" crossorigin href="/assets/index-ew_2L2We.css">
20
+ <link rel="modulepreload" crossorigin href="/assets/copy-SxMW6Xpc.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/theme-store-BbRc5ugR.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/fetch-BaFNUtkE.js">
23
+ <link rel="stylesheet" crossorigin href="/assets/index-CqZzHNEg.css">
23
24
  </head>
24
25
  <body>
25
26
  <div id="root"></div>
package/dist/package.js CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region package.json
2
- var version = "0.0.86";
2
+ var version = "0.0.88";
3
3
  //#endregion
4
4
  export { version };
5
5
 
@@ -1,14 +1,14 @@
1
- import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
2
- import { applyConfigOverrides } from "../config/runtime-overrides.js";
1
+ import { createLogger } from "../utils/logger/index.js";
2
+ import { init_logger } from "../utils/logger.js";
3
3
  import { resolveStateDir } from "../config/paths-state.js";
4
4
  import { expandWorkspacePathString, init_workspace_path } from "../config/workspace-path.js";
5
5
  import { init_agent_scope, resolveAgentProfileDir } from "./agent-scope.js";
6
- import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
7
- import { createLogger } from "../utils/logger/index.js";
8
- import { init_logger } from "../utils/logger.js";
9
6
  import { init_paths, resolveBundledSkillsDir } from "../config/paths.js";
10
- import { init_sync_provider_auth, resolveProviderApiKeySync } from "../auth/sync-provider-auth.js";
11
7
  import { CredentialResolver, init_credentials } from "../auth/credentials.js";
8
+ import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
9
+ import { init_sync_provider_auth, resolveProviderApiKeySync } from "../auth/sync-provider-auth.js";
10
+ import { applyConfigOverrides } from "../config/runtime-overrides.js";
11
+ import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
12
12
  import { getApiKeySync, getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
13
13
  import { createExtensionAwareStreamFn } from "../providers/extension-stream-bridge.js";
14
14
  import { extractTextContent, loadProfileMarkdownFiles } from "./context/workspace.js";
@@ -27,8 +27,8 @@ import { isUnderManagedSkillsDir } from "./skills/managed-store.js";
27
27
  import { MemoryPrefetchCoordinator } from "./memory/prefetch-coordinator.js";
28
28
  import { WorkspaceRuntimeRegistry } from "./workspace-runtime/registry.js";
29
29
  import { BackgroundReviewCoordinator } from "./background-review/coordinator.js";
30
- import { Agent } from "@earendil-works/pi-agent-core";
31
30
  import { basename, resolve, sep } from "node:path";
31
+ import { Agent } from "@earendil-works/pi-agent-core";
32
32
  //#region src/agent/agent-manager.ts
33
33
  /**
34
34
  * Agent Manager - Manages Agent instances per session
@@ -39,6 +39,10 @@ export declare function resolveAgentProfileDir(cfg: Config, agentId: string): st
39
39
  /** Resolved path for a single profile Markdown basename (e.g. `SOUL.md`). */
40
40
  export declare function resolveAgentProfileMarkdownPath(cfg: Config, agentId: string, filename: string): string;
41
41
  export declare function resolveSessionsDir(cfg: Config, agentId: string): string;
42
+ /** Agent ids whose workspace root contains `workspacePath` (longest match first). */
43
+ export declare function resolveAgentIdsByWorkspacePath(cfg: Config, workspacePath: string): string[];
44
+ /** Best-matching agent id for cwd, or `undefined` when no workspace contains the path. */
45
+ export declare function resolveAgentIdByWorkspacePath(cfg: Config, workspacePath: string): string | undefined;
42
46
  /**
43
47
  * Find the agent id whose resolved markdown workspace matches `resolvedWorkspacePath`.
44
48
  * Falls back to {@link resolveDefaultAgentId} when no list entry matches.
@@ -2,7 +2,8 @@ import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
3
3
  import { expandWorkspacePathString, init_workspace_path } from "../config/workspace-path.js";
4
4
  import { init_workspace_defaults, resolveDefaultAgentWorkspaceDir } from "../config/workspace-defaults.js";
5
- import { basename, join, resolve } from "node:path";
5
+ import fs from "node:fs";
6
+ import { basename, isAbsolute, join, relative, resolve } from "node:path";
6
7
  //#region src/agent/agent-scope.ts
7
8
  /**
8
9
  * Agent path and list resolution (config is the single source of truth).
@@ -121,19 +122,61 @@ function resolveAgentProfileMarkdownPath(cfg, agentId, filename) {
121
122
  function resolveSessionsDir(cfg, agentId) {
122
123
  return join(resolveAgentHomeDir(cfg, agentId), "sessions");
123
124
  }
125
+ function normalizePathForComparison(input) {
126
+ const resolved = resolve(resolveUserPath(input));
127
+ let normalized = resolved;
128
+ try {
129
+ normalized = fs.realpathSync.native(resolved);
130
+ } catch {}
131
+ if (process.platform === "win32") return normalized.toLowerCase();
132
+ return normalized;
133
+ }
134
+ function isPathWithinRoot(candidatePath, rootPath) {
135
+ const rel = relative(rootPath, candidatePath);
136
+ return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
137
+ }
138
+ /** Agent ids whose workspace root contains `workspacePath` (longest match first). */
139
+ function resolveAgentIdsByWorkspacePath(cfg, workspacePath) {
140
+ const normalizedWorkspacePath = normalizePathForComparison(workspacePath);
141
+ const entries = listAgentEntries(cfg);
142
+ const matches = [];
143
+ for (let index = 0; index < entries.length; index += 1) {
144
+ const entry = entries[index];
145
+ const id = normalizeAgentId(entry.id);
146
+ const workspaceDir = normalizePathForComparison(resolveAgentWorkspaceDir(cfg, id));
147
+ if (!isPathWithinRoot(normalizedWorkspacePath, workspaceDir)) continue;
148
+ matches.push({
149
+ id,
150
+ workspaceDir,
151
+ order: index
152
+ });
153
+ }
154
+ const defaultId = resolveDefaultAgentId(cfg);
155
+ if (!entries.some((e) => normalizeAgentId(e.id) === defaultId)) {
156
+ const workspaceDir = normalizePathForComparison(resolveAgentWorkspaceDir(cfg, defaultId));
157
+ if (isPathWithinRoot(normalizedWorkspacePath, workspaceDir)) matches.push({
158
+ id: defaultId,
159
+ workspaceDir,
160
+ order: entries.length
161
+ });
162
+ }
163
+ matches.sort((left, right) => {
164
+ const workspaceLengthDelta = right.workspaceDir.length - left.workspaceDir.length;
165
+ if (workspaceLengthDelta !== 0) return workspaceLengthDelta;
166
+ return left.order - right.order;
167
+ });
168
+ return matches.map((entry) => entry.id);
169
+ }
170
+ /** Best-matching agent id for cwd, or `undefined` when no workspace contains the path. */
171
+ function resolveAgentIdByWorkspacePath(cfg, workspacePath) {
172
+ return resolveAgentIdsByWorkspacePath(cfg, workspacePath)[0];
173
+ }
124
174
  /**
125
175
  * Find the agent id whose resolved markdown workspace matches `resolvedWorkspacePath`.
126
176
  * Falls back to {@link resolveDefaultAgentId} when no list entry matches.
127
177
  */
128
178
  function resolveAgentIdForWorkspacePath(cfg, resolvedWorkspacePath) {
129
- const target = resolveUserPath(resolvedWorkspacePath);
130
- for (const e of listAgentEntries(cfg)) {
131
- const id = normalizeAgentId(e.id);
132
- if (resolveAgentWorkspaceDir(cfg, id) === target) return id;
133
- }
134
- const def = resolveDefaultAgentId(cfg);
135
- if (resolveAgentWorkspaceDir(cfg, def) === target) return def;
136
- return def;
179
+ return resolveAgentIdByWorkspacePath(cfg, resolvedWorkspacePath) ?? resolveDefaultAgentId(cfg);
137
180
  }
138
181
  function getDefaultWorkspacePath(cfg) {
139
182
  return resolveAgentWorkspaceDir(cfg, resolveDefaultAgentId(cfg));
@@ -176,6 +219,6 @@ var init_agent_scope = __esmMin((() => {
176
219
  }));
177
220
  //#endregion
178
221
  init_agent_scope();
179
- export { DEFAULT_AGENT_ID, STRICT_AGENT_ID_RE, getDefaultWorkspacePath, init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentHomeDir, resolveAgentIdForWorkspacePath, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveSessionsDir, resolveUserPath, validateAgentIdForNewAgent };
222
+ export { DEFAULT_AGENT_ID, STRICT_AGENT_ID_RE, getDefaultWorkspacePath, init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentHomeDir, resolveAgentIdByWorkspacePath, resolveAgentIdForWorkspacePath, resolveAgentIdsByWorkspacePath, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveSessionsDir, resolveUserPath, validateAgentIdForNewAgent };
180
223
 
181
224
  //# sourceMappingURL=agent-scope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-scope.js","names":[],"sources":["../../../src/agent/agent-scope.ts"],"sourcesContent":["/**\n * Agent path and list resolution (config is the single source of truth).\n */\n\nimport { basename, join, resolve } from 'node:path';\n\nimport type { Config } from '../config/schema.js';\nimport { resolveStateDir } from '../config/paths-state.js';\nimport { expandWorkspacePathString } from '../config/workspace-path.js';\nimport { resolveDefaultAgentWorkspaceDir } from '../config/workspace-defaults.js';\n\nexport const DEFAULT_AGENT_ID = 'main';\n\nconst VALID_ID_RE = /^[a-z0-9][a-z0-9_-]{0,63}$/i;\nconst INVALID_CHARS_RE = /[^a-z0-9_-]+/g;\nconst LEADING_DASH_RE = /^-+/;\nconst TRAILING_DASH_RE = /-+$/;\n\n/** Normalized id segment safe for directory names under `agents/<id>/`. */\nexport const STRICT_AGENT_ID_RE = /^[a-z0-9][a-z0-9_-]{0,63}$/;\n\nconst WINDOWS_RESERVED_AGENT_IDS = new Set<string>([\n 'con',\n 'prn',\n 'aux',\n 'nul',\n 'com1',\n 'com2',\n 'com3',\n 'com4',\n 'com5',\n 'com6',\n 'com7',\n 'com8',\n 'com9',\n 'lpt1',\n 'lpt2',\n 'lpt3',\n 'lpt4',\n 'lpt5',\n 'lpt6',\n 'lpt7',\n 'lpt8',\n 'lpt9',\n]);\n\nfunction normalizeLowercaseStringOrEmpty(s: string): string {\n return s.trim().toLowerCase();\n}\n\n/** Path-safe agent id. */\nexport function normalizeAgentId(value: string | undefined | null): string {\n const trimmed = (value ?? '').trim();\n if (!trimmed) {\n return DEFAULT_AGENT_ID;\n }\n const normalized = normalizeLowercaseStringOrEmpty(trimmed);\n if (VALID_ID_RE.test(trimmed)) {\n return normalized;\n }\n return (\n normalized\n .replace(INVALID_CHARS_RE, '-')\n .replace(LEADING_DASH_RE, '')\n .replace(TRAILING_DASH_RE, '')\n .slice(0, 64) || DEFAULT_AGENT_ID\n );\n}\n\n/**\n * Validate agent id for new agents (folder-safe path segment).\n * When `explicitId` is set, it must already match {@link STRICT_AGENT_ID_RE} (case-insensitive input, stored lowercase).\n * When omitted, id is derived from `displayNameForDerivation` via {@link normalizeAgentId}.\n */\nexport function validateAgentIdForNewAgent(\n explicitId: string | undefined | null,\n displayNameForDerivation: string,\n): { ok: true; agentId: string } | { ok: false; error: string } {\n const explicit = explicitId?.trim();\n if (explicit) {\n const id = explicit.toLowerCase();\n if (!STRICT_AGENT_ID_RE.test(id)) {\n return {\n ok: false,\n error:\n 'Invalid agent id: use 1–64 characters; letters, digits, underscores, and hyphens only; start with a letter or digit.',\n };\n }\n if (id === DEFAULT_AGENT_ID) {\n return { ok: false, error: `\"${DEFAULT_AGENT_ID}\" is reserved` };\n }\n if (WINDOWS_RESERVED_AGENT_IDS.has(id)) {\n return { ok: false, error: `Agent id \"${id}\" is reserved (Windows device name).` };\n }\n return { ok: true, agentId: id };\n }\n\n const agentId = normalizeAgentId(displayNameForDerivation.trim());\n if (agentId === DEFAULT_AGENT_ID) {\n return {\n ok: false,\n error:\n 'Display name cannot produce a valid agent folder id. Set an explicit Agent id (letters, digits, underscores, hyphens only).',\n };\n }\n if (WINDOWS_RESERVED_AGENT_IDS.has(agentId)) {\n return {\n ok: false,\n error: `That display name resolves to \"${agentId}\", which is reserved. Use a different display name or set an explicit Agent id.`,\n };\n }\n if (!STRICT_AGENT_ID_RE.test(agentId)) {\n return {\n ok: false,\n error:\n 'Could not derive a folder-safe agent id from the display name. Set an explicit Agent id (letters, digits, underscores, hyphens only).',\n };\n }\n return { ok: true, agentId };\n}\n\n/** Expand `~` and resolve to an absolute path. */\nexport function resolveUserPath(raw: string): string {\n const expanded = expandWorkspacePathString(raw.trim());\n return resolve(expanded);\n}\n\ntype AgentEntry = NonNullable<NonNullable<Config['agents']>['list']>[number];\n\nexport function listAgentEntries(cfg: Config): AgentEntry[] {\n const list = cfg.agents?.list;\n if (!Array.isArray(list)) {\n return [];\n }\n return list.filter((e): e is AgentEntry => Boolean(e && typeof e === 'object'));\n}\n\nexport function resolveDefaultAgentId(cfg: Config): string {\n const explicit = cfg.agents?.default?.trim();\n if (explicit) {\n return normalizeAgentId(explicit);\n }\n const agents = listAgentEntries(cfg);\n if (agents.length === 0) {\n return DEFAULT_AGENT_ID;\n }\n const defaults = agents.filter((a) => a?.default === true);\n const chosen = (defaults[0] ?? agents[0])?.id?.trim();\n return chosen ? normalizeAgentId(chosen) : DEFAULT_AGENT_ID;\n}\n\nfunction resolveAgentEntry(cfg: Config, agentId: string): AgentEntry | undefined {\n const id = normalizeAgentId(agentId);\n return listAgentEntries(cfg).find((e) => normalizeAgentId(e.id) === id);\n}\n\n/**\n * Markdown workspace root for an agent.\n */\nexport function resolveAgentWorkspaceDir(cfg: Config, agentId: string): string {\n const id = normalizeAgentId(agentId);\n const configured = resolveAgentEntry(cfg, id)?.workspace?.trim();\n if (configured) {\n return resolveUserPath(configured);\n }\n const defaultAgentId = resolveDefaultAgentId(cfg);\n const fallback = cfg.agents?.defaults?.workspace?.trim();\n if (fallback) {\n return join(resolveUserPath(fallback), id);\n }\n if (id === defaultAgentId) {\n return resolveDefaultAgentWorkspaceDir(process.env);\n }\n const stateDir = resolveStateDir(process.env);\n return join(stateDir, `workspace-${id}`);\n}\n\n/**\n * Internal agent state dir: credentials, `agent.json`, pid, inbox (`…/agent/`).\n */\nexport function resolveAgentDir(cfg: Config, agentId: string): string {\n const id = normalizeAgentId(agentId);\n const configured = resolveAgentEntry(cfg, id)?.agentDir?.trim();\n if (configured) {\n return resolveUserPath(configured);\n }\n const root = resolveStateDir(process.env);\n return join(root, 'agents', id, 'agent');\n}\n\n/** Parent of `sessions/` and `agent/`: `<stateDir>/agents/<id>/`. */\nexport function resolveAgentHomeDir(cfg: Config, agentId: string): string {\n return join(resolveStateDir(process.env), 'agents', normalizeAgentId(agentId));\n}\n\n/** Profile Markdown + gateway avatar files: `<stateDir>/agents/<id>/profile/`. */\nexport function resolveAgentProfileDir(cfg: Config, agentId: string): string {\n return join(resolveAgentHomeDir(cfg, agentId), 'profile');\n}\n\n/** Resolved path for a single profile Markdown basename (e.g. `SOUL.md`). */\nexport function resolveAgentProfileMarkdownPath(cfg: Config, agentId: string, filename: string): string {\n const base = basename(filename.trim().replace(/\\\\/g, '/'));\n return join(resolveAgentProfileDir(cfg, agentId), base);\n}\n\nexport function resolveSessionsDir(cfg: Config, agentId: string): string {\n return join(resolveAgentHomeDir(cfg, agentId), 'sessions');\n}\n\n/**\n * Find the agent id whose resolved markdown workspace matches `resolvedWorkspacePath`.\n * Falls back to {@link resolveDefaultAgentId} when no list entry matches.\n */\nexport function resolveAgentIdForWorkspacePath(cfg: Config, resolvedWorkspacePath: string): string {\n const target = resolveUserPath(resolvedWorkspacePath);\n for (const e of listAgentEntries(cfg)) {\n const id = normalizeAgentId(e.id);\n if (resolveAgentWorkspaceDir(cfg, id) === target) {\n return id;\n }\n }\n const def = resolveDefaultAgentId(cfg);\n if (resolveAgentWorkspaceDir(cfg, def) === target) {\n return def;\n }\n return def;\n}\n\nexport function getDefaultWorkspacePath(cfg: Config): string {\n return resolveAgentWorkspaceDir(cfg, resolveDefaultAgentId(cfg));\n}\n"],"mappings":";;;;;;;;;AA8CA,SAAS,gCAAgC,GAAmB;AAC1D,QAAO,EAAE,MAAM,CAAC,aAAa;;;AAI/B,SAAgB,iBAAiB,OAA0C;CACzE,MAAM,WAAW,SAAS,IAAI,MAAM;AACpC,KAAI,CAAC,QACH,QAAO;CAET,MAAM,aAAa,gCAAgC,QAAQ;AAC3D,KAAI,YAAY,KAAK,QAAQ,CAC3B,QAAO;AAET,QACE,WACG,QAAQ,kBAAkB,IAAI,CAC9B,QAAQ,iBAAiB,GAAG,CAC5B,QAAQ,kBAAkB,GAAG,CAC7B,MAAM,GAAG,GAAG,IAAA;;;;;;;AASnB,SAAgB,2BACd,YACA,0BAC8D;CAC9D,MAAM,WAAW,YAAY,MAAM;AACnC,KAAI,UAAU;EACZ,MAAM,KAAK,SAAS,aAAa;AACjC,MAAI,CAAC,mBAAmB,KAAK,GAAG,CAC9B,QAAO;GACL,IAAI;GACJ,OACE;GACH;AAEH,MAAI,OAAA,OACF,QAAO;GAAE,IAAI;GAAO,OAAO,IAAI,iBAAiB;GAAgB;AAElE,MAAI,2BAA2B,IAAI,GAAG,CACpC,QAAO;GAAE,IAAI;GAAO,OAAO,aAAa,GAAG;GAAuC;AAEpF,SAAO;GAAE,IAAI;GAAM,SAAS;GAAI;;CAGlC,MAAM,UAAU,iBAAiB,yBAAyB,MAAM,CAAC;AACjE,KAAI,YAAA,OACF,QAAO;EACL,IAAI;EACJ,OACE;EACH;AAEH,KAAI,2BAA2B,IAAI,QAAQ,CACzC,QAAO;EACL,IAAI;EACJ,OAAO,kCAAkC,QAAQ;EAClD;AAEH,KAAI,CAAC,mBAAmB,KAAK,QAAQ,CACnC,QAAO;EACL,IAAI;EACJ,OACE;EACH;AAEH,QAAO;EAAE,IAAI;EAAM;EAAS;;;AAI9B,SAAgB,gBAAgB,KAAqB;AAEnD,QAAO,QADU,0BAA0B,IAAI,MAAM,CAC9B,CAAC;;AAK1B,SAAgB,iBAAiB,KAA2B;CAC1D,MAAM,OAAO,IAAI,QAAQ;AACzB,KAAI,CAAC,MAAM,QAAQ,KAAK,CACtB,QAAO,EAAE;AAEX,QAAO,KAAK,QAAQ,MAAuB,QAAQ,KAAK,OAAO,MAAM,SAAS,CAAC;;AAGjF,SAAgB,sBAAsB,KAAqB;CACzD,MAAM,WAAW,IAAI,QAAQ,SAAS,MAAM;AAC5C,KAAI,SACF,QAAO,iBAAiB,SAAS;CAEnC,MAAM,SAAS,iBAAiB,IAAI;AACpC,KAAI,OAAO,WAAW,EACpB,QAAO;CAGT,MAAM,UADW,OAAO,QAAQ,MAAM,GAAG,YAAY,KAC7B,CAAC,MAAM,OAAO,KAAK,IAAI,MAAM;AACrD,QAAO,SAAS,iBAAiB,OAAO,GAAG;;AAG7C,SAAS,kBAAkB,KAAa,SAAyC;CAC/E,MAAM,KAAK,iBAAiB,QAAQ;AACpC,QAAO,iBAAiB,IAAI,CAAC,MAAM,MAAM,iBAAiB,EAAE,GAAG,KAAK,GAAG;;;;;AAMzE,SAAgB,yBAAyB,KAAa,SAAyB;CAC7E,MAAM,KAAK,iBAAiB,QAAQ;CACpC,MAAM,aAAa,kBAAkB,KAAK,GAAG,EAAE,WAAW,MAAM;AAChE,KAAI,WACF,QAAO,gBAAgB,WAAW;CAEpC,MAAM,iBAAiB,sBAAsB,IAAI;CACjD,MAAM,WAAW,IAAI,QAAQ,UAAU,WAAW,MAAM;AACxD,KAAI,SACF,QAAO,KAAK,gBAAgB,SAAS,EAAE,GAAG;AAE5C,KAAI,OAAO,eACT,QAAO,gCAAgC,QAAQ,IAAI;AAGrD,QAAO,KADU,gBAAgB,QAAQ,IACrB,EAAE,aAAa,KAAK;;;;;AAM1C,SAAgB,gBAAgB,KAAa,SAAyB;CACpE,MAAM,KAAK,iBAAiB,QAAQ;CACpC,MAAM,aAAa,kBAAkB,KAAK,GAAG,EAAE,UAAU,MAAM;AAC/D,KAAI,WACF,QAAO,gBAAgB,WAAW;AAGpC,QAAO,KADM,gBAAgB,QAAQ,IACrB,EAAE,UAAU,IAAI,QAAQ;;;AAI1C,SAAgB,oBAAoB,KAAa,SAAyB;AACxE,QAAO,KAAK,gBAAgB,QAAQ,IAAI,EAAE,UAAU,iBAAiB,QAAQ,CAAC;;;AAIhF,SAAgB,uBAAuB,KAAa,SAAyB;AAC3E,QAAO,KAAK,oBAAoB,KAAK,QAAQ,EAAE,UAAU;;;AAI3D,SAAgB,gCAAgC,KAAa,SAAiB,UAA0B;CACtG,MAAM,OAAO,SAAS,SAAS,MAAM,CAAC,QAAQ,OAAO,IAAI,CAAC;AAC1D,QAAO,KAAK,uBAAuB,KAAK,QAAQ,EAAE,KAAK;;AAGzD,SAAgB,mBAAmB,KAAa,SAAyB;AACvE,QAAO,KAAK,oBAAoB,KAAK,QAAQ,EAAE,WAAW;;;;;;AAO5D,SAAgB,+BAA+B,KAAa,uBAAuC;CACjG,MAAM,SAAS,gBAAgB,sBAAsB;AACrD,MAAK,MAAM,KAAK,iBAAiB,IAAI,EAAE;EACrC,MAAM,KAAK,iBAAiB,EAAE,GAAG;AACjC,MAAI,yBAAyB,KAAK,GAAG,KAAK,OACxC,QAAO;;CAGX,MAAM,MAAM,sBAAsB,IAAI;AACtC,KAAI,yBAAyB,KAAK,IAAI,KAAK,OACzC,QAAO;AAET,QAAO;;AAGT,SAAgB,wBAAwB,KAAqB;AAC3D,QAAO,yBAAyB,KAAK,sBAAsB,IAAI,CAAC;;;;mBA/NP;sBACa;0BACU;AAErE,oBAAmB;AAE1B,eAAc;AACd,oBAAmB;AACnB,mBAAkB;AAClB,oBAAmB;AAGZ,sBAAqB;AAE5B,8BAA6B,IAAI,IAAY;EACjD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC"}
1
+ {"version":3,"file":"agent-scope.js","names":[],"sources":["../../../src/agent/agent-scope.ts"],"sourcesContent":["/**\n * Agent path and list resolution (config is the single source of truth).\n */\n\nimport fs from 'node:fs';\nimport { basename, join, relative, resolve, isAbsolute } from 'node:path';\n\nimport type { Config } from '../config/schema.js';\nimport { resolveStateDir } from '../config/paths-state.js';\nimport { expandWorkspacePathString } from '../config/workspace-path.js';\nimport { resolveDefaultAgentWorkspaceDir } from '../config/workspace-defaults.js';\n\nexport const DEFAULT_AGENT_ID = 'main';\n\nconst VALID_ID_RE = /^[a-z0-9][a-z0-9_-]{0,63}$/i;\nconst INVALID_CHARS_RE = /[^a-z0-9_-]+/g;\nconst LEADING_DASH_RE = /^-+/;\nconst TRAILING_DASH_RE = /-+$/;\n\n/** Normalized id segment safe for directory names under `agents/<id>/`. */\nexport const STRICT_AGENT_ID_RE = /^[a-z0-9][a-z0-9_-]{0,63}$/;\n\nconst WINDOWS_RESERVED_AGENT_IDS = new Set<string>([\n 'con',\n 'prn',\n 'aux',\n 'nul',\n 'com1',\n 'com2',\n 'com3',\n 'com4',\n 'com5',\n 'com6',\n 'com7',\n 'com8',\n 'com9',\n 'lpt1',\n 'lpt2',\n 'lpt3',\n 'lpt4',\n 'lpt5',\n 'lpt6',\n 'lpt7',\n 'lpt8',\n 'lpt9',\n]);\n\nfunction normalizeLowercaseStringOrEmpty(s: string): string {\n return s.trim().toLowerCase();\n}\n\n/** Path-safe agent id. */\nexport function normalizeAgentId(value: string | undefined | null): string {\n const trimmed = (value ?? '').trim();\n if (!trimmed) {\n return DEFAULT_AGENT_ID;\n }\n const normalized = normalizeLowercaseStringOrEmpty(trimmed);\n if (VALID_ID_RE.test(trimmed)) {\n return normalized;\n }\n return (\n normalized\n .replace(INVALID_CHARS_RE, '-')\n .replace(LEADING_DASH_RE, '')\n .replace(TRAILING_DASH_RE, '')\n .slice(0, 64) || DEFAULT_AGENT_ID\n );\n}\n\n/**\n * Validate agent id for new agents (folder-safe path segment).\n * When `explicitId` is set, it must already match {@link STRICT_AGENT_ID_RE} (case-insensitive input, stored lowercase).\n * When omitted, id is derived from `displayNameForDerivation` via {@link normalizeAgentId}.\n */\nexport function validateAgentIdForNewAgent(\n explicitId: string | undefined | null,\n displayNameForDerivation: string,\n): { ok: true; agentId: string } | { ok: false; error: string } {\n const explicit = explicitId?.trim();\n if (explicit) {\n const id = explicit.toLowerCase();\n if (!STRICT_AGENT_ID_RE.test(id)) {\n return {\n ok: false,\n error:\n 'Invalid agent id: use 1–64 characters; letters, digits, underscores, and hyphens only; start with a letter or digit.',\n };\n }\n if (id === DEFAULT_AGENT_ID) {\n return { ok: false, error: `\"${DEFAULT_AGENT_ID}\" is reserved` };\n }\n if (WINDOWS_RESERVED_AGENT_IDS.has(id)) {\n return { ok: false, error: `Agent id \"${id}\" is reserved (Windows device name).` };\n }\n return { ok: true, agentId: id };\n }\n\n const agentId = normalizeAgentId(displayNameForDerivation.trim());\n if (agentId === DEFAULT_AGENT_ID) {\n return {\n ok: false,\n error:\n 'Display name cannot produce a valid agent folder id. Set an explicit Agent id (letters, digits, underscores, hyphens only).',\n };\n }\n if (WINDOWS_RESERVED_AGENT_IDS.has(agentId)) {\n return {\n ok: false,\n error: `That display name resolves to \"${agentId}\", which is reserved. Use a different display name or set an explicit Agent id.`,\n };\n }\n if (!STRICT_AGENT_ID_RE.test(agentId)) {\n return {\n ok: false,\n error:\n 'Could not derive a folder-safe agent id from the display name. Set an explicit Agent id (letters, digits, underscores, hyphens only).',\n };\n }\n return { ok: true, agentId };\n}\n\n/** Expand `~` and resolve to an absolute path. */\nexport function resolveUserPath(raw: string): string {\n const expanded = expandWorkspacePathString(raw.trim());\n return resolve(expanded);\n}\n\ntype AgentEntry = NonNullable<NonNullable<Config['agents']>['list']>[number];\n\nexport function listAgentEntries(cfg: Config): AgentEntry[] {\n const list = cfg.agents?.list;\n if (!Array.isArray(list)) {\n return [];\n }\n return list.filter((e): e is AgentEntry => Boolean(e && typeof e === 'object'));\n}\n\nexport function resolveDefaultAgentId(cfg: Config): string {\n const explicit = cfg.agents?.default?.trim();\n if (explicit) {\n return normalizeAgentId(explicit);\n }\n const agents = listAgentEntries(cfg);\n if (agents.length === 0) {\n return DEFAULT_AGENT_ID;\n }\n const defaults = agents.filter((a) => a?.default === true);\n const chosen = (defaults[0] ?? agents[0])?.id?.trim();\n return chosen ? normalizeAgentId(chosen) : DEFAULT_AGENT_ID;\n}\n\nfunction resolveAgentEntry(cfg: Config, agentId: string): AgentEntry | undefined {\n const id = normalizeAgentId(agentId);\n return listAgentEntries(cfg).find((e) => normalizeAgentId(e.id) === id);\n}\n\n/**\n * Markdown workspace root for an agent.\n */\nexport function resolveAgentWorkspaceDir(cfg: Config, agentId: string): string {\n const id = normalizeAgentId(agentId);\n const configured = resolveAgentEntry(cfg, id)?.workspace?.trim();\n if (configured) {\n return resolveUserPath(configured);\n }\n const defaultAgentId = resolveDefaultAgentId(cfg);\n const fallback = cfg.agents?.defaults?.workspace?.trim();\n if (fallback) {\n return join(resolveUserPath(fallback), id);\n }\n if (id === defaultAgentId) {\n return resolveDefaultAgentWorkspaceDir(process.env);\n }\n const stateDir = resolveStateDir(process.env);\n return join(stateDir, `workspace-${id}`);\n}\n\n/**\n * Internal agent state dir: credentials, `agent.json`, pid, inbox (`…/agent/`).\n */\nexport function resolveAgentDir(cfg: Config, agentId: string): string {\n const id = normalizeAgentId(agentId);\n const configured = resolveAgentEntry(cfg, id)?.agentDir?.trim();\n if (configured) {\n return resolveUserPath(configured);\n }\n const root = resolveStateDir(process.env);\n return join(root, 'agents', id, 'agent');\n}\n\n/** Parent of `sessions/` and `agent/`: `<stateDir>/agents/<id>/`. */\nexport function resolveAgentHomeDir(cfg: Config, agentId: string): string {\n return join(resolveStateDir(process.env), 'agents', normalizeAgentId(agentId));\n}\n\n/** Profile Markdown + gateway avatar files: `<stateDir>/agents/<id>/profile/`. */\nexport function resolveAgentProfileDir(cfg: Config, agentId: string): string {\n return join(resolveAgentHomeDir(cfg, agentId), 'profile');\n}\n\n/** Resolved path for a single profile Markdown basename (e.g. `SOUL.md`). */\nexport function resolveAgentProfileMarkdownPath(cfg: Config, agentId: string, filename: string): string {\n const base = basename(filename.trim().replace(/\\\\/g, '/'));\n return join(resolveAgentProfileDir(cfg, agentId), base);\n}\n\nexport function resolveSessionsDir(cfg: Config, agentId: string): string {\n return join(resolveAgentHomeDir(cfg, agentId), 'sessions');\n}\n\nfunction normalizePathForComparison(input: string): string {\n const resolved = resolve(resolveUserPath(input));\n let normalized = resolved;\n try {\n normalized = fs.realpathSync.native(resolved);\n } catch {\n // Keep lexical path for non-existent directories.\n }\n if (process.platform === 'win32') {\n return normalized.toLowerCase();\n }\n return normalized;\n}\n\nfunction isPathWithinRoot(candidatePath: string, rootPath: string): boolean {\n const rel = relative(rootPath, candidatePath);\n return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));\n}\n\n/** Agent ids whose workspace root contains `workspacePath` (longest match first). */\nexport function resolveAgentIdsByWorkspacePath(cfg: Config, workspacePath: string): string[] {\n const normalizedWorkspacePath = normalizePathForComparison(workspacePath);\n const entries = listAgentEntries(cfg);\n const matches: Array<{ id: string; workspaceDir: string; order: number }> = [];\n\n for (let index = 0; index < entries.length; index += 1) {\n const entry = entries[index]!;\n const id = normalizeAgentId(entry.id);\n const workspaceDir = normalizePathForComparison(resolveAgentWorkspaceDir(cfg, id));\n if (!isPathWithinRoot(normalizedWorkspacePath, workspaceDir)) {\n continue;\n }\n matches.push({ id, workspaceDir, order: index });\n }\n\n const defaultId = resolveDefaultAgentId(cfg);\n if (!entries.some((e) => normalizeAgentId(e.id) === defaultId)) {\n const workspaceDir = normalizePathForComparison(resolveAgentWorkspaceDir(cfg, defaultId));\n if (isPathWithinRoot(normalizedWorkspacePath, workspaceDir)) {\n matches.push({ id: defaultId, workspaceDir, order: entries.length });\n }\n }\n\n matches.sort((left, right) => {\n const workspaceLengthDelta = right.workspaceDir.length - left.workspaceDir.length;\n if (workspaceLengthDelta !== 0) {\n return workspaceLengthDelta;\n }\n return left.order - right.order;\n });\n\n return matches.map((entry) => entry.id);\n}\n\n/** Best-matching agent id for cwd, or `undefined` when no workspace contains the path. */\nexport function resolveAgentIdByWorkspacePath(\n cfg: Config,\n workspacePath: string,\n): string | undefined {\n return resolveAgentIdsByWorkspacePath(cfg, workspacePath)[0];\n}\n\n/**\n * Find the agent id whose resolved markdown workspace matches `resolvedWorkspacePath`.\n * Falls back to {@link resolveDefaultAgentId} when no list entry matches.\n */\nexport function resolveAgentIdForWorkspacePath(cfg: Config, resolvedWorkspacePath: string): string {\n return (\n resolveAgentIdByWorkspacePath(cfg, resolvedWorkspacePath) ??\n resolveDefaultAgentId(cfg)\n );\n}\n\nexport function getDefaultWorkspacePath(cfg: Config): string {\n return resolveAgentWorkspaceDir(cfg, resolveDefaultAgentId(cfg));\n}\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { init_session_key, isCronSessionKey, isSubagentSessionKey } from "../../routing/session-key.js";
1
+ import { isCronSessionKey, isSubagentSessionKey } from "../../routing/session-key-utils.js";
2
+ import { init_session_key } from "../../routing/session-key.js";
2
3
  import { DEFAULT_AGENTS_FILENAME, DEFAULT_IDENTITY_FILENAME, DEFAULT_SOUL_FILENAME, DEFAULT_TOOLS_FILENAME, DEFAULT_USER_FILENAME } from "../context/workspace.js";
3
4
  //#region src/agent/bootstrap/filter-bootstrap-files.ts
4
5
  init_session_key();
@@ -1 +1 @@
1
- {"version":3,"file":"filter-bootstrap-files.js","names":[],"sources":["../../../../src/agent/bootstrap/filter-bootstrap-files.ts"],"sourcesContent":["import { isCronSessionKey, isSubagentSessionKey } from '../../routing/session-key.js';\nimport {\n DEFAULT_AGENTS_FILENAME,\n DEFAULT_IDENTITY_FILENAME,\n DEFAULT_SOUL_FILENAME,\n DEFAULT_TOOLS_FILENAME,\n DEFAULT_USER_FILENAME,\n} from '../context/workspace.js';\nimport type { WorkspaceBootstrapFile } from './types.js';\n\nconst MINIMAL_BOOTSTRAP_ALLOWLIST = new Set<string>([\n DEFAULT_AGENTS_FILENAME,\n DEFAULT_TOOLS_FILENAME,\n DEFAULT_SOUL_FILENAME,\n DEFAULT_IDENTITY_FILENAME,\n DEFAULT_USER_FILENAME,\n]);\n\n/** Subagent and cron sessions omit MEMORY.md and other heavy profile files. */\nexport function filterBootstrapFilesForSession(\n files: WorkspaceBootstrapFile[],\n sessionKey?: string,\n): WorkspaceBootstrapFile[] {\n if (!sessionKey || (!isSubagentSessionKey(sessionKey) && !isCronSessionKey(sessionKey))) {\n return files;\n }\n return files.filter((file) => MINIMAL_BOOTSTRAP_ALLOWLIST.has(file.name));\n}\n"],"mappings":";;;kBAAsF;AAUtF,MAAM,8BAA8B,IAAI,IAAY;CAClD;CACA;CACA;CACA;CACA;CACD,CAAC;;AAGF,SAAgB,+BACd,OACA,YAC0B;AAC1B,KAAI,CAAC,cAAe,CAAC,qBAAqB,WAAW,IAAI,CAAC,iBAAiB,WAAW,CACpF,QAAO;AAET,QAAO,MAAM,QAAQ,SAAS,4BAA4B,IAAI,KAAK,KAAK,CAAC"}
1
+ {"version":3,"file":"filter-bootstrap-files.js","names":[],"sources":["../../../../src/agent/bootstrap/filter-bootstrap-files.ts"],"sourcesContent":["import { isCronSessionKey, isSubagentSessionKey } from '../../routing/session-key.js';\nimport {\n DEFAULT_AGENTS_FILENAME,\n DEFAULT_IDENTITY_FILENAME,\n DEFAULT_SOUL_FILENAME,\n DEFAULT_TOOLS_FILENAME,\n DEFAULT_USER_FILENAME,\n} from '../context/workspace.js';\nimport type { WorkspaceBootstrapFile } from './types.js';\n\nconst MINIMAL_BOOTSTRAP_ALLOWLIST = new Set<string>([\n DEFAULT_AGENTS_FILENAME,\n DEFAULT_TOOLS_FILENAME,\n DEFAULT_SOUL_FILENAME,\n DEFAULT_IDENTITY_FILENAME,\n DEFAULT_USER_FILENAME,\n]);\n\n/** Subagent and cron sessions omit MEMORY.md and other heavy profile files. */\nexport function filterBootstrapFilesForSession(\n files: WorkspaceBootstrapFile[],\n sessionKey?: string,\n): WorkspaceBootstrapFile[] {\n if (!sessionKey || (!isSubagentSessionKey(sessionKey) && !isCronSessionKey(sessionKey))) {\n return files;\n }\n return files.filter((file) => MINIMAL_BOOTSTRAP_ALLOWLIST.has(file.name));\n}\n"],"mappings":";;;;kBAAsF;AAUtF,MAAM,8BAA8B,IAAI,IAAY;CAClD;CACA;CACA;CACA;CACA;CACD,CAAC;;AAGF,SAAgB,+BACd,OACA,YAC0B;AAC1B,KAAI,CAAC,cAAe,CAAC,qBAAqB,WAAW,IAAI,CAAC,iBAAiB,WAAW,CACpF,QAAO;AAET,QAAO,MAAM,QAAQ,SAAS,4BAA4B,IAAI,KAAK,KAAK,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { WORKSPACE_FILES, init_paths } from "../../config/paths.js";
2
2
  import { DEFAULT_AGENTS_FILENAME, DEFAULT_HEARTBEAT_FILENAME, DEFAULT_IDENTITY_FILENAME, DEFAULT_MEMORY_FILENAME, DEFAULT_SOUL_FILENAME, DEFAULT_TOOLS_FILENAME, DEFAULT_USER_FILENAME, stripFrontMatter } from "../context/workspace.js";
3
- import { join, resolve } from "node:path";
4
3
  import { existsSync, readFileSync } from "node:fs";
4
+ import { join, resolve } from "node:path";
5
5
  //#region src/agent/bootstrap/load-bootstrap-files.ts
6
6
  init_paths();
7
7
  const BOOTSTRAP_LOAD_ORDER = [
@@ -11,6 +11,19 @@ export interface BuildChildToolsOptions {
11
11
  getConfig: () => Config | undefined;
12
12
  toolExecutorConfig?: Partial<ToolExecutorConfig>;
13
13
  }
14
+ export interface DelegateChildProgressHooks {
15
+ mode: 'steps' | 'full';
16
+ onProgress: (event: {
17
+ type: 'tool_start' | 'tool_end' | 'iteration' | 'text_delta' | 'thinking_delta';
18
+ toolCallId?: string;
19
+ toolName?: string;
20
+ args?: Record<string, unknown>;
21
+ isError?: boolean;
22
+ count?: number;
23
+ max?: number;
24
+ delta?: string;
25
+ }) => void;
26
+ }
14
27
  export interface DelegateChildHandleOptions {
15
28
  workspace: string;
16
29
  goal: string;
@@ -27,6 +40,8 @@ export interface DelegateChildHandleOptions {
27
40
  * factory ↔ delegate-tool ↔ child-agent-factory cycle).
28
41
  */
29
42
  buildChildTools: (opts: BuildChildToolsOptions) => AgentTool<any, any>[];
43
+ /** Optional live progress for workflow subagents. */
44
+ progressHooks?: DelegateChildProgressHooks;
30
45
  }
31
46
  export interface DelegateChildRunResult {
32
47
  summary: string;
@@ -46,6 +46,7 @@ function createDelegateChildHandle(options) {
46
46
  };
47
47
  let toolIterations = 0;
48
48
  let aborted = false;
49
+ const progress = options.progressHooks;
49
50
  const agent = new Agent({
50
51
  initialState: {
51
52
  systemPrompt: buildChildSystemPrompt(options.goal, options.context, options.workspace),
@@ -56,7 +57,7 @@ function createDelegateChildHandle(options) {
56
57
  },
57
58
  streamFn: createExtensionAwareStreamFn(),
58
59
  getApiKey: (provider) => resolveProviderApiKeySync(provider) ?? getApiKeySync(provider) ?? "",
59
- beforeToolCall: async () => {
60
+ beforeToolCall: async ({ toolCall, args }) => {
60
61
  if (aborted) return {
61
62
  block: true,
62
63
  reason: "Sub-agent aborted."
@@ -65,9 +66,26 @@ function createDelegateChildHandle(options) {
65
66
  block: true,
66
67
  reason: `Sub-agent reached max tool iterations (${options.maxIterations}).`
67
68
  };
69
+ progress?.onProgress({
70
+ type: "tool_start",
71
+ toolCallId: toolCall.id,
72
+ toolName: toolCall.name,
73
+ args: args ?? {}
74
+ });
68
75
  },
69
- afterToolCall: async () => {
76
+ afterToolCall: async ({ toolCall, isError }) => {
70
77
  toolIterations += 1;
78
+ progress?.onProgress({
79
+ type: "iteration",
80
+ count: toolIterations,
81
+ max: options.maxIterations
82
+ });
83
+ progress?.onProgress({
84
+ type: "tool_end",
85
+ toolCallId: toolCall.id,
86
+ toolName: toolCall.name,
87
+ isError: Boolean(isError)
88
+ });
71
89
  }
72
90
  });
73
91
  const userText = options.context?.trim() ? `${options.goal}\n\nAdditional context:\n${options.context.trim()}` : options.goal;
@@ -75,6 +93,19 @@ function createDelegateChildHandle(options) {
75
93
  async run() {
76
94
  toolIterations = 0;
77
95
  aborted = false;
96
+ const unsub = progress?.mode === "full" ? agent.subscribe((ev) => {
97
+ if (ev.type === "message_update") {
98
+ const delta = ev.assistantMessageEvent;
99
+ if (delta?.type === "text_delta" && typeof delta.delta === "string" && delta.delta) progress.onProgress({
100
+ type: "text_delta",
101
+ delta: delta.delta
102
+ });
103
+ if (delta?.type === "thinking_delta" && typeof delta.delta === "string" && delta.delta) progress.onProgress({
104
+ type: "thinking_delta",
105
+ delta: delta.delta
106
+ });
107
+ }
108
+ }) : void 0;
78
109
  try {
79
110
  await runAgentTurnWithTimeout(agent, async () => {
80
111
  await agent.prompt(userText);
@@ -115,6 +146,8 @@ function createDelegateChildHandle(options) {
115
146
  summary: `Sub-agent error: ${msg}`,
116
147
  toolIterations
117
148
  };
149
+ } finally {
150
+ unsub?.();
118
151
  }
119
152
  },
120
153
  abort() {