@mndrk/agx 2.4.2 → 2.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
  2. package/cloud-runtime/standalone/apps/local/.next/app-path-routes-manifest.json +5 -0
  3. package/cloud-runtime/standalone/apps/local/.next/build-manifest.json +2 -2
  4. package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
  5. package/cloud-runtime/standalone/apps/local/.next/routes-manifest.json +41 -0
  6. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +2 -2
  7. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.rsc +1 -1
  8. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.html +2 -2
  15. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.rsc +2 -2
  16. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  17. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  18. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  19. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  20. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  21. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  22. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page.js.nft.json +1 -1
  23. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  24. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page.js.nft.json +1 -1
  25. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  26. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.html +2 -2
  27. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.rsc +3 -3
  28. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_full.segment.rsc +3 -3
  29. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  30. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  31. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  32. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +2 -2
  33. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents.segment.rsc +1 -1
  34. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agent-specs/route.js.nft.json +1 -1
  35. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/[id]/profile/route.js.nft.json +1 -1
  36. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/export/route.js.nft.json +1 -1
  37. package/cloud-runtime/standalone/apps/local/.next/server/app/api/chat/route.js.nft.json +1 -1
  38. package/cloud-runtime/standalone/apps/local/.next/server/app/api/file-search/route.js.nft.json +1 -1
  39. package/cloud-runtime/standalone/apps/local/.next/server/app/api/participants/route.js.nft.json +1 -1
  40. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/scheduled-tasks/route.js.nft.json +1 -1
  41. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route.js.nft.json +1 -1
  42. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/search/route.js.nft.json +1 -1
  43. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/teams/route.js.nft.json +1 -1
  44. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/poll/route.js.nft.json +1 -1
  45. package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/check/[id]/route.js.nft.json +1 -1
  46. package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/route.js.nft.json +1 -1
  47. package/cloud-runtime/standalone/apps/local/.next/server/app/api/queue/route.js.nft.json +1 -1
  48. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/debug/route.js.nft.json +1 -1
  49. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
  50. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/assign/route.js.nft.json +1 -1
  51. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/available/route.js.nft.json +1 -1
  52. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/detail/route.js.nft.json +1 -1
  53. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/history/route.js.nft.json +1 -1
  54. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/learn/route.js.nft.json +1 -1
  55. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/route.js.nft.json +1 -1
  56. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/unlearn/route.js.nft.json +1 -1
  57. package/cloud-runtime/standalone/apps/local/.next/server/app/api/status/route.js.nft.json +1 -1
  58. package/cloud-runtime/standalone/apps/local/.next/server/app/api/summarize/route.js.nft.json +1 -1
  59. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
  60. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
  61. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js +1 -1
  62. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
  63. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
  64. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  65. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/route.js.nft.json +1 -1
  66. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
  67. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/route.js.nft.json +1 -1
  68. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/auth/route.js +3 -3
  69. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/auth/route.js.nft.json +1 -1
  70. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/callback/route.js +3 -3
  71. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/callback/route.js.nft.json +1 -1
  72. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/groups/route.js +3 -3
  73. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/groups/route.js.nft.json +1 -1
  74. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/activity/route.js +3 -3
  75. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/activity/route.js.nft.json +1 -1
  76. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/recap/route.js +3 -3
  77. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/recap/route.js.nft.json +1 -1
  78. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/route.js +4 -4
  79. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/route.js.nft.json +1 -1
  80. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/route.js +3 -3
  81. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/route.js.nft.json +1 -1
  82. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/app-paths-manifest.json +3 -0
  83. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/build-manifest.json +11 -0
  84. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route/server-reference-manifest.json +4 -0
  85. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js +7 -0
  86. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js.map +5 -0
  87. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route.js.nft.json +1 -0
  88. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/[id]/route_client-reference-manifest.js +2 -0
  89. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/app-paths-manifest.json +3 -0
  90. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/build-manifest.json +11 -0
  91. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route/server-reference-manifest.json +4 -0
  92. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js +7 -0
  93. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js.map +5 -0
  94. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route.js.nft.json +1 -0
  95. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/labels/route_client-reference-manifest.js +2 -0
  96. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/mcp-setup/route.js +3 -3
  97. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/mcp-setup/route.js.nft.json +1 -1
  98. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/app-paths-manifest.json +3 -0
  99. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/build-manifest.json +11 -0
  100. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route/server-reference-manifest.json +4 -0
  101. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js +7 -0
  102. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js.map +5 -0
  103. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route.js.nft.json +1 -0
  104. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/bulk/route_client-reference-manifest.js +2 -0
  105. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/app-paths-manifest.json +3 -0
  106. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/build-manifest.json +11 -0
  107. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route/server-reference-manifest.json +4 -0
  108. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js +7 -0
  109. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js.map +5 -0
  110. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route.js.nft.json +1 -0
  111. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/metadata/route_client-reference-manifest.js +2 -0
  112. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/options/route.js +3 -3
  113. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/options/route.js.nft.json +1 -1
  114. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/[id]/route.js +1 -1
  115. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/[id]/route.js.nft.json +1 -1
  116. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/route.js +3 -3
  117. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/route.js.nft.json +1 -1
  118. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/scripted/route.js +1 -1
  119. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/scripted/route.js.nft.json +1 -1
  120. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/app-paths-manifest.json +3 -0
  121. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/build-manifest.json +11 -0
  122. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route/server-reference-manifest.json +4 -0
  123. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js +7 -0
  124. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js.map +5 -0
  125. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route.js.nft.json +1 -0
  126. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/stats/route_client-reference-manifest.js +2 -0
  127. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/status/route.js +4 -4
  128. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/status/route.js.nft.json +1 -1
  129. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token/route.js +3 -3
  130. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token/route.js.nft.json +1 -1
  131. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token-receive/route.js +3 -3
  132. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token-receive/route.js.nft.json +1 -1
  133. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/worker/route.js +6 -6
  134. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/worker/route.js.nft.json +1 -1
  135. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/connections/route.js +7 -2
  136. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/connections/route.js.nft.json +1 -1
  137. package/cloud-runtime/standalone/apps/local/.next/server/app/api/update-check/route.js.nft.json +1 -1
  138. package/cloud-runtime/standalone/apps/local/.next/server/app/index.html +2 -2
  139. package/cloud-runtime/standalone/apps/local/.next/server/app/index.rsc +2 -2
  140. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  141. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +2 -2
  142. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_head.segment.rsc +1 -1
  143. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_index.segment.rsc +2 -2
  144. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  145. package/cloud-runtime/standalone/apps/local/.next/server/app/page_client-reference-manifest.js +1 -1
  146. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page/react-loadable-manifest.json +2 -2
  147. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page.js.nft.json +1 -1
  148. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
  149. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page.js.nft.json +1 -1
  150. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
  151. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js.nft.json +1 -1
  152. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +1 -1
  153. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
  154. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  155. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page.js.nft.json +1 -1
  156. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page_client-reference-manifest.js +1 -1
  157. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page.js.nft.json +1 -1
  158. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page_client-reference-manifest.js +1 -1
  159. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  160. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  161. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page.js.nft.json +1 -1
  162. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  163. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page.js.nft.json +1 -1
  164. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page_client-reference-manifest.js +1 -1
  165. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page.js.nft.json +1 -1
  166. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page_client-reference-manifest.js +1 -1
  167. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page.js.nft.json +1 -1
  168. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page_client-reference-manifest.js +1 -1
  169. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page.js.nft.json +1 -1
  170. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page_client-reference-manifest.js +1 -1
  171. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page.js.nft.json +1 -1
  172. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page_client-reference-manifest.js +1 -1
  173. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page.js.nft.json +1 -1
  174. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page_client-reference-manifest.js +1 -1
  175. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
  176. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
  177. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page/react-loadable-manifest.json +1 -1
  178. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page.js.nft.json +1 -1
  179. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page_client-reference-manifest.js +1 -1
  180. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page.js.nft.json +1 -1
  181. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page_client-reference-manifest.js +1 -1
  182. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page/react-loadable-manifest.json +1 -1
  183. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page.js.nft.json +1 -1
  184. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page_client-reference-manifest.js +1 -1
  185. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  186. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
  187. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +2 -2
  188. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  189. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  190. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  191. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  192. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
  193. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  194. package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  195. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
  196. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +2 -2
  197. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +2 -2
  198. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
  199. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
  200. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  201. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
  202. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
  203. package/cloud-runtime/standalone/apps/local/.next/server/app/status/page_client-reference-manifest.js +1 -1
  204. package/cloud-runtime/standalone/apps/local/.next/server/app/status.html +2 -2
  205. package/cloud-runtime/standalone/apps/local/.next/server/app/status.rsc +2 -2
  206. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +2 -2
  207. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_head.segment.rsc +1 -1
  208. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_index.segment.rsc +2 -2
  209. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  210. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
  211. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status.segment.rsc +1 -1
  212. package/cloud-runtime/standalone/apps/local/.next/server/app-paths-manifest.json +5 -0
  213. package/cloud-runtime/standalone/apps/local/.next/server/chunks/083c9_next-internal_server_app_api_trackers_[tracker]_metadata_route_actions_c83fcc1a.js +3 -0
  214. package/cloud-runtime/standalone/apps/local/.next/server/chunks/30bdd_server_app_api_trackers_[tracker]_labels_[id]_route_actions_2646388d.js +3 -0
  215. package/cloud-runtime/standalone/apps/local/.next/server/chunks/30bdd_server_app_api_trackers_[tracker]_metadata_bulk_route_actions_f43e6831.js +3 -0
  216. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0e04eca4._.js +40 -0
  217. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0fbbaf2d._.js +1 -1
  218. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__10a90219._.js +3 -3
  219. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__1d970ad0._.js +40 -0
  220. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__2ab23e45._.js → [root-of-the-server]__2eb13697._.js} +2 -2
  221. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__3a038592._.js +3 -3
  222. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__3b27260f._.js +23 -8
  223. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__498d8b2d._.js +3 -0
  224. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__580ddcca._.js +40 -0
  225. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__5da8d281._.js +129 -0
  226. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__68b692c4._.js +9 -9
  227. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__76030d44._.js +40 -0
  228. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__7db7c421._.js +20 -5
  229. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__7fcbb0c2._.js +2 -2
  230. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__ba72d342._.js +5 -5
  231. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__d8cc43c7._.js +22 -7
  232. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__f598d976._.js +1 -1
  233. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__f7a936d9._.js +21 -6
  234. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_1a4cb196._.js +1 -1
  235. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_5e5f36c4._.js +1 -1
  236. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_8f9f647d._.js +28 -13
  237. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_9f0fd451._.js +3 -0
  238. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_d256aa32._.js +28 -25
  239. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_e1f4d9ad._.js +1 -1
  240. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_f8b3abae._.js +1 -1
  241. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_orchestrator_chat-processor_ts_46384f36._.js +12 -12
  242. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_tracker_tracker-run-store_ts_5aa9592e._.js +22 -7
  243. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ebff2__next-internal_server_app_api_trackers_[tracker]_labels_route_actions_8ba41152.js +3 -0
  244. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ebff2__next-internal_server_app_api_trackers_[tracker]_stats_route_actions_7da4ccde.js +3 -0
  245. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__799f4d13._.js → [root-of-the-server]__2af44092._.js} +2 -2
  246. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__452cb0f0._.js +3 -0
  247. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__489568b4._.js +3 -0
  248. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__4ec098a0._.js +3 -0
  249. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__53bd50df._.js +3 -0
  250. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__7774a40c._.js +3 -0
  251. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__b8484b0e._.js +7 -0
  252. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__51edc9b6._.js → [root-of-the-server]__bd05ee09._.js} +2 -2
  253. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_8c4beba9._.js +7 -0
  254. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_5eebb5cb._.js +1 -1
  255. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{apps_local_35d90b5d._.js → apps_local_bbb7b83b._.js} +2 -2
  256. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_TrackerBoard_tsx_98970bab._.js +6 -6
  257. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_chat-ui_f0554cb4._.js +1 -1
  258. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_projects_ProjectObjectivesWorkspace_tsx_751ab3d3._.js +7 -7
  259. package/cloud-runtime/standalone/apps/local/.next/server/functions-config-manifest.json +5 -0
  260. package/cloud-runtime/standalone/apps/local/.next/server/middleware-manifest.json +5 -5
  261. package/cloud-runtime/standalone/apps/local/.next/server/pages/404.html +2 -2
  262. package/cloud-runtime/standalone/apps/local/.next/server/pages/500.html +2 -2
  263. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
  264. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
  265. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0243e7d015db440d.js +5 -0
  266. package/cloud-runtime/standalone/apps/local/.next/static/chunks/42a62b80b32a97f7.js +9 -0
  267. package/cloud-runtime/standalone/apps/local/.next/static/chunks/5d047fc7267a8f53.js +16 -0
  268. package/cloud-runtime/standalone/apps/local/.next/static/chunks/7148feb61274d431.css +1 -0
  269. package/cloud-runtime/standalone/apps/local/.next/static/chunks/716e1716d526ded9.js +46 -0
  270. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{77cea126364aab3c.js → 7353a3a1fcd5825c.js} +1 -1
  271. package/cloud-runtime/standalone/apps/local/.next/static/chunks/8b91e7692a899f00.js +20 -0
  272. package/cloud-runtime/standalone/apps/local/.next/static/chunks/9acdd370e9daca0d.js +16 -0
  273. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{6c777fe66e042eec.js → 9df45611d6c84e02.js} +1 -1
  274. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{6c278ae4535b6d5c.js → 9e2208153f276f8c.js} +1 -1
  275. package/cloud-runtime/standalone/apps/local/.next/static/chunks/a084c6475513e6fe.js +16 -0
  276. package/cloud-runtime/standalone/apps/local/.next/static/chunks/aa6db7c91c1ccd5f.js +16 -0
  277. package/cloud-runtime/standalone/apps/local/.next/static/chunks/d5607ac80145f3b7.js +1 -0
  278. package/cloud-runtime/standalone/apps/local/.next/static/chunks/d590384ce3045a12.js +5 -0
  279. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{d5b14e14665024a9.js → d5c307b52fd87861.js} +1 -1
  280. package/cloud-runtime/standalone/apps/local/.next/static/chunks/f4acf76cb6c82c73.js +16 -0
  281. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/labels/[id]/route.ts +23 -0
  282. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/labels/route.ts +41 -0
  283. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/metadata/bulk/route.ts +68 -0
  284. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/metadata/route.ts +31 -0
  285. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/options/route.ts +1 -0
  286. package/cloud-runtime/standalone/apps/local/app/api/trackers/[tracker]/stats/route.ts +20 -0
  287. package/cloud-runtime/standalone/apps/local/app/api/trackers/connections/route.ts +46 -2
  288. package/cloud-runtime/standalone/apps/local/app/projects/[slug]/tracking/connect/page.tsx +41 -11
  289. package/cloud-runtime/standalone/apps/local/components/TrackerBoard.tsx +609 -85
  290. package/cloud-runtime/standalone/apps/local/components/projects/ProjectObjectivesWorkspace.tsx +204 -49
  291. package/cloud-runtime/standalone/apps/local/components/tracker/FibonacciPicker.tsx +41 -0
  292. package/cloud-runtime/standalone/apps/local/components/tracker/FolderRow.tsx +1 -1
  293. package/cloud-runtime/standalone/apps/local/components/tracker/LabelPicker.tsx +118 -0
  294. package/cloud-runtime/standalone/apps/local/components/tracker/LabelSettings.tsx +104 -0
  295. package/cloud-runtime/standalone/apps/local/components/tracker/PromptPopover.tsx +64 -0
  296. package/cloud-runtime/standalone/apps/local/components/tracker/SelectionBar.tsx +276 -23
  297. package/cloud-runtime/standalone/apps/local/components/tracker/StatusGroupRow.tsx +50 -0
  298. package/cloud-runtime/standalone/apps/local/components/tracker/TicketPanel.tsx +14 -2
  299. package/cloud-runtime/standalone/apps/local/components/tracker/TicketRow.tsx +147 -7
  300. package/cloud-runtime/standalone/apps/local/components/tracker/TrackerSettingsModal.tsx +14 -2
  301. package/cloud-runtime/standalone/apps/local/components/ui/ResizeHandle.tsx +15 -22
  302. package/cloud-runtime/standalone/apps/local/hooks/useTrackerConnections.ts +29 -1
  303. package/cloud-runtime/standalone/apps/local/hooks/useTrackerIssueStats.ts +52 -0
  304. package/cloud-runtime/standalone/apps/local/hooks/useTrackerItemMetadata.ts +67 -0
  305. package/cloud-runtime/standalone/apps/local/hooks/useTrackerItemsMetadata.ts +51 -0
  306. package/cloud-runtime/standalone/apps/local/hooks/useTrackerLabels.ts +74 -0
  307. package/cloud-runtime/standalone/apps/local/hooks/useTrackerRuns.ts +5 -0
  308. package/cloud-runtime/standalone/apps/local/lib/agent-process-registry.ts +8 -2
  309. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/jira/adapter.tsx +1 -0
  310. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/jira/issues.ts +1 -0
  311. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/adapter.tsx +1 -0
  312. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/client.ts +5 -0
  313. package/cloud-runtime/standalone/apps/local/lib/tracker/adapters/linear/issues.ts +1 -0
  314. package/cloud-runtime/standalone/apps/local/lib/tracker/connections.ts +46 -15
  315. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-adapter.ts +2 -0
  316. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-item-metadata-store.ts +262 -0
  317. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-item-store.ts +10 -3
  318. package/cloud-runtime/standalone/apps/local/lib/tracker/tracker-run-store.ts +42 -0
  319. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/objective-worker.ts +7 -0
  320. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/task-worker.ts +7 -0
  321. package/cloud-runtime/standalone/apps/local/state/trackerBoardFilters.ts +4 -0
  322. package/cloud-runtime/standalone/apps/local/worker/index.js +6 -2
  323. package/package.json +1 -1
  324. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__847236fb._.js +0 -3
  325. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_80b34b78._.js +0 -3
  326. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__30bf097e._.js +0 -3
  327. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__46ae9d33._.js +0 -3
  328. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__50fd8680._.js +0 -3
  329. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__8059a285._.js +0 -3
  330. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__886953ec._.js +0 -7
  331. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__97160565._.js +0 -3
  332. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0876dfd6ce07abaf.js +0 -9
  333. package/cloud-runtime/standalone/apps/local/.next/static/chunks/1ec83777a9abd420.js +0 -16
  334. package/cloud-runtime/standalone/apps/local/.next/static/chunks/286758b0fd546c68.js +0 -16
  335. package/cloud-runtime/standalone/apps/local/.next/static/chunks/a72ed5cb3feb0d51.js +0 -5
  336. package/cloud-runtime/standalone/apps/local/.next/static/chunks/b02c180ad1d968eb.js +0 -16
  337. package/cloud-runtime/standalone/apps/local/.next/static/chunks/b048a4812b51f97a.js +0 -1
  338. package/cloud-runtime/standalone/apps/local/.next/static/chunks/c63d97c917d96f47.js +0 -46
  339. package/cloud-runtime/standalone/apps/local/.next/static/chunks/d3bf70e2fbdc0ae5.js +0 -5
  340. package/cloud-runtime/standalone/apps/local/.next/static/chunks/dd5a56eea2d4c067.js +0 -16
  341. package/cloud-runtime/standalone/apps/local/.next/static/chunks/dd7d7c382389b8b9.js +0 -16
  342. package/cloud-runtime/standalone/apps/local/.next/static/chunks/e72724fd8225ec39.js +0 -20
  343. package/cloud-runtime/standalone/apps/local/.next/static/chunks/ec92e3bd6c2db6e6.css +0 -1
  344. package/cloud-runtime/standalone/apps/local/.next/static/chunks/ffcc32453866d0c2.js +0 -1
  345. /package/cloud-runtime/standalone/apps/local/.next/static/{QEldoF1LdgJqO0PgpmUmx → 3-6VaSnGGXdV-2eV44RDK}/_buildManifest.js +0 -0
  346. /package/cloud-runtime/standalone/apps/local/.next/static/{QEldoF1LdgJqO0PgpmUmx → 3-6VaSnGGXdV-2eV44RDK}/_clientMiddlewareManifest.json +0 -0
  347. /package/cloud-runtime/standalone/apps/local/.next/static/{QEldoF1LdgJqO0PgpmUmx → 3-6VaSnGGXdV-2eV44RDK}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- module.exports=[85e4,e=>{"use strict";var t=e.i(522734),r=e.i(446786),a=e.i(814747),i=e.i(769025);let{DatabaseSync:s}=process.getBuiltinModule("node:sqlite"),n=process.env.AGX_GROUP_CHAT_DIR?.trim()||a.default.join(r.default.homedir(),".agx","group-chat"),u=a.default.join(n,"history.sqlite");function o(e){return e?.trim()||null}function c(e){return"scripted"===e?"scripted":"chat"}function d(e){let t,r=e.chat_created_at??e.created_at,a=e.chat_completed_at??null,i=function(e,t){switch(e){case"queued":return"queued";case"running":case"awaiting_user":case"blocked":return"running";case"completed":return"success";case"failed":return"failed";case"cancelled":return"cancelled";default:return t}}(e.chat_status,e.status);return{id:e.id,projectId:e.project_id,projectSlug:e.project_slug,trackerType:e.tracker_type,issueId:e.issue_id,issueIdentifier:e.issue_identifier,issueTitle:e.issue_title,issueStatus:e.issue_status,issueAssignee:e.issue_assignee,threadId:e.thread_id,rootMessageId:e.root_message_id,chatRunId:e.chat_run_id,agentId:e.agent_id,agentName:e.agent_name,mode:c(e.mode),sessionTitle:"chat"===c(e.mode)&&(t=String(e.root_content??"").replace(/\[reaction\s+[^\]]*\]/gi,"").replace(/\[agx:[^\]]*\]/g,"").replace(/\[checkpoint\]/g,"").replace(/\[criteria:\s*[^\]]*\]/g,"").replace(/\[done\]/g,"").replace(/\[blocked[^\]]*\]/g,"").replace(/^\[SKIP\]$/gm,"").replace(/\s+/g," ").trim())?t.length>72?`${t.slice(0,69).trimEnd()}...`:t:null,status:i,durationMs:null!=a?Math.max(a-r,0):null,lastError:e.chat_last_error??e.error,recapFilePath:e.recap_file_path??null,startedAt:new Date(r).toISOString(),updatedAt:new Date((e.chat_updated_at??e.updated_at)||e.updated_at).toISOString(),completedAt:"number"==typeof a?new Date(a).toISOString():null}}async function l(e){await t.promises.mkdir(n,{recursive:!0});let r=new s(u);(0,i.pragmaSet)(r,"journal_mode = WAL");try{r.exec(`
1
+ module.exports=[85e4,e=>{"use strict";var t=e.i(522734),r=e.i(446786),a=e.i(814747),i=e.i(769025);let{DatabaseSync:s}=process.getBuiltinModule("node:sqlite"),n=process.env.AGX_GROUP_CHAT_DIR?.trim()||a.default.join(r.default.homedir(),".agx","group-chat"),u=a.default.join(n,"history.sqlite");function d(e){return e?.trim()||null}function o(e){return"scripted"===e?"scripted":"chat"}function c(e){let t,r=e.chat_created_at??e.created_at,a=e.chat_completed_at??null,i=function(e,t){switch(e){case"queued":return"queued";case"running":case"awaiting_user":case"blocked":return"running";case"completed":return"success";case"failed":return"failed";case"cancelled":return"cancelled";default:return t}}(e.chat_status,e.status);return{id:e.id,projectId:e.project_id,projectSlug:e.project_slug,trackerType:e.tracker_type,issueId:e.issue_id,issueIdentifier:e.issue_identifier,issueTitle:e.issue_title,issueStatus:e.issue_status,issueAssignee:e.issue_assignee,threadId:e.thread_id,rootMessageId:e.root_message_id,chatRunId:e.chat_run_id,agentId:e.agent_id,agentName:e.agent_name,mode:o(e.mode),sessionTitle:"chat"===o(e.mode)&&(t=String(e.root_content??"").replace(/\[reaction\s+[^\]]*\]/gi,"").replace(/\[agx:[^\]]*\]/g,"").replace(/\[checkpoint\]/g,"").replace(/\[criteria:\s*[^\]]*\]/g,"").replace(/\[done\]/g,"").replace(/\[blocked[^\]]*\]/g,"").replace(/^\[SKIP\]$/gm,"").replace(/\s+/g," ").trim())?t.length>72?`${t.slice(0,69).trimEnd()}...`:t:null,status:i,durationMs:null!=a?Math.max(a-r,0):null,lastError:e.chat_last_error??e.error,recapFilePath:e.recap_file_path??null,startedAt:new Date(r).toISOString(),updatedAt:new Date((e.chat_updated_at??e.updated_at)||e.updated_at).toISOString(),completedAt:"number"==typeof a?new Date(a).toISOString():null}}async function l(e){await t.promises.mkdir(n,{recursive:!0});let r=new s(u);(0,i.pragmaSet)(r,"journal_mode = WAL");try{r.exec(`
2
2
  CREATE TABLE IF NOT EXISTS chat_runs (
3
3
  id TEXT PRIMARY KEY,
4
4
  thread_id TEXT NOT NULL,
@@ -72,7 +72,7 @@ module.exports=[85e4,e=>{"use strict";var t=e.i(522734),r=e.i(446786),a=e.i(8147
72
72
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
73
73
  ON CONFLICT(id) DO UPDATE SET
74
74
  tracker_type = excluded.tracker_type
75
- `);for(let e of t)r.run(String(e.id),o(String(e.project_id??"")),o(String(e.project_slug??"")),"linear",String(e.issue_id),String(e.issue_identifier),String(e.issue_title),String(e.issue_status),o(String(e.issue_assignee??"")),String(e.thread_id),o(String(e.root_message_id??"")),o(String(e.chat_run_id??"")),String(e.agent_id),String(e.agent_name),c(String(e.mode??"chat")),String(e.status??"queued"),o(String(e.error??"")),o(String(e.recap_file_path??"")),Number(e.created_at),Number(e.updated_at))}e.exec("DROP TABLE IF EXISTS linear_runs")}(r);let t=r.prepare("PRAGMA table_info(tracker_runs)").all();return t.some(e=>"mode"===e.name)||r.exec("ALTER TABLE tracker_runs ADD COLUMN mode TEXT NOT NULL DEFAULT 'chat';"),t.some(e=>"recap_file_path"===e.name)||r.exec("ALTER TABLE tracker_runs ADD COLUMN recap_file_path TEXT;"),t.some(e=>"tracker_type"===e.name)||r.exec("ALTER TABLE tracker_runs ADD COLUMN tracker_type TEXT NOT NULL DEFAULT 'linear';"),e(r)}finally{r.close()}}let p=`
75
+ `);for(let e of t)r.run(String(e.id),d(String(e.project_id??"")),d(String(e.project_slug??"")),"linear",String(e.issue_id),String(e.issue_identifier),String(e.issue_title),String(e.issue_status),d(String(e.issue_assignee??"")),String(e.thread_id),d(String(e.root_message_id??"")),d(String(e.chat_run_id??"")),String(e.agent_id),String(e.agent_name),o(String(e.mode??"chat")),String(e.status??"queued"),d(String(e.error??"")),d(String(e.recap_file_path??"")),Number(e.created_at),Number(e.updated_at))}e.exec("DROP TABLE IF EXISTS linear_runs")}(r);let t=r.prepare("PRAGMA table_info(tracker_runs)").all();return t.some(e=>"mode"===e.name)||r.exec("ALTER TABLE tracker_runs ADD COLUMN mode TEXT NOT NULL DEFAULT 'chat';"),t.some(e=>"recap_file_path"===e.name)||r.exec("ALTER TABLE tracker_runs ADD COLUMN recap_file_path TEXT;"),t.some(e=>"tracker_type"===e.name)||r.exec("ALTER TABLE tracker_runs ADD COLUMN tracker_type TEXT NOT NULL DEFAULT 'linear';"),e(r)}finally{r.close()}}let p=`
76
76
  SELECT
77
77
  tr.*,
78
78
  cr.status AS chat_status,
@@ -85,20 +85,35 @@ module.exports=[85e4,e=>{"use strict";var t=e.i(522734),r=e.i(446786),a=e.i(8147
85
85
  LEFT JOIN chat_runs cr ON cr.id = (
86
86
  SELECT id FROM chat_runs WHERE thread_id = tr.thread_id ORDER BY updated_at DESC LIMIT 1
87
87
  )
88
- LEFT JOIN messages msg ON msg.thread_id = tr.thread_id AND msg.id = tr.root_message_id`;async function _(e){let t=Date.now(),r=o(e.id)??crypto.randomUUID(),a=o(e.threadId)??`tracker-run:${r}`,i=c(e.mode),s=e.trackerType??"linear";return l(n=>{n.prepare(`INSERT INTO tracker_runs (
88
+ LEFT JOIN messages msg ON msg.thread_id = tr.thread_id AND msg.id = tr.root_message_id`;async function _(e){let t=Date.now(),r=d(e.id)??crypto.randomUUID(),a=d(e.threadId)??`tracker-run:${r}`,i=o(e.mode),s=e.trackerType??"linear";return l(n=>{n.prepare(`INSERT INTO tracker_runs (
89
89
  id, project_id, project_slug, tracker_type,
90
90
  issue_id, issue_identifier, issue_title,
91
91
  issue_status, issue_assignee, thread_id, root_message_id, chat_run_id,
92
92
  agent_id, agent_name, mode, status, error, recap_file_path, created_at, updated_at
93
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, NULL, ?, ?, ?, 'queued', NULL, ?, ?, ?)`).run(r,o(e.projectId??null),o(e.projectSlug??null),s,e.issueId.trim(),e.issueIdentifier.trim(),e.issueTitle.trim(),e.issueStatus.trim(),o(e.issueAssignee??null),a,e.agentId.trim(),e.agentName.trim(),i,o(e.recapFilePath??null),t,t);let u=n.prepare(`${p} WHERE tr.id = ? LIMIT 1`).get(r);if(!u)throw Error(`Failed to create tracker run ${r}`);return d(u)})}async function T(e){return l(t=>{let r=["updated_at = ?"],a=[Date.now()];void 0!==e.rootMessageId&&(r.push("root_message_id = ?"),a.push(o(e.rootMessageId))),void 0!==e.chatRunId&&(r.push("chat_run_id = ?"),a.push(o(e.chatRunId))),void 0!==e.status&&(r.push("status = ?"),a.push(e.status)),void 0!==e.error&&(r.push("error = ?"),a.push(o(e.error))),a.push(e.id.trim()),t.prepare(`UPDATE tracker_runs SET ${r.join(", ")} WHERE id = ?`).run(...a);let i=t.prepare(`${p} WHERE tr.id = ? LIMIT 1`).get(e.id.trim());return i?d(i):null})}async function m(e){return l(t=>{let r=t.prepare(`${p} WHERE tr.id = ? LIMIT 1`).get(e.trim());return r?d(r):null})}async function g(e){let t=e.issueId.trim(),r=o(e.projectId??null),a=o(e.trackerType??null),i=Number.isFinite(e.limit)?Math.min(Math.max(Number(e.limit),1),100):50;return l(e=>{let s=[t],n=["tr.issue_id = ?"];return r&&(n.push("tr.project_id = ?"),s.push(r)),a&&(n.push("tr.tracker_type = ?"),s.push(a)),s.push(i),e.prepare(`${p}
93
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, NULL, ?, ?, ?, 'queued', NULL, ?, ?, ?)`).run(r,d(e.projectId??null),d(e.projectSlug??null),s,e.issueId.trim(),e.issueIdentifier.trim(),e.issueTitle.trim(),e.issueStatus.trim(),d(e.issueAssignee??null),a,e.agentId.trim(),e.agentName.trim(),i,d(e.recapFilePath??null),t,t);let u=n.prepare(`${p} WHERE tr.id = ? LIMIT 1`).get(r);if(!u)throw Error(`Failed to create tracker run ${r}`);return c(u)})}async function T(e){return l(t=>{let r=["updated_at = ?"],a=[Date.now()];void 0!==e.rootMessageId&&(r.push("root_message_id = ?"),a.push(d(e.rootMessageId))),void 0!==e.chatRunId&&(r.push("chat_run_id = ?"),a.push(d(e.chatRunId))),void 0!==e.status&&(r.push("status = ?"),a.push(e.status)),void 0!==e.error&&(r.push("error = ?"),a.push(d(e.error))),a.push(e.id.trim()),t.prepare(`UPDATE tracker_runs SET ${r.join(", ")} WHERE id = ?`).run(...a);let i=t.prepare(`${p} WHERE tr.id = ? LIMIT 1`).get(e.id.trim());return i?c(i):null})}async function m(e){return l(t=>{let r=t.prepare(`${p} WHERE tr.id = ? LIMIT 1`).get(e.trim());return r?c(r):null})}async function g(e){let t=e.issueId.trim(),r=d(e.projectId??null),a=d(e.trackerType??null),i=Number.isFinite(e.limit)?Math.min(Math.max(Number(e.limit),1),100):50;return l(e=>{let s=[t],n=["tr.issue_id = ?"];return r&&(n.push("tr.project_id = ?"),s.push(r)),a&&(n.push("tr.tracker_type = ?"),s.push(a)),s.push(i),e.prepare(`${p}
94
94
  WHERE ${n.join(" AND ")}
95
95
  ORDER BY tr.created_at DESC
96
- LIMIT ?`).all(...s).map(d)})}async function E(e){return l(t=>{let r=e?.trim(),a=r?`SELECT issue_id, MAX(created_at) AS last_activity_at
96
+ LIMIT ?`).all(...s).map(c)})}async function E(e){return l(t=>{let r=e?.trim(),a=r?`SELECT issue_id, MAX(created_at) AS last_activity_at
97
97
  FROM tracker_runs
98
98
  WHERE project_id = ?
99
99
  GROUP BY issue_id`:`SELECT issue_id, MAX(created_at) AS last_activity_at
100
100
  FROM tracker_runs
101
- GROUP BY issue_id`,i=r?t.prepare(a).all(e.trim()):t.prepare(a).all(),s=new Map;for(let e of i)s.set(e.issue_id,new Date(e.last_activity_at).toISOString());return s})}async function h(e){return l(t=>{let r=e?.trim(),a=r?`SELECT DISTINCT tr.issue_id, tr.agent_id, tr.agent_name
101
+ GROUP BY issue_id`,i=r?t.prepare(a).all(e.trim()):t.prepare(a).all(),s=new Map;for(let e of i)s.set(e.issue_id,new Date(e.last_activity_at).toISOString());return s})}async function h(e){return l(t=>{let r=e?.trim(),a=r?`SELECT tr.issue_id,
102
+ COUNT(DISTINCT tr.id) AS sessions,
103
+ COALESCE(SUM(mc.cnt), 0) AS messages
104
+ FROM tracker_runs tr
105
+ LEFT JOIN (
106
+ SELECT thread_id, COUNT(*) AS cnt FROM messages GROUP BY thread_id
107
+ ) mc ON mc.thread_id = tr.thread_id
108
+ WHERE tr.project_id = ?
109
+ GROUP BY tr.issue_id`:`SELECT tr.issue_id,
110
+ COUNT(DISTINCT tr.id) AS sessions,
111
+ COALESCE(SUM(mc.cnt), 0) AS messages
112
+ FROM tracker_runs tr
113
+ LEFT JOIN (
114
+ SELECT thread_id, COUNT(*) AS cnt FROM messages GROUP BY thread_id
115
+ ) mc ON mc.thread_id = tr.thread_id
116
+ GROUP BY tr.issue_id`;return(r?t.prepare(a).all(e.trim()):t.prepare(a).all()).map(e=>({issueId:e.issue_id,sessions:e.sessions,messages:e.messages}))})}async function I(e){return l(t=>{let r=e?.trim(),a=r?`SELECT DISTINCT tr.issue_id, tr.agent_id, tr.agent_name
102
117
  FROM tracker_runs tr
103
118
  INNER JOIN chat_runs cr ON cr.id = (
104
119
  SELECT id FROM chat_runs WHERE thread_id = tr.thread_id ORDER BY updated_at DESC LIMIT 1
@@ -109,20 +124,20 @@ module.exports=[85e4,e=>{"use strict";var t=e.i(522734),r=e.i(446786),a=e.i(8147
109
124
  INNER JOIN chat_runs cr ON cr.id = (
110
125
  SELECT id FROM chat_runs WHERE thread_id = tr.thread_id ORDER BY updated_at DESC LIMIT 1
111
126
  )
112
- WHERE cr.status IN ('queued', 'running')`;return(r?t.prepare(a).all(e.trim()):t.prepare(a).all()).map(e=>({issueId:e.issue_id,agentId:e.agent_id,agentName:e.agent_name}))})}e.s(["createLinearRun",0,_,"createTrackerRun",()=>_,"getIssueActiveAgents",()=>h,"getIssueActivityMap",()=>E,"getLinearRun",0,m,"getTrackerRun",()=>m,"listLinearRuns",0,g,"listTrackerRuns",()=>g,"updateLinearRun",0,T,"updateTrackerRun",()=>T])},166224,e=>{"use strict";function t(e,t){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function r(e){var t;let r=a(e),i=r.issue.identifier,s=r.issue.title,n=r.issue.status,u=r.issue.assignee,o=r.runtime.knowledgeBaseRoot,c=r.runtime.issueKnowledgePath,d=r.runtime.isolatedWorktreePath,l="",p=e.runtime?.recapContent?.trim();p&&(l=`TICKET RECAP
127
+ WHERE cr.status IN ('queued', 'running')`;return(r?t.prepare(a).all(e.trim()):t.prepare(a).all()).map(e=>({issueId:e.issue_id,agentId:e.agent_id,agentName:e.agent_name}))})}e.s(["createLinearRun",0,_,"createTrackerRun",()=>_,"getIssueActiveAgents",()=>I,"getIssueActivityMap",()=>E,"getIssueStats",()=>h,"getLinearRun",0,m,"getTrackerRun",()=>m,"listLinearRuns",0,g,"listTrackerRuns",()=>g,"updateLinearRun",0,T,"updateTrackerRun",()=>T])},166224,e=>{"use strict";function t(e,t){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function r(e){var t;let r=a(e),i=r.issue.identifier,s=r.issue.title,n=r.issue.status,u=r.issue.assignee,d=r.runtime.knowledgeBaseRoot,o=r.runtime.issueKnowledgePath,c=r.runtime.isolatedWorktreePath,l="",p=e.runtime?.recapContent?.trim();p&&(l=`TICKET RECAP
113
128
  ${p}`);let _=["TICKET EXECUTION","You are an engineer working through a single ticket from the project's issue tracker (Linear, Jira, or whichever tracker is configured). Work like a careful teammate: continue existing work when present, investigate before coding, present a plan before implementation, ask clarifying questions when requirements are ambiguous, and stop cleanly when blocked instead of guessing.",'TERMINOLOGY NOTE\n- "Ticket" / "issue" = the work item you are executing (from Linear, Jira, etc.)\n- "Task" in this project\'s UI = a scheduled or manual background task (cron jobs, automations) — NOT this ticket.\n- Do not confuse scheduled tasks with the ticket you are working on.',`INJECTED CONTEXT
114
129
  - Ticket: ${i}
115
130
  - Title: ${s}
116
131
  - Current status: ${n}
117
132
  - Current assignee: ${u}
118
133
  - Project: ${r.project.label}
119
- - Knowledge base root: ${o}
120
- - Issue knowledge path: ${c}
121
- - Suggested isolated worktree: ${d}
134
+ - Knowledge base root: ${d}
135
+ - Issue knowledge path: ${o}
136
+ - Suggested isolated worktree: ${c}
122
137
  - Additional project resources such as repo knowledge, project memory, and project variables are injected separately by the active project context.`,`SOURCE REPOSITORIES
123
- ${!(t=r.project.repos)||0===t.length?"- Use the active project context to discover the right repository or workspace; do not hardcode paths.":t.map(e=>{let t=[e.name.trim()||"repository"],r=String(e.path??"").trim(),a=String(e.notes??"").trim();return r&&t.push(`path: ${r}`),a&&t.push(`notes: ${a}`),`- ${t.join(" | ")}`}).join("\n")}`,"WORKFLOW\n1. Read the full issue and comment thread before acting. Use the issue tracker MCP for issue details, comments, state changes, and follow-up.\n2. Prefer resuming existing work: existing knowledge-base notes, branches, PRs, or prior discussion.\n3. If requirements are unclear, ask specific clarifying questions in the issue tracker and stop.\n4. If the ticket is fresh, investigate first, capture findings in the knowledge base, write a plan, and share the plan before implementation.\n5. If a reviewed plan already exists or the ticket is explicitly ready for implementation, implement in an isolated worktree or equivalent isolated workspace rather than a shared checkout.\n6. Validate with the appropriate tests, linting, type checks, and manual verification for the change.\n7. Keep the issue tracker accurate: comments, links, statuses, blockers, and PR references should match reality.\n8. Keep the knowledge base current with what you learned, what changed, and what remains.\n9. Work on exactly this ticket during this session.","RULES\n- Use the injected project context instead of hardcoded repo-specific paths or conventions.\n- Use knowledge base terminology; the filesystem path above is the storage location.\n- If a PR already exists, focus on CI failures, reviewer feedback, merge status, or ticket follow-up instead of starting over.\n- Leave the ticket and the knowledge base in a resumable state at the end of the session. Clean up temporary worktrees or session claims if your workflow created them."];return l&&_.splice(3,0,l),{prompt:`Work on this ticket: ${i} - ${s}`,promptPrefix:_.join("\n\n")+"\n\n"}}function a(e){var r;let a,i,s=e.issue.identifier.trim()||"TICKET-ID",n=e.issue.title.trim()||"Untitled ticket",u=String(e.issue.status??"").trim()||"Unknown",o=String(e.issue.assignee??"").trim()||"Unassigned",c=function(e){let r=String(e?.slug??"").trim();if(r)return t(r,"project");let a=String(e?.name??"").trim();return a?t(a,"project"):"project"}(e.project),d=String(e.project?.name??"").trim()||c,l=String(e.runtime?.knowledgeBaseRoot??"").trim()||`~/.agx/vault/${c}`,p=String(e.runtime?.issueKnowledgePath??"").trim()||`${l}/issues/${s}/`,_=String(e.runtime?.isolatedWorktreePath??"").trim()||`/tmp/agx-${t(s,"ticket")}`;return{issue:{identifier:s,title:n,status:u,assignee:o},project:{name:d,slug:c,label:(r=e.project,a=String(r?.name??"").trim(),i=String(r?.slug??"").trim(),a&&i?`${a} (${i})`:a||i||"current project"),repos:e.project?.repos?[...e.project.repos]:[]},runtime:{knowledgeBaseRoot:l,issueKnowledgePath:p,isolatedWorktreePath:_}}}function i(e,t){let r=a(t),i={"ticket.identifier":r.issue.identifier,"ticket.title":r.issue.title,"ticket.status":r.issue.status,"ticket.assignee":r.issue.assignee,"project.name":r.project.name,"project.slug":r.project.slug,"project.label":r.project.label,"knowledge_base.root":r.runtime.knowledgeBaseRoot,"knowledge_base.issue_path":r.runtime.issueKnowledgePath,"worktree.path":r.runtime.isolatedWorktreePath};return e.replace(/\{\{\s*([a-zA-Z0-9._-]+)\s*\}\}/g,(e,t)=>i[t]??"")}e.s(["buildTrackerExecutionPrompt",()=>r,"renderTrackerExecutionPromptTemplate",()=>i])},914284,e=>{"use strict";var t=e.i(522734),r=e.i(446786),a=e.i(814747);let i="latest.md";function s(e){return a.default.join(process.env.AGX_HOME??a.default.join(r.default.homedir(),".agx"),"linear",e,"recaps")}async function n(e,r){let n=s(e);await t.promises.mkdir(n,{recursive:!0});let u=new Date().toISOString().replace(/[:.]/g,"-")+".md",c=a.default.join(n,u);await t.promises.writeFile(c,r,"utf8");let d=a.default.join(n,i);try{await t.promises.unlink(d)}catch{}await t.promises.symlink(u,d),await o(n);let l=await t.promises.stat(c);return{filePath:c,latestPath:d,generatedAt:l.mtime}}async function u(e){let r=a.default.join(s(e),i);try{let e=await t.promises.stat(r);return{content:await t.promises.readFile(r,"utf8"),filePath:r,generatedAt:e.mtime}}catch{return null}}async function o(e){for(let r of(await t.promises.readdir(e)).filter(e=>e.endsWith(".md")&&e!==i).sort().reverse().slice(10))try{await t.promises.unlink(a.default.join(e,r))}catch{}}e.s(["readLatestRecap",()=>u,"writeRecap",()=>n])},471315,e=>{"use strict";e.i(712513);var t=e.i(744071),r=e.i(391310),a=e.i(166224),i=e.i(85e4),s=e.i(914284),n=e.i(601544),u=e.i(848159),o=e.i(565248),c=e.i(735330);async function d(e){let t=(await (0,r.loadDbParticipants)()).find(t=>t.id===e.agentId)??null;if(!t)throw Error(`Agent "${e.agentId}" could not be resolved for scripted tracker work.`);let n=await (0,s.readLatestRecap)(e.issue.id),u=await (0,i.createTrackerRun)({projectId:e.projectId??null,projectSlug:e.projectSlug??null,issueId:e.issue.id,issueIdentifier:e.issue.identifier,issueTitle:e.issue.title,issueStatus:e.issue.status,issueAssignee:e.issue.assignee??null,agentId:t.id,agentName:t.name,mode:"scripted",recapFilePath:n?.filePath??null});try{let r={issue:{identifier:e.issue.identifier,title:e.issue.title,status:e.issue.status,assignee:e.issue.assignee??null},project:e.projectSlug?{slug:e.projectSlug}:null,runtime:{recapContent:n?.content??null}},{prompt:s,promptPrefix:o}=(0,a.buildTrackerExecutionPrompt)(r),c=e.scriptPrompt?.trim()??"",d=e.scriptName?.trim()??"",p=c&&(0,a.renderTrackerExecutionPromptTemplate)(c,r).trim()||s,_=c?`${o}ACTIVE SESSION SCRIPT
124
- - Name: ${d||"Custom script"}
138
+ ${!(t=r.project.repos)||0===t.length?"- Use the active project context to discover the right repository or workspace; do not hardcode paths.":t.map(e=>{let t=[e.name.trim()||"repository"],r=String(e.path??"").trim(),a=String(e.notes??"").trim();return r&&t.push(`path: ${r}`),a&&t.push(`notes: ${a}`),`- ${t.join(" | ")}`}).join("\n")}`,"WORKFLOW\n1. Read the full issue and comment thread before acting. Use the issue tracker MCP for issue details, comments, state changes, and follow-up.\n2. Prefer resuming existing work: existing knowledge-base notes, branches, PRs, or prior discussion.\n3. If requirements are unclear, ask specific clarifying questions in the issue tracker and stop.\n4. If the ticket is fresh, investigate first, capture findings in the knowledge base, write a plan, and share the plan before implementation.\n5. If a reviewed plan already exists or the ticket is explicitly ready for implementation, implement in an isolated worktree or equivalent isolated workspace rather than a shared checkout.\n6. Validate with the appropriate tests, linting, type checks, and manual verification for the change.\n7. Keep the issue tracker accurate: comments, links, statuses, blockers, and PR references should match reality.\n8. Keep the knowledge base current with what you learned, what changed, and what remains.\n9. Work on exactly this ticket during this session.","RULES\n- Use the injected project context instead of hardcoded repo-specific paths or conventions.\n- Use knowledge base terminology; the filesystem path above is the storage location.\n- If a PR already exists, focus on CI failures, reviewer feedback, merge status, or ticket follow-up instead of starting over.\n- Leave the ticket and the knowledge base in a resumable state at the end of the session. Clean up temporary worktrees or session claims if your workflow created them."];return l&&_.splice(3,0,l),{prompt:`Work on this ticket: ${i} - ${s}`,promptPrefix:_.join("\n\n")+"\n\n"}}function a(e){var r;let a,i,s=e.issue.identifier.trim()||"TICKET-ID",n=e.issue.title.trim()||"Untitled ticket",u=String(e.issue.status??"").trim()||"Unknown",d=String(e.issue.assignee??"").trim()||"Unassigned",o=function(e){let r=String(e?.slug??"").trim();if(r)return t(r,"project");let a=String(e?.name??"").trim();return a?t(a,"project"):"project"}(e.project),c=String(e.project?.name??"").trim()||o,l=String(e.runtime?.knowledgeBaseRoot??"").trim()||`~/.agx/vault/${o}`,p=String(e.runtime?.issueKnowledgePath??"").trim()||`${l}/issues/${s}/`,_=String(e.runtime?.isolatedWorktreePath??"").trim()||`/tmp/agx-${t(s,"ticket")}`;return{issue:{identifier:s,title:n,status:u,assignee:d},project:{name:c,slug:o,label:(r=e.project,a=String(r?.name??"").trim(),i=String(r?.slug??"").trim(),a&&i?`${a} (${i})`:a||i||"current project"),repos:e.project?.repos?[...e.project.repos]:[]},runtime:{knowledgeBaseRoot:l,issueKnowledgePath:p,isolatedWorktreePath:_}}}function i(e,t){let r=a(t),i={"ticket.identifier":r.issue.identifier,"ticket.title":r.issue.title,"ticket.status":r.issue.status,"ticket.assignee":r.issue.assignee,"project.name":r.project.name,"project.slug":r.project.slug,"project.label":r.project.label,"knowledge_base.root":r.runtime.knowledgeBaseRoot,"knowledge_base.issue_path":r.runtime.issueKnowledgePath,"worktree.path":r.runtime.isolatedWorktreePath};return e.replace(/\{\{\s*([a-zA-Z0-9._-]+)\s*\}\}/g,(e,t)=>i[t]??"")}e.s(["buildTrackerExecutionPrompt",()=>r,"renderTrackerExecutionPromptTemplate",()=>i])},914284,e=>{"use strict";var t=e.i(522734),r=e.i(446786),a=e.i(814747);let i="latest.md";function s(e){return a.default.join(process.env.AGX_HOME??a.default.join(r.default.homedir(),".agx"),"linear",e,"recaps")}async function n(e,r){let n=s(e);await t.promises.mkdir(n,{recursive:!0});let u=new Date().toISOString().replace(/[:.]/g,"-")+".md",o=a.default.join(n,u);await t.promises.writeFile(o,r,"utf8");let c=a.default.join(n,i);try{await t.promises.unlink(c)}catch{}await t.promises.symlink(u,c),await d(n);let l=await t.promises.stat(o);return{filePath:o,latestPath:c,generatedAt:l.mtime}}async function u(e){let r=a.default.join(s(e),i);try{let e=await t.promises.stat(r);return{content:await t.promises.readFile(r,"utf8"),filePath:r,generatedAt:e.mtime}}catch{return null}}async function d(e){for(let r of(await t.promises.readdir(e)).filter(e=>e.endsWith(".md")&&e!==i).sort().reverse().slice(10))try{await t.promises.unlink(a.default.join(e,r))}catch{}}e.s(["readLatestRecap",()=>u,"writeRecap",()=>n])},471315,e=>{"use strict";e.i(712513);var t=e.i(744071),r=e.i(391310),a=e.i(166224),i=e.i(85e4),s=e.i(914284),n=e.i(601544),u=e.i(848159),d=e.i(565248),o=e.i(735330);async function c(e){let t=(await (0,r.loadDbParticipants)()).find(t=>t.id===e.agentId)??null;if(!t)throw Error(`Agent "${e.agentId}" could not be resolved for scripted tracker work.`);let n=await (0,s.readLatestRecap)(e.issue.id),u=await (0,i.createTrackerRun)({projectId:e.projectId??null,projectSlug:e.projectSlug??null,issueId:e.issue.id,issueIdentifier:e.issue.identifier,issueTitle:e.issue.title,issueStatus:e.issue.status,issueAssignee:e.issue.assignee??null,agentId:t.id,agentName:t.name,mode:"scripted",recapFilePath:n?.filePath??null});try{let r={issue:{identifier:e.issue.identifier,title:e.issue.title,status:e.issue.status,assignee:e.issue.assignee??null},project:e.projectSlug?{slug:e.projectSlug}:null,runtime:{recapContent:n?.content??null}},{prompt:s,promptPrefix:d}=(0,a.buildTrackerExecutionPrompt)(r),o=e.scriptPrompt?.trim()??"",c=e.scriptName?.trim()??"",p=o&&(0,a.renderTrackerExecutionPromptTemplate)(o,r).trim()||s,_=o?`${d}ACTIVE SESSION SCRIPT
139
+ - Name: ${c||"Custom script"}
125
140
 
126
- `:o,{chatRunId:T,userMessageId:m}=await l({threadId:u.threadId,prompt:p,promptPrefix:_,projectSlug:e.projectSlug??null,participantId:t.id});return{run:u=await (0,i.updateTrackerRun)({id:u.id,chatRunId:T,rootMessageId:m})??u,chatRunId:T,userMessageId:m}}catch(e){throw await (0,i.updateTrackerRun)({id:u.id,status:"failed",error:e instanceof Error?e.message:String(e)}),e}}async function l(e){let a=(await (0,r.loadDbParticipants)()).find(t=>t.id===e.participantId)??null;if(!a)throw Error(`Participant "${e.participantId}" is unavailable.`);let i=(0,c.normalizeProjectSlug)(e.projectSlug),s=await (0,c.resolveProjectContext)(i,[],[a]),d=Date.now(),l=crypto.randomUUID(),p={id:l,role:"user",participantId:null,content:e.prompt,timestamp:d,rootMessageId:null,parentMessageId:null,depth:0};await (0,n.saveMessages)(e.threadId,[p]);let _=e.promptPrefix?`${e.promptPrefix}${e.prompt}`:e.prompt,T=crypto.randomUUID(),m={threadId:e.threadId,prompt:_,projectContext:s,mentionedIds:[],initialParallelIds:[],maxRounds:Math.min(Math.max(e.maxRounds??10,1),50),recentHistory:[],currentUserMessageId:l,rootMessageId:l,participantIds:[a.id]};await (0,n.createChatRun)({id:T,threadId:e.threadId,rootMessageId:l,userId:t.LOCAL_USER.id,projectSlug:i||null,maxSteps:m.maxRounds,activeParticipantIds:[a.id],payload:m}),await (0,u.ensureOrchestratorRuntime)();let g=await (0,o.getQueue)();return await g.send(o.QUEUE_NAMES.CHAT_RUN_PROCESS,{chatRunId:T,userId:t.LOCAL_USER.id,signal:"start"}),{chatRunId:T,userMessageId:l}}e.s(["startScriptedTrackerSession",()=>d])}];
141
+ `:d,{chatRunId:T,userMessageId:m}=await l({threadId:u.threadId,prompt:p,promptPrefix:_,projectSlug:e.projectSlug??null,participantId:t.id});return{run:u=await (0,i.updateTrackerRun)({id:u.id,chatRunId:T,rootMessageId:m})??u,chatRunId:T,userMessageId:m}}catch(e){throw await (0,i.updateTrackerRun)({id:u.id,status:"failed",error:e instanceof Error?e.message:String(e)}),e}}async function l(e){let a=(await (0,r.loadDbParticipants)()).find(t=>t.id===e.participantId)??null;if(!a)throw Error(`Participant "${e.participantId}" is unavailable.`);let i=(0,o.normalizeProjectSlug)(e.projectSlug),s=await (0,o.resolveProjectContext)(i,[],[a]),c=Date.now(),l=crypto.randomUUID(),p={id:l,role:"user",participantId:null,content:e.prompt,timestamp:c,rootMessageId:null,parentMessageId:null,depth:0};await (0,n.saveMessages)(e.threadId,[p]);let _=e.promptPrefix?`${e.promptPrefix}${e.prompt}`:e.prompt,T=crypto.randomUUID(),m={threadId:e.threadId,prompt:_,projectContext:s,mentionedIds:[],initialParallelIds:[],maxRounds:Math.min(Math.max(e.maxRounds??10,1),50),recentHistory:[],currentUserMessageId:l,rootMessageId:l,participantIds:[a.id]};await (0,n.createChatRun)({id:T,threadId:e.threadId,rootMessageId:l,userId:t.LOCAL_USER.id,projectSlug:i||null,maxSteps:m.maxRounds,activeParticipantIds:[a.id],payload:m}),await (0,u.ensureOrchestratorRuntime)();let g=await (0,d.getQueue)();return await g.send(d.QUEUE_NAMES.CHAT_RUN_PROCESS,{chatRunId:T,userId:t.LOCAL_USER.id,signal:"start"}),{chatRunId:T,userMessageId:l}}e.s(["startScriptedTrackerSession",()=>c])}];
127
142
 
128
143
  //# sourceMappingURL=apps_local_8f9f647d._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[615501,(e,t,a)=>{"use strict";t.exports=e.r(185615).vendored["react-rsc"].ReactJsxRuntime},698134,88007,e=>{"use strict";let t=new Map;function a(e){if(t.has(e.type))throw Error(`Tracker adapter "${e.type}" is already registered`);t.set(e.type,e)}function r(e){let a=t.get(e);if(!a)throw Error(`Unknown tracker type: "${e}". Available: ${i().join(", ")}`);return a}function s(e){return t.get(e)??null}function i(){return[...t.keys()]}function n(){return[...t.values()]}e.s(["getAdapter",()=>r,"getAdapterOrNull",()=>s,"listAdapterTypes",()=>i,"listAdapters",()=>n,"registerAdapter",()=>a],88007);var o=e.i(581001),c=e.i(404258),l=e.i(615501);function u({className:e}){return(0,l.jsx)("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,l.jsx)("path",{d:"M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z"})})}function d(e){let t=e.trim().toLowerCase();return["done","completed","closed"].includes(t)?"done":["cancelled","canceled","duplicate"].includes(t)?"cancelled":["in progress","in review","started","testing","deployed","in deployment"].includes(t)?"in_progress":"todo"}async function p(e,t){throw Error("Linear OAuth callback must be handled by the route handler")}async function y(e){let t=(0,o.getLinearClient)(e);if(!t)return{connected:!1};try{let e=await t.viewer;return{connected:!0,user:{id:e.id,name:e.name,avatarUrl:void 0}}}catch{return{connected:!1}}}async function g(t){let{deleteProjectTicketToken:a}=await e.A(836400);a(t,"linear")}function m(e){return{id:e.id,name:e.name??`Cycle ${e.number}`,type:"cycle"}}e.i(78362);var f=e.i(754493),h=e.i(607495);function w({className:e}){return(0,l.jsx)("svg",{className:e,viewBox:"0 0 100 100",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg",children:(0,l.jsx)("path",{d:"M94.6 12.2c-1.4-1.6-3.4-2.5-5.6-2.5H10.8c-2.1 0-4.1.9-5.6 2.5C3.8 13.8 3 15.8 3 17.9v64.2c0 2.1.8 4.1 2.2 5.7 1.5 1.6 3.5 2.5 5.6 2.5h78.2c2.2 0 4.2-.9 5.6-2.5 1.5-1.6 2.2-3.6 2.2-5.7V17.9c.1-2.1-.6-4.1-2.2-5.7zM50 72.4L27.6 50 50 27.6 72.4 50 50 72.4z"})})}e.i(242617),a(new class{type="linear";displayName="Linear";groupLabel="Cycle";icon=u;getAuthUrl(e){let t;return t=new URL((0,c.getConfiguredAppBaseUrl)()).port||"41741",`https://www.runagx.com/integrations/linear/auth?port=${t}`}async handleCallback(e,t){return p(e,t)}async getStatus(e){return y(e)}async disconnect(e){return g(e)}async listItems(t,a){let{ensureLinearIssueCache:r,listLinearIssueSummaries:s}=await e.A(58723),{getIssueActivityMap:i}=await e.A(138720),n=!a.cursor;await r({projectId:t,refresh:n});let o=a.hasActivity?await i(t):void 0,{listCachedTrackerItems:c}=await e.A(410437),l=await c({trackerType:"linear",search:a.search,statuses:a.statuses,statusCategories:a.statusCategories,assigneeIds:a.assigneeIds,groupIds:a.groupIds,cursor:a.cursor,limit:a.limit,sortBy:a.sortBy??"activity",sortDir:a.sortDir,hasActivity:a.hasActivity,activityMap:o});return{items:l.issues.map(e=>({id:e.id,trackerId:e.trackerId||`linear:${e.teamId??"default"}`,trackerType:"linear",identifier:e.identifier,title:e.title,description:e.description??void 0,status:e.status,statusCategory:e.statusCategory,assignee:e.assignee?{id:e.assigneeId??e.assignee,name:e.assignee,avatarUrl:void 0}:void 0,priority:void 0,labels:e.labels??[],createdAt:e.pulledAt,updatedAt:e.updatedAt,url:e.url??`https://linear.app/issue/${e.identifier}`})),pageInfo:l.pageInfo}}async getItem(t,a){let{getCachedTrackerItemContexts:r}=await e.A(410437),s=(await r([a]))[0];if(!s)throw Error(`Item ${a} not found`);return{id:s.id,trackerId:s.trackerId||`linear:${s.teamId??"default"}`,trackerType:"linear",identifier:s.identifier,title:s.title,description:s.description??void 0,status:s.status,statusCategory:s.statusCategory,assignee:s.assignee?{id:s.assigneeId??s.assignee,name:s.assignee,avatarUrl:void 0}:void 0,labels:s.labels??[],createdAt:s.pulledAt,updatedAt:s.updatedAt,url:s.url??`https://linear.app/issue/${s.identifier}`,comments:[],activity:[],metadata:{teamId:s.teamId,teamName:s.teamName,teamKey:s.teamKey,cycleId:s.cycleId,cycleName:s.cycleName,cycleNumber:s.cycleNumber,isAssignedToMe:s.isAssignedToMe}}}async updateItem(t,a,r){let s=(0,o.getLinearClient)(t);if(!s)throw Error("Not connected to Linear");if(r.status){let t=await s.updateIssueStatus(a,r.status),{updateCachedTrackerItemStatus:i}=await e.A(410437);return await i({issueId:a,status:t.status??r.status,updatedAt:t.updatedAt}),{id:a,trackerId:"linear:default",trackerType:"linear",identifier:t.identifier,title:t.title,status:t.status??r.status,statusCategory:d(t.status??r.status),assignee:t.assignee?{id:t.assignee,name:t.assignee}:void 0,labels:[],createdAt:t.updatedAt,updatedAt:t.updatedAt,url:t.url??`https://linear.app/issue/${t.identifier}`}}throw Error("Only status updates are currently supported")}async addComment(e,t,a){throw Error("Linear addComment not yet implemented")}async getActivity(e,t){return[]}async listGroups(e){let t=(0,o.getLinearClient)(e);return t?(await t.cycles()).map(m):[]}async listStatuses(e){let t=(0,o.getLinearClient)(e);if(!t)return[];try{let e=await t.workflowStates(),a=new Set;return e.map(e=>({id:e.id,name:e.name,category:d(e.name)})).filter(e=>!a.has(e.name)&&(a.add(e.name),!0))}catch{return[{id:"todo",name:"Todo",category:"todo"},{id:"in_progress",name:"In Progress",category:"in_progress"},{id:"done",name:"Done",category:"done"},{id:"cancelled",name:"Cancelled",category:"cancelled"}]}}async listAssignees(e){let t=(0,o.getLinearClient)(e);return t?(await t.users()).map(e=>({id:e.id,name:e.name,avatarUrl:void 0})):[]}async handleApiKeyConnect(t,a){let{saveProjectTicketToken:r}=await e.A(836400);r(t,"linear",{accessToken:a})}async handleTokenDelivery(t,a){let r=a.access_token;if(!r)throw Error("Missing access_token");let{saveProjectTicketToken:s}=await e.A(836400),i=a.expires_in?Number(a.expires_in):void 0;s(t,"linear",{accessToken:r,...i&&{expiresAt:Date.now()+1e3*i}})}getMcpConfig(e){let t=(0,o.getProjectTicketToken)(e,"linear");return{name:"linear",url:"https://mcp.linear.app/sse",headers:t?{Authorization:`Bearer ${t.accessToken}`}:{}}}renderGroupLabel(e){return"cycle"===e.type?`Cycle: ${e.name}`:e.name}}),a(new class{type="jira";displayName="Jira Cloud";groupLabel="Sprint";icon=w;getAuthUrl(e){return(0,f.getJiraAuthUrl)(e)}async handleCallback(e,t){let a=await (0,f.exchangeJiraCode)(t),r=(await (0,f.getAccessibleResources)(a.accessToken))[0];if(!r)throw Error("No accessible Jira resources found");return(0,f.saveJiraToken)(e,{accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.expiresAt,cloudId:r.id,siteUrl:r.url}),{accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.expiresAt}}async getStatus(e){let t=(0,f.getJiraToken)(e);if(!t?.accessToken||!t?.cloudId)return{connected:!1};try{let t=await (0,f.getJiraClient)(e);if(!t)return{connected:!1};let a=await t.getMyself();return{connected:!0,user:{id:a.id,name:a.name,avatarUrl:a.avatarUrl}}}catch{return{connected:!1}}}async disconnect(t){(0,f.deleteJiraToken)(t);let{removeTrackerConnection:a}=await e.A(169447);a(t,"jira")}async listItems(t,a){let{ensureJiraIssueCache:r,mapJiraIssue:s}=await e.A(119130),i=(0,f.getJiraToken)(t),n=!a.cursor;await r({projectId:t,refresh:n});let{listCachedTrackerItems:o}=await e.A(410437),c=await o({trackerType:"jira",search:a.search,statuses:a.statuses,statusCategories:a.statusCategories,assigneeIds:a.assigneeIds,groupIds:a.groupIds,cursor:a.cursor,limit:a.limit,sortBy:a.sortBy??"activity",sortDir:a.sortDir,hasActivity:a.hasActivity}),l=i?.siteUrl??"https://example.atlassian.net";return{items:c.issues.map(e=>({id:e.id,trackerId:e.trackerId||"jira:default",trackerType:"jira",identifier:e.identifier,title:e.title,description:e.description??void 0,status:e.status,statusCategory:e.statusCategory,assignee:e.assignee?{id:e.assigneeId??e.assignee,name:e.assignee}:void 0,labels:e.labels??[],createdAt:e.pulledAt,updatedAt:e.updatedAt,url:e.url??`${l}/browse/${e.identifier}`})),pageInfo:c.pageInfo}}async getItem(t,a){let{getJiraIssueDetail:r}=await e.A(119130);return r(t,a)}async updateItem(t,a,r){let s=await (0,f.getJiraClient)(t);if(!s)throw Error("Not connected to Jira");if(r.status){let e=await s.getTransitions(a),t=e.find(e=>e.to.name===r.status||e.name===r.status);if(!t)throw Error(`No transition to status "${r.status}" available. Valid transitions: ${e.map(e=>e.name).join(", ")}`);await s.transitionIssue(a,t.id)}r.assigneeId&&await s.updateIssue(a,{assignee:{accountId:r.assigneeId}}),r.labels&&await s.updateIssue(a,{labels:r.labels});let i=(0,f.getJiraToken)(t),n=i?.siteUrl??"https://example.atlassian.net",o=await s.getIssue(a),{mapJiraIssue:c}=await e.A(119130);return c(o,n)}async addComment(e,t,a){let r=await (0,f.getJiraClient)(e);if(!r)throw Error("Not connected to Jira");await r.addComment(t,a)}async getActivity(e,t){let a=await (0,f.getJiraClient)(e);return a?(await a.getActivity(t)).map(e=>({id:e.id,type:"update",description:e.items.map(e=>`${e.field}: ${e.fromString??""} → ${e.toString??""}`).join(", "),actor:{id:e.author.accountId,name:e.author.displayName},createdAt:e.created})):[]}async listGroups(e){let t=await (0,f.getJiraClient)(e);if(!t)return[];try{let e=await t.getBoards(),a=[];for(let r of e.slice(0,5))for(let e of(await t.getSprints(r.id)))("active"===e.state||"future"===e.state)&&a.push({id:String(e.id),name:e.name,type:"sprint"});return a}catch{return[]}}async listStatuses(e){let t=await (0,f.getJiraClient)(e);if(!t)return[];try{let e=await t.getStatuses(),a=new Set,r=[];for(let t of e)a.has(t.name)||(a.add(t.name),r.push({id:t.id,name:t.name,category:(0,h.jiraStatusCategoryToCanonical)(t.statusCategory?.key)}));return r}catch{return[]}}async listAssignees(t){let a=await (0,f.getJiraClient)(t);if(!a)return[];(0,f.getJiraToken)(t);let{listCachedTrackerItems:r}=await e.A(410437),s=await r({trackerType:"jira",limit:1}),i=s.issues[0]?.teamKey;if(!i)return[];try{return(await a.getAssignableUsers(i)).map(e=>({id:e.accountId,name:e.displayName,avatarUrl:e.avatarUrls?.["48x48"]}))}catch{return[]}}async handleApiKeyConnect(e,t){throw Error("Jira Cloud requires OAuth authentication — use the Connect button instead")}async handleTokenDelivery(e,t){let a=t.access_token,r=t.cloud_id,s=t.site_url;if(!a||!r||!s)throw Error("Missing required Jira token fields (access_token, cloud_id, site_url)");let i=t.expires_in?Number(t.expires_in):void 0;(0,f.saveJiraToken)(e,{accessToken:a,refreshToken:t.refresh_token,cloudId:r,siteUrl:s,...i&&{expiresAt:Date.now()+1e3*i}})}getMcpConfig(e){let t=(0,f.getJiraToken)(e);return{name:"jira",url:"https://mcp.atlassian.com/v1/sse",headers:t?{Authorization:`Bearer ${t.accessToken}`}:{}}}renderGroupLabel(e){return"sprint"===e.type?`Sprint: ${e.name}`:e.name}}),e.s([],698134)},242617,e=>{"use strict";e.i(712513);var t=e.i(902157),a=e.i(660526),r=e.i(750227);let s=r.default.join((0,a.homedir)(),".agx");function i(e){return r.default.join(s,"projects",e,"integrations","trackers.json")}function n(e){if(!e)return{connections:[]};let a=i(e);try{let e=(0,t.readFileSync)(a,"utf8"),r=JSON.parse(e);return{connections:Array.isArray(r.connections)?r.connections:[],defaultTracker:"string"==typeof r.defaultTracker?r.defaultTracker:void 0}}catch{return{connections:[]}}}function o(e,a,s){let n,o=i(e);n=r.default.dirname(o),(0,t.existsSync)(n)||(0,t.mkdirSync)(n,{recursive:!0});let c={connections:a};s&&(c.defaultTracker=s),(0,t.writeFileSync)(o,JSON.stringify(c,null,2),"utf8")}function c(e){return n(e).connections}function l(e){let t,a=n(e);return a.defaultTracker&&(t=a.defaultTracker,a.connections.some(e=>e.type===t))?a.defaultTracker:1===a.connections.length?a.connections[0].type:null}function u(e,t){if(!e)return;let a=n(e),r=t&&a.connections.some(e=>e.type===t)?t:void 0;o(e,a.connections,r)}function d(e,t){if(!e)return;let a=n(e),r=a.connections.slice(),s=r.findIndex(e=>e.type===t.type);s>=0?r[s]=t:r.push(t),o(e,r,a.defaultTracker)}function p(e,a){if(!e)return;let r=n(e),s=r.connections.filter(e=>e.type!==a),c=r.defaultTracker===a?void 0:r.defaultTracker;if(0===s.length){let a=i(e);try{(0,t.unlinkSync)(a)}catch{}}else o(e,s,c)}e.s(["addTrackerConnection",()=>d,"getDefaultTrackerType",()=>l,"listTrackerConnections",()=>c,"removeTrackerConnection",()=>p,"setDefaultTrackerType",()=>u])},404258,e=>{"use strict";function t(e){let t=e?.trim();return t?t.replace(/\/+$/,""):null}let a="http://localhost:41741";function r(){return t(process.env.NEXT_PUBLIC_APP_URL)??t(process.env.AGX_BOARD_URL)??t(process.env.NEXT_PUBLIC_AGX_BOARD_URL)??a}function s(){return t(process.env.AGX_BOARD_URL)??t(process.env.NEXT_PUBLIC_AGX_BOARD_URL)??t(process.env.NEXT_PUBLIC_APP_URL)??a}function i(){let e=new Set([a,"http://127.0.0.1:41741"]);for(let a of[process.env.NEXT_PUBLIC_APP_URL,process.env.AGX_BOARD_URL,process.env.NEXT_PUBLIC_AGX_BOARD_URL]){let r=t(a);r&&e.add(r)}return Array.from(e)}e.s(["getAllowedOrigins",()=>i,"getConfiguredAppBaseUrl",()=>r,"getConfiguredBoardBaseUrl",()=>s])},607495,754493,e=>{"use strict";e.i(712513);var t=e.i(902157),a=e.i(660526),r=e.i(750227),s=e.i(404258);let i=r.default.join((0,a.homedir)(),".agx"),n="https://api.atlassian.com";function o(e){return r.default.join(i,"projects",e,"integrations","jira.json")}function c(e){if(!e)return null;let a=o(e);try{let e=(0,t.readFileSync)(a,"utf8");return JSON.parse(e)}catch{return null}}function l(e,a){if(!e)throw Error("projectId is required to save a Jira token");let s=o(e),i=r.default.dirname(s);(0,t.existsSync)(i)||(0,t.mkdirSync)(i,{recursive:!0}),(0,t.writeFileSync)(s,JSON.stringify(a,null,2),"utf8")}function u(e){if(!e)return;let a=o(e);try{(0,t.unlinkSync)(a)}catch{}}function d(e){let t=new URL((0,s.getConfiguredAppBaseUrl)()).port||"41741";return`https://www.runagx.com/integrations/jira/auth?port=${t}`}async function p(e){let t=process.env.JIRA_CLIENT_ID,a=process.env.JIRA_CLIENT_SECRET;if(!t||!a)throw Error("JIRA_CLIENT_ID and JIRA_CLIENT_SECRET must be set");let r=await fetch("https://auth.atlassian.com/oauth/token",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"authorization_code",code:e,client_id:t,client_secret:a,redirect_uri:`${(0,s.getConfiguredAppBaseUrl)()}/api/trackers/jira/callback`})});if(!r.ok){let e=await r.text();throw Error(`Jira token exchange failed: ${r.status} ${e}`)}let i=await r.json(),n="number"==typeof i.expires_in?i.expires_in:3600;return{accessToken:i.access_token,refreshToken:i.refresh_token,expiresAt:Date.now()+1e3*n}}async function y(e){let t=await fetch("https://www.runagx.com/integrations/jira/refresh",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:e})});if(!t.ok){let e=await t.text();throw Error(`Jira token refresh failed: ${t.status} ${e}`)}let a=await t.json(),r="number"==typeof a.expires_in?a.expires_in:3600;return{accessToken:a.access_token,refreshToken:a.refresh_token??e,expiresAt:Date.now()+1e3*r}}async function g(e){let t=await fetch(`${n}/oauth/token/accessible-resources`,{headers:{Authorization:`Bearer ${e}`}});return t.ok?t.json():[]}class m{accessToken;cloudId;siteUrl;constructor(e,t,a){this.accessToken=e,this.cloudId=t,this.siteUrl=a}get baseUrl(){return`${n}/ex/jira/${this.cloudId}/rest/api/3`}get agileUrl(){return`${n}/ex/jira/${this.cloudId}/rest/agile/1.0`}async request(e,t){return await fetch(e,{...t,headers:{Authorization:`Bearer ${this.accessToken}`,"Content-Type":"application/json",Accept:"application/json",...t?.headers}})}async getMyself(){let e=await this.request(`${this.baseUrl}/myself`);if(!e.ok)throw Error(`Failed to get Jira user: ${e.status}`);let t=await e.json();return{id:t.accountId,name:t.displayName,avatarUrl:t.avatarUrls?.["48x48"]}}async searchIssues(e,t){let a={jql:e,maxResults:t?.maxResults??50,fields:t?.fields??["summary","status","assignee","priority","labels","description","updated","created","issuetype","project","customfield_10020","comment"]};t?.nextPageToken&&(a.nextPageToken=t.nextPageToken);let r=await this.request(`${this.baseUrl}/search/jql`,{method:"POST",body:JSON.stringify(a)});if(!r.ok){let e=await r.text();throw Error(`Jira search failed: ${r.status} ${e}`)}return r.json()}async getIssue(e){let t=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}?expand=renderedFields`);if(!t.ok)throw Error(`Failed to get Jira issue ${e}: ${t.status}`);return t.json()}async updateIssue(e,t){let a=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}`,{method:"PUT",body:JSON.stringify({fields:t})});if(!a.ok){let t=await a.text();throw Error(`Failed to update Jira issue ${e}: ${a.status} ${t}`)}}async addComment(e,t){let a=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}/comment`,{method:"POST",body:JSON.stringify({body:{type:"doc",version:1,content:t.split("\n\n").map(e=>({type:"paragraph",content:e?[{type:"text",text:e}]:[]}))}})});if(!a.ok){let t=await a.text();throw Error(`Failed to add comment to ${e}: ${a.status} ${t}`)}}async getComments(e){let t=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}/comment`);return t.ok?(await t.json()).comments??[]:[]}async getTransitions(e){let t=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}/transitions`);return t.ok?(await t.json()).transitions??[]:[]}async transitionIssue(e,t){let a=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}/transitions`,{method:"POST",body:JSON.stringify({transition:{id:t}})});if(!a.ok){let t=await a.text();throw Error(`Failed to transition ${e}: ${a.status} ${t}`)}}async getProjects(){let e=await this.request(`${this.baseUrl}/project`);return e.ok?e.json():[]}async getStatuses(){let e=await this.request(`${this.baseUrl}/status`);return e.ok?e.json():[]}async getBoards(){let e=await this.request(`${this.agileUrl}/board`);return e.ok?(await e.json()).values??[]:[]}async getSprints(e){let t=await this.request(`${this.agileUrl}/board/${e}/sprint`);return t.ok?(await t.json()).values??[]:[]}async getAssignableUsers(e){let t=new URLSearchParams({project:e}),a=await this.request(`${this.baseUrl}/user/assignable/search?${t}`);return a.ok?a.json():[]}async getActivity(e,t=200){let a=[],r=0;for(;a.length<t;){let s=new URLSearchParams({startAt:String(r),maxResults:String(Math.min(100,t-a.length))}),i=await this.request(`${this.baseUrl}/issue/${encodeURIComponent(e)}/changelog?${s}`);if(!i.ok)break;let n=await i.json(),o=n.values??[];if(a.push(...o),0===o.length||a.length>=(n.total??0))break;r+=o.length}return a}}async function f(e){let t=c(e);if(!t?.accessToken||!t?.cloudId||!t?.siteUrl)return null;if(t.expiresAt&&Date.now()>t.expiresAt-6e4&&t.refreshToken)try{let a=await y(t.refreshToken),r={...t,accessToken:a.accessToken,refreshToken:a.refreshToken,expiresAt:a.expiresAt};return l(e,r),new m(r.accessToken,t.cloudId,t.siteUrl)}catch{return null}return new m(t.accessToken,t.cloudId,t.siteUrl)}function h(e){return e?"string"==typeof e?e:function e(t){return"string"==typeof t?t:t&&"object"==typeof t?"text"===t.type&&"string"==typeof t.text?t.text:Array.isArray(t.content)?t.content.map(e).join(""):"":""}(e):null}e.s(["adfToPlainText",()=>h,"deleteJiraToken",()=>u,"exchangeJiraCode",()=>p,"getAccessibleResources",()=>g,"getJiraAuthUrl",()=>d,"getJiraClient",()=>f,"getJiraToken",()=>c,"saveJiraToken",()=>l],754493);var w=e.i(862263);function k(e){switch(e){case"new":default:return"todo";case"indeterminate":return"in_progress";case"done":return"done"}}function A(e,t,a){let r=e.fields,s=r.status?.statusCategory?.key??"new";return{id:e.id,trackerId:`jira:${r.project?.key??"unknown"}`,trackerType:"jira",identifier:e.key,title:r.summary,description:h(r.description)??void 0,status:r.status?.name??"Unknown",statusCategory:k(s),assignee:r.assignee?{id:r.assignee.accountId,name:r.assignee.displayName,avatarUrl:r.assignee.avatarUrls?.["48x48"]}:void 0,priority:function(e){if(!e)return;let t=e.toLowerCase();return t.includes("highest")||t.includes("critical")?"urgent":t.includes("high")?"high":t.includes("medium")||t.includes("major")?"medium":t.includes("low")||t.includes("minor")||t.includes("lowest")||t.includes("trivial")?"low":"none"}(r.priority?.name),labels:r.labels??[],createdAt:r.created,updatedAt:r.updated,url:`${t}/browse/${e.key}`}}async function T(e){let t,a=await f(e.projectId);if(!a)throw Error("Not connected to Jira");let r=c(e.projectId);if(!r?.siteUrl)throw Error("Missing Jira site URL");let s=e.jql??(e.projectKey?`project = ${e.projectKey} ORDER BY updated DESC`:"assignee = currentUser() OR reporter = currentUser() ORDER BY updated DESC"),i=e.limit??100,n=[],o=!1;for(;!o&&n.length<i;){let e=await a.searchIssues(s,{nextPageToken:t,maxResults:Math.min(50,i-n.length)});for(let t of e.issues)n.push(function(e,t){let a=e.fields,r=a.status?.statusCategory?.key??"new";return{id:e.id,trackerType:"jira",trackerId:`jira:${a.project?.key??"unknown"}`,identifier:e.key,title:a.summary,description:h(a.description),status:a.status?.name??"Unknown",statusCategory:k(r),assigneeId:a.assignee?.accountId??null,assignee:a.assignee?.displayName??null,assigneeEmail:null,isAssignedToMe:!1,teamId:a.project?.id??null,teamName:a.project?.name??null,teamKey:a.project?.key??null,cycleId:a.customfield_10020?String(a.customfield_10020.id):null,cycleName:a.customfield_10020?.name??null,cycleNumber:a.customfield_10020?a.customfield_10020.id:null,priority:a.priority?.name??null,labels:a.labels??[],url:`${t}/browse/${e.key}`,createdAt:a.created??null,updatedAt:a.updated}}(t,r.siteUrl));o=e.isLast||0===e.issues.length,t=e.nextPageToken}return await (0,w.replaceCachedTrackerItems)({trackerType:"jira",issues:n,complete:o,pulledAtMs:Date.now()}),{pulled:n.length}}async function I(t){let{getTrackerItemSyncState:a,setTrackerItemSyncState:r}=await e.A(410437),s=await a("jira");return(t.refresh||!s?.lastPulledAt)&&(await T({projectId:t.projectId,projectKey:t.projectKey}),await r("jira",0,Date.now())),{pulledAt:s?.lastPulledAt??null}}async function C(e){return{issues:(await (0,w.listCachedTrackerItems)({trackerType:"jira",limit:e?.limit??500})).issues.map(e=>({id:e.id,trackerId:e.trackerId||"jira:default",trackerType:"jira",identifier:e.identifier,title:e.title,description:e.description??void 0,status:e.status,statusCategory:e.statusCategory,assignee:e.assignee?{id:e.assigneeId??e.assignee,name:e.assignee}:void 0,priority:void 0,labels:e.labels??[],createdAt:e.pulledAt,updatedAt:e.updatedAt,url:e.url??"#"}))}}async function v(e,t){let a=await f(e);if(!a)throw Error("Not connected to Jira");let r=c(e),s=r?.siteUrl??"https://example.atlassian.net",i=await a.getIssue(t),n=A(i,s),o=(i.fields.comment?.comments??[]).map(e=>({id:e.id,body:"string"==typeof e.body?e.body:h(e.body)??"",author:{id:e.author.accountId,name:e.author.displayName},createdAt:e.created})),l=(await a.getActivity(t)).map(e=>({id:e.id,type:"update",description:e.items.map(e=>`${e.field}: ${e.fromString??""} → ${e.toString??""}`).join(", "),actor:{id:e.author.accountId,name:e.author.displayName},createdAt:e.created}));return{...n,comments:o,activity:l,metadata:{projectId:i.fields.project?.id,projectKey:i.fields.project?.key,projectName:i.fields.project?.name,issueType:i.fields.issuetype?.name,sprintId:i.fields.customfield_10020?.id,sprintName:i.fields.customfield_10020?.name}}}e.s(["ensureJiraIssueCache",()=>I,"getJiraIssueDetail",()=>v,"jiraStatusCategoryToCanonical",()=>k,"listJiraIssueSummaries",()=>C,"mapJiraIssue",()=>A,"pullJiraIssues",()=>T],607495)}];
2
+
3
+ //# sourceMappingURL=apps_local_9f0fd451._.js.map
@@ -1,12 +1,12 @@
1
- module.exports=[78362,e=>{"use strict";e.i(712513);var t=e.i(902157),i=e.i(750227),s=e.i(260476),a=e.i(581001),r=e.i(862263),n=e.i(488877);let l="global";function u(e){let t=String(e??"").trim().toLowerCase();return t?`project:${t}`:l}function d(e){t.default.mkdirSync(e,{recursive:!0})}function c(e,s){d(i.default.dirname(e));let a=`${e}.tmp-${process.pid}-${Date.now()}`;t.default.writeFileSync(a,s,"utf8"),t.default.renameSync(a,e)}function o(e){return{id:e.id,identifier:e.identifier,title:e.title,url:e.url,status:e.status,assignee:e.assignee,updatedAt:e.updatedAt,labels:e.labels??[]}}function m(e){return{...o(e),description:e.description,assigneeId:e.assigneeId,assigneeEmail:e.assigneeEmail,isAssignedToMe:e.isAssignedToMe,teamId:e.teamId,teamName:e.teamName,teamKey:e.teamKey,cycleId:e.cycleId,cycleName:e.cycleName,cycleNumber:e.cycleNumber,pulledAt:e.pulledAt}}function p(e,t){return e.trim().replace(/[\\/]/g,"-")||t}async function _(e){let t,o=(0,a.getLinearClient)(e.projectId);if(!o)throw Error("Not connected");let m=await o.viewer,_=Date.now(),y=new Date(_).toISOString(),f=0,E=!0,g=[];for(;f<500;){let e=500-f,i=await o.issues({first:Math.min(100,e),after:t,orderBy:"updatedAt"}),s=await Promise.all(i.nodes.map(async e=>{let[t,i,s,a,r]=await Promise.all([e.labels,e.state,e.assignee,e.team,e.cycle]);return{id:e.id,trackerType:"linear",trackerId:e.id,identifier:e.identifier,title:e.title,description:e.description??null,labels:t,url:e.url,status:i?.name??"Unknown",assigneeId:s?.id??null,assignee:s?.name??null,assigneeEmail:s?.email??null,isAssignedToMe:!!(s?.id&&s.id===m.id),teamId:a?.id??null,teamName:a?.name??null,teamKey:a?.key??null,cycleId:r?.id??null,cycleName:r?.name??null,cycleNumber:r?.number??null,updatedAt:e.updatedAt}}));if(g.push(...s),f+=s.length,!i.pageInfo.hasNextPage||!i.pageInfo.endCursor)break;if(f>=500){E=!1;break}t=i.pageInfo.endCursor}await (0,r.replaceCachedTrackerItems)({trackerType:"linear",issues:g,complete:E,pulledAtMs:_}),await (0,r.setTrackerItemSyncState)(l,g.length,_);let T=u(e.projectSlug);return T!==l&&await (0,r.setTrackerItemSyncState)(T,g.length,_),!function(e,t,a){let r=function(e){let t=n.vaultStore.getRootDir(),s=String(e??"").trim();if(s){let e=n.vaultStore.getProjectWithRepos(s),a=e?.slug??s;return i.default.join(t,a,"issues")}return i.default.join(t,"_global","Linear","issues")}(a);d(r);let l=["# Linear Issues","",`Last pulled: ${t}`,""];for(let a of e){let e=i.default.join(r,p(a.identifier,a.id));!function(e,t,i){let a=(0,s.dump)(t,{lineWidth:120,noRefs:!0,sortKeys:!0}).trimEnd(),r=String(i||"").replace(/\r\n/g,"\n").split("\n").map(e=>e.replace(/\s+$/g,"")).join("\n").trim();c(e,r?`---
2
- ${a}
1
+ module.exports=[78362,e=>{"use strict";e.i(712513);var t=e.i(902157),i=e.i(750227),a=e.i(260476),s=e.i(581001),r=e.i(862263),n=e.i(488877);let l="global";function u(e){let t=String(e??"").trim().toLowerCase();return t?`project:${t}`:l}function d(e){t.default.mkdirSync(e,{recursive:!0})}function c(e,a){d(i.default.dirname(e));let s=`${e}.tmp-${process.pid}-${Date.now()}`;t.default.writeFileSync(s,a,"utf8"),t.default.renameSync(s,e)}function o(e){return{id:e.id,identifier:e.identifier,title:e.title,url:e.url,status:e.status,assignee:e.assignee,updatedAt:e.updatedAt,labels:e.labels??[]}}function m(e){return{...o(e),description:e.description,assigneeId:e.assigneeId,assigneeEmail:e.assigneeEmail,isAssignedToMe:e.isAssignedToMe,teamId:e.teamId,teamName:e.teamName,teamKey:e.teamKey,cycleId:e.cycleId,cycleName:e.cycleName,cycleNumber:e.cycleNumber,pulledAt:e.pulledAt}}function p(e,t){return e.trim().replace(/[\\/]/g,"-")||t}async function _(e){let t,o=(0,s.getLinearClient)(e.projectId);if(!o)throw Error("Not connected");let m=await o.viewer,_=Date.now(),y=new Date(_).toISOString(),f=0,E=!0,g=[];for(;f<500;){let e=500-f,i=await o.issues({first:Math.min(100,e),after:t,orderBy:"updatedAt"}),a=await Promise.all(i.nodes.map(async e=>{let[t,i,a,s,r]=await Promise.all([e.labels,e.state,e.assignee,e.team,e.cycle]);return{id:e.id,trackerType:"linear",trackerId:e.id,identifier:e.identifier,title:e.title,description:e.description??null,labels:t,url:e.url,status:i?.name??"Unknown",assigneeId:a?.id??null,assignee:a?.name??null,assigneeEmail:a?.email??null,isAssignedToMe:!!(a?.id&&a.id===m.id),teamId:s?.id??null,teamName:s?.name??null,teamKey:s?.key??null,cycleId:r?.id??null,cycleName:r?.name??null,cycleNumber:r?.number??null,createdAt:e.createdAt,updatedAt:e.updatedAt}}));if(g.push(...a),f+=a.length,!i.pageInfo.hasNextPage||!i.pageInfo.endCursor)break;if(f>=500){E=!1;break}t=i.pageInfo.endCursor}await (0,r.replaceCachedTrackerItems)({trackerType:"linear",issues:g,complete:E,pulledAtMs:_}),await (0,r.setTrackerItemSyncState)(l,g.length,_);let T=u(e.projectSlug);return T!==l&&await (0,r.setTrackerItemSyncState)(T,g.length,_),!function(e,t,s){let r=function(e){let t=n.vaultStore.getRootDir(),a=String(e??"").trim();if(a){let e=n.vaultStore.getProjectWithRepos(a),s=e?.slug??a;return i.default.join(t,s,"issues")}return i.default.join(t,"_global","Linear","issues")}(s);d(r);let l=["# Linear Issues","",`Last pulled: ${t}`,""];for(let s of e){let e=i.default.join(r,p(s.identifier,s.id));!function(e,t,i){let s=(0,a.dump)(t,{lineWidth:120,noRefs:!0,sortKeys:!0}).trimEnd(),r=String(i||"").replace(/\r\n/g,"\n").split("\n").map(e=>e.replace(/\s+$/g,"")).join("\n").trim();c(e,r?`---
2
+ ${s}
3
3
  ---
4
4
  ${r}
5
5
  `:`---
6
- ${a}
6
+ ${s}
7
7
  ---
8
- `)}(i.default.join(e,"README.md"),{type:"linear-issue",issue_id:a.id,identifier:a.identifier,title:a.title,status:a.status,assignee_id:a.assigneeId??null,assignee_name:a.assignee??null,assignee_email:a.assigneeEmail??null,team_id:a.teamId??null,team_name:a.teamName??null,team_key:a.teamKey??null,cycle_id:a.cycleId??null,cycle_name:a.cycleName??null,cycle_number:a.cycleNumber??null,url:a.url??null,updated_at:a.updatedAt,pulled_at:t},[`# ${a.identifier}: ${a.title}`,"",`- Status: ${a.status}`,`- Assignee: ${a.assignee??"Unassigned"}`,a.teamName?`- Team: ${a.teamName}`:null,a.cycleName||null!=a.cycleNumber?`- Cycle: ${a.cycleName??`Cycle ${a.cycleNumber}`}`:null,a.labels?.length?`- Labels: ${a.labels.join(", ")}`:null,`- Updated in Linear: ${a.updatedAt}`,`- Pulled locally: ${t}`,a.url?`- URL: ${a.url}`:null,"","## Description","",a.description?.trim()||"_No description provided._"].filter(e=>null!==e).join("\n")),l.push(`- [${a.identifier}](${encodeURIComponent(p(a.identifier,a.id))}/README.md) - ${a.title} (${a.status})`)}c(i.default.join(r,"_index.md"),`${l.join("\n")}
9
- `)}(g,y,e.projectSlug),{issueCount:g.length,complete:E,pulledAt:y}}async function y(e){let t=!!e.refresh,i=u(e.projectSlug);if(!t){let[e,t]=await Promise.all([(0,r.countCachedTrackerItems)(),(0,r.getTrackerItemSyncState)(i)]);if(e>0&&t)return null}return(0,a.getLinearClient)(e.projectId)?_({projectId:e.projectId,projectSlug:e.projectSlug}):null}async function f(e={}){let[t,i]=await Promise.all([(0,r.listCachedTrackerItems)(e),(0,r.getTrackerItemSyncState)(l)]);return{issues:t.issues.map(o),pageInfo:t.pageInfo,syncState:{lastPulledAt:i?.lastPulledAt??null}}}async function E(e){return(await (0,r.getCachedTrackerItemContexts)(e)).map(m)}e.s(["ensureLinearIssueCache",()=>y,"getLinearIssueContexts",()=>E,"listLinearIssueSummaries",()=>f,"pullLinearIssues",()=>_])},712513,(e,t,i)=>{},862263,e=>{"use strict";e.i(712513);var t=e.i(902157),i=e.i(660526),s=e.i(750227),a=e.i(769025);let r=process.env.AGX_TRACKER_DIR?.trim()||s.default.join(process.env.AGX_DATA_DIR||s.default.join(i.default.homedir(),".agx"),"tracker"),n=s.default.join(r,"items.sqlite");function l(e){return e?.trim()||null}function u(e){return"number"==typeof e&&Number.isFinite(e)?e:null}function d(e){return Array.isArray(e)?Array.from(new Set(e.map(e=>"string"==typeof e?e.trim():"").filter(Boolean))):[]}function c(e){return new Date(e).toISOString()}function o(e){let t=e.trim().toLowerCase();return["done","completed","closed"].includes(t)?"done":["cancelled","canceled","duplicate"].includes(t)?"cancelled":["in progress","in review","started","testing"].includes(t)?"in_progress":"todo"}function m(e){return{id:e.issue_id,trackerType:e.tracker_type,trackerId:e.tracker_id,identifier:e.identifier,title:e.title,description:e.description,labels:function(e){if(!e)return[];try{return d(JSON.parse(e))}catch{return[]}}(e.labels_json),url:e.url,status:e.status,statusCategory:e.status_category||o(e.status),assigneeId:e.assignee_id,assignee:e.assignee_name,assigneeEmail:e.assignee_email,isAssignedToMe:1===e.is_assigned_to_me,teamId:e.team_id,teamName:e.team_name,teamKey:e.team_key,cycleId:e.cycle_id,cycleName:e.cycle_name,cycleNumber:e.cycle_number,priority:e.priority,metadata:e.metadata_json?JSON.parse(e.metadata_json):{},updatedAt:e.updated_at,pulledAt:c(e.pulled_at)}}function p(e,t,i,s){e.prepare(`PRAGMA table_info(${t})`).all().some(e=>e.name===i)||e.exec(`ALTER TABLE ${t} ADD COLUMN ${s}`)}async function _(e){await t.promises.mkdir(r,{recursive:!0});let i=new(process.getBuiltinModule("node:sqlite")).DatabaseSync(n);(0,a.pragmaSet)(i,"journal_mode = WAL");try{return i.exec(`
8
+ `)}(i.default.join(e,"README.md"),{type:"linear-issue",issue_id:s.id,identifier:s.identifier,title:s.title,status:s.status,assignee_id:s.assigneeId??null,assignee_name:s.assignee??null,assignee_email:s.assigneeEmail??null,team_id:s.teamId??null,team_name:s.teamName??null,team_key:s.teamKey??null,cycle_id:s.cycleId??null,cycle_name:s.cycleName??null,cycle_number:s.cycleNumber??null,url:s.url??null,updated_at:s.updatedAt,pulled_at:t},[`# ${s.identifier}: ${s.title}`,"",`- Status: ${s.status}`,`- Assignee: ${s.assignee??"Unassigned"}`,s.teamName?`- Team: ${s.teamName}`:null,s.cycleName||null!=s.cycleNumber?`- Cycle: ${s.cycleName??`Cycle ${s.cycleNumber}`}`:null,s.labels?.length?`- Labels: ${s.labels.join(", ")}`:null,`- Updated in Linear: ${s.updatedAt}`,`- Pulled locally: ${t}`,s.url?`- URL: ${s.url}`:null,"","## Description","",s.description?.trim()||"_No description provided._"].filter(e=>null!==e).join("\n")),l.push(`- [${s.identifier}](${encodeURIComponent(p(s.identifier,s.id))}/README.md) - ${s.title} (${s.status})`)}c(i.default.join(r,"_index.md"),`${l.join("\n")}
9
+ `)}(g,y,e.projectSlug),{issueCount:g.length,complete:E,pulledAt:y}}async function y(e){let t=!!e.refresh,i=u(e.projectSlug);if(!t){let[e,t]=await Promise.all([(0,r.countCachedTrackerItems)(),(0,r.getTrackerItemSyncState)(i)]);if(e>0&&t)return null}return(0,s.getLinearClient)(e.projectId)?_({projectId:e.projectId,projectSlug:e.projectSlug}):null}async function f(e={}){let[t,i]=await Promise.all([(0,r.listCachedTrackerItems)(e),(0,r.getTrackerItemSyncState)(l)]);return{issues:t.issues.map(o),pageInfo:t.pageInfo,syncState:{lastPulledAt:i?.lastPulledAt??null}}}async function E(e){return(await (0,r.getCachedTrackerItemContexts)(e)).map(m)}e.s(["ensureLinearIssueCache",()=>y,"getLinearIssueContexts",()=>E,"listLinearIssueSummaries",()=>f,"pullLinearIssues",()=>_])},712513,(e,t,i)=>{},862263,e=>{"use strict";e.i(712513);var t=e.i(902157),i=e.i(660526),a=e.i(750227),s=e.i(769025);let r=process.env.AGX_TRACKER_DIR?.trim()||a.default.join(process.env.AGX_DATA_DIR||a.default.join(i.default.homedir(),".agx"),"tracker"),n=a.default.join(r,"items.sqlite");function l(e){return e?.trim()||null}function u(e){return"number"==typeof e&&Number.isFinite(e)?e:null}function d(e){return Array.isArray(e)?Array.from(new Set(e.map(e=>"string"==typeof e?e.trim():"").filter(Boolean))):[]}function c(e){return new Date(e).toISOString()}function o(e){let t=e.trim().toLowerCase();return["done","completed","closed"].includes(t)?"done":["cancelled","canceled","duplicate"].includes(t)?"cancelled":["in progress","in review","started","testing"].includes(t)?"in_progress":"todo"}function m(e){return{id:e.issue_id,trackerType:e.tracker_type,trackerId:e.tracker_id,identifier:e.identifier,title:e.title,description:e.description,labels:function(e){if(!e)return[];try{return d(JSON.parse(e))}catch{return[]}}(e.labels_json),url:e.url,status:e.status,statusCategory:e.status_category||o(e.status),assigneeId:e.assignee_id,assignee:e.assignee_name,assigneeEmail:e.assignee_email,isAssignedToMe:1===e.is_assigned_to_me,teamId:e.team_id,teamName:e.team_name,teamKey:e.team_key,cycleId:e.cycle_id,cycleName:e.cycle_name,cycleNumber:e.cycle_number,priority:e.priority,metadata:e.metadata_json?JSON.parse(e.metadata_json):{},createdAt:e.created_at,updatedAt:e.updated_at,pulledAt:c(e.pulled_at)}}function p(e,t,i,a){e.prepare(`PRAGMA table_info(${t})`).all().some(e=>e.name===i)||e.exec(`ALTER TABLE ${t} ADD COLUMN ${a}`)}async function _(e){await t.promises.mkdir(r,{recursive:!0});let i=new(process.getBuiltinModule("node:sqlite")).DatabaseSync(n);(0,s.pragmaSet)(i,"journal_mode = WAL");try{return i.exec(`
10
10
  CREATE TABLE IF NOT EXISTS tracker_items (
11
11
  issue_id TEXT PRIMARY KEY,
12
12
  tracker_type TEXT NOT NULL DEFAULT 'linear',
@@ -66,14 +66,14 @@ ${a}
66
66
  VALUES (?, ?, ?)
67
67
  ON CONFLICT(scope_key) DO UPDATE SET
68
68
  last_pulled_at = excluded.last_pulled_at,
69
- issue_count = excluded.issue_count`).run(String(t.scope_key),Number(t.last_pulled_at),Number(t.issue_count));e.exec("DROP TABLE IF EXISTS linear_issue_sync_state")}}(i),p(i,"tracker_items","labels_json","labels_json TEXT NOT NULL DEFAULT '[]'"),p(i,"tracker_items","tracker_type","tracker_type TEXT NOT NULL DEFAULT 'linear'"),p(i,"tracker_items","tracker_id","tracker_id TEXT NOT NULL DEFAULT ''"),p(i,"tracker_items","status_category","status_category TEXT NOT NULL DEFAULT 'todo'"),p(i,"tracker_items","priority","priority TEXT"),p(i,"tracker_items","metadata_json","metadata_json TEXT"),e(i)}finally{i.close()}}async function y(e){let t=e.pulledAtMs??Date.now(),i=e.trackerType;return _(s=>{s.exec("BEGIN");try{let r=s.prepare(`
69
+ issue_count = excluded.issue_count`).run(String(t.scope_key),Number(t.last_pulled_at),Number(t.issue_count));e.exec("DROP TABLE IF EXISTS linear_issue_sync_state")}}(i),p(i,"tracker_items","labels_json","labels_json TEXT NOT NULL DEFAULT '[]'"),p(i,"tracker_items","tracker_type","tracker_type TEXT NOT NULL DEFAULT 'linear'"),p(i,"tracker_items","tracker_id","tracker_id TEXT NOT NULL DEFAULT ''"),p(i,"tracker_items","status_category","status_category TEXT NOT NULL DEFAULT 'todo'"),p(i,"tracker_items","priority","priority TEXT"),p(i,"tracker_items","metadata_json","metadata_json TEXT"),p(i,"tracker_items","created_at","created_at TEXT"),e(i)}finally{i.close()}}async function y(e){let t=e.pulledAtMs??Date.now(),i=e.trackerType;return _(a=>{a.exec("BEGIN");try{let r=a.prepare(`
70
70
  INSERT INTO tracker_items (
71
71
  issue_id, tracker_type, tracker_id, identifier, title, description,
72
72
  labels_json, url, status, status_category,
73
73
  assignee_id, assignee_name, assignee_email, is_assigned_to_me,
74
74
  team_id, team_name, team_key, cycle_id, cycle_name, cycle_number,
75
- priority, metadata_json, updated_at, pulled_at
76
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
75
+ priority, metadata_json, created_at, updated_at, pulled_at
76
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
77
77
  ON CONFLICT(issue_id) DO UPDATE SET
78
78
  tracker_type = excluded.tracker_type,
79
79
  tracker_id = excluded.tracker_id,
@@ -96,26 +96,27 @@ ${a}
96
96
  cycle_number = excluded.cycle_number,
97
97
  priority = excluded.priority,
98
98
  metadata_json = excluded.metadata_json,
99
+ created_at = excluded.created_at,
99
100
  updated_at = excluded.updated_at,
100
101
  pulled_at = excluded.pulled_at
101
- `);for(let s of e.issues){var a;let e=s.statusCategory??o(s.status);r.run(s.id.trim(),(s.trackerType??i).trim(),(s.trackerId??"").trim(),s.identifier.trim(),s.title.trim(),l(s.description??null),(a=s.labels,JSON.stringify(d(a??[]))),l(s.url??null),s.status.trim(),e,l(s.assigneeId??null),l(s.assignee??null),l(s.assigneeEmail??null),+!!s.isAssignedToMe,l(s.teamId??null),l(s.teamName??null),l(s.teamKey??null),l(s.cycleId??null),l(s.cycleName??null),u(s.cycleNumber??null),l(s.priority??null),s.metadata?JSON.stringify(s.metadata):null,s.updatedAt.trim(),t)}if(!1!==e.complete)if(0===e.issues.length)s.prepare("DELETE FROM tracker_items WHERE tracker_type = ?").run(i);else{let t=e.issues.map(()=>"?").join(", ");s.prepare(`DELETE FROM tracker_items WHERE tracker_type = ? AND issue_id NOT IN (${t})`).run(i,...e.issues.map(e=>e.id.trim()))}s.exec("COMMIT")}catch(e){throw s.exec("ROLLBACK"),e}})}async function f(e,t,i=Date.now()){let s=e.trim()||"global";return _(e=>{e.prepare(`
102
+ `);for(let a of e.issues){var s;let e=a.statusCategory??o(a.status);r.run(a.id.trim(),(a.trackerType??i).trim(),(a.trackerId??"").trim(),a.identifier.trim(),a.title.trim(),l(a.description??null),(s=a.labels,JSON.stringify(d(s??[]))),l(a.url??null),a.status.trim(),e,l(a.assigneeId??null),l(a.assignee??null),l(a.assigneeEmail??null),+!!a.isAssignedToMe,l(a.teamId??null),l(a.teamName??null),l(a.teamKey??null),l(a.cycleId??null),l(a.cycleName??null),u(a.cycleNumber??null),l(a.priority??null),a.metadata?JSON.stringify(a.metadata):null,l(a.createdAt??null),a.updatedAt.trim(),t)}if(!1!==e.complete)if(0===e.issues.length)a.prepare("DELETE FROM tracker_items WHERE tracker_type = ?").run(i);else{let t=e.issues.map(()=>"?").join(", ");a.prepare(`DELETE FROM tracker_items WHERE tracker_type = ? AND issue_id NOT IN (${t})`).run(i,...e.issues.map(e=>e.id.trim()))}a.exec("COMMIT")}catch(e){throw a.exec("ROLLBACK"),e}})}async function f(e,t,i=Date.now()){let a=e.trim()||"global";return _(e=>{e.prepare(`
102
103
  INSERT INTO tracker_item_sync_state (scope_key, last_pulled_at, issue_count)
103
104
  VALUES (?, ?, ?)
104
105
  ON CONFLICT(scope_key) DO UPDATE SET
105
106
  last_pulled_at = excluded.last_pulled_at,
106
107
  issue_count = excluded.issue_count
107
- `).run(s,i,t)})}async function E(e="global"){let t=e.trim()||"global";return _(e=>{let i=e.prepare(`SELECT scope_key, last_pulled_at, issue_count
108
+ `).run(a,i,t)})}async function E(e="global"){let t=e.trim()||"global";return _(e=>{let i=e.prepare(`SELECT scope_key, last_pulled_at, issue_count
108
109
  FROM tracker_item_sync_state
109
110
  WHERE scope_key = ?
110
- LIMIT 1`).get(t);return i?{scopeKey:i.scope_key,lastPulledAt:c(i.last_pulled_at),issueCount:i.issue_count}:null})}async function g(e){return _(t=>{if(e){let i=t.prepare("SELECT COUNT(*) AS count FROM tracker_items WHERE tracker_type = ?").get(e);return i?.count??0}let i=t.prepare("SELECT COUNT(*) AS count FROM tracker_items").get();return i?.count??0})}async function T(e={}){let t=Number.isFinite(e.limit)?Math.min(Math.max(Number(e.limit),1),500):50,i=Number.isFinite(Number(e.cursor))?Math.max(Number(e.cursor),0):0;return _(s=>{let a,r=[],n=[];e.trackerType&&(r.push("tracker_type = ?"),n.push(e.trackerType));let u=l(e.search??null);if(u){let e=`%${u.toLowerCase().replace(/[\\%_]/g,"\\$&")}%`;r.push("(LOWER(identifier) LIKE ? ESCAPE '\\' OR LOWER(title) LIKE ? ESCAPE '\\' OR LOWER(COALESCE(description, '')) LIKE ? ESCAPE '\\')"),n.push(e,e,e)}let d=Array.from(new Set((e.statuses??[]).map(e=>l(e)).filter(e=>!!e).map(e=>e.toLowerCase())));d.length>0&&(r.push(`LOWER(status) IN (${d.map(()=>"?").join(", ")})`),n.push(...d));let c=e.statusCategories;c&&c.length>0&&(r.push(`status_category IN (${c.map(()=>"?").join(", ")})`),n.push(...c));let o=Array.from(new Set((e.assigneeIds??[]).map(e=>l(e)).filter(e=>!!e)));o.length>0&&(r.push(`assignee_id IN (${o.map(()=>"?").join(", ")})`),n.push(...o)),e.assignedToMe&&r.push("is_assigned_to_me = 1");let p=l(e.teamId??null);p&&(r.push("team_id = ?"),n.push(p));let _=l(e.cycleId??null);if(_&&(r.push("cycle_id = ?"),n.push(_)),e.hasActivity&&e.activityMap){let t=Array.from(e.activityMap.keys());if(0===t.length)return{issues:[],pageInfo:{hasNextPage:!1,endCursor:null}};r.push(`issue_id IN (${t.map(()=>"?").join(", ")})`),n.push(...t)}let y=r.length>0?`WHERE ${r.join(" AND ")}`:"",f=e.sortBy??"activity",E=e.sortDir??"desc",g="asc"===E?"ASC":"DESC";if("activity"===f&&e.activityMap&&e.activityMap.size>0){let a=Array.from(e.activityMap.keys()),r=a.map(()=>"?").join(", "),l=y?`${y} AND issue_id IN (${r})`:`WHERE issue_id IN (${r})`,u=s.prepare(`SELECT * FROM tracker_items ${l} ORDER BY updated_at DESC, identifier ASC`).all(...n,...a),d=e.activityMap;u.sort((e,t)=>{let i=d.get(e.issue_id)??"",s=d.get(t.issue_id)??"";return"desc"===E?s.localeCompare(i):i.localeCompare(s)});let c=[];if(!e.hasActivity){let e=y?`${y} AND issue_id NOT IN (${r})`:`WHERE issue_id NOT IN (${r})`;c=s.prepare(`SELECT * FROM tracker_items ${e} ORDER BY updated_at DESC, identifier ASC`).all(...n,...a)}let o=[...u,...c].slice(i,i+t+1),p=o.length>t,_=p?o.slice(0,t):o,f=p?String(i+t):null;return{issues:_.map(m),pageInfo:{hasNextPage:p,endCursor:f}}}switch(f){case"identifier":a=`ORDER BY identifier ${g}`;break;case"status":a=`ORDER BY LOWER(status) ${g}, identifier ASC`;break;case"created":a=`ORDER BY pulled_at ${g}, identifier ASC`;break;default:a=`ORDER BY updated_at ${g}, identifier ASC`}let T=s.prepare(`SELECT *
111
+ LIMIT 1`).get(t);return i?{scopeKey:i.scope_key,lastPulledAt:c(i.last_pulled_at),issueCount:i.issue_count}:null})}async function g(e){return _(t=>{if(e){let i=t.prepare("SELECT COUNT(*) AS count FROM tracker_items WHERE tracker_type = ?").get(e);return i?.count??0}let i=t.prepare("SELECT COUNT(*) AS count FROM tracker_items").get();return i?.count??0})}async function T(e={}){let t=Number.isFinite(e.limit)?Math.min(Math.max(Number(e.limit),1),500):50,i=Number.isFinite(Number(e.cursor))?Math.max(Number(e.cursor),0):0;return _(a=>{let s,r=[],n=[];e.trackerType&&(r.push("tracker_type = ?"),n.push(e.trackerType));let u=l(e.search??null);if(u){let e=`%${u.toLowerCase().replace(/[\\%_]/g,"\\$&")}%`;r.push("(LOWER(identifier) LIKE ? ESCAPE '\\' OR LOWER(title) LIKE ? ESCAPE '\\' OR LOWER(COALESCE(description, '')) LIKE ? ESCAPE '\\')"),n.push(e,e,e)}let d=Array.from(new Set((e.statuses??[]).map(e=>l(e)).filter(e=>!!e).map(e=>e.toLowerCase())));d.length>0&&(r.push(`LOWER(status) IN (${d.map(()=>"?").join(", ")})`),n.push(...d));let c=e.statusCategories;c&&c.length>0&&(r.push(`status_category IN (${c.map(()=>"?").join(", ")})`),n.push(...c));let o=Array.from(new Set((e.assigneeIds??[]).map(e=>l(e)).filter(e=>!!e)));o.length>0&&(r.push(`assignee_id IN (${o.map(()=>"?").join(", ")})`),n.push(...o)),e.assignedToMe&&r.push("is_assigned_to_me = 1");let p=l(e.teamId??null);p&&(r.push("team_id = ?"),n.push(p));let _=l(e.cycleId??null);if(_&&(r.push("cycle_id = ?"),n.push(_)),e.hasActivity&&e.activityMap){let t=Array.from(e.activityMap.keys());if(0===t.length)return{issues:[],pageInfo:{hasNextPage:!1,endCursor:null}};r.push(`issue_id IN (${t.map(()=>"?").join(", ")})`),n.push(...t)}let y=r.length>0?`WHERE ${r.join(" AND ")}`:"",f=e.sortBy??"activity",E=e.sortDir??"desc",g="asc"===E?"ASC":"DESC";if("activity"===f&&e.activityMap&&e.activityMap.size>0){let s=Array.from(e.activityMap.keys()),r=s.map(()=>"?").join(", "),l=y?`${y} AND issue_id IN (${r})`:`WHERE issue_id IN (${r})`,u=a.prepare(`SELECT * FROM tracker_items ${l} ORDER BY updated_at DESC, identifier ASC`).all(...n,...s),d=e.activityMap;u.sort((e,t)=>{let i=d.get(e.issue_id)??"",a=d.get(t.issue_id)??"";return"desc"===E?a.localeCompare(i):i.localeCompare(a)});let c=[];if(!e.hasActivity){let e=y?`${y} AND issue_id NOT IN (${r})`:`WHERE issue_id NOT IN (${r})`;c=a.prepare(`SELECT * FROM tracker_items ${e} ORDER BY updated_at DESC, identifier ASC`).all(...n,...s)}let o=[...u,...c].slice(i,i+t+1),p=o.length>t,_=p?o.slice(0,t):o,f=p?String(i+t):null;return{issues:_.map(m),pageInfo:{hasNextPage:p,endCursor:f}}}switch(f){case"identifier":s=`ORDER BY identifier ${g}`;break;case"status":s=`ORDER BY LOWER(status) ${g}, identifier ASC`;break;case"created":s=`ORDER BY COALESCE(created_at, updated_at) ${g}, identifier ASC`;break;default:s=`ORDER BY updated_at ${g}, identifier ASC`}let T=a.prepare(`SELECT *
111
112
  FROM tracker_items
112
113
  ${y}
113
- ${a}
114
- LIMIT ? OFFSET ?`).all(...n,t+1,i),I=T.length>t,S=I?T.slice(0,t):T,N=I?String(i+t):null;return{issues:S.map(m),pageInfo:{hasNextPage:I,endCursor:N}}})}async function I(e){return _(t=>{let i=e?"SELECT DISTINCT status FROM tracker_items WHERE TRIM(status) <> '' AND tracker_type = ? ORDER BY LOWER(status) ASC":"SELECT DISTINCT status FROM tracker_items WHERE TRIM(status) <> '' ORDER BY LOWER(status) ASC";return(e?t.prepare(i).all(e):t.prepare(i).all()).map(e=>e.status.trim()).filter(Boolean)})}async function S(e){let t=e.issueId.trim(),i=e.status.trim(),s=e.updatedAt.trim();if(!t||!i||!s)return;let a=e.pulledAtMs??Date.now();return _(e=>{e.prepare(`UPDATE tracker_items
114
+ ${s}
115
+ LIMIT ? OFFSET ?`).all(...n,t+1,i),I=T.length>t,S=I?T.slice(0,t):T,N=I?String(i+t):null;return{issues:S.map(m),pageInfo:{hasNextPage:I,endCursor:N}}})}async function I(e){return _(t=>{let i=e?"SELECT DISTINCT status FROM tracker_items WHERE TRIM(status) <> '' AND tracker_type = ? ORDER BY LOWER(status) ASC":"SELECT DISTINCT status FROM tracker_items WHERE TRIM(status) <> '' ORDER BY LOWER(status) ASC";return(e?t.prepare(i).all(e):t.prepare(i).all()).map(e=>e.status.trim()).filter(Boolean)})}async function S(e){let t=e.issueId.trim(),i=e.status.trim(),a=e.updatedAt.trim();if(!t||!i||!a)return;let s=e.pulledAtMs??Date.now();return _(e=>{e.prepare(`UPDATE tracker_items
115
116
  SET status = ?, status_category = ?, updated_at = ?, pulled_at = ?
116
- WHERE issue_id = ?`).run(i,o(i),s,a,t)})}async function N(e){let t=Array.from(new Set(e.map(e=>e.trim()).filter(Boolean)));return 0===t.length?[]:_(e=>{let i=t.map(()=>"?").join(", "),s=new Map(e.prepare(`SELECT *
117
+ WHERE issue_id = ?`).run(i,o(i),a,s,t)})}async function N(e){let t=Array.from(new Set(e.map(e=>e.trim()).filter(Boolean)));return 0===t.length?[]:_(e=>{let i=t.map(()=>"?").join(", "),a=new Map(e.prepare(`SELECT *
117
118
  FROM tracker_items
118
- WHERE issue_id IN (${i})`).all(...t).map(e=>[e.issue_id,m(e)]));return t.map(e=>s.get(e)).filter(e=>!!e)})}e.s(["countCachedLinearIssues",0,g,"countCachedTrackerItems",()=>g,"getCachedLinearIssueContexts",0,N,"getCachedTrackerItemContexts",()=>N,"getLinearIssueSyncState",0,E,"getTrackerItemSyncState",()=>E,"listCachedLinearIssueStatuses",0,I,"listCachedLinearIssues",0,T,"listCachedTrackerItemStatuses",()=>I,"listCachedTrackerItems",()=>T,"replaceCachedLinearIssues",0,y,"replaceCachedTrackerItems",()=>y,"setLinearIssueSyncState",0,f,"setTrackerItemSyncState",()=>f,"updateCachedLinearIssueStatus",0,S,"updateCachedTrackerItemStatus",()=>S])},581001,e=>{"use strict";e.i(712513);var t=e.i(902157),i=e.i(660526),s=e.i(750227);let a=s.default.join((0,i.homedir)(),".agx");function r(e,t){return s.default.join(a,"projects",e,"integrations",`${t}.json`)}function n(e,i){if(!e)return null;try{let s=(0,t.readFileSync)(r(e,i),"utf8");return JSON.parse(s)}catch{return null}}function l(e,i,a){if(!e)throw Error("projectId is required to save a ticket token");let n=r(e,i),l=s.default.dirname(n);(0,t.existsSync)(l)||(0,t.mkdirSync)(l,{recursive:!0}),(0,t.writeFileSync)(n,JSON.stringify(a,null,2))}function u(e,i){if(e)try{(0,t.unlinkSync)(r(e,i))}catch{}}function d(e){if(null===e)return"null";if(Array.isArray(e))return`[${e.map(d).join(", ")}]`;if("string"==typeof e)return JSON.stringify(e);if("number"==typeof e||"boolean"==typeof e)return String(e);if("object"==typeof e){let t=Object.entries(e).filter(([,e])=>void 0!==e);return`{ ${t.map(([e,t])=>`${e}: ${d(t)}`).join(", ")} }`}throw Error(`Unsupported GraphQL value: ${typeof e}`)}class c{accessToken;constructor(e){this.accessToken=e}get viewer(){return this.request("query { viewer { id name email } }").then(e=>e.viewer)}async users(){return(await this.request(`query {
119
+ WHERE issue_id IN (${i})`).all(...t).map(e=>[e.issue_id,m(e)]));return t.map(e=>a.get(e)).filter(e=>!!e)})}e.s(["countCachedLinearIssues",0,g,"countCachedTrackerItems",()=>g,"getCachedLinearIssueContexts",0,N,"getCachedTrackerItemContexts",()=>N,"getLinearIssueSyncState",0,E,"getTrackerItemSyncState",()=>E,"listCachedLinearIssueStatuses",0,I,"listCachedLinearIssues",0,T,"listCachedTrackerItemStatuses",()=>I,"listCachedTrackerItems",()=>T,"replaceCachedLinearIssues",0,y,"replaceCachedTrackerItems",()=>y,"setLinearIssueSyncState",0,f,"setTrackerItemSyncState",()=>f,"updateCachedLinearIssueStatus",0,S,"updateCachedTrackerItemStatus",()=>S])},581001,e=>{"use strict";e.i(712513);var t=e.i(902157),i=e.i(660526),a=e.i(750227);let s=a.default.join((0,i.homedir)(),".agx");function r(e,t){return a.default.join(s,"projects",e,"integrations",`${t}.json`)}function n(e,i){if(!e)return null;try{let a=(0,t.readFileSync)(r(e,i),"utf8");return JSON.parse(a)}catch{return null}}function l(e,i,s){if(!e)throw Error("projectId is required to save a ticket token");let n=r(e,i),l=a.default.dirname(n);(0,t.existsSync)(l)||(0,t.mkdirSync)(l,{recursive:!0}),(0,t.writeFileSync)(n,JSON.stringify(s,null,2))}function u(e,i){if(e)try{(0,t.unlinkSync)(r(e,i))}catch{}}function d(e){if(null===e)return"null";if(Array.isArray(e))return`[${e.map(d).join(", ")}]`;if("string"==typeof e)return JSON.stringify(e);if("number"==typeof e||"boolean"==typeof e)return String(e);if("object"==typeof e){let t=Object.entries(e).filter(([,e])=>void 0!==e);return`{ ${t.map(([e,t])=>`${e}: ${d(t)}`).join(", ")} }`}throw Error(`Unsupported GraphQL value: ${typeof e}`)}class c{accessToken;constructor(e){this.accessToken=e}get viewer(){return this.request("query { viewer { id name email } }").then(e=>e.viewer)}async users(){return(await this.request(`query {
119
120
  users(first: 100) {
120
121
  nodes {
121
122
  id
@@ -141,7 +142,7 @@ ${a}
141
142
  }
142
143
  }
143
144
  }
144
- }`)).issueLabels.nodes.filter(e=>e.name.trim().length>0).map(e=>({id:e.id,name:e.name.trim(),color:e.color,teamId:e.team?.id??null,teamName:e.team?.name??null})).sort((e,t)=>e.name.localeCompare(t.name))}async createIssueLabel(e){let t=e.name.trim();if(!t)throw Error("Linear label name is required");let i={name:t,...e.description?.trim()?{description:e.description.trim()}:{},...e.color?.trim()?{color:e.color.trim()}:{},...e.teamId?.trim()?{teamId:e.teamId.trim()}:{}},s=await this.request(`mutation {
145
+ }`)).issueLabels.nodes.filter(e=>e.name.trim().length>0).map(e=>({id:e.id,name:e.name.trim(),color:e.color,teamId:e.team?.id??null,teamName:e.team?.name??null})).sort((e,t)=>e.name.localeCompare(t.name))}async createIssueLabel(e){let t=e.name.trim();if(!t)throw Error("Linear label name is required");let i={name:t,...e.description?.trim()?{description:e.description.trim()}:{},...e.color?.trim()?{color:e.color.trim()}:{},...e.teamId?.trim()?{teamId:e.teamId.trim()}:{}},a=await this.request(`mutation {
145
146
  issueLabelCreate(input: ${d(i)}) {
146
147
  success
147
148
  issueLabel {
@@ -154,7 +155,7 @@ ${a}
154
155
  }
155
156
  }
156
157
  }
157
- }`).then(e=>e.issueLabelCreate);if(!s.success)throw Error(`Linear rejected the label creation for "${t}"`);return{id:s.issueLabel.id,name:s.issueLabel.name.trim(),color:s.issueLabel.color,teamId:s.issueLabel.team?.id??null,teamName:s.issueLabel.team?.name??null}}async issues(e){let t,i=(t=[`first: ${e.first}`],e.after&&t.push(`after: ${JSON.stringify(e.after)}`),e.orderBy&&t.push(`orderBy: ${e.orderBy}`),e.filter&&Object.keys(e.filter).length>0&&t.push(`filter: ${d(e.filter)}`),t.join(", ")),s=await this.request(`query {
158
+ }`).then(e=>e.issueLabelCreate);if(!a.success)throw Error(`Linear rejected the label creation for "${t}"`);return{id:a.issueLabel.id,name:a.issueLabel.name.trim(),color:a.issueLabel.color,teamId:a.issueLabel.team?.id??null,teamName:a.issueLabel.team?.name??null}}async issues(e){let t,i=(t=[`first: ${e.first}`],e.after&&t.push(`after: ${JSON.stringify(e.after)}`),e.orderBy&&t.push(`orderBy: ${e.orderBy}`),e.filter&&Object.keys(e.filter).length>0&&t.push(`filter: ${d(e.filter)}`),t.join(", ")),a=await this.request(`query {
158
159
  issues(${i}) {
159
160
  nodes {
160
161
  id
@@ -162,6 +163,7 @@ ${a}
162
163
  title
163
164
  description
164
165
  url
166
+ createdAt
165
167
  updatedAt
166
168
  state { name }
167
169
  assignee { id name email }
@@ -178,8 +180,8 @@ ${a}
178
180
  endCursor
179
181
  }
180
182
  }
181
- }`);return{nodes:s.issues.nodes.map(e=>({id:e.id,identifier:e.identifier,title:e.title,description:e.description,url:e.url,updatedAt:e.updatedAt,state:Promise.resolve(e.state),assignee:Promise.resolve(e.assignee),team:Promise.resolve(e.team),cycle:Promise.resolve(e.cycle),labels:Promise.resolve((e.labels?.nodes??[]).map(e=>e.name.trim()).filter(Boolean))})),pageInfo:s.issues.pageInfo}}async createIssue(e){let t=e.title.trim(),i=e.teamId.trim();if(!t)throw Error("Linear issue title is required");if(!i)throw Error("Linear issue team is required");let s={title:t,teamId:i,...e.description?.trim()?{description:e.description.trim()}:{},...e.assigneeId?.trim()?{assigneeId:e.assigneeId.trim()}:{},...e.cycleId?.trim()?{cycleId:e.cycleId.trim()}:{},...e.projectId?.trim()?{projectId:e.projectId.trim()}:{},...e.stateId?.trim()?{stateId:e.stateId.trim()}:{},..."number"==typeof e.priority&&Number.isFinite(e.priority)?{priority:Math.trunc(e.priority)}:{},...e.labelIds?.length?{labelIds:Array.from(new Set(e.labelIds.map(e=>e.trim()).filter(Boolean)))}:{}},a=await this.request(`mutation {
182
- issueCreate(input: ${d(s)}) {
183
+ }`);return{nodes:a.issues.nodes.map(e=>({id:e.id,identifier:e.identifier,title:e.title,description:e.description,url:e.url,createdAt:e.createdAt,updatedAt:e.updatedAt,state:Promise.resolve(e.state),assignee:Promise.resolve(e.assignee),team:Promise.resolve(e.team),cycle:Promise.resolve(e.cycle),labels:Promise.resolve((e.labels?.nodes??[]).map(e=>e.name.trim()).filter(Boolean))})),pageInfo:a.issues.pageInfo}}async createIssue(e){let t=e.title.trim(),i=e.teamId.trim();if(!t)throw Error("Linear issue title is required");if(!i)throw Error("Linear issue team is required");let a={title:t,teamId:i,...e.description?.trim()?{description:e.description.trim()}:{},...e.assigneeId?.trim()?{assigneeId:e.assigneeId.trim()}:{},...e.cycleId?.trim()?{cycleId:e.cycleId.trim()}:{},...e.projectId?.trim()?{projectId:e.projectId.trim()}:{},...e.stateId?.trim()?{stateId:e.stateId.trim()}:{},..."number"==typeof e.priority&&Number.isFinite(e.priority)?{priority:Math.trunc(e.priority)}:{},...e.labelIds?.length?{labelIds:Array.from(new Set(e.labelIds.map(e=>e.trim()).filter(Boolean)))}:{}},s=await this.request(`mutation {
184
+ issueCreate(input: ${d(a)}) {
183
185
  success
184
186
  issue {
185
187
  id
@@ -187,6 +189,7 @@ ${a}
187
189
  title
188
190
  description
189
191
  url
192
+ createdAt
190
193
  updatedAt
191
194
  state { name }
192
195
  assignee { id name email }
@@ -199,7 +202,7 @@ ${a}
199
202
  }
200
203
  }
201
204
  }
202
- }`).then(e=>e.issueCreate);if(!a.success||!a.issue)throw Error(`Linear rejected the issue creation for "${t}"`);return{id:a.issue.id,identifier:a.issue.identifier,title:a.issue.title,description:a.issue.description,url:a.issue.url,updatedAt:a.issue.updatedAt,status:a.issue.state?.name??null,assignee:a.issue.assignee?.name??null,teamId:a.issue.team?.id??null,teamName:a.issue.team?.name??null,teamKey:a.issue.team?.key??null,labels:(a.issue.labels?.nodes??[]).map(e=>e.name.trim()).filter(Boolean)}}async workflowStates(){let e=await this.request(`query {
205
+ }`).then(e=>e.issueCreate);if(!s.success||!s.issue)throw Error(`Linear rejected the issue creation for "${t}"`);return{id:s.issue.id,identifier:s.issue.identifier,title:s.issue.title,description:s.issue.description,url:s.issue.url,updatedAt:s.issue.updatedAt,status:s.issue.state?.name??null,assignee:s.issue.assignee?.name??null,teamId:s.issue.team?.id??null,teamName:s.issue.team?.name??null,teamKey:s.issue.team?.key??null,labels:(s.issue.labels?.nodes??[]).map(e=>e.name.trim()).filter(Boolean)}}async workflowStates(){let e=await this.request(`query {
203
206
  workflowStates(first: 200) {
204
207
  nodes {
205
208
  id
@@ -239,13 +242,13 @@ ${a}
239
242
  }
240
243
  }
241
244
  }
242
- }`),t=new Map;for(let i of e.teams.nodes)for(let e of[...i.activeCycle?[i.activeCycle]:[],...i.cycles.nodes])t.has(e.id)||t.set(e.id,{id:e.id,number:e.number,name:e.name,startsAt:e.startsAt,endsAt:e.endsAt,teamId:e.team?.id??i.id,teamName:e.team?.name??i.name});return[...t.values()].sort((e,t)=>new Date(t.startsAt).getTime()-new Date(e.startsAt).getTime())}async updateIssueStatus(e,t){let i=e.trim(),s=t.trim();if(!i)throw Error("Issue id is required");if(!s)throw Error("Status name is required");let a=await this.request(`query {
245
+ }`),t=new Map;for(let i of e.teams.nodes)for(let e of[...i.activeCycle?[i.activeCycle]:[],...i.cycles.nodes])t.has(e.id)||t.set(e.id,{id:e.id,number:e.number,name:e.name,startsAt:e.startsAt,endsAt:e.endsAt,teamId:e.team?.id??i.id,teamName:e.team?.name??i.name});return[...t.values()].sort((e,t)=>new Date(t.startsAt).getTime()-new Date(e.startsAt).getTime())}async updateIssueStatus(e,t){let i=e.trim(),a=t.trim();if(!i)throw Error("Issue id is required");if(!a)throw Error("Status name is required");let s=await this.request(`query {
243
246
  issue(id: ${JSON.stringify(i)}) {
244
247
  id
245
248
  team { id }
246
249
  state { id name }
247
250
  }
248
- }`).then(e=>e.issue?{id:e.issue.id,teamId:e.issue.team?.id??null,currentStateId:e.issue.state?.id??null,currentStatus:e.issue.state?.name??null}:null);if(!a)throw Error(`Issue "${i}" not found in Linear`);if(!a.teamId)throw Error(`Issue "${i}" is missing a team in Linear`);if(a.currentStatus?.trim().toLowerCase()===s.toLowerCase()){let e=a.currentStatus.trim();return await this.request(`query {
251
+ }`).then(e=>e.issue?{id:e.issue.id,teamId:e.issue.team?.id??null,currentStateId:e.issue.state?.id??null,currentStatus:e.issue.state?.name??null}:null);if(!s)throw Error(`Issue "${i}" not found in Linear`);if(!s.teamId)throw Error(`Issue "${i}" is missing a team in Linear`);if(s.currentStatus?.trim().toLowerCase()===a.toLowerCase()){let e=s.currentStatus.trim();return await this.request(`query {
249
252
  issue(id: ${JSON.stringify(i)}) {
250
253
  id
251
254
  identifier
@@ -256,7 +259,7 @@ ${a}
256
259
  assignee { name }
257
260
  }
258
261
  }`).then(t=>{if(!t.issue)throw Error(`Issue "${i}" not found in Linear`);return{id:t.issue.id,identifier:t.issue.identifier,title:t.issue.title,url:t.issue.url,updatedAt:t.issue.updatedAt,status:t.issue.state?.name??e,assignee:t.issue.assignee?.name??null}})}let r=(await this.request(`query {
259
- team(id: ${JSON.stringify(a.teamId)}) {
262
+ team(id: ${JSON.stringify(s.teamId)}) {
260
263
  states {
261
264
  nodes {
262
265
  id
@@ -265,7 +268,7 @@ ${a}
265
268
  }
266
269
  }
267
270
  }
268
- }`).then(e=>e.team?.states?.nodes??[])).slice().sort((e,t)=>e.position-t.position).find(e=>e.name.trim().toLowerCase()===s.toLowerCase());if(!r)throw Error(`Linear status "${s}" was not found for this issue's team`);let n=await this.request(`mutation {
271
+ }`).then(e=>e.team?.states?.nodes??[])).slice().sort((e,t)=>e.position-t.position).find(e=>e.name.trim().toLowerCase()===a.toLowerCase());if(!r)throw Error(`Linear status "${a}" was not found for this issue's team`);let n=await this.request(`mutation {
269
272
  issueUpdate(
270
273
  id: ${JSON.stringify(i)},
271
274
  input: { stateId: ${JSON.stringify(r.id)} }
@@ -281,6 +284,6 @@ ${a}
281
284
  assignee { name }
282
285
  }
283
286
  }
284
- }`).then(e=>e.issueUpdate);if(!n.success||!n.issue)throw Error(`Linear rejected the status update for "${i}"`);return{id:n.issue.id,identifier:n.issue.identifier,title:n.issue.title,url:n.issue.url,updatedAt:n.issue.updatedAt,status:n.issue.state?.name??s,assignee:n.issue.assignee?.name??null}}async request(e){let t=await fetch("https://api.linear.app/graphql",{method:"POST",headers:{"Content-Type":"application/json",Authorization:this.accessToken},body:JSON.stringify({query:e}),cache:"no-store"}),i=await t.json();if(!t.ok||i.errors?.length)throw Error(i.errors?.map(e=>e.message).find(Boolean)??`Linear request failed with status ${t.status}`);if(!i.data)throw Error("Linear response did not include data");return i.data}}function o(e){if(!e)return null;let t=n(e,"linear");return t?new c(t.accessToken):null}e.s(["LinearClient",()=>c,"deleteProjectTicketToken",()=>u,"getLinearClient",()=>o,"getProjectTicketToken",()=>n,"saveProjectTicketToken",()=>l])}];
287
+ }`).then(e=>e.issueUpdate);if(!n.success||!n.issue)throw Error(`Linear rejected the status update for "${i}"`);return{id:n.issue.id,identifier:n.issue.identifier,title:n.issue.title,url:n.issue.url,updatedAt:n.issue.updatedAt,status:n.issue.state?.name??a,assignee:n.issue.assignee?.name??null}}async request(e){let t=await fetch("https://api.linear.app/graphql",{method:"POST",headers:{"Content-Type":"application/json",Authorization:this.accessToken},body:JSON.stringify({query:e}),cache:"no-store"}),i=await t.json();if(!t.ok||i.errors?.length)throw Error(i.errors?.map(e=>e.message).find(Boolean)??`Linear request failed with status ${t.status}`);if(!i.data)throw Error("Linear response did not include data");return i.data}}function o(e){if(!e)return null;let t=n(e,"linear");return t?new c(t.accessToken):null}e.s(["LinearClient",()=>c,"deleteProjectTicketToken",()=>u,"getLinearClient",()=>o,"getProjectTicketToken",()=>n,"saveProjectTicketToken",()=>l])}];
285
288
 
286
289
  //# sourceMappingURL=apps_local_d256aa32._.js.map
@@ -86,6 +86,6 @@ module.exports=[11061,e=>{"use strict";var t=e.i(522734),r=e.i(446786),s=e.i(814
86
86
  SELECT id FROM chat_runs WHERE thread_id = lr.thread_id ORDER BY updated_at DESC LIMIT 1
87
87
  )
88
88
  WHERE cr.status IN ('queued', 'running')`;return(r?t.prepare(s).all(e.trim()):t.prepare(s).all()).map(e=>({issueId:e.issue_id,agentId:e.agent_id,agentName:e.agent_name}))})}e.s(["getIssueActiveAgents",()=>p,"listLinearRuns",()=>d])},720395,e=>{"use strict";var t=e.i(84516),r=e.i(29764),s=e.i(11061),i=e.i(124985);e.i(243174);var a=e.i(248821),n=e.i(901977);let o="project_objective_health_history",c={"on track":"on_track","at risk":"at_risk","off track":"off_track",done:"done"};function u(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function l(e){return"number"==typeof e&&Number.isFinite(e)?Math.max(0,Math.min(100,Math.round(e))):0}function d(e){return"string"==typeof e&&e.trim()?e.trim():void 0}function p(...e){let t=e.flatMap(e=>e??[]),r=[];for(let e of[...t].sort((e,t)=>Date.parse(e.recordedAt)-Date.parse(t.recordedAt))){let t=r[r.length-1]??null;t&&t.progress===e.progress&&t.status===e.status&&(!t.source||!e.source||t.source===e.source)&&5e3>=Math.abs(Date.parse(e.recordedAt)-Date.parse(t.recordedAt))||r.push(e)}return r}var T=e.i(460275),_=e.i(765443);let E={on_track:"On track",at_risk:"At risk",off_track:"Off track",done:"Done"};async function m(e){let t=Date.now(),r="";try{return await (0,T.runCliResponse)({provider:e.provider,model:e.model,prompt:e.prompt,identity:e.identity,self:e.self,skills:e.skills,systemContext:e.systemContext,passthroughArgs:e.cliArgs?e.cliArgs.split(/\s+/).filter(Boolean):void 0,onDelta:e=>{r+=e},onSpawn:e.onSpawn}),{output:r,error:"",durationMs:Date.now()-t,status:"success"}}catch(e){return{output:r,error:e instanceof Error?e.message:String(e),durationMs:Date.now()-t,status:"failed"}}}function g(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:null}catch{return null}}function h(e){let t=e.trim();if(!t)return null;let r=g(t);if(r)return r;let s=t.indexOf("{"),i=t.lastIndexOf("}");return -1===s||i<=s?null:g(t.slice(s,i+1))}function N(e){return"number"==typeof e&&Number.isFinite(e)?(0,_.normalizeProjectHealthProgress)(e):null}function j(e){return"string"==typeof e&&e.trim()?(0,_.normalizeProjectHealthStatus)(e):null}function I(e,t,r){return`${e}: ${t}% ${E[r]}`}function f(e){return[`- id: ${e.id}`,` identifier: ${e.identifier}`,` title: ${e.title}`,` status: ${e.status}`,` assignee: ${e.assignee??"Unassigned"}`,e.url?` url: ${e.url}`:null].filter(e=>!!e).join("\n")}async function b(e){let{job:n,objectiveContext:o}=e,{project:c,workspace:u,objective:l}=o,d=c.slug??c.id,[{issues:p},T,_,E]=await Promise.all([(0,r.listObjectiveTrackerIssues)({projectId:c.id,objectiveKey:l.key,projectSlug:d,refresh:!0}),(0,s.getIssueActiveAgents)(c.id),Promise.resolve((0,i.getActivityRepository)(d,l.key).list({limit:20})),Promise.resolve((0,a.getNoteRepository)(d,l.key).readAll())]),m=new Set(p.map(e=>e.id)),g=T.filter(e=>m.has(e.issueId)),h=(0,r.filterObjectiveTrackerIssuesForAction)(p,g.map(e=>e.issueId)),N=(0,t.getPromptJobStore)().listJobs({objectiveId:l.id}).filter(e=>e.id!==n.id),j=u.objectives.filter(e=>e.id!==l.id),I=[];I.push("GOAL",l.title,l.summary?.trim()||"No summary provided."),I.push("","CURRENT STATE",`Progress: ${l.progress}% | Status: ${l.status}`),E.length>0&&I.push("","NOTES",...E.map(e=>`### ${e.title}
89
- ${e.body}`));let b=_.activities??[];return b.length>0&&I.push("","RECENT ACTIVITY",...b.map(e=>{let t=e.createdAt.replace("T"," ").replace(/\.\d+Z$/,"").slice(0,16);return`- [${t}] ${e.body.split("\n")[0]}`})),p.length>0?I.push("","LINEAR TICKETS",p.map(e=>f(e)).join("\n\n")):I.push("","LINEAR TICKETS","- None."),g.length>0&&I.push("","ACTIVE SESSIONS",...g.map(e=>`- ${e.issueId}: running with ${e.agentName}`)),N.length>0&&I.push("","SCHEDULED TASKS",...N.map(e=>`- ${e.name} | state: ${e.state} | last outcome: ${e.lastOutcome??"none"}`)),j.length>0&&I.push("","PROJECT CONTEXT",...j.map(e=>`- ${e.title} (${e.key}) | ${e.progress}% | ${e.status}`)),I.push("","GUIDANCE",n.prompt.trim()||"No additional guidance provided."),I.push("","ELIGIBLE TICKETS",h.length>0?h.map(e=>f(e)).join("\n\n"):"- None."),I.push("","---","What single action most advances this objective right now?"),{prompt:I.join("\n"),issues:p,eligibleIssues:h,activeIssueAgents:g}}async function L(t){let r=Date.now();try{if(!t.job.projectId||!t.job.objectiveId)throw Error("Objective worker jobs require projectId and objectiveId.");let s=await (0,n.loadProjectObjectiveContext)(t.job.projectId,t.job.objectiveId);if(!s)throw Error("Objective context could not be resolved for this scheduled task.");let i=await b({job:t.job,objectiveContext:s}),a=await m({...t.controllerContext,prompt:i.prompt,systemContext:'You are deciding what action an objective worker should take next.\nReturn ONLY raw JSON with no markdown fences or commentary.\nValid responses:\n{"action":"work_ticket","ticketId":"ticket-id","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk","projectProgress":35,"projectStatus":"at_risk"}\n{"action":"run_prompt","prompt":"detailed instructions","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk"}\n{"action":"stop","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk"}\nRules:\n- "work_ticket": ticketId must exactly match one of the ELIGIBLE TICKETS ids.\n- "run_prompt": for work not captured by existing tickets. When no tickets are actionable and the objective is not done, use this to plan: review notes, refine the last plan, or outline next steps. The prompt should instruct the agent to append to an existing note when one is relevant rather than creating a new note.\n- "stop": only when the objective is done or genuinely no action (including planning) adds value.\nPercentages must be integers 0-100.\nStatuses: on_track, at_risk, off_track, done.',cliArgs:t.cliArgs,onSpawn:t.onSpawn});if("success"!==a.status)return{...a,output:a.output||"Objective controller failed before selecting an action."};let T=h(a.output),E="string"==typeof T?.action?T.action.trim().toLowerCase():"string"==typeof T?.decision?T.decision.trim().toLowerCase():"",g="string"==typeof T?.reason?T.reason.trim():"",f=N(T?.objectiveProgress),L=j(T?.objectiveStatus),O=N(T?.projectProgress),A=j(T?.projectStatus),v="string"==typeof T?.projectNote?T.projectNote.trim():"",S="string"==typeof T?.objectiveNote?T.objectiveNote.trim():"",y=new Date().toISOString(),R=null!==f&&L?I("Objective health",f,L):null,k=null!==O&&A?I("Project health",O,A):null,w=null!==f&&null!==L?{objectiveId:s.objective.id,objectiveKey:s.objective.key,progress:f,status:L,recordedAt:y,source:`scheduled-task:${t.job.id}`,note:S||void 0}:null,D=null!==f&&null!==L&&(f!==s.objective.progress||L!==s.objective.status),X=D?(0,_.upsertProjectObjective)(s.workspace,{...s.objective,progress:f,status:L,updatedAt:y}):s.workspace,C=null!==O&&null!==A?{progress:O,status:A,updatedAt:y,source:`scheduled-task:${t.job.id}`,objectiveId:s.objective.id,objectiveKey:s.objective.key,note:v||void 0}:null,U=e=>{let t=e;return C&&(t=(0,_.writeProjectHealthSnapshot)(t,C)),w&&(t=function(e,t){let r=t.objectiveId.trim();if(!r)return e;let s=function(e,t){if(!u(e)||!t.trim())return[];let r=e[o];if(!u(r))return[];let s=r[t.trim()];return Array.isArray(s)?p(s.map(e=>(function(e){if(!u(e))return null;let t=function(e){if("string"!=typeof e)return null;let t=e.trim().toLowerCase();return"on_track"===t||"at_risk"===t||"off_track"===t||"done"===t?t:c[t]??null}(e.status),r=function(e){if("string"!=typeof e)return null;let t=Date.parse(e);return Number.isNaN(t)?null:new Date(t).toISOString()}(e.recordedAt);return t&&r?{progress:l(e.progress),status:t,recordedAt:r,source:d(e.source),note:d(e.note),objectiveId:d(e.objectiveId)??null,objectiveKey:d(e.objectiveKey)??null}:null})(e)).filter(e=>!!e)):[]}(e,r),i=p(s,[t]).slice(-200),a=u(e[o])?e[o]:{};return{...e,[o]:{...a,[r]:i.map(e=>({progress:l(e.progress),status:e.status,recordedAt:e.recordedAt,...e.source?{source:e.source}:{},...e.note?{note:e.note}:{},...e.objectiveId?{objectiveId:e.objectiveId}:{},...e.objectiveKey?{objectiveKey:e.objectiveKey}:{}}))}}}(t,w)),t};D?await (0,n.persistProjectObjectiveWorkspace)({projectId:s.project.id,currentMetadata:s.project.metadata,workspace:X,transformMetadata:U}):(w||C)&&await (0,n.persistProjectObjectiveMetadata)({projectId:s.project.id,currentMetadata:s.project.metadata,transformMetadata:U});let{dispatchObjectiveAction:M}=await e.A(688671),x=await M({action:"work"===E?"work_ticket":E,parsed:T,reason:g,job:t.job,controllerContext:t.controllerContext,sessionAgent:t.sessionAgent,objectiveContext:s,eligibleIssues:i.eligibleIssues,issues:i.issues,healthSummaries:{objectiveHealthSummary:R,projectHealthSummary:k,objectiveNote:S,projectNote:v},cliArgs:t.cliArgs,onSpawn:t.onSpawn,startMs:r}),{logActionReceipt:P}=await e.A(688671);return await P(x,{jobId:t.job.id,projectId:t.job.projectId,objectiveId:t.job.objectiveId}),{output:x.result,error:"failed"===x.status?x.result:"",durationMs:Date.now()-r,status:x.status}}catch(e){return{output:"",error:e instanceof Error?e.message:String(e),durationMs:Date.now()-r,status:"failed"}}}e.s(["buildObjectiveObservation",()=>b,"executeObjectiveWorker",()=>L,"extractFirstJsonObject",()=>h],720395)},688671,e=>{e.v(e=>Promise.resolve().then(()=>e(917435)))}];
89
+ ${e.body}`));let b=_.activities??[];return b.length>0&&I.push("","RECENT ACTIVITY",...b.map(e=>{let t=e.createdAt.replace("T"," ").replace(/\.\d+Z$/,"").slice(0,16);return`- [${t}] ${e.body.split("\n")[0]}`})),p.length>0?I.push("","LINEAR TICKETS",p.map(e=>f(e)).join("\n\n")):I.push("","LINEAR TICKETS","- None."),g.length>0&&I.push("","ACTIVE SESSIONS",...g.map(e=>`- ${e.issueId}: running with ${e.agentName}`)),N.length>0&&I.push("","SCHEDULED TASKS",...N.map(e=>`- ${e.name} | state: ${e.state} | last outcome: ${e.lastOutcome??"none"}`)),j.length>0&&I.push("","PROJECT CONTEXT",...j.map(e=>`- ${e.title} (${e.key}) | ${e.progress}% | ${e.status}`)),I.push("","GUIDANCE",n.prompt.trim()||"No additional guidance provided."),I.push("","ELIGIBLE TICKETS",h.length>0?h.map(e=>f(e)).join("\n\n"):"- None."),I.push("","---","What single action most advances this objective right now?"),{prompt:I.join("\n"),issues:p,eligibleIssues:h,activeIssueAgents:g}}async function L(t){let r=Date.now();try{if(!t.job.projectId||!t.job.objectiveId)throw Error("Objective worker jobs require projectId and objectiveId.");let s=await (0,n.loadProjectObjectiveContext)(t.job.projectId,t.job.objectiveId);if(!s)throw Error("Objective context could not be resolved for this scheduled task.");let i=await b({job:t.job,objectiveContext:s}),a=await m({...t.controllerContext,prompt:i.prompt,systemContext:'You are deciding what action an objective worker should take next.\nReturn ONLY raw JSON with no markdown fences or commentary.\nValid responses:\n{"action":"work_ticket","ticketId":"ticket-id","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk","projectProgress":35,"projectStatus":"at_risk"}\n{"action":"run_prompt","prompt":"detailed instructions","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk"}\n{"action":"stop","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk"}\nRules:\n- "work_ticket": ticketId must exactly match one of the ELIGIBLE TICKETS ids.\n- "run_prompt": for work not captured by existing tickets. When no tickets are actionable and the objective is not done, use this to plan: review notes, refine the last plan, or outline next steps. The prompt should instruct the agent to append to an existing note when one is relevant rather than creating a new note.\n- "stop": only when the objective is done or genuinely no action (including planning) adds value.\nPercentages must be integers 0-100.\nStatuses: on_track, at_risk, off_track, done.',cliArgs:t.cliArgs,onSpawn:t.onSpawn});if("success"!==a.status)return{...a,output:a.output||"Objective controller failed before selecting an action."};let T=h(a.output),E="string"==typeof T?.action?T.action.trim().toLowerCase():"string"==typeof T?.decision?T.decision.trim().toLowerCase():"",g="work"===E?"work_ticket":E;if(!g){let e=a.output??"";console.warn(`[objective-worker] empty action from controller (job=${t.job.id}, outputLen=${e.length}, parsed=${T?"object":"null"}):`,e.slice(0,500))}let f="string"==typeof T?.reason?T.reason.trim():"",L=N(T?.objectiveProgress),O=j(T?.objectiveStatus),v=N(T?.projectProgress),A=j(T?.projectStatus),S="string"==typeof T?.projectNote?T.projectNote.trim():"",y="string"==typeof T?.objectiveNote?T.objectiveNote.trim():"",R=new Date().toISOString(),k=null!==L&&O?I("Objective health",L,O):null,w=null!==v&&A?I("Project health",v,A):null,D=null!==L&&null!==O?{objectiveId:s.objective.id,objectiveKey:s.objective.key,progress:L,status:O,recordedAt:R,source:`scheduled-task:${t.job.id}`,note:y||void 0}:null,X=null!==L&&null!==O&&(L!==s.objective.progress||O!==s.objective.status),C=X?(0,_.upsertProjectObjective)(s.workspace,{...s.objective,progress:L,status:O,updatedAt:R}):s.workspace,U=null!==v&&null!==A?{progress:v,status:A,updatedAt:R,source:`scheduled-task:${t.job.id}`,objectiveId:s.objective.id,objectiveKey:s.objective.key,note:S||void 0}:null,M=e=>{let t=e;return U&&(t=(0,_.writeProjectHealthSnapshot)(t,U)),D&&(t=function(e,t){let r=t.objectiveId.trim();if(!r)return e;let s=function(e,t){if(!u(e)||!t.trim())return[];let r=e[o];if(!u(r))return[];let s=r[t.trim()];return Array.isArray(s)?p(s.map(e=>(function(e){if(!u(e))return null;let t=function(e){if("string"!=typeof e)return null;let t=e.trim().toLowerCase();return"on_track"===t||"at_risk"===t||"off_track"===t||"done"===t?t:c[t]??null}(e.status),r=function(e){if("string"!=typeof e)return null;let t=Date.parse(e);return Number.isNaN(t)?null:new Date(t).toISOString()}(e.recordedAt);return t&&r?{progress:l(e.progress),status:t,recordedAt:r,source:d(e.source),note:d(e.note),objectiveId:d(e.objectiveId)??null,objectiveKey:d(e.objectiveKey)??null}:null})(e)).filter(e=>!!e)):[]}(e,r),i=p(s,[t]).slice(-200),a=u(e[o])?e[o]:{};return{...e,[o]:{...a,[r]:i.map(e=>({progress:l(e.progress),status:e.status,recordedAt:e.recordedAt,...e.source?{source:e.source}:{},...e.note?{note:e.note}:{},...e.objectiveId?{objectiveId:e.objectiveId}:{},...e.objectiveKey?{objectiveKey:e.objectiveKey}:{}}))}}}(t,D)),t};X?await (0,n.persistProjectObjectiveWorkspace)({projectId:s.project.id,currentMetadata:s.project.metadata,workspace:C,transformMetadata:M}):(D||U)&&await (0,n.persistProjectObjectiveMetadata)({projectId:s.project.id,currentMetadata:s.project.metadata,transformMetadata:M});let{dispatchObjectiveAction:$}=await e.A(688671),x=await $({action:g,parsed:T,reason:f,job:t.job,controllerContext:t.controllerContext,sessionAgent:t.sessionAgent,objectiveContext:s,eligibleIssues:i.eligibleIssues,issues:i.issues,healthSummaries:{objectiveHealthSummary:k,projectHealthSummary:w,objectiveNote:y,projectNote:S},cliArgs:t.cliArgs,onSpawn:t.onSpawn,startMs:r}),{logActionReceipt:P}=await e.A(688671);return await P(x,{jobId:t.job.id,projectId:t.job.projectId,objectiveId:t.job.objectiveId}),{output:x.result,error:"failed"===x.status?x.result:"",durationMs:Date.now()-r,status:x.status}}catch(e){return{output:"",error:e instanceof Error?e.message:String(e),durationMs:Date.now()-r,status:"failed"}}}e.s(["buildObjectiveObservation",()=>b,"executeObjectiveWorker",()=>L,"extractFirstJsonObject",()=>h],720395)},688671,e=>{e.v(e=>Promise.resolve().then(()=>e(917435)))}];
90
90
 
91
91
  //# sourceMappingURL=apps_local_e1f4d9ad._.js.map
@@ -86,6 +86,6 @@ module.exports=[11061,e=>{"use strict";var t=e.i(522734),r=e.i(446786),s=e.i(814
86
86
  SELECT id FROM chat_runs WHERE thread_id = lr.thread_id ORDER BY updated_at DESC LIMIT 1
87
87
  )
88
88
  WHERE cr.status IN ('queued', 'running')`;return(r?t.prepare(s).all(e.trim()):t.prepare(s).all()).map(e=>({issueId:e.issue_id,agentId:e.agent_id,agentName:e.agent_name}))})}e.s(["getIssueActiveAgents",()=>p,"listLinearRuns",()=>d])},720395,e=>{"use strict";var t=e.i(84516),r=e.i(29764),s=e.i(11061),i=e.i(124985);e.i(243174);var a=e.i(248821),n=e.i(901977);let o="project_objective_health_history",c={"on track":"on_track","at risk":"at_risk","off track":"off_track",done:"done"};function u(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function l(e){return"number"==typeof e&&Number.isFinite(e)?Math.max(0,Math.min(100,Math.round(e))):0}function d(e){return"string"==typeof e&&e.trim()?e.trim():void 0}function p(...e){let t=e.flatMap(e=>e??[]),r=[];for(let e of[...t].sort((e,t)=>Date.parse(e.recordedAt)-Date.parse(t.recordedAt))){let t=r[r.length-1]??null;t&&t.progress===e.progress&&t.status===e.status&&(!t.source||!e.source||t.source===e.source)&&5e3>=Math.abs(Date.parse(e.recordedAt)-Date.parse(t.recordedAt))||r.push(e)}return r}var T=e.i(460275),_=e.i(765443);let E={on_track:"On track",at_risk:"At risk",off_track:"Off track",done:"Done"};async function m(e){let t=Date.now(),r="";try{return await (0,T.runCliResponse)({provider:e.provider,model:e.model,prompt:e.prompt,identity:e.identity,self:e.self,skills:e.skills,systemContext:e.systemContext,passthroughArgs:e.cliArgs?e.cliArgs.split(/\s+/).filter(Boolean):void 0,onDelta:e=>{r+=e},onSpawn:e.onSpawn}),{output:r,error:"",durationMs:Date.now()-t,status:"success"}}catch(e){return{output:r,error:e instanceof Error?e.message:String(e),durationMs:Date.now()-t,status:"failed"}}}function g(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:null}catch{return null}}function h(e){let t=e.trim();if(!t)return null;let r=g(t);if(r)return r;let s=t.indexOf("{"),i=t.lastIndexOf("}");return -1===s||i<=s?null:g(t.slice(s,i+1))}function N(e){return"number"==typeof e&&Number.isFinite(e)?(0,_.normalizeProjectHealthProgress)(e):null}function j(e){return"string"==typeof e&&e.trim()?(0,_.normalizeProjectHealthStatus)(e):null}function I(e,t,r){return`${e}: ${t}% ${E[r]}`}function f(e){return[`- id: ${e.id}`,` identifier: ${e.identifier}`,` title: ${e.title}`,` status: ${e.status}`,` assignee: ${e.assignee??"Unassigned"}`,e.url?` url: ${e.url}`:null].filter(e=>!!e).join("\n")}async function b(e){let{job:n,objectiveContext:o}=e,{project:c,workspace:u,objective:l}=o,d=c.slug??c.id,[{issues:p},T,_,E]=await Promise.all([(0,r.listObjectiveTrackerIssues)({projectId:c.id,objectiveKey:l.key,projectSlug:d,refresh:!0}),(0,s.getIssueActiveAgents)(c.id),Promise.resolve((0,i.getActivityRepository)(d,l.key).list({limit:20})),Promise.resolve((0,a.getNoteRepository)(d,l.key).readAll())]),m=new Set(p.map(e=>e.id)),g=T.filter(e=>m.has(e.issueId)),h=(0,r.filterObjectiveTrackerIssuesForAction)(p,g.map(e=>e.issueId)),N=(0,t.getPromptJobStore)().listJobs({objectiveId:l.id}).filter(e=>e.id!==n.id),j=u.objectives.filter(e=>e.id!==l.id),I=[];I.push("GOAL",l.title,l.summary?.trim()||"No summary provided."),I.push("","CURRENT STATE",`Progress: ${l.progress}% | Status: ${l.status}`),E.length>0&&I.push("","NOTES",...E.map(e=>`### ${e.title}
89
- ${e.body}`));let b=_.activities??[];return b.length>0&&I.push("","RECENT ACTIVITY",...b.map(e=>{let t=e.createdAt.replace("T"," ").replace(/\.\d+Z$/,"").slice(0,16);return`- [${t}] ${e.body.split("\n")[0]}`})),p.length>0?I.push("","LINEAR TICKETS",p.map(e=>f(e)).join("\n\n")):I.push("","LINEAR TICKETS","- None."),g.length>0&&I.push("","ACTIVE SESSIONS",...g.map(e=>`- ${e.issueId}: running with ${e.agentName}`)),N.length>0&&I.push("","SCHEDULED TASKS",...N.map(e=>`- ${e.name} | state: ${e.state} | last outcome: ${e.lastOutcome??"none"}`)),j.length>0&&I.push("","PROJECT CONTEXT",...j.map(e=>`- ${e.title} (${e.key}) | ${e.progress}% | ${e.status}`)),I.push("","GUIDANCE",n.prompt.trim()||"No additional guidance provided."),I.push("","ELIGIBLE TICKETS",h.length>0?h.map(e=>f(e)).join("\n\n"):"- None."),I.push("","---","What single action most advances this objective right now?"),{prompt:I.join("\n"),issues:p,eligibleIssues:h,activeIssueAgents:g}}async function L(t){let r=Date.now();try{if(!t.job.projectId||!t.job.objectiveId)throw Error("Objective worker jobs require projectId and objectiveId.");let s=await (0,n.loadProjectObjectiveContext)(t.job.projectId,t.job.objectiveId);if(!s)throw Error("Objective context could not be resolved for this scheduled task.");let i=await b({job:t.job,objectiveContext:s}),a=await m({...t.controllerContext,prompt:i.prompt,systemContext:'You are deciding what action an objective worker should take next.\nReturn ONLY raw JSON with no markdown fences or commentary.\nValid responses:\n{"action":"work_ticket","ticketId":"ticket-id","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk","projectProgress":35,"projectStatus":"at_risk"}\n{"action":"run_prompt","prompt":"detailed instructions","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk"}\n{"action":"stop","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk"}\nRules:\n- "work_ticket": ticketId must exactly match one of the ELIGIBLE TICKETS ids.\n- "run_prompt": for work not captured by existing tickets. When no tickets are actionable and the objective is not done, use this to plan: review notes, refine the last plan, or outline next steps. The prompt should instruct the agent to append to an existing note when one is relevant rather than creating a new note.\n- "stop": only when the objective is done or genuinely no action (including planning) adds value.\nPercentages must be integers 0-100.\nStatuses: on_track, at_risk, off_track, done.',cliArgs:t.cliArgs,onSpawn:t.onSpawn});if("success"!==a.status)return{...a,output:a.output||"Objective controller failed before selecting an action."};let T=h(a.output),E="string"==typeof T?.action?T.action.trim().toLowerCase():"string"==typeof T?.decision?T.decision.trim().toLowerCase():"",g="string"==typeof T?.reason?T.reason.trim():"",f=N(T?.objectiveProgress),L=j(T?.objectiveStatus),O=N(T?.projectProgress),A=j(T?.projectStatus),v="string"==typeof T?.projectNote?T.projectNote.trim():"",S="string"==typeof T?.objectiveNote?T.objectiveNote.trim():"",y=new Date().toISOString(),R=null!==f&&L?I("Objective health",f,L):null,k=null!==O&&A?I("Project health",O,A):null,w=null!==f&&null!==L?{objectiveId:s.objective.id,objectiveKey:s.objective.key,progress:f,status:L,recordedAt:y,source:`scheduled-task:${t.job.id}`,note:S||void 0}:null,D=null!==f&&null!==L&&(f!==s.objective.progress||L!==s.objective.status),X=D?(0,_.upsertProjectObjective)(s.workspace,{...s.objective,progress:f,status:L,updatedAt:y}):s.workspace,C=null!==O&&null!==A?{progress:O,status:A,updatedAt:y,source:`scheduled-task:${t.job.id}`,objectiveId:s.objective.id,objectiveKey:s.objective.key,note:v||void 0}:null,U=e=>{let t=e;return C&&(t=(0,_.writeProjectHealthSnapshot)(t,C)),w&&(t=function(e,t){let r=t.objectiveId.trim();if(!r)return e;let s=function(e,t){if(!u(e)||!t.trim())return[];let r=e[o];if(!u(r))return[];let s=r[t.trim()];return Array.isArray(s)?p(s.map(e=>(function(e){if(!u(e))return null;let t=function(e){if("string"!=typeof e)return null;let t=e.trim().toLowerCase();return"on_track"===t||"at_risk"===t||"off_track"===t||"done"===t?t:c[t]??null}(e.status),r=function(e){if("string"!=typeof e)return null;let t=Date.parse(e);return Number.isNaN(t)?null:new Date(t).toISOString()}(e.recordedAt);return t&&r?{progress:l(e.progress),status:t,recordedAt:r,source:d(e.source),note:d(e.note),objectiveId:d(e.objectiveId)??null,objectiveKey:d(e.objectiveKey)??null}:null})(e)).filter(e=>!!e)):[]}(e,r),i=p(s,[t]).slice(-200),a=u(e[o])?e[o]:{};return{...e,[o]:{...a,[r]:i.map(e=>({progress:l(e.progress),status:e.status,recordedAt:e.recordedAt,...e.source?{source:e.source}:{},...e.note?{note:e.note}:{},...e.objectiveId?{objectiveId:e.objectiveId}:{},...e.objectiveKey?{objectiveKey:e.objectiveKey}:{}}))}}}(t,w)),t};D?await (0,n.persistProjectObjectiveWorkspace)({projectId:s.project.id,currentMetadata:s.project.metadata,workspace:X,transformMetadata:U}):(w||C)&&await (0,n.persistProjectObjectiveMetadata)({projectId:s.project.id,currentMetadata:s.project.metadata,transformMetadata:U});let{dispatchObjectiveAction:M}=await e.A(688671),x=await M({action:"work"===E?"work_ticket":E,parsed:T,reason:g,job:t.job,controllerContext:t.controllerContext,sessionAgent:t.sessionAgent,objectiveContext:s,eligibleIssues:i.eligibleIssues,issues:i.issues,healthSummaries:{objectiveHealthSummary:R,projectHealthSummary:k,objectiveNote:S,projectNote:v},cliArgs:t.cliArgs,onSpawn:t.onSpawn,startMs:r}),{logActionReceipt:P}=await e.A(688671);return await P(x,{jobId:t.job.id,projectId:t.job.projectId,objectiveId:t.job.objectiveId}),{output:x.result,error:"failed"===x.status?x.result:"",durationMs:Date.now()-r,status:x.status}}catch(e){return{output:"",error:e instanceof Error?e.message:String(e),durationMs:Date.now()-r,status:"failed"}}}e.s(["buildObjectiveObservation",()=>b,"executeObjectiveWorker",()=>L,"extractFirstJsonObject",()=>h],720395)},688671,e=>{e.v(e=>Promise.resolve().then(()=>e(917435)))}];
89
+ ${e.body}`));let b=_.activities??[];return b.length>0&&I.push("","RECENT ACTIVITY",...b.map(e=>{let t=e.createdAt.replace("T"," ").replace(/\.\d+Z$/,"").slice(0,16);return`- [${t}] ${e.body.split("\n")[0]}`})),p.length>0?I.push("","LINEAR TICKETS",p.map(e=>f(e)).join("\n\n")):I.push("","LINEAR TICKETS","- None."),g.length>0&&I.push("","ACTIVE SESSIONS",...g.map(e=>`- ${e.issueId}: running with ${e.agentName}`)),N.length>0&&I.push("","SCHEDULED TASKS",...N.map(e=>`- ${e.name} | state: ${e.state} | last outcome: ${e.lastOutcome??"none"}`)),j.length>0&&I.push("","PROJECT CONTEXT",...j.map(e=>`- ${e.title} (${e.key}) | ${e.progress}% | ${e.status}`)),I.push("","GUIDANCE",n.prompt.trim()||"No additional guidance provided."),I.push("","ELIGIBLE TICKETS",h.length>0?h.map(e=>f(e)).join("\n\n"):"- None."),I.push("","---","What single action most advances this objective right now?"),{prompt:I.join("\n"),issues:p,eligibleIssues:h,activeIssueAgents:g}}async function L(t){let r=Date.now();try{if(!t.job.projectId||!t.job.objectiveId)throw Error("Objective worker jobs require projectId and objectiveId.");let s=await (0,n.loadProjectObjectiveContext)(t.job.projectId,t.job.objectiveId);if(!s)throw Error("Objective context could not be resolved for this scheduled task.");let i=await b({job:t.job,objectiveContext:s}),a=await m({...t.controllerContext,prompt:i.prompt,systemContext:'You are deciding what action an objective worker should take next.\nReturn ONLY raw JSON with no markdown fences or commentary.\nValid responses:\n{"action":"work_ticket","ticketId":"ticket-id","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk","projectProgress":35,"projectStatus":"at_risk"}\n{"action":"run_prompt","prompt":"detailed instructions","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk"}\n{"action":"stop","reason":"...","objectiveProgress":42,"objectiveStatus":"at_risk"}\nRules:\n- "work_ticket": ticketId must exactly match one of the ELIGIBLE TICKETS ids.\n- "run_prompt": for work not captured by existing tickets. When no tickets are actionable and the objective is not done, use this to plan: review notes, refine the last plan, or outline next steps. The prompt should instruct the agent to append to an existing note when one is relevant rather than creating a new note.\n- "stop": only when the objective is done or genuinely no action (including planning) adds value.\nPercentages must be integers 0-100.\nStatuses: on_track, at_risk, off_track, done.',cliArgs:t.cliArgs,onSpawn:t.onSpawn});if("success"!==a.status)return{...a,output:a.output||"Objective controller failed before selecting an action."};let T=h(a.output),E="string"==typeof T?.action?T.action.trim().toLowerCase():"string"==typeof T?.decision?T.decision.trim().toLowerCase():"",g="work"===E?"work_ticket":E;if(!g){let e=a.output??"";console.warn(`[objective-worker] empty action from controller (job=${t.job.id}, outputLen=${e.length}, parsed=${T?"object":"null"}):`,e.slice(0,500))}let f="string"==typeof T?.reason?T.reason.trim():"",L=N(T?.objectiveProgress),O=j(T?.objectiveStatus),v=N(T?.projectProgress),A=j(T?.projectStatus),S="string"==typeof T?.projectNote?T.projectNote.trim():"",y="string"==typeof T?.objectiveNote?T.objectiveNote.trim():"",R=new Date().toISOString(),k=null!==L&&O?I("Objective health",L,O):null,w=null!==v&&A?I("Project health",v,A):null,D=null!==L&&null!==O?{objectiveId:s.objective.id,objectiveKey:s.objective.key,progress:L,status:O,recordedAt:R,source:`scheduled-task:${t.job.id}`,note:y||void 0}:null,X=null!==L&&null!==O&&(L!==s.objective.progress||O!==s.objective.status),C=X?(0,_.upsertProjectObjective)(s.workspace,{...s.objective,progress:L,status:O,updatedAt:R}):s.workspace,U=null!==v&&null!==A?{progress:v,status:A,updatedAt:R,source:`scheduled-task:${t.job.id}`,objectiveId:s.objective.id,objectiveKey:s.objective.key,note:S||void 0}:null,M=e=>{let t=e;return U&&(t=(0,_.writeProjectHealthSnapshot)(t,U)),D&&(t=function(e,t){let r=t.objectiveId.trim();if(!r)return e;let s=function(e,t){if(!u(e)||!t.trim())return[];let r=e[o];if(!u(r))return[];let s=r[t.trim()];return Array.isArray(s)?p(s.map(e=>(function(e){if(!u(e))return null;let t=function(e){if("string"!=typeof e)return null;let t=e.trim().toLowerCase();return"on_track"===t||"at_risk"===t||"off_track"===t||"done"===t?t:c[t]??null}(e.status),r=function(e){if("string"!=typeof e)return null;let t=Date.parse(e);return Number.isNaN(t)?null:new Date(t).toISOString()}(e.recordedAt);return t&&r?{progress:l(e.progress),status:t,recordedAt:r,source:d(e.source),note:d(e.note),objectiveId:d(e.objectiveId)??null,objectiveKey:d(e.objectiveKey)??null}:null})(e)).filter(e=>!!e)):[]}(e,r),i=p(s,[t]).slice(-200),a=u(e[o])?e[o]:{};return{...e,[o]:{...a,[r]:i.map(e=>({progress:l(e.progress),status:e.status,recordedAt:e.recordedAt,...e.source?{source:e.source}:{},...e.note?{note:e.note}:{},...e.objectiveId?{objectiveId:e.objectiveId}:{},...e.objectiveKey?{objectiveKey:e.objectiveKey}:{}}))}}}(t,D)),t};X?await (0,n.persistProjectObjectiveWorkspace)({projectId:s.project.id,currentMetadata:s.project.metadata,workspace:C,transformMetadata:M}):(D||U)&&await (0,n.persistProjectObjectiveMetadata)({projectId:s.project.id,currentMetadata:s.project.metadata,transformMetadata:M});let{dispatchObjectiveAction:$}=await e.A(688671),x=await $({action:g,parsed:T,reason:f,job:t.job,controllerContext:t.controllerContext,sessionAgent:t.sessionAgent,objectiveContext:s,eligibleIssues:i.eligibleIssues,issues:i.issues,healthSummaries:{objectiveHealthSummary:k,projectHealthSummary:w,objectiveNote:y,projectNote:S},cliArgs:t.cliArgs,onSpawn:t.onSpawn,startMs:r}),{logActionReceipt:P}=await e.A(688671);return await P(x,{jobId:t.job.id,projectId:t.job.projectId,objectiveId:t.job.objectiveId}),{output:x.result,error:"failed"===x.status?x.result:"",durationMs:Date.now()-r,status:x.status}}catch(e){return{output:"",error:e instanceof Error?e.message:String(e),durationMs:Date.now()-r,status:"failed"}}}e.s(["buildObjectiveObservation",()=>b,"executeObjectiveWorker",()=>L,"extractFirstJsonObject",()=>h],720395)},688671,e=>{e.v(e=>Promise.resolve().then(()=>e(917435)))}];
90
90
 
91
91
  //# sourceMappingURL=apps_local_f8b3abae._.js.map