@mndrk/agx 2.2.0 → 2.3.1
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/README.md +70 -105
- package/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/apps/local/.next/build-manifest.json +3 -3
- package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +1 -1
- 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_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/linear/issues/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/issues/context/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/issues/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/options/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/runs/scripted/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/status/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]/linear-issues/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/extract/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/automations/page/react-loadable-manifest.json +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations.rsc +4 -4
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/_full.segment.rsc +4 -4
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/automations.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/board/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/board.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/board.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/board.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.rsc +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/folders/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/folders.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/folders.rsc +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/folders/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/folders.segment.rsc +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 +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +3 -3
- 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.js.nft.json +1 -1
- 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 +1 -1
- 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]/knowledge/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/knowledge/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/linear/page/react-loadable-manifest.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/linear/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/linear/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]/settings/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/settings/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/orphans/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page.js.nft.json +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 +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- 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/settings/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/settings.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/settings.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page.js.nft.json +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 +4 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +4 -3
- 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 +3 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +3 -2
- 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/skills/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/skills.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/skills.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/skills/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/skills.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 +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- 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/thread/[id]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0-zk9w8._.js +7 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0.01bfe._.js +13 -8
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__00c~p6z._.js +7 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__019dflu._.js +7 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__02t.3rm._.js +4 -4
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__06zr0ph._.js +6 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__07d._0s._.js +15 -10
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__08xj~a3._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0a0cq38._.js +34 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0asvfdo._.js +35 -4
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0bt7ejs._.js +7 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0f.~98d._.js +7 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0g-~-.q._.js +6 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0g7p6pw._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0gj~dap._.js +40 -9
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0hkcw03._.js +8 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0hyu3en._.js +7 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0i5aw03._.js +7 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0ke4z91._.js +7 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0l53ok5._.js +41 -10
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0ll-~cx._.js +7 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0mh6p.0._.js +7 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0nc-lbr._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0p9rl6.._.js +8 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0q~pnp0._.js +6 -6
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0ue0bu5._.js +6 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0unwwyx._.js +12 -7
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0vtkl3q._.js +4 -4
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0x6w64i._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0z82z0-._.js +6 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0zrv3p3._.js +16 -11
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0~iknwz._.js +12 -7
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__10d.dhd._.js +46 -15
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__10sw5ia._.js +4 -4
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__11yx.ud._.js +33 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__13-nlgu._.js +5 -5
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__13960a8._.js +14 -9
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_06qet8g._.js +14 -9
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0_0m2ly._.js +4 -4
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0a15wtk._.js +4 -4
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0fr1qq6._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0g.q2r6._.js +6 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0i7fs.i._.js +4 -4
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_01pvj2g._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_agent-participants_ts_0cq15u5._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_db_ts_0twf-w5._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_orchestrator_chat-processor_ts_0c2l_oh._.js +43 -12
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_sqlite-query-adapter_ts_0l95hik._.js +15 -15
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_sqlite-query-adapter_ts_0s5xprd._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_graph_082u-ls._.js +19 -14
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_graph_schedule-runner_ts_07-ozf_._.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0_l0fpi.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0gips_c.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0rszt9p.js +10 -6
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0u_5kfo.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_06fnblz._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0140-84._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_03fckp4._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{_0tcjapj._.js → _0ip6k6n._.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0jensz1._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0t0p8q5._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0yeuuy1._.js +1 -23
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_03z24q2._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0_ac-.f._.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0a-8i4p._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0k4~c1x._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0ld1uug._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0ms1d6i._.js +4 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0p_v0ri._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0x.xj52._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0~g2ijr._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_11k_-8~._.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_agents_[id]_page_tsx_06n47n~._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_agents_page_tsx_078reb_._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_linear_page_tsx_0a~n5y8._.js +25 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_page_tsx_0kcaeqi._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_teams_[teamId]_agents_[agentId]_page_tsx_0wm~_~t._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_teams_[teamId]_page_tsx_0iyozfl._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_teams_new_page_tsx_0yqd0a5._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_terminal_page_tsx_01n9qk.._.js +1 -20
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_setup_page_tsx_0ql2qmr._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_PromptJobBoard_tsx_06zob36._.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_projects_ProjectObjectivesWorkspace_tsx_0k4tfip._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_terminal_TerminalPane_tsx_0l17vs_._.js +22 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_thread_WorkspaceSidebar_tsx_0unv2xp._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/middleware-build-manifest.js +3 -3
- 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 +1 -1
- 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/{1011~1x9nj4ny.js → 0-k2m1ncx7hwx.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0dnw31436wd~..js → 0-pkmgle2s8u8.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/064jfmraty.9h.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/06kru5m9q~r.j.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/06kyg1q0bcz6p.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0_cjth28_11b2.js → 08bdyjcnamzep.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0-olq~7zw3wjy.js → 08xq~uyr6.eqw.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0gj98094p~zn4.js → 0cku81z~3oe6..js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0e7jhy0-52_4k.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0wh6p5~ft5rma.js → 0htc.sqrk_0.c.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0ju4xmxwqddw6.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0mm978wb-ueg-.js +6 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0musu8f.4wvxz.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0bchtyu6m.2yv.js → 0muti0yiyhu0t.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0rhps884e-bzu.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0rr3fvwc5ind~.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0sbkkjowkksa6.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0sjz0.o9_33qy.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0srzmg8ivve1g.css +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0fonouj2i9qnb.js → 0swo3_e8.4s7j.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0sysrf3~l~r35.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0t69h-kc701fn.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0v67lnh..wj4z.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{013gtut17~fne.js → 0wb45ol1xrqe~.js} +1 -23
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{00po4v2x~0x_z.js → 0wiw2v8gm-k_-.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0jq0t4zip38wt.js → 0wopevh0s7.8c.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0xm2~gxlt1npd.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{1503vb7lb6.g1.js → 0ya124ushze_f.js} +4 -4
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{00e1ihnb6ap3t.js → 0zt2o58c5gytn.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0~idsggr8vqf5.js +59 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0xu_doej_wc-3.js → 0~mcfx41q4znh.js} +3 -3
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/116j4mjz~y42t.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0-vo_x2cxmjm3.js → 12b62py0mq1gm.js} +4 -4
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/12y5i0lh6s73o.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/148.mt80civoz.js +20 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/14m5d270euu_s.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/16h9208kl5~xa.js +16 -0
- package/cloud-runtime/standalone/apps/local/app/agents/[id]/page.tsx +6 -3
- package/cloud-runtime/standalone/apps/local/app/agents/page.tsx +3 -3
- package/cloud-runtime/standalone/apps/local/app/api/chat/route.ts +7 -1
- package/cloud-runtime/standalone/apps/local/app/api/participants/route.ts +9 -9
- package/cloud-runtime/standalone/apps/local/app/api/projects/[id]/search/route.ts +6 -6
- package/cloud-runtime/standalone/apps/local/app/api/projects/[id]/teams/route.ts +3 -3
- package/cloud-runtime/standalone/apps/local/app/api/prompt-jobs/agents/route.ts +1 -1
- package/cloud-runtime/standalone/apps/local/app/api/schedules/poll/route.ts +11 -2
- package/cloud-runtime/standalone/apps/local/app/page.tsx +72 -14
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/page.tsx +34 -1
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page.tsx +6 -3
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/teams/[teamId]/page.tsx +6 -3
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/teams/new/page.tsx +8 -17
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/teams/replace/page.tsx +1 -1
- package/cloud-runtime/standalone/apps/local/app/projects/page.tsx +7 -0
- package/cloud-runtime/standalone/apps/local/app/setup/page.tsx +1 -38
- package/cloud-runtime/standalone/apps/local/components/AutomationsBoard.tsx +8 -4
- package/cloud-runtime/standalone/apps/local/components/EmptyStateCard.tsx +37 -0
- package/cloud-runtime/standalone/apps/local/components/LinearBoard.tsx +103 -770
- package/cloud-runtime/standalone/apps/local/components/PromptJobBoard.tsx +5 -37
- package/cloud-runtime/standalone/apps/local/components/TeamPickerModal.tsx +3 -3
- package/cloud-runtime/standalone/apps/local/components/chat-ui/Composer.tsx +28 -32
- package/cloud-runtime/standalone/apps/local/components/chat-ui/ParticipantBar.tsx +24 -39
- package/cloud-runtime/standalone/apps/local/components/linear/LinearBoardFilters.tsx +343 -0
- package/cloud-runtime/standalone/apps/local/components/linear/TicketRow.tsx +158 -0
- package/cloud-runtime/standalone/apps/local/components/projects/ObjectiveHealthTrend.tsx +45 -61
- package/cloud-runtime/standalone/apps/local/components/projects/RecentlyCompletedCard.tsx +0 -16
- package/cloud-runtime/standalone/apps/local/components/projects/ReplaceAgentsModal.tsx +2 -2
- package/cloud-runtime/standalone/apps/local/components/setup/McpSetupStep.tsx +155 -120
- package/cloud-runtime/standalone/apps/local/components/setup/ProviderStep.tsx +85 -88
- package/cloud-runtime/standalone/apps/local/components/setup/SetupLayout.tsx +6 -4
- package/cloud-runtime/standalone/apps/local/components/terminal/ProjectTerminal.tsx +18 -193
- package/cloud-runtime/standalone/apps/local/components/terminal/TerminalPane.tsx +40 -4
- package/cloud-runtime/standalone/apps/local/components/thread/WorkspaceSidebar.tsx +4 -4
- package/cloud-runtime/standalone/apps/local/components/ui/ResizeHandle.tsx +52 -0
- package/cloud-runtime/standalone/apps/local/hooks/useAutomations.ts +8 -3
- package/cloud-runtime/standalone/apps/local/hooks/useLinearActiveAgents.ts +38 -0
- package/cloud-runtime/standalone/apps/local/hooks/useLinearParticipants.ts +118 -0
- package/cloud-runtime/standalone/apps/local/hooks/usePromptJobs.ts +5 -3
- package/cloud-runtime/standalone/apps/local/hooks/useSetupFlow.ts +6 -81
- package/cloud-runtime/standalone/apps/local/lib/agent-participants.ts +1 -1
- package/cloud-runtime/standalone/apps/local/lib/agent-process-registry.ts +34 -0
- package/cloud-runtime/standalone/apps/local/lib/db.ts +5 -5
- package/cloud-runtime/standalone/apps/local/lib/linear-board-utils.ts +9 -0
- package/cloud-runtime/standalone/apps/local/lib/linear-run-status.ts +88 -0
- package/cloud-runtime/standalone/apps/local/lib/linear-run-store.ts +4 -4
- package/cloud-runtime/standalone/apps/local/lib/sqlite-query-adapter.ts +5 -1
- package/cloud-runtime/standalone/apps/local/lib/team-catalog.ts +60 -60
- package/cloud-runtime/standalone/apps/local/lib/types.ts +1 -1
- package/cloud-runtime/standalone/apps/local/migrations/sqlite_schema.sql +1 -1
- package/cloud-runtime/standalone/apps/local/skills-lock.json +5 -0
- package/cloud-runtime/standalone/apps/local/src/graph/schedule-runner.ts +26 -1
- package/cloud-runtime/standalone/apps/local/src/graph/store.ts +13 -0
- package/cloud-runtime/standalone/apps/local/state/linearBoardPins.ts +45 -0
- package/cloud-runtime/standalone/apps/local/worker/index.js +56 -5
- package/lib/cli/onboarding.js +8 -5
- package/package.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_067eb..._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_00trrg8._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ejzn1e._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0sjchy6._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0w4gpvr._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0x6hh0t._.js +0 -4
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0t6p.qm._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0-wlbe.ripd2w.css +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/014z_yruiincl.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/041-dhls9zkl1.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/069yt_7prdxsp.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0e6rxcxy.l5c8.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0ime4btrg-g4l.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0j-nhn61e~nnj.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0jglardpw~5uc.js +0 -37
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0l3v45kd.9is_.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0ng6wy4ak35jg.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0n~jhoq~op4e5.js +0 -16
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0p-rdas54yo~w.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0pdrpsy-zdxp0.js +0 -5
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0p~l5ap6qqx2o.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0tm20~ec~occu.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0w94x-v00osq0.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0xwny92a.ad_i.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/11l2tww5f0hsk.js +0 -20
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/12qohmk-~yrtg.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/14v~9vx3tdv85.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/16fyhcmwlw3th.js +0 -6
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/18e8w~~mvoh5o.js +0 -1
- package/cloud-runtime/standalone/apps/local/components/setup/ProjectStep.tsx +0 -189
- package/cloud-runtime/standalone/apps/local/components/setup/TeamsStep.tsx +0 -500
- /package/cloud-runtime/standalone/apps/local/.next/static/{qPuactsz6OYimwT6dSdHn → 438GF86gZtccU2fS12URB}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{qPuactsz6OYimwT6dSdHn → 438GF86gZtccU2fS12URB}/_clientMiddlewareManifest.js +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{qPuactsz6OYimwT6dSdHn → 438GF86gZtccU2fS12URB}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[514760,a=>{"use strict";var b=a.i(187924),c=a.i(572131);function d(a){return null===a.installed?"checking":a.installed?!a.authenticated&&a.authCmd?"needs-auth":"ready":"not-installed"}let e=[{id:"claude",label:"Claude Code",bin:"claude",description:"Recommended for the fastest AGX setup.",installCmd:"npm install -g @anthropic-ai/claude-code",docsUrl:"https://docs.anthropic.com/en/docs/claude-code/quickstart",recommended:!0,statusLabel:"Installed",authCheck:{cmd:'claude -p "say yes" 2>/dev/null',timeout:15e3},authCmd:{cmd:"claude",description:"Opens browser for Anthropic login"}},{id:"codex",label:"Codex",bin:"codex",description:"OpenAI's terminal coding agent.",installCmd:"npm install -g @openai/codex",docsUrl:"https://github.com/openai/codex",statusLabel:"Installed",authCheck:{cmd:"codex --version 2>/dev/null",timeout:5e3},authCmd:{cmd:"codex login --device-auth",description:"Device auth flow for OpenAI"}},{id:"gemini",label:"Gemini CLI",bin:"gemini",description:"Google's CLI for Gemini workflows.",installCmd:"npm install -g @google/gemini-cli",docsUrl:"https://github.com/google-gemini/gemini-cli",statusLabel:"Installed",authCheck:{cmd:'echo "hi" | gemini 2>/dev/null',timeout:15e3},authCmd:{cmd:"gemini",description:"Opens browser for Google login"}},{id:"ollama",label:"Ollama",bin:"ollama",description:"Run local models on your machine.",installCmd:"curl -fsSL https://ollama.com/install.sh | sh",docsUrl:"https://ollama.com/download",statusLabel:"Installed",authCheck:{cmd:"ollama list 2>/dev/null",timeout:5e3}},{id:"zai",label:"Z.AI",bin:"claude",description:"Use the Claude CLI with your Z.AI API key.",installCmd:"npm install -g @anthropic-ai/claude-code",docsUrl:"https://z.ai/",installNote:"Requires Claude Code plus a configured Z.AI API key.",statusLabel:"Via Claude CLI",authCheck:{cmd:'test -n "$ANTHROPIC_API_KEY"',timeout:5e3},authCmd:{cmd:"export ANTHROPIC_API_KEY=<your-key>",description:"Set your Z.AI API key"}}].map(a=>({id:a.id,name:a.label,description:a.description,installCmd:a.installCmd,docsUrl:a.docsUrl,installNote:a.installNote,recommended:a.recommended,authCmd:a.authCmd}));var f=a.i(50944),g=a.i(627421),h=a.i(70887),i=a.i(804632),j=a.i(811760),k=a.i(379065),l=a.i(356239),m=a.i(349692);function n({currentStep:a,totalSteps:c}){return(0,b.jsx)("div",{className:"flex items-center gap-0",role:"progressbar","aria-valuenow":a,"aria-valuemin":1,"aria-valuemax":c,"aria-label":`Step ${a} of ${c}`,children:Array.from({length:c},(c,d)=>{let e=d+1,f=e===a,g=e<a;return(0,b.jsxs)("div",{className:"flex items-center",children:[d>0&&(0,b.jsx)("div",{className:`w-8 h-[2px] ${g?"bg-[var(--foreground)]":"bg-[var(--border)]"}`}),(0,b.jsx)("div",{className:`w-2.5 h-2.5 rounded-full transition-colors ${f?"bg-[var(--foreground)] ring-4 ring-[var(--foreground)]/10":g?"bg-[var(--foreground)]":"bg-[var(--border)]"}`})]},e)})})}function o({currentStep:a,totalSteps:c,children:d,footer:e}){return(0,b.jsxs)("div",{className:"h-screen w-full flex flex-col bg-[var(--background)]",children:[(0,b.jsx)("div",{className:"flex items-center justify-center pt-8 pb-4",children:(0,b.jsx)(n,{currentStep:a,totalSteps:c})}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto px-4",children:(0,b.jsx)("div",{className:"max-w-2xl mx-auto w-full py-6",children:d})}),e&&(0,b.jsx)("div",{className:"border-t border-[var(--border)] bg-[var(--background)] px-4 py-4",children:(0,b.jsx)("div",{className:"max-w-2xl mx-auto w-full",children:e})})]})}function p({text:a}){let[d,e]=(0,c.useState)(!1),f=(0,c.useCallback)(()=>{navigator.clipboard.writeText(a).then(()=>{e(!0),setTimeout(()=>e(!1),2e3)})},[a]);return(0,b.jsx)("button",{type:"button",onClick:f,className:"p-1.5 rounded-md hover:bg-[var(--muted)] transition-colors text-[var(--muted-foreground)] hover:text-[var(--foreground)]",title:"Copy command",children:d?(0,b.jsx)(g.Check,{className:"w-3.5 h-3.5 text-emerald-500"}):(0,b.jsx)(i.Copy,{className:"w-3.5 h-3.5"})})}function q({cli:a,onVerify:e}){let f=d(a),[i,n]=(0,c.useState)("needs-auth"===f),[o,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)(null),u="not-installed"===f||"needs-auth"===f,v=(0,c.useCallback)(async()=>{r(!0),t(null);try{let b=await fetch(`/api/providers/check/${a.id}`,{cache:"no-store"});if(!b.ok)return void t("Check failed");(await b.json()).authenticated?e?.(a.id):t("Not authenticated yet")}catch{t("Check failed")}finally{r(!1)}},[a.id,e]);return(0,b.jsxs)("div",{className:"border border-[var(--card-border)] rounded-lg overflow-hidden",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>u&&n(!i),className:`w-full flex items-center gap-3 px-4 py-3 transition-colors text-left ${u?"hover:bg-[var(--item-hover-bg)] cursor-pointer":"cursor-default"}`,children:[(0,b.jsx)("div",{className:"shrink-0",children:"checking"===f?(0,b.jsx)(h.Circle,{className:"w-4 h-4 text-[var(--muted-foreground)] animate-pulse"}):"ready"===f?(0,b.jsx)("div",{className:"w-5 h-5 rounded-full bg-emerald-100 dark:bg-emerald-900/30 flex items-center justify-center",children:(0,b.jsx)(g.Check,{className:"w-3 h-3 text-emerald-600 dark:text-emerald-400"})}):"needs-auth"===f?(0,b.jsx)("div",{className:"w-5 h-5 rounded-full bg-amber-100 dark:bg-amber-900/30 flex items-center justify-center",children:(0,b.jsx)(h.Circle,{className:"w-3 h-3 text-amber-600 dark:text-amber-400"})}):(0,b.jsx)(h.Circle,{className:"w-4 h-4 text-[var(--muted-foreground)]"})}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[14px] font-semibold text-[var(--foreground)]",children:a.name}),a.recommended&&"not-installed"===f&&(0,b.jsx)("span",{className:"text-[11px] font-medium text-[var(--foreground)] bg-[var(--secondary)] px-1.5 py-0.5 rounded",children:"Recommended"}),"ready"===f&&(0,b.jsx)("span",{className:"text-[11px] font-medium text-emerald-600 dark:text-emerald-400 bg-emerald-50 dark:bg-emerald-900/20 px-1.5 py-0.5 rounded",children:"Ready"}),"needs-auth"===f&&(0,b.jsx)("span",{className:"text-[11px] font-medium text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20 px-1.5 py-0.5 rounded",children:"Needs auth"})]}),(0,b.jsx)("p",{className:"text-[12px] text-[var(--muted-foreground)]",children:a.description})]}),u&&(0,b.jsx)(j.ChevronDown,{className:`w-4 h-4 text-[var(--muted-foreground)] transition-transform ${i?"rotate-180":""}`})]}),i&&"not-installed"===f&&(0,b.jsxs)("div",{className:"px-4 pb-3 border-t border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"mt-3 flex items-center gap-2 bg-[var(--secondary)] rounded-md px-3 py-2 font-mono text-[13px] text-[var(--foreground)]",children:[(0,b.jsx)(l.Terminal,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)] shrink-0"}),(0,b.jsx)("code",{className:"flex-1 overflow-x-auto whitespace-nowrap",children:a.installCmd}),(0,b.jsx)(p,{text:a.installCmd})]}),(0,b.jsxs)("a",{href:a.docsUrl,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 mt-2 text-[12px] text-[var(--primary)] hover:underline",children:["Documentation ",(0,b.jsx)(k.ExternalLink,{className:"w-3 h-3"})]}),a.installNote&&(0,b.jsx)("p",{className:"mt-2 text-[12px] text-[var(--muted-foreground)]",children:a.installNote})]}),i&&"needs-auth"===f&&a.authCmd&&(0,b.jsxs)("div",{className:"px-4 pb-3 border-t border-[var(--card-border)]",children:[(0,b.jsx)("p",{className:"mt-3 text-[12px] text-[var(--muted-foreground)]",children:a.authCmd.description}),(0,b.jsxs)("div",{className:"mt-2 flex items-center gap-2 bg-[var(--secondary)] rounded-md px-3 py-2 font-mono text-[13px] text-[var(--foreground)]",children:[(0,b.jsx)(l.Terminal,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)] shrink-0"}),(0,b.jsx)("code",{className:"flex-1 overflow-x-auto whitespace-nowrap",children:a.authCmd.cmd}),(0,b.jsx)(p,{text:a.authCmd.cmd})]}),(0,b.jsxs)("div",{className:"mt-3 flex items-center gap-2",children:[(0,b.jsxs)("button",{type:"button",onClick:v,disabled:o,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-[12px] font-medium rounded-md bg-[var(--foreground)] text-[var(--background)] hover:opacity-90 transition-colors disabled:opacity-60",children:[o&&(0,b.jsx)(m.Loader2,{className:"w-3 h-3 animate-spin"}),o?"Checking...":"Verify"]}),s&&(0,b.jsx)("span",{className:"text-[12px] text-amber-600 dark:text-amber-400",children:s})]})]})]})}function r({clis:a,readyState:c,authenticatedCount:d,totalCount:e,onVerifySuccess:f,onNext:g}){let h="ready"===c,i=a.find(a=>a.recommended)??a[0]??null,j=a.filter(a=>!a.recommended);return(0,b.jsxs)(o,{currentStep:1,totalSteps:4,footer:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-[13px] text-[var(--muted-foreground)]",children:(0,b.jsxs)("span",{className:h?"text-emerald-600 dark:text-emerald-400":"",children:[d,"/",e," providers ready"]})}),(0,b.jsx)("button",{type:"button",onClick:g,disabled:!h,className:"inline-flex items-center gap-2 px-6 py-2.5 bg-[var(--foreground)] text-[var(--background)] text-[14px] font-semibold rounded-lg hover:opacity-90 transition-all disabled:opacity-40 disabled:cursor-not-allowed",children:"Next"})]}),children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("h1",{className:"text-[24px] font-bold text-[var(--foreground)] tracking-tight",children:"Connect a Provider"}),(0,b.jsxs)("p",{className:"mt-2 text-[14px] text-[var(--muted-foreground)] leading-relaxed",children:["AGX orchestrates AI agents across multiple providers.",(0,b.jsx)("br",{}),"Connect at least one to get started."]})]}),"checking"===c&&(0,b.jsxs)("div",{className:"text-center py-8",children:[(0,b.jsx)(m.Loader2,{className:"w-6 h-6 animate-spin text-[var(--muted-foreground)] mx-auto"}),(0,b.jsx)("p",{className:"mt-3 text-[13px] text-[var(--muted-foreground)]",children:"Detecting installed providers..."})]}),"error"===c&&(0,b.jsx)("div",{className:"text-center py-8",children:(0,b.jsx)("p",{className:"text-[14px] text-[var(--muted-foreground)]",children:"Could not detect providers. Please reload."})}),("needs-setup"===c||"ready"===c)&&(0,b.jsxs)("div",{className:"space-y-4",children:[!a.some(a=>a.installed)&&i&&(0,b.jsxs)("div",{className:"rounded-xl border border-[var(--card-border)] bg-[var(--secondary)] p-4 mb-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Start Here"}),(0,b.jsx)("span",{className:"rounded bg-[var(--background)] px-2 py-0.5 text-[11px] font-medium text-[var(--foreground)]",children:i.name})]}),(0,b.jsx)("p",{className:"mt-2 text-[13px] text-[var(--foreground)]",children:"Install Claude Code first if you want the shortest path into AGX."})]}),(0,b.jsx)("div",{className:"space-y-2",children:i&&(0,b.jsx)(q,{cli:i,onVerify:f})}),j.length>0&&(0,b.jsxs)("div",{className:"mt-4",children:[(0,b.jsx)("h3",{className:"mb-2 text-[12px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Other Options"}),(0,b.jsx)("div",{className:"space-y-2",children:j.map(a=>(0,b.jsx)(q,{cli:a,onVerify:f},a.id))})]})]})]})}var s=a.i(831709);let t=(0,s.default)("plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]]),u=[{id:"linear",name:"Linear",description:"Read and update tickets so agents can track work in Linear during execution.",docsUrl:"https://linear.app/docs/mcp"}],v=[{id:"claude",label:"Claude Code"},{id:"codex",label:"Codex"},{id:"gemini",label:"Gemini CLI"}];function w({onNext:a,onBack:d}){let[e,f]=(0,c.useState)(!0),[h,i]=(0,c.useState)({}),[j,l]=(0,c.useState)({}),[n,p]=(0,c.useState)(null),[q,r]=(0,c.useState)(null),s=(0,c.useCallback)(async()=>{try{let[a,b]=await Promise.all([fetch("/api/linear/status"),fetch("/api/linear/mcp-setup")]),c=await a.json(),d=await b.json();i(c.clis??{}),l(d.configured??{})}catch{}finally{f(!1)}},[]);(0,c.useEffect)(()=>{s()},[s]);let x=(0,c.useCallback)(async a=>{p(a),r(null);try{let b=await fetch("/api/linear/mcp-setup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cli:a})});if(b.ok)await s();else{let a=await b.json().catch(()=>({}));r(a.error||"Failed to configure MCP")}}catch{r("Failed to configure MCP")}finally{p(null)}},[s]),y=v.filter(a=>h[a.id]),z=y.some(a=>j[a.id]);return(0,b.jsxs)(o,{currentStep:2,totalSteps:4,footer:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("button",{type:"button",onClick:d,className:"text-[14px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:"Back"}),(0,b.jsx)("button",{type:"button",onClick:a,className:"inline-flex items-center gap-2 px-6 py-2.5 bg-[var(--foreground)] text-[var(--background)] text-[14px] font-semibold rounded-lg hover:opacity-90 transition-all",children:z?"Next":"Skip"})]}),children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("h1",{className:"text-[24px] font-bold text-[var(--foreground)] tracking-tight",children:"Configure MCP Servers"}),(0,b.jsxs)("p",{className:"mt-2 text-[14px] text-[var(--muted-foreground)] leading-relaxed",children:["MCP servers let your agents interact with external tools.",(0,b.jsx)("br",{}),"Set them up so agents can read and update tickets automatically."]})]}),e?(0,b.jsxs)("div",{className:"text-center py-8",children:[(0,b.jsx)(m.Loader2,{className:"w-6 h-6 animate-spin text-[var(--muted-foreground)] mx-auto"}),(0,b.jsx)("p",{className:"mt-3 text-[13px] text-[var(--muted-foreground)]",children:"Checking MCP configuration..."})]}):(0,b.jsxs)("div",{className:"space-y-6",children:[u.map(a=>(0,b.jsxs)("div",{className:"border border-[var(--card-border)] rounded-lg overflow-hidden",children:[(0,b.jsxs)("div",{className:"px-4 py-3 flex items-center gap-3",children:[(0,b.jsx)("div",{className:"w-8 h-8 rounded-lg bg-[var(--secondary)] flex items-center justify-center",children:(0,b.jsx)(t,{className:"w-4 h-4 text-[var(--foreground)]"})}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[14px] font-semibold text-[var(--foreground)]",children:a.name}),z&&(0,b.jsx)("span",{className:"text-[11px] font-medium text-emerald-600 dark:text-emerald-400 bg-emerald-50 dark:bg-emerald-900/20 px-1.5 py-0.5 rounded",children:"Configured"})]}),(0,b.jsx)("p",{className:"text-[12px] text-[var(--muted-foreground)]",children:a.description})]})]}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)] px-4 py-3 space-y-2",children:[(0,b.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)] mb-2",children:"Configure for your CLI"}),v.map(a=>{let c=h[a.id],d=j[a.id],e=n===a.id;return(0,b.jsxs)("div",{className:`flex items-center justify-between rounded-md border border-[var(--card-border)] px-3 py-2.5 ${!c?"opacity-40":""}`,children:[(0,b.jsx)("span",{className:"text-[13px] text-[var(--foreground)]",children:a.label}),c?d?(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[11px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(g.Check,{className:"w-3.5 h-3.5"}),"Configured"]}):(0,b.jsx)("button",{type:"button",onClick:()=>x(a.id),disabled:e,className:"inline-flex items-center gap-1.5 px-3 py-1 text-[12px] font-medium rounded-md border border-[var(--card-border)] hover:bg-[var(--secondary)] transition-colors disabled:opacity-50",children:e?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(m.Loader2,{className:"w-3 h-3 animate-spin"}),"Setting up..."]}):"Set up"}):(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:"Not installed"})]},a.id)}),q&&(0,b.jsx)("p",{className:"text-[12px] text-red-500 dark:text-red-400 mt-1",children:q})]}),(0,b.jsx)("div",{className:"border-t border-[var(--card-border)] px-4 py-2.5",children:(0,b.jsxs)("a",{href:a.docsUrl,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-[12px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:["Learn more about ",a.name," MCP",(0,b.jsx)(k.ExternalLink,{className:"w-3 h-3"})]})})]},a.id)),0===y.length&&(0,b.jsx)("div",{className:"text-center py-4",children:(0,b.jsx)("p",{className:"text-[13px] text-[var(--muted-foreground)]",children:"No CLI providers detected. Go back and install a provider first, or skip this step."})})]})]})}var x=a.i(157633),y=a.i(523593);let z=(0,s.default)("file-code",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]]);var A=a.i(824179);function B({folderPath:a}){let{analysis:d,loading:e}=function(a){let[b,d]=(0,c.useState)(null),[e,f]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{if(!a)return void d(null);let b=!1;return f(!0),(async()=>{try{let c=await fetch("/api/filesystem/analyze",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:a})});if(b)return;if(c.ok){let a=await c.json();d(a.analysis)}}catch{}finally{b||f(!1)}})(),()=>{b=!0}},[a]),{analysis:b,loading:e}}(a);if(e)return(0,b.jsxs)("div",{className:"flex items-center gap-2 mt-2 text-[12px] text-[var(--muted-foreground)]",children:[(0,b.jsx)(m.Loader2,{className:"w-3 h-3 animate-spin"})," Analyzing..."]});if(!d)return null;let f=Object.entries(d.languages).sort(([,a],[,b])=>b-a).slice(0,5);return(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-3 text-[12px] text-[var(--muted-foreground)]",children:[d.isGit&&d.branch&&(0,b.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,b.jsx)(y.GitBranch,{className:"w-3 h-3"})," ",d.branch]}),d.isGit&&d.status&&(0,b.jsxs)("span",{children:[d.status.modified,"M ",d.status.untracked,"? ",d.status.staged,"S"]}),f.map(([a,c])=>(0,b.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,b.jsx)(z,{className:"w-3 h-3"})," ",a," (",c,")"]},a))]})}function C({data:a,onChange:d,onNext:e,onBack:f}){let[g,h]=(0,c.useState)(!1),i=(0,c.useCallback)(async()=>{h(!0);try{let b=await fetch("/api/filesystem/pick-folder",{method:"POST"});if(!b.ok)return;let c=await b.json();if(c.cancelled||!c.path)return;let e=c.path.split("/").filter(Boolean).pop()||c.path;if(a.folders.some(a=>a.path===c.path))return;d({...a,name:a.name||e,folders:[...a.folders,{name:e,path:c.path}]})}catch{}finally{h(!1)}},[a,d]),j=(0,c.useCallback)(b=>{d({...a,folders:a.folders.filter(a=>a.path!==b)})},[a,d]),k=a.name.trim().length>0;return(0,b.jsxs)(o,{currentStep:3,totalSteps:4,footer:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("button",{type:"button",onClick:f,className:"text-[14px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:"Back"}),(0,b.jsx)("button",{type:"button",onClick:e,disabled:!k,className:"inline-flex items-center gap-2 px-6 py-2.5 bg-[var(--foreground)] text-[var(--background)] text-[14px] font-semibold rounded-lg hover:opacity-90 transition-all disabled:opacity-40 disabled:cursor-not-allowed",children:"Next"})]}),children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("h1",{className:"text-[24px] font-bold text-[var(--foreground)] tracking-tight",children:"Create Your Project"}),(0,b.jsx)("p",{className:"mt-2 text-[14px] text-[var(--muted-foreground)]",children:"Name your project and attach folders your agents will work in."})]}),(0,b.jsxs)("div",{className:"space-y-6",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("label",{htmlFor:"project-name",className:"block text-[13px] font-medium text-[var(--foreground)] mb-1.5",children:"Project name"}),(0,b.jsx)("input",{id:"project-name",type:"text",value:a.name,onChange:b=>d({...a,name:b.target.value}),placeholder:"My Project",className:"w-full px-3 py-2.5 rounded-lg border border-[var(--border)] bg-[var(--background)] text-[14px] text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:ring-2 focus:ring-[var(--foreground)]/20",autoFocus:!0})]}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("label",{htmlFor:"project-desc",className:"block text-[13px] font-medium text-[var(--foreground)] mb-1.5",children:["Description ",(0,b.jsx)("span",{className:"text-[var(--muted-foreground)] font-normal",children:"(optional)"})]}),(0,b.jsx)("input",{id:"project-desc",type:"text",value:a.description,onChange:b=>d({...a,description:b.target.value}),placeholder:"What this project is about",className:"w-full px-3 py-2.5 rounded-lg border border-[var(--border)] bg-[var(--background)] text-[14px] text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:ring-2 focus:ring-[var(--foreground)]/20"})]}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,b.jsx)("label",{className:"text-[13px] font-medium text-[var(--foreground)]",children:"Folders"}),(0,b.jsxs)("button",{type:"button",onClick:i,disabled:g,className:"inline-flex items-center gap-1.5 px-3 py-1.5 text-[12px] font-medium rounded-md border border-[var(--border)] hover:bg-[var(--secondary)] transition-colors disabled:opacity-60",children:[g?(0,b.jsx)(m.Loader2,{className:"w-3 h-3 animate-spin"}):(0,b.jsx)(x.Folder,{className:"w-3 h-3"}),"Browse"]})]}),0===a.folders.length?(0,b.jsx)("p",{className:"text-[13px] text-[var(--muted-foreground)] py-4 text-center border border-dashed border-[var(--border)] rounded-lg",children:"No folders attached yet. Click Browse to add one."}):(0,b.jsx)("div",{className:"space-y-2",children:a.folders.map(a=>(0,b.jsxs)("div",{className:"border border-[var(--card-border)] rounded-lg px-4 py-3",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,b.jsx)(x.Folder,{className:"w-4 h-4 text-[var(--muted-foreground)] shrink-0"}),(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("p",{className:"text-[13px] font-medium text-[var(--foreground)] truncate",children:a.name}),(0,b.jsx)("p",{className:"text-[11px] text-[var(--muted-foreground)] truncate",children:a.path})]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>j(a.path),className:"p-1 rounded hover:bg-[var(--secondary)] text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:(0,b.jsx)(A.X,{className:"w-3.5 h-3.5"})})]}),(0,b.jsx)(B,{folderPath:a.path})]},a.path))})]})]})]})}var D=a.i(756490),E=a.i(985339),F=a.i(319405);let G=[{id:"gemini",label:"Gemini"},{id:"claude",label:"Claude"},{id:"ollama",label:"Ollama"},{id:"codex",label:"Codex"},{id:"zai",label:"Z.AI"}],H={claude:["claude-opus-4-20250514","claude-sonnet-4-20250514","claude-haiku-4-20250514"],codex:["o4-mini","o3","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano"],gemini:["gemini-2.5-pro","gemini-2.5-flash","gemini-2.0-flash"],ollama:["qwen3:8b","devstral","qwen2.5-coder:14b","llama3.3:70b","deepseek-coder-v2:16b"],zai:["claude-opus-4-20250514","claude-sonnet-4-20250514"]},I={balanced:"bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300",specialist:"bg-purple-100 dark:bg-purple-900/30 text-purple-700 dark:text-purple-300",creative:"bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300",analytical:"bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-300"};function J({value:a,onChange:d,suggestions:e,placeholder:f="Model name..."}){let[g,h]=(0,c.useState)(!1),[i,j]=(0,c.useState)(""),k=(0,c.useRef)(null);(0,c.useEffect)(()=>{function a(a){k.current&&!k.current.contains(a.target)&&h(!1)}return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[]);let l=e.filter(b=>b.toLowerCase().includes((i||a).toLowerCase()));return(0,b.jsxs)("div",{ref:k,className:"relative flex-1",children:[(0,b.jsx)("input",{type:"text",value:a,placeholder:f,onChange:a=>{d(a.target.value),j(a.target.value),h(!0)},onFocus:()=>h(!0),className:"w-full h-8 px-2.5 text-[12px] rounded-md border border-[var(--card-border)] bg-[var(--background)] text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:border-[var(--foreground)]/40 transition-colors"}),g&&l.length>0&&(0,b.jsx)("div",{className:"absolute z-50 top-full left-0 right-0 mt-1 max-h-[160px] overflow-y-auto rounded-md border border-[var(--card-border)] bg-[var(--background)] shadow-lg",children:l.map(c=>(0,b.jsx)("button",{type:"button",onClick:()=>{d(c),j(""),h(!1)},className:`w-full text-left px-2.5 py-1.5 text-[12px] transition-colors hover:bg-[var(--secondary)] ${c===a?"text-[var(--foreground)] font-medium":"text-[var(--muted-foreground)]"}`,children:c},c))})]})}function K({provider:a,model:c,onProviderChange:d,onModelChange:e,providers:f,label:g}){let h=H[a]??[];return(0,b.jsxs)("div",{className:"space-y-1.5",children:[g&&(0,b.jsx)("span",{className:"text-[11px] font-medium text-[var(--muted-foreground)] uppercase tracking-wide",children:g}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)("select",{value:a,onChange:a=>{d(a.target.value),e("")},className:"h-8 px-2 text-[12px] rounded-md border border-[var(--card-border)] bg-[var(--background)] text-[var(--foreground)] focus:outline-none focus:border-[var(--foreground)]/40 transition-colors appearance-none cursor-pointer pr-6",style:{backgroundImage:"url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E\")",backgroundRepeat:"no-repeat",backgroundPosition:"right 6px center"},children:[(0,b.jsx)("option",{value:"",children:"Provider..."}),f.map(a=>(0,b.jsx)("option",{value:a.id,children:a.label},a.id))]}),(0,b.jsx)(J,{value:c,onChange:e,suggestions:h,placeholder:a?"Select or type model...":"Select a provider first"})]})]})}function L({agent:a,override:d,teamProvider:e,teamModel:f,providers:g,onOverrideChange:h}){let i=I[a.style]??I.balanced,j=d&&(d.provider||d.model),[k,l]=(0,c.useState)(!!j);d?.provider;let m=d?.model||f||"";return(0,b.jsxs)("div",{className:"py-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("div",{className:"w-7 h-7 rounded-full bg-[var(--secondary)] flex items-center justify-center text-[12px] font-semibold text-[var(--foreground)]",children:a.name.charAt(0)}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[13px] font-medium text-[var(--foreground)]",children:a.name}),(0,b.jsx)("span",{className:`text-[10px] px-1.5 py-0.5 rounded font-medium ${i}`,children:a.style}),j&&(0,b.jsx)("span",{className:"text-[10px] px-1.5 py-0.5 rounded font-medium bg-violet-100 dark:bg-violet-900/30 text-violet-700 dark:text-violet-300",children:"custom"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsx)("p",{className:"text-[11px] text-[var(--muted-foreground)] truncate",children:a.title}),(e||f)&&!j&&m&&(0,b.jsxs)("span",{className:"text-[10px] text-[var(--muted-foreground)] opacity-60 shrink-0",children:["(",m,")"]})]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>{k?(h(a.id,void 0),l(!1)):l(!0)},className:"p-1 rounded hover:bg-[var(--background)] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",title:k?"Remove override":"Override provider/model",children:(0,b.jsx)(D.ChevronRight,{className:`w-3 h-3 transition-transform ${k?"rotate-90":""}`})})]}),k&&(0,b.jsx)("div",{className:"mt-1.5 ml-9",children:(0,b.jsx)(K,{provider:d?.provider||"",model:d?.model||"",onProviderChange:b=>h(a.id,{agentId:a.id,provider:b||void 0,model:d?.model}),onModelChange:b=>h(a.id,{agentId:a.id,provider:d?.provider,model:b||void 0}),providers:g})})]})}function M({template:a,isSelected:c,onSelect:d}){return(0,b.jsxs)("button",{type:"button",onClick:()=>d(a),className:`w-full text-left p-4 rounded-lg border transition-all ${c?"border-[var(--foreground)] bg-[var(--secondary)]":"border-[var(--card-border)] hover:border-[var(--foreground)]/30 hover:bg-[var(--secondary)]/50"}`,children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-lg",children:a.icon}),(0,b.jsx)("span",{className:"text-[14px] font-semibold text-[var(--foreground)]",children:a.name})]}),c&&(0,b.jsx)("div",{className:"w-5 h-5 rounded-full bg-[var(--foreground)] flex items-center justify-center",children:(0,b.jsx)(g.Check,{className:"w-3 h-3 text-[var(--background)]"})})]}),(0,b.jsx)("p",{className:"mt-1 text-[12px] text-[var(--muted-foreground)]",children:a.description}),(0,b.jsxs)("p",{className:"mt-2 text-[11px] text-[var(--muted-foreground)]",children:[a.agents.length," agent",1!==a.agents.length?"s":"",a.variants&&a.variants.length>0?` \xb7 ${a.variants.length} variants`:""]})]})}function N({selectedTeams:a,onChange:d,onNext:e,onBack:f}){let g=(0,F.listTeamTemplates)(),{providers:h}=function(){let[a,b]=(0,c.useState)(G),[d,e]=(0,c.useState)(!0);(0,c.useEffect)(()=>{let a=!1;return(async()=>{try{let c=await fetch("/api/providers"),d=await c.json().catch(()=>({}));if(!c.ok)throw Error(d?.error||`HTTP ${c.status}`);let e=(Array.isArray(d?.providers)?d.providers:[]).filter(a=>a&&"string"==typeof a.id&&"string"==typeof a.label&&!1!==a.installed).map(a=>({id:a.id,label:a.label}));!a&&e.length>0&&b(e)}catch{}finally{a||e(!1)}})(),()=>{a=!0}},[]);let f=(0,c.useMemo)(()=>a.map(a=>a.id),[a]);return{providers:a,providerIds:f,loading:d}}(),[i,j]=(0,c.useState)(null),[k,l]=(0,c.useState)({}),m=(0,c.useCallback)(b=>a.some(a=>a.templateId===b),[a]),n=(0,c.useCallback)(b=>{if(m(b.id)){d(a.filter(a=>a.templateId!==b.id)),j(null);return}b.variants&&b.variants.length>0?j(i===b.id?null:b.id):d([...a,{templateId:b.id,name:b.name,agents:b.agents}])},[a,d,i,m]),p=(0,c.useCallback)((b,c)=>{l(a=>({...a,[b]:c.id})),d([...a.filter(a=>a.templateId!==b),{templateId:b,variantId:c.id,name:c.name,agents:c.agents}]),j(null)},[a,d]),q=(0,c.useCallback)(b=>{d(a.filter(a=>a.templateId!==b))},[a,d]),r=(0,c.useCallback)((b,c)=>{d(a.map(a=>a.templateId===b?{...a,provider:c||void 0}:a))},[a,d]),s=(0,c.useCallback)((b,c)=>{d(a.map(a=>a.templateId===b?{...a,model:c||void 0}:a))},[a,d]),t=(0,c.useCallback)((b,c,e)=>{d(a.map(a=>{if(a.templateId!==b)return a;let d=(a.agentOverrides??[]).filter(a=>a.agentId!==c);return e&&(e.provider||e.model)&&d.push(e),{...a,agentOverrides:d.length>0?d:void 0}}))},[a,d]);return(0,b.jsxs)(o,{currentStep:4,totalSteps:4,footer:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("button",{type:"button",onClick:f,className:"text-[14px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:"Back"}),(0,b.jsx)("button",{type:"button",onClick:e,className:"inline-flex items-center gap-2 px-6 py-2.5 bg-[var(--foreground)] text-[var(--background)] text-[14px] font-semibold rounded-lg hover:opacity-90 transition-all",children:a.length>0?"Create Project":"Skip & Create Project"})]}),children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("h1",{className:"text-[24px] font-bold text-[var(--foreground)] tracking-tight",children:"Add Teams"}),(0,b.jsx)("p",{className:"mt-2 text-[14px] text-[var(--muted-foreground)]",children:"Pick team templates to populate your project with agents. You can customize them later."})]}),a.length>0&&(0,b.jsx)("div",{className:"mb-6 space-y-2",children:a.map(a=>(0,b.jsxs)("div",{className:"border border-[var(--foreground)]/20 bg-[var(--secondary)] rounded-lg p-3",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(E.Users,{className:"w-4 h-4 text-[var(--muted-foreground)]"}),(0,b.jsx)("span",{className:"text-[13px] font-semibold text-[var(--foreground)]",children:a.name}),(0,b.jsxs)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:[a.agents.length," agents"]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>q(a.templateId),className:"p-1 rounded hover:bg-[var(--background)] text-[var(--muted-foreground)] hover:text-[var(--foreground)]",children:(0,b.jsx)(A.X,{className:"w-3.5 h-3.5"})})]}),(0,b.jsx)("div",{className:"pl-6 mb-2",children:(0,b.jsx)(K,{provider:a.provider||"",model:a.model||"",onProviderChange:b=>r(a.templateId,b),onModelChange:b=>s(a.templateId,b),providers:h,label:"Default provider & model"})}),(0,b.jsx)("div",{className:"pl-6 space-y-0.5",children:a.agents.map(c=>(0,b.jsx)(L,{agent:c,override:a.agentOverrides?.find(a=>a.agentId===c.id),teamProvider:a.provider,teamModel:a.model,providers:h,onOverrideChange:(b,c)=>t(a.templateId,b,c)},c.id))})]},a.templateId))}),(0,b.jsx)("div",{className:"grid grid-cols-2 gap-3",children:g.map(a=>(0,b.jsxs)("div",{children:[(0,b.jsx)(M,{template:a,isSelected:m(a.id),onSelect:n}),i===a.id&&a.variants&&a.variants.length>0&&(0,b.jsx)("div",{className:"mt-2 ml-2 border-l-2 border-[var(--border)] pl-3 space-y-1",children:a.variants.map(c=>(0,b.jsxs)("button",{type:"button",onClick:()=>p(a.id,c),className:`w-full text-left px-3 py-2 rounded-md text-[13px] transition-colors ${k[a.id]===c.id?"bg-[var(--secondary)] font-medium text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:bg-[var(--secondary)]/50 hover:text-[var(--foreground)]"}`,children:[c.name,(0,b.jsxs)("span",{className:"ml-2 text-[11px] text-[var(--muted-foreground)]",children:[c.agents.length," agents"]})]},c.id))})]},a.id))})]})}var O=a.i(693896);a.s(["default",0,function(){let a=function(){let[a,b]=(0,c.useState)("checking"),[f,g]=(0,c.useState)(e.map(a=>({...a,installed:null,authenticated:null})));(0,c.useEffect)(()=>{let a=!1;return(async()=>{try{let c=await fetch("/api/providers",{cache:"no-store"});if(a)return;if(!c.ok)return void b("error");let f=await c.json(),h=Array.isArray(f?.providers)?f.providers:[],i=e.map(a=>{let b=h.find(b=>b?.id===a.id);return{...a,installed:b?.installed??!1,authenticated:b?.authenticated??!1}});a||(g(i),b(i.some(a=>"ready"===d(a))?"ready":"needs-setup"))}catch{a||b("error")}})(),()=>{a=!0}},[]);let h=(0,c.useCallback)(a=>{g(c=>{let e=c.map(b=>b.id===a?{...b,authenticated:!0}:b);return e.some(a=>"ready"===d(a))&&b("ready"),e})},[]),i=(0,c.useMemo)(()=>f.filter(a=>"needs-auth"===d(a)).map(a=>a.id),[f]),j=i.join(",");(0,c.useEffect)(()=>{if("checking"===a||0===i.length)return;let b=new AbortController,c=new Map;return i.forEach(function a(d){if(b.signal.aborted)return;let e=setTimeout(async()=>{if(!b.signal.aborted){try{let a=await fetch(`/api/providers/check/${d}`,{cache:"no-store",signal:b.signal});if(b.signal.aborted)return;if(a.ok){let b=await a.json();if(b.authenticated)return void h(d);if(!b.installed)return void g(a=>a.map(a=>a.id===d?{...a,installed:!1,authenticated:!1}:a))}}catch{if(b.signal.aborted)return}b.signal.aborted||a(d)}},5e3);c.set(d,e)}),()=>{b.abort(),c.forEach(a=>clearTimeout(a))}},[a,j,h]);let k=f.filter(a=>"ready"===d(a)).length;return{readyState:a,clis:f,authenticatedCount:k,totalCount:f.length,handleVerifySuccess:h}}(),g=function(){let a=(0,f.useRouter)(),[b,d]=(0,c.useState)(1),[e,g]=(0,c.useState)({name:"",description:"",folders:[]}),[h,i]=(0,c.useState)([]),[j,k]=(0,c.useState)(!1),[l,m]=(0,c.useState)(null),n=(0,c.useCallback)(()=>{d(a=>Math.min(a+1,4))},[]),o=(0,c.useCallback)(()=>{d(a=>Math.max(a-1,1))},[]),p=(0,c.useCallback)(async()=>{k(!0),m(null);try{let b=e.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"project",c=e.folders.map(a=>({name:a.name,path:a.path})),d=await fetch("/api/projects",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e.name,description:e.description||void 0,repos:c})});if(!d.ok){let a=await d.json().catch(()=>({}));throw Error(a.error||"Failed to create project")}let{project:f}=await d.json(),g=f.id;for(let a of h){let b=a.agents.map(b=>{let c=a.agentOverrides?.find(a=>a.agentId===b.id);return{roleId:b.id,provider:c?.provider||a.provider||void 0,model:c?.model||a.model||void 0}}),c=b.some(a=>a.provider||a.model);await fetch(`/api/projects/${g}/teams`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({templateId:a.templateId,variantId:a.variantId,name:a.name,...c?{agents:b}:{}})})}a.push(`/projects/${f.slug||b}`)}catch(a){m(a instanceof Error?a.message:"Setup failed")}finally{k(!1)}},[e,h,a]);return{step:b,project:e,teams:h,completing:j,error:l,setProject:g,setTeams:i,goNext:n,goBack:o,complete:p}}();return g.completing?(0,b.jsxs)("div",{className:"h-screen w-full flex flex-col items-center justify-center gap-4 bg-[var(--background)]",children:[(0,b.jsx)(m.Loader2,{className:"w-8 h-8 animate-spin text-[var(--muted-foreground)]"}),(0,b.jsx)("p",{className:"text-[14px] text-[var(--muted-foreground)]",children:"Creating your project..."})]}):(0,b.jsxs)(b.Fragment,{children:[g.error&&(0,b.jsxs)("div",{className:"fixed top-4 left-1/2 -translate-x-1/2 z-50 inline-flex items-center gap-2 rounded-lg border border-red-200 bg-red-50 dark:border-red-800 dark:bg-red-950 px-4 py-2 text-[13px] text-red-800 dark:text-red-200 shadow-lg",children:[(0,b.jsx)(O.AlertCircle,{className:"h-4 w-4 shrink-0"}),g.error]}),1===g.step&&(0,b.jsx)(r,{clis:a.clis,readyState:a.readyState,authenticatedCount:a.authenticatedCount,totalCount:a.totalCount,onVerifySuccess:a.handleVerifySuccess,onNext:g.goNext}),2===g.step&&(0,b.jsx)(w,{onNext:g.goNext,onBack:g.goBack}),3===g.step&&(0,b.jsx)(C,{data:g.project,onChange:g.setProject,onNext:g.goNext,onBack:g.goBack}),4===g.step&&(0,b.jsx)(N,{selectedTeams:g.teams,onChange:g.setTeams,onNext:g.complete,onBack:g.goBack})]})}],514760)}];
|
|
1
|
+
module.exports=[514760,a=>{"use strict";var b=a.i(187924),c=a.i(572131);function d(a){return null===a.installed?"checking":a.installed?!a.authenticated&&a.authCmd?"needs-auth":"ready":"not-installed"}let e=[{id:"claude",label:"Claude Code",bin:"claude",description:"Recommended for the fastest AGX setup.",installCmd:"npm install -g @anthropic-ai/claude-code",docsUrl:"https://docs.anthropic.com/en/docs/claude-code/quickstart",recommended:!0,statusLabel:"Installed",authCheck:{cmd:'claude -p "say yes" 2>/dev/null',timeout:15e3},authCmd:{cmd:"claude",description:"Opens browser for Anthropic login"}},{id:"codex",label:"Codex",bin:"codex",description:"OpenAI's terminal coding agent.",installCmd:"npm install -g @openai/codex",docsUrl:"https://github.com/openai/codex",statusLabel:"Installed",authCheck:{cmd:"codex --version 2>/dev/null",timeout:5e3},authCmd:{cmd:"codex login --device-auth",description:"Device auth flow for OpenAI"}},{id:"gemini",label:"Gemini CLI",bin:"gemini",description:"Google's CLI for Gemini workflows.",installCmd:"npm install -g @google/gemini-cli",docsUrl:"https://github.com/google-gemini/gemini-cli",statusLabel:"Installed",authCheck:{cmd:'echo "hi" | gemini 2>/dev/null',timeout:15e3},authCmd:{cmd:"gemini",description:"Opens browser for Google login"}},{id:"ollama",label:"Ollama",bin:"ollama",description:"Run local models on your machine.",installCmd:"curl -fsSL https://ollama.com/install.sh | sh",docsUrl:"https://ollama.com/download",statusLabel:"Installed",authCheck:{cmd:"ollama list 2>/dev/null",timeout:5e3}},{id:"zai",label:"Z.AI",bin:"claude",description:"Use the Claude CLI with your Z.AI API key.",installCmd:"npm install -g @anthropic-ai/claude-code",docsUrl:"https://z.ai/",installNote:"Requires Claude Code plus a configured Z.AI API key.",statusLabel:"Via Claude CLI",authCheck:{cmd:'test -n "$ANTHROPIC_API_KEY"',timeout:5e3},authCmd:{cmd:"export ANTHROPIC_API_KEY=<your-key>",description:"Set your Z.AI API key"}}].map(a=>({id:a.id,name:a.label,description:a.description,installCmd:a.installCmd,docsUrl:a.docsUrl,installNote:a.installNote,recommended:a.recommended,authCmd:a.authCmd}));var f=a.i(50944),g=a.i(627421),h=a.i(70887),i=a.i(804632),j=a.i(811760),k=a.i(356239),l=a.i(349692);function m({currentStep:a,totalSteps:c}){return(0,b.jsx)("div",{className:"flex items-center gap-0",role:"progressbar","aria-valuenow":a,"aria-valuemin":1,"aria-valuemax":c,"aria-label":`Step ${a} of ${c}`,children:Array.from({length:c},(c,d)=>{let e=d+1,f=e===a,g=e<a;return(0,b.jsxs)("div",{className:"flex items-center",children:[d>0&&(0,b.jsx)("div",{className:`w-8 h-[2px] ${g?"bg-[var(--foreground)]":"bg-[var(--border)]"}`}),(0,b.jsx)("div",{className:`w-2.5 h-2.5 rounded-full transition-colors ${f?"bg-[var(--foreground)] ring-4 ring-[var(--foreground)]/10":g?"bg-[var(--foreground)]":"bg-[var(--border)]"}`})]},e)})})}function n({currentStep:a,totalSteps:c,children:d,footer:e,wide:f}){let g=f?"max-w-6xl":"max-w-2xl";return(0,b.jsxs)("div",{className:"h-screen w-full flex flex-col bg-[var(--background)]",children:[(0,b.jsx)("div",{className:"flex items-center justify-center pt-8 pb-4",children:(0,b.jsx)(m,{currentStep:a,totalSteps:c})}),(0,b.jsx)("div",{className:"flex-1 overflow-y-auto px-4 min-h-0",children:(0,b.jsx)("div",{className:`${g} mx-auto w-full py-6 h-full`,children:d})}),e&&(0,b.jsx)("div",{className:"border-t border-[var(--border)] bg-[var(--background)] px-4 py-4",children:(0,b.jsx)("div",{className:`${g} mx-auto w-full`,children:e})})]})}var o=a.i(303592);function p({text:a}){let[d,e]=(0,c.useState)(!1),f=(0,c.useCallback)(()=>{navigator.clipboard.writeText(a).then(()=>{e(!0),setTimeout(()=>e(!1),2e3)})},[a]);return(0,b.jsx)("button",{type:"button",onClick:f,className:"p-1.5 rounded-md hover:bg-[var(--muted)] transition-colors text-[var(--muted-foreground)] hover:text-[var(--foreground)]",title:"Copy command",children:d?(0,b.jsx)(g.Check,{className:"w-3.5 h-3.5 text-emerald-500"}):(0,b.jsx)(i.Copy,{className:"w-3.5 h-3.5"})})}function q({cli:a,onVerify:e,onRunInTerminal:f}){let i=d(a),[m,n]=(0,c.useState)("needs-auth"===i),[o,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)(null),u="not-installed"===i||"needs-auth"===i,v=(0,c.useCallback)(async()=>{r(!0),t(null);try{let b=await fetch(`/api/providers/check/${a.id}`,{cache:"no-store"});if(!b.ok)return void t("Check failed");(await b.json()).authenticated?e?.(a.id):t("Not authenticated yet")}catch{t("Check failed")}finally{r(!1)}},[a.id,e]),w="not-installed"===i?a.installCmd:a.authCmd?.cmd;return(0,b.jsxs)("div",{className:"border border-[var(--card-border)] rounded-lg overflow-hidden",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>u&&n(!m),className:`w-full flex items-center gap-2.5 px-3 py-2 transition-colors text-left ${u?"hover:bg-[var(--item-hover-bg)] cursor-pointer":"cursor-default"}`,children:[(0,b.jsx)("div",{className:"shrink-0",children:"checking"===i?(0,b.jsx)(h.Circle,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)] animate-pulse"}):"ready"===i?(0,b.jsx)("div",{className:"w-4 h-4 rounded-full bg-emerald-100 dark:bg-emerald-900/30 flex items-center justify-center",children:(0,b.jsx)(g.Check,{className:"w-2.5 h-2.5 text-emerald-600 dark:text-emerald-400"})}):"needs-auth"===i?(0,b.jsx)("div",{className:"w-4 h-4 rounded-full bg-amber-100 dark:bg-amber-900/30 flex items-center justify-center",children:(0,b.jsx)(h.Circle,{className:"w-2.5 h-2.5 text-amber-600 dark:text-amber-400"})}):(0,b.jsx)(h.Circle,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)]"})}),(0,b.jsx)("span",{className:"flex-1 min-w-0 text-[13px] font-semibold text-[var(--foreground)] truncate",children:a.name}),"ready"===i&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-emerald-600 dark:text-emerald-400",children:"Ready"}),"needs-auth"===i&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-amber-600 dark:text-amber-400",children:"Needs auth"}),"not-installed"===i&&a.recommended&&(0,b.jsx)("span",{className:"text-[10px] font-medium text-[var(--muted-foreground)]",children:"Recommended"}),u&&(0,b.jsx)(j.ChevronDown,{className:`w-3.5 h-3.5 text-[var(--muted-foreground)] transition-transform ${m?"rotate-180":""}`})]}),m&&u&&w&&(0,b.jsxs)("div",{className:"px-3 pb-2.5 pt-1 border-t border-[var(--card-border)] flex items-center gap-1.5",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>f?.(w),className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-[11px] font-medium rounded-md bg-[var(--foreground)] text-[var(--background)] hover:opacity-90 transition-colors",children:[(0,b.jsx)(k.Terminal,{className:"w-3 h-3"}),"Run"]}),"needs-auth"===i&&(0,b.jsxs)("button",{type:"button",onClick:v,disabled:o,className:"inline-flex items-center gap-1 px-2.5 py-1 text-[11px] font-medium rounded-md border border-[var(--card-border)] text-[var(--foreground)] hover:bg-[var(--secondary)] transition-colors disabled:opacity-60",children:[o&&(0,b.jsx)(l.Loader2,{className:"w-3 h-3 animate-spin"}),o?"Checking":"Verify"]}),(0,b.jsx)(p,{text:w}),s&&(0,b.jsx)("span",{className:"text-[10px] text-amber-600 dark:text-amber-400 ml-auto",children:s})]})]})}function r({clis:a,readyState:d,authenticatedCount:e,totalCount:f,onVerifySuccess:g,onNext:h}){let i="ready"===d,j=(0,c.useRef)(null),m=(0,c.useCallback)(a=>{j.current?.sendCommand(a)},[]);return(0,b.jsxs)(n,{currentStep:1,totalSteps:2,wide:!0,footer:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-[13px] text-[var(--muted-foreground)]",children:(0,b.jsxs)("span",{className:i?"text-emerald-600 dark:text-emerald-400":"",children:[e,"/",f," providers ready"]})}),(0,b.jsx)("button",{type:"button",onClick:h,disabled:!i,className:"inline-flex items-center gap-2 px-6 py-2.5 bg-[var(--foreground)] text-[var(--background)] text-[14px] font-semibold rounded-lg hover:opacity-90 transition-all disabled:opacity-40 disabled:cursor-not-allowed",children:"Next"})]}),children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("h1",{className:"text-[24px] font-bold text-[var(--foreground)] tracking-tight",children:"Connect a Provider"}),(0,b.jsxs)("p",{className:"mt-2 text-[14px] text-[var(--muted-foreground)] leading-relaxed",children:["AGX orchestrates AI agents across multiple providers.",(0,b.jsx)("br",{}),"Connect at least one to get started."]})]}),(0,b.jsxs)("div",{className:"flex gap-6 min-h-0 items-start",children:[(0,b.jsxs)("div",{className:"w-[280px] shrink-0",children:["checking"===d&&(0,b.jsxs)("div",{className:"text-center py-8",children:[(0,b.jsx)(l.Loader2,{className:"w-6 h-6 animate-spin text-[var(--muted-foreground)] mx-auto"}),(0,b.jsx)("p",{className:"mt-3 text-[13px] text-[var(--muted-foreground)]",children:"Detecting installed providers..."})]}),"error"===d&&(0,b.jsx)("div",{className:"text-center py-8",children:(0,b.jsx)("p",{className:"text-[14px] text-[var(--muted-foreground)]",children:"Could not detect providers. Please reload."})}),("needs-setup"===d||"ready"===d)&&(0,b.jsx)("div",{className:"space-y-1.5",children:a.map(a=>(0,b.jsx)(q,{cli:a,onVerify:g,onRunInTerminal:m},a.id))})]}),(0,b.jsxs)("div",{className:"flex-1 min-w-0 h-[420px] flex flex-col rounded-xl border border-[var(--card-border)] overflow-hidden bg-[#1e1e1e]",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-[var(--card-border)] bg-[var(--secondary)] shrink-0",children:[(0,b.jsx)(k.Terminal,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)]"}),(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Terminal"})]}),(0,b.jsx)("div",{className:"flex-1 min-h-0",children:(0,b.jsx)(o.default,{ref:j,tabId:"setup-provider"})})]})]})]})}var s=a.i(379065);let t=(0,a.i(831709).default)("plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]]),u=[{id:"linear",name:"Linear",description:"Read and update tickets so agents can track work in Linear during execution.",docsUrl:"https://linear.app/docs/mcp"}],v=[{id:"claude",label:"Claude Code",launchCmd:"claude"},{id:"codex",label:"Codex",launchCmd:"codex"},{id:"gemini",label:"Gemini CLI",launchCmd:"gemini"}];function w({onFinish:a,onBack:d}){let[e,f]=(0,c.useState)(!0),[h,i]=(0,c.useState)({}),[j,m]=(0,c.useState)({}),[p,q]=(0,c.useState)(null),[r,x]=(0,c.useState)(null),y=(0,c.useRef)(null),z=(0,c.useCallback)(a=>{y.current?.sendCommand(a)},[]),A=(0,c.useCallback)(async()=>{try{let[a,b]=await Promise.all([fetch("/api/linear/status"),fetch("/api/linear/mcp-setup")]),c=await a.json(),d=await b.json();i(c.clis??{}),m(d.configured??{})}catch{}finally{f(!1)}},[]);(0,c.useEffect)(()=>{A()},[A]);let B=(0,c.useCallback)(async a=>{q(a),x(null);try{let b=await fetch("/api/linear/mcp-setup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cli:a})});if(b.ok)await A();else{let a=await b.json().catch(()=>({}));x(a.error||"Failed to configure MCP")}}catch{x("Failed to configure MCP")}finally{q(null)}},[A]),C=v.filter(a=>h[a.id]),D=C.some(a=>j[a.id]);return(0,b.jsxs)(n,{currentStep:2,totalSteps:2,wide:!0,footer:(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("button",{type:"button",onClick:d,className:"text-[14px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:"Back"}),(0,b.jsx)("button",{type:"button",onClick:a,className:"inline-flex items-center gap-2 px-6 py-2.5 bg-[var(--foreground)] text-[var(--background)] text-[14px] font-semibold rounded-lg hover:opacity-90 transition-all",children:D?"Finish":"Skip"})]}),children:[(0,b.jsxs)("div",{className:"text-center mb-8",children:[(0,b.jsx)("h1",{className:"text-[24px] font-bold text-[var(--foreground)] tracking-tight",children:"Configure MCP Servers"}),(0,b.jsx)("p",{className:"mt-2 text-[14px] text-[var(--muted-foreground)] leading-relaxed",children:"MCP servers let your agents interact with external tools. After registering a server below, launch your CLI in the terminal to complete the OAuth login."})]}),(0,b.jsxs)("div",{className:"flex gap-6 min-h-0 items-start",children:[(0,b.jsx)("div",{className:"w-[380px] shrink-0 space-y-6",children:e?(0,b.jsxs)("div",{className:"text-center py-8",children:[(0,b.jsx)(l.Loader2,{className:"w-6 h-6 animate-spin text-[var(--muted-foreground)] mx-auto"}),(0,b.jsx)("p",{className:"mt-3 text-[13px] text-[var(--muted-foreground)]",children:"Checking MCP configuration..."})]}):(0,b.jsxs)(b.Fragment,{children:[u.map(a=>(0,b.jsxs)("div",{className:"border border-[var(--card-border)] rounded-lg overflow-hidden",children:[(0,b.jsxs)("div",{className:"px-4 py-3 flex items-center gap-3",children:[(0,b.jsx)("div",{className:"w-8 h-8 rounded-lg bg-[var(--secondary)] flex items-center justify-center",children:(0,b.jsx)(t,{className:"w-4 h-4 text-[var(--foreground)]"})}),(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[14px] font-semibold text-[var(--foreground)]",children:a.name}),D&&(0,b.jsx)("span",{className:"text-[11px] font-medium text-emerald-600 dark:text-emerald-400 bg-emerald-50 dark:bg-emerald-900/20 px-1.5 py-0.5 rounded",children:"Registered"})]}),(0,b.jsx)("p",{className:"text-[12px] text-[var(--muted-foreground)]",children:a.description})]})]}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)] px-4 py-3 space-y-2",children:[(0,b.jsx)("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)] mb-2",children:"Register & authenticate per CLI"}),v.map(a=>{let c=h[a.id],d=j[a.id],e=p===a.id;return(0,b.jsxs)("div",{className:`flex items-center justify-between rounded-md border border-[var(--card-border)] px-3 py-2.5 ${!c?"opacity-40":""}`,children:[(0,b.jsx)("span",{className:"text-[13px] text-[var(--foreground)]",children:a.label}),c?d?(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[11px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(g.Check,{className:"w-3.5 h-3.5"}),"Registered"]}),(0,b.jsx)("button",{type:"button",onClick:()=>z(a.launchCmd),className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-[11px] font-medium rounded-md border border-[var(--card-border)] hover:bg-[var(--secondary)] transition-colors",title:`Launch ${a.label} to authenticate`,children:"Launch & authenticate"})]}):(0,b.jsx)("button",{type:"button",onClick:()=>B(a.id),disabled:e,className:"inline-flex items-center gap-1.5 px-3 py-1 text-[12px] font-medium rounded-md border border-[var(--card-border)] hover:bg-[var(--secondary)] transition-colors disabled:opacity-50",children:e?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(l.Loader2,{className:"w-3 h-3 animate-spin"}),"Registering..."]}):"Register"}):(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:"Not installed"})]},a.id)}),r&&(0,b.jsx)("p",{className:"text-[12px] text-red-500 dark:text-red-400 mt-1",children:r})]}),(0,b.jsx)("div",{className:"border-t border-[var(--card-border)] px-4 py-2.5",children:(0,b.jsxs)("a",{href:a.docsUrl,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-[12px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:["Learn more about ",a.name," MCP",(0,b.jsx)(s.ExternalLink,{className:"w-3 h-3"})]})})]},a.id)),0===C.length&&(0,b.jsx)("div",{className:"text-center py-4",children:(0,b.jsx)("p",{className:"text-[13px] text-[var(--muted-foreground)]",children:"No CLI providers detected. Go back and install a provider first, or skip this step."})}),(0,b.jsxs)("p",{className:"text-[11px] leading-relaxed text-[var(--muted-foreground)]",children:["Registering writes the MCP server into the CLI config. You still need to launch the CLI (right) and complete the interactive OAuth flow (usually ",(0,b.jsx)("code",{className:"text-[var(--foreground)]",children:"/mcp"}),")."]})]})}),(0,b.jsxs)("div",{className:"flex-1 min-w-0 h-[500px] flex flex-col rounded-xl border border-[var(--card-border)] overflow-hidden bg-[#1e1e1e]",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border-b border-[var(--card-border)] bg-[var(--secondary)] shrink-0",children:[(0,b.jsx)(k.Terminal,{className:"w-3.5 h-3.5 text-[var(--muted-foreground)]"}),(0,b.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-[var(--muted-foreground)]",children:"Terminal"})]}),(0,b.jsx)("div",{className:"flex-1 min-h-0",children:(0,b.jsx)(o.default,{ref:y,tabId:"setup-mcp"})})]})]})]})}a.s(["default",0,function(){let a=function(){let[a,b]=(0,c.useState)("checking"),[f,g]=(0,c.useState)(e.map(a=>({...a,installed:null,authenticated:null})));(0,c.useEffect)(()=>{let a=!1;return(async()=>{try{let c=await fetch("/api/providers",{cache:"no-store"});if(a)return;if(!c.ok)return void b("error");let f=await c.json(),h=Array.isArray(f?.providers)?f.providers:[],i=e.map(a=>{let b=h.find(b=>b?.id===a.id);return{...a,installed:b?.installed??!1,authenticated:b?.authenticated??!1}});a||(g(i),b(i.some(a=>"ready"===d(a))?"ready":"needs-setup"))}catch{a||b("error")}})(),()=>{a=!0}},[]);let h=(0,c.useCallback)(a=>{g(c=>{let e=c.map(b=>b.id===a?{...b,authenticated:!0}:b);return e.some(a=>"ready"===d(a))&&b("ready"),e})},[]),i=(0,c.useMemo)(()=>f.filter(a=>"needs-auth"===d(a)).map(a=>a.id),[f]),j=i.join(",");(0,c.useEffect)(()=>{if("checking"===a||0===i.length)return;let b=new AbortController,c=new Map;return i.forEach(function a(d){if(b.signal.aborted)return;let e=setTimeout(async()=>{if(!b.signal.aborted){try{let a=await fetch(`/api/providers/check/${d}`,{cache:"no-store",signal:b.signal});if(b.signal.aborted)return;if(a.ok){let b=await a.json();if(b.authenticated)return void h(d);if(!b.installed)return void g(a=>a.map(a=>a.id===d?{...a,installed:!1,authenticated:!1}:a))}}catch{if(b.signal.aborted)return}b.signal.aborted||a(d)}},5e3);c.set(d,e)}),()=>{b.abort(),c.forEach(a=>clearTimeout(a))}},[a,j,h]);let k=f.filter(a=>"ready"===d(a)).length;return{readyState:a,clis:f,authenticatedCount:k,totalCount:f.length,handleVerifySuccess:h}}(),g=function(){let a=(0,f.useRouter)(),[b,d]=(0,c.useState)(1),e=(0,c.useCallback)(()=>{d(a=>Math.min(a+1,2))},[]);return{step:b,goNext:e,goBack:(0,c.useCallback)(()=>{d(a=>Math.max(a-1,1))},[]),finish:(0,c.useCallback)(()=>{a.push("/")},[a])}}();return(0,b.jsxs)(b.Fragment,{children:[1===g.step&&(0,b.jsx)(r,{clis:a.clis,readyState:a.readyState,authenticatedCount:a.authenticatedCount,totalCount:a.totalCount,onVerifySuccess:a.handleVerifySuccess,onNext:g.goNext}),2===g.step&&(0,b.jsx)(w,{onBack:g.goBack,onFinish:g.finish})]})}],514760)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=apps_local_app_setup_page_tsx_0ql2qmr._.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
module.exports=[393041,296037,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(639211),e=a.i(819721),f=a.i(73948),g=a.i(697183),h=a.i(353532),i=a.i(824179),j=a.i(820859),k=a.i(356239),l=a.i(864061),m=a.i(811760),n=a.i(171552),o=a.i(667597),p=a.i(252197),q=a.i(724938),r=a.i(520612);function s(a,b={}){let[d,e]=(0,c.useState)([]),[f,g]=(0,c.useState)(!0),[h,i]=(0,c.useState)(null),j=(0,c.useRef)(!1),k=b.requireProjectId??!1,l=b.includeObjectiveJobs??!1,m=b.objectiveId?.trim()||null,n=(0,c.useCallback)(async()=>{if(k&&!a){e([]),i(null),g(!1),j.current=!0;return}try{j.current||g(!0);let b=new URLSearchParams;a&&b.set("projectId",a),m&&b.set("objectiveId",m),l&&b.set("includeObjectiveJobs","true");let c=b.toString(),d=await fetch(`/api/prompt-jobs${c?`?${c}`:""}`);if(!d.ok)throw Error(`Failed to fetch: ${d.status}`);let f=await d.json();e(f.jobs??[]),i(null)}catch(a){i(a instanceof Error?a.message:String(a))}finally{g(!1),j.current=!0}},[l,m,a,k]);(0,c.useEffect)(()=>{j.current=!1,n();let a=setInterval(n,1e4);return()=>clearInterval(a)},[n]);let o=(0,c.useCallback)(async a=>{let b=await fetch("/api/prompt-jobs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});return b.ok&&await n(),b.ok},[n]),p=(0,c.useCallback)(async(a,b)=>{let c=await fetch(`/api/prompt-jobs/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});return c.ok&&await n(),c.ok},[n]),q=(0,c.useCallback)(async a=>{let b=await fetch(`/api/prompt-jobs/${a}`,{method:"DELETE"});return b.ok&&await n(),b.ok},[n]),r=(0,c.useCallback)(async a=>{let b="active"===a.state?"paused":"active",c=await fetch(`/api/prompt-jobs/${a.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({state:b})});return c.ok&&await n(),c.ok},[n]),t=(0,c.useCallback)(async a=>{let b=await fetch("/api/prompt-jobs/poll",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jobId:a})});return b.ok&&await n(),b.ok},[n]),u=(0,c.useCallback)(async a=>{let b=await fetch(`/api/prompt-jobs/${a}/cancel`,{method:"POST"});return b.ok&&await n(),b.ok},[n]);return{jobs:d,loading:f,error:h,refresh:n,createJob:o,updateJob:p,deleteJob:q,toggleJob:r,runNow:t,cancelRun:u,fetchRuns:(0,c.useCallback)(async a=>{let b=await fetch(`/api/prompt-jobs/${a}/runs`);return b.ok?(await b.json()).runs??[]:[]},[])}}a.s(["usePromptJobs",0,s],296037);var t=a.i(155829),u=a.i(496368),v=a.i(86007),w=a.i(475632),x=a.i(785061),y=a.i(736303),z=a.i(201485),A=a.i(736707);let B=[{value:"prompt",label:"Prompt",description:"Run a prompt on a schedule"},{value:"linear_worker",label:"Linear Worker",description:"Observe Linear workspace and decide what to work on"}],C=(0,e.default)(async()=>{},{loadableGenerated:{modules:[844118]},ssr:!1}),D=(0,e.default)(async()=>{},{loadableGenerated:{modules:[668610]},ssr:!1});function E(a){return"active"===a.state&&(null!==a.nextRunAt&&a.nextRunAt-Date.now()<0?!a.lastRunAt||!(a.lastRunAt>=a.nextRunAt):!!a.prevScheduledAt&&!!a.lastRunAt&&a.lastRunAt>a.prevScheduledAt+3e5)}function F(a,b){if("paused"===b)return"Paused";if("stopped"===b)return"Stopped";if(null===a)return"Pending...";let c=a-Date.now();return c<0?"Overdue":c<6e4?`in ${Math.round(c/1e3)}s`:c<36e5?`in ${Math.round(c/6e4)}m`:c<864e5?`in ${Math.round(c/36e5)}h`:`in ${Math.round(c/864e5)}d`}function G(a){if(!a)return"—";let b=new Date(a);return b.toLocaleDateString("en-US",{month:"short",day:"numeric"})+", "+b.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit"})}function H({children:a}){return(0,b.jsx)("div",{className:"text-[10px] font-bold uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:a})}function I({children:a}){return(0,b.jsx)("label",{className:"block text-[10px] font-semibold text-[var(--muted-foreground)] uppercase tracking-widest mb-2",children:a})}function J(a,b,c=24){let d=b?b.replace("#",""):"e2e8f0";return`https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${encodeURIComponent(a)}&size=${c}&backgroundColor=${d}`}function K({agents:a,value:d,onChange:e}){let[f,g]=(0,c.useState)(!1),h=a.find(a=>a.id===d);return(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(I,{children:"Agent"}),(0,b.jsxs)("button",{type:"button",onClick:()=>g(!f),className:"w-full flex items-center gap-2.5 px-3 py-2.5 rounded-lg border border-[var(--card-border)] bg-[var(--muted)] text-left transition-colors hover:border-[var(--muted-foreground)]",children:[h?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("img",{src:J(h.id,h.color),alt:"",className:"size-6 rounded-full shrink-0"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)] truncate",children:h.name}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[h.provider,h.model?` / ${h.model}`:""]})]})]}):(0,b.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:"Select an agent..."}),(0,b.jsx)(m.ChevronDown,{size:14,className:`ml-auto text-[var(--muted-foreground)] transition-transform ${f?"rotate-180":""}`})]}),f&&(0,b.jsx)("div",{className:"absolute z-20 mt-1 w-full rounded-lg border border-[var(--card-border)] bg-[var(--card-bg)] shadow-lg max-h-[280px] overflow-y-auto",children:a.map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>{e(a.id),g(!1)},className:`w-full flex items-center gap-2.5 px-3 py-2.5 text-left transition-colors hover:bg-[var(--muted)] ${d===a.id?"bg-[var(--muted)]":""}`,children:[(0,b.jsx)("img",{src:J(a.id,a.color),alt:"",className:"size-6 rounded-full shrink-0"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)] truncate",children:a.name}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[a.provider,a.model?` / ${a.model}`:""]})]}),d===a.id&&(0,b.jsx)("span",{className:"text-xs text-[var(--foreground)]",children:"✓"})]},a.id))})]})}function L({onClose:a,onSubmit:d,editingJob:e,createDefaults:f,contextLabel:g}){let[h,j]=(0,c.useState)([]),[k,l]=(0,c.useState)(e?.executionMode??f?.executionMode??"prompt"),[o,p]=(0,c.useState)(e?.name??f?.name??""),[q,r]=(0,c.useState)(e?.prompt??f?.prompt??""),[s,t]=(0,c.useState)(e?.agentId??f?.agentId??""),[u,v]=(0,c.useState)(e?.provider??f?.provider??"claude"),[w,x]=(0,c.useState)(e?.model??f?.model??"");(0,c.useEffect)(()=>{fetch("/api/prompt-jobs/agents").then(a=>a.json()).then(a=>j(a.agents??[])).catch(a=>console.warn("[PromptJobBoard] fetch agents failed:",a))},[]);let[y,C]=(0,c.useState)(e?.cliArgs??f?.cliArgs??""),[E,F]=(0,c.useState)(e?.cronExpr||e?.cadence||f?.cadence||""),[G,H]=(0,c.useState)(e?.condition??f?.condition??""),[J,M]=(0,c.useState)(!!(e?.cronExpr||e?.cadence||f?.cadence)),[N,O]=(0,c.useState)(e?.catchUpPolicy??f?.catchUpPolicy??"fire_once"),[P,Q]=(0,c.useState)(!!e?.cliArgs||!!f?.cliArgs||e?.catchUpPolicy!=null&&"fire_once"!==e.catchUpPolicy||f?.catchUpPolicy!=null&&"fire_once"!==f.catchUpPolicy),[R,S]=(0,c.useState)(!1),T=async b=>{b.preventDefault(),o.trim()&&q.trim()&&E.trim()&&J&&(S(!0),await d({name:o.trim(),prompt:q.trim(),agentId:s,provider:u,model:w.trim(),cliArgs:y.trim(),catchUpPolicy:N,cadence:E.trim(),condition:G.trim(),executionMode:k}),S(!1),a())};return(0,b.jsxs)("div",{className:"h-full flex flex-col text-[var(--foreground)]",children:[(0,b.jsxs)("div",{className:"h-14 shrink-0 border-b border-[var(--card-border)] flex items-center justify-between px-6",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("button",{onClick:a,className:"p-1.5 rounded-md text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--muted)] transition-colors",children:(0,b.jsx)(i.X,{size:18})}),(0,b.jsx)("h2",{className:"text-sm font-semibold",children:e?"Edit Scheduled Task":"New Scheduled Task"}),g?(0,b.jsx)("span",{className:"rounded-full border border-sky-500/25 bg-sky-500/10 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] text-sky-100",children:g}):null]}),(0,b.jsx)("button",{onClick:T,disabled:R||!o.trim()||!q.trim()||!E.trim()||!J,className:"px-5 py-2 rounded-lg text-sm font-medium bg-[var(--foreground)] text-[var(--background)] hover:opacity-90 disabled:opacity-40 transition-opacity",children:R?"Saving...":e?"Save Changes":"Create Task"})]}),(0,b.jsxs)("div",{className:"flex flex-1 min-h-0 overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex-1 border-r border-[var(--card-border)] flex flex-col min-w-0",children:[(0,b.jsx)("div",{className:"px-8 pt-8 pb-4",children:(0,b.jsx)("input",{type:"text",value:o,onChange:a=>p(a.target.value),placeholder:"Untitled job",className:"w-full text-2xl font-bold bg-transparent border-none outline-none placeholder:text-[var(--muted-foreground)]/40 text-[var(--foreground)]",autoFocus:!0})}),(0,b.jsxs)("div",{className:"flex-1 px-8 pb-8 overflow-y-auto",children:[(0,b.jsx)(I,{children:"Instructions"}),(0,b.jsx)("div",{className:"bg-[var(--card-bg)] border border-[var(--card-border)] rounded-xl overflow-hidden min-h-[300px]",children:(0,b.jsx)(D,{content:q,onChange:a=>r(a),placeholder:"Describe what this prompt should do..."})})]})]}),(0,b.jsxs)("div",{className:"w-[380px] shrink-0 overflow-y-auto p-6 space-y-6",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)(I,{children:"Type"}),(0,b.jsx)("div",{className:"space-y-1.5",children:B.map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>{l(a.value),"linear_worker"===a.value&&(o.trim()||p(A.LINEAR_WORKER_JOB_NAME),q.trim()||r(A.LINEAR_WORKER_DEFAULT_PROMPT))},className:`w-full text-left px-3 py-2 rounded-lg border transition-all ${k===a.value?"border-[var(--foreground)] bg-[var(--foreground)]/5":"border-[var(--card-border)] bg-[var(--muted)] hover:border-[var(--muted-foreground)]"}`,children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)]",children:a.label}),(0,b.jsx)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:a.description})]},a.value))})]}),(0,b.jsx)(K,{agents:h,value:s,onChange:a=>{t(a);let b=h.find(b=>b.id===a);b?(v(b.provider),x(b.model??"")):(v("claude"),x(""))}}),(0,b.jsx)(z.ScheduleConditionPicker,{value:{cadence:E,condition:G},onChange:(a,b)=>{F(a.cadence),H(a.condition),M(b.isScheduleValid)},scheduleLabel:"Schedule",conditionLabel:"Condition",conditionHelpText:"Scheduled runs and Run now will check this condition before executing."}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("button",{type:"button",onClick:()=>Q(!P),className:"flex items-center gap-1.5 text-[11px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:[(0,b.jsx)(n.Settings2,{size:12})," ",P?"Hide":"Show"," advanced",(0,b.jsx)(m.ChevronDown,{size:12,className:`transition-transform ${P?"rotate-180":""}`})]}),P&&(0,b.jsxs)("div",{className:"mt-3 space-y-3 pt-3 border-t border-[var(--card-border)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)(I,{children:"CLI Arguments"}),(0,b.jsx)("input",{type:"text",value:y,onChange:a=>C(a.target.value),placeholder:"--dangerously-skip-permissions",className:"w-full bg-[var(--muted)] border border-[var(--card-border)] rounded-lg px-3 py-2 text-sm text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:border-[var(--foreground)] transition-colors"}),(0,b.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] mt-1",children:"Extra flags passed to the CLI command."})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)(I,{children:"When missed"}),(0,b.jsx)("div",{className:"space-y-1.5",children:[{id:"fire_once",label:"Run once on recovery",desc:"Execute a single run regardless of how many were missed"},{id:"replay_all",label:"Run all missed",desc:"Queue one run per missed occurrence (use with caution)"},{id:"skip",label:"Skip and wait for next",desc:"Discard missed runs, wait for the next scheduled time"}].map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>O(a.id),className:`w-full text-left px-3 py-2 rounded-lg border transition-all ${N===a.id?"border-[var(--foreground)] bg-[var(--foreground)]/5":"border-[var(--card-border)] bg-[var(--muted)] hover:border-[var(--muted-foreground)]"}`,children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)]",children:a.label}),(0,b.jsx)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:a.desc})]},a.id))})]})]})]})]})]})]})}function M({run:a,job:d,agentMap:e}){let f=`prompt-run:${a.id}`,g=d.agentId&&e[d.agentId]?e[d.agentId].name:null,h=d.agentId?e[d.agentId]:null,[i,j]=(0,c.useState)(new Set);(0,c.useEffect)(()=>{d.projectId&&fetch(`/api/projects/${encodeURIComponent(d.projectId)}/agents`).then(a=>a.json()).then(a=>{j(new Set((a.agents??[]).map(a=>a.agent_id)))}).catch(a=>console.warn("[PromptJobBoard] fetch project agents failed:",a))},[d.projectId]);let l=(0,c.useMemo)(()=>Object.values(e).filter(a=>i.has(a.id)).map(a=>({id:a.id,name:a.name,title:a.title??void 0,provider:a.provider??"claude",model:a.model,color:a.color})),[e,i]),m=(0,c.useMemo)(()=>`run-root:${a.id}`,[a.id]),{messages:n,setMessages:o,sendMessage:r,loadHistory:s,chatRuns:y,stop:z}=(0,t.useGroupChat)(f),{processes:A,streaming:B,chatRuns:D}=(0,u.useProcessPolling)({workspaceId:f,threadId:m},{messages:n,setMessages:o}),E=(0,c.useMemo)(()=>{let a=[...y];for(let b of D)a.some(a=>a.chatRunId===b.chatRunId)||a.push(b);return a},[y,D]),F=E.some(a=>"queued"===a.status||"running"===a.status)||A.some(a=>"spawning"===a.state||"running"===a.state),G=F?E.some(a=>"queued"===a.status)?"queued":"working":"ready",H=(0,c.useRef)(!1);(0,c.useEffect)(()=>{s().then(()=>{if(!H.current){H.current=!0;let b=a.output?`[Automation run output]
|
|
1
|
+
module.exports=[393041,296037,a=>{"use strict";var b=a.i(187924),c=a.i(572131),d=a.i(639211),e=a.i(819721),f=a.i(73948),g=a.i(697183),h=a.i(353532),i=a.i(824179),j=a.i(820859),k=a.i(356239),l=a.i(864061),m=a.i(811760),n=a.i(171552),o=a.i(667597),p=a.i(252197),q=a.i(724938),r=a.i(520612);function s(a,b={}){let[d,e]=(0,c.useState)([]),[f,g]=(0,c.useState)(!0),[h,i]=(0,c.useState)(null),j=(0,c.useRef)(!1),k=b.requireProjectId??!1,l=b.includeObjectiveJobs??!1,m=b.objectiveId?.trim()||null,n=(0,c.useCallback)(async()=>{if(k&&!a){e([]),i(null),g(!1),j.current=!0;return}try{j.current||g(!0);let b=new URLSearchParams;a&&b.set("projectId",a),m&&b.set("objectiveId",m),l&&b.set("includeObjectiveJobs","true");let c=b.toString(),d=await fetch(`/api/prompt-jobs${c?`?${c}`:""}`);if(!d.ok)throw Error(`Failed to fetch: ${d.status}`);let f=await d.json();e(f.jobs??[]),i(null)}catch(a){i(a instanceof Error?a.message:String(a))}finally{g(!1),j.current=!0}},[l,m,a,k]);(0,c.useEffect)(()=>{j.current=!1,n();let a=setInterval(n,1e4);return()=>clearInterval(a)},[n]);let o=(0,c.useCallback)(async a=>{let b=await fetch("/api/prompt-jobs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok)return null;let{job:c}=await b.json();return await n(),c?.id??null},[n]),p=(0,c.useCallback)(async(a,b)=>{let c=await fetch(`/api/prompt-jobs/${a}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});return c.ok&&await n(),c.ok},[n]),q=(0,c.useCallback)(async a=>{let b=await fetch(`/api/prompt-jobs/${a}`,{method:"DELETE"});return b.ok&&await n(),b.ok},[n]),r=(0,c.useCallback)(async a=>{let b="active"===a.state?"paused":"active",c=await fetch(`/api/prompt-jobs/${a.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({state:b})});return c.ok&&await n(),c.ok},[n]),t=(0,c.useCallback)(async a=>{let b=await fetch("/api/prompt-jobs/poll",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jobId:a})});return b.ok&&await n(),b.ok},[n]),u=(0,c.useCallback)(async a=>{let b=await fetch(`/api/prompt-jobs/${a}/cancel`,{method:"POST"});return b.ok&&await n(),b.ok},[n]);return{jobs:d,loading:f,error:h,refresh:n,createJob:o,updateJob:p,deleteJob:q,toggleJob:r,runNow:t,cancelRun:u,fetchRuns:(0,c.useCallback)(async a=>{let b=await fetch(`/api/prompt-jobs/${a}/runs`);return b.ok?(await b.json()).runs??[]:[]},[])}}a.s(["usePromptJobs",0,s],296037);var t=a.i(155829),u=a.i(496368),v=a.i(86007),w=a.i(475632),x=a.i(785061),y=a.i(736303),z=a.i(201485);let A=[{value:"prompt",label:"Prompt",description:"Run a prompt on a schedule"},{value:"linear_worker",label:"Linear Worker",description:"Observe Linear workspace and decide what to work on"}],B=(0,e.default)(async()=>{},{loadableGenerated:{modules:[844118]},ssr:!1}),C=(0,e.default)(async()=>{},{loadableGenerated:{modules:[668610]},ssr:!1});function D(a){return"active"===a.state&&(null!==a.nextRunAt&&a.nextRunAt-Date.now()<0?!a.lastRunAt||!(a.lastRunAt>=a.nextRunAt):!!a.prevScheduledAt&&!!a.lastRunAt&&a.lastRunAt>a.prevScheduledAt+3e5)}function E(a,b){if("paused"===b)return"Paused";if("stopped"===b)return"Stopped";if(null===a)return"Pending...";let c=a-Date.now();return c<0?"Overdue":c<6e4?`in ${Math.round(c/1e3)}s`:c<36e5?`in ${Math.round(c/6e4)}m`:c<864e5?`in ${Math.round(c/36e5)}h`:`in ${Math.round(c/864e5)}d`}function F(a){if(!a)return"—";let b=new Date(a);return b.toLocaleDateString("en-US",{month:"short",day:"numeric"})+", "+b.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit"})}function G({children:a}){return(0,b.jsx)("div",{className:"text-[10px] font-bold uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:a})}function H({children:a}){return(0,b.jsx)("label",{className:"block text-[10px] font-semibold text-[var(--muted-foreground)] uppercase tracking-widest mb-2",children:a})}function I(a,b,c=24){let d=b?b.replace("#",""):"e2e8f0";return`https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${encodeURIComponent(a)}&size=${c}&backgroundColor=${d}`}function J({agents:a,value:d,onChange:e}){let[f,g]=(0,c.useState)(!1),h=a.find(a=>a.id===d);return(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(H,{children:"Agent"}),(0,b.jsxs)("button",{type:"button",onClick:()=>g(!f),className:"w-full flex items-center gap-2.5 px-3 py-2.5 rounded-lg border border-[var(--card-border)] bg-[var(--muted)] text-left transition-colors hover:border-[var(--muted-foreground)]",children:[h?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("img",{src:I(h.id,h.color),alt:"",className:"size-6 rounded-full shrink-0"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)] truncate",children:h.name}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[h.provider,h.model?` / ${h.model}`:""]})]})]}):(0,b.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:"Select an agent..."}),(0,b.jsx)(m.ChevronDown,{size:14,className:`ml-auto text-[var(--muted-foreground)] transition-transform ${f?"rotate-180":""}`})]}),f&&(0,b.jsx)("div",{className:"absolute z-20 mt-1 w-full rounded-lg border border-[var(--card-border)] bg-[var(--card-bg)] shadow-lg max-h-[280px] overflow-y-auto",children:a.map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>{e(a.id),g(!1)},className:`w-full flex items-center gap-2.5 px-3 py-2.5 text-left transition-colors hover:bg-[var(--muted)] ${d===a.id?"bg-[var(--muted)]":""}`,children:[(0,b.jsx)("img",{src:I(a.id,a.color),alt:"",className:"size-6 rounded-full shrink-0"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)] truncate",children:a.name}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[a.provider,a.model?` / ${a.model}`:""]})]}),d===a.id&&(0,b.jsx)("span",{className:"text-xs text-[var(--foreground)]",children:"✓"})]},a.id))})]})}function K({onClose:a,onSubmit:d,editingJob:e,createDefaults:f,contextLabel:g}){let[h,j]=(0,c.useState)([]),[k,l]=(0,c.useState)(e?.executionMode??f?.executionMode??"prompt"),[o,p]=(0,c.useState)(e?.name??f?.name??""),[q,r]=(0,c.useState)(e?.prompt??f?.prompt??""),[s,t]=(0,c.useState)(e?.agentId??f?.agentId??""),[u,v]=(0,c.useState)(e?.provider??f?.provider??"claude"),[w,x]=(0,c.useState)(e?.model??f?.model??"");(0,c.useEffect)(()=>{fetch("/api/prompt-jobs/agents").then(a=>a.json()).then(a=>j(a.agents??[])).catch(a=>console.warn("[PromptJobBoard] fetch agents failed:",a))},[]);let[y,A]=(0,c.useState)(e?.cliArgs??f?.cliArgs??""),[B,D]=(0,c.useState)(e?.cronExpr||e?.cadence||f?.cadence||""),[E,F]=(0,c.useState)(e?.condition??f?.condition??""),[G,I]=(0,c.useState)(!!(e?.cronExpr||e?.cadence||f?.cadence)),[L,M]=(0,c.useState)(e?.catchUpPolicy??f?.catchUpPolicy??"fire_once"),[N,O]=(0,c.useState)(!!e?.cliArgs||!!f?.cliArgs||e?.catchUpPolicy!=null&&"fire_once"!==e.catchUpPolicy||f?.catchUpPolicy!=null&&"fire_once"!==f.catchUpPolicy),[P,Q]=(0,c.useState)(!1),R=async b=>{b.preventDefault(),o.trim()&&q.trim()&&B.trim()&&G&&(Q(!0),await d({name:o.trim(),prompt:q.trim(),agentId:s,provider:u,model:w.trim(),cliArgs:y.trim(),catchUpPolicy:L,cadence:B.trim(),condition:E.trim(),executionMode:k}),Q(!1),a())};return(0,b.jsxs)("div",{className:"h-full flex flex-col text-[var(--foreground)]",children:[(0,b.jsxs)("div",{className:"h-14 shrink-0 border-b border-[var(--card-border)] flex items-center justify-between px-6",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("button",{onClick:a,className:"p-1.5 rounded-md text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--muted)] transition-colors",children:(0,b.jsx)(i.X,{size:18})}),(0,b.jsx)("h2",{className:"text-sm font-semibold",children:e?"Edit Scheduled Task":"New Scheduled Task"}),g?(0,b.jsx)("span",{className:"rounded-full border border-sky-500/25 bg-sky-500/10 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] text-sky-100",children:g}):null]}),(0,b.jsx)("button",{onClick:R,disabled:P||!o.trim()||!q.trim()||!B.trim()||!G,className:"px-5 py-2 rounded-lg text-sm font-medium bg-[var(--foreground)] text-[var(--background)] hover:opacity-90 disabled:opacity-40 transition-opacity",children:P?"Saving...":e?"Save Changes":"Create Task"})]}),(0,b.jsxs)("div",{className:"flex flex-1 min-h-0 overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex-1 border-r border-[var(--card-border)] flex flex-col min-w-0",children:[(0,b.jsx)("div",{className:"px-8 pt-8 pb-4",children:(0,b.jsx)("input",{type:"text",value:o,onChange:a=>p(a.target.value),placeholder:"Untitled job",className:"w-full text-2xl font-bold bg-transparent border-none outline-none placeholder:text-[var(--muted-foreground)]/40 text-[var(--foreground)]",autoFocus:!0})}),(0,b.jsxs)("div",{className:"flex-1 px-8 pb-8 overflow-y-auto",children:[(0,b.jsx)(H,{children:"Instructions"}),(0,b.jsx)("div",{className:"bg-[var(--card-bg)] border border-[var(--card-border)] rounded-xl overflow-hidden min-h-[300px]",children:(0,b.jsx)(C,{content:q,onChange:a=>r(a),placeholder:"Describe what this prompt should do..."})})]})]}),(0,b.jsxs)("div",{className:"w-[380px] shrink-0 overflow-y-auto p-6 space-y-6",children:[(0,b.jsx)(J,{agents:h,value:s,onChange:a=>{t(a);let b=h.find(b=>b.id===a);b?(v(b.provider),x(b.model??"")):(v("claude"),x(""))}}),(0,b.jsx)(z.ScheduleConditionPicker,{value:{cadence:B,condition:E},onChange:(a,b)=>{D(a.cadence),F(a.condition),I(b.isScheduleValid)},scheduleLabel:"Schedule",conditionLabel:"Condition",conditionHelpText:"Scheduled runs and Run now will check this condition before executing."}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("button",{type:"button",onClick:()=>O(!N),className:"flex items-center gap-1.5 text-[11px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:[(0,b.jsx)(n.Settings2,{size:12})," ",N?"Hide":"Show"," advanced",(0,b.jsx)(m.ChevronDown,{size:12,className:`transition-transform ${N?"rotate-180":""}`})]}),N&&(0,b.jsxs)("div",{className:"mt-3 space-y-3 pt-3 border-t border-[var(--card-border)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)(H,{children:"CLI Arguments"}),(0,b.jsx)("input",{type:"text",value:y,onChange:a=>A(a.target.value),placeholder:"--dangerously-skip-permissions",className:"w-full bg-[var(--muted)] border border-[var(--card-border)] rounded-lg px-3 py-2 text-sm text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:border-[var(--foreground)] transition-colors"}),(0,b.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] mt-1",children:"Extra flags passed to the CLI command."})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)(H,{children:"When missed"}),(0,b.jsx)("div",{className:"space-y-1.5",children:[{id:"fire_once",label:"Run once on recovery",desc:"Execute a single run regardless of how many were missed"},{id:"replay_all",label:"Run all missed",desc:"Queue one run per missed occurrence (use with caution)"},{id:"skip",label:"Skip and wait for next",desc:"Discard missed runs, wait for the next scheduled time"}].map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>M(a.id),className:`w-full text-left px-3 py-2 rounded-lg border transition-all ${L===a.id?"border-[var(--foreground)] bg-[var(--foreground)]/5":"border-[var(--card-border)] bg-[var(--muted)] hover:border-[var(--muted-foreground)]"}`,children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)]",children:a.label}),(0,b.jsx)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:a.desc})]},a.id))})]})]})]})]})]})]})}function L({run:a,job:d,agentMap:e}){let f=`prompt-run:${a.id}`,g=d.agentId&&e[d.agentId]?e[d.agentId].name:null,h=d.agentId?e[d.agentId]:null,[i,j]=(0,c.useState)(new Set);(0,c.useEffect)(()=>{d.projectId&&fetch(`/api/projects/${encodeURIComponent(d.projectId)}/agents`).then(a=>a.json()).then(a=>{j(new Set((a.agents??[]).map(a=>a.agent_id)))}).catch(a=>console.warn("[PromptJobBoard] fetch project agents failed:",a))},[d.projectId]);let l=(0,c.useMemo)(()=>Object.values(e).filter(a=>i.has(a.id)).map(a=>({id:a.id,name:a.name,title:a.title??void 0,provider:a.provider??"claude",model:a.model,color:a.color})),[e,i]),m=(0,c.useMemo)(()=>`run-root:${a.id}`,[a.id]),{messages:n,setMessages:o,sendMessage:r,loadHistory:s,chatRuns:y,stop:z}=(0,t.useGroupChat)(f),{processes:A,streaming:C,chatRuns:D}=(0,u.useProcessPolling)({workspaceId:f,threadId:m},{messages:n,setMessages:o}),E=(0,c.useMemo)(()=>{let a=[...y];for(let b of D)a.some(a=>a.chatRunId===b.chatRunId)||a.push(b);return a},[y,D]),F=E.some(a=>"queued"===a.status||"running"===a.status)||A.some(a=>"spawning"===a.state||"running"===a.state),G=F?E.some(a=>"queued"===a.status)?"queued":"working":"ready",H=(0,c.useRef)(!1);(0,c.useEffect)(()=>{s().then(()=>{if(!H.current){H.current=!0;let b=a.output?`[Automation run output]
|
|
2
2
|
|
|
3
3
|
${a.output}${a.error?`
|
|
4
4
|
|
|
5
5
|
[Error]
|
|
6
|
-
${a.error}`:""}`:"[Automation run — no output]";fetch("/api/history",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:f,messages:[{id:m,role:"assistant",participantId:d.agentId||null,content:b,timestamp:new Date(a.startedAt??a.createdAt).getTime(),rootMessageId:null,parentMessageId:null,depth:0}]})}).catch(a=>console.warn("[PromptJobBoard] save root message failed:",a))}})},[s,f,m,a,d.agentId]);let I=(0,c.useRef)(null),K=(0,c.useRef)(null),L=(0,c.useRef)(n.length);(0,c.useEffect)(()=>{n.length>L.current&&K.current?.scrollIntoView({behavior:"smooth"}),L.current=n.length},[n.length]);let N=(0,c.useCallback)((a,b,c,d,e,f,g)=>{let h=(0,x.orderParticipantIds)(Array.from(i),e);r(a,b,void 0,m,c,void 0,h.length>0?h:void 0,void 0,f,g)},[r,i,m]);return(0,b.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsx)("div",{className:"flex items-center justify-between border-b border-[var(--card-border)] px-4 py-2",children:(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsxs)("div",{className:"text-[12px] font-semibold text-[var(--foreground)] truncate",children:["Run ",a.id.slice(0,8)]}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[a.status," ",null!=a.durationMs&&`\xb7 ${(a.durationMs/1e3).toFixed(1)}s`]})]})}),(0,b.jsx)("div",{ref:I,className:"min-h-0 flex-1 overflow-y-auto px-4 py-3",children:(0,b.jsxs)("div",{className:"space-y-4 max-w-none",children:[a.output&&(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:h?(0,b.jsx)("img",{src:J(d.agentId,h.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(k.Terminal,{size:12})})}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[11px] font-semibold text-[var(--foreground)]",children:g??d.provider}),(0,b.jsx)("span",{className:"text-[9px] px-1.5 py-0.5 rounded bg-[var(--muted)] text-[var(--muted-foreground)] font-medium uppercase tracking-wider",children:"Run output"})]}),(0,b.jsx)("div",{className:"rounded-lg px-3 py-2 text-[12px] leading-[1.55] bg-[var(--muted)] text-[var(--foreground)]",children:(0,b.jsx)(v.Markdown,{content:a.output})})]})]}),a.error&&(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-red-500/10 text-[10px] text-red-400",children:"!"})}),(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsx)("div",{className:"rounded-lg px-3 py-2 text-[12px] leading-[1.55] bg-red-500/10 text-red-400",children:(0,b.jsx)("div",{className:"whitespace-pre-wrap break-words",children:a.error})})})]}),!a.output&&!a.error&&(0,b.jsx)("div",{className:"text-center py-12 text-[var(--muted-foreground)] text-sm",children:"queued"===a.status?"Waiting to start...":"running"===a.status?"Running...":"No output captured"}),n.filter(a=>a.id!==m).map(a=>{let c="user"===a.role,f=a.participantId?e[a.participantId]:null,i=f?.name??g??d.provider;return(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:c?(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[var(--muted-foreground)]",children:(0,b.jsx)(p.User,{size:12})}):f?(0,b.jsx)("img",{src:J(f.id,f.color,28),alt:"",className:"size-7 rounded-full"}):h?(0,b.jsx)("img",{src:J(d.agentId,h.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(k.Terminal,{size:12})})}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"mb-1",children:(0,b.jsx)("span",{className:"text-[11px] font-semibold text-[var(--foreground)]",children:c?"You":i})}),(0,b.jsx)("div",{className:`rounded-lg px-3 py-2 text-[12px] leading-[1.55] ${c?"bg-blue-500/10 text-[var(--foreground)]":"bg-[var(--muted)] text-[var(--foreground)]"}`,children:(0,b.jsx)(v.Markdown,{content:(0,w.stripMarkers)(a.content),isUser:c})})]})]},a.id)}),Object.entries(B).filter(([,a])=>a.rootMessageId===m).map(([a])=>{let c=e[a]??h;return(0,b.jsxs)("div",{className:"flex gap-2.5 animate-in fade-in duration-300",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:c?(0,b.jsx)("img",{src:J(c.id,c.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(q.Sparkles,{size:12})})}),(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 py-1",children:[(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:c?.name??"Thinking"}),(0,b.jsxs)("span",{className:"inline-flex items-center gap-[3px]",children:[(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_infinite]"}),(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_0.2s_infinite]"}),(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_0.4s_infinite]"})]})]})})]},`streaming-${a}`)}),(0,b.jsx)("div",{ref:K})]})}),(0,b.jsx)("div",{className:"px-3 py-2",children:(0,b.jsx)(C,{onSend:N,onStop:z,loading:F,activityStatus:G,participants:l,commands:[],placeholder:"Follow up on this run...",initialPinnedParticipantId:d.agentId||void 0})})]})}function N({job:a,agentMap:e,onEdit:h,onToggle:i,onDelete:l,onRunNow:m,onCancelRun:n,fetchRuns:p}){let q,[s,t]=(0,c.useState)([]),[u,v]=(0,c.useState)(!1),{getSelection:w,pushSelection:x,replaceSelection:z}=(0,r.useUrlSelection)(),A=w("run"),C=a.agentId&&e[a.agentId]?e[a.agentId].name:null,D=(0,c.useCallback)(async()=>{v(!1),t(await p(a.id)),v(!0)},[p,a.id]);(0,c.useEffect)(()=>{D()},[D]),(0,c.useEffect)(()=>{let a=setInterval(D,d.UI_POLL_PROMPT_RUNS_MS);return()=>clearInterval(a)},[D]),(0,c.useEffect)(()=>{A&&u&&(s.some(a=>a.id===A)||z({run:null}))},[z,s,u,A]);let I=s.find(a=>a.id===A)??null,K="running"===a.lastOutcome,L=a.cronExpr&&(0,y.cronToHuman)(a.cronExpr)||a.cadence||a.cronExpr,O=(q=a.prompt.split("\n").map(a=>a.trim()).find(Boolean))?q.replace(/^execute\s+/i,""):"No target",P=a.agentId?e[a.agentId]:null;return(0,b.jsx)("div",{className:"h-full flex flex-col text-[var(--foreground)]",children:(0,b.jsxs)("div",{className:"flex min-h-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex w-[420px] shrink-0 flex-col border-r border-[var(--card-border)] overflow-hidden",children:[(0,b.jsx)("div",{className:"border-b border-[var(--card-border)] px-6 py-5",children:(0,b.jsxs)("div",{className:"flex items-start gap-4",children:[(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsx)("h2",{className:"truncate text-[18px] font-semibold text-[var(--foreground)]",children:a.name})}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)("button",{onClick:i,type:"button",role:"switch","aria-checked":"active"===a.state,title:"active"===a.state?"Pause":"Resume",className:`relative inline-flex h-[18px] w-[32px] shrink-0 cursor-pointer rounded-full border transition-colors ${"active"===a.state?"border-emerald-400/30 bg-emerald-500/40":"border-[var(--card-border)] bg-[var(--muted)]"}`,children:(0,b.jsx)("span",{className:`pointer-events-none absolute top-[2px] size-[12px] rounded-full bg-white/90 shadow-sm transition-transform ${"active"===a.state?"translate-x-[16px]":"translate-x-[2px]"}`})}),(0,b.jsx)("button",{onClick:m,disabled:K,title:"Run now",className:"rounded-md border border-[var(--card-border)] p-1.5 text-[var(--muted-foreground)] transition-colors hover:border-[var(--foreground)] hover:text-[var(--foreground)] disabled:opacity-50",children:(0,b.jsx)(f.Play,{size:12,className:"fill-current"})}),(0,b.jsx)("button",{onClick:h,title:"Edit",className:"p-1.5 rounded-md border border-[var(--card-border)] text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:border-[var(--foreground)] transition-colors",children:(0,b.jsx)(o.Pencil,{size:12})}),(0,b.jsx)("button",{onClick:l,title:"Delete",className:"p-1.5 rounded-md border border-[var(--card-border)] text-[var(--muted-foreground)] hover:text-red-400 hover:border-red-400/30 transition-colors",children:(0,b.jsx)(g.Trash2,{size:12})})]})]})}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(0,b.jsxs)("div",{className:"space-y-0",children:[(0,b.jsx)("div",{className:"px-6 py-5",children:(0,b.jsx)("div",{className:"rounded-2xl border border-[var(--card-border)] bg-[var(--card-bg)] px-5 py-4",children:(0,b.jsxs)("div",{className:"grid grid-cols-[96px,minmax(0,1fr)] items-center gap-x-4 gap-y-4",children:[a.executionMode&&"prompt"!==a.executionMode&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Type"}),(0,b.jsx)("div",{className:"min-w-0",children:(0,b.jsx)("span",{className:"rounded-md border border-violet-400/20 bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-violet-400",children:B.find(b=>b.value===a.executionMode)?.label??a.executionMode})})]}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Agent"}),(0,b.jsx)("div",{className:"min-w-0 flex items-center justify-between gap-3",children:(0,b.jsxs)("div",{className:"min-w-0 flex items-center gap-2.5",children:[P?(0,b.jsx)("img",{src:J(P.id,P.color,20),alt:"",className:"size-5 rounded-full shrink-0"}):(0,b.jsx)(k.Terminal,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsxs)("div",{className:"truncate text-[13px] font-medium text-[var(--foreground)]",children:[C??a.provider,a.model?` (${a.provider} / ${a.model})`:""]})]})}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Schedule"}),(0,b.jsx)("div",{className:"truncate text-[13px] font-medium text-[var(--foreground)]",children:L||"—"}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Target"}),(0,b.jsx)("div",{className:"truncate font-mono text-[13px] text-[var(--foreground)]",title:O,children:O})]})})}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between px-6 py-4",children:[(0,b.jsx)(H,{children:"Recent Runs"}),(0,b.jsxs)("span",{className:"text-sm text-[var(--muted-foreground)]",children:[s.length," total"]})]}),(0,b.jsx)("div",{children:0===s.length?(0,b.jsx)("div",{className:"px-6 py-10 text-center text-[11px] text-[var(--muted-foreground)]",children:"No runs yet"}):s.map(a=>{let c=A===a.id,d="success"===a.status;return(0,b.jsxs)("button",{type:"button",onClick:()=>x({run:a.id}),className:`flex w-full items-center gap-4 border-t border-[var(--card-border)]/50 px-6 py-5 text-left transition-colors ${c?"border-l-2 border-l-emerald-400 bg-emerald-500/5":"hover:bg-[var(--muted)]/20"}`,children:[(0,b.jsx)("span",{className:`flex size-6 shrink-0 items-center justify-center rounded-full border text-[11px] ${d?"border-emerald-400 text-emerald-400":"failed"===a.status?"border-red-400 text-red-400":"running"===a.status?"border-sky-400 text-sky-400":"border-[var(--card-border)] text-[var(--muted-foreground)]"}`,children:d?"✓":"failed"===a.status?"!":"•"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-[13px] font-medium text-[var(--foreground)]",children:G(a.startedAt??a.createdAt)}),(0,b.jsx)("div",{className:"mt-1 text-[12px] text-[var(--muted-foreground)]",children:null!=a.durationMs?`${(a.durationMs/1e3).toFixed(1)}s`:"running"===a.status?"Running...":a.status.charAt(0).toUpperCase()+a.status.slice(1)})]}),c?(0,b.jsx)("span",{className:"rounded-md bg-[var(--muted)] px-2.5 py-1 text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Viewing"}):null]},a.id)})})]}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)] px-6 py-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[K?(0,b.jsx)("button",{onClick:n,className:"inline-flex items-center gap-1.5 rounded-md border border-red-400/30 px-2.5 py-1 text-[10px] font-bold uppercase tracking-[0.05em] text-red-400 transition-colors hover:bg-red-500/10",children:"Cancel run"}):null,a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null,E(a)&&(0,b.jsxs)("span",{className:"rounded-md border border-amber-500/20 bg-amber-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-amber-400 inline-flex items-center gap-1",children:[(0,b.jsx)(j.Clock,{size:10}),"overdue"]}),(0,b.jsxs)("span",{className:`text-[11px] ${E(a)?"text-amber-400 font-medium":"text-[var(--muted-foreground)]"}`,children:["Next run ",F(a.nextRunAt,a.state)]}),(0,b.jsxs)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:["Last ",a.lastRunAt?G(new Date(a.lastRunAt).toISOString()):"Never"]}),(a.cliArgs||"skip"!==a.overlapPolicy)&&(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:a.cliArgs?"Custom CLI args":`Overlap ${a.overlapPolicy}`})]}),a.condition?(0,b.jsx)("div",{className:"mt-3 text-[11px] leading-[1.5] text-[var(--muted-foreground)]",children:a.condition}):null]})]})})]}),I?(0,b.jsx)(M,{run:I,job:a,agentMap:e},I.id):(0,b.jsx)("div",{className:"flex min-w-0 flex-1 items-center justify-center text-[var(--muted-foreground)] text-sm",children:0===s.length?'No runs yet. Click "Run now" to trigger one.':"Select a run to view its output"})]})})}a.s(["CreateJobModal",0,L,"default",0,function({projectId:a,requireProjectId:d=!1,includeObjectiveJobs:e=!1,visibleJobIds:f,contextLabel:g,createDefaults:i,onCreateJob:m}={}){let{jobs:n,loading:o,refresh:p,createJob:q,updateJob:t,deleteJob:u,toggleJob:v,runNow:w,cancelRun:x,fetchRuns:z}=s(a,{requireProjectId:d,includeObjectiveJobs:e}),[A,B]=(0,c.useState)("all"),[C,D]=(0,c.useState)(null),[G,H]=(0,c.useState)(!1),[I,K]=(0,c.useState)(null),[M,O]=(0,c.useState)({}),[P,Q]=(0,c.useState)(null),[R,S]=(0,c.useState)({}),{getSelection:T,pushSelection:U,replaceSelection:V}=(0,r.useUrlSelection)(),W=T("job"),X=T("run"),Y=(0,c.useMemo)(()=>f?new Set(f):null,[f]);(0,c.useEffect)(()=>{fetch("/api/prompt-jobs/agents").then(a=>a.json()).then(a=>{let b={};for(let c of a.agents??[])b[c.id]=c;S(b)}).catch(a=>console.warn("[PromptJobBoard] fetch agent map failed:",a))},[]);let Z=a=>{Q(a),setTimeout(()=>Q(null),2500)},$=(0,c.useMemo)(()=>(Y?n.filter(a=>Y.has(a.id)):n).filter(a=>"linear_worker"!==a.executionMode),[n,Y]),_=$.filter(a=>"all"===A||a.state===A),aa=W?$.find(a=>a.id===W)??null:null,ab=aa??(C?.id===W&&(!Y||Y.has(C.id))?C:null);$.length,$.filter(a=>"active"===a.state).length,$.filter(a=>"paused"===a.state).length,$.filter(a=>"stopped"===a.state).length;let ac=async a=>{await v(a)&&Z(`${a.name} ${"active"===a.state?"paused":"resumed"}`)},ad=async(a,b)=>{if(b?.stopPropagation(),M[a])return;O(b=>({...b,[a]:!0}));let c=await w(a);O(b=>{let c={...b};return delete c[a],c}),c&&Z("Run triggered")},ae=async a=>{await u(a)&&(W===a&&U({job:null,run:null}),Z("Job deleted"))},af=async a=>{await x(a)&&Z("Run cancelled")},ag=async b=>{I?await t(I.id,b)&&Z(`Task "${b.name}" updated`):(m?await m(b):await q({...b,projectId:a??""}))&&(await p(),Z(`Task "${b.name}" created`))};(0,c.useEffect)(()=>{if(!W){D(null),X&&V({run:null});return}if(Y&&!Y.has(W)){D(null),V({job:null,run:null});return}if(aa)return void D(a=>a?.id===W?aa:null);let a=!1;return(async()=>{try{let b=await fetch(`/api/prompt-jobs/${encodeURIComponent(W)}`);if(a)return;if(404===b.status)return void V({job:null,run:null});if(!b.ok)throw Error(`Failed to fetch selected scheduled task: ${b.status}`);let c=await b.json().catch(()=>({}));if(!c.job?.id||!e&&c.job.objectiveId)return void V({job:null,run:null});D(c.job)}catch(b){a||console.error("Failed to hydrate selected prompt job",b)}})(),()=>{a=!0}},[e,V,aa,W,X,Y]);let ah=P&&(0,b.jsx)("div",{className:"fixed bottom-8 left-1/2 -translate-x-1/2 z-50 animate-in fade-in slide-in-from-bottom-2 duration-200",children:(0,b.jsx)("div",{className:"bg-[var(--card-bg)] border border-[var(--card-border)] px-4 py-2.5 rounded-xl shadow-lg flex items-center gap-2.5 text-sm font-medium",children:P})});return G?(0,b.jsxs)(b.Fragment,{children:[ah,(0,b.jsx)(L,{onClose:()=>{H(!1),K(null)},onSubmit:ag,editingJob:I,createDefaults:i,contextLabel:g})]}):(0,b.jsxs)("div",{className:"flex h-full min-h-0 flex-col text-[var(--foreground)] lg:flex-row",children:[ah,(0,b.jsxs)("div",{className:"flex w-full shrink-0 flex-col border-b border-[var(--card-border)] lg:w-[390px] lg:border-b-0 lg:border-r",children:[(0,b.jsx)("div",{className:"px-6 pb-0 pt-6",children:(0,b.jsx)("div",{className:"border-b border-[var(--card-border)]",children:(0,b.jsxs)("div",{className:"flex items-end justify-between gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsx)("div",{className:"flex items-end gap-10",children:["all","active","paused"].map(a=>{let c=A===a;return(0,b.jsxs)("button",{onClick:()=>B(a),className:`relative pb-4 text-[18px] font-semibold capitalize transition-colors ${c?"text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}`,children:[a,c?(0,b.jsx)("span",{className:"absolute bottom-[6px] left-0 h-[4px] w-8 rounded-full bg-[var(--foreground)]"}):null]},a)})}),g?(0,b.jsx)("span",{className:"mb-3 rounded-full border border-sky-500/25 bg-sky-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-sky-100",children:g}):null]}),(0,b.jsxs)("div",{className:"flex items-center gap-5 pb-4 text-[var(--muted-foreground)]",children:[(0,b.jsx)("button",{onClick:()=>p(),className:"transition-colors hover:text-[var(--foreground)]",title:"Refresh",children:(0,b.jsx)(l.RefreshCw,{size:18})}),(0,b.jsx)("button",{onClick:()=>{K(null),H(!0)},className:"transition-colors hover:text-[var(--foreground)]",title:"New Job",children:(0,b.jsx)(h.Plus,{size:20})})]})]})})}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto pb-5",children:o&&0===$.length?(0,b.jsx)("div",{className:"py-12 text-center text-sm text-[var(--muted-foreground)]",children:"Loading scheduled tasks..."}):(0,b.jsxs)("div",{className:"overflow-hidden",children:[_.map(a=>{let c=W===a.id,d=a.cronExpr&&(0,y.cronToHuman)(a.cronExpr)||a.cadence||a.cronExpr;return(0,b.jsx)("div",{onClick:()=>U({job:a.id,run:null}),className:`cursor-pointer border-b border-[var(--card-border)]/50 px-6 py-4 transition-colors ${c?"bg-[var(--card-bg)]":"hover:bg-[var(--muted)]/10"}`,children:(0,b.jsxs)("div",{className:"flex items-start gap-4",children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"truncate text-[15px] font-medium text-[var(--foreground)]",children:a.name}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-x-4 gap-y-1 text-[12px] text-[var(--muted-foreground)]",children:[(0,b.jsx)("span",{className:"min-w-0 flex items-center gap-1.5 truncate",children:a.agentId&&R[a.agentId]?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("img",{src:J(a.agentId,R[a.agentId].color,16),alt:"",className:"size-4 rounded-full"}),R[a.agentId].name]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(k.Terminal,{size:11}),a.provider]})}),(0,b.jsxs)("span",{className:`flex items-center gap-1 ${E(a)?"text-amber-400 font-medium":""}`,children:[(0,b.jsx)(j.Clock,{size:11}),F(a.nextRunAt,a.state)]}),(0,b.jsx)("span",{className:"truncate font-mono text-[11px]",title:d,children:d}),"linear_worker"===a.executionMode?(0,b.jsx)("span",{className:"rounded-md border border-violet-400/20 bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-violet-400",children:"linear"}):null,a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null]})]}),(0,b.jsx)("button",{onClick:b=>{b.stopPropagation(),ac(a)},type:"button",role:"switch","aria-checked":"active"===a.state,title:"active"===a.state?"Pause":"Resume",className:`relative inline-flex h-[18px] w-[32px] shrink-0 cursor-pointer rounded-full border transition-colors ${"active"===a.state?"border-emerald-400/30 bg-emerald-500/40":"border-[var(--card-border)] bg-[var(--muted)]"}`,children:(0,b.jsx)("span",{className:`pointer-events-none absolute top-[2px] size-[12px] rounded-full bg-white/90 shadow-sm transition-transform ${"active"===a.state?"translate-x-[16px]":"translate-x-[2px]"}`})})]})},a.id)}),0===_.length&&(0,b.jsx)("div",{className:"rounded-xl border border-dashed border-[var(--card-border)] py-12 text-center text-sm text-[var(--muted-foreground)]",children:0===$.length?"No scheduled tasks yet. Create one to get started.":"No scheduled tasks match the selected filter."})]})})]}),(0,b.jsx)("div",{className:"min-h-0 min-w-0 flex-1",children:ab?(0,b.jsx)(N,{job:ab,agentMap:R,onEdit:()=>{K(ab),H(!0)},onToggle:()=>ac(ab),onDelete:()=>ae(ab.id),onRunNow:()=>ad(ab.id),onCancelRun:()=>af(ab.id),fetchRuns:z},ab.id):(0,b.jsx)("div",{className:"flex h-full items-center justify-center border-t border-[var(--card-border)] lg:border-l-0 lg:border-t-0",children:(0,b.jsxs)("div",{className:"rounded-2xl border border-dashed border-[var(--card-border)] bg-[var(--card-bg)]/60 px-8 py-10 text-center",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[var(--foreground)]",children:"Select a scheduled task"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[var(--muted-foreground)]",children:"The selected job will open here with its runs and chat output."})]})})})]})}],393041)}];
|
|
6
|
+
${a.error}`:""}`:"[Automation run — no output]";fetch("/api/history",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:f,messages:[{id:m,role:"assistant",participantId:d.agentId||null,content:b,timestamp:new Date(a.startedAt??a.createdAt).getTime(),rootMessageId:null,parentMessageId:null,depth:0}]})}).catch(a=>console.warn("[PromptJobBoard] save root message failed:",a))}})},[s,f,m,a,d.agentId]);let J=(0,c.useRef)(null),K=(0,c.useRef)(null),M=(0,c.useRef)(n.length);(0,c.useEffect)(()=>{n.length>M.current&&K.current?.scrollIntoView({behavior:"smooth"}),M.current=n.length},[n.length]);let N=(0,c.useCallback)((a,b,c,d,e,f,g)=>{let h=(0,x.orderParticipantIds)(Array.from(i),e);r(a,b,void 0,m,c,void 0,h.length>0?h:void 0,void 0,f,g)},[r,i,m]);return(0,b.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsx)("div",{className:"flex items-center justify-between border-b border-[var(--card-border)] px-4 py-2",children:(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsxs)("div",{className:"text-[12px] font-semibold text-[var(--foreground)] truncate",children:["Run ",a.id.slice(0,8)]}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[a.status," ",null!=a.durationMs&&`\xb7 ${(a.durationMs/1e3).toFixed(1)}s`]})]})}),(0,b.jsx)("div",{ref:J,className:"min-h-0 flex-1 overflow-y-auto px-4 py-3",children:(0,b.jsxs)("div",{className:"space-y-4 max-w-none",children:[a.output&&(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:h?(0,b.jsx)("img",{src:I(d.agentId,h.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(k.Terminal,{size:12})})}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[11px] font-semibold text-[var(--foreground)]",children:g??d.provider}),(0,b.jsx)("span",{className:"text-[9px] px-1.5 py-0.5 rounded bg-[var(--muted)] text-[var(--muted-foreground)] font-medium uppercase tracking-wider",children:"Run output"})]}),(0,b.jsx)("div",{className:"rounded-lg px-3 py-2 text-[12px] leading-[1.55] bg-[var(--muted)] text-[var(--foreground)]",children:(0,b.jsx)(v.Markdown,{content:a.output})})]})]}),a.error&&(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-red-500/10 text-[10px] text-red-400",children:"!"})}),(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsx)("div",{className:"rounded-lg px-3 py-2 text-[12px] leading-[1.55] bg-red-500/10 text-red-400",children:(0,b.jsx)("div",{className:"whitespace-pre-wrap break-words",children:a.error})})})]}),!a.output&&!a.error&&(0,b.jsx)("div",{className:"text-center py-12 text-[var(--muted-foreground)] text-sm",children:"queued"===a.status?"Waiting to start...":"running"===a.status?"Running...":"No output captured"}),n.filter(a=>a.id!==m).map(a=>{let c="user"===a.role,f=a.participantId?e[a.participantId]:null,i=f?.name??g??d.provider;return(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:c?(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[var(--muted-foreground)]",children:(0,b.jsx)(p.User,{size:12})}):f?(0,b.jsx)("img",{src:I(f.id,f.color,28),alt:"",className:"size-7 rounded-full"}):h?(0,b.jsx)("img",{src:I(d.agentId,h.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(k.Terminal,{size:12})})}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"mb-1",children:(0,b.jsx)("span",{className:"text-[11px] font-semibold text-[var(--foreground)]",children:c?"You":i})}),(0,b.jsx)("div",{className:`rounded-lg px-3 py-2 text-[12px] leading-[1.55] ${c?"bg-blue-500/10 text-[var(--foreground)]":"bg-[var(--muted)] text-[var(--foreground)]"}`,children:(0,b.jsx)(v.Markdown,{content:(0,w.stripMarkers)(a.content),isUser:c})})]})]},a.id)}),Object.entries(C).filter(([,a])=>a.rootMessageId===m).map(([a])=>{let c=e[a]??h;return(0,b.jsxs)("div",{className:"flex gap-2.5 animate-in fade-in duration-300",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:c?(0,b.jsx)("img",{src:I(c.id,c.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(q.Sparkles,{size:12})})}),(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 py-1",children:[(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:c?.name??"Thinking"}),(0,b.jsxs)("span",{className:"inline-flex items-center gap-[3px]",children:[(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_infinite]"}),(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_0.2s_infinite]"}),(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_0.4s_infinite]"})]})]})})]},`streaming-${a}`)}),(0,b.jsx)("div",{ref:K})]})}),(0,b.jsx)("div",{className:"px-3 py-2",children:(0,b.jsx)(B,{onSend:N,onStop:z,loading:F,activityStatus:G,participants:l,commands:[],placeholder:"Follow up on this run...",initialPinnedParticipantId:d.agentId||void 0})})]})}function M({job:a,agentMap:e,onEdit:h,onToggle:i,onDelete:l,onRunNow:m,onCancelRun:n,fetchRuns:p}){let q,[s,t]=(0,c.useState)([]),[u,v]=(0,c.useState)(!1),{getSelection:w,pushSelection:x,replaceSelection:z}=(0,r.useUrlSelection)(),B=w("run"),C=a.agentId&&e[a.agentId]?e[a.agentId].name:null,H=(0,c.useCallback)(async()=>{v(!1),t(await p(a.id)),v(!0)},[p,a.id]);(0,c.useEffect)(()=>{H()},[H]),(0,c.useEffect)(()=>{let a=setInterval(H,d.UI_POLL_PROMPT_RUNS_MS);return()=>clearInterval(a)},[H]),(0,c.useEffect)(()=>{B&&u&&(s.some(a=>a.id===B)||z({run:null}))},[z,s,u,B]);let J=s.find(a=>a.id===B)??null,K="running"===a.lastOutcome,N=a.cronExpr&&(0,y.cronToHuman)(a.cronExpr)||a.cadence||a.cronExpr,O=(q=a.prompt.split("\n").map(a=>a.trim()).find(Boolean))?q.replace(/^execute\s+/i,""):"No target",P=a.agentId?e[a.agentId]:null;return(0,b.jsx)("div",{className:"h-full flex flex-col text-[var(--foreground)]",children:(0,b.jsxs)("div",{className:"flex min-h-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex w-[420px] shrink-0 flex-col border-r border-[var(--card-border)] overflow-hidden",children:[(0,b.jsx)("div",{className:"border-b border-[var(--card-border)] px-6 py-5",children:(0,b.jsxs)("div",{className:"flex items-start gap-4",children:[(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsx)("h2",{className:"truncate text-[18px] font-semibold text-[var(--foreground)]",children:a.name})}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)("button",{onClick:i,type:"button",role:"switch","aria-checked":"active"===a.state,title:"active"===a.state?"Pause":"Resume",className:`relative inline-flex h-[18px] w-[32px] shrink-0 cursor-pointer rounded-full border transition-colors ${"active"===a.state?"border-emerald-400/30 bg-emerald-500/40":"border-[var(--card-border)] bg-[var(--muted)]"}`,children:(0,b.jsx)("span",{className:`pointer-events-none absolute top-[2px] size-[12px] rounded-full bg-white/90 shadow-sm transition-transform ${"active"===a.state?"translate-x-[16px]":"translate-x-[2px]"}`})}),(0,b.jsx)("button",{onClick:m,disabled:K,title:"Run now",className:"rounded-md border border-[var(--card-border)] p-1.5 text-[var(--muted-foreground)] transition-colors hover:border-[var(--foreground)] hover:text-[var(--foreground)] disabled:opacity-50",children:(0,b.jsx)(f.Play,{size:12,className:"fill-current"})}),(0,b.jsx)("button",{onClick:h,title:"Edit",className:"p-1.5 rounded-md border border-[var(--card-border)] text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:border-[var(--foreground)] transition-colors",children:(0,b.jsx)(o.Pencil,{size:12})}),(0,b.jsx)("button",{onClick:l,title:"Delete",className:"p-1.5 rounded-md border border-[var(--card-border)] text-[var(--muted-foreground)] hover:text-red-400 hover:border-red-400/30 transition-colors",children:(0,b.jsx)(g.Trash2,{size:12})})]})]})}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(0,b.jsxs)("div",{className:"space-y-0",children:[(0,b.jsx)("div",{className:"px-6 py-5",children:(0,b.jsx)("div",{className:"rounded-2xl border border-[var(--card-border)] bg-[var(--card-bg)] px-5 py-4",children:(0,b.jsxs)("div",{className:"grid grid-cols-[96px,minmax(0,1fr)] items-center gap-x-4 gap-y-4",children:[a.executionMode&&"prompt"!==a.executionMode&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Type"}),(0,b.jsx)("div",{className:"min-w-0",children:(0,b.jsx)("span",{className:"rounded-md border border-violet-400/20 bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-violet-400",children:A.find(b=>b.value===a.executionMode)?.label??a.executionMode})})]}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Agent"}),(0,b.jsx)("div",{className:"min-w-0 flex items-center justify-between gap-3",children:(0,b.jsxs)("div",{className:"min-w-0 flex items-center gap-2.5",children:[P?(0,b.jsx)("img",{src:I(P.id,P.color,20),alt:"",className:"size-5 rounded-full shrink-0"}):(0,b.jsx)(k.Terminal,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsxs)("div",{className:"truncate text-[13px] font-medium text-[var(--foreground)]",children:[C??a.provider,a.model?` (${a.provider} / ${a.model})`:""]})]})}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Schedule"}),(0,b.jsx)("div",{className:"truncate text-[13px] font-medium text-[var(--foreground)]",children:N||"—"}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Target"}),(0,b.jsx)("div",{className:"truncate font-mono text-[13px] text-[var(--foreground)]",title:O,children:O})]})})}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between px-6 py-4",children:[(0,b.jsx)(G,{children:"Recent Runs"}),(0,b.jsxs)("span",{className:"text-sm text-[var(--muted-foreground)]",children:[s.length," total"]})]}),(0,b.jsx)("div",{children:0===s.length?(0,b.jsx)("div",{className:"px-6 py-10 text-center text-[11px] text-[var(--muted-foreground)]",children:"No runs yet"}):s.map(a=>{let c=B===a.id,d="success"===a.status;return(0,b.jsxs)("button",{type:"button",onClick:()=>x({run:a.id}),className:`flex w-full items-center gap-4 border-t border-[var(--card-border)]/50 px-6 py-5 text-left transition-colors ${c?"border-l-2 border-l-emerald-400 bg-emerald-500/5":"hover:bg-[var(--muted)]/20"}`,children:[(0,b.jsx)("span",{className:`flex size-6 shrink-0 items-center justify-center rounded-full border text-[11px] ${d?"border-emerald-400 text-emerald-400":"failed"===a.status?"border-red-400 text-red-400":"running"===a.status?"border-sky-400 text-sky-400":"border-[var(--card-border)] text-[var(--muted-foreground)]"}`,children:d?"✓":"failed"===a.status?"!":"•"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-[13px] font-medium text-[var(--foreground)]",children:F(a.startedAt??a.createdAt)}),(0,b.jsx)("div",{className:"mt-1 text-[12px] text-[var(--muted-foreground)]",children:null!=a.durationMs?`${(a.durationMs/1e3).toFixed(1)}s`:"running"===a.status?"Running...":a.status.charAt(0).toUpperCase()+a.status.slice(1)})]}),c?(0,b.jsx)("span",{className:"rounded-md bg-[var(--muted)] px-2.5 py-1 text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Viewing"}):null]},a.id)})})]}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)] px-6 py-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[K?(0,b.jsx)("button",{onClick:n,className:"inline-flex items-center gap-1.5 rounded-md border border-red-400/30 px-2.5 py-1 text-[10px] font-bold uppercase tracking-[0.05em] text-red-400 transition-colors hover:bg-red-500/10",children:"Cancel run"}):null,a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null,D(a)&&(0,b.jsxs)("span",{className:"rounded-md border border-amber-500/20 bg-amber-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-amber-400 inline-flex items-center gap-1",children:[(0,b.jsx)(j.Clock,{size:10}),"overdue"]}),(0,b.jsxs)("span",{className:`text-[11px] ${D(a)?"text-amber-400 font-medium":"text-[var(--muted-foreground)]"}`,children:["Next run ",E(a.nextRunAt,a.state)]}),(0,b.jsxs)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:["Last ",a.lastRunAt?F(new Date(a.lastRunAt).toISOString()):"Never"]}),(a.cliArgs||"skip"!==a.overlapPolicy)&&(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:a.cliArgs?"Custom CLI args":`Overlap ${a.overlapPolicy}`})]}),a.condition?(0,b.jsx)("div",{className:"mt-3 text-[11px] leading-[1.5] text-[var(--muted-foreground)]",children:a.condition}):null]})]})})]}),J?(0,b.jsx)(L,{run:J,job:a,agentMap:e},J.id):(0,b.jsx)("div",{className:"flex min-w-0 flex-1 items-center justify-center text-[var(--muted-foreground)] text-sm",children:0===s.length?'No runs yet. Click "Run now" to trigger one.':"Select a run to view its output"})]})})}a.s(["CreateJobModal",0,K,"default",0,function({projectId:a,requireProjectId:d=!1,includeObjectiveJobs:e=!1,visibleJobIds:f,contextLabel:g,createDefaults:i,onCreateJob:m}={}){let{jobs:n,loading:o,refresh:p,createJob:q,updateJob:t,deleteJob:u,toggleJob:v,runNow:w,cancelRun:x,fetchRuns:z}=s(a,{requireProjectId:d,includeObjectiveJobs:e}),[A,B]=(0,c.useState)("all"),[C,F]=(0,c.useState)(null),[G,H]=(0,c.useState)(!1),[J,L]=(0,c.useState)(null),[N,O]=(0,c.useState)({}),[P,Q]=(0,c.useState)(null),[R,S]=(0,c.useState)({}),{getSelection:T,pushSelection:U,replaceSelection:V}=(0,r.useUrlSelection)(),W=T("job"),X=T("run"),Y=(0,c.useMemo)(()=>f?new Set(f):null,[f]);(0,c.useEffect)(()=>{fetch("/api/prompt-jobs/agents").then(a=>a.json()).then(a=>{let b={};for(let c of a.agents??[])b[c.id]=c;S(b)}).catch(a=>console.warn("[PromptJobBoard] fetch agent map failed:",a))},[]);let Z=a=>{Q(a),setTimeout(()=>Q(null),2500)},$=(0,c.useMemo)(()=>(Y?n.filter(a=>Y.has(a.id)):n).filter(a=>"linear_worker"!==a.executionMode),[n,Y]),_=$.filter(a=>"all"===A||a.state===A),aa=W?$.find(a=>a.id===W)??null:null,ab=aa??(C?.id===W&&(!Y||Y.has(C.id))?C:null);$.length,$.filter(a=>"active"===a.state).length,$.filter(a=>"paused"===a.state).length,$.filter(a=>"stopped"===a.state).length;let ac=async a=>{await v(a)&&Z(`${a.name} ${"active"===a.state?"paused":"resumed"}`)},ad=async(a,b)=>{if(b?.stopPropagation(),N[a])return;O(b=>({...b,[a]:!0}));let c=await w(a);O(b=>{let c={...b};return delete c[a],c}),c&&Z("Run triggered")},ae=async a=>{await u(a)&&(W===a&&U({job:null,run:null}),Z("Job deleted"))},af=async a=>{await x(a)&&Z("Run cancelled")},ag=async b=>{if(J)await t(J.id,b)&&Z(`Task "${b.name}" updated`);else{let c=m?await m(b):await q({...b,projectId:a??""});c&&(await p(),U({job:c,run:null}),Z(`Task "${b.name}" created`))}};(0,c.useEffect)(()=>{if(!W){F(null),X&&V({run:null});return}if(Y&&!Y.has(W)){F(null),V({job:null,run:null});return}if(aa)return void F(a=>a?.id===W?aa:null);let a=!1;return(async()=>{try{let b=await fetch(`/api/prompt-jobs/${encodeURIComponent(W)}`);if(a)return;if(404===b.status)return void V({job:null,run:null});if(!b.ok)throw Error(`Failed to fetch selected scheduled task: ${b.status}`);let c=await b.json().catch(()=>({}));if(!c.job?.id||!e&&c.job.objectiveId)return void V({job:null,run:null});F(c.job)}catch(b){a||console.error("Failed to hydrate selected prompt job",b)}})(),()=>{a=!0}},[e,V,aa,W,X,Y]);let ah=P&&(0,b.jsx)("div",{className:"fixed bottom-8 left-1/2 -translate-x-1/2 z-50 animate-in fade-in slide-in-from-bottom-2 duration-200",children:(0,b.jsx)("div",{className:"bg-[var(--card-bg)] border border-[var(--card-border)] px-4 py-2.5 rounded-xl shadow-lg flex items-center gap-2.5 text-sm font-medium",children:P})});return G?(0,b.jsxs)(b.Fragment,{children:[ah,(0,b.jsx)(K,{onClose:()=>{H(!1),L(null)},onSubmit:ag,editingJob:J,createDefaults:i,contextLabel:g})]}):(0,b.jsxs)("div",{className:"flex h-full min-h-0 flex-col text-[var(--foreground)] lg:flex-row",children:[ah,(0,b.jsxs)("div",{className:"flex w-full shrink-0 flex-col border-b border-[var(--card-border)] lg:w-[390px] lg:border-b-0 lg:border-r",children:[(0,b.jsx)("div",{className:"px-6 pb-0 pt-6",children:(0,b.jsx)("div",{className:"border-b border-[var(--card-border)]",children:(0,b.jsxs)("div",{className:"flex items-end justify-between gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsx)("div",{className:"flex items-end gap-10",children:["all","active","paused"].map(a=>{let c=A===a;return(0,b.jsxs)("button",{onClick:()=>B(a),className:`relative pb-4 text-[18px] font-semibold capitalize transition-colors ${c?"text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}`,children:[a,c?(0,b.jsx)("span",{className:"absolute bottom-[6px] left-0 h-[4px] w-8 rounded-full bg-[var(--foreground)]"}):null]},a)})}),g?(0,b.jsx)("span",{className:"mb-3 rounded-full border border-sky-500/25 bg-sky-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-sky-100",children:g}):null]}),(0,b.jsxs)("div",{className:"flex items-center gap-5 pb-4 text-[var(--muted-foreground)]",children:[(0,b.jsx)("button",{onClick:()=>p(),className:"transition-colors hover:text-[var(--foreground)]",title:"Refresh",children:(0,b.jsx)(l.RefreshCw,{size:18})}),(0,b.jsx)("button",{onClick:()=>{L(null),H(!0)},className:"transition-colors hover:text-[var(--foreground)]",title:"New Job",children:(0,b.jsx)(h.Plus,{size:20})})]})]})})}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto pb-5",children:o&&0===$.length?(0,b.jsx)("div",{className:"py-12 text-center text-sm text-[var(--muted-foreground)]",children:"Loading scheduled tasks..."}):(0,b.jsxs)("div",{className:"overflow-hidden",children:[_.map(a=>{let c=W===a.id,d=a.cronExpr&&(0,y.cronToHuman)(a.cronExpr)||a.cadence||a.cronExpr;return(0,b.jsx)("div",{onClick:()=>U({job:a.id,run:null}),className:`cursor-pointer border-b border-[var(--card-border)]/50 px-6 py-4 transition-colors ${c?"bg-[var(--card-bg)]":"hover:bg-[var(--muted)]/10"}`,children:(0,b.jsxs)("div",{className:"flex items-start gap-4",children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"truncate text-[15px] font-medium text-[var(--foreground)]",children:a.name}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-x-4 gap-y-1 text-[12px] text-[var(--muted-foreground)]",children:[(0,b.jsx)("span",{className:"min-w-0 flex items-center gap-1.5 truncate",children:a.agentId&&R[a.agentId]?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("img",{src:I(a.agentId,R[a.agentId].color,16),alt:"",className:"size-4 rounded-full"}),R[a.agentId].name]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(k.Terminal,{size:11}),a.provider]})}),(0,b.jsxs)("span",{className:`flex items-center gap-1 ${D(a)?"text-amber-400 font-medium":""}`,children:[(0,b.jsx)(j.Clock,{size:11}),E(a.nextRunAt,a.state)]}),(0,b.jsx)("span",{className:"truncate font-mono text-[11px]",title:d,children:d}),"linear_worker"===a.executionMode?(0,b.jsx)("span",{className:"rounded-md border border-violet-400/20 bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-violet-400",children:"linear"}):null,a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null]})]}),(0,b.jsx)("button",{onClick:b=>{b.stopPropagation(),ac(a)},type:"button",role:"switch","aria-checked":"active"===a.state,title:"active"===a.state?"Pause":"Resume",className:`relative inline-flex h-[18px] w-[32px] shrink-0 cursor-pointer rounded-full border transition-colors ${"active"===a.state?"border-emerald-400/30 bg-emerald-500/40":"border-[var(--card-border)] bg-[var(--muted)]"}`,children:(0,b.jsx)("span",{className:`pointer-events-none absolute top-[2px] size-[12px] rounded-full bg-white/90 shadow-sm transition-transform ${"active"===a.state?"translate-x-[16px]":"translate-x-[2px]"}`})})]})},a.id)}),0===_.length&&(0,b.jsx)("div",{className:"rounded-xl border border-dashed border-[var(--card-border)] py-12 text-center text-sm text-[var(--muted-foreground)]",children:0===$.length?"No scheduled tasks yet. Create one to get started.":"No scheduled tasks match the selected filter."})]})})]}),(0,b.jsx)("div",{className:"min-h-0 min-w-0 flex-1",children:ab?(0,b.jsx)(M,{job:ab,agentMap:R,onEdit:()=>{L(ab),H(!0)},onToggle:()=>ac(ab),onDelete:()=>ae(ab.id),onRunNow:()=>ad(ab.id),onCancelRun:()=>af(ab.id),fetchRuns:z},ab.id):(0,b.jsx)("div",{className:"flex h-full items-center justify-center border-t border-[var(--card-border)] lg:border-l-0 lg:border-t-0",children:(0,b.jsxs)("div",{className:"rounded-2xl border border-dashed border-[var(--card-border)] bg-[var(--card-bg)]/60 px-8 py-10 text-center",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[var(--foreground)]",children:"Select a scheduled task"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[var(--muted-foreground)]",children:"The selected job will open here with its runs and chat output."})]})})})]})}],393041)}];
|
|
7
7
|
|
|
8
8
|
//# sourceMappingURL=apps_local_components_PromptJobBoard_tsx_06zob36._.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports=[739515,a=>{"use strict";var b=a.i(187924),c=a.i(238246),d=a.i(50944),e=a.i(572131),f=a.i(599086),g=a.i(285320),h=a.i(549429),i=a.i(831709);let j=(0,i.default)("calendar-clock",[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]]);var k=a.i(627421),l=a.i(820859),m=a.i(552605),n=a.i(667597),o=a.i(353532),p=a.i(542341),q=a.i(697183),r=a.i(252197),s=a.i(985339),t=a.i(724938),u=a.i(824179),v=a.i(830284),w=a.i(155829),x=a.i(496368),y=a.i(689882),z=a.i(86007),A=a.i(8e4),B=a.i(86466),C=a.i(766412),D=a.i(327788),E=a.i(73948),F=a.i(999076),G=a.i(296037),H=a.i(736303),I=a.i(393041),J=a.i(201485);function K(a){let b=a.cadence||a.cronExpr;return b?(0,H.cronToHuman)(a.cronExpr||b)??b:"No frequency"}function L(a){return"active"===a.state&&(null!==a.nextRunAt&&a.nextRunAt-Date.now()<0?!a.lastRunAt||!(a.lastRunAt>=a.nextRunAt):!!a.prevScheduledAt&&!!a.lastRunAt&&a.lastRunAt>a.prevScheduledAt+3e5)}function M(a,b){if("paused"===b)return"Paused";if("stopped"===b)return"Stopped";if(null===a)return"Pending";let c=a-Date.now();return c<0?"Overdue":c<6e4?`in ${Math.round(c/1e3)}s`:c<36e5?`in ${Math.round(c/6e4)}m`:c<864e5?`in ${Math.round(c/36e5)}h`:`in ${Math.round(c/864e5)}d`}function N(a){return new Date(a).toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function O({job:a,onClose:c,onUpdate:d}){let[f,g]=(0,e.useState)({cadence:a.cronExpr||a.cadence||"",condition:a.condition||""}),[h,i]=(0,e.useState)(!0),[j,k]=(0,e.useState)(!1),m=async()=>{h&&(k(!0),await d({cadence:f.cadence,condition:f.condition}),k(!1),c())};return(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4 py-6",children:(0,b.jsxs)("div",{className:"flex w-full max-w-md max-h-[85vh] flex-col rounded-[28px] border border-[var(--border)] bg-[var(--card-bg)] shadow-2xl",children:[(0,b.jsxs)("div",{className:"flex shrink-0 items-center justify-between border-b border-[var(--border)] px-6 py-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,b.jsx)(l.Clock,{className:"h-4 w-4 text-[var(--muted-foreground)]"}),(0,b.jsx)("p",{className:"text-sm font-semibold text-[var(--foreground)]",children:a.name})]}),(0,b.jsx)("button",{type:"button",onClick:c,className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-[var(--card-hover-border)] hover:text-[var(--foreground)]",children:(0,b.jsx)(u.X,{className:"h-4 w-4"})})]}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 py-5",children:(0,b.jsx)(J.ScheduleConditionPicker,{value:f,onChange:(a,b)=>{g(a),i(b.isScheduleValid)},scheduleLabel:"Schedule",conditionLabel:"Condition",conditionHelpText:"Scheduled runs and Run now will check this condition before executing."})}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center justify-end gap-3 border-t border-[var(--border)] px-6 py-4",children:[(0,b.jsx)("button",{type:"button",onClick:c,className:"rounded-xl border border-[var(--border)] px-4 py-2.5 text-sm text-[var(--foreground)] transition-colors hover:border-[var(--card-hover-border)]",children:"Cancel"}),(0,b.jsx)("button",{type:"button",onClick:()=>void m(),disabled:j||!h,className:"rounded-xl border border-emerald-500/30 bg-emerald-500/10 px-4 py-2.5 text-sm text-emerald-400 transition-colors hover:bg-emerald-500/20 disabled:opacity-50",children:j?"Saving...":"Save"})]})]})})}function P({job:a,onClose:c,onUpdate:d}){let[f,g]=(0,e.useState)(a.prompt||""),[h,i]=(0,e.useState)(!1),j=async()=>{f===a.prompt||(i(!0),await d({prompt:f}),i(!1)),c()};return(0,b.jsx)("div",{className:"fixed inset-0 z-40 flex items-center justify-center bg-black/50 px-4 py-6",children:(0,b.jsxs)("div",{className:"flex w-full max-w-6xl max-h-[85vh] flex-col rounded-[28px] border border-[var(--border)] bg-[var(--card-bg)] shadow-2xl",children:[(0,b.jsxs)("div",{className:"flex shrink-0 items-start justify-between gap-4 border-b border-[var(--border)] px-6 py-5",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2.5",children:[(0,b.jsx)("p",{className:"truncate text-lg font-semibold text-[var(--foreground)]",children:a.name}),(0,b.jsx)("span",{className:`rounded-full border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] ${R(a.state)}`,children:Q(a.state)}),a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null]}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-3 text-xs text-[var(--muted-foreground)]",children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,b.jsx)(l.Clock,{className:"h-3.5 w-3.5"}),K(a)]}),(0,b.jsxs)("span",{children:["Next run ",M(a.nextRunAt,a.state)]}),(0,b.jsxs)("span",{children:["Updated ",N(a.updatedAt)]})]})]}),(0,b.jsx)("button",{type:"button",onClick:c,className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-[var(--card-hover-border)] hover:text-[var(--foreground)]","aria-label":"Close scheduled task details",children:(0,b.jsx)(u.X,{className:"h-4 w-4"})})]}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 py-6 space-y-5",children:(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]",children:"Instructions"}),(0,b.jsx)("div",{className:"rounded-2xl border border-[var(--card-hover-border)] bg-[var(--overlay-panel-muted)] px-1 py-1 text-sm leading-6 text-[var(--foreground)]",children:(0,b.jsx)(B.default,{content:f,editable:!0,onChange:g,placeholder:"Write instructions in markdown…"})})]})}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center justify-end gap-3 border-t border-[var(--border)] px-6 py-4",children:[(0,b.jsx)("button",{type:"button",onClick:c,className:"rounded-xl border border-[var(--border)] px-4 py-2.5 text-sm text-[var(--foreground)] transition-colors hover:border-[var(--card-hover-border)]",children:"Cancel"}),(0,b.jsx)("button",{type:"button",onClick:()=>void j(),disabled:h,className:"rounded-xl border border-emerald-500/30 bg-emerald-500/10 px-4 py-2.5 text-sm text-emerald-400 transition-colors hover:bg-emerald-500/20 disabled:opacity-50",children:h?"Saving...":"Save"})]})]})})}function Q(a){return"active"===a?"Active":"paused"===a?"Paused":"Stopped"}function R(a){return"active"===a?"border-[var(--status-completed-border)] bg-[var(--status-completed-bg)] text-[var(--status-completed)]":"paused"===a?"border-[var(--status-blocked-border)] bg-[var(--status-blocked-bg)] text-[var(--status-blocked)]":"border-[var(--tone-neutral-border)] bg-[var(--tone-neutral-bg)] text-[var(--tone-neutral)]"}function S({projectId:a,objectiveId:c,objectiveKey:d,createDefaults:f,onCreateTask:g}){let{jobs:h,loading:i,refresh:j,deleteJob:m,toggleJob:n,updateJob:p,fetchRuns:r,runNow:s}=(0,G.usePromptJobs)(a,{requireProjectId:!0,includeObjectiveJobs:!0,objectiveId:c}),[t,u]=(0,e.useState)(!1),[v,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(null),[B,C]=(0,e.useState)(null),[H,J]=(0,e.useState)([]),T=(0,e.useMemo)(()=>h.filter(a=>a.objectiveId===c).sort((a,b)=>!a.name.toLowerCase().includes("objective worker")-!b.name.toLowerCase().includes("objective worker")),[h,c]),U=(0,e.useMemo)(()=>T.find(a=>a.id===z)??null,[z,T]),V=(0,e.useCallback)(async()=>{if(0===T.length)return void J([]);let a=[];await Promise.all(T.map(async b=>{for(let c of(await r(b.id)))a.push({...c,jobName:b.name})})),a.sort((a,b)=>new Date(b.startedAt??b.createdAt).getTime()-new Date(a.startedAt??a.createdAt).getTime()),J(a.slice(0,10))},[T,r]);(0,e.useEffect)(()=>{V()},[V]);let W=async a=>{w(a.id),y(null);let b=await m(a.id);(w(null),b)?(z===a.id&&A(null),await j()):y(`Failed to hide "${a.name}".`)},X=async a=>{y(null);let b=await g(a);return b&&await j(),b},Y=(0,e.useMemo)(()=>T.find(a=>a.id===B)??null,[B,T]);return(0,b.jsxs)(b.Fragment,{children:[t?(0,b.jsx)(I.CreateJobModal,{onClose:()=>u(!1),onSubmit:async a=>{await X(a)},createDefaults:f,contextLabel:d}):null,U?(0,b.jsx)(P,{job:U,onClose:()=>A(null),onUpdate:async a=>{let b=await p(U.id,a);return b&&await j(),b}}):null,Y?(0,b.jsx)(O,{job:Y,onClose:()=>C(null),onUpdate:async a=>{let b=await p(Y.id,a);return b&&await j(),b}}):null,(0,b.jsxs)("div",{className:"px-1",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"text-sm font-semibold text-[var(--foreground)]",children:"Scheduled Tasks"}),(0,b.jsxs)("p",{className:"mt-1 text-sm text-[var(--muted-foreground)]",children:["Shared scheduled-task list filtered to objective label"," ",(0,b.jsx)("span",{className:"font-mono text-[var(--foreground)]",children:d}),"."]})]}),(0,b.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:(0,b.jsxs)("button",{type:"button",onClick:()=>u(!0),className:"inline-flex items-center gap-2 rounded-xl border border-[var(--border)] px-3 py-2 text-sm text-[var(--foreground)] transition-colors hover:border-[var(--card-hover-border)]",children:[(0,b.jsx)(o.Plus,{className:"h-4 w-4"}),"New task"]})})]}),x?(0,b.jsx)("p",{className:"mt-4 text-sm text-[var(--destructive)]",children:x}):null,(0,b.jsx)("div",{className:"mt-5 space-y-3",children:i&&0===T.length?(0,b.jsx)("div",{className:"rounded-2xl border border-dashed border-[var(--border)] px-4 py-8 text-sm text-[var(--muted-foreground)]",children:"Loading scheduled tasks..."}):0===T.length?(0,b.jsx)("div",{className:"rounded-2xl border border-dashed border-[var(--border)] px-4 py-8 text-sm text-[var(--muted-foreground)]",children:"No scheduled tasks for this objective yet."}):T.map(a=>(0,b.jsx)("div",{onClick:()=>A(a.id),onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),A(a.id))},role:"button",tabIndex:0,className:`block w-full rounded-2xl border px-4 py-4 text-left transition-colors focus:outline-none focus:ring-2 focus:ring-[var(--card-hover-border)] ${L(a)?"border-amber-500/40 bg-amber-500/5 hover:border-amber-500/60":"border-[var(--border)] bg-[var(--overlay-panel-muted)] hover:border-[var(--card-hover-border)]"}`,children:(0,b.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2.5",children:[(0,b.jsx)("span",{className:`inline-block size-2 shrink-0 rounded-full ${"active"===a.state?"bg-emerald-400":"paused"===a.state?"bg-amber-400":"bg-[var(--tone-neutral)]"}`}),(0,b.jsx)("p",{className:"truncate text-sm font-semibold text-[var(--foreground)]",children:a.name}),(0,b.jsx)("span",{className:`rounded-full border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] ${R(a.state)}`,children:Q(a.state)}),L(a)&&(0,b.jsxs)("span",{className:"shrink-0 text-[10px] font-semibold uppercase tracking-[0.16em] text-amber-400 bg-amber-500/10 px-2 py-0.5 rounded-full border border-amber-500/20 inline-flex items-center gap-1",children:[(0,b.jsx)(l.Clock,{className:"h-3 w-3"}),"overdue"]})]}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-3 text-xs text-[var(--muted-foreground)]",children:[(0,b.jsxs)("span",{className:`inline-flex items-center gap-1.5 ${L(a)?"text-amber-400 font-medium":""}`,children:[(0,b.jsx)(l.Clock,{className:"h-3.5 w-3.5"}),"Next run ",M(a.nextRunAt,a.state)]}),(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,b.jsx)(l.Clock,{className:"h-3.5 w-3.5"}),K(a)]}),a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null]}),(0,b.jsx)("p",{className:"mt-3 line-clamp-2 text-sm leading-6 text-[var(--muted-foreground)]",children:a.prompt.split("\n").map(a=>a.trim()).find(Boolean)||"No instructions yet"}),a.condition?(0,b.jsxs)("p",{className:"mt-2 text-xs text-[var(--muted-foreground)]",children:["Condition: ",a.condition]}):null]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 shrink-0",children:[(0,b.jsx)("button",{type:"button",title:"Run now",onClick:async b=>{b.stopPropagation(),w(a.id),await s(a.id),w(null),await j(),await V()},disabled:v===a.id,className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-emerald-400/40 hover:text-emerald-300 disabled:cursor-not-allowed disabled:opacity-50",children:(0,b.jsx)(E.Play,{className:"h-3.5 w-3.5 fill-current"})}),(0,b.jsx)("button",{type:"button",title:"Edit schedule",onClick:b=>{b.stopPropagation(),C(a.id)},className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-sky-400/40 hover:text-sky-300",children:(0,b.jsx)(l.Clock,{className:"h-3.5 w-3.5"})}),(0,b.jsx)("button",{type:"button",title:"active"===a.state?"Pause":"Resume",onClick:async b=>{b.stopPropagation(),w(a.id),await n(a),w(null)},disabled:v===a.id,className:`rounded-lg border p-2 transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${"active"===a.state?"border-[var(--border)] text-[var(--muted-foreground)] hover:border-amber-400/40 hover:text-amber-300":"border-emerald-500/30 text-emerald-400 hover:border-emerald-400/50 hover:text-emerald-300"}`,children:"active"===a.state?(0,b.jsx)(D.Pause,{className:"h-3.5 w-3.5"}):(0,b.jsx)(E.Play,{className:"h-3.5 w-3.5 fill-current"})}),(0,b.jsx)("button",{type:"button",title:"Delete",onClick:b=>{b.stopPropagation(),confirm(`Delete "${a.name}"? This cannot be undone.`)&&W(a)},disabled:v===a.id,className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-[var(--status-failed-border)] hover:text-[var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50",children:(0,b.jsx)(q.Trash2,{className:"h-3.5 w-3.5"})})]})]})},a.id))}),H.length>0&&(0,b.jsxs)("div",{className:"mt-8",children:[(0,b.jsx)("p",{className:"text-[11px] font-medium uppercase tracking-[0.18em] text-[var(--muted-foreground)] mb-3",children:"Recent executions"}),(0,b.jsx)("div",{className:"space-y-0.5",children:H.map(a=>{let c=a.startedAt??a.createdAt,d="success"===a.status,e="failed"===a.status,f="running"===a.status;return(0,b.jsxs)("div",{className:"py-2 px-2 rounded-md text-xs",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("span",{className:`flex size-5 shrink-0 items-center justify-center rounded-full border ${d?"border-emerald-500/40 text-emerald-400":e?"border-[var(--status-failed-border)] text-[var(--destructive)]":f?"border-sky-500/40 text-sky-400":"border-[var(--border)] text-[var(--muted-foreground)]"}`,children:d?(0,b.jsx)(k.Check,{className:"h-3 w-3"}):e?(0,b.jsx)(F.XCircle,{className:"h-3 w-3"}):(0,b.jsx)("span",{className:`block size-1.5 rounded-full ${f?"bg-sky-400 animate-pulse":"bg-current"}`})}),(0,b.jsx)("span",{className:"truncate text-[var(--muted-foreground)]",children:a.jobName}),(0,b.jsx)("span",{className:"ml-auto shrink-0 text-[11px] text-[var(--muted-foreground)]",children:N(c)}),null!=a.durationMs&&(0,b.jsx)("span",{className:"shrink-0 font-mono text-[11px] text-[var(--muted-foreground)]",children:a.durationMs<1e3?`${a.durationMs}ms`:`${Math.round(a.durationMs/1e3)}s`})]}),e&&a.error&&(0,b.jsx)("p",{className:"mt-1 ml-8 text-[11px] leading-snug text-[var(--destructive)] opacity-80 line-clamp-2",children:a.error})]},a.id)})})]})]})]})}var T=a.i(811760),U=a.i(756490);let V=(0,i.default)("funnel",[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]]),W={"metric-check":{label:"Metric",className:"bg-blue-500/15 text-blue-400 border-blue-500/30"},"status-update":{label:"Status",className:"bg-emerald-500/15 text-emerald-400 border-emerald-500/30"},milestone:{label:"Milestone",className:"bg-amber-500/15 text-amber-400 border-amber-500/30"},note:{label:"Note",className:"bg-[var(--tone-neutral-bg)] text-[var(--tone-neutral)] border-[var(--tone-neutral-border)]"}},X=["metric-check","status-update","milestone","note"];function Y({activity:a}){let[c,d]=(0,e.useState)(!1),f=W[a.type]??W.note,g=a.body.length>200;return(0,b.jsxs)("div",{className:"relative pl-6 pb-6 last:pb-0",children:[(0,b.jsx)("div",{className:"absolute left-0 top-1.5 h-3 w-3 rounded-full border-2 border-[var(--timeline-node-border)] bg-[var(--timeline-node-bg)]"}),(0,b.jsx)("div",{className:"absolute bottom-0 left-[5px] top-4 w-px bg-[var(--timeline-track)] last:hidden"}),(0,b.jsxs)("div",{className:"mb-1.5 flex items-center gap-2",children:[(0,b.jsx)("span",{className:`rounded-full border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] ${f.className}`,children:f.label}),(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:function(a){let b=Date.now(),c=Date.parse(a);if(Number.isNaN(c))return a;let d=Math.floor((b-c)/6e4);if(d<1)return"just now";if(d<60)return`${d}m ago`;let e=Math.floor(d/60);if(e<24)return`${e}h ago`;let f=Math.floor(e/24);return f<30?`${f}d ago`:new Date(c).toLocaleDateString("en-US",{month:"short",day:"numeric",year:f>365?"numeric":void 0})}(a.createdAt)}),"manual"!==a.source&&(0,b.jsx)("span",{className:"max-w-[180px] truncate font-mono text-[11px] text-[var(--app-shell-soft-text)]",children:a.source})]}),c?(0,b.jsx)("div",{className:"prose prose-sm max-w-none text-sm text-[var(--foreground)] prose-neutral dark:prose-invert",children:(0,b.jsx)(z.Markdown,{content:a.body})}):(0,b.jsx)("div",{className:`text-sm leading-relaxed text-[var(--muted-foreground)] ${g?"max-h-24 overflow-hidden [mask-image:linear-gradient(to_bottom,black_72%,transparent)]":""}`,children:(0,b.jsx)(z.Markdown,{content:a.body})}),g&&(0,b.jsxs)("button",{type:"button",onClick:()=>d(!c),className:"mt-1.5 flex items-center gap-1 text-xs text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",children:[c?(0,b.jsx)(T.ChevronDown,{size:12}):(0,b.jsx)(U.ChevronRight,{size:12}),c?"Show less":"Show more"]})]})}function Z({projectId:a,objectiveId:c,onCreated:d,onCancel:f}){let[g,h]=(0,e.useState)("note"),[i,j]=(0,e.useState)(""),[k,l]=(0,e.useState)(!1),m=(0,e.useRef)(null);(0,e.useEffect)(()=>{m.current?.focus()},[]);let n=async()=>{let b=i.trim();if(b&&!k){l(!0);try{let e=await fetch(`/api/projects/${a}/objectives/${c}/activities`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:g,body:b})});if(!e.ok)throw Error("Failed to create activity");let f=await e.json();d(f)}catch(a){console.error("Failed to create activity:",a)}finally{l(!1)}}};return(0,b.jsxs)("div",{className:"mb-4 rounded-lg border border-[var(--border)] bg-[var(--overlay-panel-muted)] p-3",children:[(0,b.jsx)("div",{className:"mb-3 flex flex-wrap gap-1.5",children:X.map(a=>{let c=W[a],d=g===a;return(0,b.jsx)("button",{type:"button",onClick:()=>h(a),className:`rounded-full border px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] transition-colors ${d?"border-[var(--foreground)] bg-[var(--foreground)] text-[var(--background)]":`${c.className} hover:opacity-80`}`,children:c.label},a)})}),(0,b.jsx)("textarea",{ref:m,value:i,onChange:a=>j(a.target.value),placeholder:"What did you do?",rows:3,className:"w-full resize-none rounded-md border border-[var(--border)] bg-[var(--input)] px-3 py-2 text-sm text-[var(--foreground)] placeholder:text-[var(--app-shell-soft-text)] focus:border-[var(--card-hover-border)] focus:outline-none"}),(0,b.jsxs)("div",{className:"mt-2 flex items-center justify-end gap-2",children:[(0,b.jsx)("button",{type:"button",onClick:f,className:"px-3 py-1.5 text-xs text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",children:"Cancel"}),(0,b.jsx)("button",{type:"button",onClick:n,disabled:!i.trim()||k,className:"px-3 py-1.5 text-xs font-medium rounded-md bg-sky-600 text-white hover:bg-sky-500 transition-colors disabled:opacity-40 disabled:cursor-not-allowed",children:k?"Saving...":"Log activity"})]})]})}function $({projectId:a,objectiveId:c,onTotalChange:d}){let[f,g]=(0,e.useState)([]),[h,i]=(0,e.useState)(0),[j,k]=(0,e.useState)(!1),[l,m]=(0,e.useState)(1),[n,p]=(0,e.useState)(!0),[q,r]=(0,e.useState)("all"),[s,t]=(0,e.useState)(!1),[v,w]=(0,e.useState)(!1),x=(0,e.useCallback)(async(b,e,f)=>{p(!0);try{let h=new URLSearchParams({page:String(b),limit:"25"});"all"!==e&&h.set("type",e);let j=await fetch(`/api/projects/${a}/objectives/${c}/activities?${h}`);if(!j.ok)throw Error("Failed to load activities");let l=await j.json(),m=Array.isArray(l.activities)?l.activities:[],n="number"==typeof l.total?l.total:m.length,o=!!l.hasMore;g(a=>f?[...a,...m]:m),i(n),d?.(n),k(o)}catch(a){console.error("Failed to fetch activities:",a)}finally{p(!1)}},[a,c]);return(0,e.useEffect)(()=>{m(1),x(1,q,!1)},[x,q]),(0,b.jsxs)("section",{children:[(0,b.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,b.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"Time-ordered log of outputs from scheduled tasks and manual entries."}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>w(!v),className:`flex items-center gap-1 px-2.5 py-1 rounded-md text-xs font-medium transition-colors ${v?"text-sky-400 bg-sky-500/10":"text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]"}`,children:[v?(0,b.jsx)(u.X,{size:12}):(0,b.jsx)(o.Plus,{size:12}),"Log activity"]}),(0,b.jsx)("button",{type:"button",onClick:()=>t(!s),className:`p-1.5 rounded-md transition-colors ${s||"all"!==q?"text-sky-400 bg-sky-500/10":"text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]"}`,"aria-label":"Filter activities",children:(0,b.jsx)(V,{size:14})})]})]}),s&&(0,b.jsxs)("div",{className:"flex flex-wrap gap-1.5 mb-4",children:[(0,b.jsx)("button",{type:"button",onClick:()=>r("all"),className:`rounded-full border px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] transition-colors ${"all"===q?"border-[var(--foreground)] bg-[var(--foreground)] text-[var(--background)]":"border-[var(--tone-neutral-border)] bg-[var(--tone-neutral-bg)] text-[var(--tone-neutral)] hover:border-[var(--card-hover-border)]"}`,children:"All"}),X.map(a=>{let c=W[a],d=q===a;return(0,b.jsx)("button",{type:"button",onClick:()=>r(a),className:`rounded-full border px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] transition-colors ${d?"border-[var(--foreground)] bg-[var(--foreground)] text-[var(--background)]":`${c.className} hover:opacity-80`}`,children:c.label},a)})]}),v&&(0,b.jsx)(Z,{projectId:a,objectiveId:c,onCreated:a=>{g(b=>[a,...b]),i(a=>{let b=a+1;return d?.(b),b}),w(!1)},onCancel:()=>w(!1)}),n&&0===f.length?(0,b.jsx)("div",{className:"py-6 text-center text-sm text-[var(--muted-foreground)]",children:"Loading activities..."}):0===f.length?(0,b.jsxs)("div",{className:"rounded-xl border border-dashed border-[var(--border)] bg-[var(--overlay-panel-muted)] p-6 text-center",children:[(0,b.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"No activities yet."}),(0,b.jsx)("p",{className:"mt-1 text-xs text-[var(--app-shell-soft-text)]",children:"Activities are created by scheduled tasks and agent actions."})]}):(0,b.jsxs)("div",{children:[f.map(a=>(0,b.jsx)(Y,{activity:a},a.id)),j&&(0,b.jsx)("div",{className:"pt-2 pl-6",children:(0,b.jsx)("button",{type:"button",onClick:()=>{let a=l+1;m(a),x(a,q,!0)},disabled:n,className:"text-xs text-sky-400 hover:text-sky-300 transition-colors disabled:opacity-50",children:n?"Loading...":"Load more"})})]})]})}let _=/(?:^|\n)Objective health:\s*(\d{1,3})%\s*(On track|At risk|Off track|Done)\b/im,aa={"on track":"on_track","at risk":"at_risk","off track":"off_track",done:"done"};function ab(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function ac(a){return"number"==typeof a&&Number.isFinite(a)?Math.max(0,Math.min(100,Math.round(a))):0}function ad(a){if("string"!=typeof a)return null;let b=a.trim().toLowerCase();return"on_track"===b||"at_risk"===b||"off_track"===b||"done"===b?b:aa[b]??null}function ae(a){if("string"!=typeof a)return null;let b=Date.parse(a);return Number.isNaN(b)?null:new Date(b).toISOString()}function af(a){return"string"==typeof a&&a.trim()?a.trim():void 0}function ag(...a){let b=a.flatMap(a=>a??[]),c=[];for(let a of[...b].sort((a,b)=>Date.parse(a.recordedAt)-Date.parse(b.recordedAt))){let b=c[c.length-1]??null;b&&b.progress===a.progress&&b.status===a.status&&(!b.source||!a.source||b.source===a.source)&&5e3>=Math.abs(Date.parse(a.recordedAt)-Date.parse(b.recordedAt))||c.push(a)}return c}let ah={on_track:{label:"On track",stroke:"var(--status-completed-text)"},at_risk:{label:"At risk",stroke:"var(--status-blocked-text)"},off_track:{label:"Off track",stroke:"var(--status-failed-text)"},done:{label:"Done",stroke:"var(--status-in-progress-text)"}};function ai(a){let{projectId:c,objectiveId:d,objectiveKey:f,metadata:g,currentProgress:h,currentStatus:i,objectiveUpdatedAt:j}=a,k=(0,e.useMemo)(()=>(function(a,b){if(!ab(a)||!b.trim())return[];let c=a.project_objective_health_history;if(!ab(c))return[];let d=c[b.trim()];return Array.isArray(d)?ag(d.map(a=>(function(a){if(!ab(a))return null;let b=ad(a.status),c=ae(a.recordedAt);return b&&c?{progress:ac(a.progress),status:b,recordedAt:c,source:af(a.source),note:af(a.note),objectiveId:af(a.objectiveId)??null,objectiveKey:af(a.objectiveKey)??null}:null})(a)).filter(a=>!!a)):[]})(g,d),[g,d]),[l,m]=(0,e.useState)(k),n=(0,e.useMemo)(()=>({progress:h,status:i,recordedAt:j,objectiveId:d,objectiveKey:f}),[h,i,d,f,j]);(0,e.useEffect)(()=>{m(k)},[k]),(0,e.useEffect)(()=>{let a=!1;return async function(){try{let b=await fetch(`/api/projects/${c}/objectives/${d}/activities?type=status-update&limit=100`);if(!b.ok)throw Error("Failed to load objective activity history");let e=await b.json(),g=Array.isArray(e.activities)?e.activities:[],h=ag(k,ag(g.map(a=>(function(a){if("status-update"!==a.type)return null;let b=a.body.match(_);if(!b)return null;let c=ac(Number(b[1])),d=ad(b[2]),e=ae(a.createdAt);return d&&e?{progress:c,status:d,recordedAt:e,source:af(a.source),objectiveKey:af(a.objectiveLabel)??null}:null})(a)).filter(a=>!!a&&(!f||a.objectiveKey===f))));a||m(h)}catch{a||m(k)}}(),()=>{a=!0}},[k,d,f,c]);let o=ag(l,[n]),p=o[o.length-1],q=function(a){if(1===a.length){let b=46-a[0].progress/100*40;return`90,${b}`}return a.map((b,c)=>{let d=6+c/Math.max(1,a.length-1)*168,e=46-b.progress/100*40;return`${d},${e}`}).join(" ")}(o),r=ah[p.status],s=0===l.length?"Current state":1===o.length?"1 update":`${o.length} updates`;return(0,b.jsxs)("div",{"data-testid":"objective-health-trend",className:"flex min-w-[260px] flex-1 items-center gap-4 rounded-2xl border border-[var(--border)] bg-[var(--overlay-panel-muted)] px-4 py-3",children:[(0,b.jsxs)("div",{className:"min-w-[84px]",children:[(0,b.jsx)("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-[var(--muted-foreground)]",children:"Objective health"}),(0,b.jsxs)("div",{className:"mt-1 text-[24px] font-semibold leading-none text-[var(--foreground)]",children:[p.progress,"%"]}),(0,b.jsx)("div",{className:"mt-1 text-[11px] font-medium",style:{color:r.stroke},children:r.label})]}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("svg",{viewBox:"0 0 180 52",className:"h-[52px] w-full overflow-visible",role:"img","aria-label":"Objective health trend",children:[(0,b.jsx)("line",{x1:"6",y1:"26",x2:"174",y2:"26",stroke:"var(--border)",strokeDasharray:"3 3",strokeWidth:"1"}),(0,b.jsx)("polyline",{fill:"none",stroke:r.stroke,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",points:q}),o.map((a,c)=>{let[d="0",e="0"]=(q.split(" ")[c]??"").split(",");return(0,b.jsx)("circle",{cx:d,cy:e,r:c===o.length-1?4:3,fill:r.stroke,fillOpacity:c===o.length-1?1:.2,stroke:r.stroke,strokeWidth:"1.5"},`${a.recordedAt}-${c}`)})]}),(0,b.jsxs)("div",{className:"mt-1 flex items-center justify-between gap-2 text-[10px] text-[var(--muted-foreground)]",children:[(0,b.jsx)("span",{children:s}),(0,b.jsx)("span",{children:new Date(p.recordedAt).toLocaleString([],{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})})]})]})]})}var aj=a.i(719550),ak=a.i(529889),al=a.i(870630),am=a.i(427411),an=a.i(769677);let ao={on_track:{label:"On track",chipClass:"border-[var(--status-completed-border)] bg-[var(--status-completed-bg)] text-[var(--status-completed-text)]",toneClass:"text-[var(--status-completed-text)]"},at_risk:{label:"At risk",chipClass:"border-[var(--status-blocked-border)] bg-[var(--status-blocked-bg)] text-[var(--status-blocked-text)]",toneClass:"text-[var(--status-blocked-text)]"},off_track:{label:"Off track",chipClass:"border-[var(--status-failed-border)] bg-[var(--status-failed-bg)] text-[var(--status-failed-text)]",toneClass:"text-[var(--status-failed-text)]"},done:{label:"Done",chipClass:"border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] text-[var(--status-in-progress-text)]",toneClass:"text-[var(--status-in-progress-text)]"}};function ap({onResize:a}){let{isTouchLayout:c}=(0,ak.useInputCapabilities)();return c?null:(0,b.jsx)("div",{role:"separator","aria-orientation":"vertical","aria-label":"Resize objective chat panel",className:"group relative z-10 hidden w-0 shrink-0 cursor-col-resize xl:block",onMouseDown:b=>{b.preventDefault();let c=b.clientX;document.body.style.cursor="col-resize",document.body.style.userSelect="none";let d=b=>{let d=c-b.clientX;c=b.clientX,a(d)},e=()=>{document.body.style.cursor="",document.body.style.userSelect="",window.removeEventListener("mousemove",d),window.removeEventListener("mouseup",e)};window.addEventListener("mousemove",d),window.addEventListener("mouseup",e)},children:(0,b.jsx)("div",{className:"absolute inset-y-0 -left-0.5 w-1 transition-colors group-hover:bg-[var(--primary)]/40"})})}function aq(a){return new Date(a).toLocaleString([],{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function ar(){return{title:"",teamId:"",summary:""}}function as(a,b,c){return b?a.objectives.find(a=>a.teamId===b&&a.id!==c)??null:null}function at(a,b,c){return a.filter(a=>!as(b,a.id,c))}function au(a){let{projects:b,isLoading:c,refetch:d,updateProject:f}=(0,v.useProjects)(),[g,h]=(0,e.useState)([]),i=(0,e.useMemo)(()=>b.find(b=>b.slug===a)??null,[a,b]),j=(0,e.useMemo)(()=>(0,an.readProjectObjectivesWorkspace)(i?.metadata),[i?.metadata]),k=(0,e.useCallback)(async a=>{if(!i)throw Error("Project not found.");await f(i.id,{metadata:(0,an.writeProjectObjectivesWorkspace)(i.metadata??{},a)})},[i,f]);return(0,e.useEffect)(()=>{let a=!0;return async function(){if(!i?.id)return h([]);try{let b=await fetch(`/api/projects/${i.id}/teams`);if(!b.ok)throw Error("Failed to fetch teams");let c=await b.json();if(!a)return;h((c.teams??[]).map(a=>({id:"string"==typeof a.id?a.id:"",name:"string"==typeof a.name?a.name:"Untitled team"})).filter(a=>a.id))}catch{if(!a)return;h([])}}(),()=>{a=!1}},[i?.id]),{isLoading:c,project:i,workspace:j,teams:g,persistWorkspace:k,refetchProject:d}}function av(a){return"user"===a.role&&!a.rootMessageId}function aw({projectId:a,projectSlug:c,objective:d,teamName:f,onThreadLinked:i,onObjectiveUpdated:j}){let[k,l]=(0,e.useState)(()=>(0,am.loadObjectiveChatPanelWidth)()||800),[m,n]=(0,e.useState)(d.threadId??(d.id?`objective-chat:${d.id}`:null)),[o,p]=(0,e.useState)("list"),[q,s]=(0,e.useState)(null),[t,u]=(0,e.useState)(!1),[v,B]=(0,e.useState)(d.chatSessionVersion),[C,D]=(0,e.useState)([]),[E,F]=(0,e.useState)(null),G=(0,e.useRef)(!1),H=(0,e.useRef)(!1),{messages:I,setMessages:J,sendMessage:K,loadHistory:L,setChatRuns:M,stop:N,chatRuns:O}=(0,w.useGroupChat)(m),{processes:P,streaming:Q,chatRuns:R,poll:S}=(0,x.useProcessPolling)(m?{workspaceId:m}:null,{messages:I,setMessages:J});(0,e.useEffect)(()=>{d.threadId&&d.threadId!==m&&n(d.threadId)},[d.threadId,m]),(0,e.useEffect)(()=>{p("list"),s(null),u(!1),H.current=!1},[d.id]),(0,e.useEffect)(()=>{B(d.chatSessionVersion),d.chatSessionVersion>=an.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION&&(H.current=!0)},[d.chatSessionVersion]);let T=(0,e.useCallback)(async b=>{let c=b.trim();if(c&&!(await fetch(`/api/projects/${a}/threads`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:c})})).ok)throw Error("Failed to link objective chat to the project.")},[a]);(0,e.useEffect)(()=>{let a=!1;return m?(u(!1),(async()=>{await L(m),a||u(!0)})(),()=>{a=!0}):void u(!0)},[L,m]),(0,e.useEffect)(()=>{let b=!1;return async function(){try{let c=d.teamId?`/api/projects/${a}/teams/${d.teamId}/agents`:`/api/projects/${a}/agents`,[e,f]=await Promise.all([fetch("/api/participants"),fetch(c)]),g=e.ok?await e.json():[],h=Array.isArray(g)?g:[],i=f.ok?await f.json():{agents:[]};if(b)return;let j=((i&&"object"==typeof i?i:{agents:[]}).agents??[]).slice().sort((a,b)=>a.routing_order-b.routing_order).map(a=>a.agent_id);if(0===j.length)return void D(h);let k=new Map(h.map(a=>[a.id,a]));D(j.map(a=>k.get(a)).filter(a=>!!a))}catch(a){if(b)return;console.error("Failed to load objective chat participants",a),D([])}}(),()=>{b=!0}},[a,d.teamId]),(0,e.useEffect)(()=>{d.threadId&&T(d.threadId).catch(a=>{console.warn("Failed to re-link objective chat thread to project",a)})},[T,d.threadId]),(0,e.useEffect)(()=>{if(!d.threadId||!m||!t||v>=an.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION||H.current)return;H.current=!0;let b=function(a){let b=a.filter(av).sort((a,b)=>a.timestamp-b.timestamp);if(b.length<=1)return null;let c=b[0]?.id;if(!c)return null;let d=b.slice(1).map(a=>a.id),e=new Set(d);return{messages:[...a].map(a=>{let b=e.has(a.id)&&av(a),d="string"==typeof a.rootMessageId&&e.has(a.rootMessageId);return b||d?{...a,rootMessageId:c,parentMessageId:c,depth:1}:a}).sort((a,b)=>a.timestamp-b.timestamp),primaryRootMessageId:c,mergedRootMessageIds:d}}(I),c=!1;return(async()=>{F(null);try{if(b){if(!(await fetch("/api/history",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:m,messages:b.messages})})).ok)throw Error("Failed to migrate the objective chat history.");if(c)return;J(b.messages),s(a=>a&&b.mergedRootMessageIds.includes(a)?b.primaryRootMessageId:a)}if(!(await fetch(`/api/projects/${a}/objectives/${d.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({chatSessionVersion:an.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION})})).ok)throw Error("Failed to update the objective chat session version.");if(c)return;B(an.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION),j().catch(a=>{console.warn("Failed to refresh objective after objective chat migration",a)})}catch(a){if(c)return;console.warn("Failed to migrate legacy objective chat sessions",a),F(a instanceof Error?a.message:"Failed to migrate the objective chat history.")}})(),()=>{c=!0}},[v,t,I,d.id,d.threadId,j,a,J,m]);let U=(0,e.useCallback)(async()=>{if(d.threadId)return d.threadId;let b=m??(d.id?`objective-chat:${d.id}`:null);if(!b)return null;F(null);try{let e=await al.threadService.createThread({id:b,title:d.title,metadata:{scope:"objective",objectiveId:d.id,projectId:a,projectSlug:c}});return n(e.id),await T(e.id),await i(e.id),e.id}catch(a){return F(a instanceof Error?a.message:"Failed to create the objective chat."),null}},[T,d.id,d.threadId,d.title,i,a,c,m]),V=(0,e.useMemo)(()=>new Map(C.map(a=>[a.id,a])),[C]);(0,e.useEffect)(()=>{M(a=>{let b=Date.now(),c=new Map(a.filter(a=>"string"==typeof a.chatRunId&&a.chatRunId.length>0).map(a=>[a.chatRunId,a]));for(let a of R)a?.chatRunId&&c.set(a.chatRunId,a);return Array.from(c.values()).filter(a=>!!(!a.optimistic||R.some(b=>b.chatRunId===a.chatRunId))||b-(a.enqueuedAt??0)<=5e3).sort((a,b)=>String(a.chatRunId||"").localeCompare(String(b.chatRunId||"")))})},[R,M]);let W=(0,e.useMemo)(()=>{let a=Date.now(),b=new Map(R.map(a=>[a.chatRunId,a]));for(let c of O)!(!c.optimistic||b.has(c.chatRunId))&&(a-(c.enqueuedAt??0)>5e3||b.set(c.chatRunId,c));return Array.from(b.values()).filter(a=>"queued"===a.status||"running"===a.status||"awaiting_user"===a.status||"blocked"===a.status)},[O,R]),X=(0,e.useMemo)(()=>I.filter(av).sort((a,b)=>b.timestamp-a.timestamp).map(a=>{let b,c=I.filter(b=>b.rootMessageId===a.id).sort((a,b)=>a.timestamp-b.timestamp),d=[a,...c],e=d[d.length-1]??a;return{rootMessageId:a.id,title:(b=a.content.replace(/\s+/g," ").trim())?b.length>56?`${b.slice(0,56).trim()}...`:b:"Untitled session",updatedAt:e.timestamp,messageCount:d.length,messages:d}}),[I]),Y=(0,e.useMemo)(()=>q?X.find(a=>a.rootMessageId===q)??null:null,[q,X]),Z="detail"===o&&!!q,$=new Set(["queued","running","awaiting_user","blocked"]),_=W.length>0||P.some(a=>"spawning"===a.state||"running"===a.state),aa=(0,e.useMemo)(()=>{let a=new Map;for(let b of W){if(!b.rootMessageId||!$.has(b.status))continue;let c="queued"===b.status?"queued":"working";"working"!==a.get(b.rootMessageId)&&a.set(b.rootMessageId,c)}for(let b of P)b.threadId&&("spawning"===b.state||"running"===b.state)&&a.set(b.threadId,"working");return a},[W,P]),ab=(0,e.useMemo)(()=>P.some(a=>"spawning"===a.state||"running"===a.state)||W.some(a=>$.has(a.status)&&"queued"!==a.status)?"working":W.some(a=>"queued"===a.status)?"queued":"ready",[W,$,P]);(0,e.useEffect)(()=>{G.current&&!_&&j().catch(a=>{console.warn("Failed to refresh objective after objective chat activity",a)}),G.current=_},[_,j]);let ac=(0,e.useCallback)(async a=>{await fetch(`/api/chat-runs/${encodeURIComponent(a)}/signal`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({signal:"cancel",reason:"Interrupted by a new objective chat message"})}).catch(a=>{console.warn("Failed to cancel objective chat run",a)})},[]),ad=(0,e.useCallback)(async()=>{let a=Array.from(new Set(W.map(a=>a.chatRunId).filter(a=>!!a)));await Promise.all(a.map(a=>ac(a))),await N(),await S()},[W,ac,S,N]),ae=(0,e.useCallback)(async(b,e,g,h,i,j,k)=>{let l,m,n,o,r,t,u,v;_&&await ad(),F(null);let w=await U();if(!w)return;let x=C.map(a=>a.id),y=Z?q:null,z=[(l=`/api/projects/${a}/objectives/${d.id}`,m=`${l}/scheduled-tasks`,n=`${l}/linear-issues`,o=`${l}/notes`,r=`~/.agx/projects/${c}/objectives/${d.key}.md`,t=`~/.agx/projects/${c}/objectives/${d.key}/notes/`,u=`${l}/validate`,v=d.notes?.length?d.notes.map(a=>`- **${a.title}**: ${a.body.slice(0,120)}${a.body.length>120?"...":""}`).join("\n"):null,["You are working inside a strategy session for this project objective.",`Project slug: ${c}`,`Objective: ${d.title}`,`Objective label: ${d.key}`,f?`Owning team: ${f}`:"",v?`Current notes:
|
|
1
|
+
module.exports=[739515,a=>{"use strict";var b=a.i(187924),c=a.i(238246),d=a.i(50944),e=a.i(572131),f=a.i(599086),g=a.i(285320),h=a.i(549429),i=a.i(831709);let j=(0,i.default)("calendar-clock",[["path",{d:"M16 14v2.2l1.6 1",key:"fo4ql5"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]]);var k=a.i(627421),l=a.i(820859),m=a.i(552605),n=a.i(667597),o=a.i(353532),p=a.i(542341),q=a.i(697183),r=a.i(252197),s=a.i(985339),t=a.i(724938),u=a.i(824179),v=a.i(830284),w=a.i(155829),x=a.i(496368),y=a.i(689882),z=a.i(86007),A=a.i(8e4),B=a.i(86466),C=a.i(766412),D=a.i(327788),E=a.i(73948),F=a.i(999076),G=a.i(296037),H=a.i(736303),I=a.i(393041),J=a.i(201485);function K(a){let b=a.cadence||a.cronExpr;return b?(0,H.cronToHuman)(a.cronExpr||b)??b:"No frequency"}function L(a){return"active"===a.state&&(null!==a.nextRunAt&&a.nextRunAt-Date.now()<0?!a.lastRunAt||!(a.lastRunAt>=a.nextRunAt):!!a.prevScheduledAt&&!!a.lastRunAt&&a.lastRunAt>a.prevScheduledAt+3e5)}function M(a,b){if("paused"===b)return"Paused";if("stopped"===b)return"Stopped";if(null===a)return"Pending";let c=a-Date.now();return c<0?"Overdue":c<6e4?`in ${Math.round(c/1e3)}s`:c<36e5?`in ${Math.round(c/6e4)}m`:c<864e5?`in ${Math.round(c/36e5)}h`:`in ${Math.round(c/864e5)}d`}function N(a){return new Date(a).toLocaleString(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function O({job:a,onClose:c,onUpdate:d}){let[f,g]=(0,e.useState)({cadence:a.cronExpr||a.cadence||"",condition:a.condition||""}),[h,i]=(0,e.useState)(!0),[j,k]=(0,e.useState)(!1),m=async()=>{h&&(k(!0),await d({cadence:f.cadence,condition:f.condition}),k(!1),c())};return(0,b.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4 py-6",children:(0,b.jsxs)("div",{className:"flex w-full max-w-md max-h-[85vh] flex-col rounded-[28px] border border-[var(--border)] bg-[var(--card-bg)] shadow-2xl",children:[(0,b.jsxs)("div",{className:"flex shrink-0 items-center justify-between border-b border-[var(--border)] px-6 py-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2.5",children:[(0,b.jsx)(l.Clock,{className:"h-4 w-4 text-[var(--muted-foreground)]"}),(0,b.jsx)("p",{className:"text-sm font-semibold text-[var(--foreground)]",children:a.name})]}),(0,b.jsx)("button",{type:"button",onClick:c,className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-[var(--card-hover-border)] hover:text-[var(--foreground)]",children:(0,b.jsx)(u.X,{className:"h-4 w-4"})})]}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 py-5",children:(0,b.jsx)(J.ScheduleConditionPicker,{value:f,onChange:(a,b)=>{g(a),i(b.isScheduleValid)},scheduleLabel:"Schedule",conditionLabel:"Condition",conditionHelpText:"Scheduled runs and Run now will check this condition before executing."})}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center justify-end gap-3 border-t border-[var(--border)] px-6 py-4",children:[(0,b.jsx)("button",{type:"button",onClick:c,className:"rounded-xl border border-[var(--border)] px-4 py-2.5 text-sm text-[var(--foreground)] transition-colors hover:border-[var(--card-hover-border)]",children:"Cancel"}),(0,b.jsx)("button",{type:"button",onClick:()=>void m(),disabled:j||!h,className:"rounded-xl border border-emerald-500/30 bg-emerald-500/10 px-4 py-2.5 text-sm text-emerald-400 transition-colors hover:bg-emerald-500/20 disabled:opacity-50",children:j?"Saving...":"Save"})]})]})})}function P({job:a,onClose:c,onUpdate:d}){let[f,g]=(0,e.useState)(a.prompt||""),[h,i]=(0,e.useState)(!1),j=async()=>{f===a.prompt||(i(!0),await d({prompt:f}),i(!1)),c()};return(0,b.jsx)("div",{className:"fixed inset-0 z-40 flex items-center justify-center bg-black/50 px-4 py-6",children:(0,b.jsxs)("div",{className:"flex w-full max-w-6xl max-h-[85vh] flex-col rounded-[28px] border border-[var(--border)] bg-[var(--card-bg)] shadow-2xl",children:[(0,b.jsxs)("div",{className:"flex shrink-0 items-start justify-between gap-4 border-b border-[var(--border)] px-6 py-5",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2.5",children:[(0,b.jsx)("p",{className:"truncate text-lg font-semibold text-[var(--foreground)]",children:a.name}),(0,b.jsx)("span",{className:`rounded-full border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] ${R(a.state)}`,children:Q(a.state)}),a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null]}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-3 text-xs text-[var(--muted-foreground)]",children:[(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,b.jsx)(l.Clock,{className:"h-3.5 w-3.5"}),K(a)]}),(0,b.jsxs)("span",{children:["Next run ",M(a.nextRunAt,a.state)]}),(0,b.jsxs)("span",{children:["Updated ",N(a.updatedAt)]})]})]}),(0,b.jsx)("button",{type:"button",onClick:c,className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-[var(--card-hover-border)] hover:text-[var(--foreground)]","aria-label":"Close scheduled task details",children:(0,b.jsx)(u.X,{className:"h-4 w-4"})})]}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-6 py-6 space-y-5",children:(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"mb-2 text-xs font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]",children:"Instructions"}),(0,b.jsx)("div",{className:"rounded-2xl border border-[var(--card-hover-border)] bg-[var(--overlay-panel-muted)] px-1 py-1 text-sm leading-6 text-[var(--foreground)]",children:(0,b.jsx)(B.default,{content:f,editable:!0,onChange:g,placeholder:"Write instructions in markdown…"})})]})}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center justify-end gap-3 border-t border-[var(--border)] px-6 py-4",children:[(0,b.jsx)("button",{type:"button",onClick:c,className:"rounded-xl border border-[var(--border)] px-4 py-2.5 text-sm text-[var(--foreground)] transition-colors hover:border-[var(--card-hover-border)]",children:"Cancel"}),(0,b.jsx)("button",{type:"button",onClick:()=>void j(),disabled:h,className:"rounded-xl border border-emerald-500/30 bg-emerald-500/10 px-4 py-2.5 text-sm text-emerald-400 transition-colors hover:bg-emerald-500/20 disabled:opacity-50",children:h?"Saving...":"Save"})]})]})})}function Q(a){return"active"===a?"Active":"paused"===a?"Paused":"Stopped"}function R(a){return"active"===a?"border-[var(--status-completed-border)] bg-[var(--status-completed-bg)] text-[var(--status-completed)]":"paused"===a?"border-[var(--status-blocked-border)] bg-[var(--status-blocked-bg)] text-[var(--status-blocked)]":"border-[var(--tone-neutral-border)] bg-[var(--tone-neutral-bg)] text-[var(--tone-neutral)]"}function S({projectId:a,objectiveId:c,objectiveKey:d,createDefaults:f,onCreateTask:g}){let{jobs:h,loading:i,refresh:j,deleteJob:m,toggleJob:n,updateJob:p,fetchRuns:r,runNow:s}=(0,G.usePromptJobs)(a,{requireProjectId:!0,includeObjectiveJobs:!0,objectiveId:c}),[t,u]=(0,e.useState)(!1),[v,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(null),[B,C]=(0,e.useState)(null),[H,J]=(0,e.useState)([]),T=(0,e.useMemo)(()=>h.filter(a=>a.objectiveId===c).sort((a,b)=>!a.name.toLowerCase().includes("objective worker")-!b.name.toLowerCase().includes("objective worker")),[h,c]),U=(0,e.useMemo)(()=>T.find(a=>a.id===z)??null,[z,T]),V=(0,e.useCallback)(async()=>{if(0===T.length)return void J([]);let a=[];await Promise.all(T.map(async b=>{for(let c of(await r(b.id)))a.push({...c,jobName:b.name})})),a.sort((a,b)=>new Date(b.startedAt??b.createdAt).getTime()-new Date(a.startedAt??a.createdAt).getTime()),J(a.slice(0,10))},[T,r]);(0,e.useEffect)(()=>{V()},[V]);let W=async a=>{w(a.id),y(null);let b=await m(a.id);(w(null),b)?(z===a.id&&A(null),await j()):y(`Failed to hide "${a.name}".`)},X=async a=>{y(null);let b=await g(a);return b&&await j(),b},Y=(0,e.useMemo)(()=>T.find(a=>a.id===B)??null,[B,T]);return(0,b.jsxs)(b.Fragment,{children:[t?(0,b.jsx)(I.CreateJobModal,{onClose:()=>u(!1),onSubmit:async a=>{await X(a)},createDefaults:f,contextLabel:d}):null,U?(0,b.jsx)(P,{job:U,onClose:()=>A(null),onUpdate:async a=>{let b=await p(U.id,a);return b&&await j(),b}}):null,Y?(0,b.jsx)(O,{job:Y,onClose:()=>C(null),onUpdate:async a=>{let b=await p(Y.id,a);return b&&await j(),b}}):null,(0,b.jsxs)("div",{className:"px-1",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"text-sm font-semibold text-[var(--foreground)]",children:"Scheduled Tasks"}),(0,b.jsxs)("p",{className:"mt-1 text-sm text-[var(--muted-foreground)]",children:["Shared scheduled-task list filtered to objective label"," ",(0,b.jsx)("span",{className:"font-mono text-[var(--foreground)]",children:d}),"."]})]}),(0,b.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:(0,b.jsxs)("button",{type:"button",onClick:()=>u(!0),className:"inline-flex items-center gap-2 rounded-xl border border-[var(--border)] px-3 py-2 text-sm text-[var(--foreground)] transition-colors hover:border-[var(--card-hover-border)]",children:[(0,b.jsx)(o.Plus,{className:"h-4 w-4"}),"New task"]})})]}),x?(0,b.jsx)("p",{className:"mt-4 text-sm text-[var(--destructive)]",children:x}):null,(0,b.jsx)("div",{className:"mt-5 space-y-3",children:i&&0===T.length?(0,b.jsx)("div",{className:"rounded-2xl border border-dashed border-[var(--border)] px-4 py-8 text-sm text-[var(--muted-foreground)]",children:"Loading scheduled tasks..."}):0===T.length?(0,b.jsx)("div",{className:"rounded-2xl border border-dashed border-[var(--border)] px-4 py-8 text-sm text-[var(--muted-foreground)]",children:"No scheduled tasks for this objective yet."}):T.map(a=>(0,b.jsx)("div",{onClick:()=>A(a.id),onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),A(a.id))},role:"button",tabIndex:0,className:`block w-full rounded-2xl border px-4 py-4 text-left transition-colors focus:outline-none focus:ring-2 focus:ring-[var(--card-hover-border)] ${L(a)?"border-amber-500/40 bg-amber-500/5 hover:border-amber-500/60":"border-[var(--border)] bg-[var(--overlay-panel-muted)] hover:border-[var(--card-hover-border)]"}`,children:(0,b.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2.5",children:[(0,b.jsx)("span",{className:`inline-block size-2 shrink-0 rounded-full ${"active"===a.state?"bg-emerald-400":"paused"===a.state?"bg-amber-400":"bg-[var(--tone-neutral)]"}`}),(0,b.jsx)("p",{className:"truncate text-sm font-semibold text-[var(--foreground)]",children:a.name}),(0,b.jsx)("span",{className:`rounded-full border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] ${R(a.state)}`,children:Q(a.state)}),L(a)&&(0,b.jsxs)("span",{className:"shrink-0 text-[10px] font-semibold uppercase tracking-[0.16em] text-amber-400 bg-amber-500/10 px-2 py-0.5 rounded-full border border-amber-500/20 inline-flex items-center gap-1",children:[(0,b.jsx)(l.Clock,{className:"h-3 w-3"}),"overdue"]})]}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-3 text-xs text-[var(--muted-foreground)]",children:[(0,b.jsxs)("span",{className:`inline-flex items-center gap-1.5 ${L(a)?"text-amber-400 font-medium":""}`,children:[(0,b.jsx)(l.Clock,{className:"h-3.5 w-3.5"}),"Next run ",M(a.nextRunAt,a.state)]}),(0,b.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[(0,b.jsx)(l.Clock,{className:"h-3.5 w-3.5"}),K(a)]}),a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null]}),(0,b.jsx)("p",{className:"mt-3 line-clamp-2 text-sm leading-6 text-[var(--muted-foreground)]",children:a.prompt.split("\n").map(a=>a.trim()).find(Boolean)||"No instructions yet"}),a.condition?(0,b.jsxs)("p",{className:"mt-2 text-xs text-[var(--muted-foreground)]",children:["Condition: ",a.condition]}):null]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 shrink-0",children:[(0,b.jsx)("button",{type:"button",title:"Run now",onClick:async b=>{b.stopPropagation(),w(a.id),await s(a.id),w(null),await j(),await V()},disabled:v===a.id,className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-emerald-400/40 hover:text-emerald-300 disabled:cursor-not-allowed disabled:opacity-50",children:(0,b.jsx)(E.Play,{className:"h-3.5 w-3.5 fill-current"})}),(0,b.jsx)("button",{type:"button",title:"Edit schedule",onClick:b=>{b.stopPropagation(),C(a.id)},className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-sky-400/40 hover:text-sky-300",children:(0,b.jsx)(l.Clock,{className:"h-3.5 w-3.5"})}),(0,b.jsx)("button",{type:"button",title:"active"===a.state?"Pause":"Resume",onClick:async b=>{b.stopPropagation(),w(a.id),await n(a),w(null)},disabled:v===a.id,className:`rounded-lg border p-2 transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${"active"===a.state?"border-[var(--border)] text-[var(--muted-foreground)] hover:border-amber-400/40 hover:text-amber-300":"border-emerald-500/30 text-emerald-400 hover:border-emerald-400/50 hover:text-emerald-300"}`,children:"active"===a.state?(0,b.jsx)(D.Pause,{className:"h-3.5 w-3.5"}):(0,b.jsx)(E.Play,{className:"h-3.5 w-3.5 fill-current"})}),(0,b.jsx)("button",{type:"button",title:"Delete",onClick:b=>{b.stopPropagation(),confirm(`Delete "${a.name}"? This cannot be undone.`)&&W(a)},disabled:v===a.id,className:"rounded-lg border border-[var(--border)] p-2 text-[var(--muted-foreground)] transition-colors hover:border-[var(--status-failed-border)] hover:text-[var(--destructive)] disabled:cursor-not-allowed disabled:opacity-50",children:(0,b.jsx)(q.Trash2,{className:"h-3.5 w-3.5"})})]})]})},a.id))}),H.length>0&&(0,b.jsxs)("div",{className:"mt-8",children:[(0,b.jsx)("p",{className:"text-[11px] font-medium uppercase tracking-[0.18em] text-[var(--muted-foreground)] mb-3",children:"Recent executions"}),(0,b.jsx)("div",{className:"space-y-0.5",children:H.map(a=>{let c=a.startedAt??a.createdAt,d="success"===a.status,e="failed"===a.status,f="running"===a.status;return(0,b.jsxs)("div",{className:"py-2 px-2 rounded-md text-xs",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("span",{className:`flex size-5 shrink-0 items-center justify-center rounded-full border ${d?"border-emerald-500/40 text-emerald-400":e?"border-[var(--status-failed-border)] text-[var(--destructive)]":f?"border-sky-500/40 text-sky-400":"border-[var(--border)] text-[var(--muted-foreground)]"}`,children:d?(0,b.jsx)(k.Check,{className:"h-3 w-3"}):e?(0,b.jsx)(F.XCircle,{className:"h-3 w-3"}):(0,b.jsx)("span",{className:`block size-1.5 rounded-full ${f?"bg-sky-400 animate-pulse":"bg-current"}`})}),(0,b.jsx)("span",{className:"truncate text-[var(--muted-foreground)]",children:a.jobName}),(0,b.jsx)("span",{className:"ml-auto shrink-0 text-[11px] text-[var(--muted-foreground)]",children:N(c)}),null!=a.durationMs&&(0,b.jsx)("span",{className:"shrink-0 font-mono text-[11px] text-[var(--muted-foreground)]",children:a.durationMs<1e3?`${a.durationMs}ms`:`${Math.round(a.durationMs/1e3)}s`})]}),e&&a.error&&(0,b.jsx)("p",{className:"mt-1 ml-8 text-[11px] leading-snug text-[var(--destructive)] opacity-80 line-clamp-2",children:a.error})]},a.id)})})]})]})]})}var T=a.i(811760),U=a.i(756490);let V=(0,i.default)("funnel",[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]]),W={"metric-check":{label:"Metric",className:"bg-blue-500/15 text-blue-400 border-blue-500/30"},"status-update":{label:"Status",className:"bg-emerald-500/15 text-emerald-400 border-emerald-500/30"},milestone:{label:"Milestone",className:"bg-amber-500/15 text-amber-400 border-amber-500/30"},note:{label:"Note",className:"bg-[var(--tone-neutral-bg)] text-[var(--tone-neutral)] border-[var(--tone-neutral-border)]"}},X=["metric-check","status-update","milestone","note"];function Y({activity:a}){let[c,d]=(0,e.useState)(!1),f=W[a.type]??W.note,g=a.body.length>200;return(0,b.jsxs)("div",{className:"relative pl-6 pb-6 last:pb-0",children:[(0,b.jsx)("div",{className:"absolute left-0 top-1.5 h-3 w-3 rounded-full border-2 border-[var(--timeline-node-border)] bg-[var(--timeline-node-bg)]"}),(0,b.jsx)("div",{className:"absolute bottom-0 left-[5px] top-4 w-px bg-[var(--timeline-track)] last:hidden"}),(0,b.jsxs)("div",{className:"mb-1.5 flex items-center gap-2",children:[(0,b.jsx)("span",{className:`rounded-full border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] ${f.className}`,children:f.label}),(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:function(a){let b=Date.now(),c=Date.parse(a);if(Number.isNaN(c))return a;let d=Math.floor((b-c)/6e4);if(d<1)return"just now";if(d<60)return`${d}m ago`;let e=Math.floor(d/60);if(e<24)return`${e}h ago`;let f=Math.floor(e/24);return f<30?`${f}d ago`:new Date(c).toLocaleDateString("en-US",{month:"short",day:"numeric",year:f>365?"numeric":void 0})}(a.createdAt)}),"manual"!==a.source&&(0,b.jsx)("span",{className:"max-w-[180px] truncate font-mono text-[11px] text-[var(--app-shell-soft-text)]",children:a.source})]}),c?(0,b.jsx)("div",{className:"prose prose-sm max-w-none text-sm text-[var(--foreground)] prose-neutral dark:prose-invert",children:(0,b.jsx)(z.Markdown,{content:a.body})}):(0,b.jsx)("div",{className:`text-sm leading-relaxed text-[var(--muted-foreground)] ${g?"max-h-24 overflow-hidden [mask-image:linear-gradient(to_bottom,black_72%,transparent)]":""}`,children:(0,b.jsx)(z.Markdown,{content:a.body})}),g&&(0,b.jsxs)("button",{type:"button",onClick:()=>d(!c),className:"mt-1.5 flex items-center gap-1 text-xs text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",children:[c?(0,b.jsx)(T.ChevronDown,{size:12}):(0,b.jsx)(U.ChevronRight,{size:12}),c?"Show less":"Show more"]})]})}function Z({projectId:a,objectiveId:c,onCreated:d,onCancel:f}){let[g,h]=(0,e.useState)("note"),[i,j]=(0,e.useState)(""),[k,l]=(0,e.useState)(!1),m=(0,e.useRef)(null);(0,e.useEffect)(()=>{m.current?.focus()},[]);let n=async()=>{let b=i.trim();if(b&&!k){l(!0);try{let e=await fetch(`/api/projects/${a}/objectives/${c}/activities`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:g,body:b})});if(!e.ok)throw Error("Failed to create activity");let f=await e.json();d(f)}catch(a){console.error("Failed to create activity:",a)}finally{l(!1)}}};return(0,b.jsxs)("div",{className:"mb-4 rounded-lg border border-[var(--border)] bg-[var(--overlay-panel-muted)] p-3",children:[(0,b.jsx)("div",{className:"mb-3 flex flex-wrap gap-1.5",children:X.map(a=>{let c=W[a],d=g===a;return(0,b.jsx)("button",{type:"button",onClick:()=>h(a),className:`rounded-full border px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] transition-colors ${d?"border-[var(--foreground)] bg-[var(--foreground)] text-[var(--background)]":`${c.className} hover:opacity-80`}`,children:c.label},a)})}),(0,b.jsx)("textarea",{ref:m,value:i,onChange:a=>j(a.target.value),placeholder:"What did you do?",rows:3,className:"w-full resize-none rounded-md border border-[var(--border)] bg-[var(--input)] px-3 py-2 text-sm text-[var(--foreground)] placeholder:text-[var(--app-shell-soft-text)] focus:border-[var(--card-hover-border)] focus:outline-none"}),(0,b.jsxs)("div",{className:"mt-2 flex items-center justify-end gap-2",children:[(0,b.jsx)("button",{type:"button",onClick:f,className:"px-3 py-1.5 text-xs text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]",children:"Cancel"}),(0,b.jsx)("button",{type:"button",onClick:n,disabled:!i.trim()||k,className:"px-3 py-1.5 text-xs font-medium rounded-md bg-sky-600 text-white hover:bg-sky-500 transition-colors disabled:opacity-40 disabled:cursor-not-allowed",children:k?"Saving...":"Log activity"})]})]})}function $({projectId:a,objectiveId:c,onTotalChange:d}){let[f,g]=(0,e.useState)([]),[h,i]=(0,e.useState)(0),[j,k]=(0,e.useState)(!1),[l,m]=(0,e.useState)(1),[n,p]=(0,e.useState)(!0),[q,r]=(0,e.useState)("all"),[s,t]=(0,e.useState)(!1),[v,w]=(0,e.useState)(!1),x=(0,e.useCallback)(async(b,e,f)=>{p(!0);try{let h=new URLSearchParams({page:String(b),limit:"25"});"all"!==e&&h.set("type",e);let j=await fetch(`/api/projects/${a}/objectives/${c}/activities?${h}`);if(!j.ok)throw Error("Failed to load activities");let l=await j.json(),m=Array.isArray(l.activities)?l.activities:[],n="number"==typeof l.total?l.total:m.length,o=!!l.hasMore;g(a=>f?[...a,...m]:m),i(n),d?.(n),k(o)}catch(a){console.error("Failed to fetch activities:",a)}finally{p(!1)}},[a,c]);return(0,e.useEffect)(()=>{m(1),x(1,q,!1)},[x,q]),(0,b.jsxs)("section",{children:[(0,b.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,b.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"Time-ordered log of outputs from scheduled tasks and manual entries."}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>w(!v),className:`flex items-center gap-1 px-2.5 py-1 rounded-md text-xs font-medium transition-colors ${v?"text-sky-400 bg-sky-500/10":"text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]"}`,children:[v?(0,b.jsx)(u.X,{size:12}):(0,b.jsx)(o.Plus,{size:12}),"Log activity"]}),(0,b.jsx)("button",{type:"button",onClick:()=>t(!s),className:`p-1.5 rounded-md transition-colors ${s||"all"!==q?"text-sky-400 bg-sky-500/10":"text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]"}`,"aria-label":"Filter activities",children:(0,b.jsx)(V,{size:14})})]})]}),s&&(0,b.jsxs)("div",{className:"flex flex-wrap gap-1.5 mb-4",children:[(0,b.jsx)("button",{type:"button",onClick:()=>r("all"),className:`rounded-full border px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] transition-colors ${"all"===q?"border-[var(--foreground)] bg-[var(--foreground)] text-[var(--background)]":"border-[var(--tone-neutral-border)] bg-[var(--tone-neutral-bg)] text-[var(--tone-neutral)] hover:border-[var(--card-hover-border)]"}`,children:"All"}),X.map(a=>{let c=W[a],d=q===a;return(0,b.jsx)("button",{type:"button",onClick:()=>r(a),className:`rounded-full border px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-[0.14em] transition-colors ${d?"border-[var(--foreground)] bg-[var(--foreground)] text-[var(--background)]":`${c.className} hover:opacity-80`}`,children:c.label},a)})]}),v&&(0,b.jsx)(Z,{projectId:a,objectiveId:c,onCreated:a=>{g(b=>[a,...b]),i(a=>{let b=a+1;return d?.(b),b}),w(!1)},onCancel:()=>w(!1)}),n&&0===f.length?(0,b.jsx)("div",{className:"py-6 text-center text-sm text-[var(--muted-foreground)]",children:"Loading activities..."}):0===f.length?(0,b.jsxs)("div",{className:"rounded-xl border border-dashed border-[var(--border)] bg-[var(--overlay-panel-muted)] p-6 text-center",children:[(0,b.jsx)("p",{className:"text-sm text-[var(--muted-foreground)]",children:"No activities yet."}),(0,b.jsx)("p",{className:"mt-1 text-xs text-[var(--app-shell-soft-text)]",children:"Activities are created by scheduled tasks and agent actions."})]}):(0,b.jsxs)("div",{children:[f.map(a=>(0,b.jsx)(Y,{activity:a},a.id)),j&&(0,b.jsx)("div",{className:"pt-2 pl-6",children:(0,b.jsx)("button",{type:"button",onClick:()=>{let a=l+1;m(a),x(a,q,!0)},disabled:n,className:"text-xs text-sky-400 hover:text-sky-300 transition-colors disabled:opacity-50",children:n?"Loading...":"Load more"})})]})]})}let _=/(?:^|\n)Objective health:\s*(\d{1,3})%\s*(On track|At risk|Off track|Done)\b/im,aa={"on track":"on_track","at risk":"at_risk","off track":"off_track",done:"done"};function ab(a){return!!a&&"object"==typeof a&&!Array.isArray(a)}function ac(a){return"number"==typeof a&&Number.isFinite(a)?Math.max(0,Math.min(100,Math.round(a))):0}function ad(a){if("string"!=typeof a)return null;let b=a.trim().toLowerCase();return"on_track"===b||"at_risk"===b||"off_track"===b||"done"===b?b:aa[b]??null}function ae(a){if("string"!=typeof a)return null;let b=Date.parse(a);return Number.isNaN(b)?null:new Date(b).toISOString()}function af(a){return"string"==typeof a&&a.trim()?a.trim():void 0}function ag(...a){let b=a.flatMap(a=>a??[]),c=[];for(let a of[...b].sort((a,b)=>Date.parse(a.recordedAt)-Date.parse(b.recordedAt))){let b=c[c.length-1]??null;b&&b.progress===a.progress&&b.status===a.status&&(!b.source||!a.source||b.source===a.source)&&5e3>=Math.abs(Date.parse(a.recordedAt)-Date.parse(b.recordedAt))||c.push(a)}return c}let ah={on_track:{label:"On track",stroke:"var(--status-completed)"},at_risk:{label:"At risk",stroke:"var(--status-blocked)"},off_track:{label:"Off track",stroke:"var(--status-failed)"},done:{label:"Done",stroke:"var(--status-in-progress)"}};function ai(a){let{projectId:c,objectiveId:d,objectiveKey:f,metadata:g,currentProgress:h,currentStatus:i,objectiveUpdatedAt:j}=a,k=(0,e.useMemo)(()=>(function(a,b){if(!ab(a)||!b.trim())return[];let c=a.project_objective_health_history;if(!ab(c))return[];let d=c[b.trim()];return Array.isArray(d)?ag(d.map(a=>(function(a){if(!ab(a))return null;let b=ad(a.status),c=ae(a.recordedAt);return b&&c?{progress:ac(a.progress),status:b,recordedAt:c,source:af(a.source),note:af(a.note),objectiveId:af(a.objectiveId)??null,objectiveKey:af(a.objectiveKey)??null}:null})(a)).filter(a=>!!a)):[]})(g,d),[g,d]),[l,m]=(0,e.useState)(k),n=(0,e.useMemo)(()=>({progress:h,status:i,recordedAt:j,objectiveId:d,objectiveKey:f}),[h,i,d,f,j]);(0,e.useEffect)(()=>{m(k)},[k]),(0,e.useEffect)(()=>{let a=!1;return async function(){try{let b=await fetch(`/api/projects/${c}/objectives/${d}/activities?type=status-update&limit=100`);if(!b.ok)throw Error("Failed to load objective activity history");let e=await b.json(),g=Array.isArray(e.activities)?e.activities:[],h=ag(k,ag(g.map(a=>(function(a){if("status-update"!==a.type)return null;let b=a.body.match(_);if(!b)return null;let c=ac(Number(b[1])),d=ad(b[2]),e=ae(a.createdAt);return d&&e?{progress:c,status:d,recordedAt:e,source:af(a.source),objectiveKey:af(a.objectiveLabel)??null}:null})(a)).filter(a=>!!a&&(!f||a.objectiveKey===f))));a||m(h)}catch{a||m(k)}}(),()=>{a=!0}},[k,d,f,c]);let[o,p]=(0,e.useState)(!1);(0,e.useEffect)(()=>{let a=requestAnimationFrame(()=>p(!0));return()=>cancelAnimationFrame(a)},[]);let q=ag(l,[n]),r=q[q.length-1],s=ah[r.status];return 0===l.length||1===q.length||q.length,(0,b.jsxs)("div",{"data-testid":"objective-health-trend",className:"ml-auto inline-flex items-center gap-3 rounded-xl border border-[var(--border)] bg-[var(--overlay-panel-muted)] px-3 py-2",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"text-[10px] font-semibold uppercase tracking-[0.16em] text-[var(--muted-foreground)]",children:"Objective health"}),(0,b.jsxs)("div",{className:"mt-0.5 text-[20px] font-semibold leading-none text-[var(--foreground)]",children:[r.progress,"%"]}),(0,b.jsx)("div",{className:"mt-0.5 text-[10px] font-medium",style:{color:s.stroke},children:s.label})]}),(0,b.jsx)("div",{className:"h-[40px] w-[14px] overflow-hidden rounded-sm",style:{background:"var(--muted)"},role:"progressbar","aria-valuenow":r.progress,"aria-valuemin":0,"aria-valuemax":100,"aria-label":"Objective health",title:`${r.progress}%`,children:(0,b.jsx)("div",{className:"flex h-full flex-col justify-end",children:(0,b.jsx)("div",{className:"relative w-full overflow-hidden rounded-sm transition-[height] duration-700 ease-out",style:{height:o?`${r.progress}%`:"0%",backgroundColor:s.stroke},children:(0,b.jsx)("div",{className:"absolute inset-0 animate-pulse",style:{background:"linear-gradient(0deg, transparent 0%, rgba(255,255,255,0.15) 50%, transparent 100%)"}})})})})]})}var aj=a.i(719550),ak=a.i(529889),al=a.i(870630),am=a.i(427411),an=a.i(769677);let ao={on_track:{label:"On track",chipClass:"border-[var(--status-completed-border)] bg-[var(--status-completed-bg)] text-[var(--status-completed-text)]",toneClass:"text-[var(--status-completed-text)]"},at_risk:{label:"At risk",chipClass:"border-[var(--status-blocked-border)] bg-[var(--status-blocked-bg)] text-[var(--status-blocked-text)]",toneClass:"text-[var(--status-blocked-text)]"},off_track:{label:"Off track",chipClass:"border-[var(--status-failed-border)] bg-[var(--status-failed-bg)] text-[var(--status-failed-text)]",toneClass:"text-[var(--status-failed-text)]"},done:{label:"Done",chipClass:"border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] text-[var(--status-in-progress-text)]",toneClass:"text-[var(--status-in-progress-text)]"}};function ap({onResize:a}){let{isTouchLayout:c}=(0,ak.useInputCapabilities)();return c?null:(0,b.jsx)("div",{role:"separator","aria-orientation":"vertical","aria-label":"Resize objective chat panel",className:"group relative z-10 hidden w-0 shrink-0 cursor-col-resize xl:block",onMouseDown:b=>{b.preventDefault();let c=b.clientX;document.body.style.cursor="col-resize",document.body.style.userSelect="none";let d=b=>{let d=c-b.clientX;c=b.clientX,a(d)},e=()=>{document.body.style.cursor="",document.body.style.userSelect="",window.removeEventListener("mousemove",d),window.removeEventListener("mouseup",e)};window.addEventListener("mousemove",d),window.addEventListener("mouseup",e)},children:(0,b.jsx)("div",{className:"absolute inset-y-0 -left-0.5 w-1 transition-colors group-hover:bg-[var(--primary)]/40"})})}function aq(a){return new Date(a).toLocaleString([],{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function ar(){return{title:"",teamId:"",summary:""}}function as(a,b,c){return b?a.objectives.find(a=>a.teamId===b&&a.id!==c)??null:null}function at(a,b,c){return a.filter(a=>!as(b,a.id,c))}function au(a){let{projects:b,isLoading:c,refetch:d,updateProject:f}=(0,v.useProjects)(),[g,h]=(0,e.useState)([]),i=(0,e.useMemo)(()=>b.find(b=>b.slug===a)??null,[a,b]),j=(0,e.useMemo)(()=>(0,an.readProjectObjectivesWorkspace)(i?.metadata),[i?.metadata]),k=(0,e.useCallback)(async a=>{if(!i)throw Error("Project not found.");await f(i.id,{metadata:(0,an.writeProjectObjectivesWorkspace)(i.metadata??{},a)})},[i,f]);return(0,e.useEffect)(()=>{let a=!0;return async function(){if(!i?.id)return h([]);try{let b=await fetch(`/api/projects/${i.id}/teams`);if(!b.ok)throw Error("Failed to fetch teams");let c=await b.json();if(!a)return;h((c.teams??[]).map(a=>({id:"string"==typeof a.id?a.id:"",name:"string"==typeof a.name?a.name:"Untitled team"})).filter(a=>a.id))}catch{if(!a)return;h([])}}(),()=>{a=!1}},[i?.id]),{isLoading:c,project:i,workspace:j,teams:g,persistWorkspace:k,refetchProject:d}}function av(a){return"user"===a.role&&!a.rootMessageId}function aw({projectId:a,projectSlug:c,objective:d,teamName:f,onThreadLinked:i,onObjectiveUpdated:j}){let[k,l]=(0,e.useState)(()=>(0,am.loadObjectiveChatPanelWidth)()||800),[m,n]=(0,e.useState)(d.threadId??(d.id?`objective-chat:${d.id}`:null)),[o,p]=(0,e.useState)("list"),[q,s]=(0,e.useState)(null),[t,u]=(0,e.useState)(!1),[v,B]=(0,e.useState)(d.chatSessionVersion),[C,D]=(0,e.useState)([]),[E,F]=(0,e.useState)(null),G=(0,e.useRef)(!1),H=(0,e.useRef)(!1),{messages:I,setMessages:J,sendMessage:K,loadHistory:L,setChatRuns:M,stop:N,chatRuns:O}=(0,w.useGroupChat)(m),{processes:P,streaming:Q,chatRuns:R,poll:S}=(0,x.useProcessPolling)(m?{workspaceId:m}:null,{messages:I,setMessages:J});(0,e.useEffect)(()=>{d.threadId&&d.threadId!==m&&n(d.threadId)},[d.threadId,m]),(0,e.useEffect)(()=>{p("list"),s(null),u(!1),H.current=!1},[d.id]),(0,e.useEffect)(()=>{B(d.chatSessionVersion),d.chatSessionVersion>=an.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION&&(H.current=!0)},[d.chatSessionVersion]);let T=(0,e.useCallback)(async b=>{let c=b.trim();if(c&&!(await fetch(`/api/projects/${a}/threads`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:c})})).ok)throw Error("Failed to link objective chat to the project.")},[a]);(0,e.useEffect)(()=>{let a=!1;return m?(u(!1),(async()=>{await L(m),a||u(!0)})(),()=>{a=!0}):void u(!0)},[L,m]),(0,e.useEffect)(()=>{let b=!1;return async function(){try{let c=d.teamId?`/api/projects/${a}/teams/${d.teamId}/agents`:`/api/projects/${a}/agents`,[e,f]=await Promise.all([fetch("/api/participants"),fetch(c)]),g=e.ok?await e.json():[],h=Array.isArray(g)?g:[],i=f.ok?await f.json():{agents:[]};if(b)return;let j=((i&&"object"==typeof i?i:{agents:[]}).agents??[]).slice().sort((a,b)=>a.routing_order-b.routing_order).map(a=>a.agent_id);if(0===j.length)return void D(h);let k=new Map(h.map(a=>[a.id,a]));D(j.map(a=>k.get(a)).filter(a=>!!a))}catch(a){if(b)return;console.error("Failed to load objective chat participants",a),D([])}}(),()=>{b=!0}},[a,d.teamId]),(0,e.useEffect)(()=>{d.threadId&&T(d.threadId).catch(a=>{console.warn("Failed to re-link objective chat thread to project",a)})},[T,d.threadId]),(0,e.useEffect)(()=>{if(!d.threadId||!m||!t||v>=an.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION||H.current)return;H.current=!0;let b=function(a){let b=a.filter(av).sort((a,b)=>a.timestamp-b.timestamp);if(b.length<=1)return null;let c=b[0]?.id;if(!c)return null;let d=b.slice(1).map(a=>a.id),e=new Set(d);return{messages:[...a].map(a=>{let b=e.has(a.id)&&av(a),d="string"==typeof a.rootMessageId&&e.has(a.rootMessageId);return b||d?{...a,rootMessageId:c,parentMessageId:c,depth:1}:a}).sort((a,b)=>a.timestamp-b.timestamp),primaryRootMessageId:c,mergedRootMessageIds:d}}(I),c=!1;return(async()=>{F(null);try{if(b){if(!(await fetch("/api/history",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:m,messages:b.messages})})).ok)throw Error("Failed to migrate the objective chat history.");if(c)return;J(b.messages),s(a=>a&&b.mergedRootMessageIds.includes(a)?b.primaryRootMessageId:a)}if(!(await fetch(`/api/projects/${a}/objectives/${d.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({chatSessionVersion:an.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION})})).ok)throw Error("Failed to update the objective chat session version.");if(c)return;B(an.CURRENT_OBJECTIVE_CHAT_SESSION_VERSION),j().catch(a=>{console.warn("Failed to refresh objective after objective chat migration",a)})}catch(a){if(c)return;console.warn("Failed to migrate legacy objective chat sessions",a),F(a instanceof Error?a.message:"Failed to migrate the objective chat history.")}})(),()=>{c=!0}},[v,t,I,d.id,d.threadId,j,a,J,m]);let U=(0,e.useCallback)(async()=>{if(d.threadId)return d.threadId;let b=m??(d.id?`objective-chat:${d.id}`:null);if(!b)return null;F(null);try{let e=await al.threadService.createThread({id:b,title:d.title,metadata:{scope:"objective",objectiveId:d.id,projectId:a,projectSlug:c}});return n(e.id),await T(e.id),await i(e.id),e.id}catch(a){return F(a instanceof Error?a.message:"Failed to create the objective chat."),null}},[T,d.id,d.threadId,d.title,i,a,c,m]),V=(0,e.useMemo)(()=>new Map(C.map(a=>[a.id,a])),[C]);(0,e.useEffect)(()=>{M(a=>{let b=Date.now(),c=new Map(a.filter(a=>"string"==typeof a.chatRunId&&a.chatRunId.length>0).map(a=>[a.chatRunId,a]));for(let a of R)a?.chatRunId&&c.set(a.chatRunId,a);return Array.from(c.values()).filter(a=>!!(!a.optimistic||R.some(b=>b.chatRunId===a.chatRunId))||b-(a.enqueuedAt??0)<=5e3).sort((a,b)=>String(a.chatRunId||"").localeCompare(String(b.chatRunId||"")))})},[R,M]);let W=(0,e.useMemo)(()=>{let a=Date.now(),b=new Map(R.map(a=>[a.chatRunId,a]));for(let c of O)!(!c.optimistic||b.has(c.chatRunId))&&(a-(c.enqueuedAt??0)>5e3||b.set(c.chatRunId,c));return Array.from(b.values()).filter(a=>"queued"===a.status||"running"===a.status||"awaiting_user"===a.status||"blocked"===a.status)},[O,R]),X=(0,e.useMemo)(()=>I.filter(av).sort((a,b)=>b.timestamp-a.timestamp).map(a=>{let b,c=I.filter(b=>b.rootMessageId===a.id).sort((a,b)=>a.timestamp-b.timestamp),d=[a,...c],e=d[d.length-1]??a;return{rootMessageId:a.id,title:(b=a.content.replace(/\s+/g," ").trim())?b.length>56?`${b.slice(0,56).trim()}...`:b:"Untitled session",updatedAt:e.timestamp,messageCount:d.length,messages:d}}),[I]),Y=(0,e.useMemo)(()=>q?X.find(a=>a.rootMessageId===q)??null:null,[q,X]),Z="detail"===o&&!!q,$=new Set(["queued","running","awaiting_user","blocked"]),_=W.length>0||P.some(a=>"spawning"===a.state||"running"===a.state),aa=(0,e.useMemo)(()=>{let a=new Map;for(let b of W){if(!b.rootMessageId||!$.has(b.status))continue;let c="queued"===b.status?"queued":"working";"working"!==a.get(b.rootMessageId)&&a.set(b.rootMessageId,c)}for(let b of P)b.threadId&&("spawning"===b.state||"running"===b.state)&&a.set(b.threadId,"working");return a},[W,P]),ab=(0,e.useMemo)(()=>P.some(a=>"spawning"===a.state||"running"===a.state)||W.some(a=>$.has(a.status)&&"queued"!==a.status)?"working":W.some(a=>"queued"===a.status)?"queued":"ready",[W,$,P]);(0,e.useEffect)(()=>{G.current&&!_&&j().catch(a=>{console.warn("Failed to refresh objective after objective chat activity",a)}),G.current=_},[_,j]);let ac=(0,e.useCallback)(async a=>{await fetch(`/api/chat-runs/${encodeURIComponent(a)}/signal`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({signal:"cancel",reason:"Interrupted by a new objective chat message"})}).catch(a=>{console.warn("Failed to cancel objective chat run",a)})},[]),ad=(0,e.useCallback)(async()=>{let a=Array.from(new Set(W.map(a=>a.chatRunId).filter(a=>!!a)));await Promise.all(a.map(a=>ac(a))),await N(),await S()},[W,ac,S,N]),ae=(0,e.useCallback)(async(b,e,g,h,i,j,k)=>{let l,m,n,o,r,t,u,v;_&&await ad(),F(null);let w=await U();if(!w)return;let x=C.map(a=>a.id),y=Z?q:null,z=[(l=`/api/projects/${a}/objectives/${d.id}`,m=`${l}/scheduled-tasks`,n=`${l}/linear-issues`,o=`${l}/notes`,r=`~/.agx/projects/${c}/objectives/${d.key}.md`,t=`~/.agx/projects/${c}/objectives/${d.key}/notes/`,u=`${l}/validate`,v=d.notes?.length?d.notes.map(a=>`- **${a.title}**: ${a.body.slice(0,120)}${a.body.length>120?"...":""}`).join("\n"):null,["You are working inside a strategy session for this project objective.",`Project slug: ${c}`,`Objective: ${d.title}`,`Objective label: ${d.key}`,f?`Owning team: ${f}`:"",v?`Current notes:
|
|
2
2
|
${v}`:"Current notes: none yet.","Wake schedule: managed by the built-in objective worker job.",`## Objective file (source of truth)
|
|
3
3
|
|
|
4
4
|
This objective is stored as a frontmatter markdown file at:
|