@mndrk/agx 2.4.2 → 2.4.4

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 (347) 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]/comments/route.js +1 -1
  62. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
  63. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
  64. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  65. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/route.js.nft.json +1 -1
  66. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
  67. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/route.js.nft.json +1 -1
  68. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/auth/route.js +3 -3
  69. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/auth/route.js.nft.json +1 -1
  70. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/callback/route.js +3 -3
  71. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/callback/route.js.nft.json +1 -1
  72. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/groups/route.js +3 -3
  73. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/groups/route.js.nft.json +1 -1
  74. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/activity/route.js +3 -3
  75. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/activity/route.js.nft.json +1 -1
  76. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/recap/route.js +3 -3
  77. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/recap/route.js.nft.json +1 -1
  78. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/route.js +4 -4
  79. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/route.js.nft.json +1 -1
  80. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/route.js +3 -3
  81. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/route.js.nft.json +1 -1
  82. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/app-paths-manifest.json +3 -0
  83. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/build-manifest.json +11 -0
  84. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/server-reference-manifest.json +4 -0
  85. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js +7 -0
  86. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js.map +5 -0
  87. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js.nft.json +1 -0
  88. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route_client-reference-manifest.js +2 -0
  89. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/app-paths-manifest.json +3 -0
  90. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/build-manifest.json +11 -0
  91. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/server-reference-manifest.json +4 -0
  92. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js +7 -0
  93. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js.map +5 -0
  94. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js.nft.json +1 -0
  95. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route_client-reference-manifest.js +2 -0
  96. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/mcp-setup/route.js +3 -3
  97. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/mcp-setup/route.js.nft.json +1 -1
  98. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/app-paths-manifest.json +3 -0
  99. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/build-manifest.json +11 -0
  100. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/server-reference-manifest.json +4 -0
  101. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js +7 -0
  102. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js.map +5 -0
  103. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js.nft.json +1 -0
  104. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route_client-reference-manifest.js +2 -0
  105. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/app-paths-manifest.json +3 -0
  106. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/build-manifest.json +11 -0
  107. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/server-reference-manifest.json +4 -0
  108. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js +7 -0
  109. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js.map +5 -0
  110. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js.nft.json +1 -0
  111. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route_client-reference-manifest.js +2 -0
  112. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/options/route.js +3 -3
  113. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/options/route.js.nft.json +1 -1
  114. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/[id]/route.js +1 -1
  115. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/[id]/route.js.nft.json +1 -1
  116. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/route.js +3 -3
  117. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/route.js.nft.json +1 -1
  118. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/scripted/route.js +1 -1
  119. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/scripted/route.js.nft.json +1 -1
  120. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/app-paths-manifest.json +3 -0
  121. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/build-manifest.json +11 -0
  122. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/server-reference-manifest.json +4 -0
  123. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js +7 -0
  124. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js.map +5 -0
  125. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js.nft.json +1 -0
  126. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route_client-reference-manifest.js +2 -0
  127. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/status/route.js +4 -4
  128. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/status/route.js.nft.json +1 -1
  129. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token/route.js +3 -3
  130. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token/route.js.nft.json +1 -1
  131. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token-receive/route.js +3 -3
  132. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token-receive/route.js.nft.json +1 -1
  133. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/worker/route.js +6 -6
  134. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/worker/route.js.nft.json +1 -1
  135. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/connections/route.js +7 -2
  136. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/connections/route.js.nft.json +1 -1
  137. package/cloud-runtime/standalone/apps/local/.next/server/app/api/update-check/route.js.nft.json +1 -1
  138. package/cloud-runtime/standalone/apps/local/.next/server/app/index.html +2 -2
  139. package/cloud-runtime/standalone/apps/local/.next/server/app/index.rsc +2 -2
  140. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  141. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +2 -2
  142. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_head.segment.rsc +1 -1
  143. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_index.segment.rsc +2 -2
  144. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  145. package/cloud-runtime/standalone/apps/local/.next/server/app/page_client-reference-manifest.js +1 -1
  146. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page/react-loadable-manifest.json +2 -2
  147. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page.js.nft.json +1 -1
  148. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
  149. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page.js.nft.json +1 -1
  150. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
  151. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js.nft.json +1 -1
  152. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +1 -1
  153. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
  154. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  155. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page.js.nft.json +1 -1
  156. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page_client-reference-manifest.js +1 -1
  157. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page.js.nft.json +1 -1
  158. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page_client-reference-manifest.js +1 -1
  159. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  160. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  161. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page.js.nft.json +1 -1
  162. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  163. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page.js.nft.json +1 -1
  164. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page_client-reference-manifest.js +1 -1
  165. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page.js.nft.json +1 -1
  166. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page_client-reference-manifest.js +1 -1
  167. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page.js.nft.json +1 -1
  168. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page_client-reference-manifest.js +1 -1
  169. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page.js.nft.json +1 -1
  170. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page_client-reference-manifest.js +1 -1
  171. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page.js.nft.json +1 -1
  172. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page_client-reference-manifest.js +1 -1
  173. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page.js.nft.json +1 -1
  174. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page_client-reference-manifest.js +1 -1
  175. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
  176. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
  177. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page/react-loadable-manifest.json +1 -1
  178. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page.js.nft.json +1 -1
  179. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page_client-reference-manifest.js +1 -1
  180. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page.js.nft.json +1 -1
  181. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page_client-reference-manifest.js +1 -1
  182. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page/react-loadable-manifest.json +1 -1
  183. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page.js.nft.json +1 -1
  184. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page_client-reference-manifest.js +1 -1
  185. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  186. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
  187. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +2 -2
  188. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  189. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  190. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  191. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  192. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
  193. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  194. package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  195. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
  196. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +2 -2
  197. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +2 -2
  198. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
  199. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
  200. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  201. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
  202. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
  203. package/cloud-runtime/standalone/apps/local/.next/server/app/status/page_client-reference-manifest.js +1 -1
  204. package/cloud-runtime/standalone/apps/local/.next/server/app/status.html +2 -2
  205. package/cloud-runtime/standalone/apps/local/.next/server/app/status.rsc +2 -2
  206. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +2 -2
  207. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_head.segment.rsc +1 -1
  208. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_index.segment.rsc +2 -2
  209. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  210. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
  211. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status.segment.rsc +1 -1
  212. package/cloud-runtime/standalone/apps/local/.next/server/app-paths-manifest.json +5 -0
  213. package/cloud-runtime/standalone/apps/local/.next/server/chunks/083c9_next-internal_server_app_api_trackers_[tracker]_metadata_route_actions_c83fcc1a.js +3 -0
  214. package/cloud-runtime/standalone/apps/local/.next/server/chunks/30bdd_server_app_api_trackers_[tracker]_labels_[id]_route_actions_2646388d.js +3 -0
  215. package/cloud-runtime/standalone/apps/local/.next/server/chunks/30bdd_server_app_api_trackers_[tracker]_metadata_bulk_route_actions_f43e6831.js +3 -0
  216. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0e04eca4._.js +40 -0
  217. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0fbbaf2d._.js +1 -1
  218. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__10a90219._.js +3 -3
  219. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__1d970ad0._.js +40 -0
  220. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__2ab23e45._.js → [root-of-the-server]__2eb13697._.js} +2 -2
  221. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__3a038592._.js +3 -3
  222. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__3b27260f._.js +23 -8
  223. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__498d8b2d._.js +3 -0
  224. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__580ddcca._.js +40 -0
  225. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__5da8d281._.js +129 -0
  226. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__68b692c4._.js +9 -9
  227. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__76030d44._.js +40 -0
  228. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__7db7c421._.js +20 -5
  229. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__7fcbb0c2._.js +2 -2
  230. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__ba72d342._.js +5 -5
  231. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__d8cc43c7._.js +22 -7
  232. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__f598d976._.js +1 -1
  233. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__f7a936d9._.js +21 -6
  234. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_1a4cb196._.js +1 -1
  235. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_5e5f36c4._.js +1 -1
  236. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_8f9f647d._.js +28 -13
  237. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_9f0fd451._.js +3 -0
  238. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_d256aa32._.js +28 -25
  239. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_e1f4d9ad._.js +1 -1
  240. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_f8b3abae._.js +1 -1
  241. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_orchestrator_chat-processor_ts_46384f36._.js +12 -12
  242. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_tracker_tracker-run-store_ts_5aa9592e._.js +22 -7
  243. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ebff2__next-internal_server_app_api_trackers_[tracker]_labels_route_actions_8ba41152.js +3 -0
  244. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ebff2__next-internal_server_app_api_trackers_[tracker]_stats_route_actions_7da4ccde.js +3 -0
  245. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__799f4d13._.js → [root-of-the-server]__2af44092._.js} +2 -2
  246. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__452cb0f0._.js +3 -0
  247. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__489568b4._.js +3 -0
  248. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__4ec098a0._.js +3 -0
  249. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__53bd50df._.js +3 -0
  250. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__7774a40c._.js +3 -0
  251. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__b8484b0e._.js +7 -0
  252. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__51edc9b6._.js → [root-of-the-server]__bd05ee09._.js} +2 -2
  253. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_8c4beba9._.js +7 -0
  254. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_5eebb5cb._.js +1 -1
  255. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{apps_local_35d90b5d._.js → apps_local_bbb7b83b._.js} +2 -2
  256. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_TrackerBoard_tsx_98970bab._.js +6 -6
  257. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_chat-ui_f0554cb4._.js +1 -1
  258. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_projects_ProjectObjectivesWorkspace_tsx_751ab3d3._.js +7 -7
  259. package/cloud-runtime/standalone/apps/local/.next/server/functions-config-manifest.json +5 -0
  260. package/cloud-runtime/standalone/apps/local/.next/server/middleware-manifest.json +5 -5
  261. package/cloud-runtime/standalone/apps/local/.next/server/pages/404.html +2 -2
  262. package/cloud-runtime/standalone/apps/local/.next/server/pages/500.html +2 -2
  263. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
  264. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
  265. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0243e7d015db440d.js +5 -0
  266. package/cloud-runtime/standalone/apps/local/.next/static/chunks/42a62b80b32a97f7.js +9 -0
  267. package/cloud-runtime/standalone/apps/local/.next/static/chunks/5d047fc7267a8f53.js +16 -0
  268. package/cloud-runtime/standalone/apps/local/.next/static/chunks/7148feb61274d431.css +1 -0
  269. package/cloud-runtime/standalone/apps/local/.next/static/chunks/716e1716d526ded9.js +46 -0
  270. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{77cea126364aab3c.js → 7353a3a1fcd5825c.js} +1 -1
  271. package/cloud-runtime/standalone/apps/local/.next/static/chunks/8b91e7692a899f00.js +20 -0
  272. package/cloud-runtime/standalone/apps/local/.next/static/chunks/9acdd370e9daca0d.js +16 -0
  273. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{6c777fe66e042eec.js → 9df45611d6c84e02.js} +1 -1
  274. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{6c278ae4535b6d5c.js → 9e2208153f276f8c.js} +1 -1
  275. package/cloud-runtime/standalone/apps/local/.next/static/chunks/a084c6475513e6fe.js +16 -0
  276. package/cloud-runtime/standalone/apps/local/.next/static/chunks/aa6db7c91c1ccd5f.js +16 -0
  277. package/cloud-runtime/standalone/apps/local/.next/static/chunks/d5607ac80145f3b7.js +1 -0
  278. package/cloud-runtime/standalone/apps/local/.next/static/chunks/d590384ce3045a12.js +5 -0
  279. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{d5b14e14665024a9.js → d5c307b52fd87861.js} +1 -1
  280. package/cloud-runtime/standalone/apps/local/.next/static/chunks/f4acf76cb6c82c73.js +16 -0
  281. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/labels/[id]/route.ts +23 -0
  282. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/labels/route.ts +41 -0
  283. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/metadata/bulk/route.ts +68 -0
  284. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/metadata/route.ts +31 -0
  285. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/options/route.ts +1 -0
  286. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/stats/route.ts +20 -0
  287. package/cloud-runtime/standalone/apps/local/app/api/trackers/connections/route.ts +46 -2
  288. package/cloud-runtime/standalone/apps/local/app/projects/[slug]/tracking/connect/page.tsx +41 -11
  289. package/cloud-runtime/standalone/apps/local/components/TrackerBoard.tsx +609 -85
  290. package/cloud-runtime/standalone/apps/local/components/projects/ProjectObjectivesWorkspace.tsx +204 -49
  291. package/cloud-runtime/standalone/apps/local/components/tracker/FibonacciPicker.tsx +41 -0
  292. package/cloud-runtime/standalone/apps/local/components/tracker/FolderRow.tsx +1 -1
  293. package/cloud-runtime/standalone/apps/local/components/tracker/LabelPicker.tsx +118 -0
  294. package/cloud-runtime/standalone/apps/local/components/tracker/LabelSettings.tsx +104 -0
  295. package/cloud-runtime/standalone/apps/local/components/tracker/PromptPopover.tsx +64 -0
  296. package/cloud-runtime/standalone/apps/local/components/tracker/SelectionBar.tsx +276 -23
  297. package/cloud-runtime/standalone/apps/local/components/tracker/StatusGroupRow.tsx +50 -0
  298. package/cloud-runtime/standalone/apps/local/components/tracker/TicketPanel.tsx +14 -2
  299. package/cloud-runtime/standalone/apps/local/components/tracker/TicketRow.tsx +147 -7
  300. package/cloud-runtime/standalone/apps/local/components/tracker/TrackerSettingsModal.tsx +14 -2
  301. package/cloud-runtime/standalone/apps/local/components/ui/ResizeHandle.tsx +15 -22
  302. package/cloud-runtime/standalone/apps/local/hooks/useTrackerConnections.ts +29 -1
  303. package/cloud-runtime/standalone/apps/local/hooks/useTrackerIssueStats.ts +52 -0
  304. package/cloud-runtime/standalone/apps/local/hooks/useTrackerItemMetadata.ts +67 -0
  305. package/cloud-runtime/standalone/apps/local/hooks/useTrackerItemsMetadata.ts +51 -0
  306. package/cloud-runtime/standalone/apps/local/hooks/useTrackerLabels.ts +74 -0
  307. package/cloud-runtime/standalone/apps/local/hooks/useTrackerRuns.ts +5 -0
  308. package/cloud-runtime/standalone/apps/local/lib/agent-process-registry.ts +8 -2
  309. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/jira/adapter.tsx +1 -0
  310. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/jira/issues.ts +1 -0
  311. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/adapter.tsx +1 -0
  312. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/client.ts +5 -0
  313. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/issues.ts +1 -0
  314. package/cloud-runtime/standalone/apps/local/lib/tracker/connections.ts +46 -15
  315. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-adapter.ts +2 -0
  316. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-item-metadata-store.ts +262 -0
  317. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-item-store.ts +10 -3
  318. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-run-store.ts +42 -0
  319. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/objective-worker.ts +7 -0
  320. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/task-worker.ts +7 -0
  321. package/cloud-runtime/standalone/apps/local/state/trackerBoardFilters.ts +4 -0
  322. package/cloud-runtime/standalone/apps/local/worker/index.js +6 -2
  323. package/package.json +1 -1
  324. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__847236fb._.js +0 -3
  325. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_80b34b78._.js +0 -3
  326. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__30bf097e._.js +0 -3
  327. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__46ae9d33._.js +0 -3
  328. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__50fd8680._.js +0 -3
  329. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__8059a285._.js +0 -3
  330. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__886953ec._.js +0 -7
  331. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__97160565._.js +0 -3
  332. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0876dfd6ce07abaf.js +0 -9
  333. package/cloud-runtime/standalone/apps/local/.next/static/chunks/1ec83777a9abd420.js +0 -16
  334. package/cloud-runtime/standalone/apps/local/.next/static/chunks/286758b0fd546c68.js +0 -16
  335. package/cloud-runtime/standalone/apps/local/.next/static/chunks/a72ed5cb3feb0d51.js +0 -5
  336. package/cloud-runtime/standalone/apps/local/.next/static/chunks/b02c180ad1d968eb.js +0 -16
  337. package/cloud-runtime/standalone/apps/local/.next/static/chunks/b048a4812b51f97a.js +0 -1
  338. package/cloud-runtime/standalone/apps/local/.next/static/chunks/c63d97c917d96f47.js +0 -46
  339. package/cloud-runtime/standalone/apps/local/.next/static/chunks/d3bf70e2fbdc0ae5.js +0 -5
  340. package/cloud-runtime/standalone/apps/local/.next/static/chunks/dd5a56eea2d4c067.js +0 -16
  341. package/cloud-runtime/standalone/apps/local/.next/static/chunks/dd7d7c382389b8b9.js +0 -16
  342. package/cloud-runtime/standalone/apps/local/.next/static/chunks/e72724fd8225ec39.js +0 -20
  343. package/cloud-runtime/standalone/apps/local/.next/static/chunks/ec92e3bd6c2db6e6.css +0 -1
  344. package/cloud-runtime/standalone/apps/local/.next/static/chunks/ffcc32453866d0c2.js +0 -1
  345. /package/cloud-runtime/standalone/apps/local/.next/static/{QEldoF1LdgJqO0PgpmUmx → 3-6VaSnGGXdV-2eV44RDK}/_buildManifest.js +0 -0
  346. /package/cloud-runtime/standalone/apps/local/.next/static/{QEldoF1LdgJqO0PgpmUmx → 3-6VaSnGGXdV-2eV44RDK}/_clientMiddlewareManifest.json +0 -0
  347. /package/cloud-runtime/standalone/apps/local/.next/static/{QEldoF1LdgJqO0PgpmUmx → 3-6VaSnGGXdV-2eV44RDK}/_ssgManifest.js +0 -0
@@ -1,8 +1,9 @@
1
1
  "use client";
2
2
 
3
3
  import React, { useState, useCallback, useEffect, useRef } from "react";
4
- import { Check, ExternalLink, Link2, Pin, StickyNote } from "lucide-react";
4
+ import { Check, ExternalLink, Link2, MessageSquare, Pin, Play, StickyNote, Tag } from "lucide-react";
5
5
  import { NoteSticker } from "@/components/tracker/NoteSticker";
6
+ import { LabelPicker } from "@/components/tracker/LabelPicker";
6
7
  import { useDraggable, useDroppable } from "@dnd-kit/core";
7
8
  import type { TrackerItem } from "@/lib/tracker/types";
8
9
  import type { Participant } from "@/lib/types";
@@ -21,6 +22,14 @@ export function TicketRow({
21
22
  draggable = false,
22
23
  treeConnector,
23
24
  projectSlug,
25
+ stats,
26
+ hideStatus,
27
+ estimate,
28
+ localLabels,
29
+ labelDefinitions,
30
+ allLabels,
31
+ onToggleLabel,
32
+ onAddLabel,
24
33
  }: {
25
34
  item: TrackerItem;
26
35
  selected: boolean;
@@ -33,6 +42,14 @@ export function TicketRow({
33
42
  draggable?: boolean;
34
43
  treeConnector?: "mid" | "last";
35
44
  projectSlug?: string;
45
+ stats?: { sessions: number; messages: number };
46
+ hideStatus?: boolean;
47
+ estimate?: number | null;
48
+ localLabels?: string[];
49
+ labelDefinitions?: Array<{ name: string; color: string | null }>;
50
+ allLabels?: Array<{ name: string; color: string | null; defined: boolean }>;
51
+ onToggleLabel?: (label: string) => void;
52
+ onAddLabel?: (label: string) => void;
36
53
  }) {
37
54
  const [copied, setCopied] = useState(false);
38
55
  const copyResetTimeoutRef = useRef<number | null>(null);
@@ -41,6 +58,30 @@ export function TicketRow({
41
58
  const [noteContent, setNoteContent] = useState("");
42
59
  const [noteLoaded, setNoteLoaded] = useState(false);
43
60
  const [hasNote, setHasNote] = useState(false);
61
+ const labelButtonRef = useRef<HTMLButtonElement>(null);
62
+ const labelPopoverRef = useRef<HTMLDivElement>(null);
63
+ const [labelOpen, setLabelOpen] = useState(false);
64
+
65
+ useEffect(() => {
66
+ if (!labelOpen) return;
67
+ const handlePointerDown = (e: PointerEvent) => {
68
+ if (
69
+ labelPopoverRef.current && !labelPopoverRef.current.contains(e.target as Node) &&
70
+ labelButtonRef.current && !labelButtonRef.current.contains(e.target as Node)
71
+ ) {
72
+ setLabelOpen(false);
73
+ }
74
+ };
75
+ const handleKey = (e: KeyboardEvent) => {
76
+ if (e.key === "Escape") setLabelOpen(false);
77
+ };
78
+ document.addEventListener("pointerdown", handlePointerDown);
79
+ document.addEventListener("keydown", handleKey);
80
+ return () => {
81
+ document.removeEventListener("pointerdown", handlePointerDown);
82
+ document.removeEventListener("keydown", handleKey);
83
+ };
84
+ }, [labelOpen]);
44
85
 
45
86
  const loadNote = useCallback(async () => {
46
87
  if (!projectSlug || noteLoaded) return;
@@ -165,7 +206,6 @@ export function TicketRow({
165
206
  onClick={(e) => {
166
207
  e.stopPropagation();
167
208
  e.preventDefault();
168
- // Synthesize a meta-click to toggle multi-select
169
209
  const synth = new MouseEvent("click", { metaKey: true, ctrlKey: true }) as unknown as React.MouseEvent;
170
210
  onSelect(synth);
171
211
  }}
@@ -179,15 +219,80 @@ export function TicketRow({
179
219
  {treeConnector === "last" ? "└──" : "├──"}
180
220
  </span>
181
221
  )}
182
- <span className={`shrink-0 whitespace-nowrap font-mono text-xs text-[var(--muted-foreground)] ${treeConnector ? "" : "w-24"}`}>
222
+ <span className={`shrink-0 whitespace-nowrap font-mono text-xs text-[var(--muted-foreground)] ${treeConnector ? "" : "w-15"}`}>
183
223
  {item.identifier}
184
224
  </span>
185
225
  <span className={`min-w-0 flex-1 truncate text-xs ${selected ? "font-medium text-[var(--foreground)]" : "text-[var(--muted-foreground)]"}`}>
186
226
  {item.title}
187
227
  </span>
188
- <span className="shrink-0 text-xs text-[var(--muted-foreground)]">
189
- {shortStatus}
190
- </span>
228
+ {estimate != null && (
229
+ <span className="shrink-0 rounded-full bg-[var(--card-bg)] px-1.5 py-0.5 text-[10px] font-semibold text-[var(--muted-foreground)]">
230
+ {estimate}
231
+ </span>
232
+ )}
233
+ {localLabels && localLabels.length > 0 && (
234
+ <span className="flex shrink-0 items-center gap-1">
235
+ {localLabels.slice(0, 3).map((label) => {
236
+ const def = labelDefinitions?.find((d) => d.name === label);
237
+ return (
238
+ <span
239
+ key={label}
240
+ className="flex items-center gap-1 rounded-full border border-[var(--card-border)] px-1.5 py-0.5 text-[10px] text-[var(--muted-foreground)]"
241
+ >
242
+ {def?.color && (
243
+ <span
244
+ className="h-1.5 w-1.5 rounded-full"
245
+ style={{ backgroundColor: def.color }}
246
+ />
247
+ )}
248
+ <span className="max-w-[60px] truncate">{label}</span>
249
+ </span>
250
+ );
251
+ })}
252
+ {localLabels.length > 3 && (
253
+ <span className="text-[10px] text-[var(--muted-foreground)]">
254
+ +{localLabels.length - 3}
255
+ </span>
256
+ )}
257
+ </span>
258
+ )}
259
+ {!hideStatus && (
260
+ <span className="inline-flex shrink-0 items-center gap-2">
261
+ <span className="text-xs text-[var(--muted-foreground)]">
262
+ {shortStatus}
263
+ </span>
264
+ {stats && stats.sessions > 0 && (
265
+ <span
266
+ className="inline-flex items-center gap-1.5 text-[10px] tabular-nums text-[var(--muted-foreground)]/50"
267
+ title={`${stats.sessions} session${stats.sessions !== 1 ? "s" : ""}, ${stats.messages} message${stats.messages !== 1 ? "s" : ""}`}
268
+ >
269
+ <span className="inline-flex items-center gap-0.5">
270
+ <Play size={8} className="fill-current" />
271
+ {stats.sessions}
272
+ </span>
273
+ <span className="inline-flex items-center gap-0.5">
274
+ <MessageSquare size={8} />
275
+ {stats.messages}
276
+ </span>
277
+ </span>
278
+ )}
279
+ </span>
280
+ )}
281
+ {hideStatus && stats && stats.sessions > 0 && (
282
+ <span
283
+ className="inline-flex shrink-0 items-center gap-1.5 text-[10px] tabular-nums text-[var(--muted-foreground)]/50"
284
+ title={`${stats.sessions} session${stats.sessions !== 1 ? "s" : ""}, ${stats.messages} message${stats.messages !== 1 ? "s" : ""}`}
285
+ >
286
+ <span className="inline-flex items-center gap-0.5">
287
+ <Play size={8} className="fill-current" />
288
+ {stats.sessions}
289
+ </span>
290
+ <span className="inline-flex items-center gap-0.5">
291
+ <MessageSquare size={8} />
292
+ {stats.messages}
293
+ </span>
294
+ </span>
295
+ )}
191
296
  {activeAgents && activeAgents.length > 0 && (
192
297
  <span className="inline-flex items-center -space-x-1 shrink-0">
193
298
  {activeAgents.slice(0, 3).map((agent) => {
@@ -202,6 +307,41 @@ export function TicketRow({
202
307
  </span>
203
308
  )}
204
309
  <div className="flex shrink-0 items-center gap-1">
310
+ {onToggleLabel && allLabels && (
311
+ <div className="relative">
312
+ <button
313
+ ref={labelButtonRef}
314
+ type="button"
315
+ className={`flex h-6 w-6 shrink-0 items-center justify-center rounded transition-all hover:bg-zinc-700 ${
316
+ localLabels && localLabels.length > 0
317
+ ? "text-blue-400 opacity-100"
318
+ : `text-[var(--muted-foreground)] ${selected ? "opacity-100" : "opacity-0 group-hover:opacity-100"}`
319
+ }`}
320
+ onClick={(e) => {
321
+ e.stopPropagation();
322
+ setLabelOpen((prev) => !prev);
323
+ }}
324
+ title={localLabels && localLabels.length > 0 ? "Edit labels" : "Add labels"}
325
+ aria-label={localLabels && localLabels.length > 0 ? "Edit labels" : "Add labels"}
326
+ >
327
+ <Tag size={10} className={localLabels && localLabels.length > 0 ? "fill-current" : ""} />
328
+ </button>
329
+ {labelOpen && (
330
+ <div
331
+ ref={labelPopoverRef}
332
+ className="absolute right-0 top-full z-30 mt-1 rounded-lg border border-[var(--card-border)] bg-[var(--card-bg)] p-2 shadow-xl"
333
+ onClick={(e) => e.stopPropagation()}
334
+ >
335
+ <LabelPicker
336
+ labels={allLabels}
337
+ selectedLabels={localLabels ?? []}
338
+ onToggle={onToggleLabel}
339
+ onAdd={onAddLabel ?? (() => {})}
340
+ />
341
+ </div>
342
+ )}
343
+ </div>
344
+ )}
205
345
  {projectSlug && (
206
346
  <>
207
347
  <button
@@ -210,7 +350,7 @@ export function TicketRow({
210
350
  className={`flex h-6 w-6 shrink-0 items-center justify-center rounded transition-all hover:bg-zinc-700 ${
211
351
  hasNote
212
352
  ? "text-amber-400 opacity-100"
213
- : "text-[var(--muted-foreground)] opacity-0 group-hover:opacity-100"
353
+ : `text-[var(--muted-foreground)] ${selected ? "opacity-100" : "opacity-0 group-hover:opacity-100"}`
214
354
  }`}
215
355
  onClick={handleNoteClick}
216
356
  title={hasNote ? "Edit note" : "Add note"}
@@ -1,10 +1,12 @@
1
1
  "use client";
2
2
 
3
3
  import { useState, type ComponentProps } from "react";
4
- import { Bot, Link2, ScrollText, X } from "lucide-react";
4
+ import { Bot, Link2, ScrollText, Tag, X } from "lucide-react";
5
5
  import LinearSetup from "@/components/tracking/TrackerSetup";
6
6
  import TrackerWorkerConfig from "@/components/tracker/TrackerWorkerConfig";
7
7
  import TrackerWorkerRunLog from "@/components/tracker/TrackerWorkerRunLog";
8
+ import { LabelSettings } from "./LabelSettings";
9
+ import { useTrackerLabels } from "@/hooks/useTrackerLabels";
8
10
 
9
11
  type TrackerSetupProps = ComponentProps<typeof LinearSetup>;
10
12
 
@@ -22,7 +24,7 @@ interface TrackerSettingsModalProps {
22
24
  projectId?: string;
23
25
  }
24
26
 
25
- type SettingsTab = "connection" | "worker" | "run-log";
27
+ type SettingsTab = "connection" | "worker" | "run-log" | "labels";
26
28
 
27
29
  export default function TrackerSettingsModal({
28
30
  trackerType,
@@ -39,6 +41,8 @@ export default function TrackerSettingsModal({
39
41
  }: TrackerSettingsModalProps) {
40
42
  const [tab, setTab] = useState<SettingsTab>(connected ? "worker" : "connection");
41
43
  const [workerJobId, setWorkerJobId] = useState<string | null>(null);
44
+ const { definitions: labelDefinitions, createDefinition, deleteDefinition } =
45
+ useTrackerLabels(trackerType, projectId);
42
46
 
43
47
  const workerLabel = trackerType === "jira" ? "Jira Worker" : "Linear Worker";
44
48
 
@@ -46,6 +50,7 @@ export default function TrackerSettingsModal({
46
50
  { id: "connection", label: "Connection", icon: <Link2 size={14} /> },
47
51
  { id: "worker", label: workerLabel, icon: <Bot size={14} />, disabled: !connected },
48
52
  { id: "run-log", label: "Run Log", icon: <ScrollText size={14} />, disabled: !connected },
53
+ { id: "labels" as const, label: "Labels", icon: <Tag size={14} />, disabled: !connected },
49
54
  ];
50
55
 
51
56
  return (
@@ -108,6 +113,13 @@ export default function TrackerSettingsModal({
108
113
  {tab === "run-log" && connected && (
109
114
  <TrackerWorkerRunLog jobId={workerJobId} />
110
115
  )}
116
+ {tab === "labels" && connected && (
117
+ <LabelSettings
118
+ definitions={labelDefinitions}
119
+ onCreate={createDefinition}
120
+ onDelete={deleteDefinition}
121
+ />
122
+ )}
111
123
  </div>
112
124
  </div>
113
125
  </div>
@@ -1,26 +1,29 @@
1
1
  "use client";
2
2
 
3
- import React, { useEffect, useRef } from "react";
3
+ import React, { useCallback, useRef } from "react";
4
4
 
5
5
  export function ResizeHandle({
6
6
  onResize,
7
7
  }: {
8
8
  onResize: (delta: number) => void;
9
9
  }) {
10
- const dragging = useRef(false);
11
10
  const lastX = useRef(0);
11
+ const onResizeRef = useRef(onResize);
12
+ onResizeRef.current = onResize;
12
13
 
13
- useEffect(() => {
14
- if (!dragging.current) return;
14
+ const handleMouseDown = useCallback((e: React.MouseEvent) => {
15
+ e.preventDefault();
16
+ lastX.current = e.clientX;
17
+ document.body.style.cursor = "col-resize";
18
+ document.body.style.userSelect = "none";
15
19
 
16
- const onMouseMove = (e: MouseEvent) => {
17
- const delta = e.clientX - lastX.current;
18
- lastX.current = e.clientX;
19
- onResize(delta);
20
+ const onMouseMove = (ev: MouseEvent) => {
21
+ const delta = ev.clientX - lastX.current;
22
+ lastX.current = ev.clientX;
23
+ onResizeRef.current(delta);
20
24
  };
21
25
 
22
26
  const onMouseUp = () => {
23
- dragging.current = false;
24
27
  document.body.style.cursor = "";
25
28
  document.body.style.userSelect = "";
26
29
  window.removeEventListener("mousemove", onMouseMove);
@@ -29,24 +32,14 @@ export function ResizeHandle({
29
32
 
30
33
  window.addEventListener("mousemove", onMouseMove);
31
34
  window.addEventListener("mouseup", onMouseUp);
32
- return () => {
33
- window.removeEventListener("mousemove", onMouseMove);
34
- window.removeEventListener("mouseup", onMouseUp);
35
- };
36
- });
35
+ }, []);
37
36
 
38
37
  return (
39
38
  <div
40
39
  className="group relative z-10 w-0 shrink-0 cursor-col-resize"
41
- onMouseDown={(e) => {
42
- e.preventDefault();
43
- dragging.current = true;
44
- lastX.current = e.clientX;
45
- document.body.style.cursor = "col-resize";
46
- document.body.style.userSelect = "none";
47
- }}
40
+ onMouseDown={handleMouseDown}
48
41
  >
49
- <div className="absolute inset-y-0 -left-0.5 w-1 transition-colors group-hover:bg-[var(--primary)]/40" />
42
+ <div className="absolute inset-y-0 -left-1 w-2 transition-colors group-hover:bg-[var(--primary)]/40" />
50
43
  </div>
51
44
  );
52
45
  }
@@ -13,10 +13,12 @@ interface TrackerConnectionInfo {
13
13
 
14
14
  interface UseTrackerConnectionsReturn {
15
15
  connections: TrackerConnectionInfo[];
16
+ defaultTracker: string | null;
16
17
  loading: boolean;
17
18
  refresh: () => Promise<void>;
18
19
  addConnection: (type: string, metadata?: Record<string, string>) => Promise<{ ok: boolean; error?: string }>;
19
20
  removeConnection: (type: string) => Promise<{ ok: boolean; error?: string }>;
21
+ setDefaultTracker: (type: string | null) => Promise<{ ok: boolean; error?: string }>;
20
22
  }
21
23
 
22
24
  /**
@@ -26,11 +28,13 @@ interface UseTrackerConnectionsReturn {
26
28
  */
27
29
  export function useTrackerConnections(projectId: string | null): UseTrackerConnectionsReturn {
28
30
  const [connections, setConnections] = useState<TrackerConnectionInfo[]>([]);
31
+ const [defaultTracker, setDefaultTrackerState] = useState<string | null>(null);
29
32
  const [loading, setLoading] = useState(true);
30
33
 
31
34
  const refresh = useCallback(async () => {
32
35
  if (!projectId) {
33
36
  setConnections([]);
37
+ setDefaultTrackerState(null);
34
38
  setLoading(false);
35
39
  return;
36
40
  }
@@ -38,8 +42,10 @@ export function useTrackerConnections(projectId: string | null): UseTrackerConne
38
42
  const res = await fetch(`/api/trackers/connections?projectId=${encodeURIComponent(projectId)}`);
39
43
  const data = await res.json();
40
44
  setConnections(Array.isArray(data.connections) ? data.connections : []);
45
+ setDefaultTrackerState(typeof data.defaultTracker === "string" ? data.defaultTracker : null);
41
46
  } catch {
42
47
  setConnections([]);
48
+ setDefaultTrackerState(null);
43
49
  } finally {
44
50
  setLoading(false);
45
51
  }
@@ -95,5 +101,27 @@ export function useTrackerConnections(projectId: string | null): UseTrackerConne
95
101
  [projectId, refresh]
96
102
  );
97
103
 
98
- return { connections, loading, refresh, addConnection, removeConnection };
104
+ const setDefaultTracker = useCallback(
105
+ async (type: string | null) => {
106
+ if (!projectId) return { ok: false, error: "Missing projectId" };
107
+ try {
108
+ const res = await fetch("/api/trackers/connections", {
109
+ method: "PATCH",
110
+ headers: { "Content-Type": "application/json" },
111
+ body: JSON.stringify({ projectId, defaultTracker: type }),
112
+ });
113
+ if (!res.ok) {
114
+ const data = await res.json().catch(() => ({}));
115
+ return { ok: false, error: data.error || "Failed to set default tracker" };
116
+ }
117
+ await refresh();
118
+ return { ok: true };
119
+ } catch {
120
+ return { ok: false, error: "Failed to set default tracker" };
121
+ }
122
+ },
123
+ [projectId, refresh]
124
+ );
125
+
126
+ return { connections, defaultTracker, loading, refresh, addConnection, removeConnection, setDefaultTracker };
99
127
  }
@@ -0,0 +1,52 @@
1
+ "use client";
2
+
3
+ import { useEffect, useState } from "react";
4
+
5
+ export interface IssueStatsEntry {
6
+ sessions: number;
7
+ messages: number;
8
+ }
9
+
10
+ export function useTrackerIssueStats(
11
+ trackerType: string,
12
+ projectId?: string,
13
+ ): {
14
+ issueStats: Map<string, IssueStatsEntry>;
15
+ } {
16
+ const [issueStats, setIssueStats] = useState<Map<string, IssueStatsEntry>>(new Map());
17
+
18
+ useEffect(() => {
19
+ let cancelled = false;
20
+
21
+ async function fetchStats() {
22
+ try {
23
+ const params = new URLSearchParams();
24
+ if (projectId) params.set("projectId", projectId);
25
+ const res = await fetch(
26
+ `/api/trackers/${trackerType}/stats?${params}`,
27
+ );
28
+ if (!res.ok || cancelled) return;
29
+ const data = await res.json();
30
+ const map = new Map<string, IssueStatsEntry>();
31
+ for (const entry of data.stats ?? []) {
32
+ map.set(entry.issueId, {
33
+ sessions: entry.sessions,
34
+ messages: entry.messages,
35
+ });
36
+ }
37
+ if (!cancelled) setIssueStats(map);
38
+ } catch {
39
+ // ignore
40
+ }
41
+ }
42
+
43
+ void fetchStats();
44
+ const interval = setInterval(() => void fetchStats(), 10000);
45
+ return () => {
46
+ cancelled = true;
47
+ clearInterval(interval);
48
+ };
49
+ }, [trackerType, projectId]);
50
+
51
+ return { issueStats };
52
+ }
@@ -0,0 +1,67 @@
1
+ "use client";
2
+
3
+ import { useState, useEffect, useCallback } from "react";
4
+
5
+ interface ItemMetadata {
6
+ labels: string[];
7
+ estimate: number | null;
8
+ }
9
+
10
+ export function useTrackerItemMetadata(
11
+ trackerType: string,
12
+ projectId: string | undefined,
13
+ issueId: string | null
14
+ ) {
15
+ const [metadata, setMetadata] = useState<ItemMetadata>({ labels: [], estimate: null });
16
+ const [loading, setLoading] = useState(false);
17
+
18
+ useEffect(() => {
19
+ if (!projectId || !issueId) {
20
+ setMetadata({ labels: [], estimate: null });
21
+ return;
22
+ }
23
+ let cancelled = false;
24
+ setLoading(true);
25
+ fetch(
26
+ `/api/trackers/${encodeURIComponent(trackerType)}/metadata?projectId=${encodeURIComponent(projectId)}&issueId=${encodeURIComponent(issueId)}`
27
+ )
28
+ .then((res) => res.json())
29
+ .then((data) => {
30
+ if (!cancelled) {
31
+ setMetadata({
32
+ labels: Array.isArray(data.labels) ? data.labels : [],
33
+ estimate: typeof data.estimate === "number" ? data.estimate : null,
34
+ });
35
+ }
36
+ })
37
+ .catch(() => {})
38
+ .finally(() => {
39
+ if (!cancelled) setLoading(false);
40
+ });
41
+ return () => { cancelled = true; };
42
+ }, [trackerType, projectId, issueId]);
43
+
44
+ const update = useCallback(
45
+ async (patch: { labels?: string[]; estimate?: number | null }) => {
46
+ if (!projectId || !issueId) return;
47
+ try {
48
+ const res = await fetch(
49
+ `/api/trackers/${encodeURIComponent(trackerType)}/metadata?projectId=${encodeURIComponent(projectId)}&issueId=${encodeURIComponent(issueId)}`,
50
+ {
51
+ method: "PATCH",
52
+ headers: { "Content-Type": "application/json" },
53
+ body: JSON.stringify(patch),
54
+ }
55
+ );
56
+ const data = await res.json();
57
+ setMetadata({
58
+ labels: Array.isArray(data.labels) ? data.labels : metadata.labels,
59
+ estimate: typeof data.estimate === "number" ? data.estimate : null,
60
+ });
61
+ } catch {}
62
+ },
63
+ [trackerType, projectId, issueId, metadata.labels]
64
+ );
65
+
66
+ return { metadata, loading, update };
67
+ }
@@ -0,0 +1,51 @@
1
+ "use client";
2
+
3
+ import { useState, useEffect, useCallback, useRef } from "react";
4
+
5
+ interface ItemMetadata {
6
+ labels: string[];
7
+ estimate: number | null;
8
+ }
9
+
10
+ export function useTrackerItemsMetadata(
11
+ trackerType: string,
12
+ projectId: string | undefined,
13
+ issueIds: string[]
14
+ ) {
15
+ const [metadataMap, setMetadataMap] = useState<Map<string, ItemMetadata>>(new Map());
16
+ const [loading, setLoading] = useState(false);
17
+ const prevIdsRef = useRef<string>("");
18
+
19
+ const fetchAll = useCallback(async () => {
20
+ if (!projectId || issueIds.length === 0) {
21
+ setMetadataMap(new Map());
22
+ return;
23
+ }
24
+ setLoading(true);
25
+ try {
26
+ const res = await fetch(
27
+ `/api/trackers/${encodeURIComponent(trackerType)}/metadata/bulk?projectId=${encodeURIComponent(projectId)}&issueIds=${issueIds.map(encodeURIComponent).join(",")}`
28
+ );
29
+ const data = await res.json();
30
+ const map = new Map<string, ItemMetadata>();
31
+ for (const [id, meta] of Object.entries(data)) {
32
+ const m = meta as { labels?: string[]; estimate?: number | null };
33
+ map.set(id, {
34
+ labels: Array.isArray(m.labels) ? m.labels : [],
35
+ estimate: typeof m.estimate === "number" ? m.estimate : null,
36
+ });
37
+ }
38
+ setMetadataMap(map);
39
+ } catch {}
40
+ setLoading(false);
41
+ }, [trackerType, projectId, issueIds]);
42
+
43
+ useEffect(() => {
44
+ const idsKey = issueIds.join(",");
45
+ if (idsKey === prevIdsRef.current) return;
46
+ prevIdsRef.current = idsKey;
47
+ void fetchAll();
48
+ }, [fetchAll, issueIds]);
49
+
50
+ return { metadataMap, loading, refresh: fetchAll };
51
+ }
@@ -0,0 +1,74 @@
1
+ "use client";
2
+
3
+ import { useState, useEffect, useCallback } from "react";
4
+
5
+ export interface LabelEntry {
6
+ name: string;
7
+ color: string | null;
8
+ defined: boolean;
9
+ }
10
+
11
+ export interface LabelDefinition {
12
+ id: string;
13
+ name: string;
14
+ color: string | null;
15
+ }
16
+
17
+ export function useTrackerLabels(trackerType: string, projectId: string | undefined) {
18
+ const [labels, setLabels] = useState<LabelEntry[]>([]);
19
+ const [definitions, setDefinitions] = useState<LabelDefinition[]>([]);
20
+ const [loading, setLoading] = useState(false);
21
+
22
+ const fetchLabels = useCallback(async () => {
23
+ if (!projectId) return;
24
+ setLoading(true);
25
+ try {
26
+ const res = await fetch(
27
+ `/api/trackers/${encodeURIComponent(trackerType)}/labels?projectId=${encodeURIComponent(projectId)}`
28
+ );
29
+ const data = await res.json();
30
+ setLabels(Array.isArray(data.labels) ? data.labels : []);
31
+ setDefinitions(Array.isArray(data.definitions) ? data.definitions : []);
32
+ } catch {}
33
+ setLoading(false);
34
+ }, [trackerType, projectId]);
35
+
36
+ useEffect(() => {
37
+ void fetchLabels();
38
+ }, [fetchLabels]);
39
+
40
+ const createDefinition = useCallback(
41
+ async (name: string, color?: string) => {
42
+ if (!projectId) return;
43
+ try {
44
+ const res = await fetch(`/api/trackers/${encodeURIComponent(trackerType)}/labels`, {
45
+ method: "POST",
46
+ headers: { "Content-Type": "application/json" },
47
+ body: JSON.stringify({ projectId, name, color }),
48
+ });
49
+ if (res.ok) {
50
+ await fetchLabels();
51
+ }
52
+ } catch {}
53
+ },
54
+ [trackerType, projectId, fetchLabels]
55
+ );
56
+
57
+ const deleteDefinition = useCallback(
58
+ async (id: string) => {
59
+ if (!projectId) return;
60
+ try {
61
+ const res = await fetch(
62
+ `/api/trackers/${encodeURIComponent(trackerType)}/labels/${encodeURIComponent(id)}?projectId=${encodeURIComponent(projectId)}`,
63
+ { method: "DELETE" }
64
+ );
65
+ if (res.ok) {
66
+ await fetchLabels();
67
+ }
68
+ } catch {}
69
+ },
70
+ [trackerType, projectId, fetchLabels]
71
+ );
72
+
73
+ return { labels, definitions, loading, refresh: fetchLabels, createDefinition, deleteDefinition };
74
+ }
@@ -35,6 +35,7 @@ export function useTrackerRuns(
35
35
  ) {
36
36
  const [runs, setRuns] = useState<TrackerRunRecord[]>([]);
37
37
  const [loading, setLoading] = useState(false);
38
+ const [loadedForIssueId, setLoadedForIssueId] = useState<string | null>(null);
38
39
  const issueIdRef = useRef(issueId ?? null);
39
40
  issueIdRef.current = issueId ?? null;
40
41
 
@@ -44,6 +45,7 @@ export function useTrackerRuns(
44
45
  const activeIssueId = issueIdRef.current?.trim();
45
46
  if (!activeIssueId) {
46
47
  setRuns([]);
48
+ setLoadedForIssueId(null);
47
49
  return [];
48
50
  }
49
51
 
@@ -58,6 +60,7 @@ export function useTrackerRuns(
58
60
  const data = await response.json();
59
61
  const nextRuns = Array.isArray(data.runs) ? (data.runs as TrackerRunRecord[]) : [];
60
62
  setRuns(nextRuns);
63
+ setLoadedForIssueId(activeIssueId);
61
64
  return nextRuns;
62
65
  } finally {
63
66
  setLoading(false);
@@ -66,6 +69,7 @@ export function useTrackerRuns(
66
69
 
67
70
  useEffect(() => {
68
71
  setRuns([]);
72
+ setLoadedForIssueId(null);
69
73
  void refresh();
70
74
  }, [refresh, issueId]);
71
75
 
@@ -115,6 +119,7 @@ export function useTrackerRuns(
115
119
  return {
116
120
  runs,
117
121
  loading,
122
+ loadedForIssueId,
118
123
  refresh,
119
124
  createRun,
120
125
  updateRun,