@mndrk/agx 2.4.3 → 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 (162) hide show
  1. package/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
  2. package/cloud-runtime/standalone/apps/local/.next/build-manifest.json +2 -2
  3. package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
  4. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +2 -2
  5. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.rsc +1 -1
  6. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.html +2 -2
  13. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.rsc +2 -2
  14. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  15. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  16. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  17. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  19. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  20. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  21. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  22. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.html +2 -2
  23. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.rsc +2 -2
  24. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_full.segment.rsc +2 -2
  25. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  26. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  27. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  28. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +1 -1
  29. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents.segment.rsc +1 -1
  30. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js +1 -1
  31. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
  32. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/auth/route.js +3 -3
  33. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/auth/route.js.nft.json +1 -1
  34. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/callback/route.js +3 -3
  35. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/callback/route.js.nft.json +1 -1
  36. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/groups/route.js +3 -3
  37. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/groups/route.js.nft.json +1 -1
  38. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/activity/route.js +3 -3
  39. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/activity/route.js.nft.json +1 -1
  40. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/recap/route.js +3 -3
  41. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/recap/route.js.nft.json +1 -1
  42. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/route.js +4 -4
  43. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/[id]/route.js.nft.json +1 -1
  44. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/route.js +3 -3
  45. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/items/route.js.nft.json +1 -1
  46. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/mcp-setup/route.js +3 -3
  47. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/mcp-setup/route.js.nft.json +1 -1
  48. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/options/route.js +3 -3
  49. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/options/route.js.nft.json +1 -1
  50. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/[id]/route.js +1 -1
  51. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/[id]/route.js.nft.json +1 -1
  52. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/route.js +3 -3
  53. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/route.js.nft.json +1 -1
  54. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/scripted/route.js +1 -1
  55. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/runs/scripted/route.js.nft.json +1 -1
  56. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/status/route.js +4 -4
  57. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/status/route.js.nft.json +1 -1
  58. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token/route.js +3 -3
  59. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token/route.js.nft.json +1 -1
  60. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token-receive/route.js +3 -3
  61. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/token-receive/route.js.nft.json +1 -1
  62. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/worker/route.js +6 -6
  63. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/[tracker]/worker/route.js.nft.json +1 -1
  64. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/connections/route.js +7 -2
  65. package/cloud-runtime/standalone/apps/local/.next/server/app/api/trackers/connections/route.js.nft.json +1 -1
  66. package/cloud-runtime/standalone/apps/local/.next/server/app/index.html +2 -2
  67. package/cloud-runtime/standalone/apps/local/.next/server/app/index.rsc +2 -2
  68. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  69. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +2 -2
  70. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_head.segment.rsc +1 -1
  71. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_index.segment.rsc +2 -2
  72. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  73. package/cloud-runtime/standalone/apps/local/.next/server/app/page_client-reference-manifest.js +1 -1
  74. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
  75. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
  76. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +1 -1
  77. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  78. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page_client-reference-manifest.js +1 -1
  79. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page_client-reference-manifest.js +1 -1
  80. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  81. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  82. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page_client-reference-manifest.js +1 -1
  83. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page_client-reference-manifest.js +1 -1
  84. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page_client-reference-manifest.js +1 -1
  85. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page_client-reference-manifest.js +1 -1
  86. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page_client-reference-manifest.js +1 -1
  87. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page_client-reference-manifest.js +1 -1
  88. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
  89. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page_client-reference-manifest.js +1 -1
  90. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page_client-reference-manifest.js +1 -1
  91. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page_client-reference-manifest.js +1 -1
  92. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  93. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
  94. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +2 -2
  95. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  96. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  97. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  98. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  99. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
  100. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  101. package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  102. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
  103. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +2 -2
  104. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +2 -2
  105. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
  106. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
  107. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  108. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
  109. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
  110. package/cloud-runtime/standalone/apps/local/.next/server/app/status/page_client-reference-manifest.js +1 -1
  111. package/cloud-runtime/standalone/apps/local/.next/server/app/status.html +2 -2
  112. package/cloud-runtime/standalone/apps/local/.next/server/app/status.rsc +2 -2
  113. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +2 -2
  114. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_head.segment.rsc +1 -1
  115. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_index.segment.rsc +2 -2
  116. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  117. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
  118. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status.segment.rsc +1 -1
  119. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0fbbaf2d._.js +1 -1
  120. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__10a90219._.js +3 -3
  121. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__2ab23e45._.js → [root-of-the-server]__2eb13697._.js} +2 -2
  122. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__3a038592._.js +3 -3
  123. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__498d8b2d._.js +3 -0
  124. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__68b692c4._.js +9 -9
  125. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__7fcbb0c2._.js +2 -2
  126. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__ba72d342._.js +5 -5
  127. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_1a4cb196._.js +1 -1
  128. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_5e5f36c4._.js +1 -1
  129. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_9f0fd451._.js +3 -0
  130. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_e1f4d9ad._.js +1 -1
  131. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_f8b3abae._.js +1 -1
  132. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_orchestrator_chat-processor_ts_46384f36._.js +12 -12
  133. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__b8484b0e._.js +1 -1
  134. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_5eebb5cb._.js +1 -1
  135. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_projects_ProjectObjectivesWorkspace_tsx_751ab3d3._.js +7 -7
  136. package/cloud-runtime/standalone/apps/local/.next/server/middleware-manifest.json +5 -5
  137. package/cloud-runtime/standalone/apps/local/.next/server/pages/404.html +2 -2
  138. package/cloud-runtime/standalone/apps/local/.next/server/pages/500.html +2 -2
  139. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
  140. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
  141. package/cloud-runtime/standalone/apps/local/.next/static/chunks/7148feb61274d431.css +1 -0
  142. package/cloud-runtime/standalone/apps/local/.next/static/chunks/8b91e7692a899f00.js +20 -0
  143. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{6c278ae4535b6d5c.js → 9e2208153f276f8c.js} +1 -1
  144. package/cloud-runtime/standalone/apps/local/.next/static/chunks/d590384ce3045a12.js +5 -0
  145. package/cloud-runtime/standalone/apps/local/app/api/trackers/connections/route.ts +46 -2
  146. package/cloud-runtime/standalone/apps/local/app/projects/[slug]/tracking/connect/page.tsx +41 -11
  147. package/cloud-runtime/standalone/apps/local/components/projects/ProjectObjectivesWorkspace.tsx +204 -49
  148. package/cloud-runtime/standalone/apps/local/hooks/useTrackerConnections.ts +29 -1
  149. package/cloud-runtime/standalone/apps/local/lib/agent-process-registry.ts +8 -2
  150. package/cloud-runtime/standalone/apps/local/lib/tracker/connections.ts +46 -15
  151. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/objective-worker.ts +7 -0
  152. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/task-worker.ts +7 -0
  153. package/cloud-runtime/standalone/apps/local/worker/index.js +7 -2
  154. package/package.json +1 -1
  155. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__847236fb._.js +0 -3
  156. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_80b34b78._.js +0 -3
  157. package/cloud-runtime/standalone/apps/local/.next/static/chunks/cecf3e8c47c785f5.js +0 -5
  158. package/cloud-runtime/standalone/apps/local/.next/static/chunks/e72724fd8225ec39.js +0 -20
  159. package/cloud-runtime/standalone/apps/local/.next/static/chunks/f6d31036588ddfe4.css +0 -1
  160. /package/cloud-runtime/standalone/apps/local/.next/static/{4MnUE2NHztybGBWFbcBo5 → 3-6VaSnGGXdV-2eV44RDK}/_buildManifest.js +0 -0
  161. /package/cloud-runtime/standalone/apps/local/.next/static/{4MnUE2NHztybGBWFbcBo5 → 3-6VaSnGGXdV-2eV44RDK}/_clientMiddlewareManifest.json +0 -0
  162. /package/cloud-runtime/standalone/apps/local/.next/static/{4MnUE2NHztybGBWFbcBo5 → 3-6VaSnGGXdV-2eV44RDK}/_ssgManifest.js +0 -0
@@ -12,7 +12,7 @@ module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/a
12
12
  project_slug TEXT NOT NULL DEFAULT '',
13
13
  UNIQUE (workspace_id, agent_id)
14
14
  )
15
- `),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_state ON agent_processes (state)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_thread ON agent_processes (thread_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_workspace ON agent_processes (workspace_id)");try{e.exec("ALTER TABLE agent_processes ADD COLUMN project_slug TEXT NOT NULL DEFAULT ''")}catch{}try{e.exec("ALTER TABLE agent_processes ADD COLUMN response_message_id TEXT NOT NULL DEFAULT ''")}catch{}return e.exec(`
15
+ `),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_state ON agent_processes (state)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_thread ON agent_processes (thread_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_workspace ON agent_processes (workspace_id)");try{e.exec("ALTER TABLE agent_processes ADD COLUMN project_slug TEXT NOT NULL DEFAULT ''")}catch{}try{e.exec("ALTER TABLE agent_processes ADD COLUMN response_message_id TEXT NOT NULL DEFAULT ''")}catch{}e.exec(`
16
16
  CREATE TABLE IF NOT EXISTS messages (
17
17
  thread_id TEXT NOT NULL,
18
18
  id TEXT NOT NULL,
@@ -22,7 +22,7 @@ module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/a
22
22
  timestamp INTEGER NOT NULL,
23
23
  PRIMARY KEY (thread_id, id)
24
24
  )
25
- `),e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='linear_runs'").get()&&e.exec("ALTER TABLE linear_runs RENAME TO tracker_runs"),e.exec(`
25
+ `);let r=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='linear_runs'").get(),a=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='tracker_runs'").get();return r&&!a?e.exec("ALTER TABLE linear_runs RENAME TO tracker_runs"):r&&a&&e.exec("DROP TABLE linear_runs"),e.exec(`
26
26
  CREATE TABLE IF NOT EXISTS tracker_runs (
27
27
  id TEXT PRIMARY KEY,
28
28
  project_id TEXT,
@@ -64,6 +64,6 @@ module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/a
64
64
  LEFT JOIN tracker_runs tr ON tr.chat_run_id = ap.id
65
65
  `).all().map(e=>({...d(e),threadTitle:e.thread_title,trackerItemId:e.tracker_item_id??null,trackerRunId:e.tracker_run_id??null,trackerType:e.tracker_type??null,linearIssueId:e.tracker_item_id??null,linearRunId:e.tracker_run_id??null})))}function g(e){let t=0;for(let r of e){if(r.pid>0)try{process.kill(r.pid,"SIGTERM")}catch{}t++}return t}function N(e){let t=g(u(e).filter(e=>"running"===e.state||"spawning"===e.state));return t>0&&l(t=>t.prepare(`UPDATE agent_processes SET state = 'killed', last_activity = ?
66
66
  WHERE thread_id = ? AND state IN ('running', 'spawning')`).run(Date.now(),e)),t}function h(e){let t=g(T(e).filter(e=>"running"===e.state||"spawning"===e.state));return t>0&&l(t=>t.prepare(`UPDATE agent_processes SET state = 'killed', last_activity = ?
67
- WHERE workspace_id = ? AND state IN ('running', 'spawning')`).run(Date.now(),e)),t}e.s(["getAll",()=>E,"getAllEnriched",()=>_,"getByThread",()=>u,"getByWorkspace",()=>T,"killByThread",()=>N,"killByWorkspace",()=>h,"register",()=>c,"update",()=>p])},748564,e=>{"use strict";var t=e.i(692988),r=e.i(635595),a=e.i(75473),s=e.i(923435),n=e.i(418475),i=e.i(303482),o=e.i(976287),d=e.i(774462),l=e.i(111998),c=e.i(201516),p=e.i(68877),u=e.i(259460),T=e.i(257714),E=e.i(502073),_=e.i(187345),g=e.i(193695);e.i(293777);var N=e.i(274321),h=e.i(732470),R=e.i(558174);async function x(e){let t=e.nextUrl.searchParams.get("threadId"),r=e.nextUrl.searchParams.get("workspaceId"),a="1"===e.nextUrl.searchParams.get("enrich");return t?h.NextResponse.json((0,R.getByThread)(t)):r?h.NextResponse.json((0,R.getByWorkspace)(r)):a?h.NextResponse.json((0,R.getAllEnriched)()):h.NextResponse.json((0,R.getAll)())}async function A(e){let t=e.nextUrl.searchParams.get("threadId"),r=e.nextUrl.searchParams.get("workspaceId");if(t){let e=(0,R.killByThread)(t);return h.NextResponse.json({killed:e})}if(r){let e=(0,R.killByWorkspace)(r);return h.NextResponse.json({killed:e})}return h.NextResponse.json({error:"threadId or workspaceId required"},{status:400})}e.s(["DELETE",()=>A,"GET",()=>x],26206);var L=e.i(26206);let m=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/processes/route",pathname:"/api/processes",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/local/app/api/processes/route.ts",nextConfigOutput:"standalone",userland:L}),{workAsyncStorage:O,workUnitAsyncStorage:I,serverHooks:f}=m;function v(){return(0,a.patchFetch)({workAsyncStorage:O,workUnitAsyncStorage:I})}async function U(e,t,a){m.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let h="/api/processes/route";h=h.replace(/\/index$/,"")||"/";let R=await m.prepare(e,t,{srcPage:h,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:x,params:A,nextConfig:L,parsedUrl:O,isDraftMode:I,prerenderManifest:f,routerServerContext:v,isOnDemandRevalidate:U,revalidateOnlyGenerated:y,resolvedPathname:k,clientReferenceManifest:w,serverActionsManifest:C}=R,S=(0,o.normalizeAppPath)(h),D=!!(f.dynamicRoutes[S]||f.routes[k]),X=async()=>((null==v?void 0:v.render404)?await v.render404(e,t,O,!1):t.end("This page could not be found"),null);if(D&&!I){let e=!!f.routes[k],t=f.dynamicRoutes[S];if(t&&!1===t.fallback&&!e){if(L.experimental.adapterPath)return await X();throw new g.NoFallbackError}}let M=null;!D||m.isDev||I||(M="/index"===(M=k)?"/":M);let P=!0===m.isDev||!D,j=D&&!P;C&&w&&(0,i.setManifestsSingleton)({page:h,clientReferenceManifest:w,serverActionsManifest:C});let F=e.method||"GET",b=(0,n.getTracer)(),q=b.getActiveScopeSpan(),B={params:A,prerenderManifest:f,renderOpts:{experimental:{authInterrupts:!!L.experimental.authInterrupts},cacheComponents:!!L.cacheComponents,supportsDynamicResponse:P,incrementalCache:(0,s.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:L.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,s)=>m.onRequestError(e,t,a,s,v)},sharedContext:{buildId:x}},H=new d.NodeNextRequest(e),G=new d.NodeNextResponse(t),W=l.NextRequestAdapter.fromNodeNextRequest(H,(0,l.signalFromNodeResponse)(t));try{let i=async e=>m.handle(W,B).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=b.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${F} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t)}else e.updateName(`${F} ${h}`)}),o=!!(0,s.getRequestMeta)(e,"minimalMode"),d=async s=>{var n,d;let l=async({previousCacheEntry:r})=>{try{if(!o&&U&&y&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await i(s);e.fetchMetrics=B.renderOpts.fetchMetrics;let d=B.renderOpts.pendingWaitUntil;d&&a.waitUntil&&(a.waitUntil(d),d=void 0);let l=B.renderOpts.collectedTags;if(!D)return await (0,u.sendResponse)(H,G,n,B.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,T.toNodeOutgoingHttpHeaders)(n.headers);l&&(t[_.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=_.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,a=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=_.INFINITE_CACHE?void 0:B.renderOpts.collectedExpire;return{value:{kind:N.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await m.onRequestError(e,t,{routerKind:"App Router",routePath:h,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:U})},!1,v),t}},c=await m.handleResponse({req:e,nextConfig:L,cacheKey:M,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:f,isRoutePPREnabled:!1,isOnDemandRevalidate:U,revalidateOnlyGenerated:y,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:o});if(!D)return null;if((null==c||null==(n=c.value)?void 0:n.kind)!==N.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(d=c.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});o||t.setHeader("x-nextjs-cache",U?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),I&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let g=(0,T.fromNodeOutgoingHttpHeaders)(c.value.headers);return o&&D||g.delete(_.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||g.get("Cache-Control")||g.set("Cache-Control",(0,E.getCacheControlHeader)(c.cacheControl)),await (0,u.sendResponse)(H,G,new Response(c.value.body,{headers:g,status:c.value.status||200})),null};q?await d(q):await b.withPropagatedContext(e.headers,()=>b.trace(c.BaseServerSpan.handleRequest,{spanName:`${F} ${h}`,kind:n.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},d))}catch(t){if(t instanceof g.NoFallbackError||await m.onRequestError(e,t,{routerKind:"App Router",routePath:S,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:U})},!1,v),D)throw t;return await (0,u.sendResponse)(H,G,new Response(null,{status:500})),null}}e.s(["handler",()=>U,"patchFetch",()=>v,"routeModule",()=>m,"serverHooks",()=>f,"workAsyncStorage",()=>O,"workUnitAsyncStorage",()=>I],748564)}];
67
+ WHERE workspace_id = ? AND state IN ('running', 'spawning')`).run(Date.now(),e)),t}e.s(["getAll",()=>E,"getAllEnriched",()=>_,"getByThread",()=>u,"getByWorkspace",()=>T,"killByThread",()=>N,"killByWorkspace",()=>h,"register",()=>c,"update",()=>p])},748564,e=>{"use strict";var t=e.i(692988),r=e.i(635595),a=e.i(75473),s=e.i(923435),n=e.i(418475),i=e.i(303482),o=e.i(976287),d=e.i(774462),l=e.i(111998),c=e.i(201516),p=e.i(68877),u=e.i(259460),T=e.i(257714),E=e.i(502073),_=e.i(187345),g=e.i(193695);e.i(293777);var N=e.i(274321),h=e.i(732470),R=e.i(558174);async function x(e){let t=e.nextUrl.searchParams.get("threadId"),r=e.nextUrl.searchParams.get("workspaceId"),a="1"===e.nextUrl.searchParams.get("enrich");return t?h.NextResponse.json((0,R.getByThread)(t)):r?h.NextResponse.json((0,R.getByWorkspace)(r)):a?h.NextResponse.json((0,R.getAllEnriched)()):h.NextResponse.json((0,R.getAll)())}async function A(e){let t=e.nextUrl.searchParams.get("threadId"),r=e.nextUrl.searchParams.get("workspaceId");if(t){let e=(0,R.killByThread)(t);return h.NextResponse.json({killed:e})}if(r){let e=(0,R.killByWorkspace)(r);return h.NextResponse.json({killed:e})}return h.NextResponse.json({error:"threadId or workspaceId required"},{status:400})}e.s(["DELETE",()=>A,"GET",()=>x],26206);var L=e.i(26206);let m=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/processes/route",pathname:"/api/processes",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/local/app/api/processes/route.ts",nextConfigOutput:"standalone",userland:L}),{workAsyncStorage:O,workUnitAsyncStorage:I,serverHooks:f}=m;function v(){return(0,a.patchFetch)({workAsyncStorage:O,workUnitAsyncStorage:I})}async function y(e,t,a){m.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let h="/api/processes/route";h=h.replace(/\/index$/,"")||"/";let R=await m.prepare(e,t,{srcPage:h,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:x,params:A,nextConfig:L,parsedUrl:O,isDraftMode:I,prerenderManifest:f,routerServerContext:v,isOnDemandRevalidate:y,revalidateOnlyGenerated:U,resolvedPathname:k,clientReferenceManifest:w,serverActionsManifest:C}=R,S=(0,o.normalizeAppPath)(h),D=!!(f.dynamicRoutes[S]||f.routes[k]),X=async()=>((null==v?void 0:v.render404)?await v.render404(e,t,O,!1):t.end("This page could not be found"),null);if(D&&!I){let e=!!f.routes[k],t=f.dynamicRoutes[S];if(t&&!1===t.fallback&&!e){if(L.experimental.adapterPath)return await X();throw new g.NoFallbackError}}let M=null;!D||m.isDev||I||(M="/index"===(M=k)?"/":M);let P=!0===m.isDev||!D,j=D&&!P;C&&w&&(0,i.setManifestsSingleton)({page:h,clientReferenceManifest:w,serverActionsManifest:C});let F=e.method||"GET",b=(0,n.getTracer)(),q=b.getActiveScopeSpan(),B={params:A,prerenderManifest:f,renderOpts:{experimental:{authInterrupts:!!L.experimental.authInterrupts},cacheComponents:!!L.cacheComponents,supportsDynamicResponse:P,incrementalCache:(0,s.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:L.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,s)=>m.onRequestError(e,t,a,s,v)},sharedContext:{buildId:x}},H=new d.NodeNextRequest(e),G=new d.NodeNextResponse(t),W=l.NextRequestAdapter.fromNodeNextRequest(H,(0,l.signalFromNodeResponse)(t));try{let i=async e=>m.handle(W,B).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=b.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${F} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t)}else e.updateName(`${F} ${h}`)}),o=!!(0,s.getRequestMeta)(e,"minimalMode"),d=async s=>{var n,d;let l=async({previousCacheEntry:r})=>{try{if(!o&&y&&U&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await i(s);e.fetchMetrics=B.renderOpts.fetchMetrics;let d=B.renderOpts.pendingWaitUntil;d&&a.waitUntil&&(a.waitUntil(d),d=void 0);let l=B.renderOpts.collectedTags;if(!D)return await (0,u.sendResponse)(H,G,n,B.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,T.toNodeOutgoingHttpHeaders)(n.headers);l&&(t[_.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=_.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,a=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=_.INFINITE_CACHE?void 0:B.renderOpts.collectedExpire;return{value:{kind:N.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await m.onRequestError(e,t,{routerKind:"App Router",routePath:h,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:y})},!1,v),t}},c=await m.handleResponse({req:e,nextConfig:L,cacheKey:M,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:f,isRoutePPREnabled:!1,isOnDemandRevalidate:y,revalidateOnlyGenerated:U,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:o});if(!D)return null;if((null==c||null==(n=c.value)?void 0:n.kind)!==N.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==c||null==(d=c.value)?void 0:d.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});o||t.setHeader("x-nextjs-cache",y?"REVALIDATED":c.isMiss?"MISS":c.isStale?"STALE":"HIT"),I&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let g=(0,T.fromNodeOutgoingHttpHeaders)(c.value.headers);return o&&D||g.delete(_.NEXT_CACHE_TAGS_HEADER),!c.cacheControl||t.getHeader("Cache-Control")||g.get("Cache-Control")||g.set("Cache-Control",(0,E.getCacheControlHeader)(c.cacheControl)),await (0,u.sendResponse)(H,G,new Response(c.value.body,{headers:g,status:c.value.status||200})),null};q?await d(q):await b.withPropagatedContext(e.headers,()=>b.trace(c.BaseServerSpan.handleRequest,{spanName:`${F} ${h}`,kind:n.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},d))}catch(t){if(t instanceof g.NoFallbackError||await m.onRequestError(e,t,{routerKind:"App Router",routePath:S,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:j,isOnDemandRevalidate:y})},!1,v),D)throw t;return await (0,u.sendResponse)(H,G,new Response(null,{status:500})),null}}e.s(["handler",()=>y,"patchFetch",()=>v,"routeModule",()=>m,"serverHooks",()=>f,"workAsyncStorage",()=>O,"workUnitAsyncStorage",()=>I],748564)}];
68
68
 
69
69
  //# sourceMappingURL=%5Broot-of-the-server%5D__3a038592._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[918622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},556704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},832319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},324725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},193695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},769025,e=>{"use strict";function t(e,t){let r=e.prepare(`PRAGMA ${t}`).get();if(!r)return;let n=Object.values(r);return n.length>0?n[0]:void 0}function r(e,t){return e.prepare(`PRAGMA ${t}`).all()}function n(e,t){e.exec(`PRAGMA ${t}`)}function a(e,t){e.exec("BEGIN");try{let r=t();return e.exec("COMMIT"),r}catch(t){throw e.exec("ROLLBACK"),t}}function s(e,t){return(...r)=>{e.exec("BEGIN");try{let n=t(...r);return e.exec("COMMIT"),n}catch(t){throw e.exec("ROLLBACK"),t}}}e.s(["pragmaAll",()=>r,"pragmaGet",()=>t,"pragmaSet",()=>n,"transaction",()=>a,"transactionFn",()=>s])},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},744071,e=>{"use strict";let t={id:"2c3cc1ca-956d-4b62-b295-4d2d3374103f",email:process.env.AGX_BOARD_USER_EMAIL||"local@agx.board",name:process.env.AGX_BOARD_USER_NAME||"Local Board User"};e.s(["LOCAL_USER",0,t])},452377,e=>{"use strict";e.x("node:sqlite",()=>require("node:sqlite"),!0);var t=e.i(769025),r=e.i(522734),n=e.i(446786),a=e.i(814747);let s="3.35.0",o=["json1"],i=["fts5"],l=["nfs","smb","cifs","efs","fuse.sshfs"];function c(e,t){try{if("json1"===t)return e.prepare("SELECT json('{}')").get(),!0;if("fts5"===t)return e.exec("CREATE VIRTUAL TABLE IF NOT EXISTS _fts5_check USING fts5(x)"),e.exec("DROP TABLE IF EXISTS _fts5_check"),!0;return!1}catch{return!1}}function u(u,d){let p=[],f=u.prepare("SELECT sqlite_version() as v").get();for(let e of(0>function(e,t){let r=e.split(".").map(Number),n=t.split(".").map(Number);for(let e=0;e<3;e++){let t=(r[e]||0)-(n[e]||0);if(0!==t)return t}return 0}(f.v,s)&&p.push({kind:"version_mismatch",message:`SQLite version ${f.v} is below minimum ${s}`,found:f.v,required:`>= ${s}`,fix:"Ensure Node.js >= 22.16 is installed (node:sqlite is built-in)"}),o))c(u,e)||p.push({kind:"missing_extension",message:`Required SQLite extension '${e}' is not available`,required:e,fix:`Rebuild SQLite with -DSQLITE_ENABLE_${e.toUpperCase()}=1, or use a system SQLite that includes it`});for(let e of i)c(u,e)||console.warn(`[startup] Recommended SQLite extension '${e}' is not available. Full-text search will be disabled.`);let h=function(t){"linux"!==n.default.platform()&&n.default.platform();try{let s=a.default.resolve(t),{execSync:o}=e.r(233405);if("darwin"===n.default.platform());else{let e=r.default.readFileSync("/proc/mounts","utf-8"),t="",n="unknown";for(let r of e.split("\n")){let[,e,a]=r.split(/\s+/);e&&s.startsWith(e)&&e.length>t.length&&(t=e,n=a||"unknown")}return n}}catch{}return null}(d);h&&l.some(e=>h.toLowerCase().includes(e))&&p.push({kind:"filesystem_error",message:`Database path '${d}' is on a network filesystem (${h})`,path:d,found:h,fix:"Move the database file to a local SSD. WAL mode requires local filesystem with reliable fsync."});try{(0,t.pragmaSet)(u,"journal_mode = wal"),(0,t.pragmaSet)(u,"foreign_keys = 1"),(0,t.pragmaSet)(u,"busy_timeout = 5000"),(0,t.pragmaSet)(u,"synchronous = 1"),(0,t.pragmaSet)(u,"cache_size = -64000");let e=(0,t.pragmaGet)(u,"journal_mode").toLowerCase(),r=new Set(["wal","delete"]);if(!r.has(e)){(0,t.pragmaSet)(u,"journal_mode = DELETE");let e=(0,t.pragmaGet)(u,"journal_mode").toLowerCase();r.has(e)?((0,t.pragmaSet)(u,"synchronous = FULL"),console.warn(`[startup] WAL unavailable, using journal_mode=${e} with synchronous=FULL`)):p.push({kind:"pragma_error",message:`Failed to set journal_mode (got '${e}', tried WAL then DELETE)`,found:e,required:"wal or delete",fix:"Ensure the database file is on a local filesystem and no other process holds an exclusive lock."})}}catch(e){p.push({kind:"pragma_error",message:`Failed to apply required PRAGMAs: ${e.message}`,fix:"Check file permissions and ensure the database is not read-only."})}return p}e.s(["validateSQLiteEnvironment",()=>u])},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},207333,e=>{"use strict";var t=e.i(692988),r=e.i(635595),n=e.i(75473),a=e.i(923435),s=e.i(418475),o=e.i(303482),i=e.i(976287),l=e.i(774462),c=e.i(111998),u=e.i(201516),d=e.i(68877),p=e.i(259460),f=e.i(257714),h=e.i(502073),m=e.i(187345),x=e.i(193695);e.i(293777);var v=e.i(274321),g=e.i(732470);e.i(698134);var R=e.i(242617),y=e.i(88007);async function E(e){let t=e.nextUrl.searchParams.get("projectId")?.trim();if(!t)return g.NextResponse.json({error:"projectId required"},{status:400});let r=(0,R.listTrackerConnections)(t),n=new Set(r.map(e=>e.type)),a=(0,y.listAdapters)();await Promise.all(a.filter(e=>!n.has(e.type)).map(async e=>{try{(await e.getStatus(t)).connected&&((0,R.addTrackerConnection)(t,{type:e.type,connectedAt:new Date().toISOString()}),r.push({type:e.type,connectedAt:new Date().toISOString()}))}catch{}}));let s=await Promise.all(r.map(async e=>{let r=(0,y.getAdapterOrNull)(e.type);if(!r)return{...e,connected:!1};try{let n=await r.getStatus(t);return{...e,connected:n.connected,user:n.user}}catch{return{...e,connected:!1}}})),o=a.map(e=>({type:e.type,displayName:e.displayName})),i=(0,R.getDefaultTrackerType)(t);return g.NextResponse.json({connections:s,available:o,defaultTracker:i})}async function w(e){let t=await e.json().catch(()=>({})),r=t.projectId?.trim();if(!r)return g.NextResponse.json({error:"projectId required"},{status:400});let n=null===t.defaultTracker||void 0===t.defaultTracker||""===t.defaultTracker?null:t.defaultTracker.trim();return n&&!(0,R.listTrackerConnections)(r).some(e=>e.type===n)?g.NextResponse.json({error:`Tracker "${n}" is not connected for this project.`},{status:400}):((0,R.setDefaultTrackerType)(r,n),g.NextResponse.json({ok:!0,defaultTracker:n}))}async function A(e){let t=await e.json().catch(()=>({})),r=t.projectId?.trim(),n=t.type?.trim();return r&&n?(0,y.getAdapterOrNull)(n)?((0,R.addTrackerConnection)(r,{type:n,connectedAt:new Date().toISOString()}),g.NextResponse.json({ok:!0,type:n})):g.NextResponse.json({error:`Unknown tracker type: ${n}`},{status:400}):g.NextResponse.json({error:"projectId and type required"},{status:400})}async function k(e){let t=await e.json().catch(()=>({})),r=t.projectId?.trim(),n=t.type?.trim();return r&&n?((0,R.removeTrackerConnection)(r,n),g.NextResponse.json({ok:!0})):g.NextResponse.json({error:"projectId and type required"},{status:400})}e.s(["DELETE",()=>k,"GET",()=>E,"PATCH",()=>w,"POST",()=>A,"dynamic",0,"force-dynamic","runtime",0,"nodejs"],143686);var S=e.i(143686);let T=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/trackers/connections/route",pathname:"/api/trackers/connections",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/apps/local/app/api/trackers/connections/route.ts",nextConfigOutput:"standalone",userland:S}),{workAsyncStorage:_,workUnitAsyncStorage:C,serverHooks:j}=T;function b(){return(0,n.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:C})}async function N(e,t,n){T.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let g="/api/trackers/connections/route";g=g.replace(/\/index$/,"")||"/";let R=await T.prepare(e,t,{srcPage:g,multiZoneDraftMode:!1});if(!R)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:y,params:E,nextConfig:w,parsedUrl:A,isDraftMode:k,prerenderManifest:S,routerServerContext:_,isOnDemandRevalidate:C,revalidateOnlyGenerated:j,resolvedPathname:b,clientReferenceManifest:N,serverActionsManifest:q}=R,L=(0,i.normalizeAppPath)(g),P=!!(S.dynamicRoutes[L]||S.routes[b]),I=async()=>((null==_?void 0:_.render404)?await _.render404(e,t,A,!1):t.end("This page could not be found"),null);if(P&&!k){let e=!!S.routes[b],t=S.dynamicRoutes[L];if(t&&!1===t.fallback&&!e){if(w.experimental.adapterPath)return await I();throw new x.NoFallbackError}}let O=null;!P||T.isDev||k||(O="/index"===(O=b)?"/":O);let D=!0===T.isDev||!P,U=P&&!D;q&&N&&(0,o.setManifestsSingleton)({page:g,clientReferenceManifest:N,serverActionsManifest:q});let $=e.method||"GET",M=(0,s.getTracer)(),H=M.getActiveScopeSpan(),F={params:E,prerenderManifest:S,renderOpts:{experimental:{authInterrupts:!!w.experimental.authInterrupts},cacheComponents:!!w.cacheComponents,supportsDynamicResponse:D,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:w.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>T.onRequestError(e,t,n,a,_)},sharedContext:{buildId:y}},G=new l.NodeNextRequest(e),B=new l.NodeNextResponse(t),K=c.NextRequestAdapter.fromNodeNextRequest(G,(0,c.signalFromNodeResponse)(t));try{let o=async e=>T.handle(K,F).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=M.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${$} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${$} ${g}`)}),i=!!(0,a.getRequestMeta)(e,"minimalMode"),l=async a=>{var s,l;let c=async({previousCacheEntry:r})=>{try{if(!i&&C&&j&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await o(a);e.fetchMetrics=F.renderOpts.fetchMetrics;let l=F.renderOpts.pendingWaitUntil;l&&n.waitUntil&&(n.waitUntil(l),l=void 0);let c=F.renderOpts.collectedTags;if(!P)return await (0,p.sendResponse)(G,B,s,F.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);c&&(t[m.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==F.renderOpts.collectedRevalidate&&!(F.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&F.renderOpts.collectedRevalidate,n=void 0===F.renderOpts.collectedExpire||F.renderOpts.collectedExpire>=m.INFINITE_CACHE?void 0:F.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await T.onRequestError(e,t,{routerKind:"App Router",routePath:g,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:C})},!1,_),t}},u=await T.handleResponse({req:e,nextConfig:w,cacheKey:O,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:S,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:j,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:i});if(!P)return null;if((null==u||null==(s=u.value)?void 0:s.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(l=u.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});i||t.setHeader("x-nextjs-cache",C?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),k&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let x=(0,f.fromNodeOutgoingHttpHeaders)(u.value.headers);return i&&P||x.delete(m.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||x.get("Cache-Control")||x.set("Cache-Control",(0,h.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(G,B,new Response(u.value.body,{headers:x,status:u.value.status||200})),null};H?await l(H):await M.withPropagatedContext(e.headers,()=>M.trace(u.BaseServerSpan.handleRequest,{spanName:`${$} ${g}`,kind:s.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},l))}catch(t){if(t instanceof x.NoFallbackError||await T.onRequestError(e,t,{routerKind:"App Router",routePath:L,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:C})},!1,_),P)throw t;return await (0,p.sendResponse)(G,B,new Response(null,{status:500})),null}}e.s(["handler",()=>N,"patchFetch",()=>b,"routeModule",()=>T,"serverHooks",()=>j,"workAsyncStorage",()=>_,"workUnitAsyncStorage",()=>C],207333)},58723,e=>{e.v(e=>Promise.resolve().then(()=>e(78362)))},138720,e=>{e.v(t=>Promise.all(["server/chunks/apps_local_lib_tracker_tracker-run-store_ts_5aa9592e._.js"].map(t=>e.l(t))).then(()=>t(85e4)))},410437,e=>{e.v(e=>Promise.resolve().then(()=>e(862263)))},836400,e=>{e.v(e=>Promise.resolve().then(()=>e(581001)))},169447,e=>{e.v(e=>Promise.resolve().then(()=>e(242617)))},119130,e=>{e.v(e=>Promise.resolve().then(()=>e(607495)))}];
2
+
3
+ //# sourceMappingURL=%5Broot-of-the-server%5D__498d8b2d._.js.map
@@ -11,9 +11,9 @@ module.exports=[508763,e=>{"use strict";var t=e.i(769025),n=e.i(522734),r=e.i(81
11
11
  );
12
12
  CREATE INDEX IF NOT EXISTS idx_attachments_message ON attachments(message_id);
13
13
  `),!e.prepare("PRAGMA table_info(attachments)").all().some(e=>"disk_name"===e.name)){e.exec("ALTER TABLE attachments ADD COLUMN disk_name TEXT NOT NULL DEFAULT ''");let t=e.prepare("SELECT id, filename FROM attachments WHERE disk_name = ''").all(),n=e.prepare("UPDATE attachments SET disk_name = ? WHERE id = ?");for(let e of t){let t=e.filename.includes(".")?"."+e.filename.split(".").pop().toLowerCase():"";n.run(e.id+t,e.id)}}}async function l(e){await n.promises.mkdir(c,{recursive:!0});let t=e.filename.includes(".")?"."+e.filename.split(".").pop().toLowerCase():"",a=e.id+t,s=r.default.join(c,a);await n.promises.writeFile(s,e.data);let i=d();try{u(i),i.prepare(`INSERT INTO attachments (id, disk_name, filename, mime_type, size, status, created_at)
14
- VALUES (?, ?, ?, ?, ?, 'uploaded', ?)`).run(e.id,a,e.filename,e.mimeType,e.size,Date.now())}finally{i.close()}return{id:e.id,filename:e.filename,mimeType:e.mimeType,size:e.size,status:"uploaded",url:`/api/attachments/${e.id}`}}async function p(e,t){if(0===t.length)return[];let n=d();try{u(n);let a=t.map(()=>"?").join(", ");return n.prepare(`UPDATE attachments SET message_id = ? WHERE id IN (${a})`).run(e,...t),n.prepare(`SELECT id, disk_name, filename, mime_type, size, status FROM attachments WHERE id IN (${a})`).all(...t).map(e=>({id:e.id,filename:e.filename,mimeType:e.mime_type,size:e.size,status:e.status,url:`/api/attachments/${e.id}`,diskPath:r.default.join(c,e.disk_name||e.id)}))}finally{n.close()}}async function T(e){let t=r.default.join(c,e);try{await n.promises.unlink(t)}catch{}let a=d();try{return u(a),a.prepare("DELETE FROM attachments WHERE id = ?").run(e).changes>0}finally{a.close()}}async function _(e){let t=d();try{u(t);let n=t.prepare("SELECT filename, disk_name, mime_type, size FROM attachments WHERE id = ?").get(e);if(!n)return null;let a=n.disk_name||e;return{filename:n.filename,mimeType:n.mime_type,size:n.size,diskPath:r.default.join(c,a)}}finally{t.close()}}async function m(e){if(0===e.length)return new Map;let t=d();try{u(t);let n=e.map(()=>"?").join(", "),r=t.prepare(`SELECT id, message_id, filename, mime_type, size, status
14
+ VALUES (?, ?, ?, ?, ?, 'uploaded', ?)`).run(e.id,a,e.filename,e.mimeType,e.size,Date.now())}finally{i.close()}return{id:e.id,filename:e.filename,mimeType:e.mimeType,size:e.size,status:"uploaded",url:`/api/attachments/${e.id}`}}async function p(e,t){if(0===t.length)return[];let n=d();try{u(n);let a=t.map(()=>"?").join(", ");return n.prepare(`UPDATE attachments SET message_id = ? WHERE id IN (${a})`).run(e,...t),n.prepare(`SELECT id, disk_name, filename, mime_type, size, status FROM attachments WHERE id IN (${a})`).all(...t).map(e=>({id:e.id,filename:e.filename,mimeType:e.mime_type,size:e.size,status:e.status,url:`/api/attachments/${e.id}`,diskPath:r.default.join(c,e.disk_name||e.id)}))}finally{n.close()}}async function _(e){let t=r.default.join(c,e);try{await n.promises.unlink(t)}catch{}let a=d();try{return u(a),a.prepare("DELETE FROM attachments WHERE id = ?").run(e).changes>0}finally{a.close()}}async function T(e){let t=d();try{u(t);let n=t.prepare("SELECT filename, disk_name, mime_type, size FROM attachments WHERE id = ?").get(e);if(!n)return null;let a=n.disk_name||e;return{filename:n.filename,mimeType:n.mime_type,size:n.size,diskPath:r.default.join(c,a)}}finally{t.close()}}async function m(e){if(0===e.length)return new Map;let t=d();try{u(t);let n=e.map(()=>"?").join(", "),r=t.prepare(`SELECT id, message_id, filename, mime_type, size, status
15
15
  FROM attachments
16
- WHERE message_id IN (${n})`).all(...e),a=new Map;for(let e of r){let t={id:e.id,filename:e.filename,mimeType:e.mime_type,size:e.size,status:e.status,url:`/api/attachments/${e.id}`},n=a.get(e.message_id)||[];n.push(t),a.set(e.message_id,n)}return a}finally{t.close()}}async function E(){let e=Date.now()-864e5,t=d();try{u(t);let a=t.prepare("SELECT id, disk_name FROM attachments WHERE message_id IS NULL AND created_at < ?").all(e);for(let{id:e,disk_name:t}of a){let a=r.default.join(c,t||e);try{await n.promises.unlink(a)}catch{}}if(a.length>0){let e=a.map(()=>"?").join(", ");t.prepare(`DELETE FROM attachments WHERE id IN (${e})`).run(...a.map(e=>e.id))}return a.length}finally{t.close()}}e.s(["createAttachment",()=>l,"deleteAttachment",()=>T,"finalizeAttachments",()=>p,"gcOrphanedAttachments",()=>E,"getAttachmentMeta",()=>_,"getAttachmentsForMessages",()=>m])},911230,e=>{"use strict";var t=e.i(601544);async function n(e){return(0,t.getChatRun)(e)}async function r(e){return(0,t.updateChatRun)(e)}async function a(e){let n=await (0,t.listChatRunSteps)(e.chatRunId);return(0,t.appendChatRunStep)({id:crypto.randomUUID(),chatRunId:e.chatRunId,stepIndex:n.length+1,kind:e.kind,status:e.status,participantId:e.participantId,inputPayload:e.inputPayload,outputPayload:e.outputPayload})}async function s(e){return(0,t.updateChatRunStep)({id:e.stepId,status:e.status,outputPayload:e.outputPayload,completedAt:Date.now()})}e.s(["appendChatRunStepActivity",()=>a,"completeChatRunStepActivity",()=>s,"loadChatRunActivity",()=>n,"updateChatRunActivity",()=>r])},249921,e=>{"use strict";class t{streams=new Map;publish(e,t){let n=this.streams.get(e);if(n||(n={events:[],subscribers:new Set,done:!1},this.streams.set(e,n)),!n.done)for(let e of(n.events.push(t),n.subscribers))try{e(t)}catch{}}subscribe(e,t){let n=this.streams.get(e);for(let r of(n||(n={events:[],subscribers:new Set,done:!1},this.streams.set(e,n)),n.events))try{t(r)}catch{}return n.done||n.subscribers.add(t),()=>{n.subscribers.delete(t)}}complete(e){let t=this.streams.get(e);if(t){for(let e of(t.done=!0,t.subscribers))try{e({type:"done"})}catch{}t.subscribers.clear(),setTimeout(()=>{this.streams.delete(e)},3e5)}}isComplete(e){return this.streams.get(e)?.done??!1}}let n=Symbol.for("agx:ChatEventBus");function r(){return globalThis[n]||(globalThis[n]=new t),globalThis[n]}e.s(["getChatEventBus",()=>r])},812057,(e,t,n)=>{t.exports=e.x("node:util",()=>require("node:util"))},533655,e=>{"use strict";e.s(["BASH_FUNCTION_TIMEOUT_MS",0,3e4,"CHECK_NPM_BUILD_TIMEOUT_MS",0,6e5,"CHECK_NPM_COVERAGE_TIMEOUT_MS",0,3e5,"CHECK_NPM_LINT_TIMEOUT_MS",0,6e4,"CHECK_NPM_TEST_TIMEOUT_MS",0,3e5,"CHECK_NPM_TYPECHECK_TIMEOUT_MS",0,12e4,"GRAPH_TIMEOUT_DEFAULT_MS",0,864e5,"NODE_TIMEOUT_DEFAULT_MS",0,18e5,"PS_COMMAND_TIMEOUT_MS",0,5e3,"QUEUE_POLL_INTERVAL_MS",0,1e3,"SCHEDULE_POLL_INTERVAL_MS",0,5e3,"SHELL_COMMAND_TIMEOUT_MS",0,5e3,"SKILLS_CACHE_TTL_MS",0,36e5,"SKILL_DETAIL_CACHE_TTL_MS",0,36e5,"SKILL_FETCH_TIMEOUT_MS",0,12e4,"STEER_DUPLICATE_WINDOW_MS",0,9e5,"WRITE_RATE_SAMPLE_WINDOW_MS",0,1e4,"WRITE_RATE_WARNING_COOLDOWN_MS",0,6e4])},466713,e=>{"use strict";var t=e.i(533655);let n={replanBudgetRemaining:3,replanBudgetInitial:3,verifyBudgetRemaining:5,verifyBudgetInitial:5,maxConcurrentAutoChecks:1,immutableRequiredGates:!0,maxConcurrent:3,priorityMode:"fifo",nodeTimeoutMs:t.NODE_TIMEOUT_DEFAULT_MS,graphTimeoutMs:t.GRAPH_TIMEOUT_DEFAULT_MS};e.s(["DEFAULT_EXECUTION_POLICY",0,n,"FAILURE_NODE_STATUSES",0,["failed"],"INCOMPLETE_FOR_DONE_STATUSES",0,["pending","running","awaiting_human","blocked"],"SOFT_DEP_SATISFIED_STATUSES",0,["done","passed","failed","skipped","blocked"],"SUCCESS_NODE_STATUSES",0,["done","passed"],"TERMINAL_NODE_STATUSES",0,["done","passed","failed","skipped"]])},160129,e=>{"use strict";var t=e.i(46081);function n(e,t=Date.now()){let r=t=>({graph:e,tickFired:!1,resetNodeIds:[],skipReason:t});if(!e.schedule)return r("no_schedule");let a=e.schedule;if("active"!==a.state)return r("not_active");let s=a.maxConcurrency??5,i=a.currentConcurrency??0;if(i>=s)return r("max_concurrency_reached");if(null!=a.maxRuns&&a.runCount>=a.maxRuns)return r("max_runs_reached");if(a.cronExpr&&"number"==typeof a.nextTickAt){if(t<a.nextTickAt)return r("not_due")}else if(t-(a.lastTickAt??0)<a.intervalMs)return r("not_due");let o=JSON.parse(JSON.stringify(e)),c=[];for(let e of a.resetNodeIds){let t=o.nodes[e];t&&("done"===t.status||"passed"===t.status||"failed"===t.status||"skipped"===t.status)&&(o.nodes[e]={...t,status:"pending",startedAt:void 0,completedAt:void 0,metrics:void 0,..."function"===t.type?{output:void 0}:{},..."conditional"===t.type?{evaluatedTo:void 0}:{}},c.push(e))}return o.schedule={...a,tickInProgress:!0,currentConcurrency:i+1,lastTickAt:t,runCount:a.runCount+1},{graph:o,tickFired:!0,resetNodeIds:c}}function r(e){if(!e.schedule)return e;let n=e.schedule,r=Math.max(0,(n.currentConcurrency??+!!n.tickInProgress)-1),a=n.nextTickAt;return n.cronExpr&&0===r&&(a=(0,t.computeNextTickFromCron)(n.cronExpr)),{...e,schedule:{...n,tickInProgress:r>0,currentConcurrency:r,nextTickAt:a}}}function a(e){if(!e.schedule)return!0;let t=new Set(["done","passed","failed","skipped"]);for(let n of e.schedule.resetNodeIds){let r=e.nodes[n];if(r&&!t.has(r.status))return!1}return!0}function s(e,t=6e4,n){return{intervalMs:t,state:"active",resetNodeIds:e,maxRuns:n,runCount:0,tickInProgress:!1,currentConcurrency:0,createdAt:new Date().toISOString()}}e.s(["completeScheduleTick",()=>r,"createThreadMonitorSchedule",()=>s,"isScheduleTickComplete",()=>a,"scheduleTickIfDue",()=>n])},558174,e=>{"use strict";var t=e.i(769025),n=e.i(814747),r=e.i(446786),a=e.i(522734);let{DatabaseSync:s}=process.getBuiltinModule("node:sqlite"),i=process.env.AGX_GROUP_CHAT_DIR?.trim()||n.default.join(r.default.homedir(),".agx","group-chat"),o=n.default.join(i,"history.sqlite");function c(e){return{id:e.id,workspaceId:e.workspace_id,threadId:e.thread_id,agentId:e.agent_id,pid:e.pid,state:e.state,sinceMessageId:e.since_message_id,responseMessageId:e.response_message_id||"",startedAt:e.started_at,lastActivity:e.last_activity,projectSlug:e.project_slug||""}}function d(e){let n=function(){(0,a.mkdirSync)(i,{recursive:!0});let e=new s(o);(0,t.pragmaSet)(e,"journal_mode = WAL"),e.exec(`
16
+ WHERE message_id IN (${n})`).all(...e),a=new Map;for(let e of r){let t={id:e.id,filename:e.filename,mimeType:e.mime_type,size:e.size,status:e.status,url:`/api/attachments/${e.id}`},n=a.get(e.message_id)||[];n.push(t),a.set(e.message_id,n)}return a}finally{t.close()}}async function E(){let e=Date.now()-864e5,t=d();try{u(t);let a=t.prepare("SELECT id, disk_name FROM attachments WHERE message_id IS NULL AND created_at < ?").all(e);for(let{id:e,disk_name:t}of a){let a=r.default.join(c,t||e);try{await n.promises.unlink(a)}catch{}}if(a.length>0){let e=a.map(()=>"?").join(", ");t.prepare(`DELETE FROM attachments WHERE id IN (${e})`).run(...a.map(e=>e.id))}return a.length}finally{t.close()}}e.s(["createAttachment",()=>l,"deleteAttachment",()=>_,"finalizeAttachments",()=>p,"gcOrphanedAttachments",()=>E,"getAttachmentMeta",()=>T,"getAttachmentsForMessages",()=>m])},911230,e=>{"use strict";var t=e.i(601544);async function n(e){return(0,t.getChatRun)(e)}async function r(e){return(0,t.updateChatRun)(e)}async function a(e){let n=await (0,t.listChatRunSteps)(e.chatRunId);return(0,t.appendChatRunStep)({id:crypto.randomUUID(),chatRunId:e.chatRunId,stepIndex:n.length+1,kind:e.kind,status:e.status,participantId:e.participantId,inputPayload:e.inputPayload,outputPayload:e.outputPayload})}async function s(e){return(0,t.updateChatRunStep)({id:e.stepId,status:e.status,outputPayload:e.outputPayload,completedAt:Date.now()})}e.s(["appendChatRunStepActivity",()=>a,"completeChatRunStepActivity",()=>s,"loadChatRunActivity",()=>n,"updateChatRunActivity",()=>r])},249921,e=>{"use strict";class t{streams=new Map;publish(e,t){let n=this.streams.get(e);if(n||(n={events:[],subscribers:new Set,done:!1},this.streams.set(e,n)),!n.done)for(let e of(n.events.push(t),n.subscribers))try{e(t)}catch{}}subscribe(e,t){let n=this.streams.get(e);for(let r of(n||(n={events:[],subscribers:new Set,done:!1},this.streams.set(e,n)),n.events))try{t(r)}catch{}return n.done||n.subscribers.add(t),()=>{n.subscribers.delete(t)}}complete(e){let t=this.streams.get(e);if(t){for(let e of(t.done=!0,t.subscribers))try{e({type:"done"})}catch{}t.subscribers.clear(),setTimeout(()=>{this.streams.delete(e)},3e5)}}isComplete(e){return this.streams.get(e)?.done??!1}}let n=Symbol.for("agx:ChatEventBus");function r(){return globalThis[n]||(globalThis[n]=new t),globalThis[n]}e.s(["getChatEventBus",()=>r])},812057,(e,t,n)=>{t.exports=e.x("node:util",()=>require("node:util"))},533655,e=>{"use strict";e.s(["BASH_FUNCTION_TIMEOUT_MS",0,3e4,"CHECK_NPM_BUILD_TIMEOUT_MS",0,6e5,"CHECK_NPM_COVERAGE_TIMEOUT_MS",0,3e5,"CHECK_NPM_LINT_TIMEOUT_MS",0,6e4,"CHECK_NPM_TEST_TIMEOUT_MS",0,3e5,"CHECK_NPM_TYPECHECK_TIMEOUT_MS",0,12e4,"GRAPH_TIMEOUT_DEFAULT_MS",0,864e5,"NODE_TIMEOUT_DEFAULT_MS",0,18e5,"PS_COMMAND_TIMEOUT_MS",0,5e3,"QUEUE_POLL_INTERVAL_MS",0,1e3,"SCHEDULE_POLL_INTERVAL_MS",0,5e3,"SHELL_COMMAND_TIMEOUT_MS",0,5e3,"SKILLS_CACHE_TTL_MS",0,36e5,"SKILL_DETAIL_CACHE_TTL_MS",0,36e5,"SKILL_FETCH_TIMEOUT_MS",0,12e4,"STEER_DUPLICATE_WINDOW_MS",0,9e5,"WRITE_RATE_SAMPLE_WINDOW_MS",0,1e4,"WRITE_RATE_WARNING_COOLDOWN_MS",0,6e4])},466713,e=>{"use strict";var t=e.i(533655);let n={replanBudgetRemaining:3,replanBudgetInitial:3,verifyBudgetRemaining:5,verifyBudgetInitial:5,maxConcurrentAutoChecks:1,immutableRequiredGates:!0,maxConcurrent:3,priorityMode:"fifo",nodeTimeoutMs:t.NODE_TIMEOUT_DEFAULT_MS,graphTimeoutMs:t.GRAPH_TIMEOUT_DEFAULT_MS};e.s(["DEFAULT_EXECUTION_POLICY",0,n,"FAILURE_NODE_STATUSES",0,["failed"],"INCOMPLETE_FOR_DONE_STATUSES",0,["pending","running","awaiting_human","blocked"],"SOFT_DEP_SATISFIED_STATUSES",0,["done","passed","failed","skipped","blocked"],"SUCCESS_NODE_STATUSES",0,["done","passed"],"TERMINAL_NODE_STATUSES",0,["done","passed","failed","skipped"]])},160129,e=>{"use strict";var t=e.i(46081);function n(e,t=Date.now()){let r=t=>({graph:e,tickFired:!1,resetNodeIds:[],skipReason:t});if(!e.schedule)return r("no_schedule");let a=e.schedule;if("active"!==a.state)return r("not_active");let s=a.maxConcurrency??5,i=a.currentConcurrency??0;if(i>=s)return r("max_concurrency_reached");if(null!=a.maxRuns&&a.runCount>=a.maxRuns)return r("max_runs_reached");if(a.cronExpr&&"number"==typeof a.nextTickAt){if(t<a.nextTickAt)return r("not_due")}else if(t-(a.lastTickAt??0)<a.intervalMs)return r("not_due");let o=JSON.parse(JSON.stringify(e)),c=[];for(let e of a.resetNodeIds){let t=o.nodes[e];t&&("done"===t.status||"passed"===t.status||"failed"===t.status||"skipped"===t.status)&&(o.nodes[e]={...t,status:"pending",startedAt:void 0,completedAt:void 0,metrics:void 0,..."function"===t.type?{output:void 0}:{},..."conditional"===t.type?{evaluatedTo:void 0}:{}},c.push(e))}return o.schedule={...a,tickInProgress:!0,currentConcurrency:i+1,lastTickAt:t,runCount:a.runCount+1},{graph:o,tickFired:!0,resetNodeIds:c}}function r(e){if(!e.schedule)return e;let n=e.schedule,r=Math.max(0,(n.currentConcurrency??+!!n.tickInProgress)-1),a=n.nextTickAt;return n.cronExpr&&0===r&&(a=(0,t.computeNextTickFromCron)(n.cronExpr)),{...e,schedule:{...n,tickInProgress:r>0,currentConcurrency:r,nextTickAt:a}}}function a(e){if(!e.schedule)return!0;let t=new Set(["done","passed","failed","skipped"]);for(let n of e.schedule.resetNodeIds){let r=e.nodes[n];if(r&&!t.has(r.status))return!1}return!0}function s(e,t=6e4,n){return{intervalMs:t,state:"active",resetNodeIds:e,maxRuns:n,runCount:0,tickInProgress:!1,currentConcurrency:0,createdAt:new Date().toISOString()}}e.s(["completeScheduleTick",()=>r,"createThreadMonitorSchedule",()=>s,"isScheduleTickComplete",()=>a,"scheduleTickIfDue",()=>n])},558174,e=>{"use strict";var t=e.i(769025),n=e.i(814747),r=e.i(446786),a=e.i(522734);let{DatabaseSync:s}=process.getBuiltinModule("node:sqlite"),i=process.env.AGX_GROUP_CHAT_DIR?.trim()||n.default.join(r.default.homedir(),".agx","group-chat"),o=n.default.join(i,"history.sqlite");function c(e){return{id:e.id,workspaceId:e.workspace_id,threadId:e.thread_id,agentId:e.agent_id,pid:e.pid,state:e.state,sinceMessageId:e.since_message_id,responseMessageId:e.response_message_id||"",startedAt:e.started_at,lastActivity:e.last_activity,projectSlug:e.project_slug||""}}function d(e){let n=function(){(0,a.mkdirSync)(i,{recursive:!0});let e=new s(o);(0,t.pragmaSet)(e,"journal_mode = WAL"),e.exec(`
17
17
  CREATE TABLE IF NOT EXISTS agent_processes (
18
18
  id INTEGER PRIMARY KEY AUTOINCREMENT,
19
19
  workspace_id TEXT NOT NULL,
@@ -27,7 +27,7 @@ module.exports=[508763,e=>{"use strict";var t=e.i(769025),n=e.i(522734),r=e.i(81
27
27
  project_slug TEXT NOT NULL DEFAULT '',
28
28
  UNIQUE (workspace_id, agent_id)
29
29
  )
30
- `),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_state ON agent_processes (state)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_thread ON agent_processes (thread_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_workspace ON agent_processes (workspace_id)");try{e.exec("ALTER TABLE agent_processes ADD COLUMN project_slug TEXT NOT NULL DEFAULT ''")}catch{}try{e.exec("ALTER TABLE agent_processes ADD COLUMN response_message_id TEXT NOT NULL DEFAULT ''")}catch{}return e.exec(`
30
+ `),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_state ON agent_processes (state)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_thread ON agent_processes (thread_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_workspace ON agent_processes (workspace_id)");try{e.exec("ALTER TABLE agent_processes ADD COLUMN project_slug TEXT NOT NULL DEFAULT ''")}catch{}try{e.exec("ALTER TABLE agent_processes ADD COLUMN response_message_id TEXT NOT NULL DEFAULT ''")}catch{}e.exec(`
31
31
  CREATE TABLE IF NOT EXISTS messages (
32
32
  thread_id TEXT NOT NULL,
33
33
  id TEXT NOT NULL,
@@ -37,7 +37,7 @@ module.exports=[508763,e=>{"use strict";var t=e.i(769025),n=e.i(522734),r=e.i(81
37
37
  timestamp INTEGER NOT NULL,
38
38
  PRIMARY KEY (thread_id, id)
39
39
  )
40
- `),e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='linear_runs'").get()&&e.exec("ALTER TABLE linear_runs RENAME TO tracker_runs"),e.exec(`
40
+ `);let n=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='linear_runs'").get(),r=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='tracker_runs'").get();return n&&!r?e.exec("ALTER TABLE linear_runs RENAME TO tracker_runs"):n&&r&&e.exec("DROP TABLE linear_runs"),e.exec(`
41
41
  CREATE TABLE IF NOT EXISTS tracker_runs (
42
42
  id TEXT PRIMARY KEY,
43
43
  project_id TEXT,
@@ -70,7 +70,7 @@ module.exports=[508763,e=>{"use strict";var t=e.i(769025),n=e.i(522734),r=e.i(81
70
70
  response_message_id = excluded.response_message_id,
71
71
  started_at = excluded.started_at,
72
72
  last_activity = excluded.last_activity,
73
- project_slug = excluded.project_slug`).run(e.workspaceId,e.threadId,e.agentId,e.pid,e.state,e.sinceMessageId,e.responseMessageId||"",e.startedAt,e.lastActivity,e.projectSlug||"");if(1===n.changes&&n.lastInsertRowid)return Number(n.lastInsertRowid);let r=t.prepare("SELECT id FROM agent_processes WHERE workspace_id = ? AND agent_id = ?").get(e.workspaceId,e.agentId);return r?.id??0})}function l(e,t,n){let r=[],a=[];void 0!==n.state&&(r.push("state = ?"),a.push(n.state)),void 0!==n.lastActivity&&(r.push("last_activity = ?"),a.push(n.lastActivity)),void 0!==n.pid&&(r.push("pid = ?"),a.push(n.pid)),0!==r.length&&d(n=>n.prepare(`UPDATE agent_processes SET ${r.join(", ")} WHERE workspace_id = ? AND agent_id = ?`).run(...a,e,t))}function p(e){return d(t=>t.prepare("SELECT * FROM agent_processes WHERE thread_id = ?").all(e).map(c))}function T(e){return d(t=>t.prepare("SELECT * FROM agent_processes WHERE workspace_id = ?").all(e).map(c))}function _(){return d(e=>e.prepare("SELECT * FROM agent_processes").all().map(c))}function m(){return d(e=>e.prepare(`
73
+ project_slug = excluded.project_slug`).run(e.workspaceId,e.threadId,e.agentId,e.pid,e.state,e.sinceMessageId,e.responseMessageId||"",e.startedAt,e.lastActivity,e.projectSlug||"");if(1===n.changes&&n.lastInsertRowid)return Number(n.lastInsertRowid);let r=t.prepare("SELECT id FROM agent_processes WHERE workspace_id = ? AND agent_id = ?").get(e.workspaceId,e.agentId);return r?.id??0})}function l(e,t,n){let r=[],a=[];void 0!==n.state&&(r.push("state = ?"),a.push(n.state)),void 0!==n.lastActivity&&(r.push("last_activity = ?"),a.push(n.lastActivity)),void 0!==n.pid&&(r.push("pid = ?"),a.push(n.pid)),0!==r.length&&d(n=>n.prepare(`UPDATE agent_processes SET ${r.join(", ")} WHERE workspace_id = ? AND agent_id = ?`).run(...a,e,t))}function p(e){return d(t=>t.prepare("SELECT * FROM agent_processes WHERE thread_id = ?").all(e).map(c))}function _(e){return d(t=>t.prepare("SELECT * FROM agent_processes WHERE workspace_id = ?").all(e).map(c))}function T(){return d(e=>e.prepare("SELECT * FROM agent_processes").all().map(c))}function m(){return d(e=>e.prepare(`
74
74
  SELECT ap.*, substr(m.content, 1, 120) AS thread_title,
75
75
  tr.issue_id AS tracker_item_id, tr.id AS tracker_run_id,
76
76
  tr.tracker_type AS tracker_type
@@ -78,8 +78,8 @@ module.exports=[508763,e=>{"use strict";var t=e.i(769025),n=e.i(522734),r=e.i(81
78
78
  LEFT JOIN messages m ON m.id = ap.thread_id AND m.thread_id = ap.workspace_id
79
79
  LEFT JOIN tracker_runs tr ON tr.chat_run_id = ap.id
80
80
  `).all().map(e=>({...c(e),threadTitle:e.thread_title,trackerItemId:e.tracker_item_id??null,trackerRunId:e.tracker_run_id??null,trackerType:e.tracker_type??null,linearIssueId:e.tracker_item_id??null,linearRunId:e.tracker_run_id??null})))}function E(e){let t=0;for(let n of e){if(n.pid>0)try{process.kill(n.pid,"SIGTERM")}catch{}t++}return t}function g(e){let t=E(p(e).filter(e=>"running"===e.state||"spawning"===e.state));return t>0&&d(t=>t.prepare(`UPDATE agent_processes SET state = 'killed', last_activity = ?
81
- WHERE thread_id = ? AND state IN ('running', 'spawning')`).run(Date.now(),e)),t}function f(e){let t=E(T(e).filter(e=>"running"===e.state||"spawning"===e.state));return t>0&&d(t=>t.prepare(`UPDATE agent_processes SET state = 'killed', last_activity = ?
82
- WHERE workspace_id = ? AND state IN ('running', 'spawning')`).run(Date.now(),e)),t}e.s(["getAll",()=>_,"getAllEnriched",()=>m,"getByThread",()=>p,"getByWorkspace",()=>T,"killByThread",()=>g,"killByWorkspace",()=>f,"register",()=>u,"update",()=>l])},84548,e=>{"use strict";function t(e,t){return`---
81
+ WHERE thread_id = ? AND state IN ('running', 'spawning')`).run(Date.now(),e)),t}function f(e){let t=E(_(e).filter(e=>"running"===e.state||"spawning"===e.state));return t>0&&d(t=>t.prepare(`UPDATE agent_processes SET state = 'killed', last_activity = ?
82
+ WHERE workspace_id = ? AND state IN ('running', 'spawning')`).run(Date.now(),e)),t}e.s(["getAll",()=>T,"getAllEnriched",()=>m,"getByThread",()=>p,"getByWorkspace",()=>_,"killByThread",()=>g,"killByWorkspace",()=>f,"register",()=>u,"update",()=>l])},84548,e=>{"use strict";function t(e,t){return`---
83
83
  ${Object.entries(e).map(([e,t])=>`${e}: ${null==t?"":String(t)}`).join("\n")}
84
84
  ---
85
85
  ${t}`}e.s(["buildMarkdownWithFrontmatter",()=>t])},471206,e=>{"use strict";var t=e.i(522734),n=e.i(446786),r=e.i(814747);let a=process.env.AGX_DATA_DIR||r.default.join(n.default.homedir(),".agx"),s=process.env.AGX_DEBUG_LOG_PATH||r.default.join(a,"logs","desktop-chat-debug.log");function i(e,t){return t instanceof Error?{name:t.name,message:t.message,stack:t.stack}:"string"==typeof t&&t.length>2e3?`${t.slice(0,2e3)}...<truncated>`:t}function o(){return s}function c(e,n){try{t.default.mkdirSync(r.default.dirname(s),{recursive:!0});let a=JSON.stringify({ts:new Date().toISOString(),pid:process.pid,event:e,...n?{payload:n}:{}},i);t.default.appendFileSync(s,`${a}
@@ -119,8 +119,8 @@ Rules:
119
119
  - Do not wrap in markdown code blocks. Just raw JSON.`;async function l(e){let t=[`Goal: ${e.goal}`,`Status: ${e.status}`,e.nodeOutputs?`Node outputs: ${JSON.stringify(e.nodeOutputs).slice(0,2e3)}`:null].filter(Boolean).join("\n"),r=`${d}
120
120
 
121
121
  Task:
122
- ${t}`,a="";try{await (0,n.runCliResponse)({provider:"claude",model:"claude-haiku-4-5-20251001",prompt:r,onDelta:e=>{a+=e}})}catch(e){return console.warn("[memory-extractor] LLM call failed:",e),[]}var s=a;let i=s.trim().replace(/^```(?:json)?\s*/i,"").replace(/\s*```\s*$/,"").trim();try{let e=JSON.parse(i);if(!Array.isArray(e))return[];return e.filter(e=>"object"==typeof e&&null!==e&&c.has(e.memory_type)&&"string"==typeof e.content&&e.content.trim().length>0).slice(0,3)}catch{return console.warn("[memory-extractor] Failed to parse LLM response:",i.slice(0,200)),[]}}let p=new Set(["outcome","decision","pattern","gotcha"]),T=["agent_id","agentId","agent","participant_id","participantId","assigned_agent","assignedAgent"];function _(e){return"string"!=typeof e?null:e.trim()||null}function m(e){let t=_(e.explicitAgentId);if(t)return t;let n=e.frontmatter||{};for(let e of T){let t=_(n[e]);if(t)return t}return _(e.defaultUserId)||"system"}async function E(e,n,a){let s=(0,r.getSQLiteDb)().prepare(`INSERT OR IGNORE INTO agent_memory (id, agent_id, task_id, memory_type, content, content_hash, created_at)
123
- VALUES (?, ?, ?, ?, ?, ?, ?)`),o=0,c=Date.now();for(let r of a){if(!p.has(r.memory_type)||!r.content?.trim())continue;let a=(0,t.createHash)("sha256").update(r.content.trim()).digest("hex");s.run((0,t.randomUUID)(),n,e,r.memory_type,r.content.trim(),a,c).changes>0&&o++}return o>0&&i(a.map(t=>({scope:"agent",subjectId:n,sourceType:"task_completion",sourceId:e,kind:t.memory_type,title:t.content.trim().slice(0,80),body:t.content.trim(),confidence:.7,durability:.6,metadata:{task_id:e}}))),o}async function g(e,t,n){let r=await l(n);if(0===r.length)return;let a=await E(e,t,r);a>0&&console.log(`[memory-extractor] Stored ${a} memories for task ${e}`)}async function f(e){let t=_(e);if(!t)return null;if(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t))return t;let n=(0,r.getSQLiteDb)().prepare("SELECT id FROM projects WHERE slug = ? LIMIT 1").get(t);return n?.id??null}async function h(e,t){let r=[`Goal: ${e.goal}`,`Status: ${e.status}`,e.nodeOutputs?`Node outputs: ${JSON.stringify(e.nodeOutputs).slice(0,2e3)}`:null].filter(Boolean).join("\n"),a=`${u}
122
+ ${t}`,a="";try{await (0,n.runCliResponse)({provider:"claude",model:"claude-haiku-4-5-20251001",prompt:r,onDelta:e=>{a+=e}})}catch(e){return console.warn("[memory-extractor] LLM call failed:",e),[]}var s=a;let i=s.trim().replace(/^```(?:json)?\s*/i,"").replace(/\s*```\s*$/,"").trim();try{let e=JSON.parse(i);if(!Array.isArray(e))return[];return e.filter(e=>"object"==typeof e&&null!==e&&c.has(e.memory_type)&&"string"==typeof e.content&&e.content.trim().length>0).slice(0,3)}catch{return console.warn("[memory-extractor] Failed to parse LLM response:",i.slice(0,200)),[]}}let p=new Set(["outcome","decision","pattern","gotcha"]),_=["agent_id","agentId","agent","participant_id","participantId","assigned_agent","assignedAgent"];function T(e){return"string"!=typeof e?null:e.trim()||null}function m(e){let t=T(e.explicitAgentId);if(t)return t;let n=e.frontmatter||{};for(let e of _){let t=T(n[e]);if(t)return t}return T(e.defaultUserId)||"system"}async function E(e,n,a){let s=(0,r.getSQLiteDb)().prepare(`INSERT OR IGNORE INTO agent_memory (id, agent_id, task_id, memory_type, content, content_hash, created_at)
123
+ VALUES (?, ?, ?, ?, ?, ?, ?)`),o=0,c=Date.now();for(let r of a){if(!p.has(r.memory_type)||!r.content?.trim())continue;let a=(0,t.createHash)("sha256").update(r.content.trim()).digest("hex");s.run((0,t.randomUUID)(),n,e,r.memory_type,r.content.trim(),a,c).changes>0&&o++}return o>0&&i(a.map(t=>({scope:"agent",subjectId:n,sourceType:"task_completion",sourceId:e,kind:t.memory_type,title:t.content.trim().slice(0,80),body:t.content.trim(),confidence:.7,durability:.6,metadata:{task_id:e}}))),o}async function g(e,t,n){let r=await l(n);if(0===r.length)return;let a=await E(e,t,r);a>0&&console.log(`[memory-extractor] Stored ${a} memories for task ${e}`)}async function f(e){let t=T(e);if(!t)return null;if(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(t))return t;let n=(0,r.getSQLiteDb)().prepare("SELECT id FROM projects WHERE slug = ? LIMIT 1").get(t);return n?.id??null}async function h(e,t){let r=[`Goal: ${e.goal}`,`Status: ${e.status}`,e.nodeOutputs?`Node outputs: ${JSON.stringify(e.nodeOutputs).slice(0,2e3)}`:null].filter(Boolean).join("\n"),a=`${u}
124
124
 
125
125
  Current note:
126
126
  ${t||"(empty)"}
@@ -141,7 +141,7 @@ ${t}`}e.s(["buildMarkdownWithFrontmatter",()=>t])},558174,e=>{"use strict";var t
141
141
  project_slug TEXT NOT NULL DEFAULT '',
142
142
  UNIQUE (workspace_id, agent_id)
143
143
  )
144
- `),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_state ON agent_processes (state)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_thread ON agent_processes (thread_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_workspace ON agent_processes (workspace_id)");try{e.exec("ALTER TABLE agent_processes ADD COLUMN project_slug TEXT NOT NULL DEFAULT ''")}catch{}try{e.exec("ALTER TABLE agent_processes ADD COLUMN response_message_id TEXT NOT NULL DEFAULT ''")}catch{}return e.exec(`
144
+ `),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_state ON agent_processes (state)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_thread ON agent_processes (thread_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_agent_processes_workspace ON agent_processes (workspace_id)");try{e.exec("ALTER TABLE agent_processes ADD COLUMN project_slug TEXT NOT NULL DEFAULT ''")}catch{}try{e.exec("ALTER TABLE agent_processes ADD COLUMN response_message_id TEXT NOT NULL DEFAULT ''")}catch{}e.exec(`
145
145
  CREATE TABLE IF NOT EXISTS messages (
146
146
  thread_id TEXT NOT NULL,
147
147
  id TEXT NOT NULL,
@@ -151,7 +151,7 @@ ${t}`}e.s(["buildMarkdownWithFrontmatter",()=>t])},558174,e=>{"use strict";var t
151
151
  timestamp INTEGER NOT NULL,
152
152
  PRIMARY KEY (thread_id, id)
153
153
  )
154
- `),e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='linear_runs'").get()&&e.exec("ALTER TABLE linear_runs RENAME TO tracker_runs"),e.exec(`
154
+ `);let r=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='linear_runs'").get(),n=e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='tracker_runs'").get();return r&&!n?e.exec("ALTER TABLE linear_runs RENAME TO tracker_runs"):r&&n&&e.exec("DROP TABLE linear_runs"),e.exec(`
155
155
  CREATE TABLE IF NOT EXISTS tracker_runs (
156
156
  id TEXT PRIMARY KEY,
157
157
  project_id TEXT,
@@ -1,4 +1,4 @@
1
- module.exports=[254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},214348,e=>{"use strict";var t=e.i(522734),r=e.i(446786),s=e.i(814747),i=e.i(801243);let{DatabaseSync:a}=process.getBuiltinModule("node:sqlite"),o=process.env.AGX_GROUP_CHAT_DIR?.trim()||s.default.join(r.default.homedir(),".agx","group-chat"),n=s.default.join(o,"history.sqlite");function u(e){return"scripted"===e?"scripted":"chat"}function c(e){let t,r=e.chat_created_at??e.created_at,s=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,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:u(e.mode),sessionTitle:"chat"===u(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!=s?Math.max(s-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 s?new Date(s).toISOString():null}}async function l(e){await t.promises.mkdir(o,{recursive:!0});let r=new a(n);(0,i.pragmaSet)(r,"journal_mode = WAL");try{r.exec(`
1
+ module.exports=[254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},902157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},750227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},660526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},522734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},814747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},446786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},233405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},500874,(e,t,r)=>{t.exports=e.x("buffer",()=>require("buffer"))},666680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},924868,(e,t,r)=>{t.exports=e.x("fs/promises",()=>require("fs/promises"))},224361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},214348,e=>{"use strict";var t=e.i(522734),r=e.i(446786),s=e.i(814747),i=e.i(801243);let{DatabaseSync:o}=process.getBuiltinModule("node:sqlite"),a=process.env.AGX_GROUP_CHAT_DIR?.trim()||s.default.join(r.default.homedir(),".agx","group-chat"),n=s.default.join(a,"history.sqlite");function u(e){return"scripted"===e?"scripted":"chat"}function c(e){let t,r=e.chat_created_at??e.created_at,s=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,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:u(e.mode),sessionTitle:"chat"===u(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!=s?Math.max(s-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 s?new Date(s).toISOString():null}}async function l(e){await t.promises.mkdir(a,{recursive:!0});let r=new o(n);(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,
@@ -59,7 +59,7 @@ module.exports=[254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},
59
59
  CREATE UNIQUE INDEX IF NOT EXISTS idx_linear_runs_chat_run_id
60
60
  ON linear_runs (chat_run_id)
61
61
  WHERE chat_run_id IS NOT NULL;
62
- `);let t=r.prepare("PRAGMA table_info(linear_runs)").all();return t.some(e=>"mode"===e.name)||r.exec("ALTER TABLE linear_runs ADD COLUMN mode TEXT NOT NULL DEFAULT 'chat';"),t.some(e=>"recap_file_path"===e.name)||r.exec("ALTER TABLE linear_runs ADD COLUMN recap_file_path TEXT;"),e(r)}finally{r.close()}}async function d(e){var t;let r=e.issueId.trim(),s=(t=e.projectId??null,t?.trim()||null),i=Number.isFinite(e.limit)?Math.min(Math.max(Number(e.limit),1),100):50;return l(e=>{let t=[r],a=["lr.issue_id = ?"];return s&&(a.push("lr.project_id = ?"),t.push(s)),t.push(i),e.prepare(`SELECT
62
+ `);let t=r.prepare("PRAGMA table_info(linear_runs)").all();return t.some(e=>"mode"===e.name)||r.exec("ALTER TABLE linear_runs ADD COLUMN mode TEXT NOT NULL DEFAULT 'chat';"),t.some(e=>"recap_file_path"===e.name)||r.exec("ALTER TABLE linear_runs ADD COLUMN recap_file_path TEXT;"),e(r)}finally{r.close()}}async function d(e){var t;let r=e.issueId.trim(),s=(t=e.projectId??null,t?.trim()||null),i=Number.isFinite(e.limit)?Math.min(Math.max(Number(e.limit),1),100):50;return l(e=>{let t=[r],o=["lr.issue_id = ?"];return s&&(o.push("lr.project_id = ?"),t.push(s)),t.push(i),e.prepare(`SELECT
63
63
  lr.*,
64
64
  cr.status AS chat_status,
65
65
  cr.last_error AS chat_last_error,
@@ -72,7 +72,7 @@ module.exports=[254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},
72
72
  SELECT id FROM chat_runs WHERE thread_id = lr.thread_id ORDER BY updated_at DESC LIMIT 1
73
73
  )
74
74
  LEFT JOIN messages msg ON msg.thread_id = lr.thread_id AND msg.id = lr.root_message_id
75
- WHERE ${a.join(" AND ")}
75
+ WHERE ${o.join(" AND ")}
76
76
  ORDER BY lr.created_at DESC
77
77
  LIMIT ?`).all(...t).map(c)})}async function p(e){return l(t=>{let r=e?.trim(),s=r?`SELECT DISTINCT lr.issue_id, lr.agent_id, lr.agent_name
78
78
  FROM linear_runs lr
@@ -85,7 +85,7 @@ module.exports=[254799,(e,t,r)=>{t.exports=e.x("crypto",()=>require("crypto"))},
85
85
  INNER JOIN chat_runs cr ON cr.id = (
86
86
  SELECT id FROM chat_runs WHERE thread_id = lr.thread_id ORDER BY updated_at DESC LIMIT 1
87
87
  )
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])},857155,e=>{"use strict";var t=e.i(577820),r=e.i(297761),s=e.i(214348),i=e.i(577251);e.i(533111);var a=e.i(782557),o=e.i(700014);let n="project_objective_health_history",u={"on track":"on_track","at risk":"at_risk","off track":"off_track",done:"done"};function c(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(374371),_=e.i(994281);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:o,objectiveContext:n}=e,{project:u,workspace:c,objective:l}=n,d=u.slug??u.id,[{issues:p},T,_,E]=await Promise.all([(0,r.listObjectiveTrackerIssues)({projectId:u.id,objectiveKey:l.key,projectSlug:d,refresh:!0}),(0,s.getIssueActiveAgents)(u.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!==o.id),j=c.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",o.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,o.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,x=null!==f&&null!==L&&(f!==s.objective.progress||L!==s.objective.status),D=x?(0,_.upsertProjectObjective)(s.workspace,{...s.objective,progress:f,status:L,updatedAt:y}):s.workspace,X=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,C=e=>{let t=e;return X&&(t=(0,_.writeProjectHealthSnapshot)(t,X)),w&&(t=function(e,t){let r=t.objectiveId.trim();if(!r)return e;let s=function(e,t){if(!c(e)||!t.trim())return[];let r=e[n];if(!c(r))return[];let s=r[t.trim()];return Array.isArray(s)?p(s.map(e=>(function(e){if(!c(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:u[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=c(e[n])?e[n]:{};return{...e,[n]:{...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};x?await (0,o.persistProjectObjectiveWorkspace)({projectId:s.project.id,currentMetadata:s.project.metadata,workspace:D,transformMetadata:C}):(w||X)&&await (0,o.persistProjectObjectiveMetadata)({projectId:s.project.id,currentMetadata:s.project.metadata,transformMetadata:C});let{dispatchObjectiveAction:U}=await e.A(371020),M=await U({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:$}=await e.A(371020);return await $(M,{jobId:t.job.id,projectId:t.job.projectId,objectiveId:t.job.objectiveId}),{output:M.result,error:"failed"===M.status?M.result:"",durationMs:Date.now()-r,status:M.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],857155)}];
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])},857155,e=>{"use strict";var t=e.i(577820),r=e.i(297761),s=e.i(214348),i=e.i(577251);e.i(533111);var o=e.i(782557),a=e.i(700014);let n="project_objective_health_history",u={"on track":"on_track","at risk":"at_risk","off track":"off_track",done:"done"};function c(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(374371),_=e.i(994281);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 f(e,t,r){return`${e}: ${t}% ${E[r]}`}function I(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:a,objectiveContext:n}=e,{project:u,workspace:c,objective:l}=n,d=u.slug??u.id,[{issues:p},T,_,E]=await Promise.all([(0,r.listObjectiveTrackerIssues)({projectId:u.id,objectiveKey:l.key,projectSlug:d,refresh:!0}),(0,s.getIssueActiveAgents)(u.id),Promise.resolve((0,i.getActivityRepository)(d,l.key).list({limit:20})),Promise.resolve((0,o.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!==a.id),j=c.objectives.filter(e=>e.id!==l.id),f=[];f.push("GOAL",l.title,l.summary?.trim()||"No summary provided."),f.push("","CURRENT STATE",`Progress: ${l.progress}% | Status: ${l.status}`),E.length>0&&f.push("","NOTES",...E.map(e=>`### ${e.title}
89
+ ${e.body}`));let b=_.activities??[];return b.length>0&&f.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?f.push("","LINEAR TICKETS",p.map(e=>I(e)).join("\n\n")):f.push("","LINEAR TICKETS","- None."),g.length>0&&f.push("","ACTIVE SESSIONS",...g.map(e=>`- ${e.issueId}: running with ${e.agentName}`)),N.length>0&&f.push("","SCHEDULED TASKS",...N.map(e=>`- ${e.name} | state: ${e.state} | last outcome: ${e.lastOutcome??"none"}`)),j.length>0&&f.push("","PROJECT CONTEXT",...j.map(e=>`- ${e.title} (${e.key}) | ${e.progress}% | ${e.status}`)),f.push("","GUIDANCE",a.prompt.trim()||"No additional guidance provided."),f.push("","ELIGIBLE TICKETS",h.length>0?h.map(e=>I(e)).join("\n\n"):"- None."),f.push("","---","What single action most advances this objective right now?"),{prompt:f.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,a.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}),o=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"!==o.status)return{...o,output:o.output||"Objective controller failed before selecting an action."};let T=h(o.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=o.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 I="string"==typeof T?.reason?T.reason.trim():"",L=N(T?.objectiveProgress),O=j(T?.objectiveStatus),A=N(T?.projectProgress),v=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?f("Objective health",L,O):null,w=null!==A&&v?f("Project health",A,v):null,x=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,D=null!==L&&null!==O&&(L!==s.objective.progress||O!==s.objective.status),X=D?(0,_.upsertProjectObjective)(s.workspace,{...s.objective,progress:L,status:O,updatedAt:R}):s.workspace,C=null!==A&&null!==v?{progress:A,status:v,updatedAt:R,source:`scheduled-task:${t.job.id}`,objectiveId:s.objective.id,objectiveKey:s.objective.key,note:S||void 0}:null,U=e=>{let t=e;return C&&(t=(0,_.writeProjectHealthSnapshot)(t,C)),x&&(t=function(e,t){let r=t.objectiveId.trim();if(!r)return e;let s=function(e,t){if(!c(e)||!t.trim())return[];let r=e[n];if(!c(r))return[];let s=r[t.trim()];return Array.isArray(s)?p(s.map(e=>(function(e){if(!c(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:u[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),o=c(e[n])?e[n]:{};return{...e,[n]:{...o,[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,x)),t};D?await (0,a.persistProjectObjectiveWorkspace)({projectId:s.project.id,currentMetadata:s.project.metadata,workspace:X,transformMetadata:U}):(x||C)&&await (0,a.persistProjectObjectiveMetadata)({projectId:s.project.id,currentMetadata:s.project.metadata,transformMetadata:U});let{dispatchObjectiveAction:M}=await e.A(371020),$=await M({action:g,parsed:T,reason:I,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(371020);return await P($,{jobId:t.job.id,projectId:t.job.projectId,objectiveId:t.job.objectiveId}),{output:$.result,error:"failed"===$.status?$.result:"",durationMs:Date.now()-r,status:$.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],857155)}];
90
90
 
91
91
  //# sourceMappingURL=%5Broot-of-the-server%5D__ba72d342._.js.map
@@ -88,7 +88,7 @@ module.exports=[11061,e=>{"use strict";var t=e.i(522734),r=e.i(446786),s=e.i(814
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",()=>c])},959181,e=>{"use strict";var t=e.i(84516),r=e.i(184951),s=e.i(11061),a=e.i(29764),n=e.i(460275),i=e.i(914284);async function o(e){let[t]=await (0,r.getLinearIssueContexts)([e]);if(!t)throw Error(`Linear issue not found: ${e}`);let a=(await (0,s.listLinearRuns)({issueId:e,limit:10})).map(e=>`- ${e.status}: ${e.sessionTitle??e.issueTitle} (${e.agentName})`).join("\n"),o=[`Ticket: ${t.identifier} — ${t.title}`,`Status: ${t.status??"unknown"}`,t.assignee?`Assignee: ${t.assignee}`:null,t.description?`
89
89
  Description:
90
90
  ${t.description}`:null,"",a?`Prior sessions:
91
- ${a}`:"No prior sessions.","","Write the recap now."].filter(Boolean).join("\n"),u="";await (0,n.runCliResponse)({provider:"claude",model:null,prompt:o,systemContext:"You are writing a short recap of a Linear ticket.\nOutput raw markdown only — no JSON, no fences around the whole response.\nKeep it 100–250 words.\nCover: what the ticket is about, what's been attempted (if anything), and what's open.\nWrite in plain prose. No headings above h3.",onDelta:e=>{u+=e}});let l=u.trim();if(!l)throw Error("Recap generation returned empty output");await (0,i.writeRecap)(e,l)}let u=null;var l=e.i(471315);async function d(e){let t=Date.now(),r="";try{return await (0,n.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 c(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:null}catch{return null}}async function p(e){let t=(u||(u=function(e){let t=e.failureHoldMs??6e4,r=new Map;function s(e,t){t?r.set(e,t):r.delete(e)}async function a(a){s(a,{status:"running",startedAt:Date.now()});try{await e.generate(a),s(a,null)}catch(n){let e=n instanceof Error?n.message:String(n);s(a,{status:"failed",startedAt:Date.now(),error:e}),setTimeout(()=>{let e=r.get(a);e?.status==="failed"&&r.delete(a)},t)}}return{enqueue(e){let t=r.get(e);if(t&&"failed"!==t.status)return t;let s={status:"queued",startedAt:Date.now()};return r.set(e,s),Promise.resolve().then(()=>a(e)),s},get:e=>r.get(e)??null}}({generate:o})),u),r=Date.now();for(let s of e){if((0,a.isObjectiveTrackerTerminalStatus)(s.status??""))continue;let e=await (0,i.readLatestRecap)(s.id);(!e||r-e.generatedAt.getTime()>216e5)&&t.enqueue(s.id)}}function T(e){return[`- id: ${e.id}`,` identifier: ${e.identifier}`,` title: ${e.title}`,` status: ${e.status}`,` assignee: ${e.assignee??"Unassigned"}`,e.url?` url: ${e.url}`:null,e.labels&&e.labels.length>0?` labels: ${e.labels.join(", ")}`:null].filter(e=>!!e).join("\n")}async function _(e){let{job:n,projectId:i,projectSlug:o}=e;await (0,r.ensureLinearIssueCache)({projectId:i,refresh:!0,projectSlug:o??void 0});let[{issues:u},l]=await Promise.all([(0,r.listLinearIssueSummaries)({limit:500}),e.projectId?(0,s.getIssueActiveAgents)(e.projectId):Promise.resolve([])]),d=new Set(l.map(e=>e.issueId)),c=u.filter(e=>!(0,a.isObjectiveTrackerTerminalStatus)(e.status)&&!d.has(e.id)),p=(0,t.getPromptJobStore)().listJobs(e.projectId?{projectId:e.projectId}:void 0).filter(e=>e.id!==n.id&&("linear_worker"===e.executionMode||"task_worker"===e.executionMode)),_=[];_.push("WORKSPACE STATE");let m=new Map;for(let e of u)m.set(e.status,(m.get(e.status)||0)+1);return _.push("","ISSUE STATUS SUMMARY",...Array.from(m.entries()).map(([e,t])=>`- ${e}: ${t} issues`)),u.length>0?_.push("","ALL TICKETS",u.map(e=>T(e)).join("\n\n")):_.push("","ALL TICKETS","- None."),l.length>0&&_.push("","ACTIVE SESSIONS",...l.map(e=>`- ${e.issueId}: running with ${e.agentName}`)),p.length>0&&_.push("","OTHER WORKERS",...p.map(e=>`- ${e.name} | state: ${e.state} | last outcome: ${e.lastOutcome??"none"}`)),_.push("","GUIDING PROMPT",n.prompt.trim()||"No guiding prompt provided. Pick the highest-priority actionable ticket."),_.push("","ELIGIBLE TICKETS",c.length>0?c.map(e=>T(e)).join("\n\n"):"- None."),_.push("","---","Based on the full workspace state and the guiding prompt, what single action should be taken right now?"),{prompt:_.join("\n"),issues:u,eligibleIssues:c,activeIssueAgents:l}}async function m(e){let t=Date.now();try{if(!e.job.projectId)return{output:"",error:"Task worker job missing projectId",durationMs:Date.now()-t,status:"failed"};let r=await _({job:e.job,projectId:e.job.projectId,projectSlug:void 0});await p(r.issues??[]);let s=await d({...e.controllerContext,prompt:r.prompt,systemContext:'You are deciding what action a workspace worker should take next.\nYou are observing the FULL workspace — all teams, all issues.\nUse the GUIDING PROMPT to prioritize and decide what matters most.\nReturn ONLY raw JSON with no markdown fences or commentary.\nValid responses:\n{"action":"work_ticket","ticketId":"ticket-id","reason":"..."}\n{"action":"run_prompt","prompt":"detailed instructions","reason":"..."}\n{"action":"stop","reason":"..."}\nRules:\n- "work_ticket": ticketId must exactly match one of the ELIGIBLE TICKETS ids.\n- "run_prompt": for work not captured by existing tickets.\n- "stop": when no action should be taken now.',cliArgs:e.cliArgs,onSpawn:e.onSpawn});if("success"!==s.status)return{...s,output:s.output||"Task worker controller failed before selecting an action."};let a=function(e){let t=e.trim();if(!t)return null;let r=c(t);if(r)return r;let s=t.indexOf("{"),a=t.lastIndexOf("}");return -1===s||a<=s?null:c(t.slice(s,a+1))}(s.output),n="string"==typeof a?.action?a.action.trim().toLowerCase():"string"==typeof a?.decision?a.decision.trim().toLowerCase():"",i="string"==typeof a?.reason?a.reason.trim():"",o=await E({action:"work"===n?"work_ticket":n,parsed:a,reason:i,job:e.job,controllerContext:e.controllerContext,sessionAgent:e.sessionAgent,eligibleIssues:r.eligibleIssues,issues:r.issues,cliArgs:e.cliArgs,onSpawn:e.onSpawn,startMs:t});return{output:o.result,error:"failed"===o.status?o.result:"",durationMs:Date.now()-t,status:o.status}}catch(e){return{output:"",error:e instanceof Error?e.message:String(e),durationMs:Date.now()-t,status:"failed"}}}async function E(e){let{action:t,parsed:r,reason:s}=e;if("stop"===t){let t=e.issues.some(e=>!(0,a.isObjectiveTrackerTerminalStatus)(e.status)),r=0===e.issues.length?"No tickets were found in the workspace.":0===e.eligibleIssues.length?t?"All actionable tickets already have active sessions.":"All tickets are already in a terminal state.":"The controller decided that no ticket should be started right now.",n=s||r;return{action:"stop",jobName:e.job.name,reason:n,result:`No action taken.
91
+ ${a}`:"No prior sessions.","","Write the recap now."].filter(Boolean).join("\n"),u="";await (0,n.runCliResponse)({provider:"claude",model:null,prompt:o,systemContext:"You are writing a short recap of a Linear ticket.\nOutput raw markdown only — no JSON, no fences around the whole response.\nKeep it 100–250 words.\nCover: what the ticket is about, what's been attempted (if anything), and what's open.\nWrite in plain prose. No headings above h3.",onDelta:e=>{u+=e}});let l=u.trim();if(!l)throw Error("Recap generation returned empty output");await (0,i.writeRecap)(e,l)}let u=null;var l=e.i(471315);async function d(e){let t=Date.now(),r="";try{return await (0,n.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 c(e){try{let t=JSON.parse(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:null}catch{return null}}async function p(e){let t=(u||(u=function(e){let t=e.failureHoldMs??6e4,r=new Map;function s(e,t){t?r.set(e,t):r.delete(e)}async function a(a){s(a,{status:"running",startedAt:Date.now()});try{await e.generate(a),s(a,null)}catch(n){let e=n instanceof Error?n.message:String(n);s(a,{status:"failed",startedAt:Date.now(),error:e}),setTimeout(()=>{let e=r.get(a);e?.status==="failed"&&r.delete(a)},t)}}return{enqueue(e){let t=r.get(e);if(t&&"failed"!==t.status)return t;let s={status:"queued",startedAt:Date.now()};return r.set(e,s),Promise.resolve().then(()=>a(e)),s},get:e=>r.get(e)??null}}({generate:o})),u),r=Date.now();for(let s of e){if((0,a.isObjectiveTrackerTerminalStatus)(s.status??""))continue;let e=await (0,i.readLatestRecap)(s.id);(!e||r-e.generatedAt.getTime()>216e5)&&t.enqueue(s.id)}}function T(e){return[`- id: ${e.id}`,` identifier: ${e.identifier}`,` title: ${e.title}`,` status: ${e.status}`,` assignee: ${e.assignee??"Unassigned"}`,e.url?` url: ${e.url}`:null,e.labels&&e.labels.length>0?` labels: ${e.labels.join(", ")}`:null].filter(e=>!!e).join("\n")}async function _(e){let{job:n,projectId:i,projectSlug:o}=e;await (0,r.ensureLinearIssueCache)({projectId:i,refresh:!0,projectSlug:o??void 0});let[{issues:u},l]=await Promise.all([(0,r.listLinearIssueSummaries)({limit:500}),e.projectId?(0,s.getIssueActiveAgents)(e.projectId):Promise.resolve([])]),d=new Set(l.map(e=>e.issueId)),c=u.filter(e=>!(0,a.isObjectiveTrackerTerminalStatus)(e.status)&&!d.has(e.id)),p=(0,t.getPromptJobStore)().listJobs(e.projectId?{projectId:e.projectId}:void 0).filter(e=>e.id!==n.id&&("linear_worker"===e.executionMode||"task_worker"===e.executionMode)),_=[];_.push("WORKSPACE STATE");let m=new Map;for(let e of u)m.set(e.status,(m.get(e.status)||0)+1);return _.push("","ISSUE STATUS SUMMARY",...Array.from(m.entries()).map(([e,t])=>`- ${e}: ${t} issues`)),u.length>0?_.push("","ALL TICKETS",u.map(e=>T(e)).join("\n\n")):_.push("","ALL TICKETS","- None."),l.length>0&&_.push("","ACTIVE SESSIONS",...l.map(e=>`- ${e.issueId}: running with ${e.agentName}`)),p.length>0&&_.push("","OTHER WORKERS",...p.map(e=>`- ${e.name} | state: ${e.state} | last outcome: ${e.lastOutcome??"none"}`)),_.push("","GUIDING PROMPT",n.prompt.trim()||"No guiding prompt provided. Pick the highest-priority actionable ticket."),_.push("","ELIGIBLE TICKETS",c.length>0?c.map(e=>T(e)).join("\n\n"):"- None."),_.push("","---","Based on the full workspace state and the guiding prompt, what single action should be taken right now?"),{prompt:_.join("\n"),issues:u,eligibleIssues:c,activeIssueAgents:l}}async function m(e){let t=Date.now();try{if(!e.job.projectId)return{output:"",error:"Task worker job missing projectId",durationMs:Date.now()-t,status:"failed"};let r=await _({job:e.job,projectId:e.job.projectId,projectSlug:void 0});await p(r.issues??[]);let s=await d({...e.controllerContext,prompt:r.prompt,systemContext:'You are deciding what action a workspace worker should take next.\nYou are observing the FULL workspace — all teams, all issues.\nUse the GUIDING PROMPT to prioritize and decide what matters most.\nReturn ONLY raw JSON with no markdown fences or commentary.\nValid responses:\n{"action":"work_ticket","ticketId":"ticket-id","reason":"..."}\n{"action":"run_prompt","prompt":"detailed instructions","reason":"..."}\n{"action":"stop","reason":"..."}\nRules:\n- "work_ticket": ticketId must exactly match one of the ELIGIBLE TICKETS ids.\n- "run_prompt": for work not captured by existing tickets.\n- "stop": when no action should be taken now.',cliArgs:e.cliArgs,onSpawn:e.onSpawn});if("success"!==s.status)return{...s,output:s.output||"Task worker controller failed before selecting an action."};let a=function(e){let t=e.trim();if(!t)return null;let r=c(t);if(r)return r;let s=t.indexOf("{"),a=t.lastIndexOf("}");return -1===s||a<=s?null:c(t.slice(s,a+1))}(s.output),n="string"==typeof a?.action?a.action.trim().toLowerCase():"string"==typeof a?.decision?a.decision.trim().toLowerCase():"",i="work"===n?"work_ticket":n;if(!i){let t=s.output??"";console.warn(`[task-worker] empty action from controller (job=${e.job.id}, outputLen=${t.length}, parsed=${a?"object":"null"}):`,t.slice(0,500))}let o="string"==typeof a?.reason?a.reason.trim():"",u=await E({action:i,parsed:a,reason:o,job:e.job,controllerContext:e.controllerContext,sessionAgent:e.sessionAgent,eligibleIssues:r.eligibleIssues,issues:r.issues,cliArgs:e.cliArgs,onSpawn:e.onSpawn,startMs:t});return{output:u.result,error:"failed"===u.status?u.result:"",durationMs:Date.now()-t,status:u.status}}catch(e){return{output:"",error:e instanceof Error?e.message:String(e),durationMs:Date.now()-t,status:"failed"}}}async function E(e){let{action:t,parsed:r,reason:s}=e;if("stop"===t){let t=e.issues.some(e=>!(0,a.isObjectiveTrackerTerminalStatus)(e.status)),r=0===e.issues.length?"No tickets were found in the workspace.":0===e.eligibleIssues.length?t?"All actionable tickets already have active sessions.":"All tickets are already in a terminal state.":"The controller decided that no ticket should be started right now.",n=s||r;return{action:"stop",jobName:e.job.name,reason:n,result:`No action taken.
92
92
 
93
93
  Reason: ${n}`,durationMs:Date.now()-e.startMs,status:"success"}}if("run_prompt"===t){let t="string"==typeof r?.prompt?r.prompt.trim():"";if(!t)return{action:"run_prompt",jobName:e.job.name,reason:s,result:"Controller returned run_prompt but provided no prompt text.",durationMs:Date.now()-e.startMs,status:"failed"};let a=await d({...e.controllerContext,prompt:t,cliArgs:e.cliArgs,onSpawn:e.onSpawn}),n="success"===a.status?(a.output||"").split("\n").filter(Boolean).slice(0,10).join("\n")||"Prompt completed.":`Prompt failed: ${a.error||"unknown error"}`;return{action:"run_prompt",jobName:e.job.name,reason:s,result:n,durationMs:Date.now()-e.startMs,status:a.status}}if("work_ticket"===t){let t="string"==typeof r?.ticketId?r.ticketId.trim():"",a=e.eligibleIssues.find(e=>e.id===t)??null;if(!a)return{action:"work_ticket",jobName:e.job.name,reason:s,result:`Controller selected an unknown ticket: ${t||"(empty)"}`,durationMs:Date.now()-e.startMs,status:"failed"};if(!e.job.projectId)return{action:"work_ticket",jobName:e.job.name,reason:s,result:"Task worker requires a project context to start a scripted session.",durationMs:Date.now()-e.startMs,status:"failed"};let n=await (0,l.startScriptedTrackerSession)({trackerType:"linear",projectId:e.job.projectId,projectSlug:e.job.projectId,issue:{id:a.id,identifier:a.identifier,title:a.title,status:a.status,assignee:a.assignee},agentId:e.sessionAgent.id,scriptPrompt:e.job.scriptPrompt||void 0}),i=a.url?`[${a.identifier}](${a.url})`:a.identifier;return{action:"work_ticket",jobName:e.job.name,reason:s,result:[`Started work on ${i}: ${a.title}`,s?`Reason: ${s}`:null,`Run: ${n.run.id}`].filter(e=>!!e).join("\n\n"),linearRunId:n.run.id,chatRunId:n.chatRunId,durationMs:Date.now()-e.startMs,status:"success"}}return{action:t||"unknown",jobName:e.job.name,reason:s,result:`Controller returned an invalid action: ${t||"(empty)"}`,durationMs:Date.now()-e.startMs,status:"failed"}}e.s(["buildLinearWorkerObservation",0,_,"buildTaskWorkerObservation",()=>_,"executeLinearWorker",0,m,"executeTaskWorker",()=>m],959181)}];
94
94
 
@@ -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_5e5f36c4._.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
@@ -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