@xopcai/xopc 0.0.106 → 0.0.107

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 (370) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/dashscope/xopc.extension.json +7 -2
  3. package/dist/extensions/fal/xopc.extension.json +7 -2
  4. package/dist/extensions/feishu/src/adapters/gateway-setup.js +22 -26
  5. package/dist/extensions/feishu/src/adapters/gateway-setup.js.map +1 -1
  6. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  7. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  8. package/dist/extensions/feishu/xopc.extension.json +458 -26
  9. package/dist/extensions/google/xopc.extension.json +7 -2
  10. package/dist/extensions/minimax/xopc.extension.json +8 -2
  11. package/dist/extensions/openai/xopc.extension.json +7 -2
  12. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
  13. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  14. package/dist/extensions/telegram/src/plugin.js +1 -1
  15. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  16. package/dist/extensions/telegram/src/update-offset-store.js +1 -1
  17. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  18. package/dist/extensions/telegram/xopc.extension.json +10 -2
  19. package/dist/extensions/weixin/src/api/api.js +2 -2
  20. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  21. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  22. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  23. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  24. package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
  25. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  26. package/dist/extensions/weixin/src/plugin.js +1 -1
  27. package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
  28. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  29. package/dist/extensions/weixin/xopc.extension.json +57 -14
  30. package/dist/gateway/static/root/apple-touch-icon.png +0 -0
  31. package/dist/gateway/static/root/assets/agents-BXg2_mE4.js +78 -0
  32. package/dist/gateway/static/root/assets/apps-page-CJqQ-7Ss.js +1 -0
  33. package/dist/gateway/static/root/assets/channels-settings-DvMZ6NAd.js +1 -0
  34. package/dist/gateway/static/root/assets/cron-page-BPBlvSl5.js +1 -0
  35. package/dist/gateway/static/root/assets/{dist-OM9qGfm5.js → dist-CZh0c-s8.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-debug-page-D-WHrr_w.js → extension-debug-page-DyJQR0SR.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-page-CCgjSoKn.js → extension-page-CDTuUr9B.js} +1 -1
  38. package/dist/gateway/static/root/assets/{extension-settings-page-BJH5a-Gn.js → extension-settings-page-DszZ8zHD.js} +1 -1
  39. package/dist/gateway/static/root/assets/{fetch-CkvRO30i.js → fetch-CFdKBnE6.js} +1 -1
  40. package/dist/gateway/static/root/assets/{gateway-startup-retry-BkKyRDrF.js → gateway-startup-retry-DdngdObI.js} +1 -1
  41. package/dist/gateway/static/root/assets/{heartbeat-config-api-CVyP6pFj.js → heartbeat-config-api-U10wnPdc.js} +1 -1
  42. package/dist/gateway/static/root/assets/index-DBc-bVOQ.js +4845 -0
  43. package/dist/gateway/static/root/assets/index-DI5_GsZt.css +1 -0
  44. package/dist/gateway/static/root/assets/{logs-page-R6Vv_Ja6.js → logs-page-B6js8Bfi.js} +2 -2
  45. package/dist/gateway/static/root/assets/{note-detail-page-BUDarLhh.js → note-detail-page-DFzAXR35.js} +4 -4
  46. package/dist/gateway/static/root/assets/{note-time-Cc2-T21g.js → note-time-DOiSU-10.js} +1 -1
  47. package/dist/gateway/static/root/assets/notes-page-DAuZJMT8.js +1 -0
  48. package/dist/gateway/static/root/assets/{schema-form-CrlOmEZt.js → schema-form-zM36dvbY.js} +1 -1
  49. package/dist/gateway/static/root/assets/sessions-page-CAsV03BY.js +1 -0
  50. package/dist/gateway/static/root/assets/{settings-advanced-gate-BBAQxxew.js → settings-advanced-gate-BCvObK1y.js} +1 -1
  51. package/dist/gateway/static/root/assets/{settings-form-section-DjPD-ErC.js → settings-form-section-Bvl-RInc.js} +1 -1
  52. package/dist/gateway/static/root/assets/settings-page-DuCJDd74.js +3 -0
  53. package/dist/gateway/static/root/assets/{share-preview-page-BjvPht3V.js → share-preview-page-rpL4DDTO.js} +1 -1
  54. package/dist/gateway/static/root/assets/skills-page--BioR9J4.js +2 -0
  55. package/dist/gateway/static/root/assets/{theme-store-DYgVdRB4.js → theme-store-BZozwAeK.js} +1 -1
  56. package/dist/gateway/static/root/assets/url-DQRqHuL-.js +3 -0
  57. package/dist/gateway/static/root/assets/voice-api-key-field-D2RJaoj_.js +1 -0
  58. package/dist/gateway/static/root/assets/{workflow-page.utils-D4sqR0yX.js → workflow-page.utils-BxacHYen.js} +1 -1
  59. package/dist/gateway/static/root/assets/workflows-page-B1B-est-.js +18 -0
  60. package/dist/gateway/static/root/favicon-16.png +0 -0
  61. package/dist/gateway/static/root/favicon-32.png +0 -0
  62. package/dist/gateway/static/root/favicon.ico +0 -0
  63. package/dist/gateway/static/root/favicon.svg +18 -0
  64. package/dist/gateway/static/root/index.html +11 -10
  65. package/dist/package.js +1 -1
  66. package/dist/src/agent/agent-manager.js +7 -7
  67. package/dist/src/agent/agent-scope.js +1 -1
  68. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
  69. package/dist/src/agent/context/workspace-seed.js +2 -2
  70. package/dist/src/agent/context/workspace-state.js +1 -1
  71. package/dist/src/agent/goals/goal-run-store.js +4 -4
  72. package/dist/src/agent/goals/persistent-goal-service.js +1 -1
  73. package/dist/src/agent/goals/post-turn.js +2 -2
  74. package/dist/src/agent/image/load-image-media.js +2 -2
  75. package/dist/src/agent/ipc/bus.js +1 -1
  76. package/dist/src/agent/ipc/inbox.js +2 -2
  77. package/dist/src/agent/ipc/socket.js +1 -1
  78. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  79. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  80. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  81. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  82. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  83. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  84. package/dist/src/agent/memory/dreaming/events.js +1 -1
  85. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  86. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  87. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  88. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  89. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  90. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  91. package/dist/src/agent/memory/memory-flush.js +1 -1
  92. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  93. package/dist/src/agent/models/manager.js +1 -1
  94. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  95. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  96. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  97. package/dist/src/agent/sandbox/path-policy.js +2 -2
  98. package/dist/src/agent/service.js +4 -4
  99. package/dist/src/agent/session/session-inspector.js +1 -1
  100. package/dist/src/agent/skills/config.js +1 -1
  101. package/dist/src/agent/skills/hub-hash.js +2 -2
  102. package/dist/src/agent/skills/hub-lock.js +1 -1
  103. package/dist/src/agent/skills/hub-pull.js +2 -2
  104. package/dist/src/agent/skills/index.js +1 -1
  105. package/dist/src/agent/skills/managed-store.js +1 -1
  106. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +4 -0
  107. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +4 -2
  108. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +1 -1
  109. package/dist/src/agent/skills/scanner.js +1 -1
  110. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  111. package/dist/src/agent/skills/skill-manager.js +1 -1
  112. package/dist/src/agent/starter-agents.d.ts +19 -0
  113. package/dist/src/agent/starter-agents.js +190 -0
  114. package/dist/src/agent/starter-agents.js.map +1 -0
  115. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  116. package/dist/src/agent/tools/factory.js +1 -1
  117. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  118. package/dist/src/agent/tools/send-media.js +1 -1
  119. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  120. package/dist/src/agent/tools/workflow-tool.js +1 -1
  121. package/dist/src/agent/tools/write.js +1 -1
  122. package/dist/src/agent/workflow/catalog.js +1 -1
  123. package/dist/src/agent/workflow/runtime.js +49 -15
  124. package/dist/src/agent/workflow/runtime.js.map +1 -1
  125. package/dist/src/agent/workflow/types.d.ts +11 -0
  126. package/dist/src/auth/credentials.js +3 -3
  127. package/dist/src/auth/profiles/store.js +2 -2
  128. package/dist/src/auth/sync-provider-auth.js +1 -1
  129. package/dist/src/browser/cache-dir-policy.js +1 -1
  130. package/dist/src/browser/cdp-local-launcher.js +2 -2
  131. package/dist/src/browser/providers/browser-ext-install.js +3 -3
  132. package/dist/src/browser/providers/cloakbrowser.js +4 -4
  133. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  134. package/dist/src/browser/stealth.js +1 -1
  135. package/dist/src/channels/catalog/channel-catalog-service.js +13 -0
  136. package/dist/src/channels/catalog/channel-catalog-service.js.map +1 -1
  137. package/dist/src/channels/outbound/persist-store.js +1 -1
  138. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  139. package/dist/src/channels/pairing/pairing-store.js +2 -2
  140. package/dist/src/channels/plugins/types.adapters.d.ts +2 -0
  141. package/dist/src/chat-commands/agent-edit.js +2 -2
  142. package/dist/src/chat-commands/builtins/config.js +2 -2
  143. package/dist/src/chat-commands/context.js +1 -1
  144. package/dist/src/cli/commands/config.js +1 -1
  145. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  146. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  147. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  148. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  149. package/dist/src/cli/commands/extension-create.d.ts +2 -0
  150. package/dist/src/cli/commands/extension-create.js +165 -0
  151. package/dist/src/cli/commands/extension-create.js.map +1 -0
  152. package/dist/src/cli/commands/extension-dev.js +1 -3
  153. package/dist/src/cli/commands/extension-dev.js.map +1 -1
  154. package/dist/src/cli/commands/extension-marketplace.js +105 -81
  155. package/dist/src/cli/commands/extension-marketplace.js.map +1 -1
  156. package/dist/src/cli/commands/extension-pack.d.ts +13 -0
  157. package/dist/src/cli/commands/extension-pack.js +159 -91
  158. package/dist/src/cli/commands/extension-pack.js.map +1 -1
  159. package/dist/src/cli/commands/extension.d.ts +2 -0
  160. package/dist/src/cli/commands/extension.js +375 -3
  161. package/dist/src/cli/commands/extension.js.map +1 -1
  162. package/dist/src/cli/commands/gateway/logs.js +1 -1
  163. package/dist/src/cli/commands/gateway/run-foreground.js +1 -2
  164. package/dist/src/cli/commands/gateway/run-foreground.js.map +1 -1
  165. package/dist/src/cli/commands/image.js +1 -1
  166. package/dist/src/cli/commands/init.js +3 -3
  167. package/dist/src/cli/commands/models.js +1 -1
  168. package/dist/src/cli/commands/onboard/model.js +2 -2
  169. package/dist/src/cli/commands/onboard.js +0 -2
  170. package/dist/src/cli/commands/onboard.js.map +1 -1
  171. package/dist/src/cli/commands/setup.js +0 -2
  172. package/dist/src/cli/commands/setup.js.map +1 -1
  173. package/dist/src/cli/utils/init-workspace-core.js +10 -7
  174. package/dist/src/cli/utils/init-workspace-core.js.map +1 -1
  175. package/dist/src/config/agent-profile.js +1 -1
  176. package/dist/src/config/agent-typed-models.js +1 -1
  177. package/dist/src/config/gateway-bind.js +1 -1
  178. package/dist/src/config/index.js +5 -5
  179. package/dist/src/config/loader.js +2 -2
  180. package/dist/src/config/models-json.js +2 -2
  181. package/dist/src/config/paths-state.js +1 -1
  182. package/dist/src/config/paths.d.ts +2 -2
  183. package/dist/src/config/paths.js +6 -5
  184. package/dist/src/config/paths.js.map +1 -1
  185. package/dist/src/config/profile.js +2 -2
  186. package/dist/src/config/schema.d.ts +2 -0
  187. package/dist/src/config/schema.js +3 -1
  188. package/dist/src/config/schema.js.map +1 -1
  189. package/dist/src/config/workspace-path.js +1 -1
  190. package/dist/src/cron/executor.js +2 -2
  191. package/dist/src/cron/persistence.js +1 -1
  192. package/dist/src/daemon/constants.js +1 -1
  193. package/dist/src/daemon/install-plan.js +2 -2
  194. package/dist/src/daemon/launchd.js +2 -2
  195. package/dist/src/daemon/schtasks.js +2 -2
  196. package/dist/src/daemon/systemd.js +2 -2
  197. package/dist/src/extensions/api.d.ts +4 -2
  198. package/dist/src/extensions/api.js +31 -12
  199. package/dist/src/extensions/api.js.map +1 -1
  200. package/dist/src/extensions/bundle-mcp.js +1 -1
  201. package/dist/src/extensions/discover-extensions.js +2 -1
  202. package/dist/src/extensions/discover-extensions.js.map +1 -1
  203. package/dist/src/extensions/health.js +1 -1
  204. package/dist/src/extensions/install.d.ts +1 -0
  205. package/dist/src/extensions/install.js +51 -8
  206. package/dist/src/extensions/install.js.map +1 -1
  207. package/dist/src/extensions/loader.d.ts +0 -4
  208. package/dist/src/extensions/loader.js +55 -88
  209. package/dist/src/extensions/loader.js.map +1 -1
  210. package/dist/src/extensions/lockfile.d.ts +9 -1
  211. package/dist/src/extensions/lockfile.js +2 -2
  212. package/dist/src/extensions/lockfile.js.map +1 -1
  213. package/dist/src/extensions/normalize-manifest.js +20 -4
  214. package/dist/src/extensions/normalize-manifest.js.map +1 -1
  215. package/dist/src/extensions/package-contract.d.ts +12 -0
  216. package/dist/src/extensions/package-contract.js +59 -0
  217. package/dist/src/extensions/package-contract.js.map +1 -0
  218. package/dist/src/extensions/sdk/core.d.ts +1 -1
  219. package/dist/src/extensions/sdk/index.d.ts +1 -1
  220. package/dist/src/extensions/sdk/index.js.map +1 -1
  221. package/dist/src/extensions/types/manifest.d.ts +15 -0
  222. package/dist/src/extensions/update.js +1 -1
  223. package/dist/src/gateway/agents-admin.d.ts +0 -8
  224. package/dist/src/gateway/agents-admin.js +3 -28
  225. package/dist/src/gateway/agents-admin.js.map +1 -1
  226. package/dist/src/gateway/file-path-classifier.js +2 -2
  227. package/dist/src/gateway/heartbeat/service.js +1 -1
  228. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  229. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  230. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  231. package/dist/src/gateway/hono/oauth-async.js +1 -1
  232. package/dist/src/gateway/hono/oauth.js +1 -1
  233. package/dist/src/gateway/hono/routes/agents.js +2 -56
  234. package/dist/src/gateway/hono/routes/agents.js.map +1 -1
  235. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  236. package/dist/src/gateway/hono/routes/channels.js +10 -1
  237. package/dist/src/gateway/hono/routes/channels.js.map +1 -1
  238. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  239. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  240. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  241. package/dist/src/gateway/hono/routes/models.js +1 -1
  242. package/dist/src/gateway/hono/routes/shares.js +1 -1
  243. package/dist/src/gateway/hono/routes/workflows.js +130 -0
  244. package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
  245. package/dist/src/gateway/hono/routes/workspace.js +2 -2
  246. package/dist/src/gateway/lock.js +3 -3
  247. package/dist/src/gateway/ports.js +1 -1
  248. package/dist/src/gateway/service/agent-runner.js +2 -2
  249. package/dist/src/gateway/service/marketplace-service.js +2 -2
  250. package/dist/src/gateway/service.d.ts +2 -0
  251. package/dist/src/gateway/service.js +45 -1
  252. package/dist/src/gateway/service.js.map +1 -1
  253. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  254. package/dist/src/heartbeat/index.js +1 -1
  255. package/dist/src/infra/brew.js +1 -1
  256. package/dist/src/infra/package-json.js +1 -1
  257. package/dist/src/infra/package-update-steps.js +1 -1
  258. package/dist/src/infra/path-env.js +2 -2
  259. package/dist/src/infra/restart.js +2 -2
  260. package/dist/src/infra/stable-node-path.js +1 -1
  261. package/dist/src/infra/update-check.js +1 -1
  262. package/dist/src/infra/update-global.js +1 -1
  263. package/dist/src/infra/update-lock.js +3 -3
  264. package/dist/src/infra/update-runner.js +1 -1
  265. package/dist/src/infra/update-startup.js +2 -2
  266. package/dist/src/infra/write-file-atomic.js +2 -2
  267. package/dist/src/media/store.js +1 -1
  268. package/dist/src/notes/agent-context.d.ts +12 -4
  269. package/dist/src/notes/agent-context.js +1 -1
  270. package/dist/src/notes/agent-context.js.map +1 -1
  271. package/dist/src/notes/store.js +2 -2
  272. package/dist/src/project-trust/trust-store.js +2 -2
  273. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  274. package/dist/src/providers/index.js +2 -2
  275. package/dist/src/providers/model-registry.js +1 -1
  276. package/dist/src/session/init-session-turn.js +2 -2
  277. package/dist/src/session/resolve-session.js +3 -3
  278. package/dist/src/session/session-title.js +2 -2
  279. package/dist/src/session/store.js +2 -2
  280. package/dist/src/share/share-auto.js +2 -2
  281. package/dist/src/share/share-store.js +3 -3
  282. package/dist/src/share/share-thumbnail.js +2 -2
  283. package/dist/src/share/share-zip.js +1 -1
  284. package/dist/src/share/site-share-store.js +3 -3
  285. package/dist/src/share/site-static-serve.js +1 -1
  286. package/dist/src/storage/sqlite/connection.js +2 -2
  287. package/dist/src/storage/sqlite/memory-index-repository.js +2 -2
  288. package/dist/src/storage/sqlite/migrations/discover.js +1 -1
  289. package/dist/src/storage/sqlite/migrations/runner.js +1 -1
  290. package/dist/src/storage/sqlite/schema.js +1 -1
  291. package/dist/src/tui/backends/embedded-backend.js +1 -8
  292. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  293. package/dist/src/tui/backends/gateway-sse-backend.js +0 -7
  294. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -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-backend.d.ts +0 -1
  298. package/dist/src/tui/tui-command-formatters.js +3 -3
  299. package/dist/src/tui/tui-commands.js +3 -3
  300. package/dist/src/tui/tui-commands.js.map +1 -1
  301. package/dist/src/tui/tui-keybindings-file.js +1 -1
  302. package/dist/src/tui/tui-picker-overlay.js +1 -1
  303. package/dist/src/tui/tui-picker-overlay.js.map +1 -1
  304. package/dist/src/tui/tui-scoped-models.js +2 -2
  305. package/dist/src/tui/tui-settings.js +1 -1
  306. package/dist/src/tui/tui-startup-resources.js +1 -1
  307. package/dist/src/tui/tui.js +5 -5
  308. package/dist/src/tunnel/frpc-binary.js +3 -3
  309. package/dist/src/tunnel/frpc-config.js +1 -1
  310. package/dist/src/tunnel/frpc-extract.js +1 -1
  311. package/dist/src/tunnel/tunnel-state.js +1 -1
  312. package/dist/src/utils/logger/audit.js +1 -1
  313. package/dist/src/utils/logger/log-store.js +1 -1
  314. package/dist/src/utils/logger/rotation.js +1 -1
  315. package/dist/src/voice/tts/audio.js +1 -1
  316. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  317. package/dist/src/workflows/domain/definition-utils.d.ts +1 -0
  318. package/dist/src/workflows/domain/definition-utils.js +32 -2
  319. package/dist/src/workflows/domain/definition-utils.js.map +1 -1
  320. package/dist/src/workflows/domain/definition.d.ts +2 -0
  321. package/dist/src/workflows/domain/event.d.ts +2 -1
  322. package/dist/src/workflows/domain/index.d.ts +1 -0
  323. package/dist/src/workflows/domain/index.js +3 -2
  324. package/dist/src/workflows/domain/run.d.ts +27 -1
  325. package/dist/src/workflows/domain/run.js.map +1 -1
  326. package/dist/src/workflows/domain/schema-validation.d.ts +8 -0
  327. package/dist/src/workflows/domain/schema-validation.js +28 -0
  328. package/dist/src/workflows/domain/schema-validation.js.map +1 -0
  329. package/dist/src/workflows/draft/index.d.ts +3 -0
  330. package/dist/src/workflows/draft/index.js +3 -0
  331. package/dist/src/workflows/draft/workflow-draft-prompt.d.ts +23 -0
  332. package/dist/src/workflows/draft/workflow-draft-prompt.js +98 -0
  333. package/dist/src/workflows/draft/workflow-draft-prompt.js.map +1 -0
  334. package/dist/src/workflows/draft/workflow-draft-service.d.ts +12 -0
  335. package/dist/src/workflows/draft/workflow-draft-service.js +131 -0
  336. package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -0
  337. package/dist/src/workflows/draft/workflow-draft-validator.d.ts +4 -0
  338. package/dist/src/workflows/draft/workflow-draft-validator.js +133 -0
  339. package/dist/src/workflows/draft/workflow-draft-validator.js.map +1 -0
  340. package/dist/src/workflows/draft/workflow-draft.types.d.ts +44 -0
  341. package/dist/src/workflows/draft/workflow-draft.types.js +1 -0
  342. package/dist/src/workflows/engine/projector.js +1 -0
  343. package/dist/src/workflows/engine/projector.js.map +1 -1
  344. package/dist/src/workflows/engine/workflow-engine.d.ts +18 -0
  345. package/dist/src/workflows/engine/workflow-engine.js +320 -11
  346. package/dist/src/workflows/engine/workflow-engine.js.map +1 -1
  347. package/dist/src/workflows/index.js +4 -3
  348. package/dist/src/workflows/service/workflow-run-service.d.ts +14 -3
  349. package/dist/src/workflows/service/workflow-run-service.js +227 -6
  350. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  351. package/dist/src/workflows/service/workflow-run-service.types.d.ts +7 -2
  352. package/dist/src/workflows/store/event-store.js +1 -1
  353. package/dist/src/workflows/store/run-store.js +1 -1
  354. package/package.json +4 -2
  355. package/dist/gateway/static/root/assets/agents-3eP0vqFO.js +0 -396
  356. package/dist/gateway/static/root/assets/apps-page-CZ2ZKrko.js +0 -1
  357. package/dist/gateway/static/root/assets/channels-settings-BbETa93K.js +0 -1
  358. package/dist/gateway/static/root/assets/cron-page-DCtUkHMu.js +0 -1
  359. package/dist/gateway/static/root/assets/index-BPYKW7FB.css +0 -1
  360. package/dist/gateway/static/root/assets/index-CEZxETzw.js +0 -4845
  361. package/dist/gateway/static/root/assets/notes-page-EAHl16bq.js +0 -1
  362. package/dist/gateway/static/root/assets/sessions-page-Ce_xuuSB.js +0 -1
  363. package/dist/gateway/static/root/assets/settings-page-KhQ9QgH0.js +0 -3
  364. package/dist/gateway/static/root/assets/skills-page-C0laq7l1.js +0 -2
  365. package/dist/gateway/static/root/assets/url-DPEStU4M.js +0 -3
  366. package/dist/gateway/static/root/assets/voice-api-key-field-DeGckWkl.js +0 -1
  367. package/dist/gateway/static/root/assets/workflows-page-DFjM95g5.js +0 -27
  368. package/dist/src/agent/builtin-agent-ids.d.ts +0 -2
  369. package/dist/src/agent/builtin-agent-ids.js +0 -17
  370. package/dist/src/agent/builtin-agent-ids.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "xopc Browser Bridge",
4
- "version": "0.0.106",
4
+ "version": "0.0.107",
5
5
  "description": "Browser automation bridge for xopc — executes commands in Chrome via the local xopc daemon.",
6
6
  "permissions": [
7
7
  "debugger",
@@ -4,6 +4,11 @@
4
4
  "description": "Image generation via Alibaba Model Studio (DashScope). Configure API keys and region under Settings → Images, or here — both edit the same providers.dashscope entry.",
5
5
  "version": "1.0.0",
6
6
  "kind": "image-generation",
7
- "main": "src/index.ts",
8
- "autoEnableWhenConfiguredProviders": ["dashscope"]
7
+ "main": "src/index.js",
8
+ "autoEnableWhenConfiguredProviders": [
9
+ "dashscope"
10
+ ],
11
+ "engines": {
12
+ "xopc": ">=0.0.106 <1.0.0"
13
+ }
9
14
  }
@@ -4,6 +4,11 @@
4
4
  "description": "Image generation via Fal.ai queue API. Configure API keys and queue base URL under Settings → Images, or here — both edit the same providers.fal entry.",
5
5
  "version": "1.0.0",
6
6
  "kind": "image-generation",
7
- "main": "src/index.ts",
8
- "autoEnableWhenConfiguredProviders": ["fal"]
7
+ "main": "src/index.js",
8
+ "autoEnableWhenConfiguredProviders": [
9
+ "fal"
10
+ ],
11
+ "engines": {
12
+ "xopc": ">=0.0.106 <1.0.0"
13
+ }
9
14
  }
@@ -33,7 +33,7 @@ function buildFeishuConfig(config, result) {
33
33
  dmPolicy: existing?.dmPolicy ?? "open",
34
34
  groupPolicy: existing?.groupPolicy ?? "allowlist",
35
35
  allowFrom,
36
- groupAllowFrom: Array.isArray(existing?.groupAllowFrom) ? existing.groupAllowFrom : [],
36
+ groupAllowFrom: Array.isArray(existing?.groupAllowFrom) ? existing.groupAllowFrom : allowFrom,
37
37
  requireMention: typeof existing?.requireMention === "boolean" ? existing.requireMention : true,
38
38
  renderMode: existing?.renderMode ?? "auto",
39
39
  streaming: typeof existing?.streaming === "boolean" ? existing.streaming : false,
@@ -92,7 +92,11 @@ function statusPayload(state, active, locale) {
92
92
  configChanged: true
93
93
  };
94
94
  }
95
- const feishuGatewaySetupActions = { async runAction({ actionId, input, locale }) {
95
+ function completedNextConfig(cfg, state) {
96
+ if (!state || state.ok === false) return void 0;
97
+ return buildFeishuConfig(cfg, state.result);
98
+ }
99
+ const feishuGatewaySetupActions = { async runAction({ cfg, actionId, input, locale }) {
96
100
  const zh = isZh(locale);
97
101
  if (actionId === "setup.start") {
98
102
  const domain = normalizeDomain(readInput(input).domain);
@@ -147,23 +151,14 @@ const feishuGatewaySetupActions = { async runAction({ actionId, input, locale })
147
151
  });
148
152
  return;
149
153
  }
150
- try {
151
- const { loadConfig, saveConfig } = await import("../../../../src/config/loader.js");
152
- await saveConfig(buildFeishuConfig(loadConfig(), outcome.result));
153
- rememberCompleted(sessionKey, {
154
- phase: "done",
155
- ok: true,
156
- accountId: "default",
157
- appId: outcome.result.appId,
158
- domain: outcome.result.domain
159
- });
160
- } catch (err) {
161
- rememberCompleted(sessionKey, {
162
- phase: "done",
163
- ok: false,
164
- message: `${zh ? "配置保存失败" : "Config save failed"}: ${String(err)}`
165
- });
166
- }
154
+ rememberCompleted(sessionKey, {
155
+ phase: "done",
156
+ ok: true,
157
+ accountId: "default",
158
+ appId: outcome.result.appId,
159
+ domain: outcome.result.domain,
160
+ result: outcome.result
161
+ });
167
162
  })();
168
163
  return {
169
164
  ok: true,
@@ -185,9 +180,11 @@ const feishuGatewaySetupActions = { async runAction({ actionId, input, locale })
185
180
  ok: false,
186
181
  message: zh ? "缺少配置 sessionKey" : "Missing setup sessionKey"
187
182
  };
183
+ const completed = completedSessions.get(sessionKey);
188
184
  return {
189
185
  ok: true,
190
- payload: statusPayload(completedSessions.get(sessionKey), activeSessions.get(sessionKey), locale)
186
+ payload: statusPayload(completed, activeSessions.get(sessionKey), locale),
187
+ nextConfig: completedNextConfig(cfg, completed)
191
188
  };
192
189
  }
193
190
  if (actionId === "setup.manual") {
@@ -199,14 +196,13 @@ const feishuGatewaySetupActions = { async runAction({ actionId, input, locale })
199
196
  ok: false,
200
197
  message: zh ? "App ID 和 App Secret 为必填项。" : "App ID and App Secret are required."
201
198
  };
202
- const { loadConfig, saveConfig } = await import("../../../../src/config/loader.js");
203
- await saveConfig(buildFeishuConfig(loadConfig(), {
204
- appId,
205
- appSecret,
206
- domain
207
- }));
208
199
  return {
209
200
  ok: true,
201
+ nextConfig: buildFeishuConfig(cfg, {
202
+ appId,
203
+ appSecret,
204
+ domain
205
+ }),
210
206
  payload: {
211
207
  type: "ok",
212
208
  message: zh ? "飞书配置已保存。" : "Feishu configuration saved.",
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-setup.js","names":[],"sources":["../../../../../extensions/feishu/src/adapters/gateway-setup.ts"],"sourcesContent":["import type { Config } from '@xopcai/xopc/config/schema.js';\nimport type {\n ChannelRuntimeActionAdapter,\n ChannelRuntimeActionPayload,\n} from '@xopcai/xopc/channels/plugins/types.adapters.js';\nimport { mergeDistinctSenderIds } from '@xopcai/xopc/channels/pairing/index.js';\n\nimport {\n beginAppRegistration,\n initAppRegistration,\n pollAppRegistration,\n type FeishuDomain,\n type AppRegistrationResult,\n} from '../auth/app-registration.js';\n\ntype FeishuGatewaySetupDone =\n | { phase: 'done'; ok: true; accountId: string; appId: string; domain: FeishuDomain }\n | { phase: 'done'; ok: false; message: string };\n\ntype FeishuGatewaySetupActive = {\n startedAt: number;\n qrPayload: string;\n};\n\nconst activeSessions = new Map<string, FeishuGatewaySetupActive>();\nconst completedSessions = new Map<string, FeishuGatewaySetupDone>();\n\nfunction rememberCompleted(sessionKey: string, state: FeishuGatewaySetupDone): void {\n activeSessions.delete(sessionKey);\n completedSessions.set(sessionKey, state);\n setTimeout(() => completedSessions.delete(sessionKey), 10 * 60_000);\n}\n\nfunction readInput(input: unknown): Record<string, unknown> {\n return input && typeof input === 'object' && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n}\n\nfunction normalizeDomain(input: unknown): FeishuDomain {\n return input === 'lark' ? 'lark' : 'feishu';\n}\n\nfunction buildFeishuConfig(config: Config, result: AppRegistrationResult): Config {\n const existing = config.channels?.feishu as Record<string, unknown> | undefined;\n const ownerOpenId = result.openId?.trim();\n const previousAllowFrom = Array.isArray(existing?.allowFrom)\n ? (existing.allowFrom as Array<string | number>)\n : [];\n const allowFrom = ownerOpenId\n ? mergeDistinctSenderIds(previousAllowFrom, [ownerOpenId])\n : previousAllowFrom;\n\n return {\n ...config,\n channels: {\n ...config.channels,\n feishu: {\n ...(existing ?? {}),\n enabled: true,\n appId: result.appId,\n appSecret: result.appSecret,\n domain: result.domain,\n connectionMode: 'websocket',\n dmPolicy: existing?.dmPolicy ?? 'open',\n groupPolicy: existing?.groupPolicy ?? 'allowlist',\n allowFrom,\n groupAllowFrom: Array.isArray(existing?.groupAllowFrom) ? existing.groupAllowFrom : [],\n requireMention: typeof existing?.requireMention === 'boolean' ? existing.requireMention : true,\n renderMode: existing?.renderMode ?? 'auto',\n streaming: typeof existing?.streaming === 'boolean' ? existing.streaming : false,\n reactionNotifications: existing?.reactionNotifications ?? 'own',\n actions: { ...(existing?.actions as Record<string, unknown> | undefined), reactions: true },\n tools: {\n doc: true,\n wiki: true,\n drive: true,\n perm: false,\n bitable: true,\n scopes: true,\n ...(existing?.tools as Record<string, unknown> | undefined),\n },\n historyLimit: typeof existing?.historyLimit === 'number' ? existing.historyLimit : 50,\n textChunkLimit: typeof existing?.textChunkLimit === 'number' ? existing.textChunkLimit : 4000,\n },\n },\n };\n}\n\nfunction isZh(locale: string | undefined): boolean {\n return locale?.toLowerCase().startsWith('zh') === true;\n}\n\nfunction statusPayload(\n state: FeishuGatewaySetupDone | undefined,\n active: FeishuGatewaySetupActive | undefined,\n locale?: string,\n): ChannelRuntimeActionPayload {\n const zh = isZh(locale);\n if (!state && active) {\n return {\n type: 'poll',\n phase: 'pending',\n ok: undefined,\n qrPayload: active.qrPayload,\n message: zh ? '等待飞书 / Lark 确认…' : 'Waiting for Feishu/Lark confirmation...',\n };\n }\n if (!state) {\n return {\n type: 'poll',\n phase: 'unknown',\n ok: false,\n message: zh ? '没有活动的飞书配置会话。请重新开始,二维码可能已过期。' : 'No active Feishu setup session. Start again or the QR may have expired.',\n };\n }\n if (state.ok === false) {\n return {\n type: 'poll',\n phase: 'done',\n ok: false,\n message: state.message,\n };\n }\n return {\n type: 'poll',\n phase: 'done',\n ok: true,\n accountId: state.accountId,\n appId: state.appId,\n domain: state.domain,\n message: zh ? '飞书配置完成。' : 'Feishu setup complete.',\n configChanged: true,\n };\n}\n\nexport const feishuGatewaySetupActions: ChannelRuntimeActionAdapter = {\n async runAction({ actionId, input, locale }) {\n const zh = isZh(locale);\n if (actionId === 'setup.start') {\n const raw = readInput(input);\n const domain = normalizeDomain(raw.domain);\n const supported = await initAppRegistration(domain);\n if (!supported) {\n return {\n ok: true,\n payload: {\n type: 'form',\n submitAction: 'setup.manual',\n message: zh ? '飞书扫码创建不可用。请在高级配置中手动填写应用凭据。' : 'Feishu scan-to-create is unavailable. Enter app credentials manually in Advanced configuration.',\n schema: {\n type: 'object',\n properties: {\n appId: { type: 'string', title: 'App ID' },\n appSecret: { type: 'string', title: 'App Secret', format: 'password' },\n domain: { type: 'string', enum: ['feishu', 'lark'], default: domain, title: zh ? '域名' : 'Domain' },\n },\n required: ['appId', 'appSecret'],\n },\n values: { domain },\n },\n };\n }\n\n const begin = await beginAppRegistration(domain);\n const sessionKey = begin.deviceCode;\n activeSessions.set(sessionKey, {\n startedAt: Date.now(),\n qrPayload: begin.qrUrl,\n });\n\n void (async () => {\n const outcome = await pollAppRegistration({\n deviceCode: begin.deviceCode,\n intervalSec: begin.intervalSec,\n expireInSec: begin.expireInSec,\n initialDomain: domain,\n });\n\n if (outcome.status !== 'success') {\n const message =\n outcome.status === 'access_denied'\n ? (zh ? '用户拒绝授权。' : 'User denied authorization.')\n : outcome.status === 'expired'\n ? (zh ? '配置会话已过期。' : 'Setup session expired.')\n : outcome.status === 'timeout'\n ? (zh ? '配置超时。' : 'Setup timed out.')\n : outcome.message ?? (zh ? '飞书配置失败。' : 'Feishu setup failed.');\n rememberCompleted(sessionKey, { phase: 'done', ok: false, message });\n return;\n }\n\n try {\n const { loadConfig, saveConfig } = await import('@xopcai/xopc/config/loader.js');\n const current = loadConfig();\n await saveConfig(buildFeishuConfig(current, outcome.result));\n rememberCompleted(sessionKey, {\n phase: 'done',\n ok: true,\n accountId: 'default',\n appId: outcome.result.appId,\n domain: outcome.result.domain,\n });\n } catch (err) {\n rememberCompleted(sessionKey, {\n phase: 'done',\n ok: false,\n message: `${zh ? '配置保存失败' : 'Config save failed'}: ${String(err)}`,\n });\n }\n })();\n\n return {\n ok: true,\n payload: {\n type: 'qr',\n sessionKey,\n qrPayload: begin.qrUrl,\n statusAction: 'setup.status',\n pollIntervalMs: Math.max(1000, begin.intervalSec * 1000),\n expiresInSec: begin.expireInSec,\n message: zh ? '请使用飞书 / Lark 扫码创建并授权应用。' : 'Scan with Feishu/Lark to create and authorize an app.',\n },\n };\n }\n\n if (actionId === 'setup.status') {\n const raw = readInput(input);\n const sessionKey = typeof raw.sessionKey === 'string' ? raw.sessionKey : '';\n if (!sessionKey) return { ok: false, message: zh ? '缺少配置 sessionKey' : 'Missing setup sessionKey' };\n return { ok: true, payload: statusPayload(completedSessions.get(sessionKey), activeSessions.get(sessionKey), locale) };\n }\n\n if (actionId === 'setup.manual') {\n const raw = readInput(input);\n const appId = typeof raw.appId === 'string' ? raw.appId.trim() : '';\n const appSecret = typeof raw.appSecret === 'string' ? raw.appSecret.trim() : '';\n const domain = normalizeDomain(raw.domain);\n if (!appId || !appSecret) {\n return { ok: false, message: zh ? 'App ID 和 App Secret 为必填项。' : 'App ID and App Secret are required.' };\n }\n const { loadConfig, saveConfig } = await import('@xopcai/xopc/config/loader.js');\n const current = loadConfig();\n await saveConfig(buildFeishuConfig(current, { appId, appSecret, domain }));\n return {\n ok: true,\n payload: {\n type: 'ok',\n message: zh ? '飞书配置已保存。' : 'Feishu configuration saved.',\n configChanged: true,\n },\n };\n }\n\n return { ok: false, message: `${zh ? '不支持的飞书操作' : 'Unsupported Feishu action'}: ${actionId}` };\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"gateway-setup.js","names":[],"sources":["../../../../../extensions/feishu/src/adapters/gateway-setup.ts"],"sourcesContent":["import type { Config } from '@xopcai/xopc/config/schema.js';\nimport type {\n ChannelRuntimeActionAdapter,\n ChannelRuntimeActionPayload,\n} from '@xopcai/xopc/channels/plugins/types.adapters.js';\nimport { mergeDistinctSenderIds } from '@xopcai/xopc/channels/pairing/index.js';\n\nimport {\n beginAppRegistration,\n initAppRegistration,\n pollAppRegistration,\n type FeishuDomain,\n type AppRegistrationResult,\n} from '../auth/app-registration.js';\n\ntype FeishuGatewaySetupDone =\n | { phase: 'done'; ok: true; accountId: string; appId: string; domain: FeishuDomain; result: AppRegistrationResult }\n | { phase: 'done'; ok: false; message: string };\n\ntype FeishuGatewaySetupActive = {\n startedAt: number;\n qrPayload: string;\n};\n\nconst activeSessions = new Map<string, FeishuGatewaySetupActive>();\nconst completedSessions = new Map<string, FeishuGatewaySetupDone>();\n\nfunction rememberCompleted(sessionKey: string, state: FeishuGatewaySetupDone): void {\n activeSessions.delete(sessionKey);\n completedSessions.set(sessionKey, state);\n setTimeout(() => completedSessions.delete(sessionKey), 10 * 60_000);\n}\n\nfunction readInput(input: unknown): Record<string, unknown> {\n return input && typeof input === 'object' && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n}\n\nfunction normalizeDomain(input: unknown): FeishuDomain {\n return input === 'lark' ? 'lark' : 'feishu';\n}\n\nfunction buildFeishuConfig(config: Config, result: AppRegistrationResult): Config {\n const existing = config.channels?.feishu as Record<string, unknown> | undefined;\n const ownerOpenId = result.openId?.trim();\n const previousAllowFrom = Array.isArray(existing?.allowFrom)\n ? (existing.allowFrom as Array<string | number>)\n : [];\n const allowFrom = ownerOpenId\n ? mergeDistinctSenderIds(previousAllowFrom, [ownerOpenId])\n : previousAllowFrom;\n\n return {\n ...config,\n channels: {\n ...config.channels,\n feishu: {\n ...(existing ?? {}),\n enabled: true,\n appId: result.appId,\n appSecret: result.appSecret,\n domain: result.domain,\n connectionMode: 'websocket',\n dmPolicy: existing?.dmPolicy ?? 'open',\n groupPolicy: existing?.groupPolicy ?? 'allowlist',\n allowFrom,\n groupAllowFrom: Array.isArray(existing?.groupAllowFrom) ? existing.groupAllowFrom : allowFrom,\n requireMention: typeof existing?.requireMention === 'boolean' ? existing.requireMention : true,\n renderMode: existing?.renderMode ?? 'auto',\n streaming: typeof existing?.streaming === 'boolean' ? existing.streaming : false,\n reactionNotifications: existing?.reactionNotifications ?? 'own',\n actions: { ...(existing?.actions as Record<string, unknown> | undefined), reactions: true },\n tools: {\n doc: true,\n wiki: true,\n drive: true,\n perm: false,\n bitable: true,\n scopes: true,\n ...(existing?.tools as Record<string, unknown> | undefined),\n },\n historyLimit: typeof existing?.historyLimit === 'number' ? existing.historyLimit : 50,\n textChunkLimit: typeof existing?.textChunkLimit === 'number' ? existing.textChunkLimit : 4000,\n },\n },\n };\n}\n\nfunction isZh(locale: string | undefined): boolean {\n return locale?.toLowerCase().startsWith('zh') === true;\n}\n\nfunction statusPayload(\n state: FeishuGatewaySetupDone | undefined,\n active: FeishuGatewaySetupActive | undefined,\n locale?: string,\n): ChannelRuntimeActionPayload {\n const zh = isZh(locale);\n if (!state && active) {\n return {\n type: 'poll',\n phase: 'pending',\n ok: undefined,\n qrPayload: active.qrPayload,\n message: zh ? '等待飞书 / Lark 确认…' : 'Waiting for Feishu/Lark confirmation...',\n };\n }\n if (!state) {\n return {\n type: 'poll',\n phase: 'unknown',\n ok: false,\n message: zh ? '没有活动的飞书配置会话。请重新开始,二维码可能已过期。' : 'No active Feishu setup session. Start again or the QR may have expired.',\n };\n }\n if (state.ok === false) {\n return {\n type: 'poll',\n phase: 'done',\n ok: false,\n message: state.message,\n };\n }\n return {\n type: 'poll',\n phase: 'done',\n ok: true,\n accountId: state.accountId,\n appId: state.appId,\n domain: state.domain,\n message: zh ? '飞书配置完成。' : 'Feishu setup complete.',\n configChanged: true,\n };\n}\n\nfunction completedNextConfig(cfg: Config, state: FeishuGatewaySetupDone | undefined): Config | undefined {\n if (!state || state.ok === false) return undefined;\n return buildFeishuConfig(cfg, state.result);\n}\n\nexport const feishuGatewaySetupActions: ChannelRuntimeActionAdapter = {\n async runAction({ cfg, actionId, input, locale }) {\n const zh = isZh(locale);\n if (actionId === 'setup.start') {\n const raw = readInput(input);\n const domain = normalizeDomain(raw.domain);\n const supported = await initAppRegistration(domain);\n if (!supported) {\n return {\n ok: true,\n payload: {\n type: 'form',\n submitAction: 'setup.manual',\n message: zh ? '飞书扫码创建不可用。请在高级配置中手动填写应用凭据。' : 'Feishu scan-to-create is unavailable. Enter app credentials manually in Advanced configuration.',\n schema: {\n type: 'object',\n properties: {\n appId: { type: 'string', title: 'App ID' },\n appSecret: { type: 'string', title: 'App Secret', format: 'password' },\n domain: { type: 'string', enum: ['feishu', 'lark'], default: domain, title: zh ? '域名' : 'Domain' },\n },\n required: ['appId', 'appSecret'],\n },\n values: { domain },\n },\n };\n }\n\n const begin = await beginAppRegistration(domain);\n const sessionKey = begin.deviceCode;\n activeSessions.set(sessionKey, {\n startedAt: Date.now(),\n qrPayload: begin.qrUrl,\n });\n\n void (async () => {\n const outcome = await pollAppRegistration({\n deviceCode: begin.deviceCode,\n intervalSec: begin.intervalSec,\n expireInSec: begin.expireInSec,\n initialDomain: domain,\n });\n\n if (outcome.status !== 'success') {\n const message =\n outcome.status === 'access_denied'\n ? (zh ? '用户拒绝授权。' : 'User denied authorization.')\n : outcome.status === 'expired'\n ? (zh ? '配置会话已过期。' : 'Setup session expired.')\n : outcome.status === 'timeout'\n ? (zh ? '配置超时。' : 'Setup timed out.')\n : outcome.message ?? (zh ? '飞书配置失败。' : 'Feishu setup failed.');\n rememberCompleted(sessionKey, { phase: 'done', ok: false, message });\n return;\n }\n\n rememberCompleted(sessionKey, {\n phase: 'done',\n ok: true,\n accountId: 'default',\n appId: outcome.result.appId,\n domain: outcome.result.domain,\n result: outcome.result,\n });\n })();\n\n return {\n ok: true,\n payload: {\n type: 'qr',\n sessionKey,\n qrPayload: begin.qrUrl,\n statusAction: 'setup.status',\n pollIntervalMs: Math.max(1000, begin.intervalSec * 1000),\n expiresInSec: begin.expireInSec,\n message: zh ? '请使用飞书 / Lark 扫码创建并授权应用。' : 'Scan with Feishu/Lark to create and authorize an app.',\n },\n };\n }\n\n if (actionId === 'setup.status') {\n const raw = readInput(input);\n const sessionKey = typeof raw.sessionKey === 'string' ? raw.sessionKey : '';\n if (!sessionKey) return { ok: false, message: zh ? '缺少配置 sessionKey' : 'Missing setup sessionKey' };\n const completed = completedSessions.get(sessionKey);\n return {\n ok: true,\n payload: statusPayload(completed, activeSessions.get(sessionKey), locale),\n nextConfig: completedNextConfig(cfg, completed),\n };\n }\n\n if (actionId === 'setup.manual') {\n const raw = readInput(input);\n const appId = typeof raw.appId === 'string' ? raw.appId.trim() : '';\n const appSecret = typeof raw.appSecret === 'string' ? raw.appSecret.trim() : '';\n const domain = normalizeDomain(raw.domain);\n if (!appId || !appSecret) {\n return { ok: false, message: zh ? 'App ID 和 App Secret 为必填项。' : 'App ID and App Secret are required.' };\n }\n return {\n ok: true,\n nextConfig: buildFeishuConfig(cfg, { appId, appSecret, domain }),\n payload: {\n type: 'ok',\n message: zh ? '飞书配置已保存。' : 'Feishu configuration saved.',\n configChanged: true,\n },\n };\n }\n\n return { ok: false, message: `${zh ? '不支持的飞书操作' : 'Unsupported Feishu action'}: ${actionId}` };\n },\n};\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { checkFileSafety } from "../../../../src/agent/prompt/safety.js";
2
2
  import { getMimeType } from "../../../../src/channels/media.js";
3
3
  import { getWorkspacePath } from "../../../../src/config/workspace-path-helpers.js";
4
- import { promises } from "node:fs";
5
4
  import path from "node:path";
5
+ import { promises } from "node:fs";
6
6
  import { Readable } from "node:stream";
7
7
  //#region extensions/feishu/src/outbound/media-load.ts
8
8
  function isPathUnderRoots(resolved, roots) {
@@ -1,6 +1,6 @@
1
+ import { init_session_key, parseSessionKey } from "../../../src/routing/session-key.js";
1
2
  import { createLogger } from "../../../src/utils/logger/index.js";
2
3
  import { init_logger } from "../../../src/utils/logger.js";
3
- import { init_session_key, parseSessionKey } from "../../../src/routing/session-key.js";
4
4
  import { resolveFeishuAccount } from "./state/accounts.js";
5
5
  //#region extensions/feishu/src/workflow-progress.ts
6
6
  init_session_key();