@mndrk/agx 2.0.0-next.8 → 2.0.0

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 (407) hide show
  1. package/README.md +16 -5
  2. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/BUILD_ID +1 -1
  3. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/app-path-routes-manifest.json +9 -1
  4. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/build-manifest.json +2 -2
  5. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/prerender-manifest.json +27 -3
  6. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/routes-manifest.json +57 -0
  7. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error/page.js +1 -1
  8. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error/page.js.nft.json +1 -1
  9. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.html +2 -2
  11. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.rsc +1 -1
  12. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  13. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  14. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  15. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  16. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found/page.js +1 -1
  18. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found/page.js.nft.json +1 -1
  19. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.html +2 -2
  21. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.rsc +2 -2
  22. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  23. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  24. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  25. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  26. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  27. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  28. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route/app-paths-manifest.json +3 -0
  29. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route/build-manifest.json +11 -0
  30. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route/server-reference-manifest.json +4 -0
  31. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route.js +7 -0
  32. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route.js.map +5 -0
  33. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route.js.nft.json +1 -0
  34. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/daemon/route_client-reference-manifest.js +2 -0
  35. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/file-search/route.js.nft.json +1 -1
  36. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/health/route.js.nft.json +1 -1
  37. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/history/route.js +2 -2
  38. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/learnings/route.js.nft.json +1 -1
  39. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
  40. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/memories/route.js.nft.json +1 -1
  41. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route/app-paths-manifest.json +3 -0
  42. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route/build-manifest.json +11 -0
  43. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route/server-reference-manifest.json +4 -0
  44. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route.js +8 -0
  45. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route.js.map +5 -0
  46. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route.js.nft.json +1 -0
  47. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notification-outbox/[id]/route_client-reference-manifest.js +2 -0
  48. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route/app-paths-manifest.json +3 -0
  49. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route/build-manifest.json +11 -0
  50. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route/server-reference-manifest.json +4 -0
  51. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route.js +8 -0
  52. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route.js.map +5 -0
  53. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route.js.nft.json +1 -0
  54. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/[id]/read/route_client-reference-manifest.js +2 -0
  55. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route/app-paths-manifest.json +3 -0
  56. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route/build-manifest.json +11 -0
  57. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route/server-reference-manifest.json +4 -0
  58. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route.js +8 -0
  59. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route.js.map +5 -0
  60. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route.js.nft.json +1 -0
  61. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/route_client-reference-manifest.js +2 -0
  62. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route/app-paths-manifest.json +3 -0
  63. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route/build-manifest.json +11 -0
  64. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route/server-reference-manifest.json +4 -0
  65. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route.js +8 -0
  66. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route.js.map +5 -0
  67. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -0
  68. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +2 -0
  69. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/cancel/route.js.nft.json +1 -1
  70. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/signal/route.js.nft.json +1 -1
  71. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/start/route.js.nft.json +1 -1
  72. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/orchestrator/tasks/[taskId]/status/route.js.nft.json +1 -1
  73. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/[id]/migrate-v1/route.js.nft.json +1 -1
  74. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/[id]/migrate-v2/route.js.nft.json +1 -1
  75. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  76. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/projects/route.js.nft.json +1 -1
  77. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/complete/route.js.nft.json +1 -1
  78. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/queue/route.js.nft.json +1 -1
  79. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/system/db-status/route.js.nft.json +1 -1
  80. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
  81. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
  82. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/costs/route.js.nft.json +1 -1
  83. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/dependencies/route.js.nft.json +1 -1
  84. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/events/route.js.nft.json +1 -1
  85. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/history/route.js.nft.json +1 -1
  86. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/metrics/route.js.nft.json +1 -1
  87. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/pause/route.js.nft.json +1 -1
  88. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/replan/route.js.nft.json +1 -1
  89. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/restart/route.js.nft.json +1 -1
  90. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/resume/route.js.nft.json +1 -1
  91. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/rollback/route.js.nft.json +1 -1
  92. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/route.js.nft.json +1 -1
  93. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/start/route.js.nft.json +1 -1
  94. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/graph/stop/route.js.nft.json +1 -1
  95. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/heartbeat/route.js.nft.json +1 -1
  96. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/history/route.js.nft.json +1 -1
  97. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/logs/route.js.nft.json +1 -1
  98. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/logs/stream/route.js.nft.json +1 -1
  99. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
  100. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/complete/route.js.nft.json +1 -1
  101. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/fail/route.js.nft.json +1 -1
  102. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/resume/route.js.nft.json +1 -1
  103. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/start/route.js.nft.json +1 -1
  104. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/stop/route.js.nft.json +1 -1
  105. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
  106. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  107. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/assign-orphans/route.js.nft.json +1 -1
  108. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/route.js.nft.json +1 -1
  109. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/tasks/stream/route.js.nft.json +1 -1
  110. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/api/user-settings/route.js.nft.json +1 -1
  111. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board/page.js +1 -1
  112. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board/page.js.nft.json +1 -1
  113. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board/page_client-reference-manifest.js +1 -1
  114. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.html +2 -2
  115. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.rsc +2 -2
  116. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_full.segment.rsc +2 -2
  117. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_head.segment.rsc +1 -1
  118. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_index.segment.rsc +2 -2
  119. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/_tree.segment.rsc +2 -2
  120. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
  121. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/board.segments/board.segment.rsc +1 -1
  122. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph/page.js +1 -1
  123. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph/page.js.nft.json +1 -1
  124. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph/page_client-reference-manifest.js +1 -1
  125. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.html +2 -2
  126. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.rsc +3 -3
  127. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_full.segment.rsc +3 -3
  128. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
  129. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_index.segment.rsc +2 -2
  130. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/_tree.segment.rsc +2 -2
  131. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +2 -2
  132. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
  133. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.html +2 -2
  134. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.rsc +3 -3
  135. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  136. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_full.segment.rsc +3 -3
  137. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_head.segment.rsc +1 -1
  138. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_index.segment.rsc +2 -2
  139. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  140. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/page.js +1 -1
  141. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/page.js.nft.json +1 -1
  142. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/page_client-reference-manifest.js +1 -1
  143. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/graph/[taskId]/page.js +1 -1
  144. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
  145. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  146. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page.js +1 -1
  147. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  148. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  149. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans/page.js +1 -1
  150. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans/page.js.nft.json +1 -1
  151. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans/page_client-reference-manifest.js +1 -1
  152. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.html +1 -1
  153. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.rsc +3 -3
  154. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_full.segment.rsc +3 -3
  155. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
  156. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_index.segment.rsc +2 -2
  157. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
  158. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +2 -2
  159. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
  160. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
  161. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/page.js +1 -1
  162. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/page.js.nft.json +1 -1
  163. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  164. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.html +2 -2
  165. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.rsc +3 -3
  166. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_full.segment.rsc +3 -3
  167. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  168. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  169. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  170. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
  171. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  172. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings/page.js +1 -1
  173. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings/page.js.nft.json +1 -1
  174. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  175. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.html +2 -2
  176. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.rsc +3 -3
  177. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  178. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  179. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  180. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  181. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  182. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  183. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status/page.js +1 -1
  184. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status/page.js.nft.json +1 -1
  185. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status/page_client-reference-manifest.js +1 -1
  186. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.html +2 -2
  187. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.rsc +3 -3
  188. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_full.segment.rsc +3 -3
  189. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_head.segment.rsc +1 -1
  190. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_index.segment.rsc +2 -2
  191. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  192. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/status/__PAGE__.segment.rsc +2 -2
  193. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/status.segments/status.segment.rsc +1 -1
  194. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page/app-paths-manifest.json +3 -0
  195. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page/build-manifest.json +18 -0
  196. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page/next-font-manifest.json +11 -0
  197. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page/react-loadable-manifest.json +1 -0
  198. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page/server-reference-manifest.json +4 -0
  199. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page.js +16 -0
  200. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page.js.map +5 -0
  201. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page.js.nft.json +1 -0
  202. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/[threadId]/page_client-reference-manifest.js +2 -0
  203. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page/app-paths-manifest.json +3 -0
  204. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page/build-manifest.json +18 -0
  205. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page/next-font-manifest.json +11 -0
  206. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page/react-loadable-manifest.json +1 -0
  207. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page/server-reference-manifest.json +4 -0
  208. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page.js +16 -0
  209. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page.js.map +5 -0
  210. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page.js.nft.json +1 -0
  211. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/w/[workspaceId]/page_client-reference-manifest.js +2 -0
  212. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/app-paths-manifest.json +3 -0
  213. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/build-manifest.json +18 -0
  214. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/next-font-manifest.json +11 -0
  215. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/react-loadable-manifest.json +1 -0
  216. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page/server-reference-manifest.json +4 -0
  217. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page.js +15 -0
  218. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page.js.map +5 -0
  219. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page.js.nft.json +1 -0
  220. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome/page_client-reference-manifest.js +2 -0
  221. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.html +9 -0
  222. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.meta +15 -0
  223. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.rsc +23 -0
  224. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_full.segment.rsc +23 -0
  225. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_head.segment.rsc +5 -0
  226. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_index.segment.rsc +9 -0
  227. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/_tree.segment.rsc +5 -0
  228. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +9 -0
  229. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app/welcome.segments/welcome.segment.rsc +4 -0
  230. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/app-paths-manifest.json +9 -1
  231. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/7e210_Agents_agx-cloud__next-internal_server_app_api_daemon_route_actions_460dc557.js +3 -0
  232. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/Projects_Agents_agx-cloud_ef3cf579._.js +8 -8
  233. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/Projects_Agents_agx-cloud_lib_6a5d1c80._.js +11 -11
  234. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/Projects_Agents_agx-cloud_lib_7eefb426._.js +10 -10
  235. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__1f176ebf._.js +4 -0
  236. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__22d0d2cc._.js +10 -0
  237. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__26bfcde9._.js +7 -7
  238. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__27e9e463._.js +3 -0
  239. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__299302d8._.js +1 -1
  240. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__2ed85740._.js +3 -0
  241. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__33e7bfc0._.js +5 -0
  242. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__8f9b0934._.js +28 -28
  243. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__9b8efd58._.js +1 -1
  244. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__a7a82510._.js +7 -7
  245. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__bea8711d._.js +1 -1
  246. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/[root-of-the-server]__ec8bbb77._.js +1 -1
  247. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/a2576__next-internal_server_app_api_notification-outbox_[id]_route_actions_c429c549.js +3 -0
  248. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/a2576__next-internal_server_app_api_notifications_[id]_read_route_actions_615ae13d.js +3 -0
  249. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/a2576__next-internal_server_app_api_notifications_unread-count_route_actions_b61a9301.js +3 -0
  250. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ad555_agx-cloud__next-internal_server_app_api_notifications_route_actions_06dbcdc4.js +3 -0
  251. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ae43b_next_dist_esm_build_templates_app-route_122e31fe.js +28 -24
  252. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/7e210_Agents_agx-cloud__next-internal_server_app_welcome_page_actions_5176f4d4.js +3 -0
  253. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_033373a0._.js +3 -0
  254. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_039c43e5._.js +1 -1
  255. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_0562c9cd._.js +3 -0
  256. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_0cf15b7b._.js +8 -0
  257. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_0d91718c._.js +3 -0
  258. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_1e1c23f7._.js +1 -1
  259. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_502ede06._.js +1 -1
  260. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_68972519._.js +1 -1
  261. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_69570e90._.js +3 -0
  262. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_6cbdc6fd._.js +4 -0
  263. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_82783170._.js +3 -0
  264. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_a0e26bca._.js +1 -1
  265. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_a2a39dbe._.js +1 -1
  266. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_aaa774d8._.js +4 -0
  267. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_afe007c2._.js +4 -0
  268. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_b2707e4d._.js +1 -1
  269. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_components_chat-ui_f59beea5._.js +95 -0
  270. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{Projects_Agents_agx-cloud_e7635878._.js → Projects_Agents_agx-cloud_dc82c7bf._.js} +2 -2
  271. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_ef6ea3fc._.js +1 -1
  272. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_ff11dd7c._.js +1 -1
  273. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{[root-of-the-server]__9d72d782._.js → [root-of-the-server]__00507cd5._.js} +2 -2
  274. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__24a978df._.js +3 -0
  275. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__523e8b0b._.js +3 -0
  276. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__546c34e3._.js +3 -0
  277. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__807e5ecc._.js +3 -0
  278. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__9668fae0._.js +3 -0
  279. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__97870484._.js +3 -0
  280. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{[root-of-the-server]__657b446b._.js → [root-of-the-server]__99fa92e8._.js} +2 -2
  281. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__a4a5c57b._.js +3 -0
  282. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__b549e8c2._.js +4 -0
  283. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/{[root-of-the-server]__5dace3c6._.js → [root-of-the-server]__d78dfcf2._.js} +2 -2
  284. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__e915acb2._.js +3 -0
  285. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/a2576__next-internal_server_app_w_[workspaceId]_[threadId]_page_actions_f668795b.js +3 -0
  286. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ad555_agx-cloud__next-internal_server_app_w_[workspaceId]_page_actions_8ade5a6c.js +3 -0
  287. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_@dnd-kit_core_dist_core_esm_e4fe20d7.js +3 -0
  288. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_db3f38e3._.js +1 -1
  289. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_lucide-react_dist_esm_63b016a6._.js +3 -0
  290. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_next_dist_2cd20dd7._.js +1 -1
  291. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_next_dist_832595f2._.js +1 -1
  292. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_next_dist_esm_build_templates_app-page_e4003e94.js +1 -1
  293. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/functions-config-manifest.json +1 -0
  294. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/middleware-manifest.json +5 -5
  295. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/next-font-manifest.js +1 -1
  296. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/next-font-manifest.json +12 -0
  297. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/pages/404.html +1 -1
  298. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/pages/500.html +2 -2
  299. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/server-reference-manifest.js +1 -1
  300. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/server-reference-manifest.json +1 -1
  301. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/0804e1cf36ac4c40.js +1 -0
  302. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/245ea04687930f1c.css +1 -0
  303. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/2f63efec13a9346a.js +1 -0
  304. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/54fbb309ba7c2b4b.js +1 -0
  305. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/55f8c843a8037ac8.js +1 -0
  306. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/5eda5cd286808293.js +93 -0
  307. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/6bfec2ea0d682ffc.js +18 -0
  308. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/7d2c10033c8a8554.js +1 -0
  309. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/{b47938cee3a79764.js → 822bd641355a9397.js} +2 -2
  310. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/{49b2630db3ff37fe.js → 8dad5ee086c3d46d.js} +1 -1
  311. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/c6ed4939c63ba444.js +1 -0
  312. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/e4b656247e95267b.js +1 -0
  313. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/ef426b92c6ce58a5.js +1 -0
  314. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/daemon/route.ts +55 -0
  315. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/notification-outbox/[id]/route.ts +42 -0
  316. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/notifications/[id]/read/route.ts +43 -0
  317. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/notifications/route.ts +46 -0
  318. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/notifications/unread-count/route.ts +24 -0
  319. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/participants/route.ts +13 -6
  320. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/api/system/db-status/route.ts +23 -15
  321. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/projects/[slug]/layout.tsx +28 -10
  322. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/w/[workspaceId]/[threadId]/page.tsx +4 -0
  323. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/w/[workspaceId]/layout.tsx +7 -0
  324. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/w/[workspaceId]/page.tsx +4 -0
  325. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/app/welcome/page.tsx +117 -0
  326. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/Layout.tsx +4 -6
  327. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/Notifications/NotificationBell.tsx +62 -0
  328. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/Notifications/NotificationItem.tsx +96 -0
  329. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/Notifications/NotificationsPanel.tsx +127 -0
  330. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/Notifications/index.ts +3 -0
  331. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/WorkspaceNav.tsx +67 -0
  332. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/ChatContainer.tsx +181 -122
  333. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/ChatPreview.tsx +85 -0
  334. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/MessageBubble.tsx +3 -0
  335. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/MessageList.tsx +3 -16
  336. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/ParticipantBar.tsx +41 -86
  337. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/chat-ui/ThreadView.tsx +4 -3
  338. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/thread/ThreadItem.tsx +9 -9
  339. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/thread/ThreadList.tsx +15 -15
  340. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/components/thread/ThreadSidebar.tsx +34 -34
  341. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/db/sqlite/001_agx_board_schema.sql +52 -0
  342. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/hooks/useNotifications.ts +115 -0
  343. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/hooks/useThreadState.ts +85 -85
  344. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/cli-runner.ts +6 -1
  345. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/db/cursors.js +75 -0
  346. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/db/notifications.js +70 -0
  347. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/db/preferences.js +110 -0
  348. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/demo-threads.ts +76 -0
  349. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/jobs/pruneNotifications.js +87 -0
  350. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/participants-store.ts +7 -3
  351. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/projectors/notificationProjector.js +351 -0
  352. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/storage/index.ts +1 -1
  353. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/storage/local-thread-adapter.ts +27 -27
  354. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/storage/thread-adapter.ts +31 -31
  355. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/stream-multiplexer.ts +45 -9
  356. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/lib/types.ts +7 -1
  357. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/migrations/sqlite_schema.sql +45 -0
  358. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/script.txt +111 -0
  359. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/services/threadService.ts +32 -32
  360. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/state/threadSelection.test.ts +30 -30
  361. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/state/threadSelection.ts +21 -21
  362. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/state/uiSettings.ts +14 -11
  363. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tests/projector/_helpers.js +68 -0
  364. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tests/projector/crash.test.js +139 -0
  365. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tests/projector/duplicate.test.js +111 -0
  366. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tests/projector/flood.test.js +162 -0
  367. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tests/projector/replay.test.js +107 -0
  368. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/tsconfig.tsbuildinfo +1 -1
  369. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/types/userPreferences.ts +12 -8
  370. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/worker/index.js +5 -1
  371. package/lib/cli/daemon.js +7 -1
  372. package/lib/cli/onboarding.js +71 -1
  373. package/lib/cli/providers.js +5 -5
  374. package/lib/cli/runCli.js +12 -1
  375. package/lib/commands/chat.js +8 -2
  376. package/lib/executor.js +56 -3
  377. package/lib/proc/commandExists.js +14 -8
  378. package/package.json +1 -1
  379. package/scripts/postinstall.js +19 -7
  380. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_215731e9._.js +0 -3
  381. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_2b2a91e2._.js +0 -3
  382. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_a7533794._.js +0 -3
  383. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/Projects_Agents_agx-cloud_e1b68242._.js +0 -8
  384. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__0d6259d5._.js +0 -3
  385. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__13df20fe._.js +0 -95
  386. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__c76acf29._.js +0 -4
  387. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/[root-of-the-server]__e5a1e0b5._.js +0 -3
  388. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_lucide-react_dist_esm_6c755856._.js +0 -3
  389. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/server/chunks/ssr/ae43b_lucide-react_dist_esm_icons_search_04b9412a.js +0 -3
  390. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/0d58db99a936501d.js +0 -1
  391. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/20d98b7f52e93d14.js +0 -18
  392. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/216d8e2f28fa9ab1.js +0 -1
  393. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/5d94ba021f22122d.js +0 -1
  394. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/5e2849404c532f70.js +0 -1
  395. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/81d22c5173d36098.js +0 -93
  396. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/9b2c429432840844.css +0 -1
  397. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/9fa263ad20d27969.js +0 -1
  398. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/chunks/dc534541f2bd6342.js +0 -1
  399. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-board.db +0 -0
  400. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-board.db-shm +0 -0
  401. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-board.db-wal +0 -0
  402. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-queue.db +0 -0
  403. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-queue.db-shm +0 -0
  404. package/cloud-runtime/standalone/Projects/Agents/agx-cloud/agx-queue.db-wal +0 -0
  405. /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{m5R8F5c1zxb5EWbYNiR5n → UBZZwc9vLlz1xCm5PYCTc}/_buildManifest.js +0 -0
  406. /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{m5R8F5c1zxb5EWbYNiR5n → UBZZwc9vLlz1xCm5PYCTc}/_clientMiddlewareManifest.json +0 -0
  407. /package/cloud-runtime/standalone/Projects/Agents/agx-cloud/.next/static/{m5R8F5c1zxb5EWbYNiR5n → UBZZwc9vLlz1xCm5PYCTc}/_ssgManifest.js +0 -0
@@ -0,0 +1,76 @@
1
+ import type { GroupMessage, Participant } from "@/lib/types";
2
+
3
+ export const DEMO_PARTICIPANTS: Participant[] = [
4
+ { id: "jane", name: "Jane", provider: "claude", model: "claude-opus-4-6", color: "#6366f1" },
5
+ { id: "cody", name: "Cody", provider: "claude", model: "gpt-5.3", color: "#f59e0b" },
6
+ { id: "flint", name: "Flint", provider: "ollama", model: "gemini-3.1-pro", color: "#10b981" },
7
+ { id: "jewel", name: "Jewel", provider: "claude", model: "glm-5", color: "#ec4899" },
8
+ ];
9
+
10
+ const now = Date.now();
11
+
12
+ export const DEMO_MESSAGES: GroupMessage[] = [
13
+ {
14
+ id: "demo-0",
15
+ role: "user",
16
+ participantId: null,
17
+ content: "We're losing 40% of users at the onboarding config screen. How should we fix this?",
18
+ timestamp: now - 9000,
19
+ },
20
+ {
21
+ id: "demo-1",
22
+ role: "assistant",
23
+ participantId: "jane",
24
+ content: "The core problem is we're asking for setup before showing value. Users don't know *why* they need an API key yet. Flip the order — let them see the product working first, then ask for config when they actually need it.",
25
+ timestamp: now - 8000,
26
+ },
27
+ {
28
+ id: "demo-2",
29
+ role: "assistant",
30
+ participantId: "cody",
31
+ content: "We can prove that with a zero-config starter task: detect `package.json` or `.git` on load, run a local project analysis. No API key needed, instant result. That alone should cut the drop-off significantly.",
32
+ timestamp: now - 7000,
33
+ },
34
+ {
35
+ id: "demo-3",
36
+ role: "assistant",
37
+ participantId: "flint",
38
+ content: "Risk: if we defer config entirely, the *second* interaction fails when there's no provider configured. We'd just move the drop-off from step 1 to step 2. Need to handle that transition carefully.",
39
+ timestamp: now - 6000,
40
+ },
41
+ {
42
+ id: "demo-4",
43
+ role: "assistant",
44
+ participantId: "jewel",
45
+ content: "Graduated fidelity solves this. First task is local-only and always succeeds. When they trigger something that needs an LLM, prompt for the key *inline* — right where they need it, not on a separate page. Context-sensitive setup.",
46
+ timestamp: now - 5000,
47
+ },
48
+ {
49
+ id: "demo-5",
50
+ role: "assistant",
51
+ participantId: "jane",
52
+ content: "Exactly. Setup instructions are only useful at the moment you need them. Front-loading them is just anxiety. I'd also suggest we track `welcome_view → first_action → first_result` to measure the actual impact.",
53
+ timestamp: now - 4000,
54
+ },
55
+ {
56
+ id: "demo-6",
57
+ role: "assistant",
58
+ participantId: "cody",
59
+ content: "Here's a concrete implementation plan:\n1. Add framework detection on page load\n2. Show \"Map this project\" as default starter task\n3. Run it client-side with zero dependencies\n4. Persist the result so they land in a live session, not a blank page",
60
+ timestamp: now - 3000,
61
+ },
62
+ {
63
+ id: "demo-7",
64
+ role: "assistant",
65
+ participantId: "flint",
66
+ content: "One more thing — keep state from that first task. When they transition to the real workspace, they should land mid-session. Starting over after the demo kills momentum and trust.",
67
+ timestamp: now - 2000,
68
+ },
69
+ {
70
+ id: "demo-8",
71
+ role: "assistant",
72
+ participantId: "jewel",
73
+ content: "Summary: land → see agents working → join with one click → first task runs instantly → setup happens only when needed. Every step earns the next. Shall I draft the implementation spec?",
74
+ timestamp: now - 1000,
75
+ },
76
+ ];
@@ -0,0 +1,87 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * lib/jobs/pruneNotifications.js
5
+ *
6
+ * Scheduled job that prunes old notifications from the read-model table.
7
+ *
8
+ * Retention policy:
9
+ * - Read notifications older than TTL_DAYS_MIN (60 days) are deleted.
10
+ * - All notifications older than TTL_DAYS_MAX (90 days) are deleted.
11
+ *
12
+ * Usage:
13
+ * const pruneJob = require('./pruneNotifications');
14
+ * pruneJob.start(); // begin scheduled runs
15
+ * pruneJob.stop(); // cancel scheduled runs
16
+ * pruneJob.runOnce(); // run immediately (useful in tests / CLI)
17
+ */
18
+
19
+ const { pruneOldNotifications } = require('../db/notifications');
20
+
21
+ // ── Configuration ────────────────────────────────────────────────────────────
22
+
23
+ const TTL_DAYS_MIN = 60; // delete read notifications older than this
24
+ const TTL_DAYS_MAX = 90; // delete all notifications older than this
25
+ const DEFAULT_INTERVAL_MS = 6 * 60 * 60 * 1000; // 6 hours
26
+
27
+ // ── Job implementation ───────────────────────────────────────────────────────
28
+
29
+ /**
30
+ * Run the prune job once and log the outcome.
31
+ *
32
+ * @returns {{ deleted: number }}
33
+ */
34
+ function runOnce() {
35
+ try {
36
+ const { deleted } = pruneOldNotifications({ minDays: TTL_DAYS_MIN, maxDays: TTL_DAYS_MAX });
37
+ if (deleted > 0) {
38
+ console.log(`[pruneNotifications] deleted ${deleted} notifications (min=${TTL_DAYS_MIN}d, max=${TTL_DAYS_MAX}d)`);
39
+ } else {
40
+ console.debug('[pruneNotifications] nothing to prune');
41
+ }
42
+ return { deleted };
43
+ } catch (err) {
44
+ console.error('[pruneNotifications] error during prune run', err);
45
+ return { deleted: 0 };
46
+ }
47
+ }
48
+
49
+ // ── Scheduler ────────────────────────────────────────────────────────────────
50
+
51
+ let _timer = null;
52
+
53
+ /**
54
+ * Start the scheduled prune job.
55
+ * Safe to call multiple times — subsequent calls are no-ops.
56
+ *
57
+ * @param {object} [opts]
58
+ * @param {number} [opts.intervalMs] - override the default 6-hour interval
59
+ */
60
+ function start({ intervalMs = DEFAULT_INTERVAL_MS } = {}) {
61
+ if (_timer) return;
62
+
63
+ // Run once immediately on start, then on interval
64
+ runOnce();
65
+
66
+ _timer = setInterval(() => {
67
+ runOnce();
68
+ }, intervalMs);
69
+
70
+ // Allow the process to exit even if this timer is still active
71
+ if (_timer.unref) _timer.unref();
72
+
73
+ console.log(`[pruneNotifications] scheduler started (interval=${intervalMs}ms)`);
74
+ }
75
+
76
+ /**
77
+ * Stop the scheduled prune job.
78
+ */
79
+ function stop() {
80
+ if (_timer) {
81
+ clearInterval(_timer);
82
+ _timer = null;
83
+ console.log('[pruneNotifications] scheduler stopped');
84
+ }
85
+ }
86
+
87
+ module.exports = { start, stop, runOnce, TTL_DAYS_MIN, TTL_DAYS_MAX };
@@ -255,9 +255,13 @@ export function loadParticipants(): Participant[] {
255
255
  skills: (() => {
256
256
  try {
257
257
  const parsed = JSON.parse(r.skills_json);
258
- return Array.isArray(parsed)
259
- ? parsed.filter((item): item is string => typeof item === "string")
260
- : [];
258
+ if (!Array.isArray(parsed)) return [];
259
+ // Support both legacy string[] and new {file,condition}[] formats
260
+ return parsed.map((item: unknown) =>
261
+ typeof item === "string"
262
+ ? { file: item, condition: "" }
263
+ : (item as { file: string; condition: string })
264
+ );
261
265
  } catch {
262
266
  return [];
263
267
  }
@@ -0,0 +1,351 @@
1
+ /**
2
+ * lib/projectors/notificationProjector.js
3
+ *
4
+ * Notification projector — consumes the task_audit_log event stream and
5
+ * materialises rows into the notifications + notification_outbox tables.
6
+ *
7
+ * Design goals:
8
+ * - Durable per-consumer cursor (restarts from last position after crash)
9
+ * - Idempotent via UNIQUE (event_id, user_id, type) → INSERT OR IGNORE
10
+ * - 5-second debounce for blocked↔running state flapping
11
+ * - Notification + outbox written in a single SQLite transaction
12
+ * - TTL prune job (60-90 days retention) callable on demand or on a schedule
13
+ * - At-least-once from event stream; exactly-once effect via DB unique key
14
+ *
15
+ * Event source: task_audit_log (rowid used as sequence number / cursor position)
16
+ *
17
+ * Usage:
18
+ * const projector = require('./notificationProjector');
19
+ * projector.start(); // begin polling loop
20
+ * projector.stop(); // graceful shutdown
21
+ * projector.runOnce(); // process pending events once (testing / CLI)
22
+ * projector.pruneOld(); // delete notifications older than TTL
23
+ */
24
+
25
+ 'use strict';
26
+
27
+ const { getSQLiteDb } = require('../sqlite-query-adapter');
28
+ const { readCursor, advanceCursorInTxn } = require('../db/cursors');
29
+ const { shouldNotify } = require('../db/preferences');
30
+ const { pruneOldNotifications } = require('../db/notifications');
31
+ const pruneJob = require('../jobs/pruneNotifications');
32
+
33
+ // ── Constants ───────────────────────────────────────────────────────────────
34
+
35
+ const CONSUMER_ID = 'notification_projector';
36
+ const POLL_INTERVAL_MS = 2000; // how often to poll for new events
37
+ const BATCH_SIZE = 100; // events per poll cycle
38
+ const DEBOUNCE_MS = 5000; // 5 s debounce for blocked↔running flap
39
+ const TTL_DAYS_MIN = 60;
40
+ const TTL_DAYS_MAX = 90;
41
+ const MAX_UNREAD_PER_USER = 500; // cap on unread notifications per user
42
+
43
+ // Mapping from task_audit_log.action → notification type + tier + title template
44
+ const ACTION_MAP = {
45
+ complete: { type: 'task.completed', tier: 'success', titleFn: (t) => `Task completed: ${t.title || t.id}` },
46
+ fail: { type: 'task.failed', tier: 'error', titleFn: (t) => `Task failed: ${t.title || t.id}` },
47
+ reject: { type: 'task.rejected', tier: 'warning', titleFn: (t) => `Task rejected: ${t.title || t.id}` },
48
+ dispatch: { type: 'task.created', tier: 'info', titleFn: (t) => `Task created: ${t.title || t.id}` },
49
+ execute: { type: 'task.started', tier: 'info', titleFn: (t) => `Task started: ${t.title || t.id}` },
50
+ };
51
+
52
+ // Actions that are subject to debounce (blocked↔running flapping)
53
+ const DEBOUNCE_ACTIONS = new Set(['execute']); // running state
54
+ const DEBOUNCE_PAIR = new Set(['execute']); // keep symmetric for future blocked action
55
+
56
+ // ── Debounce state machine ──────────────────────────────────────────────────
57
+ // In-memory map: taskId → { lastAction, lastTs }
58
+ // Scoped to this module; reset on process restart (safe — DB unique key is the guard)
59
+
60
+ const _debounceState = new Map(); // taskId → { action, ts }
61
+
62
+ /**
63
+ * Check if an event should be suppressed by the debounce window.
64
+ * We suppress a `blocked` event that follows a `running` event (or vice versa)
65
+ * within DEBOUNCE_MS of the previous one.
66
+ *
67
+ * For simplicity, we track the last emitted action per task and suppress if
68
+ * the new action is in {blocked, running} and the previous was too, within 5s.
69
+ *
70
+ * @param {string} taskId
71
+ * @param {string} action - audit log action
72
+ * @param {number} eventTs - epoch ms of the event
73
+ * @returns {boolean} true if this event should be dropped (debounced)
74
+ */
75
+ function isDebounced(taskId, action, eventTs) {
76
+ const FLAP_ACTIONS = new Set(['execute']); // 'blocked' is not in audit_log; extend here when added
77
+ if (!FLAP_ACTIONS.has(action)) return false;
78
+
79
+ const prev = _debounceState.get(taskId);
80
+ if (!prev) {
81
+ _debounceState.set(taskId, { action, ts: eventTs });
82
+ return false;
83
+ }
84
+
85
+ const elapsed = eventTs - prev.ts;
86
+ if (FLAP_ACTIONS.has(prev.action) && elapsed < DEBOUNCE_MS) {
87
+ // Same class of flapping event within window — suppress
88
+ return true;
89
+ }
90
+
91
+ _debounceState.set(taskId, { action, ts: eventTs });
92
+ return false;
93
+ }
94
+
95
+ // ── Core projection logic ───────────────────────────────────────────────────
96
+
97
+ /**
98
+ * Fetch up to BATCH_SIZE unprocessed events from task_audit_log after cursor.
99
+ *
100
+ * @param {import('better-sqlite3').Database} db
101
+ * @param {number} afterRowid
102
+ * @returns {Array<{rowid, id, task_id, user_id, action, payload, dispatched_at}>}
103
+ */
104
+ function fetchEvents(db, afterRowid) {
105
+ return db.prepare(`
106
+ SELECT
107
+ rowid,
108
+ id,
109
+ task_id,
110
+ user_id,
111
+ action,
112
+ payload,
113
+ dispatched_at
114
+ FROM task_audit_log
115
+ WHERE rowid > ?
116
+ ORDER BY rowid ASC
117
+ LIMIT ?
118
+ `).all(afterRowid, BATCH_SIZE);
119
+ }
120
+
121
+ /**
122
+ * Fetch task metadata needed for notification title/body.
123
+ * Returns null if the task no longer exists.
124
+ *
125
+ * @param {import('better-sqlite3').Database} db
126
+ * @param {string} taskId
127
+ * @returns {{id, title, slug, user_id}|null}
128
+ */
129
+ function getTask(db, taskId) {
130
+ return db.prepare(
131
+ 'SELECT id, title, slug, user_id FROM tasks WHERE id = ?'
132
+ ).get(taskId) || null;
133
+ }
134
+
135
+ // shouldNotify is imported from ../db/preferences — see that module for resolution order:
136
+ // 1. Task-level (tasks.stage_decisions.notifications[type])
137
+ // 2. User-level (user_settings.notification_prefs[type])
138
+ // 3. Global default → true
139
+
140
+ /**
141
+ * Write one notification + its outbox row atomically.
142
+ * Uses INSERT OR IGNORE so duplicate event_id+user_id+type is a no-op.
143
+ *
144
+ * @param {import('better-sqlite3').Database} db
145
+ * @param {{ eventId, userId, taskId, type, tier, title, body, payload }} row
146
+ */
147
+ function insertNotificationAndOutbox(db, { eventId, userId, taskId, type, tier, title, body, payload }) {
148
+ // INSERT OR IGNORE — idempotent via UNIQUE(event_id, user_id, type)
149
+ const result = db.prepare(`
150
+ INSERT OR IGNORE INTO notifications (user_id, task_id, event_id, type, tier, title, body)
151
+ VALUES (?, ?, ?, ?, ?, ?, ?)
152
+ `).run(userId, taskId, eventId, type, tier, title, body ?? null);
153
+
154
+ // Only write outbox if a row was actually inserted (changes = 1)
155
+ if (result.changes > 0) {
156
+ const notifRow = db.prepare(
157
+ 'SELECT id FROM notifications WHERE event_id = ? AND user_id = ? AND type = ?'
158
+ ).get(eventId, userId, type);
159
+
160
+ if (notifRow) {
161
+ db.prepare(`
162
+ INSERT INTO notification_outbox (notification_id, payload)
163
+ VALUES (?, ?)
164
+ `).run(notifRow.id, JSON.stringify(payload));
165
+ }
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Cap unread notifications per user to MAX_UNREAD_PER_USER by marking
171
+ * the oldest ones as read. Runs inside the same transaction.
172
+ *
173
+ * @param {import('better-sqlite3').Database} db
174
+ * @param {string} userId
175
+ */
176
+ function capUnread(db, userId) {
177
+ const count = db.prepare(
178
+ 'SELECT COUNT(*) AS n FROM notifications WHERE user_id = ? AND read_at IS NULL'
179
+ ).get(userId)?.n ?? 0;
180
+
181
+ if (count > MAX_UNREAD_PER_USER) {
182
+ const excess = count - MAX_UNREAD_PER_USER;
183
+ db.prepare(`
184
+ UPDATE notifications SET read_at = strftime('%Y-%m-%dT%H:%M:%fZ','now')
185
+ WHERE id IN (
186
+ SELECT id FROM notifications
187
+ WHERE user_id = ? AND read_at IS NULL
188
+ ORDER BY created_at ASC
189
+ LIMIT ?
190
+ )
191
+ `).run(userId, excess);
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Process one batch of events. Returns the number of events processed.
197
+ *
198
+ * @returns {number}
199
+ */
200
+ function processBatch() {
201
+ const db = getSQLiteDb();
202
+ const cursor = readCursor(CONSUMER_ID);
203
+ const events = fetchEvents(db, cursor);
204
+
205
+ if (events.length === 0) return 0;
206
+
207
+ let lastRowid = cursor;
208
+ const affectedUsers = new Set();
209
+
210
+ // Use a single transaction for the entire batch
211
+ const runBatch = db.transaction(() => {
212
+ for (const event of events) {
213
+ lastRowid = event.rowid;
214
+
215
+ const mapping = ACTION_MAP[event.action];
216
+ if (!mapping) continue; // unrecognised action — skip but advance cursor
217
+
218
+ const taskId = event.task_id;
219
+ const userId = event.user_id;
220
+ if (!taskId || !userId) continue;
221
+
222
+ const task = getTask(db, taskId);
223
+ if (!task) continue; // task deleted — skip
224
+
225
+ const eventTs = event.dispatched_at
226
+ ? new Date(event.dispatched_at).getTime()
227
+ : Date.now();
228
+
229
+ // Debounce check for flapping states
230
+ if (isDebounced(taskId, event.action, eventTs)) continue;
231
+
232
+ // Task-level / user-level preference check (lib/db/preferences.js)
233
+ if (!shouldNotify(db, taskId, userId, mapping.type)) continue;
234
+
235
+ const title = mapping.titleFn(task);
236
+ let payload;
237
+ try {
238
+ payload = typeof event.payload === 'string' ? JSON.parse(event.payload) : (event.payload || {});
239
+ } catch {
240
+ payload = {};
241
+ }
242
+
243
+ const outboxPayload = {
244
+ eventType: mapping.type,
245
+ taskId,
246
+ userId,
247
+ title,
248
+ slug: task.slug || null,
249
+ timestamp: event.dispatched_at || new Date().toISOString(),
250
+ details: payload,
251
+ };
252
+
253
+ insertNotificationAndOutbox(db, {
254
+ eventId: event.id, // audit log UUID — stable dedup key
255
+ userId,
256
+ taskId,
257
+ type: mapping.type,
258
+ tier: mapping.tier,
259
+ title,
260
+ body: payload.error || payload.reason || null,
261
+ payload: outboxPayload,
262
+ });
263
+
264
+ affectedUsers.add(userId);
265
+ }
266
+
267
+ // Cap unread per user after batch
268
+ for (const uid of affectedUsers) {
269
+ capUnread(db, uid);
270
+ }
271
+
272
+ // Advance cursor atomically with the inserts
273
+ advanceCursorInTxn(db, CONSUMER_ID, lastRowid);
274
+ });
275
+
276
+ runBatch();
277
+ return events.length;
278
+ }
279
+
280
+ // ── TTL / prune job ─────────────────────────────────────────────────────────
281
+
282
+ /**
283
+ * Delete notifications older than TTL_DAYS_MIN (60) days.
284
+ * Runs a second pass to also prune read notifications older than TTL_DAYS_MAX (90) days.
285
+ * Safe to call at any time — does not interact with the cursor.
286
+ *
287
+ * @returns {{ deleted: number }}
288
+ */
289
+ function pruneOld() {
290
+ const { deleted } = pruneOldNotifications({ minDays: TTL_DAYS_MIN, maxDays: TTL_DAYS_MAX });
291
+ if (deleted > 0) {
292
+ console.log(`[notificationProjector] pruned ${deleted} old notifications`);
293
+ }
294
+ return { deleted };
295
+ }
296
+
297
+ // ── Polling loop ────────────────────────────────────────────────────────────
298
+
299
+ let _timer = null;
300
+ let _running = false;
301
+
302
+ /**
303
+ * Start the projector polling loop.
304
+ * Safe to call multiple times — subsequent calls are no-ops.
305
+ */
306
+ function start() {
307
+ if (_running) return;
308
+ _running = true;
309
+ console.log(`[notificationProjector] starting (consumer=${CONSUMER_ID}, poll=${POLL_INTERVAL_MS}ms)`);
310
+ pruneJob.start();
311
+
312
+ const tick = () => {
313
+ if (!_running) return;
314
+ try {
315
+ const n = processBatch();
316
+ if (n > 0) {
317
+ console.debug(`[notificationProjector] processed ${n} events`);
318
+ }
319
+ } catch (err) {
320
+ console.error('[notificationProjector] error in batch', err);
321
+ }
322
+ if (_running) {
323
+ _timer = setTimeout(tick, POLL_INTERVAL_MS);
324
+ }
325
+ };
326
+
327
+ _timer = setTimeout(tick, 0);
328
+ }
329
+
330
+ /**
331
+ * Stop the projector polling loop gracefully.
332
+ */
333
+ function stop() {
334
+ _running = false;
335
+ if (_timer) {
336
+ clearTimeout(_timer);
337
+ _timer = null;
338
+ }
339
+ pruneJob.stop();
340
+ console.log('[notificationProjector] stopped');
341
+ }
342
+
343
+ /**
344
+ * Run a single batch synchronously (useful for tests and CLI replay).
345
+ * @returns {number} number of events processed
346
+ */
347
+ function runOnce() {
348
+ return processBatch();
349
+ }
350
+
351
+ module.exports = { start, stop, runOnce, pruneOld, CONSUMER_ID };
@@ -1,2 +1,2 @@
1
1
  export * from "./thread-adapter";
2
- export { LocalThreadAdapter } from "./local-thread-adapter";
2
+ export { LocalWorkspaceAdapter } from "./local-thread-adapter";
@@ -1,22 +1,22 @@
1
- import type { ListThreadsResult, SaveThreadInput, Thread, ThreadAdapter, ThreadListOptions } from "./thread-adapter";
1
+ import type { ListWorkspacesResult, SaveWorkspaceInput, Workspace, WorkspaceAdapter, WorkspaceListOptions } from "./thread-adapter";
2
2
 
3
3
  const STORAGE_KEY = "agx-chat:threads";
4
4
 
5
- interface LocalThreadState {
6
- threads: Record<string, Thread>;
5
+ interface LocalWorkspaceState {
6
+ threads: Record<string, Workspace>;
7
7
  }
8
8
 
9
9
  function getStorage(): Storage {
10
10
  const globalStorage = (globalThis as typeof globalThis & { localStorage?: Storage }).localStorage;
11
11
  if (!globalStorage) {
12
12
  throw new Error(
13
- "LocalThreadAdapter requires a browser-like environment with `localStorage`."
13
+ "LocalWorkspaceAdapter requires a browser-like environment with `localStorage`."
14
14
  );
15
15
  }
16
16
  return globalStorage;
17
17
  }
18
18
 
19
- function readState(): LocalThreadState {
19
+ function readState(): LocalWorkspaceState {
20
20
  const storage = getStorage();
21
21
  const raw = storage.getItem(STORAGE_KEY);
22
22
  if (!raw) {
@@ -29,7 +29,7 @@ function readState(): LocalThreadState {
29
29
  threads: Object.fromEntries(
30
30
  Object.entries(parsed.threads).map(([id, value]) => [
31
31
  id,
32
- sanitizeStoredThread(id, value),
32
+ sanitizeStoredWorkspace(id, value),
33
33
  ])
34
34
  ),
35
35
  };
@@ -40,38 +40,38 @@ function readState(): LocalThreadState {
40
40
  return { threads: {} };
41
41
  }
42
42
 
43
- function writeState(state: LocalThreadState): void {
43
+ function writeState(state: LocalWorkspaceState): void {
44
44
  getStorage().setItem(STORAGE_KEY, JSON.stringify(state));
45
45
  }
46
46
 
47
- function sanitizeStoredThread(id: string, value: unknown): Thread {
48
- const base = value as Partial<Thread> | undefined;
47
+ function sanitizeStoredWorkspace(id: string, value: unknown): Workspace {
48
+ const base = value as Partial<Workspace> | undefined;
49
49
  return {
50
50
  id,
51
51
  title: base?.title,
52
- messages: Array.isArray(base?.messages) ? [...(base!.messages as Thread["messages"])] : [],
52
+ messages: Array.isArray(base?.messages) ? [...(base!.messages as Workspace["messages"])] : [],
53
53
  createdAt: typeof base?.createdAt === "number" ? base.createdAt : Date.now(),
54
54
  updatedAt: typeof base?.updatedAt === "number" ? base.updatedAt : Date.now(),
55
55
  metadata: base?.metadata,
56
56
  };
57
57
  }
58
58
 
59
- function cloneThread(thread: Thread): Thread {
59
+ function cloneWorkspace(workspace: Workspace): Workspace {
60
60
  return {
61
- ...thread,
62
- messages: thread.messages.map((msg) => ({ ...msg })),
63
- metadata: thread.metadata ? { ...thread.metadata } : undefined,
61
+ ...workspace,
62
+ messages: workspace.messages.map((msg) => ({ ...msg })),
63
+ metadata: workspace.metadata ? { ...workspace.metadata } : undefined,
64
64
  };
65
65
  }
66
66
 
67
- export class LocalThreadAdapter implements ThreadAdapter {
68
- async saveThread(input: SaveThreadInput): Promise<Thread> {
67
+ export class LocalWorkspaceAdapter implements WorkspaceAdapter {
68
+ async saveWorkspace(input: SaveWorkspaceInput): Promise<Workspace> {
69
69
  const now = Date.now();
70
70
  const state = readState();
71
71
  const existing = state.threads[input.id];
72
72
  const createdAt = existing?.createdAt ?? input.createdAt ?? now;
73
73
  const updatedAt = input.updatedAt ?? now;
74
- const thread: Thread = {
74
+ const workspace: Workspace = {
75
75
  id: input.id,
76
76
  title: input.title,
77
77
  messages: input.messages.map((msg) => ({ ...msg })),
@@ -79,18 +79,18 @@ export class LocalThreadAdapter implements ThreadAdapter {
79
79
  createdAt,
80
80
  updatedAt,
81
81
  };
82
- state.threads[input.id] = thread;
82
+ state.threads[input.id] = workspace;
83
83
  writeState(state);
84
- return cloneThread(thread);
84
+ return cloneWorkspace(workspace);
85
85
  }
86
86
 
87
- async loadThread(threadId: string): Promise<Thread | null> {
87
+ async loadWorkspace(workspaceId: string): Promise<Workspace | null> {
88
88
  const state = readState();
89
- const thread = state.threads[threadId];
90
- return thread ? cloneThread(thread) : null;
89
+ const workspace = state.threads[workspaceId];
90
+ return workspace ? cloneWorkspace(workspace) : null;
91
91
  }
92
92
 
93
- async listThreads(options?: ThreadListOptions): Promise<ListThreadsResult> {
93
+ async listWorkspaces(options?: WorkspaceListOptions): Promise<ListWorkspacesResult> {
94
94
  const state = readState();
95
95
  const all = Object.values(state.threads);
96
96
  const order = options?.order ?? "desc";
@@ -104,14 +104,14 @@ export class LocalThreadAdapter implements ThreadAdapter {
104
104
  : sorted.slice(offset);
105
105
  return {
106
106
  total: all.length,
107
- threads: page.map(cloneThread),
107
+ workspaces: page.map(cloneWorkspace),
108
108
  };
109
109
  }
110
110
 
111
- async deleteThread(threadId: string): Promise<void> {
111
+ async deleteWorkspace(workspaceId: string): Promise<void> {
112
112
  const state = readState();
113
- if (state.threads[threadId]) {
114
- delete state.threads[threadId];
113
+ if (state.threads[workspaceId]) {
114
+ delete state.threads[workspaceId];
115
115
  writeState(state);
116
116
  }
117
117
  }