@mndrk/agx 2.4.1 → 2.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
  2. package/cloud-runtime/standalone/apps/local/.next/app-path-routes-manifest.json +5 -0
  3. package/cloud-runtime/standalone/apps/local/.next/build-manifest.json +2 -2
  4. package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
  5. package/cloud-runtime/standalone/apps/local/.next/routes-manifest.json +41 -0
  6. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +2 -2
  7. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.rsc +1 -1
  8. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.html +2 -2
  15. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.rsc +2 -2
  16. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  17. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  18. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  19. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  20. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  21. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  22. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page.js.nft.json +1 -1
  23. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  24. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page.js.nft.json +1 -1
  25. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  26. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.html +2 -2
  27. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.rsc +3 -3
  28. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_full.segment.rsc +3 -3
  29. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  30. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  31. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  32. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +2 -2
  33. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents.segment.rsc +1 -1
  34. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agent-specs/route.js.nft.json +1 -1
  35. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/[id]/profile/route.js.nft.json +1 -1
  36. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/export/route.js.nft.json +1 -1
  37. package/cloud-runtime/standalone/apps/local/.next/server/app/api/chat/route.js.nft.json +1 -1
  38. package/cloud-runtime/standalone/apps/local/.next/server/app/api/file-search/route.js.nft.json +1 -1
  39. package/cloud-runtime/standalone/apps/local/.next/server/app/api/participants/route.js.nft.json +1 -1
  40. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/scheduled-tasks/route.js.nft.json +1 -1
  41. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route.js.nft.json +1 -1
  42. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/search/route.js.nft.json +1 -1
  43. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/teams/route.js.nft.json +1 -1
  44. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/poll/route.js.nft.json +1 -1
  45. package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/check/[id]/route.js.nft.json +1 -1
  46. package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/route.js.nft.json +1 -1
  47. package/cloud-runtime/standalone/apps/local/.next/server/app/api/queue/route.js.nft.json +1 -1
  48. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/debug/route.js.nft.json +1 -1
  49. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
  50. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/assign/route.js.nft.json +1 -1
  51. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/available/route.js.nft.json +1 -1
  52. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/detail/route.js.nft.json +1 -1
  53. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/history/route.js.nft.json +1 -1
  54. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/learn/route.js.nft.json +1 -1
  55. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/route.js.nft.json +1 -1
  56. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/unlearn/route.js.nft.json +1 -1
  57. package/cloud-runtime/standalone/apps/local/.next/server/app/api/status/route.js.nft.json +1 -1
  58. package/cloud-runtime/standalone/apps/local/.next/server/app/api/summarize/route.js.nft.json +1 -1
  59. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
  60. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
  61. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
  62. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  63. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/route.js.nft.json +1 -1
  64. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
  65. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/route.js.nft.json +1 -1
  66. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/auth/route.js.nft.json +1 -1
  67. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/callback/route.js.nft.json +1 -1
  68. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/groups/route.js.nft.json +1 -1
  69. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/activity/route.js.nft.json +1 -1
  70. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/recap/route.js.nft.json +1 -1
  71. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/route.js.nft.json +1 -1
  72. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/route.js.nft.json +1 -1
  73. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/app-paths-manifest.json +3 -0
  74. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/build-manifest.json +11 -0
  75. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/server-reference-manifest.json +4 -0
  76. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js +7 -0
  77. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js.map +5 -0
  78. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js.nft.json +1 -0
  79. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route_client-reference-manifest.js +2 -0
  80. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/app-paths-manifest.json +3 -0
  81. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/build-manifest.json +11 -0
  82. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/server-reference-manifest.json +4 -0
  83. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js +7 -0
  84. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js.map +5 -0
  85. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js.nft.json +1 -0
  86. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route_client-reference-manifest.js +2 -0
  87. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/mcp-setup/route.js.nft.json +1 -1
  88. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/app-paths-manifest.json +3 -0
  89. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/build-manifest.json +11 -0
  90. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/server-reference-manifest.json +4 -0
  91. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js +7 -0
  92. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js.map +5 -0
  93. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js.nft.json +1 -0
  94. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route_client-reference-manifest.js +2 -0
  95. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/app-paths-manifest.json +3 -0
  96. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/build-manifest.json +11 -0
  97. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/server-reference-manifest.json +4 -0
  98. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js +7 -0
  99. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js.map +5 -0
  100. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js.nft.json +1 -0
  101. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route_client-reference-manifest.js +2 -0
  102. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/options/route.js.nft.json +1 -1
  103. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/[id]/route.js.nft.json +1 -1
  104. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/route.js.nft.json +1 -1
  105. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/scripted/route.js.nft.json +1 -1
  106. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/app-paths-manifest.json +3 -0
  107. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/build-manifest.json +11 -0
  108. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/server-reference-manifest.json +4 -0
  109. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js +7 -0
  110. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js.map +5 -0
  111. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js.nft.json +1 -0
  112. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route_client-reference-manifest.js +2 -0
  113. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/status/route.js.nft.json +1 -1
  114. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token/route.js.nft.json +1 -1
  115. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token-receive/route.js.nft.json +1 -1
  116. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/worker/route.js.nft.json +1 -1
  117. package/cloud-runtime/standalone/apps/local/.next/server/app/api/update-check/route.js.nft.json +1 -1
  118. package/cloud-runtime/standalone/apps/local/.next/server/app/index.html +2 -2
  119. package/cloud-runtime/standalone/apps/local/.next/server/app/index.rsc +2 -2
  120. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  121. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +2 -2
  122. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_head.segment.rsc +1 -1
  123. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_index.segment.rsc +2 -2
  124. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  125. package/cloud-runtime/standalone/apps/local/.next/server/app/page_client-reference-manifest.js +1 -1
  126. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page/react-loadable-manifest.json +2 -2
  127. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page.js.nft.json +1 -1
  128. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
  129. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page.js.nft.json +1 -1
  130. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
  131. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js.nft.json +1 -1
  132. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +1 -1
  133. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
  134. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  135. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page.js.nft.json +1 -1
  136. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page_client-reference-manifest.js +1 -1
  137. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page.js.nft.json +1 -1
  138. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page_client-reference-manifest.js +1 -1
  139. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  140. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  141. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page.js.nft.json +1 -1
  142. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  143. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page.js.nft.json +1 -1
  144. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page_client-reference-manifest.js +1 -1
  145. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page.js.nft.json +1 -1
  146. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page_client-reference-manifest.js +1 -1
  147. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page.js.nft.json +1 -1
  148. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page_client-reference-manifest.js +1 -1
  149. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page.js.nft.json +1 -1
  150. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page_client-reference-manifest.js +1 -1
  151. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page.js.nft.json +1 -1
  152. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page_client-reference-manifest.js +1 -1
  153. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page.js.nft.json +1 -1
  154. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page_client-reference-manifest.js +1 -1
  155. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
  156. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
  157. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page/react-loadable-manifest.json +1 -1
  158. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page.js.nft.json +1 -1
  159. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page_client-reference-manifest.js +1 -1
  160. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page.js.nft.json +1 -1
  161. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page_client-reference-manifest.js +1 -1
  162. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page/react-loadable-manifest.json +1 -1
  163. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page.js.nft.json +1 -1
  164. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page_client-reference-manifest.js +1 -1
  165. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  166. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
  167. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +2 -2
  168. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  169. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  170. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  171. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  172. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
  173. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  174. package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  175. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
  176. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +2 -2
  177. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +2 -2
  178. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
  179. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
  180. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  181. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
  182. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
  183. package/cloud-runtime/standalone/apps/local/.next/server/app/status/page_client-reference-manifest.js +1 -1
  184. package/cloud-runtime/standalone/apps/local/.next/server/app/status.html +2 -2
  185. package/cloud-runtime/standalone/apps/local/.next/server/app/status.rsc +2 -2
  186. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +2 -2
  187. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_head.segment.rsc +1 -1
  188. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_index.segment.rsc +2 -2
  189. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  190. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
  191. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status.segment.rsc +1 -1
  192. package/cloud-runtime/standalone/apps/local/.next/server/app-paths-manifest.json +5 -0
  193. package/cloud-runtime/standalone/apps/local/.next/server/chunks/083c9_next-internal_server_app_api_trackers_[tracker]_metadata_route_actions_c83fcc1a.js +3 -0
  194. package/cloud-runtime/standalone/apps/local/.next/server/chunks/30bdd_server_app_api_trackers_[tracker]_labels_[id]_route_actions_2646388d.js +3 -0
  195. package/cloud-runtime/standalone/apps/local/.next/server/chunks/30bdd_server_app_api_trackers_[tracker]_metadata_bulk_route_actions_f43e6831.js +3 -0
  196. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0e04eca4._.js +40 -0
  197. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__10a90219._.js +3 -3
  198. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__1d970ad0._.js +40 -0
  199. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__3a038592._.js +3 -3
  200. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__3b27260f._.js +23 -8
  201. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__580ddcca._.js +40 -0
  202. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__5da8d281._.js +129 -0
  203. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__68b692c4._.js +9 -9
  204. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__76030d44._.js +40 -0
  205. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__7db7c421._.js +20 -5
  206. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__7fcbb0c2._.js +4 -4
  207. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__d8cc43c7._.js +22 -7
  208. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__f598d976._.js +1 -1
  209. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__f7a936d9._.js +21 -6
  210. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_80b34b78._.js +1 -1
  211. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_8f9f647d._.js +28 -13
  212. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_d256aa32._.js +28 -25
  213. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_orchestrator_chat-processor_ts_46384f36._.js +17 -17
  214. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_tracker_tracker-run-store_ts_5aa9592e._.js +22 -7
  215. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ebff2__next-internal_server_app_api_trackers_[tracker]_labels_route_actions_8ba41152.js +3 -0
  216. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ebff2__next-internal_server_app_api_trackers_[tracker]_stats_route_actions_7da4ccde.js +3 -0
  217. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__799f4d13._.js → [root-of-the-server]__2af44092._.js} +2 -2
  218. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__452cb0f0._.js +3 -0
  219. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__489568b4._.js +3 -0
  220. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__4ec098a0._.js +3 -0
  221. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__53bd50df._.js +3 -0
  222. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__7774a40c._.js +3 -0
  223. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__b8484b0e._.js +7 -0
  224. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__51edc9b6._.js → [root-of-the-server]__bd05ee09._.js} +2 -2
  225. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_8c4beba9._.js +7 -0
  226. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{apps_local_35d90b5d._.js → apps_local_bbb7b83b._.js} +2 -2
  227. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_TrackerBoard_tsx_98970bab._.js +6 -6
  228. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_chat-ui_f0554cb4._.js +1 -1
  229. package/cloud-runtime/standalone/apps/local/.next/server/functions-config-manifest.json +5 -0
  230. package/cloud-runtime/standalone/apps/local/.next/server/middleware-manifest.json +5 -5
  231. package/cloud-runtime/standalone/apps/local/.next/server/pages/404.html +2 -2
  232. package/cloud-runtime/standalone/apps/local/.next/server/pages/500.html +2 -2
  233. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
  234. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
  235. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0243e7d015db440d.js +5 -0
  236. package/cloud-runtime/standalone/apps/local/.next/static/chunks/42a62b80b32a97f7.js +9 -0
  237. package/cloud-runtime/standalone/apps/local/.next/static/chunks/5d047fc7267a8f53.js +16 -0
  238. package/cloud-runtime/standalone/apps/local/.next/static/chunks/716e1716d526ded9.js +46 -0
  239. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{77cea126364aab3c.js → 7353a3a1fcd5825c.js} +1 -1
  240. package/cloud-runtime/standalone/apps/local/.next/static/chunks/9acdd370e9daca0d.js +16 -0
  241. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{6c777fe66e042eec.js → 9df45611d6c84e02.js} +1 -1
  242. package/cloud-runtime/standalone/apps/local/.next/static/chunks/a084c6475513e6fe.js +16 -0
  243. package/cloud-runtime/standalone/apps/local/.next/static/chunks/aa6db7c91c1ccd5f.js +16 -0
  244. package/cloud-runtime/standalone/apps/local/.next/static/chunks/cecf3e8c47c785f5.js +5 -0
  245. package/cloud-runtime/standalone/apps/local/.next/static/chunks/d5607ac80145f3b7.js +1 -0
  246. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{d5b14e14665024a9.js → d5c307b52fd87861.js} +1 -1
  247. package/cloud-runtime/standalone/apps/local/.next/static/chunks/f4acf76cb6c82c73.js +16 -0
  248. package/cloud-runtime/standalone/apps/local/.next/static/chunks/f6d31036588ddfe4.css +1 -0
  249. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/labels/[id]/route.ts +23 -0
  250. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/labels/route.ts +41 -0
  251. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/metadata/bulk/route.ts +68 -0
  252. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/metadata/route.ts +31 -0
  253. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/options/route.ts +1 -0
  254. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/stats/route.ts +20 -0
  255. package/cloud-runtime/standalone/apps/local/components/TrackerBoard.tsx +609 -85
  256. package/cloud-runtime/standalone/apps/local/components/tracker/FibonacciPicker.tsx +41 -0
  257. package/cloud-runtime/standalone/apps/local/components/tracker/FolderRow.tsx +1 -1
  258. package/cloud-runtime/standalone/apps/local/components/tracker/LabelPicker.tsx +118 -0
  259. package/cloud-runtime/standalone/apps/local/components/tracker/LabelSettings.tsx +104 -0
  260. package/cloud-runtime/standalone/apps/local/components/tracker/PromptPopover.tsx +64 -0
  261. package/cloud-runtime/standalone/apps/local/components/tracker/SelectionBar.tsx +276 -23
  262. package/cloud-runtime/standalone/apps/local/components/tracker/StatusGroupRow.tsx +50 -0
  263. package/cloud-runtime/standalone/apps/local/components/tracker/TicketPanel.tsx +14 -2
  264. package/cloud-runtime/standalone/apps/local/components/tracker/TicketRow.tsx +147 -7
  265. package/cloud-runtime/standalone/apps/local/components/tracker/TrackerSettingsModal.tsx +14 -2
  266. package/cloud-runtime/standalone/apps/local/components/ui/ResizeHandle.tsx +15 -22
  267. package/cloud-runtime/standalone/apps/local/hooks/useTrackerIssueStats.ts +52 -0
  268. package/cloud-runtime/standalone/apps/local/hooks/useTrackerItemMetadata.ts +67 -0
  269. package/cloud-runtime/standalone/apps/local/hooks/useTrackerItemsMetadata.ts +51 -0
  270. package/cloud-runtime/standalone/apps/local/hooks/useTrackerLabels.ts +74 -0
  271. package/cloud-runtime/standalone/apps/local/hooks/useTrackerRuns.ts +5 -0
  272. package/cloud-runtime/standalone/apps/local/lib/agent-process-registry.ts +6 -1
  273. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/jira/adapter.tsx +1 -0
  274. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/jira/issues.ts +1 -0
  275. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/adapter.tsx +1 -0
  276. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/client.ts +5 -0
  277. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/issues.ts +1 -0
  278. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-adapter.ts +2 -0
  279. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-item-metadata-store.ts +262 -0
  280. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-item-store.ts +10 -3
  281. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-run-store.ts +42 -0
  282. package/cloud-runtime/standalone/apps/local/state/trackerBoardFilters.ts +4 -0
  283. package/cloud-runtime/standalone/apps/local/worker/index.js +5 -2
  284. package/package.json +1 -1
  285. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__30bf097e._.js +0 -3
  286. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__46ae9d33._.js +0 -3
  287. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__50fd8680._.js +0 -3
  288. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__8059a285._.js +0 -3
  289. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__886953ec._.js +0 -7
  290. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__97160565._.js +0 -3
  291. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0876dfd6ce07abaf.js +0 -9
  292. package/cloud-runtime/standalone/apps/local/.next/static/chunks/1ec83777a9abd420.js +0 -16
  293. package/cloud-runtime/standalone/apps/local/.next/static/chunks/286758b0fd546c68.js +0 -16
  294. package/cloud-runtime/standalone/apps/local/.next/static/chunks/a72ed5cb3feb0d51.js +0 -5
  295. package/cloud-runtime/standalone/apps/local/.next/static/chunks/b02c180ad1d968eb.js +0 -16
  296. package/cloud-runtime/standalone/apps/local/.next/static/chunks/b048a4812b51f97a.js +0 -1
  297. package/cloud-runtime/standalone/apps/local/.next/static/chunks/c63d97c917d96f47.js +0 -46
  298. package/cloud-runtime/standalone/apps/local/.next/static/chunks/d3bf70e2fbdc0ae5.js +0 -5
  299. package/cloud-runtime/standalone/apps/local/.next/static/chunks/dd5a56eea2d4c067.js +0 -16
  300. package/cloud-runtime/standalone/apps/local/.next/static/chunks/dd7d7c382389b8b9.js +0 -16
  301. package/cloud-runtime/standalone/apps/local/.next/static/chunks/ec92e3bd6c2db6e6.css +0 -1
  302. package/cloud-runtime/standalone/apps/local/.next/static/chunks/ffcc32453866d0c2.js +0 -1
  303. /package/cloud-runtime/standalone/apps/local/.next/static/{ycVU7ABTMiX10ainku7bE → 4MnUE2NHztybGBWFbcBo5}/_buildManifest.js +0 -0
  304. /package/cloud-runtime/standalone/apps/local/.next/static/{ycVU7ABTMiX10ainku7bE → 4MnUE2NHztybGBWFbcBo5}/_clientMiddlewareManifest.json +0 -0
  305. /package/cloud-runtime/standalone/apps/local/.next/static/{ycVU7ABTMiX10ainku7bE → 4MnUE2NHztybGBWFbcBo5}/_ssgManifest.js +0 -0
@@ -35,6 +35,7 @@ export function useTrackerRuns(
35
35
  ) {
36
36
  const [runs, setRuns] = useState<TrackerRunRecord[]>([]);
37
37
  const [loading, setLoading] = useState(false);
38
+ const [loadedForIssueId, setLoadedForIssueId] = useState<string | null>(null);
38
39
  const issueIdRef = useRef(issueId ?? null);
39
40
  issueIdRef.current = issueId ?? null;
40
41
 
@@ -44,6 +45,7 @@ export function useTrackerRuns(
44
45
  const activeIssueId = issueIdRef.current?.trim();
45
46
  if (!activeIssueId) {
46
47
  setRuns([]);
48
+ setLoadedForIssueId(null);
47
49
  return [];
48
50
  }
49
51
 
@@ -58,6 +60,7 @@ export function useTrackerRuns(
58
60
  const data = await response.json();
59
61
  const nextRuns = Array.isArray(data.runs) ? (data.runs as TrackerRunRecord[]) : [];
60
62
  setRuns(nextRuns);
63
+ setLoadedForIssueId(activeIssueId);
61
64
  return nextRuns;
62
65
  } finally {
63
66
  setLoading(false);
@@ -66,6 +69,7 @@ export function useTrackerRuns(
66
69
 
67
70
  useEffect(() => {
68
71
  setRuns([]);
72
+ setLoadedForIssueId(null);
69
73
  void refresh();
70
74
  }, [refresh, issueId]);
71
75
 
@@ -115,6 +119,7 @@ export function useTrackerRuns(
115
119
  return {
116
120
  runs,
117
121
  loading,
122
+ loadedForIssueId,
118
123
  refresh,
119
124
  createRun,
120
125
  updateRun,
@@ -127,6 +127,11 @@ function getDb(): DatabaseSync {
127
127
  updated_at INTEGER NOT NULL
128
128
  )
129
129
  `);
130
+ // Ensure tracker_type exists on renamed tables that predate the column
131
+ const cols = db.prepare("PRAGMA table_info(tracker_runs)").all() as Array<{ name: string }>;
132
+ if (!cols.some((c) => c.name === "tracker_type")) {
133
+ db.exec("ALTER TABLE tracker_runs ADD COLUMN tracker_type TEXT NOT NULL DEFAULT 'linear'");
134
+ }
130
135
  return db;
131
136
  }
132
137
 
@@ -261,7 +266,7 @@ export function getAllEnriched(): EnrichedProcessEntry[] {
261
266
  tr.tracker_type AS tracker_type
262
267
  FROM agent_processes ap
263
268
  LEFT JOIN messages m ON m.id = ap.thread_id AND m.thread_id = ap.workspace_id
264
- LEFT JOIN tracker_runs tr ON tr.thread_id = ap.workspace_id
269
+ LEFT JOIN tracker_runs tr ON tr.chat_run_id = ap.id
265
270
  `).all() as unknown as (Row & { thread_title: string | null; tracker_item_id: string | null; tracker_run_id: string | null; tracker_type: string | null })[];
266
271
  return rows.map((r) => ({
267
272
  ...toEntry(r),
@@ -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
  })
@@ -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;
@@ -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,
@@ -2633,7 +2633,6 @@ function createAdminDbClient() {
2633
2633
  }
2634
2634
  var init_db_adapter = __esm({
2635
2635
  "apps/local/lib/db-adapter.ts"() {
2636
- "use strict";
2637
2636
  init_auth_mode();
2638
2637
  }
2639
2638
  });
@@ -11225,6 +11224,10 @@ function getDb2() {
11225
11224
  updated_at INTEGER NOT NULL
11226
11225
  )
11227
11226
  `);
11227
+ const cols = db2.prepare("PRAGMA table_info(tracker_runs)").all();
11228
+ if (!cols.some((c2) => c2.name === "tracker_type")) {
11229
+ db2.exec("ALTER TABLE tracker_runs ADD COLUMN tracker_type TEXT NOT NULL DEFAULT 'linear'");
11230
+ }
11228
11231
  return db2;
11229
11232
  }
11230
11233
  function withDb(fn) {
@@ -12604,6 +12607,7 @@ async function saveThreadRepoSelections(rootMessageId, repoIds) {
12604
12607
  var import_fs12, import_path12, import_os11, DatabaseSyncCtor5, HISTORY_DIR2, DB_PATH3, LEGACY_THREAD_ID, REACTION_TYPES, ACTIVE_AGENT_PROCESS_STALE_MS, ACTIVE_CHAT_RUN_STALE_MS, ALLOWED_TRANSITIONS, ReactionStoreError, withDatabase;
12605
12608
  var init_history_store = __esm({
12606
12609
  "apps/local/lib/history-store.ts"() {
12610
+ "use strict";
12607
12611
  init_sqlite_compat();
12608
12612
  import_fs12 = require("fs");
12609
12613
  import_path12 = __toESM(require("path"));
@@ -12629,7 +12633,6 @@ var init_history_store = __esm({
12629
12633
  blocked: /* @__PURE__ */ new Set(["ack", "blocked", "working"])
12630
12634
  };
12631
12635
  ReactionStoreError = class extends Error {
12632
- status;
12633
12636
  constructor(message, status) {
12634
12637
  super(message);
12635
12638
  this.name = "ReactionStoreError";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mndrk/agx",
3
- "version": "2.4.1",
3
+ "version": "2.4.3",
4
4
  "description": "Autonomous AI Agent Orchestrator for Claude, Gemini, and Ollama",
5
5
  "engines": {
6
6
  "node": ">=22.16.0"
@@ -1,3 +0,0 @@
1
- module.exports=[750227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},340492,a=>{"use strict";let b=(0,a.i(831709).default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);a.s(["Download",()=>b],340492)},316099,a=>{"use strict";let b=(0,a.i(831709).default)("hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);a.s(["Hash",()=>b],316099)},693896,a=>{"use strict";let b=(0,a.i(831709).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",()=>b],693896)},756490,a=>{"use strict";let b=(0,a.i(831709).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);a.s(["ChevronRight",()=>b],756490)},820859,a=>{"use strict";let b=(0,a.i(831709).default)("clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]);a.s(["Clock",()=>b],820859)},864061,a=>{"use strict";let b=(0,a.i(831709).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);a.s(["RefreshCw",()=>b],864061)},238234,412690,754812,a=>{"use strict";var b=a.i(831709);let c=(0,b.default)("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);a.s(["ArrowDown",()=>c],238234);let d=(0,b.default)("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);a.s(["ArrowUp",()=>d],412690);let e=(0,b.default)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);a.s(["ChevronLeft",()=>e],754812)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__30bf097e._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[522734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},750227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},924868,(a,b,c)=>{b.exports=a.x("fs/promises",()=>require("fs/promises"))},693896,a=>{"use strict";let b=(0,a.i(831709).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",()=>b],693896)},549429,a=>{"use strict";let b=(0,a.i(831709).default)("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);a.s(["ArrowRight",()=>b],549429)},999076,a=>{"use strict";let b=(0,a.i(831709).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);a.s(["XCircle",()=>b],999076)},667597,a=>{"use strict";let b=(0,a.i(831709).default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",()=>b],667597)},756490,a=>{"use strict";let b=(0,a.i(831709).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);a.s(["ChevronRight",()=>b],756490)},820859,a=>{"use strict";let b=(0,a.i(831709).default)("clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]);a.s(["Clock",()=>b],820859)},864061,a=>{"use strict";let b=(0,a.i(831709).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);a.s(["RefreshCw",()=>b],864061)},837929,a=>{"use strict";let b="agx:lastRun",c="agx:lastSession";function d(a,b){}function e(a){return({})[a]??null}function f(a,c){let e={};e[a]=c,d(b,e)}function g(a){return({})[a]??null}function h(a,b){let e={};e[a]=b,d(c,e)}a.s(["loadLastRunForIssue",()=>e,"loadLastSessionForEntity",()=>g,"persistLastRunForIssue",()=>f,"persistLastSessionForEntity",()=>h])},785630,a=>{"use strict";let b=(0,a.i(831709).default)("folder-plus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["FolderPlus",()=>b],785630)},379065,a=>{"use strict";let b=(0,a.i(831709).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);a.s(["ExternalLink",()=>b],379065)},354658,a=>{"use strict";let b=(0,a.i(831709).default)("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);a.s(["Save",()=>b],354658)},238234,412690,754812,a=>{"use strict";var b=a.i(831709);let c=(0,b.default)("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);a.s(["ArrowDown",()=>c],238234);let d=(0,b.default)("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);a.s(["ArrowUp",()=>d],412690);let e=(0,b.default)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);a.s(["ChevronLeft",()=>e],754812)},44668,a=>{"use strict";let b=(0,a.i(831709).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["CheckCircle2",()=>b],44668)},947218,a=>{"use strict";var b=a.i(786220);let c=new Map;function d(a){let b=c.get(a);return b?Date.now()-b.ts>3e5?(c.delete(a),null):b:null}function e(a){c.delete(a)}function f(a,f){let[g,h]=(0,b.useState)(!1),[i,j]=(0,b.useState)(!0),[k,l]=(0,b.useState)(null),[m,n]=(0,b.useState)({claude:!1,codex:!1,gemini:!1}),[o,p]=(0,b.useState)({}),q=(0,b.useRef)(null),r=`/api/trackers/${encodeURIComponent(a)}`,s=`${a}:${f}`,t=(0,b.useCallback)(async()=>{try{let a=await fetch(`${r}/mcp-setup`),b=await a.json();p(b.configured??{})}catch{}},[r]),u=(0,b.useCallback)(async()=>{if(!f)return h(!1),!1;let a=d(s);if(a)return h(a.connected),l(a.user),n(a.clis),p(a.mcpConfigured),j(!1),a.connected;try{var b;let a=`?projectId=${encodeURIComponent(f)}`,[d,e]=await Promise.all([fetch(`${r}/status${a}`),fetch(`${r}/mcp-setup`)]),g=await d.json(),i=await e.json(),j=g.clis??{claude:!1,codex:!1,gemini:!1},k=i.configured??{},m=g.user??null;return h(g.connected),l(m),n(j),p(k),b={connected:g.connected,user:m,clis:j,mcpConfigured:k},c.set(s,{...b,ts:Date.now()}),g.connected}catch{return h(!1),!1}finally{j(!1)}},[f,r,s]);(0,b.useEffect)(()=>{let a=d(s);a?(h(a.connected),l(a.user),n(a.clis),p(a.mcpConfigured),j(!1)):(j(!0),h(!1),l(null))},[a,f,s]),(0,b.useEffect)(()=>(u(),()=>{q.current&&clearInterval(q.current)}),[u]);let v=(0,b.useCallback)(()=>{f&&(e(s),window.open(`${r}/auth?projectId=${encodeURIComponent(f)}`,"_blank","noopener"),q.current&&clearInterval(q.current),q.current=setInterval(async()=>{e(s),await u()&&q.current&&(clearInterval(q.current),q.current=null)},2e3))},[f,r,s,u]),w=(0,b.useCallback)(async a=>{if(!f)return{ok:!1,error:"Missing projectId"};try{let b=await fetch(`${r}/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:f,accessToken:a})});if(!b.ok){let a=await b.json().catch(()=>({}));return{ok:!1,error:a.error||"Failed to save token"}}return e(s),await u(),{ok:!0}}catch{return{ok:!1,error:"Failed to connect"}}},[f,r,s,u]);return{connected:g,loading:i,user:k,clis:m,mcpConfigured:o,connect:v,connectWithKey:w,disconnect:(0,b.useCallback)(async()=>{f&&(e(s),await fetch(`${r}/status?projectId=${encodeURIComponent(f)}`,{method:"DELETE"}),h(!1),l(null))},[f,r,s]),configureMcp:(0,b.useCallback)(async a=>{try{let b=await fetch(`${r}/mcp-setup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cli:a})});if(!b.ok){let a=await b.json().catch(()=>({}));return{ok:!1,error:a.error||"Failed to configure MCP"}}return await t(),{ok:!0}}catch{return{ok:!1,error:"Failed to configure MCP"}}},[r,t]),refresh:u}}a.s(["useTrackerConnection",()=>f])},663504,235992,a=>{"use strict";var b=a.i(831709);let c=(0,b.default)("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);a.s(["Key",()=>c],663504);let d=(0,b.default)("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);a.s(["Globe",()=>d],235992)},500650,a=>{"use strict";let b=(0,a.i(831709).default)("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]]);a.s(["LogOut",()=>b],500650)},778784,a=>{"use strict";var b=a.i(308316),c=a.i(786220),d=a.i(44668),e=a.i(663504),f=a.i(235992),g=a.i(349692),h=a.i(693896),i=a.i(356239),j=a.i(500650),k=a.i(392045);let l={claude:{name:"Claude Code",configPath:"~/.claude/settings.json"},codex:{name:"Codex CLI",configPath:"~/.codex/config.toml"},gemini:{name:"Gemini CLI",configPath:"~/.gemini/settings.json"}};function m({trackerType:a,projectId:m,connected:n,onConnect:o,onConnectWithKey:p,onDisconnect:q,loading:r=!1,clis:s,mcpConfigured:t,onConfigureMcp:u}){let[v,w]=c.default.useState(""),[x,y]=c.default.useState(null),[z,A]=c.default.useState(!1),[B,C]=c.default.useState(!1),[D,E]=c.default.useState(null),[F,G]=c.default.useState({}),H=async a=>{if(!u)return;E(a),G(b=>({...b,[a]:""}));let b=await u(a);b.ok||G(c=>({...c,[a]:b.error??"Failed to install MCP"})),E(null)},I=s?["claude","codex","gemini"].filter(a=>s[a]):["claude"];if(r)return(0,b.jsx)("div",{className:"flex items-center justify-center p-12",children:(0,b.jsx)(g.Loader2,{className:"animate-spin h-8 w-8 text-muted-foreground"})});if(n)return(0,b.jsxs)("div",{className:"p-8 flex flex-col items-center gap-6",children:[(0,b.jsxs)("div",{className:"w-full max-w-md p-8 border border-green-500/20 bg-green-500/5 rounded-2xl flex flex-col items-center gap-4 text-center",children:[(0,b.jsx)("div",{className:"h-16 w-16 rounded-full bg-green-500/10 flex items-center justify-center text-green-600 shadow-inner",children:(0,b.jsx)(d.CheckCircle2,{className:"h-8 w-8"})}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("h3",{className:"text-xl font-bold text-foreground capitalize",children:[a," Connected"]}),(0,b.jsxs)("p",{className:"text-sm text-muted-foreground leading-relaxed",children:["Your ",a," workspace is successfully connected. The agent can now sync issues and manage your backlog."]})]}),(0,b.jsxs)("div",{className:"mt-2 px-4 py-1.5 rounded-full bg-background border text-xs font-medium text-muted-foreground flex items-center gap-2",children:[(0,b.jsx)("div",{className:"h-1.5 w-1.5 rounded-full bg-green-500 animate-pulse"}),"Active Connection"]}),q&&(0,b.jsxs)("button",{onClick:q,className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-destructive transition-colors mt-1",children:[(0,b.jsx)(j.LogOut,{className:"h-3.5 w-3.5"}),"Disconnect"]})]}),I.length>0&&(0,b.jsx)("div",{className:"w-full max-w-md",children:(0,b.jsxs)("div",{className:"border rounded-xl p-5 flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(i.Terminal,{className:"h-4 w-4 text-muted-foreground"}),(0,b.jsx)("span",{className:"text-sm font-medium",children:"MCP Server"})]}),(0,b.jsxs)("p",{className:"text-xs text-muted-foreground leading-relaxed -mt-2",children:["Install the ",a," MCP server so agents can access ",a," directly."]}),I.map(a=>{let c=l[a],e=t?.[a]??!1,f=D===a,i=F[a];return(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsx)("span",{className:"text-xs font-medium text-foreground",children:c.name}),e?(0,b.jsxs)("span",{className:"text-xs font-medium text-green-600 flex items-center gap-1",children:[(0,b.jsx)(d.CheckCircle2,{className:"h-3.5 w-3.5"}),"Installed"]}):(0,b.jsx)("button",{onClick:()=>H(a),disabled:f||!u,className:"flex items-center gap-1.5 px-3 py-1 bg-secondary text-secondary-foreground rounded-md text-xs font-semibold hover:bg-secondary/90 disabled:opacity-50 transition-all active:scale-[0.98]",children:f?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.Loader2,{className:"h-3 w-3 animate-spin"}),"Installing…"]}):(0,b.jsx)(b.Fragment,{children:"Install"})})]}),e&&(0,b.jsxs)("p",{className:"text-[10px] text-muted-foreground",children:["Configured in ",(0,b.jsx)("code",{className:"font-mono",children:c.configPath})]}),i&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-destructive bg-destructive/10 p-2 rounded-md",children:[(0,b.jsx)(h.AlertCircle,{className:"h-3.5 w-3.5 shrink-0"}),i]})]},a)})]})})]});let J=async()=>{if(v.trim()){C(!0),y(null);try{let a=await p(v.trim());a.ok?(w(""),A(!1)):y(a.error??"Failed to connect")}catch(a){y("An unexpected error occurred")}finally{C(!1)}}};return(0,b.jsxs)("div",{className:"flex flex-col items-center gap-6 p-8",children:[(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(k.TrackerIcon,{trackerType:a,className:"h-16 w-16"}),(0,b.jsx)("div",{className:"absolute -bottom-1 -right-1 h-6 w-6 rounded-full bg-background border flex items-center justify-center shadow-sm",children:(0,b.jsx)(f.Globe,{className:"h-3 w-3 text-muted-foreground"})})]}),(0,b.jsxs)("div",{className:"text-center space-y-2",children:[(0,b.jsxs)("h3",{className:"text-lg font-semibold capitalize",children:["Connect to ",a]}),(0,b.jsxs)("p",{className:"text-sm text-muted-foreground text-center max-w-sm leading-relaxed",children:["Link your ",a," account to import issues, track progress, and automate your workflow."]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-3 w-full max-w-xs pt-2",children:[(0,b.jsxs)("button",{onClick:o,className:"flex items-center justify-center gap-2 w-full px-4 py-2.5 bg-primary text-primary-foreground rounded-lg text-sm font-semibold hover:bg-primary/90 transition-all active:scale-[0.98] shadow-sm",children:[(0,b.jsx)(f.Globe,{className:"h-4 w-4"}),"Connect with OAuth"]}),(0,b.jsxs)("button",{onClick:()=>{A(!z),y(null)},className:"flex items-center justify-center gap-2 w-full px-4 py-2 text-sm text-muted-foreground hover:text-foreground transition-colors font-medium",children:[(0,b.jsx)(e.Key,{className:"h-3.5 w-3.5"}),z?"Use OAuth instead":"Connect with API key"]}),(0,b.jsx)("div",{className:`grid transition-all duration-300 ease-in-out ${z?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0 pointer-events-none"}`,children:(0,b.jsx)("div",{className:"overflow-hidden",children:(0,b.jsxs)("div",{className:"flex flex-col gap-3 pt-2",children:[(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)("input",{type:"password",value:v,onChange:a=>{w(a.target.value),x&&y(null)},placeholder:"Paste your API key here",className:`w-full px-3 py-2 border rounded-lg text-sm bg-background transition-colors focus:outline-none focus:ring-2 focus:ring-primary/20 ${x?"border-destructive":"focus:border-primary"}`,onKeyDown:a=>"Enter"===a.key&&J()}),(0,b.jsx)(e.Key,{className:"absolute right-3 top-2.5 h-4 w-4 text-muted-foreground/50"})]}),x&&(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs text-destructive bg-destructive/10 p-2 rounded-md",children:[(0,b.jsx)(h.AlertCircle,{className:"h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("p",{children:x})]}),(0,b.jsx)("button",{onClick:J,disabled:B||!v.trim(),className:"flex items-center justify-center gap-2 w-full px-4 py-2 bg-secondary text-secondary-foreground rounded-lg text-sm font-semibold hover:bg-secondary/90 disabled:opacity-50 transition-all active:scale-[0.98]",children:B?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.Loader2,{className:"h-4 w-4 animate-spin"}),"Connecting..."]}):"Verify & Connect"}),(0,b.jsxs)("p",{className:"text-[10px] text-muted-foreground text-center px-2",children:["Your API key is stored securely and only used for ",a," integration."]})]})})})]})]})}a.s(["default",()=>m])},943202,a=>{"use strict";var b=a.i(308316),c=a.i(786220),d=a.i(516909),e=a.i(830284),f=a.i(859117);function g({params:a}){let{slug:g,tracker:h}=(0,c.use)(a),i=(0,d.useSearchParams)(),{projects:j}=(0,e.useProjects)(),k=j.find(a=>a.slug===g),l="true"===i.get("settings");return(0,b.jsx)(f.default,{trackerType:h,projectId:k?.id,projectSlug:k?.slug??g,initialShowSettings:l})}a.s(["default",()=>g])}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__46ae9d33._.js.map