@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
@@ -92,8 +92,9 @@ interface ProjectAgentSummary {
92
92
  routing_order: number;
93
93
  }
94
94
 
95
- interface ObjectiveLinearIssueSummary {
95
+ interface ObjectiveTrackerItemSummary {
96
96
  id: string;
97
+ trackerType: string;
97
98
  identifier: string;
98
99
  title: string;
99
100
  url: string | null;
@@ -103,6 +104,12 @@ interface ObjectiveLinearIssueSummary {
103
104
  labels?: string[];
104
105
  }
105
106
 
107
+ interface TrackerConnectionInfo {
108
+ type: string;
109
+ displayName: string;
110
+ connected: boolean;
111
+ }
112
+
106
113
  const HEALTH_META: Record<
107
114
  ProjectObjectiveHealth,
108
115
  { label: string; chipClass: string; toneClass: string }
@@ -326,13 +333,18 @@ function buildObjectiveChatPrefix(
326
333
  teamName: string | null,
327
334
  projectId: string,
328
335
  projectSlug: string,
329
- appOrigin: string | null
336
+ appOrigin: string | null,
337
+ trackerInfo: {
338
+ available: { type: string; displayName: string }[];
339
+ configured: { type: string; displayName: string }[];
340
+ defaultType: string | null;
341
+ }
330
342
  ): string {
331
343
  const basePath = `/api/projects/${projectId}/objectives/${objective.id}`;
332
344
  const objectiveRoute = appOrigin ? `${appOrigin}${basePath}` : basePath;
333
345
  const scheduledTasksRoute = `${objectiveRoute}/scheduled-tasks`;
334
- const linearIssuesRoute = `${objectiveRoute}/linear-issues`;
335
346
  const notesRoute = `${objectiveRoute}/notes`;
347
+ const trackersBase = appOrigin ? `${appOrigin}/api/trackers` : `/api/trackers`;
336
348
 
337
349
  const objectiveFilePath = `~/.agx/projects/${projectSlug}/objectives/${objective.key}.md`;
338
350
  const notesDir = `~/.agx/projects/${projectSlug}/objectives/${objective.key}/notes/`;
@@ -354,7 +366,7 @@ function buildObjectiveChatPrefix(
354
366
  `## Objective file (source of truth)\n\nThis objective is stored as a frontmatter markdown file at:\n\`${objectiveFilePath}\`\n\nFile format:\n- YAML frontmatter between \`---\` delimiters contains all metadata (title, teamId, key, status, progress, scheduledTaskIds, threadId, chatSessionVersion, createdAt, updatedAt).\n- \`## Activities\` section contains the activity timeline; each activity is a \`### Title\` block with metadata lines (\`- **id:**\`, \`- **source:**\`, \`- **created:**\`, \`- **body:**\`) and optional \`#### Replies\` sub-section.\n\nNotes are stored as separate files in \`${notesDir}\`. Each note is a markdown file with YAML frontmatter (id, title, objectiveId, createdAt, updatedAt) and a markdown body.\n\nWhen updating the objective, you can edit this file directly. Rules:\n- NEVER remove or break the \`---\` frontmatter delimiters.\n- NEVER change the \`id\` or \`createdAt\` fields.\n- Always update \`updatedAt\` to the current ISO timestamp when making changes.\n- After any edit, call \`GET ${validateRoute}\` to verify the file is still valid.\n- If validation fails, fix the errors immediately before doing anything else.`,
355
367
 
356
368
  "Scheduled tasks live in the shared scheduled-task list and are filtered by this objective label.",
357
- "Your job is to help the team develop the strategy needed to reach the goal, including the right combination of objective notes, scheduled tasks, and Linear tickets.",
369
+ "Your job is to help the team develop the strategy needed to reach the goal, including the right combination of objective notes, scheduled tasks, and tracker tickets.",
358
370
  "Use the current session history to build on prior reasoning. Only reset and start from scratch when the user explicitly starts a new session.",
359
371
  "Use this thread to pressure-test strategy, suggest better tactics, rewrite the objective when asked, propose the right operational cadence, and take concrete follow-up actions when the user wants them applied.",
360
372
  "When suggesting edits, prefer editing the frontmatter file directly or using the notes API. When the user asks you to make a change, edit the file, validate, then confirm.",
@@ -367,9 +379,32 @@ function buildObjectiveChatPrefix(
367
379
  `- DELETE ${notesRoute}/{noteId} to delete a note.`,
368
380
  `- GET ${scheduledTasksRoute} to inspect the scheduled tasks already tracked for this objective.`,
369
381
  `- POST ${scheduledTasksRoute} with {"name","prompt","cadence","agentId"} to create a scheduled task for this objective.`,
370
- `- GET ${linearIssuesRoute} to inspect Linear tickets carrying the objective label "${objective.key}".`,
371
- `- POST ${linearIssuesRoute} with {"title","description","teamId","assigneeId","cycleId","stateId","priority"} to create a Linear ticket labeled "${objective.key}".`,
372
382
  `- GET ${validateRoute} to validate the objective file on disk. Returns {"valid":true} or {"valid":false,"errors":[...]}.`,
383
+ "Tracker integrations:",
384
+ `- Available tracker types: ${
385
+ trackerInfo.available.length > 0
386
+ ? trackerInfo.available.map((t) => `${t.displayName} (${t.type})`).join(", ")
387
+ : "none registered"
388
+ }.`,
389
+ `- Configured for this project: ${
390
+ trackerInfo.configured.length > 0
391
+ ? trackerInfo.configured
392
+ .map((t) => {
393
+ const isDefault = trackerInfo.defaultType === t.type;
394
+ return `${t.displayName} (${t.type})${isDefault ? " — default" : ""}`;
395
+ })
396
+ .join(", ")
397
+ : "none — ask the user to connect a tracker in project settings if they want ticket workflows"
398
+ }.`,
399
+ trackerInfo.defaultType
400
+ ? `- Default tracker for ticket workflows: ${trackerInfo.defaultType}. Prefer this tracker when creating or referencing tickets for this objective unless the user asks otherwise.`
401
+ : trackerInfo.configured.length > 1
402
+ ? "- No default tracker has been selected; ask the user which connected tracker to use before creating tickets."
403
+ : "",
404
+ ...trackerInfo.configured.map(
405
+ (t) =>
406
+ `- GET ${trackersBase}/${t.type}/items?projectId=${projectId} to list ${t.displayName} items. Filter client-side by label "${objective.key}" to find tickets tied to this objective.`
407
+ ),
373
408
  ]
374
409
  .filter(Boolean)
375
410
  .join("\n\n");
@@ -385,7 +420,7 @@ interface ObjectiveChatSession {
385
420
 
386
421
  type ObjectiveChatView = "list" | "detail";
387
422
 
388
- type ObjectiveDetailTab = "activity" | "notes" | "linear" | "scheduled-tasks";
423
+ type ObjectiveDetailTab = "activity" | "notes" | "tasks" | "scheduled-tasks";
389
424
 
390
425
  function summarizeSessionTitle(content: string): string {
391
426
  const normalized = content.replace(/\s+/g, " ").trim();
@@ -478,6 +513,9 @@ function ObjectiveChatPanel({
478
513
  projectSlug,
479
514
  objective,
480
515
  teamName,
516
+ trackerConnections,
517
+ availableTrackers,
518
+ defaultTrackerType,
481
519
  onThreadLinked,
482
520
  onObjectiveUpdated,
483
521
  }: {
@@ -485,6 +523,9 @@ function ObjectiveChatPanel({
485
523
  projectSlug: string;
486
524
  objective: ProjectObjective;
487
525
  teamName: string | null;
526
+ trackerConnections: TrackerConnectionInfo[];
527
+ availableTrackers: { type: string; displayName: string }[];
528
+ defaultTrackerType: string | null;
488
529
  onThreadLinked: (threadId: string) => Promise<void>;
489
530
  onObjectiveUpdated: () => Promise<void>;
490
531
  }) {
@@ -959,7 +1000,11 @@ function ObjectiveChatPanel({
959
1000
  const projectParticipantIds = participants.map((participant) => participant.id);
960
1001
  const rootMessageId = isDetailView ? selectedSessionId : null;
961
1002
  const combinedPrefix = [
962
- buildObjectiveChatPrefix(objective, teamName, projectId, projectSlug, appOrigin),
1003
+ buildObjectiveChatPrefix(objective, teamName, projectId, projectSlug, appOrigin, {
1004
+ available: availableTrackers,
1005
+ configured: trackerConnections.filter((c) => c.connected).map((c) => ({ type: c.type, displayName: c.displayName })),
1006
+ defaultType: defaultTrackerType,
1007
+ }),
963
1008
  promptPrefix,
964
1009
  ]
965
1010
  .filter(Boolean)
@@ -1639,8 +1684,10 @@ export function ProjectObjectiveDetail({
1639
1684
  const [savingNoteIds, setSavingNoteIds] = useState<Set<string>>(new Set());
1640
1685
  const [isCreatingNote, setIsCreatingNote] = useState(false);
1641
1686
  const [noteSearch, setNoteSearch] = useState("");
1642
- const [linearIssues, setLinearIssues] = useState<ObjectiveLinearIssueSummary[]>([]);
1643
- const [linearConnected, setLinearConnected] = useState(true);
1687
+ const [trackerItems, setTrackerItems] = useState<ObjectiveTrackerItemSummary[]>([]);
1688
+ const [trackerConnections, setTrackerConnections] = useState<TrackerConnectionInfo[]>([]);
1689
+ const [availableTrackers, setAvailableTrackers] = useState<{ type: string; displayName: string }[]>([]);
1690
+ const [defaultTrackerType, setDefaultTrackerType] = useState<string | null>(null);
1644
1691
  const [workingOnObjective, setWorkingOnObjective] = useState(false);
1645
1692
 
1646
1693
  const { jobs: scheduledJobs } = usePromptJobs(project?.id ?? null, {
@@ -1956,46 +2003,119 @@ export function ProjectObjectiveDetail({
1956
2003
  }, [objective, project?.id, refetchProject]);
1957
2004
 
1958
2005
  useEffect(() => {
1959
- if (!project?.id || !objective?.id) {
1960
- setLinearIssues([]);
1961
- setLinearConnected(true);
2006
+ if (!project?.id || !objective?.id || !objective?.key) {
2007
+ setTrackerItems([]);
2008
+ setTrackerConnections([]);
2009
+ setAvailableTrackers([]);
1962
2010
  return;
1963
2011
  }
1964
2012
 
1965
2013
  const projectId = project.id;
1966
- const currentObjectiveId = objective.id;
2014
+ const objectiveKey = objective.key;
1967
2015
  let cancelled = false;
1968
2016
 
1969
- async function loadObjectiveResources() {
2017
+ async function loadTrackerResources() {
1970
2018
  try {
1971
- const linearResponse = await fetch(
1972
- `/api/projects/${projectId}/objectives/${currentObjectiveId}/linear-issues`
2019
+ const connRes = await fetch(
2020
+ `/api/trackers/connections?projectId=${encodeURIComponent(projectId)}`
1973
2021
  );
1974
- const linearPayload =
1975
- linearResponse.status === 401
1976
- ? { connected: false, issues: [] as ObjectiveLinearIssueSummary[] }
1977
- : linearResponse.ok
1978
- ? ((await linearResponse.json()) as {
1979
- connected?: boolean;
1980
- issues?: ObjectiveLinearIssueSummary[];
1981
- })
1982
- : { connected: true, issues: [] as ObjectiveLinearIssueSummary[] };
1983
-
2022
+ if (!connRes.ok) {
2023
+ if (!cancelled) {
2024
+ setTrackerItems([]);
2025
+ setTrackerConnections([]);
2026
+ setAvailableTrackers([]);
2027
+ }
2028
+ return;
2029
+ }
2030
+ const connPayload = (await connRes.json()) as {
2031
+ connections?: { type: string; connected?: boolean }[];
2032
+ available?: { type: string; displayName: string }[];
2033
+ defaultTracker?: string | null;
2034
+ };
1984
2035
  if (cancelled) return;
1985
2036
 
1986
- setLinearIssues(
1987
- Array.isArray(linearPayload.issues) ? linearPayload.issues : []
2037
+ const available = Array.isArray(connPayload.available) ? connPayload.available : [];
2038
+ const connections: TrackerConnectionInfo[] = (connPayload.connections ?? []).map((c) => ({
2039
+ type: c.type,
2040
+ displayName: available.find((a) => a.type === c.type)?.displayName ?? c.type,
2041
+ connected: c.connected !== false,
2042
+ }));
2043
+ const nextDefault =
2044
+ typeof connPayload.defaultTracker === "string" && connPayload.defaultTracker
2045
+ ? connPayload.defaultTracker
2046
+ : null;
2047
+
2048
+ setAvailableTrackers(available);
2049
+ setTrackerConnections(connections);
2050
+ setDefaultTrackerType(nextDefault);
2051
+
2052
+ const connectedOnly = connections.filter((c) => c.connected);
2053
+ const activeConns =
2054
+ nextDefault && connectedOnly.some((c) => c.type === nextDefault)
2055
+ ? connectedOnly.filter((c) => c.type === nextDefault)
2056
+ : connectedOnly;
2057
+ if (activeConns.length === 0) {
2058
+ setTrackerItems([]);
2059
+ return;
2060
+ }
2061
+
2062
+ const normalizedKey = objectiveKey.trim().toLowerCase();
2063
+ const results = await Promise.all(
2064
+ activeConns.map(async (conn) => {
2065
+ try {
2066
+ const itemsRes = await fetch(
2067
+ `/api/trackers/${encodeURIComponent(conn.type)}/items?projectId=${encodeURIComponent(projectId)}&limit=500`
2068
+ );
2069
+ if (!itemsRes.ok) return [];
2070
+ const payload = (await itemsRes.json()) as {
2071
+ items?: {
2072
+ id: string;
2073
+ trackerType?: string;
2074
+ identifier: string;
2075
+ title: string;
2076
+ url?: string | null;
2077
+ status: string;
2078
+ assignee?: { name?: string } | null;
2079
+ updatedAt: string;
2080
+ labels?: string[];
2081
+ }[];
2082
+ };
2083
+ const items = Array.isArray(payload.items) ? payload.items : [];
2084
+ return items
2085
+ .filter((item) =>
2086
+ (item.labels ?? []).some(
2087
+ (label) => label.trim().toLowerCase() === normalizedKey
2088
+ )
2089
+ )
2090
+ .map<ObjectiveTrackerItemSummary>((item) => ({
2091
+ id: item.id,
2092
+ trackerType: item.trackerType ?? conn.type,
2093
+ identifier: item.identifier,
2094
+ title: item.title,
2095
+ url: item.url ?? null,
2096
+ status: item.status,
2097
+ assignee: item.assignee?.name ?? null,
2098
+ updatedAt: item.updatedAt,
2099
+ labels: item.labels,
2100
+ }));
2101
+ } catch {
2102
+ return [];
2103
+ }
2104
+ })
1988
2105
  );
1989
- setLinearConnected(linearPayload.connected !== false);
2106
+
2107
+ if (cancelled) return;
2108
+ setTrackerItems(results.flat());
1990
2109
  } catch (error) {
1991
2110
  if (cancelled) return;
1992
- console.warn("Failed to load objective resources", error);
1993
- setLinearIssues([]);
1994
- setLinearConnected(true);
2111
+ console.warn("Failed to load objective tracker resources", error);
2112
+ setTrackerItems([]);
2113
+ setTrackerConnections([]);
2114
+ setAvailableTrackers([]);
1995
2115
  }
1996
2116
  }
1997
2117
 
1998
- void loadObjectiveResources();
2118
+ void loadTrackerResources();
1999
2119
 
2000
2120
  return () => {
2001
2121
  cancelled = true;
@@ -2179,7 +2299,14 @@ export function ProjectObjectiveDetail({
2179
2299
  {([
2180
2300
  { id: "activity" as const, label: "Activity", icon: Clock },
2181
2301
  { id: "notes" as const, label: "Notes", icon: FileText },
2182
- { id: "linear" as const, label: "Tasks", icon: (props: { size?: number; className?: string }) => <TrackerIcon trackerType="linear" className="h-3.5 w-3.5" /> },
2302
+ { id: "tasks" as const, label: "Tasks", icon: (props: { size?: number; className?: string }) => {
2303
+ const connected = trackerConnections.filter((c) => c.connected);
2304
+ const iconType =
2305
+ (defaultTrackerType && connected.some((c) => c.type === defaultTrackerType)
2306
+ ? defaultTrackerType
2307
+ : connected[0]?.type) ?? "tracker";
2308
+ return <TrackerIcon trackerType={iconType} className="h-3.5 w-3.5" />;
2309
+ } },
2183
2310
  { id: "scheduled-tasks" as const, label: "Scheduled Jobs", icon: CalendarClock },
2184
2311
  ]).map((tab) => (
2185
2312
  <button
@@ -2204,9 +2331,9 @@ export function ProjectObjectiveDetail({
2204
2331
  {notes.length}
2205
2332
  </span>
2206
2333
  )}
2207
- {tab.id === "linear" && (() => {
2334
+ {tab.id === "tasks" && (() => {
2208
2335
  const DONE = ["done", "canceled", "cancelled", "completed", "duplicate"];
2209
- const active = linearIssues.filter(
2336
+ const active = trackerItems.filter(
2210
2337
  (i, idx, arr) => arr.findIndex((x) => x.id === i.id) === idx && !DONE.includes(i.status.toLowerCase())
2211
2338
  );
2212
2339
  return active.length > 0 ? (
@@ -2385,9 +2512,9 @@ export function ProjectObjectiveDetail({
2385
2512
  />
2386
2513
  )}
2387
2514
 
2388
- {/* Linear Tickets Tab */}
2389
- {activeTab === "linear" && (() => {
2390
- const dedupedIssues = linearIssues.filter(
2515
+ {/* Tracker Tickets Tab */}
2516
+ {activeTab === "tasks" && (() => {
2517
+ const dedupedIssues = trackerItems.filter(
2391
2518
  (issue, idx, arr) => arr.findIndex((i) => i.id === issue.id) === idx
2392
2519
  );
2393
2520
  const DONE_STATUSES = ["done", "canceled", "cancelled", "completed", "duplicate"];
@@ -2398,6 +2525,16 @@ export function ProjectObjectiveDetail({
2398
2525
  .filter((i) => DONE_STATUSES.includes(i.status.toLowerCase()))
2399
2526
  .slice(-5);
2400
2527
 
2528
+ const connectedTrackers = trackerConnections.filter((c) => c.connected);
2529
+ const activeTrackers =
2530
+ defaultTrackerType && connectedTrackers.some((c) => c.type === defaultTrackerType)
2531
+ ? connectedTrackers.filter((c) => c.type === defaultTrackerType)
2532
+ : connectedTrackers;
2533
+ const connectedLabel =
2534
+ activeTrackers.length === 0
2535
+ ? null
2536
+ : activeTrackers.map((c) => c.displayName).join(", ");
2537
+
2401
2538
  return (
2402
2539
  <section>
2403
2540
  <div className="flex flex-wrap items-start justify-between gap-3 mb-4">
@@ -2405,13 +2542,22 @@ export function ProjectObjectiveDetail({
2405
2542
  Tickets tracked by the objective label{" "}
2406
2543
  <code className="rounded bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[11px] text-[var(--foreground)]">
2407
2544
  {objective.key}
2408
- </code>.
2545
+ </code>
2546
+ {connectedLabel ? <> across {connectedLabel}.</> : "."}
2409
2547
  </p>
2410
2548
  </div>
2411
- {!linearConnected ? (
2412
- <EmptyState label="Connect Linear to create and track tickets for this objective." />
2549
+ {activeTrackers.length === 0 ? (
2550
+ <EmptyState
2551
+ label={
2552
+ availableTrackers.length === 0
2553
+ ? "No tracker integrations registered."
2554
+ : `Connect a tracker (${availableTrackers
2555
+ .map((t) => t.displayName)
2556
+ .join(", ")}) to create and track tickets for this objective.`
2557
+ }
2558
+ />
2413
2559
  ) : dedupedIssues.length === 0 ? (
2414
- <EmptyState label={`No Linear tickets with label ${objective.key} yet.`} />
2560
+ <EmptyState label={`No tracker tickets with label ${objective.key} yet.`} />
2415
2561
  ) : (
2416
2562
  <>
2417
2563
  {activeIssues.length > 0 && (
@@ -2423,11 +2569,14 @@ export function ProjectObjectiveDetail({
2423
2569
  >
2424
2570
  <div className="flex items-start justify-between gap-3">
2425
2571
  <div className="min-w-0">
2426
- <p className="text-xs font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]">
2427
- {issue.identifier}
2428
- </p>
2572
+ <div className="flex items-center gap-1.5 text-xs font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]">
2573
+ <TrackerIcon trackerType={issue.trackerType} className="h-3 w-3" />
2574
+ <span>{issue.identifier}</span>
2575
+ </div>
2429
2576
  <a
2430
- href={`/projects/${projectSlug}/linear?issue=${issue.id}`}
2577
+ href={issue.url ?? `/projects/${projectSlug}/${issue.trackerType}?issue=${issue.id}`}
2578
+ target={issue.url ? "_blank" : undefined}
2579
+ rel={issue.url ? "noreferrer" : undefined}
2431
2580
  className="mt-1 block text-sm font-medium text-[var(--foreground)] transition-colors hover:text-[var(--primary)]"
2432
2581
  >
2433
2582
  {issue.title}
@@ -2455,9 +2604,12 @@ export function ProjectObjectiveDetail({
2455
2604
  {doneIssues.map((issue) => (
2456
2605
  <a
2457
2606
  key={issue.id}
2458
- href={`/projects/${projectSlug}/linear?issue=${issue.id}`}
2607
+ href={issue.url ?? `/projects/${projectSlug}/${issue.trackerType}?issue=${issue.id}`}
2608
+ target={issue.url ? "_blank" : undefined}
2609
+ rel={issue.url ? "noreferrer" : undefined}
2459
2610
  className="group flex items-center gap-3 rounded-md px-2 py-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)] hover:text-[var(--foreground)]"
2460
2611
  >
2612
+ <TrackerIcon trackerType={issue.trackerType} className="h-3 w-3 shrink-0" />
2461
2613
  <span className="text-[11px] font-mono shrink-0">{issue.identifier}</span>
2462
2614
  <span className="text-[12px] truncate">{issue.title}</span>
2463
2615
  <span className="ml-auto shrink-0 text-[10px] text-[var(--app-shell-soft-text)] group-hover:text-[var(--muted-foreground)]">{issue.status}</span>
@@ -2518,6 +2670,9 @@ export function ProjectObjectiveDetail({
2518
2670
  projectSlug={projectSlug}
2519
2671
  objective={objective}
2520
2672
  teamName={teamName}
2673
+ trackerConnections={trackerConnections}
2674
+ availableTrackers={availableTrackers}
2675
+ defaultTrackerType={defaultTrackerType}
2521
2676
  onThreadLinked={handleObjectiveThreadLinked}
2522
2677
  onObjectiveUpdated={refetchProject}
2523
2678
  />
@@ -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
+ }