@mndrk/agx 2.4.1 → 2.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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]/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.nft.json +1 -1
- 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.nft.json +1 -1
- 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.nft.json +1 -1
- 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.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.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.nft.json +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.nft.json +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.nft.json +1 -1
- 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.nft.json +1 -1
- 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/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]__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]__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]__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 +4 -4
- 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_80b34b78._.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_d256aa32._.js +28 -25
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_orchestrator_chat-processor_ts_46384f36._.js +17 -17
- 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_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/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/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/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/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/cecf3e8c47c785f5.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/d5607ac80145f3b7.js +1 -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/.next/static/chunks/f6d31036588ddfe4.css +1 -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/components/TrackerBoard.tsx +609 -85
- 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/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 +6 -1
- 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/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/state/trackerBoardFilters.ts +4 -0
- package/cloud-runtime/standalone/apps/local/worker/index.js +5 -2
- package/package.json +1 -1
- 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/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/{ycVU7ABTMiX10ainku7bE → 4MnUE2NHztybGBWFbcBo5}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{ycVU7ABTMiX10ainku7bE → 4MnUE2NHztybGBWFbcBo5}/_clientMiddlewareManifest.json +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{ycVU7ABTMiX10ainku7bE → 4MnUE2NHztybGBWFbcBo5}/_ssgManifest.js +0 -0
|
@@ -35,6 +35,7 @@ export function useTrackerRuns(
|
|
|
35
35
|
) {
|
|
36
36
|
const [runs, setRuns] = useState<TrackerRunRecord[]>([]);
|
|
37
37
|
const [loading, setLoading] = useState(false);
|
|
38
|
+
const [loadedForIssueId, setLoadedForIssueId] = useState<string | null>(null);
|
|
38
39
|
const issueIdRef = useRef(issueId ?? null);
|
|
39
40
|
issueIdRef.current = issueId ?? null;
|
|
40
41
|
|
|
@@ -44,6 +45,7 @@ export function useTrackerRuns(
|
|
|
44
45
|
const activeIssueId = issueIdRef.current?.trim();
|
|
45
46
|
if (!activeIssueId) {
|
|
46
47
|
setRuns([]);
|
|
48
|
+
setLoadedForIssueId(null);
|
|
47
49
|
return [];
|
|
48
50
|
}
|
|
49
51
|
|
|
@@ -58,6 +60,7 @@ export function useTrackerRuns(
|
|
|
58
60
|
const data = await response.json();
|
|
59
61
|
const nextRuns = Array.isArray(data.runs) ? (data.runs as TrackerRunRecord[]) : [];
|
|
60
62
|
setRuns(nextRuns);
|
|
63
|
+
setLoadedForIssueId(activeIssueId);
|
|
61
64
|
return nextRuns;
|
|
62
65
|
} finally {
|
|
63
66
|
setLoading(false);
|
|
@@ -66,6 +69,7 @@ export function useTrackerRuns(
|
|
|
66
69
|
|
|
67
70
|
useEffect(() => {
|
|
68
71
|
setRuns([]);
|
|
72
|
+
setLoadedForIssueId(null);
|
|
69
73
|
void refresh();
|
|
70
74
|
}, [refresh, issueId]);
|
|
71
75
|
|
|
@@ -115,6 +119,7 @@ export function useTrackerRuns(
|
|
|
115
119
|
return {
|
|
116
120
|
runs,
|
|
117
121
|
loading,
|
|
122
|
+
loadedForIssueId,
|
|
118
123
|
refresh,
|
|
119
124
|
createRun,
|
|
120
125
|
updateRun,
|
|
@@ -127,6 +127,11 @@ function getDb(): DatabaseSync {
|
|
|
127
127
|
updated_at INTEGER NOT NULL
|
|
128
128
|
)
|
|
129
129
|
`);
|
|
130
|
+
// Ensure tracker_type exists on renamed tables that predate the column
|
|
131
|
+
const cols = db.prepare("PRAGMA table_info(tracker_runs)").all() as Array<{ name: string }>;
|
|
132
|
+
if (!cols.some((c) => c.name === "tracker_type")) {
|
|
133
|
+
db.exec("ALTER TABLE tracker_runs ADD COLUMN tracker_type TEXT NOT NULL DEFAULT 'linear'");
|
|
134
|
+
}
|
|
130
135
|
return db;
|
|
131
136
|
}
|
|
132
137
|
|
|
@@ -261,7 +266,7 @@ export function getAllEnriched(): EnrichedProcessEntry[] {
|
|
|
261
266
|
tr.tracker_type AS tracker_type
|
|
262
267
|
FROM agent_processes ap
|
|
263
268
|
LEFT JOIN messages m ON m.id = ap.thread_id AND m.thread_id = ap.workspace_id
|
|
264
|
-
LEFT JOIN tracker_runs tr ON tr.
|
|
269
|
+
LEFT JOIN tracker_runs tr ON tr.chat_run_id = ap.id
|
|
265
270
|
`).all() as unknown as (Row & { thread_title: string | null; tracker_item_id: string | null; tracker_run_id: string | null; tracker_type: string | null })[];
|
|
266
271
|
return rows.map((r) => ({
|
|
267
272
|
...toEntry(r),
|
|
@@ -43,6 +43,7 @@ export function JiraIcon({ className }: { className?: string }) {
|
|
|
43
43
|
export class JiraAdapter implements TrackerAdapter {
|
|
44
44
|
type = "jira" as const;
|
|
45
45
|
displayName = "Jira Cloud";
|
|
46
|
+
groupLabel = "Sprint";
|
|
46
47
|
icon = JiraIcon;
|
|
47
48
|
|
|
48
49
|
getAuthUrl(projectId: string): string {
|
|
@@ -77,6 +77,7 @@ function cycleToGroup(cycle: LinearCycle): TrackerGroup {
|
|
|
77
77
|
export class LinearAdapter implements TrackerAdapter {
|
|
78
78
|
type = "linear" as const;
|
|
79
79
|
displayName = "Linear";
|
|
80
|
+
groupLabel = "Cycle";
|
|
80
81
|
icon = LinearIcon;
|
|
81
82
|
|
|
82
83
|
getAuthUrl(projectId: string): string {
|
|
@@ -98,6 +98,7 @@ interface RawLinearIssueNode {
|
|
|
98
98
|
title: string;
|
|
99
99
|
description: string | null;
|
|
100
100
|
url: string | null;
|
|
101
|
+
createdAt: string;
|
|
101
102
|
updatedAt: string;
|
|
102
103
|
state: LinearIssueState | null;
|
|
103
104
|
assignee: LinearIssueAssignee | null;
|
|
@@ -184,6 +185,7 @@ export interface LinearIssueNode {
|
|
|
184
185
|
title: string;
|
|
185
186
|
description: string | null;
|
|
186
187
|
url: string | null;
|
|
188
|
+
createdAt: string;
|
|
187
189
|
updatedAt: string;
|
|
188
190
|
state: Promise<LinearIssueState | null>;
|
|
189
191
|
assignee: Promise<LinearIssueAssignee | null>;
|
|
@@ -490,6 +492,7 @@ export class LinearClient {
|
|
|
490
492
|
title
|
|
491
493
|
description
|
|
492
494
|
url
|
|
495
|
+
createdAt
|
|
493
496
|
updatedAt
|
|
494
497
|
state { name }
|
|
495
498
|
assignee { id name email }
|
|
@@ -516,6 +519,7 @@ export class LinearClient {
|
|
|
516
519
|
title: issue.title,
|
|
517
520
|
description: issue.description,
|
|
518
521
|
url: issue.url,
|
|
522
|
+
createdAt: issue.createdAt,
|
|
519
523
|
updatedAt: issue.updatedAt,
|
|
520
524
|
state: Promise.resolve(issue.state),
|
|
521
525
|
assignee: Promise.resolve(issue.assignee),
|
|
@@ -581,6 +585,7 @@ export class LinearClient {
|
|
|
581
585
|
title
|
|
582
586
|
description
|
|
583
587
|
url
|
|
588
|
+
createdAt
|
|
584
589
|
updatedAt
|
|
585
590
|
state { name }
|
|
586
591
|
assignee { id name email }
|
|
@@ -279,6 +279,7 @@ export async function pullLinearIssues(input: {
|
|
|
279
279
|
cycleId: cycle?.id ?? null,
|
|
280
280
|
cycleName: cycle?.name ?? null,
|
|
281
281
|
cycleNumber: cycle?.number ?? null,
|
|
282
|
+
createdAt: issue.createdAt,
|
|
282
283
|
updatedAt: issue.updatedAt,
|
|
283
284
|
} satisfies CachedLinearIssueInput;
|
|
284
285
|
})
|
|
@@ -29,6 +29,8 @@ export interface TrackerAdapter {
|
|
|
29
29
|
type: string;
|
|
30
30
|
/** Human-readable name, e.g. 'Linear' or 'Jira Cloud' */
|
|
31
31
|
displayName: string;
|
|
32
|
+
/** Label for the group filter, e.g. 'Cycle' (Linear), 'Sprint' (Jira) */
|
|
33
|
+
groupLabel?: string;
|
|
32
34
|
/** Icon component to render in the sidebar and headers */
|
|
33
35
|
icon: ComponentType<{ className?: string }>;
|
|
34
36
|
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
|
|
3
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
4
|
+
import { promises as fs } from "node:fs";
|
|
5
|
+
import os from "node:os";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { pragmaSet, transaction } from "../sqlite-compat";
|
|
8
|
+
|
|
9
|
+
const TRACKER_DIR =
|
|
10
|
+
process.env.AGX_TRACKER_DIR?.trim() ||
|
|
11
|
+
path.join(process.env.AGX_DATA_DIR || path.join(os.homedir(), ".agx"), "tracker");
|
|
12
|
+
const DB_PATH = path.join(TRACKER_DIR, "items.sqlite");
|
|
13
|
+
|
|
14
|
+
const FIBONACCI = [1, 2, 3, 5, 8, 13, 21] as const;
|
|
15
|
+
export type FibonacciEstimate = (typeof FIBONACCI)[number];
|
|
16
|
+
export const FIBONACCI_VALUES: readonly number[] = FIBONACCI;
|
|
17
|
+
|
|
18
|
+
export interface ItemMetadata {
|
|
19
|
+
labels: string[];
|
|
20
|
+
estimate: number | null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface LabelDefinition {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
color: string | null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async function withDb<T>(run: (db: DatabaseSync) => T): Promise<T> {
|
|
30
|
+
await fs.mkdir(TRACKER_DIR, { recursive: true });
|
|
31
|
+
const db = new (process.getBuiltinModule("node:sqlite") as typeof import("node:sqlite")).DatabaseSync(DB_PATH);
|
|
32
|
+
pragmaSet(db, "journal_mode = WAL");
|
|
33
|
+
try {
|
|
34
|
+
db.exec(`
|
|
35
|
+
CREATE TABLE IF NOT EXISTS tracker_item_metadata (
|
|
36
|
+
issue_id TEXT NOT NULL,
|
|
37
|
+
project_id TEXT NOT NULL,
|
|
38
|
+
labels_json TEXT NOT NULL DEFAULT '[]',
|
|
39
|
+
estimate INTEGER,
|
|
40
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
41
|
+
PRIMARY KEY (issue_id, project_id)
|
|
42
|
+
);
|
|
43
|
+
CREATE TABLE IF NOT EXISTS tracker_label_definitions (
|
|
44
|
+
id TEXT PRIMARY KEY,
|
|
45
|
+
project_id TEXT NOT NULL,
|
|
46
|
+
name TEXT NOT NULL,
|
|
47
|
+
color TEXT,
|
|
48
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
49
|
+
UNIQUE(project_id, name)
|
|
50
|
+
);
|
|
51
|
+
`);
|
|
52
|
+
return run(db);
|
|
53
|
+
} finally {
|
|
54
|
+
db.close();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function parseLabels(json: string | null): string[] {
|
|
59
|
+
if (!json) return [];
|
|
60
|
+
try {
|
|
61
|
+
const parsed = JSON.parse(json);
|
|
62
|
+
return Array.isArray(parsed) ? parsed.filter((l: unknown) => typeof l === "string" && l.trim()) : [];
|
|
63
|
+
} catch {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export async function getItemMetadata(projectId: string, issueId: string): Promise<ItemMetadata> {
|
|
69
|
+
return withDb((db) => {
|
|
70
|
+
const row = db.prepare(
|
|
71
|
+
"SELECT labels_json, estimate FROM tracker_item_metadata WHERE project_id = ? AND issue_id = ?"
|
|
72
|
+
).get(projectId, issueId) as { labels_json: string; estimate: number | null } | undefined;
|
|
73
|
+
if (!row) return { labels: [], estimate: null };
|
|
74
|
+
return { labels: parseLabels(row.labels_json), estimate: row.estimate };
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export async function setItemMetadata(
|
|
79
|
+
projectId: string,
|
|
80
|
+
issueId: string,
|
|
81
|
+
update: { labels?: string[]; estimate?: number | null }
|
|
82
|
+
): Promise<ItemMetadata> {
|
|
83
|
+
return withDb((db) => {
|
|
84
|
+
const existing = db.prepare(
|
|
85
|
+
"SELECT labels_json, estimate FROM tracker_item_metadata WHERE project_id = ? AND issue_id = ?"
|
|
86
|
+
).get(projectId, issueId) as { labels_json: string; estimate: number | null } | undefined;
|
|
87
|
+
|
|
88
|
+
const labels = update.labels ?? parseLabels(existing?.labels_json ?? null);
|
|
89
|
+
const estimate = update.estimate !== undefined ? update.estimate : (existing?.estimate ?? null);
|
|
90
|
+
|
|
91
|
+
db.prepare(`
|
|
92
|
+
INSERT INTO tracker_item_metadata (issue_id, project_id, labels_json, estimate, updated_at)
|
|
93
|
+
VALUES (?, ?, ?, ?, datetime('now'))
|
|
94
|
+
ON CONFLICT(issue_id, project_id) DO UPDATE SET
|
|
95
|
+
labels_json = excluded.labels_json,
|
|
96
|
+
estimate = excluded.estimate,
|
|
97
|
+
updated_at = excluded.updated_at
|
|
98
|
+
`).run(issueId, projectId, JSON.stringify(labels), estimate);
|
|
99
|
+
|
|
100
|
+
return { labels, estimate };
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export async function bulkGetItemMetadata(
|
|
105
|
+
projectId: string,
|
|
106
|
+
issueIds: string[]
|
|
107
|
+
): Promise<Map<string, ItemMetadata>> {
|
|
108
|
+
if (issueIds.length === 0) return new Map();
|
|
109
|
+
return withDb((db) => {
|
|
110
|
+
const placeholders = issueIds.map(() => "?").join(", ");
|
|
111
|
+
const rows = db.prepare(
|
|
112
|
+
`SELECT issue_id, labels_json, estimate FROM tracker_item_metadata
|
|
113
|
+
WHERE project_id = ? AND issue_id IN (${placeholders})`
|
|
114
|
+
).all(projectId, ...issueIds) as Array<{ issue_id: string; labels_json: string; estimate: number | null }>;
|
|
115
|
+
|
|
116
|
+
const result = new Map<string, ItemMetadata>();
|
|
117
|
+
for (const row of rows) {
|
|
118
|
+
result.set(row.issue_id, { labels: parseLabels(row.labels_json), estimate: row.estimate });
|
|
119
|
+
}
|
|
120
|
+
return result;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export async function bulkSetEstimate(
|
|
125
|
+
projectId: string,
|
|
126
|
+
issueIds: string[],
|
|
127
|
+
estimate: number | null
|
|
128
|
+
): Promise<void> {
|
|
129
|
+
if (issueIds.length === 0) return;
|
|
130
|
+
return withDb((db) => {
|
|
131
|
+
transaction(db, () => {
|
|
132
|
+
const stmt = db.prepare(`
|
|
133
|
+
INSERT INTO tracker_item_metadata (issue_id, project_id, estimate, updated_at)
|
|
134
|
+
VALUES (?, ?, ?, datetime('now'))
|
|
135
|
+
ON CONFLICT(issue_id, project_id) DO UPDATE SET
|
|
136
|
+
estimate = excluded.estimate,
|
|
137
|
+
updated_at = excluded.updated_at
|
|
138
|
+
`);
|
|
139
|
+
for (const issueId of issueIds) {
|
|
140
|
+
stmt.run(issueId, projectId, estimate);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export async function bulkAddLabels(
|
|
147
|
+
projectId: string,
|
|
148
|
+
issueIds: string[],
|
|
149
|
+
labelsToAdd: string[]
|
|
150
|
+
): Promise<void> {
|
|
151
|
+
if (issueIds.length === 0 || labelsToAdd.length === 0) return;
|
|
152
|
+
return withDb((db) => {
|
|
153
|
+
transaction(db, () => {
|
|
154
|
+
for (const issueId of issueIds) {
|
|
155
|
+
const row = db.prepare(
|
|
156
|
+
"SELECT labels_json FROM tracker_item_metadata WHERE project_id = ? AND issue_id = ?"
|
|
157
|
+
).get(projectId, issueId) as { labels_json: string } | undefined;
|
|
158
|
+
|
|
159
|
+
const existing = parseLabels(row?.labels_json ?? null);
|
|
160
|
+
const merged = Array.from(new Set([...existing, ...labelsToAdd]));
|
|
161
|
+
|
|
162
|
+
db.prepare(`
|
|
163
|
+
INSERT INTO tracker_item_metadata (issue_id, project_id, labels_json, updated_at)
|
|
164
|
+
VALUES (?, ?, ?, datetime('now'))
|
|
165
|
+
ON CONFLICT(issue_id, project_id) DO UPDATE SET
|
|
166
|
+
labels_json = excluded.labels_json,
|
|
167
|
+
updated_at = excluded.updated_at
|
|
168
|
+
`).run(issueId, projectId, JSON.stringify(merged));
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export async function bulkRemoveLabel(
|
|
175
|
+
projectId: string,
|
|
176
|
+
issueIds: string[],
|
|
177
|
+
label: string
|
|
178
|
+
): Promise<void> {
|
|
179
|
+
if (issueIds.length === 0 || !label.trim()) return;
|
|
180
|
+
return withDb((db) => {
|
|
181
|
+
transaction(db, () => {
|
|
182
|
+
for (const issueId of issueIds) {
|
|
183
|
+
const row = db.prepare(
|
|
184
|
+
"SELECT labels_json FROM tracker_item_metadata WHERE project_id = ? AND issue_id = ?"
|
|
185
|
+
).get(projectId, issueId) as { labels_json: string } | undefined;
|
|
186
|
+
|
|
187
|
+
if (!row) continue;
|
|
188
|
+
const existing = parseLabels(row.labels_json);
|
|
189
|
+
const filtered = existing.filter((l) => l !== label);
|
|
190
|
+
|
|
191
|
+
db.prepare(
|
|
192
|
+
"UPDATE tracker_item_metadata SET labels_json = ?, updated_at = datetime('now') WHERE project_id = ? AND issue_id = ?"
|
|
193
|
+
).run(JSON.stringify(filtered), projectId, issueId);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export async function listLabelDefinitions(projectId: string): Promise<LabelDefinition[]> {
|
|
200
|
+
return withDb((db) => {
|
|
201
|
+
const rows = db.prepare(
|
|
202
|
+
"SELECT id, name, color FROM tracker_label_definitions WHERE project_id = ? ORDER BY name ASC"
|
|
203
|
+
).all(projectId) as Array<{ id: string; name: string; color: string | null }>;
|
|
204
|
+
return rows;
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export async function createLabelDefinition(
|
|
209
|
+
projectId: string,
|
|
210
|
+
name: string,
|
|
211
|
+
color?: string | null
|
|
212
|
+
): Promise<LabelDefinition> {
|
|
213
|
+
const id = globalThis.crypto?.randomUUID?.() ?? `label-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
214
|
+
const trimmedName = name.trim();
|
|
215
|
+
if (!trimmedName) throw new Error("Label name is required");
|
|
216
|
+
|
|
217
|
+
return withDb((db) => {
|
|
218
|
+
db.prepare(
|
|
219
|
+
"INSERT INTO tracker_label_definitions (id, project_id, name, color) VALUES (?, ?, ?, ?)"
|
|
220
|
+
).run(id, projectId, trimmedName, color?.trim() || null);
|
|
221
|
+
return { id, name: trimmedName, color: color?.trim() || null };
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export async function deleteLabelDefinition(projectId: string, id: string): Promise<void> {
|
|
226
|
+
return withDb((db) => {
|
|
227
|
+
db.prepare(
|
|
228
|
+
"DELETE FROM tracker_label_definitions WHERE id = ? AND project_id = ?"
|
|
229
|
+
).run(id, projectId);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export async function listAllLabels(projectId: string): Promise<Array<{ name: string; color: string | null; defined: boolean }>> {
|
|
234
|
+
return withDb((db) => {
|
|
235
|
+
const definitions = db.prepare(
|
|
236
|
+
"SELECT name, color FROM tracker_label_definitions WHERE project_id = ? ORDER BY name ASC"
|
|
237
|
+
).all(projectId) as Array<{ name: string; color: string | null }>;
|
|
238
|
+
|
|
239
|
+
const metadataRows = db.prepare(
|
|
240
|
+
"SELECT labels_json FROM tracker_item_metadata WHERE project_id = ?"
|
|
241
|
+
).all(projectId) as Array<{ labels_json: string }>;
|
|
242
|
+
|
|
243
|
+
const definedNames = new Set(definitions.map((d) => d.name));
|
|
244
|
+
const allUsed = new Set<string>();
|
|
245
|
+
for (const row of metadataRows) {
|
|
246
|
+
for (const label of parseLabels(row.labels_json)) {
|
|
247
|
+
allUsed.add(label);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
const result: Array<{ name: string; color: string | null; defined: boolean }> = [];
|
|
252
|
+
for (const def of definitions) {
|
|
253
|
+
result.push({ name: def.name, color: def.color, defined: true });
|
|
254
|
+
}
|
|
255
|
+
for (const name of allUsed) {
|
|
256
|
+
if (!definedNames.has(name)) {
|
|
257
|
+
result.push({ name, color: null, defined: false });
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return result;
|
|
261
|
+
});
|
|
262
|
+
}
|
|
@@ -40,6 +40,7 @@ interface TrackerItemRow {
|
|
|
40
40
|
cycle_number: number | null;
|
|
41
41
|
priority: string | null;
|
|
42
42
|
metadata_json: string | null;
|
|
43
|
+
created_at: string | null;
|
|
43
44
|
updated_at: string;
|
|
44
45
|
pulled_at: number;
|
|
45
46
|
}
|
|
@@ -75,6 +76,7 @@ export interface CachedTrackerItemRecord {
|
|
|
75
76
|
cycleNumber: number | null;
|
|
76
77
|
priority: string | null;
|
|
77
78
|
metadata: Record<string, unknown>;
|
|
79
|
+
createdAt: string | null;
|
|
78
80
|
updatedAt: string;
|
|
79
81
|
pulledAt: string;
|
|
80
82
|
}
|
|
@@ -102,6 +104,7 @@ export interface CachedTrackerItemInput {
|
|
|
102
104
|
cycleNumber?: number | null;
|
|
103
105
|
priority?: string | null;
|
|
104
106
|
metadata?: Record<string, unknown>;
|
|
107
|
+
createdAt?: string | null;
|
|
105
108
|
updatedAt: string;
|
|
106
109
|
}
|
|
107
110
|
|
|
@@ -211,6 +214,7 @@ function mapRow(row: TrackerItemRow): CachedTrackerItemRecord {
|
|
|
211
214
|
cycleNumber: row.cycle_number,
|
|
212
215
|
priority: row.priority,
|
|
213
216
|
metadata: row.metadata_json ? JSON.parse(row.metadata_json) : {},
|
|
217
|
+
createdAt: row.created_at,
|
|
214
218
|
updatedAt: row.updated_at,
|
|
215
219
|
pulledAt: toIso(row.pulled_at),
|
|
216
220
|
};
|
|
@@ -384,6 +388,7 @@ async function withTrackerItemDatabase<T>(run: (db: DatabaseSync) => T): Promise
|
|
|
384
388
|
ensureColumn(db, "tracker_items", "status_category", "status_category TEXT NOT NULL DEFAULT 'todo'");
|
|
385
389
|
ensureColumn(db, "tracker_items", "priority", "priority TEXT");
|
|
386
390
|
ensureColumn(db, "tracker_items", "metadata_json", "metadata_json TEXT");
|
|
391
|
+
ensureColumn(db, "tracker_items", "created_at", "created_at TEXT");
|
|
387
392
|
|
|
388
393
|
return run(db);
|
|
389
394
|
} finally {
|
|
@@ -411,8 +416,8 @@ export async function replaceCachedTrackerItems(input: {
|
|
|
411
416
|
labels_json, url, status, status_category,
|
|
412
417
|
assignee_id, assignee_name, assignee_email, is_assigned_to_me,
|
|
413
418
|
team_id, team_name, team_key, cycle_id, cycle_name, cycle_number,
|
|
414
|
-
priority, metadata_json, updated_at, pulled_at
|
|
415
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
419
|
+
priority, metadata_json, created_at, updated_at, pulled_at
|
|
420
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
416
421
|
ON CONFLICT(issue_id) DO UPDATE SET
|
|
417
422
|
tracker_type = excluded.tracker_type,
|
|
418
423
|
tracker_id = excluded.tracker_id,
|
|
@@ -435,6 +440,7 @@ export async function replaceCachedTrackerItems(input: {
|
|
|
435
440
|
cycle_number = excluded.cycle_number,
|
|
436
441
|
priority = excluded.priority,
|
|
437
442
|
metadata_json = excluded.metadata_json,
|
|
443
|
+
created_at = excluded.created_at,
|
|
438
444
|
updated_at = excluded.updated_at,
|
|
439
445
|
pulled_at = excluded.pulled_at
|
|
440
446
|
`);
|
|
@@ -464,6 +470,7 @@ export async function replaceCachedTrackerItems(input: {
|
|
|
464
470
|
toOptionalNumber(issue.cycleNumber ?? null),
|
|
465
471
|
toOptionalString(issue.priority ?? null),
|
|
466
472
|
issue.metadata ? JSON.stringify(issue.metadata) : null,
|
|
473
|
+
toOptionalString(issue.createdAt ?? null),
|
|
467
474
|
issue.updatedAt.trim(),
|
|
468
475
|
pulledAtMs
|
|
469
476
|
);
|
|
@@ -693,7 +700,7 @@ export async function listCachedTrackerItems(
|
|
|
693
700
|
orderClause = `ORDER BY LOWER(status) ${dirSql}, identifier ASC`;
|
|
694
701
|
break;
|
|
695
702
|
case "created":
|
|
696
|
-
orderClause = `ORDER BY
|
|
703
|
+
orderClause = `ORDER BY COALESCE(created_at, updated_at) ${dirSql}, identifier ASC`;
|
|
697
704
|
break;
|
|
698
705
|
default:
|
|
699
706
|
orderClause = `ORDER BY updated_at ${dirSql}, identifier ASC`;
|
|
@@ -510,6 +510,48 @@ export async function getIssueActivityMap(
|
|
|
510
510
|
});
|
|
511
511
|
}
|
|
512
512
|
|
|
513
|
+
export interface IssueStats {
|
|
514
|
+
issueId: string;
|
|
515
|
+
sessions: number;
|
|
516
|
+
messages: number;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
export async function getIssueStats(
|
|
520
|
+
projectId?: string | null
|
|
521
|
+
): Promise<IssueStats[]> {
|
|
522
|
+
return withTrackerRunDatabase((db) => {
|
|
523
|
+
const hasProject = projectId?.trim();
|
|
524
|
+
const sql = hasProject
|
|
525
|
+
? `SELECT tr.issue_id,
|
|
526
|
+
COUNT(DISTINCT tr.id) AS sessions,
|
|
527
|
+
COALESCE(SUM(mc.cnt), 0) AS messages
|
|
528
|
+
FROM tracker_runs tr
|
|
529
|
+
LEFT JOIN (
|
|
530
|
+
SELECT thread_id, COUNT(*) AS cnt FROM messages GROUP BY thread_id
|
|
531
|
+
) mc ON mc.thread_id = tr.thread_id
|
|
532
|
+
WHERE tr.project_id = ?
|
|
533
|
+
GROUP BY tr.issue_id`
|
|
534
|
+
: `SELECT tr.issue_id,
|
|
535
|
+
COUNT(DISTINCT tr.id) AS sessions,
|
|
536
|
+
COALESCE(SUM(mc.cnt), 0) AS messages
|
|
537
|
+
FROM tracker_runs tr
|
|
538
|
+
LEFT JOIN (
|
|
539
|
+
SELECT thread_id, COUNT(*) AS cnt FROM messages GROUP BY thread_id
|
|
540
|
+
) mc ON mc.thread_id = tr.thread_id
|
|
541
|
+
GROUP BY tr.issue_id`;
|
|
542
|
+
|
|
543
|
+
const rows = hasProject
|
|
544
|
+
? (db.prepare(sql).all(projectId!.trim()) as unknown as Array<{ issue_id: string; sessions: number; messages: number }>)
|
|
545
|
+
: (db.prepare(sql).all() as unknown as Array<{ issue_id: string; sessions: number; messages: number }>);
|
|
546
|
+
|
|
547
|
+
return rows.map((row) => ({
|
|
548
|
+
issueId: row.issue_id,
|
|
549
|
+
sessions: row.sessions,
|
|
550
|
+
messages: row.messages,
|
|
551
|
+
}));
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
|
|
513
555
|
export interface IssueActiveAgent {
|
|
514
556
|
issueId: string;
|
|
515
557
|
agentId: string;
|
|
@@ -5,6 +5,7 @@ export interface TrackerBoardFilters {
|
|
|
5
5
|
assigneeIds: string[];
|
|
6
6
|
statusCategories: string[];
|
|
7
7
|
groupIds: string[];
|
|
8
|
+
labelNames: string[];
|
|
8
9
|
sortBy: "activity" | "identifier" | "status" | "created";
|
|
9
10
|
sortDir: "asc" | "desc";
|
|
10
11
|
hasActivity: boolean;
|
|
@@ -15,6 +16,7 @@ const DEFAULT_TRACKER_BOARD_FILTERS: TrackerBoardFilters = {
|
|
|
15
16
|
assigneeIds: [],
|
|
16
17
|
statusCategories: [],
|
|
17
18
|
groupIds: [],
|
|
19
|
+
labelNames: [],
|
|
18
20
|
sortBy: "activity",
|
|
19
21
|
sortDir: "desc",
|
|
20
22
|
hasActivity: false,
|
|
@@ -69,6 +71,7 @@ export function loadTrackerBoardFilters(
|
|
|
69
71
|
assigneeIds: normalizeStringArray(parsed.assigneeIds),
|
|
70
72
|
statusCategories: normalizeStringArray(parsed.statusCategories),
|
|
71
73
|
groupIds: normalizeStringArray(parsed.groupIds),
|
|
74
|
+
labelNames: normalizeStringArray(parsed.labelNames),
|
|
72
75
|
sortBy: ["activity", "identifier", "status", "created"].includes(parsed.sortBy as string)
|
|
73
76
|
? (parsed.sortBy as TrackerBoardFilters["sortBy"])
|
|
74
77
|
: DEFAULT_TRACKER_BOARD_FILTERS.sortBy,
|
|
@@ -101,6 +104,7 @@ export function persistTrackerBoardFilters(
|
|
|
101
104
|
assigneeIds: normalizeStringArray(filters.assigneeIds),
|
|
102
105
|
statusCategories: normalizeStringArray(filters.statusCategories),
|
|
103
106
|
groupIds: normalizeStringArray(filters.groupIds),
|
|
107
|
+
labelNames: normalizeStringArray(filters.labelNames),
|
|
104
108
|
sortBy: filters.sortBy || "activity",
|
|
105
109
|
sortDir: filters.sortDir || "desc",
|
|
106
110
|
hasActivity: !!filters.hasActivity,
|
|
@@ -2633,7 +2633,6 @@ function createAdminDbClient() {
|
|
|
2633
2633
|
}
|
|
2634
2634
|
var init_db_adapter = __esm({
|
|
2635
2635
|
"apps/local/lib/db-adapter.ts"() {
|
|
2636
|
-
"use strict";
|
|
2637
2636
|
init_auth_mode();
|
|
2638
2637
|
}
|
|
2639
2638
|
});
|
|
@@ -11225,6 +11224,10 @@ function getDb2() {
|
|
|
11225
11224
|
updated_at INTEGER NOT NULL
|
|
11226
11225
|
)
|
|
11227
11226
|
`);
|
|
11227
|
+
const cols = db2.prepare("PRAGMA table_info(tracker_runs)").all();
|
|
11228
|
+
if (!cols.some((c2) => c2.name === "tracker_type")) {
|
|
11229
|
+
db2.exec("ALTER TABLE tracker_runs ADD COLUMN tracker_type TEXT NOT NULL DEFAULT 'linear'");
|
|
11230
|
+
}
|
|
11228
11231
|
return db2;
|
|
11229
11232
|
}
|
|
11230
11233
|
function withDb(fn) {
|
|
@@ -12604,6 +12607,7 @@ async function saveThreadRepoSelections(rootMessageId, repoIds) {
|
|
|
12604
12607
|
var import_fs12, import_path12, import_os11, DatabaseSyncCtor5, HISTORY_DIR2, DB_PATH3, LEGACY_THREAD_ID, REACTION_TYPES, ACTIVE_AGENT_PROCESS_STALE_MS, ACTIVE_CHAT_RUN_STALE_MS, ALLOWED_TRANSITIONS, ReactionStoreError, withDatabase;
|
|
12605
12608
|
var init_history_store = __esm({
|
|
12606
12609
|
"apps/local/lib/history-store.ts"() {
|
|
12610
|
+
"use strict";
|
|
12607
12611
|
init_sqlite_compat();
|
|
12608
12612
|
import_fs12 = require("fs");
|
|
12609
12613
|
import_path12 = __toESM(require("path"));
|
|
@@ -12629,7 +12633,6 @@ var init_history_store = __esm({
|
|
|
12629
12633
|
blocked: /* @__PURE__ */ new Set(["ack", "blocked", "working"])
|
|
12630
12634
|
};
|
|
12631
12635
|
ReactionStoreError = class extends Error {
|
|
12632
|
-
status;
|
|
12633
12636
|
constructor(message, status) {
|
|
12634
12637
|
super(message);
|
|
12635
12638
|
this.name = "ReactionStoreError";
|
package/package.json
CHANGED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[750227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},340492,a=>{"use strict";let b=(0,a.i(831709).default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);a.s(["Download",()=>b],340492)},316099,a=>{"use strict";let b=(0,a.i(831709).default)("hash",[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]]);a.s(["Hash",()=>b],316099)},693896,a=>{"use strict";let b=(0,a.i(831709).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",()=>b],693896)},756490,a=>{"use strict";let b=(0,a.i(831709).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);a.s(["ChevronRight",()=>b],756490)},820859,a=>{"use strict";let b=(0,a.i(831709).default)("clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]);a.s(["Clock",()=>b],820859)},864061,a=>{"use strict";let b=(0,a.i(831709).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);a.s(["RefreshCw",()=>b],864061)},238234,412690,754812,a=>{"use strict";var b=a.i(831709);let c=(0,b.default)("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);a.s(["ArrowDown",()=>c],238234);let d=(0,b.default)("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);a.s(["ArrowUp",()=>d],412690);let e=(0,b.default)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);a.s(["ChevronLeft",()=>e],754812)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__30bf097e._.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[522734,(a,b,c)=>{b.exports=a.x("fs",()=>require("fs"))},750227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},924868,(a,b,c)=>{b.exports=a.x("fs/promises",()=>require("fs/promises"))},693896,a=>{"use strict";let b=(0,a.i(831709).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",()=>b],693896)},549429,a=>{"use strict";let b=(0,a.i(831709).default)("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);a.s(["ArrowRight",()=>b],549429)},999076,a=>{"use strict";let b=(0,a.i(831709).default)("circle-x",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);a.s(["XCircle",()=>b],999076)},667597,a=>{"use strict";let b=(0,a.i(831709).default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",()=>b],667597)},756490,a=>{"use strict";let b=(0,a.i(831709).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);a.s(["ChevronRight",()=>b],756490)},820859,a=>{"use strict";let b=(0,a.i(831709).default)("clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]);a.s(["Clock",()=>b],820859)},864061,a=>{"use strict";let b=(0,a.i(831709).default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);a.s(["RefreshCw",()=>b],864061)},837929,a=>{"use strict";let b="agx:lastRun",c="agx:lastSession";function d(a,b){}function e(a){return({})[a]??null}function f(a,c){let e={};e[a]=c,d(b,e)}function g(a){return({})[a]??null}function h(a,b){let e={};e[a]=b,d(c,e)}a.s(["loadLastRunForIssue",()=>e,"loadLastSessionForEntity",()=>g,"persistLastRunForIssue",()=>f,"persistLastSessionForEntity",()=>h])},785630,a=>{"use strict";let b=(0,a.i(831709).default)("folder-plus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["FolderPlus",()=>b],785630)},379065,a=>{"use strict";let b=(0,a.i(831709).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);a.s(["ExternalLink",()=>b],379065)},354658,a=>{"use strict";let b=(0,a.i(831709).default)("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);a.s(["Save",()=>b],354658)},238234,412690,754812,a=>{"use strict";var b=a.i(831709);let c=(0,b.default)("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);a.s(["ArrowDown",()=>c],238234);let d=(0,b.default)("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);a.s(["ArrowUp",()=>d],412690);let e=(0,b.default)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);a.s(["ChevronLeft",()=>e],754812)},44668,a=>{"use strict";let b=(0,a.i(831709).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["CheckCircle2",()=>b],44668)},947218,a=>{"use strict";var b=a.i(786220);let c=new Map;function d(a){let b=c.get(a);return b?Date.now()-b.ts>3e5?(c.delete(a),null):b:null}function e(a){c.delete(a)}function f(a,f){let[g,h]=(0,b.useState)(!1),[i,j]=(0,b.useState)(!0),[k,l]=(0,b.useState)(null),[m,n]=(0,b.useState)({claude:!1,codex:!1,gemini:!1}),[o,p]=(0,b.useState)({}),q=(0,b.useRef)(null),r=`/api/trackers/${encodeURIComponent(a)}`,s=`${a}:${f}`,t=(0,b.useCallback)(async()=>{try{let a=await fetch(`${r}/mcp-setup`),b=await a.json();p(b.configured??{})}catch{}},[r]),u=(0,b.useCallback)(async()=>{if(!f)return h(!1),!1;let a=d(s);if(a)return h(a.connected),l(a.user),n(a.clis),p(a.mcpConfigured),j(!1),a.connected;try{var b;let a=`?projectId=${encodeURIComponent(f)}`,[d,e]=await Promise.all([fetch(`${r}/status${a}`),fetch(`${r}/mcp-setup`)]),g=await d.json(),i=await e.json(),j=g.clis??{claude:!1,codex:!1,gemini:!1},k=i.configured??{},m=g.user??null;return h(g.connected),l(m),n(j),p(k),b={connected:g.connected,user:m,clis:j,mcpConfigured:k},c.set(s,{...b,ts:Date.now()}),g.connected}catch{return h(!1),!1}finally{j(!1)}},[f,r,s]);(0,b.useEffect)(()=>{let a=d(s);a?(h(a.connected),l(a.user),n(a.clis),p(a.mcpConfigured),j(!1)):(j(!0),h(!1),l(null))},[a,f,s]),(0,b.useEffect)(()=>(u(),()=>{q.current&&clearInterval(q.current)}),[u]);let v=(0,b.useCallback)(()=>{f&&(e(s),window.open(`${r}/auth?projectId=${encodeURIComponent(f)}`,"_blank","noopener"),q.current&&clearInterval(q.current),q.current=setInterval(async()=>{e(s),await u()&&q.current&&(clearInterval(q.current),q.current=null)},2e3))},[f,r,s,u]),w=(0,b.useCallback)(async a=>{if(!f)return{ok:!1,error:"Missing projectId"};try{let b=await fetch(`${r}/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectId:f,accessToken:a})});if(!b.ok){let a=await b.json().catch(()=>({}));return{ok:!1,error:a.error||"Failed to save token"}}return e(s),await u(),{ok:!0}}catch{return{ok:!1,error:"Failed to connect"}}},[f,r,s,u]);return{connected:g,loading:i,user:k,clis:m,mcpConfigured:o,connect:v,connectWithKey:w,disconnect:(0,b.useCallback)(async()=>{f&&(e(s),await fetch(`${r}/status?projectId=${encodeURIComponent(f)}`,{method:"DELETE"}),h(!1),l(null))},[f,r,s]),configureMcp:(0,b.useCallback)(async a=>{try{let b=await fetch(`${r}/mcp-setup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cli:a})});if(!b.ok){let a=await b.json().catch(()=>({}));return{ok:!1,error:a.error||"Failed to configure MCP"}}return await t(),{ok:!0}}catch{return{ok:!1,error:"Failed to configure MCP"}}},[r,t]),refresh:u}}a.s(["useTrackerConnection",()=>f])},663504,235992,a=>{"use strict";var b=a.i(831709);let c=(0,b.default)("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);a.s(["Key",()=>c],663504);let d=(0,b.default)("globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);a.s(["Globe",()=>d],235992)},500650,a=>{"use strict";let b=(0,a.i(831709).default)("log-out",[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]]);a.s(["LogOut",()=>b],500650)},778784,a=>{"use strict";var b=a.i(308316),c=a.i(786220),d=a.i(44668),e=a.i(663504),f=a.i(235992),g=a.i(349692),h=a.i(693896),i=a.i(356239),j=a.i(500650),k=a.i(392045);let l={claude:{name:"Claude Code",configPath:"~/.claude/settings.json"},codex:{name:"Codex CLI",configPath:"~/.codex/config.toml"},gemini:{name:"Gemini CLI",configPath:"~/.gemini/settings.json"}};function m({trackerType:a,projectId:m,connected:n,onConnect:o,onConnectWithKey:p,onDisconnect:q,loading:r=!1,clis:s,mcpConfigured:t,onConfigureMcp:u}){let[v,w]=c.default.useState(""),[x,y]=c.default.useState(null),[z,A]=c.default.useState(!1),[B,C]=c.default.useState(!1),[D,E]=c.default.useState(null),[F,G]=c.default.useState({}),H=async a=>{if(!u)return;E(a),G(b=>({...b,[a]:""}));let b=await u(a);b.ok||G(c=>({...c,[a]:b.error??"Failed to install MCP"})),E(null)},I=s?["claude","codex","gemini"].filter(a=>s[a]):["claude"];if(r)return(0,b.jsx)("div",{className:"flex items-center justify-center p-12",children:(0,b.jsx)(g.Loader2,{className:"animate-spin h-8 w-8 text-muted-foreground"})});if(n)return(0,b.jsxs)("div",{className:"p-8 flex flex-col items-center gap-6",children:[(0,b.jsxs)("div",{className:"w-full max-w-md p-8 border border-green-500/20 bg-green-500/5 rounded-2xl flex flex-col items-center gap-4 text-center",children:[(0,b.jsx)("div",{className:"h-16 w-16 rounded-full bg-green-500/10 flex items-center justify-center text-green-600 shadow-inner",children:(0,b.jsx)(d.CheckCircle2,{className:"h-8 w-8"})}),(0,b.jsxs)("div",{className:"space-y-2",children:[(0,b.jsxs)("h3",{className:"text-xl font-bold text-foreground capitalize",children:[a," Connected"]}),(0,b.jsxs)("p",{className:"text-sm text-muted-foreground leading-relaxed",children:["Your ",a," workspace is successfully connected. The agent can now sync issues and manage your backlog."]})]}),(0,b.jsxs)("div",{className:"mt-2 px-4 py-1.5 rounded-full bg-background border text-xs font-medium text-muted-foreground flex items-center gap-2",children:[(0,b.jsx)("div",{className:"h-1.5 w-1.5 rounded-full bg-green-500 animate-pulse"}),"Active Connection"]}),q&&(0,b.jsxs)("button",{onClick:q,className:"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-destructive transition-colors mt-1",children:[(0,b.jsx)(j.LogOut,{className:"h-3.5 w-3.5"}),"Disconnect"]})]}),I.length>0&&(0,b.jsx)("div",{className:"w-full max-w-md",children:(0,b.jsxs)("div",{className:"border rounded-xl p-5 flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(i.Terminal,{className:"h-4 w-4 text-muted-foreground"}),(0,b.jsx)("span",{className:"text-sm font-medium",children:"MCP Server"})]}),(0,b.jsxs)("p",{className:"text-xs text-muted-foreground leading-relaxed -mt-2",children:["Install the ",a," MCP server so agents can access ",a," directly."]}),I.map(a=>{let c=l[a],e=t?.[a]??!1,f=D===a,i=F[a];return(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,b.jsx)("span",{className:"text-xs font-medium text-foreground",children:c.name}),e?(0,b.jsxs)("span",{className:"text-xs font-medium text-green-600 flex items-center gap-1",children:[(0,b.jsx)(d.CheckCircle2,{className:"h-3.5 w-3.5"}),"Installed"]}):(0,b.jsx)("button",{onClick:()=>H(a),disabled:f||!u,className:"flex items-center gap-1.5 px-3 py-1 bg-secondary text-secondary-foreground rounded-md text-xs font-semibold hover:bg-secondary/90 disabled:opacity-50 transition-all active:scale-[0.98]",children:f?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.Loader2,{className:"h-3 w-3 animate-spin"}),"Installing…"]}):(0,b.jsx)(b.Fragment,{children:"Install"})})]}),e&&(0,b.jsxs)("p",{className:"text-[10px] text-muted-foreground",children:["Configured in ",(0,b.jsx)("code",{className:"font-mono",children:c.configPath})]}),i&&(0,b.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-destructive bg-destructive/10 p-2 rounded-md",children:[(0,b.jsx)(h.AlertCircle,{className:"h-3.5 w-3.5 shrink-0"}),i]})]},a)})]})})]});let J=async()=>{if(v.trim()){C(!0),y(null);try{let a=await p(v.trim());a.ok?(w(""),A(!1)):y(a.error??"Failed to connect")}catch(a){y("An unexpected error occurred")}finally{C(!1)}}};return(0,b.jsxs)("div",{className:"flex flex-col items-center gap-6 p-8",children:[(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(k.TrackerIcon,{trackerType:a,className:"h-16 w-16"}),(0,b.jsx)("div",{className:"absolute -bottom-1 -right-1 h-6 w-6 rounded-full bg-background border flex items-center justify-center shadow-sm",children:(0,b.jsx)(f.Globe,{className:"h-3 w-3 text-muted-foreground"})})]}),(0,b.jsxs)("div",{className:"text-center space-y-2",children:[(0,b.jsxs)("h3",{className:"text-lg font-semibold capitalize",children:["Connect to ",a]}),(0,b.jsxs)("p",{className:"text-sm text-muted-foreground text-center max-w-sm leading-relaxed",children:["Link your ",a," account to import issues, track progress, and automate your workflow."]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-3 w-full max-w-xs pt-2",children:[(0,b.jsxs)("button",{onClick:o,className:"flex items-center justify-center gap-2 w-full px-4 py-2.5 bg-primary text-primary-foreground rounded-lg text-sm font-semibold hover:bg-primary/90 transition-all active:scale-[0.98] shadow-sm",children:[(0,b.jsx)(f.Globe,{className:"h-4 w-4"}),"Connect with OAuth"]}),(0,b.jsxs)("button",{onClick:()=>{A(!z),y(null)},className:"flex items-center justify-center gap-2 w-full px-4 py-2 text-sm text-muted-foreground hover:text-foreground transition-colors font-medium",children:[(0,b.jsx)(e.Key,{className:"h-3.5 w-3.5"}),z?"Use OAuth instead":"Connect with API key"]}),(0,b.jsx)("div",{className:`grid transition-all duration-300 ease-in-out ${z?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0 pointer-events-none"}`,children:(0,b.jsx)("div",{className:"overflow-hidden",children:(0,b.jsxs)("div",{className:"flex flex-col gap-3 pt-2",children:[(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)("input",{type:"password",value:v,onChange:a=>{w(a.target.value),x&&y(null)},placeholder:"Paste your API key here",className:`w-full px-3 py-2 border rounded-lg text-sm bg-background transition-colors focus:outline-none focus:ring-2 focus:ring-primary/20 ${x?"border-destructive":"focus:border-primary"}`,onKeyDown:a=>"Enter"===a.key&&J()}),(0,b.jsx)(e.Key,{className:"absolute right-3 top-2.5 h-4 w-4 text-muted-foreground/50"})]}),x&&(0,b.jsxs)("div",{className:"flex items-center gap-2 text-xs text-destructive bg-destructive/10 p-2 rounded-md",children:[(0,b.jsx)(h.AlertCircle,{className:"h-3.5 w-3.5 shrink-0"}),(0,b.jsx)("p",{children:x})]}),(0,b.jsx)("button",{onClick:J,disabled:B||!v.trim(),className:"flex items-center justify-center gap-2 w-full px-4 py-2 bg-secondary text-secondary-foreground rounded-lg text-sm font-semibold hover:bg-secondary/90 disabled:opacity-50 transition-all active:scale-[0.98]",children:B?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.Loader2,{className:"h-4 w-4 animate-spin"}),"Connecting..."]}):"Verify & Connect"}),(0,b.jsxs)("p",{className:"text-[10px] text-muted-foreground text-center px-2",children:["Your API key is stored securely and only used for ",a," integration."]})]})})})]})]})}a.s(["default",()=>m])},943202,a=>{"use strict";var b=a.i(308316),c=a.i(786220),d=a.i(516909),e=a.i(830284),f=a.i(859117);function g({params:a}){let{slug:g,tracker:h}=(0,c.use)(a),i=(0,d.useSearchParams)(),{projects:j}=(0,e.useProjects)(),k=j.find(a=>a.slug===g),l="true"===i.get("settings");return(0,b.jsx)(f.default,{trackerType:h,projectId:k?.id,projectSlug:k?.slug??g,initialShowSettings:l})}a.s(["default",()=>g])}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=%5Broot-of-the-server%5D__46ae9d33._.js.map
|