@timqi/pier 0.0.19 → 0.0.21

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.
Files changed (85) hide show
  1. package/dist/agent/config-sync.js +123 -0
  2. package/dist/agent/config.js +95 -3
  3. package/dist/agent/events.js +10 -1
  4. package/dist/agent/pi.js +50 -28
  5. package/dist/config-sync-fetch.js +84 -0
  6. package/dist/config-sync-task.js +59 -0
  7. package/dist/config-sync.js +179 -0
  8. package/dist/core/hub.js +10 -3
  9. package/dist/core/reply.js +12 -2
  10. package/dist/core/router.js +162 -37
  11. package/dist/db.js +6 -0
  12. package/dist/main.js +31 -1
  13. package/dist/tasks/agent.js +11 -22
  14. package/dist/tasks/callbacks.js +1 -1
  15. package/dist/tasks/definitions.js +25 -16
  16. package/dist/tasks/execution.js +11 -3
  17. package/dist/tasks/messages.js +57 -14
  18. package/dist/tasks/routes.js +58 -10
  19. package/dist/tasks/runs.js +0 -5
  20. package/dist/tasks/service.js +9 -4
  21. package/dist/tasks/store.js +45 -0
  22. package/dist/tasks/tool.js +8 -4
  23. package/dist/web/config-sync.js +91 -0
  24. package/dist/web/public/assets/activity-Cw0LRVNI.js +5 -0
  25. package/dist/web/public/assets/activity-Cw0LRVNI.js.br +0 -0
  26. package/dist/web/public/assets/activity-Cw0LRVNI.js.gz +0 -0
  27. package/dist/web/public/assets/{boards-DEMQ51m1.js → boards-DMVbV84c.js} +1 -1
  28. package/dist/web/public/assets/boards-DMVbV84c.js.br +0 -0
  29. package/dist/web/public/assets/boards-DMVbV84c.js.gz +0 -0
  30. package/dist/web/public/assets/{code-DjWvqL94.js → code-C86xKk2k.js} +1 -1
  31. package/dist/web/public/assets/{explorer-BTGQ6Syc.js → explorer-DTvsy5Rs.js} +1 -1
  32. package/dist/web/public/assets/explorer-DTvsy5Rs.js.br +0 -0
  33. package/dist/web/public/assets/explorer-DTvsy5Rs.js.gz +0 -0
  34. package/dist/web/public/assets/{ghostty-web-D8CLFi_l.js → ghostty-web-CvSZragH.js} +1 -1
  35. package/dist/web/public/assets/ghostty-web-CvSZragH.js.br +0 -0
  36. package/dist/web/public/assets/ghostty-web-CvSZragH.js.gz +0 -0
  37. package/dist/web/public/assets/index-DHxoYoeq.js +79 -0
  38. package/dist/web/public/assets/index-DHxoYoeq.js.br +0 -0
  39. package/dist/web/public/assets/index-DHxoYoeq.js.gz +0 -0
  40. package/dist/web/public/assets/{index-yNocr797.css → index-DuZ2vERd.css} +1 -1
  41. package/dist/web/public/assets/index-DuZ2vERd.css.br +0 -0
  42. package/dist/web/public/assets/index-DuZ2vERd.css.gz +0 -0
  43. package/dist/web/public/assets/runs-jY40JBP-.js +1 -0
  44. package/dist/web/public/assets/runs-jY40JBP-.js.br +0 -0
  45. package/dist/web/public/assets/runs-jY40JBP-.js.gz +0 -0
  46. package/dist/web/public/assets/settings-Dux7PIKF.js +6 -0
  47. package/dist/web/public/assets/settings-Dux7PIKF.js.br +0 -0
  48. package/dist/web/public/assets/settings-Dux7PIKF.js.gz +0 -0
  49. package/dist/web/public/assets/task-runs-DKvtBVxS.js +3 -0
  50. package/dist/web/public/assets/task-runs-DKvtBVxS.js.br +0 -0
  51. package/dist/web/public/assets/task-runs-DKvtBVxS.js.gz +0 -0
  52. package/dist/web/public/assets/tasks-CqfrOVIt.js +4 -0
  53. package/dist/web/public/assets/tasks-CqfrOVIt.js.br +0 -0
  54. package/dist/web/public/assets/tasks-CqfrOVIt.js.gz +0 -0
  55. package/dist/web/public/assets/{terminal-zLyOvGto.js → terminal-DL_0yEy7.js} +2 -2
  56. package/dist/web/public/assets/terminal-DL_0yEy7.js.br +0 -0
  57. package/dist/web/public/assets/terminal-DL_0yEy7.js.gz +0 -0
  58. package/dist/web/public/index.html +13 -2
  59. package/dist/web/public/index.html.br +0 -0
  60. package/dist/web/public/index.html.gz +0 -0
  61. package/dist/web/server.js +65 -60
  62. package/package.json +2 -2
  63. package/skills/pier-tasks/SKILL.md +14 -9
  64. package/dist/web/public/assets/activity-BsoWK6vt.js +0 -5
  65. package/dist/web/public/assets/activity-BsoWK6vt.js.br +0 -0
  66. package/dist/web/public/assets/activity-BsoWK6vt.js.gz +0 -0
  67. package/dist/web/public/assets/boards-DEMQ51m1.js.br +0 -0
  68. package/dist/web/public/assets/boards-DEMQ51m1.js.gz +0 -0
  69. package/dist/web/public/assets/explorer-BTGQ6Syc.js.br +0 -0
  70. package/dist/web/public/assets/explorer-BTGQ6Syc.js.gz +0 -0
  71. package/dist/web/public/assets/ghostty-web-D8CLFi_l.js.br +0 -0
  72. package/dist/web/public/assets/ghostty-web-D8CLFi_l.js.gz +0 -0
  73. package/dist/web/public/assets/index-BFzmvpGX.js +0 -78
  74. package/dist/web/public/assets/index-BFzmvpGX.js.br +0 -0
  75. package/dist/web/public/assets/index-BFzmvpGX.js.gz +0 -0
  76. package/dist/web/public/assets/index-yNocr797.css.br +0 -0
  77. package/dist/web/public/assets/index-yNocr797.css.gz +0 -0
  78. package/dist/web/public/assets/settings-DSTKXN2o.js +0 -6
  79. package/dist/web/public/assets/settings-DSTKXN2o.js.br +0 -0
  80. package/dist/web/public/assets/settings-DSTKXN2o.js.gz +0 -0
  81. package/dist/web/public/assets/tasks-Dy1SCAE_.js +0 -4
  82. package/dist/web/public/assets/tasks-Dy1SCAE_.js.br +0 -0
  83. package/dist/web/public/assets/tasks-Dy1SCAE_.js.gz +0 -0
  84. package/dist/web/public/assets/terminal-zLyOvGto.js.br +0 -0
  85. package/dist/web/public/assets/terminal-zLyOvGto.js.gz +0 -0
@@ -1,4 +0,0 @@
1
- import{B as e,C as t,D as n,F as r,G as i,I as a,M as o,T as s,U as c,V as l,W as u,g as d,x as f,y as p,z as m}from"./index-BFzmvpGX.js";function h(e,t){let n=e.map(e=>[`${e.title??`Untitled`} · ${e.cwd}`,e.id]);return t&&!n.some(([,e])=>e===t)&&n.push([`Current session · ${t}`,t]),n}function g(e,r){let i=document.createElement(`dialog`);i.className=`m-auto w-[38.75rem] max-w-[94vw] rounded-lg border border-neutral-200 p-0 shadow-xl backdrop:bg-black/20`;let o=document.createElement(`form`);o.className=`flex max-h-[88vh] flex-col`;let s=a(`span`,`mr-auto text-[12px] text-red-600`),c=a(`header`,`flex h-11 flex-none items-center border-b border-neutral-200 px-4 font-medium`,r?`Edit task`:`New task`),l=a(`div`,`grid min-h-0 flex-1 grid-cols-2 gap-3 overflow-y-auto p-4`),u=f(r?.name??``);u.required=!0;let m=f(r?.description??``),g=f(String(r?.timeoutSeconds??900),`number`);g.min=`1`,g.max=`86400`;let v=t([[`Manual`,`manual`],[`Scheduled`,`cron`],[`Watch`,`watch`]],r?.trigger.type??`manual`),y=t([[`Bash`,`bash`],[`Agent`,`agent`],[`Task`,`task`]],r?.action.type??`bash`),b=t([[`No callback`,`none`],[`Invoking session`,`origin`],[`Specific session`,`session`]],r?.callback.type??`none`),x=r?.callback.type===`session`?r.callback.sessionId:null,S=t(h(e.sessions(),x),x??``),C=p(`Callback session`,S);C.classList.toggle(`hidden`,b.value!==`session`),b.onchange=()=>C.classList.toggle(`hidden`,b.value!==`session`),l.append(p(`Name`,u),p(`Description`,m),p(`Trigger`,v),p(`Action`,y),p(`Callback`,b),C,p(`Timeout (seconds)`,g));let w=a(`div`,`col-span-2 grid grid-cols-2 gap-3 border-t border-neutral-200 pt-3`);l.append(w);let T=()=>{w.replaceChildren();let c,l,d,x,C,T;if(v.value===`cron`)c=f(r?.trigger.type===`cron`?r.trigger.expression:`0 9 * * *`),l=f(r?.trigger.type===`cron`?r.trigger.timezone:Intl.DateTimeFormat().resolvedOptions().timeZone),w.append(p(`Cron`,c),p(`Timezone`,l));else if(v.value===`watch`){d=n(r?.trigger.type===`watch`?r.trigger.script:``,4),T=f(r?.trigger.type===`watch`?r.trigger.cwd:e.sessions()[0]?.cwd??``),x=f(String(r?.trigger.type===`watch`?r.trigger.intervalSeconds:60),`number`),C=t([[`Continue after matches`,`repeat`],[`Stop after first match`,`once`]],r?.trigger.type===`watch`?r.trigger.mode:`repeat`);let i=p(`Probe script (0=match, 1=no match)`,d);i.classList.add(`col-span-2`),w.append(i,p(`Probe directory`,T),p(`Interval (seconds)`,x),p(`Mode`,C))}let E,D,O,k,A,j,M,N,P,F;if(y.value===`bash`){D=f(r?.action.type===`bash`?r.action.cwd:e.sessions()[0]?.cwd??``),E=n(r?.action.type===`bash`?r.action.script:``,6);let t=p(`Bash script`,E);t.classList.add(`col-span-2`),w.append(p(`Working directory`,D),a(`span`,``),t)}else if(y.value===`agent`){let i=e.sessions(),a=r?.action.type===`agent`?r.action:null,o=a?.session.mode===`reuse`?a.session.sessionId:``,s=h(i,o||null);O=t([[`Reuse session`,`reuse`],[`Fresh child per run`,`fresh`],[`Fork caller context`,`fork`]],a?.session.mode??`fresh`),k=t(s,o||s[0]?.[1]||``);let c=a?.session.mode===`fresh`||a?.session.mode===`fork`?a.session.cwd??``:``;A=f(c||i[0]?.cwd||``),j=n(a?.prompt??``,6),M=t([[`Project default`,``],[`Off`,`off`],[`Low`,`low`],[`Medium`,`medium`],[`High`,`high`],[`Extra high`,`xhigh`]],a?.launch?.thinking??``),N=f(a?.launch?.model?.provider??``),P=f(a?.launch?.model?.id??``);let l=p(`Session`,k),u=p(`Child directory`,A),d=[p(`Thinking`,M),p(`Model provider (optional)`,N),p(`Model id (optional)`,P)],m=()=>{let e=O?.value===`reuse`;l.classList.toggle(`hidden`,!e),u.classList.toggle(`hidden`,e);for(let t of d)t.classList.toggle(`hidden`,e)};O.onchange=m,m();let g=p(`Prompt`,j);g.classList.add(`col-span-2`),w.append(p(`Session policy`,O),l,u,...d,g)}else F=t(e.tasks().filter(e=>e.id!==r?.id&&!e.archived).map(e=>[e.name,e.id]),r?.action.type===`task`?r.action.taskId:``),w.append(p(`Target task`,F));o.onsubmit=t=>{t.preventDefault();let n=v.value===`manual`?{type:`manual`}:v.value===`cron`?{type:`cron`,expression:c.value,timezone:l.value}:{type:`watch`,script:d.value,cwd:T.value,intervalSeconds:Number(x.value),mode:C.value},a=y.value===`agent`&&O.value!==`reuse`?{...M.value?{thinking:M.value}:{},...N.value.trim()&&P.value.trim()?{model:{provider:N.value.trim(),id:P.value.trim()}}:{}}:void 0,o=y.value===`bash`?{type:`bash`,cwd:D.value,script:E.value}:y.value===`agent`?{type:`agent`,prompt:j.value,session:O.value===`reuse`?{mode:`reuse`,sessionId:k.value}:O.value===`fork`?{mode:`fork`,...A.value.trim()?{cwd:A.value.trim()}:{}}:{mode:`fresh`,cwd:A.value},...a?{launch:a}:{}}:{type:`task`,taskId:F.value},f=b.value===`origin`?{type:`origin`}:b.value===`session`?{type:`session`,sessionId:S.value}:{type:`none`},p={name:u.value,description:m.value,trigger:n,action:o,callback:f,timeoutSeconds:Number(g.value)};s.textContent=``,_(r?.id,p,i,s,e.onSaved)}};v.onchange=T,y.onchange=T,T();let E=d(`Cancel`);E.onclick=()=>i.close();let D=d(`Save`,!0);D.type=`submit`;let O=a(`footer`,`flex flex-none justify-end gap-2 border-t border-neutral-200 px-4 py-3`);O.append(s,E,D),o.append(c,l,O),i.append(o),i.addEventListener(`close`,()=>i.remove()),document.body.append(i),i.showModal(),u.focus()}async function _(e,t,n,r,a){let o=await i(e?`/api/tasks/${e}`:`/api/tasks`,t,e?`PATCH`:`POST`);if(!o.ok){r.textContent=(await o.json()).error??`Task save failed`;return}let s=await o.json(),c=`task`in s?s.task:s;n.close(),a(c.id)}var v=e=>e===null?`-`:new Date(e).toLocaleString(),y=e=>e.startedAt===null?`-`:r((e.finishedAt??Date.now())-e.startedAt);function b(e,t,n){let r=a(`div`,`divide-y divide-neutral-100`);for(let i of t){let t=a(`button`,`grid w-full cursor-pointer grid-cols-[7.5rem_1fr_7.5rem_6.25rem] gap-3 px-4 py-2.5 text-left text-[12.5px] hover:bg-neutral-50`);t.append(a(`span`,`font-medium`,i.state),a(`span`,`truncate text-neutral-500`,v(i.queuedAt)),a(`span`,`text-neutral-500`,i.triggerSource),a(`span`,`text-right text-neutral-500`,y(i))),t.onclick=()=>void x(e,i.id,r,n),r.append(t)}t.length||r.append(a(`p`,`p-4 text-[13px] text-neutral-400`,`No runs yet.`)),e.replaceChildren(r)}async function x(e,t,n,r){let[i,o]=await Promise.all([l(`/api/task-runs/${t}`,`Could not load the run`),l(`/api/task-runs/${t}/messages`,`Could not load the run's messages`)]);if(!i.ok){e.replaceChildren(a(`p`,`p-4 text-[13px] text-red-600`,i.error));return}let s=i.value,u=o.ok?o.value:[],f=d(`Back to runs`);f.onclick=()=>e.replaceChildren(n);let p=a(`div`,`flex items-center gap-2 border-b border-neutral-200 px-4 py-2`);if(p.append(f,a(`span`,`font-mono text-[12px] text-neutral-400`,s.id)),s.targetSessionId){let e=d(`Open session`);e.classList.add(`ml-auto`),e.onclick=()=>r.openSession(s.targetSessionId),p.append(e)}if(s.state===`queued`||s.state===`running`){let e=d(`Steer`);e.onclick=()=>void S(c(`Steer subagent`,`/api/task-runs/${s.id}/steer`,{mode:`steer`,sourceSessionId:r.currentSessionId()},`Run control failed`),r);let t=d(`Stop`);t.onclick=()=>void r.mutate(`/api/task-runs/${s.id}/cancel`),p.append(e,t)}else if(s.targetSessionId){let e=d(`Continue`);e.onclick=()=>void S(c(`Continue subagent`,`/api/task-runs/${s.id}/resume`,{sourceSessionId:r.currentSessionId()},`Run control failed`),r),p.append(e)}let m=a(`div`,`min-h-0 flex-1 overflow-auto`),h=a(`pre`,`whitespace-pre-wrap break-words p-4 font-mono text-[12px]`,JSON.stringify(s,null,2));if(m.append(h),u.length){let e=a(`div`,`border-t border-neutral-200`);e.append(a(`div`,`px-4 py-2 text-[11px] font-semibold uppercase text-neutral-400`,`Messages`));for(let t of u){let n=a(`div`,`grid grid-cols-[6.25rem_6.25rem_1fr] gap-3 border-t border-neutral-100 px-4 py-2 text-[12px]`);n.append(a(`span`,`font-medium`,t.kind),a(`span`,`text-neutral-500`,t.state),a(`span`,`whitespace-pre-wrap`,t.content)),e.append(n)}m.append(e)}e.replaceChildren(p,m)}async function S(e,t){let n=await e;n.sent&&(n.error?t.onError(n.error):await t.reload())}var C=e=>e.trigger.type===`manual`?`Manual`:e.trigger.type===`cron`?`${e.trigger.expression} (${e.trigger.timezone})`:`Every ${e.trigger.intervalSeconds}s · ${e.trigger.mode}`,w=e=>e.action.type===`agent`?`Agent · ${e.action.session.mode}`:e.action.type===`bash`?`Bash`:`Task`;function T(t,n,r,c,f,p){let h=[],_=[],x=null,S=`active`,T=``,E=m(async()=>{let e=S,t=await l(`/api/tasks?state=${e===`archived`?`archived`:`active`}${e===`subagent`?`&kind=subagent`:``}`,`Failed to load tasks`);if(!t.ok)return T=``,D(t.error);if(e!==S)return;let n=JSON.stringify(t.value);e+n===T&&!x||(T=e+n,h=t.value,_=e===`archived`||e===`subagent`?await O():h,e!==`active`&&e!==`archived`&&e!==`subagent`&&(h=h.filter(t=>t.trigger.type===e)),x?await I(x):P())});function D(e){t.replaceChildren(a(`p`,`p-4 text-[13px] text-red-600`,e))}async function O(){let e=await l(`/api/tasks?state=active`,`Failed to load tasks`);return e.ok?e.value:_}let k={sessions:n,tasks:()=>_,onSaved:e=>{x=e,E()}},A={openSession:c,currentSessionId:f,mutate:z,onError:D,reload:E};function j(e,t){let n=a(`header`,`flex h-10 flex-none items-center gap-2 border-b border-neutral-200 px-4`);if(n.append(typeof e==`string`?a(`span`,`truncate font-medium max-md:hidden`,e):e),t.length){let e=a(`div`,`ml-auto flex items-center gap-2`);e.append(...t),n.append(e)}return n}function M(){return a(`div`,`tabstrip`,s(`Sessions`,!1,()=>p(`sessions`)),s(`Dependencies`,!1,()=>p(`dependencies`)),s(`Tasks`,!0,N))}function N(){x=null,P()}function P(){let e=d(`New task`,!0);e.onclick=()=>void r().then(()=>g(k));let n=M(),i=a(`div`,`ml-auto flex flex-none items-center gap-1 pl-1 max-md:ml-0 max-md:w-full max-md:overflow-x-auto max-md:pl-0`);for(let[e,t]of[[`All`,`active`],[`Manual`,`manual`],[`Scheduled`,`cron`],[`Watching`,`watch`],[`Subagents`,`subagent`],[`Archived`,`archived`]])i.append(s(e,S===t,()=>{S=t,x=null,E()}));n.append(i);let o=document.createElement(`table`);o.className=`w-full min-w-[52rem] table-fixed text-left text-[12.5px]`,o.innerHTML=`<thead class="sticky top-0 bg-neutral-50 text-[10.5px] uppercase text-neutral-400"><tr>
2
- <th class="w-[24%] px-4 py-2 font-semibold">Name</th><th class="w-[10%] px-2 py-2 font-semibold">Action</th>
3
- <th class="w-[23%] px-2 py-2 font-semibold">Trigger</th><th class="w-[17%] px-2 py-2 font-semibold">Next</th>
4
- <th class="w-[14%] px-2 py-2 font-semibold">Last result</th><th class="px-2 py-2 font-semibold"></th></tr></thead>`;let c=document.createElement(`tbody`);for(let e of h)c.append(F(e));o.append(c),t.replaceChildren(j(`Tasks`,[e]),n,a(`div`,`min-h-0 flex-1 overflow-auto`,o))}function F(e){let t=document.createElement(`tr`);t.className=`cursor-pointer border-b border-neutral-100 hover:bg-neutral-50`,t.onclick=()=>{x=e.id,I(e.id)};let n=e.archived?`Archived`:e.enabled?`Enabled`:`Paused`;t.append(a(`td`,`truncate py-2.5 pl-4 pr-2`,a(`div`,`truncate font-medium`,e.name),a(`div`,`text-[11px] text-neutral-400`,n)));for(let n of[w(e),C(e),v(e.nextRunAt),e.lastRun?`${e.lastRun.state} · ${y(e.lastRun)}`:`-`])t.append(a(`td`,`truncate px-2 py-2.5`,n));let r=d(`Run`);return r.disabled=e.archived,r.onclick=t=>{t.stopPropagation(),R(e.id)},t.append(a(`td`,`px-2 py-1 text-right`,r)),t}async function I(e){let[n,i]=await Promise.all([l(`/api/tasks/${e}`,`Failed to load task`),l(`/api/tasks/${e}/runs`,`Failed to load the task's runs`)]);if(!n.ok)return D(n.error);if(!i.ok)return D(i.error);let o=n.value,s=i.value,c=d(`Tasks`);c.className=`cursor-pointer text-neutral-500 hover:underline`,c.onclick=N;let u=a(`span`,`flex min-w-0 items-center gap-1.5`,c,a(`span`,`text-neutral-400`,`›`),a(`span`,`truncate font-medium`,o.name)),f=d(`Run now`,!0);f.disabled=o.archived,f.onclick=()=>void R(o.id);let p=d(o.enabled?`Pause`:`Resume`);p.disabled=o.archived||o.trigger.type===`manual`,p.onclick=()=>void z(`/api/tasks/${o.id}/${o.enabled?`pause`:`resume`}`);let m=d(`Edit`);m.disabled=o.archived,m.onclick=()=>void r().then(()=>g(k,o));let h=d(`Archive`);h.disabled=o.archived,h.onclick=()=>void z(`/api/tasks/${o.id}/archive`);let _=a(`div`,`flex flex-none gap-1 border-b border-neutral-200 px-4 py-2`),v=d(`Definition`),y=d(`Runs (${s.length})`),x=a(`div`,`min-h-0 flex-1 overflow-auto`),S=()=>{v.classList.add(`bg-neutral-200`),y.classList.remove(`bg-neutral-200`),L(x,o)};v.onclick=S,y.onclick=()=>{y.classList.add(`bg-neutral-200`),v.classList.remove(`bg-neutral-200`),b(x,s,A)},_.append(v,y),t.replaceChildren(j(u,[f,p,m,h]),M(),_,x),s.length?y.click():S()}function L(e,t){let n=a(`div`,`grid max-w-4xl grid-cols-[9.375rem_minmax(0,1fr)] gap-x-5 gap-y-3 p-4 text-[13px]`),r=[[`Status`,t.archived?`Archived`:t.enabled?`Enabled`:`Paused`],[`Trigger`,C(t)],[`Action`,w(t)],[`Timeout`,`${t.timeoutSeconds}s`],[`Next run`,v(t.nextRunAt)],[`Revision`,String(t.revision)],[`Created by`,t.createdBySessionId??t.creator],[`Callback`,t.callback.type===`session`?t.callback.sessionId:t.callback.type],[`Description`,t.description||`-`]];t.action.type===`agent`&&(r.push([`Session policy`,t.action.session.mode]),t.action.session.mode===`reuse`&&r.push([`Session`,t.action.session.sessionId]),t.action.session.mode===`fresh`&&r.push([`Directory`,t.action.session.cwd]),t.action.session.mode===`fork`&&r.push([`Directory`,t.action.session.cwd??`Caller project`]),t.action.launch?.model&&r.push([`Model`,`${t.action.launch.model.provider}/${t.action.launch.model.id}`]),t.action.launch?.thinking&&r.push([`Thinking`,t.action.launch.thinking]),r.push([`Prompt`,t.action.prompt])),t.action.type===`bash`&&r.push([`Directory`,t.action.cwd],[`Script`,t.action.script]),t.action.type===`task`&&r.push([`Target task`,t.action.taskId]),t.trigger.type===`watch`&&r.push([`Probe`,t.trigger.script]);for(let[e,t]of r)n.append(a(`span`,`text-[11px] font-semibold uppercase text-neutral-400`,e),a(`pre`,`whitespace-pre-wrap break-words font-mono text-[12.5px]`,t));if(t.action.type===`agent`&&t.action.session.mode===`reuse`){let{sessionId:e}=t.action.session,r=d(`Open session`);r.onclick=()=>c(e),n.append(a(`span`,``,``),r)}e.replaceChildren(n)}async function R(t){let n=await i(`/api/tasks/${t}/run`,{sourceSessionId:f()});if(!n.ok)return D(await e(n,`Failed to run task`));x=t,await I(t)}async function z(e){let t=await u(e,`POST`,`Task update failed`);if(t)return D(t);await E()}let B=o(t,e=>{e&&(x=e),E()});return Object.assign(B,{refresh(e){B.visible&&(!x||!e||x===e)&&E()}})}export{T as createTasksView};