@kky42/pievo-server 4.2.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{MarkdownView-C9-AzIkl.js → MarkdownView-T28pBEgh.js} +1 -1
  3. package/.output/public/assets/{actionUi-D47jwMfh.js → actionUi-CY207nNM.js} +1 -1
  4. package/.output/public/assets/app-Cye1TgwS.css +2 -0
  5. package/.output/public/assets/index-BxXrF3gW.js +10 -0
  6. package/.output/public/assets/loops._loopId-DuSEcu38.js +2 -0
  7. package/.output/public/assets/{loops._loopId_.runs._runId-DW2HPjtj.js → loops._loopId_.runs._runId-vjQaPXEe.js} +2 -2
  8. package/.output/public/assets/{preload-helper-CbYqBpY9.js → preload-helper-B7p1iHUP.js} +2 -2
  9. package/.output/public/assets/routes-BUMEAWuS.js +1 -0
  10. package/.output/public/assets/routes-BrqOpUEi.js +1 -0
  11. package/.output/server/_ssr/{MachinesModal-DwHy2cis.mjs → MachinesModal-CB8rpDG2.mjs} +24 -12
  12. package/.output/server/_ssr/{actionUi-CszQXDSN.mjs → actionUi-CPYgZIr7.mjs} +40 -62
  13. package/.output/server/_ssr/{artifactFiles-DJiK99sF.mjs → artifactFiles-DLfSRhrV.mjs} +3 -3
  14. package/.output/server/_ssr/{artifactKind-DYMU0q3N.mjs → artifactKind-C0oXLA23.mjs} +2 -2
  15. package/.output/server/_ssr/{boot-CecCDRoH.mjs → boot-jtVCf_pN.mjs} +27 -91
  16. package/.output/server/_ssr/{loopApi-uEiBQ5YX.mjs → loopApi-0nR35Kh2.mjs} +8 -8
  17. package/.output/server/_ssr/{loopProjection-Bo54jjGd.mjs → loopProjection-ZNfSmA5e.mjs} +2 -2
  18. package/.output/server/_ssr/{loops._loopId-c1oRP7cr.mjs → loops._loopId-CcJ3rxCU.mjs} +9 -65
  19. package/.output/server/_ssr/{loops._loopId_.runs._runId-czMVvNsk.mjs → loops._loopId_.runs._runId-DFlrV3dJ.mjs} +2 -2
  20. package/.output/server/_ssr/{loops._loopId_.runs._runId-Dl0SwOlC.mjs → loops._loopId_.runs._runId-XkGF7HKo.mjs} +4 -4
  21. package/.output/server/_ssr/{machineFns-aw9xe5oz.mjs → machineFns-D-97a_hz.mjs} +2 -2
  22. package/.output/server/_ssr/{router-3OQ849sN.mjs → router-CZ9CFWS2.mjs} +15 -15
  23. package/.output/server/_ssr/{routes-CL4y6AEv.mjs → routes-BBmuVs6n.mjs} +2 -2
  24. package/.output/server/_ssr/{routes-nU2PDK3W.mjs → routes-JxTh5mbj.mjs} +2 -2
  25. package/.output/server/_ssr/{routes-CT5IdoiP.mjs → routes-fHRtSpkH.mjs} +5 -5
  26. package/.output/server/_ssr/ssr.mjs +22 -22
  27. package/.output/server/{_tanstack-start-manifest_v-_nMS2ozp.mjs → _tanstack-start-manifest_v-C9JsxlwC.mjs} +8 -8
  28. package/.output/server/drizzle/0003_run_status_ok.sql +13 -0
  29. package/.output/server/drizzle/meta/_journal.json +7 -0
  30. package/.output/server/index.mjs +47 -47
  31. package/drizzle/0003_run_status_ok.sql +13 -0
  32. package/drizzle/meta/_journal.json +7 -0
  33. package/package.json +1 -1
  34. package/.output/public/assets/app-C5xfpeJe.css +0 -2
  35. package/.output/public/assets/index-BgNjFXWE.js +0 -10
  36. package/.output/public/assets/loops._loopId-Bo63FXPQ.js +0 -2
  37. package/.output/public/assets/routes-C88oSApK.js +0 -1
  38. package/.output/public/assets/routes-CTCh8xYm.js +0 -1
@@ -1,2 +0,0 @@
1
- import{C as e,D as t,E as n,M as r,P as i,R as a,V as o,_ as s,b as c,d as l,f as u,g as d,h as f,i as p,k as m,n as h,o as g,p as _,r as ee,s as te,t as ne,u as v,w as y,x as b,y as x,z as re}from"./actionUi-D47jwMfh.js";import{E as ie,T as ae,_ as oe,c as S,g as se,h as ce,i as le,n as ue,o as de,p as fe,r as pe,s as C,u as me,v as he,y as ge}from"./preload-helper-CbYqBpY9.js";import{a as _e,c as w,n as T,o as ve,s as E}from"./index-BgNjFXWE.js";import{t as D}from"./MarkdownView-C9-AzIkl.js";var O=o(re(),1),k={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,avif:`image/avif`,bmp:`image/bmp`,ico:`image/x-icon`,svg:`image/svg+xml`};function A(e){return(e.match(/\.([a-z0-9]+)$/i)?.[1]??``).toLowerCase()}function j(e){return k[A(e)]??null}var M=e=>j(e)!==null,N=e=>A(e)===`html`||A(e)===`htm`,P=e=>A(e)===`md`||A(e)===`markdown`;function F(e){return M(e)?`image`:N(e)?`html`:P(e)?`markdown`:`text`}function I(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`/api/artifact/${encodeURIComponent(e)}/${n}`}function L(e,t){return`${I(e,t)}?view=inline`}var R=a();function z({path:e,meta:t,action:n}){return(0,R.jsxs)(`div`,{className:`sticky top-0 z-10 flex flex-wrap items-center gap-x-2 gap-y-1 border-b border-hairline bg-surface px-5 py-2.5`,children:[(0,R.jsx)(`span`,{className:`break-all font-mono text-label text-primary`,children:e}),t&&(0,R.jsxs)(`span`,{className:`font-mono text-caption text-disabled`,children:[`· `,t]}),n&&(0,R.jsx)(`span`,{className:`ml-auto shrink-0`,children:n})]})}function B({loopId:e,path:t,oversize:n}){return(0,R.jsx)(`div`,{className:`px-5 py-8 text-body text-secondary`,children:n?(0,R.jsx)(`span`,{className:`text-disabled`,children:`Too large to preview - stored as metadata only (no synced bytes).`}):(0,R.jsxs)(R.Fragment,{children:[`Binary file - not previewable.`,` `,(0,R.jsx)(`a`,{href:I(e,t),download:!0,className:`text-interactive underline underline-offset-2 transition-colors hover:text-display`,children:`Download`})]})})}function V({loopId:e,path:t,mode:n,onMode:r,showToggle:i}){return(0,R.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-hairline bg-surface px-5 py-1.5`,children:[i&&n&&r&&(0,R.jsx)(`div`,{className:`inline-flex overflow-hidden rounded-control border border-hairline`,children:[`preview`,`source`].map(e=>(0,R.jsx)(`button`,{type:`button`,onClick:()=>r(e),className:`cursor-pointer border-none px-2.5 py-0.5 text-caption font-medium transition-colors ${n===e?`bg-raised text-display`:`bg-transparent text-secondary hover:text-display`}`,children:e===`preview`?`Preview`:`Source`},e))}),(0,R.jsx)(`a`,{href:I(e,t),download:!0,className:`ml-auto shrink-0 text-caption font-medium text-interactive underline underline-offset-2 transition-colors hover:text-display`,children:`Download ↓`})]})}function H({html:e}){return(0,R.jsx)(`iframe`,{title:`Rendered HTML artifact (sandboxed)`,srcDoc:e,sandbox:`allow-scripts`,referrerPolicy:`no-referrer`,className:`h-[min(70vh,620px)] w-full border-0 bg-white`})}function ye({loopId:e,file:t}){let[n,r]=(0,O.useState)(!1);return(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsx)(V,{loopId:e,path:t.path,showToggle:!1}),n?(0,R.jsxs)(`div`,{className:`px-5 py-8 text-body text-secondary`,children:[`Couldn't load this image.`,` `,(0,R.jsx)(`a`,{href:I(e,t.path),download:!0,className:`text-interactive underline underline-offset-2 transition-colors hover:text-display`,children:`Download`}),` `,`instead.`]}):(0,R.jsx)(`div`,{className:`flex justify-center overflow-auto px-5 py-6`,children:(0,R.jsx)(`img`,{src:L(e,t.path),alt:t.path,onError:()=>r(!0),className:`max-w-full rounded-control border border-hairline bg-white object-contain`})})]})}function U({loopId:e,file:t,kind:n}){let[r,i]=(0,O.useState)({loading:!0}),[a,o]=(0,O.useState)(`preview`);if((0,O.useEffect)(()=>{let n=!0;return i({loading:!0}),C({data:{loopId:e,path:t.path}}).then(e=>n&&i(e)).catch(e=>n&&i({error:String(e)})),()=>{n=!1}},[e,t.path,t.updatedAt]),`loading`in r)return(0,R.jsx)(`div`,{className:`px-5 py-6 text-body text-disabled`,children:`Loading…`});if(`binary`in r)return(0,R.jsx)(B,{loopId:e,path:t.path,oversize:r.oversize});if(`error`in r)return(0,R.jsxs)(`div`,{className:`px-5 py-6 text-body text-accent`,children:[`Couldn't load this file - `,r.error]});let s=r.text||`(empty file)`,c=n===`html`||n===`markdown`,l=!c||a===`source`;return(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsx)(V,{loopId:e,path:t.path,mode:a,onMode:o,showToggle:c}),n===`html`&&!l?(0,R.jsx)(H,{html:r.text||``}):n===`markdown`&&!l?(0,R.jsx)(D,{content:s}):(0,R.jsx)(`pre`,{className:`m-0 overflow-x-auto whitespace-pre-wrap px-5 py-4 font-mono text-label leading-relaxed text-secondary`,children:s})]})}function W({loopId:e,file:t}){let n=F(t.path);return t.oversize?(0,R.jsx)(B,{loopId:e,path:t.path,oversize:!0}):n===`image`?(0,R.jsx)(ye,{loopId:e,file:t},`${t.path}:${t.updatedAt??``}`):t.binary?(0,R.jsx)(B,{loopId:e,path:t.path,oversize:!1}):(0,R.jsx)(U,{loopId:e,file:t,kind:n},t.path)}function be({loopId:e,configuredPaths:n,running:r}){let[i,a]=(0,O.useState)(null),[o,s]=(0,O.useState)(null),c=(0,O.useRef)(0),l=(0,O.useCallback)(async()=>{let t=++c.current;try{let n=await S({data:{loopId:e}});t===c.current&&a(n)}catch{t===c.current&&a(e=>e??[])}},[e]);(0,O.useEffect)(()=>{a(null),s(null),l()},[e,l]),(0,O.useEffect)(()=>{let e=setInterval(()=>void l(),r?4e3:12e3);return()=>clearInterval(e)},[r,l]);let u=i??[],d=o&&u.some(e=>e.path===o)?o:u[0]?.path??null,f=u.find(e=>e.path===d)??null;return(0,R.jsxs)(`section`,{id:`files`,className:`min-w-0`,children:[(0,R.jsxs)(`div`,{className:`mb-2.5 flex items-end justify-between gap-3 border-b border-hairline pb-1.5`,children:[(0,R.jsxs)(`h2`,{className:`text-label font-semibold text-secondary`,children:[`Files`,i?` (${u.length})`:``]}),(0,R.jsxs)(`span`,{className:`text-caption font-medium text-disabled`,children:[`MEMORY.md + `,n.length,` artifact`,n.length===1?``:`s`]})]}),u.length===0?(0,R.jsx)(`div`,{className:`rounded-card border border-hairline bg-surface px-5 py-10 text-center text-body text-disabled shadow-card`,children:i==null?`Loading…`:`No files are available for this loop.`}):(0,R.jsxs)(`div`,{className:`grid h-[min(600px,68vh)] grid-cols-1 overflow-hidden rounded-card border border-hairline bg-surface shadow-card sm:grid-cols-[210px_1fr]`,children:[(0,R.jsx)(`nav`,{className:`max-h-44 overflow-y-auto border-b border-hairline sm:max-h-none sm:border-b-0 sm:border-r`,children:(0,R.jsx)(`ul`,{className:`py-1.5`,children:u.map(e=>{let t=e.path===d;return(0,R.jsx)(`li`,{children:(0,R.jsx)(`button`,{type:`button`,onClick:()=>s(e.path),className:`flex w-full items-center border-l-2 px-3 py-2 text-left transition-colors ${t?`border-display bg-raised`:`border-transparent hover:bg-raised/60`}`,children:(0,R.jsx)(`span`,{className:`block min-w-0 flex-1 truncate font-mono text-label ${t?`text-display`:`text-primary`}`,title:e.path,children:e.path})})},e.path)})})}),(0,R.jsx)(`div`,{className:`min-w-0 overflow-y-auto`,children:f&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(z,{path:f.path,meta:[f.size==null?``:m(f.size),`updated ${t(f.updatedAt)}`].filter(Boolean).join(` · `)}),(0,R.jsx)(W,{loopId:e,file:f})]})})]})]})}var xe=[`claude-code`,`codex`,`pi`],Se=new Set([`all loops`,`active`,`paused`,`blocked`]);function Ce(e){return e.normalize(`NFKC`).trim().replace(/\s+/gu,` `).toLocaleLowerCase(`en-US`)}function G(e){if(e===void 0)return{ok:!0,value:[]};if(!Array.isArray(e))return{ok:!1,detail:`tags must be an array of strings`};if(e.length>4)return{ok:!1,detail:`tags must contain at most 4 values`};let t=[],n=new Set;for(let r of e){if(typeof r!=`string`)return{ok:!1,detail:`tags must contain only strings`};if(/\p{Cc}|\p{Cf}|\p{Default_Ignorable_Code_Point}/u.test(r))return{ok:!1,detail:`tags must not contain control or invisible characters`};let e=Ce(r);if(!e)return{ok:!1,detail:`tags must not contain empty values`};if([...e].length>64)return{ok:!1,detail:`each tag must contain at most 64 characters`};if(Se.has(e))return{ok:!1,detail:`reserved tag: ${e}`};if(n.has(e))return{ok:!1,detail:`duplicate tag: ${e}`};n.add(e),t.push(e)}return{ok:!0,value:[...t].sort()}}var K={"claude-code":`Claude Code`,codex:`Codex`,pi:`Pi`},q=`mt-1 text-caption leading-snug text-disabled`;function J(e){let t=e?.schedule;return{name:e?.name??``,tags:e?.tags??[],tagDraft:``,mode:t?.mode??`cron`,cron:t?.mode===`cron`?t.cron:`0 */3 * * *`,timezone:t?.mode===`cron`?t.timezone:Intl.DateTimeFormat().resolvedOptions().timeZone||`UTC`,overlap:t?.mode===`cron`?t.overlap:`queue-one`,delayMinutes:String(t?.mode===`continuous`?t.delayMinutes:1),workdir:e?.workdir??``,agent:e?.agent??`claude-code`,model:e?.model??``,reasoningEffort:e?.reasoningEffort??``,prompt:e?.prompt??``,keep:e?.statusDefinitions?.keep??``,noChange:e?.statusDefinitions?.noChange??``,block:e?.statusDefinitions?.block??``,artifacts:(e?.artifacts??[]).join(`
2
- `)}}function Y({title:e,hint:t}){return(0,R.jsxs)(`div`,{className:`mb-3 mt-7 border-b border-hairline pb-1.5 first:mt-2`,children:[(0,R.jsx)(`h2`,{className:c,children:e}),t&&(0,R.jsx)(`div`,{className:`mt-0.5 text-caption text-disabled`,children:t})]})}function X({label:e,value:t,onChange:n,mono:r,hint:i,placeholder:a}){let o=(0,O.useId)();return(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsx)(`label`,{htmlFor:o,className:s,children:e}),(0,R.jsx)(`input`,{id:o,className:`${d} ${r?`font-mono`:``}`,value:t,placeholder:a,onChange:e=>n(e.target.value)}),i&&(0,R.jsx)(`div`,{className:q,children:i})]})}function Z({label:e,value:t,onChange:n,rows:r=4,mono:i,hint:a}){let o=(0,O.useId)();return(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsx)(`label`,{htmlFor:o,className:s,children:e}),(0,R.jsx)(`textarea`,{id:o,rows:r,className:`${d} h-auto resize-y ${i?`font-mono`:``}`,value:t,onChange:e=>n(e.target.value)}),a&&(0,R.jsx)(`div`,{className:q,children:a})]})}var we=(0,O.forwardRef)(function({initial:e},t){let[n,r]=(0,O.useState)(()=>J(e)),[i,a]=(0,O.useState)(null),[o,c]=(0,O.useState)(null),l=(0,O.useId)(),u=(0,O.useId)(),d=(0,O.useId)(),p=(0,O.useRef)(null),m=(0,O.useRef)(null),h=(e,t)=>r(n=>({...n,[e]:t})),g=()=>{let e=n.tagDraft.trim()?[n.tagDraft]:[];if(!e.length){h(`tagDraft`,``);return}let t=G([...n.tags,...e]);if(!t.ok){c(t.detail);return}r(e=>({...e,tags:t.value,tagDraft:``})),c(null),t.value.length===4&&requestAnimationFrame(()=>{document.activeElement===document.body&&p.current?.focus()})};return(0,O.useImperativeHandle)(t,()=>({read(){let e=[[`Name`,n.name],[`Working directory`,n.workdir],[`Prompt`,n.prompt],[`Keep definition`,n.keep],[`No-change definition`,n.noChange],[`Block definition`,n.block]].find(([,e])=>!e.trim());if(e)return a(`${e[0]} is required.`),null;let t=G([...n.tags,...n.tagDraft.trim()?[n.tagDraft]:[]]);if(!t.ok)return c(t.detail),a(null),null;let r=Number(n.delayMinutes);if(n.mode===`continuous`&&(!Number.isInteger(r)||r<1))return a(`Continuous delay must be an integer of at least 1 minute.`),null;let i=n.mode===`cron`?{mode:`cron`,cron:n.cron.trim(),timezone:n.timezone.trim(),overlap:n.overlap}:{mode:`continuous`,delayMinutes:r};return a(null),c(null),{name:n.name.trim(),tags:t.value,schedule:i,workdir:n.workdir.trim(),agent:n.agent,model:n.model.trim()||null,reasoningEffort:n.reasoningEffort.trim()||null,prompt:n.prompt,statusDefinitions:{keep:n.keep,noChange:n.noChange,block:n.block},artifacts:n.artifacts.split(/\r?\n/).filter(e=>e.length>0)}}})),(0,R.jsxs)(`div`,{className:`grid gap-x-10 lg:grid-cols-[minmax(300px,380px)_minmax(0,1fr)]`,children:[(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsx)(Y,{title:`Basics`}),(0,R.jsx)(X,{label:`Name`,value:n.name,onChange:e=>h(`name`,e)}),(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsx)(`div`,{id:l,className:s,children:`Tags`}),(0,R.jsxs)(`div`,{ref:p,role:`group`,tabIndex:-1,"aria-labelledby":l,"aria-describedby":`${u}${o?` ${d}`:``}`,"aria-invalid":o?`true`:void 0,className:`flex min-h-10 flex-wrap items-center gap-1.5 rounded-control border border-wire bg-surface px-2.5 py-1.5 outline-none transition-shadow focus-within:border-transparent focus-within:shadow-focus`,children:[n.tags.map(e=>(0,R.jsxs)(`span`,{className:`inline-flex h-6 max-w-full items-center gap-1 rounded-full bg-raised px-2.5 text-caption font-medium text-secondary`,children:[(0,R.jsx)(`span`,{className:`max-w-52 truncate`,title:e,children:e}),(0,R.jsx)(`button`,{type:`button`,"aria-label":`Remove tag ${e}`,onClick:()=>{h(`tags`,n.tags.filter(t=>t!==e)),c(null),requestAnimationFrame(()=>(m.current??p.current)?.focus())},className:`-mr-1 inline-flex size-6 shrink-0 cursor-pointer items-center justify-center rounded-full text-disabled transition-colors hover:bg-surface hover:text-primary ${f}`,children:(0,R.jsx)(`span`,{"aria-hidden":!0,children:`×`})})]},e)),n.tags.length<4&&(0,R.jsx)(`input`,{ref:m,"aria-label":`Add tag`,value:n.tagDraft,placeholder:n.tags.length?`Add another…`:`Add a tag…`,onChange:e=>{h(`tagDraft`,e.target.value),c(null)},onKeyDown:e=>{e.nativeEvent.isComposing||(e.key===`Enter`?(e.preventDefault(),g()):e.key===`Backspace`&&!n.tagDraft&&n.tags.length&&h(`tags`,n.tags.slice(0,-1)))},onBlur:g,className:`h-6 min-w-28 flex-1 bg-transparent px-1 text-sm text-primary outline-none placeholder:text-disabled`})]}),(0,R.jsxs)(`div`,{id:u,className:q,children:[`Up to `,4,`. Press Enter to add.`]}),o&&(0,R.jsx)(`div`,{id:d,role:`alert`,className:`mt-1 text-caption text-accent`,children:o})]}),(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsx)(`label`,{className:s,children:`Schedule`}),(0,R.jsxs)(`select`,{"aria-label":`Schedule`,className:b,value:n.mode,onChange:e=>h(`mode`,e.target.value),children:[(0,R.jsx)(`option`,{value:`cron`,children:`Cron`}),(0,R.jsx)(`option`,{value:`continuous`,children:`Continuous`})]})]}),n.mode===`cron`?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(X,{label:`Cron expression`,value:n.cron,onChange:e=>h(`cron`,e),mono:!0}),(0,R.jsx)(X,{label:`Timezone`,value:n.timezone,onChange:e=>h(`timezone`,e),mono:!0,hint:`IANA timezone, for example America/Los_Angeles.`}),(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsx)(`label`,{className:s,children:`Cron overlap`}),(0,R.jsxs)(`select`,{"aria-label":`Cron overlap`,className:b,value:n.overlap,onChange:e=>h(`overlap`,e.target.value),children:[(0,R.jsx)(`option`,{value:`skip`,children:`Skip occurrence`}),(0,R.jsx)(`option`,{value:`queue-one`,children:`Queue one follow-up`})]}),(0,R.jsx)(`div`,{className:q,children:`Applies only when a cron occurrence is due while a run is still open.`})]})]}):(0,R.jsx)(X,{label:`Delay after terminal run (minutes)`,value:n.delayMinutes,onChange:e=>h(`delayMinutes`,e),mono:!0}),(0,R.jsx)(Y,{title:`Execution`}),(0,R.jsx)(X,{label:`Working directory`,value:n.workdir,onChange:e=>h(`workdir`,e),mono:!0,placeholder:`/Users/you/project`}),(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsx)(`label`,{className:s,children:`Coding agent`}),(0,R.jsx)(`select`,{"aria-label":`Coding agent`,className:b,value:n.agent,onChange:e=>h(`agent`,e.target.value),children:xe.map(e=>(0,R.jsx)(`option`,{value:e,children:K[e]??e},e))})]}),(0,R.jsx)(X,{label:`Model`,value:n.model,onChange:e=>h(`model`,e),placeholder:`default`,hint:`Optional. Empty uses the agent default.`}),(0,R.jsx)(X,{label:`Reasoning effort`,value:n.reasoningEffort,onChange:e=>h(`reasoningEffort`,e),placeholder:`default`,hint:`Optional. Empty uses the agent default.`})]}),(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsx)(Y,{title:`Prompt`,hint:`Sent unchanged before Pievo appends the report contract.`}),(0,R.jsx)(Z,{label:`User prompt`,value:n.prompt,onChange:e=>h(`prompt`,e),rows:10}),(0,R.jsx)(Y,{title:`Status definitions`,hint:`All three definitions are required and are appended to every run.`}),(0,R.jsx)(Z,{label:`keep`,value:n.keep,onChange:e=>h(`keep`,e),rows:2}),(0,R.jsx)(Z,{label:`no-change`,value:n.noChange,onChange:e=>h(`noChange`,e),rows:2}),(0,R.jsx)(Z,{label:`block`,value:n.block,onChange:e=>h(`block`,e),rows:2}),(0,R.jsx)(Y,{title:`Artifacts`,hint:`Optional text/code file names such as .md, .html, .sh, .py, .json, or .csv (up to 4, 256 KB each) that runs update and the dashboard renders. One name per line. Every loop also has MEMORY.md.`}),(0,R.jsx)(Z,{label:`Artifact files`,value:n.artifacts,onChange:e=>h(`artifacts`,e),rows:6,mono:!0}),i&&(0,R.jsx)(`div`,{className:`mt-4 text-body text-accent`,children:i})]})]})}),Te={"claude-code":`Claude Code`,codex:`Codex`,pi:`Pi`};function Ee({id:e}){let t=ie(),[n,i]=(0,O.useState)(null),[a,o]=(0,O.useState)(null),[s,d]=(0,O.useState)(null),[f,m]=(0,O.useState)(!1),[_,y]=(0,O.useState)(!1),[b,x]=(0,O.useState)(null),[re,S]=(0,O.useState)(!1),[C,T]=p(),[E,D]=(0,O.useState)([]),k=(0,O.useRef)(null),A=(0,O.useRef)(!1),j=(0,O.useCallback)(async(n=!1)=>{try{let t=await me({data:e});i(t),A.current=t.summary.deleteRequestedAt!=null,o(null)}catch(e){A.current?t({to:`/`}):n||o(String(e))}},[e]);(0,O.useEffect)(()=>{i(null),m(!1),S(!1),D([]),j()},[e,j]);let M=!!n?.summary.running;(0,O.useEffect)(()=>{if(f)return;let e=setInterval(()=>void j(!0),M||A.current?3e3:8e3);return()=>clearInterval(e)},[f,M,j]);async function N(){d(null),x(`run`);try{let t=await oe({data:e});if(t.error)return d(`Run failed: ${t.error}`);T({label:t.coalesced?`Already queued`:`Queued`,hold:4e3}),await j()}finally{x(null)}}async function P(n){d(null),x(`lifecycle`);try{let r=n===`pause`?await se({data:e}):n===`start`?await he({data:e}):n===`stop`?await ge({data:e}):await de({data:e});if(r.error)return d(`${n[0].toUpperCase()+n.slice(1)} failed: ${r.error}`);if(S(!1),r.deleted)return t({to:`/`});n===`delete`&&(A.current=!0),await j(),T({label:n===`start`?`Started`:n===`pause`?`Paused`:n===`stop`?`Stop requested`:`Deleting`})}finally{x(null)}}async function F(){let t=k.current?.read();if(t){d(null),x(`save`);try{let n=await ce({data:{id:e,patch:t}});if(n.error)return d(`Save failed: ${n.error}`);m(!1),await j(),T({label:`Saved`})}finally{x(null)}}}let I=(0,R.jsxs)(ae,{to:`/`,className:`inline-flex items-center gap-1.5 text-meta font-medium text-secondary hover:text-display`,children:[(0,R.jsx)(`span`,{"aria-hidden":!0,children:`←`}),` Loops`]});if(a)return(0,R.jsx)($,{back:I,children:(0,R.jsx)(ee,{title:`Couldn't load this loop.`,detail:a,onRetry:()=>void j()})});if(!n)return(0,R.jsx)($,{back:I,children:(0,R.jsx)(te,{})});let{loop:L,summary:z,runs:B}=n,V=le(z)===`deleting`,H=z.enabled&&!V,ye=!z.enabled&&!V,U=b!=null,W=pe(n.machine.daemonProtocol),xe=!V&&!!z.running&&W.supported,Se=n.machine.online,Ce=n.machine.presence===`asleep`;if(f)return(0,R.jsxs)($,{back:I,children:[(0,R.jsx)(Oe,{name:z.name,onBack:()=>m(!1)}),(0,R.jsxs)(`div`,{className:`mt-5 rounded-card border border-hairline bg-surface px-6 pb-6 pt-2 shadow-card`,children:[(0,R.jsx)(we,{ref:k,initial:L}),(0,R.jsxs)(`div`,{className:`mt-7 border-t border-hairline pt-4`,children:[s&&(0,R.jsx)(g,{message:s,onDismiss:()=>d(null),className:`mb-3`}),(0,R.jsxs)(`div`,{className:`flex gap-2.5`,children:[(0,R.jsx)(`button`,{className:u,disabled:b===`save`,onClick:()=>void F(),children:b===`save`?`Saving…`:`Save`}),(0,R.jsx)(`button`,{className:v,disabled:b===`save`,onClick:()=>m(!1),children:`Cancel`})]})]})]})]});let G=L.schedule.mode===`cron`?`${L.schedule.cron} · ${L.schedule.timezone} · overlap ${L.schedule.overlap}`:`continuous · ${L.schedule.delayMinutes}m after terminal`,K=L.model||`default`,q=L.reasoningEffort||`default`,J=E.length?w(z.runs,E):z.runs,Y=async()=>{let t=J[0];if(!t)return 0;let n=await fe({data:{loopId:e,beforeTs:t.ts,limit:16}});return n.length&&D(e=>w(e,n)),n.length};return(0,R.jsxs)($,{back:I,children:[(0,R.jsxs)(`header`,{className:`rounded-card border border-hairline bg-surface px-[26px] pb-5 pt-[22px] shadow-card`,children:[(0,R.jsx)(ve,{loop:z,runs:J,onLoadMore:Y,onPickRun:n=>t({to:`/loops/$loopId/runs/$runId`,params:{loopId:e,runId:n.id}})}),(0,R.jsxs)(`div`,{className:`mt-5 border-t border-hairline pt-4`,children:[n.machine.needsUpdate&&(0,R.jsx)(De,{tone:`warn`,text:`Daemon update required · server requires v${n.machine.requiredDaemonVersion}; machine reports ${n.machine.daemonVersion?`v${n.machine.daemonVersion}`:`an unknown version`}.`,action:`Update daemon`,onAction:()=>y(!0)}),!Se&&(0,R.jsx)(De,{text:`Machine ${Ce?`seems asleep or offline`:`is offline`}; queued work starts when it reconnects.${n.machine.lastSeen?` Last seen ${r(n.machine.lastSeen)}.`:``}`,action:`Reconnect`,onAction:()=>y(!0)}),s&&(0,R.jsx)(g,{message:s,onDismiss:()=>d(null),className:`mb-2.5`}),C&&(0,R.jsx)(`div`,{className:`mb-2.5`,children:(0,R.jsx)(h,{label:C.label,tone:C.tone,onUndo:C.undo})}),(0,R.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,R.jsx)(`button`,{className:u,disabled:U||V,onClick:()=>void N(),children:b===`run`?`Queuing…`:`Run once`}),(0,R.jsx)(`button`,{className:v,disabled:U||V,onClick:()=>m(!0),children:`Settings`}),(0,R.jsx)(`button`,{className:v,disabled:U||!ye,onClick:()=>void P(`start`),children:`Start`}),(0,R.jsx)(`button`,{className:v,disabled:U||!H,onClick:()=>void P(`pause`),children:`Pause`}),(0,R.jsx)(`button`,{className:l,disabled:U||!xe,title:z.running&&!W.supported?ue:z.running?void 0:`No run is currently running`,onClick:()=>void P(`stop`),children:`Stop`}),(0,R.jsx)(`button`,{className:l,disabled:U||V,onClick:()=>S(!0),children:V?`Deleting…`:`Delete`})]}),re&&!V&&(0,R.jsx)(`div`,{className:`mt-3`,children:(0,R.jsx)(ne,{prompt:`Stop this loop and delete its server data?`,note:`This stops the loop and deletes server history, the loop memory, and artifacts. Files in the working directory are not deleted. If the machine is unreachable, its local process may continue running.`,cta:`Delete`,danger:!0,busy:U,onConfirm:()=>void P(`delete`),onCancel:()=>S(!1)})})]})]}),(0,R.jsxs)(`div`,{className:`mt-6 grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(300px,360px)]`,children:[(0,R.jsx)(be,{loopId:e,configuredPaths:L.artifacts,running:M}),(0,R.jsx)(ke,{loopId:e,summary:z,runs:B,older:E,onPickRun:n=>t({to:`/loops/$loopId/runs/$runId`,params:{loopId:e,runId:n.id}}),onMore:Y})]}),(0,R.jsxs)(`section`,{className:`mt-6 min-w-0 rounded-card border border-hairline bg-surface px-6 py-5 shadow-card`,children:[(0,R.jsx)(`h2`,{className:`mb-4 border-b border-hairline pb-1.5 ${c}`,children:`Configuration`}),(0,R.jsxs)(`dl`,{className:`grid min-w-0 gap-x-6 gap-y-4 md:grid-cols-[180px_minmax(0,1fr)]`,children:[(0,R.jsx)(Q,{label:`Schedule`,children:(0,R.jsx)(`code`,{className:`break-all font-mono`,children:G})}),(0,R.jsx)(Q,{label:`Tags`,children:L.tags.length?(0,R.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:L.tags.map(e=>(0,R.jsx)(`span`,{className:`inline-flex h-[22px] max-w-52 items-center truncate rounded-full bg-raised px-2.5 text-caption font-medium text-secondary`,title:e,children:e},e))}):(0,R.jsx)(`span`,{className:`text-disabled`,children:`None`})}),(0,R.jsx)(Q,{label:`Working directory`,children:(0,R.jsx)(`code`,{className:`break-all font-mono`,children:L.workdir})}),(0,R.jsx)(Q,{label:`Agent`,children:Te[L.agent]}),(0,R.jsxs)(Q,{label:`Model / effort`,children:[K,` / `,q]}),(0,R.jsx)(Q,{label:`Prompt`,children:(0,R.jsx)(`pre`,{className:`whitespace-pre-wrap break-words font-sans`,children:L.prompt})}),(0,R.jsx)(Q,{label:`Status definitions`,children:(0,R.jsxs)(`ul`,{className:`space-y-1`,children:[(0,R.jsxs)(`li`,{children:[(0,R.jsx)(`b`,{children:`keep:`}),` `,L.statusDefinitions.keep]}),(0,R.jsxs)(`li`,{children:[(0,R.jsx)(`b`,{children:`no-change:`}),` `,L.statusDefinitions.noChange]}),(0,R.jsxs)(`li`,{children:[(0,R.jsx)(`b`,{children:`block:`}),` `,L.statusDefinitions.block]})]})}),(0,R.jsx)(Q,{label:`Artifacts`,children:L.artifacts.length?(0,R.jsx)(`ul`,{className:`space-y-1`,children:L.artifacts.map(e=>(0,R.jsx)(`li`,{children:(0,R.jsx)(`code`,{className:`break-all font-mono`,children:e})},e))}):(0,R.jsx)(`span`,{className:`text-disabled`,children:`None`})})]})]}),(0,R.jsx)(_e,{open:_,onClose:()=>y(!1)})]})}function Q({label:e,children:t}){return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`dt`,{className:`text-label font-medium text-secondary`,children:e}),(0,R.jsx)(`dd`,{className:`min-w-0 text-body text-primary`,children:t})]})}function De({text:e,action:t,onAction:n,tone:r}){return(0,R.jsxs)(`div`,{className:`mb-2.5 flex flex-wrap items-center gap-3 rounded-control border px-4 py-2.5 text-meta ${r===`warn`?`border-warn/40 bg-warn/10`:`border-hairline bg-raised`}`,children:[(0,R.jsx)(`span`,{className:`text-secondary`,children:e}),(0,R.jsx)(`button`,{onClick:n,className:`ml-auto font-medium text-interactive underline`,children:t})]})}function Oe({name:e,onBack:t}){return(0,R.jsxs)(`div`,{children:[(0,R.jsxs)(`button`,{type:`button`,onClick:t,className:_,children:[(0,R.jsx)(`span`,{"aria-hidden":!0,children:`←`}),` Back to loop`]}),(0,R.jsxs)(`h1`,{className:`mt-2.5 text-[24px] font-semibold text-display`,children:[`Settings · `,e]}),(0,R.jsx)(`p`,{className:`mt-1.5 text-meta text-secondary`,children:`Edit tags, schedule, execution settings, prompt, status definitions, and artifact files.`})]})}function $({back:e,children:t}){return(0,R.jsxs)(`main`,{className:`mx-auto max-w-[1360px] px-8 pb-24 pt-10`,children:[(0,R.jsx)(`div`,{className:`mb-5`,children:e}),t]})}function ke({loopId:t,summary:r,runs:a,older:o,onMore:s,onPickRun:l}){let u=(0,O.useMemo)(()=>o.length?w(r.runs,o):r.runs,[r.runs,o]);return(0,R.jsxs)(`section`,{className:`min-w-0`,children:[(0,R.jsx)(`div`,{className:`mb-2.5 border-b border-hairline pb-1.5`,children:(0,R.jsxs)(`h2`,{className:c,children:[`Runs (`,r.runCount,`)`]})}),r.runCount===0?(0,R.jsx)(`div`,{className:`rounded-card border border-hairline bg-surface px-5 py-10 text-center text-body text-disabled`,children:`Never run`}):(0,R.jsxs)(`div`,{className:`rounded-card border border-hairline bg-surface px-5 pb-4 pt-5 shadow-card`,children:[(0,R.jsx)(E,{loop:r,runs:u,total:r.runCount,onLoadMore:s,onPickRun:l}),(0,R.jsx)(`ul`,{className:`mt-5 max-h-[clamp(280px,46vh,520px)] divide-y divide-hairline overflow-y-auto border-t border-hairline`,children:a.map(r=>(0,R.jsx)(`li`,{children:(0,R.jsxs)(ae,{to:`/loops/$loopId/runs/$runId`,params:{loopId:t,runId:r.id},className:`flex items-start gap-2.5 py-2.5 hover:bg-raised`,children:[(0,R.jsx)(`span`,{className:`mt-1 inline-block size-2.5 shrink-0 rounded-[2px]`,style:{background:e(r)},title:y(r)}),(0,R.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,R.jsxs)(`span`,{className:`flex justify-between gap-2`,children:[(0,R.jsx)(`span`,{className:`font-mono text-label text-secondary`,children:i(r.ts)}),(0,R.jsx)(`span`,{className:`font-mono text-caption text-disabled`,children:n(r.durationMs)})]}),(0,R.jsx)(`span`,{className:`mt-0.5 block line-clamp-2 text-meta text-primary`,children:r.phase===`pending`?`Queued`:r.phase===`running`?(0,R.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[(0,R.jsx)(`span`,{className:`size-1.5 rounded-full`,style:x}),`Running`]}):r.attention?(0,R.jsxs)(`span`,{className:`font-medium text-running`,children:[`! `,r.attention]}):r.error||r.message||y(r)})]})]})},r.id))})]})]})}function Ae(){let{loopId:e}=T.useParams();return(0,R.jsx)(Ee,{id:e})}export{Ae as component};
@@ -1 +0,0 @@
1
- import{I as e,R as t,r as n}from"./actionUi-D47jwMfh.js";var r=t();function i({error:t}){let i=e();return(0,r.jsx)(`main`,{className:`mx-auto max-w-[1180px] px-8 pt-12`,children:(0,r.jsx)(n,{title:`Couldn't load the dashboard.`,detail:String(t),onRetry:()=>void i.invalidate()})})}export{i as errorComponent};
@@ -1 +0,0 @@
1
- import{R as e}from"./actionUi-D47jwMfh.js";import{i as t,r as n}from"./index-BgNjFXWE.js";var r=e();function i(){return(0,r.jsx)(t,{initial:n.useLoaderData()})}export{i as component};