@xopcai/xopc 0.0.123 → 0.0.125

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 (436) hide show
  1. package/README.md +28 -11
  2. package/README.zh-CN.md +28 -11
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/Combination-BzaXOLd9.js +41 -0
  6. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Bicr3ZBg.js → agent-avatar-dicebear-BKDKICZV.js} +1 -1
  7. package/dist/gateway/static/root/assets/agents-BnTB7-c5.js +2 -0
  8. package/dist/gateway/static/root/assets/app-management-settings-panel-DI4BqHKW.js +1 -0
  9. package/dist/gateway/static/root/assets/appearance-settings-6_ie3NQ4.js +1 -0
  10. package/dist/gateway/static/root/assets/apps-page-B6bG65SW.js +1 -0
  11. package/dist/gateway/static/root/assets/{archive-plugin-Bpy64GjU.js → archive-plugin-kUHEJ1HK.js} +1 -1
  12. package/dist/gateway/static/root/assets/{attachment-load-DMkp4xSb.js → attachment-load-Dm-9prpU.js} +1 -1
  13. package/dist/gateway/static/root/assets/automation-suggestion-card-OTxQTPnC.js +1 -0
  14. package/dist/gateway/static/root/assets/automations-page-1lVbo0dS.js +1 -0
  15. package/dist/gateway/static/root/assets/{binary-plugins-DA9C5mCw.js → binary-plugins-DllA_jQ0.js} +1 -1
  16. package/dist/gateway/static/root/assets/{block-editor-CiSXk_YC.js → block-editor-Cm6CWNj1.js} +5 -5
  17. package/dist/gateway/static/root/assets/browser-settings-page-CzDBlOK0.js +8 -0
  18. package/dist/gateway/static/root/assets/capability-presets-api-VJ89b6I2.js +1 -0
  19. package/dist/gateway/static/root/assets/capability-presets-settings-panel-BaPj8wC2.js +1 -0
  20. package/dist/gateway/static/root/assets/{channel-recipient-api-CDhrhfhN.js → channel-recipient-api-B5PwBEUx.js} +1 -1
  21. package/dist/gateway/static/root/assets/channels-settings-Df4m7p1k.js +1 -0
  22. package/dist/gateway/static/root/assets/code-editor-gbRgS14t.js +1 -0
  23. package/dist/gateway/static/root/assets/connectors-page-BMTphmHS.js +2 -0
  24. package/dist/gateway/static/root/assets/{directory-picker-path-field-7jKfbH0J.js → directory-picker-path-field-DySMzOF6.js} +1 -1
  25. package/dist/gateway/static/root/assets/dist-By6Rh2ee.js +1 -0
  26. package/dist/gateway/static/root/assets/dist-CkobR7mk.js +1 -0
  27. package/dist/gateway/static/root/assets/dist-DokQNVMQ.js +1 -0
  28. package/dist/gateway/static/root/assets/dreaming-settings-D_AjSnV_.js +3 -0
  29. package/dist/gateway/static/root/assets/extension-debug-page-BaM0FpW7.js +1 -0
  30. package/dist/gateway/static/root/assets/extension-page-DuZWVOGA.js +1 -0
  31. package/dist/gateway/static/root/assets/extension-settings-page-DarVtbmJ.js +1 -0
  32. package/dist/gateway/static/root/assets/{fetch-Dtpbbe0s.js → fetch-NFKfkqrd.js} +1 -1
  33. package/dist/gateway/static/root/assets/{gateway-config-api-BN6pyX2c.js → gateway-config-api-CFEm9rgy.js} +1 -1
  34. package/dist/gateway/static/root/assets/gateway-settings-BMk2S5td.js +1 -0
  35. package/dist/gateway/static/root/assets/{gateway-startup-retry-BIET2x3y.js → gateway-startup-retry-Dtwh_yGg.js} +1 -1
  36. package/dist/gateway/static/root/assets/goal-create-dialog-BKP7ylcG.js +1 -0
  37. package/dist/gateway/static/root/assets/goal-detail-page-C2cTxf71.js +1 -0
  38. package/dist/gateway/static/root/assets/{goals-config-api-CQm2r1Ty.js → goals-config-api-DTWZNA_Y.js} +1 -1
  39. package/dist/gateway/static/root/assets/goals-page-CTmA3hWK.js +2 -0
  40. package/dist/gateway/static/root/assets/goals-settings-Bhct0ZT-.js +1 -0
  41. package/dist/gateway/static/root/assets/heartbeat-settings-C-UxSU4a.js +1 -0
  42. package/dist/gateway/static/root/assets/{html-workspace-editor-CQLWDiwE.js → html-workspace-editor-DV90ddkE.js} +1 -1
  43. package/dist/gateway/static/root/assets/index-BNHDd2j1.css +1 -0
  44. package/dist/gateway/static/root/assets/index-BPXLPMuY.js +193 -0
  45. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-DCjy2y4d.js +1 -0
  46. package/dist/gateway/static/root/assets/logs-page-CGc3_CQU.js +2 -0
  47. package/dist/gateway/static/root/assets/{markdown-editor-AssmZFx4.js → markdown-editor-BFOjBBla.js} +2 -2
  48. package/dist/gateway/static/root/assets/markdown-split-BaqxP-GQ.js +1 -0
  49. package/dist/gateway/static/root/assets/{media-plugins-DS44pJzr.js → media-plugins-DQ_EXloK.js} +1 -1
  50. package/dist/gateway/static/root/assets/messages-CjuIJcZl.js +3 -0
  51. package/dist/gateway/static/root/assets/models-hub-panel-Drz4UQMb.js +2 -0
  52. package/dist/gateway/static/root/assets/notes-page-CY1ylng1.js +1 -0
  53. package/dist/gateway/static/root/assets/notes-workbench-X7IaD--t.js +2 -0
  54. package/dist/gateway/static/root/assets/page-tabs-EIZhLppK.js +1 -0
  55. package/dist/gateway/static/root/assets/{preview-open-alternatives-Dej6zHnr.js → preview-open-alternatives-r_uB4Epr.js} +1 -1
  56. package/dist/gateway/static/root/assets/project-detail-page-DE5adRBE.js +1 -0
  57. package/dist/gateway/static/root/assets/projects-page-CuOb1k6F.js +1 -0
  58. package/dist/gateway/static/root/assets/remote-access-hub-BOxNrUVA.js +1 -0
  59. package/dist/gateway/static/root/assets/{save-bar-controls-Zu1FzH6z.js → save-bar-controls-B132Uf-2.js} +1 -1
  60. package/dist/gateway/static/root/assets/{schedule-field-BW78mKc0.js → schedule-field-B5qshALm.js} +1 -1
  61. package/dist/gateway/static/root/assets/{schema-form-Cc-IOydE.js → schema-form-CvLmkdS9.js} +1 -1
  62. package/dist/gateway/static/root/assets/sessions-page-CY0IQcGW.js +1 -0
  63. package/dist/gateway/static/root/assets/settings-advanced-gate-D4NBNVCB.js +1 -0
  64. package/dist/gateway/static/root/assets/{settings-collapsible-section-DIpIYht_.js → settings-collapsible-section-pRlvqsAf.js} +1 -1
  65. package/dist/gateway/static/root/assets/{settings-form-section-BFxBNxOG.js → settings-form-section-BBYUDLVd.js} +1 -1
  66. package/dist/gateway/static/root/assets/{settings-page-C4fivemT.js → settings-page-DaO7zYZM.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-page-layout-CLx4o2PN.js → settings-page-layout-D8g9PAek.js} +1 -1
  68. package/dist/gateway/static/root/assets/setup-status-panel-Bks0CLLT.js +1 -0
  69. package/dist/gateway/static/root/assets/{share-preview-page-ZswWCrDu.js → share-preview-page-v6-IOp8t.js} +1 -1
  70. package/dist/gateway/static/root/assets/shares-settings-CEZsKm9r.js +1 -0
  71. package/dist/gateway/static/root/assets/skill-reload-api-oTkHbb9W.js +1 -0
  72. package/dist/gateway/static/root/assets/skills-page-DigsbZ6K.js +2 -0
  73. package/dist/gateway/static/root/assets/{system-settings-panel-3ZNcGRhS.js → system-settings-panel-HUU2FFjM.js} +1 -1
  74. package/dist/gateway/static/root/assets/{typed-models-lib-bpzZjiVF.js → typed-models-lib-AH160QHh.js} +1 -1
  75. package/dist/gateway/static/root/assets/{use-channel-catalog-BCjZLZ3O.js → use-channel-catalog-BXzDmjCQ.js} +1 -1
  76. package/dist/gateway/static/root/assets/{user-profile-settings-panel-CIXafITi.js → user-profile-settings-panel-DxwnQvQ3.js} +1 -1
  77. package/dist/gateway/static/root/assets/{utils-DXMtz5j_.js → utils-i5POEtqd.js} +1 -1
  78. package/dist/gateway/static/root/assets/{vendor-codemirror-CNP1wPe7.js → vendor-codemirror-BvNgyE1Q.js} +1 -1
  79. package/dist/gateway/static/root/assets/voice-api-key-field-CEJklEgb.js +1 -0
  80. package/dist/gateway/static/root/assets/work-item-detail-page-CD6FL_Rs.js +1 -0
  81. package/dist/gateway/static/root/assets/workflow-run-setup-panel-ClVVMgN-.js +3 -0
  82. package/dist/gateway/static/root/assets/{workflow-start-dialog-B4sZpTDQ.js → workflow-start-dialog-Dv4ZA1T0.js} +1 -1
  83. package/dist/gateway/static/root/assets/workflows-page-OLQiUpoW.js +18 -0
  84. package/dist/gateway/static/root/index.html +8 -7
  85. package/dist/package.js +1 -1
  86. package/dist/src/agent/agent-manager.d.ts +6 -1
  87. package/dist/src/agent/agent-manager.js +34 -14
  88. package/dist/src/agent/agent-manager.js.map +1 -1
  89. package/dist/src/agent/child-agent-factory.d.ts +2 -0
  90. package/dist/src/agent/child-agent-factory.js +2 -0
  91. package/dist/src/agent/child-agent-factory.js.map +1 -1
  92. package/dist/src/agent/coding/index.d.ts +1 -0
  93. package/dist/src/agent/coding/index.js +2 -0
  94. package/dist/src/agent/coding/turn-diff-tracker.d.ts +67 -0
  95. package/dist/src/agent/coding/turn-diff-tracker.js +233 -0
  96. package/dist/src/agent/coding/turn-diff-tracker.js.map +1 -0
  97. package/dist/src/agent/context/workspace-templates/AGENTS.md +1 -1
  98. package/dist/src/agent/embedded/xopc-tools-bridge.js +11 -7
  99. package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
  100. package/dist/src/agent/lifecycle/progress.js +3 -1
  101. package/dist/src/agent/lifecycle/progress.js.map +1 -1
  102. package/dist/src/agent/lifecycle/timeout-wrapper.d.ts +2 -2
  103. package/dist/src/agent/lifecycle/timeout-wrapper.js +4 -4
  104. package/dist/src/agent/lifecycle/timeout-wrapper.js.map +1 -1
  105. package/dist/src/agent/memory/dreaming/config.d.ts +2 -2
  106. package/dist/src/agent/memory/dreaming/config.js +3 -3
  107. package/dist/src/agent/memory/dreaming/config.js.map +1 -1
  108. package/dist/src/agent/memory/dreaming/constants.d.ts +1 -1
  109. package/dist/src/agent/memory/dreaming/constants.js +1 -1
  110. package/dist/src/agent/memory/dreaming/constants.js.map +1 -1
  111. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +1 -0
  112. package/dist/src/agent/memory/dreaming/deep-promotion.js +11 -20
  113. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -1
  114. package/dist/src/agent/memory/dreaming/events.d.ts +3 -3
  115. package/dist/src/agent/memory/dreaming/events.js +6 -6
  116. package/dist/src/agent/memory/dreaming/events.js.map +1 -1
  117. package/dist/src/agent/memory/dreaming/last-run.d.ts +2 -2
  118. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  119. package/dist/src/agent/memory/dreaming/last-run.js.map +1 -1
  120. package/dist/src/agent/memory/dreaming/light-sweep.d.ts +1 -1
  121. package/dist/src/agent/memory/dreaming/light-sweep.js +3 -3
  122. package/dist/src/agent/memory/dreaming/light-sweep.js.map +1 -1
  123. package/dist/src/agent/memory/dreaming/preview.d.ts +1 -0
  124. package/dist/src/agent/memory/dreaming/preview.js +2 -2
  125. package/dist/src/agent/memory/dreaming/preview.js.map +1 -1
  126. package/dist/src/agent/memory/dreaming/rem-patterns.d.ts +1 -1
  127. package/dist/src/agent/memory/dreaming/rem-patterns.js +13 -13
  128. package/dist/src/agent/memory/dreaming/rem-patterns.js.map +1 -1
  129. package/dist/src/agent/memory/dreaming/scope.d.ts +14 -0
  130. package/dist/src/agent/memory/dreaming/scope.js +27 -0
  131. package/dist/src/agent/memory/dreaming/scope.js.map +1 -0
  132. package/dist/src/agent/memory/dreaming/short-term-store.d.ts +4 -4
  133. package/dist/src/agent/memory/dreaming/short-term-store.js +17 -17
  134. package/dist/src/agent/memory/dreaming/short-term-store.js.map +1 -1
  135. package/dist/src/agent/memory/summary-generator.d.ts +1 -1
  136. package/dist/src/agent/memory/summary-generator.js +1 -2
  137. package/dist/src/agent/memory/summary-generator.js.map +1 -1
  138. package/dist/src/agent/middleware/index.d.ts +1 -1
  139. package/dist/src/agent/middleware/self-verify.d.ts +44 -14
  140. package/dist/src/agent/middleware/self-verify.js +214 -44
  141. package/dist/src/agent/middleware/self-verify.js.map +1 -1
  142. package/dist/src/agent/orchestration/agent-event-handler.d.ts +2 -0
  143. package/dist/src/agent/orchestration/agent-event-handler.js +69 -14
  144. package/dist/src/agent/orchestration/agent-event-handler.js.map +1 -1
  145. package/dist/src/agent/orchestration/agent-orchestrator.js +22 -12
  146. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  147. package/dist/src/agent/prompt/sections/tooling.js +18 -13
  148. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  149. package/dist/src/agent/prompt/system-reminder.js +2 -2
  150. package/dist/src/agent/prompt/system-reminder.js.map +1 -1
  151. package/dist/src/agent/sandbox/command-validator.js +12 -0
  152. package/dist/src/agent/sandbox/command-validator.js.map +1 -1
  153. package/dist/src/agent/sandbox/sanitize-env-vars.d.ts +2 -2
  154. package/dist/src/agent/sandbox/sanitize-env-vars.js +2 -2
  155. package/dist/src/agent/sandbox/sanitize-env-vars.js.map +1 -1
  156. package/dist/src/agent/sandbox/types.d.ts +2 -2
  157. package/dist/src/agent/sandbox/types.js.map +1 -1
  158. package/dist/src/agent/service/btw-query.js +1 -1
  159. package/dist/src/agent/service/btw-query.js.map +1 -1
  160. package/dist/src/agent/service/process-direct-one-shot.js +6 -2
  161. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
  162. package/dist/src/agent/service/process-direct-streaming.js +12 -7
  163. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  164. package/dist/src/agent/service.d.ts +2 -1
  165. package/dist/src/agent/service.js +19 -6
  166. package/dist/src/agent/service.js.map +1 -1
  167. package/dist/src/agent/session/session-inspector.d.ts +5 -3
  168. package/dist/src/agent/session/session-inspector.js +16 -7
  169. package/dist/src/agent/session/session-inspector.js.map +1 -1
  170. package/dist/src/agent/skills/skill-tool-gating.js +1 -1
  171. package/dist/src/agent/skills/skill-tool-gating.js.map +1 -1
  172. package/dist/src/agent/source-context/types.d.ts +1 -1
  173. package/dist/src/agent/source-context/types.js +1 -1
  174. package/dist/src/agent/source-context/types.js.map +1 -1
  175. package/dist/src/agent/starter-agents.js +9 -9
  176. package/dist/src/agent/starter-agents.js.map +1 -1
  177. package/dist/src/agent/tools/apply-patch.d.ts +25 -0
  178. package/dist/src/agent/tools/apply-patch.js +310 -0
  179. package/dist/src/agent/tools/apply-patch.js.map +1 -0
  180. package/dist/src/agent/tools/concurrency.d.ts +8 -0
  181. package/dist/src/agent/tools/concurrency.js +31 -0
  182. package/dist/src/agent/tools/concurrency.js.map +1 -0
  183. package/dist/src/agent/tools/delegate-tool.d.ts +1 -1
  184. package/dist/src/agent/tools/delegate-tool.js +3 -3
  185. package/dist/src/agent/tools/delegate-tool.js.map +1 -1
  186. package/dist/src/agent/tools/dreaming-tool.d.ts +2 -0
  187. package/dist/src/agent/tools/dreaming-tool.js +13 -10
  188. package/dist/src/agent/tools/dreaming-tool.js.map +1 -1
  189. package/dist/src/agent/tools/exec-command.d.ts +30 -0
  190. package/dist/src/agent/tools/exec-command.js +228 -0
  191. package/dist/src/agent/tools/exec-command.js.map +1 -0
  192. package/dist/src/agent/tools/execute-code-tool.js +7 -4
  193. package/dist/src/agent/tools/execute-code-tool.js.map +1 -1
  194. package/dist/src/agent/tools/executor.d.ts +6 -4
  195. package/dist/src/agent/tools/executor.js +7 -4
  196. package/dist/src/agent/tools/executor.js.map +1 -1
  197. package/dist/src/agent/tools/factory.d.ts +6 -3
  198. package/dist/src/agent/tools/factory.js +14 -9
  199. package/dist/src/agent/tools/factory.js.map +1 -1
  200. package/dist/src/agent/tools/find.js +2 -0
  201. package/dist/src/agent/tools/find.js.map +1 -1
  202. package/dist/src/agent/tools/grep.js +2 -0
  203. package/dist/src/agent/tools/grep.js.map +1 -1
  204. package/dist/src/agent/tools/index.d.ts +5 -2
  205. package/dist/src/agent/tools/index.js +7 -4
  206. package/dist/src/agent/tools/list-dir.js +2 -0
  207. package/dist/src/agent/tools/list-dir.js.map +1 -1
  208. package/dist/src/agent/tools/memory-tool.d.ts +1 -0
  209. package/dist/src/agent/tools/memory-tool.js +2 -2
  210. package/dist/src/agent/tools/memory-tool.js.map +1 -1
  211. package/dist/src/agent/tools/metadata.d.ts +15 -0
  212. package/dist/src/agent/tools/metadata.js +26 -0
  213. package/dist/src/agent/tools/metadata.js.map +1 -0
  214. package/dist/src/agent/tools/read.js +2 -0
  215. package/dist/src/agent/tools/read.js.map +1 -1
  216. package/dist/src/agent/tools/skills-tools.d.ts +1 -1
  217. package/dist/src/agent/tools/skills-tools.js.map +1 -1
  218. package/dist/src/agent/tools/update-plan-tool.d.ts +11 -0
  219. package/dist/src/agent/tools/update-plan-tool.js +72 -0
  220. package/dist/src/agent/tools/update-plan-tool.js.map +1 -0
  221. package/dist/src/agent/tools/write.js +6 -0
  222. package/dist/src/agent/tools/write.js.map +1 -1
  223. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +1 -1
  224. package/dist/src/agent/workflow/builtins/debug-incident.js +1 -1
  225. package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -1
  226. package/dist/src/agent/workflow/builtins/pr-review.d.ts +1 -1
  227. package/dist/src/agent/workflow/builtins/pr-review.js +1 -1
  228. package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -1
  229. package/dist/src/agent/workflow/builtins/release-check.d.ts +1 -1
  230. package/dist/src/agent/workflow/builtins/release-check.js +1 -1
  231. package/dist/src/agent/workflow/builtins/release-check.js.map +1 -1
  232. package/dist/src/agent/workflow/step-labels.js +7 -3
  233. package/dist/src/agent/workflow/step-labels.js.map +1 -1
  234. package/dist/src/agent/workflow/subagent-runner.d.ts +1 -0
  235. package/dist/src/agent/workflow/subagent-runner.js +5 -1
  236. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  237. package/dist/src/agent/workflow/workflow-child-tools.js +5 -0
  238. package/dist/src/agent/workflow/workflow-child-tools.js.map +1 -1
  239. package/dist/src/chat-commands/agent-edit.js +1 -1
  240. package/dist/src/chat-commands/agent-edit.js.map +1 -1
  241. package/dist/src/chat-commands/builtins/review.d.ts +1 -0
  242. package/dist/src/chat-commands/builtins/review.js +167 -0
  243. package/dist/src/chat-commands/builtins/review.js.map +1 -0
  244. package/dist/src/chat-commands/index.d.ts +1 -0
  245. package/dist/src/chat-commands/index.js +3 -1
  246. package/dist/src/chat-commands/index.js.map +1 -1
  247. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  248. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  249. package/dist/src/connectors/health.d.ts +2 -1
  250. package/dist/src/connectors/health.js +59 -1
  251. package/dist/src/connectors/health.js.map +1 -1
  252. package/dist/src/connectors/install.d.ts +1 -0
  253. package/dist/src/connectors/install.js +28 -1
  254. package/dist/src/connectors/install.js.map +1 -1
  255. package/dist/src/connectors/instances.js +7 -0
  256. package/dist/src/connectors/instances.js.map +1 -1
  257. package/dist/src/connectors/materialize.js +2 -1
  258. package/dist/src/connectors/materialize.js.map +1 -1
  259. package/dist/src/connectors/registries/modelscope.js +38 -13
  260. package/dist/src/connectors/registries/modelscope.js.map +1 -1
  261. package/dist/src/connectors/types.d.ts +2 -0
  262. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  263. package/dist/src/gateway/agent-builtin-tools.js +3 -2
  264. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  265. package/dist/src/gateway/chat-stream/mapper.d.ts +6 -0
  266. package/dist/src/gateway/chat-stream/mapper.js +149 -6
  267. package/dist/src/gateway/chat-stream/mapper.js.map +1 -1
  268. package/dist/src/gateway/chat-stream/protocol.d.ts +51 -1
  269. package/dist/src/gateway/dreaming-automation-reconciler.d.ts +1 -0
  270. package/dist/src/gateway/dreaming-automation-reconciler.js +62 -42
  271. package/dist/src/gateway/dreaming-automation-reconciler.js.map +1 -1
  272. package/dist/src/gateway/hono/app.js +7 -1
  273. package/dist/src/gateway/hono/app.js.map +1 -1
  274. package/dist/src/gateway/hono/routes/commands-skills.js +21 -0
  275. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  276. package/dist/src/gateway/hono/routes/connectors.js +46 -2
  277. package/dist/src/gateway/hono/routes/connectors.js.map +1 -1
  278. package/dist/src/gateway/hono/routes/dreaming.js +111 -66
  279. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -1
  280. package/dist/src/gateway/hono/routes/index.js +2 -0
  281. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  282. package/dist/src/gateway/hono/routes/lazy-bundles.js +1 -0
  283. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  284. package/dist/src/gateway/hono/routes/projects.js +886 -45
  285. package/dist/src/gateway/hono/routes/projects.js.map +1 -1
  286. package/dist/src/gateway/hono/routes/search.d.ts +3 -0
  287. package/dist/src/gateway/hono/routes/search.js +47 -0
  288. package/dist/src/gateway/hono/routes/search.js.map +1 -0
  289. package/dist/src/gateway/hono/routes/sessions.js +1 -0
  290. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  291. package/dist/src/gateway/security/dangerous-tools.js +1 -1
  292. package/dist/src/gateway/security/dangerous-tools.js.map +1 -1
  293. package/dist/src/gateway/service.js +17 -8
  294. package/dist/src/gateway/service.js.map +1 -1
  295. package/dist/src/infra/update-restart.js +1 -1
  296. package/dist/src/mcp/channel-bridge.js +1 -1
  297. package/dist/src/media/store.js +1 -1
  298. package/dist/src/media/store.js.map +1 -1
  299. package/dist/src/media/types.d.ts +1 -1
  300. package/dist/src/media/uri.js +2 -1
  301. package/dist/src/media/uri.js.map +1 -1
  302. package/dist/src/projects/index.d.ts +2 -0
  303. package/dist/src/projects/index.js +3 -1
  304. package/dist/src/projects/project-agent-suggestion.d.ts +14 -0
  305. package/dist/src/projects/project-agent-suggestion.js +19 -0
  306. package/dist/src/projects/project-agent-suggestion.js.map +1 -0
  307. package/dist/src/projects/project-kind.d.ts +13 -0
  308. package/dist/src/projects/project-kind.js +147 -0
  309. package/dist/src/projects/project-kind.js.map +1 -0
  310. package/dist/src/projects/project-service.d.ts +1 -0
  311. package/dist/src/projects/project-service.js +1 -1
  312. package/dist/src/projects/project-service.js.map +1 -1
  313. package/dist/src/projects/project-store.js +32 -8
  314. package/dist/src/projects/project-store.js.map +1 -1
  315. package/dist/src/projects/types.d.ts +1 -0
  316. package/dist/src/review/review-git.d.ts +48 -0
  317. package/dist/src/review/review-git.js +333 -0
  318. package/dist/src/review/review-git.js.map +1 -0
  319. package/dist/src/review/review-types.d.ts +22 -0
  320. package/dist/src/review/review-types.js +29 -0
  321. package/dist/src/review/review-types.js.map +1 -0
  322. package/dist/src/session/session-context-for-llm.d.ts +2 -0
  323. package/dist/src/session/session-context-for-llm.js +165 -1
  324. package/dist/src/session/session-context-for-llm.js.map +1 -1
  325. package/dist/src/session/store.js +2 -2
  326. package/dist/src/session/store.js.map +1 -1
  327. package/dist/src/storage/sqlite/migrations/021_projects_fts.sql +21 -0
  328. package/dist/src/storage/sqlite/migrations/022_work_items.sql +61 -0
  329. package/dist/src/storage/sqlite/migrations/023_work_item_attachments.sql +15 -0
  330. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  331. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  332. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  333. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  334. package/dist/src/storage/sqlite/schema.js +1 -1
  335. package/dist/src/storage/sqlite/schema.sql +78 -0
  336. package/dist/src/tui/backends/embedded-backend.d.ts +1 -0
  337. package/dist/src/tui/backends/embedded-backend.js +20 -0
  338. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  339. package/dist/src/tui/backends/gateway-sse-backend.d.ts +2 -0
  340. package/dist/src/tui/backends/gateway-sse-backend.js +7 -0
  341. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  342. package/dist/src/tui/components/assistant-message.js +47 -2
  343. package/dist/src/tui/components/assistant-message.js.map +1 -1
  344. package/dist/src/tui/components/tool-execution.d.ts +8 -0
  345. package/dist/src/tui/components/tool-execution.js +87 -77
  346. package/dist/src/tui/components/tool-execution.js.map +1 -1
  347. package/dist/src/tui/components/visual-truncate.d.ts +1 -0
  348. package/dist/src/tui/components/visual-truncate.js +28 -1
  349. package/dist/src/tui/components/visual-truncate.js.map +1 -1
  350. package/dist/src/tui/tool-summary.d.ts +22 -0
  351. package/dist/src/tui/tool-summary.js +212 -0
  352. package/dist/src/tui/tool-summary.js.map +1 -0
  353. package/dist/src/tui/tui-agent-events.js +25 -0
  354. package/dist/src/tui/tui-agent-events.js.map +1 -1
  355. package/dist/src/tui/tui-backend.d.ts +4 -0
  356. package/dist/src/tui/tui-commands.d.ts +1 -0
  357. package/dist/src/tui/tui-commands.js +110 -4
  358. package/dist/src/tui/tui-commands.js.map +1 -1
  359. package/dist/src/tui/tui-picker-overlay.d.ts +2 -0
  360. package/dist/src/tui/tui-picker-overlay.js +153 -1
  361. package/dist/src/tui/tui-picker-overlay.js.map +1 -1
  362. package/dist/src/tui/tui-tool-diff.d.ts +15 -0
  363. package/dist/src/tui/tui-tool-diff.js +178 -7
  364. package/dist/src/tui/tui-tool-diff.js.map +1 -1
  365. package/dist/src/tui/tui.js +16 -3
  366. package/dist/src/tui/tui.js.map +1 -1
  367. package/dist/src/work-items/agent-context.d.ts +3 -0
  368. package/dist/src/work-items/agent-context.js +39 -0
  369. package/dist/src/work-items/agent-context.js.map +1 -0
  370. package/dist/src/work-items/index.d.ts +4 -0
  371. package/dist/src/work-items/index.js +4 -0
  372. package/dist/src/work-items/types.d.ts +112 -0
  373. package/dist/src/work-items/types.js +1 -0
  374. package/dist/src/work-items/work-item-service.d.ts +33 -0
  375. package/dist/src/work-items/work-item-service.js +180 -0
  376. package/dist/src/work-items/work-item-service.js.map +1 -0
  377. package/dist/src/work-items/work-item-store.d.ts +21 -0
  378. package/dist/src/work-items/work-item-store.js +302 -0
  379. package/dist/src/work-items/work-item-store.js.map +1 -0
  380. package/dist/src/workflows/service/workflow-run-service.js +4 -3
  381. package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
  382. package/dist/src/workflows/service/workflow-session-bridge.js +3 -0
  383. package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
  384. package/package.json +1 -1
  385. package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +0 -41
  386. package/dist/gateway/static/root/assets/agents-CxDSFHGx.js +0 -2
  387. package/dist/gateway/static/root/assets/app-management-settings-panel-CbEy9sR1.js +0 -1
  388. package/dist/gateway/static/root/assets/appearance-settings-CTHja6n9.js +0 -1
  389. package/dist/gateway/static/root/assets/apps-page-CyZdgqvm.js +0 -1
  390. package/dist/gateway/static/root/assets/automation-suggestion-card-KnYaP7NT.js +0 -1
  391. package/dist/gateway/static/root/assets/automations-page-8VLKM4au.js +0 -1
  392. package/dist/gateway/static/root/assets/browser-settings-page-5tPg0DcP.js +0 -8
  393. package/dist/gateway/static/root/assets/capability-presets-api-CEJ44WCU.js +0 -1
  394. package/dist/gateway/static/root/assets/capability-presets-settings-panel-BJW3aVST.js +0 -1
  395. package/dist/gateway/static/root/assets/channels-settings-CorUCTrs.js +0 -1
  396. package/dist/gateway/static/root/assets/code-editor-dZTY2dRW.js +0 -1
  397. package/dist/gateway/static/root/assets/connectors-page-VKstC3sP.js +0 -2
  398. package/dist/gateway/static/root/assets/dist-Mys7eFJ5.js +0 -1
  399. package/dist/gateway/static/root/assets/dist-wO9a2_ID.js +0 -1
  400. package/dist/gateway/static/root/assets/dreaming-settings-m1-wmz4o.js +0 -1
  401. package/dist/gateway/static/root/assets/extension-debug-page-C9qQQrBS.js +0 -1
  402. package/dist/gateway/static/root/assets/extension-page-DcBBMEGl.js +0 -1
  403. package/dist/gateway/static/root/assets/extension-settings-page-BQ-jMMP9.js +0 -1
  404. package/dist/gateway/static/root/assets/gateway-settings-hQtgVmSR.js +0 -1
  405. package/dist/gateway/static/root/assets/goal-create-dialog-BuIMDx6C.js +0 -1
  406. package/dist/gateway/static/root/assets/goal-detail-page-FEypCq74.js +0 -1
  407. package/dist/gateway/static/root/assets/goals-page-C4-2_MLG.js +0 -2
  408. package/dist/gateway/static/root/assets/goals-settings-DDrdRMxB.js +0 -1
  409. package/dist/gateway/static/root/assets/heartbeat-settings-BJVok3Sl.js +0 -1
  410. package/dist/gateway/static/root/assets/index-CBDr5xjB.css +0 -1
  411. package/dist/gateway/static/root/assets/index-T0SaNd5a.js +0 -191
  412. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-C2TuQppb.js +0 -1
  413. package/dist/gateway/static/root/assets/logs-page-DwkwPgid.js +0 -2
  414. package/dist/gateway/static/root/assets/markdown-split-DhONQ81k.js +0 -1
  415. package/dist/gateway/static/root/assets/messages-avfvyZuQ.js +0 -3
  416. package/dist/gateway/static/root/assets/models-hub-panel-huNY4A1G.js +0 -2
  417. package/dist/gateway/static/root/assets/notes-page-DdfGuEZ1.js +0 -1
  418. package/dist/gateway/static/root/assets/notes-workbench-B0bT9Hqa.js +0 -2
  419. package/dist/gateway/static/root/assets/project-detail-page-CjxhPorG.js +0 -1
  420. package/dist/gateway/static/root/assets/projects-page-C4Z5OJMF.js +0 -1
  421. package/dist/gateway/static/root/assets/remote-access-hub-CVCOPUVd.js +0 -1
  422. package/dist/gateway/static/root/assets/sessions-page-B4qExXHC.js +0 -1
  423. package/dist/gateway/static/root/assets/settings-advanced-gate-Ce8yLTBi.js +0 -1
  424. package/dist/gateway/static/root/assets/setup-status-panel-Kyc4eUf0.js +0 -1
  425. package/dist/gateway/static/root/assets/shares-settings-Bu76CMiC.js +0 -1
  426. package/dist/gateway/static/root/assets/skill-reload-api-D-CFg86j.js +0 -1
  427. package/dist/gateway/static/root/assets/skills-page-CUU4f6Ss.js +0 -2
  428. package/dist/gateway/static/root/assets/voice-api-key-field-C1MrQD8R.js +0 -1
  429. package/dist/gateway/static/root/assets/workflow-run-setup-panel-DqizIcY5.js +0 -3
  430. package/dist/gateway/static/root/assets/workflows-page-B3sVNPFk.js +0 -18
  431. package/dist/src/agent/tools/edit.d.ts +0 -14
  432. package/dist/src/agent/tools/edit.js +0 -132
  433. package/dist/src/agent/tools/edit.js.map +0 -1
  434. package/dist/src/agent/tools/shell.d.ts +0 -15
  435. package/dist/src/agent/tools/shell.js +0 -158
  436. package/dist/src/agent/tools/shell.js.map +0 -1
@@ -0,0 +1,3 @@
1
+ import type { AgentSourceContext } from '../agent/source-context/types.js';
2
+ import type { WorkItem } from './types.js';
3
+ export declare function buildWorkItemAgentContext(item: WorkItem): AgentSourceContext;
@@ -0,0 +1,39 @@
1
+ //#region src/work-items/agent-context.ts
2
+ function contextLine(label, value) {
3
+ if (value === void 0 || value === null) return null;
4
+ const text = String(value).trim();
5
+ return text ? `${label}: ${text}` : null;
6
+ }
7
+ function buildWorkItemAgentContext(item) {
8
+ const links = item.links?.length ? item.links.slice(0, 12).map((link) => `- ${link.kind}: ${link.title || link.targetId}${link.statusSnapshot ? ` (${link.statusSnapshot})` : ""}`).join("\n") : "";
9
+ const attachments = item.attachments?.length ? item.attachments.slice(0, 12).map((attachment) => `- ${attachment.fileName} (${attachment.mimeType}, ${attachment.size} bytes)`).join("\n") : "";
10
+ const text = [
11
+ "You are working inside a project work item. Treat this as the active task context, not as a new user message.",
12
+ "",
13
+ contextLine("Work item id", item.id),
14
+ contextLine("Project id", item.projectId),
15
+ contextLine("Title", item.title),
16
+ contextLine("Status", item.status),
17
+ contextLine("Priority", item.priority),
18
+ contextLine("Owner agent", item.ownerAgentId),
19
+ contextLine("Description", item.description),
20
+ contextLine("Next action", item.nextAction),
21
+ contextLine("Blocked reason", item.blockedReason),
22
+ item.dueAt ? contextLine("Due at", new Date(item.dueAt).toISOString()) : null,
23
+ links ? `Linked executions:\n${links}` : null,
24
+ attachments ? `Attachments:\n${attachments}` : null,
25
+ "",
26
+ "When you answer, keep the work item moving. If the discussion changes scope, call out the suggested work item update explicitly."
27
+ ].filter(Boolean).join("\n");
28
+ return {
29
+ kind: "work_item",
30
+ sourceId: item.id,
31
+ version: String(item.updatedAt),
32
+ title: item.title,
33
+ text
34
+ };
35
+ }
36
+ //#endregion
37
+ export { buildWorkItemAgentContext };
38
+
39
+ //# sourceMappingURL=agent-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-context.js","names":[],"sources":["../../../src/work-items/agent-context.ts"],"sourcesContent":["import type { AgentSourceContext } from '../agent/source-context/types.js';\n\nimport type { WorkItem } from './types.js';\n\nfunction contextLine(label: string, value: string | number | undefined | null): string | null {\n if (value === undefined || value === null) return null;\n const text = String(value).trim();\n return text ? `${label}: ${text}` : null;\n}\n\nexport function buildWorkItemAgentContext(item: WorkItem): AgentSourceContext {\n const links = item.links?.length\n ? item.links\n .slice(0, 12)\n .map((link) => `- ${link.kind}: ${link.title || link.targetId}${link.statusSnapshot ? ` (${link.statusSnapshot})` : ''}`)\n .join('\\n')\n : '';\n const attachments = item.attachments?.length\n ? item.attachments\n .slice(0, 12)\n .map((attachment) => `- ${attachment.fileName} (${attachment.mimeType}, ${attachment.size} bytes)`)\n .join('\\n')\n : '';\n const text = [\n 'You are working inside a project work item. Treat this as the active task context, not as a new user message.',\n '',\n contextLine('Work item id', item.id),\n contextLine('Project id', item.projectId),\n contextLine('Title', item.title),\n contextLine('Status', item.status),\n contextLine('Priority', item.priority),\n contextLine('Owner agent', item.ownerAgentId),\n contextLine('Description', item.description),\n contextLine('Next action', item.nextAction),\n contextLine('Blocked reason', item.blockedReason),\n item.dueAt ? contextLine('Due at', new Date(item.dueAt).toISOString()) : null,\n links ? `Linked executions:\\n${links}` : null,\n attachments ? `Attachments:\\n${attachments}` : null,\n '',\n 'When you answer, keep the work item moving. If the discussion changes scope, call out the suggested work item update explicitly.',\n ].filter(Boolean).join('\\n');\n\n return {\n kind: 'work_item',\n sourceId: item.id,\n version: String(item.updatedAt),\n title: item.title,\n text,\n };\n}\n"],"mappings":";AAIA,SAAS,YAAY,OAAe,OAA0D;AAC5F,KAAI,UAAU,KAAA,KAAa,UAAU,KAAM,QAAO;CAClD,MAAM,OAAO,OAAO,MAAM,CAAC,MAAM;AACjC,QAAO,OAAO,GAAG,MAAM,IAAI,SAAS;;AAGtC,SAAgB,0BAA0B,MAAoC;CAC5E,MAAM,QAAQ,KAAK,OAAO,SACtB,KAAK,MACJ,MAAM,GAAG,GAAG,CACZ,KAAK,SAAS,KAAK,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,WAAW,KAAK,iBAAiB,KAAK,KAAK,eAAe,KAAK,KAAK,CACxH,KAAK,KAAK,GACX;CACJ,MAAM,cAAc,KAAK,aAAa,SAClC,KAAK,YACJ,MAAM,GAAG,GAAG,CACZ,KAAK,eAAe,KAAK,WAAW,SAAS,IAAI,WAAW,SAAS,IAAI,WAAW,KAAK,SAAS,CAClG,KAAK,KAAK,GACX;CACJ,MAAM,OAAO;EACX;EACA;EACA,YAAY,gBAAgB,KAAK,GAAG;EACpC,YAAY,cAAc,KAAK,UAAU;EACzC,YAAY,SAAS,KAAK,MAAM;EAChC,YAAY,UAAU,KAAK,OAAO;EAClC,YAAY,YAAY,KAAK,SAAS;EACtC,YAAY,eAAe,KAAK,aAAa;EAC7C,YAAY,eAAe,KAAK,YAAY;EAC5C,YAAY,eAAe,KAAK,WAAW;EAC3C,YAAY,kBAAkB,KAAK,cAAc;EACjD,KAAK,QAAQ,YAAY,UAAU,IAAI,KAAK,KAAK,MAAM,CAAC,aAAa,CAAC,GAAG;EACzE,QAAQ,uBAAuB,UAAU;EACzC,cAAc,iBAAiB,gBAAgB;EAC/C;EACA;EACD,CAAC,OAAO,QAAQ,CAAC,KAAK,KAAK;AAE5B,QAAO;EACL,MAAM;EACN,UAAU,KAAK;EACf,SAAS,OAAO,KAAK,UAAU;EAC/B,OAAO,KAAK;EACZ;EACD"}
@@ -0,0 +1,4 @@
1
+ export { WorkItemService, WORK_ITEM_ATTACHMENT_MAX_BYTES, WORK_ITEM_ATTACHMENT_MAX_COUNT, WORK_ITEM_ATTACHMENT_UPLOAD_BODY_MAX_BYTES, } from './work-item-service.js';
2
+ export { WorkItemStore } from './work-item-store.js';
3
+ export { buildWorkItemAgentContext } from './agent-context.js';
4
+ export type * from './types.js';
@@ -0,0 +1,4 @@
1
+ import { WorkItemStore } from "./work-item-store.js";
2
+ import { WORK_ITEM_ATTACHMENT_MAX_BYTES, WORK_ITEM_ATTACHMENT_MAX_COUNT, WORK_ITEM_ATTACHMENT_UPLOAD_BODY_MAX_BYTES, WorkItemService } from "./work-item-service.js";
3
+ import { buildWorkItemAgentContext } from "./agent-context.js";
4
+ export { WORK_ITEM_ATTACHMENT_MAX_BYTES, WORK_ITEM_ATTACHMENT_MAX_COUNT, WORK_ITEM_ATTACHMENT_UPLOAD_BODY_MAX_BYTES, WorkItemService, WorkItemStore, buildWorkItemAgentContext };
@@ -0,0 +1,112 @@
1
+ export type WorkItemStatus = 'backlog' | 'todo' | 'in_progress' | 'blocked' | 'needs_input' | 'in_review' | 'done' | 'cancelled';
2
+ export type WorkItemPriority = 'urgent' | 'high' | 'normal' | 'low';
3
+ export type WorkItemLinkKind = 'chat' | 'goal' | 'workflow_run' | 'automation' | 'note';
4
+ export type WorkItemEventType = 'created' | 'updated' | 'status_changed' | 'archived' | 'attachment_added' | 'attachment_removed' | 'chat_started' | 'goal_created' | 'workflow_started' | 'automation_added' | 'link_added' | 'progress_note_added' | 'update_suggestion_created' | 'update_suggestion_applied' | 'update_suggestion_dismissed';
5
+ export type WorkItemUpdateSuggestionStatus = 'pending' | 'applied' | 'dismissed';
6
+ export type WorkItemUpdateSuggestionSourceKind = 'chat' | 'goal' | 'workflow_run' | 'automation';
7
+ export interface WorkItem {
8
+ id: string;
9
+ projectId: string;
10
+ title: string;
11
+ description?: string;
12
+ status: WorkItemStatus;
13
+ priority: WorkItemPriority;
14
+ ownerAgentId?: string;
15
+ nextAction?: string;
16
+ blockedReason?: string;
17
+ dueAt?: number;
18
+ completedAt?: number;
19
+ archivedAt?: number;
20
+ createdAt: number;
21
+ updatedAt: number;
22
+ links?: WorkItemLink[];
23
+ attachments?: WorkItemAttachment[];
24
+ }
25
+ export interface WorkItemAttachment {
26
+ id: string;
27
+ workItemId: string;
28
+ mediaUri: string;
29
+ mediaId: string;
30
+ bucket: string;
31
+ type: 'image' | 'audio' | 'video' | 'file';
32
+ mimeType: string;
33
+ fileName: string;
34
+ size: number;
35
+ createdAt: number;
36
+ }
37
+ export interface WorkItemLink {
38
+ id: string;
39
+ workItemId: string;
40
+ kind: WorkItemLinkKind;
41
+ targetId: string;
42
+ title?: string;
43
+ statusSnapshot?: string;
44
+ createdAt: number;
45
+ }
46
+ export interface WorkItemEvent {
47
+ id: string;
48
+ workItemId: string;
49
+ type: WorkItemEventType;
50
+ payload?: unknown;
51
+ createdAt: number;
52
+ }
53
+ export interface WorkItemUpdateSuggestion {
54
+ id: string;
55
+ workItemId: string;
56
+ sourceKind: WorkItemUpdateSuggestionSourceKind;
57
+ sourceId: string;
58
+ status: WorkItemUpdateSuggestionStatus;
59
+ patch: Pick<UpdateWorkItemInput, 'status' | 'nextAction' | 'blockedReason'>;
60
+ progressNote?: string;
61
+ rationale?: string;
62
+ confidence?: number;
63
+ createdAt: number;
64
+ appliedAt?: number;
65
+ dismissedAt?: number;
66
+ }
67
+ export interface CreateWorkItemUpdateSuggestionInput {
68
+ sourceKind: WorkItemUpdateSuggestionSourceKind;
69
+ sourceId: string;
70
+ patch?: Pick<UpdateWorkItemInput, 'status' | 'nextAction' | 'blockedReason'>;
71
+ progressNote?: string;
72
+ rationale?: string;
73
+ confidence?: number;
74
+ }
75
+ export interface WorkItemListQuery {
76
+ status?: WorkItemStatus | WorkItemStatus[];
77
+ priority?: WorkItemPriority | WorkItemPriority[];
78
+ includeArchived?: boolean;
79
+ search?: string;
80
+ sortBy?: 'updatedAt' | 'createdAt' | 'priority' | 'status';
81
+ sortOrder?: 'asc' | 'desc';
82
+ limit?: number;
83
+ offset?: number;
84
+ }
85
+ export interface WorkItemListResult {
86
+ items: WorkItem[];
87
+ total: number;
88
+ limit: number;
89
+ offset: number;
90
+ hasMore: boolean;
91
+ }
92
+ export interface CreateWorkItemInput {
93
+ title: string;
94
+ description?: string;
95
+ status?: WorkItemStatus;
96
+ priority?: WorkItemPriority;
97
+ ownerAgentId?: string;
98
+ nextAction?: string;
99
+ blockedReason?: string;
100
+ dueAt?: number;
101
+ }
102
+ export interface UpdateWorkItemInput {
103
+ title?: string;
104
+ description?: string | null;
105
+ status?: WorkItemStatus;
106
+ priority?: WorkItemPriority;
107
+ ownerAgentId?: string | null;
108
+ nextAction?: string | null;
109
+ blockedReason?: string | null;
110
+ dueAt?: number | null;
111
+ archivedAt?: number | null;
112
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import { WorkItemStore } from './work-item-store.js';
2
+ import type { CreateWorkItemUpdateSuggestionInput, CreateWorkItemInput, UpdateWorkItemInput, WorkItem, WorkItemAttachment, WorkItemEvent, WorkItemLink, WorkItemListQuery, WorkItemListResult, WorkItemUpdateSuggestion, WorkItemUpdateSuggestionStatus } from './types.js';
3
+ export declare const WORK_ITEM_ATTACHMENT_MAX_BYTES: number;
4
+ export declare const WORK_ITEM_ATTACHMENT_MAX_COUNT = 10;
5
+ export declare const WORK_ITEM_ATTACHMENT_UPLOAD_BODY_MAX_BYTES: number;
6
+ export declare class WorkItemService {
7
+ private readonly store;
8
+ constructor(store?: WorkItemStore);
9
+ listProjectWorkItems(projectId: string, query?: WorkItemListQuery): WorkItemListResult;
10
+ createProjectWorkItem(projectId: string, input: CreateWorkItemInput): WorkItem;
11
+ getWorkItem(id: string): WorkItem | null;
12
+ updateWorkItem(id: string, patch: UpdateWorkItemInput): WorkItem | null;
13
+ addLink(workItemId: string, input: Omit<WorkItemLink, 'id' | 'workItemId' | 'createdAt'>, eventType?: Parameters<WorkItemStore['addEvent']>[1]): WorkItemLink | null;
14
+ listEvents(workItemId: string): WorkItemEvent[];
15
+ listAttachments(workItemId: string): WorkItemAttachment[] | null;
16
+ addAttachment(workItemId: string, file: {
17
+ name: string;
18
+ buffer: Buffer;
19
+ mimeType: string;
20
+ }): Promise<WorkItemAttachment | null>;
21
+ readAttachment(workItemId: string, attachmentId: string): Promise<{
22
+ attachment: WorkItemAttachment;
23
+ buffer: Buffer;
24
+ } | null>;
25
+ removeAttachment(workItemId: string, attachmentId: string): Promise<WorkItemAttachment | null>;
26
+ createUpdateSuggestion(workItemId: string, input: CreateWorkItemUpdateSuggestionInput): WorkItemUpdateSuggestion | null;
27
+ listUpdateSuggestions(workItemId: string, status?: WorkItemUpdateSuggestionStatus): WorkItemUpdateSuggestion[];
28
+ applyUpdateSuggestion(id: string): {
29
+ item: WorkItem;
30
+ suggestion: WorkItemUpdateSuggestion;
31
+ } | null;
32
+ dismissUpdateSuggestion(id: string): WorkItemUpdateSuggestion | null;
33
+ }
@@ -0,0 +1,180 @@
1
+ import { deleteMediaBuffer, mimeTypeFromMediaPath, saveMediaBuffer } from "../media/store.js";
2
+ import { readMediaReference } from "../media/media-reference.js";
3
+ import { WorkItemStore } from "./work-item-store.js";
4
+ //#region src/work-items/work-item-service.ts
5
+ const WORK_ITEM_ATTACHMENT_MAX_BYTES = 25 * 1024 * 1024;
6
+ const WORK_ITEM_ATTACHMENT_MAX_COUNT = 10;
7
+ const WORK_ITEM_ATTACHMENT_UPLOAD_BODY_MAX_BYTES = WORK_ITEM_ATTACHMENT_MAX_BYTES * 10 + 1024 * 1024;
8
+ function inferAttachmentType(mimeType) {
9
+ if (mimeType.startsWith("image/")) return "image";
10
+ if (mimeType.startsWith("audio/")) return "audio";
11
+ if (mimeType.startsWith("video/")) return "video";
12
+ return "file";
13
+ }
14
+ var WorkItemService = class {
15
+ constructor(store = new WorkItemStore()) {
16
+ this.store = store;
17
+ }
18
+ listProjectWorkItems(projectId, query = {}) {
19
+ return this.store.list(projectId, query);
20
+ }
21
+ createProjectWorkItem(projectId, input) {
22
+ const item = this.store.create(projectId, input);
23
+ this.store.addEvent(item.id, "created", {
24
+ title: item.title,
25
+ status: item.status,
26
+ priority: item.priority
27
+ });
28
+ return {
29
+ ...item,
30
+ links: []
31
+ };
32
+ }
33
+ getWorkItem(id) {
34
+ return this.store.get(id);
35
+ }
36
+ updateWorkItem(id, patch) {
37
+ const before = this.store.get(id);
38
+ if (!before) return null;
39
+ const after = this.store.update(id, patch);
40
+ if (!after) return null;
41
+ if (before.status !== after.status) this.store.addEvent(id, "status_changed", {
42
+ from: before.status,
43
+ to: after.status
44
+ });
45
+ else this.store.addEvent(id, "updated", patch);
46
+ if (!before.archivedAt && after.archivedAt) this.store.addEvent(id, "archived", { archivedAt: after.archivedAt });
47
+ return after;
48
+ }
49
+ addLink(workItemId, input, eventType = "link_added") {
50
+ if (!this.store.get(workItemId)) return null;
51
+ const link = this.store.addLink({
52
+ ...input,
53
+ workItemId
54
+ });
55
+ this.store.addEvent(workItemId, eventType, {
56
+ kind: link.kind,
57
+ targetId: link.targetId,
58
+ title: link.title,
59
+ statusSnapshot: link.statusSnapshot
60
+ });
61
+ return link;
62
+ }
63
+ listEvents(workItemId) {
64
+ return this.store.listEvents(workItemId);
65
+ }
66
+ listAttachments(workItemId) {
67
+ if (!this.store.get(workItemId)) return null;
68
+ return this.store.listAttachments(workItemId);
69
+ }
70
+ async addAttachment(workItemId, file) {
71
+ if (!this.store.get(workItemId)) return null;
72
+ const saved = await saveMediaBuffer(file.buffer, {
73
+ bucket: "work-item",
74
+ contentType: file.mimeType,
75
+ maxBytes: WORK_ITEM_ATTACHMENT_MAX_BYTES,
76
+ originalFilename: file.name
77
+ });
78
+ const mimeType = saved.contentType || file.mimeType || mimeTypeFromMediaPath(saved.path);
79
+ const attachment = this.store.addAttachment({
80
+ workItemId,
81
+ mediaUri: saved.uri,
82
+ mediaId: saved.id,
83
+ bucket: saved.bucket,
84
+ type: inferAttachmentType(mimeType),
85
+ mimeType,
86
+ fileName: file.name.trim() || saved.id,
87
+ size: saved.size
88
+ });
89
+ this.store.addEvent(workItemId, "attachment_added", {
90
+ attachmentId: attachment.id,
91
+ fileName: attachment.fileName,
92
+ mimeType: attachment.mimeType,
93
+ size: attachment.size
94
+ });
95
+ return attachment;
96
+ }
97
+ async readAttachment(workItemId, attachmentId) {
98
+ const attachment = this.store.getAttachment(workItemId, attachmentId);
99
+ if (!attachment) return null;
100
+ const { buffer } = await readMediaReference(attachment.mediaUri, WORK_ITEM_ATTACHMENT_MAX_BYTES);
101
+ return {
102
+ attachment,
103
+ buffer
104
+ };
105
+ }
106
+ async removeAttachment(workItemId, attachmentId) {
107
+ const attachment = this.store.removeAttachment(workItemId, attachmentId);
108
+ if (!attachment) return null;
109
+ await deleteMediaBuffer(attachment.mediaId, "work-item");
110
+ this.store.addEvent(workItemId, "attachment_removed", {
111
+ attachmentId: attachment.id,
112
+ fileName: attachment.fileName,
113
+ mimeType: attachment.mimeType,
114
+ size: attachment.size
115
+ });
116
+ return attachment;
117
+ }
118
+ createUpdateSuggestion(workItemId, input) {
119
+ const suggestion = this.store.createUpdateSuggestion(workItemId, input);
120
+ if (!suggestion) return null;
121
+ this.store.addEvent(workItemId, "update_suggestion_created", {
122
+ suggestionId: suggestion.id,
123
+ sourceKind: suggestion.sourceKind,
124
+ sourceId: suggestion.sourceId,
125
+ patch: suggestion.patch,
126
+ hasProgressNote: Boolean(suggestion.progressNote)
127
+ });
128
+ return suggestion;
129
+ }
130
+ listUpdateSuggestions(workItemId, status) {
131
+ return this.store.listUpdateSuggestions(workItemId, status);
132
+ }
133
+ applyUpdateSuggestion(id) {
134
+ const suggestion = this.store.getUpdateSuggestion(id);
135
+ if (!suggestion || suggestion.status !== "pending") return null;
136
+ const before = this.store.get(suggestion.workItemId);
137
+ if (!before) return null;
138
+ const patch = {};
139
+ if (suggestion.patch.status !== void 0) patch.status = suggestion.patch.status;
140
+ if (suggestion.patch.nextAction !== void 0) patch.nextAction = suggestion.patch.nextAction;
141
+ if (suggestion.patch.blockedReason !== void 0) patch.blockedReason = suggestion.patch.blockedReason;
142
+ const item = Object.keys(patch).length > 0 ? this.updateWorkItem(suggestion.workItemId, patch) : before;
143
+ if (!item) return null;
144
+ if (suggestion.progressNote) this.store.addEvent(suggestion.workItemId, "progress_note_added", {
145
+ sourceKind: suggestion.sourceKind,
146
+ sourceId: suggestion.sourceId,
147
+ suggestionId: suggestion.id,
148
+ text: suggestion.progressNote
149
+ });
150
+ const marked = this.store.markUpdateSuggestion(id, "applied");
151
+ if (!marked) return null;
152
+ this.store.addEvent(suggestion.workItemId, "update_suggestion_applied", {
153
+ suggestionId: suggestion.id,
154
+ sourceKind: suggestion.sourceKind,
155
+ sourceId: suggestion.sourceId,
156
+ patch,
157
+ previousStatus: before.status,
158
+ nextStatus: item.status
159
+ });
160
+ return {
161
+ item,
162
+ suggestion: marked
163
+ };
164
+ }
165
+ dismissUpdateSuggestion(id) {
166
+ const suggestion = this.store.getUpdateSuggestion(id);
167
+ if (!suggestion || suggestion.status !== "pending") return null;
168
+ const marked = this.store.markUpdateSuggestion(id, "dismissed");
169
+ if (marked) this.store.addEvent(marked.workItemId, "update_suggestion_dismissed", {
170
+ suggestionId: marked.id,
171
+ sourceKind: marked.sourceKind,
172
+ sourceId: marked.sourceId
173
+ });
174
+ return marked;
175
+ }
176
+ };
177
+ //#endregion
178
+ export { WORK_ITEM_ATTACHMENT_MAX_BYTES, WORK_ITEM_ATTACHMENT_MAX_COUNT, WORK_ITEM_ATTACHMENT_UPLOAD_BODY_MAX_BYTES, WorkItemService };
179
+
180
+ //# sourceMappingURL=work-item-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-item-service.js","names":[],"sources":["../../../src/work-items/work-item-service.ts"],"sourcesContent":["import { deleteMediaBuffer, mimeTypeFromMediaPath, saveMediaBuffer } from '../media/store.js';\nimport { readMediaReference } from '../media/media-reference.js';\nimport { WorkItemStore } from './work-item-store.js';\nimport type {\n CreateWorkItemUpdateSuggestionInput,\n CreateWorkItemInput,\n UpdateWorkItemInput,\n WorkItem,\n WorkItemAttachment,\n WorkItemEvent,\n WorkItemLink,\n WorkItemListQuery,\n WorkItemListResult,\n WorkItemUpdateSuggestion,\n WorkItemUpdateSuggestionStatus,\n} from './types.js';\n\nexport const WORK_ITEM_ATTACHMENT_MAX_BYTES = 25 * 1024 * 1024;\nexport const WORK_ITEM_ATTACHMENT_MAX_COUNT = 10;\nexport const WORK_ITEM_ATTACHMENT_UPLOAD_BODY_MAX_BYTES =\n WORK_ITEM_ATTACHMENT_MAX_BYTES * WORK_ITEM_ATTACHMENT_MAX_COUNT + 1024 * 1024;\n\nfunction inferAttachmentType(mimeType: string): WorkItemAttachment['type'] {\n if (mimeType.startsWith('image/')) return 'image';\n if (mimeType.startsWith('audio/')) return 'audio';\n if (mimeType.startsWith('video/')) return 'video';\n return 'file';\n}\n\nexport class WorkItemService {\n constructor(private readonly store = new WorkItemStore()) {}\n\n listProjectWorkItems(projectId: string, query: WorkItemListQuery = {}): WorkItemListResult {\n return this.store.list(projectId, query);\n }\n\n createProjectWorkItem(projectId: string, input: CreateWorkItemInput): WorkItem {\n const item = this.store.create(projectId, input);\n this.store.addEvent(item.id, 'created', { title: item.title, status: item.status, priority: item.priority });\n return { ...item, links: [] };\n }\n\n getWorkItem(id: string): WorkItem | null {\n return this.store.get(id);\n }\n\n updateWorkItem(id: string, patch: UpdateWorkItemInput): WorkItem | null {\n const before = this.store.get(id);\n if (!before) return null;\n const after = this.store.update(id, patch);\n if (!after) return null;\n if (before.status !== after.status) {\n this.store.addEvent(id, 'status_changed', { from: before.status, to: after.status });\n } else {\n this.store.addEvent(id, 'updated', patch);\n }\n if (!before.archivedAt && after.archivedAt) {\n this.store.addEvent(id, 'archived', { archivedAt: after.archivedAt });\n }\n return after;\n }\n\n addLink(workItemId: string, input: Omit<WorkItemLink, 'id' | 'workItemId' | 'createdAt'>, eventType: Parameters<WorkItemStore['addEvent']>[1] = 'link_added'): WorkItemLink | null {\n if (!this.store.get(workItemId)) return null;\n const link = this.store.addLink({ ...input, workItemId });\n this.store.addEvent(workItemId, eventType, { kind: link.kind, targetId: link.targetId, title: link.title, statusSnapshot: link.statusSnapshot });\n return link;\n }\n\n listEvents(workItemId: string): WorkItemEvent[] {\n return this.store.listEvents(workItemId);\n }\n\n listAttachments(workItemId: string): WorkItemAttachment[] | null {\n if (!this.store.get(workItemId)) return null;\n return this.store.listAttachments(workItemId);\n }\n\n async addAttachment(\n workItemId: string,\n file: { name: string; buffer: Buffer; mimeType: string },\n ): Promise<WorkItemAttachment | null> {\n if (!this.store.get(workItemId)) return null;\n const saved = await saveMediaBuffer(file.buffer, {\n bucket: 'work-item',\n contentType: file.mimeType,\n maxBytes: WORK_ITEM_ATTACHMENT_MAX_BYTES,\n originalFilename: file.name,\n });\n const mimeType = saved.contentType || file.mimeType || mimeTypeFromMediaPath(saved.path);\n const attachment = this.store.addAttachment({\n workItemId,\n mediaUri: saved.uri,\n mediaId: saved.id,\n bucket: saved.bucket,\n type: inferAttachmentType(mimeType),\n mimeType,\n fileName: file.name.trim() || saved.id,\n size: saved.size,\n });\n this.store.addEvent(workItemId, 'attachment_added', {\n attachmentId: attachment.id,\n fileName: attachment.fileName,\n mimeType: attachment.mimeType,\n size: attachment.size,\n });\n return attachment;\n }\n\n async readAttachment(\n workItemId: string,\n attachmentId: string,\n ): Promise<{ attachment: WorkItemAttachment; buffer: Buffer } | null> {\n const attachment = this.store.getAttachment(workItemId, attachmentId);\n if (!attachment) return null;\n const { buffer } = await readMediaReference(attachment.mediaUri, WORK_ITEM_ATTACHMENT_MAX_BYTES);\n return { attachment, buffer };\n }\n\n async removeAttachment(workItemId: string, attachmentId: string): Promise<WorkItemAttachment | null> {\n const attachment = this.store.removeAttachment(workItemId, attachmentId);\n if (!attachment) return null;\n await deleteMediaBuffer(attachment.mediaId, 'work-item');\n this.store.addEvent(workItemId, 'attachment_removed', {\n attachmentId: attachment.id,\n fileName: attachment.fileName,\n mimeType: attachment.mimeType,\n size: attachment.size,\n });\n return attachment;\n }\n\n createUpdateSuggestion(workItemId: string, input: CreateWorkItemUpdateSuggestionInput): WorkItemUpdateSuggestion | null {\n const suggestion = this.store.createUpdateSuggestion(workItemId, input);\n if (!suggestion) return null;\n this.store.addEvent(workItemId, 'update_suggestion_created', {\n suggestionId: suggestion.id,\n sourceKind: suggestion.sourceKind,\n sourceId: suggestion.sourceId,\n patch: suggestion.patch,\n hasProgressNote: Boolean(suggestion.progressNote),\n });\n return suggestion;\n }\n\n listUpdateSuggestions(workItemId: string, status?: WorkItemUpdateSuggestionStatus): WorkItemUpdateSuggestion[] {\n return this.store.listUpdateSuggestions(workItemId, status);\n }\n\n applyUpdateSuggestion(id: string): { item: WorkItem; suggestion: WorkItemUpdateSuggestion } | null {\n const suggestion = this.store.getUpdateSuggestion(id);\n if (!suggestion || suggestion.status !== 'pending') return null;\n const before = this.store.get(suggestion.workItemId);\n if (!before) return null;\n const patch: UpdateWorkItemInput = {};\n if (suggestion.patch.status !== undefined) patch.status = suggestion.patch.status;\n if (suggestion.patch.nextAction !== undefined) patch.nextAction = suggestion.patch.nextAction;\n if (suggestion.patch.blockedReason !== undefined) patch.blockedReason = suggestion.patch.blockedReason;\n const item = Object.keys(patch).length > 0\n ? this.updateWorkItem(suggestion.workItemId, patch)\n : before;\n if (!item) return null;\n if (suggestion.progressNote) {\n this.store.addEvent(suggestion.workItemId, 'progress_note_added', {\n sourceKind: suggestion.sourceKind,\n sourceId: suggestion.sourceId,\n suggestionId: suggestion.id,\n text: suggestion.progressNote,\n });\n }\n const marked = this.store.markUpdateSuggestion(id, 'applied');\n if (!marked) return null;\n this.store.addEvent(suggestion.workItemId, 'update_suggestion_applied', {\n suggestionId: suggestion.id,\n sourceKind: suggestion.sourceKind,\n sourceId: suggestion.sourceId,\n patch,\n previousStatus: before.status,\n nextStatus: item.status,\n });\n return { item, suggestion: marked };\n }\n\n dismissUpdateSuggestion(id: string): WorkItemUpdateSuggestion | null {\n const suggestion = this.store.getUpdateSuggestion(id);\n if (!suggestion || suggestion.status !== 'pending') return null;\n const marked = this.store.markUpdateSuggestion(id, 'dismissed');\n if (marked) {\n this.store.addEvent(marked.workItemId, 'update_suggestion_dismissed', {\n suggestionId: marked.id,\n sourceKind: marked.sourceKind,\n sourceId: marked.sourceId,\n });\n }\n return marked;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { CreateWorkItemUpdateSuggestionInput, CreateWorkItemInput, UpdateWorkItemInput, WorkItem, WorkItemAttachment, WorkItemEvent, WorkItemEventType, WorkItemLink, WorkItemListQuery, WorkItemListResult, WorkItemUpdateSuggestion, WorkItemUpdateSuggestionStatus } from './types.js';
2
+ export declare class WorkItemStore {
3
+ create(projectId: string, input: CreateWorkItemInput): WorkItem;
4
+ get(id: string): WorkItem | null;
5
+ list(projectId: string, query?: WorkItemListQuery): WorkItemListResult;
6
+ update(id: string, patch: UpdateWorkItemInput): WorkItem | null;
7
+ addLink(input: Omit<WorkItemLink, 'id' | 'createdAt'>): WorkItemLink;
8
+ listLinks(workItemId: string): WorkItemLink[];
9
+ listLinksForItems(workItemIds: string[]): Map<string, WorkItemLink[]>;
10
+ addAttachment(input: Omit<WorkItemAttachment, 'id' | 'createdAt'>): WorkItemAttachment;
11
+ getAttachment(workItemId: string, attachmentId: string): WorkItemAttachment | null;
12
+ listAttachments(workItemId: string): WorkItemAttachment[];
13
+ listAttachmentsForItems(workItemIds: string[]): Map<string, WorkItemAttachment[]>;
14
+ removeAttachment(workItemId: string, attachmentId: string): WorkItemAttachment | null;
15
+ addEvent(workItemId: string, type: WorkItemEventType, payload?: unknown): WorkItemEvent;
16
+ listEvents(workItemId: string): WorkItemEvent[];
17
+ createUpdateSuggestion(workItemId: string, input: CreateWorkItemUpdateSuggestionInput): WorkItemUpdateSuggestion | null;
18
+ getUpdateSuggestion(id: string): WorkItemUpdateSuggestion | null;
19
+ listUpdateSuggestions(workItemId: string, status?: WorkItemUpdateSuggestionStatus): WorkItemUpdateSuggestion[];
20
+ markUpdateSuggestion(id: string, status: Extract<WorkItemUpdateSuggestionStatus, 'applied' | 'dismissed'>): WorkItemUpdateSuggestion | null;
21
+ }