wherdr 1.3.2 → 1.3.3
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/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{AgentView.C4YOwvZG.css → AgentView.DzFWBd2A.css} +1 -1
- package/.output/public/_nuxt/B4Yk2tB1.js +23 -0
- package/.output/public/_nuxt/BBw_0a4M.js +6 -0
- package/.output/public/_nuxt/{D7sxNXx1.js → BSy6OCIY.js} +1 -1
- package/.output/public/_nuxt/BX5PM2JQ.js +1 -0
- package/.output/public/_nuxt/BgPDnf2S.js +1 -0
- package/.output/public/_nuxt/BkOxQzbS.js +2 -0
- package/.output/public/_nuxt/{8ksjcuDu.js → CKhgznq4.js} +45 -56
- package/.output/public/_nuxt/{Cd8j9O5w.js → CP8o925U.js} +1 -1
- package/.output/public/_nuxt/CkbmecwS.js +1 -0
- package/.output/public/_nuxt/Cr3SrGky.js +1 -0
- package/.output/public/_nuxt/DAg9fiVh.js +89 -0
- package/.output/public/_nuxt/DT8qZ0Wv.js +1 -0
- package/.output/public/_nuxt/DaaJIRB3.js +1 -0
- package/.output/public/_nuxt/{DViwOclv.js → DcJi16XA.js} +1 -1
- package/.output/public/_nuxt/VpjCgSXu.js +36 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/c735b6c0-1bd0-47d7-a208-d310f0a06287.json +1 -0
- package/.output/public/_nuxt/dPxB2L94.js +89 -0
- package/.output/public/_nuxt/{entry.Crt1r4l3.css → entry.CGWKmYU3.css} +1 -1
- package/.output/public/_nuxt/xYX85SPI.js +1 -0
- package/.output/public/sw.js +1 -1
- package/.output/server/chunks/_/branding.mjs +1 -1
- package/.output/server/chunks/_/filePaths.mjs +25 -0
- package/.output/server/chunks/_/files.mjs +204 -0
- package/.output/server/chunks/_/machineOrder.mjs +1 -1
- package/.output/server/chunks/_/onboarding.mjs +1 -1
- package/.output/server/chunks/_/package.mjs +3 -2
- package/.output/server/chunks/_/pluginPolicy.mjs +93 -0
- package/.output/server/chunks/_/plugins.mjs +4 -94
- package/.output/server/chunks/_/projectBoard.mjs +120 -29
- package/.output/server/chunks/_/projectDocs.mjs +106 -0
- package/.output/server/chunks/_/projectInbox.mjs +135 -0
- package/.output/server/chunks/_/projectThreads.mjs +46 -0
- package/.output/server/chunks/_/projectThreads2.mjs +61 -0
- package/.output/server/chunks/_/projectsActions.mjs +1 -1
- package/.output/server/chunks/_/projectsPlugin.mjs +1 -1
- package/.output/server/chunks/_/restart.mjs +2 -312
- package/.output/server/chunks/_/reveal.mjs +2 -24
- package/.output/server/chunks/_/selfupdate.mjs +3 -2
- package/.output/server/chunks/_/updates.mjs +51 -10
- package/.output/server/chunks/_/worktrees.mjs +1 -1
- package/.output/server/chunks/_/ws.mjs +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +1096 -268
- package/.output/server/chunks/raw/bump-homebrew.mjs +1 -1
- package/.output/server/chunks/raw/herdr-plugin.mjs +1 -1
- package/.output/server/chunks/raw/release-ready.mjs +5 -0
- package/.output/server/chunks/routes/api/_..._.mjs +1 -1
- package/.output/server/chunks/routes/api/agents.post.mjs +1 -1
- package/.output/server/chunks/routes/api/ask-tab.post.mjs +1 -1
- package/.output/server/chunks/routes/api/attach.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/disable.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/lock-all.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/lock.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/login/options.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/login/verify.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/max-session.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/register/options.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/register/verify.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/status.get.mjs +1 -1
- package/.output/server/chunks/routes/api/board.get.mjs +147 -0
- package/.output/server/chunks/routes/api/changes.get.mjs +2 -2
- package/.output/server/chunks/routes/api/chat/image.get.mjs +2 -2
- package/.output/server/chunks/routes/api/chat.get.mjs +2 -2
- package/.output/server/chunks/routes/api/choose.post.mjs +29 -3
- package/.output/server/chunks/routes/api/claude-statusline.post.mjs +2 -2
- package/.output/server/chunks/routes/api/close/status.get.mjs +2 -2
- package/.output/server/chunks/routes/api/close.post.mjs +1 -1
- package/.output/server/chunks/routes/api/codex-update.post.mjs +2 -2
- package/.output/server/chunks/routes/api/commands.get.mjs +2 -2
- package/.output/server/chunks/routes/api/config.get.mjs +3 -2
- package/.output/server/chunks/routes/api/dirs.get.mjs +2 -2
- package/.output/server/chunks/routes/api/dismiss-stopped.post.mjs +43 -0
- package/.output/server/chunks/routes/api/dismiss.post.mjs +2 -2
- package/.output/server/chunks/routes/api/effort.post.mjs +2 -2
- package/.output/server/chunks/routes/api/efforts.get.mjs +2 -2
- package/.output/server/chunks/routes/api/file.post.mjs +2 -2
- package/.output/server/chunks/routes/api/files/download.get.mjs +53 -0
- package/.output/server/chunks/routes/api/files/read.get.mjs +45 -0
- package/.output/server/chunks/routes/api/files.get.mjs +44 -0
- package/.output/server/chunks/routes/api/gitroot.get.mjs +2 -2
- package/.output/server/chunks/routes/api/health.get.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/input.post.mjs +13 -3
- package/.output/server/chunks/routes/api/interrupt.post.mjs +2 -2
- package/.output/server/chunks/routes/api/isgit.get.mjs +2 -2
- package/.output/server/chunks/routes/api/machine/awake.get.mjs +2 -2
- package/.output/server/chunks/routes/api/machine/awake.post.mjs +2 -2
- package/.output/server/chunks/routes/api/machine/order.get.mjs +1 -1
- package/.output/server/chunks/routes/api/machine/order.post.mjs +1 -1
- package/.output/server/chunks/routes/api/machine/rename.post.mjs +2 -2
- package/.output/server/chunks/routes/api/menu.post.mjs +2 -2
- package/.output/server/chunks/routes/api/model.post.mjs +2 -2
- package/.output/server/chunks/routes/api/models.get.mjs +2 -2
- package/.output/server/chunks/routes/api/nav.post.mjs +5 -4
- package/.output/server/chunks/routes/api/onboarding.get.mjs +1 -1
- package/.output/server/chunks/routes/api/onboarding.post.mjs +1 -1
- package/.output/server/chunks/routes/api/phone.get.mjs +2 -2
- package/.output/server/chunks/routes/api/phone.post.mjs +2 -2
- package/.output/server/chunks/routes/api/plugins/actions.get.mjs +2 -1
- package/.output/server/chunks/routes/api/plugins/invoke.post.mjs +2 -1
- package/.output/server/chunks/routes/api/plugins/profiles.get.mjs +2 -1
- package/.output/server/chunks/routes/api/plugins/projects.get.mjs +2 -2
- package/.output/server/chunks/routes/api/plugins/projects.post.mjs +2 -2
- package/.output/server/chunks/routes/api/plugins/thread-limits.get.mjs +2 -2
- package/.output/server/chunks/routes/api/plugins/thread-limits.post.mjs +2 -2
- package/.output/server/chunks/routes/api/project/inbox.get.mjs +43 -0
- package/.output/server/chunks/routes/api/project/inbox.post.mjs +43 -0
- package/.output/server/chunks/routes/api/project/memory.get.mjs +42 -0
- package/.output/server/chunks/routes/api/project/report.get.mjs +2 -2
- package/.output/server/chunks/routes/api/project/routines.get.mjs +43 -0
- package/.output/server/chunks/routes/api/project/settings.get.mjs +41 -0
- package/.output/server/chunks/routes/api/project/thread.get.mjs +44 -0
- package/.output/server/chunks/routes/api/project/thread.post.mjs +45 -0
- package/.output/server/chunks/routes/api/prompt.post.mjs +21 -3
- package/.output/server/chunks/routes/api/push/quiet.post.mjs +2 -2
- package/.output/server/chunks/routes/api/push/subscribe.post.mjs +2 -2
- package/.output/server/chunks/routes/api/push/test.post.mjs +2 -2
- package/.output/server/chunks/routes/api/push/unsubscribe.post.mjs +2 -2
- package/.output/server/chunks/routes/api/quotas.get.mjs +2 -2
- package/.output/server/chunks/routes/api/rename.post.mjs +1 -1
- package/.output/server/chunks/routes/api/requeue.post.mjs +2 -2
- package/.output/server/chunks/routes/api/restart.get.mjs +1 -1
- package/.output/server/chunks/routes/api/restart.post.mjs +1 -1
- package/.output/server/chunks/routes/api/reveal.post.mjs +2 -1
- package/.output/server/chunks/routes/api/screen-key.post.mjs +2 -2
- package/.output/server/chunks/routes/api/screen.get.mjs +5 -3
- package/.output/server/chunks/routes/api/search.get.mjs +2 -2
- package/.output/server/chunks/routes/api/seen.post.mjs +2 -2
- package/.output/server/chunks/routes/api/sessions.get.mjs +2 -2
- package/.output/server/chunks/routes/api/sessions.post.mjs +2 -2
- package/.output/server/chunks/routes/api/space.post.mjs +14 -14
- package/.output/server/chunks/routes/api/state.get.mjs +2 -2
- package/.output/server/chunks/routes/api/unqueue.post.mjs +2 -2
- package/.output/server/chunks/routes/api/update/status.get.mjs +1 -1
- package/.output/server/chunks/routes/api/update.get.mjs +2 -2
- package/.output/server/chunks/routes/api/update.post.mjs +2 -2
- package/.output/server/chunks/routes/api/upload.post.mjs +2 -2
- package/.output/server/chunks/routes/api/worktrees/remove.post.mjs +1 -1
- package/.output/server/chunks/routes/api/worktrees.get.mjs +1 -1
- package/.output/server/chunks/routes/favicon.ico.get.mjs +1 -1
- package/.output/server/chunks/routes/icons/_name_.get.mjs +2 -2
- package/.output/server/chunks/routes/renderer.mjs +3 -3
- package/.output/server/chunks/routes/uploads/_...name_.get.mjs +2 -2
- package/.output/server/chunks/routes/ws/_..._.mjs +2 -2
- package/.output/server/chunks/routes/ws/events.mjs +2 -2
- package/.output/server/chunks/routes/ws/term.mjs +2 -2
- package/.output/server/chunks/virtual/precomputed.mjs +1 -1
- package/.output/server/index.mjs +2 -2
- package/.output/server/package.json +1 -1
- package/README.md +332 -25
- package/bin/install-docker-skill.sh +20 -0
- package/bin/lib/commands.mjs +5 -1
- package/bin/lib/core.mjs +1 -0
- package/bin/lib/install-skill.sh +100 -0
- package/bin/lib/skill.mjs +16 -0
- package/bin/lib/updater.mjs +65 -12
- package/bin/lib/verify-release.mjs +20 -0
- package/package.json +3 -2
- package/skills/wherdr/SKILL.md +180 -0
- package/.output/public/_nuxt/B7QP1TFs.js +0 -23
- package/.output/public/_nuxt/BDNMzG2s.js +0 -1
- package/.output/public/_nuxt/BOpBIziZ.js +0 -6
- package/.output/public/_nuxt/BWXdFfeg.js +0 -17
- package/.output/public/_nuxt/COFCNFpG.js +0 -83
- package/.output/public/_nuxt/CXG-cOdh.js +0 -1
- package/.output/public/_nuxt/CkZ8t6uB.js +0 -1
- package/.output/public/_nuxt/D4Yz4rat.js +0 -65
- package/.output/public/_nuxt/DoD7Qb5P.js +0 -30
- package/.output/public/_nuxt/DyBZDSCV.js +0 -2
- package/.output/public/_nuxt/bLP7Jj-b.js +0 -1
- package/.output/public/_nuxt/builds/meta/7afbf062-5369-4002-b20d-7a582ff6e0f1.json +0 -1
- package/.output/server/chunks/routes/ws/mirror.mjs +0 -161
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,B as t,Et as n,Hn as r,M as i,Mn as a,N as o,Ot as s,P as c,Pt as l,St as u,U as d,V as f,b as p,dr as m,hr as h,j as g,mr as _,nn as v,sn as y,w as ee}from"./SiL1FJ5s.js";import{_t as b,vt as x}from"./CWwyK2XK.js";import{$r as S,Br as C,En as w,Gr as te,Ir as T,Jt as ne,M as re,O as ie,Pr as ae,Ur as oe,Yr as se,ii as ce,jr as le,rn as E,ti as ue,wn as de}from"./dPxB2L94.js";import{f as fe,p as pe,u as me}from"./Ci8N4mWR.js";import{B as he,Br as D,C as ge,Er as _e,F as ve,G as O,H as k,I as ye,In as be,Ln as xe,Lt as Se,Mn as Ce,Mr as A,Nn as we,Pn as Te,Pt as Ee,Rn as De,T as j,V as Oe,_ as ke,b as M,er as N,jr as P,o as Ae,or as F,zn as je}from"./DAg9fiVh.js";import{f as I,m as Me}from"./BgPDnf2S.js";import{i as Ne,n as Pe,r as Fe,t as Ie}from"./CKhgznq4.js";import{H as L,I as R,M as Le,N as z,U as Re,k as ze}from"#entry";var B=[`data-pane`],V={class:`plan-cell-head`},H={class:`plan-cell-title`},Be=[`title`],Ve={key:0,class:`plan-cell-detail`},U={key:1,class:`plan-cell-line`},W={key:2,class:`plan-cell-choices`},He=[`disabled`,`onClick`],G={class:`n`},Ue={class:`l`},We=Object.assign(d({__name:`PlanCell`,props:{pane:{},focused:{type:Boolean},fresh:{type:Boolean}},emits:[`open`],setup(t,{emit:n}){let i=t,u=n,d=a(!1),_=e(()=>i.pane.status===`blocked`&&i.pane.prompt?.options?.length?i.pane.prompt:null),ee=e(()=>R(_.value,3)),S=e(()=>N(i.pane)),C=e(()=>S.value&&F(S.value)||(_.value?_.value.question:i.pane.preview)||(i.pane.agent?``:A(i.pane.cwd)));async function w(e,t){d.value=!0,await ne(i.pane.id,e,t)||(d.value=!1)}return v(()=>i.pane.prompt,()=>{d.value=!1}),(e,n)=>{let i=L,a=Re,v=Pe,S=I;return s(),c(`div`,{class:m([`plan-cell`,[(`statusKey`in e?e.statusKey:r(E))(t.pane),{stale:(`paneStale`in e?e.paneStale:r(O))(t.pane),fresh:t.fresh}]]),role:`button`,tabindex:`0`,"data-pane":t.pane.id,onClick:n[0]||=e=>u(`open`),onKeydown:n[1]||=b(x(e=>u(`open`),[`self`]),[`enter`])},[f(v,{items:()=>(`paneItems`in e?e.paneItems:r(T))(t.pane),title:(`paneTitle`in e?e.paneTitle:r(P))(t.pane),"manual-press":``},{default:y(()=>[g(`div`,V,[f(i,{agent:t.pane.agent},null,8,[`agent`]),g(`span`,H,h((`paneTitle`in e?e.paneTitle:r(P))(t.pane)),1),t.focused?(s(),c(`span`,{key:0,class:`plan-cell-focus`,title:(`t`in e?e.t:r(D))(`Active pane in Herdr`)},null,8,Be)):o(``,!0),f(a,{items:()=>(`paneItems`in e?e.paneItems:r(T))(t.pane),title:(`paneTitle`in e?e.paneTitle:r(P))(t.pane),size:`sm`,label:(`t`in e?e.t:r(D))(`Pane options`)},null,8,[`items`,`title`,`label`])])]),_:1},8,[`items`,`title`]),f(S,{pane:t.pane,model:``},null,8,[`pane`]),r(_)?.detail?(s(),c(`code`,Ve,h((`detailLine`in e?e.detailLine:r(z))(r(_).detail)),1)):o(``,!0),r(C)?(s(),c(`p`,U,h(r(C)),1)):o(``,!0),r(ee).length?(s(),c(`div`,W,[(s(!0),c(p,null,l(r(ee),n=>(s(),c(`button`,{key:n.i,type:`button`,disabled:r(d)||!(`eventsOpen`in e?e.eventsOpen:r(ge))||(`offlineView`in e?e.offlineView:r(k))||(`paneStale`in e?e.paneStale:r(O))(t.pane),onClick:x(e=>w(n.i,n.label),[`stop`])},[g(`span`,G,h(n.i+1),1),g(`span`,Ue,h(n.label),1)],8,He))),128))])):o(``,!0)],42,B)}}}),{__name:`PlanCell`});function Ge(e,t,n,r,i){return e?`open`:t&&n&&(i||r)?`unavailable`:`loading`}var Ke={id:`tabview`,class:`view`},qe={class:`top bar tab-top`},Je={class:`tab-head`},Ye={class:`tab-title`},Xe={class:`tab-meta`},Ze={class:`tab-meta-tab`},Qe={key:0},$e=[`title`],et={class:`machine-inline-name`},tt={key:2,class:`chat-empty`},nt={key:3,class:`chat-empty`},rt=[`onPointerdown`],it=[`aria-orientation`,`aria-label`,`aria-valuenow`,`onPointerdown`,`onKeydown`],at={key:5,class:`plan-wrap`},ot=[`onPointerdown`],st=[`aria-orientation`,`aria-label`,`onPointerdown`],ct=Object.assign(d({__name:`TabView`,props:{tabId:{}},setup(d){let b=d,x=fe(),ne=pe();u(()=>{M.value||(ke.value=null)});let E=e(()=>ce(b.tabId)),ge=e(()=>E.value&&Se(ue(E.value.tab.workspace).length).headerAdd),O=e(()=>E.value?j.value.workspaces.find(e=>e.id===E.value.tab.workspace):void 0),A=e(()=>new Map((E.value?.panes||[]).map(e=>[e.id,e]))),N=a(null),F=e(()=>N.value||E.value?.layout||null),I=e(()=>F.value?xe(F.value).filter(e=>A.value.has(e.pane)):[]),L=e(()=>!k.value&&oe(b.tabId)),R=e(()=>L.value&&F.value?Ce(F.value):[]),z=e(()=>he.value&&E.value?ve(E.value.tab.machine):void 0),B=(e,t)=>e||String(t),V=a(!!E.value),H=a(!1),Be=setTimeout(()=>{H.value=!0},4e3);n(()=>clearTimeout(Be)),v(E,e=>{e&&(V.value=!0)});let Ve=e(()=>Ge(!!E.value,j.value.ok,j.value.ready!==!1,H.value,V.value)===`unavailable`&&!se(b.tabId)),U=a(null),W=e(()=>String(x.query.pane||``));v([E,W],([e,t],n)=>{if(!e)return;let r=e.panes.map(e=>e.id);if(t&&r.includes(t)&&(t!==n?.[1]||!n?.[0]?.panes.some(e=>e.id===t))){U.value=t;return}U.value&&r.includes(U.value)||(U.value=r.includes(t)?t:e.layout.focused&&r.includes(e.layout.focused)?e.layout.focused:r[0]||null)},{immediate:!0});function He(e){U.value!==e&&(U.value=e,ne.replace({query:{pane:e}}))}function G(e){let t=M.value&&E.value&&U.value?Ee(e):0;if(!t)return;e.preventDefault(),e.stopPropagation();let n=be(E.value.layout,U.value,t);n&&He(n)}u(()=>window.addEventListener(`keydown`,G,!0)),n(()=>window.removeEventListener(`keydown`,G,!0));let Ue=()=>[...te(b.tabId),...w()],ct=e(()=>E.value?`${D(`Tab`)} ${B(E.value.tab.label,E.value.tab.number)}`:void 0),K=a(null),q=a(null),lt={center:`Swap`,left:`Place left`,right:`Place right`,up:`Place above`,down:`Place below`};function ut(e,t){let n=K.value?.getBoundingClientRect();return n&&n.width>0&&n.height>0?{px:(e-n.left)/n.width*100,py:(t-n.top)/n.height*100}:null}function dt(e,t,n){L.value&&(q.value={pane:e,pointer:t.pointerId,touch:t.pointerType!==`mouse`,x0:t.clientX,y0:t.clientY,x:t.clientX,y:t.clientY,started:n,over:null,side:null},window.addEventListener(`pointermove`,ft),window.addEventListener(`pointerup`,pt),window.addEventListener(`pointercancel`,mt),window.addEventListener(`keydown`,ht,!0))}function ft(e){let t=q.value;if(!t||e.pointerId!==t.pointer||(t.x=e.clientX,t.y=e.clientY,!t.started&&Math.hypot(t.x-t.x0,t.y-t.y0)>5&&(t.started=!0),!t.started))return;e.preventDefault();let n=ut(t.x,t.y),r=n&&I.value.find(e=>e.pane!==t.pane&&n.px>=e.left&&n.px<=e.left+e.width&&n.py>=e.top&&n.py<=e.top+e.height),i=r&&n?Te(r,n.px,n.py):null,a=r&&i&&E.value&&we(E.value.layout,t.pane,r.pane,i);((a?r.pane:null)!==t.over||(a?i:null)!==t.side)&&(t.over=a?r.pane:null,t.side=a?i:null)}function J(){q.value=null,window.removeEventListener(`pointermove`,ft),window.removeEventListener(`pointerup`,pt),window.removeEventListener(`pointercancel`,mt),window.removeEventListener(`keydown`,ht,!0)}function pt(e){let t=q.value;if(!t||e.pointerId!==t.pointer)return;let n=A.value.get(t.pane);if(t.touch&&X.suppressClick(),J(),t.touch&&bt&&Math.hypot(t.x-t.x0,t.y-t.y0)<=5)return xt(t.pane);t.started&&n&&t.over&&t.side&&le(n,t.over,t.side)}function mt(e){q.value&&e.pointerId===q.value.pointer&&(q.value.touch&&X.suppressClick(),J())}function ht(e){e.key===`Escape`&&(e.preventDefault(),J())}n(()=>{J(),$()});let Y=e(()=>{let e=q.value,t=e?.started&&e.over&&e.side?I.value.find(t=>t.pane===e.over):null;if(!t||!e?.side)return null;let{left:n,top:r,width:i,height:a}=t,o={left:{width:i/2},right:{left:n+i/2,width:i/2},up:{height:a/2},down:{top:r+a/2,height:a/2},center:{}}[e.side];return{side:e.side,label:D(lt[e.side]),style:Object.fromEntries(Object.entries({left:n,top:r,width:i,height:a,...o}).map(([e,t])=>[e,`${t}%`]))}}),gt=e(()=>{let e=q.value,t=e?.started?A.value.get(e.pane):null;if(!t||!e)return null;let n=Math.max(4,Math.min(e.touch?e.x-20:e.x+12,window.innerWidth-250)),r=Math.max(4,e.touch?e.y-56:e.y+14);return{title:P(t),style:{transform:`translate(${n}px, ${r}px)`}}});function _t(e,t){t.button===0&&t.target?.closest?.(`.cell-grip`)&&(t.preventDefault(),dt(e,t,!1))}let vt=null,yt=``,bt=!1;function xt(e){let t=A.value.get(e);t&&(_e(),de(T(t),P(t)))}let X=Le({onPress:()=>{if(vt){if(!L.value)return bt?xt(yt):void 0;_e(),dt(yt,vt,!0)}}});function St(e,t){vt=t,yt=e,bt=!!t.target?.closest?.(`.plan-cell-head`)&&!Fe(t.target),X.down(t)}function Ct(e){X.move(e)}let Z=null,Q=a(null);function wt(e,t){if(t.button!==0||!E.value)return;t.preventDefault(),t.stopPropagation();let n=t.currentTarget;n.setPointerCapture?.(t.pointerId),Z={d:e,pointer:t.pointerId,ratio:e.ratio,el:n},Q.value=e.path,n.addEventListener(`pointermove`,Tt),n.addEventListener(`pointerup`,Et),n.addEventListener(`pointercancel`,$)}function Tt(e){let t=Z,n=ut(e.clientX,e.clientY);t&&e.pointerId===t.pointer&&n&&E.value&&(t.ratio=De(E.value.layout,t.d,t.d.direction===`right`?n.px:n.py),N.value=je(E.value.layout,t.d.path,t.ratio))}function Et(e){let t=Z;t&&e.pointerId===t.pointer&&($(),Math.abs(t.ratio-t.d.ratio)>=.005&&C(b.tabId,t.d.path,t.ratio))}function $(){let e=Z;Z=null,Q.value=null,N.value=null,e&&(e.el.removeEventListener(`pointermove`,Tt),e.el.removeEventListener(`pointerup`,Et),e.el.removeEventListener(`pointercancel`,$))}function Dt(e,t){let n={ArrowLeft:-1,ArrowUp:-1,ArrowRight:1,ArrowDown:1}[t.key];if(!n||!E.value||e.direction===`right`!=(t.key===`ArrowLeft`||t.key===`ArrowRight`))return;t.preventDefault();let r=De(E.value.layout,e,e.start+e.size*(e.ratio+n*.05));r!==e.ratio&&C(b.tabId,e.path,r)}let Ot=e=>e.direction===`right`?{left:`${e.at}%`,top:`${e.from}%`,height:`${e.span}%`}:{top:`${e.at}%`,left:`${e.from}%`,width:`${e.span}%`};function kt(e){X.swallowClick()||(_e(),me(S(e)))}return(e,n)=>{let a=Ne,u=ie,v=re,b=ze,x=Re,S=Pe,C=Me,w=Ie,te=We;return s(),c(`section`,Ke,[r(E)?(s(),i(a,{key:0,workspace:r(E).tab.workspace,current:d.tabId},null,8,[`workspace`,`current`])):o(``,!0),f(S,{items:Ue,title:r(ct),disabled:!r(E)},{default:y(()=>[g(`header`,qe,[f(u,{icon:`i-lucide-chevron-left`,color:`neutral`,variant:`ghost`,size:`lg`,class:`icon-btn back tab-back`,"aria-label":(`t`in e?e.t:r(D))(`Back`),to:`/`},null,8,[`aria-label`]),g(`div`,Je,[g(`div`,Ye,[r(O)?.worktree?(s(),i(v,{key:0,name:`i-lucide-git-branch`,class:`tab-title-branch`})):o(``,!0),t(h(r(O)?.label||`—`),1)]),g(`div`,Xe,[g(`span`,Ze,h((`t`in e?e.t:r(D))(`Tab`))+` `+h(r(E)?B(r(E).tab.label,r(E).tab.number):``),1),r(E)?(s(),c(`span`,Qe,h(`${r(E).panes.length} pane${r(E).panes.length>1?`s`:``}`),1)):o(``,!0),r(E)?.layout.zoomed?(s(),c(`span`,{key:1,class:`tab-meta-zoom`,title:(`t`in e?e.t:r(D))(`A pane is zoomed in Herdr`)},`zoom`,8,$e)):o(``,!0),r(z)?(s(),c(`span`,{key:2,class:m([`tab-meta-machine`,r(z).status])},[f(v,{name:r(z).local?`i-lucide-server`:`i-lucide-laptop`},null,8,[`name`]),g(`span`,et,h((`machineName`in e?e.machineName:r(ye))(r(z).key)),1),r(z).local?(s(),i(b,{key:0})):o(``,!0)],2)):o(``,!0)])]),r(ge)&&r(E)?(s(),i(u,{key:0,icon:`i-lucide-plus`,color:`neutral`,variant:`ghost`,size:`lg`,class:`icon-btn`,"aria-label":(`t`in e?e.t:r(D))(`New tab`),title:(`t`in e?e.t:r(D))(`New tab`),disabled:`offlineView`in e?e.offlineView:r(k),onClick:n[0]||=t=>(`newTab`in e?e.newTab:r(ae))(r(E).tab.workspace)},null,8,[`aria-label`,`title`,`disabled`])):o(``,!0),r(E)?(s(),i(x,{key:1,items:Ue,size:`lg`,title:r(ct),label:(`t`in e?e.t:r(D))(`Tab options`)},null,8,[`title`,`label`])):o(``,!0)])]),_:1},8,[`title`,`disabled`]),!(`desk`in e?e.desk:r(M))&&((`netDown`in e?e.netDown:r(Oe))||(`offlineView`in e?e.offlineView:r(k)))?(s(),i(C,{key:1,label:(`offlineView`in e?e.offlineView:r(k))?(`t`in e?e.t:r(D))(`Last known state`):void 0,at:`cachedAt`in e?e.cachedAt:r(Ae)},null,8,[`label`,`at`])):o(``,!0),r(Ve)?(s(),c(`div`,tt,[f(v,{name:`i-lucide-layout-panel-left`,class:`chat-empty-icon`}),g(`p`,null,h((`t`in e?e.t:r(D))(`This tab is unavailable.`)),1),f(u,{color:`neutral`,variant:`outline`,to:`/`},{default:y(()=>[t(h((`t`in e?e.t:r(D))(`Back`)),1)]),_:1})])):r(E)?r(E)&&(`desk`in e?e.desk:r(M))?(s(),c(`div`,{key:4,ref_key:`area`,ref:K,class:m([`split`,{dragging:r(q)?.started,resizing:r(Q)!=null}])},[(s(!0),c(p,null,l(r(I),e=>(s(),c(`div`,{key:e.pane,class:m([`split-box`,{"drag-src":r(q)?.started&&r(q).pane===e.pane}]),style:_({left:`${e.left}%`,top:`${e.top}%`,width:`${e.width}%`,height:`${e.height}%`}),onPointerdown:t=>_t(e.pane,t)},[f(w,{cell:``,grip:r(L),"pane-id":e.pane,active:e.pane===r(U),onActivate:t=>He(e.pane)},null,8,[`grip`,`pane-id`,`active`,`onActivate`])],46,rt))),128)),r(Y)?(s(),c(`div`,{key:0,class:m([`drop-zone`,r(Y).side]),style:_(r(Y).style)},[g(`span`,null,h(r(Y).label),1)],6)):o(``,!0),(s(!0),c(p,null,l(r(R),t=>(s(),c(`div`,{key:t.path,class:m([`divider`,[t.direction,{on:r(Q)===t.path}]]),style:_(Ot(t)),role:`separator`,tabindex:`0`,"aria-orientation":t.direction===`right`?`vertical`:`horizontal`,"aria-label":(`t`in e?e.t:r(D))(`Resize`),"aria-valuenow":Math.round(t.ratio*100),"aria-valuemin":`5`,"aria-valuemax":`95`,onPointerdown:e=>wt(t,e),onKeydown:e=>Dt(t,e)},null,46,it))),128))],2)):r(E)?(s(),c(`div`,at,[g(`div`,{ref_key:`area`,ref:K,class:m([`plan`,{dragging:r(q)?.started,resizing:r(Q)!=null,movable:r(L)}])},[(s(!0),c(p,null,l(r(I),e=>(s(),c(`div`,{key:e.pane,class:m([`plan-box`,{"drag-src":r(q)?.started&&r(q).pane===e.pane}]),style:_({left:`${e.left}%`,top:`${e.top}%`,width:`${e.width}%`,height:`${e.height}%`}),onPointerdown:t=>St(e.pane,t),onPointermove:Ct,onPointerup:n[1]||=(...e)=>r(X).cancel&&r(X).cancel(...e),onPointercancel:n[2]||=(...e)=>r(X).cancel&&r(X).cancel(...e)},[f(te,{pane:r(A).get(e.pane),focused:r(E).layout.focused===e.pane&&r(I).length>1,fresh:r(W)===e.pane,onOpen:t=>kt(e.pane)},null,8,[`pane`,`focused`,`fresh`,`onOpen`])],46,ot))),128)),r(Y)?(s(),c(`div`,{key:0,class:m([`drop-zone`,r(Y).side]),style:_(r(Y).style)},[g(`span`,null,h(r(Y).label),1)],6)):o(``,!0),(s(!0),c(p,null,l(r(R),t=>(s(),c(`div`,{key:t.path,class:m([`divider`,[t.direction,{on:r(Q)===t.path}]]),style:_(Ot(t)),role:`separator`,"aria-orientation":t.direction===`right`?`vertical`:`horizontal`,"aria-label":(`t`in e?e.t:r(D))(`Resize`),onPointerdown:e=>wt(t,e)},null,46,st))),128))],2)])):o(``,!0):(s(),c(`div`,nt,h((`t`in e?e.t:r(D))(`Loading…`)),1)),(s(),i(ee,{to:`body`},[r(gt)?(s(),c(`div`,{key:0,class:`drag-ghost`,style:_(r(gt).style)},h(r(gt).title),5)):o(``,!0)]))])}}}),{__name:`TabView`}),K=d({__name:`[tab]`,setup(t){let n=fe(),a=e(()=>String(n.params.tab||``));return(e,t)=>{let n=ct;return s(),i(n,{key:r(a),"tab-id":r(a)},null,8,[`tab-id`])}}});export{K as default};
|
package/.output/public/sw.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
var sw = self;
|
|
16
16
|
var CACHE = "wherdr-v1";
|
|
17
17
|
var NETWORK_WAIT_MS = 3e3;
|
|
18
|
-
var PRECACHE = ["/", ...[{"revision":"e6a852ba6e2a724d2255af526cb04083","url":"manifest.webmanifest"},{"revision":"b1a14fab8c06784649bf26c636747a86","url":"manifest-en.webmanifest"},{"revision":null,"url":"_nuxt/yzABg5xl.js"},{"revision":null,"url":"_nuxt/wherdr-symbols.C1LsPKmg.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-powerline.B_kAMxXr.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-octicons.Hl4VEx8m.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-material-4.CO_PudDR.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-material-3.8xz7iX-Y.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-material-2.C_flbBWO.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-material-1.BdvqkCqW.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-extension.Dai_ky39.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-devicons.ZMSFX1sW.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-codicons.CtEsfSAf.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-awesome.DQ3_iAfa.woff2"},{"revision":null,"url":"_nuxt/jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.woff2"},{"revision":null,"url":"_nuxt/jetbrains-mono-latin-wght-normal.B9CIFXIH.woff2"},{"revision":null,"url":"_nuxt/jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.woff2"},{"revision":null,"url":"_nuxt/jetbrains-mono-greek-wght-normal.Bw9x6K1M.woff2"},{"revision":null,"url":"_nuxt/jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2"},{"revision":null,"url":"_nuxt/inter-vietnamese-wght-normal.CBcvBZtf.woff2"},{"revision":null,"url":"_nuxt/inter-latin-wght-normal.Dx4kXJAl.woff2"},{"revision":null,"url":"_nuxt/inter-latin-ext-wght-normal.DO1Apj_S.woff2"},{"revision":null,"url":"_nuxt/inter-greek-wght-normal.CkhJZR-_.woff2"},{"revision":null,"url":"_nuxt/inter-greek-ext-wght-normal.DlzME5K_.woff2"},{"revision":null,"url":"_nuxt/inter-cyrillic-wght-normal.DqGufNeO.woff2"},{"revision":null,"url":"_nuxt/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2"},{"revision":null,"url":"_nuxt/hePW80VL.js"},{"revision":null,"url":"_nuxt/error-500.Bwd7zAaE.css"},{"revision":null,"url":"_nuxt/error-404.Bb87HomL.css"},{"revision":null,"url":"_nuxt/entry.
|
|
18
|
+
var PRECACHE = ["/", ...[{"revision":"e6a852ba6e2a724d2255af526cb04083","url":"manifest.webmanifest"},{"revision":"b1a14fab8c06784649bf26c636747a86","url":"manifest-en.webmanifest"},{"revision":null,"url":"_nuxt/yzABg5xl.js"},{"revision":null,"url":"_nuxt/xYX85SPI.js"},{"revision":null,"url":"_nuxt/wherdr-symbols.C1LsPKmg.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-powerline.B_kAMxXr.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-octicons.Hl4VEx8m.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-material-4.CO_PudDR.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-material-3.8xz7iX-Y.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-material-2.C_flbBWO.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-material-1.BdvqkCqW.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-extension.Dai_ky39.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-devicons.ZMSFX1sW.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-codicons.CtEsfSAf.woff2"},{"revision":null,"url":"_nuxt/wherdr-nerd-awesome.DQ3_iAfa.woff2"},{"revision":null,"url":"_nuxt/jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.woff2"},{"revision":null,"url":"_nuxt/jetbrains-mono-latin-wght-normal.B9CIFXIH.woff2"},{"revision":null,"url":"_nuxt/jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.woff2"},{"revision":null,"url":"_nuxt/jetbrains-mono-greek-wght-normal.Bw9x6K1M.woff2"},{"revision":null,"url":"_nuxt/jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2"},{"revision":null,"url":"_nuxt/inter-vietnamese-wght-normal.CBcvBZtf.woff2"},{"revision":null,"url":"_nuxt/inter-latin-wght-normal.Dx4kXJAl.woff2"},{"revision":null,"url":"_nuxt/inter-latin-ext-wght-normal.DO1Apj_S.woff2"},{"revision":null,"url":"_nuxt/inter-greek-wght-normal.CkhJZR-_.woff2"},{"revision":null,"url":"_nuxt/inter-greek-ext-wght-normal.DlzME5K_.woff2"},{"revision":null,"url":"_nuxt/inter-cyrillic-wght-normal.DqGufNeO.woff2"},{"revision":null,"url":"_nuxt/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2"},{"revision":null,"url":"_nuxt/hePW80VL.js"},{"revision":null,"url":"_nuxt/error-500.Bwd7zAaE.css"},{"revision":null,"url":"_nuxt/error-404.Bb87HomL.css"},{"revision":null,"url":"_nuxt/entry.CGWKmYU3.css"},{"revision":null,"url":"_nuxt/dPxB2L94.js"},{"revision":null,"url":"_nuxt/archivo-vietnamese-wght-normal.XAtsl5Q_.woff2"},{"revision":null,"url":"_nuxt/archivo-latin-wght-normal.E0tuGl4L.woff2"},{"revision":null,"url":"_nuxt/archivo-latin-ext-wght-normal.C4zznr8T.woff2"},{"revision":null,"url":"_nuxt/VpjCgSXu.js"},{"revision":null,"url":"_nuxt/SiL1FJ5s.js"},{"revision":null,"url":"_nuxt/DcJi16XA.js"},{"revision":null,"url":"_nuxt/DaaJIRB3.js"},{"revision":null,"url":"_nuxt/DT8qZ0Wv.js"},{"revision":null,"url":"_nuxt/DAg9fiVh.js"},{"revision":null,"url":"_nuxt/Cr3SrGky.js"},{"revision":null,"url":"_nuxt/CkbmecwS.js"},{"revision":null,"url":"_nuxt/Ci8N4mWR.js"},{"revision":null,"url":"_nuxt/CWwyK2XK.js"},{"revision":null,"url":"_nuxt/CP8o925U.js"},{"revision":null,"url":"_nuxt/CKhgznq4.js"},{"revision":null,"url":"_nuxt/BkOxQzbS.js"},{"revision":null,"url":"_nuxt/BgPDnf2S.js"},{"revision":null,"url":"_nuxt/Bd17z0YL.js"},{"revision":null,"url":"_nuxt/BX5PM2JQ.js"},{"revision":null,"url":"_nuxt/BSy6OCIY.js"},{"revision":null,"url":"_nuxt/BBw_0a4M.js"},{"revision":null,"url":"_nuxt/B4Yk2tB1.js"},{"revision":null,"url":"_nuxt/AgentView.DzFWBd2A.css"},{"revision":"f0fc32f393fea2b75a91e3f10a5be779","url":"_nuxt/builds/latest.json"},{"revision":null,"url":"_nuxt/builds/meta/c735b6c0-1bd0-47d7-a208-d310f0a06287.json"}].map((e) => "/" + (typeof e === "string" ? e : e.url).replace(/^\//, ""))];
|
|
19
19
|
sw.addEventListener("install", (e) => {
|
|
20
20
|
e.waitUntil((async () => {
|
|
21
21
|
const c = await caches.open(CACHE);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function posixResolve(base, p) {
|
|
2
|
+
const out = [];
|
|
3
|
+
for (const seg of (p.startsWith("/") ? p : `${base}/${p}`).split("/")) {
|
|
4
|
+
if (seg === "" || seg === ".") continue;
|
|
5
|
+
if (seg === "..") out.pop();
|
|
6
|
+
else out.push(seg);
|
|
7
|
+
}
|
|
8
|
+
return "/" + out.join("/");
|
|
9
|
+
}
|
|
10
|
+
const POSITION = /:\d+(?::\d+)?$/;
|
|
11
|
+
const stripPosition = (s) => s.replace(POSITION, "");
|
|
12
|
+
function resolveAgentPath(written, cwd, home) {
|
|
13
|
+
const p = stripPosition(String(written || "").trim());
|
|
14
|
+
if (!p || !home.startsWith("/") || /[\0\n\r]/.test(p)) return null;
|
|
15
|
+
const root = posixResolve("/", home);
|
|
16
|
+
const inside = (r2) => r2 === root || r2.startsWith(root === "/" ? "/" : root + "/");
|
|
17
|
+
const base = cwd && cwd.startsWith("/") && inside(posixResolve("/", cwd)) ? posixResolve("/", cwd) : root;
|
|
18
|
+
const r = posixResolve(base, p.replace(/^~(?=$|\/)/, root));
|
|
19
|
+
return inside(r) ? r : null;
|
|
20
|
+
}
|
|
21
|
+
const RUNNABLE = /\.(app|command|tool|terminal|pkg|mpkg|workflow|action|scpt|scptd|applescript|jar|sh|bash|zsh|csh|fish|py|rb|pl|webloc|inetloc|fileloc|prefpane|qlgenerator|saver|kext|osax|dmg)\/?$/i;
|
|
22
|
+
const runnablePath = (p) => RUNNABLE.test(p);
|
|
23
|
+
|
|
24
|
+
export { runnablePath as a, posixResolve as p, resolveAgentPath as r };
|
|
25
|
+
//# sourceMappingURL=filePaths.mjs.map
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { r as resolveAgentPath, p as posixResolve } from './filePaths.mjs';
|
|
4
|
+
import { g as gitToplevel } from './changes.mjs';
|
|
5
|
+
import { H as HerdrError } from '../nitro/nitro.mjs';
|
|
6
|
+
|
|
7
|
+
const MAX_ENTRIES = 2e3;
|
|
8
|
+
const TEXT_BYTES = 256 * 1024;
|
|
9
|
+
const IMAGE_BYTES = 2 * 1024 * 1024;
|
|
10
|
+
const DOWNLOAD_BYTES = 50 * 1024 * 1024;
|
|
11
|
+
const IMAGE_TYPES = {
|
|
12
|
+
png: "image/png",
|
|
13
|
+
jpg: "image/jpeg",
|
|
14
|
+
jpeg: "image/jpeg",
|
|
15
|
+
gif: "image/gif",
|
|
16
|
+
webp: "image/webp",
|
|
17
|
+
avif: "image/avif",
|
|
18
|
+
bmp: "image/bmp",
|
|
19
|
+
ico: "image/x-icon",
|
|
20
|
+
svg: "image/svg+xml"
|
|
21
|
+
};
|
|
22
|
+
const RESOLVE = `root=$(cd "$1" 2>/dev/null && pwd -P) || { echo "folder not found" >&2; exit 3; }
|
|
23
|
+
under() { case "$1/" in "\${root%/}/"*) return 0 ;; esac; return 1; }`;
|
|
24
|
+
const LIST_SCRIPT = `${RESOLVE}
|
|
25
|
+
if [ -n "$4" ]; then
|
|
26
|
+
dir=$(cd "$4" 2>/dev/null && pwd -P) && under "$dir" || dir=$root
|
|
27
|
+
else
|
|
28
|
+
dir=$(cd "$root" && cd -- "./$2" 2>/dev/null && pwd -P) || { echo "not found" >&2; exit 4; }
|
|
29
|
+
under "$dir" || { echo "outside" >&2; exit 5; }
|
|
30
|
+
fi
|
|
31
|
+
cd "$dir" || exit 4
|
|
32
|
+
[ -r . ] || { echo "permission denied" >&2; exit 7; }
|
|
33
|
+
printf '%s\\0%s\\0' "$root" "$dir"
|
|
34
|
+
max=$3; n=0
|
|
35
|
+
set --
|
|
36
|
+
for pass in d o; do
|
|
37
|
+
for f in * .[!.]* ..?*; do
|
|
38
|
+
[ -e "$f" ] || [ -L "$f" ] || continue
|
|
39
|
+
if [ -d "$f" ]; then t=d; elif [ -f "$f" ]; then t=f; else t=o; fi
|
|
40
|
+
if [ "$pass" = d ]; then [ "$t" = d ] || continue; else [ "$t" != d ] || continue; fi
|
|
41
|
+
n=$((n + 1)); [ "$n" -gt "$max" ] && { printf '+\\0'; break 2; }
|
|
42
|
+
if [ -L "$f" ]; then l=l; else l=' '; [ "$t" = f ] && set -- "$@" "$f"; fi
|
|
43
|
+
printf '%s%s %s\\0' "$t" "$l" "$f"
|
|
44
|
+
done
|
|
45
|
+
done
|
|
46
|
+
printf '=\\0'
|
|
47
|
+
[ "$#" -gt 0 ] || exit 0
|
|
48
|
+
if stat -f %z / >/dev/null 2>&1; then stat -f %z -- "$@"; else stat -c %s -- "$@"; fi 2>/dev/null
|
|
49
|
+
exit 0`;
|
|
50
|
+
const READ_SCRIPT = `${RESOLVE}
|
|
51
|
+
case "$2" in */*) d=\${2%/*} ;; *) d=. ;; esac
|
|
52
|
+
b=\${2##*/}
|
|
53
|
+
dir=$(cd "$root" && cd -- "./$d" 2>/dev/null && pwd -P) || { echo "not found" >&2; exit 4; }
|
|
54
|
+
f="$dir/$b"; i=0
|
|
55
|
+
while [ -L "$f" ]; do
|
|
56
|
+
i=$((i + 1)); [ "$i" -gt 40 ] && { echo "not found" >&2; exit 4; }
|
|
57
|
+
t=$(readlink -- "$f") || exit 4
|
|
58
|
+
case "$t" in /*) f=$t ;; *) f="\${f%/*}/$t" ;; esac
|
|
59
|
+
p=\${f%/*}
|
|
60
|
+
dir=$(cd -P -- "\${p:-/}" 2>/dev/null && pwd -P) || { echo "not found" >&2; exit 4; }
|
|
61
|
+
f="\${dir%/}/\${f##*/}"
|
|
62
|
+
done
|
|
63
|
+
[ -e "$f" ] || { echo "not found" >&2; exit 4; }
|
|
64
|
+
under "$f" || { echo "outside" >&2; exit 5; }
|
|
65
|
+
[ -f "$f" ] || { echo "not a file" >&2; exit 6; }
|
|
66
|
+
[ -r "$f" ] || { echo "permission denied" >&2; exit 7; }
|
|
67
|
+
s=$(wc -c < "$f") || exit 4
|
|
68
|
+
echo $s
|
|
69
|
+
[ -n "$4" ] && [ $(($s)) -ge "$3" ] && exit 0
|
|
70
|
+
head -c "$3" < "$f"`;
|
|
71
|
+
function executor(m, { timeoutMs = 15e3, maxBytes = IMAGE_BYTES } = {}) {
|
|
72
|
+
const remote = m.exec;
|
|
73
|
+
if (remote) return (script, args) => remote(script, args, { timeoutMs });
|
|
74
|
+
return (script, args) => new Promise((resolve) => {
|
|
75
|
+
execFile("sh", ["-c", script, "sh", ...args], { timeout: timeoutMs, encoding: "buffer", maxBuffer: maxBytes + 64 * 1024 }, (err, out, stderr) => {
|
|
76
|
+
const e = err;
|
|
77
|
+
const code = !e ? 0 : e.killed ? 124 : typeof e.code === "number" ? e.code : 1;
|
|
78
|
+
resolve({ code, stdout: out, stderr: String(stderr || "") });
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
async function run(m, script, args, opts) {
|
|
83
|
+
const r = await executor(m, opts)(script, args);
|
|
84
|
+
if (r.code === 0) return r.stdout;
|
|
85
|
+
if (r.code === 3) throw new HerdrError("bad_cwd", "This agent\u2019s folder is unknown");
|
|
86
|
+
if (r.code === 4) throw new HerdrError("not_found", "File not found");
|
|
87
|
+
if (r.code === 5) throw new HerdrError("outside", "Outside the project folder");
|
|
88
|
+
if (r.code === 6) throw new HerdrError("not_file", "Not a file");
|
|
89
|
+
if (r.code === 7) throw new HerdrError("denied", "Permission denied");
|
|
90
|
+
if (r.code === 124) throw new HerdrError("timeout", "The folder took too long to read");
|
|
91
|
+
if (r.code === 255 || r.code === null) throw new HerdrError("unreachable", "Machine unreachable");
|
|
92
|
+
throw new HerdrError("remote", r.stderr.trim().split("\n").pop() || `code ${r.code}`);
|
|
93
|
+
}
|
|
94
|
+
function cleanRelative(p) {
|
|
95
|
+
const raw = String(p != null ? p : "").replace(/\\/g, "/");
|
|
96
|
+
if (raw.startsWith("/") || raw.includes("\0")) throw new HerdrError("outside", "Outside the project folder");
|
|
97
|
+
const n = path.posix.normalize(raw || ".").replace(/\/+$/, "");
|
|
98
|
+
if (n === ".." || n.startsWith("../")) throw new HerdrError("outside", "Outside the project folder");
|
|
99
|
+
return n === "." ? "" : n;
|
|
100
|
+
}
|
|
101
|
+
function parseListing(raw) {
|
|
102
|
+
const parts = raw.toString("utf8").split("\0");
|
|
103
|
+
const root = parts[0] || "";
|
|
104
|
+
const dir = parts[1] || "";
|
|
105
|
+
const entries = [];
|
|
106
|
+
const plain = [];
|
|
107
|
+
let truncated = false;
|
|
108
|
+
let i = 2;
|
|
109
|
+
for (; i < parts.length; i++) {
|
|
110
|
+
const p = parts[i];
|
|
111
|
+
if (p === "=") break;
|
|
112
|
+
if (p === "+") {
|
|
113
|
+
truncated = true;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const m = /^([dfo])([l ]) (.+)$/s.exec(p);
|
|
117
|
+
if (!m) continue;
|
|
118
|
+
const e = { name: m[3], kind: m[1] === "d" ? "dir" : m[1] === "f" ? "file" : "other", size: null, link: m[2] === "l" };
|
|
119
|
+
entries.push(e);
|
|
120
|
+
if (e.kind === "file" && !e.link) plain.push(e);
|
|
121
|
+
}
|
|
122
|
+
const sizes = parts.slice(i + 1).join("").split("\n").filter((l) => /^\d+$/.test(l)).map(Number);
|
|
123
|
+
if (sizes.length === plain.length) plain.forEach((e, k) => {
|
|
124
|
+
e.size = sizes[k];
|
|
125
|
+
});
|
|
126
|
+
entries.sort((a, b) => Number(b.kind === "dir") - Number(a.kind === "dir") || a.name.localeCompare(b.name, void 0, { numeric: true, sensitivity: "base" }));
|
|
127
|
+
return { root, dir, entries, truncated };
|
|
128
|
+
}
|
|
129
|
+
async function rootOf(m, cwd) {
|
|
130
|
+
return await gitToplevel(m, cwd) || cwd;
|
|
131
|
+
}
|
|
132
|
+
async function listFiles(m, cwd, rel, opts = {}) {
|
|
133
|
+
var _a, _b;
|
|
134
|
+
const root = await rootOf(m, cwd);
|
|
135
|
+
const args = rel === null ? [root, "", String((_a = opts.max) != null ? _a : MAX_ENTRIES), cwd] : [root, cleanRelative(rel), String((_b = opts.max) != null ? _b : MAX_ENTRIES)];
|
|
136
|
+
const out = parseListing(await run(m, LIST_SCRIPT, args));
|
|
137
|
+
const rp = path.posix.relative(out.root, out.dir);
|
|
138
|
+
return { root: out.root, path: rp.startsWith("..") ? "" : rp, entries: out.entries, truncated: out.truncated };
|
|
139
|
+
}
|
|
140
|
+
const isText = (b) => !b.subarray(0, 8192).includes(0);
|
|
141
|
+
function cutAt(b, max) {
|
|
142
|
+
const nl = b.lastIndexOf(10, max - 1);
|
|
143
|
+
if (nl >= 0) return nl + 1;
|
|
144
|
+
let i = max;
|
|
145
|
+
while (i > 0 && (b[i] & 192) === 128) i--;
|
|
146
|
+
return i;
|
|
147
|
+
}
|
|
148
|
+
function writtenTarget(m, cwd, written) {
|
|
149
|
+
const w = String(written != null ? written : "");
|
|
150
|
+
const abs = w.length > 1024 ? null : resolveAgentPath(w, cwd, m.home);
|
|
151
|
+
if (!abs) throw new HerdrError("outside_home", "Only files in your home folder can be shown");
|
|
152
|
+
const root = posixResolve("/", m.home);
|
|
153
|
+
const rel = path.posix.relative(root, abs);
|
|
154
|
+
if (!rel) throw new HerdrError("not_file", "Not a file");
|
|
155
|
+
return { root, rel, abs };
|
|
156
|
+
}
|
|
157
|
+
async function readHead(m, root, rel, max, opts) {
|
|
158
|
+
const out = await run(m, READ_SCRIPT, [root, rel, String(max), ...(opts == null ? void 0 : opts.whole) ? ["1"] : []], opts);
|
|
159
|
+
const nl = out.indexOf(10);
|
|
160
|
+
return { size: Number(out.subarray(0, nl).toString("utf8")) || 0, body: out.subarray(nl + 1) };
|
|
161
|
+
}
|
|
162
|
+
async function previewAt(m, root, rel, shown) {
|
|
163
|
+
const mime = IMAGE_TYPES[path.posix.extname(rel).slice(1).toLowerCase()];
|
|
164
|
+
const { size, body } = await readHead(m, root, rel, mime ? IMAGE_BYTES + 1 : TEXT_BYTES + 1);
|
|
165
|
+
if (mime) {
|
|
166
|
+
if (size > IMAGE_BYTES) return { path: shown, size, kind: "large", truncated: true };
|
|
167
|
+
return { path: shown, size, kind: "image", dataUrl: `data:${mime};base64,${body.toString("base64")}`, truncated: false };
|
|
168
|
+
}
|
|
169
|
+
if (!isText(body)) return { path: shown, size, kind: "binary", truncated: false };
|
|
170
|
+
const truncated = body.length > TEXT_BYTES;
|
|
171
|
+
const text = (truncated ? body.subarray(0, cutAt(body, TEXT_BYTES)) : body).toString("utf8");
|
|
172
|
+
return { path: shown, size, kind: "text", text, truncated };
|
|
173
|
+
}
|
|
174
|
+
async function readFilePreview(m, cwd, rel) {
|
|
175
|
+
const p = cleanRelative(rel);
|
|
176
|
+
if (!p) throw new HerdrError("not_file", "Not a file");
|
|
177
|
+
return previewAt(m, await rootOf(m, cwd), p, p);
|
|
178
|
+
}
|
|
179
|
+
async function readWrittenPreview(m, cwd, written) {
|
|
180
|
+
const t = writtenTarget(m, cwd, written);
|
|
181
|
+
return previewAt(m, t.root, t.rel, t.abs);
|
|
182
|
+
}
|
|
183
|
+
async function bytesAt(m, root, rel) {
|
|
184
|
+
const { size, body } = await readHead(m, root, rel, DOWNLOAD_BYTES + 1, { timeoutMs: 12e4, maxBytes: DOWNLOAD_BYTES + 1, whole: true });
|
|
185
|
+
if (size > DOWNLOAD_BYTES || body.length > DOWNLOAD_BYTES) throw new HerdrError("too_large", "File too large to download (50 MB max)");
|
|
186
|
+
return { name: path.posix.basename(rel), body };
|
|
187
|
+
}
|
|
188
|
+
async function readFileBytes(m, cwd, rel) {
|
|
189
|
+
const p = cleanRelative(rel);
|
|
190
|
+
if (!p) throw new HerdrError("not_file", "Not a file");
|
|
191
|
+
return bytesAt(m, await rootOf(m, cwd), p);
|
|
192
|
+
}
|
|
193
|
+
async function readWrittenBytes(m, cwd, written) {
|
|
194
|
+
const t = writtenTarget(m, cwd, written);
|
|
195
|
+
return bytesAt(m, t.root, t.rel);
|
|
196
|
+
}
|
|
197
|
+
function attachmentHeader(name) {
|
|
198
|
+
const ascii = name.replace(/[^\x20-\x7e]|["\\]/g, "_") || "download";
|
|
199
|
+
const utf8 = encodeURIComponent(name).replace(/['()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
200
|
+
return `attachment; filename="${ascii}"; filename*=UTF-8''${utf8}`;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export { readFileBytes as a, attachmentHeader as b, readWrittenPreview as c, readFilePreview as d, listFiles as l, readWrittenBytes as r };
|
|
204
|
+
//# sourceMappingURL=files.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
|
-
import {
|
|
4
|
+
import { aL as baseMachines, aM as DATA_DIR } from '../nitro/nitro.mjs';
|
|
5
5
|
|
|
6
6
|
function cleanMachineOrder(value, known) {
|
|
7
7
|
if (!Array.isArray(value)) return [];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import {
|
|
3
|
+
import { aW as HOST_LABEL, aM as DATA_DIR } from '../nitro/nitro.mjs';
|
|
4
4
|
|
|
5
5
|
const ONBOARDING_FILE = path.join(DATA_DIR, "onboarding.json");
|
|
6
6
|
function readOnboarding(file = ONBOARDING_FILE, host = HOST_LABEL) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "wherdr";
|
|
2
|
-
var version = "1.3.
|
|
2
|
+
var version = "1.3.3";
|
|
3
3
|
var license = "MIT";
|
|
4
4
|
var type = "module";
|
|
5
5
|
var description = "Unofficial mobile web client (PWA) to drive the coding agents running in Herdr";
|
|
@@ -24,7 +24,8 @@ var bin = {
|
|
|
24
24
|
var files = [
|
|
25
25
|
".output",
|
|
26
26
|
"!.output/**/*.map",
|
|
27
|
-
"bin"
|
|
27
|
+
"bin",
|
|
28
|
+
"skills/wherdr"
|
|
28
29
|
];
|
|
29
30
|
var engines = {
|
|
30
31
|
node: ">=22"
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
const PLUGIN_ID_RE = /^[A-Za-z0-9.:_-]{1,100}$/;
|
|
2
|
+
const ACTION_ID_RE = /^[A-Za-z0-9:_-]{1,100}$/;
|
|
3
|
+
const REMOTE_PROJECTS_SCRIPT = 'export HERDR_BIN_PATH="$1"; shift; bin="$1"; shift; exec "$bin" "$@"';
|
|
4
|
+
function actionContext(pane, workspaces = []) {
|
|
5
|
+
const context = { invocation_source: "wherdr" };
|
|
6
|
+
if (!pane) return context;
|
|
7
|
+
const local = (id) => id.includes("~") ? id.slice(id.indexOf("~") + 1) : id;
|
|
8
|
+
const workspace = workspaces.find((w) => w.id === pane.workspace);
|
|
9
|
+
return {
|
|
10
|
+
...context,
|
|
11
|
+
focused_pane_id: local(pane.id),
|
|
12
|
+
tab_id: local(pane.tab),
|
|
13
|
+
workspace_id: local(pane.workspace),
|
|
14
|
+
workspace_label: (workspace == null ? void 0 : workspace.label) || "",
|
|
15
|
+
workspace_cwd: pane.cwd || "",
|
|
16
|
+
focused_pane_cwd: pane.cwd || ""
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const AGENT_CONTEXTS = ["workspace", "tab", "pane"];
|
|
20
|
+
const READ_ONLY = /\b(list|lists|show|status|view|info|doctor|check|help|preview|inspect|lister|liste|voir|afficher|état|etat|vérifier|verifier|aide)\b/i;
|
|
21
|
+
function needsConfirm(a) {
|
|
22
|
+
return !(READ_ONLY.test(a.id.replace(/[_:]/g, "-")) || READ_ONLY.test(a.title));
|
|
23
|
+
}
|
|
24
|
+
function shortLabel(title, pluginName) {
|
|
25
|
+
const esc = pluginName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
26
|
+
const rest = title.replace(new RegExp(`^${esc}\\s*[:\xB7\u2014\u2013-]\\s*`, "i"), "").trim();
|
|
27
|
+
return rest ? rest[0].toUpperCase() + rest.slice(1) : title;
|
|
28
|
+
}
|
|
29
|
+
const isOwnPlugin = (id) => id === "wherdr" || id.endsWith(".wherdr");
|
|
30
|
+
function opensInHerdr(a) {
|
|
31
|
+
if (a.placement === "popup" || a.placement === "overlay") return true;
|
|
32
|
+
const cmd = Array.isArray(a.command) ? a.command.map(String).join(" ") : "";
|
|
33
|
+
if (/\bplugin\s+pane\s+open\b/.test(cmd)) return true;
|
|
34
|
+
return /(^|[-_:])popup($|[-_:])/i.test(String(a.action_id || ""));
|
|
35
|
+
}
|
|
36
|
+
function normalizeActions(actions, plugins = []) {
|
|
37
|
+
const byId = new Map(plugins.filter((p) => p && p.plugin_id).map((p) => [p.plugin_id, p]));
|
|
38
|
+
const out = [];
|
|
39
|
+
for (const a of actions || []) {
|
|
40
|
+
const plugin = String((a == null ? void 0 : a.plugin_id) || "");
|
|
41
|
+
const id = String((a == null ? void 0 : a.action_id) || "");
|
|
42
|
+
if (!PLUGIN_ID_RE.test(plugin) || !ACTION_ID_RE.test(id) || isOwnPlugin(plugin)) continue;
|
|
43
|
+
const p = byId.get(plugin);
|
|
44
|
+
if (p && p.enabled === false) continue;
|
|
45
|
+
const ctx = (Array.isArray(a.contexts) ? a.contexts : []).map(String);
|
|
46
|
+
const agent = ctx.some((c) => AGENT_CONTEXTS.includes(c));
|
|
47
|
+
const machine = !ctx.length || ctx.includes("global");
|
|
48
|
+
if (!agent && !machine) continue;
|
|
49
|
+
const title = String(a.title || id).replace(/\s+/g, " ").trim().slice(0, 120) || id;
|
|
50
|
+
const description = a.description ? String(a.description).replace(/\s+/g, " ").trim().slice(0, 240) || null : null;
|
|
51
|
+
const pluginName = String((p == null ? void 0 : p.name) || plugin).trim() || plugin;
|
|
52
|
+
out.push({
|
|
53
|
+
plugin,
|
|
54
|
+
pluginName,
|
|
55
|
+
id,
|
|
56
|
+
title,
|
|
57
|
+
label: shortLabel(title, pluginName),
|
|
58
|
+
description,
|
|
59
|
+
agent,
|
|
60
|
+
machine,
|
|
61
|
+
confirm: needsConfirm({ id, title }),
|
|
62
|
+
inHerdr: opensInHerdr(a)
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return out.sort((x, y) => x.pluginName.localeCompare(y.pluginName) || x.label.localeCompare(y.label));
|
|
66
|
+
}
|
|
67
|
+
const ANSI = /\x1B(?:\[[0-?]*[ -/]*[@-~]|\][^\x07\x1B]*(?:\x07|\x1B\\)|[@-Z\\-_])/g;
|
|
68
|
+
function stripAnsi(text) {
|
|
69
|
+
return String(text || "").replace(ANSI, "").replace(/[\x00-\x08\x0B-\x1F\x7F]/g, "");
|
|
70
|
+
}
|
|
71
|
+
function outputTail(text, max = 300) {
|
|
72
|
+
const lines = stripAnsi(text).split("\n").map((l) => l.trim()).filter(Boolean);
|
|
73
|
+
let out = "";
|
|
74
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
75
|
+
const next = out ? `${lines[i]}
|
|
76
|
+
${out}` : lines[i];
|
|
77
|
+
if (next.length > max) {
|
|
78
|
+
if (!out) out = "\u2026" + lines[i].slice(-(max - 1));
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
out = next;
|
|
82
|
+
}
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
function logResult(log2) {
|
|
86
|
+
const status = (log2 == null ? void 0 : log2.status) === "succeeded" || (log2 == null ? void 0 : log2.status) === "failed" ? log2.status : "running";
|
|
87
|
+
const exitCode = typeof (log2 == null ? void 0 : log2.exit_code) === "number" ? log2.exit_code : null;
|
|
88
|
+
const output = status === "failed" ? outputTail(log2 == null ? void 0 : log2.stderr) || outputTail(log2 == null ? void 0 : log2.error) || outputTail(log2 == null ? void 0 : log2.stdout) : outputTail(log2 == null ? void 0 : log2.stdout) || outputTail(log2 == null ? void 0 : log2.stderr);
|
|
89
|
+
return { status, exitCode, output };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export { ACTION_ID_RE as A, PLUGIN_ID_RE as P, REMOTE_PROJECTS_SCRIPT as R, actionContext as a, logResult as l, normalizeActions as n, outputTail as o, stripAnsi as s };
|
|
93
|
+
//# sourceMappingURL=pluginPolicy.mjs.map
|
|
@@ -1,98 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { v as machineFor, x as herdrOn, H as HerdrError, f as findPane, at as splitId, ab as log, aD as underHome, aJ as isGitRepo, E as fmt, m as getState, $ as sleep, ap as IN_DOCKER, y as HERDR_CHILD_ENV, ah as HOME, z as HERDR_BIN } from '../nitro/nitro.mjs';
|
|
2
2
|
import { execFile } from 'node:child_process';
|
|
3
3
|
import { b as binaryOn } from './projectBoard.mjs';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
const PLUGIN_ID_RE = /^[A-Za-z0-9.:_-]{1,100}$/;
|
|
7
|
-
const ACTION_ID_RE = /^[A-Za-z0-9:_-]{1,100}$/;
|
|
8
|
-
const REMOTE_PROJECTS_SCRIPT = 'export HERDR_BIN_PATH="$1"; shift; bin="$1"; shift; exec "$bin" "$@"';
|
|
9
|
-
function actionContext(pane, workspaces = []) {
|
|
10
|
-
const context = { invocation_source: "wherdr" };
|
|
11
|
-
if (!pane) return context;
|
|
12
|
-
const local = (id) => id.includes("~") ? id.slice(id.indexOf("~") + 1) : id;
|
|
13
|
-
const workspace = workspaces.find((w) => w.id === pane.workspace);
|
|
14
|
-
return {
|
|
15
|
-
...context,
|
|
16
|
-
focused_pane_id: local(pane.id),
|
|
17
|
-
tab_id: local(pane.tab),
|
|
18
|
-
workspace_id: local(pane.workspace),
|
|
19
|
-
workspace_label: (workspace == null ? void 0 : workspace.label) || "",
|
|
20
|
-
workspace_cwd: pane.cwd || "",
|
|
21
|
-
focused_pane_cwd: pane.cwd || ""
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
const AGENT_CONTEXTS = ["workspace", "tab", "pane"];
|
|
25
|
-
const READ_ONLY = /\b(list|lists|show|status|view|info|doctor|check|help|preview|inspect|lister|liste|voir|afficher|état|etat|vérifier|verifier|aide)\b/i;
|
|
26
|
-
function needsConfirm(a) {
|
|
27
|
-
return !(READ_ONLY.test(a.id.replace(/[_:]/g, "-")) || READ_ONLY.test(a.title));
|
|
28
|
-
}
|
|
29
|
-
function shortLabel(title, pluginName) {
|
|
30
|
-
const esc = pluginName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
31
|
-
const rest = title.replace(new RegExp(`^${esc}\\s*[:\xB7\u2014\u2013-]\\s*`, "i"), "").trim();
|
|
32
|
-
return rest ? rest[0].toUpperCase() + rest.slice(1) : title;
|
|
33
|
-
}
|
|
34
|
-
const isOwnPlugin = (id) => id === "wherdr" || id.endsWith(".wherdr");
|
|
35
|
-
function opensInHerdr(a) {
|
|
36
|
-
if (a.placement === "popup" || a.placement === "overlay") return true;
|
|
37
|
-
const cmd = Array.isArray(a.command) ? a.command.map(String).join(" ") : "";
|
|
38
|
-
if (/\bplugin\s+pane\s+open\b/.test(cmd)) return true;
|
|
39
|
-
return /(^|[-_:])popup($|[-_:])/i.test(String(a.action_id || ""));
|
|
40
|
-
}
|
|
41
|
-
function normalizeActions(actions, plugins = []) {
|
|
42
|
-
const byId = new Map(plugins.filter((p) => p && p.plugin_id).map((p) => [p.plugin_id, p]));
|
|
43
|
-
const out = [];
|
|
44
|
-
for (const a of actions || []) {
|
|
45
|
-
const plugin = String((a == null ? void 0 : a.plugin_id) || "");
|
|
46
|
-
const id = String((a == null ? void 0 : a.action_id) || "");
|
|
47
|
-
if (!PLUGIN_ID_RE.test(plugin) || !ACTION_ID_RE.test(id) || isOwnPlugin(plugin)) continue;
|
|
48
|
-
const p = byId.get(plugin);
|
|
49
|
-
if (p && p.enabled === false) continue;
|
|
50
|
-
const ctx = (Array.isArray(a.contexts) ? a.contexts : []).map(String);
|
|
51
|
-
const agent = ctx.some((c) => AGENT_CONTEXTS.includes(c));
|
|
52
|
-
const machine = !ctx.length || ctx.includes("global");
|
|
53
|
-
if (!agent && !machine) continue;
|
|
54
|
-
const title = String(a.title || id).replace(/\s+/g, " ").trim().slice(0, 120) || id;
|
|
55
|
-
const description = a.description ? String(a.description).replace(/\s+/g, " ").trim().slice(0, 240) || null : null;
|
|
56
|
-
const pluginName = String((p == null ? void 0 : p.name) || plugin).trim() || plugin;
|
|
57
|
-
out.push({
|
|
58
|
-
plugin,
|
|
59
|
-
pluginName,
|
|
60
|
-
id,
|
|
61
|
-
title,
|
|
62
|
-
label: shortLabel(title, pluginName),
|
|
63
|
-
description,
|
|
64
|
-
agent,
|
|
65
|
-
machine,
|
|
66
|
-
confirm: needsConfirm({ id, title }),
|
|
67
|
-
inHerdr: opensInHerdr(a)
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
return out.sort((x, y) => x.pluginName.localeCompare(y.pluginName) || x.label.localeCompare(y.label));
|
|
71
|
-
}
|
|
72
|
-
const ANSI = /\x1B(?:\[[0-?]*[ -/]*[@-~]|\][^\x07\x1B]*(?:\x07|\x1B\\)|[@-Z\\-_])/g;
|
|
73
|
-
function stripAnsi(text) {
|
|
74
|
-
return String(text || "").replace(ANSI, "").replace(/[\x00-\x08\x0B-\x1F\x7F]/g, "");
|
|
75
|
-
}
|
|
76
|
-
function outputTail(text, max = 300) {
|
|
77
|
-
const lines = stripAnsi(text).split("\n").map((l) => l.trim()).filter(Boolean);
|
|
78
|
-
let out = "";
|
|
79
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
80
|
-
const next = out ? `${lines[i]}
|
|
81
|
-
${out}` : lines[i];
|
|
82
|
-
if (next.length > max) {
|
|
83
|
-
if (!out) out = "\u2026" + lines[i].slice(-(max - 1));
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
out = next;
|
|
87
|
-
}
|
|
88
|
-
return out;
|
|
89
|
-
}
|
|
90
|
-
function logResult(log2) {
|
|
91
|
-
const status = (log2 == null ? void 0 : log2.status) === "succeeded" || (log2 == null ? void 0 : log2.status) === "failed" ? log2.status : "running";
|
|
92
|
-
const exitCode = typeof (log2 == null ? void 0 : log2.exit_code) === "number" ? log2.exit_code : null;
|
|
93
|
-
const output = status === "failed" ? outputTail(log2 == null ? void 0 : log2.stderr) || outputTail(log2 == null ? void 0 : log2.error) || outputTail(log2 == null ? void 0 : log2.stdout) : outputTail(log2 == null ? void 0 : log2.stdout) || outputTail(log2 == null ? void 0 : log2.stderr);
|
|
94
|
-
return { status, exitCode, output };
|
|
95
|
-
}
|
|
4
|
+
import { n as normalizeActions, P as PLUGIN_ID_RE, A as ACTION_ID_RE, a as actionContext, l as logResult, s as stripAnsi, o as outputTail, R as REMOTE_PROJECTS_SCRIPT } from './pluginPolicy.mjs';
|
|
5
|
+
import { c as cleanProjectInput, r as repoArgument, a as projectCommandArgs, b as parseProfileList, t as tickerRunning, s as setupHeader, P as PROJECT_INPUTS, d as readOnlyMessage } from './projectsActions.mjs';
|
|
96
6
|
|
|
97
7
|
const CACHE_MS = 1e4;
|
|
98
8
|
const cache = /* @__PURE__ */ new Map();
|
|
@@ -252,5 +162,5 @@ ${e.message}`) };
|
|
|
252
162
|
return res;
|
|
253
163
|
}
|
|
254
164
|
|
|
255
|
-
export { invokePluginAction as i, listPluginActions as l, projectProfiles as p };
|
|
165
|
+
export { invokePluginAction as i, listPluginActions as l, projectProfiles as p, withoutContainerTicker as w };
|
|
256
166
|
//# sourceMappingURL=plugins.mjs.map
|