@mndrk/agx 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
- package/cloud-runtime/standalone/apps/local/.next/build-manifest.json +3 -3
- package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_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 +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_full.segment.rsc +2 -2
- 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 +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/agent-specs/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/[id]/profile/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/export/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/file-search/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/issues/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/issues/context/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/issues/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/options/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/runs/scripted/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/participants/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/linear-issues/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/scheduled-tasks/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/search/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/teams/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/poll/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/check/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/debug/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/assign/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/available/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/detail/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/history/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/learn/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/unlearn/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/status/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/summarize/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/extract/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/route.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/automations/page_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_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 +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/_full.segment.rsc +2 -2
- 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 +1 -1
- 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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +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.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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/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_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/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/chunks/ssr/0rhn_lucide-react_dist_esm_067eb..._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__039h7r.._.js +18 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0lno3km._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__0fl7_-o._.js → [root-of-the-server]__0nqqk26._.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__0j9m72.._.js → [root-of-the-server]__0tqn-o5._.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0~nm7b6._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{_064h43p._.js → _05xj_bp._.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{apps_local_0nvzo3y._.js → apps_local_04dh2yh._.js} +2 -2
- 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_components_PromptJobBoard_tsx_06zob36._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_chat-ui_ChatContainer_tsx_0c9fjtl._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_projects_ProjectObjectivesWorkspace_tsx_0k4tfip._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_thread_WorkspaceSidebar_tsx_0unv2xp._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/middleware-build-manifest.js +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/middleware-manifest.json +5 -5
- package/cloud-runtime/standalone/apps/local/.next/server/pages/404.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/pages/500.html +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0e307b-0c2jbx.js → 0-cets4_axpvm.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0-wlbe.ripd2w.css +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/00e1ihnb6ap3t.js +16 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{119v0-idpg-cv.js → 0_cjth28_11b2.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0e6rxcxy.l5c8.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0ime4btrg-g4l.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0jrkacz_dyem6.js → 0jglardpw~5uc.js} +5 -5
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0tt1oh112yv-l.js → 0jq0t4zip38wt.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0kn66yvx08813.css +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{07646a0h94826.js → 0l89kxqcf86on.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0ng6wy4ak35jg.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0n~jhoq~op4e5.js +16 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0stvi5btlxl4m.js → 0xu_doej_wc-3.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{16d~es6h6k~rj.js → 16fyhcmwlw3th.js} +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0uve8xrt~0a2e.js → 18e8w~~mvoh5o.js} +1 -1
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/layout.tsx +1 -1
- package/cloud-runtime/standalone/apps/local/components/PromptJobBoard.tsx +3 -2
- package/cloud-runtime/standalone/apps/local/components/linear/LinearSettingsModal.tsx +9 -3
- package/cloud-runtime/standalone/apps/local/components/linear/LinearWorkerConfig.tsx +65 -30
- package/cloud-runtime/standalone/apps/local/components/linear/LinearWorkerRunLog.tsx +190 -0
- package/cloud-runtime/standalone/apps/local/components/projects/ObjectiveScheduledTasksPanel.tsx +38 -34
- package/cloud-runtime/standalone/apps/local/components/thread/WorkspaceSidebar.tsx +118 -17
- package/cloud-runtime/standalone/apps/local/styles/workspaceSidebar.css +71 -2
- package/cloud-runtime/standalone/apps/local/worker/index.js +2 -2
- package/package.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_0tvwux2._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__006vr7.._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0d18x53._.js +0 -18
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0z7nw_r._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0-_ukhpeg429c.js +0 -16
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/04yoml2rqnuot.js +0 -16
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0_mrpyqcoyb_5.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0edewt9l~cs~k.css +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0f7i3ae1ynhf3.css +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0r0c9y6.8.m5p.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/0zw85-xl9ysjs.js +0 -1
- /package/cloud-runtime/standalone/apps/local/.next/static/{RnYHmEXBwXJjVrVVx2CuP → qPuactsz6OYimwT6dSdHn}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{RnYHmEXBwXJjVrVVx2CuP → qPuactsz6OYimwT6dSdHn}/_clientMiddlewareManifest.js +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{RnYHmEXBwXJjVrVVx2CuP → qPuactsz6OYimwT6dSdHn}/_ssgManifest.js +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
4
4
|
import dynamic from "next/dynamic";
|
|
5
|
-
import { ChevronDown, ChevronRight,
|
|
5
|
+
import { ChevronDown, ChevronRight, Play, RefreshCw } from "lucide-react";
|
|
6
6
|
import { ScheduleConditionPicker, SimpleDropdown } from "@/components/scheduling/ScheduleConditionPicker";
|
|
7
7
|
import {
|
|
8
8
|
LINEAR_WORKER_DEFAULT_PROMPT,
|
|
@@ -21,6 +21,7 @@ interface TeamOption {
|
|
|
21
21
|
|
|
22
22
|
interface LinearWorkerConfigProps {
|
|
23
23
|
projectId?: string;
|
|
24
|
+
onJobLoaded?: (jobId: string | null) => void;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
function formatNextRun(
|
|
@@ -87,6 +88,7 @@ function CollapsibleSection({
|
|
|
87
88
|
|
|
88
89
|
export default function LinearWorkerConfig({
|
|
89
90
|
projectId,
|
|
91
|
+
onJobLoaded,
|
|
90
92
|
}: LinearWorkerConfigProps) {
|
|
91
93
|
const [job, setJob] = useState<PromptJob | null>(null);
|
|
92
94
|
const [teams, setTeams] = useState<TeamOption[]>([]);
|
|
@@ -120,13 +122,16 @@ export default function LinearWorkerConfig({
|
|
|
120
122
|
setCadence(data.job.cronExpr || data.job.cadence || "*/30 * * * *");
|
|
121
123
|
setCondition(data.job.condition || "");
|
|
122
124
|
setTeamId(data.job.teamId || "");
|
|
125
|
+
onJobLoaded?.(data.job.id);
|
|
126
|
+
} else {
|
|
127
|
+
onJobLoaded?.(null);
|
|
123
128
|
}
|
|
124
129
|
} catch {
|
|
125
130
|
// ignore
|
|
126
131
|
} finally {
|
|
127
132
|
setLoading(false);
|
|
128
133
|
}
|
|
129
|
-
}, [projectId]);
|
|
134
|
+
}, [projectId, onJobLoaded]);
|
|
130
135
|
|
|
131
136
|
const fetchTeams = useCallback(async () => {
|
|
132
137
|
if (!projectId) return;
|
|
@@ -216,6 +221,26 @@ export default function LinearWorkerConfig({
|
|
|
216
221
|
}
|
|
217
222
|
}, [job, projectId, handleSave]);
|
|
218
223
|
|
|
224
|
+
const [runningNow, setRunningNow] = useState(false);
|
|
225
|
+
|
|
226
|
+
const handleRunNow = useCallback(async () => {
|
|
227
|
+
if (!job) return;
|
|
228
|
+
setRunningNow(true);
|
|
229
|
+
try {
|
|
230
|
+
await fetch("/api/prompt-jobs/poll", {
|
|
231
|
+
method: "POST",
|
|
232
|
+
headers: { "Content-Type": "application/json" },
|
|
233
|
+
body: JSON.stringify({ jobId: job.id }),
|
|
234
|
+
});
|
|
235
|
+
// Refresh status after triggering
|
|
236
|
+
setTimeout(fetchWorker, 1000);
|
|
237
|
+
} catch {
|
|
238
|
+
// ignore
|
|
239
|
+
} finally {
|
|
240
|
+
setRunningNow(false);
|
|
241
|
+
}
|
|
242
|
+
}, [job, fetchWorker]);
|
|
243
|
+
|
|
219
244
|
if (loading) {
|
|
220
245
|
return (
|
|
221
246
|
<div className="flex items-center gap-2 py-12 justify-center text-sm text-[var(--muted-foreground)]">
|
|
@@ -234,15 +259,6 @@ export default function LinearWorkerConfig({
|
|
|
234
259
|
<div className="flex items-center gap-4 text-xs text-[var(--muted-foreground)]">
|
|
235
260
|
{job && (
|
|
236
261
|
<>
|
|
237
|
-
<span
|
|
238
|
-
className={`rounded-full border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] ${
|
|
239
|
-
isActive
|
|
240
|
-
? "border-emerald-500/30 bg-emerald-500/10 text-emerald-400"
|
|
241
|
-
: "border-yellow-500/30 bg-yellow-500/10 text-yellow-400"
|
|
242
|
-
}`}
|
|
243
|
-
>
|
|
244
|
-
{job.state}
|
|
245
|
-
</span>
|
|
246
262
|
<span>
|
|
247
263
|
Next: <span className="text-[var(--foreground)]">{formatNextRun(job.nextRunAt, job.state)}</span>
|
|
248
264
|
</span>
|
|
@@ -260,26 +276,45 @@ export default function LinearWorkerConfig({
|
|
|
260
276
|
</>
|
|
261
277
|
)}
|
|
262
278
|
</div>
|
|
263
|
-
<
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
<Play size={12} /> {job ? "Resume" : "Enable"}
|
|
280
|
-
</>
|
|
279
|
+
<div className="flex items-center gap-3">
|
|
280
|
+
{/* Run Now button */}
|
|
281
|
+
{job && (
|
|
282
|
+
<button
|
|
283
|
+
type="button"
|
|
284
|
+
disabled={runningNow || saving}
|
|
285
|
+
onClick={handleRunNow}
|
|
286
|
+
className="flex items-center gap-1.5 rounded-lg border border-blue-500/30 bg-blue-500/10 px-3 py-1.5 text-xs font-medium text-blue-400 transition-colors hover:bg-blue-500/20 disabled:opacity-40"
|
|
287
|
+
>
|
|
288
|
+
{runningNow ? (
|
|
289
|
+
<RefreshCw size={12} className="animate-spin" />
|
|
290
|
+
) : (
|
|
291
|
+
<Play size={12} />
|
|
292
|
+
)}
|
|
293
|
+
Run now
|
|
294
|
+
</button>
|
|
281
295
|
)}
|
|
282
|
-
|
|
296
|
+
{/* Enable / Disable toggle */}
|
|
297
|
+
<button
|
|
298
|
+
type="button"
|
|
299
|
+
disabled={saving}
|
|
300
|
+
onClick={handleToggle}
|
|
301
|
+
className="relative flex items-center gap-2.5 rounded-lg border border-[var(--card-border)] bg-[var(--muted)] px-3 py-1.5 text-xs font-medium text-[var(--foreground)] transition-colors hover:border-[var(--muted-foreground)]"
|
|
302
|
+
>
|
|
303
|
+
{/* Toggle track */}
|
|
304
|
+
<span
|
|
305
|
+
className={`relative inline-flex h-4 w-7 shrink-0 items-center rounded-full transition-colors ${
|
|
306
|
+
isActive ? "bg-emerald-500" : "bg-[var(--card-border)]"
|
|
307
|
+
}`}
|
|
308
|
+
>
|
|
309
|
+
<span
|
|
310
|
+
className={`inline-block h-3 w-3 rounded-full bg-white transition-transform ${
|
|
311
|
+
isActive ? "translate-x-3.5" : "translate-x-0.5"
|
|
312
|
+
}`}
|
|
313
|
+
/>
|
|
314
|
+
</span>
|
|
315
|
+
{isActive ? "Enabled" : "Disabled"}
|
|
316
|
+
</button>
|
|
317
|
+
</div>
|
|
283
318
|
</div>
|
|
284
319
|
|
|
285
320
|
{/* Main layout: Left (prompts) | Right (config) */}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
4
|
+
import { RefreshCw, CheckCircle2, XCircle, Clock, Loader2, Ban } from "lucide-react";
|
|
5
|
+
import type { PromptRun } from "@/src/prompt-scheduler/types";
|
|
6
|
+
|
|
7
|
+
interface LinearWorkerRunLogProps {
|
|
8
|
+
jobId: string | null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function StatusIcon({ status }: { status: PromptRun["status"] }) {
|
|
12
|
+
switch (status) {
|
|
13
|
+
case "success":
|
|
14
|
+
return <CheckCircle2 size={14} className="text-emerald-400" />;
|
|
15
|
+
case "failed":
|
|
16
|
+
return <XCircle size={14} className="text-red-400" />;
|
|
17
|
+
case "running":
|
|
18
|
+
return <Loader2 size={14} className="text-blue-400 animate-spin" />;
|
|
19
|
+
case "queued":
|
|
20
|
+
return <Clock size={14} className="text-yellow-400" />;
|
|
21
|
+
case "cancelled":
|
|
22
|
+
return <Ban size={14} className="text-[var(--muted-foreground)]" />;
|
|
23
|
+
default:
|
|
24
|
+
return <Clock size={14} className="text-[var(--muted-foreground)]" />;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function statusLabel(status: PromptRun["status"]): string {
|
|
29
|
+
return status.charAt(0).toUpperCase() + status.slice(1);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function statusColor(status: PromptRun["status"]): string {
|
|
33
|
+
switch (status) {
|
|
34
|
+
case "success":
|
|
35
|
+
return "text-emerald-400";
|
|
36
|
+
case "failed":
|
|
37
|
+
return "text-red-400";
|
|
38
|
+
case "running":
|
|
39
|
+
return "text-blue-400";
|
|
40
|
+
case "queued":
|
|
41
|
+
return "text-yellow-400";
|
|
42
|
+
case "cancelled":
|
|
43
|
+
return "text-[var(--muted-foreground)]";
|
|
44
|
+
default:
|
|
45
|
+
return "text-[var(--muted-foreground)]";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function formatDuration(ms: number | null): string {
|
|
50
|
+
if (ms === null) return "—";
|
|
51
|
+
if (ms < 1000) return `${ms}ms`;
|
|
52
|
+
if (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;
|
|
53
|
+
if (ms < 3_600_000) return `${Math.round(ms / 60_000)}m ${Math.round((ms % 60_000) / 1000)}s`;
|
|
54
|
+
return `${Math.round(ms / 3_600_000)}h ${Math.round((ms % 3_600_000) / 60_000)}m`;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function formatTime(iso: string | null): string {
|
|
58
|
+
if (!iso) return "—";
|
|
59
|
+
const d = new Date(iso);
|
|
60
|
+
return d.toLocaleString(undefined, {
|
|
61
|
+
month: "short",
|
|
62
|
+
day: "numeric",
|
|
63
|
+
hour: "2-digit",
|
|
64
|
+
minute: "2-digit",
|
|
65
|
+
second: "2-digit",
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export default function LinearWorkerRunLog({ jobId }: LinearWorkerRunLogProps) {
|
|
70
|
+
const [runs, setRuns] = useState<PromptRun[]>([]);
|
|
71
|
+
const [loading, setLoading] = useState(true);
|
|
72
|
+
const [expandedId, setExpandedId] = useState<string | null>(null);
|
|
73
|
+
const initialFetch = useRef(false);
|
|
74
|
+
|
|
75
|
+
const fetchRuns = useCallback(async () => {
|
|
76
|
+
if (!jobId) {
|
|
77
|
+
setLoading(false);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
const res = await fetch(`/api/prompt-jobs/${jobId}/runs`);
|
|
82
|
+
if (!res.ok) return;
|
|
83
|
+
const data = await res.json();
|
|
84
|
+
setRuns(data.runs ?? []);
|
|
85
|
+
} catch {
|
|
86
|
+
// ignore
|
|
87
|
+
} finally {
|
|
88
|
+
setLoading(false);
|
|
89
|
+
}
|
|
90
|
+
}, [jobId]);
|
|
91
|
+
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
if (!initialFetch.current) {
|
|
94
|
+
initialFetch.current = true;
|
|
95
|
+
fetchRuns();
|
|
96
|
+
}
|
|
97
|
+
}, [fetchRuns]);
|
|
98
|
+
|
|
99
|
+
// Poll for updates
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
const interval = setInterval(fetchRuns, 10_000);
|
|
102
|
+
return () => clearInterval(interval);
|
|
103
|
+
}, [fetchRuns]);
|
|
104
|
+
|
|
105
|
+
if (!jobId) {
|
|
106
|
+
return (
|
|
107
|
+
<div className="flex items-center justify-center py-16 text-sm text-[var(--muted-foreground)]">
|
|
108
|
+
No worker configured yet. Enable the worker to see run history.
|
|
109
|
+
</div>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (loading) {
|
|
114
|
+
return (
|
|
115
|
+
<div className="flex items-center gap-2 py-12 justify-center text-sm text-[var(--muted-foreground)]">
|
|
116
|
+
<RefreshCw size={14} className="animate-spin" />
|
|
117
|
+
Loading run history...
|
|
118
|
+
</div>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (runs.length === 0) {
|
|
123
|
+
return (
|
|
124
|
+
<div className="flex items-center justify-center py-16 text-sm text-[var(--muted-foreground)]">
|
|
125
|
+
No runs yet. The worker will log runs here once it starts executing.
|
|
126
|
+
</div>
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return (
|
|
131
|
+
<div className="flex flex-col gap-1">
|
|
132
|
+
{/* Header */}
|
|
133
|
+
<div className="grid grid-cols-[minmax(0,1fr)_100px_140px_140px_90px] gap-3 px-4 py-2 text-[10px] font-semibold text-[var(--muted-foreground)] uppercase tracking-widest border-b border-[var(--card-border)]">
|
|
134
|
+
<span>Status</span>
|
|
135
|
+
<span>Duration</span>
|
|
136
|
+
<span>Started</span>
|
|
137
|
+
<span>Finished</span>
|
|
138
|
+
<span>Run ID</span>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
{/* Rows */}
|
|
142
|
+
<div className="max-h-[60vh] overflow-y-auto">
|
|
143
|
+
{runs.map((run) => (
|
|
144
|
+
<div key={run.id}>
|
|
145
|
+
<button
|
|
146
|
+
type="button"
|
|
147
|
+
onClick={() => setExpandedId(expandedId === run.id ? null : run.id)}
|
|
148
|
+
className="grid w-full grid-cols-[minmax(0,1fr)_100px_140px_140px_90px] gap-3 px-4 py-2.5 text-left text-sm transition-colors hover:bg-[var(--card-bg)] rounded-lg"
|
|
149
|
+
>
|
|
150
|
+
<span className={`flex items-center gap-2 font-medium ${statusColor(run.status)}`}>
|
|
151
|
+
<StatusIcon status={run.status} />
|
|
152
|
+
{statusLabel(run.status)}
|
|
153
|
+
</span>
|
|
154
|
+
<span className="text-[var(--muted-foreground)]">
|
|
155
|
+
{formatDuration(run.durationMs)}
|
|
156
|
+
</span>
|
|
157
|
+
<span className="text-[var(--muted-foreground)]">
|
|
158
|
+
{formatTime(run.startedAt)}
|
|
159
|
+
</span>
|
|
160
|
+
<span className="text-[var(--muted-foreground)]">
|
|
161
|
+
{formatTime(run.finishedAt)}
|
|
162
|
+
</span>
|
|
163
|
+
<span className="text-[var(--muted-foreground)] font-mono text-xs truncate">
|
|
164
|
+
{run.id.slice(0, 8)}
|
|
165
|
+
</span>
|
|
166
|
+
</button>
|
|
167
|
+
|
|
168
|
+
{/* Expanded detail */}
|
|
169
|
+
{expandedId === run.id && (run.output || run.error) && (
|
|
170
|
+
<div className="mx-4 mb-2 rounded-lg border border-[var(--card-border)] bg-[var(--muted)] overflow-hidden">
|
|
171
|
+
{run.error && (
|
|
172
|
+
<div className="px-4 py-3 border-b border-[var(--card-border)]">
|
|
173
|
+
<div className="text-[10px] font-semibold text-red-400 uppercase tracking-widest mb-1">Error</div>
|
|
174
|
+
<pre className="text-xs text-red-300 whitespace-pre-wrap font-mono">{run.error}</pre>
|
|
175
|
+
</div>
|
|
176
|
+
)}
|
|
177
|
+
{run.output && (
|
|
178
|
+
<div className="px-4 py-3">
|
|
179
|
+
<div className="text-[10px] font-semibold text-[var(--muted-foreground)] uppercase tracking-widest mb-1">Output</div>
|
|
180
|
+
<pre className="text-xs text-[var(--foreground)] whitespace-pre-wrap font-mono max-h-[300px] overflow-y-auto">{run.output}</pre>
|
|
181
|
+
</div>
|
|
182
|
+
)}
|
|
183
|
+
</div>
|
|
184
|
+
)}
|
|
185
|
+
</div>
|
|
186
|
+
))}
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
);
|
|
190
|
+
}
|
package/cloud-runtime/standalone/apps/local/components/projects/ObjectiveScheduledTasksPanel.tsx
CHANGED
|
@@ -577,41 +577,45 @@ export function ObjectiveScheduledTasksPanel({
|
|
|
577
577
|
const isFailed = run.status === "failed";
|
|
578
578
|
const isRunning = run.status === "running";
|
|
579
579
|
return (
|
|
580
|
-
<div
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
<span className={`block size-1.5 rounded-full ${isRunning ? "bg-sky-400 animate-pulse" : "bg-current"}`} />
|
|
601
|
-
)}
|
|
602
|
-
</span>
|
|
603
|
-
<span className="truncate text-[var(--muted-foreground)]">
|
|
604
|
-
{run.jobName}
|
|
605
|
-
</span>
|
|
606
|
-
<span className="ml-auto shrink-0 text-[11px] text-[var(--muted-foreground)]">
|
|
607
|
-
{formatDateTime(ts)}
|
|
608
|
-
</span>
|
|
609
|
-
{run.durationMs != null && (
|
|
610
|
-
<span className="shrink-0 font-mono text-[11px] text-[var(--muted-foreground)]">
|
|
611
|
-
{run.durationMs < 1000
|
|
612
|
-
? `${run.durationMs}ms`
|
|
613
|
-
: `${Math.round(run.durationMs / 1000)}s`}
|
|
580
|
+
<div key={run.id} className="py-2 px-2 rounded-md text-xs">
|
|
581
|
+
<div className="flex items-center gap-3">
|
|
582
|
+
<span
|
|
583
|
+
className={`flex size-5 shrink-0 items-center justify-center rounded-full border ${
|
|
584
|
+
isSuccess
|
|
585
|
+
? "border-emerald-500/40 text-emerald-400"
|
|
586
|
+
: isFailed
|
|
587
|
+
? "border-[var(--status-failed-border)] text-[var(--destructive)]"
|
|
588
|
+
: isRunning
|
|
589
|
+
? "border-sky-500/40 text-sky-400"
|
|
590
|
+
: "border-[var(--border)] text-[var(--muted-foreground)]"
|
|
591
|
+
}`}
|
|
592
|
+
>
|
|
593
|
+
{isSuccess ? (
|
|
594
|
+
<Check className="h-3 w-3" />
|
|
595
|
+
) : isFailed ? (
|
|
596
|
+
<XCircle className="h-3 w-3" />
|
|
597
|
+
) : (
|
|
598
|
+
<span className={`block size-1.5 rounded-full ${isRunning ? "bg-sky-400 animate-pulse" : "bg-current"}`} />
|
|
599
|
+
)}
|
|
614
600
|
</span>
|
|
601
|
+
<span className="truncate text-[var(--muted-foreground)]">
|
|
602
|
+
{run.jobName}
|
|
603
|
+
</span>
|
|
604
|
+
<span className="ml-auto shrink-0 text-[11px] text-[var(--muted-foreground)]">
|
|
605
|
+
{formatDateTime(ts)}
|
|
606
|
+
</span>
|
|
607
|
+
{run.durationMs != null && (
|
|
608
|
+
<span className="shrink-0 font-mono text-[11px] text-[var(--muted-foreground)]">
|
|
609
|
+
{run.durationMs < 1000
|
|
610
|
+
? `${run.durationMs}ms`
|
|
611
|
+
: `${Math.round(run.durationMs / 1000)}s`}
|
|
612
|
+
</span>
|
|
613
|
+
)}
|
|
614
|
+
</div>
|
|
615
|
+
{isFailed && run.error && (
|
|
616
|
+
<p className="mt-1 ml-8 text-[11px] leading-snug text-[var(--destructive)] opacity-80 line-clamp-2">
|
|
617
|
+
{run.error}
|
|
618
|
+
</p>
|
|
615
619
|
)}
|
|
616
620
|
</div>
|
|
617
621
|
);
|
|
@@ -87,6 +87,35 @@ function WorkspaceSidebarBrandLogo({ compact = false }: { compact?: boolean }) {
|
|
|
87
87
|
);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
+
function RailTooltip({ label, children }: { label: string; children: React.ReactElement }) {
|
|
91
|
+
const ref = useRef<HTMLDivElement>(null);
|
|
92
|
+
const [pos, setPos] = useState<{ top: number; left: number } | null>(null);
|
|
93
|
+
|
|
94
|
+
const show = () => {
|
|
95
|
+
const el = ref.current;
|
|
96
|
+
if (!el) return;
|
|
97
|
+
const rect = el.getBoundingClientRect();
|
|
98
|
+
setPos({ top: rect.top + rect.height / 2, left: rect.right + 8 });
|
|
99
|
+
};
|
|
100
|
+
const hide = () => setPos(null);
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<div ref={ref} onMouseEnter={show} onMouseLeave={hide} style={{ display: "contents" }}>
|
|
104
|
+
{children}
|
|
105
|
+
{pos &&
|
|
106
|
+
createPortal(
|
|
107
|
+
<div
|
|
108
|
+
className="workspace-sidebar__rail-tooltip"
|
|
109
|
+
style={{ top: pos.top, left: pos.left, transform: "translateY(-50%)" }}
|
|
110
|
+
>
|
|
111
|
+
{label}
|
|
112
|
+
</div>,
|
|
113
|
+
document.body,
|
|
114
|
+
)}
|
|
115
|
+
</div>
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
90
119
|
function ProjectDropdown({
|
|
91
120
|
projects,
|
|
92
121
|
activeProjectId,
|
|
@@ -127,7 +156,7 @@ function ProjectDropdown({
|
|
|
127
156
|
}, [open]);
|
|
128
157
|
|
|
129
158
|
return (
|
|
130
|
-
<div className="px-3 pt-3 pb-2" ref={dropdownRef}>
|
|
159
|
+
<div className="relative px-3 pt-3 pb-2" ref={dropdownRef}>
|
|
131
160
|
<button
|
|
132
161
|
type="button"
|
|
133
162
|
onClick={() => setOpen(!open)}
|
|
@@ -139,7 +168,7 @@ function ProjectDropdown({
|
|
|
139
168
|
</button>
|
|
140
169
|
|
|
141
170
|
{open && (
|
|
142
|
-
<div className="mt-1 rounded-lg border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] shadow-lg overflow-hidden">
|
|
171
|
+
<div className="absolute left-3 right-3 z-50 mt-1 rounded-lg border border-[var(--app-shell-border)] bg-[var(--app-shell-elevated)] shadow-lg overflow-hidden">
|
|
143
172
|
<div className="p-2 border-b border-[var(--app-shell-border)]">
|
|
144
173
|
<div className="flex items-center gap-2 rounded-md border border-[var(--app-shell-border)] bg-[var(--app-shell-subtle)] px-2 py-1.5">
|
|
145
174
|
<Search size={12} className="flex-shrink-0 text-[var(--muted-foreground)]" />
|
|
@@ -695,6 +724,9 @@ export function WorkspaceSidebar({
|
|
|
695
724
|
return null;
|
|
696
725
|
}
|
|
697
726
|
|
|
727
|
+
const collapsedProject = nonDefaultProjects.find((p) => p.id === activeProjectId) ?? nonDefaultProjects[0];
|
|
728
|
+
const collapsedSlug = collapsedProject?.slug;
|
|
729
|
+
|
|
698
730
|
return (
|
|
699
731
|
<aside
|
|
700
732
|
id="workspace-sidebar"
|
|
@@ -712,21 +744,90 @@ export function WorkspaceSidebar({
|
|
|
712
744
|
<WorkspaceSidebarBrandLogo compact />
|
|
713
745
|
</button>
|
|
714
746
|
</div>
|
|
747
|
+
|
|
748
|
+
{collapsedSlug && (
|
|
749
|
+
<nav className="workspace-sidebar__collapsed-rail">
|
|
750
|
+
<RailTooltip label="Home">
|
|
751
|
+
<Link href={`/projects/${collapsedSlug}`} className={`workspace-sidebar__rail-icon${activeProjectView === "home" ? " workspace-sidebar__rail-icon--active" : ""}`}>
|
|
752
|
+
<Home size={16} />
|
|
753
|
+
</Link>
|
|
754
|
+
</RailTooltip>
|
|
755
|
+
|
|
756
|
+
<div className="workspace-sidebar__rail-separator" />
|
|
757
|
+
|
|
758
|
+
<RailTooltip label="Objectives">
|
|
759
|
+
<Link href={`/projects/${collapsedSlug}/objectives`} className={`workspace-sidebar__rail-icon${activeProjectView === "objectives" ? " workspace-sidebar__rail-icon--active" : ""}`}>
|
|
760
|
+
<Target size={16} />
|
|
761
|
+
</Link>
|
|
762
|
+
</RailTooltip>
|
|
763
|
+
<RailTooltip label="Linear">
|
|
764
|
+
<Link href={`/projects/${collapsedSlug}/linear`} className={`workspace-sidebar__rail-icon${activeProjectView === "linear" ? " workspace-sidebar__rail-icon--active" : ""}`}>
|
|
765
|
+
<LinearIcon size={16} />
|
|
766
|
+
</Link>
|
|
767
|
+
</RailTooltip>
|
|
768
|
+
<RailTooltip label="Scheduled Tasks">
|
|
769
|
+
<Link href={`/projects/${collapsedSlug}/automations`} className={`workspace-sidebar__rail-icon${activeProjectView === "automations" ? " workspace-sidebar__rail-icon--active" : ""}`}>
|
|
770
|
+
<Zap size={16} />
|
|
771
|
+
</Link>
|
|
772
|
+
</RailTooltip>
|
|
773
|
+
|
|
774
|
+
<div className="workspace-sidebar__rail-separator" />
|
|
775
|
+
|
|
776
|
+
<RailTooltip label="Terminal">
|
|
777
|
+
<Link href={`/projects/${collapsedSlug}/terminal`} className={`workspace-sidebar__rail-icon${activeProjectView === "terminal" ? " workspace-sidebar__rail-icon--active" : ""}`}>
|
|
778
|
+
<TerminalSquare size={16} />
|
|
779
|
+
</Link>
|
|
780
|
+
</RailTooltip>
|
|
781
|
+
<RailTooltip label="Chat">
|
|
782
|
+
<button
|
|
783
|
+
type="button"
|
|
784
|
+
className={`workspace-sidebar__rail-icon${activeProjectView === "thread" ? " workspace-sidebar__rail-icon--active" : ""}`}
|
|
785
|
+
onClick={() => {
|
|
786
|
+
const projectThreads = sortedWorkspaces.filter((t) => collapsedProject.thread_ids?.includes(t.id));
|
|
787
|
+
const threadId = collapsedProject.thread_ids?.find((id) => threads.some((t) => t.id === id)) ?? projectThreads[0]?.id;
|
|
788
|
+
if (threadId) onSelectThread(threadId);
|
|
789
|
+
}}
|
|
790
|
+
>
|
|
791
|
+
<MessageSquare size={16} />
|
|
792
|
+
</button>
|
|
793
|
+
</RailTooltip>
|
|
794
|
+
|
|
795
|
+
<div className="workspace-sidebar__rail-separator" />
|
|
796
|
+
|
|
797
|
+
<RailTooltip label="Teams">
|
|
798
|
+
<Link href={`/projects/${collapsedSlug}/teams`} className={`workspace-sidebar__rail-icon${activeProjectView === "teams" ? " workspace-sidebar__rail-icon--active" : ""}`}>
|
|
799
|
+
<Users size={16} />
|
|
800
|
+
</Link>
|
|
801
|
+
</RailTooltip>
|
|
802
|
+
<RailTooltip label="Folders">
|
|
803
|
+
<Link href={`/projects/${collapsedSlug}/folders`} className={`workspace-sidebar__rail-icon${activeProjectView === "folders" ? " workspace-sidebar__rail-icon--active" : ""}`}>
|
|
804
|
+
<FolderGit2 size={16} />
|
|
805
|
+
</Link>
|
|
806
|
+
</RailTooltip>
|
|
807
|
+
<RailTooltip label="Env Variables">
|
|
808
|
+
<Link href={`/projects/${collapsedSlug}/env-vars`} className={`workspace-sidebar__rail-icon${activeProjectView === "env-vars" ? " workspace-sidebar__rail-icon--active" : ""}`}>
|
|
809
|
+
<KeyRound size={16} />
|
|
810
|
+
</Link>
|
|
811
|
+
</RailTooltip>
|
|
812
|
+
</nav>
|
|
813
|
+
)}
|
|
814
|
+
|
|
715
815
|
<div className="mt-auto p-2">
|
|
716
|
-
<
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
816
|
+
<RailTooltip label="Join Discord">
|
|
817
|
+
<a
|
|
818
|
+
href="https://discord.gg/G9afUYKKY3"
|
|
819
|
+
target="_blank"
|
|
820
|
+
rel="noopener noreferrer"
|
|
821
|
+
className="workspace-sidebar__rail-icon"
|
|
822
|
+
style={{ backgroundColor: '#5865F2', color: 'white' }}
|
|
823
|
+
onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#4752C4')}
|
|
824
|
+
onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = '#5865F2')}
|
|
825
|
+
>
|
|
826
|
+
<svg width="14" height="14" viewBox="0 0 71 55" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
827
|
+
<path d="M60.1 4.9A58.5 58.5 0 0045.4.2a.2.2 0 00-.2.1 40.8 40.8 0 00-1.8 3.7 54 54 0 00-16.2 0A37.4 37.4 0 0025.4.3a.2.2 0 00-.2-.1A58.4 58.4 0 0010.5 4.9a.2.2 0 00-.1.1C1.5 18.7-.9 32.2.3 45.5v.1a58.8 58.8 0 0017.7 9a.2.2 0 00.3-.1 42 42 0 003.6-5.9.2.2 0 00-.1-.3 38.8 38.8 0 01-5.5-2.6.2.2 0 01 0-.4l1.1-.9a.2.2 0 01.2 0 42 42 0 0035.6 0 .2.2 0 01.2 0l1.1.9a.2.2 0 010 .4 36.4 36.4 0 01-5.5 2.6.2.2 0 00-.1.3 47.2 47.2 0 003.6 5.9.2.2 0 00.3.1 58.6 58.6 0 0017.7-9v-.1c1.4-15.2-2.4-28.4-10-40.1a.2.2 0 00-.1-.1zM23.7 37.3c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7zm23.3 0c-3.5 0-6.3-3.2-6.3-7s2.8-7 6.3-7 6.4 3.2 6.3 7-2.8 7-6.3 7z"/>
|
|
828
|
+
</svg>
|
|
829
|
+
</a>
|
|
830
|
+
</RailTooltip>
|
|
730
831
|
</div>
|
|
731
832
|
</aside>
|
|
732
833
|
);
|
|
@@ -807,7 +908,7 @@ export function WorkspaceSidebar({
|
|
|
807
908
|
return (
|
|
808
909
|
<nav className="workspace-sidebar__section">
|
|
809
910
|
{/* Home (standalone) */}
|
|
810
|
-
<div className="px-2 mb-3">
|
|
911
|
+
<div className="px-2 mt-2 mb-3">
|
|
811
912
|
<div className="workspace-sidebar__workspace-item">
|
|
812
913
|
<Link
|
|
813
914
|
href={`/projects/${selectedProject.slug}`}
|