@xopcai/xopc 0.0.175 → 0.0.177

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 (286) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-CM6mQUS2.js → activity-store-Wu2ikfbM.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-eckyE9AY.js → agent-avatar-dicebear-B0_biISn.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-TpIpJk59.js +2 -0
  6. package/dist/gateway/static/root/assets/{api-BfMRS6FX.js → api-DljBt-N5.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-DYkzZQzZ.js → app-management-settings-panel-CKoZRi7Y.js} +1 -1
  8. package/dist/gateway/static/root/assets/appearance-settings-DOdXhNDo.js +1 -0
  9. package/dist/gateway/static/root/assets/apps-page-Cxbn5hy8.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-k909a76t.js → archive-plugin-D18gyP76.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-CqNzyhdJ.js → attachment-load-CZh9fc8u.js} +2 -2
  12. package/dist/gateway/static/root/assets/{attachment-preview-renderer-DonnL2dL.js → attachment-preview-renderer-Cmo-5BP5.js} +2 -2
  13. package/dist/gateway/static/root/assets/{attachment-process-heavy-RnGYy9bC.js → attachment-process-heavy-B2_kr5EA.js} +3 -3
  14. package/dist/gateway/static/root/assets/{automation-suggestion-card-snNG6u0v.js → automation-suggestion-card-DKrVoiiK.js} +1 -1
  15. package/dist/gateway/static/root/assets/automations-page-DYv16QMU.js +6 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-PfQ9ZHDF.js → binary-plugins-DdSyGL6M.js} +2 -2
  17. package/dist/gateway/static/root/assets/{block-editor-Xrw-DnE_.js → block-editor-BOpNApiX.js} +6 -6
  18. package/dist/gateway/static/root/assets/{browser-settings-page-G92AdEnX.js → browser-settings-page-DlcqaGu1.js} +4 -4
  19. package/dist/gateway/static/root/assets/{browser-workflow-inputs-DJPF2lUY.js → browser-workflow-inputs-C0SnSj_R.js} +1 -1
  20. package/dist/gateway/static/root/assets/{browser-workflows-page-BoXs4pgc.js → browser-workflows-page-CzlzH7HA.js} +2 -2
  21. package/dist/gateway/static/root/assets/capabilities-settings-panel-QPX4wsGZ.js +7 -0
  22. package/dist/gateway/static/root/assets/{capability-presets-api-BgY-Ysmi.js → capability-presets-api-RM6S7ES5.js} +1 -1
  23. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DmCeusO8.js +1 -0
  24. package/dist/gateway/static/root/assets/{channel-recipient-api-D32T1EJM.js → channel-recipient-api-B4sha-30.js} +1 -1
  25. package/dist/gateway/static/root/assets/channels-settings-HcKoP1wm.js +1 -0
  26. package/dist/gateway/static/root/assets/channels-status-swr-D3xr2enH.js +1 -0
  27. package/dist/gateway/static/root/assets/{connector-logo-C-l8haIK.js → connector-logo-BPsKIyoM.js} +1 -1
  28. package/dist/gateway/static/root/assets/connectors-page-DwbThFvd.js +2 -0
  29. package/dist/gateway/static/root/assets/desktop-pet-DjL1GWON.js +1 -0
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-Cldo_pA3.js → desktop-pet-settings-u_abAXh7.js} +1 -1
  31. package/dist/gateway/static/root/assets/{directory-picker-path-field-CMASXbgJ.js → directory-picker-path-field-BoZGualI.js} +1 -1
  32. package/dist/gateway/static/root/assets/{dreaming-settings-BnMx02w0.js → dreaming-settings-s3gn3f9h.js} +3 -3
  33. package/dist/gateway/static/root/assets/{extension-debug-page-mUFs3ign.js → extension-debug-page-DIbMngCF.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-page-BsFBOZ5N.js → extension-page-D94f2bWQ.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-settings-page-CTEoovnV.js → extension-settings-page-B7TI13ex.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-config-api-Bwx-EetD.js → gateway-config-api-Do77rV8R.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-settings-CvgyqhR_.js → gateway-settings-Dt1PNJmb.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-startup-retry-C8f5KwkT.js → gateway-startup-retry-WaXTw3fi.js} +1 -1
  39. package/dist/gateway/static/root/assets/{goal-create-dialog-Bhynl9LN.js → goal-create-dialog-DEiOOLGU.js} +1 -1
  40. package/dist/gateway/static/root/assets/goal-detail-page-C1Qj4o1K.js +4 -0
  41. package/dist/gateway/static/root/assets/{goals-config-api-CUnfbgHa.js → goals-config-api-BL0fAEns.js} +1 -1
  42. package/dist/gateway/static/root/assets/{goals-page-BAS_liXl.js → goals-page-qJDcEDzc.js} +2 -2
  43. package/dist/gateway/static/root/assets/{goals-settings-Bkk-tOcf.js → goals-settings-DV3ZlrdI.js} +1 -1
  44. package/dist/gateway/static/root/assets/{heartbeat-settings-D9Pldf5E.js → heartbeat-settings-C3kzg6ai.js} +1 -1
  45. package/dist/gateway/static/root/assets/{image-generation-api-D7aCMgOv.js → image-generation-api-BgISY8i-.js} +1 -1
  46. package/dist/gateway/static/root/assets/index-C1h0zkNo.js +212 -0
  47. package/dist/gateway/static/root/assets/index-Da36E3WH.css +1 -0
  48. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CBhtXhHb.js → keyboard-shortcuts-settings-0KSmaPu0.js} +1 -1
  49. package/dist/gateway/static/root/assets/local-app-workbench-page-DcD4mVId.js +2 -0
  50. package/dist/gateway/static/root/assets/{local-apps-page-BtJGF3M8.js → local-apps-page-BMrU8u7w.js} +1 -1
  51. package/dist/gateway/static/root/assets/{locale-store-DO-u1yS7.js → locale-store-DVGhFXRz.js} +1 -1
  52. package/dist/gateway/static/root/assets/{logs-page-0lvwfLAA.js → logs-page-CW5m9Cov.js} +3 -3
  53. package/dist/gateway/static/root/assets/{markdown-split-BGPaeTch.js → markdown-split-BVqbtN9o.js} +1 -1
  54. package/dist/gateway/static/root/assets/{media-plugins-C_Cx8v6u.js → media-plugins-Dr_wtkNJ.js} +1 -1
  55. package/dist/gateway/static/root/assets/messages-r8L6Ur3A.js +3 -0
  56. package/dist/gateway/static/root/assets/{notes-page-CIYy5BKF.js → notes-page-BWZRXsq6.js} +1 -1
  57. package/dist/gateway/static/root/assets/notes-workbench-DdnwNz9x.js +4 -0
  58. package/dist/gateway/static/root/assets/{page-tabs-C2vsdfJO.js → page-tabs-DWWgy0bF.js} +1 -1
  59. package/dist/gateway/static/root/assets/pdf-D4PI9qAw.js +54 -0
  60. package/dist/gateway/static/root/assets/pdf.worker.min-CHFwMXne.mjs +29 -0
  61. package/dist/gateway/static/root/assets/{preview-open-alternatives-D_VT83bW.js → preview-open-alternatives-Bnfs93ZP.js} +1 -1
  62. package/dist/gateway/static/root/assets/{product-open-page-BNP9kZ3Q.js → product-open-page-BR7QFmT-.js} +1 -1
  63. package/dist/gateway/static/root/assets/project-detail-page-B8GeS4dl.js +1 -0
  64. package/dist/gateway/static/root/assets/projects-page-DOeu1Hk_.js +1 -0
  65. package/dist/gateway/static/root/assets/remote-access-hub-De94rxnE.js +1 -0
  66. package/dist/gateway/static/root/assets/{save-bar-controls-BJL6Xb-F.js → save-bar-controls-BzS-rRTP.js} +1 -1
  67. package/dist/gateway/static/root/assets/{schedule-field-CxCPSLbu.js → schedule-field-Cl2IIDAN.js} +1 -1
  68. package/dist/gateway/static/root/assets/{schema-form-Cao1wGbk.js → schema-form-BjKjp5eZ.js} +1 -1
  69. package/dist/gateway/static/root/assets/sessions-page-A7p8G0OJ.js +1 -0
  70. package/dist/gateway/static/root/assets/settings-advanced-gate-BsGzjmqx.js +1 -0
  71. package/dist/gateway/static/root/assets/{settings-form-section-9pgClEud.js → settings-form-section-BSDNBfHn.js} +1 -1
  72. package/dist/gateway/static/root/assets/{settings-loading-skeleton-CQz0gEUK.js → settings-loading-skeleton-BD4peoAv.js} +1 -1
  73. package/dist/gateway/static/root/assets/{settings-page-DgsMzZLm.js → settings-page-S-P3U7at.js} +1 -1
  74. package/dist/gateway/static/root/assets/{settings-page-layout-BhqupMfG.js → settings-page-layout-BQTLh-86.js} +1 -1
  75. package/dist/gateway/static/root/assets/{setup-status-panel-B7BsWxJt.js → setup-status-panel-W3p6kNyA.js} +1 -1
  76. package/dist/gateway/static/root/assets/{share-preview-page-CC4dQsQN.js → share-preview-page-DQjMxyvw.js} +2 -2
  77. package/dist/gateway/static/root/assets/shares-settings-Xo3N99PO.js +1 -0
  78. package/dist/gateway/static/root/assets/skill-reload-api-ByPEG5t1.js +1 -0
  79. package/dist/gateway/static/root/assets/skills-page-C019Ml5q.js +2 -0
  80. package/dist/gateway/static/root/assets/{skills-page.utils-CF4AYPQg.js → skills-page.utils-CXnpudm6.js} +1 -1
  81. package/dist/gateway/static/root/assets/{system-settings-panel-CzZHWI4u.js → system-settings-panel-BhFwdYJP.js} +1 -1
  82. package/dist/gateway/static/root/assets/{theme-store-BZWNdSZC.js → theme-store-DQI-HPL-.js} +1 -1
  83. package/dist/gateway/static/root/assets/{time-picker-BC922Mdg.js → time-picker-C0DCya4U.js} +1 -1
  84. package/dist/gateway/static/root/assets/{typed-models-lib-C1S-B1pk.js → typed-models-lib-C-M3Fv2N.js} +1 -1
  85. package/dist/gateway/static/root/assets/{use-channel-catalog-DTiLxcLF.js → use-channel-catalog-Bndq4y4I.js} +1 -1
  86. package/dist/gateway/static/root/assets/user-context-page-fYBzpus-.js +1 -0
  87. package/dist/gateway/static/root/assets/{voice-api-key-field-CtIYRNfI.js → voice-api-key-field-p_g4UI1-.js} +1 -1
  88. package/dist/gateway/static/root/assets/work-discovery-page-DI0gCZRw.js +1 -0
  89. package/dist/gateway/static/root/assets/work-item-detail-page-DnBRP2wI.js +1 -0
  90. package/dist/gateway/static/root/assets/work-page-Z-nUaS_n.js +3 -0
  91. package/dist/gateway/static/root/assets/workflow-run-setup-panel-CHEXVvhH.js +3 -0
  92. package/dist/gateway/static/root/assets/workflows-page-BDfwnM-Y.js +11 -0
  93. package/dist/gateway/static/root/index.html +7 -7
  94. package/dist/package.js +1 -1
  95. package/dist/src/agent/agent-manager.js +7 -7
  96. package/dist/src/agent/context/execution-scope.d.ts +26 -0
  97. package/dist/src/agent/context/execution-scope.js +84 -0
  98. package/dist/src/agent/context/project-context.d.ts +3 -1
  99. package/dist/src/agent/context/project-context.js +26 -8
  100. package/dist/src/agent/embedded/model-runtime.d.ts +1 -2
  101. package/dist/src/agent/embedded/model-runtime.js +17 -29
  102. package/dist/src/agent/embedded/session-runner.js +2 -3
  103. package/dist/src/agent/prompt/service-prompt-builder.js +1 -0
  104. package/dist/src/agent/prompt/system-prompt.js +1 -1
  105. package/dist/src/agent/service/process-direct-streaming.js +7 -4
  106. package/dist/src/agent/session/session-config-service.d.ts +4 -1
  107. package/dist/src/agent/session/session-config-service.js +5 -3
  108. package/dist/src/agent/session/session-inspector.d.ts +6 -0
  109. package/dist/src/agent/session/session-inspector.js +9 -2
  110. package/dist/src/agent/workflow/subagent-runner.js +2 -0
  111. package/dist/src/agent/workflow/types.d.ts +1 -0
  112. package/dist/src/auth/model-credential-store.d.ts +17 -0
  113. package/dist/src/auth/model-credential-store.js +110 -0
  114. package/dist/src/auth/oauth/github-copilot.js +2 -2
  115. package/dist/src/auth/oauth/openai-codex.js +98 -7
  116. package/dist/src/auth/oauth/types.d.ts +4 -1
  117. package/dist/src/auth/oauth/xopc-cloud.js +124 -6
  118. package/dist/src/automations/service/automation-service.d.ts +3 -0
  119. package/dist/src/automations/service/automation-service.js +37 -7
  120. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  121. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  122. package/dist/src/config/agent-profile.js +1 -1
  123. package/dist/src/config/index.js +2 -2
  124. package/dist/src/config/schema.d.ts +21 -0
  125. package/dist/src/config/schema.js +12 -2
  126. package/dist/src/gateway/agents-admin.js +1 -1
  127. package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -0
  128. package/dist/src/gateway/hono/lib/config-payload.js +1 -0
  129. package/dist/src/gateway/hono/oauth-async.d.ts +5 -0
  130. package/dist/src/gateway/hono/oauth-async.js +20 -8
  131. package/dist/src/gateway/hono/routes/browser-install.js +1 -1
  132. package/dist/src/gateway/hono/routes/config-patch/gateway.d.ts +1 -1
  133. package/dist/src/gateway/hono/routes/config-patch/gateway.js +9 -0
  134. package/dist/src/gateway/hono/routes/goals.js +13 -0
  135. package/dist/src/gateway/hono/routes/home.d.ts +18 -2
  136. package/dist/src/gateway/hono/routes/home.js +19 -0
  137. package/dist/src/gateway/hono/routes/index.js +2 -2
  138. package/dist/src/gateway/hono/routes/proactive.d.ts +4 -0
  139. package/dist/src/gateway/hono/routes/proactive.js +157 -0
  140. package/dist/src/gateway/hono/routes/projects.js +2 -2
  141. package/dist/src/gateway/service/sessions-api.d.ts +2 -1
  142. package/dist/src/gateway/service.d.ts +10 -1
  143. package/dist/src/gateway/service.js +31 -31
  144. package/dist/src/infra/update-restart.js +1 -1
  145. package/dist/src/mobile/notification-service.d.ts +1 -0
  146. package/dist/src/mobile/notification-service.js +38 -18
  147. package/dist/src/mobile/notification-types.d.ts +2 -2
  148. package/dist/src/proactive/events/envelope.d.ts +2 -0
  149. package/dist/src/proactive/events/envelope.js +54 -0
  150. package/dist/src/proactive/events/publisher.d.ts +4 -0
  151. package/dist/src/proactive/events/repository.d.ts +9 -0
  152. package/dist/src/proactive/events/repository.js +62 -0
  153. package/dist/src/proactive/events/types.d.ts +44 -0
  154. package/dist/src/proactive/events/types.js +15 -0
  155. package/dist/src/proactive/execution/agent-executor.d.ts +16 -0
  156. package/dist/src/proactive/execution/agent-executor.js +104 -0
  157. package/dist/src/proactive/execution/context.d.ts +31 -0
  158. package/dist/src/proactive/execution/context.js +72 -0
  159. package/dist/src/proactive/execution/insight.d.ts +4 -0
  160. package/dist/src/proactive/execution/insight.js +74 -0
  161. package/dist/src/proactive/execution/repository.d.ts +23 -0
  162. package/dist/src/proactive/execution/repository.js +122 -0
  163. package/dist/src/proactive/execution/types.d.ts +54 -0
  164. package/dist/src/proactive/execution/types.js +1 -0
  165. package/dist/src/proactive/execution/worker.d.ts +15 -0
  166. package/dist/src/proactive/execution/worker.js +96 -0
  167. package/dist/src/proactive/inbox/repository.d.ts +24 -0
  168. package/dist/src/proactive/inbox/repository.js +117 -0
  169. package/dist/src/proactive/inbox/service.d.ts +17 -0
  170. package/dist/src/proactive/inbox/service.js +22 -0
  171. package/dist/src/proactive/inbox/types.d.ts +38 -0
  172. package/dist/src/proactive/inbox/types.js +1 -0
  173. package/dist/src/proactive/inbox/worker.d.ts +12 -0
  174. package/dist/src/proactive/inbox/worker.js +56 -0
  175. package/dist/src/proactive/index.d.ts +17 -0
  176. package/dist/src/proactive/index.js +11 -0
  177. package/dist/src/proactive/routing/batch-repository.d.ts +27 -0
  178. package/dist/src/proactive/routing/batch-repository.js +56 -0
  179. package/dist/src/proactive/routing/matcher.d.ts +5 -0
  180. package/dist/src/proactive/routing/matcher.js +56 -0
  181. package/dist/src/proactive/routing/types.d.ts +44 -0
  182. package/dist/src/proactive/routing/types.js +1 -0
  183. package/dist/src/proactive/scenarios/prompt-composer.d.ts +14 -0
  184. package/dist/src/proactive/scenarios/prompt-composer.js +24 -0
  185. package/dist/src/proactive/scenarios/repository.d.ts +23 -0
  186. package/dist/src/proactive/scenarios/repository.js +162 -0
  187. package/dist/src/proactive/scenarios/service.d.ts +15 -0
  188. package/dist/src/proactive/scenarios/service.js +26 -0
  189. package/dist/src/proactive/scenarios/types.d.ts +36 -0
  190. package/dist/src/proactive/scenarios/types.js +1 -0
  191. package/dist/src/proactive/service.d.ts +18 -0
  192. package/dist/src/proactive/service.js +61 -0
  193. package/dist/src/projects/project-service.d.ts +3 -1
  194. package/dist/src/projects/project-service.js +62 -32
  195. package/dist/src/providers/index.js +4 -2
  196. package/dist/src/providers/provider-auth-service.d.ts +22 -0
  197. package/dist/src/providers/provider-auth-service.js +66 -0
  198. package/dist/src/providers/register-runtime-providers.d.ts +6 -0
  199. package/dist/src/providers/register-runtime-providers.js +55 -0
  200. package/dist/src/providers/xopc-cloud-account-service.d.ts +2 -2
  201. package/dist/src/providers/xopc-cloud-account-service.js +6 -5
  202. package/dist/src/providers/xopc-cloud-config.d.ts +3 -0
  203. package/dist/src/providers/xopc-cloud-config.js +13 -0
  204. package/dist/src/providers/xopc-cloud-model-source.d.ts +2 -2
  205. package/dist/src/providers/xopc-cloud-model-source.js +6 -5
  206. package/dist/src/session/index.d.ts +1 -1
  207. package/dist/src/session/index.js +2 -2
  208. package/dist/src/session/thinking-resolve.d.ts +8 -0
  209. package/dist/src/session/thinking-resolve.js +6 -3
  210. package/dist/src/storage/sqlite/migrations/068_proactive_event_spine.sql +71 -0
  211. package/dist/src/storage/sqlite/migrations/069_proactive_scenario_control.sql +69 -0
  212. package/dist/src/storage/sqlite/migrations/070_proactive_execution.sql +55 -0
  213. package/dist/src/storage/sqlite/migrations/071_proactive_inbox.sql +45 -0
  214. package/dist/src/storage/sqlite/migrations/072_proactive_judgments.sql +14 -0
  215. package/dist/src/storage/sqlite/migrations/073_enable_default_proactive_scenarios.sql +13 -0
  216. package/dist/src/storage/sqlite/migrations/074_deduplicate_blocked_work_routing.sql +5 -0
  217. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  218. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  219. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  220. package/dist/src/storage/sqlite/schema.js +1 -1
  221. package/dist/src/tui/tui.js +2 -2
  222. package/dist/src/tui/xopc-tui-keybindings.d.ts +44 -4
  223. package/dist/src/work-discovery/thread-service.d.ts +1 -3
  224. package/dist/src/work-discovery/thread-service.js +13 -25
  225. package/dist/src/work-items/work-item-service.d.ts +3 -1
  226. package/dist/src/work-items/work-item-service.js +67 -36
  227. package/dist/src/workflows/engine/workflow-engine.d.ts +1 -0
  228. package/dist/src/workflows/engine/workflow-engine.js +2 -0
  229. package/dist/src/workflows/service/workflow-run-service.js +12 -6
  230. package/dist/src/workflows/service/workflow-session-bridge.js +2 -1
  231. package/package.json +5 -5
  232. package/dist/gateway/static/root/assets/agents-D-OIB_r0.js +0 -2
  233. package/dist/gateway/static/root/assets/api-2SLLStKp.js +0 -1
  234. package/dist/gateway/static/root/assets/appearance-settings-CDXXN57j.js +0 -1
  235. package/dist/gateway/static/root/assets/apps-page-CuvFyvuu.js +0 -1
  236. package/dist/gateway/static/root/assets/automations-page-DetGVTjI.js +0 -6
  237. package/dist/gateway/static/root/assets/capabilities-settings-panel-nS_AMN1K.js +0 -7
  238. package/dist/gateway/static/root/assets/capability-presets-settings-panel-DIO8ZNHW.js +0 -1
  239. package/dist/gateway/static/root/assets/channels-settings-4Im3vtnO.js +0 -1
  240. package/dist/gateway/static/root/assets/channels-status-swr-CMctpuqb.js +0 -1
  241. package/dist/gateway/static/root/assets/connectors-page-vL3SjHSc.js +0 -2
  242. package/dist/gateway/static/root/assets/copy-VueTIC2x.js +0 -1
  243. package/dist/gateway/static/root/assets/desktop-pet-CwOI_Hei.js +0 -1
  244. package/dist/gateway/static/root/assets/focus-detail-page-CCaZthpU.js +0 -1
  245. package/dist/gateway/static/root/assets/goal-detail-page-ChS2rU0w.js +0 -4
  246. package/dist/gateway/static/root/assets/index-DJ5vdaHk.css +0 -1
  247. package/dist/gateway/static/root/assets/index-TnouSpay.js +0 -212
  248. package/dist/gateway/static/root/assets/local-app-workbench-page-HQeu_F1C.js +0 -2
  249. package/dist/gateway/static/root/assets/messages-BP8aQX-5.js +0 -3
  250. package/dist/gateway/static/root/assets/notes-workbench-_FgNPlOx.js +0 -4
  251. package/dist/gateway/static/root/assets/pdf-epILhEOn.js +0 -54
  252. package/dist/gateway/static/root/assets/pdf.worker.min-iDqQPrd3.mjs +0 -31
  253. package/dist/gateway/static/root/assets/project-detail-page-MNi-3mZU.js +0 -1
  254. package/dist/gateway/static/root/assets/projects-page-xx8nUKZO.js +0 -1
  255. package/dist/gateway/static/root/assets/remote-access-hub-H5DSn2bR.js +0 -1
  256. package/dist/gateway/static/root/assets/sessions-page-CMQsupwM.js +0 -1
  257. package/dist/gateway/static/root/assets/settings-advanced-gate-OBUdG6bV.js +0 -1
  258. package/dist/gateway/static/root/assets/shares-settings-Bhz21P05.js +0 -1
  259. package/dist/gateway/static/root/assets/skill-reload-api-CBP-UB88.js +0 -1
  260. package/dist/gateway/static/root/assets/skills-page-A0rNObNB.js +0 -2
  261. package/dist/gateway/static/root/assets/user-context-page-8XdpiAyP.js +0 -1
  262. package/dist/gateway/static/root/assets/work-discovery-page-DBer86NF.js +0 -1
  263. package/dist/gateway/static/root/assets/work-item-detail-page-BUPyfYaq.js +0 -1
  264. package/dist/gateway/static/root/assets/work-page-G8phwwI1.js +0 -1
  265. package/dist/gateway/static/root/assets/workflow-run-setup-panel-IKxqDAXw.js +0 -3
  266. package/dist/gateway/static/root/assets/workflows-page-CNls7g6v.js +0 -11
  267. package/dist/src/focuses/candidate-repository.d.ts +0 -15
  268. package/dist/src/focuses/candidate-repository.js +0 -91
  269. package/dist/src/focuses/index.d.ts +0 -7
  270. package/dist/src/focuses/index.js +0 -7
  271. package/dist/src/focuses/insight-repository.d.ts +0 -22
  272. package/dist/src/focuses/insight-repository.js +0 -77
  273. package/dist/src/focuses/prompts.d.ts +0 -2
  274. package/dist/src/focuses/prompts.js +0 -18
  275. package/dist/src/focuses/reconciler.d.ts +0 -5
  276. package/dist/src/focuses/reconciler.js +0 -26
  277. package/dist/src/focuses/repository.d.ts +0 -61
  278. package/dist/src/focuses/repository.js +0 -214
  279. package/dist/src/focuses/run-processor.d.ts +0 -18
  280. package/dist/src/focuses/run-processor.js +0 -162
  281. package/dist/src/focuses/service.d.ts +0 -42
  282. package/dist/src/focuses/service.js +0 -241
  283. package/dist/src/focuses/types.d.ts +0 -89
  284. package/dist/src/gateway/hono/routes/focuses.d.ts +0 -3
  285. package/dist/src/gateway/hono/routes/focuses.js +0 -319
  286. /package/dist/src/{focuses/types.js → proactive/events/publisher.js} +0 -0
@@ -787,6 +787,13 @@ export declare const GatewayBindModeSchema: z.ZodEnum<{
787
787
  lan: "lan";
788
788
  tailnet: "tailnet";
789
789
  }>;
790
+ export declare const GatewayWebchatConfigSchema: z.ZodDefault<z.ZodObject<{
791
+ activityDetailDefault: z.ZodDefault<z.ZodEnum<{
792
+ stream: "stream";
793
+ on: "on";
794
+ off: "off";
795
+ }>>;
796
+ }, z.core.$strip>>;
790
797
  export declare const GatewayConfigSchema: z.ZodDefault<z.ZodObject<{
791
798
  bind: z.ZodOptional<z.ZodEnum<{
792
799
  auto: "auto";
@@ -872,6 +879,13 @@ export declare const GatewayConfigSchema: z.ZodDefault<z.ZodObject<{
872
879
  timezone: z.ZodOptional<z.ZodString>;
873
880
  }, z.core.$strip>>;
874
881
  }, z.core.$strip>>>;
882
+ webchat: z.ZodOptional<z.ZodDefault<z.ZodObject<{
883
+ activityDetailDefault: z.ZodDefault<z.ZodEnum<{
884
+ stream: "stream";
885
+ on: "on";
886
+ off: "off";
887
+ }>>;
888
+ }, z.core.$strip>>>;
875
889
  maxSseConnections: z.ZodOptional<z.ZodNumber>;
876
890
  corsOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
877
891
  publicUrl: z.ZodOptional<z.ZodString>;
@@ -2053,6 +2067,13 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
2053
2067
  timezone: z.ZodOptional<z.ZodString>;
2054
2068
  }, z.core.$strip>>;
2055
2069
  }, z.core.$strip>>>;
2070
+ webchat: z.ZodOptional<z.ZodDefault<z.ZodObject<{
2071
+ activityDetailDefault: z.ZodDefault<z.ZodEnum<{
2072
+ stream: "stream";
2073
+ on: "on";
2074
+ off: "off";
2075
+ }>>;
2076
+ }, z.core.$strip>>>;
2056
2077
  maxSseConnections: z.ZodOptional<z.ZodNumber>;
2057
2078
  corsOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
2058
2079
  publicUrl: z.ZodOptional<z.ZodString>;
@@ -64,7 +64,7 @@ function parseModelRef(ref) {
64
64
  model: trimmed.slice(idx + 1).trim()
65
65
  };
66
66
  }
67
- var AgentModelRefSchema, AgentImageGenerationModelSchema, AgentTypedModelRoleSchema, AgentTypedModelRolesSchema, AgentModelsSchema, AgentsConfigSchema, BrowserCloudConfigSchema, BrowserExtensionConfigSchema, BrowserCloakConfigSchema, BrowserConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, SessionResetModeSchema, SessionResetConfigSchema, SessionResetByTypeSchema, SessionScopeSchema, SessionConfigSchema, ChannelsConfigSchema, SearchProviderEntrySchema, WebSearchConfigSchema, WebsiteBlocklistSchema, WebToolsConfigSchema, ToolsConfigSchema, GatewayAuthRateLimitSchema, GatewaySecuritySchema, GatewayTrustedProxySchema, GatewayAuthSchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayRemoteSchema, GatewayTlsSchema, GatewayModeSchema, HeartbeatConfigSchema, GatewayChannelConnectDeferModeSchema, TunnelConsentSchema, TunnelConfigSchema, WorkspaceImportConfigSchema, WorkspaceConfigSchema, GatewayBindModeSchema, GatewayConfigSchema, ModelsDevConfigSchema, ModelCatalogConfigSchema, SttProviderConfigCatchallSchema, STTProviderConfigSchema, STTFallbackConfigSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, STTConfigSchema, TtsProviderConfigCatchallSchema, TTSProviderConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSEdgeConfigSchema, TTSSummarizationConfigSchema, TTSConfigSchema, VoiceRefinementConfigSchema, VoiceConfigSchema, MessagesConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProviderAuthConfigSchema, ProvidersConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, UpdateAutoConfigSchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, UpdateConfigSchema, CommandsConfigSchema, TuiConfigSchema, McpHttpUrlSchema, ConnectorSecretReferenceSchema, McpConfigScalarSchema, McpServerSchema, McpConfigSchema, CodeIntelligenceConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ConfigSchema;
67
+ var AgentModelRefSchema, AgentImageGenerationModelSchema, AgentTypedModelRoleSchema, AgentTypedModelRolesSchema, AgentModelsSchema, AgentsConfigSchema, BrowserCloudConfigSchema, BrowserExtensionConfigSchema, BrowserCloakConfigSchema, BrowserConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, SessionResetModeSchema, SessionResetConfigSchema, SessionResetByTypeSchema, SessionScopeSchema, SessionConfigSchema, ChannelsConfigSchema, SearchProviderEntrySchema, WebSearchConfigSchema, WebsiteBlocklistSchema, WebToolsConfigSchema, ToolsConfigSchema, GatewayAuthRateLimitSchema, GatewaySecuritySchema, GatewayTrustedProxySchema, GatewayAuthSchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayRemoteSchema, GatewayTlsSchema, GatewayModeSchema, HeartbeatConfigSchema, GatewayChannelConnectDeferModeSchema, TunnelConsentSchema, TunnelConfigSchema, WorkspaceImportConfigSchema, WorkspaceConfigSchema, GatewayBindModeSchema, GatewayWebchatConfigSchema, GatewayConfigSchema, ModelsDevConfigSchema, ModelCatalogConfigSchema, SttProviderConfigCatchallSchema, STTProviderConfigSchema, STTFallbackConfigSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, STTConfigSchema, TtsProviderConfigCatchallSchema, TTSProviderConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSEdgeConfigSchema, TTSSummarizationConfigSchema, TTSConfigSchema, VoiceRefinementConfigSchema, VoiceConfigSchema, MessagesConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProviderAuthConfigSchema, ProvidersConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, UpdateAutoConfigSchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, UpdateConfigSchema, CommandsConfigSchema, TuiConfigSchema, McpHttpUrlSchema, ConnectorSecretReferenceSchema, McpConfigScalarSchema, McpServerSchema, McpConfigSchema, CodeIntelligenceConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ConfigSchema;
68
68
  var init_schema = __esmMin((() => {
69
69
  init_schema$1();
70
70
  init_preset_chain();
@@ -451,6 +451,13 @@ strict: z.boolean().optional() }).optional();
451
451
  "tailnet",
452
452
  "custom"
453
453
  ]);
454
+ GatewayWebchatConfigSchema = z.object({
455
+ /** Default visibility of AI execution activity in the Web UI. */
456
+ activityDetailDefault: z.enum([
457
+ "off",
458
+ "on",
459
+ "stream"
460
+ ]).default("on") }).default({ activityDetailDefault: "on" });
454
461
  GatewayConfigSchema = z.object({
455
462
  /** Semantic bind mode. */
456
463
  bind: GatewayBindModeSchema.optional(),
@@ -465,6 +472,7 @@ strict: z.boolean().optional() }).optional();
465
472
  tls: GatewayTlsSchema.optional(),
466
473
  auth: GatewayAuthSchema.optional(),
467
474
  heartbeat: HeartbeatConfigSchema.optional(),
475
+ webchat: GatewayWebchatConfigSchema.optional(),
468
476
  maxSseConnections: z.number().optional(),
469
477
  corsOrigins: z.array(z.string()).optional(),
470
478
  /**
@@ -638,6 +646,7 @@ strict: z.boolean().optional() }).optional();
638
646
  intervalMs: 18e5,
639
647
  includeSystemPromptSection: false
640
648
  },
649
+ webchat: { activityDetailDefault: "on" },
641
650
  maxSseConnections: 100,
642
651
  corsOrigins: [],
643
652
  skillsMarketplaceProvider: "store",
@@ -1116,6 +1125,7 @@ workDiscoveryOnboarding: z.boolean().default(true) }).strict().default({ workDis
1116
1125
  intervalMs: 18e5,
1117
1126
  includeSystemPromptSection: false
1118
1127
  },
1128
+ webchat: { activityDetailDefault: "on" },
1119
1129
  maxSseConnections: 100,
1120
1130
  corsOrigins: [],
1121
1131
  skillsMarketplaceProvider: "store",
@@ -1183,4 +1193,4 @@ workDiscoveryOnboarding: z.boolean().default(true) }).strict().default({ workDis
1183
1193
  }));
1184
1194
  //#endregion
1185
1195
  init_schema();
1186
- export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CodeIntelligenceConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef };
1196
+ export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CodeIntelligenceConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GatewayWebchatConfigSchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef };
@@ -1,5 +1,5 @@
1
- import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
2
1
  import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
2
+ import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
3
3
  import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
4
4
  import { WORKSPACE_FILES, init_paths, resolveUserProfilePath } from "../config/paths.js";
5
5
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
@@ -252,6 +252,9 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
252
252
  timezone?: string;
253
253
  };
254
254
  };
255
+ webchat: {
256
+ activityDetailDefault: "stream" | "on" | "off";
257
+ };
255
258
  maxSseConnections: number;
256
259
  channelConnectDeferMode: "explicit" | "off" | "auto";
257
260
  channelConnectDeferIds: string[];
@@ -165,6 +165,7 @@ async function buildSafeWebConfigPayload(service, options = {}) {
165
165
  isolatedSession: config.gateway?.heartbeat?.isolatedSession,
166
166
  activeHours: config.gateway?.heartbeat?.activeHours
167
167
  },
168
+ webchat: { activityDetailDefault: config.gateway?.webchat?.activityDetailDefault ?? "on" },
168
169
  maxSseConnections: typeof config.gateway?.maxSseConnections === "number" ? config.gateway.maxSseConnections : 100,
169
170
  channelConnectDeferMode: config.gateway?.channelConnectDeferMode ?? "auto",
170
171
  channelConnectDeferIds: Array.isArray(config.gateway?.channelConnectDeferIds) ? config.gateway.channelConnectDeferIds : [],
@@ -8,6 +8,11 @@
8
8
  import { Hono } from 'hono';
9
9
  import type { GatewayService } from '../service.js';
10
10
  import { type OAuthCredentials } from '../../auth/oauth/types.js';
11
+ export declare function resolveOAuthLoginMethodPreference(params: {
12
+ requestedMethod?: unknown;
13
+ supportedMethods?: readonly string[];
14
+ remote: boolean;
15
+ }): string | undefined;
11
16
  export declare function createOAuthAsyncHandler(service: GatewayService): Hono<import("hono/dist/types/types.js").BlankEnv, import("hono/dist/types/types.js").BlankSchema, "/">;
12
17
  export declare function getOAuthCredentialsFromCache(provider: string): OAuthCredentials | undefined;
13
18
  export declare function setOAuthCredentialsToCache(provider: string, creds: OAuthCredentials): void;
@@ -28,6 +28,7 @@ function formatOAuthAsyncError(err) {
28
28
  const OAUTH_PROVIDERS = getOAuthProviderInterfaces();
29
29
  const oauthSessions = /* @__PURE__ */ new Map();
30
30
  const SESSION_TTL_MS = 600 * 1e3;
31
+ const SESSION_EXPIRY_GRACE_MS = 3e4;
31
32
  setInterval(() => {
32
33
  const now = Date.now();
33
34
  for (const [id, session] of oauthSessions.entries()) if (now > session.expiresAt) {
@@ -64,11 +65,21 @@ function requestLooksRemote(c) {
64
65
  hostWithoutPort(c.req.header("host"))
65
66
  ].some((candidate) => candidate && !isLoopbackHost(candidate));
66
67
  }
68
+ function resolveOAuthLoginMethodPreference(params) {
69
+ if (typeof params.requestedMethod === "string" && params.requestedMethod.trim()) {
70
+ const requested = params.requestedMethod.trim();
71
+ return !params.supportedMethods || params.supportedMethods.includes(requested) ? requested : void 0;
72
+ }
73
+ if (params.remote && params.supportedMethods?.includes("browser") && params.supportedMethods.includes("device_code")) return "device_code";
74
+ }
67
75
  function preferredOAuthLoginMethod(params) {
68
- if (typeof params.requestedMethod === "string" && params.requestedMethod.trim()) return params.requestedMethod.trim();
69
- if (params.provider !== "openai-codex") return;
70
76
  const publicHost = hostWithoutPort(resolveReverseProxyPublicUrl(params.service.currentConfig) ?? void 0);
71
- if (publicHost && !isLoopbackHost(publicHost) || requestLooksRemote(params.c)) return "device_code";
77
+ const remote = Boolean(publicHost && !isLoopbackHost(publicHost) || requestLooksRemote(params.c));
78
+ return resolveOAuthLoginMethodPreference({
79
+ requestedMethod: params.requestedMethod,
80
+ supportedMethods: OAUTH_PROVIDERS[params.provider]?.loginMethods,
81
+ remote
82
+ });
72
83
  }
73
84
  function createOAuthAsyncHandler(service) {
74
85
  const oauth = new Hono();
@@ -99,9 +110,9 @@ function createOAuthAsyncHandler(service) {
99
110
  oauthSessions.set(sessionId, session);
100
111
  runOAuthFlow(session, oauthProvider, service).catch((err) => {
101
112
  log.error({
113
+ err,
102
114
  sessionId,
103
- provider,
104
- error: err
115
+ provider
105
116
  }, "Background OAuth flow failed");
106
117
  session.status = "failed";
107
118
  session.error = err instanceof Error ? err.message : "OAuth flow failed";
@@ -220,6 +231,7 @@ async function runOAuthFlow(session, oauthProvider, _service) {
220
231
  session.verificationUri = info.verificationUri;
221
232
  session.instructions = `Enter code ${info.userCode}`;
222
233
  session.message = `Open ${info.verificationUri} and enter code ${info.userCode}`;
234
+ if (info.expiresInSeconds) session.expiresAt = Math.max(session.expiresAt, Date.now() + info.expiresInSeconds * 1e3 + SESSION_EXPIRY_GRACE_MS);
223
235
  },
224
236
  onPrompt: async (prompt) => {
225
237
  session.status = "waiting_code";
@@ -285,9 +297,9 @@ async function runOAuthFlow(session, oauthProvider, _service) {
285
297
  session.status = "failed";
286
298
  session.error = formatOAuthAsyncError(err);
287
299
  log.error({
300
+ err,
288
301
  sessionId: session.id,
289
- provider: session.provider,
290
- error: err
302
+ provider: session.provider
291
303
  }, "OAuth login failed");
292
304
  }
293
305
  } finally {
@@ -307,4 +319,4 @@ function deleteOAuthCredentialsFromCache(provider) {
307
319
  oauthCredentialsCache.delete(provider);
308
320
  }
309
321
  //#endregion
310
- export { createOAuthAsyncHandler, deleteOAuthCredentialsFromCache, getOAuthCredentialsFromCache, setOAuthCredentialsToCache };
322
+ export { createOAuthAsyncHandler, deleteOAuthCredentialsFromCache, getOAuthCredentialsFromCache, resolveOAuthLoginMethodPreference, setOAuthCredentialsToCache };
@@ -1,5 +1,5 @@
1
- import { acquireBrowserInstallLock, cancelBrowserInstall } from "../../../browser/install-lock.js";
2
1
  import { createGatewayRouteLogger } from "../lib/route-logger.js";
2
+ import { acquireBrowserInstallLock, cancelBrowserInstall } from "../../../browser/install-lock.js";
3
3
  import { runPlaywrightChromiumInstallWithProgress } from "../../../browser/providers/playwright-install.js";
4
4
  import { streamSSE } from "hono/streaming";
5
5
  //#region src/gateway/hono/routes/browser-install.ts
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Covers heartbeat, bind/customBindHost/port, tailscale, auth (mode + token +
5
5
  * password + rateLimit + trustedProxy), trustedProxies, allowRealIpFallback,
6
- * dangerouslyAllowHostHeaderOriginFallback, security, share, siteShare, publicUrl,
6
+ * dangerouslyAllowHostHeaderOriginFallback, security, share, siteShare, publicUrl, webchat,
7
7
  * corsOrigins, maxSseConnections, and channelConnectDefer{Mode,Ids,SkipIds}.
8
8
  *
9
9
  * Validation policy: each subsection that can reject rejects with a 400 and a
@@ -32,6 +32,15 @@ function parseDeferIdList(raw) {
32
32
  return ids;
33
33
  }
34
34
  function applyGatewayPatch(config, body) {
35
+ if (body.gateway?.webchat?.activityDetailDefault !== void 0) {
36
+ const level = body.gateway.webchat.activityDetailDefault;
37
+ if (level !== "off" && level !== "on" && level !== "stream") return patchError("gateway.webchat.activityDetailDefault must be off, on, or stream");
38
+ const gw = ensureGateway(config);
39
+ gw.webchat = {
40
+ ...gw.webchat ?? { activityDetailDefault: "on" },
41
+ activityDetailDefault: level
42
+ };
43
+ }
35
44
  if (body.gateway?.heartbeat !== void 0 && typeof body.gateway.heartbeat === "object") {
36
45
  const gw = ensureGateway(config);
37
46
  if (!gw.heartbeat) gw.heartbeat = {
@@ -532,6 +532,8 @@ function registerGoalsRoutes(authenticated, deps) {
532
532
  error: "Goal not found"
533
533
  }, 404);
534
534
  const patch = {};
535
+ let requestedProjectId;
536
+ let projectChanged = false;
535
537
  if (typeof body.title === "string") patch.title = body.title;
536
538
  if ("description" in body) patch.description = typeof body.description === "string" ? body.description : void 0;
537
539
  const priority = parsePriority(body.priority);
@@ -547,10 +549,21 @@ function registerGoalsRoutes(authenticated, deps) {
547
549
  ok: false,
548
550
  error: "Project not found"
549
551
  }, 404);
552
+ requestedProjectId = nextProjectId;
553
+ projectChanged = nextProjectId !== goal.projectId;
550
554
  patch.projectId = nextProjectId;
551
555
  }
552
556
  const locale = normalizeGoalUiLocale(body.uiLocale);
553
557
  if (locale) patch.uiLocale = locale;
558
+ if (projectChanged && goal.activeSessionKey) try {
559
+ if (requestedProjectId) deps.service.projects.attachSession(goal.activeSessionKey, requestedProjectId);
560
+ else deps.service.projects.detachSession(goal.activeSessionKey);
561
+ } catch (error) {
562
+ return c.json({
563
+ ok: false,
564
+ error: error instanceof Error ? error.message : String(error)
565
+ }, 404);
566
+ }
554
567
  if (Object.keys(patch).length > 0) goal = goals.update(goalId, patch);
555
568
  if (status) {
556
569
  const previousStatus = goal?.status;
@@ -1,8 +1,8 @@
1
1
  import type { Hono } from 'hono';
2
2
  import { type HomeAttentionSubjectKind } from '../../../storage/sqlite/index.js';
3
3
  import type { AuthenticatedRouteDeps } from './deps.js';
4
- type HomeDecisionKind = 'work_item' | 'goal' | 'connector_approval' | 'goal_evidence';
5
- type HomeDecisionReason = 'needs_input' | 'in_review' | 'blocked' | 'overdue' | 'due_soon' | 'approval_required';
4
+ type HomeDecisionKind = 'agent_judgment' | 'work_item' | 'goal' | 'connector_approval' | 'goal_evidence';
5
+ type HomeDecisionReason = 'needs_input' | 'in_review' | 'blocked' | 'overdue' | 'due_soon' | 'decision_needed' | 'approval_required';
6
6
  type HomeAttention = {
7
7
  id: string;
8
8
  kind: HomeAttentionSubjectKind;
@@ -25,6 +25,22 @@ type HomeDecision = {
25
25
  projectId?: string;
26
26
  projectName?: string;
27
27
  updatedAt: number;
28
+ judgment?: {
29
+ inboxItemId: string;
30
+ whyNow: string;
31
+ impact: string;
32
+ workDone: string;
33
+ recommendation: string;
34
+ confidence: number;
35
+ decision?: {
36
+ question: string;
37
+ options: Array<{
38
+ id: string;
39
+ label: string;
40
+ consequence: string;
41
+ }>;
42
+ };
43
+ };
28
44
  response?: {
29
45
  kind: 'connector_approval';
30
46
  approvalId: string;
@@ -245,6 +245,25 @@ function registerHomeRoutes(authenticated, deps) {
245
245
  const latestAutomationRuns = [...automationRuns].sort((left, right) => right.createdAtMs - left.createdAtMs).filter((run, index, all) => all.findIndex((candidate) => candidate.automationId === run.automationId) === index);
246
246
  const automationsById = new Map(automations.map((automation) => [automation.id, automation]));
247
247
  const decisions = [
248
+ ...service.proactiveInbox.list({ limit: 20 }).filter((item) => item.status === "unread" || item.status === "read").map((item) => ({
249
+ id: `agent-judgment:${item.id}`,
250
+ kind: "agent_judgment",
251
+ title: item.insight.title,
252
+ detail: item.insight.summary,
253
+ reason: "decision_needed",
254
+ urgency: item.insight.urgency === "critical" || item.insight.urgency === "high" ? "now" : "soon",
255
+ href: `/work?judgment=${encodeURIComponent(item.id)}`,
256
+ updatedAt: Date.parse(item.updatedAt),
257
+ judgment: {
258
+ inboxItemId: item.id,
259
+ whyNow: item.insight.whyNow,
260
+ impact: item.insight.impact,
261
+ workDone: item.insight.workDone,
262
+ recommendation: item.insight.recommendation,
263
+ confidence: item.insight.confidence,
264
+ ...item.insight.decision ? { decision: item.insight.decision } : {}
265
+ }
266
+ })),
248
267
  ...activeWorkItems.map((item) => decisionFromWorkItem(item, projectsById.get(item.projectId)?.name ?? "Project", nowMs)).filter((item) => Boolean(item)),
249
268
  ...activeGoals.map((goal) => decisionFromGoal(goal, goal.projectId ? projectsById.get(goal.projectId)?.name : void 0)).filter((item) => Boolean(item)),
250
269
  ...connectorApprovals.filter((approval) => Date.parse(approval.expiresAt) > nowMs).map((approval) => ({
@@ -12,7 +12,7 @@ import { registerInteractionStateRoutes } from "./interaction-state.js";
12
12
  import { registerComposerHistoryRoutes } from "./composer-history.js";
13
13
  import { registerLocalAppsRoutes } from "./local-apps.js";
14
14
  import { registerWorkDiscoveryRoutes } from "./work-discovery.js";
15
- import { registerFocusRoutes } from "./focuses.js";
15
+ import { registerProactiveRoutes } from "./proactive.js";
16
16
  import { mountAppLazyRoutePrefixes, registerAuthenticatedLazyRouteFallback } from "./lazy-fallback.js";
17
17
  //#region src/gateway/hono/routes/index.ts
18
18
  function registerCoreAuthenticatedRoutes(authenticated, deps) {
@@ -25,7 +25,7 @@ function registerCoreAuthenticatedRoutes(authenticated, deps) {
25
25
  registerProjectSkillRoutes(authenticated, deps);
26
26
  registerLocalAppsRoutes(authenticated, deps);
27
27
  registerWorkDiscoveryRoutes(authenticated, deps);
28
- registerFocusRoutes(authenticated, deps);
28
+ registerProactiveRoutes(authenticated, deps);
29
29
  registerSearchRoutes(authenticated, deps);
30
30
  registerMobileRoutes(authenticated, deps);
31
31
  registerTaskOutcomeRoutes(authenticated, deps);
@@ -0,0 +1,4 @@
1
+ import type { Hono } from 'hono';
2
+ import type { AuthenticatedRouteDeps } from './deps.js';
3
+ /** User-facing judgment inbox plus internal diagnostics. There is intentionally no proactive control-panel API. */
4
+ export declare function registerProactiveRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;
@@ -0,0 +1,157 @@
1
+ //#region src/gateway/hono/routes/proactive.ts
2
+ function positiveInt(value, fallback) {
3
+ const parsed = Number(value);
4
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;
5
+ }
6
+ /** User-facing judgment inbox plus internal diagnostics. There is intentionally no proactive control-panel API. */
7
+ function registerProactiveRoutes(authenticated, deps) {
8
+ authenticated.get("/api/inbox/judgments", (c) => {
9
+ const status = c.req.query("status");
10
+ if (status && ![
11
+ "unread",
12
+ "read",
13
+ "snoozed",
14
+ "resolved"
15
+ ].includes(status)) return c.json({
16
+ ok: false,
17
+ error: "Invalid inbox status"
18
+ }, 400);
19
+ return c.json({
20
+ ok: true,
21
+ items: deps.service.proactiveInbox.list({
22
+ ...status ? { status } : {},
23
+ limit: positiveInt(c.req.query("limit"), 50)
24
+ })
25
+ });
26
+ });
27
+ authenticated.post("/api/inbox/judgments/:itemId/transition", deps.strictRateLimitMiddleware, async (c) => {
28
+ const body = await c.req.json().catch(() => null);
29
+ if (!body || ![
30
+ "unread",
31
+ "read",
32
+ "snoozed",
33
+ "resolved"
34
+ ].includes(String(body.status))) return c.json({
35
+ ok: false,
36
+ error: "Valid status is required"
37
+ }, 400);
38
+ try {
39
+ return c.json({
40
+ ok: true,
41
+ item: deps.service.proactiveInbox.transition(c.req.param("itemId"), {
42
+ status: body.status,
43
+ ...typeof body.snoozedUntil === "string" ? { snoozedUntil: body.snoozedUntil } : {},
44
+ ...typeof body.resolution === "string" ? { resolution: body.resolution } : {}
45
+ })
46
+ });
47
+ } catch (error) {
48
+ return c.json({
49
+ ok: false,
50
+ error: error instanceof Error ? error.message : String(error)
51
+ }, 400);
52
+ }
53
+ });
54
+ authenticated.post("/api/inbox/judgments/:itemId/decisions", deps.strictRateLimitMiddleware, async (c) => {
55
+ const body = await c.req.json().catch(() => null);
56
+ if (!body || typeof body.choice !== "string") return c.json({
57
+ ok: false,
58
+ error: "choice is required"
59
+ }, 400);
60
+ try {
61
+ return c.json({
62
+ ok: true,
63
+ item: deps.service.proactiveInbox.decide(c.req.param("itemId"), body.choice, typeof body.note === "string" ? body.note : "")
64
+ }, 201);
65
+ } catch (error) {
66
+ return c.json({
67
+ ok: false,
68
+ error: error instanceof Error ? error.message : String(error)
69
+ }, 400);
70
+ }
71
+ });
72
+ authenticated.post("/api/inbox/judgments/:itemId/feedback", deps.strictRateLimitMiddleware, async (c) => {
73
+ const body = await c.req.json().catch(() => null);
74
+ if (!body || body.rating !== "useful" && body.rating !== "not_useful") return c.json({
75
+ ok: false,
76
+ error: "Valid rating is required"
77
+ }, 400);
78
+ try {
79
+ deps.service.proactiveInbox.feedback(c.req.param("itemId"), body.rating, typeof body.note === "string" ? body.note : "");
80
+ return c.json({ ok: true }, 201);
81
+ } catch (error) {
82
+ return c.json({
83
+ ok: false,
84
+ error: error instanceof Error ? error.message : String(error)
85
+ }, 400);
86
+ }
87
+ });
88
+ authenticated.post("/api/inbox/judgments/:itemId/instructions", deps.strictRateLimitMiddleware, async (c) => {
89
+ const body = await c.req.json().catch(() => null);
90
+ if (!body || typeof body.instruction !== "string" || !body.instruction.trim()) return c.json({
91
+ ok: false,
92
+ error: "instruction is required"
93
+ }, 400);
94
+ try {
95
+ return c.json({
96
+ ok: true,
97
+ ...deps.service.proactiveInbox.instruct(c.req.param("itemId"), body.instruction)
98
+ }, 201);
99
+ } catch (error) {
100
+ return c.json({
101
+ ok: false,
102
+ error: error instanceof Error ? error.message : String(error)
103
+ }, 400);
104
+ }
105
+ });
106
+ authenticated.get("/api/internal/proactive/insights", (c) => c.json({
107
+ ok: true,
108
+ insights: deps.service.proactiveInsights()
109
+ }));
110
+ authenticated.get("/api/internal/proactive/scenarios", (c) => c.json({
111
+ ok: true,
112
+ scenarios: deps.service.proactiveScenarios.list(),
113
+ subscriptions: deps.service.proactiveScenarios.subscriptions()
114
+ }));
115
+ authenticated.post("/api/internal/proactive/events", deps.strictRateLimitMiddleware, async (c) => {
116
+ const body = await c.req.json().catch(() => null);
117
+ if (!body || typeof body !== "object" || Array.isArray(body)) return c.json({
118
+ ok: false,
119
+ error: "Event body must be an object"
120
+ }, 400);
121
+ try {
122
+ const result = deps.service.proactive.publish(body);
123
+ return c.json({
124
+ ok: true,
125
+ ...result
126
+ }, result.inserted ? 201 : 200);
127
+ } catch (error) {
128
+ return c.json({
129
+ ok: false,
130
+ error: error instanceof Error ? error.message : String(error)
131
+ }, 400);
132
+ }
133
+ });
134
+ authenticated.get("/api/internal/proactive/events", (c) => {
135
+ const events = deps.service.proactive.listEvents({
136
+ limit: positiveInt(c.req.query("limit"), 50),
137
+ ...c.req.query("type") ? { type: c.req.query("type") } : {}
138
+ }).map((event) => event.sensitivity === "public" || event.sensitivity === "personal" ? event : {
139
+ ...event,
140
+ payload: { redacted: true }
141
+ });
142
+ return c.json({
143
+ ok: true,
144
+ events
145
+ });
146
+ });
147
+ authenticated.get("/api/internal/proactive/batches", (c) => c.json({
148
+ ok: true,
149
+ batches: deps.service.proactive.listBatches({ limit: positiveInt(c.req.query("limit"), 50) })
150
+ }));
151
+ authenticated.get("/api/internal/proactive/health", (c) => c.json({
152
+ ok: true,
153
+ health: deps.service.proactive.health()
154
+ }));
155
+ }
156
+ //#endregion
157
+ export { registerProactiveRoutes };
@@ -15,7 +15,7 @@ import { inferProjectKind } from "../../../projects/project-kind.js";
15
15
  import { inferSuggestedProjectDefaultAgentId } from "../../../projects/project-agent-suggestion.js";
16
16
  import { buildProjectLoopOverview } from "../../../projects/project-loop.js";
17
17
  import "../../../projects/index.js";
18
- import { WORK_ITEM_ATTACHMENT_MAX_BYTES, WorkItemService } from "../../../work-items/work-item-service.js";
18
+ import { WORK_ITEM_ATTACHMENT_MAX_BYTES } from "../../../work-items/work-item-service.js";
19
19
  import { buildWorkItemAgentContext } from "../../../work-items/agent-context.js";
20
20
  import "../../../work-items/index.js";
21
21
  import { createGatewayRouteLogger } from "../lib/route-logger.js";
@@ -373,7 +373,7 @@ function registerProjectsRoutes(authenticated, deps) {
373
373
  const { service } = deps;
374
374
  const activity = new ActivityService();
375
375
  const goals = new GoalService();
376
- const workItems = new WorkItemService();
376
+ const workItems = service.workItems;
377
377
  authenticated.post("/api/projects", async (c) => {
378
378
  const body = await c.req.json().catch(() => ({}));
379
379
  const name = textField(body, "name")?.trim();
@@ -88,7 +88,8 @@ export declare class GatewaySessionsApi {
88
88
  patchAgentConfig(sessionKey: string, body: {
89
89
  thinkingLevel?: string;
90
90
  model?: string | null;
91
- reasoningLevel?: string;
91
+ activityDetailLevel?: string | null;
92
+ reasoningLevel?: string | null;
92
93
  verboseLevel?: string;
93
94
  workingDirectory?: string;
94
95
  }): Promise<import("../../agent/session/session-config-service.js").PatchSessionAgentConfigResult>;
@@ -12,7 +12,9 @@ import { AgentRunRelay } from './agent-run-relay.js';
12
12
  import { type EnqueueGoalRunOptions } from '../goals/index.js';
13
13
  import { ProjectService } from '../projects/index.js';
14
14
  import { LocalAppService } from '../local-apps/index.js';
15
+ import { WorkItemService } from '../work-items/index.js';
15
16
  import { type BrowserRecipeService } from '../browser/recipes/index.js';
17
+ import { listInsights, ProactiveEventService, ProactiveInboxService, ProactiveInboxWorker, ProactiveScenarioService, ProactiveWorker } from '../proactive/index.js';
16
18
  import { GatewaySessionsApi } from './service/sessions-api.js';
17
19
  import { GatewayMarketplaceService } from './service/marketplace-service.js';
18
20
  import { GatewayAgentRunner } from './service/agent-runner.js';
@@ -68,7 +70,6 @@ export declare class GatewayService {
68
70
  private connectedKnowledgeCoordinator;
69
71
  private stopAutomationProductEventBridge;
70
72
  private stopSessionTranscriptAutomationEvents;
71
- private stopFocusReconciler;
72
73
  /**
73
74
  * Webchat agent invocation surface (`runAgent`, `abortAgentRun`, `steer*`,
74
75
  * `submitClarifyResponse`, clarify-bridge dispatch). Owns the
@@ -90,8 +91,16 @@ export declare class GatewayService {
90
91
  readonly marketplace: GatewayMarketplaceService;
91
92
  /** First-class project grouping surface. */
92
93
  readonly projects: ProjectService;
94
+ readonly workItems: WorkItemService;
93
95
  /** Local user-created apps, their coder projects, previews, and installs. */
94
96
  readonly localApps: LocalAppService;
97
+ /** Unified durable event spine for proactive scenarios. */
98
+ readonly proactiveScenarios: ProactiveScenarioService;
99
+ readonly proactive: ProactiveEventService;
100
+ readonly proactiveInbox: ProactiveInboxService;
101
+ readonly proactiveInsights: typeof listInsights;
102
+ readonly proactiveWorker: ProactiveWorker;
103
+ readonly proactiveInboxWorker: ProactiveInboxWorker;
95
104
  constructor(serviceConfig?: GatewayServiceConfig);
96
105
  /** Lazy AgentService — constructed on first use or during `start()`. */
97
106
  get agentService(): AgentService;