@xopcai/xopc 0.0.196 → 0.0.199

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 (258) 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-BwmdJ5pv.js → activity-store-DYVN1hRp.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-B1oxPli_.js → agent-avatar-dicebear-Bt70bZjv.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-D19uNmJf.js +68 -0
  6. package/dist/gateway/static/root/assets/{api-BM1hNzjw.js → api-B8mzbAle.js} +1 -1
  7. package/dist/gateway/static/root/assets/app-management-settings-panel-B4x7JfL8.js +1 -0
  8. package/dist/gateway/static/root/assets/appearance-settings-Dwdagf-Q.js +1 -0
  9. package/dist/gateway/static/root/assets/apps-page-DkTiesxe.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-BdE4Mati.js → archive-plugin-Cv0VXKLm.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-CTzaQcLV.js → attachment-load-CgidKrXn.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-page-BR6qMOVr.js +6 -0
  13. package/dist/gateway/static/root/assets/{binary-plugins-B25zTNxl.js → binary-plugins-DN3CQgIq.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-Cdrf2awF.js → block-editor-BwkSl1F_.js} +46 -46
  15. package/dist/gateway/static/root/assets/browser-settings-page-CDFQWAxI.js +8 -0
  16. package/dist/gateway/static/root/assets/browser-workflow-inputs-_ndaecsf.js +1 -0
  17. package/dist/gateway/static/root/assets/{browser-workflows-page-Wx9FrbK-.js → browser-workflows-page-C_I31wLm.js} +2 -2
  18. package/dist/gateway/static/root/assets/button-CSEbl4zT.js +1 -0
  19. package/dist/gateway/static/root/assets/capabilities-settings-panel-D41mssOq.js +7 -0
  20. package/dist/gateway/static/root/assets/{capability-presets-api-BoOzFotX.js → capability-presets-api-Dy1jZJKs.js} +1 -1
  21. package/dist/gateway/static/root/assets/capability-presets-settings-panel-BXgCyuu2.js +3 -0
  22. package/dist/gateway/static/root/assets/{channel-recipient-api-_8IiTxRB.js → channel-recipient-api-D-9qiuio.js} +1 -1
  23. package/dist/gateway/static/root/assets/channels-settings-DV5BhAeu.js +1 -0
  24. package/dist/gateway/static/root/assets/channels-status-swr-B4Rbh3bM.js +1 -0
  25. package/dist/gateway/static/root/assets/connectors-api-5FEBYguL.js +1 -0
  26. package/dist/gateway/static/root/assets/connectors-page-C_qkEN0T.js +2 -0
  27. package/dist/gateway/static/root/assets/copy-Dv6d4Dvw.js +1 -0
  28. package/dist/gateway/static/root/assets/cron-expression-SEFx5rnr.js +2 -0
  29. package/dist/gateway/static/root/assets/date-picker-D4zCUQJL.js +1 -0
  30. package/dist/gateway/static/root/assets/dependency-picker-DpQAxS2k.js +1 -0
  31. package/dist/gateway/static/root/assets/{desktop-pet-BOb8sEhN.js → desktop-pet-B_5G3lQl.js} +1 -1
  32. package/dist/gateway/static/root/assets/desktop-pet-settings-ClEyoUJe.js +1 -0
  33. package/dist/gateway/static/root/assets/directory-picker-path-field-AsFWmOjG.js +1 -0
  34. package/dist/gateway/static/root/assets/dist-BPoKqzeH.js +1 -0
  35. package/dist/gateway/static/root/assets/dist-DY4Af0fY.js +1 -0
  36. package/dist/gateway/static/root/assets/{extension-debug-page-p83TmZFd.js → extension-debug-page-C22Y2o5l.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-page-DMQ3ovxA.js → extension-page-C61Ikawk.js} +1 -1
  38. package/dist/gateway/static/root/assets/extension-settings-page-WlWWcDFr.js +1 -0
  39. package/dist/gateway/static/root/assets/external-link-DjqjBmc3.js +1 -0
  40. package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +1 -0
  41. package/dist/gateway/static/root/assets/gateway-config-api-ByIOMQdc.js +1 -0
  42. package/dist/gateway/static/root/assets/gateway-config-swr-jB0hAhWO.js +1 -0
  43. package/dist/gateway/static/root/assets/gateway-settings-CzzS9A17.js +1 -0
  44. package/dist/gateway/static/root/assets/{gateway-startup-retry--2njcDpC.js → gateway-startup-retry-C-fRlHCL.js} +1 -1
  45. package/dist/gateway/static/root/assets/globe-DSSGFWFn.js +1 -0
  46. package/dist/gateway/static/root/assets/heartbeat-settings-B4A_CXUL.js +1 -0
  47. package/dist/gateway/static/root/assets/home-page-FVGYYPWo.js +3 -0
  48. package/dist/gateway/static/root/assets/index-CGbKTCST.js +152 -0
  49. package/dist/gateway/static/root/assets/index-CR233S0Q.css +1 -0
  50. package/dist/gateway/static/root/assets/interaction-BmQogeqz.js +1 -0
  51. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BQb06_jl.js → keyboard-shortcuts-settings-BD_TFz0_.js} +1 -1
  52. package/dist/gateway/static/root/assets/loader-circle-CifKLtgG.js +1 -0
  53. package/dist/gateway/static/root/assets/local-app-workbench-page-BNpkigNb.js +2 -0
  54. package/dist/gateway/static/root/assets/local-apps-page-BwbUeLfm.js +1 -0
  55. package/dist/gateway/static/root/assets/{locale-store-Bjvw7jtg.js → locale-store-xULEcFVs.js} +1 -1
  56. package/dist/gateway/static/root/assets/logs-page-DXP9OQQt.js +2 -0
  57. package/dist/gateway/static/root/assets/management-settings-CW2VpqtT.js +1 -0
  58. package/dist/gateway/static/root/assets/{markdown-split-Db-KrpOQ.js → markdown-split-B1M9KO16.js} +1 -1
  59. package/dist/gateway/static/root/assets/{media-plugins-CHN66qs0.js → media-plugins-B_QlNdqZ.js} +1 -1
  60. package/dist/gateway/static/root/assets/messages-3qRsLZuX.js +3 -0
  61. package/dist/gateway/static/root/assets/{notes-page-CJtKZM0P.js → notes-page-BTbD4GmH.js} +1 -1
  62. package/dist/gateway/static/root/assets/notes-workbench-JRiq7QDW.js +4 -0
  63. package/dist/gateway/static/root/assets/page-tabs-BaEQMYm_.js +1 -0
  64. package/dist/gateway/static/root/assets/popover-select-BzdnTy3h.js +1 -0
  65. package/dist/gateway/static/root/assets/preview-open-alternatives-CeqtArlZ.js +1 -0
  66. package/dist/gateway/static/root/assets/{product-open-page--RnCc9bb.js → product-open-page-DnalBZZs.js} +1 -1
  67. package/dist/gateway/static/root/assets/project-detail-page-CjWA13aE.js +1 -0
  68. package/dist/gateway/static/root/assets/projects-page-jsCkScbG.js +1 -0
  69. package/dist/gateway/static/root/assets/remote-access-hub-CGPJTEkM.js +1 -0
  70. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Bg1W2__k.js → runtime-tools-settings-panel-cGkBEfg4.js} +4 -4
  71. package/dist/gateway/static/root/assets/schema-form-CmsrLlxu.js +1 -0
  72. package/dist/gateway/static/root/assets/sessions-page-BBHzziMd.js +1 -0
  73. package/dist/gateway/static/root/assets/settings-advanced-gate-2cGg8-9h.js +1 -0
  74. package/dist/gateway/static/root/assets/settings-form-draft-Dy10ldo8.js +1 -0
  75. package/dist/gateway/static/root/assets/settings-form-section-DUWCbaMJ.js +1 -0
  76. package/dist/gateway/static/root/assets/{settings-loading-skeleton-BS36Mjzz.js → settings-loading-skeleton-Bvy5rdMY.js} +1 -1
  77. package/dist/gateway/static/root/assets/{settings-page-BDSd7F9Y.js → settings-page-cZSAwsRR.js} +1 -1
  78. package/dist/gateway/static/root/assets/settings-page-layout-BRQNel6r.js +1 -0
  79. package/dist/gateway/static/root/assets/settings-shell-dialog-layer-BU3UuiJr.js +1 -0
  80. package/dist/gateway/static/root/assets/setup-status-panel-Cf06b66-.js +1 -0
  81. package/dist/gateway/static/root/assets/share-preview-page-BzA2NCAH.js +2 -0
  82. package/dist/gateway/static/root/assets/shares-settings-xlNKydYY.js +1 -0
  83. package/dist/gateway/static/root/assets/skill-reload-api-C5Xu93c_.js +1 -0
  84. package/dist/gateway/static/root/assets/skills-page-Bvde7_i5.js +2 -0
  85. package/dist/gateway/static/root/assets/{skills-page.utils-CnbJncdL.js → skills-page.utils-vXSqHR7g.js} +1 -1
  86. package/dist/gateway/static/root/assets/system-settings-panel-9cQGOGCK.js +1 -0
  87. package/dist/gateway/static/root/assets/task-detail-page-Bkno4tTe.js +1 -0
  88. package/dist/gateway/static/root/assets/{theme-store-DtxpMC5S.js → theme-store-CHQRiuCF.js} +1 -1
  89. package/dist/gateway/static/root/assets/tool-activity-R8V9l6nk.js +1 -0
  90. package/dist/gateway/static/root/assets/typed-models-lib-q5-Vfqd8.js +1 -0
  91. package/dist/gateway/static/root/assets/use-autosave-7XfKULPI.js +1 -0
  92. package/dist/gateway/static/root/assets/user-context-page-CZ9m9aC_.js +1 -0
  93. package/dist/gateway/static/root/assets/voice-api-key-field-DXr21v-3.js +1 -0
  94. package/dist/gateway/static/root/assets/work-discovery-overlay-CeG7g_DZ.js +1 -0
  95. package/dist/gateway/static/root/assets/work-discovery-page-CQWZD03N.js +1 -0
  96. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BEmugHfL.js → workflow-run-setup-panel-DSQQZP9T.js} +2 -2
  97. package/dist/gateway/static/root/assets/workflows-page-Cs-MXFJ1.js +5 -0
  98. package/dist/gateway/static/root/assets/working-directory-picker-modal-D-IgcHPp.js +1 -0
  99. package/dist/gateway/static/root/index.html +23 -8
  100. package/dist/package.js +1 -1
  101. package/dist/packages/gateway-contract/src/tasks.js +54 -2
  102. package/dist/src/agent/agent-manager.d.ts +1 -0
  103. package/dist/src/agent/agent-manager.js +1 -0
  104. package/dist/src/agent/embedded/execution-context.d.ts +2 -0
  105. package/dist/src/agent/embedded/execution-context.js +11 -0
  106. package/dist/src/agent/embedded/index.d.ts +3 -1
  107. package/dist/src/agent/embedded/index.js +5 -3
  108. package/dist/src/agent/embedded/run-turn.js +15 -9
  109. package/dist/src/agent/embedded/session-runner.d.ts +6 -11
  110. package/dist/src/agent/embedded/session-runner.js +25 -36
  111. package/dist/src/agent/embedded/transcript-runtime.d.ts +35 -0
  112. package/dist/src/agent/embedded/transcript-runtime.js +66 -0
  113. package/dist/src/agent/embedded/types.d.ts +3 -1
  114. package/dist/src/agent/service.d.ts +15 -0
  115. package/dist/src/agent/service.js +31 -0
  116. package/dist/src/agent/service.types.d.ts +1 -0
  117. package/dist/src/agent/tools/factory.d.ts +2 -0
  118. package/dist/src/agent/tools/factory.js +2 -1
  119. package/dist/src/agent/tools/xopc-use-tool.d.ts +1 -0
  120. package/dist/src/agent/tools/xopc-use-tool.js +56 -6
  121. package/dist/src/automations/domain/validation.d.ts +40 -0
  122. package/dist/src/automations/draft/automation-draft-validator.d.ts +4 -1
  123. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  124. package/dist/src/config/agent-profile.js +1 -1
  125. package/dist/src/config/rules.js +2 -2
  126. package/dist/src/gateway/agents-admin.js +1 -1
  127. package/dist/src/gateway/hono/app.d.ts +2 -0
  128. package/dist/src/gateway/hono/app.js +10 -3
  129. package/dist/src/gateway/hono/middleware/strict-rate-limit.d.ts +4 -0
  130. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +8 -1
  131. package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -1
  132. package/dist/src/gateway/hono/routes/config.js +9 -0
  133. package/dist/src/gateway/hono/routes/deps.d.ts +1 -0
  134. package/dist/src/gateway/hono/routes/home.d.ts +1 -1
  135. package/dist/src/gateway/hono/routes/home.js +2 -2
  136. package/dist/src/gateway/hono/routes/index.js +2 -0
  137. package/dist/src/gateway/hono/routes/projects.js +67 -1
  138. package/dist/src/gateway/hono/routes/side-chats.d.ts +3 -0
  139. package/dist/src/gateway/hono/routes/side-chats.js +173 -0
  140. package/dist/src/gateway/hono/routes/tasks.js +112 -19
  141. package/dist/src/gateway/host.d.ts +9 -1
  142. package/dist/src/gateway/host.js +22 -5
  143. package/dist/src/gateway/rate-limit/buckets.d.ts +3 -0
  144. package/dist/src/gateway/rate-limit/buckets.js +12 -0
  145. package/dist/src/gateway/runtime-config.js +6 -5
  146. package/dist/src/gateway/security/audit.js +0 -7
  147. package/dist/src/gateway/server.js +4 -1
  148. package/dist/src/gateway/service/agent-runner.d.ts +4 -0
  149. package/dist/src/gateway/service/agent-runner.js +15 -1
  150. package/dist/src/gateway/service/run-gateway-agent.js +1 -1
  151. package/dist/src/gateway/service.d.ts +5 -0
  152. package/dist/src/gateway/service.js +38 -8
  153. package/dist/src/gateway/side-chat/context-snapshot.d.ts +11 -0
  154. package/dist/src/gateway/side-chat/context-snapshot.js +108 -0
  155. package/dist/src/gateway/side-chat/index.d.ts +5 -0
  156. package/dist/src/gateway/side-chat/index.js +4 -0
  157. package/dist/src/gateway/side-chat/manager.d.ts +45 -0
  158. package/dist/src/gateway/side-chat/manager.js +198 -0
  159. package/dist/src/gateway/side-chat/run-service.d.ts +22 -0
  160. package/dist/src/gateway/side-chat/run-service.js +110 -0
  161. package/dist/src/gateway/side-chat/types.d.ts +61 -0
  162. package/dist/src/gateway/side-chat/types.js +1 -0
  163. package/dist/src/proactive/actions/service.d.ts +2 -0
  164. package/dist/src/proactive/actions/service.js +80 -0
  165. package/dist/src/proactive/execution/insight.js +20 -0
  166. package/dist/src/proactive/execution/repository.js +8 -2
  167. package/dist/src/proactive/execution/types.d.ts +14 -0
  168. package/dist/src/proactive/inbox/repository.js +59 -9
  169. package/dist/src/proactive/inbox/service.d.ts +2 -2
  170. package/dist/src/proactive/inbox/service.js +7 -2
  171. package/dist/src/proactive/inbox/types.d.ts +14 -0
  172. package/dist/src/proactive/inbox/worker.js +2 -0
  173. package/dist/src/proactive/scenarios/prompt-composer.js +2 -2
  174. package/dist/src/routing/session-key-utils.d.ts +0 -1
  175. package/dist/src/routing/session-key-utils.js +1 -6
  176. package/dist/src/routing/session-key.js +2 -2
  177. package/dist/src/storage/sqlite/migrations/118_task_board_rank.sql +6 -0
  178. package/dist/src/storage/sqlite/migrations/119_proactive_disposition.sql +13 -0
  179. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  180. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  181. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  182. package/dist/src/storage/sqlite/schema.js +1 -1
  183. package/dist/src/tasks/home-query-service.d.ts +29 -0
  184. package/dist/src/tasks/home-query-service.js +291 -7
  185. package/dist/src/tasks/index.d.ts +1 -0
  186. package/dist/src/tasks/index.js +5 -4
  187. package/dist/src/tasks/project-monitoring-service.d.ts +9 -0
  188. package/dist/src/tasks/project-monitoring-service.js +41 -3
  189. package/dist/src/tasks/project-operating-view-service.d.ts +2 -2
  190. package/dist/src/tasks/project-operating-view-service.js +47 -21
  191. package/dist/src/tasks/task-application-service.js +99 -6
  192. package/dist/src/tasks/task-change-events.d.ts +13 -0
  193. package/dist/src/tasks/task-change-events.js +29 -0
  194. package/dist/src/tasks/task-read-model-projector.js +2 -1
  195. package/dist/src/tasks/task-repository.d.ts +7 -0
  196. package/dist/src/tasks/task-repository.js +29 -6
  197. package/dist/src/tunnel/enable-lan-pairing.js +15 -26
  198. package/dist/src/tunnel/pair-context.js +1 -1
  199. package/dist/src/tunnel/pair-url.js +1 -1
  200. package/dist/src/tunnel/tunnel-qr.d.ts +0 -7
  201. package/dist/src/tunnel/tunnel-qr.js +2 -19
  202. package/package.json +4 -2
  203. package/dist/gateway/static/root/assets/agents-VoFNMGL3.js +0 -68
  204. package/dist/gateway/static/root/assets/app-management-settings-panel-vmuJ_Z6i.js +0 -1
  205. package/dist/gateway/static/root/assets/appearance-settings-BMlEoe-G.js +0 -1
  206. package/dist/gateway/static/root/assets/apps-page-CsNB6mv_.js +0 -1
  207. package/dist/gateway/static/root/assets/automations-page-CW1YWgiX.js +0 -6
  208. package/dist/gateway/static/root/assets/browser-settings-page-BMTmGMM6.js +0 -8
  209. package/dist/gateway/static/root/assets/browser-workflow-inputs-BsmHy0ks.js +0 -1
  210. package/dist/gateway/static/root/assets/capabilities-settings-panel-C5l85__e.js +0 -7
  211. package/dist/gateway/static/root/assets/capability-presets-settings-panel-9T2KXAs1.js +0 -3
  212. package/dist/gateway/static/root/assets/channels-settings-DquD4BPQ.js +0 -1
  213. package/dist/gateway/static/root/assets/channels-status-swr-DPaJSYX_.js +0 -1
  214. package/dist/gateway/static/root/assets/connectors-api-BC-4ftOM.js +0 -1
  215. package/dist/gateway/static/root/assets/connectors-page-7zUxVHQg.js +0 -2
  216. package/dist/gateway/static/root/assets/cron-expression-BycQlU8Q.js +0 -2
  217. package/dist/gateway/static/root/assets/dependency-picker-BvYqHRz0.js +0 -1
  218. package/dist/gateway/static/root/assets/desktop-pet-settings-DStgPb82.js +0 -1
  219. package/dist/gateway/static/root/assets/directory-picker-path-field-DUUr9sq0.js +0 -1
  220. package/dist/gateway/static/root/assets/extension-settings-page-BcSKEU8s.js +0 -1
  221. package/dist/gateway/static/root/assets/gateway-config-api-C-MmtCc7.js +0 -1
  222. package/dist/gateway/static/root/assets/gateway-settings-CuaRDWbg.js +0 -1
  223. package/dist/gateway/static/root/assets/heartbeat-settings-Dm8TrfGa.js +0 -1
  224. package/dist/gateway/static/root/assets/home-page-BYhDbUvI.js +0 -3
  225. package/dist/gateway/static/root/assets/index-BzPwnXho.js +0 -150
  226. package/dist/gateway/static/root/assets/index-CFFYvilx.css +0 -1
  227. package/dist/gateway/static/root/assets/local-app-workbench-page-CHk4x0kR.js +0 -2
  228. package/dist/gateway/static/root/assets/local-apps-page-DQtsxjGs.js +0 -1
  229. package/dist/gateway/static/root/assets/logs-page-CDqIY72S.js +0 -2
  230. package/dist/gateway/static/root/assets/management-settings-D7itDEHl.js +0 -1
  231. package/dist/gateway/static/root/assets/messages-DQ5X6cXp.js +0 -3
  232. package/dist/gateway/static/root/assets/notes-workbench-epHGeKd5.js +0 -4
  233. package/dist/gateway/static/root/assets/page-tabs-HXweXqYE.js +0 -1
  234. package/dist/gateway/static/root/assets/preview-open-alternatives-Dob6Oe2l.js +0 -1
  235. package/dist/gateway/static/root/assets/project-detail-page-BxOD5-zj.js +0 -1
  236. package/dist/gateway/static/root/assets/projects-page-D-9AhrH5.js +0 -1
  237. package/dist/gateway/static/root/assets/remote-access-hub-CSUNXLKM.js +0 -1
  238. package/dist/gateway/static/root/assets/schema-form-BI4rVt3u.js +0 -1
  239. package/dist/gateway/static/root/assets/sessions-page-BxOUBMca.js +0 -1
  240. package/dist/gateway/static/root/assets/settings-advanced-gate-DAvTIbgw.js +0 -1
  241. package/dist/gateway/static/root/assets/settings-form-section-C7rzhi7x.js +0 -1
  242. package/dist/gateway/static/root/assets/settings-page-layout-CTMmZcwj.js +0 -1
  243. package/dist/gateway/static/root/assets/setup-status-panel-D1v-2Ci-.js +0 -1
  244. package/dist/gateway/static/root/assets/share-preview-page-BeCxg6eb.js +0 -2
  245. package/dist/gateway/static/root/assets/shares-settings-CXL1EldF.js +0 -1
  246. package/dist/gateway/static/root/assets/skill-reload-api-BxwkKgVw.js +0 -1
  247. package/dist/gateway/static/root/assets/skills-page-CyfjEM4D.js +0 -2
  248. package/dist/gateway/static/root/assets/system-settings-panel-CAv0Yk0Y.js +0 -1
  249. package/dist/gateway/static/root/assets/task-detail-page-DGTVJs_N.js +0 -1
  250. package/dist/gateway/static/root/assets/typed-models-lib-DomX3Szl.js +0 -1
  251. package/dist/gateway/static/root/assets/use-autosave-BLc4gfG0.js +0 -1
  252. package/dist/gateway/static/root/assets/user-context-page-C2kQENTK.js +0 -1
  253. package/dist/gateway/static/root/assets/voice-api-key-field-BijmpPjb.js +0 -1
  254. package/dist/gateway/static/root/assets/work-discovery-overlay-D7w2JFFq.js +0 -1
  255. package/dist/gateway/static/root/assets/work-discovery-page-XtoPgPUS.js +0 -1
  256. package/dist/gateway/static/root/assets/workflows-page-D_K2xOWq.js +0 -5
  257. package/dist/src/gateway/ensure-network-cors.d.ts +0 -3
  258. package/dist/src/gateway/ensure-network-cors.js +0 -23
@@ -1,4 +1,5 @@
1
1
  import { runWithActivityContext } from "../../activity/context.js";
2
+ import { runSqliteWriteTransaction } from "../../storage/sqlite/transaction.js";
2
3
  import { getSessionMetadata } from "../../storage/sqlite/session-repository.js";
3
4
  import "../../storage/sqlite/index.js";
4
5
  import { ObjectLinkService } from "../../activity/service.js";
@@ -13,6 +14,7 @@ import "../../automations/index.js";
13
14
  import { isValidProjectAgentId, normalizeProjectAgentId } from "../../projects/project-agent.js";
14
15
  import "../../projects/index.js";
15
16
  import { TaskContextRepository } from "../../tasks/task-context-repository.js";
17
+ import { enqueueTaskChangedEvent } from "../../tasks/task-change-events.js";
16
18
  import { TaskDependencyError, TaskDependencyService } from "../../tasks/task-dependency-service.js";
17
19
  import { TaskApplicationService } from "../../tasks/task-application-service.js";
18
20
  import { defineTaskContract } from "../../tasks/task-contract-definition.js";
@@ -1241,6 +1243,7 @@ async function handleTask(command, args, deps, dryRun) {
1241
1243
  ...created
1242
1244
  };
1243
1245
  if (created.runId) deps.dispatchTaskRuns?.();
1246
+ else deps.dispatchTaskEvents?.();
1244
1247
  return {
1245
1248
  ok: true,
1246
1249
  task: created.model.task,
@@ -1274,13 +1277,28 @@ async function handleTask(command, args, deps, dryRun) {
1274
1277
  dependsOnTaskIds
1275
1278
  };
1276
1279
  try {
1277
- return {
1278
- ok: true,
1279
- task: dependencies.replace({
1280
+ const task = runSqliteWriteTransaction((db) => {
1281
+ const changed = dependencies.replace({
1280
1282
  taskId: id,
1281
1283
  dependsOnTaskIds,
1282
1284
  expectedVersion
1283
- }),
1285
+ });
1286
+ enqueueTaskChangedEvent(db, {
1287
+ taskId: changed.id,
1288
+ projectId: changed.projectId,
1289
+ version: changed.version,
1290
+ changedFields: ["dependencies"],
1291
+ actor: {
1292
+ kind: "agent",
1293
+ id: deps.getCurrentAgentId?.()
1294
+ }
1295
+ });
1296
+ return changed;
1297
+ });
1298
+ deps.dispatchTaskEvents?.();
1299
+ return {
1300
+ ok: true,
1301
+ task,
1284
1302
  dependencies: dependencies.listDependencies(id),
1285
1303
  dependents: dependencies.listDependents(id)
1286
1304
  };
@@ -1330,9 +1348,22 @@ async function handleTask(command, args, deps, dryRun) {
1330
1348
  action: "add_task_context",
1331
1349
  input
1332
1350
  };
1351
+ const task = tasks.require(id);
1352
+ const edge = runSqliteWriteTransaction((db) => {
1353
+ const created = context.add(input);
1354
+ enqueueTaskChangedEvent(db, {
1355
+ taskId: task.id,
1356
+ projectId: task.projectId,
1357
+ version: task.version,
1358
+ changedFields: ["context"],
1359
+ actor: input.createdBy
1360
+ });
1361
+ return created;
1362
+ });
1363
+ deps.dispatchTaskEvents?.();
1333
1364
  return {
1334
1365
  ok: true,
1335
- edge: context.add(input),
1366
+ edge,
1336
1367
  context: context.list(id)
1337
1368
  };
1338
1369
  }
@@ -1354,7 +1385,24 @@ async function handleTask(command, args, deps, dryRun) {
1354
1385
  taskId: id,
1355
1386
  edgeId
1356
1387
  };
1357
- return context.remove(id, edgeId) ? {
1388
+ const task = tasks.get(id);
1389
+ const actor = {
1390
+ kind: "agent",
1391
+ id: deps.getCurrentAgentId?.()
1392
+ };
1393
+ const removed = task ? runSqliteWriteTransaction((db) => {
1394
+ const didRemove = context.remove(id, edgeId);
1395
+ if (didRemove) enqueueTaskChangedEvent(db, {
1396
+ taskId: task.id,
1397
+ projectId: task.projectId,
1398
+ version: task.version,
1399
+ changedFields: ["context"],
1400
+ actor
1401
+ });
1402
+ return didRemove;
1403
+ }) : false;
1404
+ if (removed) deps.dispatchTaskEvents?.();
1405
+ return removed ? {
1358
1406
  ok: true,
1359
1407
  taskId: id,
1360
1408
  edgeId,
@@ -1418,6 +1466,7 @@ async function handleTask(command, args, deps, dryRun) {
1418
1466
  ...result
1419
1467
  };
1420
1468
  if (result.runId) deps.dispatchTaskRuns?.();
1469
+ else deps.dispatchTaskEvents?.();
1421
1470
  return {
1422
1471
  ok: true,
1423
1472
  task: result.model.task,
@@ -1527,6 +1576,7 @@ async function handleTaskRun(command, args, dryRun, deps) {
1527
1576
  error: result.reason,
1528
1577
  ...result
1529
1578
  };
1579
+ deps.dispatchTaskEvents?.();
1530
1580
  return {
1531
1581
  ok: true,
1532
1582
  run: runs.get(runId),
@@ -67,6 +67,14 @@ export declare const AutomationActionSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
67
67
  kind: z.ZodLiteral<"task_command">;
68
68
  taskId: z.ZodString;
69
69
  command: z.ZodDiscriminatedUnion<[z.ZodObject<{
70
+ type: z.ZodLiteral<"move">;
71
+ phase: z.ZodEnum<{
72
+ active: "active";
73
+ review: "review";
74
+ ready: "ready";
75
+ backlog: "backlog";
76
+ }>;
77
+ }, z.core.$strip>, z.ZodObject<{
70
78
  type: z.ZodLiteral<"mark_ready">;
71
79
  }, z.core.$strip>, z.ZodObject<{
72
80
  type: z.ZodLiteral<"start">;
@@ -101,7 +109,9 @@ export declare const AutomationActionSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
101
109
  type: z.ZodLiteral<"reopen">;
102
110
  phase: z.ZodEnum<{
103
111
  active: "active";
112
+ review: "review";
104
113
  ready: "ready";
114
+ backlog: "backlog";
105
115
  }>;
106
116
  }, z.core.$strip>, z.ZodObject<{
107
117
  type: z.ZodLiteral<"add_wait">;
@@ -245,6 +255,14 @@ export declare const AutomationSchema: z.ZodObject<{
245
255
  kind: z.ZodLiteral<"task_command">;
246
256
  taskId: z.ZodString;
247
257
  command: z.ZodDiscriminatedUnion<[z.ZodObject<{
258
+ type: z.ZodLiteral<"move">;
259
+ phase: z.ZodEnum<{
260
+ active: "active";
261
+ review: "review";
262
+ ready: "ready";
263
+ backlog: "backlog";
264
+ }>;
265
+ }, z.core.$strip>, z.ZodObject<{
248
266
  type: z.ZodLiteral<"mark_ready">;
249
267
  }, z.core.$strip>, z.ZodObject<{
250
268
  type: z.ZodLiteral<"start">;
@@ -279,7 +297,9 @@ export declare const AutomationSchema: z.ZodObject<{
279
297
  type: z.ZodLiteral<"reopen">;
280
298
  phase: z.ZodEnum<{
281
299
  active: "active";
300
+ review: "review";
282
301
  ready: "ready";
302
+ backlog: "backlog";
283
303
  }>;
284
304
  }, z.core.$strip>, z.ZodObject<{
285
305
  type: z.ZodLiteral<"add_wait">;
@@ -398,6 +418,14 @@ export declare const CreateAutomationSchema: z.ZodObject<{
398
418
  kind: z.ZodLiteral<"task_command">;
399
419
  taskId: z.ZodString;
400
420
  command: z.ZodDiscriminatedUnion<[z.ZodObject<{
421
+ type: z.ZodLiteral<"move">;
422
+ phase: z.ZodEnum<{
423
+ active: "active";
424
+ review: "review";
425
+ ready: "ready";
426
+ backlog: "backlog";
427
+ }>;
428
+ }, z.core.$strip>, z.ZodObject<{
401
429
  type: z.ZodLiteral<"mark_ready">;
402
430
  }, z.core.$strip>, z.ZodObject<{
403
431
  type: z.ZodLiteral<"start">;
@@ -432,7 +460,9 @@ export declare const CreateAutomationSchema: z.ZodObject<{
432
460
  type: z.ZodLiteral<"reopen">;
433
461
  phase: z.ZodEnum<{
434
462
  active: "active";
463
+ review: "review";
435
464
  ready: "ready";
465
+ backlog: "backlog";
436
466
  }>;
437
467
  }, z.core.$strip>, z.ZodObject<{
438
468
  type: z.ZodLiteral<"add_wait">;
@@ -578,6 +608,14 @@ export declare const UpdateAutomationSchema: z.ZodObject<{
578
608
  kind: z.ZodLiteral<"task_command">;
579
609
  taskId: z.ZodString;
580
610
  command: z.ZodDiscriminatedUnion<[z.ZodObject<{
611
+ type: z.ZodLiteral<"move">;
612
+ phase: z.ZodEnum<{
613
+ active: "active";
614
+ review: "review";
615
+ ready: "ready";
616
+ backlog: "backlog";
617
+ }>;
618
+ }, z.core.$strip>, z.ZodObject<{
581
619
  type: z.ZodLiteral<"mark_ready">;
582
620
  }, z.core.$strip>, z.ZodObject<{
583
621
  type: z.ZodLiteral<"start">;
@@ -612,7 +650,9 @@ export declare const UpdateAutomationSchema: z.ZodObject<{
612
650
  type: z.ZodLiteral<"reopen">;
613
651
  phase: z.ZodEnum<{
614
652
  active: "active";
653
+ review: "review";
615
654
  ready: "ready";
655
+ backlog: "backlog";
616
656
  }>;
617
657
  }, z.core.$strip>, z.ZodObject<{
618
658
  type: z.ZodLiteral<"add_wait">;
@@ -43,6 +43,9 @@ export declare function buildAutomationDraftResponse(draft: GeneratedAutomationD
43
43
  kind: "task_command";
44
44
  taskId: string;
45
45
  command?: {
46
+ type: "move";
47
+ phase: "active" | "review" | "ready" | "backlog";
48
+ } | {
46
49
  type: "mark_ready";
47
50
  } | {
48
51
  type: "start";
@@ -70,7 +73,7 @@ export declare function buildAutomationDraftResponse(draft: GeneratedAutomationD
70
73
  resolution: "cancelled" | "done" | "duplicate" | "wont_do";
71
74
  } | {
72
75
  type: "reopen";
73
- phase: "active" | "ready";
76
+ phase: "active" | "review" | "ready" | "backlog";
74
77
  } | {
75
78
  type: "add_wait";
76
79
  wait: {
@@ -52,7 +52,7 @@ async function checkDatabaseSchema(ctx) {
52
52
  id: "database-schema",
53
53
  label: "Database schema",
54
54
  status: "pass",
55
- message: `SQLite schema v${status.dbVersion} (current release v117).`,
55
+ message: `SQLite schema v${status.dbVersion} (current release v119).`,
56
56
  hints: []
57
57
  };
58
58
  }
@@ -1,6 +1,6 @@
1
- import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
2
1
  import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
3
2
  import "../agent-manifest/index.js";
3
+ import { init_agent_scope, normalizeAgentId, resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
4
4
  import { init_session_key, parseSessionKey } from "../routing/session-key.js";
5
5
  import { agentExists, getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
6
6
  //#region src/config/agent-profile.ts
@@ -75,8 +75,8 @@ const BASE_RELOAD_RULES = [
75
75
  },
76
76
  {
77
77
  prefix: "gateway.corsOrigins",
78
- kind: "restart",
79
- description: "CORS settings"
78
+ kind: "hot",
79
+ description: "CORS allowlist"
80
80
  },
81
81
  {
82
82
  prefix: "gateway.trustedProxies",
@@ -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 { resolveCapabilityPresetLayer, 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 } from "../config/paths.js";
5
5
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
@@ -2,6 +2,8 @@ import { Hono } from 'hono';
2
2
  import type { GatewayService } from '../service.js';
3
3
  export interface HonoAppConfig {
4
4
  service: GatewayService;
5
+ /** Actual host selected for this process; bind config changes take effect after restart. */
6
+ listenHost?: string;
5
7
  }
6
8
  /**
7
9
  * Extension sandbox HTML under `/api/extensions/:id/assets/*` ships its own CSP
@@ -10,7 +10,7 @@ import { buildGatewayConsoleCspHeader } from "../security/csp.js";
10
10
  import { checkBrowserOrigin } from "../security/origin-check.js";
11
11
  import { auth } from "./middleware/auth.js";
12
12
  import { operatorScopes } from "./middleware/scopes.js";
13
- import { createChannelRateLimitMiddleware, createChatRateLimitMiddleware, createStrictRateLimitMiddleware, createXopcCloudPollRateLimitMiddleware } from "./middleware/strict-rate-limit.js";
13
+ import { createChannelRateLimitMiddleware, createChatRateLimitMiddleware, createStrictRateLimitMiddleware, createTaskRateLimitMiddleware, createXopcCloudPollRateLimitMiddleware } from "./middleware/strict-rate-limit.js";
14
14
  import { logContextMiddleware } from "./middleware/log-context.js";
15
15
  import { logger } from "./middleware/logger.js";
16
16
  import { routeErrorMiddleware } from "./middleware/route-errors.js";
@@ -42,10 +42,11 @@ function createHonoApp(config) {
42
42
  const { service } = config;
43
43
  const app = new Hono();
44
44
  const gatewayPort = resolveGatewayServiceListenPort(service);
45
+ const gatewayBindHost = config.listenHost ?? resolveGatewayEffectiveHost(service.currentConfig);
45
46
  const resolveBrowserOrigins = () => resolveAllowedBrowserOrigins({
46
47
  configuredOrigins: service.currentConfig.gateway.corsOrigins,
47
48
  port: gatewayPort,
48
- bindHost: resolveGatewayEffectiveHost(service.currentConfig),
49
+ bindHost: gatewayBindHost,
49
50
  tunnelPublicUrl: loadTunnelState()?.publicUrl,
50
51
  reverseProxyPublicUrl: resolveReverseProxyPublicUrl(service.currentConfig)
51
52
  });
@@ -153,6 +154,7 @@ function createHonoApp(config) {
153
154
  if (/^\/api\/notes\/[^/]+\/media$/.test(path)) return true;
154
155
  return path === "/api/notes" && contentType?.includes("multipart/form-data") === true;
155
156
  };
157
+ const isProjectFileUploadRequest = (path, method, contentType) => method === "POST" && /^\/api\/projects\/[^/]+\/files\/upload$/.test(path) && contentType?.includes("multipart/form-data") === true;
156
158
  const discussionUploadBodyMax = (path, method, contentType) => {
157
159
  if (method !== "PUT" || contentType?.includes("multipart/form-data") !== true) return void 0;
158
160
  if (/^\/api\/discussions\/[^/]+\/recording$/.test(path)) return NOTE_MEDIA_BODY_MAX;
@@ -173,7 +175,7 @@ function createHonoApp(config) {
173
175
  }));
174
176
  app.use("/api/*", async (c, next) => {
175
177
  const contentType = c.req.header("content-type");
176
- const maxSize = c.req.method === "POST" && c.req.path === "/api/tasks" || c.req.method === "POST" && /^\/api\/sessions\/[^/]+\/inputs$/.test(c.req.path) || c.req.method === "PATCH" && /^\/api\/sessions\/[^/]+\/inputs\/[^/]+$/.test(c.req.path) ? SESSION_INPUT_BODY_MAX : c.req.path === "/api/skills/upload" ? SKILL_UPLOAD_BODY_MAX : c.req.path === "/api/voice/transcribe" || c.req.path === "/api/voice/transcriptions" ? VOICE_TRANSCRIBE_BODY_MAX : isNoteMediaUploadRequest(c.req.path, c.req.method, contentType) ? NOTE_MEDIA_BODY_MAX : discussionUploadBodyMax(c.req.path, c.req.method, contentType) ?? DEFAULT_API_BODY_MAX;
178
+ const maxSize = c.req.method === "POST" && c.req.path === "/api/tasks" || c.req.method === "POST" && /^\/api\/sessions\/[^/]+\/inputs$/.test(c.req.path) || c.req.method === "PATCH" && /^\/api\/sessions\/[^/]+\/inputs\/[^/]+$/.test(c.req.path) ? SESSION_INPUT_BODY_MAX : c.req.path === "/api/skills/upload" ? SKILL_UPLOAD_BODY_MAX : c.req.path === "/api/voice/transcribe" || c.req.path === "/api/voice/transcriptions" ? VOICE_TRANSCRIBE_BODY_MAX : isNoteMediaUploadRequest(c.req.path, c.req.method, contentType) ? NOTE_MEDIA_BODY_MAX : isProjectFileUploadRequest(c.req.path, c.req.method, contentType) ? NOTE_MEDIA_BODY_MAX : discussionUploadBodyMax(c.req.path, c.req.method, contentType) ?? DEFAULT_API_BODY_MAX;
177
179
  const maxSizeMb = Math.ceil(maxSize / (1024 * 1024));
178
180
  return bodyLimit({
179
181
  maxSize,
@@ -211,6 +213,10 @@ function createHonoApp(config) {
211
213
  trustedProxies: service.currentConfig.gateway?.trustedProxies,
212
214
  allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
213
215
  }) });
216
+ const taskRateLimitMiddleware = createTaskRateLimitMiddleware({ getTrustedProxyContext: () => ({
217
+ trustedProxies: service.currentConfig.gateway?.trustedProxies,
218
+ allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
219
+ }) });
214
220
  const channelRateLimitMiddleware = createChannelRateLimitMiddleware({ getTrustedProxyContext: () => ({
215
221
  trustedProxies: service.currentConfig.gateway?.trustedProxies,
216
222
  allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
@@ -219,6 +225,7 @@ function createHonoApp(config) {
219
225
  service,
220
226
  strictRateLimitMiddleware,
221
227
  chatRateLimitMiddleware,
228
+ taskRateLimitMiddleware,
222
229
  xopcCloudPollRateLimitMiddleware: createXopcCloudPollRateLimitMiddleware({ getTrustedProxyContext: () => ({
223
230
  trustedProxies: service.currentConfig.gateway?.trustedProxies,
224
231
  allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
@@ -16,6 +16,10 @@ export declare function createChatRateLimitMiddleware(deps: StrictRateLimitDeps)
16
16
  error: string;
17
17
  code: string;
18
18
  }, 429, "json">>;
19
+ export declare function createTaskRateLimitMiddleware(deps: StrictRateLimitDeps): import("hono").MiddlewareHandler<any, string, {}, Response & import("hono").TypedResponse<{
20
+ error: string;
21
+ code: string;
22
+ }, 429, "json">>;
19
23
  export declare function createXopcCloudPollRateLimitMiddleware(deps: StrictRateLimitDeps): import("hono").MiddlewareHandler<any, string, {}, Response & import("hono").TypedResponse<{
20
24
  error: string;
21
25
  code: string;
@@ -70,6 +70,13 @@ function createChatRateLimitMiddleware(deps) {
70
70
  reason: "chat_rate_limit_exceeded"
71
71
  });
72
72
  }
73
+ function createTaskRateLimitMiddleware(deps) {
74
+ return createClientRateLimitMiddleware(deps, {
75
+ limiter: () => buckets.taskApi(),
76
+ exceededMessage: "Task API rate limit exceeded",
77
+ reason: "task_rate_limit_exceeded"
78
+ });
79
+ }
73
80
  function createXopcCloudPollRateLimitMiddleware(deps) {
74
81
  return createClientRateLimitMiddleware(deps, {
75
82
  limiter: () => buckets.xopcCloudPoll(),
@@ -85,4 +92,4 @@ function createChannelRateLimitMiddleware(deps) {
85
92
  });
86
93
  }
87
94
  //#endregion
88
- export { createChannelRateLimitMiddleware, createChatRateLimitMiddleware, createStrictRateLimitMiddleware, createXopcCloudPollRateLimitMiddleware };
95
+ export { createChannelRateLimitMiddleware, createChatRateLimitMiddleware, createStrictRateLimitMiddleware, createTaskRateLimitMiddleware, createXopcCloudPollRateLimitMiddleware };
@@ -176,12 +176,13 @@ async function applyMiscPatch(config, body) {
176
176
  function validateGatewayAfterPatch(config, body) {
177
177
  if (body.gateway === void 0) return PATCH_OK;
178
178
  try {
179
+ const port = config.gateway?.port ?? 18790;
179
180
  const auth = resolveGatewayAuth({ authConfig: config.gateway?.auth });
180
181
  assertGatewayAuthConfigured(auth);
181
182
  assertGatewayRuntimeConfig({
182
183
  cfg: config,
183
184
  auth,
184
- port: config.gateway?.port ?? 18790
185
+ port
185
186
  });
186
187
  } catch (err) {
187
188
  return patchError(err instanceof Error ? err.message : String(err));
@@ -1,3 +1,4 @@
1
+ import { enumerateLanGatewayCandidates } from "../../host.js";
1
2
  import { buildSafeWebConfigPayload } from "../lib/config-payload.js";
2
3
  import { applyAgentsPatch } from "./config-patch/agents.js";
3
4
  import { applyChannelsPatch } from "./config-patch/channels.js";
@@ -39,6 +40,14 @@ function registerConfigRoutes(authenticated, deps) {
39
40
  payload: { config: safeConfig }
40
41
  });
41
42
  });
43
+ authenticated.get("/api/gateway/cors-origin-candidates", (c) => {
44
+ const requestedPort = Number(c.req.query("port"));
45
+ const port = Number.isInteger(requestedPort) && requestedPort >= 1 && requestedPort <= 65535 ? requestedPort : service.currentConfig.gateway?.port ?? 18790;
46
+ return c.json({
47
+ ok: true,
48
+ payload: { candidates: enumerateLanGatewayCandidates(port) }
49
+ });
50
+ });
42
51
  authenticated.patch("/api/config", strictRateLimitMiddleware, async (c) => {
43
52
  const body = await c.req.json();
44
53
  const config = service.currentConfig;
@@ -4,6 +4,7 @@ export interface AuthenticatedRouteDeps {
4
4
  service: GatewayService;
5
5
  strictRateLimitMiddleware: MiddlewareHandler;
6
6
  chatRateLimitMiddleware: MiddlewareHandler;
7
+ taskRateLimitMiddleware?: MiddlewareHandler;
7
8
  xopcCloudPollRateLimitMiddleware: MiddlewareHandler;
8
9
  channelRateLimitMiddleware?: MiddlewareHandler;
9
10
  }
@@ -1,5 +1,5 @@
1
1
  import type { Hono } from 'hono';
2
2
  import type { AuthenticatedRouteDeps } from './deps.js';
3
- export { buildHomeBriefing } from '../../../tasks/home-query-service.js';
3
+ export { buildHomeBriefing, buildHomeFocusItems } from '../../../tasks/home-query-service.js';
4
4
  /** Register the unified work-home read model and its decision actions. */
5
5
  export declare function registerHomeRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;
@@ -2,7 +2,7 @@ import { acknowledgeHomeAttention } from "../../../storage/sqlite/home-attention
2
2
  import { decideConnectorApproval } from "../../../storage/sqlite/connector-repository.js";
3
3
  import "../../../storage/sqlite/index.js";
4
4
  import { listGatewayAgents } from "../../agents-admin.js";
5
- import { HomeQueryService, buildHomeBriefing } from "../../../tasks/home-query-service.js";
5
+ import { HomeQueryService, buildHomeBriefing, buildHomeFocusItems } from "../../../tasks/home-query-service.js";
6
6
  //#region src/gateway/hono/routes/home.ts
7
7
  /** Register the unified work-home read model and its decision actions. */
8
8
  function registerHomeRoutes(authenticated, deps) {
@@ -90,4 +90,4 @@ function registerHomeRoutes(authenticated, deps) {
90
90
  });
91
91
  }
92
92
  //#endregion
93
- export { buildHomeBriefing, registerHomeRoutes };
93
+ export { buildHomeBriefing, buildHomeFocusItems, registerHomeRoutes };
@@ -2,6 +2,7 @@ import { registerActivityRoutes } from "./activity.js";
2
2
  import { registerAgentStreamRoutes } from "./agent-stream.js";
3
3
  import { registerDiscussionRoutes } from "./discussions.js";
4
4
  import { registerSessionsRoutes } from "./sessions.js";
5
+ import { registerSideChatRoutes } from "./side-chats.js";
5
6
  import { registerStatusRoutes } from "./status.js";
6
7
  import { registerProjectsRoutes } from "./projects.js";
7
8
  import { registerProjectSkillRoutes } from "./project-skills.js";
@@ -22,6 +23,7 @@ function registerCoreAuthenticatedRoutes(authenticated, deps) {
22
23
  registerStatusRoutes(authenticated, deps);
23
24
  registerAgentStreamRoutes(authenticated, deps);
24
25
  registerSessionsRoutes(authenticated, deps);
26
+ registerSideChatRoutes(authenticated, deps);
25
27
  registerActivityRoutes(authenticated, deps);
26
28
  registerDiscussionRoutes(authenticated, deps);
27
29
  registerProjectsRoutes(authenticated, deps);
@@ -16,6 +16,7 @@ import { buildProjectLoopOverview } from "../../../projects/project-loop.js";
16
16
  import "../../../projects/index.js";
17
17
  import { TaskApplicationService } from "../../../tasks/task-application-service.js";
18
18
  import { defineTaskContract } from "../../../tasks/task-contract-definition.js";
19
+ import { ProjectOperatingViewService, summarizeProjectOperatingView } from "../../../tasks/project-operating-view-service.js";
19
20
  import "../../../tasks/index.js";
20
21
  import { classifyFileReferenceFsError } from "../../file-reference-errors.js";
21
22
  import { createGatewayRouteLogger } from "../lib/route-logger.js";
@@ -313,6 +314,7 @@ function projectDigestMemoryRecordId(projectId) {
313
314
  function registerProjectsRoutes(authenticated, deps) {
314
315
  const { service } = deps;
315
316
  const activity = new ActivityService();
317
+ const operatingViews = new ProjectOperatingViewService(service.projects);
316
318
  authenticated.post("/api/projects", async (c) => {
317
319
  const body = await c.req.json().catch(() => ({}));
318
320
  const name = textField(body, "name")?.trim();
@@ -385,10 +387,19 @@ function registerProjectsRoutes(authenticated, deps) {
385
387
  limit: parseLimit(c.req.query("limit")),
386
388
  offset: c.req.query("offset") ? Math.max(0, Number.parseInt(c.req.query("offset"), 10) || 0) : void 0
387
389
  });
390
+ const includeOperating = c.req.query("includeOperating") === "true";
388
391
  return c.json({
389
392
  ok: true,
390
393
  ...result,
391
- items: result.items.map((project) => enrichProjectWorkspace(service, project))
394
+ items: result.items.map((project) => {
395
+ const enriched = enrichProjectWorkspace(service, project);
396
+ if (!includeOperating) return enriched;
397
+ const view = operatingViews.get(project.id);
398
+ return {
399
+ ...enriched,
400
+ operating: view ? summarizeProjectOperatingView(view) : void 0
401
+ };
402
+ })
392
403
  });
393
404
  });
394
405
  authenticated.get("/api/projects/suggestions", async (c) => {
@@ -1117,6 +1128,61 @@ function registerProjectsRoutes(authenticated, deps) {
1117
1128
  }, 500);
1118
1129
  }
1119
1130
  });
1131
+ authenticated.post("/api/projects/:id/files/upload", async (c) => {
1132
+ let body;
1133
+ try {
1134
+ body = await c.req.parseBody();
1135
+ } catch {
1136
+ return c.json({
1137
+ ok: false,
1138
+ error: { message: "Invalid multipart body" }
1139
+ }, 400);
1140
+ }
1141
+ const file = body.file;
1142
+ if (!(file instanceof File)) return c.json({
1143
+ ok: false,
1144
+ error: { message: "Missing file" }
1145
+ }, 400);
1146
+ const requestedPath = typeof body.path === "string" ? body.path.trim() : "";
1147
+ if (!requestedPath) return c.json({
1148
+ ok: false,
1149
+ error: { message: "Missing path" }
1150
+ }, 400);
1151
+ const resolved = await resolveProjectWorkspaceWritePath(service, c.req.param("id"), requestedPath);
1152
+ if (resolved.ok === false) return c.json({
1153
+ ok: false,
1154
+ error: { message: resolved.error }
1155
+ }, resolved.status);
1156
+ if (resolved.existingStat) return c.json({
1157
+ ok: false,
1158
+ error: { message: "File already exists" }
1159
+ }, 409);
1160
+ try {
1161
+ await writeFile(resolved.absolutePath, Buffer.from(await file.arrayBuffer()), { flag: "wx" });
1162
+ const entryStat = await stat(resolved.absolutePath);
1163
+ return c.json({
1164
+ ok: true,
1165
+ entry: {
1166
+ name: path$1.basename(resolved.relativePath),
1167
+ path: resolved.relativePath,
1168
+ absolutePath: resolved.absolutePath,
1169
+ type: "file",
1170
+ size: entryStat.size,
1171
+ updatedAt: entryStat.mtime.toISOString()
1172
+ }
1173
+ }, 201);
1174
+ } catch (err) {
1175
+ log.error({
1176
+ err,
1177
+ projectId: resolved.projectId,
1178
+ path: resolved.absolutePath
1179
+ }, "project file upload failed");
1180
+ return c.json({
1181
+ ok: false,
1182
+ error: { message: "Upload failed" }
1183
+ }, 500);
1184
+ }
1185
+ });
1120
1186
  authenticated.post("/api/projects/:id/sessions/:sessionKey", async (c) => {
1121
1187
  try {
1122
1188
  service.projects.attachSession(c.req.param("sessionKey"), c.req.param("id"));
@@ -0,0 +1,3 @@
1
+ import type { Hono } from 'hono';
2
+ import type { AuthenticatedRouteDeps } from './deps.js';
3
+ export declare function registerSideChatRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;