@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
@@ -97,12 +97,18 @@ function getDb(): DatabaseSync {
97
97
  PRIMARY KEY (thread_id, id)
98
98
  )
99
99
  `);
100
- // Migrate: rename linear_runs → tracker_runs if old table exists
100
+ // Migrate: rename linear_runs → tracker_runs if old table exists and new one doesn't
101
101
  const hasOldTable = (db.prepare(
102
102
  "SELECT name FROM sqlite_master WHERE type='table' AND name='linear_runs'"
103
103
  ).get() as { name: string } | undefined);
104
- if (hasOldTable) {
104
+ const hasNewTable = (db.prepare(
105
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='tracker_runs'"
106
+ ).get() as { name: string } | undefined);
107
+ if (hasOldTable && !hasNewTable) {
105
108
  db.exec("ALTER TABLE linear_runs RENAME TO tracker_runs");
109
+ } else if (hasOldTable && hasNewTable) {
110
+ // Both exist (likely a partial prior migration) — drop the stale old table
111
+ db.exec("DROP TABLE linear_runs");
106
112
  }
107
113
  db.exec(`
108
114
  CREATE TABLE IF NOT EXISTS tracker_runs (
@@ -43,6 +43,7 @@ export function JiraIcon({ className }: { className?: string }) {
43
43
  export class JiraAdapter implements TrackerAdapter {
44
44
  type = "jira" as const;
45
45
  displayName = "Jira Cloud";
46
+ groupLabel = "Sprint";
46
47
  icon = JiraIcon;
47
48
 
48
49
  getAuthUrl(projectId: string): string {
@@ -113,6 +113,7 @@ function mapJiraIssueToCacheInput(
113
113
  priority: fields.priority?.name ?? null,
114
114
  labels: fields.labels ?? [],
115
115
  url: `${siteUrl}/browse/${issue.key}`,
116
+ createdAt: fields.created ?? null,
116
117
  updatedAt: fields.updated,
117
118
  };
118
119
  }
@@ -77,6 +77,7 @@ function cycleToGroup(cycle: LinearCycle): TrackerGroup {
77
77
  export class LinearAdapter implements TrackerAdapter {
78
78
  type = "linear" as const;
79
79
  displayName = "Linear";
80
+ groupLabel = "Cycle";
80
81
  icon = LinearIcon;
81
82
 
82
83
  getAuthUrl(projectId: string): string {
@@ -98,6 +98,7 @@ interface RawLinearIssueNode {
98
98
  title: string;
99
99
  description: string | null;
100
100
  url: string | null;
101
+ createdAt: string;
101
102
  updatedAt: string;
102
103
  state: LinearIssueState | null;
103
104
  assignee: LinearIssueAssignee | null;
@@ -184,6 +185,7 @@ export interface LinearIssueNode {
184
185
  title: string;
185
186
  description: string | null;
186
187
  url: string | null;
188
+ createdAt: string;
187
189
  updatedAt: string;
188
190
  state: Promise<LinearIssueState | null>;
189
191
  assignee: Promise<LinearIssueAssignee | null>;
@@ -490,6 +492,7 @@ export class LinearClient {
490
492
  title
491
493
  description
492
494
  url
495
+ createdAt
493
496
  updatedAt
494
497
  state { name }
495
498
  assignee { id name email }
@@ -516,6 +519,7 @@ export class LinearClient {
516
519
  title: issue.title,
517
520
  description: issue.description,
518
521
  url: issue.url,
522
+ createdAt: issue.createdAt,
519
523
  updatedAt: issue.updatedAt,
520
524
  state: Promise.resolve(issue.state),
521
525
  assignee: Promise.resolve(issue.assignee),
@@ -581,6 +585,7 @@ export class LinearClient {
581
585
  title
582
586
  description
583
587
  url
588
+ createdAt
584
589
  updatedAt
585
590
  state { name }
586
591
  assignee { id name email }
@@ -279,6 +279,7 @@ export async function pullLinearIssues(input: {
279
279
  cycleId: cycle?.id ?? null,
280
280
  cycleName: cycle?.name ?? null,
281
281
  cycleNumber: cycle?.number ?? null,
282
+ createdAt: issue.createdAt,
282
283
  updatedAt: issue.updatedAt,
283
284
  } satisfies CachedLinearIssueInput;
284
285
  })
@@ -18,50 +18,81 @@ function ensureDir(filePath: string): void {
18
18
  }
19
19
  }
20
20
 
21
- export function listTrackerConnections(projectId: string): TrackerConnection[] {
22
- if (!projectId) return [];
21
+ function readConnectionsFile(projectId: string): { connections: TrackerConnection[]; defaultTracker?: string } {
22
+ if (!projectId) return { connections: [] };
23
23
  const filePath = getConnectionsPath(projectId);
24
24
  try {
25
25
  const raw = readFileSync(filePath, "utf8");
26
26
  const data = JSON.parse(raw);
27
- return Array.isArray(data.connections) ? data.connections : [];
27
+ return {
28
+ connections: Array.isArray(data.connections) ? data.connections : [],
29
+ defaultTracker: typeof data.defaultTracker === "string" ? data.defaultTracker : undefined,
30
+ };
28
31
  } catch {
29
- return [];
32
+ return { connections: [] };
30
33
  }
31
34
  }
32
35
 
36
+ function writeConnectionsFile(
37
+ projectId: string,
38
+ connections: TrackerConnection[],
39
+ defaultTracker: string | undefined
40
+ ): void {
41
+ const filePath = getConnectionsPath(projectId);
42
+ ensureDir(filePath);
43
+ const payload: { connections: TrackerConnection[]; defaultTracker?: string } = { connections };
44
+ if (defaultTracker) payload.defaultTracker = defaultTracker;
45
+ writeFileSync(filePath, JSON.stringify(payload, null, 2), "utf8");
46
+ }
47
+
48
+ export function listTrackerConnections(projectId: string): TrackerConnection[] {
49
+ return readConnectionsFile(projectId).connections;
50
+ }
51
+
52
+ export function getDefaultTrackerType(projectId: string): string | null {
53
+ const data = readConnectionsFile(projectId);
54
+ const typeExists = (t: string) => data.connections.some((c) => c.type === t);
55
+ if (data.defaultTracker && typeExists(data.defaultTracker)) return data.defaultTracker;
56
+ // Fall back to the only connected tracker, if exactly one is configured.
57
+ return data.connections.length === 1 ? data.connections[0].type : null;
58
+ }
59
+
60
+ export function setDefaultTrackerType(projectId: string, trackerType: string | null): void {
61
+ if (!projectId) return;
62
+ const data = readConnectionsFile(projectId);
63
+ const next = trackerType && data.connections.some((c) => c.type === trackerType) ? trackerType : undefined;
64
+ writeConnectionsFile(projectId, data.connections, next);
65
+ }
66
+
33
67
  export function addTrackerConnection(
34
68
  projectId: string,
35
69
  connection: TrackerConnection
36
70
  ): void {
37
71
  if (!projectId) return;
38
- const filePath = getConnectionsPath(projectId);
39
- ensureDir(filePath);
40
- const connections = listTrackerConnections(projectId);
41
- // Prevent duplicates — update existing connection of same type
72
+ const data = readConnectionsFile(projectId);
73
+ const connections = data.connections.slice();
42
74
  const existing = connections.findIndex((c) => c.type === connection.type);
43
75
  if (existing >= 0) {
44
76
  connections[existing] = connection;
45
77
  } else {
46
78
  connections.push(connection);
47
79
  }
48
- writeFileSync(filePath, JSON.stringify({ connections }, null, 2), "utf8");
80
+ writeConnectionsFile(projectId, connections, data.defaultTracker);
49
81
  }
50
82
 
51
83
  export function removeTrackerConnection(projectId: string, trackerType: string): void {
52
84
  if (!projectId) return;
53
- const filePath = getConnectionsPath(projectId);
54
- const connections = listTrackerConnections(projectId).filter(
55
- (c) => c.type !== trackerType
56
- );
85
+ const data = readConnectionsFile(projectId);
86
+ const connections = data.connections.filter((c) => c.type !== trackerType);
87
+ const nextDefault = data.defaultTracker === trackerType ? undefined : data.defaultTracker;
57
88
  if (connections.length === 0) {
89
+ const filePath = getConnectionsPath(projectId);
58
90
  try {
59
91
  unlinkSync(filePath);
60
92
  } catch {
61
93
  // already gone
62
94
  }
63
95
  } else {
64
- ensureDir(filePath);
65
- writeFileSync(filePath, JSON.stringify({ connections }, null, 2), "utf8");
96
+ writeConnectionsFile(projectId, connections, nextDefault);
66
97
  }
67
98
  }
@@ -29,6 +29,8 @@ export interface TrackerAdapter {
29
29
  type: string;
30
30
  /** Human-readable name, e.g. 'Linear' or 'Jira Cloud' */
31
31
  displayName: string;
32
+ /** Label for the group filter, e.g. 'Cycle' (Linear), 'Sprint' (Jira) */
33
+ groupLabel?: string;
32
34
  /** Icon component to render in the sidebar and headers */
33
35
  icon: ComponentType<{ className?: string }>;
34
36
 
@@ -0,0 +1,262 @@
1
+ import "server-only";
2
+
3
+ import type { DatabaseSync } from "node:sqlite";
4
+ import { promises as fs } from "node:fs";
5
+ import os from "node:os";
6
+ import path from "node:path";
7
+ import { pragmaSet, transaction } from "../sqlite-compat";
8
+
9
+ const TRACKER_DIR =
10
+ process.env.AGX_TRACKER_DIR?.trim() ||
11
+ path.join(process.env.AGX_DATA_DIR || path.join(os.homedir(), ".agx"), "tracker");
12
+ const DB_PATH = path.join(TRACKER_DIR, "items.sqlite");
13
+
14
+ const FIBONACCI = [1, 2, 3, 5, 8, 13, 21] as const;
15
+ export type FibonacciEstimate = (typeof FIBONACCI)[number];
16
+ export const FIBONACCI_VALUES: readonly number[] = FIBONACCI;
17
+
18
+ export interface ItemMetadata {
19
+ labels: string[];
20
+ estimate: number | null;
21
+ }
22
+
23
+ export interface LabelDefinition {
24
+ id: string;
25
+ name: string;
26
+ color: string | null;
27
+ }
28
+
29
+ async function withDb<T>(run: (db: DatabaseSync) => T): Promise<T> {
30
+ await fs.mkdir(TRACKER_DIR, { recursive: true });
31
+ const db = new (process.getBuiltinModule("node:sqlite") as typeof import("node:sqlite")).DatabaseSync(DB_PATH);
32
+ pragmaSet(db, "journal_mode = WAL");
33
+ try {
34
+ db.exec(`
35
+ CREATE TABLE IF NOT EXISTS tracker_item_metadata (
36
+ issue_id TEXT NOT NULL,
37
+ project_id TEXT NOT NULL,
38
+ labels_json TEXT NOT NULL DEFAULT '[]',
39
+ estimate INTEGER,
40
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
41
+ PRIMARY KEY (issue_id, project_id)
42
+ );
43
+ CREATE TABLE IF NOT EXISTS tracker_label_definitions (
44
+ id TEXT PRIMARY KEY,
45
+ project_id TEXT NOT NULL,
46
+ name TEXT NOT NULL,
47
+ color TEXT,
48
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
49
+ UNIQUE(project_id, name)
50
+ );
51
+ `);
52
+ return run(db);
53
+ } finally {
54
+ db.close();
55
+ }
56
+ }
57
+
58
+ function parseLabels(json: string | null): string[] {
59
+ if (!json) return [];
60
+ try {
61
+ const parsed = JSON.parse(json);
62
+ return Array.isArray(parsed) ? parsed.filter((l: unknown) => typeof l === "string" && l.trim()) : [];
63
+ } catch {
64
+ return [];
65
+ }
66
+ }
67
+
68
+ export async function getItemMetadata(projectId: string, issueId: string): Promise<ItemMetadata> {
69
+ return withDb((db) => {
70
+ const row = db.prepare(
71
+ "SELECT labels_json, estimate FROM tracker_item_metadata WHERE project_id = ? AND issue_id = ?"
72
+ ).get(projectId, issueId) as { labels_json: string; estimate: number | null } | undefined;
73
+ if (!row) return { labels: [], estimate: null };
74
+ return { labels: parseLabels(row.labels_json), estimate: row.estimate };
75
+ });
76
+ }
77
+
78
+ export async function setItemMetadata(
79
+ projectId: string,
80
+ issueId: string,
81
+ update: { labels?: string[]; estimate?: number | null }
82
+ ): Promise<ItemMetadata> {
83
+ return withDb((db) => {
84
+ const existing = db.prepare(
85
+ "SELECT labels_json, estimate FROM tracker_item_metadata WHERE project_id = ? AND issue_id = ?"
86
+ ).get(projectId, issueId) as { labels_json: string; estimate: number | null } | undefined;
87
+
88
+ const labels = update.labels ?? parseLabels(existing?.labels_json ?? null);
89
+ const estimate = update.estimate !== undefined ? update.estimate : (existing?.estimate ?? null);
90
+
91
+ db.prepare(`
92
+ INSERT INTO tracker_item_metadata (issue_id, project_id, labels_json, estimate, updated_at)
93
+ VALUES (?, ?, ?, ?, datetime('now'))
94
+ ON CONFLICT(issue_id, project_id) DO UPDATE SET
95
+ labels_json = excluded.labels_json,
96
+ estimate = excluded.estimate,
97
+ updated_at = excluded.updated_at
98
+ `).run(issueId, projectId, JSON.stringify(labels), estimate);
99
+
100
+ return { labels, estimate };
101
+ });
102
+ }
103
+
104
+ export async function bulkGetItemMetadata(
105
+ projectId: string,
106
+ issueIds: string[]
107
+ ): Promise<Map<string, ItemMetadata>> {
108
+ if (issueIds.length === 0) return new Map();
109
+ return withDb((db) => {
110
+ const placeholders = issueIds.map(() => "?").join(", ");
111
+ const rows = db.prepare(
112
+ `SELECT issue_id, labels_json, estimate FROM tracker_item_metadata
113
+ WHERE project_id = ? AND issue_id IN (${placeholders})`
114
+ ).all(projectId, ...issueIds) as Array<{ issue_id: string; labels_json: string; estimate: number | null }>;
115
+
116
+ const result = new Map<string, ItemMetadata>();
117
+ for (const row of rows) {
118
+ result.set(row.issue_id, { labels: parseLabels(row.labels_json), estimate: row.estimate });
119
+ }
120
+ return result;
121
+ });
122
+ }
123
+
124
+ export async function bulkSetEstimate(
125
+ projectId: string,
126
+ issueIds: string[],
127
+ estimate: number | null
128
+ ): Promise<void> {
129
+ if (issueIds.length === 0) return;
130
+ return withDb((db) => {
131
+ transaction(db, () => {
132
+ const stmt = db.prepare(`
133
+ INSERT INTO tracker_item_metadata (issue_id, project_id, estimate, updated_at)
134
+ VALUES (?, ?, ?, datetime('now'))
135
+ ON CONFLICT(issue_id, project_id) DO UPDATE SET
136
+ estimate = excluded.estimate,
137
+ updated_at = excluded.updated_at
138
+ `);
139
+ for (const issueId of issueIds) {
140
+ stmt.run(issueId, projectId, estimate);
141
+ }
142
+ });
143
+ });
144
+ }
145
+
146
+ export async function bulkAddLabels(
147
+ projectId: string,
148
+ issueIds: string[],
149
+ labelsToAdd: string[]
150
+ ): Promise<void> {
151
+ if (issueIds.length === 0 || labelsToAdd.length === 0) return;
152
+ return withDb((db) => {
153
+ transaction(db, () => {
154
+ for (const issueId of issueIds) {
155
+ const row = db.prepare(
156
+ "SELECT labels_json FROM tracker_item_metadata WHERE project_id = ? AND issue_id = ?"
157
+ ).get(projectId, issueId) as { labels_json: string } | undefined;
158
+
159
+ const existing = parseLabels(row?.labels_json ?? null);
160
+ const merged = Array.from(new Set([...existing, ...labelsToAdd]));
161
+
162
+ db.prepare(`
163
+ INSERT INTO tracker_item_metadata (issue_id, project_id, labels_json, updated_at)
164
+ VALUES (?, ?, ?, datetime('now'))
165
+ ON CONFLICT(issue_id, project_id) DO UPDATE SET
166
+ labels_json = excluded.labels_json,
167
+ updated_at = excluded.updated_at
168
+ `).run(issueId, projectId, JSON.stringify(merged));
169
+ }
170
+ });
171
+ });
172
+ }
173
+
174
+ export async function bulkRemoveLabel(
175
+ projectId: string,
176
+ issueIds: string[],
177
+ label: string
178
+ ): Promise<void> {
179
+ if (issueIds.length === 0 || !label.trim()) return;
180
+ return withDb((db) => {
181
+ transaction(db, () => {
182
+ for (const issueId of issueIds) {
183
+ const row = db.prepare(
184
+ "SELECT labels_json FROM tracker_item_metadata WHERE project_id = ? AND issue_id = ?"
185
+ ).get(projectId, issueId) as { labels_json: string } | undefined;
186
+
187
+ if (!row) continue;
188
+ const existing = parseLabels(row.labels_json);
189
+ const filtered = existing.filter((l) => l !== label);
190
+
191
+ db.prepare(
192
+ "UPDATE tracker_item_metadata SET labels_json = ?, updated_at = datetime('now') WHERE project_id = ? AND issue_id = ?"
193
+ ).run(JSON.stringify(filtered), projectId, issueId);
194
+ }
195
+ });
196
+ });
197
+ }
198
+
199
+ export async function listLabelDefinitions(projectId: string): Promise<LabelDefinition[]> {
200
+ return withDb((db) => {
201
+ const rows = db.prepare(
202
+ "SELECT id, name, color FROM tracker_label_definitions WHERE project_id = ? ORDER BY name ASC"
203
+ ).all(projectId) as Array<{ id: string; name: string; color: string | null }>;
204
+ return rows;
205
+ });
206
+ }
207
+
208
+ export async function createLabelDefinition(
209
+ projectId: string,
210
+ name: string,
211
+ color?: string | null
212
+ ): Promise<LabelDefinition> {
213
+ const id = globalThis.crypto?.randomUUID?.() ?? `label-${Date.now()}-${Math.random().toString(36).slice(2)}`;
214
+ const trimmedName = name.trim();
215
+ if (!trimmedName) throw new Error("Label name is required");
216
+
217
+ return withDb((db) => {
218
+ db.prepare(
219
+ "INSERT INTO tracker_label_definitions (id, project_id, name, color) VALUES (?, ?, ?, ?)"
220
+ ).run(id, projectId, trimmedName, color?.trim() || null);
221
+ return { id, name: trimmedName, color: color?.trim() || null };
222
+ });
223
+ }
224
+
225
+ export async function deleteLabelDefinition(projectId: string, id: string): Promise<void> {
226
+ return withDb((db) => {
227
+ db.prepare(
228
+ "DELETE FROM tracker_label_definitions WHERE id = ? AND project_id = ?"
229
+ ).run(id, projectId);
230
+ });
231
+ }
232
+
233
+ export async function listAllLabels(projectId: string): Promise<Array<{ name: string; color: string | null; defined: boolean }>> {
234
+ return withDb((db) => {
235
+ const definitions = db.prepare(
236
+ "SELECT name, color FROM tracker_label_definitions WHERE project_id = ? ORDER BY name ASC"
237
+ ).all(projectId) as Array<{ name: string; color: string | null }>;
238
+
239
+ const metadataRows = db.prepare(
240
+ "SELECT labels_json FROM tracker_item_metadata WHERE project_id = ?"
241
+ ).all(projectId) as Array<{ labels_json: string }>;
242
+
243
+ const definedNames = new Set(definitions.map((d) => d.name));
244
+ const allUsed = new Set<string>();
245
+ for (const row of metadataRows) {
246
+ for (const label of parseLabels(row.labels_json)) {
247
+ allUsed.add(label);
248
+ }
249
+ }
250
+
251
+ const result: Array<{ name: string; color: string | null; defined: boolean }> = [];
252
+ for (const def of definitions) {
253
+ result.push({ name: def.name, color: def.color, defined: true });
254
+ }
255
+ for (const name of allUsed) {
256
+ if (!definedNames.has(name)) {
257
+ result.push({ name, color: null, defined: false });
258
+ }
259
+ }
260
+ return result;
261
+ });
262
+ }
@@ -40,6 +40,7 @@ interface TrackerItemRow {
40
40
  cycle_number: number | null;
41
41
  priority: string | null;
42
42
  metadata_json: string | null;
43
+ created_at: string | null;
43
44
  updated_at: string;
44
45
  pulled_at: number;
45
46
  }
@@ -75,6 +76,7 @@ export interface CachedTrackerItemRecord {
75
76
  cycleNumber: number | null;
76
77
  priority: string | null;
77
78
  metadata: Record<string, unknown>;
79
+ createdAt: string | null;
78
80
  updatedAt: string;
79
81
  pulledAt: string;
80
82
  }
@@ -102,6 +104,7 @@ export interface CachedTrackerItemInput {
102
104
  cycleNumber?: number | null;
103
105
  priority?: string | null;
104
106
  metadata?: Record<string, unknown>;
107
+ createdAt?: string | null;
105
108
  updatedAt: string;
106
109
  }
107
110
 
@@ -211,6 +214,7 @@ function mapRow(row: TrackerItemRow): CachedTrackerItemRecord {
211
214
  cycleNumber: row.cycle_number,
212
215
  priority: row.priority,
213
216
  metadata: row.metadata_json ? JSON.parse(row.metadata_json) : {},
217
+ createdAt: row.created_at,
214
218
  updatedAt: row.updated_at,
215
219
  pulledAt: toIso(row.pulled_at),
216
220
  };
@@ -384,6 +388,7 @@ async function withTrackerItemDatabase<T>(run: (db: DatabaseSync) => T): Promise
384
388
  ensureColumn(db, "tracker_items", "status_category", "status_category TEXT NOT NULL DEFAULT 'todo'");
385
389
  ensureColumn(db, "tracker_items", "priority", "priority TEXT");
386
390
  ensureColumn(db, "tracker_items", "metadata_json", "metadata_json TEXT");
391
+ ensureColumn(db, "tracker_items", "created_at", "created_at TEXT");
387
392
 
388
393
  return run(db);
389
394
  } finally {
@@ -411,8 +416,8 @@ export async function replaceCachedTrackerItems(input: {
411
416
  labels_json, url, status, status_category,
412
417
  assignee_id, assignee_name, assignee_email, is_assigned_to_me,
413
418
  team_id, team_name, team_key, cycle_id, cycle_name, cycle_number,
414
- priority, metadata_json, updated_at, pulled_at
415
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
419
+ priority, metadata_json, created_at, updated_at, pulled_at
420
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
416
421
  ON CONFLICT(issue_id) DO UPDATE SET
417
422
  tracker_type = excluded.tracker_type,
418
423
  tracker_id = excluded.tracker_id,
@@ -435,6 +440,7 @@ export async function replaceCachedTrackerItems(input: {
435
440
  cycle_number = excluded.cycle_number,
436
441
  priority = excluded.priority,
437
442
  metadata_json = excluded.metadata_json,
443
+ created_at = excluded.created_at,
438
444
  updated_at = excluded.updated_at,
439
445
  pulled_at = excluded.pulled_at
440
446
  `);
@@ -464,6 +470,7 @@ export async function replaceCachedTrackerItems(input: {
464
470
  toOptionalNumber(issue.cycleNumber ?? null),
465
471
  toOptionalString(issue.priority ?? null),
466
472
  issue.metadata ? JSON.stringify(issue.metadata) : null,
473
+ toOptionalString(issue.createdAt ?? null),
467
474
  issue.updatedAt.trim(),
468
475
  pulledAtMs
469
476
  );
@@ -693,7 +700,7 @@ export async function listCachedTrackerItems(
693
700
  orderClause = `ORDER BY LOWER(status) ${dirSql}, identifier ASC`;
694
701
  break;
695
702
  case "created":
696
- orderClause = `ORDER BY pulled_at ${dirSql}, identifier ASC`;
703
+ orderClause = `ORDER BY COALESCE(created_at, updated_at) ${dirSql}, identifier ASC`;
697
704
  break;
698
705
  default:
699
706
  orderClause = `ORDER BY updated_at ${dirSql}, identifier ASC`;
@@ -510,6 +510,48 @@ export async function getIssueActivityMap(
510
510
  });
511
511
  }
512
512
 
513
+ export interface IssueStats {
514
+ issueId: string;
515
+ sessions: number;
516
+ messages: number;
517
+ }
518
+
519
+ export async function getIssueStats(
520
+ projectId?: string | null
521
+ ): Promise<IssueStats[]> {
522
+ return withTrackerRunDatabase((db) => {
523
+ const hasProject = projectId?.trim();
524
+ const sql = hasProject
525
+ ? `SELECT tr.issue_id,
526
+ COUNT(DISTINCT tr.id) AS sessions,
527
+ COALESCE(SUM(mc.cnt), 0) AS messages
528
+ FROM tracker_runs tr
529
+ LEFT JOIN (
530
+ SELECT thread_id, COUNT(*) AS cnt FROM messages GROUP BY thread_id
531
+ ) mc ON mc.thread_id = tr.thread_id
532
+ WHERE tr.project_id = ?
533
+ GROUP BY tr.issue_id`
534
+ : `SELECT tr.issue_id,
535
+ COUNT(DISTINCT tr.id) AS sessions,
536
+ COALESCE(SUM(mc.cnt), 0) AS messages
537
+ FROM tracker_runs tr
538
+ LEFT JOIN (
539
+ SELECT thread_id, COUNT(*) AS cnt FROM messages GROUP BY thread_id
540
+ ) mc ON mc.thread_id = tr.thread_id
541
+ GROUP BY tr.issue_id`;
542
+
543
+ const rows = hasProject
544
+ ? (db.prepare(sql).all(projectId!.trim()) as unknown as Array<{ issue_id: string; sessions: number; messages: number }>)
545
+ : (db.prepare(sql).all() as unknown as Array<{ issue_id: string; sessions: number; messages: number }>);
546
+
547
+ return rows.map((row) => ({
548
+ issueId: row.issue_id,
549
+ sessions: row.sessions,
550
+ messages: row.messages,
551
+ }));
552
+ });
553
+ }
554
+
513
555
  export interface IssueActiveAgent {
514
556
  issueId: string;
515
557
  agentId: string;
@@ -379,6 +379,13 @@ export async function executeObjectiveWorker(opts: {
379
379
  ? (parsed.decision as string).trim().toLowerCase()
380
380
  : '';
381
381
  const action = rawAction === 'work' ? 'work_ticket' : rawAction;
382
+ if (!action) {
383
+ const raw = controllerResult.output ?? '';
384
+ console.warn(
385
+ `[objective-worker] empty action from controller (job=${opts.job.id}, outputLen=${raw.length}, parsed=${parsed ? 'object' : 'null'}):`,
386
+ raw.slice(0, 500),
387
+ );
388
+ }
382
389
  const reason = typeof parsed?.reason === 'string' ? parsed.reason.trim() : '';
383
390
  const objectiveProgress = normalizeAssessmentProgress(parsed?.objectiveProgress);
384
391
  const objectiveStatus = normalizeAssessmentStatus(parsed?.objectiveStatus);
@@ -336,6 +336,13 @@ export async function executeTaskWorker(opts: {
336
336
  ? (parsed.decision as string).trim().toLowerCase()
337
337
  : '';
338
338
  const action = rawAction === 'work' ? 'work_ticket' : rawAction;
339
+ if (!action) {
340
+ const raw = controllerResult.output ?? '';
341
+ console.warn(
342
+ `[task-worker] empty action from controller (job=${opts.job.id}, outputLen=${raw.length}, parsed=${parsed ? 'object' : 'null'}):`,
343
+ raw.slice(0, 500),
344
+ );
345
+ }
339
346
  const reason = typeof parsed?.reason === 'string' ? parsed.reason.trim() : '';
340
347
 
341
348
  // Phase 4: Act - dispatch action
@@ -5,6 +5,7 @@ export interface TrackerBoardFilters {
5
5
  assigneeIds: string[];
6
6
  statusCategories: string[];
7
7
  groupIds: string[];
8
+ labelNames: string[];
8
9
  sortBy: "activity" | "identifier" | "status" | "created";
9
10
  sortDir: "asc" | "desc";
10
11
  hasActivity: boolean;
@@ -15,6 +16,7 @@ const DEFAULT_TRACKER_BOARD_FILTERS: TrackerBoardFilters = {
15
16
  assigneeIds: [],
16
17
  statusCategories: [],
17
18
  groupIds: [],
19
+ labelNames: [],
18
20
  sortBy: "activity",
19
21
  sortDir: "desc",
20
22
  hasActivity: false,
@@ -69,6 +71,7 @@ export function loadTrackerBoardFilters(
69
71
  assigneeIds: normalizeStringArray(parsed.assigneeIds),
70
72
  statusCategories: normalizeStringArray(parsed.statusCategories),
71
73
  groupIds: normalizeStringArray(parsed.groupIds),
74
+ labelNames: normalizeStringArray(parsed.labelNames),
72
75
  sortBy: ["activity", "identifier", "status", "created"].includes(parsed.sortBy as string)
73
76
  ? (parsed.sortBy as TrackerBoardFilters["sortBy"])
74
77
  : DEFAULT_TRACKER_BOARD_FILTERS.sortBy,
@@ -101,6 +104,7 @@ export function persistTrackerBoardFilters(
101
104
  assigneeIds: normalizeStringArray(filters.assigneeIds),
102
105
  statusCategories: normalizeStringArray(filters.statusCategories),
103
106
  groupIds: normalizeStringArray(filters.groupIds),
107
+ labelNames: normalizeStringArray(filters.labelNames),
104
108
  sortBy: filters.sortBy || "activity",
105
109
  sortDir: filters.sortDir || "desc",
106
110
  hasActivity: !!filters.hasActivity,
@@ -11199,8 +11199,13 @@ function getDb2() {
11199
11199
  const hasOldTable = db2.prepare(
11200
11200
  "SELECT name FROM sqlite_master WHERE type='table' AND name='linear_runs'"
11201
11201
  ).get();
11202
- if (hasOldTable) {
11202
+ const hasNewTable = db2.prepare(
11203
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='tracker_runs'"
11204
+ ).get();
11205
+ if (hasOldTable && !hasNewTable) {
11203
11206
  db2.exec("ALTER TABLE linear_runs RENAME TO tracker_runs");
11207
+ } else if (hasOldTable && hasNewTable) {
11208
+ db2.exec("DROP TABLE linear_runs");
11204
11209
  }
11205
11210
  db2.exec(`
11206
11211
  CREATE TABLE IF NOT EXISTS tracker_runs (
@@ -24121,7 +24126,6 @@ function parseNaturalSchedule(input) {
24121
24126
  var PATTERNS;
24122
24127
  var init_nl_schedule = __esm({
24123
24128
  "apps/local/src/graph/nl-schedule.ts"() {
24124
- "use strict";
24125
24129
  PATTERNS = [
24126
24130
  // "every N seconds" → intervalMs only (sub-minute)
24127
24131
  {