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