@mndrk/agx 2.0.55 → 2.0.56
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 +5 -0
- package/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/apps/local/.next/app-path-routes-manifest.json +1 -0
- 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/required-server-files.json +5 -0
- package/cloud-runtime/standalone/apps/local/.next/routes-manifest.json +8 -0
- 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.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.rsc +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_full.segment.rsc +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/agent-specs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/export/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/automations/create/route.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/automations/create/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/daemon/route.js +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/graphs/[graphId]/nodes/[nodeId]/route.js +3 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/graphs/[graphId]/nodes/[nodeId]/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]/scheduled-tasks/route.js +17 -7
- 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]/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 +13 -13
- 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 +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/schedules/route.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/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 +4 -4
- 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.js.nft.json +1 -1
- 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 +5 -5
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/_full.segment.rsc +5 -5
- 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 +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +3 -3
- 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.js.nft.json +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 +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/page.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 +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page/app-paths-manifest.json +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page/build-manifest.json +18 -0
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page/next-font-manifest.json +11 -0
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page/react-loadable-manifest.json +1 -0
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page/server-reference-manifest.json +4 -0
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js +14 -0
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js.map +5 -0
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js.nft.json +1 -0
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +3 -0
- 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 +2 -2
- 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.js.nft.json +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 +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_full.segment.rsc +3 -3
- 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 +2 -2
- 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_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 +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +3 -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 +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +2 -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.js.nft.json +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.js.nft.json +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/app-paths-manifest.json +1 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__09joc_o._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0g50c6p._.js +237 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0o315az._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0t2jk2r._.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0tdixb0._.js +49 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__0gvjvx7._.js → [root-of-the-server]__0xdp_8-._.js} +25 -25
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/_0y42h_~._.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/_0~fjhfa._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/_12yasaj._.js +9 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_prompt-scheduler_processor_ts_022nz2u._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_prompt-scheduler_processor_ts_0i1av_r._.js +11 -10
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0yvelwy.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/02dz_local__next-internal_server_app_projects_[slug]_folders_page_actions_03fg4j9.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_0qzjdog._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_icons_0a-mbbj._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_icons_0e2_v_.._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_icons_0w3hl3p._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__07johgg._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__08d5c~o._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0_n~ybp._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0fl7_-o._.js +18 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0h~rb5r._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0r3w68h._.js +18 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0x7k~pk._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__0hd2vo4._.js → [root-of-the-server]__0y8j6el._.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0yme9fy._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0~7q5sw._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__13eqcxp._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{_0s~0ump._.js → _064h43p._.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0742x_.._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{_09b42z9._.js → _09~glsn._.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ejzn1e._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0fwy5tm._.js +7 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ndrb_0._.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0sjchy6._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ufdu.z._.js +7 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{_03rf_sb._.js → _0wk3skw._.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0yffwm4._.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_03z24q2._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_04hvzn_._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0_4hk8x._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0_ac-.f._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0a-8i4p._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0h3mfm7._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0nvzo3y._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_11k_-8~._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_execution-graph_page_tsx_0tn2sx9._.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_folders_page_tsx_0ju618z._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_graph_[taskId]_page_tsx_0bctfd-._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_layout_tsx_0aaa3~t._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_linear_page_tsx_0a~n5y8._.js +2 -2
- 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_page_tsx_06czvz-._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_terminal_page_tsx_01n9qk.._.js +12 -12
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_orphans_page_tsx_0sdv.11._.js +4 -4
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_TaskCard_tsx_0e35_z5._.js +6 -6
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_chat-ui_ChatContainer_tsx_0c9fjtl._.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_projects_ProjectObjectivesWorkspace_tsx_0k4tfip._.js +4 -4
- 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/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0mk0s0o.js +4 -0
- 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/next-font-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/next-font-manifest.json +4 -0
- 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/0-_ukhpeg429c.js +16 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0-olq~7zw3wjy.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0142ce0jj3j7r.js → 0-vo_x2cxmjm3.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0.4d8rshxivwh.js +20 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{1011~1x9nj4ny.js → 00lise4d-u8d1.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0~apd0q5_i88z.js → 02p3n7faotpr9.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/02zcxdul-1jaf.js +28 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/055bzj5jfgzr0.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/05c-~4v_jrblf.css +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/07646a0h94826.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/08~pgzjb13k_v.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/09wzd7y~tk-3~.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0px65ynyk3t1d.js → 0bchtyu6m.2yv.js} +7 -7
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0brmd4~76pthy.js +20 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0f7i3ae1ynhf3.css +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0.a4-dh~x9sa3.js → 0hudzktaaxr4g.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{09-_2lcshmjl5.js → 0hzq698w6f4m6.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0i.su2yr26wb6.js +37 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0jonp-o8lh-4j.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0jsbvcyub73d9.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0l2pt2td_87wr.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0l3v45kd.9is_.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0lgb.0~i1xvv-.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0lkal3uvr6_~2.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0mvqoz13v0o2a.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0o9cxba_5mv2c.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0p7s38p3bcffh.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0q2dgbluvgxf2.js +16 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0r0c9y6.8.m5p.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0h_bwlg~kk8lz.js → 0rey9zfvm3yhd.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0ucg8e2wkd8gf.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0uve8xrt~0a2e.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0x_pewz9npq~q.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0xwny92a.ad_i.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0ov5lu0tz2o2e.js → 104xjvrf6y-zq.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0rm7v.1y6qcni.js → 11-u35xqxu~i-.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/14v~9vx3tdv85.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0826uh6nmsi5l.js → 1503vb7lb6.g1.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0o0hwfzwwty4b.js → 15jlly_p-g4c8.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/16nozeadjid9-.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/177-q0wwdi0qe.js +1 -0
- package/cloud-runtime/standalone/apps/local/agx-server.js +4055 -0
- package/cloud-runtime/standalone/apps/local/app/api/automations/route.ts +10 -2
- package/cloud-runtime/standalone/apps/local/app/api/projects/[id]/objectives/[objectiveId]/scheduled-tasks/route.ts +16 -0
- package/cloud-runtime/standalone/apps/local/app/api/prompt-jobs/route.ts +8 -1
- package/cloud-runtime/standalone/apps/local/app/globals.css +67 -5
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/folders/page.tsx +25 -0
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/layout.tsx +19 -5
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/objectives/[objectiveId]/page.tsx +7 -2
- package/cloud-runtime/standalone/apps/local/bundled-server.ts +45 -0
- package/cloud-runtime/standalone/apps/local/components/ActionToolbar.tsx +5 -2
- package/cloud-runtime/standalone/apps/local/components/AutomationsBoard.tsx +35 -3
- package/cloud-runtime/standalone/apps/local/components/ContextMenu.tsx +2 -2
- package/cloud-runtime/standalone/apps/local/components/FloatingPanel.tsx +36 -14
- package/cloud-runtime/standalone/apps/local/components/IconButton.tsx +10 -2
- package/cloud-runtime/standalone/apps/local/components/KanbanBoard.tsx +84 -3
- package/cloud-runtime/standalone/apps/local/components/LinearBoard.tsx +382 -13
- package/cloud-runtime/standalone/apps/local/components/LogTimeline.tsx +4 -1
- package/cloud-runtime/standalone/apps/local/components/NowRunningPanel.tsx +3 -1
- package/cloud-runtime/standalone/apps/local/components/PromptJobBoard.tsx +46 -6
- package/cloud-runtime/standalone/apps/local/components/SearchCombo.tsx +3 -3
- package/cloud-runtime/standalone/apps/local/components/SortableTaskCard.tsx +21 -3
- package/cloud-runtime/standalone/apps/local/components/StatusCircle.tsx +3 -3
- package/cloud-runtime/standalone/apps/local/components/TaskCard.tsx +51 -1
- package/cloud-runtime/standalone/apps/local/components/chat-ui/ChatContainer.tsx +15 -2
- package/cloud-runtime/standalone/apps/local/components/chat-ui/Composer.tsx +3 -3
- package/cloud-runtime/standalone/apps/local/components/chat-ui/ParticipantBar.tsx +76 -9
- package/cloud-runtime/standalone/apps/local/components/graph/ExecutionGraphPanel.tsx +4 -1
- package/cloud-runtime/standalone/apps/local/components/graph/GraphFirstView.tsx +6 -2
- package/cloud-runtime/standalone/apps/local/components/graph/NodeDetailPanel.tsx +29 -14
- package/cloud-runtime/standalone/apps/local/components/graph/NodeInspector.tsx +9 -6
- package/cloud-runtime/standalone/apps/local/components/projects/FoldersSummaryCard.tsx +16 -16
- package/cloud-runtime/standalone/apps/local/components/projects/FoldersView.tsx +856 -0
- package/cloud-runtime/standalone/apps/local/components/projects/ObjectiveActivityTimeline.tsx +40 -32
- package/cloud-runtime/standalone/apps/local/components/projects/ObjectiveScheduledTasksPanel.tsx +172 -49
- package/cloud-runtime/standalone/apps/local/components/projects/ProjectHome.tsx +4 -4
- package/cloud-runtime/standalone/apps/local/components/projects/ProjectObjectivesWorkspace.tsx +347 -168
- package/cloud-runtime/standalone/apps/local/components/projects/ProjectSearchBar.tsx +4 -2
- package/cloud-runtime/standalone/apps/local/components/projects/ScheduledTasksSummaryCard.tsx +19 -19
- package/cloud-runtime/standalone/apps/local/components/projects/TeamsSummaryCard.tsx +10 -10
- package/cloud-runtime/standalone/apps/local/components/projects/TeamsView.tsx +50 -50
- package/cloud-runtime/standalone/apps/local/components/projects/WorkingNowCard.tsx +12 -12
- package/cloud-runtime/standalone/apps/local/components/projects/home/ObjectiveCard.tsx +13 -10
- package/cloud-runtime/standalone/apps/local/components/projects/home/ObjectivesSection.tsx +7 -7
- package/cloud-runtime/standalone/apps/local/components/projects/home/ToolPathCard.tsx +2 -2
- package/cloud-runtime/standalone/apps/local/components/projects/home/ToolPathsSection.tsx +9 -9
- package/cloud-runtime/standalone/apps/local/components/scheduling/ScheduleConditionPicker.tsx +3 -3
- package/cloud-runtime/standalone/apps/local/components/terminal/ProjectTerminal.tsx +211 -77
- package/cloud-runtime/standalone/apps/local/components/terminal/TerminalSessionList.tsx +3 -1
- package/cloud-runtime/standalone/apps/local/components/thread/WorkspaceSidebar.tsx +72 -21
- package/cloud-runtime/standalone/apps/local/hooks/useInputCapabilities.ts +74 -0
- package/cloud-runtime/standalone/apps/local/lib/app-config.ts +35 -0
- package/cloud-runtime/standalone/apps/local/lib/pty-manager.ts +5 -1
- package/cloud-runtime/standalone/apps/local/lib/terminal-server.ts +182 -0
- package/cloud-runtime/standalone/apps/local/next.config.ts +2 -1
- package/cloud-runtime/standalone/apps/local/package.json +2 -2
- package/cloud-runtime/standalone/apps/local/playwright.config.ts +8 -0
- package/cloud-runtime/standalone/apps/local/server.js +1 -1
- package/cloud-runtime/standalone/apps/local/server.ts +14 -158
- package/cloud-runtime/standalone/apps/local/src/graph/types.ts +2 -0
- package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/cron.ts +11 -0
- package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/processor.ts +325 -88
- package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/types.ts +20 -0
- package/cloud-runtime/standalone/apps/local/state/windowState.ts +11 -0
- package/cloud-runtime/standalone/apps/local/styles/workspaceSidebar.css +65 -0
- package/cloud-runtime/standalone/apps/local/worker/index.js +0 -4
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/pty.node +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/pty.pdb +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/winpty-agent.exe +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/winpty-agent.pdb +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/winpty.dll +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/winpty.pdb +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/pty.node +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/pty.pdb +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/winpty-agent.exe +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/winpty-agent.pdb +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/winpty.dll +0 -0
- package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/winpty.pdb +0 -0
- package/lib/cli/daemon.js +13 -2
- package/lib/cli/onboarding.js +5 -6
- package/lib/cli/runCli.js +1 -1
- package/lib/cloud/client.js +1 -1
- package/lib/commands/chat.js +37 -11
- package/lib/commands/daemonBoard.js +19 -13
- package/lib/config/cloudConfig.js +1 -1
- package/lib/orchestrator/httpClient.js +1 -1
- package/lib/prompts/templates.js +8 -9
- package/package.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__01ol22y._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__088h0r2._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__094z9yf._.js +0 -9
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0avz575._.js +0 -49
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0xxf2a0.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_0xd_mxu._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__044xm0q._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__066ay_e._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__09smg3p._.js +0 -18
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0iix1sf._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0r54zr9._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0s8z2_c._.js +0 -18
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0w1mm2j._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0wq3ukc._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__13h-0om._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_03-mlx0._.js +0 -7
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ag3.tl._.js +0 -7
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0dh_hx0._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0h8cbsi._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0i1ffhz._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0nlki7b._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0_q01av._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0eh.4j7._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0qaowqy._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0s0iy2_._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0zr-_na._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_10qsqky._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0.bv3h68wo33z.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/016.x9zt9~rsh.js +0 -16
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/027-6dwgpb0cy.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/031720jijg_th.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/03m1xs0rztynh.js +0 -16
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/07o~9mm~xds_b.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/08zgoptetnxjj.css +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/09_yj-9nfh48m.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/09c7ssmgohk7l.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0awbe2r3qazge.css +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0dro-bz6f72z0.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0gbunx8z.~i4x.js +0 -5
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0ge81r~ap.u7n.js +0 -28
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0ghg5160qeazw.js +0 -5
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0gl_8hdxl5qnd.js +0 -37
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0g~v8p6_pc46-.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0jb4f8425s.-2.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0kukkarp4un0o.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0m.2b-cekea8b.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0pt8_y9asrg~7.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0wyg4lymaq0hg.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0xl~1ux2f~rcu.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0y7-eze-w7~b4.js +0 -5
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0y8e--tok1214.js +0 -5
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0yy~0bgsz~o6-.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/100xrwo-45nrg.js +0 -20
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/14h3qxwuo~1q9.js +0 -20
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/17oesq5eds3xi.js +0 -1
- /package/cloud-runtime/standalone/apps/local/.next/static/{z8XjY2Aj-ox_Dro192i4I → fPVnk_kTRzrxXr7U3TRFW}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{z8XjY2Aj-ox_Dro192i4I → fPVnk_kTRzrxXr7U3TRFW}/_clientMiddlewareManifest.js +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{z8XjY2Aj-ox_Dro192i4I → fPVnk_kTRzrxXr7U3TRFW}/_ssgManifest.js +0 -0
package/cloud-runtime/standalone/apps/local/components/projects/ProjectObjectivesWorkspace.tsx
CHANGED
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
Trash2,
|
|
17
17
|
User,
|
|
18
18
|
Users,
|
|
19
|
+
Sparkles,
|
|
19
20
|
X,
|
|
20
21
|
} from "lucide-react";
|
|
21
22
|
import { useProjects } from "@/hooks/useProjects";
|
|
@@ -31,6 +32,7 @@ import { ObjectiveScheduledTasksPanel } from "@/components/projects/ObjectiveSch
|
|
|
31
32
|
import { ObjectiveActivityTimeline } from "@/components/projects/ObjectiveActivityTimeline";
|
|
32
33
|
import { LinearIcon } from "@/components/linear/LinearIcon";
|
|
33
34
|
import { usePromptJobs } from "@/hooks/usePromptJobs";
|
|
35
|
+
import { useInputCapabilities } from "@/hooks/useInputCapabilities";
|
|
34
36
|
import { cronToHuman } from "@/src/graph/nl-schedule";
|
|
35
37
|
import {
|
|
36
38
|
DEFAULT_OBJECTIVE_LINEAR_WORKER_NAME,
|
|
@@ -39,7 +41,9 @@ import {
|
|
|
39
41
|
import { threadService } from "@/services/threadService";
|
|
40
42
|
import {
|
|
41
43
|
loadObjectiveChatPanelWidth,
|
|
44
|
+
loadObjectiveListPanelWidth,
|
|
42
45
|
persistObjectiveChatPanelWidth,
|
|
46
|
+
persistObjectiveListPanelWidth,
|
|
43
47
|
} from "@/state/windowState";
|
|
44
48
|
import type { GroupMessage, Participant } from "@/lib/types";
|
|
45
49
|
import {
|
|
@@ -65,6 +69,7 @@ interface ProjectObjectivesWorkspaceProps {
|
|
|
65
69
|
|
|
66
70
|
interface ProjectObjectiveDetailProps extends ProjectObjectivesWorkspaceProps {
|
|
67
71
|
objectiveId: string;
|
|
72
|
+
onObjectiveDeleted?: () => void;
|
|
68
73
|
}
|
|
69
74
|
|
|
70
75
|
interface ObjectiveEditorDraft {
|
|
@@ -109,23 +114,23 @@ const HEALTH_META: Record<
|
|
|
109
114
|
> = {
|
|
110
115
|
on_track: {
|
|
111
116
|
label: "On track",
|
|
112
|
-
chipClass: "border-
|
|
113
|
-
toneClass: "text-
|
|
117
|
+
chipClass: "border-[var(--status-completed-border)] bg-[var(--status-completed-bg)] text-[var(--status-completed-text)]",
|
|
118
|
+
toneClass: "text-[var(--status-completed-text)]",
|
|
114
119
|
},
|
|
115
120
|
at_risk: {
|
|
116
121
|
label: "At risk",
|
|
117
|
-
chipClass: "border-
|
|
118
|
-
toneClass: "text-
|
|
122
|
+
chipClass: "border-[var(--status-blocked-border)] bg-[var(--status-blocked-bg)] text-[var(--status-blocked-text)]",
|
|
123
|
+
toneClass: "text-[var(--status-blocked-text)]",
|
|
119
124
|
},
|
|
120
125
|
off_track: {
|
|
121
126
|
label: "Off track",
|
|
122
|
-
chipClass: "border-
|
|
123
|
-
toneClass: "text-
|
|
127
|
+
chipClass: "border-[var(--status-failed-border)] bg-[var(--status-failed-bg)] text-[var(--status-failed-text)]",
|
|
128
|
+
toneClass: "text-[var(--status-failed-text)]",
|
|
124
129
|
},
|
|
125
130
|
done: {
|
|
126
131
|
label: "Done",
|
|
127
|
-
chipClass: "border-
|
|
128
|
-
toneClass: "text-
|
|
132
|
+
chipClass: "border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] text-[var(--status-in-progress-text)]",
|
|
133
|
+
toneClass: "text-[var(--status-in-progress-text)]",
|
|
129
134
|
},
|
|
130
135
|
};
|
|
131
136
|
|
|
@@ -138,11 +143,12 @@ function ObjectiveChatResizeHandle({
|
|
|
138
143
|
}: {
|
|
139
144
|
onResize: (delta: number) => void;
|
|
140
145
|
}) {
|
|
146
|
+
const { isTouchLayout } = useInputCapabilities();
|
|
141
147
|
const dragging = useRef(false);
|
|
142
148
|
const lastX = useRef(0);
|
|
143
149
|
|
|
144
150
|
useEffect(() => {
|
|
145
|
-
if (!dragging.current) return;
|
|
151
|
+
if (isTouchLayout || !dragging.current) return;
|
|
146
152
|
|
|
147
153
|
const onMouseMove = (event: MouseEvent) => {
|
|
148
154
|
const delta = lastX.current - event.clientX;
|
|
@@ -164,7 +170,11 @@ function ObjectiveChatResizeHandle({
|
|
|
164
170
|
window.removeEventListener("mousemove", onMouseMove);
|
|
165
171
|
window.removeEventListener("mouseup", onMouseUp);
|
|
166
172
|
};
|
|
167
|
-
});
|
|
173
|
+
}, [isTouchLayout, onResize]);
|
|
174
|
+
|
|
175
|
+
if (isTouchLayout) {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
168
178
|
|
|
169
179
|
return (
|
|
170
180
|
<div
|
|
@@ -636,24 +646,27 @@ function ObjectiveChatPanel({
|
|
|
636
646
|
|
|
637
647
|
async function loadParticipants() {
|
|
638
648
|
try {
|
|
639
|
-
const
|
|
649
|
+
const agentsUrl = objective.teamId
|
|
650
|
+
? `/api/projects/${projectId}/teams/${objective.teamId}/agents`
|
|
651
|
+
: `/api/projects/${projectId}/agents`;
|
|
652
|
+
const [participantsResponse, agentsResponse] = await Promise.all([
|
|
640
653
|
fetch("/api/participants"),
|
|
641
|
-
fetch(
|
|
654
|
+
fetch(agentsUrl),
|
|
642
655
|
]);
|
|
643
656
|
const rawParticipants = participantsResponse.ok
|
|
644
657
|
? await participantsResponse.json()
|
|
645
658
|
: [];
|
|
646
659
|
const allParticipants = Array.isArray(rawParticipants) ? (rawParticipants as Participant[]) : [];
|
|
647
|
-
const
|
|
648
|
-
? await
|
|
660
|
+
const rawAgents = agentsResponse.ok
|
|
661
|
+
? await agentsResponse.json()
|
|
649
662
|
: { agents: [] };
|
|
650
|
-
const
|
|
651
|
-
|
|
652
|
-
? (
|
|
663
|
+
const agentsPayload =
|
|
664
|
+
rawAgents && typeof rawAgents === "object"
|
|
665
|
+
? (rawAgents as { agents?: ProjectAgentSummary[] })
|
|
653
666
|
: { agents: [] };
|
|
654
667
|
if (cancelled) return;
|
|
655
668
|
|
|
656
|
-
const orderedAgentIds = (
|
|
669
|
+
const orderedAgentIds = (agentsPayload.agents ?? [])
|
|
657
670
|
.slice()
|
|
658
671
|
.sort((left, right) => left.routing_order - right.routing_order)
|
|
659
672
|
.map((agent) => agent.agent_id);
|
|
@@ -680,7 +693,7 @@ function ObjectiveChatPanel({
|
|
|
680
693
|
return () => {
|
|
681
694
|
cancelled = true;
|
|
682
695
|
};
|
|
683
|
-
}, [projectId]);
|
|
696
|
+
}, [projectId, objective.teamId]);
|
|
684
697
|
|
|
685
698
|
useEffect(() => {
|
|
686
699
|
if (!objective.threadId) {
|
|
@@ -1053,7 +1066,7 @@ function ObjectiveChatPanel({
|
|
|
1053
1066
|
<>
|
|
1054
1067
|
<ObjectiveChatResizeHandle onResize={handleChatPanelResize} />
|
|
1055
1068
|
<aside
|
|
1056
|
-
className="relative flex h-full min-h-[420px] w-full flex-col overflow-hidden border-t border-[var(--border)] bg-[
|
|
1069
|
+
className="relative flex h-full min-h-[420px] w-full flex-col overflow-hidden border-t border-[var(--border)] bg-[var(--overlay-panel)] xl:min-h-0 xl:w-[var(--objective-chat-panel-width)] xl:shrink-0 xl:self-stretch xl:border-l xl:border-t-0"
|
|
1057
1070
|
style={
|
|
1058
1071
|
{
|
|
1059
1072
|
"--objective-chat-panel-width": `${chatPanelWidth}px`,
|
|
@@ -1068,7 +1081,7 @@ function ObjectiveChatPanel({
|
|
|
1068
1081
|
type="button"
|
|
1069
1082
|
onClick={() => setChatView("list")}
|
|
1070
1083
|
aria-label="Back to sessions"
|
|
1071
|
-
className="inline-flex min-w-0 items-center gap-2 text-left text-sm font-medium text-[var(--foreground)] transition-colors hover:text-
|
|
1084
|
+
className="inline-flex min-w-0 items-center gap-2 text-left text-sm font-medium text-[var(--foreground)] transition-colors hover:text-[var(--primary)]"
|
|
1072
1085
|
>
|
|
1073
1086
|
<ArrowLeft className="h-3.5 w-3.5" />
|
|
1074
1087
|
<span className="truncate">
|
|
@@ -1118,7 +1131,7 @@ function ObjectiveChatPanel({
|
|
|
1118
1131
|
setSelectedSessionId(session.rootMessageId);
|
|
1119
1132
|
setChatView("detail");
|
|
1120
1133
|
}}
|
|
1121
|
-
className="flex w-full items-start justify-between gap-3 px-4 py-3 text-left transition-colors hover:bg-
|
|
1134
|
+
className="flex w-full items-start justify-between gap-3 px-4 py-3 text-left transition-colors hover:bg-[var(--overlay-panel-soft)]"
|
|
1122
1135
|
>
|
|
1123
1136
|
<div className="min-w-0 flex-1">
|
|
1124
1137
|
<p className="truncate text-sm font-medium text-[var(--foreground)]">
|
|
@@ -1131,7 +1144,7 @@ function ObjectiveChatPanel({
|
|
|
1131
1144
|
</div>
|
|
1132
1145
|
<div className="flex shrink-0 items-center gap-2">
|
|
1133
1146
|
{sessionState ? (
|
|
1134
|
-
<span className="rounded-full border border-
|
|
1147
|
+
<span className="rounded-full border border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--status-in-progress-text)]">
|
|
1135
1148
|
{sessionState === "queued" ? "Queued" : "Working"}
|
|
1136
1149
|
</span>
|
|
1137
1150
|
) : null}
|
|
@@ -1160,7 +1173,7 @@ function ObjectiveChatPanel({
|
|
|
1160
1173
|
return (
|
|
1161
1174
|
<div key={message.id} className="flex gap-3">
|
|
1162
1175
|
{message.role === "user" ? (
|
|
1163
|
-
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-[
|
|
1176
|
+
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-[var(--overlay-panel-soft)] text-[var(--muted-foreground)]">
|
|
1164
1177
|
<User className="h-4 w-4" />
|
|
1165
1178
|
</div>
|
|
1166
1179
|
) : (
|
|
@@ -1184,7 +1197,7 @@ function ObjectiveChatPanel({
|
|
|
1184
1197
|
})}
|
|
1185
1198
|
</span>
|
|
1186
1199
|
</div>
|
|
1187
|
-
<div className="mt-2 rounded-2xl border border-[var(--border)] bg-[
|
|
1200
|
+
<div className="mt-2 rounded-2xl border border-[var(--border)] bg-[var(--overlay-panel-muted)] px-4 py-3 text-sm text-[var(--foreground)]">
|
|
1188
1201
|
<Markdown content={message.content} isUser={message.role === "user"} />
|
|
1189
1202
|
</div>
|
|
1190
1203
|
</div>
|
|
@@ -1208,7 +1221,7 @@ function ObjectiveChatPanel({
|
|
|
1208
1221
|
)}
|
|
1209
1222
|
</div>
|
|
1210
1223
|
|
|
1211
|
-
<div className="absolute bottom-0 left-0 right-0 p-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))]
|
|
1224
|
+
<div className="absolute bottom-0 left-0 right-0 bg-[var(--overlay-panel)] p-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))]">
|
|
1212
1225
|
<Composer
|
|
1213
1226
|
onSend={handleSend}
|
|
1214
1227
|
onStop={interruptObjectiveChat}
|
|
@@ -1265,7 +1278,7 @@ function ObjectiveNotesEditor({
|
|
|
1265
1278
|
if (!editable && !hasContent) return null;
|
|
1266
1279
|
|
|
1267
1280
|
return (
|
|
1268
|
-
<div className="overflow-hidden border-l-2 border-
|
|
1281
|
+
<div className="overflow-hidden border-l-2 border-[var(--border)]/60 pl-4 transition-all focus-within:border-indigo-500/60">
|
|
1269
1282
|
{editable || hasContent ? (
|
|
1270
1283
|
<RichTextEditor
|
|
1271
1284
|
content={content}
|
|
@@ -1278,43 +1291,111 @@ function ObjectiveNotesEditor({
|
|
|
1278
1291
|
);
|
|
1279
1292
|
}
|
|
1280
1293
|
|
|
1294
|
+
const OBJECTIVE_LIST_MIN_WIDTH = 240;
|
|
1295
|
+
const OBJECTIVE_LIST_MAX_WIDTH = 480;
|
|
1296
|
+
|
|
1297
|
+
function ObjectiveListResizeHandle({
|
|
1298
|
+
onResize,
|
|
1299
|
+
}: {
|
|
1300
|
+
onResize: (delta: number) => void;
|
|
1301
|
+
}) {
|
|
1302
|
+
const { isTouchLayout } = useInputCapabilities();
|
|
1303
|
+
const dragging = useRef(false);
|
|
1304
|
+
const lastX = useRef(0);
|
|
1305
|
+
|
|
1306
|
+
useEffect(() => {
|
|
1307
|
+
if (isTouchLayout || !dragging.current) return;
|
|
1308
|
+
|
|
1309
|
+
const onMouseMove = (event: MouseEvent) => {
|
|
1310
|
+
const delta = event.clientX - lastX.current;
|
|
1311
|
+
lastX.current = event.clientX;
|
|
1312
|
+
onResize(delta);
|
|
1313
|
+
};
|
|
1314
|
+
|
|
1315
|
+
const onMouseUp = () => {
|
|
1316
|
+
dragging.current = false;
|
|
1317
|
+
document.body.style.cursor = "";
|
|
1318
|
+
document.body.style.userSelect = "";
|
|
1319
|
+
window.removeEventListener("mousemove", onMouseMove);
|
|
1320
|
+
window.removeEventListener("mouseup", onMouseUp);
|
|
1321
|
+
};
|
|
1322
|
+
|
|
1323
|
+
window.addEventListener("mousemove", onMouseMove);
|
|
1324
|
+
window.addEventListener("mouseup", onMouseUp);
|
|
1325
|
+
return () => {
|
|
1326
|
+
window.removeEventListener("mousemove", onMouseMove);
|
|
1327
|
+
window.removeEventListener("mouseup", onMouseUp);
|
|
1328
|
+
};
|
|
1329
|
+
}, [isTouchLayout, onResize]);
|
|
1330
|
+
|
|
1331
|
+
if (isTouchLayout) {
|
|
1332
|
+
return null;
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
return (
|
|
1336
|
+
<div
|
|
1337
|
+
role="separator"
|
|
1338
|
+
aria-orientation="vertical"
|
|
1339
|
+
aria-label="Resize objective list panel"
|
|
1340
|
+
className="group relative z-10 w-0 shrink-0 cursor-col-resize"
|
|
1341
|
+
onMouseDown={(event) => {
|
|
1342
|
+
event.preventDefault();
|
|
1343
|
+
dragging.current = true;
|
|
1344
|
+
lastX.current = event.clientX;
|
|
1345
|
+
document.body.style.cursor = "col-resize";
|
|
1346
|
+
document.body.style.userSelect = "none";
|
|
1347
|
+
}}
|
|
1348
|
+
>
|
|
1349
|
+
<div className="absolute inset-y-0 -left-0.5 w-1 transition-colors group-hover:bg-[var(--primary)]/40" />
|
|
1350
|
+
</div>
|
|
1351
|
+
);
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1281
1354
|
function ObjectiveListCard({
|
|
1282
|
-
projectSlug,
|
|
1283
1355
|
objective,
|
|
1284
1356
|
activityCount,
|
|
1285
1357
|
lastActivityAt,
|
|
1286
1358
|
activeAgentIds,
|
|
1287
1359
|
participants,
|
|
1360
|
+
isSelected,
|
|
1361
|
+
onSelect,
|
|
1288
1362
|
}: {
|
|
1289
|
-
projectSlug: string;
|
|
1290
1363
|
objective: ProjectObjective;
|
|
1291
1364
|
activityCount: number;
|
|
1292
1365
|
lastActivityAt: string | null;
|
|
1293
1366
|
activeAgentIds?: string[];
|
|
1294
1367
|
participants?: Participant[];
|
|
1368
|
+
isSelected?: boolean;
|
|
1369
|
+
onSelect?: () => void;
|
|
1295
1370
|
}) {
|
|
1296
1371
|
const activityMeta = buildActivityMeta(activityCount, lastActivityAt);
|
|
1297
1372
|
|
|
1298
1373
|
return (
|
|
1299
1374
|
<article className="px-2">
|
|
1300
|
-
<
|
|
1301
|
-
|
|
1375
|
+
<button
|
|
1376
|
+
type="button"
|
|
1377
|
+
onClick={onSelect}
|
|
1302
1378
|
aria-label={`Open details for ${objective.title}`}
|
|
1303
|
-
className=
|
|
1379
|
+
className={`group flex w-full items-center gap-3 rounded-xl px-2 py-2 text-left transition-colors ${
|
|
1380
|
+
isSelected
|
|
1381
|
+
? "bg-[var(--primary)]/10 border border-[var(--primary)]/20"
|
|
1382
|
+
: "border border-transparent hover:bg-[var(--secondary)]"
|
|
1383
|
+
}`}
|
|
1304
1384
|
>
|
|
1305
|
-
<div className="min-w-0 flex-1
|
|
1306
|
-
<div className="flex min-w-0 items-center gap-
|
|
1307
|
-
<span
|
|
1308
|
-
{objective.
|
|
1385
|
+
<div className="min-w-0 flex-1 py-0.5">
|
|
1386
|
+
<div className="flex min-w-0 items-center gap-2">
|
|
1387
|
+
<span
|
|
1388
|
+
className={`rounded-full border px-1.5 py-0 text-[9px] font-semibold uppercase tracking-[0.12em] ${HEALTH_META[objective.status].chipClass}`}
|
|
1389
|
+
>
|
|
1390
|
+
{HEALTH_META[objective.status].label}
|
|
1309
1391
|
</span>
|
|
1310
1392
|
</div>
|
|
1311
|
-
<
|
|
1393
|
+
<p className="mt-1 truncate text-sm font-medium text-[var(--foreground)]">
|
|
1394
|
+
{objective.title}
|
|
1395
|
+
</p>
|
|
1396
|
+
<p className="mt-0.5 text-[11px] text-[var(--muted-foreground)]">
|
|
1312
1397
|
{activityMeta}
|
|
1313
|
-
</
|
|
1314
|
-
</div>
|
|
1315
|
-
|
|
1316
|
-
<div className="hidden shrink-0 text-right text-xs text-[var(--muted-foreground)] sm:block">
|
|
1317
|
-
<div>{activityMeta}</div>
|
|
1398
|
+
</p>
|
|
1318
1399
|
</div>
|
|
1319
1400
|
|
|
1320
1401
|
{activeAgentIds && activeAgentIds.length > 0 && (
|
|
@@ -1330,19 +1411,15 @@ function ObjectiveListCard({
|
|
|
1330
1411
|
})}
|
|
1331
1412
|
</span>
|
|
1332
1413
|
)}
|
|
1333
|
-
|
|
1334
|
-
<span className="inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-[var(--muted-foreground)] transition-colors group-hover:bg-white/5 group-hover:text-[var(--foreground)] group-focus-visible:bg-white/5 group-focus-visible:text-[var(--foreground)]">
|
|
1335
|
-
<ArrowRight className="h-4 w-4" />
|
|
1336
|
-
</span>
|
|
1337
|
-
</Link>
|
|
1414
|
+
</button>
|
|
1338
1415
|
</article>
|
|
1339
1416
|
);
|
|
1340
1417
|
}
|
|
1341
1418
|
|
|
1342
1419
|
export function ProjectObjectivesOverview({
|
|
1343
1420
|
projectSlug,
|
|
1344
|
-
|
|
1345
|
-
|
|
1421
|
+
initialObjectiveId,
|
|
1422
|
+
}: ProjectObjectivesWorkspaceProps & { initialObjectiveId?: string }) {
|
|
1346
1423
|
const { isLoading, project, workspace, teams, persistWorkspace } =
|
|
1347
1424
|
useProjectObjectivesWorkspace(projectSlug);
|
|
1348
1425
|
const objectives = workspace.objectives;
|
|
@@ -1350,12 +1427,36 @@ export function ProjectObjectivesOverview({
|
|
|
1350
1427
|
() => getAvailableTeams(teams, workspace),
|
|
1351
1428
|
[teams, workspace]
|
|
1352
1429
|
);
|
|
1430
|
+
const [selectedObjectiveId, setSelectedObjectiveId] = useState<string | null>(
|
|
1431
|
+
initialObjectiveId ?? null
|
|
1432
|
+
);
|
|
1433
|
+
const [listPanelWidth, setListPanelWidth] = useState(() => {
|
|
1434
|
+
return loadObjectiveListPanelWidth() || 320;
|
|
1435
|
+
});
|
|
1353
1436
|
const [objectiveEditor, setObjectiveEditor] = useState<ObjectiveEditorDraft | null>(null);
|
|
1354
1437
|
const [isSaving, setIsSaving] = useState(false);
|
|
1355
1438
|
const [saveError, setSaveError] = useState<string | null>(null);
|
|
1356
1439
|
const [activeAgentsByObjective, setActiveAgentsByObjective] = useState<Map<string, string[]>>(new Map());
|
|
1357
1440
|
const [participants, setParticipants] = useState<Participant[]>([]);
|
|
1358
1441
|
|
|
1442
|
+
// Auto-select first objective when none is selected
|
|
1443
|
+
useEffect(() => {
|
|
1444
|
+
if (!selectedObjectiveId && objectives.length > 0) {
|
|
1445
|
+
setSelectedObjectiveId(objectives[0].id);
|
|
1446
|
+
}
|
|
1447
|
+
}, [selectedObjectiveId, objectives]);
|
|
1448
|
+
|
|
1449
|
+
// Clear selection if the selected objective was deleted
|
|
1450
|
+
useEffect(() => {
|
|
1451
|
+
if (
|
|
1452
|
+
selectedObjectiveId &&
|
|
1453
|
+
objectives.length > 0 &&
|
|
1454
|
+
!objectives.some((o) => o.id === selectedObjectiveId)
|
|
1455
|
+
) {
|
|
1456
|
+
setSelectedObjectiveId(objectives[0]?.id ?? null);
|
|
1457
|
+
}
|
|
1458
|
+
}, [selectedObjectiveId, objectives]);
|
|
1459
|
+
|
|
1359
1460
|
useEffect(() => {
|
|
1360
1461
|
let cancelled = false;
|
|
1361
1462
|
async function load() {
|
|
@@ -1434,7 +1535,7 @@ export function ProjectObjectivesOverview({
|
|
|
1434
1535
|
try {
|
|
1435
1536
|
await persistWorkspace(upsertProjectObjective(workspace, nextObjective));
|
|
1436
1537
|
setObjectiveEditor(null);
|
|
1437
|
-
|
|
1538
|
+
setSelectedObjectiveId(nextObjective.id);
|
|
1438
1539
|
} catch (error) {
|
|
1439
1540
|
setSaveError(
|
|
1440
1541
|
error instanceof Error ? error.message : "Failed to save objective updates."
|
|
@@ -1444,6 +1545,17 @@ export function ProjectObjectivesOverview({
|
|
|
1444
1545
|
}
|
|
1445
1546
|
};
|
|
1446
1547
|
|
|
1548
|
+
const handleListPanelResize = useCallback((delta: number) => {
|
|
1549
|
+
setListPanelWidth((currentWidth) => {
|
|
1550
|
+
const nextWidth = Math.max(
|
|
1551
|
+
OBJECTIVE_LIST_MIN_WIDTH,
|
|
1552
|
+
Math.min(OBJECTIVE_LIST_MAX_WIDTH, currentWidth + delta)
|
|
1553
|
+
);
|
|
1554
|
+
persistObjectiveListPanelWidth(nextWidth);
|
|
1555
|
+
return nextWidth;
|
|
1556
|
+
});
|
|
1557
|
+
}, []);
|
|
1558
|
+
|
|
1447
1559
|
if (isLoading && !project) {
|
|
1448
1560
|
return <LoadingState label="Loading objectives..." />;
|
|
1449
1561
|
}
|
|
@@ -1453,57 +1565,88 @@ export function ProjectObjectivesOverview({
|
|
|
1453
1565
|
}
|
|
1454
1566
|
|
|
1455
1567
|
return (
|
|
1456
|
-
<div className="flex h-full min-h-0
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1568
|
+
<div className="flex h-full min-h-0 overflow-hidden bg-[var(--background)] text-[var(--foreground)]">
|
|
1569
|
+
{/* Left panel: objective list */}
|
|
1570
|
+
<div
|
|
1571
|
+
className="flex flex-shrink-0 flex-col border-r border-[var(--border)] bg-[var(--background)]"
|
|
1572
|
+
style={{ width: listPanelWidth }}
|
|
1573
|
+
>
|
|
1574
|
+
<div className="flex items-center justify-between border-b border-[var(--border)] px-4 py-3">
|
|
1575
|
+
<div className="min-w-0">
|
|
1576
|
+
<p className="text-xs font-semibold uppercase tracking-[0.12em] text-[var(--muted-foreground)]">
|
|
1577
|
+
Objectives
|
|
1578
|
+
</p>
|
|
1579
|
+
<p className="mt-0.5 text-[11px] text-[var(--muted-foreground)]">
|
|
1580
|
+
{objectives.length === 0 ? "None yet" : `${objectives.length} total`}
|
|
1464
1581
|
</p>
|
|
1465
1582
|
</div>
|
|
1466
|
-
|
|
1467
1583
|
<button
|
|
1468
1584
|
type="button"
|
|
1469
1585
|
onClick={() => setObjectiveEditor(buildEmptyObjectiveDraft())}
|
|
1470
|
-
className="inline-flex
|
|
1586
|
+
className="inline-flex h-7 w-7 items-center justify-center rounded-lg text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]"
|
|
1587
|
+
aria-label="New objective"
|
|
1471
1588
|
>
|
|
1472
1589
|
<Plus className="h-4 w-4" />
|
|
1473
|
-
New objective
|
|
1474
1590
|
</button>
|
|
1475
1591
|
</div>
|
|
1592
|
+
|
|
1476
1593
|
<ErrorBanner message={saveError} />
|
|
1594
|
+
|
|
1595
|
+
<div className="flex-1 overflow-y-auto py-1">
|
|
1596
|
+
{objectives.length === 0 ? (
|
|
1597
|
+
<div className="px-4 py-8 text-center">
|
|
1598
|
+
<p className="text-sm text-[var(--muted-foreground)]">
|
|
1599
|
+
No objectives yet.
|
|
1600
|
+
</p>
|
|
1601
|
+
<button
|
|
1602
|
+
type="button"
|
|
1603
|
+
onClick={() => setObjectiveEditor(buildEmptyObjectiveDraft())}
|
|
1604
|
+
className="mt-2 text-sm text-[var(--primary)] hover:underline"
|
|
1605
|
+
>
|
|
1606
|
+
Create one
|
|
1607
|
+
</button>
|
|
1608
|
+
</div>
|
|
1609
|
+
) : (
|
|
1610
|
+
<div className="space-y-0.5">
|
|
1611
|
+
{objectives.map((objective) => {
|
|
1612
|
+
const objectiveActivities = buildObjectiveTimelineActivities({
|
|
1613
|
+
objective,
|
|
1614
|
+
workspace,
|
|
1615
|
+
});
|
|
1616
|
+
|
|
1617
|
+
return (
|
|
1618
|
+
<ObjectiveListCard
|
|
1619
|
+
key={objective.id}
|
|
1620
|
+
objective={objective}
|
|
1621
|
+
activityCount={objectiveActivities.length}
|
|
1622
|
+
lastActivityAt={objectiveActivities[0]?.createdAt ?? null}
|
|
1623
|
+
activeAgentIds={activeAgentsByObjective.get(objective.id)}
|
|
1624
|
+
participants={participants}
|
|
1625
|
+
isSelected={selectedObjectiveId === objective.id}
|
|
1626
|
+
onSelect={() => setSelectedObjectiveId(objective.id)}
|
|
1627
|
+
/>
|
|
1628
|
+
);
|
|
1629
|
+
})}
|
|
1630
|
+
</div>
|
|
1631
|
+
)}
|
|
1632
|
+
</div>
|
|
1477
1633
|
</div>
|
|
1478
1634
|
|
|
1479
|
-
<
|
|
1480
|
-
{objectives.length === 0 ? (
|
|
1481
|
-
<div className="mx-auto max-w-3xl rounded-[32px] border border-dashed border-[var(--border)] bg-[var(--card-bg)] p-8 text-center">
|
|
1482
|
-
<p className="text-lg font-semibold text-[var(--foreground)]">No objectives yet</p>
|
|
1483
|
-
<p className="mt-2 text-sm text-[var(--muted-foreground)]">
|
|
1484
|
-
Keep the root view simple: objective list first, detail after click-through.
|
|
1485
|
-
</p>
|
|
1486
|
-
</div>
|
|
1487
|
-
) : (
|
|
1488
|
-
<div className="mx-auto max-w-4xl divide-y divide-[var(--border)] overflow-hidden rounded-[24px] border border-[var(--border)] bg-[rgba(8,12,18,0.58)]">
|
|
1489
|
-
{objectives.map((objective) => {
|
|
1490
|
-
const objectiveActivities = buildObjectiveTimelineActivities({
|
|
1491
|
-
objective,
|
|
1492
|
-
workspace,
|
|
1493
|
-
});
|
|
1635
|
+
<ObjectiveListResizeHandle onResize={handleListPanelResize} />
|
|
1494
1636
|
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1637
|
+
{/* Right panel: objective detail */}
|
|
1638
|
+
<div className="flex-1 min-w-0 min-h-0 overflow-hidden">
|
|
1639
|
+
{selectedObjectiveId ? (
|
|
1640
|
+
<ProjectObjectiveDetail
|
|
1641
|
+
projectSlug={projectSlug}
|
|
1642
|
+
objectiveId={selectedObjectiveId}
|
|
1643
|
+
onObjectiveDeleted={() => setSelectedObjectiveId(null)}
|
|
1644
|
+
/>
|
|
1645
|
+
) : (
|
|
1646
|
+
<div className="flex h-full items-center justify-center text-sm text-[var(--muted-foreground)]">
|
|
1647
|
+
{objectives.length === 0
|
|
1648
|
+
? "Create an objective to get started."
|
|
1649
|
+
: "Select an objective from the list."}
|
|
1507
1650
|
</div>
|
|
1508
1651
|
)}
|
|
1509
1652
|
</div>
|
|
@@ -1526,6 +1669,7 @@ export function ProjectObjectivesOverview({
|
|
|
1526
1669
|
export function ProjectObjectiveDetail({
|
|
1527
1670
|
projectSlug,
|
|
1528
1671
|
objectiveId,
|
|
1672
|
+
onObjectiveDeleted,
|
|
1529
1673
|
}: ProjectObjectiveDetailProps) {
|
|
1530
1674
|
const router = useRouter();
|
|
1531
1675
|
const { isLoading, project, workspace, teams, persistWorkspace, refetchProject } =
|
|
@@ -1557,6 +1701,7 @@ export function ProjectObjectiveDetail({
|
|
|
1557
1701
|
const [isCreatingNote, setIsCreatingNote] = useState(false);
|
|
1558
1702
|
const [linearIssues, setLinearIssues] = useState<ObjectiveLinearIssueSummary[]>([]);
|
|
1559
1703
|
const [linearConnected, setLinearConnected] = useState(true);
|
|
1704
|
+
const [creatingLinearWorker, setCreatingLinearWorker] = useState(false);
|
|
1560
1705
|
|
|
1561
1706
|
const { jobs: scheduledJobs } = usePromptJobs(project?.id ?? null, {
|
|
1562
1707
|
requireProjectId: true,
|
|
@@ -1787,7 +1932,11 @@ export function ProjectObjectiveDetail({
|
|
|
1787
1932
|
if (!confirmed) return;
|
|
1788
1933
|
|
|
1789
1934
|
await runPersist(removeProjectObjective(workspace, objective.id));
|
|
1790
|
-
|
|
1935
|
+
if (onObjectiveDeleted) {
|
|
1936
|
+
onObjectiveDeleted();
|
|
1937
|
+
} else {
|
|
1938
|
+
router.push(`/projects/${projectSlug}`);
|
|
1939
|
+
}
|
|
1791
1940
|
};
|
|
1792
1941
|
|
|
1793
1942
|
const handleObjectiveThreadLinked = useCallback(
|
|
@@ -1863,6 +2012,11 @@ export function ProjectObjectiveDetail({
|
|
|
1863
2012
|
return false;
|
|
1864
2013
|
}
|
|
1865
2014
|
|
|
2015
|
+
if (!objective.teamId) {
|
|
2016
|
+
setSaveError("Assign a team to this objective before creating a worker.");
|
|
2017
|
+
return false;
|
|
2018
|
+
}
|
|
2019
|
+
|
|
1866
2020
|
setSaveError(null);
|
|
1867
2021
|
|
|
1868
2022
|
try {
|
|
@@ -1950,15 +2104,15 @@ export function ProjectObjectiveDetail({
|
|
|
1950
2104
|
|
|
1951
2105
|
if (!objective) {
|
|
1952
2106
|
return (
|
|
1953
|
-
<div className="flex h-full items-center justify-center px-4 bg-[
|
|
1954
|
-
<div className="rounded-xl border border-
|
|
1955
|
-
<p className="text-lg font-semibold text-
|
|
1956
|
-
<p className="mt-2 text-sm text-
|
|
2107
|
+
<div className="flex h-full items-center justify-center px-4 bg-[var(--background)]">
|
|
2108
|
+
<div className="rounded-xl border border-[var(--border)] bg-[var(--card-bg)] p-8 text-center">
|
|
2109
|
+
<p className="text-lg font-semibold text-[var(--foreground)]">Objective not found</p>
|
|
2110
|
+
<p className="mt-2 text-sm text-[var(--muted-foreground)]">
|
|
1957
2111
|
It may have been deleted or the link is stale.
|
|
1958
2112
|
</p>
|
|
1959
2113
|
<Link
|
|
1960
2114
|
href={`/projects/${projectSlug}`}
|
|
1961
|
-
className="mt-4 inline-flex items-center gap-2 rounded-md border border-
|
|
2115
|
+
className="mt-4 inline-flex items-center gap-2 rounded-md border border-[var(--border)] bg-[var(--card-bg)] px-3 py-1.5 text-sm text-[var(--foreground)] transition-colors hover:bg-[var(--secondary)]"
|
|
1962
2116
|
>
|
|
1963
2117
|
Back to objectives
|
|
1964
2118
|
</Link>
|
|
@@ -1968,7 +2122,7 @@ export function ProjectObjectiveDetail({
|
|
|
1968
2122
|
}
|
|
1969
2123
|
|
|
1970
2124
|
return (
|
|
1971
|
-
<div className="flex h-full min-h-0 flex-col bg-[
|
|
2125
|
+
<div className="flex h-full min-h-0 flex-col bg-[radial-gradient(circle_at_top_left,rgba(59,130,246,0.1),transparent_28%),var(--background)] text-[var(--foreground)]">
|
|
1972
2126
|
<div className="flex-1 min-h-0 overflow-hidden">
|
|
1973
2127
|
<div className="flex h-full min-h-0 flex-col xl:flex-row">
|
|
1974
2128
|
<div className="min-h-0 flex-1 overflow-y-auto">
|
|
@@ -1976,7 +2130,7 @@ export function ProjectObjectiveDetail({
|
|
|
1976
2130
|
<ErrorBanner message={saveError} />
|
|
1977
2131
|
|
|
1978
2132
|
<div className="flex items-center gap-3 mb-4">
|
|
1979
|
-
<span className="px-2.5 py-0.5
|
|
2133
|
+
<span className="rounded-full border border-[var(--tone-neutral-border)] bg-[var(--tone-neutral-bg)] px-2.5 py-0.5 text-[10px] font-mono uppercase tracking-wider text-[var(--tone-neutral)]">
|
|
1980
2134
|
{objective.key}
|
|
1981
2135
|
</span>
|
|
1982
2136
|
<span
|
|
@@ -1997,14 +2151,14 @@ export function ProjectObjectiveDetail({
|
|
|
1997
2151
|
if (e.key === "Enter") void handleObjectiveSave();
|
|
1998
2152
|
if (e.key === "Escape") setObjectiveEditor(null);
|
|
1999
2153
|
}}
|
|
2000
|
-
className="flex-1
|
|
2154
|
+
className="flex-1 border-b-2 border-[var(--primary)] bg-transparent px-0 py-1 text-[28px] font-semibold leading-tight text-[var(--foreground)] outline-none"
|
|
2001
2155
|
placeholder="Objective statement"
|
|
2002
2156
|
/>
|
|
2003
2157
|
<button
|
|
2004
2158
|
type="button"
|
|
2005
2159
|
onClick={() => void handleObjectiveSave()}
|
|
2006
2160
|
disabled={isSaving}
|
|
2007
|
-
className="p-1.5
|
|
2161
|
+
className="rounded-md p-1.5 text-[var(--primary)] transition-colors hover:bg-[var(--status-in-progress-bg)]"
|
|
2008
2162
|
aria-label="Save objective"
|
|
2009
2163
|
>
|
|
2010
2164
|
<Check size={18} />
|
|
@@ -2012,22 +2166,24 @@ export function ProjectObjectiveDetail({
|
|
|
2012
2166
|
<button
|
|
2013
2167
|
type="button"
|
|
2014
2168
|
onClick={() => setObjectiveEditor(null)}
|
|
2015
|
-
className="p-1.5
|
|
2169
|
+
className="rounded-md p-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)]"
|
|
2016
2170
|
aria-label="Cancel editing"
|
|
2017
2171
|
>
|
|
2018
2172
|
<X size={18} />
|
|
2019
2173
|
</button>
|
|
2020
2174
|
</div>
|
|
2021
2175
|
) : (
|
|
2022
|
-
<
|
|
2023
|
-
|
|
2176
|
+
<button
|
|
2177
|
+
type="button"
|
|
2178
|
+
aria-label={`Edit objective ${objective.title}`}
|
|
2179
|
+
className="flex items-center gap-3 group cursor-pointer text-left"
|
|
2024
2180
|
onClick={() => setObjectiveEditor(buildObjectiveDraft(objective))}
|
|
2025
2181
|
>
|
|
2026
|
-
<h1 className="text-[28px] leading-tight font-semibold text-
|
|
2182
|
+
<h1 className="text-[28px] leading-tight font-semibold text-[var(--foreground)]">
|
|
2027
2183
|
{objective.title}
|
|
2028
2184
|
</h1>
|
|
2029
|
-
<Pencil size={16} className="text-
|
|
2030
|
-
</
|
|
2185
|
+
<Pencil size={16} className="shrink-0 text-[var(--muted-foreground)] opacity-0 transition-opacity group-hover:opacity-100" />
|
|
2186
|
+
</button>
|
|
2031
2187
|
)}
|
|
2032
2188
|
</div>
|
|
2033
2189
|
|
|
@@ -2035,10 +2191,10 @@ export function ProjectObjectiveDetail({
|
|
|
2035
2191
|
<div className="flex flex-wrap items-center gap-x-6 gap-y-3 mb-10">
|
|
2036
2192
|
{/* Team Property */}
|
|
2037
2193
|
<div className="flex items-center gap-2">
|
|
2038
|
-
<span className="text-xs font-semibold
|
|
2194
|
+
<span className="flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]">
|
|
2039
2195
|
<Users size={12} /> Team
|
|
2040
2196
|
</span>
|
|
2041
|
-
<span className="text-
|
|
2197
|
+
<span className="text-[var(--app-shell-soft-text)]">·</span>
|
|
2042
2198
|
{teamEditor ? (
|
|
2043
2199
|
<div className="min-w-[180px]">
|
|
2044
2200
|
<SearchCombo
|
|
@@ -2069,13 +2225,14 @@ export function ProjectObjectiveDetail({
|
|
|
2069
2225
|
) : (
|
|
2070
2226
|
<button
|
|
2071
2227
|
type="button"
|
|
2228
|
+
aria-label={`Edit team for ${objective.title}`}
|
|
2072
2229
|
onClick={() => setTeamEditor({ teamId: objective.teamId })}
|
|
2073
|
-
className="flex items-center gap-2
|
|
2230
|
+
className="group -mx-1.5 -my-0.5 flex items-center gap-2 rounded px-1.5 py-0.5 transition-colors hover:bg-[var(--muted)]"
|
|
2074
2231
|
>
|
|
2075
2232
|
<div className="w-5 h-5 rounded-full bg-blue-500/20 text-blue-400 flex items-center justify-center text-[10px] font-bold border border-blue-500/30">
|
|
2076
2233
|
{(teamName ?? "?").charAt(0).toUpperCase()}
|
|
2077
2234
|
</div>
|
|
2078
|
-
<span className="text-sm text-
|
|
2235
|
+
<span className="text-sm text-[var(--foreground)] transition-colors group-hover:text-[var(--primary)]">
|
|
2079
2236
|
{teamName ?? "Not assigned"}
|
|
2080
2237
|
</span>
|
|
2081
2238
|
</button>
|
|
@@ -2084,19 +2241,20 @@ export function ProjectObjectiveDetail({
|
|
|
2084
2241
|
|
|
2085
2242
|
{/* Check-in Frequency Property */}
|
|
2086
2243
|
<div className="flex items-center gap-2">
|
|
2087
|
-
<span className="text-xs font-semibold
|
|
2244
|
+
<span className="flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]">
|
|
2088
2245
|
<Clock size={12} /> Check-in
|
|
2089
2246
|
</span>
|
|
2090
|
-
<span className="text-
|
|
2247
|
+
<span className="text-[var(--app-shell-soft-text)]">·</span>
|
|
2091
2248
|
<button
|
|
2092
2249
|
type="button"
|
|
2093
2250
|
onClick={() => setWakeEditor(buildObjectiveDraft(objective))}
|
|
2094
|
-
|
|
2251
|
+
aria-label={`Edit cadence for ${objective.title}`}
|
|
2252
|
+
className="-my-0.5 rounded px-1.5 py-0.5 text-sm text-[var(--foreground)] transition-colors hover:bg-[var(--muted)] hover:text-[var(--primary)]"
|
|
2095
2253
|
>
|
|
2096
2254
|
{formatObjectiveCadence(objective.cadence)}
|
|
2097
2255
|
</button>
|
|
2098
2256
|
{objective.condition ? (
|
|
2099
|
-
<span className="
|
|
2257
|
+
<span className="max-w-[200px] truncate text-xs text-[var(--muted-foreground)]">
|
|
2100
2258
|
· {objective.condition}
|
|
2101
2259
|
</span>
|
|
2102
2260
|
) : null}
|
|
@@ -2104,7 +2262,7 @@ export function ProjectObjectiveDetail({
|
|
|
2104
2262
|
</div>
|
|
2105
2263
|
|
|
2106
2264
|
{/* Tabs */}
|
|
2107
|
-
<div className="border-b border-
|
|
2265
|
+
<div className="mb-8 border-b border-[var(--border)]">
|
|
2108
2266
|
<nav className="flex gap-1 -mb-px" aria-label="Objective sections">
|
|
2109
2267
|
{([
|
|
2110
2268
|
{ id: "activity" as const, label: "Activity", icon: Clock },
|
|
@@ -2118,29 +2276,35 @@ export function ProjectObjectiveDetail({
|
|
|
2118
2276
|
onClick={() => setActiveTab(tab.id)}
|
|
2119
2277
|
className={`flex items-center gap-2 px-3 py-2.5 text-sm font-medium border-b-2 transition-colors ${
|
|
2120
2278
|
activeTab === tab.id
|
|
2121
|
-
? "border-
|
|
2122
|
-
: "border-transparent text-
|
|
2279
|
+
? "border-[var(--primary)] text-[var(--foreground)]"
|
|
2280
|
+
: "border-transparent text-[var(--muted-foreground)] hover:border-[var(--border)] hover:text-[var(--foreground)]"
|
|
2123
2281
|
}`}
|
|
2124
2282
|
>
|
|
2125
2283
|
<tab.icon size={14} />
|
|
2126
2284
|
{tab.label}
|
|
2127
2285
|
{tab.id === "activity" && activityTotal > 0 && (
|
|
2128
|
-
<span className="
|
|
2286
|
+
<span className="rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]">
|
|
2129
2287
|
{activityTotal}
|
|
2130
2288
|
</span>
|
|
2131
2289
|
)}
|
|
2132
2290
|
{tab.id === "notes" && notes.length > 0 && (
|
|
2133
|
-
<span className="
|
|
2291
|
+
<span className="rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]">
|
|
2134
2292
|
{notes.length}
|
|
2135
2293
|
</span>
|
|
2136
2294
|
)}
|
|
2137
|
-
{tab.id === "linear" &&
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2295
|
+
{tab.id === "linear" && (() => {
|
|
2296
|
+
const DONE = ["done", "canceled", "cancelled", "completed", "duplicate"];
|
|
2297
|
+
const active = linearIssues.filter(
|
|
2298
|
+
(i, idx, arr) => arr.findIndex((x) => x.id === i.id) === idx && !DONE.includes(i.status.toLowerCase())
|
|
2299
|
+
);
|
|
2300
|
+
return active.length > 0 ? (
|
|
2301
|
+
<span className="rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]">
|
|
2302
|
+
{active.length}
|
|
2303
|
+
</span>
|
|
2304
|
+
) : null;
|
|
2305
|
+
})()}
|
|
2142
2306
|
{tab.id === "scheduled-tasks" && scheduledTaskCount > 0 && (
|
|
2143
|
-
<span className="
|
|
2307
|
+
<span className="rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]">
|
|
2144
2308
|
{scheduledTaskCount}
|
|
2145
2309
|
</span>
|
|
2146
2310
|
)}
|
|
@@ -2155,7 +2319,7 @@ export function ProjectObjectiveDetail({
|
|
|
2155
2319
|
{activeTab === "notes" && (
|
|
2156
2320
|
<section className="space-y-4">
|
|
2157
2321
|
<div className="flex justify-between items-end">
|
|
2158
|
-
<p className="text-sm text-
|
|
2322
|
+
<p className="text-sm text-[var(--muted-foreground)]">
|
|
2159
2323
|
Capture the strategy, constraints, and what better looks like.
|
|
2160
2324
|
</p>
|
|
2161
2325
|
</div>
|
|
@@ -2170,13 +2334,13 @@ export function ProjectObjectiveDetail({
|
|
|
2170
2334
|
if (e.key === "Enter") handleCreateNote();
|
|
2171
2335
|
}}
|
|
2172
2336
|
placeholder="New note title..."
|
|
2173
|
-
className="flex-1
|
|
2337
|
+
className="flex-1 rounded-md border border-[var(--border)] bg-[var(--input)] px-3 py-1.5 text-sm text-[var(--foreground)] placeholder:text-[var(--app-shell-soft-text)] focus:border-[var(--primary)] focus:outline-none"
|
|
2174
2338
|
/>
|
|
2175
2339
|
<button
|
|
2176
2340
|
type="button"
|
|
2177
2341
|
onClick={handleCreateNote}
|
|
2178
2342
|
disabled={isCreatingNote}
|
|
2179
|
-
className="flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium text-
|
|
2343
|
+
className="flex items-center gap-1.5 rounded-md border border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] px-3 py-1.5 text-sm font-medium text-[var(--status-in-progress-text)] transition-opacity hover:opacity-90 disabled:opacity-50"
|
|
2180
2344
|
>
|
|
2181
2345
|
<Plus size={14} />
|
|
2182
2346
|
Add
|
|
@@ -2185,9 +2349,9 @@ export function ProjectObjectiveDetail({
|
|
|
2185
2349
|
|
|
2186
2350
|
{/* Notes List */}
|
|
2187
2351
|
{isNotesLoading ? (
|
|
2188
|
-
<p className="text-sm text-
|
|
2352
|
+
<p className="py-4 text-sm text-[var(--muted-foreground)]">Loading notes...</p>
|
|
2189
2353
|
) : notes.length === 0 ? (
|
|
2190
|
-
<p className="text-sm text-
|
|
2354
|
+
<p className="text-sm text-[var(--muted-foreground)] py-4">
|
|
2191
2355
|
No notes yet. Add one above.
|
|
2192
2356
|
</p>
|
|
2193
2357
|
) : (
|
|
@@ -2201,13 +2365,13 @@ export function ProjectObjectiveDetail({
|
|
|
2201
2365
|
return (
|
|
2202
2366
|
<div
|
|
2203
2367
|
key={note.id}
|
|
2204
|
-
className="
|
|
2368
|
+
className="overflow-hidden rounded-lg border border-[var(--border)]"
|
|
2205
2369
|
>
|
|
2206
2370
|
{/* Note Header */}
|
|
2207
|
-
<div className="flex items-center justify-between px-4 py-2.5
|
|
2371
|
+
<div className="flex items-center justify-between bg-[var(--overlay-panel-muted)] px-4 py-2.5">
|
|
2208
2372
|
{isEditing ? (
|
|
2209
2373
|
<div className="flex items-center gap-2 flex-1 mr-2">
|
|
2210
|
-
<FileText size={14} className="text-
|
|
2374
|
+
<FileText size={14} className="shrink-0 text-[var(--muted-foreground)]" />
|
|
2211
2375
|
<input
|
|
2212
2376
|
type="text"
|
|
2213
2377
|
value={draftTitle}
|
|
@@ -2217,7 +2381,7 @@ export function ProjectObjectiveDetail({
|
|
|
2217
2381
|
[note.id]: e.target.value,
|
|
2218
2382
|
}))
|
|
2219
2383
|
}
|
|
2220
|
-
|
|
2384
|
+
className="flex-1 border-b border-[var(--border)] bg-transparent py-0.5 text-sm font-medium text-[var(--foreground)] focus:border-[var(--primary)] focus:outline-none"
|
|
2221
2385
|
/>
|
|
2222
2386
|
</div>
|
|
2223
2387
|
) : (
|
|
@@ -2226,14 +2390,14 @@ export function ProjectObjectiveDetail({
|
|
|
2226
2390
|
onClick={() =>
|
|
2227
2391
|
setEditingNoteId(note.id)
|
|
2228
2392
|
}
|
|
2229
|
-
className="flex items-center gap-2 text-sm font-medium text-
|
|
2393
|
+
className="flex items-center gap-2 text-sm font-medium text-[var(--foreground)] transition-colors hover:text-[var(--primary)]"
|
|
2230
2394
|
>
|
|
2231
|
-
<FileText size={14} className="text-
|
|
2395
|
+
<FileText size={14} className="text-[var(--muted-foreground)]" />
|
|
2232
2396
|
{note.title}
|
|
2233
2397
|
</button>
|
|
2234
2398
|
)}
|
|
2235
2399
|
<div className="flex items-center gap-2">
|
|
2236
|
-
<span className="text-[11px] text-
|
|
2400
|
+
<span className="text-[11px] text-[var(--muted-foreground)]">
|
|
2237
2401
|
{isSavingNote
|
|
2238
2402
|
? "Saving..."
|
|
2239
2403
|
: new Date(note.updatedAt).toLocaleDateString()}
|
|
@@ -2243,14 +2407,14 @@ export function ProjectObjectiveDetail({
|
|
|
2243
2407
|
onClick={() =>
|
|
2244
2408
|
setEditingNoteId(isEditing ? null : note.id)
|
|
2245
2409
|
}
|
|
2246
|
-
className="p-1 text-
|
|
2410
|
+
className="p-1 text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]"
|
|
2247
2411
|
>
|
|
2248
2412
|
<Pencil size={12} />
|
|
2249
2413
|
</button>
|
|
2250
2414
|
<button
|
|
2251
2415
|
type="button"
|
|
2252
2416
|
onClick={() => handleDeleteNote(note.id)}
|
|
2253
|
-
className="p-1 text-
|
|
2417
|
+
className="p-1 text-[var(--muted-foreground)] transition-colors hover:text-[var(--destructive)]"
|
|
2254
2418
|
>
|
|
2255
2419
|
<Trash2 size={12} />
|
|
2256
2420
|
</button>
|
|
@@ -2274,7 +2438,7 @@ export function ProjectObjectiveDetail({
|
|
|
2274
2438
|
</div>
|
|
2275
2439
|
) : note.body.trim() ? (
|
|
2276
2440
|
<div
|
|
2277
|
-
className="px-4 py-3 text-sm text-
|
|
2441
|
+
className="cursor-pointer px-4 py-3 text-sm text-[var(--foreground)] transition-colors hover:bg-[var(--overlay-panel-muted)]"
|
|
2278
2442
|
onClick={() => setEditingNoteId(note.id)}
|
|
2279
2443
|
>
|
|
2280
2444
|
<div className="line-clamp-3">
|
|
@@ -2283,7 +2447,7 @@ export function ProjectObjectiveDetail({
|
|
|
2283
2447
|
</div>
|
|
2284
2448
|
) : (
|
|
2285
2449
|
<div
|
|
2286
|
-
className="px-4 py-3 text-sm text-
|
|
2450
|
+
className="cursor-pointer px-4 py-3 text-sm italic text-[var(--muted-foreground)] transition-colors hover:bg-[var(--overlay-panel-muted)]"
|
|
2287
2451
|
onClick={() => setEditingNoteId(note.id)}
|
|
2288
2452
|
>
|
|
2289
2453
|
Empty note — click to edit
|
|
@@ -2321,12 +2485,28 @@ export function ProjectObjectiveDetail({
|
|
|
2321
2485
|
|
|
2322
2486
|
return (
|
|
2323
2487
|
<section>
|
|
2324
|
-
<
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
|
|
2488
|
+
<div className="flex flex-wrap items-start justify-between gap-3 mb-4">
|
|
2489
|
+
<p className="text-sm text-[var(--muted-foreground)]">
|
|
2490
|
+
Tickets tracked by the objective label{" "}
|
|
2491
|
+
<code className="rounded bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[11px] text-[var(--foreground)]">
|
|
2492
|
+
{objective.key}
|
|
2493
|
+
</code>.
|
|
2494
|
+
</p>
|
|
2495
|
+
<button
|
|
2496
|
+
type="button"
|
|
2497
|
+
onClick={async () => {
|
|
2498
|
+
setCreatingLinearWorker(true);
|
|
2499
|
+
await handleObjectiveLinearWorkerCreate();
|
|
2500
|
+
setCreatingLinearWorker(false);
|
|
2501
|
+
}}
|
|
2502
|
+
disabled={creatingLinearWorker || !objective.teamId}
|
|
2503
|
+
title={!objective.teamId ? "Assign a team to this objective first" : undefined}
|
|
2504
|
+
className="inline-flex items-center gap-2 rounded-xl border border-[var(--status-completed-border)] bg-[var(--status-completed-bg)] px-3 py-2 text-sm text-[var(--status-completed-text)] transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50"
|
|
2505
|
+
>
|
|
2506
|
+
<Sparkles className="h-4 w-4" />
|
|
2507
|
+
{creatingLinearWorker ? "Creating..." : !objective.teamId ? "Assign team to work" : "Work Linear tickets"}
|
|
2508
|
+
</button>
|
|
2509
|
+
</div>
|
|
2330
2510
|
{!linearConnected ? (
|
|
2331
2511
|
<EmptyState label="Connect Linear to create and track tickets for this objective." />
|
|
2332
2512
|
) : dedupedIssues.length === 0 ? (
|
|
@@ -2338,11 +2518,11 @@ export function ProjectObjectiveDetail({
|
|
|
2338
2518
|
{activeIssues.map((issue) => (
|
|
2339
2519
|
<div
|
|
2340
2520
|
key={issue.id}
|
|
2341
|
-
className="
|
|
2521
|
+
className="rounded-xl border border-[var(--border)] bg-[var(--overlay-panel-muted)] p-4"
|
|
2342
2522
|
>
|
|
2343
2523
|
<div className="flex items-start justify-between gap-3">
|
|
2344
2524
|
<div className="min-w-0">
|
|
2345
|
-
<p className="text-xs font-semibold uppercase tracking-[0.18em] text-
|
|
2525
|
+
<p className="text-xs font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]">
|
|
2346
2526
|
{issue.identifier}
|
|
2347
2527
|
</p>
|
|
2348
2528
|
{issue.url ? (
|
|
@@ -2350,21 +2530,21 @@ export function ProjectObjectiveDetail({
|
|
|
2350
2530
|
href={issue.url}
|
|
2351
2531
|
target="_blank"
|
|
2352
2532
|
rel="noreferrer"
|
|
2353
|
-
className="mt-1 block text-sm font-medium text-
|
|
2533
|
+
className="mt-1 block text-sm font-medium text-[var(--foreground)] transition-colors hover:text-[var(--primary)]"
|
|
2354
2534
|
>
|
|
2355
2535
|
{issue.title}
|
|
2356
2536
|
</a>
|
|
2357
2537
|
) : (
|
|
2358
|
-
<p className="mt-1 text-sm font-medium text-
|
|
2538
|
+
<p className="mt-1 text-sm font-medium text-[var(--foreground)]">
|
|
2359
2539
|
{issue.title}
|
|
2360
2540
|
</p>
|
|
2361
2541
|
)}
|
|
2362
2542
|
</div>
|
|
2363
|
-
<span className="rounded-full border border-
|
|
2543
|
+
<span className="rounded-full border border-[var(--tone-neutral-border)] px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--tone-neutral)]">
|
|
2364
2544
|
{issue.status}
|
|
2365
2545
|
</span>
|
|
2366
2546
|
</div>
|
|
2367
|
-
<div className="mt-3 flex flex-wrap items-center gap-2 text-[11px] text-
|
|
2547
|
+
<div className="mt-3 flex flex-wrap items-center gap-2 text-[11px] text-[var(--muted-foreground)]">
|
|
2368
2548
|
<span>Updated {formatDateTime(issue.updatedAt)}</span>
|
|
2369
2549
|
<span>{issue.assignee ? `Assigned to ${issue.assignee}` : "Unassigned"}</span>
|
|
2370
2550
|
</div>
|
|
@@ -2375,7 +2555,7 @@ export function ProjectObjectiveDetail({
|
|
|
2375
2555
|
|
|
2376
2556
|
{doneIssues.length > 0 && (
|
|
2377
2557
|
<div className={activeIssues.length > 0 ? "mt-6" : ""}>
|
|
2378
|
-
<p className="text-[11px] font-medium uppercase tracking-[0.18em] text-
|
|
2558
|
+
<p className="text-[11px] font-medium uppercase tracking-[0.18em] text-[var(--muted-foreground)] mb-2">
|
|
2379
2559
|
Completed
|
|
2380
2560
|
</p>
|
|
2381
2561
|
<div className="space-y-0.5">
|
|
@@ -2385,11 +2565,11 @@ export function ProjectObjectiveDetail({
|
|
|
2385
2565
|
href={issue.url ?? "#"}
|
|
2386
2566
|
target="_blank"
|
|
2387
2567
|
rel="noreferrer"
|
|
2388
|
-
className="flex items-center gap-3
|
|
2568
|
+
className="group flex items-center gap-3 rounded-md px-2 py-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)] hover:text-[var(--foreground)]"
|
|
2389
2569
|
>
|
|
2390
2570
|
<span className="text-[11px] font-mono shrink-0">{issue.identifier}</span>
|
|
2391
2571
|
<span className="text-[12px] truncate">{issue.title}</span>
|
|
2392
|
-
<span className="ml-auto text-[10px]
|
|
2572
|
+
<span className="ml-auto shrink-0 text-[10px] text-[var(--app-shell-soft-text)] group-hover:text-[var(--muted-foreground)]">{issue.status}</span>
|
|
2393
2573
|
</a>
|
|
2394
2574
|
))}
|
|
2395
2575
|
</div>
|
|
@@ -2414,7 +2594,6 @@ export function ProjectObjectiveDetail({
|
|
|
2414
2594
|
condition: objective.condition,
|
|
2415
2595
|
}}
|
|
2416
2596
|
onCreateTask={handleScheduledTaskCreate}
|
|
2417
|
-
onCreateObjectiveLinearWorker={handleObjectiveLinearWorkerCreate}
|
|
2418
2597
|
/>
|
|
2419
2598
|
</section>
|
|
2420
2599
|
)}
|
|
@@ -2422,12 +2601,12 @@ export function ProjectObjectiveDetail({
|
|
|
2422
2601
|
{/* Danger Zone */}
|
|
2423
2602
|
<section className="pt-10">
|
|
2424
2603
|
<div className="mb-4">
|
|
2425
|
-
<h2 className="text-sm font-semibold text-
|
|
2604
|
+
<h2 className="text-sm font-semibold text-[var(--destructive)]">Danger Zone</h2>
|
|
2426
2605
|
</div>
|
|
2427
|
-
<div className="
|
|
2606
|
+
<div className="flex items-center justify-between rounded-xl border border-[var(--destructive-border)] bg-[var(--destructive-bg)] p-5">
|
|
2428
2607
|
<div>
|
|
2429
|
-
<h3 className="text-sm font-medium text-
|
|
2430
|
-
<p className="text-sm text-
|
|
2608
|
+
<h3 className="text-sm font-medium text-[var(--foreground)]">Delete Objective</h3>
|
|
2609
|
+
<p className="mt-1 text-sm text-[var(--muted-foreground)]">
|
|
2431
2610
|
Once you delete an objective, there is no going back.
|
|
2432
2611
|
</p>
|
|
2433
2612
|
</div>
|
|
@@ -2435,7 +2614,7 @@ export function ProjectObjectiveDetail({
|
|
|
2435
2614
|
type="button"
|
|
2436
2615
|
onClick={() => void handleObjectiveDelete()}
|
|
2437
2616
|
aria-label={`Delete objective ${objective.title}`}
|
|
2438
|
-
className="flex items-center gap-2
|
|
2617
|
+
className="flex items-center gap-2 whitespace-nowrap rounded-md border border-[var(--destructive-border)] bg-[var(--destructive-bg)] px-3 py-1.5 text-sm font-medium text-[var(--destructive)] transition-opacity hover:opacity-90"
|
|
2439
2618
|
>
|
|
2440
2619
|
<Trash2 size={14} /> Delete
|
|
2441
2620
|
</button>
|
|
@@ -2475,8 +2654,8 @@ export function ProjectObjectivesWorkspace(props: ProjectObjectivesWorkspaceProp
|
|
|
2475
2654
|
|
|
2476
2655
|
function EmptyState({ label }: { label: string }) {
|
|
2477
2656
|
return (
|
|
2478
|
-
<div className="
|
|
2479
|
-
<p className="text-sm text-
|
|
2657
|
+
<div className="flex items-center rounded-xl border border-dashed border-[var(--border)] bg-[var(--overlay-panel-muted)] p-6">
|
|
2658
|
+
<p className="text-sm text-[var(--muted-foreground)]">{label}</p>
|
|
2480
2659
|
</div>
|
|
2481
2660
|
);
|
|
2482
2661
|
}
|
|
@@ -2504,7 +2683,7 @@ function ObjectiveEditorModal({
|
|
|
2504
2683
|
role="dialog"
|
|
2505
2684
|
aria-modal="true"
|
|
2506
2685
|
aria-label={mode === "edit" ? "Edit objective" : "New objective"}
|
|
2507
|
-
className="w-full max-w-3xl overflow-hidden rounded-[32px] border border-[var(--border)] bg-[
|
|
2686
|
+
className="w-full max-w-3xl overflow-hidden rounded-[32px] border border-[var(--border)] bg-[var(--overlay-panel-strong)] shadow-2xl"
|
|
2508
2687
|
>
|
|
2509
2688
|
<div className="border-b border-[var(--border)] px-5 py-4">
|
|
2510
2689
|
<h3 className="text-lg font-semibold text-[var(--foreground)]">
|
|
@@ -2523,7 +2702,7 @@ function ObjectiveEditorModal({
|
|
|
2523
2702
|
<input
|
|
2524
2703
|
value={draft.title}
|
|
2525
2704
|
onChange={(event) => onChange({ ...draft, title: event.target.value })}
|
|
2526
|
-
className="w-full rounded-2xl border border-[var(--border)] bg-[
|
|
2705
|
+
className="w-full rounded-2xl border border-[var(--border)] bg-[var(--input)] px-4 py-3 text-sm text-[var(--foreground)] outline-none transition-colors focus:border-[var(--primary)]"
|
|
2527
2706
|
placeholder="Get 50 qualified visitors daily"
|
|
2528
2707
|
/>
|
|
2529
2708
|
</div>
|
|
@@ -2534,7 +2713,7 @@ function ObjectiveEditorModal({
|
|
|
2534
2713
|
<select
|
|
2535
2714
|
value={draft.teamId}
|
|
2536
2715
|
onChange={(event) => onChange({ ...draft, teamId: event.target.value })}
|
|
2537
|
-
className="w-full rounded-2xl border border-[var(--border)] bg-[
|
|
2716
|
+
className="w-full rounded-2xl border border-[var(--border)] bg-[var(--input)] px-3 py-3 text-sm text-[var(--foreground)] outline-none transition-colors focus:border-[var(--primary)]"
|
|
2538
2717
|
>
|
|
2539
2718
|
<option value="">Select a team</option>
|
|
2540
2719
|
{teams.map((team) => (
|
|
@@ -2562,7 +2741,7 @@ function ObjectiveEditorModal({
|
|
|
2562
2741
|
type="button"
|
|
2563
2742
|
onClick={onSave}
|
|
2564
2743
|
disabled={isSaving}
|
|
2565
|
-
className="rounded-xl border border-
|
|
2744
|
+
className="rounded-xl border border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] px-3 py-2 text-sm font-medium text-[var(--status-in-progress-text)] transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50"
|
|
2566
2745
|
>
|
|
2567
2746
|
{isSaving ? "Saving..." : mode === "edit" ? "Save objective" : "Create objective"}
|
|
2568
2747
|
</button>
|
|
@@ -2591,7 +2770,7 @@ function ObjectiveWakeModal({
|
|
|
2591
2770
|
role="dialog"
|
|
2592
2771
|
aria-modal="true"
|
|
2593
2772
|
aria-label="Edit wake schedule"
|
|
2594
|
-
className="w-full max-w-2xl overflow-hidden rounded-[32px] border border-[var(--border)] bg-[
|
|
2773
|
+
className="w-full max-w-2xl overflow-hidden rounded-[32px] border border-[var(--border)] bg-[var(--overlay-panel-strong)] shadow-2xl"
|
|
2595
2774
|
>
|
|
2596
2775
|
<div className="border-b border-[var(--border)] px-5 py-4">
|
|
2597
2776
|
<h3 className="text-lg font-semibold text-[var(--foreground)]">Edit wake schedule</h3>
|
|
@@ -2629,7 +2808,7 @@ function ObjectiveWakeModal({
|
|
|
2629
2808
|
type="button"
|
|
2630
2809
|
onClick={onSave}
|
|
2631
2810
|
disabled={isSaving}
|
|
2632
|
-
className="rounded-xl border border-
|
|
2811
|
+
className="rounded-xl border border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] px-3 py-2 text-sm font-medium text-[var(--status-in-progress-text)] transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50"
|
|
2633
2812
|
>
|
|
2634
2813
|
{isSaving ? "Saving..." : "Save schedule"}
|
|
2635
2814
|
</button>
|