@edspencer/paddock 0.66.2 → 0.68.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 (122) hide show
  1. package/README.md +24 -30
  2. package/package.json +1 -1
  3. package/packages/server/dist/adoptable.d.ts +57 -0
  4. package/packages/server/dist/adoptable.js +26 -3
  5. package/packages/server/dist/agent-errors.js +1 -1
  6. package/packages/server/dist/claude-home.d.ts +4 -4
  7. package/packages/server/dist/claude-home.js +4 -4
  8. package/packages/server/dist/claude-mcp.d.ts +4 -2
  9. package/packages/server/dist/cli/args.d.ts +41 -2
  10. package/packages/server/dist/cli/args.js +119 -17
  11. package/packages/server/dist/cli/paddock.js +87 -96
  12. package/packages/server/dist/cli/service/backend.d.ts +38 -0
  13. package/packages/server/dist/cli/service/backend.js +19 -0
  14. package/packages/server/dist/cli/service/index.d.ts +28 -0
  15. package/packages/server/dist/cli/service/index.js +179 -0
  16. package/packages/server/dist/cli/service/launchd.d.ts +47 -0
  17. package/packages/server/dist/cli/service/launchd.js +206 -0
  18. package/packages/server/dist/cli/service/spec.d.ts +106 -0
  19. package/packages/server/dist/cli/service/spec.js +124 -0
  20. package/packages/server/dist/cli/service/systemd.d.ts +48 -0
  21. package/packages/server/dist/cli/service/systemd.js +155 -0
  22. package/packages/server/dist/discover.d.ts +170 -0
  23. package/packages/server/dist/discover.js +365 -0
  24. package/packages/server/dist/herdctl.d.ts +25 -2
  25. package/packages/server/dist/herdctl.js +30 -1
  26. package/packages/server/dist/routes/chats.js +14 -2
  27. package/packages/server/dist/routes/discover.d.ts +3 -0
  28. package/packages/server/dist/routes/discover.js +140 -0
  29. package/packages/server/dist/routes.d.ts +1 -0
  30. package/packages/server/dist/routes.js +2 -0
  31. package/packages/server/dist/session-hub.d.ts +10 -0
  32. package/packages/server/dist/session-hub.js +16 -2
  33. package/packages/server/dist/ws-protocol.d.ts +15 -0
  34. package/packages/server/dist/ws.js +1 -0
  35. package/packages/server/package.json +1 -1
  36. package/packages/web/dist/assets/Chip-DIdRqcqU.js +2 -0
  37. package/packages/web/dist/assets/DiscoverPage-BmCWnkjN.js +2 -0
  38. package/packages/web/dist/assets/DiscoverView-DwhtBdN2.js +2 -0
  39. package/packages/web/dist/assets/InstanceConfigPage-D01x1BUg.js +2 -0
  40. package/packages/web/dist/assets/{MarkdownRenderer-DDVO0zhl.js → MarkdownRenderer-BCheNET2.js} +2 -2
  41. package/packages/web/dist/assets/ProjectMenu-BqlUQuxM.js +2 -0
  42. package/packages/web/dist/assets/ProjectRedirect-D8QDxYLG.js +2 -0
  43. package/packages/web/dist/assets/ProjectView-cevSYdcl.js +13 -0
  44. package/packages/web/dist/assets/ProjectsGrid-yd18DXdV.js +2 -0
  45. package/packages/web/dist/assets/RootHome-DZEkOjko.js +2 -0
  46. package/packages/web/dist/assets/Surfaces-DvRztndg.js +2 -0
  47. package/packages/web/dist/assets/{arc-DXqVnx_r.js → arc-DFqBni1E.js} +1 -1
  48. package/packages/web/dist/assets/{architectureDiagram-3BPJPVTR-FgkfD1Bk.js → architectureDiagram-3BPJPVTR-DXFeq3pL.js} +1 -1
  49. package/packages/web/dist/assets/{blockDiagram-GPEHLZMM-WwkIIJsI.js → blockDiagram-GPEHLZMM-DpeYsIwP.js} +1 -1
  50. package/packages/web/dist/assets/{c4Diagram-AAUBKEIU-BIzkTibx.js → c4Diagram-AAUBKEIU-Bw5r8wjW.js} +1 -1
  51. package/packages/web/dist/assets/channel-DU94S7yB.js +2 -0
  52. package/packages/web/dist/assets/{chunk-2J33WTMH-C4TBH3R6.js → chunk-2J33WTMH-B0SAvGOr.js} +1 -1
  53. package/packages/web/dist/assets/{chunk-4BX2VUAB-DTKJZlRM.js → chunk-4BX2VUAB-BaUGs1hD.js} +1 -1
  54. package/packages/web/dist/assets/{chunk-55IACEB6-BC9_Qc8h.js → chunk-55IACEB6-BDHRluF5.js} +1 -1
  55. package/packages/web/dist/assets/{chunk-727SXJPM-D3gQ4rP3.js → chunk-727SXJPM-BX93DBZO.js} +1 -1
  56. package/packages/web/dist/assets/{chunk-AQP2D5EJ-My2AXBvz.js → chunk-AQP2D5EJ-3RiQGxW2.js} +1 -1
  57. package/packages/web/dist/assets/{chunk-FMBD7UC4-D09zE6Ow.js → chunk-FMBD7UC4-DMkjv9SP.js} +1 -1
  58. package/packages/web/dist/assets/{chunk-ND2GUHAM-CUSgeCLl.js → chunk-ND2GUHAM-CHiQfq4F.js} +1 -1
  59. package/packages/web/dist/assets/{chunk-QZHKN3VN-B6jVPYgy.js → chunk-QZHKN3VN-B1wCSHbM.js} +1 -1
  60. package/packages/web/dist/assets/classDiagram-4FO5ZUOK-BcRv1OPp.js +2 -0
  61. package/packages/web/dist/assets/classDiagram-v2-Q7XG4LA2-BcRv1OPp.js +2 -0
  62. package/packages/web/dist/assets/{core-DPY0seI-.js → core-C-49RP59.js} +1 -1
  63. package/packages/web/dist/assets/{cose-bilkent-S5V4N54A-BasCiARv.js → cose-bilkent-S5V4N54A-BIwwgSTZ.js} +1 -1
  64. package/packages/web/dist/assets/{dagre-BM42HDAG-Cimn11Qe.js → dagre-BM42HDAG-BN45kshV.js} +1 -1
  65. package/packages/web/dist/assets/diagram-2AECGRRQ-C5NekbfR.js +44 -0
  66. package/packages/web/dist/assets/diagram-5GNKFQAL-De7wdssd.js +11 -0
  67. package/packages/web/dist/assets/{diagram-KO2AKTUF-dLORrSiu.js → diagram-KO2AKTUF-CgG0UA0n.js} +3 -3
  68. package/packages/web/dist/assets/{diagram-LMA3HP47-iUMeaR-J.js → diagram-LMA3HP47-DC-bDqxV.js} +1 -1
  69. package/packages/web/dist/assets/{diagram-OG6HWLK6-oEH6olHK.js → diagram-OG6HWLK6-XXfHDMhE.js} +1 -1
  70. package/packages/web/dist/assets/{erDiagram-TEJ5UH35-VtQqF9SY.js → erDiagram-TEJ5UH35-CHEd8JiS.js} +1 -1
  71. package/packages/web/dist/assets/{flowDiagram-I6XJVG4X-wvF2EkJa.js → flowDiagram-I6XJVG4X-BbuYxd15.js} +1 -1
  72. package/packages/web/dist/assets/{ganttDiagram-6RSMTGT7-ng4qJ0E1.js → ganttDiagram-6RSMTGT7-BkF77xn5.js} +1 -1
  73. package/packages/web/dist/assets/{gitGraphDiagram-PVQCEYII-BV4aWy8k.js → gitGraphDiagram-PVQCEYII-BdL5zVez.js} +2 -2
  74. package/packages/web/dist/assets/index-C3MdCCzF.js +71 -0
  75. package/packages/web/dist/assets/index-DYccdR9x.css +1 -0
  76. package/packages/web/dist/assets/{infoDiagram-5YYISTIA-BpGTxAjU.js → infoDiagram-5YYISTIA-vhTRATYg.js} +1 -1
  77. package/packages/web/dist/assets/{ishikawaDiagram-YF4QCWOH-Cj36LyoS.js → ishikawaDiagram-YF4QCWOH-CxjN-7YF.js} +2 -2
  78. package/packages/web/dist/assets/{journeyDiagram-JHISSGLW-0vNlg3um.js → journeyDiagram-JHISSGLW-DJ414TaX.js} +1 -1
  79. package/packages/web/dist/assets/{kanban-definition-UN3LZRKU-wijkEDaR.js → kanban-definition-UN3LZRKU-gaQeFRvZ.js} +1 -1
  80. package/packages/web/dist/assets/{linear-LqRymMD_.js → linear-CcvdFgxd.js} +1 -1
  81. package/packages/web/dist/assets/{mermaid.core-DPrhSs95.js → mermaid.core-Es6hedDB.js} +5 -5
  82. package/packages/web/dist/assets/{mindmap-definition-RKZ34NQL-en-uGqgC.js → mindmap-definition-RKZ34NQL-Dk7qf3FR.js} +1 -1
  83. package/packages/web/dist/assets/{pieDiagram-4H26LBE5-DKBZ2Vnx.js → pieDiagram-4H26LBE5-CSWXwU6d.js} +3 -3
  84. package/packages/web/dist/assets/{quadrantDiagram-W4KKPZXB--g-WtxyL.js → quadrantDiagram-W4KKPZXB-CBVdURbr.js} +1 -1
  85. package/packages/web/dist/assets/{requirementDiagram-4Y6WPE33-Dl4eYxDI.js → requirementDiagram-4Y6WPE33-CbU18IZA.js} +3 -3
  86. package/packages/web/dist/assets/{sankeyDiagram-5OEKKPKP-7lt4gqSw.js → sankeyDiagram-5OEKKPKP-BeAlNgjE.js} +4 -4
  87. package/packages/web/dist/assets/{sequenceDiagram-3UESZ5HK-COgq-dXg.js → sequenceDiagram-3UESZ5HK-CKVKzxTs.js} +1 -1
  88. package/packages/web/dist/assets/{stateDiagram-AJRCARHV-CL6XC79S.js → stateDiagram-AJRCARHV-B-aSaO4W.js} +1 -1
  89. package/packages/web/dist/assets/stateDiagram-v2-BHNVJYJU-TptFh32C.js +2 -0
  90. package/packages/web/dist/assets/{timeline-definition-PNZ67QCA-C5egKeGT.js → timeline-definition-PNZ67QCA-CP9JHEBr.js} +1 -1
  91. package/packages/web/dist/assets/{vennDiagram-CIIHVFJN-C_UhtC8u.js → vennDiagram-CIIHVFJN-Dbtwwvvd.js} +1 -1
  92. package/packages/web/dist/assets/{wardley-L42UT6IY-Bj9chUqz.js → wardley-L42UT6IY-NonvEhoT.js} +1 -1
  93. package/packages/web/dist/assets/{wardleyDiagram-YWT4CUSO-D7VnZoRp.js → wardleyDiagram-YWT4CUSO-CDnpv9Ws.js} +2 -2
  94. package/packages/web/dist/assets/{xychartDiagram-2RQKCTM6-VrWLDoi4.js → xychartDiagram-2RQKCTM6-C1i-Wk0H.js} +1 -1
  95. package/packages/web/dist/fonts/alegreya-latin-italic.woff2 +0 -0
  96. package/packages/web/dist/fonts/alegreya-latin.woff2 +0 -0
  97. package/packages/web/dist/fonts/alegreya-sc-latin-500.woff2 +0 -0
  98. package/packages/web/dist/fonts/alegreya-sc-latin-700.woff2 +0 -0
  99. package/packages/web/dist/fonts/courier-prime-latin-400.woff2 +0 -0
  100. package/packages/web/dist/fonts/courier-prime-latin-700.woff2 +0 -0
  101. package/packages/web/dist/fonts/courier-prime-latin-italic.woff2 +0 -0
  102. package/packages/web/dist/fonts/iosevka-terminal-400.woff2 +0 -0
  103. package/packages/web/dist/fonts/iosevka-terminal-700.woff2 +0 -0
  104. package/packages/web/dist/fonts/martian-mono-latin.woff2 +0 -0
  105. package/packages/web/dist/fonts/saira-latin.woff2 +0 -0
  106. package/packages/web/dist/index.html +61 -12
  107. package/packages/web/dist/sw.js +1 -1
  108. package/packages/server/dist/cli/here.d.ts +0 -25
  109. package/packages/server/dist/cli/here.js +0 -104
  110. package/packages/web/dist/assets/InstanceConfigPage-DKzAHOhx.js +0 -2
  111. package/packages/web/dist/assets/ProjectRedirect-WczXTV0_.js +0 -2
  112. package/packages/web/dist/assets/ProjectView-Dd_myWpV.js +0 -13
  113. package/packages/web/dist/assets/ProjectsGrid-BeJj0q6Y.js +0 -2
  114. package/packages/web/dist/assets/channel-DUsOl5_p.js +0 -2
  115. package/packages/web/dist/assets/classDiagram-4FO5ZUOK-CIdDKEqH.js +0 -2
  116. package/packages/web/dist/assets/classDiagram-v2-Q7XG4LA2-CIdDKEqH.js +0 -2
  117. package/packages/web/dist/assets/diagram-2AECGRRQ-fe9cDHyn.js +0 -44
  118. package/packages/web/dist/assets/diagram-5GNKFQAL-T0tQlfbl.js +0 -11
  119. package/packages/web/dist/assets/format-CvRqOKZU.js +0 -2
  120. package/packages/web/dist/assets/index-DGNSeqL-.js +0 -71
  121. package/packages/web/dist/assets/index-DMRbU1Jl.css +0 -1
  122. package/packages/web/dist/assets/stateDiagram-v2-BHNVJYJU-BDlRyphY.js +0 -2
@@ -1,2 +0,0 @@
1
- import{u as D,r as o,a as A,o as F,b as y,j as e,L as v,C as j,P as C,N as L,g as B,X as P,S as O,B as R,T as X,c as z,d as G,e as H,f as J}from"./index-DGNSeqL-.js";import{C as K,S as U,P as V,r as q}from"./format-CvRqOKZU.js";function te({filterTag:s}={}){const{projects:a,loading:r,error:l,upsert:d,remove:g}=D(),[u,m]=o.useState(!1),[c,x]=o.useState(null),h=A(),p=B(),b=o.useCallback(t=>h(`/projects/${t.slug}/settings`),[h]),i=o.useMemo(()=>s?a.filter(t=>t.domain.includes(s)):a,[a,s]),$=o.useMemo(()=>{const t=new Map;for(const n of a){const N=n.group??"",w=t.get(N);w?w.push(n):t.set(N,[n])}return F(t.keys()).map(n=>[n,t.get(n)??[]])},[a]),[k,E]=o.useState({}),I=o.useMemo(()=>i.map(t=>t.slug).join(","),[i]);o.useEffect(()=>{let t=!1;return Promise.all(i.map(async n=>[n.slug,await y.listProjectChats(n.slug).catch(()=>[])])).then(n=>{t||E(Object.fromEntries(n))}),()=>{t=!0}},[I]);const M=t=>{d(t),m(!1),h(`/projects/${t.slug}/chat`)},f=!r&&!l&&!s&&a.length===0;return e.jsxs("div",{className:"h-full overflow-y-auto",children:[e.jsxs("div",{className:"mx-auto max-w-6xl px-3 py-5 sm:px-8 sm:py-10",children:[e.jsxs("header",{className:"mb-8 flex flex-wrap items-end justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-[28px] font-semibold tracking-tight",children:s?e.jsxs(e.Fragment,{children:["Projects tagged ",e.jsx("span",{className:"text-accent",children:s})]}):"Projects"}),s?e.jsxs("p",{className:"mt-1.5 max-w-xl text-sm text-paddock-500",children:[!r&&`${i.length} ${i.length===1?"project":"projects"} tagged “${s}”.`," ",e.jsx(v,{to:p,className:"text-accent underline-offset-2 hover:underline",children:"View all projects"})]}):e.jsx("p",{className:"mt-1.5 max-w-xl text-sm text-paddock-500",children:"Each project is a directory with persistent, resumable Claude Code sessions — your work, organized and always running."})]}),e.jsxs("div",{className:"ml-auto flex items-center gap-2",children:[e.jsxs("button",{className:"btn-ghost",onClick:()=>h("/chat"),children:[e.jsx(j,{width:16,height:16}),"New chat"]}),e.jsxs("button",{className:"btn-primary",onClick:()=>m(!0),children:[e.jsx(C,{width:16,height:16}),"New Project"]})]})]}),s&&e.jsx(Z,{tag:s,onClear:()=>h(p)}),l&&e.jsx("div",{className:"mb-6 rounded-lg border border-rose-300/60 bg-rose-50 px-4 py-3 text-sm text-rose-700 dark:border-rose-900/60 dark:bg-rose-950/40 dark:text-rose-300",children:l}),r&&e.jsx("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",children:[0,1,2,3,4,5].map(t=>e.jsx("div",{className:"h-40 animate-pulse rounded-2xl border border-paddock-200 bg-white/60 dark:border-paddock-800 dark:bg-paddock-900/50"},t))}),!r&&i.length===0&&!l&&s&&e.jsx(_,{tag:s,onClear:()=>h(p)}),f&&e.jsx(T,{onCreate:()=>m(!0),onChat:()=>h("/chat")}),!r&&s&&i.length>0&&e.jsx("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",children:i.map(t=>{var n;return e.jsx(S,{project:t,sessionCount:(n=k[t.slug])==null?void 0:n.length,onEdit:()=>b(t),onDelete:()=>x(t)},t.slug)})}),!r&&!s&&!f&&e.jsx("div",{className:"space-y-2",children:$.map(([t,n])=>e.jsx(Y,{slug:t,projects:n,counts:k,onEdit:b,onDelete:x},t||"unsorted"))})]}),e.jsx(L,{open:u,onClose:()=>m(!1),onCreated:M}),e.jsx(K,{open:c!==null,title:"Delete project?",message:e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"font-medium text-ink dark:text-ink-dark",children:c==null?void 0:c.name})," and all its chats and files will be permanently removed. This cannot be undone."]}),confirmLabel:"Delete project",onConfirm:async()=>{if(!c)return;const t=c.slug;await y.deleteProject(t),g(t),x(null)},onClose:()=>x(null)})]})}function Q(s){const a=`paddock:area-collapsed:${s}`,[r,l]=o.useState(()=>{try{return localStorage.getItem(a)==="1"}catch{return!1}});return[r,()=>l(g=>{const u=!g;try{localStorage.setItem(a,u?"1":"0")}catch{}return u})]}function W({open:s,label:a,count:r,blurb:l,onToggle:d}){return e.jsxs("button",{type:"button",onClick:d,className:"group/area flex w-full items-center gap-2 rounded-lg px-1 py-2 text-left hover:bg-paddock-100/60 dark:hover:bg-paddock-800/40","aria-expanded":s,children:[e.jsx(J,{width:16,height:16,className:`shrink-0 text-paddock-400 transition-transform ${s?"rotate-90":""}`}),e.jsx("h2",{className:"text-[15px] font-semibold tracking-tight",children:a}),e.jsx("span",{className:"rounded-full bg-paddock-200/70 px-2 py-0.5 text-[11px] font-medium text-paddock-500 dark:bg-paddock-800 dark:text-paddock-400",children:r}),l&&e.jsxs("span",{className:"hidden min-w-0 truncate text-xs text-paddock-400 md:inline",children:["· ",l]})]})}function Y({slug:s,projects:a,counts:r,onEdit:l,onDelete:d}){const[g,u]=Q(s||"unsorted"),m=!g;return e.jsxs("section",{className:"mb-4",children:[e.jsx(W,{open:m,label:H(s),count:a.length,blurb:G(s),onToggle:u}),m&&e.jsx("div",{className:"mt-2 grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3",children:a.map(c=>{var x;return e.jsx(S,{project:c,sessionCount:(x=r[c.slug])==null?void 0:x.length,onEdit:()=>l(c),onDelete:()=>d(c)},c.slug)})})]})}function S({project:s,sessionCount:a,onEdit:r,onDelete:l}){return e.jsxs(v,{to:`/projects/${s.slug}`,className:"card group/card relative flex flex-col gap-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("h2",{className:"min-w-0 line-clamp-2 font-semibold leading-snug",children:s.name}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[s.dirty?e.jsxs("span",{title:`${s.dirty} uncommitted change${s.dirty===1?"":"s"} — open the Changes tab`,className:"inline-flex items-center gap-1 rounded-full bg-amber-100 px-1.5 py-0.5 text-[10px] font-semibold text-amber-700 dark:bg-amber-950/50 dark:text-amber-400",children:[e.jsx(R,{width:10,height:10}),s.dirty]}):null,e.jsx(U,{status:s.status}),e.jsx(V,{onEdit:r,onDelete:l,label:`Actions for ${s.name}`})]})]}),s.summary&&e.jsx("p",{className:"line-clamp-3 text-sm text-paddock-600 dark:text-paddock-400",children:s.summary}),s.domain.length>0&&e.jsxs("div",{className:"flex flex-wrap gap-1",children:[s.domain.slice(0,4).map(d=>e.jsx(X,{tag:d,className:"max-w-[10rem] truncate"},d)),s.domain.length>4&&e.jsxs("span",{className:"tag",children:["+",s.domain.length-4]})]}),e.jsxs("div",{className:"mt-auto flex items-center justify-between gap-2 border-t border-paddock-200/70 pt-3 text-[11px] text-paddock-400 dark:border-paddock-800",children:[e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(j,{width:12,height:12}),a==null?"…":`${a} ${a===1?"chat":"chats"}`]}),e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(z,{width:12,height:12}),q(s.updated)]})]})]})}function Z({tag:s,onClear:a}){return e.jsxs("div",{className:"mb-6 flex items-center gap-2 text-sm text-paddock-500",children:[e.jsx("span",{children:"Filtered by"}),e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded-full bg-paddock-200/70 px-2.5 py-1 text-xs font-medium text-paddock-700 dark:bg-paddock-800 dark:text-paddock-200",children:[e.jsx("span",{"aria-hidden":!0,children:"🏷"}),e.jsx("span",{className:"max-w-[14rem] truncate",children:s}),e.jsx("button",{type:"button","aria-label":`Clear ${s} filter`,title:"Clear filter",onClick:a,className:"-mr-0.5 ml-0.5 flex h-4 w-4 items-center justify-center rounded-full transition-colors hover:bg-black/10 dark:hover:bg-white/10",children:e.jsx(P,{width:11,height:11})})]})]})}function _({tag:s,onClear:a}){return e.jsxs("div",{className:"mx-auto mt-10 max-w-lg rounded-2xl border border-dashed border-paddock-300 bg-white/50 px-8 py-12 text-center dark:border-paddock-700 dark:bg-paddock-900/40",children:[e.jsx("h2",{className:"text-lg font-semibold",children:"No projects tagged"}),e.jsxs("p",{className:"mx-auto mt-3 flex items-center justify-center gap-1.5 text-sm text-paddock-500",children:["Nothing matches ",e.jsx("span",{className:"tag",children:s})," right now."]}),e.jsx("div",{className:"mt-6 flex items-center justify-center",children:e.jsxs("button",{className:"btn-ghost",onClick:a,children:[e.jsx(P,{width:16,height:16}),"Clear filter"]})})]})}function T({onCreate:s,onChat:a}){return e.jsxs("div",{className:"mx-auto mt-10 max-w-lg rounded-2xl border border-dashed border-paddock-300 bg-white/50 px-8 py-12 text-center dark:border-paddock-700 dark:bg-paddock-900/40",children:[e.jsx("div",{className:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-2xl bg-accent/10 text-accent",children:e.jsx(O,{width:26,height:26})}),e.jsx("h2",{className:"text-lg font-semibold",children:"Create your first project"}),e.jsx("p",{className:"mx-auto mt-2 max-w-sm text-sm text-paddock-500",children:"A project gives your work a home — a directory and chat sessions that persist and resume. Start one, then chat your way through it."}),e.jsxs("div",{className:"mt-6 flex items-center justify-center gap-2",children:[e.jsxs("button",{className:"btn-primary",onClick:s,children:[e.jsx(C,{width:16,height:16}),"New Project"]}),e.jsxs("button",{className:"btn-ghost",onClick:a,children:[e.jsx(j,{width:16,height:16}),"Just chat once"]})]})]})}export{te as ProjectsGrid};
2
-
@@ -1,2 +0,0 @@
1
- import{U as a,D as n}from"./mermaid.core-DPrhSs95.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
2
-
@@ -1,2 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-727SXJPM-D3gQ4rP3.js";import{_ as i}from"./mermaid.core-DPrhSs95.js";import"./chunk-FMBD7UC4-D09zE6Ow.js";import"./chunk-ND2GUHAM-CUSgeCLl.js";import"./chunk-55IACEB6-BC9_Qc8h.js";import"./chunk-2J33WTMH-C4TBH3R6.js";import"./index-DGNSeqL-.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
2
-
@@ -1,2 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-727SXJPM-D3gQ4rP3.js";import{_ as i}from"./mermaid.core-DPrhSs95.js";import"./chunk-FMBD7UC4-D09zE6Ow.js";import"./chunk-ND2GUHAM-CUSgeCLl.js";import"./chunk-55IACEB6-BC9_Qc8h.js";import"./chunk-2J33WTMH-C4TBH3R6.js";import"./index-DGNSeqL-.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
2
-
@@ -1,44 +0,0 @@
1
- import{s as k,g as I,q as R,p as F,a as _,b as E,_ as l,L as D,z,H as y,F as C,I as G,l as P,a1 as W,e as B}from"./mermaid.core-DPrhSs95.js";import{p as H}from"./chunk-4BX2VUAB-DTKJZlRM.js";import{p as V}from"./wardley-L42UT6IY-Bj9chUqz.js";import"./index-DGNSeqL-.js";var m={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},w={axes:[],curves:[],options:m},x=structuredClone(w),j=G.radar,q=l(()=>y({...j,...C().radar}),"getConfig"),b=l(()=>x.axes,"getAxes"),N=l(()=>x.curves,"getCurves"),U=l(()=>x.options,"getOptions"),X=l(a=>{x.axes=a.map(t=>({name:t.name,label:t.label??t.name}))},"setAxes"),Y=l(a=>{x.curves=a.map(t=>({name:t.name,label:t.label??t.name,entries:Z(t.entries)}))},"setCurves"),Z=l(a=>{if(a[0].axis==null)return a.map(e=>e.value);const t=b();if(t.length===0)throw new Error("Axes must be populated before curves for reference entries");return t.map(e=>{const r=a.find(s=>{var o;return((o=s.axis)==null?void 0:o.$refText)===e.name});if(r===void 0)throw new Error("Missing entry for axis "+e.label);return r.value})},"computeCurveEntries"),J=l(a=>{var e,r,s,o,i;const t=a.reduce((n,c)=>(n[c.name]=c,n),{});x.options={showLegend:((e=t.showLegend)==null?void 0:e.value)??m.showLegend,ticks:((r=t.ticks)==null?void 0:r.value)??m.ticks,max:((s=t.max)==null?void 0:s.value)??m.max,min:((o=t.min)==null?void 0:o.value)??m.min,graticule:((i=t.graticule)==null?void 0:i.value)??m.graticule}},"setOptions"),K=l(()=>{z(),x=structuredClone(w)},"clear"),$={getAxes:b,getCurves:N,getOptions:U,setAxes:X,setCurves:Y,setOptions:J,getConfig:q,clear:K,setAccTitle:E,getAccTitle:_,setDiagramTitle:F,getDiagramTitle:R,getAccDescription:I,setAccDescription:k},Q=l(a=>{H(a,$);const{axes:t,curves:e,options:r}=a;$.setAxes(t),$.setCurves(e),$.setOptions(r)},"populate"),tt={parse:l(async a=>{const t=await V("radar",a);P.debug(t),Q(t)},"parse")},et=l((a,t,e,r)=>{const s=r.db,o=s.getAxes(),i=s.getCurves(),n=s.getOptions(),c=s.getConfig(),d=s.getDiagramTitle(),p=D(t),u=at(p,c),g=n.max??Math.max(...i.map(f=>Math.max(...f.entries))),h=n.min,v=Math.min(c.width,c.height)/2;rt(u,o,v,n.ticks,n.graticule),st(u,o,v,c),M(u,o,i,h,g,n.graticule,c),T(u,i,n.showLegend,c),u.append("text").attr("class","radarTitle").text(d).attr("x",0).attr("y",-c.height/2-c.marginTop)},"draw"),at=l((a,t)=>{const e=t.width+t.marginLeft+t.marginRight,r=t.height+t.marginTop+t.marginBottom,s={x:t.marginLeft+t.width/2,y:t.marginTop+t.height/2};return B(a,r,e,t.useMaxWidth??!0),a.attr("viewBox",`0 0 ${e} ${r}`),a.append("g").attr("transform",`translate(${s.x}, ${s.y})`)},"drawFrame"),rt=l((a,t,e,r,s)=>{if(s==="circle")for(let o=0;o<r;o++){const i=e*(o+1)/r;a.append("circle").attr("r",i).attr("class","radarGraticule")}else if(s==="polygon"){const o=t.length;for(let i=0;i<r;i++){const n=e*(i+1)/r,c=t.map((d,p)=>{const u=2*p*Math.PI/o-Math.PI/2,g=n*Math.cos(u),h=n*Math.sin(u);return`${g},${h}`}).join(" ");a.append("polygon").attr("points",c).attr("class","radarGraticule")}}},"drawGraticule"),st=l((a,t,e,r)=>{const s=t.length;for(let o=0;o<s;o++){const i=t[o].label,n=2*o*Math.PI/s-Math.PI/2;a.append("line").attr("x1",0).attr("y1",0).attr("x2",e*r.axisScaleFactor*Math.cos(n)).attr("y2",e*r.axisScaleFactor*Math.sin(n)).attr("class","radarAxisLine"),a.append("text").text(i).attr("x",e*r.axisLabelFactor*Math.cos(n)).attr("y",e*r.axisLabelFactor*Math.sin(n)).attr("class","radarAxisLabel")}},"drawAxes");function M(a,t,e,r,s,o,i){const n=t.length,c=Math.min(i.width,i.height)/2;e.forEach((d,p)=>{if(d.entries.length!==n)return;const u=d.entries.map((g,h)=>{const v=2*Math.PI*h/n-Math.PI/2,f=A(g,r,s,c),S=f*Math.cos(v),O=f*Math.sin(v);return{x:S,y:O}});o==="circle"?a.append("path").attr("d",L(u,i.curveTension)).attr("class",`radarCurve-${p}`):o==="polygon"&&a.append("polygon").attr("points",u.map(g=>`${g.x},${g.y}`).join(" ")).attr("class",`radarCurve-${p}`)})}l(M,"drawCurves");function A(a,t,e,r){const s=Math.min(Math.max(a,t),e);return r*(s-t)/(e-t)}l(A,"relativeRadius");function L(a,t){const e=a.length;let r=`M${a[0].x},${a[0].y}`;for(let s=0;s<e;s++){const o=a[(s-1+e)%e],i=a[s],n=a[(s+1)%e],c=a[(s+2)%e],d={x:i.x+(n.x-o.x)*t,y:i.y+(n.y-o.y)*t},p={x:n.x-(c.x-i.x)*t,y:n.y-(c.y-i.y)*t};r+=` C${d.x},${d.y} ${p.x},${p.y} ${n.x},${n.y}`}return`${r} Z`}l(L,"closedRoundCurve");function T(a,t,e,r){if(!e)return;const s=(r.width/2+r.marginRight)*3/4,o=-(r.height/2+r.marginTop)*3/4,i=20;t.forEach((n,c)=>{const d=a.append("g").attr("transform",`translate(${s}, ${o+c*i})`);d.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${c}`),d.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(n.label)})}l(T,"drawLegend");var nt={draw:et},ot=l((a,t)=>{let e="";for(let r=0;r<a.THEME_COLOR_LIMIT;r++){const s=a[`cScale${r}`];e+=`
2
- .radarCurve-${r} {
3
- color: ${s};
4
- fill: ${s};
5
- fill-opacity: ${t.curveOpacity};
6
- stroke: ${s};
7
- stroke-width: ${t.curveStrokeWidth};
8
- }
9
- .radarLegendBox-${r} {
10
- fill: ${s};
11
- fill-opacity: ${t.curveOpacity};
12
- stroke: ${s};
13
- }
14
- `}return e},"genIndexStyles"),it=l(a=>{const t=W(),e=C(),r=y(t,e.themeVariables),s=y(r.radar,a);return{themeVariables:r,radarOptions:s}},"buildRadarStyleOptions"),lt=l(({radar:a}={})=>{const{themeVariables:t,radarOptions:e}=it(a);return`
15
- .radarTitle {
16
- font-size: ${t.fontSize};
17
- color: ${t.titleColor};
18
- dominant-baseline: hanging;
19
- text-anchor: middle;
20
- }
21
- .radarAxisLine {
22
- stroke: ${e.axisColor};
23
- stroke-width: ${e.axisStrokeWidth};
24
- }
25
- .radarAxisLabel {
26
- dominant-baseline: middle;
27
- text-anchor: middle;
28
- font-size: ${e.axisLabelFontSize}px;
29
- color: ${e.axisColor};
30
- }
31
- .radarGraticule {
32
- fill: ${e.graticuleColor};
33
- fill-opacity: ${e.graticuleOpacity};
34
- stroke: ${e.graticuleColor};
35
- stroke-width: ${e.graticuleStrokeWidth};
36
- }
37
- .radarLegendText {
38
- text-anchor: start;
39
- font-size: ${e.legendFontSize}px;
40
- dominant-baseline: hanging;
41
- }
42
- ${ot(t,e)}
43
- `},"styles"),gt={parser:tt,db:$,renderer:nt,styles:lt};export{gt as diagram};
44
-
@@ -1,11 +0,0 @@
1
- import{p as x,b as f,s as C,q as B,g as T,a as y,_ as s,H as u,l as k,L as V,e as _,F as N,z as S,I as D}from"./mermaid.core-DPrhSs95.js";import{p as I}from"./chunk-4BX2VUAB-DTKJZlRM.js";import{I as $}from"./chunk-QZHKN3VN-B6jVPYgy.js";import{p as z}from"./wardley-L42UT6IY-Bj9chUqz.js";import"./index-DGNSeqL-.js";var d=new $(()=>({cnt:1,stack:[{id:0,level:-1,name:"/",children:[]}]})),A=s(()=>{d.reset(),S()},"clear"),H=s(()=>d.records.stack[0],"getRoot"),L=s(()=>d.records.cnt,"getCount"),X=D.treeView,R=s(()=>u(X,N().treeView),"getConfig"),W=s((e,t)=>{for(;e<=d.records.stack[d.records.stack.length-1].level;)d.records.stack.pop();const a={id:d.records.cnt++,level:e,name:t,children:[]};d.records.stack[d.records.stack.length-1].children.push(a),d.records.stack.push(a)},"addNode"),E={clear:A,addNode:W,getRoot:H,getCount:L,getConfig:R,getAccTitle:y,getAccDescription:T,getDiagramTitle:B,setAccDescription:C,setAccTitle:f,setDiagramTitle:x},m=E,F=s(e=>{I(e,m),e.nodes.map(t=>m.addNode(t.indent?parseInt(t.indent):0,t.name))},"populate"),M={parse:s(async e=>{const t=await z("treeView",e);k.debug(t),F(t)},"parse")},Y=s((e,t,a,n,o)=>{const c=n.append("text").text(a.name).attr("dominant-baseline","middle").attr("class","treeView-node-label"),{height:g,width:r}=c.node().getBBox(),l=g+o.paddingY*2,i=r+o.paddingX*2;c.attr("x",e+o.paddingX),c.attr("y",t+l/2),a.BBox={x:e,y:t,width:i,height:l}},"positionLabel"),b=s((e,t,a,n,o,c)=>e.append("line").attr("x1",t).attr("y1",a).attr("x2",n).attr("y2",o).attr("stroke-width",c).attr("class","treeView-node-line"),"positionLine"),q=s((e,t,a)=>{let n=0,o=0;const c=s((r,l,i,h)=>{const v=h*(i.rowIndent+i.paddingX);Y(v,n,l,r,i);const{height:p,width:w}=l.BBox;b(r,v-i.rowIndent,n+p/2,v,n+p/2,i.lineThickness),o=Math.max(o,v+w),n+=p},"drawNode"),g=s((r,l=0)=>{c(e,r,a,l),r.children.forEach(p=>{g(p,l+1)});const{x:i,y:h,height:v}=r.BBox;if(r.children.length){const{y:p,height:w}=r.children[r.children.length-1].BBox;b(e,i+a.paddingX,h+v,i+a.paddingX,p+w/2+a.lineThickness/2,a.lineThickness)}},"processNode");return g(t),{totalHeight:n,totalWidth:o}},"drawTree"),j=s((e,t,a,n)=>{k.debug(`Rendering treeView diagram
2
- `+e);const o=n.db,c=o.getRoot(),g=o.getConfig(),r=V(t),l=r.append("g");l.attr("class","tree-view");const{totalHeight:i,totalWidth:h}=q(l,c,g);r.attr("viewBox",`-${g.lineThickness/2} 0 ${h} ${i}`),_(r,i,h,g.useMaxWidth)},"draw"),G={draw:j},J=G,K={labelFontSize:"16px",labelColor:"black",lineColor:"black"},O=s(({treeView:e})=>{const{labelFontSize:t,labelColor:a,lineColor:n}=u(K,e);return`
3
- .treeView-node-label {
4
- font-size: ${t};
5
- fill: ${a};
6
- }
7
- .treeView-node-line {
8
- stroke: ${n};
9
- }
10
- `},"styles"),P=O,ae={db:m,renderer:J,parser:M,styles:P};export{ae as diagram};
11
-
@@ -1,2 +0,0 @@
1
- import{j as s,r as h,A as y,t as w,v as $,w as N}from"./index-DGNSeqL-.js";const x={idea:{pill:"bg-paddock-200/70 text-paddock-700 dark:bg-paddock-800 dark:text-paddock-300",dot:"bg-paddock-500"},active:{pill:"bg-emerald-100 text-emerald-800 dark:bg-emerald-900/50 dark:text-emerald-300",dot:"bg-emerald-500"},paused:{pill:"bg-amber-100 text-amber-800 dark:bg-amber-900/50 dark:text-amber-300",dot:"bg-amber-500"},blocked:{pill:"bg-rose-100 text-rose-800 dark:bg-rose-900/50 dark:text-rose-300",dot:"bg-rose-500"},done:{pill:"bg-sky-100 text-sky-800 dark:bg-sky-900/50 dark:text-sky-300",dot:"bg-sky-500"},abandoned:{pill:"bg-zinc-200 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400",dot:"bg-zinc-400"}};function E({status:t}){const e=x[t]??x.idea;return s.jsxs("span",{className:`status-pill ${e.pill}`,children:[s.jsx("span",{className:`h-1.5 w-1.5 rounded-full ${e.dot}`}),t]})}function T(t,e){h.useEffect(()=>{if(!t)return;const n=r=>{r.key==="Escape"&&e()};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[t,e])}function S({open:t,title:e,message:n,confirmLabel:r="Delete",cancelLabel:d="Cancel",danger:a=!0,wide:i=!1,dismissOnBackdrop:u=!0,onConfirm:f,onClose:o}){const[c,m]=h.useState(!1),[k,g]=h.useState(null);if(h.useEffect(()=>{t&&g(null)},[t]),T(t&&!c,o),!t)return null;const l=async()=>{m(!0),g(null);try{await f()}catch(p){g(p instanceof Error?p.message:"Action failed"),m(!1)}};return s.jsx("div",{className:"fixed inset-0 z-[60] flex items-center justify-center bg-black/40 p-4 backdrop-blur-sm",onClick:()=>u&&!c&&o(),children:s.jsxs("div",{className:`w-full ${i?"max-w-md":"max-w-sm"} animate-scale-in rounded-2xl border border-paddock-200 bg-white p-6 shadow-2xl dark:border-paddock-800 dark:bg-paddock-900`,onClick:p=>p.stopPropagation(),role:"alertdialog","aria-modal":"true",children:[s.jsxs("div",{className:"flex items-start gap-3",children:[a&&s.jsx("span",{className:"mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-rose-100 text-rose-600 dark:bg-rose-950/60 dark:text-rose-400",children:s.jsx(y,{width:18,height:18})}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("h2",{className:"text-base font-semibold",children:e}),s.jsx("div",{className:"mt-1.5 text-sm text-paddock-600 dark:text-paddock-400",children:n})]})]}),k&&s.jsx("p",{className:"mt-4 rounded-lg bg-rose-50 px-3 py-2 text-sm text-rose-600 dark:bg-rose-950/40 dark:text-rose-300",children:k}),s.jsxs("div",{className:"mt-5 flex justify-end gap-2",children:[s.jsx("button",{type:"button",className:"btn-ghost",onClick:o,disabled:c,children:d}),s.jsx("button",{type:"button",className:a?"btn btn-danger":"btn-primary",onClick:l,disabled:c,children:c?"Working…":r})]})]})})}function D({onEdit:t,onDelete:e,align:n="right",label:r="Project actions",size:d=16}){const[a,i]=h.useState(!1),u=h.useRef(null);h.useEffect(()=>{if(!a)return;const o=m=>{u.current&&!u.current.contains(m.target)&&i(!1)},c=m=>{m.key==="Escape"&&i(!1)};return document.addEventListener("mousedown",o),document.addEventListener("keydown",c),()=>{document.removeEventListener("mousedown",o),document.removeEventListener("keydown",c)}},[a]);const f=o=>{o.preventDefault(),o.stopPropagation()};return s.jsxs("div",{className:"relative",ref:u,children:[s.jsx("button",{type:"button","aria-label":r,"aria-haspopup":"menu","aria-expanded":a,title:r,onClick:o=>{f(o),i(c=>!c)},className:"flex h-7 w-7 items-center justify-center rounded-lg text-paddock-400 transition-colors hover:bg-paddock-200/70 hover:text-paddock-700 dark:hover:bg-paddock-800 dark:hover:text-paddock-200",children:s.jsx(w,{width:d,height:d})}),a&&s.jsxs("div",{className:`menu top-8 ${n==="right"?"right-0":"left-0"}`,role:"menu",children:[s.jsxs("button",{type:"button",role:"menuitem",className:"menu-item",onClick:o=>{f(o),i(!1),t()},children:[s.jsx($,{width:14,height:14}),"Edit details"]}),e&&s.jsxs("button",{type:"button",role:"menuitem",className:"menu-item-danger",onClick:o=>{f(o),i(!1),e()},children:[s.jsx(N,{width:14,height:14}),"Delete project"]})]})]})}const j=/^\d{4}-\d{2}-\d{2}$/;function L(t){if(!t)return"";if(j.test(t)){const[f,o,c]=t.split("-").map(Number),m=new Date(f,o-1,c);if(Number.isNaN(m.getTime()))return t;const k=new Date,g=new Date(k.getFullYear(),k.getMonth(),k.getDate()),l=Math.round((g.getTime()-m.getTime())/864e5);return l<=0?"today":l===1?"yesterday":l<7?`${l}d ago`:l<35?`${Math.round(l/7)}w ago`:l<365?`${Math.round(l/30)}mo ago`:`${Math.round(l/365)}y ago`}const e=new Date(t).getTime();if(Number.isNaN(e))return t;const n=Math.round((Date.now()-e)/1e3);if(n<45)return"just now";const r=Math.round(n/60);if(r<60)return`${r}m ago`;const d=Math.round(r/60);if(d<24)return`${d}h ago`;const a=Math.round(d/24);if(a<7)return`${a}d ago`;const i=Math.round(a/7);if(i<5)return`${i}w ago`;const u=Math.round(a/30);return u<12?`${u}mo ago`:`${Math.round(a/365)}y ago`}function P(t){if(!t)return"";const e=new Date(t).getTime();if(Number.isNaN(e))return t;const n=Math.round((e-Date.now())/1e3);if(n<=30)return"now";const r=Math.round(n/60);if(r<60)return`in ${r}m`;const d=Math.round(r/60);if(d<24)return`in ${d}h`;const a=Math.round(d/24);if(a<7)return`in ${a}d`;const i=Math.round(a/7);if(i<5)return`in ${i}w`;const u=Math.round(a/30);return u<12?`in ${u}mo`:`in ${Math.round(a/365)}y`}function b(t){return!Number.isFinite(t)||t<0?"0":t>=1e6?`${(t/1e6).toFixed(t>=1e7?0:2)}M`:t>=1e3?`${Math.round(t/1e3)}K`:`${Math.round(t)}`}function v(t){return!Number.isFinite(t)||t<=0?"$0.00":t<.01?"<$0.01":`$${t.toFixed(2)}`}function I(t){if(!(!t||t.totalTokens==null))return{inputTokens:t.inputTokens??0,outputTokens:t.outputTokens??0,cacheReadTokens:t.cacheReadTokens??0,cacheCreationTokens:t.cacheCreationTokens??0,totalTokens:t.totalTokens,costUsd:t.costUsd??null}}function U(t){const e=t.inputTokens+t.cacheReadTokens+t.cacheCreationTokens,n=`${b(t.totalTokens)} tokens · ${b(e)} in / ${b(t.outputTokens)} out`;return t.costUsd==null?n:`${n} · ~${v(t.costUsd)} at API rates`}function A(t){if(t==null||Number.isNaN(t))return null;if(t<1e3)return`${Math.round(t)}ms`;const e=t/1e3;if(e<10)return`${e.toFixed(1)}s`;if(e<60)return`${Math.round(e)}s`;const n=Math.floor(e/60),r=Math.round(e%60);return r?`${n}m ${r}s`:`${n}m`}const M="This session is being continued from a previous conversation";function F(t){return t.trimStart().startsWith(M)}function O(t){const e=/^\s*<command-name>([^<]*)<\/command-name>/.exec(t);if(!e)return null;const n=e[1].trim();return n.length>0?n:null}function R(t){return t.trimStart().startsWith("<local-command-caveat>")}function z(t){const e=/^\s*<local-command-stdout>([\s\S]*)<\/local-command-stdout>\s*$/.exec(t);if(!e)return null;const n=e[1].trim();return n.length>0?n:null}function K(t){return/^\s*<local-command-stdout>[\s\S]*<\/local-command-stdout>\s*$/.test(t)}function W(t){return t.trimStart().startsWith("<task-notification>")}function _(t){var r;const e=/<summary>([\s\S]*?)<\/summary>/.exec(t),n=(r=e==null?void 0:e[1])==null?void 0:r.trim();return n&&n.length>0?n:"Background agent updated"}function Y(t){var r;const e=/<status>([\s\S]*?)<\/status>/.exec(t),n=(r=e==null?void 0:e[1])==null?void 0:r.trim().toLowerCase();return n&&n.length>0?n:null}function B(t){return t==="killed"||t==="stopped"}export{S as C,D as P,E as S,K as a,R as b,W as c,_ as d,b as e,v as f,U as g,B as h,F as i,A as j,T as k,z as l,I as m,L as r,O as s,Y as t,P as u};
2
-