@xopcai/xopc 0.0.101 → 0.0.103

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 (323) hide show
  1. package/README.md +1 -1
  2. package/README.zh-CN.md +1 -1
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  5. package/dist/extensions/feishu/src/transport/webhook/monitor.js +2 -2
  6. package/dist/extensions/feishu/src/transport/webhook/monitor.js.map +1 -1
  7. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  8. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
  9. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  10. package/dist/extensions/telegram/src/plugin.js +1 -1
  11. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  12. package/dist/extensions/telegram/src/send-options.js +8 -5
  13. package/dist/extensions/telegram/src/send-options.js.map +1 -1
  14. package/dist/extensions/telegram/src/update-offset-store.js +1 -1
  15. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  16. package/dist/extensions/telegram/xopc.extension.json +1 -1
  17. package/dist/extensions/weixin/src/api/api.js +2 -2
  18. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  19. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  20. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  21. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  22. package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
  23. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  24. package/dist/extensions/weixin/src/plugin.js +1 -1
  25. package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
  26. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  27. package/dist/gateway/static/root/assets/{agents-u8cmUfGQ.js → agents-BwXkia_W.js} +1 -1
  28. package/dist/gateway/static/root/assets/{apps-page-DF8m9cUE.js → apps-page-C5RmwmTT.js} +1 -1
  29. package/dist/gateway/static/root/assets/{channels-settings-BM3doRvi.js → channels-settings-tlOTdaXw.js} +1 -1
  30. package/dist/gateway/static/root/assets/{channels-status-swr-ah4zWEIP.js → channels-status-swr-D4XjqwqC.js} +1 -1
  31. package/dist/gateway/static/root/assets/{cron-api-DgMuL_2b.js → cron-api-DcmfGuj0.js} +1 -1
  32. package/dist/gateway/static/root/assets/{cron-page-COfUPKfq.js → cron-page-CijJ4G6F.js} +1 -1
  33. package/dist/gateway/static/root/assets/{dist-Dzy3Q0ZH.js → dist-CWm8hTXZ.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-debug-page-kyxxefKh.js → extension-debug-page-BzYgTkS9.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-page-BVbCBHoI.js → extension-page-BmTZH6gL.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-settings-page-t1lb2A7v.js → extension-settings-page-CyJk_G64.js} +1 -1
  37. package/dist/gateway/static/root/assets/{fetch-drJUxxKP.js → fetch-CMoWY2Si.js} +1 -1
  38. package/dist/gateway/static/root/assets/{field-primitives-6Vo1Yga4.js → field-primitives-C4GpxsDo.js} +1 -1
  39. package/dist/gateway/static/root/assets/{heartbeat-config-api-BF3psu4O.js → heartbeat-config-api-CLD0Gpi3.js} +1 -1
  40. package/dist/gateway/static/root/assets/index-0HmunJW9.js +4845 -0
  41. package/dist/gateway/static/root/assets/index-Bk75Phrd.css +1 -0
  42. package/dist/gateway/static/root/assets/{logs-page-BTVPXcHV.js → logs-page-BjdQjHwk.js} +1 -1
  43. package/dist/gateway/static/root/assets/{note-detail-page-DqSAg_5Z.js → note-detail-page-8Er4197b.js} +2 -2
  44. package/dist/gateway/static/root/assets/{note-time-FSOjchic.js → note-time-CF3vf1jm.js} +1 -1
  45. package/dist/gateway/static/root/assets/{notes-page-DkRX7BE2.js → notes-page-BBnTh0uI.js} +1 -1
  46. package/dist/gateway/static/root/assets/{sessions-page-Khdw35Zk.js → sessions-page-B0riYK7j.js} +1 -1
  47. package/dist/gateway/static/root/assets/{settings-advanced-gate-DspC8oEm.js → settings-advanced-gate-DiP_WHu_.js} +1 -1
  48. package/dist/gateway/static/root/assets/{settings-form-section-DuxvUuur.js → settings-form-section-C7qA7y0J.js} +1 -1
  49. package/dist/gateway/static/root/assets/{settings-page-DN8JBZ8F.js → settings-page-1ZPhcCZ9.js} +2 -2
  50. package/dist/gateway/static/root/assets/share-preview-page-Tvr5Mtq5.js +2 -0
  51. package/dist/gateway/static/root/assets/{skills-page-ByYT0fXZ.js → skills-page-BQ1hllKD.js} +1 -1
  52. package/dist/gateway/static/root/assets/{theme-store-B6KXPHgK.js → theme-store-HTvJlFLL.js} +1 -1
  53. package/dist/gateway/static/root/assets/url-F3_D_6zZ.js +3 -0
  54. package/dist/gateway/static/root/assets/{utils-DK_1H47k.js → utils-CPr3FBh2.js} +1 -1
  55. package/dist/gateway/static/root/assets/{voice-api-key-field-BYN2EIMs.js → voice-api-key-field-BkbDl6dH.js} +1 -1
  56. package/dist/gateway/static/root/assets/{workflow-page.utils-Bi19YNTr.js → workflow-page.utils-CeBkAjP7.js} +1 -1
  57. package/dist/gateway/static/root/assets/{workflows-page-DP57FEKW.js → workflows-page-D059ysoF.js} +1 -1
  58. package/dist/gateway/static/root/index.html +5 -5
  59. package/dist/package.js +1 -1
  60. package/dist/src/agent/agent-manager.js +7 -7
  61. package/dist/src/agent/agent-scope.js +1 -1
  62. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
  63. package/dist/src/agent/context/workspace-seed.js +2 -2
  64. package/dist/src/agent/context/workspace-state.js +1 -1
  65. package/dist/src/agent/goals/goal-run-store.js +4 -4
  66. package/dist/src/agent/goals/persistent-goal-service.js +1 -1
  67. package/dist/src/agent/goals/post-turn.js +2 -2
  68. package/dist/src/agent/image/load-image-media.js +2 -2
  69. package/dist/src/agent/inbound/attachment-pipeline.js +2 -2
  70. package/dist/src/agent/inbound/attachment-pipeline.js.map +1 -1
  71. package/dist/src/agent/ipc/bus.js +1 -1
  72. package/dist/src/agent/ipc/inbox.js +2 -2
  73. package/dist/src/agent/ipc/socket.js +1 -1
  74. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  75. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  76. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  77. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  78. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  79. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  80. package/dist/src/agent/memory/dreaming/events.js +1 -1
  81. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  82. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  83. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  84. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  85. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  86. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  87. package/dist/src/agent/memory/memory-flush.js +1 -1
  88. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  89. package/dist/src/agent/models/manager.js +1 -1
  90. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  91. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  92. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  93. package/dist/src/agent/sandbox/path-policy.js +2 -2
  94. package/dist/src/agent/service.js +4 -4
  95. package/dist/src/agent/session/session-inspector.js +1 -1
  96. package/dist/src/agent/skills/config.js +1 -1
  97. package/dist/src/agent/skills/hub-hash.js +2 -2
  98. package/dist/src/agent/skills/hub-lock.js +1 -1
  99. package/dist/src/agent/skills/hub-pull.js +2 -2
  100. package/dist/src/agent/skills/index.js +1 -1
  101. package/dist/src/agent/skills/managed-store.js +1 -1
  102. package/dist/src/agent/skills/scanner.js +1 -1
  103. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  104. package/dist/src/agent/skills/skill-manager.js +1 -1
  105. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  106. package/dist/src/agent/tools/factory.js +1 -1
  107. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  108. package/dist/src/agent/tools/send-media.js +2 -3
  109. package/dist/src/agent/tools/send-media.js.map +1 -1
  110. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  111. package/dist/src/agent/tools/workflow-tool.js +1 -1
  112. package/dist/src/agent/tools/write.js +1 -1
  113. package/dist/src/agent/workflow/catalog.js +1 -1
  114. package/dist/src/auth/credentials.d.ts +7 -0
  115. package/dist/src/auth/credentials.js +37 -4
  116. package/dist/src/auth/credentials.js.map +1 -1
  117. package/dist/src/auth/index.d.ts +1 -1
  118. package/dist/src/auth/index.js.map +1 -1
  119. package/dist/src/auth/oauth/github-copilot.d.ts +1 -1
  120. package/dist/src/auth/oauth/google-antigravity.d.ts +1 -3
  121. package/dist/src/auth/oauth/google-antigravity.js +1 -1
  122. package/dist/src/auth/oauth/google-gemini-cli.d.ts +1 -3
  123. package/dist/src/auth/oauth/google-gemini-cli.js +1 -1
  124. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-antigravity.js +3 -5
  125. package/dist/src/auth/oauth/google-oauth/google-antigravity.js.map +1 -0
  126. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-gemini-cli.js +4 -5
  127. package/dist/src/auth/oauth/google-oauth/google-gemini-cli.js.map +1 -0
  128. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/oauth-page.js +12 -4
  129. package/dist/src/auth/oauth/google-oauth/oauth-page.js.map +1 -0
  130. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/pkce.d.ts +1 -1
  131. package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/pkce.js +2 -2
  132. package/dist/src/auth/oauth/google-oauth/pkce.js.map +1 -0
  133. package/dist/src/auth/oauth/index.js +2 -2
  134. package/dist/src/auth/oauth/kimi-coding.d.ts +1 -1
  135. package/dist/src/auth/oauth/kimi-coding.js +1 -1
  136. package/dist/src/auth/oauth/kimi-coding.js.map +1 -1
  137. package/dist/src/auth/oauth/minimax-cn.js +1 -1
  138. package/dist/src/auth/oauth/minimax-cn.js.map +1 -1
  139. package/dist/src/auth/oauth/minimax.js +1 -1
  140. package/dist/src/auth/oauth/minimax.js.map +1 -1
  141. package/dist/src/auth/oauth/openai-codex.d.ts +7 -2
  142. package/dist/src/auth/oauth/openai-codex.js +318 -1
  143. package/dist/src/auth/oauth/openai-codex.js.map +1 -0
  144. package/dist/src/auth/profiles/store.js +4 -3
  145. package/dist/src/auth/profiles/store.js.map +1 -1
  146. package/dist/src/auth/sync-provider-auth.js +1 -1
  147. package/dist/src/browser/cache-dir-policy.js +1 -1
  148. package/dist/src/browser/cdp-local-launcher.js +2 -2
  149. package/dist/src/browser/providers/browser-ext-install.js +3 -3
  150. package/dist/src/browser/providers/cloakbrowser.js +4 -4
  151. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  152. package/dist/src/browser/stealth.js +1 -1
  153. package/dist/src/channels/attachments/attachment-classifiers.d.ts +1 -0
  154. package/dist/src/channels/attachments/attachment-classifiers.js +13 -2
  155. package/dist/src/channels/attachments/attachment-classifiers.js.map +1 -1
  156. package/dist/src/channels/outbound/persist-store.js +1 -1
  157. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  158. package/dist/src/channels/pairing/pairing-store.js +2 -2
  159. package/dist/src/chat-commands/agent-edit.js +2 -2
  160. package/dist/src/chat-commands/builtins/config.js +2 -2
  161. package/dist/src/chat-commands/builtins/model.js +2 -2
  162. package/dist/src/chat-commands/builtins/model.js.map +1 -1
  163. package/dist/src/chat-commands/context.js +1 -1
  164. package/dist/src/cli/command-manifest.js +1 -1
  165. package/dist/src/cli/command-manifest.js.map +1 -1
  166. package/dist/src/cli/commands/auth.js +39 -51
  167. package/dist/src/cli/commands/auth.js.map +1 -1
  168. package/dist/src/cli/commands/config.js +1 -1
  169. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  170. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  171. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  172. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  173. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  174. package/dist/src/cli/commands/extension-dev.js +1 -1
  175. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  176. package/dist/src/cli/commands/extension-pack.js +1 -1
  177. package/dist/src/cli/commands/gateway/logs.js +1 -1
  178. package/dist/src/cli/commands/image.js +1 -1
  179. package/dist/src/cli/commands/init.js +3 -3
  180. package/dist/src/cli/commands/models.js +189 -54
  181. package/dist/src/cli/commands/models.js.map +1 -1
  182. package/dist/src/cli/commands/onboard/model.d.ts +1 -4
  183. package/dist/src/cli/commands/onboard/model.js +253 -183
  184. package/dist/src/cli/commands/onboard/model.js.map +1 -1
  185. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  186. package/dist/src/cli/utils/oauth-login.d.ts +17 -0
  187. package/dist/src/cli/utils/oauth-login.js +93 -0
  188. package/dist/src/cli/utils/oauth-login.js.map +1 -0
  189. package/dist/src/cli/utils/oauth-providers.js +2 -2
  190. package/dist/src/commands/agents.config.js +1 -1
  191. package/dist/src/config/agent-profile.js +1 -1
  192. package/dist/src/config/gateway-bind.js +1 -1
  193. package/dist/src/config/index.js +5 -5
  194. package/dist/src/config/loader.js +2 -2
  195. package/dist/src/config/models-json.js +2 -2
  196. package/dist/src/config/paths-state.js +1 -1
  197. package/dist/src/config/profile.js +2 -2
  198. package/dist/src/config/workspace-path.js +1 -1
  199. package/dist/src/cron/executor.js +2 -2
  200. package/dist/src/cron/persistence.js +1 -1
  201. package/dist/src/daemon/constants.js +1 -1
  202. package/dist/src/daemon/install-plan.js +2 -2
  203. package/dist/src/daemon/launchd.js +2 -2
  204. package/dist/src/daemon/schtasks.js +2 -2
  205. package/dist/src/daemon/systemd.js +2 -2
  206. package/dist/src/extensions/bundle-mcp.js +1 -1
  207. package/dist/src/extensions/discover-extensions.js +1 -1
  208. package/dist/src/extensions/health.js +1 -1
  209. package/dist/src/extensions/loader.js +1 -1
  210. package/dist/src/extensions/lockfile.js +2 -2
  211. package/dist/src/extensions/update.js +1 -1
  212. package/dist/src/gateway/agents-admin.js +3 -3
  213. package/dist/src/gateway/file-path-classifier.js +2 -2
  214. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  215. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  216. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  217. package/dist/src/gateway/hono/oauth-async.js +3 -3
  218. package/dist/src/gateway/hono/oauth.js +3 -3
  219. package/dist/src/gateway/hono/routes/agents.js +1 -1
  220. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  221. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  222. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  223. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  224. package/dist/src/gateway/hono/routes/models.js +26 -6
  225. package/dist/src/gateway/hono/routes/models.js.map +1 -1
  226. package/dist/src/gateway/hono/routes/notes.js +9 -22
  227. package/dist/src/gateway/hono/routes/notes.js.map +1 -1
  228. package/dist/src/gateway/hono/routes/shares.js +1 -1
  229. package/dist/src/gateway/hono/routes/workspace.js +2 -2
  230. package/dist/src/gateway/lock.js +3 -3
  231. package/dist/src/gateway/ports.js +1 -1
  232. package/dist/src/gateway/service/agent-runner.js +2 -2
  233. package/dist/src/gateway/service/marketplace-service.js +2 -2
  234. package/dist/src/gateway/service.js +1 -1
  235. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  236. package/dist/src/infra/brew.js +1 -1
  237. package/dist/src/infra/package-json.js +1 -1
  238. package/dist/src/infra/package-update-steps.js +1 -1
  239. package/dist/src/infra/path-env.js +2 -2
  240. package/dist/src/infra/restart.js +2 -2
  241. package/dist/src/infra/stable-node-path.js +1 -1
  242. package/dist/src/infra/update-check.js +1 -1
  243. package/dist/src/infra/update-global.js +1 -1
  244. package/dist/src/infra/update-lock.js +3 -3
  245. package/dist/src/infra/update-runner.js +1 -1
  246. package/dist/src/infra/update-startup.js +2 -2
  247. package/dist/src/infra/write-file-atomic.js +2 -2
  248. package/dist/src/media/store.js +4 -1
  249. package/dist/src/media/store.js.map +1 -1
  250. package/dist/src/notes/note-attachment-sync.d.ts +2 -3
  251. package/dist/src/notes/note-attachment-sync.js +2 -27
  252. package/dist/src/notes/note-attachment-sync.js.map +1 -1
  253. package/dist/src/notes/note-index-meta.d.ts +6 -2
  254. package/dist/src/notes/note-index-meta.js +11 -16
  255. package/dist/src/notes/note-index-meta.js.map +1 -1
  256. package/dist/src/notes/note-markdown.d.ts +61 -0
  257. package/dist/src/notes/note-markdown.js +177 -0
  258. package/dist/src/notes/note-markdown.js.map +1 -0
  259. package/dist/src/notes/service.d.ts +9 -7
  260. package/dist/src/notes/service.js +163 -312
  261. package/dist/src/notes/service.js.map +1 -1
  262. package/dist/src/notes/store.js +4 -5
  263. package/dist/src/notes/store.js.map +1 -1
  264. package/dist/src/notes/types.d.ts +29 -58
  265. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  266. package/dist/src/providers/index.d.ts +3 -3
  267. package/dist/src/providers/index.js +25 -17
  268. package/dist/src/providers/index.js.map +1 -1
  269. package/dist/src/providers/model-registry.js +1 -1
  270. package/dist/src/providers/presentation.d.ts +34 -0
  271. package/dist/src/providers/presentation.js +162 -0
  272. package/dist/src/providers/presentation.js.map +1 -0
  273. package/dist/src/session/init-session-turn.js +2 -2
  274. package/dist/src/session/resolve-session.js +3 -3
  275. package/dist/src/session/session-title.js +2 -2
  276. package/dist/src/session/store.js +2 -2
  277. package/dist/src/share/share-auto.js +2 -2
  278. package/dist/src/share/share-store.js +3 -3
  279. package/dist/src/share/share-thumbnail.js +2 -2
  280. package/dist/src/share/share-zip.js +1 -1
  281. package/dist/src/share/site-share-store.js +3 -3
  282. package/dist/src/share/site-static-serve.js +1 -1
  283. package/dist/src/storage/sqlite/connection.js +2 -2
  284. package/dist/src/storage/sqlite/memory-index-repository.js +2 -2
  285. package/dist/src/storage/sqlite/migrations/003_add_note_markdown_meta.sql +4 -0
  286. package/dist/src/storage/sqlite/migrations/discover.js +1 -1
  287. package/dist/src/storage/sqlite/migrations/runner.d.ts +2 -2
  288. package/dist/src/storage/sqlite/migrations/runner.js +5 -5
  289. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  290. package/dist/src/storage/sqlite/migrations/runner.ts +2 -2
  291. package/dist/src/storage/sqlite/notes-repository.js +18 -6
  292. package/dist/src/storage/sqlite/notes-repository.js.map +1 -1
  293. package/dist/src/storage/sqlite/schema.js +4 -4
  294. package/dist/src/storage/sqlite/schema.sql +5 -1
  295. package/dist/src/tui/clipboard-image.js +3 -3
  296. package/dist/src/tui/theme-manager.js +1 -1
  297. package/dist/src/tui/tui-keybindings-file.js +1 -1
  298. package/dist/src/tui/tui-scoped-models.js +2 -2
  299. package/dist/src/tui/tui-settings.js +1 -1
  300. package/dist/src/tui/tui.js +3 -3
  301. package/dist/src/tunnel/frpc-binary.js +3 -3
  302. package/dist/src/tunnel/frpc-config.js +1 -1
  303. package/dist/src/tunnel/frpc-extract.js +1 -1
  304. package/dist/src/tunnel/tunnel-state.js +1 -1
  305. package/dist/src/utils/logger/audit.js +1 -1
  306. package/dist/src/utils/logger/log-store.js +1 -1
  307. package/dist/src/utils/logger/rotation.js +1 -1
  308. package/dist/src/voice/tts/audio.js +1 -1
  309. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  310. package/dist/src/workflows/store/event-store.js +1 -1
  311. package/dist/src/workflows/store/run-store.js +1 -1
  312. package/package.json +1 -1
  313. package/dist/gateway/static/root/assets/index-DjNDHzwG.css +0 -1
  314. package/dist/gateway/static/root/assets/index-WAyKAilR.js +0 -4840
  315. package/dist/gateway/static/root/assets/share-preview-page-UNAcbiMb.js +0 -2
  316. package/dist/gateway/static/root/assets/url-q28QhI7l.js +0 -3
  317. package/dist/src/auth/oauth/vendor-pi-google/google-antigravity.js.map +0 -1
  318. package/dist/src/auth/oauth/vendor-pi-google/google-gemini-cli.js.map +0 -1
  319. package/dist/src/auth/oauth/vendor-pi-google/oauth-page.js.map +0 -1
  320. package/dist/src/auth/oauth/vendor-pi-google/pkce.js.map +0 -1
  321. /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-antigravity.d.ts +0 -0
  322. /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/google-gemini-cli.d.ts +0 -0
  323. /package/dist/src/auth/oauth/{vendor-pi-google → google-oauth}/oauth-page.d.ts +0 -0
@@ -1 +1 @@
1
- import{ci as e,di as t,li as n,oi as r}from"./index-WAyKAilR.js";function i(){return t(`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 t(e,r)}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{ci as e,di as t,li as n,oi as r}from"./index-0HmunJW9.js";function i(){return t(`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 t(e,r)}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 +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-q28QhI7l.js";import{o as a}from"./vendor-swr-BIWyz7Rc.js";import{a as o,n as s}from"./fetch-drJUxxKP.js";import{$i as c,Jo as l,Mo as u,Oa as d,Q as f,U as p,Z as m,Zr as h,di as g,dr as _,li as v,lo as y,ui as b,ur as x}from"./index-WAyKAilR.js";var S=`/api/image/providers`;async function C(){return(await s(i(`/api/image/providers`)))?.payload?.providers??[]}var w=e(t(),1),ee=n();function T(){return{apiKey:``,region:``,baseUrl:``,imageBaseUrl:``}}function te(e){return e?.apiKey?`••••••••••••`:``}function E(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:te(t),region:t?.region??``,baseUrl:t?.baseUrl??``,imageBaseUrl:t?.imageBaseUrl??``}}return r}function D(e,t,n){let r=e[n].trim();if(r!==t[n].trim())return r||null}function O(e,t){let n=e.trim(),r=t.trim();if(n!==r&&!(p(n)&&p(r)))return n||(r?null:void 0)}function k(e,t,n){let r={};for(let i of e){let e=t[i]??T(),a=n[i]??T();if(JSON.stringify(e)===JSON.stringify(a))continue;let o={},s=O(e.apiKey,a.apiKey);s!==void 0&&(o.apiKey=s);let c=D(e,a,`region`);c!==void 0&&(o.region=c);let l=D(e,a,`baseUrl`);l!==void 0&&(o.baseUrl=l);let u=D(e,a,`imageBaseUrl`);u!==void 0&&(o.imageBaseUrl=u),Object.keys(o).length>0&&(r[i]=o)}return r}async function A(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 j(e){Object.keys(e).length!==0&&(await s(i(`/api/config`),{method:`PATCH`,body:JSON.stringify({providersConfig:e})}),await x())}var M=r();function ne(e){let t=(0,ee.c)(18),{providerId:n,value:r,onChange:i,labels:a,apiKeyLinks:o,apiKeyLinkLabels:s}=e,c;t[0]===n?c=t[1]:(c=()=>A(n).then(N),t[0]=n,t[1]=c);let l=c,u=`img-cred-key-${n}`,d;t[2]!==a.apiKeyLabel||t[3]!==u?(d=(0,M.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:u,children:a.apiKeyLabel}),t[2]=a.apiKeyLabel,t[3]=u,t[4]=d):d=t[4];let p;t[5]!==s||t[6]!==o?(p=o.length>0?(0,M.jsx)(`div`,{className:`flex flex-col gap-1`,children:o.map(e=>(0,M.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:[f(e.kind,s),(0,M.jsx)(y,{className:`size-3`,"aria-hidden":!0})]},`${e.kind}-${e.href}`))}):null,t[5]=s,t[6]=o,t[7]=p):p=t[7];let m=`img-cred-key-${n}`,g;t[8]!==a||t[9]!==i||t[10]!==l||t[11]!==m||t[12]!==r?(g=(0,M.jsx)(h,{id:m,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]=m,t[12]=r,t[13]=g):g=t[13];let _;return t[14]!==d||t[15]!==p||t[16]!==g?(_=(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[d,p,g]}),t[14]=d,t[15]=p,t[16]=g,t[17]=_):_=t[17],_}function N(e){return e.apiKey??null}function P(){return g(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,v)}function re(){return g(P(),`appearance-none bg-[length:1rem] bg-[right_0.5rem_center] bg-no-repeat pr-9`)}var F=`__custom__`;function ie(e,t){if(!e.region.trim()&&!e.imageBaseUrl.trim())return``;let n=e.region.trim().toLowerCase();return t.some(e=>e.value===n)?n:F}function ae(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:F}function oe(e,t,n){return t===`beijing`?e.dashscopeRegion_beijing:t===`singapore`?e.dashscopeRegion_singapore:t===`us`?e.dashscopeRegion_us:n}function se(e,t){return t===`minimax`?e.minimaxClusterLabel:t===`fal`?e.falQueueBaseLabel:e.baseUrlLabel}function ce(e,t){return t===`minimax`?e.minimaxClusterHint:t===`fal`?e.falQueueBaseHint:null}function le(e,t){return JSON.stringify(e)!==JSON.stringify(t)}function ue(e,t){return t===1?e.modelCountOne:e.modelCountMany.replace(`{count}`,String(t))}function I(e){let t=(0,ee.c)(76),{summaries:n,credDraft:r,credBaseline:i,credDirty:a,credSaving:o,credError:s,credSavedFlash:f,credNoopFlash:p,updateCredRow:h,onDiscardCredentials:_,onSaveCredentials:v,extensionIds:x,showExtensionLinks:S,showImageModelsLink:C,hideActions:te,language:E,apiKeyLinkLabels:D,messages:O}=e,k=te===void 0?!1:te,A;t[0]===n?A=t[1]:(A=n.some(he),t[0]=n,t[1]=A);let j=A,N;t[2]===n?N=t[3]:(N=n.some(me),t[2]=n,t[3]=N);let I=N,[ge,_e]=(0,w.useState)(pe),[ve,L]=(0,w.useState)(fe),R;if(t[4]!==i||t[5]!==r||t[6]!==n){R=new Set;for(let e of n)le(r[e.id]??T(),i[e.id]??T())&&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]!==ve||t[10]!==ge?(B=e=>ve.has(e)?!1:ge.has(e)?!0:z.has(e),t[8]=z,t[9]=ve,t[10]=ge,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)),_e(t=>{let n=new Set(t);return n.delete(e),n});return}L(t=>{let n=new Set(t);return n.delete(e),n}),_e(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]===O.credentialsIntro?W=t[15]:(W=(0,M.jsx)(`p`,{children:O.credentialsIntro}),t[14]=O.credentialsIntro,t[15]=W);let G;t[16]!==j||t[17]!==O.regionHint?(G=j?(0,M.jsx)(`p`,{className:`text-fg-subtle`,children:O.regionHint}):null,t[16]=j,t[17]=O.regionHint,t[18]=G):G=t[18];let K;t[19]!==I||t[20]!==O.endpointPresetsHint?(K=I?(0,M.jsx)(`p`,{className:`text-fg-subtle`,children:O.endpointPresetsHint}):null,t[19]=I,t[20]=O.endpointPresetsHint,t[21]=K):K=t[21];let q;t[22]!==C||t[23]!==O.imageModelsLinkTitle||t[24]!==O.openImageModelsPage?(q=C?(0,M.jsx)(`p`,{children:(0,M.jsx)(l,{to:`/settings/credentials?tab=image-models`,className:`font-medium text-accent hover:underline`,title:O.imageModelsLinkTitle,children:O.openImageModelsPage})}):null,t[22]=C,t[23]=O.imageModelsLinkTitle,t[24]=O.openImageModelsPage,t[25]=q):q=t[25];let J;t[26]!==W||t[27]!==G||t[28]!==K||t[29]!==q?(J=(0,M.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,M.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]!==p||t[35]!==f||t[36]!==o||t[37]!==k||t[38]!==_||t[39]!==v||t[40]!==O.credentialsNothingToSave||t[41]!==O.credentialsSaved||t[42]!==O.discardCredentials||t[43]!==O.saveCredentials||t[44]!==O.savingCredentials?(X=k?null:(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[f?(0,M.jsx)(`span`,{className:`text-sm text-fg-muted`,children:O.credentialsSaved}):null,p?(0,M.jsx)(`span`,{className:`text-sm text-fg-muted`,children:O.credentialsNothingToSave}):null,(0,M.jsx)(b,{type:`button`,variant:`secondary`,onClick:_,disabled:!a||o,children:O.discardCredentials}),(0,M.jsx)(b,{type:`button`,variant:`primary`,onClick:v,disabled:!a||o,children:o?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(d,{className:`size-3.5 animate-spin`}),(0,M.jsx)(`span`,{className:`ml-1.5`,children:O.savingCredentials})]}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(c,{className:`size-3.5`}),(0,M.jsx)(`span`,{className:`ml-1.5`,children:O.saveCredentials})]})})]}),t[33]=a,t[34]=p,t[35]=f,t[36]=o,t[37]=k,t[38]=_,t[39]=v,t[40]=O.credentialsNothingToSave,t[41]=O.credentialsSaved,t[42]=O.discardCredentials,t[43]=O.saveCredentials,t[44]=O.savingCredentials,t[45]=X):X=t[45];let Z;if(t[46]!==D||t[47]!==i||t[48]!==r||t[49]!==x||t[50]!==V||t[51]!==E||t[52]!==S||t[53]!==n||t[54]!==O||t[55]!==U||t[56]!==h){let e;t[58]!==D||t[59]!==i||t[60]!==r||t[61]!==x||t[62]!==V||t[63]!==E||t[64]!==S||t[65]!==O||t[66]!==U||t[67]!==h?(e=e=>{let t=r[e.id]??T(),n=e.ui,a=S&&x.has(e.id)?`/settings/ext/${encodeURIComponent(e.id)}`:null,o=le(t,i[e.id]??T()),s=V(e.id),c=e.label??e.id,d=ue(O,e.models.length);return(0,M.jsxs)(`section`,{className:g(`overflow-hidden rounded-xl border bg-surface-panel shadow-sm transition-colors dark:shadow-none`,o?`border-accent/50`:`border-edge`),children:[(0,M.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,M.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`truncate text-sm font-semibold text-fg`,children:c}),(0,M.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,M.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:O.unsavedChanges}):null,e.configured?(0,M.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:O.configured}):(0,M.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:O.missingKey})]}),(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-subtle`,children:[(0,M.jsx)(`span`,{children:d}),e.defaultModel?(0,M.jsxs)(`span`,{className:`min-w-0 truncate`,children:[(0,M.jsxs)(`span`,{className:`text-fg-muted`,children:[O.defaultModel,`:`]}),` `,e.id,`/`,e.defaultModel]}):null]})]}),(0,M.jsx)(u,{className:g(`mt-0.5 size-4 shrink-0 text-fg-subtle transition-transform`,s?`rotate-180`:`rotate-0`),"aria-hidden":`true`}),(0,M.jsx)(`span`,{className:`sr-only`,children:s?O.collapseProvider:O.expandProvider})]}),s?(0,M.jsxs)(`div`,{id:`img-provider-credentials-${e.id}`,className:`border-t border-edge px-4 py-4`,children:[a?(0,M.jsxs)(l,{to:a,className:`mb-3 inline-flex items-center gap-1 text-xs font-medium text-accent hover:underline`,title:O.extensionSettingsLinkTitle,children:[(0,M.jsx)(y,{className:`size-3`}),O.openExtensionSettings]}):null,e.models.length>0?(0,M.jsxs)(`p`,{className:`mb-3 text-xs leading-relaxed text-fg-subtle`,children:[(0,M.jsxs)(`span`,{className:`text-fg-muted`,children:[O.modelsLabel,`:`]}),` `,e.models.map(t=>`${e.id}/${t}`).join(`, `)]}):null,(0,M.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,M.jsx)(ne,{providerId:e.id,value:t.apiKey,onChange:t=>h(e.id,{apiKey:t}),apiKeyLinks:m(e.id,E),apiKeyLinkLabels:D,labels:{apiKeyLabel:O.apiKeyLabel,optionalPlaceholder:O.optionalPlaceholder,maskedHelp:O.apiKeyMaskedHelp,copy:O.apiKeyCopy,copied:O.apiKeyCopied,show:O.apiKeyShow,hide:O.apiKeyHide,notInConfigFile:O.apiKeyNotInConfigFile,loadFailed:O.apiKeyRevealFailed}}),n?.regions?.length?(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,M.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-region-preset-${e.id}`,children:O.regionLabel}),(0,M.jsxs)(`select`,{id:`img-cred-region-preset-${e.id}`,className:re(),value:ie(t,n.regions),onChange:t=>{let r=t.target.value;if(r===``){h(e.id,{region:``,imageBaseUrl:``});return}if(r===F){h(e.id,{region:``,imageBaseUrl:``});return}let i=n.regions.find(e=>e.value===r);i&&h(e.id,{region:i.value,imageBaseUrl:i.imageBaseUrl})},children:[(0,M.jsx)(`option`,{value:``,children:O.regionPresetDefault}),n.regions.map(e=>(0,M.jsx)(`option`,{value:e.value,children:oe(O,e.value,e.label)},e.value)),(0,M.jsx)(`option`,{value:F,children:O.regionPresetCustom})]}),ie(t,n.regions)===F?(0,M.jsxs)(`div`,{className:`mt-2 grid gap-2 sm:grid-cols-2`,children:[(0,M.jsx)(`input`,{type:`text`,className:P(),value:t.region,placeholder:`region`,onChange:t=>h(e.id,{region:t.target.value})}),(0,M.jsx)(`input`,{type:`url`,className:P(),value:t.imageBaseUrl,placeholder:O.imageBaseUrlLabel,onChange:t=>h(e.id,{imageBaseUrl:t.target.value})})]}):null]}):null,n?.baseUrlPresets?.length?(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,M.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-base-preset-${e.id}`,children:se(O,n.baseUrlPresetKind)}),ce(O,n.baseUrlPresetKind)?(0,M.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:ce(O,n.baseUrlPresetKind)}):null,(0,M.jsxs)(`select`,{id:`img-cred-base-preset-${e.id}`,className:re(),value:ae(t,n.baseUrlPresets),onChange:t=>{let n=t.target.value;if(n===``){h(e.id,{baseUrl:``});return}if(n===F){h(e.id,{baseUrl:``});return}h(e.id,{baseUrl:n.replace(/\/+$/,``)})},children:[(0,M.jsx)(`option`,{value:``,children:O.baseUrlPresetDefault}),n.baseUrlPresets.map(de),(0,M.jsx)(`option`,{value:F,children:O.baseUrlPresetCustom})]}),ae(t,n.baseUrlPresets)===F?(0,M.jsx)(`input`,{type:`url`,className:g(P(),`mt-2`),value:t.baseUrl,placeholder:`https://…`,onChange:t=>h(e.id,{baseUrl:t.target.value})}):null]}):null,n?.regions?.length&&ie(t,n.regions)!==F?(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,M.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-imgbase-ro-${e.id}`,children:O.imageBaseUrlLabel}),(0,M.jsx)(`input`,{id:`img-cred-imgbase-ro-${e.id}`,type:`url`,readOnly:!0,className:g(P(),`cursor-not-allowed opacity-90`),value:t.imageBaseUrl,title:O.imageBaseUrlPresetHint}),(0,M.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:O.imageBaseUrlPresetHint})]}):null]})]}):null]},e.id)},t[58]=D,t[59]=i,t[60]=r,t[61]=x,t[62]=V,t[63]=E,t[64]=S,t[65]=O,t[66]=U,t[67]=h,t[68]=e):e=t[68],Z=n.map(e),t[46]=D,t[47]=i,t[48]=r,t[49]=x,t[50]=V,t[51]=E,t[52]=S,t[53]=n,t[54]=O,t[55]=U,t[56]=h,t[57]=Z}else Z=t[57];let Q;t[69]===Z?Q=t[70]:(Q=(0,M.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,M.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 de(e){return(0,M.jsx)(`option`,{value:e.value,children:e.label},e.value)}function fe(){return new Set}function pe(){return new Set}function me(e){return(e.ui?.baseUrlPresets?.length??0)>0}function he(e){return(e.ui?.regions?.length??0)>0}function ge(e){let t=_(o(e=>!!e.token)),n=t.data,r=(0,w.useMemo)(()=>e.map(e=>e.id),[e]),s=(0,w.useRef)(!1),[c,l]=(0,w.useState)(null),[u,d]=(0,w.useState)(!1),[f,p]=(0,w.useState)(null),[m,h]=(0,w.useState)(!1),[g,v]=(0,w.useState)(!1),y=(0,w.useMemo)(()=>E(n?.payload?.config,r),[n?.payload?.config,r]),b=c??y,x=y;return{gwSwr:t,credDraft:b,credBaseline:x,credDirty:(0,w.useMemo)(()=>JSON.stringify(b)!==JSON.stringify(x),[b,x]),credSaving:u,credError:f,credSavedFlash:m,credNoopFlash:g,updateCredRow:(0,w.useCallback)((e,t)=>{s.current=!0,l(n=>{let r=n??y,i=r[e]??T();return{...r,[e]:{...i,...t}}})},[y]),onDiscardCredentials:(0,w.useCallback)(()=>{s.current=!1,l(null),p(null),h(!1),v(!1)},[]),saveCredentials:(0,w.useCallback)(async e=>{let n=k(r,b,x);if(Object.keys(n).length===0){v(!0),window.setTimeout(()=>v(!1),2200);return}d(!0),p(null),h(!1);try{await j(n),await t.mutate?.(),a(i(S)),s.current=!1,l(null),h(!0),window.setTimeout(()=>h(!1),2e3)}catch(t){p(t instanceof Error?t.message:e)}finally{d(!1)}},[r,b,x,t])}}function _e(){return{enabled:!1,provider:`alibaba`,alibaba:{model:`paraformer-v2`},openai:{model:`whisper-1`},fallback:{enabled:!0,order:[`alibaba`,`openai`]}}}function ve(){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=_e();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=ve();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,ee.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=g(`flex min-w-0 flex-col gap-1.5`,l),t[3]=l,t[4]=p);let m;t[5]!==i||t[6]!==s||t[7]!==o||t[8]!==u||t[9]!==f||t[10]!==a?(m=(0,M.jsx)(h,{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]=m):m=t[11];let _;return t[12]!==p||t[13]!==m?(_=(0,M.jsx)(`div`,{className:p,children:m}),t[12]=p,t[13]=m,t[14]=_):_=t[14],_}function $(e){return e.apiKey??null}export{X as a,ge as c,S as d,K as i,I as l,J as n,G as o,Y as r,q as s,Q as t,C as u};
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-F3_D_6zZ.js";import{o as a}from"./vendor-swr-BIWyz7Rc.js";import{a as o,n as s}from"./fetch-CMoWY2Si.js";import{$i as c,H as l,Jo as u,K as d,Mo as f,Oa as p,U as m,Zr as h,di as g,dr as _,li as v,lo as y,ui as b,ur as x}from"./index-0HmunJW9.js";var S=`/api/image/providers`;async function C(){return(await s(i(`/api/image/providers`)))?.payload?.providers??[]}var w=e(t(),1),ee=n();function T(){return{apiKey:``,region:``,baseUrl:``,imageBaseUrl:``}}function te(e){return e?.apiKey?`••••••••••••`:``}function E(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:te(t),region:t?.region??``,baseUrl:t?.baseUrl??``,imageBaseUrl:t?.imageBaseUrl??``}}return r}function D(e,t,n){let r=e[n].trim();if(r!==t[n].trim())return r||null}function O(e,t){let n=e.trim(),r=t.trim();if(n!==r&&!(d(n)&&d(r)))return n||(r?null:void 0)}function k(e,t,n){let r={};for(let i of e){let e=t[i]??T(),a=n[i]??T();if(JSON.stringify(e)===JSON.stringify(a))continue;let o={},s=O(e.apiKey,a.apiKey);s!==void 0&&(o.apiKey=s);let c=D(e,a,`region`);c!==void 0&&(o.region=c);let l=D(e,a,`baseUrl`);l!==void 0&&(o.baseUrl=l);let u=D(e,a,`imageBaseUrl`);u!==void 0&&(o.imageBaseUrl=u),Object.keys(o).length>0&&(r[i]=o)}return r}async function A(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 j(e){Object.keys(e).length!==0&&(await s(i(`/api/config`),{method:`PATCH`,body:JSON.stringify({providersConfig:e})}),await x())}var M=r();function ne(e){let t=(0,ee.c)(18),{providerId:n,value:r,onChange:i,labels:a,apiKeyLinks:o,apiKeyLinkLabels:s}=e,c;t[0]===n?c=t[1]:(c=()=>A(n).then(N),t[0]=n,t[1]=c);let l=c,u=`img-cred-key-${n}`,d;t[2]!==a.apiKeyLabel||t[3]!==u?(d=(0,M.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:u,children:a.apiKeyLabel}),t[2]=a.apiKeyLabel,t[3]=u,t[4]=d):d=t[4];let f;t[5]!==s||t[6]!==o?(f=o.length>0?(0,M.jsx)(`div`,{className:`flex flex-col gap-1`,children:o.map(e=>(0,M.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:[m(e.kind,s),(0,M.jsx)(y,{className:`size-3`,"aria-hidden":!0})]},`${e.kind}-${e.href}`))}):null,t[5]=s,t[6]=o,t[7]=f):f=t[7];let p=`img-cred-key-${n}`,g;t[8]!==a||t[9]!==i||t[10]!==l||t[11]!==p||t[12]!==r?(g=(0,M.jsx)(h,{id:p,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]=p,t[12]=r,t[13]=g):g=t[13];let _;return t[14]!==d||t[15]!==f||t[16]!==g?(_=(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[d,f,g]}),t[14]=d,t[15]=f,t[16]=g,t[17]=_):_=t[17],_}function N(e){return e.apiKey??null}function P(){return g(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,v)}function re(){return g(P(),`appearance-none bg-[length:1rem] bg-[right_0.5rem_center] bg-no-repeat pr-9`)}var F=`__custom__`;function ie(e,t){if(!e.region.trim()&&!e.imageBaseUrl.trim())return``;let n=e.region.trim().toLowerCase();return t.some(e=>e.value===n)?n:F}function ae(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:F}function oe(e,t,n){return t===`beijing`?e.dashscopeRegion_beijing:t===`singapore`?e.dashscopeRegion_singapore:t===`us`?e.dashscopeRegion_us:n}function se(e,t){return t===`minimax`?e.minimaxClusterLabel:t===`fal`?e.falQueueBaseLabel:e.baseUrlLabel}function ce(e,t){return t===`minimax`?e.minimaxClusterHint:t===`fal`?e.falQueueBaseHint:null}function le(e,t){return JSON.stringify(e)!==JSON.stringify(t)}function ue(e,t){return t===1?e.modelCountOne:e.modelCountMany.replace(`{count}`,String(t))}function I(e){let t=(0,ee.c)(76),{summaries:n,credDraft:r,credBaseline:i,credDirty:a,credSaving:o,credError:s,credSavedFlash:d,credNoopFlash:m,updateCredRow:h,onDiscardCredentials:_,onSaveCredentials:v,extensionIds:x,showExtensionLinks:S,showImageModelsLink:C,hideActions:te,language:E,apiKeyLinkLabels:D,messages:O}=e,k=te===void 0?!1:te,A;t[0]===n?A=t[1]:(A=n.some(he),t[0]=n,t[1]=A);let j=A,N;t[2]===n?N=t[3]:(N=n.some(me),t[2]=n,t[3]=N);let I=N,[ge,_e]=(0,w.useState)(pe),[ve,L]=(0,w.useState)(fe),R;if(t[4]!==i||t[5]!==r||t[6]!==n){R=new Set;for(let e of n)le(r[e.id]??T(),i[e.id]??T())&&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]!==ve||t[10]!==ge?(B=e=>ve.has(e)?!1:ge.has(e)?!0:z.has(e),t[8]=z,t[9]=ve,t[10]=ge,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)),_e(t=>{let n=new Set(t);return n.delete(e),n});return}L(t=>{let n=new Set(t);return n.delete(e),n}),_e(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]===O.credentialsIntro?W=t[15]:(W=(0,M.jsx)(`p`,{children:O.credentialsIntro}),t[14]=O.credentialsIntro,t[15]=W);let G;t[16]!==j||t[17]!==O.regionHint?(G=j?(0,M.jsx)(`p`,{className:`text-fg-subtle`,children:O.regionHint}):null,t[16]=j,t[17]=O.regionHint,t[18]=G):G=t[18];let K;t[19]!==I||t[20]!==O.endpointPresetsHint?(K=I?(0,M.jsx)(`p`,{className:`text-fg-subtle`,children:O.endpointPresetsHint}):null,t[19]=I,t[20]=O.endpointPresetsHint,t[21]=K):K=t[21];let q;t[22]!==C||t[23]!==O.imageModelsLinkTitle||t[24]!==O.openImageModelsPage?(q=C?(0,M.jsx)(`p`,{children:(0,M.jsx)(u,{to:`/settings/credentials?tab=image-models`,className:`font-medium text-accent hover:underline`,title:O.imageModelsLinkTitle,children:O.openImageModelsPage})}):null,t[22]=C,t[23]=O.imageModelsLinkTitle,t[24]=O.openImageModelsPage,t[25]=q):q=t[25];let J;t[26]!==W||t[27]!==G||t[28]!==K||t[29]!==q?(J=(0,M.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,M.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]!==m||t[35]!==d||t[36]!==o||t[37]!==k||t[38]!==_||t[39]!==v||t[40]!==O.credentialsNothingToSave||t[41]!==O.credentialsSaved||t[42]!==O.discardCredentials||t[43]!==O.saveCredentials||t[44]!==O.savingCredentials?(X=k?null:(0,M.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[d?(0,M.jsx)(`span`,{className:`text-sm text-fg-muted`,children:O.credentialsSaved}):null,m?(0,M.jsx)(`span`,{className:`text-sm text-fg-muted`,children:O.credentialsNothingToSave}):null,(0,M.jsx)(b,{type:`button`,variant:`secondary`,onClick:_,disabled:!a||o,children:O.discardCredentials}),(0,M.jsx)(b,{type:`button`,variant:`primary`,onClick:v,disabled:!a||o,children:o?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(p,{className:`size-3.5 animate-spin`}),(0,M.jsx)(`span`,{className:`ml-1.5`,children:O.savingCredentials})]}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(c,{className:`size-3.5`}),(0,M.jsx)(`span`,{className:`ml-1.5`,children:O.saveCredentials})]})})]}),t[33]=a,t[34]=m,t[35]=d,t[36]=o,t[37]=k,t[38]=_,t[39]=v,t[40]=O.credentialsNothingToSave,t[41]=O.credentialsSaved,t[42]=O.discardCredentials,t[43]=O.saveCredentials,t[44]=O.savingCredentials,t[45]=X):X=t[45];let Z;if(t[46]!==D||t[47]!==i||t[48]!==r||t[49]!==x||t[50]!==V||t[51]!==E||t[52]!==S||t[53]!==n||t[54]!==O||t[55]!==U||t[56]!==h){let e;t[58]!==D||t[59]!==i||t[60]!==r||t[61]!==x||t[62]!==V||t[63]!==E||t[64]!==S||t[65]!==O||t[66]!==U||t[67]!==h?(e=e=>{let t=r[e.id]??T(),n=e.ui,a=S&&x.has(e.id)?`/settings/ext/${encodeURIComponent(e.id)}`:null,o=le(t,i[e.id]??T()),s=V(e.id),c=e.label??e.id,d=ue(O,e.models.length);return(0,M.jsxs)(`section`,{className:g(`overflow-hidden rounded-xl border bg-surface-panel shadow-sm transition-colors dark:shadow-none`,o?`border-accent/50`:`border-edge`),children:[(0,M.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,M.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,M.jsx)(`span`,{className:`truncate text-sm font-semibold text-fg`,children:c}),(0,M.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,M.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:O.unsavedChanges}):null,e.configured?(0,M.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:O.configured}):(0,M.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:O.missingKey})]}),(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-subtle`,children:[(0,M.jsx)(`span`,{children:d}),e.defaultModel?(0,M.jsxs)(`span`,{className:`min-w-0 truncate`,children:[(0,M.jsxs)(`span`,{className:`text-fg-muted`,children:[O.defaultModel,`:`]}),` `,e.id,`/`,e.defaultModel]}):null]})]}),(0,M.jsx)(f,{className:g(`mt-0.5 size-4 shrink-0 text-fg-subtle transition-transform`,s?`rotate-180`:`rotate-0`),"aria-hidden":`true`}),(0,M.jsx)(`span`,{className:`sr-only`,children:s?O.collapseProvider:O.expandProvider})]}),s?(0,M.jsxs)(`div`,{id:`img-provider-credentials-${e.id}`,className:`border-t border-edge px-4 py-4`,children:[a?(0,M.jsxs)(u,{to:a,className:`mb-3 inline-flex items-center gap-1 text-xs font-medium text-accent hover:underline`,title:O.extensionSettingsLinkTitle,children:[(0,M.jsx)(y,{className:`size-3`}),O.openExtensionSettings]}):null,e.models.length>0?(0,M.jsxs)(`p`,{className:`mb-3 text-xs leading-relaxed text-fg-subtle`,children:[(0,M.jsxs)(`span`,{className:`text-fg-muted`,children:[O.modelsLabel,`:`]}),` `,e.models.map(t=>`${e.id}/${t}`).join(`, `)]}):null,(0,M.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,M.jsx)(ne,{providerId:e.id,value:t.apiKey,onChange:t=>h(e.id,{apiKey:t}),apiKeyLinks:l(e.id,E),apiKeyLinkLabels:D,labels:{apiKeyLabel:O.apiKeyLabel,optionalPlaceholder:O.optionalPlaceholder,maskedHelp:O.apiKeyMaskedHelp,copy:O.apiKeyCopy,copied:O.apiKeyCopied,show:O.apiKeyShow,hide:O.apiKeyHide,notInConfigFile:O.apiKeyNotInConfigFile,loadFailed:O.apiKeyRevealFailed}}),n?.regions?.length?(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,M.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-region-preset-${e.id}`,children:O.regionLabel}),(0,M.jsxs)(`select`,{id:`img-cred-region-preset-${e.id}`,className:re(),value:ie(t,n.regions),onChange:t=>{let r=t.target.value;if(r===``){h(e.id,{region:``,imageBaseUrl:``});return}if(r===F){h(e.id,{region:``,imageBaseUrl:``});return}let i=n.regions.find(e=>e.value===r);i&&h(e.id,{region:i.value,imageBaseUrl:i.imageBaseUrl})},children:[(0,M.jsx)(`option`,{value:``,children:O.regionPresetDefault}),n.regions.map(e=>(0,M.jsx)(`option`,{value:e.value,children:oe(O,e.value,e.label)},e.value)),(0,M.jsx)(`option`,{value:F,children:O.regionPresetCustom})]}),ie(t,n.regions)===F?(0,M.jsxs)(`div`,{className:`mt-2 grid gap-2 sm:grid-cols-2`,children:[(0,M.jsx)(`input`,{type:`text`,className:P(),value:t.region,placeholder:`region`,onChange:t=>h(e.id,{region:t.target.value})}),(0,M.jsx)(`input`,{type:`url`,className:P(),value:t.imageBaseUrl,placeholder:O.imageBaseUrlLabel,onChange:t=>h(e.id,{imageBaseUrl:t.target.value})})]}):null]}):null,n?.baseUrlPresets?.length?(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,M.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-base-preset-${e.id}`,children:se(O,n.baseUrlPresetKind)}),ce(O,n.baseUrlPresetKind)?(0,M.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:ce(O,n.baseUrlPresetKind)}):null,(0,M.jsxs)(`select`,{id:`img-cred-base-preset-${e.id}`,className:re(),value:ae(t,n.baseUrlPresets),onChange:t=>{let n=t.target.value;if(n===``){h(e.id,{baseUrl:``});return}if(n===F){h(e.id,{baseUrl:``});return}h(e.id,{baseUrl:n.replace(/\/+$/,``)})},children:[(0,M.jsx)(`option`,{value:``,children:O.baseUrlPresetDefault}),n.baseUrlPresets.map(de),(0,M.jsx)(`option`,{value:F,children:O.baseUrlPresetCustom})]}),ae(t,n.baseUrlPresets)===F?(0,M.jsx)(`input`,{type:`url`,className:g(P(),`mt-2`),value:t.baseUrl,placeholder:`https://…`,onChange:t=>h(e.id,{baseUrl:t.target.value})}):null]}):null,n?.regions?.length&&ie(t,n.regions)!==F?(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,M.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-imgbase-ro-${e.id}`,children:O.imageBaseUrlLabel}),(0,M.jsx)(`input`,{id:`img-cred-imgbase-ro-${e.id}`,type:`url`,readOnly:!0,className:g(P(),`cursor-not-allowed opacity-90`),value:t.imageBaseUrl,title:O.imageBaseUrlPresetHint}),(0,M.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:O.imageBaseUrlPresetHint})]}):null]})]}):null]},e.id)},t[58]=D,t[59]=i,t[60]=r,t[61]=x,t[62]=V,t[63]=E,t[64]=S,t[65]=O,t[66]=U,t[67]=h,t[68]=e):e=t[68],Z=n.map(e),t[46]=D,t[47]=i,t[48]=r,t[49]=x,t[50]=V,t[51]=E,t[52]=S,t[53]=n,t[54]=O,t[55]=U,t[56]=h,t[57]=Z}else Z=t[57];let Q;t[69]===Z?Q=t[70]:(Q=(0,M.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,M.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 de(e){return(0,M.jsx)(`option`,{value:e.value,children:e.label},e.value)}function fe(){return new Set}function pe(){return new Set}function me(e){return(e.ui?.baseUrlPresets?.length??0)>0}function he(e){return(e.ui?.regions?.length??0)>0}function ge(e){let t=_(o(e=>!!e.token)),n=t.data,r=(0,w.useMemo)(()=>e.map(e=>e.id),[e]),s=(0,w.useRef)(!1),[c,l]=(0,w.useState)(null),[u,d]=(0,w.useState)(!1),[f,p]=(0,w.useState)(null),[m,h]=(0,w.useState)(!1),[g,v]=(0,w.useState)(!1),y=(0,w.useMemo)(()=>E(n?.payload?.config,r),[n?.payload?.config,r]),b=c??y,x=y;return{gwSwr:t,credDraft:b,credBaseline:x,credDirty:(0,w.useMemo)(()=>JSON.stringify(b)!==JSON.stringify(x),[b,x]),credSaving:u,credError:f,credSavedFlash:m,credNoopFlash:g,updateCredRow:(0,w.useCallback)((e,t)=>{s.current=!0,l(n=>{let r=n??y,i=r[e]??T();return{...r,[e]:{...i,...t}}})},[y]),onDiscardCredentials:(0,w.useCallback)(()=>{s.current=!1,l(null),p(null),h(!1),v(!1)},[]),saveCredentials:(0,w.useCallback)(async e=>{let n=k(r,b,x);if(Object.keys(n).length===0){v(!0),window.setTimeout(()=>v(!1),2200);return}d(!0),p(null),h(!1);try{await j(n),await t.mutate?.(),a(i(S)),s.current=!1,l(null),h(!0),window.setTimeout(()=>h(!1),2e3)}catch(t){p(t instanceof Error?t.message:e)}finally{d(!1)}},[r,b,x,t])}}function _e(){return{enabled:!1,provider:`alibaba`,alibaba:{model:`paraformer-v2`},openai:{model:`whisper-1`},fallback:{enabled:!0,order:[`alibaba`,`openai`]}}}function ve(){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=_e();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=ve();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,ee.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=g(`flex min-w-0 flex-col gap-1.5`,l),t[3]=l,t[4]=p);let m;t[5]!==i||t[6]!==s||t[7]!==o||t[8]!==u||t[9]!==f||t[10]!==a?(m=(0,M.jsx)(h,{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]=m):m=t[11];let _;return t[12]!==p||t[13]!==m?(_=(0,M.jsx)(`div`,{className:p,children:m}),t[12]=p,t[13]=m,t[14]=_):_=t[14],_}function $(e){return e.apiKey??null}export{X as a,ge as c,S as d,K as i,I as l,J as n,G as o,Y as r,q as s,Q as t,C as u};
@@ -1 +1 @@
1
- import{Qn as e,c as t,s as n}from"./index-WAyKAilR.js";function r(e){return e===`zh`?`zh`:`en`}function i(e,t){let n=r(t),i=n===`en`?void 0:e.metadata.i18n?.[n],a=i?.examplePrompts&&i.examplePrompts.length>0?i.examplePrompts:e.metadata.examplePrompts??[];return{description:o(i?.description,e.description),whenToUse:s(i?.whenToUse,e.metadata.whenToUse),examplePrompts:a}}function a(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 o(e,t){return e?.trim()||t}function s(e,t){return e?.trim()||t?.trim()||void 0}function c(e,t,n){if(e.field===`goal`){t(e.text);return}n(t=>({...t,[e.field]:e.text}))}function l(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>String(t[n]??``))}function u(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 d(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 f(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 p(e){let r=e.metadata.tags.map(e=>e.toLowerCase());for(let e of n)if(t[e].some(e=>r.includes(e)))return e;return null}function m(e,n){if(n===`all`)return!0;let r=e.metadata.tags.map(e=>e.toLowerCase());return t[n].some(e=>r.includes(e))}function h(e){let t=new Map;for(let n of e){let e=p(n)??`uncategorized`,r=t.get(e)??[];r.push(n),t.set(e,r)}let r=[];for(let e of n){let n=t.get(e);n?.length&&r.push({category:e,items:n})}let i=t.get(`uncategorized`);return i?.length&&r.push({category:`uncategorized`,items:i}),r}function g(e,t){return t===`all`?!0:t===`builtin`?e.metadata.builtIn:e.metadata.source===`user`}function _(e,t,n,r){let i=t.trim().toLowerCase();return e.filter(e=>!m(e,n)||!g(e,r)?!1:i?a(e).includes(i):!0)}function v(e){if(e==null)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function y(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 b(t){let n=t.run.metadata?.sessionKey?.trim();return n&&e(n)?n:null}function x(e){return`/chat/${encodeURIComponent(e)}`}function S(e){let t=e.source;return t&&typeof t==`object`&&`kind`in t&&typeof t.kind==`string`?t.kind:e.metadata?.triggerSource?.trim()||`unknown`}function C(e,t){let n=t.trim();return!n||n===`all`?!0:S(e)===n}function w(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}export{h as a,b as c,v as d,x as f,u as i,C as l,i as m,_ as n,l as o,c as p,d as r,y as s,w as t,f as u};
1
+ import{Qn as e,c as t,s as n}from"./index-0HmunJW9.js";function r(e){return e===`zh`?`zh`:`en`}function i(e,t){let n=r(t),i=n===`en`?void 0:e.metadata.i18n?.[n],a=i?.examplePrompts&&i.examplePrompts.length>0?i.examplePrompts:e.metadata.examplePrompts??[];return{description:o(i?.description,e.description),whenToUse:s(i?.whenToUse,e.metadata.whenToUse),examplePrompts:a}}function a(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 o(e,t){return e?.trim()||t}function s(e,t){return e?.trim()||t?.trim()||void 0}function c(e,t,n){if(e.field===`goal`){t(e.text);return}n(t=>({...t,[e.field]:e.text}))}function l(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>String(t[n]??``))}function u(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 d(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 f(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 p(e){let r=e.metadata.tags.map(e=>e.toLowerCase());for(let e of n)if(t[e].some(e=>r.includes(e)))return e;return null}function m(e,n){if(n===`all`)return!0;let r=e.metadata.tags.map(e=>e.toLowerCase());return t[n].some(e=>r.includes(e))}function h(e){let t=new Map;for(let n of e){let e=p(n)??`uncategorized`,r=t.get(e)??[];r.push(n),t.set(e,r)}let r=[];for(let e of n){let n=t.get(e);n?.length&&r.push({category:e,items:n})}let i=t.get(`uncategorized`);return i?.length&&r.push({category:`uncategorized`,items:i}),r}function g(e,t){return t===`all`?!0:t===`builtin`?e.metadata.builtIn:e.metadata.source===`user`}function _(e,t,n,r){let i=t.trim().toLowerCase();return e.filter(e=>!m(e,n)||!g(e,r)?!1:i?a(e).includes(i):!0)}function v(e){if(e==null)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function y(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 b(t){let n=t.run.metadata?.sessionKey?.trim();return n&&e(n)?n:null}function x(e){return`/chat/${encodeURIComponent(e)}`}function S(e){let t=e.source;return t&&typeof t==`object`&&`kind`in t&&typeof t.kind==`string`?t.kind:e.metadata?.triggerSource?.trim()||`unknown`}function C(e,t){let n=t.trim();return!n||n===`all`?!0:S(e)===n}function w(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}export{h as a,b as c,v as d,x as f,u as i,C as l,i as m,_ as n,l as o,c as p,d as r,y as s,w as t,f as u};
@@ -1,4 +1,4 @@
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}from"./url-q28QhI7l.js";import{i as o}from"./vendor-swr-BIWyz7Rc.js";import{t as s}from"./copy-Dv6d4Dvw.js";import{a as c}from"./fetch-drJUxxKP.js";import{$o as l,Ba as u,Bi as d,C as f,Ca as p,Ci as m,Cr as h,D as g,Dr as _,E as v,Er as y,Mo as b,No as x,Or as S,Qr as C,Ri as w,S as T,T as E,To as D,Tr as O,Yi as k,Zo as A,_ as ee,_a as te,a as j,b as M,d as N,di as P,eo as F,f as ne,fo as I,g as re,h as ie,i as ae,ki as L,kr as R,l as z,la as oe,m as se,na as B,ni as ce,o as V,p as H,pi as U,r as W,sa as G,ta as K,u as le,ui as q,uo as ue,v as J,vi as de,w as fe,wr as pe,y as me,zr as he}from"./index-WAyKAilR.js";import{a as Y,c as ge,d as _e,f as ve,i as ye,l as be,m as xe,n as Se,o as X,p as Ce,r as we,s as Te,t as Ee,u as De}from"./workflow-page.utils-Bi19YNTr.js";var Z=e(t(),1),Q=n(),Oe=[`queued`,`running`,`succeeded`,`attention`],ke=10080*60*1e3,Ae=new Set([`failed`,`timeout`,`cancelled`]);function je(e){return e.metadata?.sessionKey?.trim()||null}function Me(e,t){return e.length<=t?e:`${e.slice(0,t-1)}…`}function Ne(e,t){if(!e||typeof e!=`object`)return null;let n=e;for(let e of t){let t=n[e];if(typeof t==`string`&&t.trim())return t.trim()}return null}function Pe(e,t=90){let n=e.metadata?.input?.goal?.trim()||(typeof e.metadata?.input?.payload==`string`?e.metadata.input.payload.trim():null)||Ne(e.metadata?.input?.payload,[`query`,`goal`,`prompt`,`input`,`message`])||Ne(e.metadata?.input?.variables,[`query`,`goal`,`prompt`,`input`,`message`]);return n?Me(n,t):null}function Fe(e,t=90){return Pe(e,t)??Me(e.title?.trim()||e.definitionId,t)}function Ie(e,t=44){return Me(e.title?.trim()||e.definitionId,t)}function Le(e,t){let n=t.trim().toLowerCase();return n?[Pe(e,500),e.title,e.definitionId,e.id].filter(Boolean).join(` `).toLowerCase().includes(n):!0}function Re(e,t){let n=t.workflowFilterId.trim();return e.filter(e=>n&&e.definitionId!==n||!be(e,t.triggerFilter??`all`)?!1:Le(e,t.searchQuery))}function ze(e){return e.completedAtMs??e.createdAtMs}function Be(e,t){return t-ze(e)<=ke}function Ve(e,t){return e.status===`queued`?`queued`:e.status===`running`?`running`:e.status===`succeeded`?Be(e,t)?`succeeded`:null:Ae.has(e.status)?`attention`:null}function He(e,t){let n=[...t];return e===`queued`?n.sort((e,t)=>e.createdAtMs-t.createdAtMs):e===`running`?n.sort((e,t)=>(t.startedAtMs??t.createdAtMs)-(e.startedAtMs??e.createdAtMs)):n.sort((e,t)=>ze(t)-ze(e))}function Ue(e,t){let n={queued:[],running:[],succeeded:[],attention:[]};for(let r of e){let e=Ve(r,t);e&&n[e].push(r)}let r=He(`succeeded`,n.succeeded),i=r.length,a=r.slice(0,20),o=Math.max(0,i-20);return Oe.map(e=>e===`succeeded`?{id:e,runs:a,totalInWindow:i,hiddenByCap:o}:{id:e,runs:He(e,n[e])})}var We=new Map;function Ge(e){let t=We.get(e);return t||(t=new Intl.RelativeTimeFormat(e,{numeric:`auto`}),We.set(e,t)),t}function Ke(e,t,n){let r=Math.round((t-e)/1e3),i=Ge(n);if(r<60)return i.format(-r,`second`);let a=Math.round(r/60);if(a<60)return i.format(-a,`minute`);let o=Math.round(a/60);if(o<48)return i.format(-o,`hour`);let s=Math.round(o/24);return i.format(-s,`day`)}function qe(e){return e.status===`queued`||e.status===`running`}function Je(e){return e.status===`failed`||e.status===`timeout`||e.status===`cancelled`}var $=r(),Ye=(0,Z.memo)(function(e){let t=(0,Q.c)(65),{run:n,language:r,localeTag:i,nowMs:o,selected:s,onOpen:c,onOpenChat:l,onCancel:u,onRetry:d}=e,f=a(r).workflows,[p,h]=(0,Z.useState)(!1),g;t[0]===n?g=t[1]:(g=je(n),t[0]=n,t[1]=g);let _=!g,v;t[2]===n?v=t[3]:(v=qe(n),t[2]=n,t[3]=v);let y=v,b=n.status===`running`||n.status===`queued`,x;t[4]!==n.metrics.agentCount||t[5]!==n.metrics.doneAgentCount?(x=n.metrics.agentCount>0?Math.round(n.metrics.doneAgentCount/n.metrics.agentCount*100):0,t[4]=n.metrics.agentCount,t[5]=n.metrics.doneAgentCount,t[6]=x):x=t[6];let S=x,C=n.metrics.errorAgentCount>0,w=n.startedAtMs??n.createdAtMs,T=we(y?o-w:n.metrics.durationMs),E=X(f.taskArtifacts,{count:n.metrics.artifactCount}),D;t[7]===n?D=t[8]:(D=Fe(n),t[7]=n,t[8]=D);let O=D,k;t[9]===n?k=t[10]:(k=Ie(n),t[9]=n,t[10]=k);let A=k,ee;t[11]!==c||t[12]!==n?(ee=()=>{c(n)},t[11]=c,t[12]=n,t[13]=ee):ee=t[13];let te=ee,j;t[14]!==_||t[15]!==l||t[16]!==n?(j=()=>{_||l(n)},t[14]=_,t[15]=l,t[16]=n,t[17]=j):j=t[17];let M=j,N=s?`border-accent/70 ring-1 ring-accent/30`:`border-edge`,F;t[18]===N?F=t[19]:(F=P(`group relative overflow-hidden rounded-xl border bg-surface-panel p-3.5 transition-colors`,N,`hover:border-edge-strong hover:bg-surface-hover/50`),t[18]=N,t[19]=F);let ne;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(ne=P(`w-full text-left`,ce.focusRingPanel),t[20]=ne):ne=t[20];let I;t[21]===O?I=t[22]:(I=(0,$.jsx)(`div`,{className:`line-clamp-2 text-sm font-semibold leading-5 text-fg`,children:O}),t[21]=O,t[22]=I);let re;t[23]===A?re=t[24]:(re=(0,$.jsx)(`div`,{className:`mt-1 truncate text-[11px] font-medium text-fg-muted`,children:A}),t[23]=A,t[24]=re);let ie;t[25]!==I||t[26]!==re?(ie=(0,$.jsxs)(`div`,{className:`min-w-0`,children:[I,re]}),t[25]=I,t[26]=re,t[27]=ie):ie=t[27];let ae;t[28]===n.status?ae=t[29]:(ae=P(`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm`,De(n.status)),t[28]=n.status,t[29]=ae);let L;t[30]!==i||t[31]!==o||t[32]!==w?(L=Ke(w,o,i),t[30]=i,t[31]=o,t[32]=w,t[33]=L):L=t[33];let R;t[34]===L?R=t[35]:(R=(0,$.jsx)(`span`,{children:L}),t[34]=L,t[35]=R);let z=T===`—`?null:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,$.jsx)(`span`,{children:X(f.taskElapsed,{duration:T})})]}),oe;t[36]!==R||t[37]!==z?(oe=(0,$.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-1.5 text-[11px] text-fg-subtle`,children:[R,z]}),t[36]=R,t[37]=z,t[38]=oe):oe=t[38];let se=n.metrics.artifactCount>0?(0,$.jsx)(`span`,{className:`rounded-full bg-surface-hover px-2 py-0.5 font-medium text-fg-muted`,children:E}):null,B=s?(0,$.jsx)(`span`,{className:`font-medium text-accent-fg`,children:f.taskOpenDetails}):null,V;t[39]!==se||t[40]!==B?(V=(0,$.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2 text-[11px] text-fg-subtle`,children:[se,B]}),t[39]=se,t[40]=B,t[41]=V):V=t[41];let H;t[42]===h?H=t[43]:(H=()=>h(Ze),t[42]=h,t[43]=H);let U;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,$.jsx)(ue,{className:`size-4`,"aria-hidden":!0}),t[44]=U):U=t[44];let W;t[45]!==f.taskActionsAria||t[46]!==p||t[47]!==H?(W=(0,$.jsx)(q,{variant:`ghost`,className:`size-7 p-0 opacity-0 group-hover:opacity-100 group-focus-within:opacity-100`,"aria-label":f.taskActionsAria,"aria-expanded":p,onClick:H,children:U}),t[45]=f.taskActionsAria,t[46]=p,t[47]=H,t[48]=W):W=t[48];let G;t[49]!==y||t[50]!==_||t[51]!==M||t[52]!==f.cancel||t[53]!==f.continueInChat||t[54]!==f.rerun||t[55]!==f.taskCloseMenu||t[56]!==p||t[57]!==u||t[58]!==d||t[59]!==n||t[60]!==h?(G=p?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{type:`button`,className:`fixed inset-0 z-10 cursor-default`,"aria-label":f.taskCloseMenu,onClick:()=>h(!1)}),(0,$.jsxs)(`div`,{className:`absolute right-0 z-20 mt-1 min-w-36 rounded-lg border border-edge bg-surface-panel py-1 shadow-surface`,children:[(0,$.jsx)(Xe,{label:f.continueInChat,disabled:_,onClick:()=>{h(!1),M()}}),y?(0,$.jsx)(Xe,{label:f.cancel,tone:`danger`,onClick:()=>{h(!1),u(n.id)}}):null,Je(n)?(0,$.jsx)(Xe,{label:f.rerun,onClick:()=>{h(!1),d(n.id)}}):null]})]}):null,t[49]=y,t[50]=_,t[51]=M,t[52]=f.cancel,t[53]=f.continueInChat,t[54]=f.rerun,t[55]=f.taskCloseMenu,t[56]=p,t[57]=u,t[58]=d,t[59]=n,t[60]=h,t[61]=G):G=t[61];let K;return t[62]!==W||t[63]!==G?(K=(0,$.jsxs)(`div`,{className:`absolute right-2 top-2`,children:[W,G]}),t[62]=W,t[63]=G,t[64]=K):K=t[64],(0,$.jsxs)(`div`,{className:F,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:te,"aria-label":`${f.taskOpenDetails}: ${O}`,"aria-current":s?`true`:void 0,className:ne,children:[(0,$.jsxs)(`div`,{className:`pr-7`,children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-2`,children:[ie,(0,$.jsx)(`span`,{className:ae,children:f.status[n.status]??n.status})]}),oe]}),b?(0,$.jsxs)(`div`,{className:`mt-2.5`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-[11px] text-fg-muted`,children:[(0,$.jsx)(`span`,{children:X(f.agentProgress,{done:n.metrics.doneAgentCount,total:n.metrics.agentCount})}),(0,$.jsxs)(`span`,{children:[S,`%`]})]}),(0,$.jsx)(`div`,{className:`mt-1.5 h-1.5 overflow-hidden rounded-full bg-surface-hover`,children:(0,$.jsx)(`div`,{className:`h-full rounded-full bg-accent transition-all`,style:{width:`${S}%`}})})]}):null,V,C?(0,$.jsxs)(`div`,{className:`mt-2 flex items-center gap-1 text-[11px] text-amber-700 dark:text-amber-300`,children:[(0,$.jsx)(m,{className:`size-3 shrink-0`,"aria-hidden":!0}),X(f.runRowErrorSummary,{count:n.metrics.errorAgentCount})]}):null]}),K]})});function Xe(e){let t=(0,Q.c)(8),{label:n,disabled:r,tone:i,onClick:a}=e,o=r?`cursor-not-allowed text-fg-subtle`:`text-fg hover:bg-surface-hover`,s=i===`danger`&&!r&&`text-red-600 dark:text-red-300`,c;t[0]!==o||t[1]!==s?(c=P(`block w-full px-3 py-1.5 text-left text-xs`,o,s),t[0]=o,t[1]=s,t[2]=c):c=t[2];let l;return t[3]!==r||t[4]!==n||t[5]!==a||t[6]!==c?(l=(0,$.jsx)(`button`,{type:`button`,disabled:r,onClick:a,className:c,children:n}),t[3]=r,t[4]=n,t[5]=a,t[6]=c,t[7]=l):l=t[7],l}function Ze(e){return!e}function Qe(e,t){return t.boardColumns[e]}var $e=(0,Z.memo)(function(e){let t=(0,Q.c)(14),{column:n,language:r,localeTag:i,nowMs:o,selectedRunId:s,onOpenRun:c,onOpenRunChat:l,onCancelRun:u,onRetryRun:d}=e,f=a(r).workflows,[p,m]=(0,Z.useState)(!1),h=n.id===`succeeded`,g=h?5:n.runs.length,_;t[0]!==g||t[1]!==n.runs||t[2]!==p||t[3]!==h?(_=h&&!p?n.runs.slice(0,g):n.runs,t[0]=g,t[1]=n.runs,t[2]=p,t[3]=h,t[4]=_):_=t[4];let v=_,y=h&&n.runs.length>5&&!p,b=h&&p,x;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(x=P(`flex min-h-112 w-73 shrink-0 snap-center flex-col rounded-2xl border border-edge bg-surface-panel/40`),t[5]=x):x=t[5];let S;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,$.jsx)(`span`,{className:`size-2 rounded-full bg-accent`,"aria-hidden":!0}),t[6]=S):S=t[6];let C;t[7]===n.runs.length?C=t[8]:(C=(0,$.jsx)(`span`,{className:`rounded-full bg-surface-hover px-2.5 py-1 text-xs font-semibold tabular-nums text-fg-muted`,children:n.runs.length}),t[7]=n.runs.length,t[8]=C);let w=v.length===0?(0,$.jsx)(`div`,{className:`flex min-h-32 items-center justify-center rounded-xl border border-dashed border-edge bg-surface-panel/40 px-4 py-6 text-center text-xs text-fg-subtle`,children:f.boardColumnEmpty}):v.map(e=>(0,$.jsx)(Ye,{run:e,language:r,localeTag:i,nowMs:o,selected:e.id===s,onOpen:c,onOpenChat:l,onCancel:u,onRetry:d},e.id)),T=y?(0,$.jsx)(q,{variant:`ghost`,className:`h-8 w-full text-xs`,onClick:()=>m(!0),children:X(f.boardExpandSucceeded,{count:Math.min(n.runs.length,n.totalInWindow??n.runs.length)})}):null,E=b?(0,$.jsx)(q,{variant:`ghost`,className:`h-8 w-full text-xs`,onClick:()=>m(!1),children:f.boardCollapseSucceeded}):null,D=h&&(n.hiddenByCap??0)>0?(0,$.jsx)(`p`,{className:`px-1 text-center text-[11px] text-fg-subtle`,children:X(f.boardSucceededCapHint,{count:n.hiddenByCap??0})}):null,O;return t[9]!==w||t[10]!==T||t[11]!==E||t[12]!==D?(O=(0,$.jsxs)(`div`,{className:`flex flex-1 flex-col gap-3 p-2.5`,children:[w,T,E,D]}),t[9]=w,t[10]=T,t[11]=E,t[12]=D,t[13]=O):O=t[13],(0,$.jsxs)(`section`,{className:x,"aria-label":Qe(n.id,f),children:[(0,$.jsxs)(`header`,{className:`sticky top-0 z-10 flex items-center justify-between gap-2 rounded-t-2xl border-b border-edge-subtle bg-surface-panel/90 px-3.5 py-3 backdrop-blur`,children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[S,(0,$.jsx)(`h2`,{className:`truncate text-sm font-semibold text-fg`,children:Qe(n.id,f)})]}),C]}),O]})}),et=(0,Z.memo)(function(e){let t=(0,Q.c)(45),{runs:n,language:r,localeTag:i,labels:a,searchQuery:o,workflowFilterId:s,triggerFilter:c,selectedRunId:l,loading:u,onOpenRun:d,onOpenRunChat:f,onCancelRun:p,onRetryRun:m,onStart:h}=e,g;t[0]===n?g=t[1]:(g=n.some(tt),t[0]=n,t[1]=g);let _=g,[v,y]=(0,Z.useState)(nt),b,x;t[2]===_?(b=t[3],x=t[4]):(b=()=>{if(!_)return;let e=window.setInterval(()=>y(Date.now()),1e3);return()=>window.clearInterval(e)},x=[_],t[2]=_,t[3]=b,t[4]=x),(0,Z.useEffect)(b,x);let S;t[5]!==v||t[6]!==n||t[7]!==o||t[8]!==c||t[9]!==s?(S=Ue(Re(n,{searchQuery:o,workflowFilterId:s,triggerFilter:c}),v),t[5]=v,t[6]=n,t[7]=o,t[8]=c,t[9]=s,t[10]=S):S=t[10];let C=S,w=C.reduce(rt,0);if(u&&w===0){let e;return t[11]===a.loading?e=t[12]:(e=(0,$.jsx)(`p`,{className:`text-sm text-fg-muted`,children:a.loading}),t[11]=a.loading,t[12]=e),e}if(!u&&w===0){let e;t[13]===a.boardEmptyTitle?e=t[14]:(e=(0,$.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:a.boardEmptyTitle}),t[13]=a.boardEmptyTitle,t[14]=e);let n;t[15]===a.boardEmptyHint?n=t[16]:(n=(0,$.jsx)(`p`,{className:`mx-auto mt-2 max-w-md text-sm leading-6 text-fg-muted`,children:a.boardEmptyHint}),t[15]=a.boardEmptyHint,t[16]=n);let r;t[17]!==a.boardStart||t[18]!==h?(r=(0,$.jsx)(`div`,{className:`mt-4 flex justify-center`,children:(0,$.jsx)(q,{variant:`primary`,onClick:h,children:a.boardStart})}),t[17]=a.boardStart,t[18]=h,t[19]=r):r=t[19];let i;return t[20]!==e||t[21]!==n||t[22]!==r?(i=(0,$.jsxs)(`div`,{className:`rounded-2xl border border-dashed border-edge bg-surface-panel/40 px-6 py-12 text-center`,children:[e,n,r]}),t[20]=e,t[21]=n,t[22]=r,t[23]=i):i=t[23],i}let T;if(t[24]!==C||t[25]!==r||t[26]!==i||t[27]!==v||t[28]!==p||t[29]!==d||t[30]!==f||t[31]!==m||t[32]!==l){let e;t[34]!==r||t[35]!==i||t[36]!==v||t[37]!==p||t[38]!==d||t[39]!==f||t[40]!==m||t[41]!==l?(e=e=>(0,$.jsx)($e,{column:e,language:r,localeTag:i,nowMs:v,selectedRunId:l,onOpenRun:d,onOpenRunChat:f,onCancelRun:p,onRetryRun:m},e.id),t[34]=r,t[35]=i,t[36]=v,t[37]=p,t[38]=d,t[39]=f,t[40]=m,t[41]=l,t[42]=e):e=t[42],T=C.map(e),t[24]=C,t[25]=r,t[26]=i,t[27]=v,t[28]=p,t[29]=d,t[30]=f,t[31]=m,t[32]=l,t[33]=T}else T=t[33];let E;return t[43]===T?E=t[44]:(E=(0,$.jsx)(`div`,{className:`-mx-1 flex min-w-0 snap-x snap-mandatory gap-3 overflow-x-auto px-1 pb-2`,children:T}),t[43]=T,t[44]=E),E});function tt(e){return e.status===`queued`||e.status===`running`}function nt(){return Date.now()}function rt(e,t){return e+t.runs.length}function it(e){let t=(0,Q.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 l=c.workflows;if(!r)return null;let u;t[2]!==r||t[3]!==i?(u=xe(r,i),t[2]=r,t[3]=i,t[4]=u):u=t[4];let d=u,f=r.runtime?.source??``,p;t[5]===o?p=t[6]:(p=e=>!e&&o(),t[5]=o,t[6]=p);let m;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,$.jsx)(y,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),t[7]=m):m=t[7];let h;t[8]===r.title?h=t[9]:(h=(0,$.jsx)(R,{className:`text-base font-semibold text-fg`,children:r.title}),t[8]=r.title,t[9]=h);let g;t[10]===d.description?g=t[11]:(g=(0,$.jsx)(O,{className:`mt-1 text-sm text-fg-muted`,children:d.description}),t[10]=d.description,t[11]=g);let v;t[12]!==h||t[13]!==g?(v=(0,$.jsxs)(`div`,{className:`border-b border-edge px-5 py-4`,children:[h,g]}),t[12]=h,t[13]=g,t[14]=v):v=t[14];let b;t[15]!==l.whenToUseHeading||t[16]!==d.whenToUse?(b=d.whenToUse?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:l.whenToUseHeading}),(0,$.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-fg-muted`,children:d.whenToUse})]}):null,t[15]=l.whenToUseHeading,t[16]=d.whenToUse,t[17]=b):b=t[17];let x;t[18]!==r.phases||t[19]!==l.phasesHeading?(x=r.phases.length>0?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:l.phasesHeading}),(0,$.jsx)(`ol`,{className:`mt-2 space-y-2`,children:r.phases.map(at)})]}):null,t[18]=r.phases,t[19]=l.phasesHeading,t[20]=x):x=t[20];let C;t[21]!==l.scriptHeading||t[22]!==f?(C=f?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:l.scriptHeading}),(0,$.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:f})]}):null,t[21]=l.scriptHeading,t[22]=f,t[23]=C):C=t[23];let w;t[24]!==C||t[25]!==b||t[26]!==x?(w=(0,$.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-auto px-5 py-4`,children:[b,x,C]}),t[24]=C,t[25]=b,t[26]=x,t[27]=w):w=t[27];let T;t[28]!==l.closeResult||t[29]!==o?(T=(0,$.jsx)(q,{variant:`secondary`,onClick:o,children:l.closeResult}),t[28]=l.closeResult,t[29]=o,t[30]=T):T=t[30];let E;t[31]!==l.runWorkflow||t[32]!==s?(E=(0,$.jsx)(q,{variant:`primary`,onClick:s,children:l.runWorkflow}),t[31]=l.runWorkflow,t[32]=s,t[33]=E):E=t[33];let D;t[34]!==T||t[35]!==E?(D=(0,$.jsxs)(`div`,{className:`flex justify-end gap-2 border-t border-edge px-5 py-4`,children:[T,E]}),t[34]=T,t[35]=E,t[36]=D):D=t[36];let k;t[37]!==w||t[38]!==D||t[39]!==v?(k=(0,$.jsxs)(_,{children:[m,(0,$.jsxs)(pe,{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:[v,w,D]})]}),t[37]=w,t[38]=D,t[39]=v,t[40]=k):k=t[40];let A;return t[41]!==n||t[42]!==k||t[43]!==p?(A=(0,$.jsx)(S,{open:n,onOpenChange:p,children:k}),t[41]=n,t[42]=k,t[43]=p,t[44]=A):A=t[44],A}function at(e,t){return(0,$.jsxs)(`li`,{className:`rounded-xl border border-edge bg-surface-base/40 px-3 py-2`,children:[(0,$.jsxs)(`div`,{className:`text-sm font-medium text-fg`,children:[t+1,`. `,e.title]}),e.description?(0,$.jsx)(`p`,{className:`mt-1 text-xs leading-5 text-fg-muted`,children:e.description}):null]},e.id)}function ot({open:e,language:t,saving:n,onClose:r,onSave:i}){let o=a(t).workflows,[s,c]=(0,Z.useState)(``),[l,u]=(0,Z.useState)(``),[d,f]=(0,Z.useState)(!1),[p,m]=(0,Z.useState)(!1),[h,g]=(0,Z.useState)(null),[v,b]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{e&&(c(``),f(!1),m(!1),g(null),b(null),u(`export const meta = {
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}from"./url-F3_D_6zZ.js";import{i as o}from"./vendor-swr-BIWyz7Rc.js";import{t as s}from"./copy-Dv6d4Dvw.js";import{a as c}from"./fetch-CMoWY2Si.js";import{$o as l,Ba as u,Bi as d,C as f,Ca as p,Ci as m,Cr as h,D as g,Dr as _,E as v,Er as y,Mo as b,No as x,Or as S,Qr as C,Ri as w,S as T,T as E,To as D,Tr as O,Yi as k,Zo as A,_ as ee,_a as te,a as j,b as M,d as N,di as P,eo as F,f as ne,fo as I,g as re,h as ie,i as ae,ki as L,kr as R,l as z,la as oe,m as se,na as B,ni as ce,o as V,p as H,pi as U,r as W,sa as G,ta as K,u as le,ui as q,uo as ue,v as J,vi as de,w as fe,wr as pe,y as me,zr as he}from"./index-0HmunJW9.js";import{a as Y,c as ge,d as _e,f as ve,i as ye,l as be,m as xe,n as Se,o as X,p as Ce,r as we,s as Te,t as Ee,u as De}from"./workflow-page.utils-CeBkAjP7.js";var Z=e(t(),1),Q=n(),Oe=[`queued`,`running`,`succeeded`,`attention`],ke=10080*60*1e3,Ae=new Set([`failed`,`timeout`,`cancelled`]);function je(e){return e.metadata?.sessionKey?.trim()||null}function Me(e,t){return e.length<=t?e:`${e.slice(0,t-1)}…`}function Ne(e,t){if(!e||typeof e!=`object`)return null;let n=e;for(let e of t){let t=n[e];if(typeof t==`string`&&t.trim())return t.trim()}return null}function Pe(e,t=90){let n=e.metadata?.input?.goal?.trim()||(typeof e.metadata?.input?.payload==`string`?e.metadata.input.payload.trim():null)||Ne(e.metadata?.input?.payload,[`query`,`goal`,`prompt`,`input`,`message`])||Ne(e.metadata?.input?.variables,[`query`,`goal`,`prompt`,`input`,`message`]);return n?Me(n,t):null}function Fe(e,t=90){return Pe(e,t)??Me(e.title?.trim()||e.definitionId,t)}function Ie(e,t=44){return Me(e.title?.trim()||e.definitionId,t)}function Le(e,t){let n=t.trim().toLowerCase();return n?[Pe(e,500),e.title,e.definitionId,e.id].filter(Boolean).join(` `).toLowerCase().includes(n):!0}function Re(e,t){let n=t.workflowFilterId.trim();return e.filter(e=>n&&e.definitionId!==n||!be(e,t.triggerFilter??`all`)?!1:Le(e,t.searchQuery))}function ze(e){return e.completedAtMs??e.createdAtMs}function Be(e,t){return t-ze(e)<=ke}function Ve(e,t){return e.status===`queued`?`queued`:e.status===`running`?`running`:e.status===`succeeded`?Be(e,t)?`succeeded`:null:Ae.has(e.status)?`attention`:null}function He(e,t){let n=[...t];return e===`queued`?n.sort((e,t)=>e.createdAtMs-t.createdAtMs):e===`running`?n.sort((e,t)=>(t.startedAtMs??t.createdAtMs)-(e.startedAtMs??e.createdAtMs)):n.sort((e,t)=>ze(t)-ze(e))}function Ue(e,t){let n={queued:[],running:[],succeeded:[],attention:[]};for(let r of e){let e=Ve(r,t);e&&n[e].push(r)}let r=He(`succeeded`,n.succeeded),i=r.length,a=r.slice(0,20),o=Math.max(0,i-20);return Oe.map(e=>e===`succeeded`?{id:e,runs:a,totalInWindow:i,hiddenByCap:o}:{id:e,runs:He(e,n[e])})}var We=new Map;function Ge(e){let t=We.get(e);return t||(t=new Intl.RelativeTimeFormat(e,{numeric:`auto`}),We.set(e,t)),t}function Ke(e,t,n){let r=Math.round((t-e)/1e3),i=Ge(n);if(r<60)return i.format(-r,`second`);let a=Math.round(r/60);if(a<60)return i.format(-a,`minute`);let o=Math.round(a/60);if(o<48)return i.format(-o,`hour`);let s=Math.round(o/24);return i.format(-s,`day`)}function qe(e){return e.status===`queued`||e.status===`running`}function Je(e){return e.status===`failed`||e.status===`timeout`||e.status===`cancelled`}var $=r(),Ye=(0,Z.memo)(function(e){let t=(0,Q.c)(65),{run:n,language:r,localeTag:i,nowMs:o,selected:s,onOpen:c,onOpenChat:l,onCancel:u,onRetry:d}=e,f=a(r).workflows,[p,h]=(0,Z.useState)(!1),g;t[0]===n?g=t[1]:(g=je(n),t[0]=n,t[1]=g);let _=!g,v;t[2]===n?v=t[3]:(v=qe(n),t[2]=n,t[3]=v);let y=v,b=n.status===`running`||n.status===`queued`,x;t[4]!==n.metrics.agentCount||t[5]!==n.metrics.doneAgentCount?(x=n.metrics.agentCount>0?Math.round(n.metrics.doneAgentCount/n.metrics.agentCount*100):0,t[4]=n.metrics.agentCount,t[5]=n.metrics.doneAgentCount,t[6]=x):x=t[6];let S=x,C=n.metrics.errorAgentCount>0,w=n.startedAtMs??n.createdAtMs,T=we(y?o-w:n.metrics.durationMs),E=X(f.taskArtifacts,{count:n.metrics.artifactCount}),D;t[7]===n?D=t[8]:(D=Fe(n),t[7]=n,t[8]=D);let O=D,k;t[9]===n?k=t[10]:(k=Ie(n),t[9]=n,t[10]=k);let A=k,ee;t[11]!==c||t[12]!==n?(ee=()=>{c(n)},t[11]=c,t[12]=n,t[13]=ee):ee=t[13];let te=ee,j;t[14]!==_||t[15]!==l||t[16]!==n?(j=()=>{_||l(n)},t[14]=_,t[15]=l,t[16]=n,t[17]=j):j=t[17];let M=j,N=s?`border-accent/70 ring-1 ring-accent/30`:`border-edge`,F;t[18]===N?F=t[19]:(F=P(`group relative overflow-hidden rounded-xl border bg-surface-panel p-3.5 transition-colors`,N,`hover:border-edge-strong hover:bg-surface-hover/50`),t[18]=N,t[19]=F);let ne;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(ne=P(`w-full text-left`,ce.focusRingPanel),t[20]=ne):ne=t[20];let I;t[21]===O?I=t[22]:(I=(0,$.jsx)(`div`,{className:`line-clamp-2 text-sm font-semibold leading-5 text-fg`,children:O}),t[21]=O,t[22]=I);let re;t[23]===A?re=t[24]:(re=(0,$.jsx)(`div`,{className:`mt-1 truncate text-[11px] font-medium text-fg-muted`,children:A}),t[23]=A,t[24]=re);let ie;t[25]!==I||t[26]!==re?(ie=(0,$.jsxs)(`div`,{className:`min-w-0`,children:[I,re]}),t[25]=I,t[26]=re,t[27]=ie):ie=t[27];let ae;t[28]===n.status?ae=t[29]:(ae=P(`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm`,De(n.status)),t[28]=n.status,t[29]=ae);let L;t[30]!==i||t[31]!==o||t[32]!==w?(L=Ke(w,o,i),t[30]=i,t[31]=o,t[32]=w,t[33]=L):L=t[33];let R;t[34]===L?R=t[35]:(R=(0,$.jsx)(`span`,{children:L}),t[34]=L,t[35]=R);let z=T===`—`?null:(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,$.jsx)(`span`,{children:X(f.taskElapsed,{duration:T})})]}),oe;t[36]!==R||t[37]!==z?(oe=(0,$.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-1.5 text-[11px] text-fg-subtle`,children:[R,z]}),t[36]=R,t[37]=z,t[38]=oe):oe=t[38];let se=n.metrics.artifactCount>0?(0,$.jsx)(`span`,{className:`rounded-full bg-surface-hover px-2 py-0.5 font-medium text-fg-muted`,children:E}):null,B=s?(0,$.jsx)(`span`,{className:`font-medium text-accent-fg`,children:f.taskOpenDetails}):null,V;t[39]!==se||t[40]!==B?(V=(0,$.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2 text-[11px] text-fg-subtle`,children:[se,B]}),t[39]=se,t[40]=B,t[41]=V):V=t[41];let H;t[42]===h?H=t[43]:(H=()=>h(Ze),t[42]=h,t[43]=H);let U;t[44]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,$.jsx)(ue,{className:`size-4`,"aria-hidden":!0}),t[44]=U):U=t[44];let W;t[45]!==f.taskActionsAria||t[46]!==p||t[47]!==H?(W=(0,$.jsx)(q,{variant:`ghost`,className:`size-7 p-0 opacity-0 group-hover:opacity-100 group-focus-within:opacity-100`,"aria-label":f.taskActionsAria,"aria-expanded":p,onClick:H,children:U}),t[45]=f.taskActionsAria,t[46]=p,t[47]=H,t[48]=W):W=t[48];let G;t[49]!==y||t[50]!==_||t[51]!==M||t[52]!==f.cancel||t[53]!==f.continueInChat||t[54]!==f.rerun||t[55]!==f.taskCloseMenu||t[56]!==p||t[57]!==u||t[58]!==d||t[59]!==n||t[60]!==h?(G=p?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{type:`button`,className:`fixed inset-0 z-10 cursor-default`,"aria-label":f.taskCloseMenu,onClick:()=>h(!1)}),(0,$.jsxs)(`div`,{className:`absolute right-0 z-20 mt-1 min-w-36 rounded-lg border border-edge bg-surface-panel py-1 shadow-surface`,children:[(0,$.jsx)(Xe,{label:f.continueInChat,disabled:_,onClick:()=>{h(!1),M()}}),y?(0,$.jsx)(Xe,{label:f.cancel,tone:`danger`,onClick:()=>{h(!1),u(n.id)}}):null,Je(n)?(0,$.jsx)(Xe,{label:f.rerun,onClick:()=>{h(!1),d(n.id)}}):null]})]}):null,t[49]=y,t[50]=_,t[51]=M,t[52]=f.cancel,t[53]=f.continueInChat,t[54]=f.rerun,t[55]=f.taskCloseMenu,t[56]=p,t[57]=u,t[58]=d,t[59]=n,t[60]=h,t[61]=G):G=t[61];let K;return t[62]!==W||t[63]!==G?(K=(0,$.jsxs)(`div`,{className:`absolute right-2 top-2`,children:[W,G]}),t[62]=W,t[63]=G,t[64]=K):K=t[64],(0,$.jsxs)(`div`,{className:F,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:te,"aria-label":`${f.taskOpenDetails}: ${O}`,"aria-current":s?`true`:void 0,className:ne,children:[(0,$.jsxs)(`div`,{className:`pr-7`,children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-2`,children:[ie,(0,$.jsx)(`span`,{className:ae,children:f.status[n.status]??n.status})]}),oe]}),b?(0,$.jsxs)(`div`,{className:`mt-2.5`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-[11px] text-fg-muted`,children:[(0,$.jsx)(`span`,{children:X(f.agentProgress,{done:n.metrics.doneAgentCount,total:n.metrics.agentCount})}),(0,$.jsxs)(`span`,{children:[S,`%`]})]}),(0,$.jsx)(`div`,{className:`mt-1.5 h-1.5 overflow-hidden rounded-full bg-surface-hover`,children:(0,$.jsx)(`div`,{className:`h-full rounded-full bg-accent transition-all`,style:{width:`${S}%`}})})]}):null,V,C?(0,$.jsxs)(`div`,{className:`mt-2 flex items-center gap-1 text-[11px] text-amber-700 dark:text-amber-300`,children:[(0,$.jsx)(m,{className:`size-3 shrink-0`,"aria-hidden":!0}),X(f.runRowErrorSummary,{count:n.metrics.errorAgentCount})]}):null]}),K]})});function Xe(e){let t=(0,Q.c)(8),{label:n,disabled:r,tone:i,onClick:a}=e,o=r?`cursor-not-allowed text-fg-subtle`:`text-fg hover:bg-surface-hover`,s=i===`danger`&&!r&&`text-red-600 dark:text-red-300`,c;t[0]!==o||t[1]!==s?(c=P(`block w-full px-3 py-1.5 text-left text-xs`,o,s),t[0]=o,t[1]=s,t[2]=c):c=t[2];let l;return t[3]!==r||t[4]!==n||t[5]!==a||t[6]!==c?(l=(0,$.jsx)(`button`,{type:`button`,disabled:r,onClick:a,className:c,children:n}),t[3]=r,t[4]=n,t[5]=a,t[6]=c,t[7]=l):l=t[7],l}function Ze(e){return!e}function Qe(e,t){return t.boardColumns[e]}var $e=(0,Z.memo)(function(e){let t=(0,Q.c)(14),{column:n,language:r,localeTag:i,nowMs:o,selectedRunId:s,onOpenRun:c,onOpenRunChat:l,onCancelRun:u,onRetryRun:d}=e,f=a(r).workflows,[p,m]=(0,Z.useState)(!1),h=n.id===`succeeded`,g=h?5:n.runs.length,_;t[0]!==g||t[1]!==n.runs||t[2]!==p||t[3]!==h?(_=h&&!p?n.runs.slice(0,g):n.runs,t[0]=g,t[1]=n.runs,t[2]=p,t[3]=h,t[4]=_):_=t[4];let v=_,y=h&&n.runs.length>5&&!p,b=h&&p,x;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(x=P(`flex min-h-112 w-73 shrink-0 snap-center flex-col rounded-2xl border border-edge bg-surface-panel/40`),t[5]=x):x=t[5];let S;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,$.jsx)(`span`,{className:`size-2 rounded-full bg-accent`,"aria-hidden":!0}),t[6]=S):S=t[6];let C;t[7]===n.runs.length?C=t[8]:(C=(0,$.jsx)(`span`,{className:`rounded-full bg-surface-hover px-2.5 py-1 text-xs font-semibold tabular-nums text-fg-muted`,children:n.runs.length}),t[7]=n.runs.length,t[8]=C);let w=v.length===0?(0,$.jsx)(`div`,{className:`flex min-h-32 items-center justify-center rounded-xl border border-dashed border-edge bg-surface-panel/40 px-4 py-6 text-center text-xs text-fg-subtle`,children:f.boardColumnEmpty}):v.map(e=>(0,$.jsx)(Ye,{run:e,language:r,localeTag:i,nowMs:o,selected:e.id===s,onOpen:c,onOpenChat:l,onCancel:u,onRetry:d},e.id)),T=y?(0,$.jsx)(q,{variant:`ghost`,className:`h-8 w-full text-xs`,onClick:()=>m(!0),children:X(f.boardExpandSucceeded,{count:Math.min(n.runs.length,n.totalInWindow??n.runs.length)})}):null,E=b?(0,$.jsx)(q,{variant:`ghost`,className:`h-8 w-full text-xs`,onClick:()=>m(!1),children:f.boardCollapseSucceeded}):null,D=h&&(n.hiddenByCap??0)>0?(0,$.jsx)(`p`,{className:`px-1 text-center text-[11px] text-fg-subtle`,children:X(f.boardSucceededCapHint,{count:n.hiddenByCap??0})}):null,O;return t[9]!==w||t[10]!==T||t[11]!==E||t[12]!==D?(O=(0,$.jsxs)(`div`,{className:`flex flex-1 flex-col gap-3 p-2.5`,children:[w,T,E,D]}),t[9]=w,t[10]=T,t[11]=E,t[12]=D,t[13]=O):O=t[13],(0,$.jsxs)(`section`,{className:x,"aria-label":Qe(n.id,f),children:[(0,$.jsxs)(`header`,{className:`sticky top-0 z-10 flex items-center justify-between gap-2 rounded-t-2xl border-b border-edge-subtle bg-surface-panel/90 px-3.5 py-3 backdrop-blur`,children:[(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[S,(0,$.jsx)(`h2`,{className:`truncate text-sm font-semibold text-fg`,children:Qe(n.id,f)})]}),C]}),O]})}),et=(0,Z.memo)(function(e){let t=(0,Q.c)(45),{runs:n,language:r,localeTag:i,labels:a,searchQuery:o,workflowFilterId:s,triggerFilter:c,selectedRunId:l,loading:u,onOpenRun:d,onOpenRunChat:f,onCancelRun:p,onRetryRun:m,onStart:h}=e,g;t[0]===n?g=t[1]:(g=n.some(tt),t[0]=n,t[1]=g);let _=g,[v,y]=(0,Z.useState)(nt),b,x;t[2]===_?(b=t[3],x=t[4]):(b=()=>{if(!_)return;let e=window.setInterval(()=>y(Date.now()),1e3);return()=>window.clearInterval(e)},x=[_],t[2]=_,t[3]=b,t[4]=x),(0,Z.useEffect)(b,x);let S;t[5]!==v||t[6]!==n||t[7]!==o||t[8]!==c||t[9]!==s?(S=Ue(Re(n,{searchQuery:o,workflowFilterId:s,triggerFilter:c}),v),t[5]=v,t[6]=n,t[7]=o,t[8]=c,t[9]=s,t[10]=S):S=t[10];let C=S,w=C.reduce(rt,0);if(u&&w===0){let e;return t[11]===a.loading?e=t[12]:(e=(0,$.jsx)(`p`,{className:`text-sm text-fg-muted`,children:a.loading}),t[11]=a.loading,t[12]=e),e}if(!u&&w===0){let e;t[13]===a.boardEmptyTitle?e=t[14]:(e=(0,$.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:a.boardEmptyTitle}),t[13]=a.boardEmptyTitle,t[14]=e);let n;t[15]===a.boardEmptyHint?n=t[16]:(n=(0,$.jsx)(`p`,{className:`mx-auto mt-2 max-w-md text-sm leading-6 text-fg-muted`,children:a.boardEmptyHint}),t[15]=a.boardEmptyHint,t[16]=n);let r;t[17]!==a.boardStart||t[18]!==h?(r=(0,$.jsx)(`div`,{className:`mt-4 flex justify-center`,children:(0,$.jsx)(q,{variant:`primary`,onClick:h,children:a.boardStart})}),t[17]=a.boardStart,t[18]=h,t[19]=r):r=t[19];let i;return t[20]!==e||t[21]!==n||t[22]!==r?(i=(0,$.jsxs)(`div`,{className:`rounded-2xl border border-dashed border-edge bg-surface-panel/40 px-6 py-12 text-center`,children:[e,n,r]}),t[20]=e,t[21]=n,t[22]=r,t[23]=i):i=t[23],i}let T;if(t[24]!==C||t[25]!==r||t[26]!==i||t[27]!==v||t[28]!==p||t[29]!==d||t[30]!==f||t[31]!==m||t[32]!==l){let e;t[34]!==r||t[35]!==i||t[36]!==v||t[37]!==p||t[38]!==d||t[39]!==f||t[40]!==m||t[41]!==l?(e=e=>(0,$.jsx)($e,{column:e,language:r,localeTag:i,nowMs:v,selectedRunId:l,onOpenRun:d,onOpenRunChat:f,onCancelRun:p,onRetryRun:m},e.id),t[34]=r,t[35]=i,t[36]=v,t[37]=p,t[38]=d,t[39]=f,t[40]=m,t[41]=l,t[42]=e):e=t[42],T=C.map(e),t[24]=C,t[25]=r,t[26]=i,t[27]=v,t[28]=p,t[29]=d,t[30]=f,t[31]=m,t[32]=l,t[33]=T}else T=t[33];let E;return t[43]===T?E=t[44]:(E=(0,$.jsx)(`div`,{className:`-mx-1 flex min-w-0 snap-x snap-mandatory gap-3 overflow-x-auto px-1 pb-2`,children:T}),t[43]=T,t[44]=E),E});function tt(e){return e.status===`queued`||e.status===`running`}function nt(){return Date.now()}function rt(e,t){return e+t.runs.length}function it(e){let t=(0,Q.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 l=c.workflows;if(!r)return null;let u;t[2]!==r||t[3]!==i?(u=xe(r,i),t[2]=r,t[3]=i,t[4]=u):u=t[4];let d=u,f=r.runtime?.source??``,p;t[5]===o?p=t[6]:(p=e=>!e&&o(),t[5]=o,t[6]=p);let m;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,$.jsx)(y,{className:`xopc-dialog-overlay fixed inset-0 z-65 bg-scrim backdrop-blur-[1px]`}),t[7]=m):m=t[7];let h;t[8]===r.title?h=t[9]:(h=(0,$.jsx)(R,{className:`text-base font-semibold text-fg`,children:r.title}),t[8]=r.title,t[9]=h);let g;t[10]===d.description?g=t[11]:(g=(0,$.jsx)(O,{className:`mt-1 text-sm text-fg-muted`,children:d.description}),t[10]=d.description,t[11]=g);let v;t[12]!==h||t[13]!==g?(v=(0,$.jsxs)(`div`,{className:`border-b border-edge px-5 py-4`,children:[h,g]}),t[12]=h,t[13]=g,t[14]=v):v=t[14];let b;t[15]!==l.whenToUseHeading||t[16]!==d.whenToUse?(b=d.whenToUse?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:l.whenToUseHeading}),(0,$.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-fg-muted`,children:d.whenToUse})]}):null,t[15]=l.whenToUseHeading,t[16]=d.whenToUse,t[17]=b):b=t[17];let x;t[18]!==r.phases||t[19]!==l.phasesHeading?(x=r.phases.length>0?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:l.phasesHeading}),(0,$.jsx)(`ol`,{className:`mt-2 space-y-2`,children:r.phases.map(at)})]}):null,t[18]=r.phases,t[19]=l.phasesHeading,t[20]=x):x=t[20];let C;t[21]!==l.scriptHeading||t[22]!==f?(C=f?(0,$.jsxs)(`section`,{children:[(0,$.jsx)(`h3`,{className:`text-xs font-semibold uppercase tracking-wide text-fg-subtle`,children:l.scriptHeading}),(0,$.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:f})]}):null,t[21]=l.scriptHeading,t[22]=f,t[23]=C):C=t[23];let w;t[24]!==C||t[25]!==b||t[26]!==x?(w=(0,$.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-4 overflow-auto px-5 py-4`,children:[b,x,C]}),t[24]=C,t[25]=b,t[26]=x,t[27]=w):w=t[27];let T;t[28]!==l.closeResult||t[29]!==o?(T=(0,$.jsx)(q,{variant:`secondary`,onClick:o,children:l.closeResult}),t[28]=l.closeResult,t[29]=o,t[30]=T):T=t[30];let E;t[31]!==l.runWorkflow||t[32]!==s?(E=(0,$.jsx)(q,{variant:`primary`,onClick:s,children:l.runWorkflow}),t[31]=l.runWorkflow,t[32]=s,t[33]=E):E=t[33];let D;t[34]!==T||t[35]!==E?(D=(0,$.jsxs)(`div`,{className:`flex justify-end gap-2 border-t border-edge px-5 py-4`,children:[T,E]}),t[34]=T,t[35]=E,t[36]=D):D=t[36];let k;t[37]!==w||t[38]!==D||t[39]!==v?(k=(0,$.jsxs)(_,{children:[m,(0,$.jsxs)(pe,{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:[v,w,D]})]}),t[37]=w,t[38]=D,t[39]=v,t[40]=k):k=t[40];let A;return t[41]!==n||t[42]!==k||t[43]!==p?(A=(0,$.jsx)(S,{open:n,onOpenChange:p,children:k}),t[41]=n,t[42]=k,t[43]=p,t[44]=A):A=t[44],A}function at(e,t){return(0,$.jsxs)(`li`,{className:`rounded-xl border border-edge bg-surface-base/40 px-3 py-2`,children:[(0,$.jsxs)(`div`,{className:`text-sm font-medium text-fg`,children:[t+1,`. `,e.title]}),e.description?(0,$.jsx)(`p`,{className:`mt-1 text-xs leading-5 text-fg-muted`,children:e.description}):null]},e.id)}function ot({open:e,language:t,saving:n,onClose:r,onSave:i}){let o=a(t).workflows,[s,c]=(0,Z.useState)(``),[l,u]=(0,Z.useState)(``),[d,f]=(0,Z.useState)(!1),[p,m]=(0,Z.useState)(!1),[h,g]=(0,Z.useState)(null),[v,b]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{e&&(c(``),f(!1),m(!1),g(null),b(null),u(`export const meta = {
2
2
  name: 'my_workflow',
3
3
  description: 'Describe what this workflow does.',
4
4
  whenToUse: 'When the user asks for …',
@@ -9,21 +9,21 @@
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-WAyKAilR.js"></script>
12
+ <script type="module" crossorigin src="/assets/index-0HmunJW9.js"></script>
13
13
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/vendor-codemirror-DYoKfS8f.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/Combination-HAlzriaz.js">
18
18
  <link rel="modulepreload" crossorigin href="/assets/vendor-swr-BIWyz7Rc.js">
19
- <link rel="modulepreload" crossorigin href="/assets/url-q28QhI7l.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/url-F3_D_6zZ.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/createLucideIcon-DPHK1VkS.js">
21
21
  <link rel="modulepreload" crossorigin href="/assets/circle-check-C23XjkUj.js">
22
22
  <link rel="modulepreload" crossorigin href="/assets/copy-Dv6d4Dvw.js">
23
- <link rel="modulepreload" crossorigin href="/assets/theme-store-B6KXPHgK.js">
24
- <link rel="modulepreload" crossorigin href="/assets/fetch-drJUxxKP.js">
23
+ <link rel="modulepreload" crossorigin href="/assets/theme-store-HTvJlFLL.js">
24
+ <link rel="modulepreload" crossorigin href="/assets/fetch-CMoWY2Si.js">
25
25
  <link rel="modulepreload" crossorigin href="/assets/toast-z0toXu32.js">
26
- <link rel="stylesheet" crossorigin href="/assets/index-DjNDHzwG.css">
26
+ <link rel="stylesheet" crossorigin href="/assets/index-Bk75Phrd.css">
27
27
  </head>
28
28
  <body>
29
29
  <div id="root"></div>
package/dist/package.js CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region package.json
2
- var version = "0.0.101";
2
+ var version = "0.0.103";
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";
@@ -29,8 +29,8 @@ import { MemoryPrefetchCoordinator } from "./memory/prefetch-coordinator.js";
29
29
  import { WorkspaceRuntimeRegistry } from "./workspace-runtime/registry.js";
30
30
  import { BackgroundReviewCoordinator } from "./background-review/coordinator.js";
31
31
  import { maybeRequestChannelExecApproval } from "../channels/exec-approval-runtime.js";
32
- import { Agent } from "@earendil-works/pi-agent-core";
33
32
  import { basename, resolve, sep } from "node:path";
33
+ import { Agent } from "@earendil-works/pi-agent-core";
34
34
  //#region src/agent/agent-manager.ts
35
35
  /**
36
36
  * Agent Manager - Manages Agent instances per session
@@ -2,8 +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, isAbsolute, join, relative, resolve } from "node:path";
6
5
  import fs from "node:fs";
6
+ import { basename, isAbsolute, join, relative, resolve } from "node:path";
7
7
  //#region src/agent/agent-scope.ts
8
8
  /**
9
9
  * Agent path and list resolution (config is the single source of truth).
@@ -1,6 +1,6 @@
1
1
  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";
2
- import { join, resolve } from "node:path";
3
2
  import { existsSync, readFileSync } from "node:fs";
3
+ import { join, resolve } from "node:path";
4
4
  //#region src/agent/bootstrap/load-bootstrap-files.ts
5
5
  const PROFILE_LOAD_ORDER = [
6
6
  DEFAULT_AGENTS_FILENAME,
@@ -1,10 +1,10 @@
1
- import { init_agent_scope, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent-scope.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { init_agent_scope, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent-scope.js";
4
4
  import { WORKSPACE_FILES, init_paths } from "../../config/paths.js";
5
5
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES } from "./workspace.js";
6
- import { dirname, join } from "node:path";
7
6
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
7
+ import { dirname, join } from "node:path";
8
8
  import { fileURLToPath } from "node:url";
9
9
  import { execFileSync } from "node:child_process";
10
10
  //#region src/agent/context/workspace-seed.ts
@@ -1,6 +1,6 @@
1
1
  import { FILENAMES, init_paths, resolveWorkspaceStatePath } from "../../config/paths.js";
2
- import { dirname, join } from "node:path";
3
2
  import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
4
  //#region src/agent/context/workspace-state.ts
5
5
  /**
6
6
  * Workspace setup metadata in `<markdownWorkspace>/.xopc/workspace.json`
@@ -1,13 +1,13 @@
1
- import { init_agent_scope, resolveAgentHomeDir } from "../agent-scope.js";
2
- import { extractProfileAgentId } from "../../config/agent-profile.js";
1
+ import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
3
2
  import { createLogger } from "../../utils/logger/index.js";
4
3
  import { init_logger } from "../../utils/logger.js";
5
- import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
4
+ import { init_agent_scope, resolveAgentHomeDir } from "../agent-scope.js";
5
+ import { extractProfileAgentId } from "../../config/agent-profile.js";
6
6
  import { checklistCounts } from "./checklist-types.js";
7
7
  import "./goal-run-types.js";
8
- import { join } from "node:path";
9
8
  import { createHash, randomUUID } from "node:crypto";
10
9
  import { readFile } from "node:fs/promises";
10
+ import { join } from "node:path";
11
11
  //#region src/agent/goals/goal-run-store.ts
12
12
  init_agent_scope();
13
13
  init_write_file_atomic();
@@ -1,6 +1,6 @@
1
- import { init_session_key, parseSessionKey } from "../../routing/session-key.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { init_session_key, parseSessionKey } from "../../routing/session-key.js";
4
4
  import { handlePersistentGoalPostTurn } from "./post-turn.js";
5
5
  //#region src/agent/goals/persistent-goal-service.ts
6
6
  init_session_key();
@@ -1,7 +1,7 @@
1
- import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
2
- import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
3
1
  import { createLogger } from "../../utils/logger/index.js";
4
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
4
+ import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
5
5
  import { PERSISTENT_GOAL_CUSTOM_KEY, mergeCustomDataPatch, readPersistentGoal, serializePersistentGoal } from "./state.js";
6
6
  import { resolveGoalUiLocale } from "./goal-locale.js";
7
7
  import { evaluateAfterTurnHermesLike } from "./evaluate-turn.js";
@@ -1,8 +1,8 @@
1
1
  import { checkFileSafety } from "../prompt/safety.js";
2
2
  import { decodeDataUrl } from "./image-helpers.js";
3
- import { homedir } from "node:os";
4
- import path from "node:path";
5
3
  import { promises } from "node:fs";
4
+ import path from "node:path";
5
+ import { homedir } from "node:os";
6
6
  //#region src/agent/image/load-image-media.ts
7
7
  function expandUser(p) {
8
8
  if (p.startsWith("~/") || p === "~") return path.join(homedir(), p.slice(1));
@@ -49,7 +49,7 @@ async function readImageBase64FromRef(ref) {
49
49
  const loaded = await readMediaReferenceBase64(ref.uri, VISION_INLINE_MAX_BYTES);
50
50
  return {
51
51
  data: loaded.data,
52
- mimeType: ref.mimeType?.startsWith("image/") ? ref.mimeType : loaded.mimeType
52
+ mimeType: ref.mimeType || loaded.mimeType
53
53
  };
54
54
  }
55
55
  function appendMediaAttachedLines(textParts, media) {
@@ -80,7 +80,7 @@ async function buildTranscriptUserMessage(opts) {
80
80
  const textParts = [];
81
81
  if (expandedText) textParts.push(expandedText);
82
82
  const strategy = resolveImageHandlingStrategy(opts.modelRef);
83
- if (strategy !== "native") appendMediaAttachedLines(textParts, prepared.filter((m) => !isImageInboundAttachment(m)));
83
+ appendMediaAttachedLines(textParts, prepared.filter((m) => !isImageInboundAttachment(m)));
84
84
  if (imageRefs.length > 0 && strategy !== "native") {
85
85
  const images = await Promise.all(imageRefs.map((ref) => readImageBase64FromRef(ref)));
86
86
  const parts = await resolveInboundImageContentParts({
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-pipeline.js","names":[],"sources":["../../../../src/agent/inbound/attachment-pipeline.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\nimport type { ImageContent } from '@earendil-works/pi-ai';\n\nimport type { Config } from '../../config/schema.js';\nimport {\n isImageInboundAttachment,\n type MediaRef,\n} from '../../channels/attachments/inbound-persist.js';\nimport { readMediaReferenceBase64 } from '../../media/media-reference.js';\nimport { expandAtFileMentionsInPlainText } from '../context/expand-at-file-mentions.js';\nimport { readAgentMessageContent } from '../memory/agent-message-access.js';\nimport { resolveInboundImageContentParts } from '../image/inbound-image-handling.js';\nimport { resolveImageHandlingStrategy } from '../image/vision-detection.js';\nimport type { AgentInstanceGateway } from '../agent-instance-gateway.js';\n\nexport type TranscriptUserMessage = AgentMessage & {\n media?: MediaRef[];\n MediaPath?: string;\n MediaPaths?: string[];\n MediaTypes?: string[];\n};\n\nexport type LlmUserTurn = {\n text: string;\n images: ImageContent[];\n};\n\nconst VISION_INLINE_MAX_BYTES = 2 * 1024 * 1024;\n\nfunction textBlocksFromContent(content: unknown): string[] {\n if (typeof content === 'string') {\n return content.trim() ? [content] : [];\n }\n if (!Array.isArray(content)) {\n return [];\n }\n const out: string[] = [];\n for (const block of content) {\n if (block && typeof block === 'object' && (block as { type?: string }).type === 'text') {\n const t = (block as { text?: string }).text;\n if (typeof t === 'string' && t.trim()) {\n out.push(t);\n }\n }\n }\n return out;\n}\n\nfunction joinTextBlocks(parts: string[]): string {\n return parts.join('\\n').trim();\n}\n\nfunction buildMediaPathFields(media: MediaRef[]): Pick<TranscriptUserMessage, 'MediaPath' | 'MediaPaths' | 'MediaTypes'> {\n if (!media.length) return {};\n return {\n MediaPath: media[0]!.path,\n MediaPaths: media.map((m) => m.path),\n MediaTypes: media.map((m) => m.mimeType),\n };\n}\n\nfunction assertUserContentHasNoInlineMedia(content: unknown): void {\n if (!Array.isArray(content)) {\n return;\n }\n for (const block of content) {\n if (!block || typeof block !== 'object') {\n continue;\n }\n const type = (block as { type?: string }).type;\n if (type === 'image') {\n throw new Error('User transcript content must not contain image blocks');\n }\n }\n}\n\nexport function assertTranscriptUserMessage(message: AgentMessage): void {\n if ((message as { role?: string }).role !== 'user') {\n return;\n }\n assertUserContentHasNoInlineMedia((message as { content?: unknown }).content);\n const media = (message as TranscriptUserMessage).media;\n if (!media?.length) {\n return;\n }\n for (const ref of media) {\n if (!ref.uri?.trim()) {\n throw new Error('User transcript media ref missing uri');\n }\n if ('data' in ref && typeof (ref as { data?: unknown }).data === 'string') {\n throw new Error('User transcript media ref must not include data');\n }\n }\n}\n\nasync function readImageBase64FromRef(ref: MediaRef): Promise<{ data: string; mimeType: string }> {\n const loaded = await readMediaReferenceBase64(ref.uri, VISION_INLINE_MAX_BYTES);\n return {\n data: loaded.data,\n mimeType: ref.mimeType?.startsWith('image/') ? ref.mimeType : loaded.mimeType,\n };\n}\n\nfunction appendMediaAttachedLines(textParts: string[], media: MediaRef[]): void {\n for (const ref of media) {\n if (!isImageInboundAttachment(ref)) {\n textParts.push(\n [\n `[media attached: ${ref.name} (${ref.mimeType}, ${ref.size} bytes)]`,\n `xopc-media-uri:${ref.uri}`,\n `xopc-media-path:${ref.path}`,\n 'Use the read_media tool with the xopc-media-uri value when you need to inspect this attachment.',\n ].join('\\n'),\n );\n }\n }\n}\n\nasync function expandUserText(\n text: string,\n sessionKey: string,\n agentManager: AgentInstanceGateway,\n): Promise<string> {\n if (!text.trim()) {\n return '';\n }\n let out = text;\n if (/@file:/.test(out)) {\n const wsKey = sessionKey || 'agent:main:main';\n const root = agentManager.getResolvedWorkspaceForSession(wsKey);\n out = await expandAtFileMentionsInPlainText(out, root);\n }\n return out.trim();\n}\n\n/**\n * Build the transcript row for a user turn (text + media metadata only).\n */\nexport async function buildTranscriptUserMessage(opts: {\n text: string;\n prepared: MediaRef[] | undefined;\n sessionKey: string;\n modelRef: string;\n config: Config | undefined;\n agentManager: AgentInstanceGateway;\n}): Promise<TranscriptUserMessage> {\n const expandedText = await expandUserText(opts.text, opts.sessionKey, opts.agentManager);\n const prepared = opts.prepared ?? [];\n const imageRefs = prepared.filter(isImageInboundAttachment);\n\n const textParts: string[] = [];\n if (expandedText) {\n textParts.push(expandedText);\n }\n\n const strategy = resolveImageHandlingStrategy(opts.modelRef);\n\n if (strategy !== 'native') {\n appendMediaAttachedLines(textParts, prepared.filter((m) => !isImageInboundAttachment(m)));\n }\n\n if (imageRefs.length > 0 && strategy !== 'native') {\n const images = await Promise.all(imageRefs.map((ref) => readImageBase64FromRef(ref)));\n const parts = await resolveInboundImageContentParts({\n modelRef: opts.modelRef,\n cfg: opts.config,\n userTextForContext: expandedText,\n images,\n });\n for (const part of parts) {\n if (part.type === 'text' && part.text.trim()) {\n textParts.push(part.text.trim());\n }\n }\n }\n\n if (textParts.length === 0 && prepared.length > 0) {\n textParts.push('Please analyze the attachment(s) I sent.');\n }\n\n const content = joinTextBlocks(textParts);\n const message: TranscriptUserMessage = {\n role: 'user',\n content,\n timestamp: Date.now(),\n ...(prepared.length > 0 ? { media: prepared, ...buildMediaPathFields(prepared) } : {}),\n };\n assertTranscriptUserMessage(message);\n return message;\n}\n\n/** Hydrate images from media store for the current LLM prompt. */\nexport async function hydrateUserTurnForLlm(opts: {\n message: TranscriptUserMessage;\n modelRef: string;\n}): Promise<LlmUserTurn> {\n const text = joinTextBlocks(textBlocksFromContent(readAgentMessageContent(opts.message)));\n const media = opts.message.media ?? [];\n const images: ImageContent[] = [];\n\n if (resolveImageHandlingStrategy(opts.modelRef) === 'native') {\n for (const ref of media.filter(isImageInboundAttachment)) {\n const loaded = await readImageBase64FromRef(ref);\n images.push({ type: 'image', data: loaded.data, mimeType: loaded.mimeType });\n }\n }\n\n return { text, images };\n}\n\nconst pendingTranscriptBySession = new Map<string, TranscriptUserMessage>();\n\nfunction messageTextForPendingCompare(message: AgentMessage): string {\n return joinTextBlocks(textBlocksFromContent(readAgentMessageContent(message)));\n}\n\nfunction pendingMatchesMessage(pending: TranscriptUserMessage, message: AgentMessage): boolean {\n const pendingText = messageTextForPendingCompare(pending);\n const actualText = messageTextForPendingCompare(message);\n if (!pendingText) {\n return true;\n }\n if (!actualText) {\n return false;\n }\n return actualText.includes(pendingText) || pendingText.includes(actualText);\n}\n\nexport function setPendingTranscriptUserMessage(sessionKey: string, message: TranscriptUserMessage): void {\n assertTranscriptUserMessage(message);\n pendingTranscriptBySession.set(sessionKey, message);\n}\n\nexport function takePendingTranscriptUserMessage(sessionKey: string): TranscriptUserMessage | undefined {\n const msg = pendingTranscriptBySession.get(sessionKey);\n pendingTranscriptBySession.delete(sessionKey);\n return msg;\n}\n\nexport function clearPendingTranscriptUserMessage(sessionKey: string, message?: TranscriptUserMessage): void {\n const existing = pendingTranscriptBySession.get(sessionKey);\n if (!existing) {\n return;\n }\n if (message && existing !== message) {\n return;\n }\n pendingTranscriptBySession.delete(sessionKey);\n}\n\nexport function pendingTranscriptReferencesMediaUri(sessionKey: string, uri: string): boolean {\n const pending = pendingTranscriptBySession.get(sessionKey);\n return pending?.media?.some((ref) => ref.uri === uri.trim()) === true;\n}\n\nexport function transformUserMessageForPersistence(\n sessionKey: string | undefined,\n message: AgentMessage,\n): AgentMessage {\n if ((message as { role?: string }).role !== 'user') {\n return message;\n }\n if (sessionKey) {\n const pending = pendingTranscriptBySession.get(sessionKey);\n if (pending && pendingMatchesMessage(pending, message)) {\n pendingTranscriptBySession.delete(sessionKey);\n return pending;\n }\n }\n assertTranscriptUserMessage(message);\n return message;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"attachment-pipeline.js","names":[],"sources":["../../../../src/agent/inbound/attachment-pipeline.ts"],"sourcesContent":["import type { AgentMessage } from '@earendil-works/pi-agent-core';\nimport type { ImageContent } from '@earendil-works/pi-ai';\n\nimport type { Config } from '../../config/schema.js';\nimport {\n isImageInboundAttachment,\n type MediaRef,\n} from '../../channels/attachments/inbound-persist.js';\nimport { readMediaReferenceBase64 } from '../../media/media-reference.js';\nimport { expandAtFileMentionsInPlainText } from '../context/expand-at-file-mentions.js';\nimport { readAgentMessageContent } from '../memory/agent-message-access.js';\nimport { resolveInboundImageContentParts } from '../image/inbound-image-handling.js';\nimport { resolveImageHandlingStrategy } from '../image/vision-detection.js';\nimport type { AgentInstanceGateway } from '../agent-instance-gateway.js';\n\nexport type TranscriptUserMessage = AgentMessage & {\n media?: MediaRef[];\n MediaPath?: string;\n MediaPaths?: string[];\n MediaTypes?: string[];\n};\n\nexport type LlmUserTurn = {\n text: string;\n images: ImageContent[];\n};\n\nconst VISION_INLINE_MAX_BYTES = 2 * 1024 * 1024;\n\nfunction textBlocksFromContent(content: unknown): string[] {\n if (typeof content === 'string') {\n return content.trim() ? [content] : [];\n }\n if (!Array.isArray(content)) {\n return [];\n }\n const out: string[] = [];\n for (const block of content) {\n if (block && typeof block === 'object' && (block as { type?: string }).type === 'text') {\n const t = (block as { text?: string }).text;\n if (typeof t === 'string' && t.trim()) {\n out.push(t);\n }\n }\n }\n return out;\n}\n\nfunction joinTextBlocks(parts: string[]): string {\n return parts.join('\\n').trim();\n}\n\nfunction buildMediaPathFields(media: MediaRef[]): Pick<TranscriptUserMessage, 'MediaPath' | 'MediaPaths' | 'MediaTypes'> {\n if (!media.length) return {};\n return {\n MediaPath: media[0]!.path,\n MediaPaths: media.map((m) => m.path),\n MediaTypes: media.map((m) => m.mimeType),\n };\n}\n\nfunction assertUserContentHasNoInlineMedia(content: unknown): void {\n if (!Array.isArray(content)) {\n return;\n }\n for (const block of content) {\n if (!block || typeof block !== 'object') {\n continue;\n }\n const type = (block as { type?: string }).type;\n if (type === 'image') {\n throw new Error('User transcript content must not contain image blocks');\n }\n }\n}\n\nexport function assertTranscriptUserMessage(message: AgentMessage): void {\n if ((message as { role?: string }).role !== 'user') {\n return;\n }\n assertUserContentHasNoInlineMedia((message as { content?: unknown }).content);\n const media = (message as TranscriptUserMessage).media;\n if (!media?.length) {\n return;\n }\n for (const ref of media) {\n if (!ref.uri?.trim()) {\n throw new Error('User transcript media ref missing uri');\n }\n if ('data' in ref && typeof (ref as { data?: unknown }).data === 'string') {\n throw new Error('User transcript media ref must not include data');\n }\n }\n}\n\nasync function readImageBase64FromRef(ref: MediaRef): Promise<{ data: string; mimeType: string }> {\n const loaded = await readMediaReferenceBase64(ref.uri, VISION_INLINE_MAX_BYTES);\n return {\n data: loaded.data,\n mimeType: ref.mimeType || loaded.mimeType,\n };\n}\n\nfunction appendMediaAttachedLines(textParts: string[], media: MediaRef[]): void {\n for (const ref of media) {\n if (!isImageInboundAttachment(ref)) {\n textParts.push(\n [\n `[media attached: ${ref.name} (${ref.mimeType}, ${ref.size} bytes)]`,\n `xopc-media-uri:${ref.uri}`,\n `xopc-media-path:${ref.path}`,\n 'Use the read_media tool with the xopc-media-uri value when you need to inspect this attachment.',\n ].join('\\n'),\n );\n }\n }\n}\n\nasync function expandUserText(\n text: string,\n sessionKey: string,\n agentManager: AgentInstanceGateway,\n): Promise<string> {\n if (!text.trim()) {\n return '';\n }\n let out = text;\n if (/@file:/.test(out)) {\n const wsKey = sessionKey || 'agent:main:main';\n const root = agentManager.getResolvedWorkspaceForSession(wsKey);\n out = await expandAtFileMentionsInPlainText(out, root);\n }\n return out.trim();\n}\n\n/**\n * Build the transcript row for a user turn (text + media metadata only).\n */\nexport async function buildTranscriptUserMessage(opts: {\n text: string;\n prepared: MediaRef[] | undefined;\n sessionKey: string;\n modelRef: string;\n config: Config | undefined;\n agentManager: AgentInstanceGateway;\n}): Promise<TranscriptUserMessage> {\n const expandedText = await expandUserText(opts.text, opts.sessionKey, opts.agentManager);\n const prepared = opts.prepared ?? [];\n const imageRefs = prepared.filter(isImageInboundAttachment);\n\n const textParts: string[] = [];\n if (expandedText) {\n textParts.push(expandedText);\n }\n\n const strategy = resolveImageHandlingStrategy(opts.modelRef);\n\n appendMediaAttachedLines(textParts, prepared.filter((m) => !isImageInboundAttachment(m)));\n\n if (imageRefs.length > 0 && strategy !== 'native') {\n const images = await Promise.all(imageRefs.map((ref) => readImageBase64FromRef(ref)));\n const parts = await resolveInboundImageContentParts({\n modelRef: opts.modelRef,\n cfg: opts.config,\n userTextForContext: expandedText,\n images,\n });\n for (const part of parts) {\n if (part.type === 'text' && part.text.trim()) {\n textParts.push(part.text.trim());\n }\n }\n }\n\n if (textParts.length === 0 && prepared.length > 0) {\n textParts.push('Please analyze the attachment(s) I sent.');\n }\n\n const content = joinTextBlocks(textParts);\n const message: TranscriptUserMessage = {\n role: 'user',\n content,\n timestamp: Date.now(),\n ...(prepared.length > 0 ? { media: prepared, ...buildMediaPathFields(prepared) } : {}),\n };\n assertTranscriptUserMessage(message);\n return message;\n}\n\n/** Hydrate images from media store for the current LLM prompt. */\nexport async function hydrateUserTurnForLlm(opts: {\n message: TranscriptUserMessage;\n modelRef: string;\n}): Promise<LlmUserTurn> {\n const text = joinTextBlocks(textBlocksFromContent(readAgentMessageContent(opts.message)));\n const media = opts.message.media ?? [];\n const images: ImageContent[] = [];\n\n if (resolveImageHandlingStrategy(opts.modelRef) === 'native') {\n for (const ref of media.filter(isImageInboundAttachment)) {\n const loaded = await readImageBase64FromRef(ref);\n images.push({ type: 'image', data: loaded.data, mimeType: loaded.mimeType });\n }\n }\n\n return { text, images };\n}\n\nconst pendingTranscriptBySession = new Map<string, TranscriptUserMessage>();\n\nfunction messageTextForPendingCompare(message: AgentMessage): string {\n return joinTextBlocks(textBlocksFromContent(readAgentMessageContent(message)));\n}\n\nfunction pendingMatchesMessage(pending: TranscriptUserMessage, message: AgentMessage): boolean {\n const pendingText = messageTextForPendingCompare(pending);\n const actualText = messageTextForPendingCompare(message);\n if (!pendingText) {\n return true;\n }\n if (!actualText) {\n return false;\n }\n return actualText.includes(pendingText) || pendingText.includes(actualText);\n}\n\nexport function setPendingTranscriptUserMessage(sessionKey: string, message: TranscriptUserMessage): void {\n assertTranscriptUserMessage(message);\n pendingTranscriptBySession.set(sessionKey, message);\n}\n\nexport function takePendingTranscriptUserMessage(sessionKey: string): TranscriptUserMessage | undefined {\n const msg = pendingTranscriptBySession.get(sessionKey);\n pendingTranscriptBySession.delete(sessionKey);\n return msg;\n}\n\nexport function clearPendingTranscriptUserMessage(sessionKey: string, message?: TranscriptUserMessage): void {\n const existing = pendingTranscriptBySession.get(sessionKey);\n if (!existing) {\n return;\n }\n if (message && existing !== message) {\n return;\n }\n pendingTranscriptBySession.delete(sessionKey);\n}\n\nexport function pendingTranscriptReferencesMediaUri(sessionKey: string, uri: string): boolean {\n const pending = pendingTranscriptBySession.get(sessionKey);\n return pending?.media?.some((ref) => ref.uri === uri.trim()) === true;\n}\n\nexport function transformUserMessageForPersistence(\n sessionKey: string | undefined,\n message: AgentMessage,\n): AgentMessage {\n if ((message as { role?: string }).role !== 'user') {\n return message;\n }\n if (sessionKey) {\n const pending = pendingTranscriptBySession.get(sessionKey);\n if (pending && pendingMatchesMessage(pending, message)) {\n pendingTranscriptBySession.delete(sessionKey);\n return pending;\n }\n }\n assertTranscriptUserMessage(message);\n return message;\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
4
4
  import { createResponseMessage, createSignalMessage, createTaskMessage } from "./types.js";
5
5
  import { AgentInbox } from "./inbox.js";
6
6
  //#region src/agent/ipc/bus.ts
@@ -1,10 +1,10 @@
1
+ import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
1
2
  import { createLogger } from "../../utils/logger/index.js";
2
3
  import { init_logger } from "../../utils/logger.js";
3
4
  import { init_paths, resolveAgentDir } from "../../config/paths.js";
4
- import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
5
+ import { mkdir, readFile, readdir, rename } from "fs/promises";
5
6
  import { join } from "path";
6
7
  import { existsSync, watch } from "fs";
7
- import { mkdir, readFile, readdir, rename } from "fs/promises";
8
8
  //#region src/agent/ipc/inbox.ts
9
9
  init_write_file_atomic();
10
10
  init_logger();
@@ -2,8 +2,8 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { init_paths, resolveSocketPath } from "../../config/paths.js";
4
4
  import { isValidIPCMessage } from "./types.js";
5
- import { dirname } from "path";
6
5
  import { mkdir } from "fs/promises";
6
+ import { dirname } from "path";
7
7
  import { Socket, createServer } from "net";
8
8
  //#region src/agent/ipc/socket.ts
9
9
  init_logger();
@@ -1,6 +1,6 @@
1
- import { init_string_coerce, normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "../../utils/string-coerce.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { init_string_coerce, normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "../../utils/string-coerce.js";
4
4
  import { buildSafeToolName, normalizeReservedToolNames } from "./bundle-mcp-names.js";
5
5
  import { setPluginToolMeta } from "./mcp-tool-meta.js";
6
6
  import crypto from "node:crypto";
@@ -1,6 +1,6 @@
1
- import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
4
4
  import { resolveGlobalSingleton } from "../../utils/global-singleton.js";
5
5
  import { sanitizeServerName } from "./bundle-mcp-names.js";
6
6
  import { resolveConnectorSecretReferences } from "../../connectors/secret-store.js";
@@ -1,6 +1,6 @@
1
- import { init_string_coerce, normalizeLowercaseStringOrEmpty } from "../../utils/string-coerce.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { init_string_coerce, normalizeLowercaseStringOrEmpty } from "../../utils/string-coerce.js";
4
4
  import { resolveXopcMcpTransportAlias } from "../../config/mcp-config-normalize.js";
5
5
  import { sanitizeForLog } from "../../utils/sanitize-log.js";
6
6
  import { describeHttpMcpServerLaunchConfig, resolveHttpMcpServerLaunchConfig } from "./mcp-http.js";
@@ -1,6 +1,6 @@
1
- import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
2
1
  import { createLogger } from "../../utils/logger/index.js";
3
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
4
4
  import { XopcStdioClientTransport } from "./mcp-stdio-transport.js";
5
5
  import { resolveMcpTransportConfig } from "./mcp-transport-config.js";
6
6
  import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
@@ -1,6 +1,6 @@
1
- import { join } from "node:path";
2
1
  import { existsSync, mkdirSync, readFileSync } from "node:fs";
3
2
  import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
4
  import lockfile from "proper-lockfile";
5
5
  //#region src/agent/memory/builtin-memory-store.ts
6
6
  /**
@@ -4,8 +4,8 @@ import { MEMORY_MD_FILENAME } from "./constants.js";
4
4
  import { clamp01, compareCandidatesByScore, computeCandidateScore, extractPromotionMarkers, isContaminatedSnippet, isExpiredEntry, isoDay, readFileLines, resolveDeepDefaults, sliceRange, snippetHash } from "./utils.js";
5
5
  import { loadDreamingStore, saveDreamingStore, withDreamingPromotionLock } from "./short-term-store.js";
6
6
  import { emptyDeepPhaseSkipped, writeDreamingDeepLastRun } from "./last-run.js";
7
- import path from "node:path";
8
7
  import fs from "node:fs/promises";
8
+ import path from "node:path";
9
9
  //#region src/agent/memory/dreaming/deep-promotion.ts
10
10
  init_logger();
11
11
  const log = createLogger("Dreaming:Deep");
@@ -1,6 +1,6 @@
1
1
  import { DREAMING_DIR_RELATIVE, DREAMING_EVENTS_LOG_RELATIVE } from "./constants.js";
2
- import path from "node:path";
3
2
  import fs from "node:fs/promises";
3
+ import path from "node:path";
4
4
  //#region src/agent/memory/dreaming/events.ts
5
5
  /**
6
6
  * Append a single event line to `memory/.dreams/events.jsonl`.
@@ -1,6 +1,6 @@
1
1
  import { DREAMING_LAST_RUN_RELATIVE } from "./constants.js";
2
- import path from "node:path";
3
2
  import fs from "node:fs/promises";
3
+ import path from "node:path";
4
4
  //#region src/agent/memory/dreaming/last-run.ts
5
5
  const DREAMING_LAST_RUN_FORMAT_VERSION = 2;
6
6
  function isRecord(v) {
@@ -4,8 +4,8 @@ import { DREAMING_DIR_RELATIVE } from "./constants.js";
4
4
  import { buildEntryKey, isoDay, normalizeMemoryPath, normalizeSnippetForHash, snippetHash } from "./utils.js";
5
5
  import { bumpEntryPhaseSignal, loadDreamingStore, saveDreamingStore } from "./short-term-store.js";
6
6
  import "./last-run.js";
7
- import path from "node:path";
8
7
  import fs from "node:fs/promises";
8
+ import path from "node:path";
9
9
  //#region src/agent/memory/dreaming/light-sweep.ts
10
10
  init_logger();
11
11
  const log = createLogger("Dreaming:Light");
@@ -1,8 +1,8 @@
1
1
  import { MEMORY_MD_FILENAME } from "./constants.js";
2
2
  import { clamp01, compareCandidatesByScore, computeCandidateScore, extractPromotionMarkers, isContaminatedSnippet, isExpiredEntry, readFileLines, resolveDeepDefaults, sliceRange, snippetHash } from "./utils.js";
3
3
  import { loadDreamingStore } from "./short-term-store.js";
4
- import path from "node:path";
5
4
  import fs from "node:fs/promises";
5
+ import path from "node:path";
6
6
  //#region src/agent/memory/dreaming/preview.ts
7
7
  async function previewDreamingDeepPromotion(params) {
8
8
  const cfg = resolveDeepDefaults(params.config);