@mndrk/agx 2.4.5 → 2.4.6
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 +2 -2
- package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_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/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/integrations/github/select-repos/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github/select-repos/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github/select-repos.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations/github.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/integrations/github/select-repos.segments/integrations.segment.rsc +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.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/notifications/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/notifications/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]/prs/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/prs/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/[tracker]/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/connect/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page.js.nft.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/tracking/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.html +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_head.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_index.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_tree.segment.rsc +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status/__PAGE__.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status.segment.rsc +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__23838f87._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__a61463b8._.js +7 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ecd68e8._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_5c140c38._.js +7 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_30d021de._.js +3 -0
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_988d29c0._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_teams_[teamId]_page_tsx_6dcfdd52._.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_PromptJobBoard_tsx_281b2873._.js +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_projects_ProjectObjectivesWorkspace_tsx_751ab3d3._.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 +2 -2
- package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
- package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/692103d55fcd0328.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{8b5d6f5bade8c4ea.js → 8d8fe711583a59f0.js} +2 -2
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/92467c495ad08a85.js +5 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/add53c2fe147af75.css +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/d662272e49df1950.js +20 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/e0d68c6af17c8c87.js +1 -0
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/{93b2b6aa0c9593f6.js → e6d4118b7c32d11c.js} +1 -1
- package/cloud-runtime/standalone/apps/local/app/projects/[slug]/teams/[teamId]/page.tsx +58 -2
- package/cloud-runtime/standalone/apps/local/components/PromptJobBoard.tsx +73 -33
- package/cloud-runtime/standalone/apps/local/components/projects/ObjectiveScheduledTasksPanel.tsx +78 -239
- package/cloud-runtime/standalone/apps/local/components/thread/WorkspaceSidebar.tsx +2 -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/[root-of-the-server]__7e3c2ea1._.js +0 -7
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__dbda910b._.js +0 -7
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_917d90b4._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_a2835b49._.js +0 -3
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/55a31773f8c2833f.js +0 -20
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/7c8515a24aeea102.js +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/80446e085a3aad56.css +0 -1
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/9c29ef447bef1576.js +0 -5
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/a9111ccc979d4933.js +0 -5
- package/cloud-runtime/standalone/apps/local/.next/static/chunks/d2b34ade19d9d8da.js +0 -1
- /package/cloud-runtime/standalone/apps/local/.next/static/{C3-tP4djbU34_g7VoIFac → fipnHmd6JPn9sTuFdYS0y}/_buildManifest.js +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{C3-tP4djbU34_g7VoIFac → fipnHmd6JPn9sTuFdYS0y}/_clientMiddlewareManifest.json +0 -0
- /package/cloud-runtime/standalone/apps/local/.next/static/{C3-tP4djbU34_g7VoIFac → fipnHmd6JPn9sTuFdYS0y}/_ssgManifest.js +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
module.exports=[393041,a=>{"use strict";var b=a.i(308316),c=a.i(786220),d=a.i(639211),e=a.i(837554),f=a.i(73948),g=a.i(697183),h=a.i(353532),i=a.i(824179),j=a.i(820859),k=a.i(356239),l=a.i(864061),m=a.i(811760);let n=(0,a.i(831709).default)("settings-2",[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);var o=a.i(667597),p=a.i(252197),q=a.i(724938),r=a.i(520612),s=a.i(296037),t=a.i(155829),u=a.i(496368),v=a.i(86007),w=a.i(734709),x=a.i(475632),y=a.i(785061),z=a.i(736303),A=a.i(201485);let B=[{value:"prompt",label:"Prompt",description:"Run a prompt on a schedule"},{value:"linear_worker",label:"Linear Worker",description:"Observe Linear workspace and decide what to work on"}],C=(0,e.default)(async()=>{},{loadableGenerated:{modules:[844118]},ssr:!1}),D=(0,e.default)(async()=>{},{loadableGenerated:{modules:[668610]},ssr:!1});function E(a){return"active"===a.state&&(null!==a.nextRunAt&&a.nextRunAt-Date.now()<0?!a.lastRunAt||!(a.lastRunAt>=a.nextRunAt):!!a.prevScheduledAt&&!!a.lastRunAt&&a.lastRunAt>a.prevScheduledAt+3e5)}function F(a,b){if("paused"===b)return"Paused";if("stopped"===b)return"Stopped";if(null===a)return"Pending...";let c=a-Date.now();return c<0?"Overdue":c<6e4?`in ${Math.round(c/1e3)}s`:c<36e5?`in ${Math.round(c/6e4)}m`:c<864e5?`in ${Math.round(c/36e5)}h`:`in ${Math.round(c/864e5)}d`}function G(a){if(!a)return"—";let b=new Date(a);return b.toLocaleDateString("en-US",{month:"short",day:"numeric"})+", "+b.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit"})}function H({children:a}){return(0,b.jsx)("div",{className:"text-[10px] font-bold uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:a})}function I({children:a}){return(0,b.jsx)("label",{className:"block text-[10px] font-semibold text-[var(--muted-foreground)] uppercase tracking-widest mb-2",children:a})}function J(a,b,c=24){let d=b?b.replace("#",""):"e2e8f0";return`https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${encodeURIComponent(a)}&size=${c}&backgroundColor=${d}`}function K({agents:a,value:d,onChange:e}){let[f,g]=(0,c.useState)(!1),h=a.find(a=>a.id===d);return(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(I,{children:"Agent"}),(0,b.jsxs)("button",{type:"button",onClick:()=>g(!f),className:"w-full flex items-center gap-2.5 px-3 py-2.5 rounded-lg border border-[var(--card-border)] bg-[var(--muted)] text-left transition-colors hover:border-[var(--muted-foreground)]",children:[h?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("img",{src:J(h.id,h.color),alt:"",className:"size-6 rounded-full shrink-0"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)] truncate",children:h.name}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[h.provider,h.model?` / ${h.model}`:""]})]})]}):(0,b.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:"Select an agent..."}),(0,b.jsx)(m.ChevronDown,{size:14,className:`ml-auto text-[var(--muted-foreground)] transition-transform ${f?"rotate-180":""}`})]}),f&&(0,b.jsx)("div",{className:"absolute z-20 mt-1 w-full rounded-lg border border-[var(--card-border)] bg-[var(--card-bg)] shadow-lg max-h-[280px] overflow-y-auto",children:a.map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>{e(a.id),g(!1)},className:`w-full flex items-center gap-2.5 px-3 py-2.5 text-left transition-colors hover:bg-[var(--muted)] ${d===a.id?"bg-[var(--muted)]":""}`,children:[(0,b.jsx)("img",{src:J(a.id,a.color),alt:"",className:"size-6 rounded-full shrink-0"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)] truncate",children:a.name}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[a.provider,a.model?` / ${a.model}`:""]})]}),d===a.id&&(0,b.jsx)("span",{className:"text-xs text-[var(--foreground)]",children:"✓"})]},a.id))})]})}function L({onClose:a,onSubmit:d,editingJob:e,createDefaults:f,contextLabel:g}){let[h,j]=(0,c.useState)([]),[k,l]=(0,c.useState)(e?.executionMode??f?.executionMode??"prompt"),[o,p]=(0,c.useState)(e?.name??f?.name??""),[q,r]=(0,c.useState)(e?.prompt??f?.prompt??""),[s,t]=(0,c.useState)(e?.agentId??f?.agentId??""),[u,v]=(0,c.useState)(e?.provider??f?.provider??"claude"),[w,x]=(0,c.useState)(e?.model??f?.model??"");(0,c.useEffect)(()=>{fetch("/api/prompt-jobs/agents").then(a=>a.json()).then(a=>j(a.agents??[])).catch(a=>console.warn("[PromptJobBoard] fetch agents failed:",a))},[]);let[y,z]=(0,c.useState)(e?.cliArgs??f?.cliArgs??""),[B,C]=(0,c.useState)(e?.cronExpr||e?.cadence||f?.cadence||""),[E,F]=(0,c.useState)(e?.condition??f?.condition??""),[G,H]=(0,c.useState)(!!(e?.cronExpr||e?.cadence||f?.cadence)),[J,L]=(0,c.useState)(e?.catchUpPolicy??f?.catchUpPolicy??"fire_once"),[M,N]=(0,c.useState)(!!e?.cliArgs||!!f?.cliArgs||e?.catchUpPolicy!=null&&"fire_once"!==e.catchUpPolicy||f?.catchUpPolicy!=null&&"fire_once"!==f.catchUpPolicy),[O,P]=(0,c.useState)(!1),Q=async b=>{b.preventDefault(),o.trim()&&q.trim()&&B.trim()&&G&&(P(!0),await d({name:o.trim(),prompt:q.trim(),agentId:s,provider:u,model:w.trim(),cliArgs:y.trim(),catchUpPolicy:J,cadence:B.trim(),condition:E.trim(),executionMode:k}),P(!1),a())};return(0,b.jsxs)("div",{className:"h-full flex flex-col text-[var(--foreground)]",children:[(0,b.jsxs)("div",{className:"h-14 shrink-0 border-b border-[var(--card-border)] flex items-center justify-between px-6",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("button",{onClick:a,className:"p-1.5 rounded-md text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--muted)] transition-colors",children:(0,b.jsx)(i.X,{size:18})}),(0,b.jsx)("h2",{className:"text-sm font-semibold",children:e?"Edit Scheduled Task":"New Scheduled Task"}),g?(0,b.jsx)("span",{className:"rounded-full border border-sky-500/25 bg-sky-500/10 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] text-sky-100",children:g}):null]}),(0,b.jsx)("button",{onClick:Q,disabled:O||!o.trim()||!q.trim()||!B.trim()||!G,className:"px-5 py-2 rounded-lg text-sm font-medium bg-[var(--foreground)] text-[var(--background)] hover:opacity-90 disabled:opacity-40 transition-opacity",children:O?"Saving...":e?"Save Changes":"Create Task"})]}),(0,b.jsxs)("div",{className:"flex flex-1 min-h-0 overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex-1 border-r border-[var(--card-border)] flex flex-col min-w-0",children:[(0,b.jsx)("div",{className:"px-8 pt-8 pb-4",children:(0,b.jsx)("input",{type:"text",value:o,onChange:a=>p(a.target.value),placeholder:"Untitled job",className:"w-full text-2xl font-bold bg-transparent border-none outline-none placeholder:text-[var(--muted-foreground)]/40 text-[var(--foreground)]",autoFocus:!0})}),(0,b.jsxs)("div",{className:"flex-1 px-8 pb-8 overflow-y-auto",children:[(0,b.jsx)(I,{children:"Instructions"}),(0,b.jsx)("div",{className:"bg-[var(--card-bg)] border border-[var(--card-border)] rounded-xl overflow-hidden min-h-[300px]",children:(0,b.jsx)(D,{content:q,onChange:a=>r(a),placeholder:"Describe what this prompt should do..."})})]})]}),(0,b.jsxs)("div",{className:"w-[380px] shrink-0 overflow-y-auto p-6 space-y-6",children:[(0,b.jsx)(K,{agents:h,value:s,onChange:a=>{t(a);let b=h.find(b=>b.id===a);b?(v(b.provider),x(b.model??"")):(v("claude"),x(""))}}),(0,b.jsx)(A.ScheduleConditionPicker,{value:{cadence:B,condition:E},onChange:(a,b)=>{C(a.cadence),F(a.condition),H(b.isScheduleValid)},scheduleLabel:"Schedule",conditionLabel:"Condition",conditionHelpText:"Scheduled runs and Run now will check this condition before executing."}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("button",{type:"button",onClick:()=>N(!M),className:"flex items-center gap-1.5 text-[11px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:[(0,b.jsx)(n,{size:12})," ",M?"Hide":"Show"," advanced",(0,b.jsx)(m.ChevronDown,{size:12,className:`transition-transform ${M?"rotate-180":""}`})]}),M&&(0,b.jsxs)("div",{className:"mt-3 space-y-3 pt-3 border-t border-[var(--card-border)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)(I,{children:"CLI Arguments"}),(0,b.jsx)("input",{type:"text",value:y,onChange:a=>z(a.target.value),placeholder:"--dangerously-skip-permissions",className:"w-full bg-[var(--muted)] border border-[var(--card-border)] rounded-lg px-3 py-2 text-sm text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:border-[var(--foreground)] transition-colors"}),(0,b.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] mt-1",children:"Extra flags passed to the CLI command."})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)(I,{children:"When missed"}),(0,b.jsx)("div",{className:"space-y-1.5",children:[{id:"fire_once",label:"Run once on recovery",desc:"Execute a single run regardless of how many were missed"},{id:"replay_all",label:"Run all missed",desc:"Queue one run per missed occurrence (use with caution)"},{id:"skip",label:"Skip and wait for next",desc:"Discard missed runs, wait for the next scheduled time"}].map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>L(a.id),className:`w-full text-left px-3 py-2 rounded-lg border transition-all ${J===a.id?"border-[var(--foreground)] bg-[var(--foreground)]/5":"border-[var(--card-border)] bg-[var(--muted)] hover:border-[var(--muted-foreground)]"}`,children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)]",children:a.label}),(0,b.jsx)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:a.desc})]},a.id))})]})]})]})]})]})]})}function M(a){let b=Math.floor(a/1e3);if(b<60)return`${b}s`;let c=Math.floor(b/60);if(c<60)return`${c}m ${b%60}s`;let d=Math.floor(c/60);return`${d}h ${c%60}m`}function N(a){return a?new Date(a).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"—"}function O({run:a,job:d,agentMap:e,onCancelRun:f,onRerun:g}){let h=`prompt-run:${a.id}`,n=d.agentId&&e[d.agentId]?e[d.agentId].name:null,o=d.agentId?e[d.agentId]:null,r="running"===a.status||"queued"===a.status,s=function(a,b){let[d,e]=(0,c.useState)(null);return(0,c.useEffect)(()=>{if(!a||!b)return void e(null);let c=new Date(a).getTime(),d=()=>e(Math.max(0,Date.now()-c));d();let f=setInterval(d,1e3);return()=>clearInterval(f)},[a,b]),d}(a.startedAt,"running"===a.status),[w,z]=(0,c.useState)(!1),[A,B]=(0,c.useState)(new Set);(0,c.useEffect)(()=>{d.projectId&&fetch(`/api/projects/${encodeURIComponent(d.projectId)}/agents`).then(a=>a.json()).then(a=>{B(new Set((a.agents??[]).map(a=>a.agent_id)))}).catch(a=>console.warn("[PromptJobBoard] fetch project agents failed:",a))},[d.projectId]);let D=(0,c.useMemo)(()=>Object.values(e).filter(a=>A.has(a.id)).map(a=>({id:a.id,name:a.name,title:a.title??void 0,provider:a.provider??"claude",model:a.model,color:a.color})),[e,A]),E=(0,c.useMemo)(()=>`run-root:${a.id}`,[a.id]),{messages:F,setMessages:G,sendMessage:H,loadHistory:I,chatRuns:K,stop:L}=(0,t.useGroupChat)(h),{processes:O,streaming:P,chatRuns:Q}=(0,u.useProcessPolling)({workspaceId:h,threadId:E},{messages:F,setMessages:G}),R=(0,c.useMemo)(()=>{let a=[...K];for(let b of Q)a.some(a=>a.chatRunId===b.chatRunId)||a.push(b);return a},[K,Q]),S=R.some(a=>"queued"===a.status||"running"===a.status)||O.some(a=>"spawning"===a.state||"running"===a.state),T=S?R.some(a=>"queued"===a.status)?"queued":"working":"ready",U=(0,c.useRef)(!1);(0,c.useEffect)(()=>{I().then(()=>{if(!U.current){U.current=!0;let b=a.output?`[Automation run output]
|
|
1
|
+
module.exports=[393041,a=>{"use strict";var b=a.i(308316),c=a.i(786220),d=a.i(639211),e=a.i(837554),f=a.i(73948),g=a.i(697183),h=a.i(353532),i=a.i(824179),j=a.i(820859),k=a.i(356239),l=a.i(864061),m=a.i(811760);let n=(0,a.i(831709).default)("settings-2",[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]);var o=a.i(667597),p=a.i(252197),q=a.i(724938),r=a.i(542341),s=a.i(520612),t=a.i(296037),u=a.i(155829),v=a.i(496368),w=a.i(86007),x=a.i(734709),y=a.i(475632),z=a.i(785061),A=a.i(736303),B=a.i(201485);let C=[{value:"prompt",label:"Prompt",description:"Run a prompt on a schedule"},{value:"linear_worker",label:"Linear Worker",description:"Observe Linear workspace and decide what to work on"}],D=(0,e.default)(async()=>{},{loadableGenerated:{modules:[844118]},ssr:!1}),E=(0,e.default)(async()=>{},{loadableGenerated:{modules:[668610]},ssr:!1});function F(a){return"active"===a.state&&(null!==a.nextRunAt&&a.nextRunAt-Date.now()<0?!a.lastRunAt||!(a.lastRunAt>=a.nextRunAt):!!a.prevScheduledAt&&!!a.lastRunAt&&a.lastRunAt>a.prevScheduledAt+3e5)}function G(a,b){if("paused"===b)return"Paused";if("stopped"===b)return"Stopped";if(null===a)return"Pending...";let c=a-Date.now();return c<0?"Overdue":c<6e4?`in ${Math.round(c/1e3)}s`:c<36e5?`in ${Math.round(c/6e4)}m`:c<864e5?`in ${Math.round(c/36e5)}h`:`in ${Math.round(c/864e5)}d`}function H(a){if(!a)return"—";let b=new Date(a);return b.toLocaleDateString("en-US",{month:"short",day:"numeric"})+", "+b.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit"})}function I({children:a}){return(0,b.jsx)("div",{className:"text-[10px] font-bold uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:a})}function J({children:a}){return(0,b.jsx)("label",{className:"block text-[10px] font-semibold text-[var(--muted-foreground)] uppercase tracking-widest mb-2",children:a})}function K(a,b,c=24){let d=b?b.replace("#",""):"e2e8f0";return`https://api.dicebear.com/9.x/bottts-neutral/svg?seed=${encodeURIComponent(a)}&size=${c}&backgroundColor=${d}`}function L({agents:a,value:d,onChange:e}){let[f,g]=(0,c.useState)(!1),[h,i]=(0,c.useState)(""),j=a.find(a=>a.id===d);(0,c.useEffect)(()=>{f||i("")},[f]);let k=h.trim().toLowerCase(),l=k?a.filter(a=>a.name.toLowerCase().includes(k)||a.provider.toLowerCase().includes(k)||(a.model??"").toLowerCase().includes(k)):a;return(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(J,{children:"Agent"}),(0,b.jsxs)("button",{type:"button",onClick:()=>g(!f),className:"w-full flex items-center gap-2.5 px-3 py-2.5 rounded-lg border border-[var(--card-border)] bg-[var(--muted)] text-left transition-colors hover:border-[var(--muted-foreground)]",children:[j?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("img",{src:K(j.id,j.color),alt:"",className:"size-6 rounded-full shrink-0"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)] truncate",children:j.name}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[j.provider,j.model?` / ${j.model}`:""]})]})]}):(0,b.jsx)("span",{className:"text-xs text-[var(--muted-foreground)]",children:"Select an agent..."}),(0,b.jsx)(m.ChevronDown,{size:14,className:`ml-auto text-[var(--muted-foreground)] transition-transform ${f?"rotate-180":""}`})]}),f&&(0,b.jsxs)("div",{className:"absolute z-20 mt-1 w-full rounded-lg border border-[var(--card-border)] bg-[var(--card-bg)] shadow-lg flex flex-col max-h-[320px]",children:[(0,b.jsx)("div",{className:"sticky top-0 shrink-0 border-b border-[var(--card-border)] bg-[var(--card-bg)] px-2 py-2",children:(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(r.Search,{size:12,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-[var(--muted-foreground)]"}),(0,b.jsx)("input",{type:"text",value:h,onChange:a=>i(a.target.value),autoFocus:!0,placeholder:"Search agents...",className:"w-full rounded-md border border-[var(--card-border)] bg-[var(--muted)] pl-7 pr-2 py-1.5 text-xs text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:border-[var(--foreground)]"})]})}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:0===l.length?(0,b.jsxs)("div",{className:"px-3 py-4 text-center text-[11px] text-[var(--muted-foreground)]",children:['No agents match "',h,'"']}):l.map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>{e(a.id),g(!1)},className:`w-full flex items-center gap-2.5 px-3 py-2.5 text-left transition-colors hover:bg-[var(--muted)] ${d===a.id?"bg-[var(--muted)]":""}`,children:[(0,b.jsx)("img",{src:K(a.id,a.color),alt:"",className:"size-6 rounded-full shrink-0"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)] truncate",children:a.name}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:[a.provider,a.model?` / ${a.model}`:""]})]}),d===a.id&&(0,b.jsx)("span",{className:"text-xs text-[var(--foreground)]",children:"✓"})]},a.id))})]})]})}function M({onClose:a,onSubmit:d,editingJob:e,createDefaults:f,contextLabel:g}){let[h,j]=(0,c.useState)([]),[k,l]=(0,c.useState)(e?.executionMode??f?.executionMode??"prompt"),[o,p]=(0,c.useState)(e?.name??f?.name??""),[q,r]=(0,c.useState)(e?.prompt??f?.prompt??""),[s,t]=(0,c.useState)(e?.agentId??f?.agentId??""),[u,v]=(0,c.useState)(e?.provider??f?.provider??"claude"),[w,x]=(0,c.useState)(e?.model??f?.model??"");(0,c.useEffect)(()=>{fetch("/api/prompt-jobs/agents").then(a=>a.json()).then(a=>j(a.agents??[])).catch(a=>console.warn("[PromptJobBoard] fetch agents failed:",a))},[]);let[y,z]=(0,c.useState)(e?.cliArgs??f?.cliArgs??""),[A,C]=(0,c.useState)(e?.cronExpr||e?.cadence||f?.cadence||""),[D,F]=(0,c.useState)(e?.condition??f?.condition??""),[G,H]=(0,c.useState)(!!(e?.cronExpr||e?.cadence||f?.cadence)),[I,K]=(0,c.useState)(e?.catchUpPolicy??f?.catchUpPolicy??"fire_once"),[M,N]=(0,c.useState)(!!e?.cliArgs||!!f?.cliArgs||e?.catchUpPolicy!=null&&"fire_once"!==e.catchUpPolicy||f?.catchUpPolicy!=null&&"fire_once"!==f.catchUpPolicy),[O,P]=(0,c.useState)(!1),Q=async b=>{b.preventDefault(),o.trim()&&q.trim()&&A.trim()&&G&&(P(!0),await d({name:o.trim(),prompt:q.trim(),agentId:s,provider:u,model:w.trim(),cliArgs:y.trim(),catchUpPolicy:I,cadence:A.trim(),condition:D.trim(),executionMode:k}),P(!1),a())};return(0,b.jsxs)("div",{className:"h-full flex flex-col text-[var(--foreground)]",children:[(0,b.jsxs)("div",{className:"h-14 shrink-0 border-b border-[var(--card-border)] flex items-center justify-between px-6",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)("button",{onClick:a,className:"p-1.5 rounded-md text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:bg-[var(--muted)] transition-colors",children:(0,b.jsx)(i.X,{size:18})}),(0,b.jsx)("h2",{className:"text-sm font-semibold",children:e?"Edit Scheduled Task":"New Scheduled Task"}),g?(0,b.jsx)("span",{className:"rounded-full border border-sky-500/25 bg-sky-500/10 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.16em] text-sky-100",children:g}):null]}),(0,b.jsx)("button",{onClick:Q,disabled:O||!o.trim()||!q.trim()||!A.trim()||!G,className:"px-5 py-2 rounded-lg text-sm font-medium bg-[var(--foreground)] text-[var(--background)] hover:opacity-90 disabled:opacity-40 transition-opacity",children:O?"Saving...":e?"Save Changes":"Create Task"})]}),(0,b.jsxs)("div",{className:"flex flex-1 min-h-0 overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex-1 border-r border-[var(--card-border)] flex flex-col min-w-0",children:[(0,b.jsx)("div",{className:"px-8 pt-8 pb-4",children:(0,b.jsx)("input",{type:"text",value:o,onChange:a=>p(a.target.value),placeholder:"Untitled job",className:"w-full text-2xl font-bold bg-transparent border-none outline-none placeholder:text-[var(--muted-foreground)]/40 text-[var(--foreground)]",autoFocus:!0})}),(0,b.jsxs)("div",{className:"flex-1 px-8 pb-8 overflow-y-auto",children:[(0,b.jsx)(J,{children:"Instructions"}),(0,b.jsx)("div",{className:"bg-[var(--card-bg)] border border-[var(--card-border)] rounded-xl overflow-hidden min-h-[300px]",children:(0,b.jsx)(E,{content:q,onChange:a=>r(a),placeholder:"Describe what this prompt should do..."})})]})]}),(0,b.jsxs)("div",{className:"w-[380px] shrink-0 overflow-y-auto p-6 space-y-6",children:[(0,b.jsx)(L,{agents:h,value:s,onChange:a=>{t(a);let b=h.find(b=>b.id===a);b?(v(b.provider),x(b.model??"")):(v("claude"),x(""))}}),(0,b.jsx)(B.ScheduleConditionPicker,{value:{cadence:A,condition:D},onChange:(a,b)=>{C(a.cadence),F(a.condition),H(b.isScheduleValid)},scheduleLabel:"Schedule",conditionLabel:"Condition",conditionHelpText:"Scheduled runs and Run now will check this condition before executing."}),(0,b.jsxs)("div",{children:[(0,b.jsxs)("button",{type:"button",onClick:()=>N(!M),className:"flex items-center gap-1.5 text-[11px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors",children:[(0,b.jsx)(n,{size:12})," ",M?"Hide":"Show"," advanced",(0,b.jsx)(m.ChevronDown,{size:12,className:`transition-transform ${M?"rotate-180":""}`})]}),M&&(0,b.jsxs)("div",{className:"mt-3 space-y-3 pt-3 border-t border-[var(--card-border)]",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)(J,{children:"CLI Arguments"}),(0,b.jsx)("input",{type:"text",value:y,onChange:a=>z(a.target.value),placeholder:"--dangerously-skip-permissions",className:"w-full bg-[var(--muted)] border border-[var(--card-border)] rounded-lg px-3 py-2 text-sm text-[var(--foreground)] placeholder:text-[var(--muted-foreground)] focus:outline-none focus:border-[var(--foreground)] transition-colors"}),(0,b.jsx)("p",{className:"text-[10px] text-[var(--muted-foreground)] mt-1",children:"Extra flags passed to the CLI command."})]}),(0,b.jsxs)("div",{children:[(0,b.jsx)(J,{children:"When missed"}),(0,b.jsx)("div",{className:"space-y-1.5",children:[{id:"fire_once",label:"Run once on recovery",desc:"Execute a single run regardless of how many were missed"},{id:"replay_all",label:"Run all missed",desc:"Queue one run per missed occurrence (use with caution)"},{id:"skip",label:"Skip and wait for next",desc:"Discard missed runs, wait for the next scheduled time"}].map(a=>(0,b.jsxs)("button",{type:"button",onClick:()=>K(a.id),className:`w-full text-left px-3 py-2 rounded-lg border transition-all ${I===a.id?"border-[var(--foreground)] bg-[var(--foreground)]/5":"border-[var(--card-border)] bg-[var(--muted)] hover:border-[var(--muted-foreground)]"}`,children:[(0,b.jsx)("div",{className:"text-xs font-medium text-[var(--foreground)]",children:a.label}),(0,b.jsx)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:a.desc})]},a.id))})]})]})]})]})]})]})}function N(a){let b=Math.floor(a/1e3);if(b<60)return`${b}s`;let c=Math.floor(b/60);if(c<60)return`${c}m ${b%60}s`;let d=Math.floor(c/60);return`${d}h ${c%60}m`}function O(a){return a?new Date(a).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"—"}function P({run:a,job:d,agentMap:e,onCancelRun:f,onRerun:g}){let h=`prompt-run:${a.id}`,n=d.agentId&&e[d.agentId]?e[d.agentId].name:null,o=d.agentId?e[d.agentId]:null,r="running"===a.status||"queued"===a.status,s=function(a,b){let[d,e]=(0,c.useState)(null);return(0,c.useEffect)(()=>{if(!a||!b)return void e(null);let c=new Date(a).getTime(),d=()=>e(Math.max(0,Date.now()-c));d();let f=setInterval(d,1e3);return()=>clearInterval(f)},[a,b]),d}(a.startedAt,"running"===a.status),[t,x]=(0,c.useState)(!1),[A,B]=(0,c.useState)(new Set);(0,c.useEffect)(()=>{d.projectId&&fetch(`/api/projects/${encodeURIComponent(d.projectId)}/agents`).then(a=>a.json()).then(a=>{B(new Set((a.agents??[]).map(a=>a.agent_id)))}).catch(a=>console.warn("[PromptJobBoard] fetch project agents failed:",a))},[d.projectId]);let C=(0,c.useMemo)(()=>Object.values(e).filter(a=>A.has(a.id)).map(a=>({id:a.id,name:a.name,title:a.title??void 0,provider:a.provider??"claude",model:a.model,color:a.color})),[e,A]),E=(0,c.useMemo)(()=>`run-root:${a.id}`,[a.id]),{messages:F,setMessages:G,sendMessage:H,loadHistory:I,chatRuns:J,stop:L}=(0,u.useGroupChat)(h),{processes:M,streaming:P,chatRuns:Q}=(0,v.useProcessPolling)({workspaceId:h,threadId:E},{messages:F,setMessages:G}),R=(0,c.useMemo)(()=>{let a=[...J];for(let b of Q)a.some(a=>a.chatRunId===b.chatRunId)||a.push(b);return a},[J,Q]),S=R.some(a=>"queued"===a.status||"running"===a.status)||M.some(a=>"spawning"===a.state||"running"===a.state),T=S?R.some(a=>"queued"===a.status)?"queued":"working":"ready",U=(0,c.useRef)(!1);(0,c.useEffect)(()=>{I().then(()=>{if(!U.current){U.current=!0;let b=a.output?`[Automation run output]
|
|
2
2
|
|
|
3
3
|
${a.output}${a.error?`
|
|
4
4
|
|
|
5
5
|
[Error]
|
|
6
|
-
${a.error}`:""}`:"[Automation run — no output]";fetch("/api/history",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:h,messages:[{id:E,role:"assistant",participantId:d.agentId||null,content:b,timestamp:new Date(a.startedAt??a.createdAt).getTime(),rootMessageId:null,parentMessageId:null,depth:0}]})}).catch(a=>console.warn("[PromptJobBoard] save root message failed:",a))}})},[I,h,E,a,d.agentId]);let V=(0,c.useRef)(null),W=(0,c.useRef)(null),X=(0,c.useRef)(F.length);(0,c.useEffect)(()=>{F.length>X.current&&W.current?.scrollIntoView({behavior:"smooth"}),X.current=F.length},[F.length]);let Y=(0,c.useCallback)((a,b,c,d,e,f,g)=>{let h=(0,y.orderParticipantIds)(Array.from(A),e);H(a,b,void 0,E,c,void 0,h.length>0?h:void 0,void 0,f,g)},[H,A,E]);return(0,b.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--card-border)] px-4 py-2",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsxs)("div",{className:"text-[12px] font-semibold text-[var(--foreground)] truncate flex items-center gap-2",children:["Run ",a.id.slice(0,8),(0,b.jsxs)("span",{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-wider ${"running"===a.status?"bg-emerald-500/15 text-emerald-400":"queued"===a.status?"bg-amber-500/15 text-amber-400":"success"===a.status?"bg-emerald-500/10 text-emerald-400/70":"failed"===a.status?"bg-red-500/15 text-red-400":(a.status,"bg-[var(--muted)] text-[var(--muted-foreground)]")}`,children:["running"===a.status&&(0,b.jsx)("span",{className:"size-1.5 rounded-full bg-emerald-400 animate-pulse"}),a.status]})]}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:["running"===a.status&&null!=s?`Running \xb7 ${M(s)}`:null!=a.durationMs?M(a.durationMs):"queued"===a.status?"Queued":null,null!=a.exitCode&&` \xb7 exit ${a.exitCode}`]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:["failed"===a.status&&g&&(0,b.jsxs)("button",{onClick:g,className:"flex items-center gap-1 rounded px-2 py-1 text-[11px] font-medium text-[var(--foreground)] bg-[var(--muted)] hover:bg-[var(--muted)]/80 transition-colors",children:[(0,b.jsx)(l.RefreshCw,{size:12}),"Rerun"]}),r&&f&&(0,b.jsxs)("button",{onClick:()=>{z(!0),f()},disabled:w,className:"inline-flex items-center gap-1 rounded-md border border-red-400/30 px-2 py-1 text-[10px] font-bold uppercase tracking-[0.05em] text-red-400 transition-colors hover:bg-red-500/10 disabled:opacity-50",children:[(0,b.jsx)(i.X,{size:10}),w?"Cancelling…":"Cancel"]})]})]}),(a.startedAt||a.hostPid||a.hostCommand)&&(0,b.jsxs)("div",{className:"border-b border-[var(--card-border)] px-4 py-2 grid grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-[10px]",children:[a.startedAt&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"Started"}),(0,b.jsx)("span",{className:"text-[var(--foreground)]",children:N(a.startedAt)})]}),a.finishedAt&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"Finished"}),(0,b.jsx)("span",{className:"text-[var(--foreground)]",children:N(a.finishedAt)})]}),a.hostCommand&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"Command"}),(0,b.jsx)("span",{className:"font-mono text-[var(--foreground)] truncate",children:a.hostCommand})]}),a.hostPid&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"PID"}),(0,b.jsx)("span",{className:"font-mono text-[var(--foreground)]",children:a.hostPid})]})]}),(0,b.jsx)("div",{ref:V,className:"min-h-0 flex-1 overflow-y-auto px-4 py-3",children:(0,b.jsxs)("div",{className:"space-y-4 max-w-none",children:[a.output&&(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:o?(0,b.jsx)("img",{src:J(d.agentId,o.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(k.Terminal,{size:12})})}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[11px] font-semibold text-[var(--foreground)]",children:n??d.provider}),(0,b.jsx)("span",{className:"text-[9px] px-1.5 py-0.5 rounded bg-[var(--muted)] text-[var(--muted-foreground)] font-medium uppercase tracking-wider",children:"Run output"})]}),(0,b.jsx)("div",{className:"rounded-lg px-3 py-2 text-[12px] leading-[1.55] bg-[var(--muted)] text-[var(--foreground)]",children:(0,b.jsx)(v.Markdown,{content:a.output})})]})]}),a.error&&(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-red-500/10 text-[10px] text-red-400",children:"!"})}),(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsx)("div",{className:"rounded-lg px-3 py-2 text-[12px] leading-[1.55] bg-red-500/10 text-red-400",children:(0,b.jsx)("div",{className:"whitespace-pre-wrap break-words",children:a.error})})})]}),a.logs&&(0,b.jsxs)("details",{className:"group",children:[(0,b.jsxs)("summary",{className:"flex cursor-pointer items-center gap-1 text-[11px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors select-none",children:[(0,b.jsx)(m.ChevronDown,{size:12,className:"transition-transform group-open:rotate-180"}),"Tail logs"]}),(0,b.jsx)("pre",{className:"mt-2 max-h-64 overflow-auto rounded-lg bg-[var(--muted)] px-3 py-2 text-[11px] leading-[1.5] text-[var(--foreground)] whitespace-pre-wrap break-words",children:a.logs})]}),!a.output&&!a.error&&(0,b.jsx)("div",{className:"text-center py-12 text-[var(--muted-foreground)] text-sm",children:"queued"===a.status?(0,b.jsxs)("div",{className:"flex flex-col items-center gap-2",children:[(0,b.jsx)(j.Clock,{size:20,className:"text-amber-400/60"}),(0,b.jsx)("span",{children:"Waiting to start…"})]}):"running"===a.status?(0,b.jsxs)("div",{className:"flex flex-col items-center gap-2",children:[(0,b.jsx)(l.RefreshCw,{size:20,className:"text-emerald-400/60 animate-spin"}),(0,b.jsx)("span",{children:null!=s?`Running \xb7 ${M(s)}`:"Running…"}),(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]/60",children:"Waiting for output…"})]}):"No output captured"}),F.filter(a=>a.id!==E).map(a=>{let c="user"===a.role,f=a.participantId?e[a.participantId]:null,g=f?.name??n??d.provider;return(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:c?(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[var(--muted-foreground)]",children:(0,b.jsx)(p.User,{size:12})}):f?(0,b.jsx)("img",{src:J(f.id,f.color,28),alt:"",className:"size-7 rounded-full"}):o?(0,b.jsx)("img",{src:J(d.agentId,o.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(k.Terminal,{size:12})})}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"mb-1",children:(0,b.jsx)("span",{className:"text-[11px] font-semibold text-[var(--foreground)]",children:c?"You":g})}),(0,b.jsx)("div",{className:`rounded-lg px-3 py-2 text-[12px] leading-[1.55] ${c?"bg-blue-500/10 text-[var(--foreground)]":"bg-[var(--muted)] text-[var(--foreground)]"}`,children:(0,b.jsx)(v.Markdown,{content:(0,x.stripMarkers)(a.content),isUser:c})})]})]},a.id)}),Object.entries(P).filter(([,a])=>a.rootMessageId===E).map(([a])=>{let c=e[a]??o;return(0,b.jsxs)("div",{className:"flex gap-2.5 animate-in fade-in duration-300",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:c?(0,b.jsx)("img",{src:J(c.id,c.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(q.Sparkles,{size:12})})}),(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 py-1",children:[(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:c?.name??"Thinking"}),(0,b.jsxs)("span",{className:"inline-flex items-center gap-[3px]",children:[(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_infinite]"}),(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_0.2s_infinite]"}),(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_0.4s_infinite]"})]})]})})]},`streaming-${a}`)}),(0,b.jsx)("div",{ref:W})]})}),(0,b.jsx)("div",{className:"px-3 py-2",children:(0,b.jsx)(C,{onSend:Y,onStop:L,loading:S,activityStatus:T,participants:D,projectId:d.projectId||void 0,commands:[],placeholder:"Follow up on this run...",initialPinnedParticipantId:d.agentId||void 0})})]})}function P({job:a,agentMap:e,onEdit:h,onToggle:i,onDelete:l,onRunNow:m,onCancelRun:n,fetchRuns:p}){let q,[s,t]=(0,c.useState)([]),[u,v]=(0,c.useState)(!1),{getSelection:w,pushSelection:x,replaceSelection:y}=(0,r.useUrlSelection)(),A=w("run"),C=a.agentId&&e[a.agentId]?e[a.agentId].name:null,D=(0,c.useCallback)(async()=>{v(!1),t(await p(a.id)),v(!0)},[p,a.id]);(0,c.useEffect)(()=>{D()},[D]),(0,c.useEffect)(()=>{let a=setInterval(D,d.UI_POLL_PROMPT_RUNS_MS);return()=>clearInterval(a)},[D]),(0,c.useEffect)(()=>{A&&u&&(s.some(a=>a.id===A)||y({run:null}))},[y,s,u,A]);let I=s.find(a=>a.id===A)??null,K=s.some(a=>"queued"===a.status||"running"===a.status),L=a.cronExpr&&(0,z.cronToHuman)(a.cronExpr)||a.cadence||a.cronExpr,M=(q=a.prompt.split("\n").map(a=>a.trim()).find(Boolean))?q.replace(/^execute\s+/i,""):"No target",N=a.agentId?e[a.agentId]:null;return(0,b.jsx)("div",{className:"h-full flex flex-col text-[var(--foreground)]",children:(0,b.jsxs)("div",{className:"flex min-h-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex w-[420px] shrink-0 flex-col border-r border-[var(--card-border)] overflow-hidden",children:[(0,b.jsx)("div",{className:"border-b border-[var(--card-border)] px-6 py-5",children:(0,b.jsxs)("div",{className:"flex items-start gap-4",children:[(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsx)("h2",{className:"truncate text-[18px] font-semibold text-[var(--foreground)]",children:a.name})}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)("button",{onClick:i,type:"button",role:"switch","aria-checked":"active"===a.state,title:"active"===a.state?"Pause":"Resume",className:`relative inline-flex h-[18px] w-[32px] shrink-0 cursor-pointer rounded-full border transition-colors ${"active"===a.state?"border-emerald-400/30 bg-emerald-500/40":"border-[var(--card-border)] bg-[var(--muted)]"}`,children:(0,b.jsx)("span",{className:`pointer-events-none absolute top-[2px] size-[12px] rounded-full bg-white/90 shadow-sm transition-transform ${"active"===a.state?"translate-x-[16px]":"translate-x-[2px]"}`})}),(0,b.jsx)("button",{onClick:m,disabled:K,title:"Run now",className:"rounded-md border border-[var(--card-border)] p-1.5 text-[var(--muted-foreground)] transition-colors hover:border-[var(--foreground)] hover:text-[var(--foreground)] disabled:opacity-50",children:(0,b.jsx)(f.Play,{size:12,className:"fill-current"})}),(0,b.jsx)("button",{onClick:h,title:"Edit",className:"p-1.5 rounded-md border border-[var(--card-border)] text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:border-[var(--foreground)] transition-colors",children:(0,b.jsx)(o.Pencil,{size:12})}),(0,b.jsx)("button",{onClick:l,disabled:K,title:K?"Cancel the live run before deleting this task":"Delete",className:"p-1.5 rounded-md border border-[var(--card-border)] text-[var(--muted-foreground)] transition-colors hover:text-red-400 hover:border-red-400/30 disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:border-[var(--card-border)] disabled:hover:text-[var(--muted-foreground)]",children:(0,b.jsx)(g.Trash2,{size:12})})]})]})}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(0,b.jsxs)("div",{className:"space-y-0",children:[(0,b.jsx)("div",{className:"px-6 py-5",children:(0,b.jsx)("div",{className:"rounded-2xl border border-[var(--card-border)] bg-[var(--card-bg)] px-5 py-4",children:(0,b.jsxs)("div",{className:"grid grid-cols-[96px,minmax(0,1fr)] items-center gap-x-4 gap-y-4",children:[a.executionMode&&"prompt"!==a.executionMode&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Type"}),(0,b.jsx)("div",{className:"min-w-0",children:(0,b.jsx)("span",{className:"rounded-md border border-violet-400/20 bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-violet-400",children:B.find(b=>b.value===a.executionMode)?.label??a.executionMode})})]}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Agent"}),(0,b.jsx)("div",{className:"min-w-0 flex items-center justify-between gap-3",children:(0,b.jsxs)("div",{className:"min-w-0 flex items-center gap-2.5",children:[N?(0,b.jsx)("img",{src:J(N.id,N.color,20),alt:"",className:"size-5 rounded-full shrink-0"}):(0,b.jsx)(k.Terminal,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsxs)("div",{className:"truncate text-[13px] font-medium text-[var(--foreground)]",children:[C??a.provider,a.model?` (${a.provider} / ${a.model})`:""]})]})}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Schedule"}),(0,b.jsx)("div",{className:"truncate text-[13px] font-medium text-[var(--foreground)]",children:L||"—"}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Target"}),(0,b.jsx)("div",{className:"truncate font-mono text-[13px] text-[var(--foreground)]",title:M,children:M})]})})}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between px-6 py-4",children:[(0,b.jsx)(H,{children:"Recent Runs"}),(0,b.jsxs)("span",{className:"text-sm text-[var(--muted-foreground)]",children:[s.length," total"]})]}),(0,b.jsx)("div",{children:0===s.length?(0,b.jsx)("div",{className:"px-6 py-10 text-center text-[11px] text-[var(--muted-foreground)]",children:"No runs yet"}):s.map(a=>{let c=A===a.id,d="success"===a.status;return(0,b.jsxs)("button",{type:"button",onClick:()=>x({run:a.id}),className:`flex w-full items-center gap-4 border-t border-[var(--card-border)]/50 px-6 py-5 text-left transition-colors ${c?"border-l-2 border-l-emerald-400 bg-emerald-500/5":"hover:bg-[var(--muted)]/20"}`,children:[(0,b.jsx)("span",{className:`flex size-6 shrink-0 items-center justify-center rounded-full border text-[11px] ${d?"border-emerald-400 text-emerald-400":"failed"===a.status?"border-red-400 text-red-400":"running"===a.status?"border-sky-400 text-sky-400":"border-[var(--card-border)] text-[var(--muted-foreground)]"}`,children:d?"✓":"failed"===a.status?"!":"•"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-[13px] font-medium text-[var(--foreground)]",children:G(a.startedAt??a.createdAt)}),(0,b.jsx)("div",{className:"mt-1 text-[12px] text-[var(--muted-foreground)]",children:null!=a.durationMs?`${(a.durationMs/1e3).toFixed(1)}s`:"running"===a.status?"Running...":a.status.charAt(0).toUpperCase()+a.status.slice(1)})]}),c?(0,b.jsx)("span",{className:"rounded-md bg-[var(--muted)] px-2.5 py-1 text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Viewing"}):null]},a.id)})})]}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)] px-6 py-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[K?(0,b.jsx)("button",{onClick:n,className:"inline-flex items-center gap-1.5 rounded-md border border-red-400/30 px-2.5 py-1 text-[10px] font-bold uppercase tracking-[0.05em] text-red-400 transition-colors hover:bg-red-500/10",children:"Cancel run"}):null,K?(0,b.jsx)("span",{className:"text-[11px] text-amber-300",children:"Delete is blocked while a run is queued or running. Cancel the live run first."}):null,a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null,E(a)&&(0,b.jsxs)("span",{className:"rounded-md border border-amber-500/20 bg-amber-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-amber-400 inline-flex items-center gap-1",children:[(0,b.jsx)(j.Clock,{size:10}),"overdue"]}),(0,b.jsxs)("span",{className:`text-[11px] ${E(a)?"text-amber-400 font-medium":"text-[var(--muted-foreground)]"}`,children:["Next run ",F(a.nextRunAt,a.state)]}),(0,b.jsxs)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:["Last ",a.lastRunAt?G(new Date(a.lastRunAt).toISOString()):"Never"]}),(a.cliArgs||"skip"!==a.overlapPolicy)&&(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:a.cliArgs?"Custom CLI args":`Overlap ${a.overlapPolicy}`})]}),a.condition?(0,b.jsx)("div",{className:"mt-3 text-[11px] leading-[1.5] text-[var(--muted-foreground)]",children:a.condition}):null]})]})})]}),I?(0,b.jsx)(O,{run:I,job:a,agentMap:e,onCancelRun:n,onRerun:m},I.id):(0,b.jsx)("div",{className:"flex min-w-0 flex-1 items-center justify-center text-[var(--muted-foreground)] text-sm",children:0===s.length?'No runs yet. Click "Run now" to trigger one.':"Select a run to view its output"})]})})}function Q({projectId:a,requireProjectId:d=!1,includeObjectiveJobs:e=!1,visibleJobIds:f,contextLabel:g,createDefaults:i,onCreateJob:m}={}){let{jobs:n,loading:o,refresh:p,createJob:q,updateJob:t,deleteJob:u,toggleJob:v,runNow:x,cancelRun:y,fetchRuns:A}=(0,s.usePromptJobs)(a,{requireProjectId:d,includeObjectiveJobs:e}),[B,C]=(0,c.useState)("all"),[D,G]=(0,c.useState)(null),[H,I]=(0,c.useState)(!1),[K,M]=(0,c.useState)(null),[N,O]=(0,c.useState)(null),[R,S]=(0,c.useState)({}),[T,U]=(0,c.useState)(null),[V,W]=(0,c.useState)({}),{getSelection:X,pushSelection:Y,replaceSelection:Z}=(0,r.useUrlSelection)(),$=X("job"),_=X("run"),aa=(0,c.useMemo)(()=>f?new Set(f):null,[f]);(0,c.useEffect)(()=>{fetch("/api/prompt-jobs/agents").then(a=>a.json()).then(a=>{let b={};for(let c of a.agents??[])b[c.id]=c;W(b)}).catch(a=>console.warn("[PromptJobBoard] fetch agent map failed:",a))},[]);let ab=a=>{U(a),setTimeout(()=>U(null),2500)},ac=(0,c.useMemo)(()=>(aa?n.filter(a=>aa.has(a.id)):n).filter(a=>"linear_worker"!==a.executionMode),[n,aa]),ad=ac.filter(a=>"all"===B||a.state===B),ae=$?ac.find(a=>a.id===$)??null:null,af=ae??(D?.id===$&&(!aa||aa.has(D.id))?D:null);ac.length,ac.filter(a=>"active"===a.state).length,ac.filter(a=>"paused"===a.state).length,ac.filter(a=>"stopped"===a.state).length;let ag=async a=>{await v(a)&&ab(`${a.name} ${"active"===a.state?"paused":"resumed"}`)},ah=async(a,b)=>{if(b?.stopPropagation(),R[a])return;S(b=>({...b,[a]:!0}));let c=await x(a);S(b=>{let c={...b};return delete c[a],c}),c&&ab("Run triggered")},ai=async a=>{let b=await u(a);if(b.ok){$===a&&Y({job:null,run:null}),ab("Job deleted");return}ab(b.error??"Failed to delete scheduled task")},aj=async a=>{await y(a)&&ab("Run cancelled")},ak=async b=>{if(K)await t(K.id,b)&&ab(`Task "${b.name}" updated`);else{let c=m?await m(b):await q({...b,projectId:a??""});c&&(await p(),Y({job:c,run:null}),ab(`Task "${b.name}" created`))}};(0,c.useEffect)(()=>{if(!$){G(null),_&&Z({run:null});return}if(aa&&!aa.has($)){G(null),Z({job:null,run:null});return}if(ae)return void G(a=>a?.id===$?ae:null);let a=!1;return(async()=>{try{let b=await fetch(`/api/prompt-jobs/${encodeURIComponent($)}`);if(a)return;if(404===b.status)return void Z({job:null,run:null});if(!b.ok)throw Error(`Failed to fetch selected scheduled task: ${b.status}`);let c=await b.json().catch(()=>({}));if(!c.job?.id||!e&&c.job.objectiveId)return void Z({job:null,run:null});G(c.job)}catch(b){a||console.error("Failed to hydrate selected prompt job",b)}})(),()=>{a=!0}},[e,Z,ae,$,_,aa]);let al=T&&(0,b.jsx)("div",{className:"fixed bottom-8 left-1/2 -translate-x-1/2 z-50 animate-in fade-in slide-in-from-bottom-2 duration-200",children:(0,b.jsx)("div",{className:"bg-[var(--card-bg)] border border-[var(--card-border)] px-4 py-2.5 rounded-xl shadow-lg flex items-center gap-2.5 text-sm font-medium",children:T})});return H?(0,b.jsxs)(b.Fragment,{children:[al,(0,b.jsx)(L,{onClose:()=>{I(!1),M(null)},onSubmit:ak,editingJob:K,createDefaults:i,contextLabel:g})]}):(0,b.jsxs)("div",{className:"flex h-full min-h-0 flex-col text-[var(--foreground)] lg:flex-row",children:[al,(0,b.jsxs)("div",{className:"flex w-full shrink-0 flex-col border-b border-[var(--card-border)] lg:w-[390px] lg:border-b-0 lg:border-r",children:[(0,b.jsx)("div",{className:"px-6 pb-0 pt-6",children:(0,b.jsx)("div",{className:"border-b border-[var(--card-border)]",children:(0,b.jsxs)("div",{className:"flex items-end justify-between gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsx)("div",{className:"flex items-end gap-10",children:["all","active","paused"].map(a=>{let c=B===a;return(0,b.jsxs)("button",{onClick:()=>C(a),className:`relative pb-4 text-[18px] font-semibold capitalize transition-colors ${c?"text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}`,children:[a,c?(0,b.jsx)("span",{className:"absolute bottom-[6px] left-0 h-[4px] w-8 rounded-full bg-[var(--foreground)]"}):null]},a)})}),g?(0,b.jsx)("span",{className:"mb-3 rounded-full border border-sky-500/25 bg-sky-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-sky-100",children:g}):null]}),(0,b.jsxs)("div",{className:"flex items-center gap-5 pb-4 text-[var(--muted-foreground)]",children:[(0,b.jsx)("button",{onClick:()=>p(),className:"transition-colors hover:text-[var(--foreground)]",title:"Refresh",children:(0,b.jsx)(l.RefreshCw,{size:18})}),(0,b.jsx)("button",{onClick:()=>{M(null),I(!0)},className:"transition-colors hover:text-[var(--foreground)]",title:"New Job",children:(0,b.jsx)(h.Plus,{size:20})})]})]})})}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto pb-5",children:o&&0===ac.length?(0,b.jsx)("div",{className:"py-12 text-center text-sm text-[var(--muted-foreground)]",children:"Loading scheduled tasks..."}):(0,b.jsxs)("div",{className:"overflow-hidden",children:[ad.map(a=>{let c=$===a.id,d=a.cronExpr&&(0,z.cronToHuman)(a.cronExpr)||a.cadence||a.cronExpr;return(0,b.jsx)("div",{onClick:()=>Y({job:a.id,run:null}),className:`cursor-pointer border-b border-[var(--card-border)]/50 px-6 py-4 transition-colors ${c?"bg-[var(--card-bg)]":"hover:bg-[var(--muted)]/10"}`,children:(0,b.jsxs)("div",{className:"flex items-start gap-4",children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"truncate text-[15px] font-medium text-[var(--foreground)]",children:a.name}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-x-4 gap-y-1 text-[12px] text-[var(--muted-foreground)]",children:[(0,b.jsx)("span",{className:"min-w-0 flex items-center gap-1.5 truncate",children:a.agentId&&V[a.agentId]?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("img",{src:J(a.agentId,V[a.agentId].color,16),alt:"",className:"size-4 rounded-full"}),V[a.agentId].name]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(k.Terminal,{size:11}),a.provider]})}),(0,b.jsxs)("span",{className:`flex items-center gap-1 ${E(a)?"text-amber-400 font-medium":""}`,children:[(0,b.jsx)(j.Clock,{size:11}),F(a.nextRunAt,a.state)]}),(0,b.jsx)("span",{className:"truncate font-mono text-[11px]",title:d,children:d}),"linear_worker"===a.executionMode?(0,b.jsx)("span",{className:"rounded-md border border-violet-400/20 bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-violet-400",children:"linear"}):null,a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null]})]}),(0,b.jsx)("button",{onClick:b=>{b.stopPropagation(),ag(a)},type:"button",role:"switch","aria-checked":"active"===a.state,title:"active"===a.state?"Pause":"Resume",className:`relative inline-flex h-[18px] w-[32px] shrink-0 cursor-pointer rounded-full border transition-colors ${"active"===a.state?"border-emerald-400/30 bg-emerald-500/40":"border-[var(--card-border)] bg-[var(--muted)]"}`,children:(0,b.jsx)("span",{className:`pointer-events-none absolute top-[2px] size-[12px] rounded-full bg-white/90 shadow-sm transition-transform ${"active"===a.state?"translate-x-[16px]":"translate-x-[2px]"}`})})]})},a.id)}),0===ad.length&&(0,b.jsx)("div",{className:"rounded-xl border border-dashed border-[var(--card-border)] py-12 text-center text-sm text-[var(--muted-foreground)]",children:0===ac.length?"No scheduled tasks yet. Create one to get started.":"No scheduled tasks match the selected filter."})]})})]}),(0,b.jsx)("div",{className:"min-h-0 min-w-0 flex-1",children:af?(0,b.jsx)(P,{job:af,agentMap:V,onEdit:()=>{M(af),I(!0)},onToggle:()=>ag(af),onDelete:()=>O(af),onRunNow:()=>ah(af.id),onCancelRun:()=>aj(af.id),fetchRuns:A},af.id):(0,b.jsx)("div",{className:"flex h-full items-center justify-center border-t border-[var(--card-border)] lg:border-l-0 lg:border-t-0",children:(0,b.jsxs)("div",{className:"rounded-2xl border border-dashed border-[var(--card-border)] bg-[var(--card-bg)]/60 px-8 py-10 text-center",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[var(--foreground)]",children:"Select a scheduled task"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[var(--muted-foreground)]",children:"The selected job will open here with its runs and chat output."})]})})}),(0,b.jsx)(w.default,{isOpen:!!N,title:"Delete scheduled task?",message:"This permanently removes the task and all of its run history. Delete is only allowed when no run is queued or running.",preview:N?.name,confirmLabel:"Delete",variant:"danger",onConfirm:()=>{N&&ai(N.id),O(null)},onCancel:()=>O(null)})]})}a.s(["CreateJobModal",()=>L,"default",()=>Q],393041)}];
|
|
6
|
+
${a.error}`:""}`:"[Automation run — no output]";fetch("/api/history",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({threadId:h,messages:[{id:E,role:"assistant",participantId:d.agentId||null,content:b,timestamp:new Date(a.startedAt??a.createdAt).getTime(),rootMessageId:null,parentMessageId:null,depth:0}]})}).catch(a=>console.warn("[PromptJobBoard] save root message failed:",a))}})},[I,h,E,a,d.agentId]);let V=(0,c.useRef)(null),W=(0,c.useRef)(null),X=(0,c.useRef)(F.length);(0,c.useEffect)(()=>{F.length>X.current&&W.current?.scrollIntoView({behavior:"smooth"}),X.current=F.length},[F.length]);let Y=(0,c.useCallback)((a,b,c,d,e,f,g)=>{let h=(0,z.orderParticipantIds)(Array.from(A),e);H(a,b,void 0,E,c,void 0,h.length>0?h:void 0,void 0,f,g)},[H,A,E]);return(0,b.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between border-b border-[var(--card-border)] px-4 py-2",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsxs)("div",{className:"text-[12px] font-semibold text-[var(--foreground)] truncate flex items-center gap-2",children:["Run ",a.id.slice(0,8),(0,b.jsxs)("span",{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-wider ${"running"===a.status?"bg-emerald-500/15 text-emerald-400":"queued"===a.status?"bg-amber-500/15 text-amber-400":"success"===a.status?"bg-emerald-500/10 text-emerald-400/70":"failed"===a.status?"bg-red-500/15 text-red-400":(a.status,"bg-[var(--muted)] text-[var(--muted-foreground)]")}`,children:["running"===a.status&&(0,b.jsx)("span",{className:"size-1.5 rounded-full bg-emerald-400 animate-pulse"}),a.status]})]}),(0,b.jsxs)("div",{className:"text-[10px] text-[var(--muted-foreground)]",children:["running"===a.status&&null!=s?`Running \xb7 ${N(s)}`:null!=a.durationMs?N(a.durationMs):"queued"===a.status?"Queued":null,null!=a.exitCode&&` \xb7 exit ${a.exitCode}`]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2",children:["failed"===a.status&&g&&(0,b.jsxs)("button",{onClick:g,className:"flex items-center gap-1 rounded px-2 py-1 text-[11px] font-medium text-[var(--foreground)] bg-[var(--muted)] hover:bg-[var(--muted)]/80 transition-colors",children:[(0,b.jsx)(l.RefreshCw,{size:12}),"Rerun"]}),r&&f&&(0,b.jsxs)("button",{onClick:()=>{x(!0),f()},disabled:t,className:"inline-flex items-center gap-1 rounded-md border border-red-400/30 px-2 py-1 text-[10px] font-bold uppercase tracking-[0.05em] text-red-400 transition-colors hover:bg-red-500/10 disabled:opacity-50",children:[(0,b.jsx)(i.X,{size:10}),t?"Cancelling…":"Cancel"]})]})]}),(a.startedAt||a.hostPid||a.hostCommand)&&(0,b.jsxs)("div",{className:"border-b border-[var(--card-border)] px-4 py-2 grid grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-[10px]",children:[a.startedAt&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"Started"}),(0,b.jsx)("span",{className:"text-[var(--foreground)]",children:O(a.startedAt)})]}),a.finishedAt&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"Finished"}),(0,b.jsx)("span",{className:"text-[var(--foreground)]",children:O(a.finishedAt)})]}),a.hostCommand&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"Command"}),(0,b.jsx)("span",{className:"font-mono text-[var(--foreground)] truncate",children:a.hostCommand})]}),a.hostPid&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-[var(--muted-foreground)]",children:"PID"}),(0,b.jsx)("span",{className:"font-mono text-[var(--foreground)]",children:a.hostPid})]})]}),(0,b.jsx)("div",{ref:V,className:"min-h-0 flex-1 overflow-y-auto px-4 py-3",children:(0,b.jsxs)("div",{className:"space-y-4 max-w-none",children:[a.output&&(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:o?(0,b.jsx)("img",{src:K(d.agentId,o.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(k.Terminal,{size:12})})}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsxs)("div",{className:"mb-1 flex items-center gap-2",children:[(0,b.jsx)("span",{className:"text-[11px] font-semibold text-[var(--foreground)]",children:n??d.provider}),(0,b.jsx)("span",{className:"text-[9px] px-1.5 py-0.5 rounded bg-[var(--muted)] text-[var(--muted-foreground)] font-medium uppercase tracking-wider",children:"Run output"})]}),(0,b.jsx)("div",{className:"rounded-lg px-3 py-2 text-[12px] leading-[1.55] bg-[var(--muted)] text-[var(--foreground)]",children:(0,b.jsx)(w.Markdown,{content:a.output})})]})]}),a.error&&(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-red-500/10 text-[10px] text-red-400",children:"!"})}),(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsx)("div",{className:"rounded-lg px-3 py-2 text-[12px] leading-[1.55] bg-red-500/10 text-red-400",children:(0,b.jsx)("div",{className:"whitespace-pre-wrap break-words",children:a.error})})})]}),a.logs&&(0,b.jsxs)("details",{className:"group",children:[(0,b.jsxs)("summary",{className:"flex cursor-pointer items-center gap-1 text-[11px] text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors select-none",children:[(0,b.jsx)(m.ChevronDown,{size:12,className:"transition-transform group-open:rotate-180"}),"Tail logs"]}),(0,b.jsx)("pre",{className:"mt-2 max-h-64 overflow-auto rounded-lg bg-[var(--muted)] px-3 py-2 text-[11px] leading-[1.5] text-[var(--foreground)] whitespace-pre-wrap break-words",children:a.logs})]}),!a.output&&!a.error&&(0,b.jsx)("div",{className:"text-center py-12 text-[var(--muted-foreground)] text-sm",children:"queued"===a.status?(0,b.jsxs)("div",{className:"flex flex-col items-center gap-2",children:[(0,b.jsx)(j.Clock,{size:20,className:"text-amber-400/60"}),(0,b.jsx)("span",{children:"Waiting to start…"})]}):"running"===a.status?(0,b.jsxs)("div",{className:"flex flex-col items-center gap-2",children:[(0,b.jsx)(l.RefreshCw,{size:20,className:"text-emerald-400/60 animate-spin"}),(0,b.jsx)("span",{children:null!=s?`Running \xb7 ${N(s)}`:"Running…"}),(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]/60",children:"Waiting for output…"})]}):"No output captured"}),F.filter(a=>a.id!==E).map(a=>{let c="user"===a.role,f=a.participantId?e[a.participantId]:null,g=f?.name??n??d.provider;return(0,b.jsxs)("div",{className:"flex gap-2.5",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:c?(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[var(--muted-foreground)]",children:(0,b.jsx)(p.User,{size:12})}):f?(0,b.jsx)("img",{src:K(f.id,f.color,28),alt:"",className:"size-7 rounded-full"}):o?(0,b.jsx)("img",{src:K(d.agentId,o.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(k.Terminal,{size:12})})}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"mb-1",children:(0,b.jsx)("span",{className:"text-[11px] font-semibold text-[var(--foreground)]",children:c?"You":g})}),(0,b.jsx)("div",{className:`rounded-lg px-3 py-2 text-[12px] leading-[1.55] ${c?"bg-blue-500/10 text-[var(--foreground)]":"bg-[var(--muted)] text-[var(--foreground)]"}`,children:(0,b.jsx)(w.Markdown,{content:(0,y.stripMarkers)(a.content),isUser:c})})]})]},a.id)}),Object.entries(P).filter(([,a])=>a.rootMessageId===E).map(([a])=>{let c=e[a]??o;return(0,b.jsxs)("div",{className:"flex gap-2.5 animate-in fade-in duration-300",children:[(0,b.jsx)("div",{className:"shrink-0 mt-0.5",children:c?(0,b.jsx)("img",{src:K(c.id,c.color,28),alt:"",className:"size-7 rounded-full"}):(0,b.jsx)("div",{className:"flex size-7 items-center justify-center rounded-full bg-[var(--muted)] text-[10px] text-[var(--muted-foreground)]",children:(0,b.jsx)(q.Sparkles,{size:12})})}),(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsxs)("div",{className:"flex items-center gap-2 py-1",children:[(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:c?.name??"Thinking"}),(0,b.jsxs)("span",{className:"inline-flex items-center gap-[3px]",children:[(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_infinite]"}),(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_0.2s_infinite]"}),(0,b.jsx)("span",{className:"w-1 h-1 rounded-full bg-[var(--muted-foreground)]/50 animate-[pulse-dot_1.4s_ease-in-out_0.4s_infinite]"})]})]})})]},`streaming-${a}`)}),(0,b.jsx)("div",{ref:W})]})}),(0,b.jsx)("div",{className:"px-3 py-2",children:(0,b.jsx)(D,{onSend:Y,onStop:L,loading:S,activityStatus:T,participants:C,projectId:d.projectId||void 0,commands:[],placeholder:"Follow up on this run...",initialPinnedParticipantId:d.agentId||void 0})})]})}function Q({job:a,agentMap:e,onEdit:h,onToggle:i,onDelete:l,onRunNow:m,onCancelRun:n,fetchRuns:p}){let q,[r,t]=(0,c.useState)([]),[u,v]=(0,c.useState)(!1),{getSelection:w,pushSelection:x,replaceSelection:y}=(0,s.useUrlSelection)(),z=w("run"),B=a.agentId&&e[a.agentId]?e[a.agentId].name:null,D=(0,c.useCallback)(async()=>{v(!1),t(await p(a.id)),v(!0)},[p,a.id]);(0,c.useEffect)(()=>{D()},[D]),(0,c.useEffect)(()=>{let a=setInterval(D,d.UI_POLL_PROMPT_RUNS_MS);return()=>clearInterval(a)},[D]),(0,c.useEffect)(()=>{z&&u&&(r.some(a=>a.id===z)||y({run:null}))},[y,r,u,z]);let E=r.find(a=>a.id===z)??null,J=r.some(a=>"queued"===a.status||"running"===a.status),L=a.cronExpr&&(0,A.cronToHuman)(a.cronExpr)||a.cadence||a.cronExpr,M=(q=a.prompt.split("\n").map(a=>a.trim()).find(Boolean))?q.replace(/^execute\s+/i,""):"No target",N=a.agentId?e[a.agentId]:null;return(0,b.jsx)("div",{className:"h-full flex flex-col text-[var(--foreground)]",children:(0,b.jsxs)("div",{className:"flex min-h-0 flex-1",children:[(0,b.jsxs)("div",{className:"flex w-[420px] shrink-0 flex-col border-r border-[var(--card-border)] overflow-hidden",children:[(0,b.jsx)("div",{className:"border-b border-[var(--card-border)] px-6 py-5",children:(0,b.jsxs)("div",{className:"flex items-start gap-4",children:[(0,b.jsx)("div",{className:"min-w-0 flex-1",children:(0,b.jsx)("h2",{className:"truncate text-[18px] font-semibold text-[var(--foreground)]",children:a.name})}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)("button",{onClick:i,type:"button",role:"switch","aria-checked":"active"===a.state,title:"active"===a.state?"Pause":"Resume",className:`relative inline-flex h-[18px] w-[32px] shrink-0 cursor-pointer rounded-full border transition-colors ${"active"===a.state?"border-emerald-400/30 bg-emerald-500/40":"border-[var(--card-border)] bg-[var(--muted)]"}`,children:(0,b.jsx)("span",{className:`pointer-events-none absolute top-[2px] size-[12px] rounded-full bg-white/90 shadow-sm transition-transform ${"active"===a.state?"translate-x-[16px]":"translate-x-[2px]"}`})}),(0,b.jsx)("button",{onClick:m,disabled:J,title:"Run now",className:"rounded-md border border-[var(--card-border)] p-1.5 text-[var(--muted-foreground)] transition-colors hover:border-[var(--foreground)] hover:text-[var(--foreground)] disabled:opacity-50",children:(0,b.jsx)(f.Play,{size:12,className:"fill-current"})}),(0,b.jsx)("button",{onClick:h,title:"Edit",className:"p-1.5 rounded-md border border-[var(--card-border)] text-[var(--muted-foreground)] hover:text-[var(--foreground)] hover:border-[var(--foreground)] transition-colors",children:(0,b.jsx)(o.Pencil,{size:12})}),(0,b.jsx)("button",{onClick:l,disabled:J,title:J?"Cancel the live run before deleting this task":"Delete",className:"p-1.5 rounded-md border border-[var(--card-border)] text-[var(--muted-foreground)] transition-colors hover:text-red-400 hover:border-red-400/30 disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:border-[var(--card-border)] disabled:hover:text-[var(--muted-foreground)]",children:(0,b.jsx)(g.Trash2,{size:12})})]})]})}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(0,b.jsxs)("div",{className:"space-y-0",children:[(0,b.jsx)("div",{className:"px-6 py-5",children:(0,b.jsx)("div",{className:"rounded-2xl border border-[var(--card-border)] bg-[var(--card-bg)] px-5 py-4",children:(0,b.jsxs)("div",{className:"grid grid-cols-[96px,minmax(0,1fr)] items-center gap-x-4 gap-y-4",children:[a.executionMode&&"prompt"!==a.executionMode&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Type"}),(0,b.jsx)("div",{className:"min-w-0",children:(0,b.jsx)("span",{className:"rounded-md border border-violet-400/20 bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-violet-400",children:C.find(b=>b.value===a.executionMode)?.label??a.executionMode})})]}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Agent"}),(0,b.jsx)("div",{className:"min-w-0 flex items-center justify-between gap-3",children:(0,b.jsxs)("div",{className:"min-w-0 flex items-center gap-2.5",children:[N?(0,b.jsx)("img",{src:K(N.id,N.color,20),alt:"",className:"size-5 rounded-full shrink-0"}):(0,b.jsx)(k.Terminal,{size:14,className:"shrink-0 text-[var(--muted-foreground)]"}),(0,b.jsxs)("div",{className:"truncate text-[13px] font-medium text-[var(--foreground)]",children:[B??a.provider,a.model?` (${a.provider} / ${a.model})`:""]})]})}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Schedule"}),(0,b.jsx)("div",{className:"truncate text-[13px] font-medium text-[var(--foreground)]",children:L||"—"}),(0,b.jsx)("div",{className:"text-[11px] uppercase tracking-[0.12em] text-[var(--muted-foreground)]",children:"Target"}),(0,b.jsx)("div",{className:"truncate font-mono text-[13px] text-[var(--foreground)]",title:M,children:M})]})})}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)]",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between px-6 py-4",children:[(0,b.jsx)(I,{children:"Recent Runs"}),(0,b.jsxs)("span",{className:"text-sm text-[var(--muted-foreground)]",children:[r.length," total"]})]}),(0,b.jsx)("div",{children:0===r.length?(0,b.jsx)("div",{className:"px-6 py-10 text-center text-[11px] text-[var(--muted-foreground)]",children:"No runs yet"}):r.map(a=>{let c=z===a.id,d="success"===a.status;return(0,b.jsxs)("button",{type:"button",onClick:()=>x({run:a.id}),className:`flex w-full items-center gap-4 border-t border-[var(--card-border)]/50 px-6 py-5 text-left transition-colors ${c?"border-l-2 border-l-emerald-400 bg-emerald-500/5":"hover:bg-[var(--muted)]/20"}`,children:[(0,b.jsx)("span",{className:`flex size-6 shrink-0 items-center justify-center rounded-full border text-[11px] ${d?"border-emerald-400 text-emerald-400":"failed"===a.status?"border-red-400 text-red-400":"running"===a.status?"border-sky-400 text-sky-400":"border-[var(--card-border)] text-[var(--muted-foreground)]"}`,children:d?"✓":"failed"===a.status?"!":"•"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"text-[13px] font-medium text-[var(--foreground)]",children:H(a.startedAt??a.createdAt)}),(0,b.jsx)("div",{className:"mt-1 text-[12px] text-[var(--muted-foreground)]",children:null!=a.durationMs?`${(a.durationMs/1e3).toFixed(1)}s`:"running"===a.status?"Running...":a.status.charAt(0).toUpperCase()+a.status.slice(1)})]}),c?(0,b.jsx)("span",{className:"rounded-md bg-[var(--muted)] px-2.5 py-1 text-[10px] font-semibold uppercase tracking-wider text-[var(--muted-foreground)]",children:"Viewing"}):null]},a.id)})})]}),(0,b.jsxs)("div",{className:"border-t border-[var(--card-border)] px-6 py-4",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[J?(0,b.jsx)("button",{onClick:n,className:"inline-flex items-center gap-1.5 rounded-md border border-red-400/30 px-2.5 py-1 text-[10px] font-bold uppercase tracking-[0.05em] text-red-400 transition-colors hover:bg-red-500/10",children:"Cancel run"}):null,J?(0,b.jsx)("span",{className:"text-[11px] text-amber-300",children:"Delete is blocked while a run is queued or running. Cancel the live run first."}):null,a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null,F(a)&&(0,b.jsxs)("span",{className:"rounded-md border border-amber-500/20 bg-amber-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-wider text-amber-400 inline-flex items-center gap-1",children:[(0,b.jsx)(j.Clock,{size:10}),"overdue"]}),(0,b.jsxs)("span",{className:`text-[11px] ${F(a)?"text-amber-400 font-medium":"text-[var(--muted-foreground)]"}`,children:["Next run ",G(a.nextRunAt,a.state)]}),(0,b.jsxs)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:["Last ",a.lastRunAt?H(new Date(a.lastRunAt).toISOString()):"Never"]}),(a.cliArgs||"skip"!==a.overlapPolicy)&&(0,b.jsx)("span",{className:"text-[11px] text-[var(--muted-foreground)]",children:a.cliArgs?"Custom CLI args":`Overlap ${a.overlapPolicy}`})]}),a.condition?(0,b.jsx)("div",{className:"mt-3 text-[11px] leading-[1.5] text-[var(--muted-foreground)]",children:a.condition}):null]})]})})]}),E?(0,b.jsx)(P,{run:E,job:a,agentMap:e,onCancelRun:n,onRerun:m},E.id):(0,b.jsx)("div",{className:"flex min-w-0 flex-1 items-center justify-center text-[var(--muted-foreground)] text-sm",children:0===r.length?'No runs yet. Click "Run now" to trigger one.':"Select a run to view its output"})]})})}function R({projectId:a,requireProjectId:d=!1,includeObjectiveJobs:e=!1,visibleJobIds:f,contextLabel:g,createDefaults:i,onCreateJob:m}={}){let{jobs:n,loading:o,refresh:p,createJob:q,updateJob:r,deleteJob:u,toggleJob:v,runNow:w,cancelRun:y,fetchRuns:z}=(0,t.usePromptJobs)(a,{requireProjectId:d,includeObjectiveJobs:e}),[B,C]=(0,c.useState)("all"),[D,E]=(0,c.useState)(null),[H,I]=(0,c.useState)(!1),[J,L]=(0,c.useState)(null),[N,O]=(0,c.useState)(null),[P,S]=(0,c.useState)({}),[T,U]=(0,c.useState)(null),[V,W]=(0,c.useState)({}),{getSelection:X,pushSelection:Y,replaceSelection:Z}=(0,s.useUrlSelection)(),$=X("job"),_=X("run"),aa=(0,c.useMemo)(()=>f?new Set(f):null,[f]);(0,c.useEffect)(()=>{fetch("/api/prompt-jobs/agents").then(a=>a.json()).then(a=>{let b={};for(let c of a.agents??[])b[c.id]=c;W(b)}).catch(a=>console.warn("[PromptJobBoard] fetch agent map failed:",a))},[]);let ab=a=>{U(a),setTimeout(()=>U(null),2500)},ac=(0,c.useMemo)(()=>(aa?n.filter(a=>aa.has(a.id)):n).filter(a=>"linear_worker"!==a.executionMode),[n,aa]),ad=ac.filter(a=>"all"===B||a.state===B),ae=$?ac.find(a=>a.id===$)??null:null,af=ae??(D?.id===$&&(!aa||aa.has(D.id))?D:null);ac.length,ac.filter(a=>"active"===a.state).length,ac.filter(a=>"paused"===a.state).length,ac.filter(a=>"stopped"===a.state).length;let ag=async a=>{await v(a)&&ab(`${a.name} ${"active"===a.state?"paused":"resumed"}`)},ah=async(a,b)=>{if(b?.stopPropagation(),P[a])return;S(b=>({...b,[a]:!0}));let c=await w(a);S(b=>{let c={...b};return delete c[a],c}),c&&ab("Run triggered")},ai=async a=>{let b=await u(a);if(b.ok){$===a&&Y({job:null,run:null}),ab("Job deleted");return}ab(b.error??"Failed to delete scheduled task")},aj=async a=>{await y(a)&&ab("Run cancelled")},ak=async b=>{if(J)await r(J.id,b)&&ab(`Task "${b.name}" updated`);else{let c=m?await m(b):await q({...b,projectId:a??""});c&&(await p(),Y({job:c,run:null}),ab(`Task "${b.name}" created`))}};(0,c.useEffect)(()=>{if(!$){E(null),_&&Z({run:null});return}if(aa&&!aa.has($)){E(null),Z({job:null,run:null});return}if(ae)return void E(a=>a?.id===$?ae:null);let a=!1;return(async()=>{try{let b=await fetch(`/api/prompt-jobs/${encodeURIComponent($)}`);if(a)return;if(404===b.status)return void Z({job:null,run:null});if(!b.ok)throw Error(`Failed to fetch selected scheduled task: ${b.status}`);let c=await b.json().catch(()=>({}));if(!c.job?.id||!e&&c.job.objectiveId)return void Z({job:null,run:null});E(c.job)}catch(b){a||console.error("Failed to hydrate selected prompt job",b)}})(),()=>{a=!0}},[e,Z,ae,$,_,aa]);let al=T&&(0,b.jsx)("div",{className:"fixed bottom-8 left-1/2 -translate-x-1/2 z-50 animate-in fade-in slide-in-from-bottom-2 duration-200",children:(0,b.jsx)("div",{className:"bg-[var(--card-bg)] border border-[var(--card-border)] px-4 py-2.5 rounded-xl shadow-lg flex items-center gap-2.5 text-sm font-medium",children:T})});return H?(0,b.jsxs)(b.Fragment,{children:[al,(0,b.jsx)(M,{onClose:()=>{I(!1),L(null)},onSubmit:ak,editingJob:J,createDefaults:i,contextLabel:g})]}):(0,b.jsxs)("div",{className:"flex h-full min-h-0 flex-col text-[var(--foreground)] lg:flex-row",children:[al,(0,b.jsxs)("div",{className:"flex w-full shrink-0 flex-col border-b border-[var(--card-border)] lg:w-[390px] lg:border-b-0 lg:border-r",children:[(0,b.jsx)("div",{className:"px-6 pb-0 pt-6",children:(0,b.jsx)("div",{className:"border-b border-[var(--card-border)]",children:(0,b.jsxs)("div",{className:"flex items-end justify-between gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center gap-4",children:[(0,b.jsx)("div",{className:"flex items-end gap-10",children:["all","active","paused"].map(a=>{let c=B===a;return(0,b.jsxs)("button",{onClick:()=>C(a),className:`relative pb-4 text-[18px] font-semibold capitalize transition-colors ${c?"text-[var(--foreground)]":"text-[var(--muted-foreground)] hover:text-[var(--foreground)]"}`,children:[a,c?(0,b.jsx)("span",{className:"absolute bottom-[6px] left-0 h-[4px] w-8 rounded-full bg-[var(--foreground)]"}):null]},a)})}),g?(0,b.jsx)("span",{className:"mb-3 rounded-full border border-sky-500/25 bg-sky-500/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.16em] text-sky-100",children:g}):null]}),(0,b.jsxs)("div",{className:"flex items-center gap-5 pb-4 text-[var(--muted-foreground)]",children:[(0,b.jsx)("button",{onClick:()=>p(),className:"transition-colors hover:text-[var(--foreground)]",title:"Refresh",children:(0,b.jsx)(l.RefreshCw,{size:18})}),(0,b.jsx)("button",{onClick:()=>{L(null),I(!0)},className:"transition-colors hover:text-[var(--foreground)]",title:"New Job",children:(0,b.jsx)(h.Plus,{size:20})})]})]})})}),(0,b.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto pb-5",children:o&&0===ac.length?(0,b.jsx)("div",{className:"py-12 text-center text-sm text-[var(--muted-foreground)]",children:"Loading scheduled tasks..."}):(0,b.jsxs)("div",{className:"overflow-hidden",children:[ad.map(a=>{let c=$===a.id,d=a.cronExpr&&(0,A.cronToHuman)(a.cronExpr)||a.cadence||a.cronExpr;return(0,b.jsx)("div",{onClick:()=>Y({job:a.id,run:null}),className:`cursor-pointer border-b border-[var(--card-border)]/50 px-6 py-4 transition-colors ${c?"bg-[var(--card-bg)]":"hover:bg-[var(--muted)]/10"}`,children:(0,b.jsxs)("div",{className:"flex items-start gap-4",children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"truncate text-[15px] font-medium text-[var(--foreground)]",children:a.name}),(0,b.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-x-4 gap-y-1 text-[12px] text-[var(--muted-foreground)]",children:[(0,b.jsx)("span",{className:"min-w-0 flex items-center gap-1.5 truncate",children:a.agentId&&V[a.agentId]?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("img",{src:K(a.agentId,V[a.agentId].color,16),alt:"",className:"size-4 rounded-full"}),V[a.agentId].name]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(k.Terminal,{size:11}),a.provider]})}),(0,b.jsxs)("span",{className:`flex items-center gap-1 ${F(a)?"text-amber-400 font-medium":""}`,children:[(0,b.jsx)(j.Clock,{size:11}),G(a.nextRunAt,a.state)]}),(0,b.jsx)("span",{className:"truncate font-mono text-[11px]",title:d,children:d}),"linear_worker"===a.executionMode?(0,b.jsx)("span",{className:"rounded-md border border-violet-400/20 bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-violet-400",children:"linear"}):null,a.condition?(0,b.jsx)("span",{className:"rounded-md border border-blue-400/20 bg-blue-500/10 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-blue-400",children:"gated"}):null]})]}),(0,b.jsx)("button",{onClick:b=>{b.stopPropagation(),ag(a)},type:"button",role:"switch","aria-checked":"active"===a.state,title:"active"===a.state?"Pause":"Resume",className:`relative inline-flex h-[18px] w-[32px] shrink-0 cursor-pointer rounded-full border transition-colors ${"active"===a.state?"border-emerald-400/30 bg-emerald-500/40":"border-[var(--card-border)] bg-[var(--muted)]"}`,children:(0,b.jsx)("span",{className:`pointer-events-none absolute top-[2px] size-[12px] rounded-full bg-white/90 shadow-sm transition-transform ${"active"===a.state?"translate-x-[16px]":"translate-x-[2px]"}`})})]})},a.id)}),0===ad.length&&(0,b.jsx)("div",{className:"rounded-xl border border-dashed border-[var(--card-border)] py-12 text-center text-sm text-[var(--muted-foreground)]",children:0===ac.length?"No scheduled tasks yet. Create one to get started.":"No scheduled tasks match the selected filter."})]})})]}),(0,b.jsx)("div",{className:"min-h-0 min-w-0 flex-1",children:af?(0,b.jsx)(Q,{job:af,agentMap:V,onEdit:()=>{L(af),I(!0)},onToggle:()=>ag(af),onDelete:()=>O(af),onRunNow:()=>ah(af.id),onCancelRun:()=>aj(af.id),fetchRuns:z},af.id):(0,b.jsx)("div",{className:"flex h-full items-center justify-center border-t border-[var(--card-border)] lg:border-l-0 lg:border-t-0",children:(0,b.jsxs)("div",{className:"rounded-2xl border border-dashed border-[var(--card-border)] bg-[var(--card-bg)]/60 px-8 py-10 text-center",children:[(0,b.jsx)("div",{className:"text-sm font-medium text-[var(--foreground)]",children:"Select a scheduled task"}),(0,b.jsx)("p",{className:"mt-2 text-sm text-[var(--muted-foreground)]",children:"The selected job will open here with its runs and chat output."})]})})}),(0,b.jsx)(x.default,{isOpen:!!N,title:"Delete scheduled task?",message:"This permanently removes the task and all of its run history. Delete is only allowed when no run is queued or running.",preview:N?.name,confirmLabel:"Delete",variant:"danger",onConfirm:()=>{N&&ai(N.id),O(null)},onCancel:()=>O(null)})]})}a.s(["CreateJobModal",()=>M,"agentAvatar",()=>K,"default",()=>R],393041)}];
|
|
7
7
|
|
|
8
8
|
//# sourceMappingURL=apps_local_components_PromptJobBoard_tsx_281b2873._.js.map
|