@mndrk/agx 2.4.1 → 2.4.3

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 (305) hide show
  1. package/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
  2. package/cloud-runtime/standalone/apps/local/.next/app-path-routes-manifest.json +5 -0
  3. package/cloud-runtime/standalone/apps/local/.next/build-manifest.json +2 -2
  4. package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
  5. package/cloud-runtime/standalone/apps/local/.next/routes-manifest.json +41 -0
  6. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +2 -2
  7. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.rsc +1 -1
  8. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.html +2 -2
  15. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.rsc +2 -2
  16. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  17. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  18. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  19. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  20. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  21. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  22. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page.js.nft.json +1 -1
  23. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  24. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page.js.nft.json +1 -1
  25. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  26. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.html +2 -2
  27. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.rsc +3 -3
  28. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_full.segment.rsc +3 -3
  29. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  30. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  31. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  32. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +2 -2
  33. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents.segment.rsc +1 -1
  34. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agent-specs/route.js.nft.json +1 -1
  35. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/[id]/profile/route.js.nft.json +1 -1
  36. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/export/route.js.nft.json +1 -1
  37. package/cloud-runtime/standalone/apps/local/.next/server/app/api/chat/route.js.nft.json +1 -1
  38. package/cloud-runtime/standalone/apps/local/.next/server/app/api/file-search/route.js.nft.json +1 -1
  39. package/cloud-runtime/standalone/apps/local/.next/server/app/api/participants/route.js.nft.json +1 -1
  40. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/scheduled-tasks/route.js.nft.json +1 -1
  41. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route.js.nft.json +1 -1
  42. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/search/route.js.nft.json +1 -1
  43. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/teams/route.js.nft.json +1 -1
  44. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/poll/route.js.nft.json +1 -1
  45. package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/check/[id]/route.js.nft.json +1 -1
  46. package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/route.js.nft.json +1 -1
  47. package/cloud-runtime/standalone/apps/local/.next/server/app/api/queue/route.js.nft.json +1 -1
  48. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/debug/route.js.nft.json +1 -1
  49. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
  50. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/assign/route.js.nft.json +1 -1
  51. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/available/route.js.nft.json +1 -1
  52. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/detail/route.js.nft.json +1 -1
  53. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/history/route.js.nft.json +1 -1
  54. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/learn/route.js.nft.json +1 -1
  55. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/route.js.nft.json +1 -1
  56. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/unlearn/route.js.nft.json +1 -1
  57. package/cloud-runtime/standalone/apps/local/.next/server/app/api/status/route.js.nft.json +1 -1
  58. package/cloud-runtime/standalone/apps/local/.next/server/app/api/summarize/route.js.nft.json +1 -1
  59. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
  60. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
  61. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
  62. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  63. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/route.js.nft.json +1 -1
  64. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
  65. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/route.js.nft.json +1 -1
  66. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/auth/route.js.nft.json +1 -1
  67. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/callback/route.js.nft.json +1 -1
  68. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/groups/route.js.nft.json +1 -1
  69. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/activity/route.js.nft.json +1 -1
  70. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/recap/route.js.nft.json +1 -1
  71. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/route.js.nft.json +1 -1
  72. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/route.js.nft.json +1 -1
  73. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/app-paths-manifest.json +3 -0
  74. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/build-manifest.json +11 -0
  75. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/server-reference-manifest.json +4 -0
  76. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js +7 -0
  77. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js.map +5 -0
  78. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js.nft.json +1 -0
  79. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route_client-reference-manifest.js +2 -0
  80. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/app-paths-manifest.json +3 -0
  81. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/build-manifest.json +11 -0
  82. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/server-reference-manifest.json +4 -0
  83. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js +7 -0
  84. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js.map +5 -0
  85. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js.nft.json +1 -0
  86. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route_client-reference-manifest.js +2 -0
  87. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/mcp-setup/route.js.nft.json +1 -1
  88. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/app-paths-manifest.json +3 -0
  89. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/build-manifest.json +11 -0
  90. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/server-reference-manifest.json +4 -0
  91. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js +7 -0
  92. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js.map +5 -0
  93. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js.nft.json +1 -0
  94. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route_client-reference-manifest.js +2 -0
  95. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/app-paths-manifest.json +3 -0
  96. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/build-manifest.json +11 -0
  97. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/server-reference-manifest.json +4 -0
  98. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js +7 -0
  99. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js.map +5 -0
  100. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js.nft.json +1 -0
  101. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route_client-reference-manifest.js +2 -0
  102. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/options/route.js.nft.json +1 -1
  103. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/[id]/route.js.nft.json +1 -1
  104. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/route.js.nft.json +1 -1
  105. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/scripted/route.js.nft.json +1 -1
  106. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/app-paths-manifest.json +3 -0
  107. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/build-manifest.json +11 -0
  108. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/server-reference-manifest.json +4 -0
  109. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js +7 -0
  110. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js.map +5 -0
  111. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js.nft.json +1 -0
  112. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route_client-reference-manifest.js +2 -0
  113. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/status/route.js.nft.json +1 -1
  114. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token/route.js.nft.json +1 -1
  115. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token-receive/route.js.nft.json +1 -1
  116. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/worker/route.js.nft.json +1 -1
  117. package/cloud-runtime/standalone/apps/local/.next/server/app/api/update-check/route.js.nft.json +1 -1
  118. package/cloud-runtime/standalone/apps/local/.next/server/app/index.html +2 -2
  119. package/cloud-runtime/standalone/apps/local/.next/server/app/index.rsc +2 -2
  120. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  121. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +2 -2
  122. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_head.segment.rsc +1 -1
  123. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_index.segment.rsc +2 -2
  124. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  125. package/cloud-runtime/standalone/apps/local/.next/server/app/page_client-reference-manifest.js +1 -1
  126. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page/react-loadable-manifest.json +2 -2
  127. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page.js.nft.json +1 -1
  128. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
  129. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page.js.nft.json +1 -1
  130. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
  131. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js.nft.json +1 -1
  132. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +1 -1
  133. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
  134. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  135. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page.js.nft.json +1 -1
  136. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page_client-reference-manifest.js +1 -1
  137. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page.js.nft.json +1 -1
  138. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page_client-reference-manifest.js +1 -1
  139. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  140. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  141. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page.js.nft.json +1 -1
  142. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  143. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page.js.nft.json +1 -1
  144. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page_client-reference-manifest.js +1 -1
  145. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page.js.nft.json +1 -1
  146. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page_client-reference-manifest.js +1 -1
  147. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page.js.nft.json +1 -1
  148. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page_client-reference-manifest.js +1 -1
  149. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page.js.nft.json +1 -1
  150. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page_client-reference-manifest.js +1 -1
  151. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page.js.nft.json +1 -1
  152. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page_client-reference-manifest.js +1 -1
  153. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page.js.nft.json +1 -1
  154. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page_client-reference-manifest.js +1 -1
  155. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
  156. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
  157. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page/react-loadable-manifest.json +1 -1
  158. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page.js.nft.json +1 -1
  159. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page_client-reference-manifest.js +1 -1
  160. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page.js.nft.json +1 -1
  161. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page_client-reference-manifest.js +1 -1
  162. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page/react-loadable-manifest.json +1 -1
  163. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page.js.nft.json +1 -1
  164. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page_client-reference-manifest.js +1 -1
  165. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  166. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
  167. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +2 -2
  168. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  169. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  170. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  171. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  172. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
  173. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  174. package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  175. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
  176. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +2 -2
  177. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +2 -2
  178. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
  179. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
  180. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  181. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
  182. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
  183. package/cloud-runtime/standalone/apps/local/.next/server/app/status/page_client-reference-manifest.js +1 -1
  184. package/cloud-runtime/standalone/apps/local/.next/server/app/status.html +2 -2
  185. package/cloud-runtime/standalone/apps/local/.next/server/app/status.rsc +2 -2
  186. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +2 -2
  187. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_head.segment.rsc +1 -1
  188. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_index.segment.rsc +2 -2
  189. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  190. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
  191. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status.segment.rsc +1 -1
  192. package/cloud-runtime/standalone/apps/local/.next/server/app-paths-manifest.json +5 -0
  193. package/cloud-runtime/standalone/apps/local/.next/server/chunks/083c9_next-internal_server_app_api_trackers_[tracker]_metadata_route_actions_c83fcc1a.js +3 -0
  194. package/cloud-runtime/standalone/apps/local/.next/server/chunks/30bdd_server_app_api_trackers_[tracker]_labels_[id]_route_actions_2646388d.js +3 -0
  195. package/cloud-runtime/standalone/apps/local/.next/server/chunks/30bdd_server_app_api_trackers_[tracker]_metadata_bulk_route_actions_f43e6831.js +3 -0
  196. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0e04eca4._.js +40 -0
  197. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__10a90219._.js +3 -3
  198. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__1d970ad0._.js +40 -0
  199. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__3a038592._.js +3 -3
  200. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__3b27260f._.js +23 -8
  201. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__580ddcca._.js +40 -0
  202. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__5da8d281._.js +129 -0
  203. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__68b692c4._.js +9 -9
  204. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__76030d44._.js +40 -0
  205. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__7db7c421._.js +20 -5
  206. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__7fcbb0c2._.js +4 -4
  207. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__d8cc43c7._.js +22 -7
  208. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__f598d976._.js +1 -1
  209. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__f7a936d9._.js +21 -6
  210. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_80b34b78._.js +1 -1
  211. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_8f9f647d._.js +28 -13
  212. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_d256aa32._.js +28 -25
  213. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_orchestrator_chat-processor_ts_46384f36._.js +17 -17
  214. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_tracker_tracker-run-store_ts_5aa9592e._.js +22 -7
  215. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ebff2__next-internal_server_app_api_trackers_[tracker]_labels_route_actions_8ba41152.js +3 -0
  216. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ebff2__next-internal_server_app_api_trackers_[tracker]_stats_route_actions_7da4ccde.js +3 -0
  217. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__799f4d13._.js → [root-of-the-server]__2af44092._.js} +2 -2
  218. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__452cb0f0._.js +3 -0
  219. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__489568b4._.js +3 -0
  220. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__4ec098a0._.js +3 -0
  221. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__53bd50df._.js +3 -0
  222. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__7774a40c._.js +3 -0
  223. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__b8484b0e._.js +7 -0
  224. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__51edc9b6._.js → [root-of-the-server]__bd05ee09._.js} +2 -2
  225. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_8c4beba9._.js +7 -0
  226. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{apps_local_35d90b5d._.js → apps_local_bbb7b83b._.js} +2 -2
  227. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_TrackerBoard_tsx_98970bab._.js +6 -6
  228. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_chat-ui_f0554cb4._.js +1 -1
  229. package/cloud-runtime/standalone/apps/local/.next/server/functions-config-manifest.json +5 -0
  230. package/cloud-runtime/standalone/apps/local/.next/server/middleware-manifest.json +5 -5
  231. package/cloud-runtime/standalone/apps/local/.next/server/pages/404.html +2 -2
  232. package/cloud-runtime/standalone/apps/local/.next/server/pages/500.html +2 -2
  233. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
  234. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
  235. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0243e7d015db440d.js +5 -0
  236. package/cloud-runtime/standalone/apps/local/.next/static/chunks/42a62b80b32a97f7.js +9 -0
  237. package/cloud-runtime/standalone/apps/local/.next/static/chunks/5d047fc7267a8f53.js +16 -0
  238. package/cloud-runtime/standalone/apps/local/.next/static/chunks/716e1716d526ded9.js +46 -0
  239. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{77cea126364aab3c.js → 7353a3a1fcd5825c.js} +1 -1
  240. package/cloud-runtime/standalone/apps/local/.next/static/chunks/9acdd370e9daca0d.js +16 -0
  241. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{6c777fe66e042eec.js → 9df45611d6c84e02.js} +1 -1
  242. package/cloud-runtime/standalone/apps/local/.next/static/chunks/a084c6475513e6fe.js +16 -0
  243. package/cloud-runtime/standalone/apps/local/.next/static/chunks/aa6db7c91c1ccd5f.js +16 -0
  244. package/cloud-runtime/standalone/apps/local/.next/static/chunks/cecf3e8c47c785f5.js +5 -0
  245. package/cloud-runtime/standalone/apps/local/.next/static/chunks/d5607ac80145f3b7.js +1 -0
  246. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{d5b14e14665024a9.js → d5c307b52fd87861.js} +1 -1
  247. package/cloud-runtime/standalone/apps/local/.next/static/chunks/f4acf76cb6c82c73.js +16 -0
  248. package/cloud-runtime/standalone/apps/local/.next/static/chunks/f6d31036588ddfe4.css +1 -0
  249. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/labels/[id]/route.ts +23 -0
  250. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/labels/route.ts +41 -0
  251. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/metadata/bulk/route.ts +68 -0
  252. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/metadata/route.ts +31 -0
  253. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/options/route.ts +1 -0
  254. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/stats/route.ts +20 -0
  255. package/cloud-runtime/standalone/apps/local/components/TrackerBoard.tsx +609 -85
  256. package/cloud-runtime/standalone/apps/local/components/tracker/FibonacciPicker.tsx +41 -0
  257. package/cloud-runtime/standalone/apps/local/components/tracker/FolderRow.tsx +1 -1
  258. package/cloud-runtime/standalone/apps/local/components/tracker/LabelPicker.tsx +118 -0
  259. package/cloud-runtime/standalone/apps/local/components/tracker/LabelSettings.tsx +104 -0
  260. package/cloud-runtime/standalone/apps/local/components/tracker/PromptPopover.tsx +64 -0
  261. package/cloud-runtime/standalone/apps/local/components/tracker/SelectionBar.tsx +276 -23
  262. package/cloud-runtime/standalone/apps/local/components/tracker/StatusGroupRow.tsx +50 -0
  263. package/cloud-runtime/standalone/apps/local/components/tracker/TicketPanel.tsx +14 -2
  264. package/cloud-runtime/standalone/apps/local/components/tracker/TicketRow.tsx +147 -7
  265. package/cloud-runtime/standalone/apps/local/components/tracker/TrackerSettingsModal.tsx +14 -2
  266. package/cloud-runtime/standalone/apps/local/components/ui/ResizeHandle.tsx +15 -22
  267. package/cloud-runtime/standalone/apps/local/hooks/useTrackerIssueStats.ts +52 -0
  268. package/cloud-runtime/standalone/apps/local/hooks/useTrackerItemMetadata.ts +67 -0
  269. package/cloud-runtime/standalone/apps/local/hooks/useTrackerItemsMetadata.ts +51 -0
  270. package/cloud-runtime/standalone/apps/local/hooks/useTrackerLabels.ts +74 -0
  271. package/cloud-runtime/standalone/apps/local/hooks/useTrackerRuns.ts +5 -0
  272. package/cloud-runtime/standalone/apps/local/lib/agent-process-registry.ts +6 -1
  273. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/jira/adapter.tsx +1 -0
  274. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/jira/issues.ts +1 -0
  275. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/adapter.tsx +1 -0
  276. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/client.ts +5 -0
  277. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/issues.ts +1 -0
  278. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-adapter.ts +2 -0
  279. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-item-metadata-store.ts +262 -0
  280. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-item-store.ts +10 -3
  281. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-run-store.ts +42 -0
  282. package/cloud-runtime/standalone/apps/local/state/trackerBoardFilters.ts +4 -0
  283. package/cloud-runtime/standalone/apps/local/worker/index.js +5 -2
  284. package/package.json +1 -1
  285. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__30bf097e._.js +0 -3
  286. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__46ae9d33._.js +0 -3
  287. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__50fd8680._.js +0 -3
  288. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__8059a285._.js +0 -3
  289. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__886953ec._.js +0 -7
  290. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__97160565._.js +0 -3
  291. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0876dfd6ce07abaf.js +0 -9
  292. package/cloud-runtime/standalone/apps/local/.next/static/chunks/1ec83777a9abd420.js +0 -16
  293. package/cloud-runtime/standalone/apps/local/.next/static/chunks/286758b0fd546c68.js +0 -16
  294. package/cloud-runtime/standalone/apps/local/.next/static/chunks/a72ed5cb3feb0d51.js +0 -5
  295. package/cloud-runtime/standalone/apps/local/.next/static/chunks/b02c180ad1d968eb.js +0 -16
  296. package/cloud-runtime/standalone/apps/local/.next/static/chunks/b048a4812b51f97a.js +0 -1
  297. package/cloud-runtime/standalone/apps/local/.next/static/chunks/c63d97c917d96f47.js +0 -46
  298. package/cloud-runtime/standalone/apps/local/.next/static/chunks/d3bf70e2fbdc0ae5.js +0 -5
  299. package/cloud-runtime/standalone/apps/local/.next/static/chunks/dd5a56eea2d4c067.js +0 -16
  300. package/cloud-runtime/standalone/apps/local/.next/static/chunks/dd7d7c382389b8b9.js +0 -16
  301. package/cloud-runtime/standalone/apps/local/.next/static/chunks/ec92e3bd6c2db6e6.css +0 -1
  302. package/cloud-runtime/standalone/apps/local/.next/static/chunks/ffcc32453866d0c2.js +0 -1
  303. /package/cloud-runtime/standalone/apps/local/.next/static/{ycVU7ABTMiX10ainku7bE → 4MnUE2NHztybGBWFbcBo5}/_buildManifest.js +0 -0
  304. /package/cloud-runtime/standalone/apps/local/.next/static/{ycVU7ABTMiX10ainku7bE → 4MnUE2NHztybGBWFbcBo5}/_clientMiddlewareManifest.json +0 -0
  305. /package/cloud-runtime/standalone/apps/local/.next/static/{ycVU7ABTMiX10ainku7bE → 4MnUE2NHztybGBWFbcBo5}/_ssgManifest.js +0 -0
@@ -0,0 +1,41 @@
1
+ "use client";
2
+
3
+ import React from "react";
4
+ import { X } from "lucide-react";
5
+
6
+ const FIBONACCI = [1, 2, 3, 5, 8, 13, 21] as const;
7
+
8
+ interface FibonacciPickerProps {
9
+ value?: number | null;
10
+ onSelect: (value: number | null) => void;
11
+ }
12
+
13
+ export function FibonacciPicker({ value, onSelect }: FibonacciPickerProps) {
14
+ return (
15
+ <div className="flex items-center gap-1">
16
+ {FIBONACCI.map((n) => (
17
+ <button
18
+ key={n}
19
+ type="button"
20
+ className={`flex h-7 w-7 items-center justify-center rounded-md text-xs font-medium transition-colors ${
21
+ value === n
22
+ ? "bg-[var(--primary)] text-[var(--primary-foreground)]"
23
+ : "bg-[var(--background)] text-[var(--muted-foreground)] hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]"
24
+ }`}
25
+ onClick={() => onSelect(n)}
26
+ >
27
+ {n}
28
+ </button>
29
+ ))}
30
+ <button
31
+ type="button"
32
+ className="flex h-7 items-center gap-1 rounded-md px-2 text-xs text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)]"
33
+ onClick={() => onSelect(null)}
34
+ title="Clear estimate"
35
+ >
36
+ <X size={10} />
37
+ Clear
38
+ </button>
39
+ </div>
40
+ );
41
+ }
@@ -123,7 +123,7 @@ export function FolderRow({
123
123
  className={`flex h-5 w-5 shrink-0 items-center justify-center rounded transition-all hover:bg-zinc-700 ${
124
124
  hasNote
125
125
  ? "text-amber-400 opacity-100"
126
- : "text-[var(--muted-foreground)] opacity-0 group-hover:opacity-100"
126
+ : `text-[var(--muted-foreground)] ${selected ? "opacity-100" : "opacity-0 group-hover:opacity-100"}`
127
127
  }`}
128
128
  onClick={handleNoteClick}
129
129
  title={hasNote ? "Edit group note" : "Add group note"}
@@ -0,0 +1,118 @@
1
+ "use client";
2
+
3
+ import React, { useState, useCallback, useMemo } from "react";
4
+ import { Check, Minus, Plus } from "lucide-react";
5
+
6
+ interface LabelEntry {
7
+ name: string;
8
+ color: string | null;
9
+ defined: boolean;
10
+ }
11
+
12
+ interface LabelPickerProps {
13
+ labels: LabelEntry[];
14
+ selectedLabels: string[];
15
+ labelCounts?: Map<string, number>;
16
+ totalSelected?: number;
17
+ onToggle: (label: string) => void;
18
+ onAdd: (label: string) => void;
19
+ }
20
+
21
+ export function LabelPicker({
22
+ labels,
23
+ selectedLabels,
24
+ labelCounts,
25
+ totalSelected,
26
+ onToggle,
27
+ onAdd,
28
+ }: LabelPickerProps) {
29
+ const [input, setInput] = useState("");
30
+ const selectedSet = useMemo(() => new Set(selectedLabels), [selectedLabels]);
31
+ const isBulk = totalSelected != null && totalSelected > 0;
32
+
33
+ const filteredLabels = useMemo(() => {
34
+ const q = input.trim().toLowerCase();
35
+ if (!q) return labels;
36
+ return labels.filter((l) => l.name.toLowerCase().includes(q));
37
+ }, [labels, input]);
38
+
39
+ const handleAdd = useCallback(() => {
40
+ const trimmed = input.trim();
41
+ if (!trimmed) return;
42
+ if (!labels.some((l) => l.name.toLowerCase() === trimmed.toLowerCase())) {
43
+ onAdd(trimmed);
44
+ }
45
+ onToggle(trimmed);
46
+ setInput("");
47
+ }, [input, labels, onAdd, onToggle]);
48
+
49
+ return (
50
+ <div className="flex w-56 flex-col gap-1">
51
+ <div className="max-h-48 overflow-y-auto">
52
+ {filteredLabels.map((label) => {
53
+ const isSelected = selectedSet.has(label.name);
54
+ const count = labelCounts?.get(label.name) ?? 0;
55
+ const isMixed = isBulk && count > 0 && count < (totalSelected ?? 0);
56
+
57
+ return (
58
+ <button
59
+ key={label.name}
60
+ type="button"
61
+ className={`flex w-full items-center gap-2 rounded-lg px-3 py-1.5 text-left text-xs transition-colors ${
62
+ isSelected
63
+ ? "bg-[var(--background)] font-medium text-[var(--foreground)]"
64
+ : "text-[var(--muted-foreground)] hover:bg-[var(--background)] hover:text-[var(--foreground)]"
65
+ }`}
66
+ onClick={() => onToggle(label.name)}
67
+ >
68
+ <span
69
+ className={`flex h-4 w-4 shrink-0 items-center justify-center rounded border ${
70
+ isSelected || isMixed
71
+ ? "border-blue-500 bg-blue-500 text-white"
72
+ : "border-[var(--card-border)]"
73
+ }`}
74
+ >
75
+ {isMixed ? <Minus size={10} /> : isSelected ? <Check size={10} /> : null}
76
+ </span>
77
+ {label.color && (
78
+ <span
79
+ className="h-2.5 w-2.5 shrink-0 rounded-full"
80
+ style={{ backgroundColor: label.color }}
81
+ />
82
+ )}
83
+ <span className="min-w-0 flex-1 truncate">{label.name}</span>
84
+ </button>
85
+ );
86
+ })}
87
+ {filteredLabels.length === 0 && input.trim() && (
88
+ <div className="px-3 py-2 text-xs text-[var(--muted-foreground)]">
89
+ No matching labels
90
+ </div>
91
+ )}
92
+ </div>
93
+ <div className="flex items-center gap-1 border-t border-[var(--card-border)] pt-1">
94
+ <input
95
+ type="text"
96
+ className="min-w-0 flex-1 bg-transparent px-2 py-1 text-xs outline-none placeholder:text-[var(--muted-foreground)]"
97
+ placeholder="Add label..."
98
+ value={input}
99
+ onChange={(e) => setInput(e.target.value)}
100
+ onKeyDown={(e) => {
101
+ if (e.key === "Enter") {
102
+ e.preventDefault();
103
+ handleAdd();
104
+ }
105
+ }}
106
+ />
107
+ <button
108
+ type="button"
109
+ className="flex h-6 w-6 items-center justify-center rounded text-[var(--muted-foreground)] transition-colors hover:bg-[var(--card-bg)] hover:text-[var(--foreground)] disabled:opacity-40"
110
+ onClick={handleAdd}
111
+ disabled={!input.trim()}
112
+ >
113
+ <Plus size={12} />
114
+ </button>
115
+ </div>
116
+ </div>
117
+ );
118
+ }
@@ -0,0 +1,104 @@
1
+ "use client";
2
+
3
+ import React, { useState } from "react";
4
+ import { Plus, Trash2 } from "lucide-react";
5
+ import type { LabelDefinition } from "@/hooks/useTrackerLabels";
6
+
7
+ interface LabelSettingsProps {
8
+ definitions: LabelDefinition[];
9
+ onCreate: (name: string, color?: string) => Promise<void>;
10
+ onDelete: (id: string) => Promise<void>;
11
+ }
12
+
13
+ const PRESET_COLORS = [
14
+ "#ef4444", "#f97316", "#eab308", "#22c55e",
15
+ "#06b6d4", "#3b82f6", "#8b5cf6", "#ec4899",
16
+ ];
17
+
18
+ export function LabelSettings({ definitions, onCreate, onDelete }: LabelSettingsProps) {
19
+ const [name, setName] = useState("");
20
+ const [color, setColor] = useState<string>(PRESET_COLORS[0]);
21
+ const [creating, setCreating] = useState(false);
22
+
23
+ const handleCreate = async () => {
24
+ if (!name.trim() || creating) return;
25
+ setCreating(true);
26
+ await onCreate(name.trim(), color);
27
+ setName("");
28
+ setCreating(false);
29
+ };
30
+
31
+ return (
32
+ <div className="space-y-4">
33
+ <h3 className="text-sm font-semibold text-[var(--foreground)]">Local Labels</h3>
34
+ <p className="text-xs text-[var(--muted-foreground)]">
35
+ Define labels for local task tracking. These are stored locally and not synced to your tracker.
36
+ </p>
37
+
38
+ {definitions.length > 0 && (
39
+ <div className="space-y-1">
40
+ {definitions.map((def) => (
41
+ <div
42
+ key={def.id}
43
+ className="flex items-center gap-3 rounded-lg px-3 py-2 hover:bg-[var(--card-bg)]"
44
+ >
45
+ {def.color && (
46
+ <span
47
+ className="h-3 w-3 shrink-0 rounded-full"
48
+ style={{ backgroundColor: def.color }}
49
+ />
50
+ )}
51
+ <span className="min-w-0 flex-1 text-sm text-[var(--foreground)]">{def.name}</span>
52
+ <button
53
+ type="button"
54
+ className="shrink-0 rounded p-1 text-[var(--muted-foreground)] transition-colors hover:bg-red-500/10 hover:text-red-400"
55
+ onClick={() => void onDelete(def.id)}
56
+ title="Delete label"
57
+ >
58
+ <Trash2 size={14} />
59
+ </button>
60
+ </div>
61
+ ))}
62
+ </div>
63
+ )}
64
+
65
+ <div className="flex items-center gap-2 rounded-lg border border-[var(--card-border)] p-2">
66
+ <div className="flex gap-1">
67
+ {PRESET_COLORS.map((c) => (
68
+ <button
69
+ key={c}
70
+ type="button"
71
+ className={`h-5 w-5 rounded-full transition-all ${
72
+ color === c ? "ring-2 ring-[var(--foreground)] ring-offset-1 ring-offset-[var(--background)]" : ""
73
+ }`}
74
+ style={{ backgroundColor: c }}
75
+ onClick={() => setColor(c)}
76
+ />
77
+ ))}
78
+ </div>
79
+ <input
80
+ type="text"
81
+ className="min-w-0 flex-1 bg-transparent px-2 py-1 text-sm outline-none placeholder:text-[var(--muted-foreground)]"
82
+ placeholder="Label name"
83
+ value={name}
84
+ onChange={(e) => setName(e.target.value)}
85
+ onKeyDown={(e) => {
86
+ if (e.key === "Enter") {
87
+ e.preventDefault();
88
+ void handleCreate();
89
+ }
90
+ }}
91
+ />
92
+ <button
93
+ type="button"
94
+ className="flex items-center gap-1 rounded-md bg-[var(--primary)] px-2.5 py-1 text-xs font-medium text-[var(--primary-foreground)] transition-opacity hover:opacity-90 disabled:opacity-50"
95
+ onClick={() => void handleCreate()}
96
+ disabled={!name.trim() || creating}
97
+ >
98
+ <Plus size={12} />
99
+ Add
100
+ </button>
101
+ </div>
102
+ </div>
103
+ );
104
+ }
@@ -0,0 +1,64 @@
1
+ "use client";
2
+
3
+ import React, { useState, useMemo } from "react";
4
+ import { Play } from "lucide-react";
5
+ import type { Participant } from "@/lib/types";
6
+ import { agentAvatarUrl } from "@/lib/tracker-board-utils";
7
+
8
+ interface PromptPopoverProps {
9
+ count: number;
10
+ participants: Participant[];
11
+ onSend: (prompt: string, agentId: string) => void;
12
+ }
13
+
14
+ export function PromptPopover({ count, participants, onSend }: PromptPopoverProps) {
15
+ const [prompt, setPrompt] = useState("");
16
+ const [agentId, setAgentId] = useState(participants[0]?.id ?? "");
17
+ const selectedAgent = useMemo(
18
+ () => participants.find((p) => p.id === agentId) ?? participants[0],
19
+ [participants, agentId]
20
+ );
21
+
22
+ return (
23
+ <div className="flex w-80 flex-col gap-3 p-1">
24
+ <textarea
25
+ className="min-h-[80px] w-full resize-none rounded-lg border border-[var(--card-border)] bg-[var(--background)] px-3 py-2 text-xs text-[var(--foreground)] outline-none placeholder:text-[var(--muted-foreground)] focus:border-[var(--muted-foreground)]"
26
+ placeholder="Enter prompt to send to all selected tickets..."
27
+ value={prompt}
28
+ onChange={(e) => setPrompt(e.target.value)}
29
+ autoFocus
30
+ />
31
+ {participants.length > 1 && (
32
+ <div className="flex items-center gap-2">
33
+ <span className="text-[10px] font-medium uppercase tracking-wider text-[var(--muted-foreground)]">
34
+ Agent
35
+ </span>
36
+ <select
37
+ className="flex-1 appearance-none rounded-md border border-[var(--card-border)] bg-[var(--background)] px-2 py-1 text-xs outline-none"
38
+ value={agentId}
39
+ onChange={(e) => setAgentId(e.target.value)}
40
+ >
41
+ {participants.map((p) => (
42
+ <option key={p.id} value={p.id}>
43
+ {p.name}
44
+ </option>
45
+ ))}
46
+ </select>
47
+ </div>
48
+ )}
49
+ <button
50
+ type="button"
51
+ className="inline-flex items-center justify-center gap-1.5 rounded-lg bg-blue-500 px-3 py-2 text-xs font-medium text-white transition-colors hover:bg-blue-600 disabled:opacity-50"
52
+ disabled={!prompt.trim()}
53
+ onClick={() => {
54
+ if (prompt.trim()) {
55
+ onSend(prompt.trim(), agentId);
56
+ }
57
+ }}
58
+ >
59
+ <Play size={12} />
60
+ Send to {count} ticket{count !== 1 ? "s" : ""}
61
+ </button>
62
+ </div>
63
+ );
64
+ }
@@ -1,38 +1,291 @@
1
1
  "use client";
2
2
 
3
- import React from "react";
4
- import { FolderPlus, X } from "lucide-react";
3
+ import React, { useState, useRef, useEffect, useCallback } from "react";
4
+ import {
5
+ FileText,
6
+ FolderPlus,
7
+ Hash,
8
+ MessageSquare,
9
+ RefreshCw,
10
+ Tag,
11
+ X,
12
+ } from "lucide-react";
13
+ import { FibonacciPicker } from "./FibonacciPicker";
14
+ import { LabelPicker } from "./LabelPicker";
15
+ import { PromptPopover } from "./PromptPopover";
16
+ import type { FilterOption } from "./TrackerBoardFilters";
17
+ import type { Participant } from "@/lib/types";
18
+
19
+ interface LabelEntry {
20
+ name: string;
21
+ color: string | null;
22
+ defined: boolean;
23
+ }
24
+
25
+ interface ItemMetadata {
26
+ labels: string[];
27
+ estimate: number | null;
28
+ }
5
29
 
6
30
  interface SelectionBarProps {
7
31
  count: number;
8
32
  onGroup: () => void;
9
33
  onClear: () => void;
34
+ onBulkRecap: () => void;
35
+ onBulkPrompt: (prompt: string, agentId: string) => void;
36
+ onBulkEstimate: (estimate: number | null) => void;
37
+ onBulkAddLabel: (label: string) => void;
38
+ onBulkRemoveLabel: (label: string) => void;
39
+ onBulkStatus: (status: string) => void;
40
+ statusOptions: FilterOption[];
41
+ participants: Participant[];
42
+ labels: LabelEntry[];
43
+ onCreateLabel: (name: string) => void;
44
+ selectedMetadata: Map<string, ItemMetadata>;
45
+ statusUpdating?: boolean;
46
+ }
47
+
48
+ type ActivePopover = "estimate" | "label" | "status" | "prompt" | null;
49
+
50
+ function Popover({
51
+ open,
52
+ onClose,
53
+ anchorRef,
54
+ children,
55
+ }: {
56
+ open: boolean;
57
+ onClose: () => void;
58
+ anchorRef: React.RefObject<HTMLButtonElement | null>;
59
+ children: React.ReactNode;
60
+ }) {
61
+ const panelRef = useRef<HTMLDivElement | null>(null);
62
+
63
+ useEffect(() => {
64
+ if (!open) return;
65
+ const handlePointerDown = (e: PointerEvent) => {
66
+ if (panelRef.current?.contains(e.target as Node)) return;
67
+ if (anchorRef.current?.contains(e.target as Node)) return;
68
+ onClose();
69
+ };
70
+ const handleKeyDown = (e: KeyboardEvent) => {
71
+ if (e.key === "Escape") onClose();
72
+ };
73
+ document.addEventListener("pointerdown", handlePointerDown);
74
+ document.addEventListener("keydown", handleKeyDown);
75
+ return () => {
76
+ document.removeEventListener("pointerdown", handlePointerDown);
77
+ document.removeEventListener("keydown", handleKeyDown);
78
+ };
79
+ }, [open, onClose, anchorRef]);
80
+
81
+ if (!open) return null;
82
+
83
+ return (
84
+ <div
85
+ ref={panelRef}
86
+ className="absolute bottom-full left-1/2 z-50 mb-2 -translate-x-1/2 rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] p-2 shadow-lg backdrop-blur-sm"
87
+ >
88
+ {children}
89
+ </div>
90
+ );
10
91
  }
11
92
 
12
- export function SelectionBar({ count, onGroup, onClear }: SelectionBarProps) {
93
+ export function SelectionBar({
94
+ count,
95
+ onGroup,
96
+ onClear,
97
+ onBulkRecap,
98
+ onBulkPrompt,
99
+ onBulkEstimate,
100
+ onBulkAddLabel,
101
+ onBulkRemoveLabel,
102
+ onBulkStatus,
103
+ statusOptions,
104
+ participants,
105
+ labels,
106
+ onCreateLabel,
107
+ selectedMetadata,
108
+ statusUpdating,
109
+ }: SelectionBarProps) {
110
+ const [activePopover, setActivePopover] = useState<ActivePopover>(null);
111
+ const estimateRef = useRef<HTMLButtonElement | null>(null);
112
+ const labelRef = useRef<HTMLButtonElement | null>(null);
113
+ const statusRef = useRef<HTMLButtonElement | null>(null);
114
+ const promptRef = useRef<HTMLButtonElement | null>(null);
115
+
116
+ const togglePopover = useCallback((popover: ActivePopover) => {
117
+ setActivePopover((current) => (current === popover ? null : popover));
118
+ }, []);
119
+
120
+ const labelCounts = React.useMemo(() => {
121
+ const counts = new Map<string, number>();
122
+ for (const meta of selectedMetadata.values()) {
123
+ for (const label of meta.labels) {
124
+ counts.set(label, (counts.get(label) ?? 0) + 1);
125
+ }
126
+ }
127
+ return counts;
128
+ }, [selectedMetadata]);
129
+
130
+ const allSelectedLabels = React.useMemo(() => {
131
+ const all = new Set<string>();
132
+ for (const meta of selectedMetadata.values()) {
133
+ for (const label of meta.labels) all.add(label);
134
+ }
135
+ return Array.from(all);
136
+ }, [selectedMetadata]);
137
+
13
138
  if (count < 2) return null;
14
139
 
140
+ const actionButtonClass =
141
+ "flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-[11px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--background)] hover:text-[var(--foreground)]";
142
+
15
143
  return (
16
- <div className="absolute bottom-4 left-1/2 z-30 -translate-x-1/2 flex items-center gap-3 rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] px-4 py-2 shadow-2xl">
17
- <span className="text-xs text-[var(--muted-foreground)]">
18
- {count} selected
19
- </span>
20
- <button
21
- type="button"
22
- className="flex items-center gap-1.5 rounded-lg bg-[var(--primary)] px-3 py-1.5 text-[11px] font-medium text-[var(--primary-foreground)] hover:opacity-90 transition-opacity"
23
- onClick={onGroup}
24
- >
25
- <FolderPlus size={12} />
26
- Group
27
- </button>
28
- <button
29
- type="button"
30
- className="flex h-6 w-6 items-center justify-center rounded text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors"
31
- onClick={onClear}
32
- aria-label="Clear selection"
33
- >
34
- <X size={14} />
35
- </button>
144
+ <div className="absolute bottom-4 left-1/2 z-30 -translate-x-1/2">
145
+ <div className="flex items-center gap-1 rounded-xl border border-[var(--card-border)] bg-[var(--card-bg)] px-3 py-1.5 shadow-2xl">
146
+ <span className="mr-1 text-xs font-medium text-[var(--foreground)]">
147
+ {count} selected
148
+ </span>
149
+
150
+ <div className="mx-1 h-4 w-px bg-[var(--card-border)]" />
151
+
152
+ {/* Recap */}
153
+ <button type="button" className={actionButtonClass} onClick={onBulkRecap} title="Recap all selected">
154
+ <FileText size={12} />
155
+ Recap
156
+ </button>
157
+
158
+ {/* Prompt */}
159
+ <div className="relative">
160
+ <button
161
+ ref={promptRef}
162
+ type="button"
163
+ className={`${actionButtonClass} ${activePopover === "prompt" ? "bg-[var(--background)] text-[var(--foreground)]" : ""}`}
164
+ onClick={() => togglePopover("prompt")}
165
+ title="Send prompt to all selected"
166
+ >
167
+ <MessageSquare size={12} />
168
+ Prompt
169
+ </button>
170
+ <Popover open={activePopover === "prompt"} onClose={() => setActivePopover(null)} anchorRef={promptRef}>
171
+ <PromptPopover
172
+ count={count}
173
+ participants={participants}
174
+ onSend={(prompt, agentId) => {
175
+ onBulkPrompt(prompt, agentId);
176
+ setActivePopover(null);
177
+ }}
178
+ />
179
+ </Popover>
180
+ </div>
181
+
182
+ {/* Estimate */}
183
+ <div className="relative">
184
+ <button
185
+ ref={estimateRef}
186
+ type="button"
187
+ className={`${actionButtonClass} ${activePopover === "estimate" ? "bg-[var(--background)] text-[var(--foreground)]" : ""}`}
188
+ onClick={() => togglePopover("estimate")}
189
+ title="Set estimate for all selected"
190
+ >
191
+ <Hash size={12} />
192
+ Estimate
193
+ </button>
194
+ <Popover open={activePopover === "estimate"} onClose={() => setActivePopover(null)} anchorRef={estimateRef}>
195
+ <FibonacciPicker
196
+ onSelect={(value) => {
197
+ onBulkEstimate(value);
198
+ setActivePopover(null);
199
+ }}
200
+ />
201
+ </Popover>
202
+ </div>
203
+
204
+ {/* Label */}
205
+ <div className="relative">
206
+ <button
207
+ ref={labelRef}
208
+ type="button"
209
+ className={`${actionButtonClass} ${activePopover === "label" ? "bg-[var(--background)] text-[var(--foreground)]" : ""}`}
210
+ onClick={() => togglePopover("label")}
211
+ title="Label all selected"
212
+ >
213
+ <Tag size={12} />
214
+ Label
215
+ </button>
216
+ <Popover open={activePopover === "label"} onClose={() => setActivePopover(null)} anchorRef={labelRef}>
217
+ <LabelPicker
218
+ labels={labels}
219
+ selectedLabels={allSelectedLabels}
220
+ labelCounts={labelCounts}
221
+ totalSelected={count}
222
+ onToggle={(label) => {
223
+ const c = labelCounts.get(label) ?? 0;
224
+ if (c === count) {
225
+ onBulkRemoveLabel(label);
226
+ } else {
227
+ onBulkAddLabel(label);
228
+ }
229
+ }}
230
+ onAdd={onCreateLabel}
231
+ />
232
+ </Popover>
233
+ </div>
234
+
235
+ {/* Status */}
236
+ <div className="relative">
237
+ <button
238
+ ref={statusRef}
239
+ type="button"
240
+ className={`${actionButtonClass} ${activePopover === "status" ? "bg-[var(--background)] text-[var(--foreground)]" : ""}`}
241
+ onClick={() => togglePopover("status")}
242
+ title="Update status for all selected"
243
+ disabled={statusUpdating}
244
+ >
245
+ {statusUpdating ? (
246
+ <RefreshCw size={12} className="animate-spin" />
247
+ ) : (
248
+ <RefreshCw size={12} />
249
+ )}
250
+ Status
251
+ </button>
252
+ <Popover open={activePopover === "status"} onClose={() => setActivePopover(null)} anchorRef={statusRef}>
253
+ <div className="flex max-h-48 w-44 flex-col overflow-y-auto">
254
+ {statusOptions.map((opt) => (
255
+ <button
256
+ key={opt.value}
257
+ type="button"
258
+ className="w-full rounded-lg px-3 py-1.5 text-left text-xs text-[var(--muted-foreground)] transition-colors hover:bg-[var(--background)] hover:text-[var(--foreground)]"
259
+ onClick={() => {
260
+ onBulkStatus(opt.value);
261
+ setActivePopover(null);
262
+ }}
263
+ >
264
+ {opt.label}
265
+ </button>
266
+ ))}
267
+ </div>
268
+ </Popover>
269
+ </div>
270
+
271
+ {/* Group */}
272
+ <button type="button" className={actionButtonClass} onClick={onGroup} title="Group selected">
273
+ <FolderPlus size={12} />
274
+ Group
275
+ </button>
276
+
277
+ <div className="mx-1 h-4 w-px bg-[var(--card-border)]" />
278
+
279
+ {/* Clear */}
280
+ <button
281
+ type="button"
282
+ className="flex h-6 w-6 items-center justify-center rounded text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]"
283
+ onClick={onClear}
284
+ aria-label="Clear selection"
285
+ >
286
+ <X size={14} />
287
+ </button>
288
+ </div>
36
289
  </div>
37
290
  );
38
291
  }