@xopcai/xopc 0.0.125 → 0.0.126

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 (326) hide show
  1. package/README.md +56 -102
  2. package/README.zh-CN.md +51 -98
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/feishu/src/schema/config-schema.d.ts +6 -6
  5. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  6. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
  7. package/dist/extensions/telegram/src/config-schema.d.ts +8 -8
  8. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  9. package/dist/extensions/telegram/src/plugin.js +1 -1
  10. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  11. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  12. package/dist/extensions/telegram/xopc.extension.json +1 -1
  13. package/dist/extensions/weixin/src/api/api.js +1 -1
  14. package/dist/extensions/weixin/src/config-schema.d.ts +3 -3
  15. package/dist/extensions/weixin/src/plugin.js +1 -1
  16. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  17. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BKDKICZV.js → agent-avatar-dicebear-C70vgt60.js} +1 -1
  18. package/dist/gateway/static/root/assets/agents-DRYVahI-.js +2 -0
  19. package/dist/gateway/static/root/assets/{app-management-settings-panel-DI4BqHKW.js → app-management-settings-panel-D9-HW6cy.js} +1 -1
  20. package/dist/gateway/static/root/assets/{appearance-settings-6_ie3NQ4.js → appearance-settings-BHlahIDL.js} +1 -1
  21. package/dist/gateway/static/root/assets/apps-page-BdJ1eQg3.js +1 -0
  22. package/dist/gateway/static/root/assets/{archive-plugin-kUHEJ1HK.js → archive-plugin-B-aoIt0w.js} +1 -1
  23. package/dist/gateway/static/root/assets/{attachment-load-Dm-9prpU.js → attachment-load-BD0G0FD5.js} +1 -1
  24. package/dist/gateway/static/root/assets/{automation-suggestion-card-OTxQTPnC.js → automation-suggestion-card-iJRVI7aZ.js} +1 -1
  25. package/dist/gateway/static/root/assets/automations-page-D8hYQbkl.js +4 -0
  26. package/dist/gateway/static/root/assets/{binary-plugins-DllA_jQ0.js → binary-plugins-B0mNlVSz.js} +1 -1
  27. package/dist/gateway/static/root/assets/{block-editor-Cm6CWNj1.js → block-editor-CJY9Lu5G.js} +6 -6
  28. package/dist/gateway/static/root/assets/browser-settings-page-CiWEO-Iy.js +8 -0
  29. package/dist/gateway/static/root/assets/{capability-presets-api-VJ89b6I2.js → capability-presets-api-Bgc8ag55.js} +1 -1
  30. package/dist/gateway/static/root/assets/{capability-presets-settings-panel-BaPj8wC2.js → capability-presets-settings-panel-B1nIi0TC.js} +1 -1
  31. package/dist/gateway/static/root/assets/{channel-recipient-api-B5PwBEUx.js → channel-recipient-api-0sauApoC.js} +1 -1
  32. package/dist/gateway/static/root/assets/channels-settings-BddPdqVo.js +1 -0
  33. package/dist/gateway/static/root/assets/connectors-page-Ba2GDhSE.js +2 -0
  34. package/dist/gateway/static/root/assets/{directory-picker-path-field-DySMzOF6.js → directory-picker-path-field-CiEc4KmY.js} +1 -1
  35. package/dist/gateway/static/root/assets/{dreaming-settings-D_AjSnV_.js → dreaming-settings-4bvpk5wr.js} +2 -2
  36. package/dist/gateway/static/root/assets/{extension-debug-page-BaM0FpW7.js → extension-debug-page-BbyczVZ3.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-page-DuZWVOGA.js → extension-page-DLN1I3DR.js} +1 -1
  38. package/dist/gateway/static/root/assets/{extension-settings-page-DarVtbmJ.js → extension-settings-page-D9VGHmYJ.js} +1 -1
  39. package/dist/gateway/static/root/assets/{fetch-NFKfkqrd.js → fetch-5V96dUz3.js} +1 -1
  40. package/dist/gateway/static/root/assets/{gateway-config-api-CFEm9rgy.js → gateway-config-api-BtIzObwp.js} +1 -1
  41. package/dist/gateway/static/root/assets/{gateway-settings-BMk2S5td.js → gateway-settings-KFsGGDhg.js} +1 -1
  42. package/dist/gateway/static/root/assets/{gateway-startup-retry-Dtwh_yGg.js → gateway-startup-retry-DEMad2wt.js} +1 -1
  43. package/dist/gateway/static/root/assets/{goal-create-dialog-BKP7ylcG.js → goal-create-dialog-4PcF6Sh6.js} +1 -1
  44. package/dist/gateway/static/root/assets/goal-detail-page-B482PSaG.js +1 -0
  45. package/dist/gateway/static/root/assets/{goals-config-api-DTWZNA_Y.js → goals-config-api-CVN7-pdM.js} +1 -1
  46. package/dist/gateway/static/root/assets/{goals-page-CTmA3hWK.js → goals-page-CUdgJuDn.js} +2 -2
  47. package/dist/gateway/static/root/assets/{goals-settings-Bhct0ZT-.js → goals-settings-IYCH3-Pi.js} +1 -1
  48. package/dist/gateway/static/root/assets/{heartbeat-settings-C-UxSU4a.js → heartbeat-settings-Cf_a2Bmz.js} +1 -1
  49. package/dist/gateway/static/root/assets/index-CA2tR2vm.js +256 -0
  50. package/dist/gateway/static/root/assets/index-Ds3u0LOk.css +1 -0
  51. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DCjy2y4d.js → keyboard-shortcuts-settings-lKTg6St7.js} +1 -1
  52. package/dist/gateway/static/root/assets/logs-page-BCporcNH.js +2 -0
  53. package/dist/gateway/static/root/assets/{markdown-split-BaqxP-GQ.js → markdown-split-Bv4k6iGJ.js} +1 -1
  54. package/dist/gateway/static/root/assets/{media-plugins-DQ_EXloK.js → media-plugins-Bbi8g3N8.js} +1 -1
  55. package/dist/gateway/static/root/assets/messages-C22hxE1N.js +3 -0
  56. package/dist/gateway/static/root/assets/models-hub-panel-D68Pyow7.js +2 -0
  57. package/dist/gateway/static/root/assets/notes-page-CuUMOiyv.js +1 -0
  58. package/dist/gateway/static/root/assets/notes-workbench-Dx2N5zTk.js +2 -0
  59. package/dist/gateway/static/root/assets/{page-tabs-EIZhLppK.js → page-tabs-Cp395RYD.js} +1 -1
  60. package/dist/gateway/static/root/assets/{preview-open-alternatives-r_uB4Epr.js → preview-open-alternatives-DqV5OM4m.js} +1 -1
  61. package/dist/gateway/static/root/assets/project-detail-page-sB8AzZi3.js +1 -0
  62. package/dist/gateway/static/root/assets/projects-page-LBnJqWK2.js +1 -0
  63. package/dist/gateway/static/root/assets/remote-access-hub-Dbj0o6SC.js +1 -0
  64. package/dist/gateway/static/root/assets/{save-bar-controls-B132Uf-2.js → save-bar-controls-BItmzAzI.js} +1 -1
  65. package/dist/gateway/static/root/assets/{schedule-field-B5qshALm.js → schedule-field-BQ8IjjCn.js} +1 -1
  66. package/dist/gateway/static/root/assets/{schema-form-CvLmkdS9.js → schema-form-BRpD6x3d.js} +1 -1
  67. package/dist/gateway/static/root/assets/sessions-page-DhDZKspB.js +1 -0
  68. package/dist/gateway/static/root/assets/settings-advanced-gate-BvXLMNL6.js +1 -0
  69. package/dist/gateway/static/root/assets/{settings-collapsible-section-pRlvqsAf.js → settings-collapsible-section-BKSPQM4R.js} +1 -1
  70. package/dist/gateway/static/root/assets/settings-form-section-BmyfthNQ.js +1 -0
  71. package/dist/gateway/static/root/assets/settings-page-Cfm9UxAr.js +1 -0
  72. package/dist/gateway/static/root/assets/settings-page-layout-Bls5tfbH.js +1 -0
  73. package/dist/gateway/static/root/assets/setup-status-panel-kQEsTGAs.js +1 -0
  74. package/dist/gateway/static/root/assets/{share-preview-page-v6-IOp8t.js → share-preview-page-DbYZNAPb.js} +1 -1
  75. package/dist/gateway/static/root/assets/shares-settings-BtR4B0kn.js +1 -0
  76. package/dist/gateway/static/root/assets/skill-reload-api-CJNVOWoK.js +1 -0
  77. package/dist/gateway/static/root/assets/skills-page-DcWDHrt3.js +2 -0
  78. package/dist/gateway/static/root/assets/{system-settings-panel-HUU2FFjM.js → system-settings-panel-DKDAojWM.js} +1 -1
  79. package/dist/gateway/static/root/assets/{typed-models-lib-AH160QHh.js → typed-models-lib-BCCV4Kkp.js} +1 -1
  80. package/dist/gateway/static/root/assets/{use-channel-catalog-BXzDmjCQ.js → use-channel-catalog-NBqg3iFY.js} +1 -1
  81. package/dist/gateway/static/root/assets/{user-profile-settings-panel-DxwnQvQ3.js → user-profile-settings-panel-suQ2x-LB.js} +1 -1
  82. package/dist/gateway/static/root/assets/{utils-i5POEtqd.js → utils-DPGVr3tS.js} +1 -1
  83. package/dist/gateway/static/root/assets/voice-api-key-field-DaJASKFP.js +1 -0
  84. package/dist/gateway/static/root/assets/{work-item-detail-page-CD6FL_Rs.js → work-item-detail-page-BrCZpAWh.js} +1 -1
  85. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-ClVVMgN-.js → workflow-run-setup-panel-BTkRVNAh.js} +2 -2
  86. package/dist/gateway/static/root/assets/{workflow-start-dialog-Dv4ZA1T0.js → workflow-start-dialog-DAImVtdO.js} +1 -1
  87. package/dist/gateway/static/root/assets/workflows-page-vyJ8wSXm.js +18 -0
  88. package/dist/gateway/static/root/index.html +5 -5
  89. package/dist/package.js +1 -1
  90. package/dist/src/activity/context.d.ts +11 -0
  91. package/dist/src/activity/context.js +36 -0
  92. package/dist/src/activity/context.js.map +1 -0
  93. package/dist/src/activity/emitter.d.ts +6 -0
  94. package/dist/src/activity/emitter.js +43 -0
  95. package/dist/src/activity/emitter.js.map +1 -0
  96. package/dist/src/activity/index.d.ts +3 -0
  97. package/dist/src/activity/index.js +3 -0
  98. package/dist/src/activity/service.d.ts +12 -0
  99. package/dist/src/activity/service.js +59 -0
  100. package/dist/src/activity/service.js.map +1 -0
  101. package/dist/src/activity/types.d.ts +109 -0
  102. package/dist/src/activity/types.js +1 -0
  103. package/dist/src/agent/agent-manager.d.ts +7 -0
  104. package/dist/src/agent/agent-manager.js +7 -4
  105. package/dist/src/agent/agent-manager.js.map +1 -1
  106. package/dist/src/agent/context/project-context.js +2 -2
  107. package/dist/src/agent/context/workspace-seed.js +2 -2
  108. package/dist/src/agent/embedded/run-for-session.js +1 -1
  109. package/dist/src/agent/goals/post-turn.js +2 -2
  110. package/dist/src/agent/ipc/bus.js +1 -1
  111. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  112. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  113. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  114. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  115. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  116. package/dist/src/agent/models/manager.js +1 -1
  117. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
  118. package/dist/src/agent/service.js +6 -3
  119. package/dist/src/agent/service.js.map +1 -1
  120. package/dist/src/agent/service.types.d.ts +7 -0
  121. package/dist/src/agent/session/session-inspector.js +1 -1
  122. package/dist/src/agent/skills/hub-pull.js +1 -1
  123. package/dist/src/agent/tool-manuals/index.js +15 -6
  124. package/dist/src/agent/tool-manuals/index.js.map +1 -1
  125. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -0
  126. package/dist/src/agent/tool-manuals/xopc-use.js +204 -0
  127. package/dist/src/agent/tool-manuals/xopc-use.js.map +1 -0
  128. package/dist/src/agent/tools/factory.d.ts +7 -0
  129. package/dist/src/agent/tools/factory.js +9 -0
  130. package/dist/src/agent/tools/factory.js.map +1 -1
  131. package/dist/src/agent/tools/goal-tool.js +2 -2
  132. package/dist/src/agent/tools/index.d.ts +1 -0
  133. package/dist/src/agent/tools/index.js +2 -1
  134. package/dist/src/agent/tools/workflow-tool.js +1 -1
  135. package/dist/src/agent/tools/xopc-use-tool.d.ts +34 -0
  136. package/dist/src/agent/tools/xopc-use-tool.js +636 -0
  137. package/dist/src/agent/tools/xopc-use-tool.js.map +1 -0
  138. package/dist/src/agent-manifest/schema.d.ts +27 -27
  139. package/dist/src/automations/api/routes.js +1 -1
  140. package/dist/src/automations/domain/validation.d.ts +55 -55
  141. package/dist/src/automations/draft/automation-draft-validator.d.ts +25 -25
  142. package/dist/src/automations/service/action-executor.js +2 -2
  143. package/dist/src/browser/cdp-local-launcher.js +1 -1
  144. package/dist/src/browser/providers/browser-ext-install.js +3 -3
  145. package/dist/src/browser/providers/cloakbrowser.js +2 -2
  146. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  147. package/dist/src/browser/stealth.js +1 -1
  148. package/dist/src/chat-commands/agent-edit.js +1 -1
  149. package/dist/src/chat-commands/builtins/config.js +1 -1
  150. package/dist/src/chat-commands/builtins/goal.js +2 -2
  151. package/dist/src/chat-commands/context.js +1 -1
  152. package/dist/src/cli/commands/agent.js +1 -1
  153. package/dist/src/cli/commands/doctor/checks/database-schema.js +2 -2
  154. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
  155. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  156. package/dist/src/cli/commands/extension-pack.js +1 -1
  157. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  158. package/dist/src/cli/commands/goal.js +3 -3
  159. package/dist/src/cli/commands/init.js +1 -1
  160. package/dist/src/cli/commands/project.js +4 -4
  161. package/dist/src/config/agent-profile.js +1 -1
  162. package/dist/src/config/gateway-bind.js +1 -1
  163. package/dist/src/config/index.js +1 -1
  164. package/dist/src/config/loader.js +1 -1
  165. package/dist/src/config/models-json.d.ts +14 -14
  166. package/dist/src/config/models-json.js +1 -1
  167. package/dist/src/config/schema.d.ts +60 -60
  168. package/dist/src/daemon/launchd.js +1 -1
  169. package/dist/src/daemon/systemd.js +1 -1
  170. package/dist/src/extensions/discover-extensions.js +1 -1
  171. package/dist/src/extensions/loader.js +2 -2
  172. package/dist/src/gateway/agents-admin.js +1 -1
  173. package/dist/src/gateway/hono/lib/config-payload.d.ts +14 -14
  174. package/dist/src/gateway/hono/lib/static-ui.js +1 -1
  175. package/dist/src/gateway/hono/middleware/log-context.js +8 -1
  176. package/dist/src/gateway/hono/middleware/log-context.js.map +1 -1
  177. package/dist/src/gateway/hono/routes/activity.d.ts +14 -0
  178. package/dist/src/gateway/hono/routes/activity.js +72 -0
  179. package/dist/src/gateway/hono/routes/activity.js.map +1 -0
  180. package/dist/src/gateway/hono/routes/goals.js +1 -1
  181. package/dist/src/gateway/hono/routes/index.js +2 -0
  182. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  183. package/dist/src/gateway/hono/routes/memory.js +2 -2
  184. package/dist/src/gateway/hono/routes/projects.js +65 -15
  185. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  186. package/dist/src/gateway/hono/routes/sessions.js +101 -2
  187. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  188. package/dist/src/gateway/hono/routes/workflows.js +2 -2
  189. package/dist/src/gateway/lock.js +1 -1
  190. package/dist/src/gateway/ports.js +1 -1
  191. package/dist/src/gateway/service/sessions-api.d.ts +10 -0
  192. package/dist/src/gateway/service/sessions-api.js +31 -0
  193. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  194. package/dist/src/gateway/service.js +12 -9
  195. package/dist/src/gateway/service.js.map +1 -1
  196. package/dist/src/goals/goal-store.js +1 -1
  197. package/dist/src/goals/goal-store.js.map +1 -1
  198. package/dist/src/goals/goal-workflow-judge.js +1 -1
  199. package/dist/src/infra/ports.js +1 -1
  200. package/dist/src/infra/ssh-tunnel.js +1 -1
  201. package/dist/src/infra/update-check.js +1 -1
  202. package/dist/src/infra/update-restart.js +1 -1
  203. package/dist/src/mcp/channel-bridge.js +1 -1
  204. package/dist/src/migrations/runner.js +1 -1
  205. package/dist/src/notes/service.js +65 -6
  206. package/dist/src/notes/service.js.map +1 -1
  207. package/dist/src/notes/store.js +1 -1
  208. package/dist/src/projects/project-service.d.ts +2 -1
  209. package/dist/src/projects/project-service.js +59 -2
  210. package/dist/src/projects/project-service.js.map +1 -1
  211. package/dist/src/projects/project-store.d.ts +2 -1
  212. package/dist/src/projects/project-store.js +43 -0
  213. package/dist/src/projects/project-store.js.map +1 -1
  214. package/dist/src/projects/types.d.ts +10 -0
  215. package/dist/src/projects/workspace.js +1 -1
  216. package/dist/src/routing/agent-session-key.js +1 -1
  217. package/dist/src/routing/resolve-route.js +1 -1
  218. package/dist/src/routing/resolve-tui-session-key.js +1 -1
  219. package/dist/src/session/client-history.d.ts +3 -0
  220. package/dist/src/session/client-history.js +24 -9
  221. package/dist/src/session/client-history.js.map +1 -1
  222. package/dist/src/session/init-session-turn.js +1 -1
  223. package/dist/src/session/resolve-session.js +1 -1
  224. package/dist/src/session/session-title.js +2 -2
  225. package/dist/src/session/store.js +1 -1
  226. package/dist/src/session/types.d.ts +4 -0
  227. package/dist/src/session/types.js.map +1 -1
  228. package/dist/src/storage/sqlite/activity-repository.d.ts +8 -0
  229. package/dist/src/storage/sqlite/activity-repository.js +208 -0
  230. package/dist/src/storage/sqlite/activity-repository.js.map +1 -0
  231. package/dist/src/storage/sqlite/connection.js +1 -1
  232. package/dist/src/storage/sqlite/index.d.ts +1 -0
  233. package/dist/src/storage/sqlite/index.js +2 -1
  234. package/dist/src/storage/sqlite/migrations/024_activity_events.sql +62 -0
  235. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  236. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  237. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  238. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  239. package/dist/src/storage/sqlite/row-mappers.js +1 -1
  240. package/dist/src/storage/sqlite/schema.js +1 -1
  241. package/dist/src/storage/sqlite/schema.sql +63 -0
  242. package/dist/src/storage/sqlite/session-repository.js +11 -0
  243. package/dist/src/storage/sqlite/session-repository.js.map +1 -1
  244. package/dist/src/tui/backends/embedded-backend.d.ts +13 -0
  245. package/dist/src/tui/backends/embedded-backend.js +76 -7
  246. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  247. package/dist/src/tui/backends/gateway-sse-backend.d.ts +13 -0
  248. package/dist/src/tui/backends/gateway-sse-backend.js +53 -0
  249. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  250. package/dist/src/tui/chat-history.js +16 -3
  251. package/dist/src/tui/chat-history.js.map +1 -1
  252. package/dist/src/tui/clipboard-image.js +1 -1
  253. package/dist/src/tui/components/chat-log.d.ts +23 -3
  254. package/dist/src/tui/components/chat-log.js +68 -9
  255. package/dist/src/tui/components/chat-log.js.map +1 -1
  256. package/dist/src/tui/components/tui-bottom-bar.js +9 -5
  257. package/dist/src/tui/components/tui-bottom-bar.js.map +1 -1
  258. package/dist/src/tui/tui-backend.d.ts +16 -0
  259. package/dist/src/tui/tui-command-formatters.js +2 -2
  260. package/dist/src/tui/tui-commands.d.ts +9 -0
  261. package/dist/src/tui/tui-commands.js +95 -6
  262. package/dist/src/tui/tui-commands.js.map +1 -1
  263. package/dist/src/tui/tui-picker-overlay.d.ts +1 -0
  264. package/dist/src/tui/tui-picker-overlay.js +36 -1
  265. package/dist/src/tui/tui-picker-overlay.js.map +1 -1
  266. package/dist/src/tui/tui-picker-services.d.ts +13 -0
  267. package/dist/src/tui/tui-run-state.js +11 -0
  268. package/dist/src/tui/tui-run-state.js.map +1 -1
  269. package/dist/src/tui/tui-run-status-format.d.ts +3 -0
  270. package/dist/src/tui/tui-run-status-format.js +33 -0
  271. package/dist/src/tui/tui-run-status-format.js.map +1 -0
  272. package/dist/src/tui/tui-session-actions.d.ts +5 -0
  273. package/dist/src/tui/tui-session-actions.js +24 -0
  274. package/dist/src/tui/tui-session-actions.js.map +1 -1
  275. package/dist/src/tui/tui-timeline-picker.d.ts +19 -0
  276. package/dist/src/tui/tui-timeline-picker.js +81 -0
  277. package/dist/src/tui/tui-timeline-picker.js.map +1 -0
  278. package/dist/src/tui/tui-timeline.d.ts +15 -0
  279. package/dist/src/tui/tui-timeline.js +65 -0
  280. package/dist/src/tui/tui-timeline.js.map +1 -0
  281. package/dist/src/tui/tui-types.d.ts +1 -0
  282. package/dist/src/tui/tui-types.js +1 -0
  283. package/dist/src/tui/tui-types.js.map +1 -1
  284. package/dist/src/tui/tui.js +31 -25
  285. package/dist/src/tui/tui.js.map +1 -1
  286. package/dist/src/utils/index.js +1 -1
  287. package/dist/src/utils/logger/index.js +1 -1
  288. package/dist/src/utils/logger/stats.d.ts +3 -3
  289. package/dist/src/utils/logger.js +1 -1
  290. package/dist/src/work-items/agent-context.d.ts +5 -1
  291. package/dist/src/work-items/agent-context.js +39 -3
  292. package/dist/src/work-items/agent-context.js.map +1 -1
  293. package/dist/src/work-items/work-item-service.d.ts +2 -0
  294. package/dist/src/work-items/work-item-service.js +97 -0
  295. package/dist/src/work-items/work-item-service.js.map +1 -1
  296. package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
  297. package/dist/src/workflows/service/workflow-session-bridge.js +1 -1
  298. package/package.json +5 -5
  299. package/dist/gateway/static/root/assets/agents-BnTB7-c5.js +0 -2
  300. package/dist/gateway/static/root/assets/apps-page-B6bG65SW.js +0 -1
  301. package/dist/gateway/static/root/assets/automations-page-1lVbo0dS.js +0 -1
  302. package/dist/gateway/static/root/assets/browser-settings-page-CzDBlOK0.js +0 -8
  303. package/dist/gateway/static/root/assets/channels-settings-Df4m7p1k.js +0 -1
  304. package/dist/gateway/static/root/assets/connectors-page-BMTphmHS.js +0 -2
  305. package/dist/gateway/static/root/assets/goal-detail-page-C2cTxf71.js +0 -1
  306. package/dist/gateway/static/root/assets/index-BNHDd2j1.css +0 -1
  307. package/dist/gateway/static/root/assets/index-BPXLPMuY.js +0 -193
  308. package/dist/gateway/static/root/assets/logs-page-CGc3_CQU.js +0 -2
  309. package/dist/gateway/static/root/assets/messages-CjuIJcZl.js +0 -3
  310. package/dist/gateway/static/root/assets/models-hub-panel-Drz4UQMb.js +0 -2
  311. package/dist/gateway/static/root/assets/notes-page-CY1ylng1.js +0 -1
  312. package/dist/gateway/static/root/assets/notes-workbench-X7IaD--t.js +0 -2
  313. package/dist/gateway/static/root/assets/project-detail-page-DE5adRBE.js +0 -1
  314. package/dist/gateway/static/root/assets/projects-page-CuOb1k6F.js +0 -1
  315. package/dist/gateway/static/root/assets/remote-access-hub-BOxNrUVA.js +0 -1
  316. package/dist/gateway/static/root/assets/sessions-page-CY0IQcGW.js +0 -1
  317. package/dist/gateway/static/root/assets/settings-advanced-gate-D4NBNVCB.js +0 -1
  318. package/dist/gateway/static/root/assets/settings-form-section-BBYUDLVd.js +0 -1
  319. package/dist/gateway/static/root/assets/settings-page-DaO7zYZM.js +0 -1
  320. package/dist/gateway/static/root/assets/settings-page-layout-D8g9PAek.js +0 -1
  321. package/dist/gateway/static/root/assets/setup-status-panel-Bks0CLLT.js +0 -1
  322. package/dist/gateway/static/root/assets/shares-settings-CEZsKm9r.js +0 -1
  323. package/dist/gateway/static/root/assets/skill-reload-api-oTkHbb9W.js +0 -1
  324. package/dist/gateway/static/root/assets/skills-page-DigsbZ6K.js +0 -2
  325. package/dist/gateway/static/root/assets/voice-api-key-field-CEJklEgb.js +0 -1
  326. package/dist/gateway/static/root/assets/workflows-page-OLQiUpoW.js +0 -18
@@ -61,13 +61,13 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
61
61
  };
62
62
  policy?: {
63
63
  allowFallbacks?: boolean;
64
- maxCostTier?: "low" | "medium" | "high";
64
+ maxCostTier?: "low" | "high" | "medium";
65
65
  };
66
66
  };
67
67
  tools: {
68
68
  builtin: Record<string, {
69
69
  mode: "allow" | "confirm" | "deny";
70
- scope?: "readonly" | "workspace" | "unrestricted";
70
+ scope?: "workspace" | "readonly" | "unrestricted";
71
71
  limits?: {
72
72
  maxCallsPerTurn?: number;
73
73
  timeoutMs?: number;
@@ -76,7 +76,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
76
76
  mcp?: {
77
77
  servers?: Record<string, {
78
78
  mode: "allow" | "confirm" | "deny";
79
- scope?: "readonly" | "workspace" | "unrestricted";
79
+ scope?: "workspace" | "readonly" | "unrestricted";
80
80
  limits?: {
81
81
  maxCallsPerTurn?: number;
82
82
  timeoutMs?: number;
@@ -84,7 +84,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
84
84
  }>;
85
85
  tools?: Record<string, {
86
86
  mode: "allow" | "confirm" | "deny";
87
- scope?: "readonly" | "workspace" | "unrestricted";
87
+ scope?: "workspace" | "readonly" | "unrestricted";
88
88
  limits?: {
89
89
  maxCallsPerTurn?: number;
90
90
  timeoutMs?: number;
@@ -98,8 +98,8 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
98
98
  deny?: string[];
99
99
  };
100
100
  memory: {
101
- mode: "off" | "readOnly" | "confirmWrite" | "auto";
102
- sources: ("workspace" | "session" | "userProfile" | "agentProfile" | "curated")[];
101
+ mode: "off" | "auto" | "readOnly" | "confirmWrite";
102
+ sources: ("session" | "workspace" | "userProfile" | "agentProfile" | "curated")[];
103
103
  writePolicy?: {
104
104
  userProfile?: "allow" | "confirm" | "deny";
105
105
  agentProfile?: "allow" | "confirm" | "deny";
@@ -195,13 +195,13 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
195
195
  };
196
196
  policy?: {
197
197
  allowFallbacks?: boolean;
198
- maxCostTier?: "low" | "medium" | "high";
198
+ maxCostTier?: "low" | "high" | "medium";
199
199
  };
200
200
  };
201
201
  tools?: {
202
202
  builtin: Record<string, {
203
203
  mode: "allow" | "confirm" | "deny";
204
- scope?: "readonly" | "workspace" | "unrestricted";
204
+ scope?: "workspace" | "readonly" | "unrestricted";
205
205
  limits?: {
206
206
  maxCallsPerTurn?: number;
207
207
  timeoutMs?: number;
@@ -210,7 +210,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
210
210
  mcp?: {
211
211
  servers?: Record<string, {
212
212
  mode: "allow" | "confirm" | "deny";
213
- scope?: "readonly" | "workspace" | "unrestricted";
213
+ scope?: "workspace" | "readonly" | "unrestricted";
214
214
  limits?: {
215
215
  maxCallsPerTurn?: number;
216
216
  timeoutMs?: number;
@@ -218,7 +218,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
218
218
  }>;
219
219
  tools?: Record<string, {
220
220
  mode: "allow" | "confirm" | "deny";
221
- scope?: "readonly" | "workspace" | "unrestricted";
221
+ scope?: "workspace" | "readonly" | "unrestricted";
222
222
  limits?: {
223
223
  maxCallsPerTurn?: number;
224
224
  timeoutMs?: number;
@@ -232,8 +232,8 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
232
232
  deny?: string[];
233
233
  };
234
234
  memory?: {
235
- mode: "off" | "readOnly" | "confirmWrite" | "auto";
236
- sources: ("workspace" | "session" | "userProfile" | "agentProfile" | "curated")[];
235
+ mode: "off" | "auto" | "readOnly" | "confirmWrite";
236
+ sources: ("session" | "workspace" | "userProfile" | "agentProfile" | "curated")[];
237
237
  writePolicy?: {
238
238
  userProfile?: "allow" | "confirm" | "deny";
239
239
  agentProfile?: "allow" | "confirm" | "deny";
@@ -334,7 +334,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
334
334
  strict: boolean;
335
335
  };
336
336
  auth: {
337
- mode: "none" | "token" | "password" | "trusted-proxy";
337
+ mode: "token" | "password" | "none" | "trusted-proxy";
338
338
  token: string;
339
339
  password: string;
340
340
  trustedProxy: {
@@ -367,7 +367,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
367
367
  };
368
368
  };
369
369
  maxSseConnections: number;
370
- channelConnectDeferMode: "off" | "auto" | "explicit";
370
+ channelConnectDeferMode: "explicit" | "off" | "auto";
371
371
  channelConnectDeferIds: string[];
372
372
  channelConnectDeferSkipIds: string[];
373
373
  share: import("../../../share/share-types.js").ShareConfig;
@@ -1,7 +1,7 @@
1
1
  import { dirname, resolve } from "node:path";
2
2
  import { readFileSync } from "node:fs";
3
- import { createHash } from "node:crypto";
4
3
  import { fileURLToPath } from "node:url";
4
+ import { createHash } from "node:crypto";
5
5
  //#region src/gateway/hono/lib/static-ui.ts
6
6
  const __dirname = dirname(fileURLToPath(import.meta.url));
7
7
  /**
@@ -1,4 +1,6 @@
1
1
  import { init_context, runWithLogContext } from "../../../utils/logger/context.js";
2
+ import { runWithActivityContext } from "../../../activity/context.js";
3
+ import "../../../activity/index.js";
2
4
  import { randomUUID } from "node:crypto";
3
5
  import { createMiddleware } from "hono/factory";
4
6
  //#region src/gateway/hono/middleware/log-context.ts
@@ -17,7 +19,12 @@ function logContextMiddleware() {
17
19
  requestId,
18
20
  ...sessionHeader ? { sessionId: sessionHeader } : {}
19
21
  }, async () => {
20
- await next();
22
+ await runWithActivityContext({ source: {
23
+ kind: "gateway_api",
24
+ requestId
25
+ } }, async () => {
26
+ await next();
27
+ });
21
28
  });
22
29
  });
23
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"log-context.js","names":[],"sources":["../../../../../src/gateway/hono/middleware/log-context.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport { createMiddleware } from 'hono/factory';\n\nimport { runWithLogContext } from '../../../utils/logger/context.js';\n\n/**\n * Binds request (and optional session) correlation into AsyncLocalStorage so\n * all pino logs in the request inherit requestId / sessionId without a child logger.\n */\nexport function logContextMiddleware() {\n return createMiddleware(async (c, next) => {\n const headerRequestId = c.req.header('x-request-id')?.trim();\n const requestId = headerRequestId && headerRequestId.length > 0 ? headerRequestId : randomUUID();\n const sessionHeader = c.req.header('x-session-id')?.trim();\n\n c.header('X-Request-Id', requestId);\n\n return runWithLogContext(\n {\n requestId,\n ...(sessionHeader ? { sessionId: sessionHeader } : {}),\n },\n async () => {\n await next();\n },\n );\n });\n}\n"],"mappings":";;;;cAIqE;;;;;AAMrE,SAAgB,uBAAuB;AACrC,QAAO,iBAAiB,OAAO,GAAG,SAAS;EACzC,MAAM,kBAAkB,EAAE,IAAI,OAAO,eAAe,EAAE,MAAM;EAC5D,MAAM,YAAY,mBAAmB,gBAAgB,SAAS,IAAI,kBAAkB,YAAY;EAChG,MAAM,gBAAgB,EAAE,IAAI,OAAO,eAAe,EAAE,MAAM;AAE1D,IAAE,OAAO,gBAAgB,UAAU;AAEnC,SAAO,kBACL;GACE;GACA,GAAI,gBAAgB,EAAE,WAAW,eAAe,GAAG,EAAE;GACtD,EACD,YAAY;AACV,SAAM,MAAM;IAEf;GACD"}
1
+ {"version":3,"file":"log-context.js","names":[],"sources":["../../../../../src/gateway/hono/middleware/log-context.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\n\nimport { createMiddleware } from 'hono/factory';\n\nimport { runWithActivityContext } from '../../../activity/index.js';\nimport { runWithLogContext } from '../../../utils/logger/context.js';\n\n/**\n * Binds request (and optional session) correlation into AsyncLocalStorage so\n * all pino logs in the request inherit requestId / sessionId without a child logger.\n */\nexport function logContextMiddleware() {\n return createMiddleware(async (c, next) => {\n const headerRequestId = c.req.header('x-request-id')?.trim();\n const requestId = headerRequestId && headerRequestId.length > 0 ? headerRequestId : randomUUID();\n const sessionHeader = c.req.header('x-session-id')?.trim();\n\n c.header('X-Request-Id', requestId);\n\n return runWithLogContext(\n {\n requestId,\n ...(sessionHeader ? { sessionId: sessionHeader } : {}),\n },\n async () => {\n await runWithActivityContext(\n { source: { kind: 'gateway_api', requestId } },\n async () => {\n await next();\n },\n );\n },\n );\n });\n}\n"],"mappings":";;;;;;cAKqE;;;;;AAMrE,SAAgB,uBAAuB;AACrC,QAAO,iBAAiB,OAAO,GAAG,SAAS;EACzC,MAAM,kBAAkB,EAAE,IAAI,OAAO,eAAe,EAAE,MAAM;EAC5D,MAAM,YAAY,mBAAmB,gBAAgB,SAAS,IAAI,kBAAkB,YAAY;EAChG,MAAM,gBAAgB,EAAE,IAAI,OAAO,eAAe,EAAE,MAAM;AAE1D,IAAE,OAAO,gBAAgB,UAAU;AAEnC,SAAO,kBACL;GACE;GACA,GAAI,gBAAgB,EAAE,WAAW,eAAe,GAAG,EAAE;GACtD,EACD,YAAY;AACV,SAAM,uBACJ,EAAE,QAAQ;IAAE,MAAM;IAAe;IAAW,EAAE,EAC9C,YAAY;AACV,UAAM,MAAM;KAEf;IAEJ;GACD"}
@@ -0,0 +1,14 @@
1
+ import type { Hono } from 'hono';
2
+ import type { ActivityVisibility } from '../../../activity/types.js';
3
+ import type { AuthenticatedRouteDeps } from './deps.js';
4
+ export declare function parseActivityQuery(c: {
5
+ req: {
6
+ query(name: string): string | undefined;
7
+ };
8
+ }): {
9
+ visibility?: ActivityVisibility;
10
+ limit?: number;
11
+ offset?: number;
12
+ };
13
+ export declare function parseActivityIncludeRelated(raw: string | undefined): boolean;
14
+ export declare function registerActivityRoutes(authenticated: Hono, _deps: AuthenticatedRouteDeps): void;
@@ -0,0 +1,72 @@
1
+ import { ActivityService } from "../../../activity/service.js";
2
+ import "../../../activity/index.js";
3
+ //#region src/gateway/hono/routes/activity.ts
4
+ const ACTIVITY_OBJECT_KINDS = new Set([
5
+ "project",
6
+ "note",
7
+ "work_item",
8
+ "session",
9
+ "goal",
10
+ "workflow_run",
11
+ "automation"
12
+ ]);
13
+ function parseActivityVisibility(raw) {
14
+ return raw === "timeline" || raw === "audit" || raw === "debug" ? raw : void 0;
15
+ }
16
+ function parseActivityLimit(raw) {
17
+ if (!raw) return void 0;
18
+ const n = Number.parseInt(raw, 10);
19
+ return Number.isFinite(n) ? Math.min(100, Math.max(1, n)) : void 0;
20
+ }
21
+ function parseActivityOffset(raw) {
22
+ if (!raw) return void 0;
23
+ const n = Number.parseInt(raw, 10);
24
+ return Number.isFinite(n) ? Math.max(0, n) : void 0;
25
+ }
26
+ function parseActivityQuery(c) {
27
+ return {
28
+ visibility: parseActivityVisibility(c.req.query("visibility")),
29
+ limit: parseActivityLimit(c.req.query("limit")),
30
+ offset: parseActivityOffset(c.req.query("offset"))
31
+ };
32
+ }
33
+ function parseActivityIncludeRelated(raw) {
34
+ return raw === "true" || raw === "1";
35
+ }
36
+ function registerActivityRoutes(authenticated, _deps) {
37
+ const activity = new ActivityService();
38
+ authenticated.get("/api/activity", (c) => {
39
+ const result = activity.list(parseActivityQuery(c));
40
+ return c.json({
41
+ ok: true,
42
+ ...result
43
+ });
44
+ });
45
+ authenticated.get("/api/activity/objects/:kind/:id", (c) => {
46
+ const kind = c.req.param("kind");
47
+ if (!ACTIVITY_OBJECT_KINDS.has(kind)) return c.json({
48
+ ok: false,
49
+ error: "Unsupported activity object kind"
50
+ }, 400);
51
+ const id = c.req.param("id").trim();
52
+ if (!id) return c.json({
53
+ ok: false,
54
+ error: "Missing activity object id"
55
+ }, 400);
56
+ const result = activity.listForObject({
57
+ object: {
58
+ kind,
59
+ id
60
+ },
61
+ ...parseActivityQuery(c)
62
+ });
63
+ return c.json({
64
+ ok: true,
65
+ ...result
66
+ });
67
+ });
68
+ }
69
+ //#endregion
70
+ export { parseActivityIncludeRelated, parseActivityQuery, registerActivityRoutes };
71
+
72
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","names":[],"sources":["../../../../../src/gateway/hono/routes/activity.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { ActivityService } from '../../../activity/index.js';\nimport type { ActivityObjectKind, ActivityVisibility } from '../../../activity/types.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\n\nconst ACTIVITY_OBJECT_KINDS = new Set<ActivityObjectKind>([\n 'project',\n 'note',\n 'work_item',\n 'session',\n 'goal',\n 'workflow_run',\n 'automation',\n]);\n\nfunction parseActivityVisibility(raw: string | undefined): ActivityVisibility | undefined {\n return raw === 'timeline' || raw === 'audit' || raw === 'debug' ? raw : undefined;\n}\n\nfunction parseActivityLimit(raw: string | undefined): number | undefined {\n if (!raw) return undefined;\n const n = Number.parseInt(raw, 10);\n return Number.isFinite(n) ? Math.min(100, Math.max(1, n)) : undefined;\n}\n\nfunction parseActivityOffset(raw: string | undefined): number | undefined {\n if (!raw) return undefined;\n const n = Number.parseInt(raw, 10);\n return Number.isFinite(n) ? Math.max(0, n) : undefined;\n}\n\nexport function parseActivityQuery(c: {\n req: { query(name: string): string | undefined };\n}): {\n visibility?: ActivityVisibility;\n limit?: number;\n offset?: number;\n} {\n return {\n visibility: parseActivityVisibility(c.req.query('visibility')),\n limit: parseActivityLimit(c.req.query('limit')),\n offset: parseActivityOffset(c.req.query('offset')),\n };\n}\n\nexport function parseActivityIncludeRelated(raw: string | undefined): boolean {\n return raw === 'true' || raw === '1';\n}\n\nexport function registerActivityRoutes(authenticated: Hono, _deps: AuthenticatedRouteDeps): void {\n const activity = new ActivityService();\n\n authenticated.get('/api/activity', (c) => {\n const result = activity.list(parseActivityQuery(c));\n return c.json({ ok: true, ...result });\n });\n\n authenticated.get('/api/activity/objects/:kind/:id', (c) => {\n const kind = c.req.param('kind') as ActivityObjectKind;\n if (!ACTIVITY_OBJECT_KINDS.has(kind)) {\n return c.json({ ok: false, error: 'Unsupported activity object kind' }, 400);\n }\n const id = c.req.param('id').trim();\n if (!id) return c.json({ ok: false, error: 'Missing activity object id' }, 400);\n const result = activity.listForObject({\n object: { kind, id },\n ...parseActivityQuery(c),\n });\n return c.json({ ok: true, ...result });\n });\n}\n"],"mappings":";;;AAMA,MAAM,wBAAwB,IAAI,IAAwB;CACxD;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAS,wBAAwB,KAAyD;AACxF,QAAO,QAAQ,cAAc,QAAQ,WAAW,QAAQ,UAAU,MAAM,KAAA;;AAG1E,SAAS,mBAAmB,KAA6C;AACvE,KAAI,CAAC,IAAK,QAAO,KAAA;CACjB,MAAM,IAAI,OAAO,SAAS,KAAK,GAAG;AAClC,QAAO,OAAO,SAAS,EAAE,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,CAAC,GAAG,KAAA;;AAG9D,SAAS,oBAAoB,KAA6C;AACxE,KAAI,CAAC,IAAK,QAAO,KAAA;CACjB,MAAM,IAAI,OAAO,SAAS,KAAK,GAAG;AAClC,QAAO,OAAO,SAAS,EAAE,GAAG,KAAK,IAAI,GAAG,EAAE,GAAG,KAAA;;AAG/C,SAAgB,mBAAmB,GAMjC;AACA,QAAO;EACL,YAAY,wBAAwB,EAAE,IAAI,MAAM,aAAa,CAAC;EAC9D,OAAO,mBAAmB,EAAE,IAAI,MAAM,QAAQ,CAAC;EAC/C,QAAQ,oBAAoB,EAAE,IAAI,MAAM,SAAS,CAAC;EACnD;;AAGH,SAAgB,4BAA4B,KAAkC;AAC5E,QAAO,QAAQ,UAAU,QAAQ;;AAGnC,SAAgB,uBAAuB,eAAqB,OAAqC;CAC/F,MAAM,WAAW,IAAI,iBAAiB;AAEtC,eAAc,IAAI,kBAAkB,MAAM;EACxC,MAAM,SAAS,SAAS,KAAK,mBAAmB,EAAE,CAAC;AACnD,SAAO,EAAE,KAAK;GAAE,IAAI;GAAM,GAAG;GAAQ,CAAC;GACtC;AAEF,eAAc,IAAI,oCAAoC,MAAM;EAC1D,MAAM,OAAO,EAAE,IAAI,MAAM,OAAO;AAChC,MAAI,CAAC,sBAAsB,IAAI,KAAK,CAClC,QAAO,EAAE,KAAK;GAAE,IAAI;GAAO,OAAO;GAAoC,EAAE,IAAI;EAE9E,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,CAAC,MAAM;AACnC,MAAI,CAAC,GAAI,QAAO,EAAE,KAAK;GAAE,IAAI;GAAO,OAAO;GAA8B,EAAE,IAAI;EAC/E,MAAM,SAAS,SAAS,cAAc;GACpC,QAAQ;IAAE;IAAM;IAAI;GACpB,GAAG,mBAAmB,EAAE;GACzB,CAAC;AACF,SAAO,EAAE,KAAK;GAAE,IAAI;GAAM,GAAG;GAAQ,CAAC;GACtC"}
@@ -3,9 +3,9 @@ import { getDefaultAgentId, init_resolve_route } from "../../../routing/resolve-
3
3
  import { GoalService, normalizeGoalUiLocale } from "../../../goals/goal-service.js";
4
4
  import "../../../goals/index.js";
5
5
  import { createWorkflowCatalog } from "../../../agent/workflow/catalog.js";
6
- import { MAX_WEBCHAT_ATTACHMENT_FILE_BYTES } from "../../chat-limits.js";
7
6
  import { resolveProjectAgentId } from "../../../projects/project-agent.js";
8
7
  import "../../../projects/index.js";
8
+ import { MAX_WEBCHAT_ATTACHMENT_FILE_BYTES } from "../../chat-limits.js";
9
9
  //#region src/gateway/hono/routes/goals.ts
10
10
  init_session_key();
11
11
  init_resolve_route();
@@ -1,3 +1,4 @@
1
+ import { registerActivityRoutes } from "./activity.js";
1
2
  import { registerAgentStreamRoutes } from "./agent-stream.js";
2
3
  import { registerSessionsRoutes } from "./sessions.js";
3
4
  import { registerStatusRoutes } from "./status.js";
@@ -11,6 +12,7 @@ function registerCoreAuthenticatedRoutes(authenticated, deps) {
11
12
  registerAgentStreamRoutes(authenticated, deps);
12
13
  registerSessionsRoutes(authenticated, deps);
13
14
  registerMemoryRoutes(authenticated, deps);
15
+ registerActivityRoutes(authenticated, deps);
14
16
  registerProjectsRoutes(authenticated, deps);
15
17
  registerSearchRoutes(authenticated, deps);
16
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/gateway/hono/routes/index.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { registerAgentStreamRoutes } from './agent-stream.js';\nimport { registerSessionsRoutes } from './sessions.js';\nimport { registerStatusRoutes } from './status.js';\nimport { registerMemoryRoutes } from './memory.js';\nimport { registerProjectsRoutes } from './projects.js';\nimport { registerSearchRoutes } from './search.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\nimport {\n mountAppLazyRoutePrefixes,\n registerAuthenticatedLazyRouteFallback,\n} from './lazy-fallback.js';\n\nexport function registerCoreAuthenticatedRoutes(\n authenticated: Hono,\n deps: AuthenticatedRouteDeps,\n): void {\n registerStatusRoutes(authenticated, deps);\n registerAgentStreamRoutes(authenticated, deps);\n registerSessionsRoutes(authenticated, deps);\n registerMemoryRoutes(authenticated, deps);\n registerProjectsRoutes(authenticated, deps);\n registerSearchRoutes(authenticated, deps);\n}\n\nexport function registerAuthenticatedRoutes(app: Hono, authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n registerCoreAuthenticatedRoutes(authenticated, deps);\n registerAuthenticatedLazyRouteFallback(authenticated, deps);\n mountAppLazyRoutePrefixes(app, { service: deps.service, deps });\n}\n\nexport type { AuthenticatedRouteDeps } from './deps.js';\n"],"mappings":";;;;;;;;AAcA,SAAgB,gCACd,eACA,MACM;AACN,sBAAqB,eAAe,KAAK;AACzC,2BAA0B,eAAe,KAAK;AAC9C,wBAAuB,eAAe,KAAK;AAC3C,sBAAqB,eAAe,KAAK;AACzC,wBAAuB,eAAe,KAAK;AAC3C,sBAAqB,eAAe,KAAK;;AAG3C,SAAgB,4BAA4B,KAAW,eAAqB,MAAoC;AAC9G,iCAAgC,eAAe,KAAK;AACpD,wCAAuC,eAAe,KAAK;AAC3D,2BAA0B,KAAK;EAAE,SAAS,KAAK;EAAS;EAAM,CAAC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/gateway/hono/routes/index.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { registerActivityRoutes } from './activity.js';\nimport { registerAgentStreamRoutes } from './agent-stream.js';\nimport { registerSessionsRoutes } from './sessions.js';\nimport { registerStatusRoutes } from './status.js';\nimport { registerMemoryRoutes } from './memory.js';\nimport { registerProjectsRoutes } from './projects.js';\nimport { registerSearchRoutes } from './search.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\nimport {\n mountAppLazyRoutePrefixes,\n registerAuthenticatedLazyRouteFallback,\n} from './lazy-fallback.js';\n\nexport function registerCoreAuthenticatedRoutes(\n authenticated: Hono,\n deps: AuthenticatedRouteDeps,\n): void {\n registerStatusRoutes(authenticated, deps);\n registerAgentStreamRoutes(authenticated, deps);\n registerSessionsRoutes(authenticated, deps);\n registerMemoryRoutes(authenticated, deps);\n registerActivityRoutes(authenticated, deps);\n registerProjectsRoutes(authenticated, deps);\n registerSearchRoutes(authenticated, deps);\n}\n\nexport function registerAuthenticatedRoutes(app: Hono, authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n registerCoreAuthenticatedRoutes(authenticated, deps);\n registerAuthenticatedLazyRouteFallback(authenticated, deps);\n mountAppLazyRoutePrefixes(app, { service: deps.service, deps });\n}\n\nexport type { AuthenticatedRouteDeps } from './deps.js';\n"],"mappings":";;;;;;;;;AAeA,SAAgB,gCACd,eACA,MACM;AACN,sBAAqB,eAAe,KAAK;AACzC,2BAA0B,eAAe,KAAK;AAC9C,wBAAuB,eAAe,KAAK;AAC3C,sBAAqB,eAAe,KAAK;AACzC,wBAAuB,eAAe,KAAK;AAC3C,wBAAuB,eAAe,KAAK;AAC3C,sBAAqB,eAAe,KAAK;;AAG3C,SAAgB,4BAA4B,KAAW,eAAqB,MAAoC;AAC9G,iCAAgC,eAAe,KAAK;AACpD,wCAAuC,eAAe,KAAK;AAC3D,2BAA0B,KAAK;EAAE,SAAS,KAAK;EAAS;EAAM,CAAC"}
@@ -1,8 +1,8 @@
1
+ import { appendMemorySignal, appendMemoryTraceEvent, deleteMemoryRecord, getMemoryRecord, listMemoryRecords, listMemorySignals, listMemoryTraceEvents, searchMemoryRecords, setMemoryTraceFeedback, summarizeMemoryRecallFeedback, upsertMemoryRecord } from "../../../storage/sqlite/memory-records-repository.js";
2
+ import "../../../storage/sqlite/index.js";
1
3
  import { MemoryPolicySchema, init_schema } from "../../../agent-manifest/schema.js";
2
4
  import { init_agent_scope, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
3
5
  import { resolveEffectiveAgentManifestForAgent } from "../../../config/agent-profile.js";
4
- import { appendMemorySignal, appendMemoryTraceEvent, deleteMemoryRecord, getMemoryRecord, listMemoryRecords, listMemorySignals, listMemoryTraceEvents, searchMemoryRecords, setMemoryTraceFeedback, summarizeMemoryRecallFeedback, upsertMemoryRecord } from "../../../storage/sqlite/memory-records-repository.js";
5
- import "../../../storage/sqlite/index.js";
6
6
  import { resolveBuiltinMemoryStoreConfig } from "../../../agent/memory/memory-config.js";
7
7
  import { BuiltinMemoryStore } from "../../../agent/memory/builtin-memory-store.js";
8
8
  import { discoverMemoryPlugins } from "../../../agent/memory/plugin-discovery.js";
@@ -1,11 +1,14 @@
1
- import { buildSessionKey, init_session_key } from "../../../routing/session-key.js";
2
1
  import { getSqliteDatabase } from "../../../storage/sqlite/transaction.js";
3
- import { GoalService } from "../../../goals/goal-service.js";
4
- import "../../../goals/index.js";
5
2
  import { getSessionMetadata } from "../../../storage/sqlite/session-repository.js";
6
3
  import { loadTranscriptRowsForSession } from "../../../storage/sqlite/transcript-repository.js";
7
4
  import { listMemoryRecords, upsertMemoryRecord } from "../../../storage/sqlite/memory-records-repository.js";
8
5
  import "../../../storage/sqlite/index.js";
6
+ import { ActivityService } from "../../../activity/service.js";
7
+ import "../../../activity/index.js";
8
+ import { buildSessionKey, init_session_key } from "../../../routing/session-key.js";
9
+ import { resolveEffectiveAgentProfile } from "../../../config/agent-profile.js";
10
+ import { GoalService } from "../../../goals/goal-service.js";
11
+ import "../../../goals/index.js";
9
12
  import { ProjectWorkspaceConflictError, ProjectWorkspaceMissingError } from "../../../projects/workspace-project.js";
10
13
  import { isValidProjectAgentId, normalizeProjectAgentId, resolveProjectAgentId } from "../../../projects/project-agent.js";
11
14
  import { inferProjectKind } from "../../../projects/project-kind.js";
@@ -16,6 +19,7 @@ import { WORK_ITEM_ATTACHMENT_MAX_BYTES, WorkItemService } from "../../../work-i
16
19
  import { buildWorkItemAgentContext } from "../../../work-items/agent-context.js";
17
20
  import "../../../work-items/index.js";
18
21
  import { createGatewayRouteLogger } from "../lib/route-logger.js";
22
+ import { parseActivityIncludeRelated, parseActivityQuery } from "./activity.js";
19
23
  import * as path$1 from "node:path";
20
24
  import { readFile, readdir, realpath, stat, writeFile } from "node:fs/promises";
21
25
  //#region src/gateway/hono/routes/projects.ts
@@ -41,6 +45,23 @@ function optionalTextField(body, key) {
41
45
  const value = body[key];
42
46
  return typeof value === "string" ? value : null;
43
47
  }
48
+ function resolveEffectiveWorkspaceRoot(service, project) {
49
+ const fixedRoot = project.workspaceRoot?.trim();
50
+ if (fixedRoot) return fixedRoot;
51
+ const agentId = resolveProjectAgentId({
52
+ config: service.currentConfig,
53
+ projects: service.projects,
54
+ projectId: project.id
55
+ });
56
+ return resolveEffectiveAgentProfile(service.currentConfig, agentId).resolvedWorkspacePath;
57
+ }
58
+ function enrichProjectWorkspace(service, project) {
59
+ return {
60
+ ...project,
61
+ workspaceMode: project.workspaceRoot?.trim() ? "fixed" : "followAgent",
62
+ effectiveWorkspaceRoot: resolveEffectiveWorkspaceRoot(service, project)
63
+ };
64
+ }
44
65
  function finiteNumberField(value) {
45
66
  if (typeof value === "number" && Number.isFinite(value)) return value;
46
67
  if (typeof value === "string" && value.trim()) {
@@ -136,13 +157,14 @@ async function resolveProjectWorkspaceRoot(service, projectId) {
136
157
  status: 404,
137
158
  error: "Project not found"
138
159
  };
139
- if (!project.workspaceRoot?.trim()) return {
160
+ const workspaceRoot = resolveEffectiveWorkspaceRoot(service, project);
161
+ if (!workspaceRoot?.trim()) return {
140
162
  ok: false,
141
163
  status: 400,
142
164
  error: "Project workspace root is not set"
143
165
  };
144
166
  try {
145
- const root = await realpath(project.workspaceRoot);
167
+ const root = await realpath(workspaceRoot);
146
168
  if (!(await stat(root)).isDirectory()) return {
147
169
  ok: false,
148
170
  status: 400,
@@ -157,7 +179,7 @@ async function resolveProjectWorkspaceRoot(service, projectId) {
157
179
  log.warn({
158
180
  err,
159
181
  projectId: project.id,
160
- path: project.workspaceRoot
182
+ path: workspaceRoot
161
183
  }, "project workspace root unavailable");
162
184
  return {
163
185
  ok: false,
@@ -348,6 +370,7 @@ function projectDigestMemoryRecordId(projectId) {
348
370
  }
349
371
  function registerProjectsRoutes(authenticated, deps) {
350
372
  const { service } = deps;
373
+ const activity = new ActivityService();
351
374
  const goals = new GoalService();
352
375
  const workItems = new WorkItemService();
353
376
  authenticated.post("/api/projects", async (c) => {
@@ -384,7 +407,7 @@ function registerProjectsRoutes(authenticated, deps) {
384
407
  });
385
408
  return c.json({
386
409
  ok: true,
387
- project
410
+ project: enrichProjectWorkspace(service, project)
388
411
  }, 201);
389
412
  } catch (error) {
390
413
  if (error instanceof ProjectWorkspaceConflictError) return c.json({
@@ -417,7 +440,8 @@ function registerProjectsRoutes(authenticated, deps) {
417
440
  });
418
441
  return c.json({
419
442
  ok: true,
420
- ...result
443
+ ...result,
444
+ items: result.items.map((project) => enrichProjectWorkspace(service, project))
421
445
  });
422
446
  });
423
447
  authenticated.get("/api/projects/suggestions", async (c) => {
@@ -523,7 +547,7 @@ function registerProjectsRoutes(authenticated, deps) {
523
547
  return c.json({
524
548
  ok: true,
525
549
  overview: {
526
- project,
550
+ project: enrichProjectWorkspace(service, project),
527
551
  stats: {
528
552
  sessionCount: project.sessionCount,
529
553
  goalCount: project.goalCount,
@@ -547,6 +571,22 @@ function registerProjectsRoutes(authenticated, deps) {
547
571
  }
548
572
  });
549
573
  });
574
+ authenticated.get("/api/projects/:id/activity", (c) => {
575
+ const project = service.projects.get(c.req.param("id"));
576
+ if (!project) return c.json({
577
+ ok: false,
578
+ error: "Project not found"
579
+ }, 404);
580
+ const result = activity.listForProject({
581
+ projectId: project.id,
582
+ includeRelated: parseActivityIncludeRelated(c.req.query("includeRelated")),
583
+ ...parseActivityQuery(c)
584
+ });
585
+ return c.json({
586
+ ok: true,
587
+ ...result
588
+ });
589
+ });
550
590
  authenticated.get("/api/projects/:id/work-items", async (c) => {
551
591
  const project = service.projects.get(c.req.param("id"));
552
592
  if (!project) return c.json({
@@ -928,6 +968,15 @@ function registerProjectsRoutes(authenticated, deps) {
928
968
  ok: false,
929
969
  error: "Project not found"
930
970
  }, 404);
971
+ const attachments = await workItems.snapshotAttachmentsForGoal(item.id);
972
+ if (!attachments) return c.json({
973
+ ok: false,
974
+ error: "Work item not found"
975
+ }, 404);
976
+ const context = await buildWorkItemAgentContext(item, {
977
+ attachments,
978
+ includeImages: false
979
+ });
931
980
  const goal = goals.create({
932
981
  title: item.title,
933
982
  description: item.description || item.nextAction,
@@ -937,10 +986,11 @@ function registerProjectsRoutes(authenticated, deps) {
937
986
  source: "api",
938
987
  config: service.currentConfig
939
988
  });
940
- goals.setContextMessage({
989
+ const goalWithContext = goals.setContextMessage({
941
990
  goalId: goal.id,
942
- text: buildWorkItemAgentContext(item).text
943
- });
991
+ text: context.text,
992
+ attachments
993
+ }) ?? goal;
944
994
  workItems.addLink(item.id, {
945
995
  kind: "goal",
946
996
  targetId: goal.id,
@@ -950,7 +1000,7 @@ function registerProjectsRoutes(authenticated, deps) {
950
1000
  const updated = item.status === "todo" || item.status === "backlog" ? workItems.updateWorkItem(item.id, { status: "in_progress" }) : workItems.getWorkItem(item.id);
951
1001
  return c.json({
952
1002
  ok: true,
953
- goal,
1003
+ goal: goalWithContext,
954
1004
  item: updated
955
1005
  }, 201);
956
1006
  });
@@ -1044,7 +1094,7 @@ function registerProjectsRoutes(authenticated, deps) {
1044
1094
  }, 404);
1045
1095
  return c.json({
1046
1096
  ok: true,
1047
- project
1097
+ project: enrichProjectWorkspace(service, project)
1048
1098
  });
1049
1099
  });
1050
1100
  authenticated.patch("/api/projects/:id", async (c) => {
@@ -1069,7 +1119,7 @@ function registerProjectsRoutes(authenticated, deps) {
1069
1119
  });
1070
1120
  return c.json({
1071
1121
  ok: true,
1072
- project
1122
+ project: enrichProjectWorkspace(service, project)
1073
1123
  });
1074
1124
  } catch (error) {
1075
1125
  if (error instanceof ProjectWorkspaceConflictError) return c.json({