@reddb-io/red-skills 4.1.13 → 4.1.15

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.
@@ -164,7 +164,7 @@ ${r.comment}`:r.comment}this.doc.range[2]=r.offset;break}default:this.errors.pus
164
164
  `}function nx(e,t){return t.map(Xr).join(e)}function Lpe(e){if(!Array.isArray(e)||e.length===0)throw xt(0,"TOONL header requires fields");return e.map(t=>{let r;try{[r]=Ys(String(t),0)}catch(n){throw ld(n)}if(r==="")throw xt(0,"TOONL header requires fields");return r})}function g2(e,t){return e!==null&&e.length===t.length&&e.every((r,n)=>r===t[n])}function y2(e){if(e!==void 0&&(!Number.isInteger(e)||e<=0))throw xt(0,"TOONL continuation cadence must be positive")}function Fpe(e,t,r){return e.continuationEveryRows!==void 0&&t>=e.continuationEveryRows||e.continuationEveryBytes!==void 0&&r>=e.continuationEveryBytes}function b2(e){if(e===null||typeof e!="object"||Array.isArray(e))throw xt(0,"TOONL output requires object rows");let t=Object.keys(e);if(t.length===0)throw xt(0,"TOONL output requires object rows");if(t.some(r=>!uf(e[r])))throw xt(0,"TOONL rows must be flat objects");return t}function Gpe(e){return JSON.stringify([...e].sort())}function k2(e,t){let r=Gpe(e),n=t.get(r);return n!==void 0?n:(t.set(r,e),e)}function $t({delimiter:e=os,trailer:t=!0,continuationEveryRows:r,continuationEveryBytes:n}={}){Npe(e),y2(r),y2(n);let o=null,i="",s=new Map,a=0,l=0,c=0,d=new Map,u=!1,p={continuationEveryRows:r,continuationEveryBytes:n},f=()=>o===null||!t?"":`[=${a}]
165
165
  `,h=()=>Fpe(p,l,c)?(l=0,c=0,m2(e,i,!0)):"",g=k=>{R2(k,0);let _=d.get(k);if(_===void 0){if(d.size>=w2)throw xt(0,"too many tagged lanes");_={fields:null,fieldsByShape:new Map},d.set(k,_)}return _};return{push(k){if(u)throw xt(0,"TOONL encoder is closed");let _=k2(b2(k),s),S="";(o===null||o.length!==_.length||o.some((E,O)=>E!==_[O]))&&(S+=f(),o=_,i=nx(e,o),a=0,l=0,c=0,S+=m2(e,i));let P=o.map(E=>Qr(k[E],e));S+=h();let A=`${P.join(e)}
166
166
  `;return S+=A,a+=1,l+=1,c+=A.length,S},declareLane(k,_){if(u)throw xt(0,"TOONL encoder is closed");let S=Lpe(_),P=nx(os,S),A=g(k);return g2(A.fields,S)?"":(A.fields=S,h2(k,P))},pushTagged(k,_){if(u)throw xt(0,"TOONL encoder is closed");let S=g(k),P=k2(b2(_),S.fieldsByShape),A=nx(os,P),E=P.map(D=>Qr(_[D],os)),O="";return g2(S.fields,P)||(S.fields=P,O+=h2(k,A)),`${O}${k}:${E.join(os)}
167
- `},end(){return u?"":(u=!0,f())}}}var kt=QS;function hl(e){let t={app:e,version:Upe(fd("__RED_BUILD_VERSION__",()=>"4.1.13")??"0.0.0-dev"),gitSha:fd("__RED_BUILD_GIT_SHA__",()=>"19ba7780d0a8be832373d24cce303d1833430d2d")??"unknown",buildTime:fd("__RED_BUILD_TIME__",()=>"2026-08-21T01:42:13-03:00")??"unknown",bundleAsset:fd("__RED_BUNDLE_ASSET__",()=>"redskilled.bundle.min.mjs")??"unknown"},r=fd("__REDDB_SDK_VERSION__",()=>"1.23.1"),n=fd("__REDDB_BINARY_TAG__",()=>"v1.23.1");return r&&(t.reddbSdkVersion=r),n&&(t.reddbBinaryTag=n),t}function Upe(e){return e.startsWith("v")?e.slice(1):e}function S2(e){return`${e.app} ${e.version} ${e.gitSha}`}function fd(e,t){try{let r=t();return typeof r=="string"&&r.length>0?r:void 0}catch{return process.env[e.replace(/^__|__$/g,"")]}}var x2={"=":"data",":=":{to:"data",typed:!0},":":"meta"},qpe=/^[a-z][a-z0-9+.-]*:\/\//i;function Wpe(e,t){return typeof t=="string"?{separator:e,to:t,typed:!1,prefix:!1}:{separator:e,to:t.to,typed:t.typed??!1,prefix:t.prefix??!1}}function Hpe(e=x2){return Object.entries(e).map(([t,r])=>Wpe(t,r)).sort((t,r)=>r.separator.length-t.separator.length)}function Kpe(e){return/^-\d+(\.\d+)?$/.test(e)}function mf(e){return!(!e||e.startsWith("-")&&!Kpe(e))}function Iy(e){if(e==="true")return!0;if(e==="false")return!1;if(e==="null")return null;let t=Number(e);return!Number.isNaN(t)&&Number.isFinite(t)&&e.trim()!==""?t:e}function E2(e){if(e==="true")return!0;if(e==="false")return!1;if(e==="null")return null;if(e.startsWith("[")&&e.endsWith("]")||e.startsWith("{")&&e.endsWith("}"))try{return JSON.parse(e)}catch{}let t=Number(e);return!Number.isNaN(t)&&Number.isFinite(t)&&e.trim()!==""?t:e.includes(",")?e.split(",").map(r=>E2(r.trim())):e}function gl(e,t){switch(t){case"boolean":return Vpe(e);case"number":return Jpe(e);case"array":return e.split(",").map(r=>Iy(r.trim()));case"string":default:return e}}function Vpe(e){let t=e.toLowerCase().trim();return t==="true"||t==="yes"||t==="1"||t==="on"}function Jpe(e){if(e.trim()==="")throw new TypeError(`Cannot convert "${e}" to number`);let t=Number(e);if(Number.isNaN(t))throw new TypeError(`Cannot convert "${e}" to number`);return t}function Qs(e){return e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1):e}function Zpe(e,t={}){return e.map(r=>{let n=t[r.type];return n?n(r.value):r.value}).join("")}function Wt(e,t){return{type:e,value:t}}function Ype(e){let t=[],r=Xpe(e);if(t.push(Wt("section-header","Usage:"),Wt("text"," "),Wt("usage-text",r),Wt("newline",`
167
+ `},end(){return u?"":(u=!0,f())}}}var kt=QS;function hl(e){let t={app:e,version:Upe(fd("__RED_BUILD_VERSION__",()=>"4.1.15")??"0.0.0-dev"),gitSha:fd("__RED_BUILD_GIT_SHA__",()=>"7d65b0d974114dba01d5cad11de71362f5a8682f")??"unknown",buildTime:fd("__RED_BUILD_TIME__",()=>"2026-08-21T02:38:22-03:00")??"unknown",bundleAsset:fd("__RED_BUNDLE_ASSET__",()=>"redskilled.bundle.min.mjs")??"unknown"},r=fd("__REDDB_SDK_VERSION__",()=>"1.23.1"),n=fd("__REDDB_BINARY_TAG__",()=>"v1.23.1");return r&&(t.reddbSdkVersion=r),n&&(t.reddbBinaryTag=n),t}function Upe(e){return e.startsWith("v")?e.slice(1):e}function S2(e){return`${e.app} ${e.version} ${e.gitSha}`}function fd(e,t){try{let r=t();return typeof r=="string"&&r.length>0?r:void 0}catch{return process.env[e.replace(/^__|__$/g,"")]}}var x2={"=":"data",":=":{to:"data",typed:!0},":":"meta"},qpe=/^[a-z][a-z0-9+.-]*:\/\//i;function Wpe(e,t){return typeof t=="string"?{separator:e,to:t,typed:!1,prefix:!1}:{separator:e,to:t.to,typed:t.typed??!1,prefix:t.prefix??!1}}function Hpe(e=x2){return Object.entries(e).map(([t,r])=>Wpe(t,r)).sort((t,r)=>r.separator.length-t.separator.length)}function Kpe(e){return/^-\d+(\.\d+)?$/.test(e)}function mf(e){return!(!e||e.startsWith("-")&&!Kpe(e))}function Iy(e){if(e==="true")return!0;if(e==="false")return!1;if(e==="null")return null;let t=Number(e);return!Number.isNaN(t)&&Number.isFinite(t)&&e.trim()!==""?t:e}function E2(e){if(e==="true")return!0;if(e==="false")return!1;if(e==="null")return null;if(e.startsWith("[")&&e.endsWith("]")||e.startsWith("{")&&e.endsWith("}"))try{return JSON.parse(e)}catch{}let t=Number(e);return!Number.isNaN(t)&&Number.isFinite(t)&&e.trim()!==""?t:e.includes(",")?e.split(",").map(r=>E2(r.trim())):e}function gl(e,t){switch(t){case"boolean":return Vpe(e);case"number":return Jpe(e);case"array":return e.split(",").map(r=>Iy(r.trim()));case"string":default:return e}}function Vpe(e){let t=e.toLowerCase().trim();return t==="true"||t==="yes"||t==="1"||t==="on"}function Jpe(e){if(e.trim()==="")throw new TypeError(`Cannot convert "${e}" to number`);let t=Number(e);if(Number.isNaN(t))throw new TypeError(`Cannot convert "${e}" to number`);return t}function Qs(e){return e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1):e}function Zpe(e,t={}){return e.map(r=>{let n=t[r.type];return n?n(r.value):r.value}).join("")}function Wt(e,t){return{type:e,value:t}}function Ype(e){let t=[],r=Xpe(e);if(t.push(Wt("section-header","Usage:"),Wt("text"," "),Wt("usage-text",r),Wt("newline",`
168
168
  `),Wt("newline",`
169
169
  `)),e.positional&&e.positional.length>0){t.push(Wt("section-header","Arguments:"),Wt("newline",`
170
170
  `));for(let n of e.positional)if(n.description){let o=n.variadic?`${n.name}...`:n.name;t.push(Wt("indent"," "),Wt("positional-name",`<${o}>`)),n.required||t.push(Wt("positional-optional"," (optional)")),t.push(Wt("newline",`
@@ -336,7 +336,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
336
336
 
337
337
  `}${r}`;if(e.kind==="pull-request"){let o=t.split("/",1)[0];return{lookup:`repos/${t}/pulls?state=all&head=${encodeURIComponent(`${o}:${e.head}`)}&base=${encodeURIComponent(e.base)}&per_page=100`,path:`repos/${t}/pulls`,body:{head:e.head,base:e.base,title:e.title,body:n(e.body)}}}return e.issue!=null?{lookup:`repos/${t}/issues/${e.issue}/comments?per_page=100`,path:`repos/${t}/issues/${e.issue}/comments`,body:{body:n(e.body)}}:{lookup:`repos/${t}/issues?state=all&per_page=100`,path:`repos/${t}/issues`,body:{title:e.title,body:n(e.body),...e.labels==null||e.labels.length===0?{}:{labels:[...e.labels]}}}}function QMe(e){return`<!-- redskilled:github-outbox:${e} -->`}function rQ(e,t){return Array.isArray(e)?e.find(r=>r!=null&&typeof r=="object"&&typeof r.body=="string"&&r.body.includes(t))??null:null}async function XMe(e){if(e.write.kind!=="repository-push")throw new Error("repository push received a non-push write");let t=e.write,r=Buffer.from(`x-access-token:${e.credential.secret}`,"utf8").toString("base64"),n=`https://github.com/${e.project.projectLabel}.git`;return await new Promise((o,i)=>{JMe("git",["push",n,`${t.sha}:${t.ref}`],{cwd:e.project.workspacePath,env:{...process.env,GIT_CONFIG_COUNT:"1",GIT_CONFIG_KEY_0:"http.extraHeader",GIT_CONFIG_VALUE_0:`Authorization: Basic ${r}`,GIT_TERMINAL_PROMPT:"0"},windowsHide:!0,timeout:6e4},(s,a,l)=>s==null?o():i(new Error(`redskilled repository push to ${n} failed: ${String(l??"").trim()||s.message}`)))}),{pushed:!0,ref:t.ref,sha:t.sha}}var Gbt=xe.githubRead,Bbt=xe.githubWrite,Ubt=xe.githubCustodyHandoff,Qe=class extends Error{constructor(t){super(t),this.name="RedskilledGithubAuthorityError"}};function oQ(e){let t=eT({...e.freshMs==null?{}:{freshMs:e.freshMs},...e.capacity==null?{}:{capacity:e.capacity}}),r=e.clock??(()=>new Date().toISOString()),n=Math.max(1,e.refreshMs??e.freshMs??6e4),o=Math.max(1,e.capacity??512),i=new Map,s=new Set((e.configuredProfiles??[]).filter(UY)),a=new Map,l=new Map,c=(E,O,D)=>{l.set(vN(E.credentialProfile,O),D)},d=new Map,u=new Map,p=new Map,f=new Map,h=!1,g=E=>{h||(E.timer!=null&&clearTimeout(E.timer),E.timer=setTimeout(()=>{E.timer=void 0,_(E).catch(()=>{})},n),E.timer.unref?.())},k=(E,O,D)=>{let z=(p.get(E.scope)??0)+1;p.set(E.scope,z);let I={version:1,sequence:z,project_id:E.project.projectId,credential_profile:E.project.credentialProfile,read:E.read,fetched_at:D,value:O};for(let j of u.get(E.scope)??[])j(I)},_=async E=>{let O=i.get(E.key);if(O!=null)return O;let D=t.read(E.key,{now:r()}),z=RN(E.read),I=e.upstream({project:E.project,credential:E.credential,read:E.read,...E.validators==null||E.read.kind!=="rest"?{}:{conditional:E.validators}}).then(j=>{let W=r();if(j.notModified){let ue=E.answer??D.value;if(ue==null)throw new Error("redskilled GitHub upstream returned not-modified without a held cache answer");return E.answer={value:ue.value,budget:j.budget??ue.budget},E.validators=j.validators??E.validators,z!=null&&c(E.project,z,{facts:E.answer.budget,state:j.budget==null?"unavailable":"authoritative",observedAt:W}),t.put({key:E.key,kind:E.read.kind,value:E.answer,fetchedAt:W}),Bv(E.project,E.answer,"cache",{outcome:"fresh",fetched_at:W,age_ms:0,fresh_ms:t.read(E.key,{now:W}).fresh_ms})}let X={value:j.value,budget:j.budget},ce=E.answer==null||!eNe(E.answer.value,X.value);return E.answer=X,E.validators=j.validators,z!=null&&c(E.project,z,{facts:X.budget,state:X.budget==null?"unavailable":"authoritative",observedAt:W}),t.put({key:E.key,kind:E.read.kind,value:X,fetchedAt:W}),ce&&k(E,X.value,W),Bv(E.project,X,"upstream",{outcome:"fresh",fetched_at:W,age_ms:0,fresh_ms:t.read(E.key,{now:W}).fresh_ms})}).catch(j=>{if(z!=null&&c(E.project,z,{facts:D.value?.budget??E.answer?.budget??null,state:j instanceof Dr?"backpressured":"unavailable",observedAt:r(),...j instanceof Dr?{backpressure:j.fact}:{}}),j instanceof Dr&&E.read.kind!=="repository-fetch"&&D.hit&&D.value!=null&&D.fetched_at!=null&&D.age_ms!=null)return Bv(E.project,D.value,"cache",{outcome:D.outcome,fetched_at:D.fetched_at,age_ms:D.age_ms,fresh_ms:D.fresh_ms},j.fact);throw j}).finally(()=>{i.delete(E.key),g(E)});return i.set(E.key,I),I},S=()=>{for(;d.size>o;){let E=d.entries().next().value;if(E==null)return;let[O,D]=E;D.timer!=null&&clearTimeout(D.timer),d.delete(O),t.forget(O)}},P=e.outboxPath==null||e.writeUpstream==null?null:VY(e.outboxPath,e.writeUpstream,r),A=e.custodyPath==null||e.custodyUpstream==null?null:XY({path:e.custodyPath,upstream:e.custodyUpstream,clock:r,tickMs:Math.max(1,e.custodyTickMs??n),inertMs:Math.max(1,e.custodyInertMs??Math.max(n*3,6e4))});return{forProject(E,O){let D=nQ(E);if(typeof O.secret!="string"||O.secret.trim()==="")throw new Qe(`credential profile ${JSON.stringify(D.credentialProfile)} has no daemon-owned credential`);s.add(D.credentialProfile);let z=a.get(D.credentialProfile)??new Map;z.set(D.projectId,D.projectLabel),a.set(D.credentialProfile,z);let I=sNe(D),j=()=>{if(P==null)throw new Qe("this GitHub gateway has no durable write outbox");return P},W=()=>{if(A==null)throw new Qe("this GitHub gateway has no durable merge custodian");return A};return{async read(X){let ce=tNe(D,X),ue=RN(ce),ie=iNe(D,ce),Oe=r(),De=t.read(ie,{now:Oe});if(De.outcome==="fresh"&&De.value!=null&&De.fetched_at!=null&&De.age_ms!=null)return ue!=null&&c(D,ue,{facts:De.value.budget,state:"cached",observedAt:De.fetched_at}),Bv(D,De.value,"cache",{outcome:De.outcome,fetched_at:De.fetched_at,age_ms:De.age_ms,fresh_ms:De.fresh_ms});let et=i.get(ie);if(et!=null)return et;let Ye=d.get(ie);return Ye==null&&(Ye={key:ie,scope:I,project:D,credential:O,read:ce},d.set(ie,Ye),S()),_(Ye)},async refresh(){let X=[...d.values()].filter(ce=>ce.scope===I);return await Promise.all(X.map(ce=>_(ce))),X.length},async wake(X){aNe(X);let ce=f.get(I);if(ce==null&&(ce=new Set,f.set(I,ce)),ce.has(X.deliveryId))return 0;ce.add(X.deliveryId),ce.size>1024&&ce.delete(ce.values().next().value);let ue=[...d.values()].filter(ie=>ie.scope===I);return await Promise.all(ue.map(ie=>_(ie))),ue.length},subscribe(X){let ce=u.get(I);return ce==null&&(ce=new Set,u.set(I,ce)),ce.add(X),()=>{ce.delete(X),ce.size===0&&u.delete(I)}},write(X){return j().publish(D,O,EN(X))},resumeWrites(){return j().resume(D,O)},handoffMergeCustody(X){return W().handoff(D,O,X)},mergeCustodyStatus(){return W().status(D,O)}}},projectBudget(E){let O=nQ(E);return{version:1,scope:"project",project_id:O.projectId,project_label:O.projectLabel,credential_profile:O.credentialProfile,pools:wN(O.credentialProfile,l,r())}},hostBudget(){return{version:1,scope:"host-administration",profiles:[...s].sort().map(E=>{let D=[...a.get(E)??new Map].sort(([z],[I])=>z.localeCompare(I));return{credential_profile:E,project_ids:D.map(([z])=>z),project_labels:D.map(([,z])=>z),pools:wN(E,l,r())}})}},close(){h=!0;for(let E of d.values())E.timer!=null&&clearTimeout(E.timer);d.clear(),u.clear(),f.clear(),A?.close()}}}function iQ(e={}){let t=(e.origin??"https://api.github.com").replace(/\/+$/,""),r=e.graphqlEndpoint??`${t}/graphql`,n=e.fetchImpl??fetch,o=e.fetchRepository??tQ,i=e.clock??(()=>new Date().toISOString());return async s=>{if(s.read.kind==="repository-fetch")return{value:await o(s),budget:null};if(s.read.kind==="rest"){let p=s.project.projectLabel.split("/").map(encodeURIComponent).join("/"),f=s.conditional==null?{}:{...s.conditional.etag==null?{}:{"if-none-match":s.conditional.etag},...s.conditional.lastModified==null?{}:{"if-modified-since":s.conditional.lastModified}},h=await n(`${t}/repos/${p}/${s.read.path}`,{method:"GET",headers:{...Is(s.credential.secret),...f}}),g=s.read.path.replace(/^\/+/,"").startsWith("search/")?"search":"rest",k=qY(h.headers,s.conditional);if(h.status===304)return{value:void 0,budget:SN(g,h.headers),validators:k,notModified:!0};if(!h.ok)throw Gi("REST read",g,h,i(),s.project.credentialProfile);return{value:await Ju(h),budget:SN(g,h.headers),validators:k}}let[a,l]=s.project.projectLabel.split("/",2),c=`query RedskilledProjectRead { repository(owner: ${JSON.stringify(a)}, name: ${JSON.stringify(l)}) { ${s.read.selection} } rateLimit { limit remaining resetAt cost } }`,d=await n(r,{method:"POST",headers:{...Is(s.credential.secret),"content-type":"application/json"},body:JSON.stringify({query:c})});if(!d.ok)throw Gi("GraphQL read","graphql",d,i(),s.project.credentialProfile);let u=await d.json();if(u.errors?.some(lNe))throw Fv(s.project.credentialProfile);if(u.errors!=null&&u.errors.length>0)throw new Error("redskilled GitHub GraphQL read was refused upstream");return{value:u.data?.repository,budget:WY(u.data?.rateLimit)}}}function Bv(e,t,r,n,o){return{version:1,project_id:e.projectId,credential_profile:e.credentialProfile,source:r,cache:n,budget:t.budget,value:t.value,...o===void 0?{}:{backpressure:o,retry_at:o.retry_at}}}function nQ(e){if([e.projectId,e.projectLabel,e.workspacePath,e.credentialProfile].some(r=>typeof r!="string"||r.trim()===""))throw new Qe("a GitHub reader needs one resolved Project and credential profile");if(!/^[^/\s]+\/[^/\s]+$/.test(e.projectLabel))throw new Qe("the resolved Project has no canonical GitHub repository identity");if(!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/.test(e.credentialProfile))throw new Qe("the daemon-owned credential profile name is not publishable");return{...e}}function tNe(e,t){return t==null||typeof t!="object"?Bi("a GitHub read must be an object"):t.kind==="rest"?(AN(t,["kind","path"]),rNe(e,t)):t.kind==="graphql"?(AN(t,["kind","selection"]),nNe(t)):t.kind==="repository-fetch"?(AN(t,["kind","ref"]),oNe(t)):Bi("Project authority permits only REST, GraphQL, and repository-fetch reads")}function rNe(e,t){let r=typeof t.path=="string"?t.path.trim().replace(/^\/+/,""):"",n=`repos/${e.projectLabel}/`;if(r.startsWith("repos/")){if(!r.toLowerCase().startsWith(n.toLowerCase()))return Bi("a Project GitHub reader cannot address another repository");r=r.slice(n.length)}if(r===""||r.includes("\\")||r.split("/").some(i=>i===".."||i==="."))return Bi("a Project GitHub REST read needs one repository-relative path");let o=r.split(/[/?#]/,1)[0].toLowerCase();return["admin","applications","enterprises","installation","installations","orgs","rate_limit","user","users"].includes(o)?Bi("Project authority cannot use the GitHub gateway for host or account administration"):{kind:"rest",path:r}}function nNe(e){let t=typeof e.selection=="string"?e.selection.trim().replace(/\s+/g," "):"";return t===""?Bi("a Project GraphQL read needs a repository field selection"):/\b(query|mutation|subscription|repository|viewer|user|organization|enterprise|node|nodes|search|rateLimit)\b\s*(?:\(|\{)/i.test(t)||t.includes("$")?Bi("a Project GraphQL read may select fields only from its bound repository"):{kind:"graphql",selection:t}}function oNe(e){if(e.ref==null||e.ref.trim()==="")return{kind:"repository-fetch"};let t=e.ref.trim();return!/^refs\/(heads|tags)\/[A-Za-z0-9][A-Za-z0-9._\/-]*$/.test(t)||t.includes("..")||t.includes("//")||t.endsWith(".")||t.endsWith("/")||t.includes("@{")?Bi("a Project repository fetch may name only one ordinary branch or tag ref"):{kind:"repository-fetch",ref:t}}function iNe(e,t){let r=t.kind==="rest"?t.path:t.kind==="graphql"?t.selection:t.ref??"*";return JSON.stringify([e.projectId,e.credentialProfile,t.kind,r])}function sNe(e){return JSON.stringify([e.projectId,e.credentialProfile])}function aNe(e){(e==null||typeof e!="object"||Array.isArray(e)||Object.keys(e).length!==1||typeof e.deliveryId!="string"||e.deliveryId.trim()===""||e.deliveryId.length>256)&&Bi("a GitHub webhook wake may carry only one bounded delivery identifier")}function Bi(e){throw new Qe(e)}function AN(e,t){Object.keys(e).find(n=>!t.includes(n))!=null&&Bi("a Project GitHub read cannot carry Project, credential, remote, or host authority fields")}function lNe(e){if(e==null||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.type==="FORBIDDEN"||t.extensions!=null&&typeof t.extensions=="object"&&t.extensions.type==="FORBIDDEN"}import{createHash as cNe}from"node:crypto";var dNe=["GET","HEAD"];function sQ(e){if(e==null||typeof e!="object"||Array.isArray(e))throw new Qe("a Project GitHub request needs one request");let t=e;if(Object.keys(t).length!==1||!("request"in t))throw new Qe("a Project GitHub request cannot name a Project, credential profile, remote, or host operation");if(t.request==null||typeof t.request!="object"||Array.isArray(t.request))throw new Qe("a Project GitHub request needs one request object");return{request:t.request}}function aQ(e,t){let r=t.method;if(!EY(r))return So("a Project GitHub request needs one ordinary HTTP method");gNe(t,["method","path","body","headers"]),mNe(t.headers);let n=pNe(e,t.path);return dNe.includes(r)?t.body!=null?So(`a ${r} request carries no body`):{mode:"read",path:n,read:{kind:"rest",path:n}}:{mode:"write",path:n,write:fNe(r,n,t.body)}}function uNe(e,t,r){return`ghreq-${cNe("sha256").update(JSON.stringify([e,t,r??null])).digest("hex").slice(0,48)}`}function IN(e,t,r){return r.mode==="read"?{version:1,mode:"read",method:e,path:t,answer:r.answer}:{version:1,mode:"write",method:e,path:t,answer:r.answer}}function pNe(e,t){let r=typeof t=="string"?t.trim().replace(/^\/+/,""):"",n=`repos/${e}/`;if(r.toLowerCase().startsWith("repos/")){if(!r.toLowerCase().startsWith(n.toLowerCase()))return So("a Project GitHub request cannot address another repository");r=r.slice(n.length)}return r===""||r.includes("\\")||r.split(/[/?#]/).some(o=>o===".."||o===".")?So("a Project GitHub request needs one repository-relative path"):r}function fNe(e,t,r){if(e!=="POST")return So(`the Project GitHub gateway schedules no ${e} write \u2014 its outbox publishes Issues, Issue comments and pull requests`);if(r!=null&&(typeof r!="object"||Array.isArray(r)))return So("a Project GitHub write needs one request body object");let n=r??{},o=t.split(/[?#]/,1)[0],i=/^issues\/([1-9][0-9]*)\/comments$/.exec(o),s=i!=null?{kind:"issue-publication",issue:Number(i[1]),body:Na(n.body,"an Issue comment needs a body")}:o==="issues"?{kind:"issue-publication",title:Na(n.title,"a new Issue needs a title"),body:Na(n.body,"a new Issue needs a body"),...n.labels==null?{}:{labels:hNe(n.labels)}}:o==="pulls"?{kind:"pull-request",head:Na(n.head,"a pull request needs a head branch"),base:Na(n.base,"a pull request needs a base branch"),title:Na(n.title,"a pull request needs a title"),body:Na(n.body,"a pull request needs a body")}:So(`the Project GitHub gateway schedules no write for ${JSON.stringify(o)} \u2014 its outbox publishes \`issues\`, \`issues/<number>/comments\` and \`pulls\``);return{idempotency_key:uNe(e,t,r),write:s}}function mNe(e){if(e==null)return;if(typeof e!="object"||Array.isArray(e))return So("a Project GitHub request needs one headers object");let t=Object.keys(e);t.length!==0&&So(`the Project GitHub gateway owns its own request headers \u2014 it authenticates, negotiates and conditions every call itself, so a caller may name none (received ${t.sort().join(", ")})`)}function Na(e,t){let r=typeof e=="string"?e:"";return r.trim()===""?So(t):r}function hNe(e){return Array.isArray(e)?e.map(t=>Na(t,"an Issue label must be one non-empty label name")):So("Issue labels must be a list of label names")}function gNe(e,t){Object.keys(e).find(n=>!t.includes(n))!=null&&So("a Project GitHub request carries only a method, a path, a body and headers")}function So(e){throw new Qe(e)}function Mt(e,t,r){return{method:e,params:t,handle:async o=>{try{return await r(o)}catch(i){if(i instanceof ne)throw i;let s=i instanceof Error?i.message:String(i);throw new ne(-32603,`${e} failed: ${s}`)}}}}var Uv=()=>({});function lQ(e){let t=[],r=new Map,n={};for(let o of e){for(let i of o.bindings){let s=r.get(i.method);if(s!=null)throw new Error(`${i.method} is claimed by both the ${s} and ${o.domain} ACP domains`);r.set(i.method,o.domain),t.push(i)}o.capability!=null&&(n={...n,...o.capability})}return{bindings:t,capabilities:n,domains:e.map(o=>o.domain)}}var cQ=xe.githubUpdate;function dQ(e,t){if(!yNe(e))return bNe();let r=Promise.resolve();return{close:e.subscribe(o=>{r=r.then(()=>t(cQ,o)).catch(()=>{})}),settled:()=>r}}function yNe(e){return e!=null&&typeof e=="object"&&typeof e.subscribe=="function"}function bNe(){return{close:()=>{},settled:async()=>{}}}async function uQ(e,t,r,n){try{let o=await e?.credentialForProject({projectId:t.projectId,projectLabel:t.projectLabel,workspacePath:t.workspacePath});if(e==null||o==null)throw ne.authRequired({version:1,kind:"github-credential-profile",reason:"missing-credentials",credential_profile:"personal"},"this Project has no resolvable daemon-owned GitHub credential profile");try{let i=e.gateway.forProject({projectId:t.projectId,projectLabel:t.projectLabel,workspacePath:t.workspacePath,credentialProfile:o.profile},o.credential);return r?.(i),await n(i)}catch(i){throw i instanceof Dr?new ne(-32001,i.message,{version:1,kind:"github-backpressure",project_id:t.projectId,credential_profile:o.profile,retry_at:i.fact.retry_at,fact:i.fact}):i}}catch(o){throw o instanceof cr?ne.authRequired(o.refusal,o.message):o}}function kNe(e,t,r){return async({params:{read:n}})=>{let o=t();return await uQ(e,o,r,i=>i.read(n))}}function _Ne(e,t,r){return async({params:{request:n}})=>{let o=t();return await uQ(e,o,r,async i=>{let s=aQ(o.projectLabel,n);return s.mode==="read"?IN(n.method,s.path,{mode:"read",answer:await i.read(s.read)}):IN(n.method,s.path,{mode:"write",answer:await i.write(s.write)})})}}function Dh(e,t){return async({params:r})=>{let n=t();try{let o=await e?.credentialForProject({projectId:n.projectId,projectLabel:n.projectLabel,workspacePath:n.workspacePath});if(e==null||o==null)throw ne.authRequired({version:1,kind:"github-credential-profile",reason:"missing-credentials",credential_profile:"personal"},"this Project has no resolvable daemon-owned GitHub credential profile");return await e.gateway.forProject({projectId:n.projectId,projectLabel:n.projectLabel,workspacePath:n.workspacePath,credentialProfile:o.profile},o.credential).write(r)}catch(o){throw o instanceof cr?ne.authRequired(o.refusal,o.message):o}}}function wNe(e,t){return async({params:r})=>{let{reader:n}=await vNe(e,t());return n.handoffMergeCustody(r)}}function pQ(e,t){return async()=>{if(e==null)return;let r=t(),n;try{n=await e.credentialForProject({projectId:r.projectId,projectLabel:r.projectLabel,workspacePath:r.workspacePath})}catch(i){if(i instanceof cr)return;throw i}if(n==null)return;let o=e.gateway.forProject({projectId:r.projectId,projectLabel:r.projectLabel,workspacePath:r.workspacePath,credentialProfile:n.profile},n.credential);return fQ(o)?o.mergeCustodyStatus():void 0}}async function vNe(e,t){let r=await e?.credentialForProject({projectId:t.projectId,projectLabel:t.projectLabel,workspacePath:t.workspacePath});if(e==null||r==null)throw ne.authRequired({version:1,kind:"github-credential-profile",reason:"missing-credentials",credential_profile:"personal"},"this Project has no resolvable daemon-owned GitHub credential profile");let n=e.gateway.forProject({projectId:t.projectId,projectLabel:t.projectLabel,workspacePath:t.workspacePath,credentialProfile:r.profile},r.credential);if(!fQ(n))throw new Qe("this GitHub gateway has no durable merge custodian");return{reader:n}}function fQ(e){return e!=null&&typeof e=="object"&&typeof e.handoffMergeCustody=="function"&&typeof e.mergeCustodyStatus=="function"}function RNe(e){if(e==null||typeof e!="object"||Array.isArray(e))throw new Qe("a Project GitHub gateway request needs one read");let t=e;if(Object.keys(t).length!==1||!("read"in t))throw new Qe("a Project GitHub request cannot name a Project, credential profile, remote, or host operation");if(t.read==null||typeof t.read!="object"||Array.isArray(t.read))throw new Qe("a Project GitHub gateway request needs one read object");return{read:t.read}}function SNe(e){if(e==null||typeof e!="object"||Array.isArray(e))throw new Qe("a Project GitHub write needs one mutation");let t=e;if(Object.keys(t).length!==2||!("idempotency_key"in t)||!("write"in t))throw new Qe("a Project GitHub write cannot name a Project, credential profile, remote, or host operation");if(t.write==null||typeof t.write!="object"||Array.isArray(t.write))throw new Qe("a Project GitHub write needs one mutation object");return t}function xNe(e){if(e==null||typeof e!="object"||Array.isArray(e))throw new Qe("merge custody needs one pull request handoff");let t=e,r=["pull_request","owner_ticket","branch","base"];if(Object.keys(t).length!==r.length||r.some(n=>!(n in t)))throw new Qe("a Project merge custody handoff cannot name a Project, credential profile, remote, or host operation");return t}function qv(e){let t=kNe(e.gateway,e.scopedProject,e.onReader),r=_Ne(e.gateway,e.scopedProject,e.onReader),n=Dh(e.gateway,e.scopedProject),o=wNe(e.gateway,e.scopedProject);return{domain:"github",bindings:[Mt(xe.githubRead,RNe,t),Mt(xe.githubRequest,sQ,r),Mt(xe.githubWrite,SNe,n),Mt(xe.githubCustodyHandoff,xNe,o)],...e.gateway==null?{}:{capability:{githubGateway:{version:1,methods:[xe.githubRead,xe.githubRequest,xe.githubWrite,xe.githubCustodyHandoff],notifications:[cQ]}}}}}import{randomUUID as y1e}from"node:crypto";var ckt=xe.brainCall;function mQ(e){return{domain:"brain",bindings:[Mt(xe.brainCall,SY,({params:t})=>e.store.call(t))],capability:{brain:{version:1,methods:[xe.brainCall],tools:jv}}}}var hQ=xe.projectBudget,gQ=xe.hostBudgets;function ENe(e,t){return async r=>{let n=t();try{let o=await e?.credentialForProject({projectId:n.projectId,projectLabel:n.projectLabel,workspacePath:n.workspacePath}),i=bQ(e?.gateway);if(o==null||i==null)throw ne.authRequired({version:1,kind:"github-credential-profile",reason:"missing-credentials"},"this Project has no observable daemon-owned GitHub credential budget");return i.projectBudget({projectId:n.projectId,projectLabel:n.projectLabel,workspacePath:n.workspacePath,credentialProfile:o.profile})}catch(o){throw o instanceof cr?ne.authRequired(o.refusal,o.message):o}}}function TNe(e,t){return async r=>{if(!t)throw ne.invalidRequest("this project-scoped ACP connection has no host-administrative authority");let n=bQ(e?.gateway);if(n==null)throw ne.invalidRequest("GitHub credential-budget projection is unavailable");return n.hostBudget()}}var yQ=Wu("credential-budget requests accept no caller-controlled authority fields");function bQ(e){return e==null||!("projectBudget"in e)||!("hostBudget"in e)?null:e}function kQ(e){let t=ENe(e.gateway,e.scopedProject),r=TNe(e.gateway,e.hostAdministration);return{domain:"budget",bindings:[Mt(hQ,yQ,t),Mt(gQ,yQ,r)],...e.gateway==null?{}:{capability:{credentialBudgets:{version:1,methods:[hQ,...e.hostAdministration?[gQ]:[]]}}}}}import{randomUUID as SLe}from"node:crypto";var sc="lane:go",PNe="lane:scout";function jh(){return{}}function _Q(e,t){let r=ANe(t);if(r===void 0)return e.dispatch;let n=INe(r);if(e.dispatch!=null&&!CNe(e.dispatch,n))throw new Error("this ACP session is already bound to a different targeted dispatch");return e.dispatch??=n,e.dispatch}function ANe(e){if(!Wv(e))return;let t=e.redskills;return Wv(t)?t.dispatch:void 0}function INe(e){if(!Wv(e)||e.version!==1)throw new Error("a targeted ACP dispatch must declare version 1");let t=e.workerKind;if(t!=="afk"&&t!=="go"&&t!=="scout")throw new Error("a targeted ACP dispatch must declare Worker kind afk, go, or scout");let r=e.ticket;if(!Number.isInteger(r)||Number(r)<=0)throw new Error("a targeted ACP dispatch requires a positive Ticket number");let n=e.selector;if(!Wv(n)||n.kind!=="issues")throw new Error("a targeted ACP dispatch requires an issues selector");let o=n.numbers;if(!Array.isArray(o)||o.length!==1||o[0]!==r)throw new Error("a targeted ACP dispatch selector must name exactly its Ticket");let i=typeof n.lane=="string"?n.lane.trim():"";if(i==="")throw new Error("a targeted ACP dispatch requires an explicit selector lane");let s=t==="go"?sc:t==="scout"?PNe:void 0;if(s!=null&&i!==s)throw new Error(`Worker kind ${t} requires selector lane ${s}`);return{version:1,workerKind:t,ticket:Number(r),selector:{kind:"issues",numbers:[Number(r)],lane:i}}}function CNe(e,t){return e.workerKind===t.workerKind&&e.ticket===t.ticket&&e.selector.kind===t.selector.kind&&e.selector.lane===t.selector.lane&&e.selector.numbers.length===t.selector.numbers.length&&e.selector.numbers.every((r,n)=>r===t.selector.numbers[n])}function Wv(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}import{randomBytes as UQ}from"node:crypto";import{constants as gLe,accessSync as yLe}from"node:fs";import{homedir as bLe}from"node:os";import{delimiter as kLe,isAbsolute as _Le,join as qQ}from"node:path";var $Ne=[{id:"redcode",label:"Redcode",kind:"native",command:["redcode","acp"]},{id:"claude-code",label:"Claude Code",kind:"adapter",artifact:{package:"@zed-industries/claude-code-acp",version:"0.16.2",integrity:"sha512-D8BJe6CCD49RtNFbZYPsfZOpQI8Z/EzhyYC9zAGMwN/HVunEtVY2sXqYl1iDSkkayzhqABfaDkDZfeqDM1T/aA==",entrypoint:"package/dist/index.js",bin:"claude-code-acp"}},{id:"codex",label:"Codex",kind:"adapter",artifact:{package:"@zed-industries/codex-acp",version:"0.16.0",integrity:"sha512-XKzqztT5R8Wg1BVFnk6/U4JVx5GNUaZgxpf9gP2Cw6BsknvJWh3aefcAGZQljgdMivRqczjNKYL4F6H65dc5vA==",entrypoint:"package/bin/codex-acp.js",bin:"codex-acp"}},{id:"pi",label:"Pi",kind:"adapter",artifact:{package:"pi-acp",version:"0.0.33",integrity:"sha512-vX9kY1tK14E72G4dBAx+RGCk/k7XPjTHls6dLUxA8WSkBav6B6JHuSBv3eusp50LCR/GTRsR2kIKsG0Z5jANzw==",entrypoint:"package/dist/index.js",bin:"pi-acp"}},{id:"opencode",label:"OpenCode",kind:"native",command:["opencode","acp"]}],Hv=class extends Error{constructor(r,n){super(`ACP Agent ${r} is not available: ${n}. Run redskilled ACP Agent provisioning for ${r}; redskilled will not substitute another Agent.`);this.agent=r;this.name="AcpAgentUnavailableError"}};function wQ(e){let t=$Ne.find(r=>r.id===e);if(t==null)throw new Hv(e,"it is not configured in the host catalog");if(t.kind==="native")return ONe(t);if(t.artifact.bin==null)throw new Hv(e,"its pinned adapter declares no launchable bin");return{agent:e,transport:"stdio",command:"npx",args:["-y","-p",`${t.artifact.package}@${t.artifact.version}`,t.artifact.bin]}}function ONe(e){return{agent:e.id,transport:"stdio",command:e.command[0],args:e.command.slice(1)}}import{chmod as zNe,copyFile as DNe,mkdir as jNe,stat as MNe}from"node:fs/promises";import{homedir as CN}from"node:os";import{join as Kv}from"node:path";function RQ(e,t,r=CN()){return e==="redcode"?{OPENCODE_DB:Kv(t,"redcode.db")}:e==="codex"?{CODEX_HOME:SQ(r)}:{}}function SQ(e=CN()){return Kv(Ft(e),"agent-homes","codex")}async function xQ(e,t=CN()){if(e!=="codex")return;let r=SQ(t);await jNe(r,{recursive:!0,mode:448});let n=Kv(r,"auth.json"),o=Kv(t,".codex","auth.json"),[i,s]=await Promise.all([vQ(n),vQ(o)]);if(s==null){if(i!=null)return;throw new Error("codex has no host login: ~/.codex/auth.json is absent. Run `codex login` as the operator first.")}(i==null||s>i)&&(await DNe(o,n),await zNe(n,384))}async function vQ(e){try{return(await MNe(e)).mtimeMs}catch{return null}}import{execFile as NNe}from"node:child_process";var LNe=12e4,FNe=/^[0-9a-f]{40}$/,GNe=/^[A-Za-z0-9][A-Za-z0-9._/-]*$/;function BNe(e){let t=e.deliver??VNe;return async({params:r})=>{let n=PQ(e.held()),o=await AQ(e.gateway,n.project);await t({workerId:n.workerId,worktreePath:n.worktreePath,workspacePath:n.project.workspacePath,branch:r.branch,commit:r.commit});let i=await o.write({idempotency_key:r.idempotency_key,write:{kind:"repository-push",ref:`refs/heads/${r.branch}`,sha:r.commit}});return{version:1,worker_id:n.workerId,branch:r.branch,commit:r.commit,published_at:i.published_at}}}function UNe(e){return async({params:t})=>{let r=PQ(e.held()),n=await AQ(e.gateway,r.project),o=await n.write({idempotency_key:t.idempotency_key,write:{kind:"pull-request",head:t.branch,base:t.base,title:t.title,body:t.body}}),i=KNe(o.value),s=await HNe(n).handoffMergeCustody({pull_request:i,owner_ticket:t.owner_ticket,branch:t.branch,base:t.base});return{version:1,worker_id:r.workerId,pull_request:i,branch:t.branch,base:t.base,custody_state:s.state,handed_off_at:s.handed_off_at}}}function qNe(e){let t=IQ(e,["idempotency_key","branch","commit"],"a Worker publication"),r=t.commit;if(typeof r!="string"||!FNe.test(r))throw new Qe("a Worker publication names one full commit object name");return{idempotency_key:Mh(t.idempotency_key,"idempotency key"),branch:$N(t.branch),commit:r}}function WNe(e){let t=IQ(e,["idempotency_key","branch","base","title","body","owner_ticket"],"a Worker landing"),r=t.owner_ticket;if(typeof r!="number"||!Number.isSafeInteger(r)||r<=0)throw new Qe("a Worker landing names the Ticket that inherits the merge");return{idempotency_key:Mh(t.idempotency_key,"idempotency key"),branch:$N(t.branch),base:$N(t.base),title:Mh(t.title,"title"),body:Mh(t.body,"body"),owner_ticket:r}}function TQ(e){return{domain:"publication",bindings:[Mt(xe.publish,qNe,BNe(e)),Mt(xe.land,WNe,UNe(e))]}}function PQ(e){if(e!=null)return e;throw ne.invalidRequest({version:1,kind:"worker-not-held"},"redskilled does not hold the Worker this publication came from")}async function AQ(e,t){let r;try{r=await e?.credentialForProject({projectId:t.projectId,projectLabel:t.projectLabel,workspacePath:t.workspacePath})}catch(n){throw n instanceof cr?ne.authRequired(n.refusal,n.message):n}if(e==null||r==null)throw ne.authRequired({version:1,kind:"github-credential-profile",reason:"missing-credentials",credential_profile:"personal"},"this Project has no resolvable daemon-owned GitHub credential profile");return e.gateway.forProject({projectId:t.projectId,projectLabel:t.projectLabel,workspacePath:t.workspacePath,credentialProfile:r.profile},r.credential)}function HNe(e){let t=e;if(typeof t.handoffMergeCustody!="function")throw new Qe("this GitHub gateway has no durable merge custodian");return t}function KNe(e){let t=e?.number;if(typeof t!="number"||!Number.isSafeInteger(t)||t<=0)throw new Qe("the opened pull request answered with no number to take custody of");return t}async function VNe(e){let t=`refs/redskilled/publications/${e.workerId}/${e.branch}`;await EQ(e.workspacePath,["fetch","--no-tags","--quiet","--",e.worktreePath,`+refs/heads/${e.branch}:${t}`]),await EQ(e.workspacePath,["cat-file","-e",`${e.commit}^{commit}`])}function EQ(e,t){return new Promise((r,n)=>{NNe("git",[...t],{cwd:e,encoding:"utf8",timeout:LNe,windowsHide:!0},(o,i,s)=>{if(o==null){r();return}n(new Qe(`redskilled could not deliver the Worker's publication: ${String(s).trim()||o.message}`))})})}function IQ(e,t,r){if(e==null||typeof e!="object"||Array.isArray(e))throw new Qe(`${r} needs one request object`);let n=e;if(Object.keys(n).length!==t.length||t.some(o=>!(o in n)))throw new Qe(`${r} cannot name a Project, credential profile, remote, Worker, or host operation`);return n}function Mh(e,t){if(typeof e!="string"||e.trim()==="")throw new Qe(`a Worker publication needs a ${t}`);return e}function $N(e){let t=Mh(e,"branch");if(!GNe.test(t)||t.includes("..")||t.includes("//")||t.endsWith(".")||t.endsWith("/")||t.includes("@{"))throw new Qe(`${JSON.stringify(t)} is not a branch redskilled can publish`);return t}import{randomUUID as JNe}from"node:crypto";import{mkdir as ZNe,readFile as YNe,rename as QNe,writeFile as XNe}from"node:fs/promises";import{dirname as $Q,join as eLe}from"node:path";function OQ(e){return eLe($Q(e),"redskilled.acp-sessions.toon")}async function zQ(e){let t=await tLe(e),r=Promise.resolve(),n=()=>{let i={version:1,sessions:[...t.values()]};return r=r.then(()=>rLe(e,i)),r},o=(i,s)=>{let a=t.get(i);if(a==null)throw new Error("unknown durable RedSkills ACP session");return t.set(i,{...a,entries:[...a.entries,{...s,sequence:a.entries.length+1}]}),n()};return{create(i,s){return t.set(i,{public_session_id:i,project_id:s.projectId,project_label:s.projectLabel,workspace_path:s.workspacePath,entries:[],session_evidence:[]}),n()},prompt(i,s){return o(i,{kind:"prompt",prompt:s})},update(i,s){return s.sessionUpdate!=="plan"?Promise.resolve():o(i,{kind:"plan",update:s})},worker(i,s,a,l){return o(i,{kind:"workflow-pointer",worker_id:s,worker_session_id:a,replacement:l})},evidence(i,s,a){let l=t.get(i);if(l==null)throw new Error("unknown durable RedSkills ACP session");return t.set(i,{...l,session_evidence:[...l.session_evidence,{worker_id:s,...a,retention:"evidence"}]}),n()},checkpoint(i,s,a){return o(i,{kind:"checkpoint",stop_reason:s.stopReason,...a==null?{}:{workflow_outcome:a}})},permission(i,s,a,l,c){let d=c==null?void 0:s.options.find(u=>u.optionId===c);return o(i,{kind:"permission",tool_call_id:s.toolCall.toolCallId,policy_key:a,decision:l,...d==null?{}:{option_id:d.optionId,option_kind:d.kind}})},recovery(i){let s=t.get(i);if(s==null)throw new Error("unknown durable RedSkills ACP session");return{version:1,source:"redskilled-public-journal",public_session_id:i,completed_turns:s.entries.filter(a=>a.kind==="checkpoint").length,entries:[...s.entries]}},retake(i,s){let a=t.get(i);if(!(a==null||a.project_id!==s))return{version:1,public_session_id:i,evidence:[...a.session_evidence]}}}}function DQ(e){let t=Vv(e),r=Vv(t?.redskills),n=Vv(r?.sessionEvidence),o=CQ(n?.provider),i=n?.availability,s=CQ(n?.reference);if(!(o==null||i!=="available"&&i!=="absent"&&i!=="inaccessible")&&!(i!=="absent"&&s==null))return{provider:o,availability:i,...s==null?{}:{reference:s}}}async function tLe(e){let t;try{t=await YNe(e,"utf8")}catch(n){if(n.code==="ENOENT")return new Map;throw n}let r=nLe(t);return oLe(r)?new Map(r.sessions.map(n=>[n.public_session_id,{...n,session_evidence:n.session_evidence??[]}])):new Map}async function rLe(e,t){await ZNe($Q(e),{recursive:!0,mode:448});let r=`${e}.${process.pid}.${JNe()}.tmp`;await XNe(r,`${Le(t)}
338
338
  `,{encoding:"utf8",mode:384}),await QNe(r,e)}function nLe(e){let t=e.trim();if(!t)return null;try{return kt(t)}catch{return null}}function oLe(e){if(e==null||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.version===1&&Array.isArray(t.sessions)&&t.sessions.every(r=>{if(r==null||typeof r!="object"||Array.isArray(r))return!1;let n=r;return typeof n.public_session_id=="string"&&typeof n.project_id=="string"&&typeof n.project_label=="string"&&typeof n.workspace_path=="string"&&Array.isArray(n.entries)&&(n.session_evidence==null||Array.isArray(n.session_evidence)&&n.session_evidence.every(iLe))})}function iLe(e){let t=Vv(e);return typeof t?.worker_id=="string"&&typeof t.provider=="string"&&(t.availability==="available"||t.availability==="absent"||t.availability==="inaccessible")&&t.retention==="evidence"&&(t.reference==null||typeof t.reference=="string")}function Vv(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function CQ(e){return typeof e=="string"&&e.trim()!==""?e:void 0}import{execFile as NQ}from"node:child_process";import{mkdir as jQ,rm as sLe}from"node:fs/promises";import{tmpdir as aLe,userInfo as lLe}from"node:os";import{join as ON}from"node:path";var LQ=12e4,cLe="red-skills",dLe="workers",uLe="worktree",Nh=class extends Error{constructor(t){super(t),this.name="WorkerWorkspaceError"}};function FQ(e={}){let t=e.uid??process.getuid?.()??lLe().username,r=String(t).trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(r==="")throw new Nh("redskilled cannot name a Worker workspace root without a user");return ON(e.tmpDir??aLe(),`${cLe}-${r}`,dLe)}function GQ(e,t){return ON(e,mLe(t))}async function BQ(e){let t=e.git??hLe,r=GQ(e.root,e.workerId),n=ON(r,uLe);if(await jQ(r,{recursive:!0,mode:448}),!(await t(e.projectWorkspacePath,["rev-parse","--is-inside-work-tree"])==="true"))return await jQ(n,{recursive:!0,mode:448}),{workerId:e.workerId,root:e.root,workspacePath:r,worktreePath:n};if(e.trunk!=null){let s=e.trunk,l=(MQ.get(e.projectWorkspacePath)??Promise.resolve()).then(async()=>{let c=s.branch??await t(e.projectWorkspacePath,["symbolic-ref","--short","HEAD"])??"main",d=fLe(s.remoteUrl),u=e.git!=null?await t(e.projectWorkspacePath,["fetch","--quiet",d,c])!==void 0?{ok:!0}:{ok:!1,detail:"the injected git runner refused"}:await pLe(e.projectWorkspacePath,["fetch","--quiet",d,c]);u.ok?await t(e.projectWorkspacePath,["reset","--hard","FETCH_HEAD"]):process.stderr.write(`redskilled: Worker ${e.workerId} forks a STALE mirror \u2014 the trunk fetch from ${d} failed (${u.detail}), so this Worker's base and its origin predate today's ${c}
339
- `)}).catch(()=>{});MQ.set(e.projectWorkspacePath,l),await l}await t(e.projectWorkspacePath,["clone","--no-hardlinks","--quiet","--",e.projectWorkspacePath,n],!0);let i=await t(n,["rev-parse","HEAD"]);return{workerId:e.workerId,root:e.root,workspacePath:r,worktreePath:n,...i==null?{}:{baseCommit:i}}}var MQ=new Map;async function pLe(e,t){return await new Promise(r=>{NQ("git",[...t],{cwd:e,encoding:"utf8",timeout:LQ,windowsHide:!0},(n,o,i)=>{n==null?r({ok:!0}):r({ok:!1,detail:(i.trim()||n.message).slice(0,300)})})})}function fLe(e){let t=/^git@github\.com:(.+?)(?:\.git)?$/.exec(e);if(t!=null)return`https://github.com/${t[1]}.git`;let r=/^ssh:\/\/git@github\.com\/(.+?)(?:\.git)?$/.exec(e);return r!=null?`https://github.com/${r[1]}.git`:e}async function Lh(e){let t=GQ(e.root,e.workerId);if(e.workspacePath!==t)throw new Nh(`redskilled refuses to release ${JSON.stringify(e.workspacePath)}: Worker ${e.workerId} owns ${JSON.stringify(t)} under its host root`);await sLe(e.workspacePath,{recursive:!0,force:!0})}function mLe(e){let t=e.trim();if(t===""||t==="."||t===".."||/[/\\]/.test(t))throw new Nh(`invalid Worker id ${JSON.stringify(e)}: it would escape the host's workspace root.`);return t}async function hLe(e,t,r=!1){return await new Promise((n,o)=>{NQ("git",[...t],{cwd:e,encoding:"utf8",timeout:LQ,windowsHide:!0},(i,s)=>{if(i!=null){r?o(i):n(void 0);return}let a=s.trim();n(a===""?void 0:a)})})}async function ac(e,t,r,n,o,i,s,a){let l=UQ(6).toString("hex"),c=d3(e.paths,l),d=$i((e.hostState?.().workers??[]).map(I=>I.worker_id)),u=await BQ({root:e.workspaceRoot??FQ(),workerId:d,projectWorkspacePath:r.project.workspacePath,...r.project.remoteUrl==null?{}:{trunk:{remoteUrl:r.project.remoteUrl}}}),p=await CY(c),f=async I=>{throw p.server.close(),await As(c),await Lh(u).catch(()=>{}),I},h=RLe(r.request._meta)??"redcode",g;try{await xQ(h),g=e.startWorker(wLe(r.project,u,c,e.paths.runtimeDir,a?.workerKind,h))}catch(I){return await f(I)}let k;try{k=await Ku(p.connected,1e4,"native ACP Worker rendezvous")}catch(I){return await f(I)}p.server.close();let _="",S,P={},A=TQ({...e.githubGateway==null?{gateway:void 0}:{gateway:e.githubGateway},held:()=>{let I=P.worker;if(!(I==null||I.cleaned))return{workerId:I.workerId,worktreePath:u.worktreePath,project:r.project}}}),E=gv({name:"redskilled"}).onNotification(Te.client.session.update,async({params:I})=>{let j=I._meta?.redskills,W={...I,sessionId:n,_meta:{...I._meta??{},redskills:{...j??{},authority:"redskilled",workerId:g.worker.worker_id,...a==null?{}:{dispatch:a},...j?.lifecycle==null?{}:{lifecycle:{...j.lifecycle,workerId:g.worker.worker_id,...a==null?{}:{dispatch:a}}}}}};await t.update(n,I.update),await o(Te.client.session.update,W)}).onRequest(Te.client.session.requestPermission,({params:I})=>i({...I,sessionId:n})),O=e.githubGateway==null?void 0:qv({gateway:e.githubGateway,scopedProject:()=>r.project});for(let I of[...A.bindings,...O?.bindings??[]])E.onRequest(I.method,I.params,({params:j})=>I.handle({params:j,client:void 0}));let D=E.connect(Hu(k));try{let I=await D.agent.request(Te.agent.initialize,{protocolVersion:Li,clientCapabilities:{},clientInfo:{name:"redskilled",version:"1"},_meta:{redskills:{wireMajor:to}}});oc(I._meta,!0);let j=s?t.recovery(n):void 0,W=j==null?void 0:dN(r.request._meta,j),X=a==null?W:{...W??{},redskills:{...W?.redskills??{},dispatch:a}},ce=await D.agent.request(Te.agent.session.new,{cwd:u.worktreePath,mcpServers:r.request.mcpServers,...r.request.additionalDirectories==null?{}:{additionalDirectories:r.request.additionalDirectories},...X==null?{}:{_meta:X}});_=ce.sessionId,await t.worker(n,g.worker.worker_id,_,s);let ue=DQ(ce._meta);ue!=null&&(S=ue,await t.evidence(n,g.worker.worker_id,ue))}catch(I){throw D.close(),k.destroy(),await As(c),await Lh(u).catch(()=>{}),I}let z={workerId:g.worker.worker_id,workspace:u,evidence:{root:e.evidenceRoot??H9(bLe()),ttlMs:e.evidenceTtlMs??Gl,...g.worker.log_path==null?{}:{logPath:g.worker.log_path},...S==null?{}:{sessionArtifact:S}},downstreamSessionId:_,connection:D,socket:k,endpoint:c,publicSessionId:n,notify:o,...a==null?{}:{dispatch:a},cancelled:!1,cleaned:!1};return P.worker=z,z}function wLe(e,t,r,n,o,i="redcode"){let s=process.argv[1];if(s==null||s==="")throw new Error("redskilled cannot resolve its Worker entry");let a=vLe(wQ(i));return{worker_id:t.workerId,project_label:e.projectLabel,workspace_path:t.worktreePath,env:{...AY(o),...RQ(a.agent,t.workspacePath)},command:process.execPath,args:[...process.execArgv,s,"acp-worker","--socket",r,"--child-agent",a.agent,"--child-command",a.command,...a.args.flatMap(l=>["--child-arg",l])],log_path:qQ(n,"acp-workers",`${UQ(6).toString("hex")}.toonl`)}}function vLe(e){if(_Le(e.command)||e.command.includes("/")||e.command.includes("\\"))return e;let t=process.platform==="win32"?(process.env.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";"):[""];for(let r of(process.env.PATH??"").split(kLe))if(r!=="")for(let n of t){let o=qQ(r,`${e.command}${n}`);try{return yLe(o,gLe.X_OK),{...e,command:o}}catch{}}return e}function RLe(e){let t=e?.redskills?.runner;return typeof t=="string"&&Ps.includes(t)?t:null}function WQ(e){return async t=>{let r=e.project(),n=SLe(),o={request:{cwd:r.workspacePath,mcpServers:[]},project:r,dispatchJournal:jh()};await e.sessionJournal.create(n,r),e.sessions.set(n,o);let i;try{i=await ac({paths:e.paths,startWorker:e.startWorker,hostState:e.hostState},e.sessionJournal,o,n,e.forward(n),s=>e.permission(n,s),!1,t)}catch(s){throw e.sessions.delete(n),s}return e.active.set(n,i),{worker_id:i.workerId,session_id:n}}}import{randomUUID as xLe}from"node:crypto";var g_t=xe.goDispatch;function ELe(e){let t=e.trim();if(t==="")throw ne.invalidParams({},"go_dispatch requires a non-empty demand");return{title:`/go: ${(t.split(`
339
+ `)}).catch(()=>{});MQ.set(e.projectWorkspacePath,l),await l}await t(e.projectWorkspacePath,["clone","--no-hardlinks","--quiet","--",e.projectWorkspacePath,n],!0);let i=await t(n,["rev-parse","HEAD"]);return{workerId:e.workerId,root:e.root,workspacePath:r,worktreePath:n,...i==null?{}:{baseCommit:i}}}var MQ=new Map;async function pLe(e,t){return await new Promise(r=>{NQ("git",[...t],{cwd:e,encoding:"utf8",timeout:LQ,windowsHide:!0},(n,o,i)=>{n==null?r({ok:!0}):r({ok:!1,detail:(i.trim()||n.message).slice(0,300)})})})}function fLe(e){let t=/^git@github\.com:(.+?)(?:\.git)?$/.exec(e);if(t!=null)return`https://github.com/${t[1]}.git`;let r=/^ssh:\/\/git@github\.com\/(.+?)(?:\.git)?$/.exec(e);return r!=null?`https://github.com/${r[1]}.git`:e}async function Lh(e){let t=GQ(e.root,e.workerId);if(e.workspacePath!==t)throw new Nh(`redskilled refuses to release ${JSON.stringify(e.workspacePath)}: Worker ${e.workerId} owns ${JSON.stringify(t)} under its host root`);await sLe(e.workspacePath,{recursive:!0,force:!0})}function mLe(e){let t=e.trim();if(t===""||t==="."||t===".."||/[/\\]/.test(t))throw new Nh(`invalid Worker id ${JSON.stringify(e)}: it would escape the host's workspace root.`);return t}async function hLe(e,t,r=!1){return await new Promise((n,o)=>{NQ("git",[...t],{cwd:e,encoding:"utf8",timeout:LQ,windowsHide:!0},(i,s)=>{if(i!=null){r?o(i):n(void 0);return}let a=s.trim();n(a===""?void 0:a)})})}async function ac(e,t,r,n,o,i,s,a){let l=UQ(6).toString("hex"),c=d3(e.paths,l),d=$i((e.hostState?.().workers??[]).map(I=>I.worker_id)),u=await BQ({root:e.workspaceRoot??FQ(),workerId:d,projectWorkspacePath:r.project.workspacePath,...r.project.remoteUrl==null?{}:{trunk:{remoteUrl:r.project.remoteUrl}}}),p=await CY(c),f=async I=>{throw p.server.close(),await As(c),await Lh(u).catch(()=>{}),I},h=RLe(r.request._meta)??"redcode",g;try{await xQ(h),g=e.startWorker(wLe(r.project,u,c,e.paths.runtimeDir,a?.workerKind,h))}catch(I){return await f(I)}let k;try{k=await Ku(p.connected,1e4,"native ACP Worker rendezvous")}catch(I){return await f(I)}p.server.close();let _="",S,P={},A=TQ({...e.githubGateway==null?{gateway:void 0}:{gateway:e.githubGateway},held:()=>{let I=P.worker;if(!(I==null||I.cleaned))return{workerId:I.workerId,worktreePath:u.worktreePath,project:r.project}}}),E=gv({name:"redskilled"}).onNotification(Te.client.session.update,async({params:I})=>{let j=I._meta?.redskills,W={...I,sessionId:n,_meta:{...I._meta??{},redskills:{...j??{},authority:"redskilled",workerId:g.worker.worker_id,...a==null?{}:{dispatch:a},...j?.lifecycle==null?{}:{lifecycle:{...j.lifecycle,workerId:g.worker.worker_id,...a==null?{}:{dispatch:a}}}}}};await t.update(n,I.update),await o(Te.client.session.update,W)}).onRequest(Te.client.session.requestPermission,({params:I})=>i({...I,sessionId:n})),O=e.githubGateway==null?void 0:qv({gateway:e.githubGateway,scopedProject:()=>r.project});for(let I of[...A.bindings,...O?.bindings??[]])E.onRequest(I.method,I.params,({params:j})=>I.handle({params:j,client:void 0}));let D=E.connect(Hu(k));try{let I=await D.agent.request(Te.agent.initialize,{protocolVersion:Li,clientCapabilities:{},clientInfo:{name:"redskilled",version:"1"},_meta:{redskills:{wireMajor:to}}});oc(I._meta,!0);let j=s?t.recovery(n):void 0,W=j==null?void 0:dN(r.request._meta,j),X=a==null?W:{...W??{},redskills:{...W?.redskills??{},dispatch:a}},ce=await D.agent.request(Te.agent.session.new,{cwd:u.worktreePath,mcpServers:r.request.mcpServers,...r.request.additionalDirectories==null?{}:{additionalDirectories:r.request.additionalDirectories},...X==null?{}:{_meta:X}});_=ce.sessionId,await t.worker(n,g.worker.worker_id,_,s);let ue=DQ(ce._meta);ue!=null&&(S=ue,await t.evidence(n,g.worker.worker_id,ue))}catch(I){throw D.close(),k.destroy(),await As(c),await Lh(u).catch(()=>{}),I}let z={workerId:g.worker.worker_id,workspace:u,evidence:{root:e.evidenceRoot??H9(bLe()),ttlMs:e.evidenceTtlMs??Gl,...g.worker.log_path==null?{}:{logPath:g.worker.log_path},...S==null?{}:{sessionArtifact:S}},downstreamSessionId:_,connection:D,socket:k,endpoint:c,publicSessionId:n,notify:o,...a==null?{}:{dispatch:a},cancelled:!1,cleaned:!1};return P.worker=z,z}function wLe(e,t,r,n,o,i="redcode"){let s=process.argv[1];if(s==null||s==="")throw new Error("redskilled cannot resolve its Worker entry");let a=vLe(wQ(i));return{worker_id:t.workerId,project_label:e.projectLabel,workspace_path:t.worktreePath,env:{...AY(o),...RQ(a.agent,t.workspacePath)},command:process.execPath,args:[...process.execArgv,s,"acp-worker","--socket",r,"--child-agent",a.agent,"--child-command",a.command,...a.args.map(l=>`--child-arg=${l}`)],log_path:qQ(n,"acp-workers",`${UQ(6).toString("hex")}.toonl`)}}function vLe(e){if(_Le(e.command)||e.command.includes("/")||e.command.includes("\\"))return e;let t=process.platform==="win32"?(process.env.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";"):[""];for(let r of(process.env.PATH??"").split(kLe))if(r!=="")for(let n of t){let o=qQ(r,`${e.command}${n}`);try{return yLe(o,gLe.X_OK),{...e,command:o}}catch{}}return e}function RLe(e){let t=e?.redskills?.runner;return typeof t=="string"&&Ps.includes(t)?t:null}function WQ(e){return async t=>{let r=e.project(),n=SLe(),o={request:{cwd:r.workspacePath,mcpServers:[]},project:r,dispatchJournal:jh()};await e.sessionJournal.create(n,r),e.sessions.set(n,o);let i;try{i=await ac({paths:e.paths,startWorker:e.startWorker,hostState:e.hostState},e.sessionJournal,o,n,e.forward(n),s=>e.permission(n,s),!1,t)}catch(s){throw e.sessions.delete(n),s}return e.active.set(n,i),{worker_id:i.workerId,session_id:n}}}import{randomUUID as xLe}from"node:crypto";var g_t=xe.goDispatch;function ELe(e){let t=e.trim();if(t==="")throw ne.invalidParams({},"go_dispatch requires a non-empty demand");return{title:`/go: ${(t.split(`
340
340
  `,1)[0]??"").trim().slice(0,72)||"dispatch"}`,body:["## Demand","",t,"","---","",`\u{1F916} Disposable dispatch Ticket, minted by \`${xe.goDispatch}\` into the`,`isolated \`${sc}\` lane \u2014 never \`ready-for-agent\`, so the running drain`,"cannot claim it. Its dedicated Worker owns it, and it closes with that Worker's PR."].join(`
341
341
  `),labels:[sc]}}function TLe(e){return async t=>{let r=ELe(t.params.demand),n=await e.tracker.mint(r);if(!Number.isInteger(n)||n<=0)throw new Error(`the Ticket tracker answered ${String(n)} instead of a Ticket number`);let o={version:1,workerKind:"go",ticket:n,selector:{kind:"issues",numbers:[n],lane:sc}},i;try{i=await e.admit(o,t)}catch(s){try{await e.tracker.dispose?.(n)}catch(a){throw new AggregateError([s,a],`Worker admission failed and disposable Ticket #${n} could not be closed`)}throw s}return{version:1,worker_id:i.worker_id,ticket:n,lane:sc,...i.session_id==null?{}:{session_id:i.session_id}}}}function HQ(e){return{domain:"go",bindings:[Mt(xe.goDispatch,PY,TLe(e))],capability:{goDispatch:{version:TY.version,methods:[xe.goDispatch],lane:sc}}}}function KQ(e,t){let r=Dh(e,t);return{async mint(n){let o=await r({params:{idempotency_key:`go-dispatch:${xLe()}`,write:{kind:"issue-publication",title:n.title,body:n.body,labels:[...n.labels]}}});return PLe(o.value)}}}function PLe(e){let t=e!=null&&typeof e=="object"?e.number:void 0;if(!Number.isInteger(t)||Number(t)<=0)throw new Error("the Ticket tracker published no Ticket number for this dispatch");return Number(t)}var ALe=xe.hostState;function VQ(e){return{domain:"host",bindings:[Mt(ALe,Uv,()=>e.scopedState())]}}var R_t=xe.memoryCall;function JQ(e){return{domain:"memory",bindings:[Mt(xe.memoryCall,IY,({params:t})=>e.store.call(e.scopedProject(),t))],capability:{memory:{version:1,methods:[xe.memoryCall],tools:cN}}}}var A_t=xe.metrics,ILe=Wu("metrics requests accept no caller-controlled scope, window or series selector");function ZQ(e){let t=e.snapshot??ik;return{domain:"telemetry",bindings:[Mt(xe.metrics,ILe,()=>{if(!e.hostAdministration)throw ne.invalidRequest("this project-scoped ACP connection has no host-administrative authority");return t()})],...e.hostAdministration?{capability:{metrics:{version:1,methods:[xe.metrics]}}}:{}}}import{execFile as CLe}from"node:child_process";var $Le=3e4,zN="manual",OLe=".red/tmp/worktrees",QQ=["workers","go-workers","scout-workers"];function zLe(e){return`${OLe}/${zN}/${e}`}function XQ(e){let t=e.registeredCheckout();if(t==null)throw bN(Ch.checkoutNotRegistered,"redskilled holds no registration for this checkout's Project, so it can name neither its trunk nor its lanes; register the Project with the daemon before asking for a worktree");return t}function DLe(e){let t=e.git??eX;return async r=>{let n=XQ(e),o=n.trunk?.remote??"origin",i=r.params.base??n.trunk?.branch;if(i==null||i==="")throw bN(Ch.trunkUnknown,"this Project's registration states no trunk branch, so worktree_add has nothing to fork from; name a base, or re-register with explicit git coordinates");let s=zLe(r.params.slug),a=r.params.branch??`afk/${r.params.slug}`,l=`${o}/${i}`;return await t(n.checkout_root,["fetch",o,i]),await t(n.checkout_root,["worktree","add",s,"-b",a,l]),{version:1,kind:"interactive",path:s,branch:a,base:l,lane:zN,project_label:n.project_label}}}function jLe(e){let t=e.git??eX;return async()=>{let r=XQ(e),n=await t(r.checkout_root,["worktree","list","--porcelain"]),o=MLe(n).map(s=>NLe(r.checkout_root,s)),i=e.workerWorktrees().map(s=>({kind:"worker",path:s.path,branch:null,worker_id:s.worker_id}));return{version:1,project_label:r.project_label,worktrees:[...o,...i]}}}function MLe(e){let t=[],r,n=null,o=()=>{r!=null&&t.push({path:r,branch:n}),r=void 0,n=null};for(let i of e.split(`
342
342
  `)){let s=i.trimEnd();s.startsWith("worktree ")?(o(),r=s.slice(9)):s.startsWith("branch ")&&(n=s.slice(7).replace(/^refs\/heads\//,""))}return o(),t}function NLe(e,t){let r=GLe(e,t.path),n=r===null?"unregistered":LLe(r),o=r===null?void 0:FLe(r);return{kind:n,path:t.path,branch:t.branch,...o===void 0?{}:{lane:o}}}function LLe(e){if(e==="")return"checkout";let t=e.split("/");return t[0]!==".red"||t[1]!=="tmp"||t[2]===void 0?"unregistered":t[2]==="worktrees"?t[3]===void 0?"unregistered":"interactive":QQ.includes(t[2])&&t.at(-1)==="worktree"?"worker":"unregistered"}function FLe(e){let t=e.split("/");if(!(t[0]!==".red"||t[1]!=="tmp"))return t[2]==="worktrees"?t[3]:QQ.includes(t[2]??"")?t[2]:void 0}function GLe(e,t){let[r,n]=[YQ(e),YQ(t)];return n===r?"":n.startsWith(`${r}/`)?n.slice(r.length+1):null}function YQ(e){return e.replace(/\\/g,"/").replace(/\/+$/,"")}function eX(e,t){return new Promise((r,n)=>{CLe("git",[...t],{cwd:e,encoding:"utf8",timeout:$Le,windowsHide:!0},(o,i,s)=>{if(o!=null){n(new Error(s.trim()||o.message));return}r(i)})})}function tX(e){return{domain:"worktree",bindings:[Mt(xe.worktreeAdd,NY,DLe(e)),Mt(xe.worktreeList,Wu("worktree_list names no checkout, Project or lane; the connection's registration decides"),jLe(e))],capability:{worktree:{version:MY.version,methods:[xe.worktreeAdd,xe.worktreeList],lane:zN}}}}import{randomUUID as t1e}from"node:crypto";import{mkdir as r1e,readFile as n1e,rename as o1e,writeFile as i1e}from"node:fs/promises";import{dirname as mX,join as s1e}from"node:path";var Bh=50,jN=15e3,nX=2*jN,BLe=32;function oX(e,t){if(t==null)return e;let r=new Map(t.projects.filter(n=>n.items!=null).map(n=>[n.project_label,{items:n.items,tickets:n.tickets??[]}]));return{...e,projects:e.projects.map(n=>{if(n.items!=null)return n;let o=r.get(n.project_label);return o==null?n:{...n,items:[...o.items],tickets:[...o.tickets]}})}}function ULe(e){return iX(e).map(t=>t.id)}function iX(e){let t=[];for(let r of e){if(t.length>=BLe)break;let n=r.number;typeof n!="number"||!Number.isInteger(n)||n<=0||t.push({id:String(n),title:typeof r.title=="string"?r.title:"",labels:Array.isArray(r.labels)?r.labels.map(o=>typeof o=="string"?o:o?.name).filter(o=>typeof o=="string"):[]})}return t}function qLe(e,t=Bh){if(MN(e),!Number.isInteger(t)||t<=0)throw new Error(`redskilled queue discovery needs a whole, positive batch size, not ${JSON.stringify(t)}`);let r=[];for(let n=0;n<e.length;n+=t)r.push(e.slice(n,n+t));return r}function sX(e,t={}){let r=t.batchSize??Bh;if(MN(e),e.length>r)throw new Error(`redskilled queue discovery spans at most ${r} selectors in one query, and this batch holds ${e.length}: split it with planQueueDiscoveryBatches rather than dropping the remainder`);let n=e.map((s,a)=>({alias:`q${a}`,project:s}));return{query:["query RedskilledQueueDiscovery {"," rateLimit { remaining resetAt }",...n.map(({alias:s,project:a})=>` ${s}: search(query: ${JSON.stringify(a.selector)}, type: ISSUE, first: 1) { issueCount }`),"}"].join(`
@@ -138,7 +138,7 @@ ${r.comment}`:r.comment}this.doc.range[2]=r.offset;break}default:this.errors.pus
138
138
  `)+1;for(;r!==0;)this.onNewLine(this.offset+r),r=this.source.indexOf(`
139
139
  `,r)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(t){let r=t.items[t.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,r.value){let n="end"in r.value?r.value.end:void 0;(Array.isArray(n)?n[n.length-1]:void 0)?.type==="comment"?n?.push(this.sourceToken):t.items.push({start:[this.sourceToken]})}else r.sep?r.sep.push(this.sourceToken):r.start.push(this.sourceToken);return;case"space":case"comment":if(r.value)t.items.push({start:[this.sourceToken]});else if(r.sep)r.sep.push(this.sourceToken);else{if(this.atIndentedComment(r.start,t.indent)){let s=t.items[t.items.length-2]?.value?.end;if(Array.isArray(s)){Hn(s,r.start),s.push(this.sourceToken),t.items.pop();return}}r.start.push(this.sourceToken)}return}if(this.indent>=t.indent){let n=!this.onKeyLine&&this.indent===t.indent,s=n&&(r.sep||r.explicitKey)&&this.type!=="seq-item-ind",i=[];if(s&&r.sep&&!r.value){let o=[];for(let a=0;a<r.sep.length;++a){let c=r.sep[a];switch(c.type){case"newline":o.push(a);break;case"space":break;case"comment":c.indent>t.indent&&(o.length=0);break;default:o.length=0}}o.length>=2&&(i=r.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":s||r.value?(i.push(this.sourceToken),t.items.push({start:i}),this.onKeyLine=!0):r.sep?r.sep.push(this.sourceToken):r.start.push(this.sourceToken);return;case"explicit-key-ind":!r.sep&&!r.explicitKey?(r.start.push(this.sourceToken),r.explicitKey=!0):s||r.value?(i.push(this.sourceToken),t.items.push({start:i,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(r.explicitKey)if(r.sep)if(r.value)t.items.push({start:[],key:null,sep:[this.sourceToken]});else if(qe(r.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]});else if(ap(r.key)&&!qe(r.sep,"newline")){let o=vt(r.start),a=r.key,c=r.sep;c.push(this.sourceToken),delete r.key,delete r.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:a,sep:c}]})}else i.length>0?r.sep=r.sep.concat(i,this.sourceToken):r.sep.push(this.sourceToken);else if(qe(r.start,"newline"))Object.assign(r,{key:null,sep:[this.sourceToken]});else{let o=vt(r.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]})}else r.sep?r.value||s?t.items.push({start:i,key:null,sep:[this.sourceToken]}):qe(r.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):r.sep.push(this.sourceToken):Object.assign(r,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let o=this.flowScalar(this.type);s||r.value?(t.items.push({start:i,key:o,sep:[]}),this.onKeyLine=!0):r.sep?this.stack.push(o):(Object.assign(r,{key:o,sep:[]}),this.onKeyLine=!0);return}default:{let o=this.startBlockValue(t);if(o){if(o.type==="block-seq"){if(!r.explicitKey&&r.sep&&!qe(r.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else n&&t.items.push({start:i});this.stack.push(o);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(t){let r=t.items[t.items.length-1];switch(this.type){case"newline":if(r.value){let n="end"in r.value?r.value.end:void 0;(Array.isArray(n)?n[n.length-1]:void 0)?.type==="comment"?n?.push(this.sourceToken):t.items.push({start:[this.sourceToken]})}else r.start.push(this.sourceToken);return;case"space":case"comment":if(r.value)t.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(r.start,t.indent)){let s=t.items[t.items.length-2]?.value?.end;if(Array.isArray(s)){Hn(s,r.start),s.push(this.sourceToken),t.items.pop();return}}r.start.push(this.sourceToken)}return;case"anchor":case"tag":if(r.value||this.indent<=t.indent)break;r.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==t.indent)break;r.value||qe(r.start,"seq-item-ind")?t.items.push({start:[this.sourceToken]}):r.start.push(this.sourceToken);return}if(this.indent>t.indent){let n=this.startBlockValue(t);if(n){this.stack.push(n);return}}yield*this.pop(),yield*this.step()}*flowCollection(t){let r=t.items[t.items.length-1];if(this.type==="flow-error-end"){let n;do yield*this.pop(),n=this.peek(1);while(n?.type==="flow-collection")}else if(t.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!r||r.sep?t.items.push({start:[this.sourceToken]}):r.start.push(this.sourceToken);return;case"map-value-ind":!r||r.value?t.items.push({start:[],key:null,sep:[this.sourceToken]}):r.sep?r.sep.push(this.sourceToken):Object.assign(r,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!r||r.value?t.items.push({start:[this.sourceToken]}):r.sep?r.sep.push(this.sourceToken):r.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let s=this.flowScalar(this.type);!r||r.value?t.items.push({start:[],key:s,sep:[]}):r.sep?this.stack.push(s):Object.assign(r,{key:s,sep:[]});return}case"flow-map-end":case"flow-seq-end":t.end.push(this.sourceToken);return}let n=this.startBlockValue(t);n?this.stack.push(n):(yield*this.pop(),yield*this.step())}else{let n=this.peek(2);if(n.type==="block-map"&&(this.type==="map-value-ind"&&n.indent===t.indent||this.type==="newline"&&!n.items[n.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&n.type!=="flow-collection"){let s=Vn(n),i=vt(s);op(t);let o=t.end.splice(1,t.end.length);o.push(this.sourceToken);let a={type:"block-map",offset:t.offset,indent:t.indent,items:[{start:i,key:t,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=a}else yield*this.lineEnd(t)}}flowScalar(t){if(this.onNewLine){let r=this.source.indexOf(`
140
140
  `)+1;for(;r!==0;)this.onNewLine(this.offset+r),r=this.source.indexOf(`
141
- `,r)+1}return{type:t,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(t){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let r=Vn(t),n=vt(r);return n.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let r=Vn(t),n=vt(r);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(t,r){return this.type!=="comment"||this.indent<=r?!1:t.every(n=>n.type==="newline"||n.type==="space")}*documentEnd(t){this.type!=="doc-mode"&&(t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(t){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}};cp.Parser=Io});var fp=P(ur=>{"use strict";var lp=To(),xE=tr(),lr=sr(),IE=bi(),NE=L(),LE=xo(),up=No();function dp(e){let t=e.prettyErrors!==!1;return{lineCounter:e.lineCounter||t&&new LE.LineCounter||null,prettyErrors:t}}function qE(e,t={}){let{lineCounter:r,prettyErrors:n}=dp(t),s=new up.Parser(r?.addNewLine),i=new lp.Composer(t),o=Array.from(i.compose(s.parse(e)));if(n&&r)for(let a of o)a.errors.forEach(lr.prettifyError(e,r)),a.warnings.forEach(lr.prettifyError(e,r));return o.length>0?o:Object.assign([],{empty:!0},i.streamInfo())}function pp(e,t={}){let{lineCounter:r,prettyErrors:n}=dp(t),s=new up.Parser(r?.addNewLine),i=new lp.Composer(t),o=null;for(let a of i.compose(s.parse(e),!0,e.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new lr.YAMLParseError(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&r&&(o.errors.forEach(lr.prettifyError(e,r)),o.warnings.forEach(lr.prettifyError(e,r))),o}function DE(e,t,r){let n;typeof t=="function"?n=t:r===void 0&&t&&typeof t=="object"&&(r=t);let s=pp(e,r);if(!s)return null;if(s.warnings.forEach(i=>IE.warn(s.options.logLevel,i)),s.errors.length>0){if(s.options.logLevel!=="silent")throw s.errors[0];s.errors=[]}return s.toJS(Object.assign({reviver:n},r))}function FE(e,t,r){let n=null;if(typeof t=="function"||Array.isArray(t)?n=t:r===void 0&&t&&(r=t),typeof r=="string"&&(r=r.length),typeof r=="number"){let s=Math.round(r);r=s<1?void 0:s>8?{indent:8}:{indent:s}}if(e===void 0){let{keepUndefined:s}=r??t??{};if(!s)return}return NE.isDocument(e)&&!n?e.toString(r):new xE.Document(e,n,r).toString(r)}ur.parse=DE;ur.parseAllDocuments=qE;ur.parseDocument=pp;ur.stringify=FE});var qo=P(q=>{"use strict";var jE=To(),BE=tr(),UE=eo(),Lo=sr(),ME=Ft(),De=L(),VE=xe(),HE=U(),KE=Ne(),WE=Le(),zE=Un(),JE=Co(),YE=xo(),QE=No(),Kn=fp(),hp=Nt();q.Composer=jE.Composer;q.Document=BE.Document;q.Schema=UE.Schema;q.YAMLError=Lo.YAMLError;q.YAMLParseError=Lo.YAMLParseError;q.YAMLWarning=Lo.YAMLWarning;q.Alias=ME.Alias;q.isAlias=De.isAlias;q.isCollection=De.isCollection;q.isDocument=De.isDocument;q.isMap=De.isMap;q.isNode=De.isNode;q.isPair=De.isPair;q.isScalar=De.isScalar;q.isSeq=De.isSeq;q.Pair=VE.Pair;q.Scalar=HE.Scalar;q.YAMLMap=KE.YAMLMap;q.YAMLSeq=WE.YAMLSeq;q.CST=zE;q.Lexer=JE.Lexer;q.LineCounter=YE.LineCounter;q.Parser=QE.Parser;q.parse=Kn.parse;q.parseAllDocuments=Kn.parseAllDocuments;q.parseDocument=Kn.parseDocument;q.stringify=Kn.stringify;q.visit=hp.visit;q.visitAsync=hp.visitAsync});import{readFileSync as ef}from"node:fs";import{join as tf,resolve as ta}from"node:path";function Ta(e){let t={app:e,version:bf(it("__RED_BUILD_VERSION__",()=>"4.1.13")??"0.0.0-dev"),gitSha:it("__RED_BUILD_GIT_SHA__",()=>"19ba7780d0a8be832373d24cce303d1833430d2d")??"unknown",buildTime:it("__RED_BUILD_TIME__",()=>"2026-08-21T01:42:13-03:00")??"unknown",bundleAsset:it("__RED_BUNDLE_ASSET__",()=>"release.bundle.min.mjs")??"unknown"},r=it("__REDDB_SDK_VERSION__",()=>""),n=it("__REDDB_BINARY_TAG__",()=>"");return r&&(t.reddbSdkVersion=r),n&&(t.reddbBinaryTag=n),t}function bf(e){return e.startsWith("v")?e.slice(1):e}function _a(e){return`${e.app} ${e.version} ${e.gitSha}`}function it(e,t){try{let r=t();return typeof r=="string"&&r.length>0?r:void 0}catch{return process.env[e.replace(/^__|__$/g,"")]}}function ka(e){return e==="single-object"?"rest":"graphql"}function va(e,t){return e==="stable-poll"?"rest":ka(t)}function Z(e){return{none:e}}function M(e,t,r,n,s,i,o){let a=typeof s=="string"?{fallback:s}:{fallback:null,noFallbackBecause:s.none};return{key:e,kind:"read",cardinality:t,volatility:r,surface:o??va(r,t),budget:n,...a,...o?{only:o}:{},why:i}}function ee(e,t,r,n,s){let i=typeof s=="string"?{fallback:s}:{fallback:null,noFallbackBecause:s.none};return{key:e,kind:"write",cardinality:"single-object",surface:t,budget:r,...i,why:n}}var Sa=[M("issue view","single-object","stable-poll","rest","graphql","one issue by number, repeatedly polled while usually unchanged; REST answers in one request"),M("pr view","single-object","stable-poll","rest","graphql","one pull request by number, polled per Worker per iteration"),M("repo view","single-object","stable-poll","rest","graphql","one repository's own metadata, repeatedly read while usually unchanged"),M("run view","single-object","stable-poll","rest",Z("Actions runs have no GraphQL resource"),"one Actions run repeatedly polled to terminal"),M("release view","single-object","stable-poll","rest",Z("release lookup has no GraphQL client method"),"one release by tag, repeatedly checked while usually absent or unchanged"),M("pr diff","single-object","one-shot","rest",Z("the complete diff is exposed as a REST media type"),"one pull request's diff, read once for review"),M("issue list","multi-node","stable-poll","rest","graphql","a repeatedly polled, usually-unchanged issue collection; REST can make an unchanged poll free"),M("pr list","multi-node","stable-poll","rest","graphql","a repeatedly polled, usually-unchanged pull-request collection; REST can make an unchanged poll free"),M("pr checks","multi-node","stable-poll","rest","graphql","check contexts are repeatedly polled while awaiting terminal state"),M("release list","multi-node","stable-poll","rest",Z("Releases has no GraphQL collection client method"),"release waits poll a usually-unchanged list"),M("run list","multi-node","stable-poll","rest",Z("Actions has no GraphQL collection client method"),"run waits poll a usually-unchanged list"),M("label list","multi-node","one-shot","graphql","rest","a label connection loaded once for the current operation"),M("issue list (search)","multi-node","stable-poll","search",Z("search is ineligible for diverted traffic"),"queue discovery polls usually-unchanged search results through the 30/min search connection"),M("pr list (search)","multi-node","stable-poll","search",Z("search is ineligible for diverted traffic"),"PR discovery polls usually-unchanged search results through the 30/min search connection"),M("search issues","multi-repository","one-shot","search",Z("search is ineligible for diverted traffic"),"a one-shot cross-repository read through the REST search endpoint, metered 30/min","rest"),M("search prs","multi-repository","one-shot","search",Z("search is ineligible for diverted traffic"),"a one-shot cross-repository read through the REST search endpoint, metered 30/min","rest"),M("search repos","multi-repository","one-shot","search",Z("search is ineligible for diverted traffic"),"a one-shot cross-repository read through the REST search endpoint, metered 30/min","rest"),M("api graphql","multi-node","one-shot","graphql",Z("the caller explicitly chose GraphQL"),"the caller supplies one explicit GraphQL query rather than a routed poll"),M("api rest","single-object","one-shot","rest",Z("the caller explicitly chose REST"),"the caller supplies one explicit REST path rather than a routed poll"),ee("issue create","rest","rest","the write plan POSTs to `repos/{o}/{r}/issues`; GraphQL exposes createIssue","graphql"),ee("issue edit","rest","rest","the write plan PATCHes labels and body; GraphQL exposes updateIssue","graphql"),ee("issue close","rest","rest","the write plan PATCHes issue state; GraphQL exposes closeIssue","graphql"),ee("issue reopen","graphql","graphql","gh uses reopenIssue; REST can PATCH the issue state to open","rest"),ee("issue comment","rest","rest","the write plan POSTs an issue comment; GraphQL exposes addComment","graphql"),ee("issue develop","graphql","graphql","linked-branch creation is a GraphQL mutation",Z("linked-branch creation has no REST mutation")),ee("pr create","rest","rest","the write plan POSTs a pull request; GraphQL exposes createPullRequest","graphql"),ee("pr comment","rest","rest","a pull request comment is an issue comment; GraphQL exposes addComment","graphql"),ee("pr merge","rest","rest","the default plan PUTs the merge; GraphQL exposes mergePullRequest","graphql"),ee("pr close","graphql","graphql","gh uses closePullRequest; REST can PATCH the pull request state","rest"),ee("pr edit","graphql","graphql","gh uses GraphQL mutations; REST can PATCH pull-request fields and issue labels","rest"),ee("pr ready","graphql","graphql","marking ready-for-review is a GraphQL mutation",Z("GitHub exposes no REST ready-for-review mutation")),ee("pr update-branch","rest","rest","the write plan PUTs update-branch; GraphQL exposes updatePullRequestBranch","graphql"),ee("label create","rest","rest","the write plan POSTs a label; GraphQL exposes createLabel","graphql")],q_=new Map(Sa.map(e=>[e.key,e]));var ss="RED_GITHUB_REQUEST_TIMEOUT_MS",ot=class extends Error{subject;timeoutMs;constructor(t,r,n){super(`GitHub ${t} passed its ${r}ms deadline and was abandoned; raise ${ss} if this host is genuinely this slow`,n),this.name="GithubTimeoutError",this.subject=t,this.timeoutMs=r}};function Ra(e){return e instanceof ot}function _r(e=process.env){let t=e[ss];if(t===void 0||t.trim()==="")return 3e4;let r=Number(t);return!Number.isFinite(r)||r<0?3e4:Math.trunc(r)}async function kr(e,t,r){if(!Number.isFinite(t)||t<=0)return await r();let n,s=new Promise((o,a)=>{n=setTimeout(()=>a(new ot(e,t)),t),n.unref?.()}),i=Promise.resolve().then(r);i.catch(()=>{});try{return await Promise.race([i,s])}finally{n!==void 0&&clearTimeout(n)}}function is(e={}){let t=e.fetchImpl??fetch,r=e.timeoutMs??_r();return!Number.isFinite(r)||r<=0?t:async(n,s)=>{let i=AbortSignal.timeout(r),o=s?.signal??null,a=o==null?i:AbortSignal.any([o,i]),c=wf(n);try{return await kr(c,r,async()=>await t(n,{...s??{},signal:a}))}catch(l){throw Ra(l)?l:i.aborted&&o?.aborted!==!0?new ot(c,r,{cause:l}):l}}}function wf(e){let t=typeof e=="string"?e:e instanceof URL?e.href:typeof e.url=="string"?e.url:"request";try{return new URL(t).pathname}catch{return t}}var vr="off";var Aa="RED_GITHUB_BUDGET_GATE";function Ga(e){if(e===!0)return"on";if(typeof e!="string")return vr;let t=e.trim().toLowerCase();return t==="on"||t==="enabled"||t==="true"?"on":vr}function os(e){return(e??vr)==="on"}function as(e=process.env){return Ga(e[Aa])}import{execFile as Yf}from"node:child_process";import{promisify as Qf}from"node:util";var at=class extends SyntaxError{line;source;reason;constructor(t,r,n={}){super(t===0?r:`line ${t}: ${r}`,n.cause===void 0?void 0:{cause:n.cause}),this.name="ToonError",this.line=t,this.source=n.source,this.reason=r}};function ve(e,t,r={}){return new at(e,t,r)}var Ef=/(?:^\uFEFF?|\n) *#/,cs=class{value;constructor(t){if(Ef.test(t))throw new TypeError(`Raw string must not contain a line starting with "#": ${JSON.stringify(t)}`);this.value=t}};function Me(e){return e instanceof cs}function Tf(e){return/^[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$/.test(e)}function _f(e){if(Object.is(e,-0))return"0";if(!Number.isFinite(e))throw ve(0,"number is not representable in TOON");return String(e)}function Sr(e){return e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="string"}function te(e,t){if(Me(e))return e.value;if(e===null)return"null";if(typeof e=="boolean")return e?"true":"false";if(typeof e=="number")return _f(e);if(typeof e=="string")return vf(e,t);throw ve(0,"not a primitive")}function kf(e){return/^[A-Za-z_][A-Za-z0-9_.]*$/.test(e)}function X(e){return kf(e)?e:Rr(e)}function vf(e,t){return ls(e,t)?Rr(e):e}function ls(e,t){return e===""||/^[ \t]|[ \t]$/.test(e)||e==="true"||e==="false"||e==="null"||Tf(e)||/[:"\\[\]{}]/.test(e)||/[\u0000-\u001f]/.test(e)||e.includes(t)||e.startsWith("-")||e.startsWith("#")}var Oa=/["\\\u0000-\u001f]/g;function Rr(e){return`"${Pa(e)}"`}function Pa(e){let t="",r=0;Oa.lastIndex=0;let n;for(;(n=Oa.exec(e))!==null;){let s=e.charCodeAt(n.index),i;s===34?i='\\"':s===92?i="\\\\":s===10?i="\\n":s===13?i="\\r":s===9?i="\\t":i=`\\u${s.toString(16).padStart(4,"0")}`,t+=e.slice(r,n.index)+i,r=n.index+1}return`${t}${e.slice(r)}`}var Ca={comma:",",tab:" ",pipe:"|"},Sf=Ca.comma;var Ar=1e3,$a=["type","kind","event"],Ve="|";var tk=Symbol("need line");var Of=/[\uD800-\uDFFF]/;function be(e){if(e===null)return null;if(Me(e))return e;if(typeof e=="object"&&e!==null&&"toJSON"in e&&typeof e.toJSON=="function"){let t=e.toJSON();if(t!==e)return be(t)}if(typeof e=="string")return Na(e,"string value"),e;if(typeof e=="boolean")return e;if(typeof e=="number")return Object.is(e,-0)?0:Number.isFinite(e)?e:null;if(typeof e=="bigint")return e>=Number.MIN_SAFE_INTEGER&&e<=Number.MAX_SAFE_INTEGER?Number(e):e.toString();if(e instanceof Date)return e.toISOString();if(Array.isArray(e))return e.map(be);if(e instanceof Set)return Array.from(e,be);if(e instanceof Map){let t={};for(let[r,n]of e)Gt(t,String(r),be(n));return t}if(J(e)){let t={};for(let r of Object.keys(e))Na(r,"object key"),Gt(t,r,be(e[r]));return t}return null}function Na(e,t){if(Of.test(e))for(let r=0;r<e.length;r+=1){let n=e.charCodeAt(r);if(n<55296||n>57343)continue;let s=e.charCodeAt(r+1);if(n<=56319&&s>=56320&&s<=57343){r+=1;continue}throw new TypeError(`Cannot encode ${t} containing an unpaired surrogate U+${n.toString(16).toUpperCase()} at index ${r}`)}}function J(e){if(e===null||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function ce(e){return e===null||Me(e)||["string","number","boolean"].includes(typeof e)}function Gt(e,t,r){Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0})}function La(e){return encodeURIComponent(e)}function Da(e){if(!J(e))return;let t=Object.entries(e);if(t.length===0)return;let r=[];for(let[s,i]of t){let o=Cf(i);if(o===void 0)return;r.push([s,o])}let n=[];for(let[s,i]of r)Nf(n,s,i);return n.join("")}function Cf(e){if(!Array.isArray(e)||e.length===0||!e.every(J))return;let t=$f(e);if(t===void 0)return;let r=e.map(a=>a[t]),n=xf(r);if(n===void 0)return;let s=If(e,t),i=new Map;for(let a of e){let c=a[t];i.has(c)||i.set(c,[]);let l={};for(let[d,p]of Object.entries(a))if(d!==t&&!s.includes(d)&&!us(p,d,l))return;i.get(c).push(l)}let o=[];for(let a of n.cycle){let c=i.get(a),l=qf(c);if(l===void 0||l.length===0)return;o.push({fields:l,label:a,rows:c})}return{common:s,commonRows:e.map(a=>Object.fromEntries(s.map(c=>[c,a[c]]))),discriminator:t,groups:o,order:n,rows:e}}function $f(e){return $a.find(t=>e.every(r=>typeof r[t]=="string"))}function xf(e){if(!(e.length<12))for(let t=2;t<=Math.min(8,Math.floor(e.length/3));t+=1){if(e.length%t!==0)continue;let r=e.slice(0,t);if(new Set(r).size<2||!e.every((o,a)=>o===r[a%t]))continue;let n=e.length/t;if(n<3)continue;let s=e.map(La).join(","),i=`cycle(${r.map(La).join(",")})*${n}`;if(i.length<=s.length*.4)return{cycle:r,encoded:i,repeats:n}}}function If(e,t){let r=[],n=Object.keys(e[0]),s=n.indexOf(t)+1;for(let i of n.slice(s).filter(o=>o!==t)){if(!Lf(i)||!e.every(o=>Object.prototype.hasOwnProperty.call(o,i))||!e.every(o=>Sr(o[i])))break;r.push(i)}return r}function Nf(e,t,r){e.push(X(t),`:
141
+ `,r)+1}return{type:t,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(t){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let r=Vn(t),n=vt(r);return n.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let r=Vn(t),n=vt(r);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(t,r){return this.type!=="comment"||this.indent<=r?!1:t.every(n=>n.type==="newline"||n.type==="space")}*documentEnd(t){this.type!=="doc-mode"&&(t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(t){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}};cp.Parser=Io});var fp=P(ur=>{"use strict";var lp=To(),xE=tr(),lr=sr(),IE=bi(),NE=L(),LE=xo(),up=No();function dp(e){let t=e.prettyErrors!==!1;return{lineCounter:e.lineCounter||t&&new LE.LineCounter||null,prettyErrors:t}}function qE(e,t={}){let{lineCounter:r,prettyErrors:n}=dp(t),s=new up.Parser(r?.addNewLine),i=new lp.Composer(t),o=Array.from(i.compose(s.parse(e)));if(n&&r)for(let a of o)a.errors.forEach(lr.prettifyError(e,r)),a.warnings.forEach(lr.prettifyError(e,r));return o.length>0?o:Object.assign([],{empty:!0},i.streamInfo())}function pp(e,t={}){let{lineCounter:r,prettyErrors:n}=dp(t),s=new up.Parser(r?.addNewLine),i=new lp.Composer(t),o=null;for(let a of i.compose(s.parse(e),!0,e.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new lr.YAMLParseError(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&r&&(o.errors.forEach(lr.prettifyError(e,r)),o.warnings.forEach(lr.prettifyError(e,r))),o}function DE(e,t,r){let n;typeof t=="function"?n=t:r===void 0&&t&&typeof t=="object"&&(r=t);let s=pp(e,r);if(!s)return null;if(s.warnings.forEach(i=>IE.warn(s.options.logLevel,i)),s.errors.length>0){if(s.options.logLevel!=="silent")throw s.errors[0];s.errors=[]}return s.toJS(Object.assign({reviver:n},r))}function FE(e,t,r){let n=null;if(typeof t=="function"||Array.isArray(t)?n=t:r===void 0&&t&&(r=t),typeof r=="string"&&(r=r.length),typeof r=="number"){let s=Math.round(r);r=s<1?void 0:s>8?{indent:8}:{indent:s}}if(e===void 0){let{keepUndefined:s}=r??t??{};if(!s)return}return NE.isDocument(e)&&!n?e.toString(r):new xE.Document(e,n,r).toString(r)}ur.parse=DE;ur.parseAllDocuments=qE;ur.parseDocument=pp;ur.stringify=FE});var qo=P(q=>{"use strict";var jE=To(),BE=tr(),UE=eo(),Lo=sr(),ME=Ft(),De=L(),VE=xe(),HE=U(),KE=Ne(),WE=Le(),zE=Un(),JE=Co(),YE=xo(),QE=No(),Kn=fp(),hp=Nt();q.Composer=jE.Composer;q.Document=BE.Document;q.Schema=UE.Schema;q.YAMLError=Lo.YAMLError;q.YAMLParseError=Lo.YAMLParseError;q.YAMLWarning=Lo.YAMLWarning;q.Alias=ME.Alias;q.isAlias=De.isAlias;q.isCollection=De.isCollection;q.isDocument=De.isDocument;q.isMap=De.isMap;q.isNode=De.isNode;q.isPair=De.isPair;q.isScalar=De.isScalar;q.isSeq=De.isSeq;q.Pair=VE.Pair;q.Scalar=HE.Scalar;q.YAMLMap=KE.YAMLMap;q.YAMLSeq=WE.YAMLSeq;q.CST=zE;q.Lexer=JE.Lexer;q.LineCounter=YE.LineCounter;q.Parser=QE.Parser;q.parse=Kn.parse;q.parseAllDocuments=Kn.parseAllDocuments;q.parseDocument=Kn.parseDocument;q.stringify=Kn.stringify;q.visit=hp.visit;q.visitAsync=hp.visitAsync});import{readFileSync as ef}from"node:fs";import{join as tf,resolve as ta}from"node:path";function Ta(e){let t={app:e,version:bf(it("__RED_BUILD_VERSION__",()=>"4.1.15")??"0.0.0-dev"),gitSha:it("__RED_BUILD_GIT_SHA__",()=>"7d65b0d974114dba01d5cad11de71362f5a8682f")??"unknown",buildTime:it("__RED_BUILD_TIME__",()=>"2026-08-21T02:38:22-03:00")??"unknown",bundleAsset:it("__RED_BUNDLE_ASSET__",()=>"release.bundle.min.mjs")??"unknown"},r=it("__REDDB_SDK_VERSION__",()=>""),n=it("__REDDB_BINARY_TAG__",()=>"");return r&&(t.reddbSdkVersion=r),n&&(t.reddbBinaryTag=n),t}function bf(e){return e.startsWith("v")?e.slice(1):e}function _a(e){return`${e.app} ${e.version} ${e.gitSha}`}function it(e,t){try{let r=t();return typeof r=="string"&&r.length>0?r:void 0}catch{return process.env[e.replace(/^__|__$/g,"")]}}function ka(e){return e==="single-object"?"rest":"graphql"}function va(e,t){return e==="stable-poll"?"rest":ka(t)}function Z(e){return{none:e}}function M(e,t,r,n,s,i,o){let a=typeof s=="string"?{fallback:s}:{fallback:null,noFallbackBecause:s.none};return{key:e,kind:"read",cardinality:t,volatility:r,surface:o??va(r,t),budget:n,...a,...o?{only:o}:{},why:i}}function ee(e,t,r,n,s){let i=typeof s=="string"?{fallback:s}:{fallback:null,noFallbackBecause:s.none};return{key:e,kind:"write",cardinality:"single-object",surface:t,budget:r,...i,why:n}}var Sa=[M("issue view","single-object","stable-poll","rest","graphql","one issue by number, repeatedly polled while usually unchanged; REST answers in one request"),M("pr view","single-object","stable-poll","rest","graphql","one pull request by number, polled per Worker per iteration"),M("repo view","single-object","stable-poll","rest","graphql","one repository's own metadata, repeatedly read while usually unchanged"),M("run view","single-object","stable-poll","rest",Z("Actions runs have no GraphQL resource"),"one Actions run repeatedly polled to terminal"),M("release view","single-object","stable-poll","rest",Z("release lookup has no GraphQL client method"),"one release by tag, repeatedly checked while usually absent or unchanged"),M("pr diff","single-object","one-shot","rest",Z("the complete diff is exposed as a REST media type"),"one pull request's diff, read once for review"),M("issue list","multi-node","stable-poll","rest","graphql","a repeatedly polled, usually-unchanged issue collection; REST can make an unchanged poll free"),M("pr list","multi-node","stable-poll","rest","graphql","a repeatedly polled, usually-unchanged pull-request collection; REST can make an unchanged poll free"),M("pr checks","multi-node","stable-poll","rest","graphql","check contexts are repeatedly polled while awaiting terminal state"),M("release list","multi-node","stable-poll","rest",Z("Releases has no GraphQL collection client method"),"release waits poll a usually-unchanged list"),M("run list","multi-node","stable-poll","rest",Z("Actions has no GraphQL collection client method"),"run waits poll a usually-unchanged list"),M("label list","multi-node","one-shot","graphql","rest","a label connection loaded once for the current operation"),M("issue list (search)","multi-node","stable-poll","search",Z("search is ineligible for diverted traffic"),"queue discovery polls usually-unchanged search results through the 30/min search connection"),M("pr list (search)","multi-node","stable-poll","search",Z("search is ineligible for diverted traffic"),"PR discovery polls usually-unchanged search results through the 30/min search connection"),M("search issues","multi-repository","one-shot","search",Z("search is ineligible for diverted traffic"),"a one-shot cross-repository read through the REST search endpoint, metered 30/min","rest"),M("search prs","multi-repository","one-shot","search",Z("search is ineligible for diverted traffic"),"a one-shot cross-repository read through the REST search endpoint, metered 30/min","rest"),M("search repos","multi-repository","one-shot","search",Z("search is ineligible for diverted traffic"),"a one-shot cross-repository read through the REST search endpoint, metered 30/min","rest"),M("api graphql","multi-node","one-shot","graphql",Z("the caller explicitly chose GraphQL"),"the caller supplies one explicit GraphQL query rather than a routed poll"),M("api rest","single-object","one-shot","rest",Z("the caller explicitly chose REST"),"the caller supplies one explicit REST path rather than a routed poll"),ee("issue create","rest","rest","the write plan POSTs to `repos/{o}/{r}/issues`; GraphQL exposes createIssue","graphql"),ee("issue edit","rest","rest","the write plan PATCHes labels and body; GraphQL exposes updateIssue","graphql"),ee("issue close","rest","rest","the write plan PATCHes issue state; GraphQL exposes closeIssue","graphql"),ee("issue reopen","graphql","graphql","gh uses reopenIssue; REST can PATCH the issue state to open","rest"),ee("issue comment","rest","rest","the write plan POSTs an issue comment; GraphQL exposes addComment","graphql"),ee("issue develop","graphql","graphql","linked-branch creation is a GraphQL mutation",Z("linked-branch creation has no REST mutation")),ee("pr create","rest","rest","the write plan POSTs a pull request; GraphQL exposes createPullRequest","graphql"),ee("pr comment","rest","rest","a pull request comment is an issue comment; GraphQL exposes addComment","graphql"),ee("pr merge","rest","rest","the default plan PUTs the merge; GraphQL exposes mergePullRequest","graphql"),ee("pr close","graphql","graphql","gh uses closePullRequest; REST can PATCH the pull request state","rest"),ee("pr edit","graphql","graphql","gh uses GraphQL mutations; REST can PATCH pull-request fields and issue labels","rest"),ee("pr ready","graphql","graphql","marking ready-for-review is a GraphQL mutation",Z("GitHub exposes no REST ready-for-review mutation")),ee("pr update-branch","rest","rest","the write plan PUTs update-branch; GraphQL exposes updatePullRequestBranch","graphql"),ee("label create","rest","rest","the write plan POSTs a label; GraphQL exposes createLabel","graphql")],q_=new Map(Sa.map(e=>[e.key,e]));var ss="RED_GITHUB_REQUEST_TIMEOUT_MS",ot=class extends Error{subject;timeoutMs;constructor(t,r,n){super(`GitHub ${t} passed its ${r}ms deadline and was abandoned; raise ${ss} if this host is genuinely this slow`,n),this.name="GithubTimeoutError",this.subject=t,this.timeoutMs=r}};function Ra(e){return e instanceof ot}function _r(e=process.env){let t=e[ss];if(t===void 0||t.trim()==="")return 3e4;let r=Number(t);return!Number.isFinite(r)||r<0?3e4:Math.trunc(r)}async function kr(e,t,r){if(!Number.isFinite(t)||t<=0)return await r();let n,s=new Promise((o,a)=>{n=setTimeout(()=>a(new ot(e,t)),t),n.unref?.()}),i=Promise.resolve().then(r);i.catch(()=>{});try{return await Promise.race([i,s])}finally{n!==void 0&&clearTimeout(n)}}function is(e={}){let t=e.fetchImpl??fetch,r=e.timeoutMs??_r();return!Number.isFinite(r)||r<=0?t:async(n,s)=>{let i=AbortSignal.timeout(r),o=s?.signal??null,a=o==null?i:AbortSignal.any([o,i]),c=wf(n);try{return await kr(c,r,async()=>await t(n,{...s??{},signal:a}))}catch(l){throw Ra(l)?l:i.aborted&&o?.aborted!==!0?new ot(c,r,{cause:l}):l}}}function wf(e){let t=typeof e=="string"?e:e instanceof URL?e.href:typeof e.url=="string"?e.url:"request";try{return new URL(t).pathname}catch{return t}}var vr="off";var Aa="RED_GITHUB_BUDGET_GATE";function Ga(e){if(e===!0)return"on";if(typeof e!="string")return vr;let t=e.trim().toLowerCase();return t==="on"||t==="enabled"||t==="true"?"on":vr}function os(e){return(e??vr)==="on"}function as(e=process.env){return Ga(e[Aa])}import{execFile as Yf}from"node:child_process";import{promisify as Qf}from"node:util";var at=class extends SyntaxError{line;source;reason;constructor(t,r,n={}){super(t===0?r:`line ${t}: ${r}`,n.cause===void 0?void 0:{cause:n.cause}),this.name="ToonError",this.line=t,this.source=n.source,this.reason=r}};function ve(e,t,r={}){return new at(e,t,r)}var Ef=/(?:^\uFEFF?|\n) *#/,cs=class{value;constructor(t){if(Ef.test(t))throw new TypeError(`Raw string must not contain a line starting with "#": ${JSON.stringify(t)}`);this.value=t}};function Me(e){return e instanceof cs}function Tf(e){return/^[+-]?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$/.test(e)}function _f(e){if(Object.is(e,-0))return"0";if(!Number.isFinite(e))throw ve(0,"number is not representable in TOON");return String(e)}function Sr(e){return e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="string"}function te(e,t){if(Me(e))return e.value;if(e===null)return"null";if(typeof e=="boolean")return e?"true":"false";if(typeof e=="number")return _f(e);if(typeof e=="string")return vf(e,t);throw ve(0,"not a primitive")}function kf(e){return/^[A-Za-z_][A-Za-z0-9_.]*$/.test(e)}function X(e){return kf(e)?e:Rr(e)}function vf(e,t){return ls(e,t)?Rr(e):e}function ls(e,t){return e===""||/^[ \t]|[ \t]$/.test(e)||e==="true"||e==="false"||e==="null"||Tf(e)||/[:"\\[\]{}]/.test(e)||/[\u0000-\u001f]/.test(e)||e.includes(t)||e.startsWith("-")||e.startsWith("#")}var Oa=/["\\\u0000-\u001f]/g;function Rr(e){return`"${Pa(e)}"`}function Pa(e){let t="",r=0;Oa.lastIndex=0;let n;for(;(n=Oa.exec(e))!==null;){let s=e.charCodeAt(n.index),i;s===34?i='\\"':s===92?i="\\\\":s===10?i="\\n":s===13?i="\\r":s===9?i="\\t":i=`\\u${s.toString(16).padStart(4,"0")}`,t+=e.slice(r,n.index)+i,r=n.index+1}return`${t}${e.slice(r)}`}var Ca={comma:",",tab:" ",pipe:"|"},Sf=Ca.comma;var Ar=1e3,$a=["type","kind","event"],Ve="|";var tk=Symbol("need line");var Of=/[\uD800-\uDFFF]/;function be(e){if(e===null)return null;if(Me(e))return e;if(typeof e=="object"&&e!==null&&"toJSON"in e&&typeof e.toJSON=="function"){let t=e.toJSON();if(t!==e)return be(t)}if(typeof e=="string")return Na(e,"string value"),e;if(typeof e=="boolean")return e;if(typeof e=="number")return Object.is(e,-0)?0:Number.isFinite(e)?e:null;if(typeof e=="bigint")return e>=Number.MIN_SAFE_INTEGER&&e<=Number.MAX_SAFE_INTEGER?Number(e):e.toString();if(e instanceof Date)return e.toISOString();if(Array.isArray(e))return e.map(be);if(e instanceof Set)return Array.from(e,be);if(e instanceof Map){let t={};for(let[r,n]of e)Gt(t,String(r),be(n));return t}if(J(e)){let t={};for(let r of Object.keys(e))Na(r,"object key"),Gt(t,r,be(e[r]));return t}return null}function Na(e,t){if(Of.test(e))for(let r=0;r<e.length;r+=1){let n=e.charCodeAt(r);if(n<55296||n>57343)continue;let s=e.charCodeAt(r+1);if(n<=56319&&s>=56320&&s<=57343){r+=1;continue}throw new TypeError(`Cannot encode ${t} containing an unpaired surrogate U+${n.toString(16).toUpperCase()} at index ${r}`)}}function J(e){if(e===null||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function ce(e){return e===null||Me(e)||["string","number","boolean"].includes(typeof e)}function Gt(e,t,r){Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0})}function La(e){return encodeURIComponent(e)}function Da(e){if(!J(e))return;let t=Object.entries(e);if(t.length===0)return;let r=[];for(let[s,i]of t){let o=Cf(i);if(o===void 0)return;r.push([s,o])}let n=[];for(let[s,i]of r)Nf(n,s,i);return n.join("")}function Cf(e){if(!Array.isArray(e)||e.length===0||!e.every(J))return;let t=$f(e);if(t===void 0)return;let r=e.map(a=>a[t]),n=xf(r);if(n===void 0)return;let s=If(e,t),i=new Map;for(let a of e){let c=a[t];i.has(c)||i.set(c,[]);let l={};for(let[d,p]of Object.entries(a))if(d!==t&&!s.includes(d)&&!us(p,d,l))return;i.get(c).push(l)}let o=[];for(let a of n.cycle){let c=i.get(a),l=qf(c);if(l===void 0||l.length===0)return;o.push({fields:l,label:a,rows:c})}return{common:s,commonRows:e.map(a=>Object.fromEntries(s.map(c=>[c,a[c]]))),discriminator:t,groups:o,order:n,rows:e}}function $f(e){return $a.find(t=>e.every(r=>typeof r[t]=="string"))}function xf(e){if(!(e.length<12))for(let t=2;t<=Math.min(8,Math.floor(e.length/3));t+=1){if(e.length%t!==0)continue;let r=e.slice(0,t);if(new Set(r).size<2||!e.every((o,a)=>o===r[a%t]))continue;let n=e.length/t;if(n<3)continue;let s=e.map(La).join(","),i=`cycle(${r.map(La).join(",")})*${n}`;if(i.length<=s.length*.4)return{cycle:r,encoded:i,repeats:n}}}function If(e,t){let r=[],n=Object.keys(e[0]),s=n.indexOf(t)+1;for(let i of n.slice(s).filter(o=>o!==t)){if(!Lf(i)||!e.every(o=>Object.prototype.hasOwnProperty.call(o,i))||!e.every(o=>Sr(o[i])))break;r.push(i)}return r}function Nf(e,t,r){e.push(X(t),`:
142
142
  `),e.push(" order: ",te(r.order.encoded,Ve),`
143
143
  `),e.push(" discriminator: ",te(r.discriminator,Ve),`
144
144
  `),e.push(" rows: ",String(r.rows.length),`
@@ -25,7 +25,7 @@ var PP=Object.create;var Vu=Object.defineProperty;var IP=Object.getOwnPropertyDe
25
25
  `;return E+=k,a+=1,c+=1,l+=k.length,E},declareLane(b,y){if(d)throw Y(0,"TOONL encoder is closed");let E=gL(y),w=Sd(zt,E),k=g(b);return rw(k.fields,E)?"":(k.fields=E,tw(b,w))},pushTagged(b,y){if(d)throw Y(0,"TOONL encoder is closed");let E=g(b),w=ow(sw(y),E.fieldsByShape),k=Sd(zt,w),S=w.map(C=>ve(y[C],zt)),T="";return rw(E.fields,w)||(E.fields=w,T+=tw(b,k)),`${T}${b}:${S.join(zt)}
26
26
  `},end(){return d?"":(d=!0,f())}}}var iw,aw,cw,G4,D4,uw=_(()=>{Kt();ga();so();nn();iw=[zt,"|"," "],aw=8,cw=/^[A-Za-z0-9_-]+$/,G4=new TextEncoder,D4=new TextDecoder});var z,J=_(()=>{ga();so();Yb();Kt();ro();Qb();so();Zs();nn();ma();ga();Xb();uw();z=bd});function _L(e){return e==="no-op"?0:e==="usage"?2:1}function ee(e){return Buffer.from(`${M(Rd(e))}
27
27
  `)}function Rd(e){let t={command:e.command,category:e.category,exit_code:e.exitCode??_L(e.category),error:e.error,help:[e.help]};return e.validFlags&&e.validFlags.length>0&&(t.valid_flags=[...e.validFlags]),e.diagnostics&&(t.diagnostics=EL(e.diagnostics,3)),t}function qe(e,t,r){let s=([r,t].find(i=>i.trim())??"").trim(),o=s.toLowerCase();return/\bgh\b/.test(e)&&Qy(s)?{command:e,category:"transient",error:oo(s)||"GitHub API rate limit exceeded",help:Yy,diagnostics:s}:/\bgh\b/.test(e)&&(o.includes("gh_token")||o.includes("not logged in")||o.includes("authentication"))?{command:e,category:"real-error",error:oo(s)||"GitHub authentication failed",help:"gh auth login",diagnostics:s}:o.includes("not a git repository")?{command:e,category:"real-error",error:oo(s)||"not a git repository",help:"git status",diagnostics:s}:o.includes("repository not found")||o.includes("could not resolve host")?{command:e,category:"real-error",error:oo(s)||"repository is unavailable",help:e.startsWith("gh ")?"gh repo view":"git remote -v",diagnostics:s}:{command:e,category:"real-error",error:oo(s)||"command failed",help:`${e} --help`,diagnostics:s}}function dw(e,t,r,n){return ee({command:e,category:"usage",error:`unknown flag: ${t}`,help:n,validFlags:r})}function oo(e){return e.split(/\r?\n/,1)[0]?.trim()??""}function EL(e,t){return e.split(/\r?\n/).slice(0,t).join(`
28
- `).trim()}var bt=_(()=>{"use strict";Xy();J()});function Ea(e){let t={app:e,version:IL(Jn("__RED_BUILD_VERSION__",()=>"4.1.13")??"0.0.0-dev"),gitSha:Jn("__RED_BUILD_GIT_SHA__",()=>"19ba7780d0a8be832373d24cce303d1833430d2d")??"unknown",buildTime:Jn("__RED_BUILD_TIME__",()=>"2026-08-21T01:42:13-03:00")??"unknown",bundleAsset:Jn("__RED_BUNDLE_ASSET__",()=>"rsp-core.bundle.min.mjs")??"unknown"},r=Jn("__REDDB_SDK_VERSION__",()=>"1.23.1"),n=Jn("__REDDB_BINARY_TAG__",()=>"v1.23.1");return r&&(t.reddbSdkVersion=r),n&&(t.reddbBinaryTag=n),t}function IL(e){return e.startsWith("v")?e.slice(1):e}function _w(e){return`${e.app} ${e.version} ${e.gitSha}`}function Jn(e,t){try{let r=t();return typeof r=="string"&&r.length>0?r:void 0}catch{return process.env[e.replace(/^__|__$/g,"")]}}var Td=_(()=>{});import{isAbsolute as LL,join as Yt,resolve as xd}from"node:path";function NL(e){if(!e)throw new Error("root is required");return e.replace(/\/$/,"")}function kw(e){return Yt(NL(e),Ew)}function Sw(e){return Yt(kw(e),"state")}function Rw(e){return Yt(kw(e),"tmp")}function ce(e){return Yt(Sw(e),"rsp")}function $L(e){return Yt(Sw(e),"red-skills.rdb")}function FL(e){return Yt(Rw(e),"red-skills.rdb")}function xw(e,t){let r=$L(e);if(t(r))return r;let n=FL(e);if(t(n))throw ML();return r}function ML(){return new Error("Legacy shared store found at .red/tmp/red-skills.rdb. Run `rsp setup` to migrate it to .red/state/red-skills.rdb before using rsp, memory, or brain.")}function Ow(e){return Yt(Rw(e),"waits")}function Aw(e){let t=e.overrideEnvVars??Od;for(let n of t){let s=e.env[n];if(s)return LL(s)?s:xd(e.startDir,s)}let r=xd(e.startDir);for(;;){if(e.exists(Yt(r,Ew)))return r;let n=Yt(r,".."),s=xd(n);if(s===r)break;r=s}return e.startDir}var Ew,GL,DL,Od,vw,Tw,et=_(()=>{Ew=".red",GL="MEMORY_ROOT",DL="RED_BRAIN_ROOT",Od=[GL,DL];vw=".red/state/red-skills.rdb";Tw=".red/tmp/red-skills.rdb"});function ge(e){return M(e)}var BL,jL,x3,Qt=_(()=>{J();et();BL=[{id:"memory.config",plugin:"memory",legacyPath:".red/memory/config.json",toonPath:".red/memory/config.toon",kind:"toon"}],jL=[{id:"dev.afk-history",plugin:"dev",legacyPath:".red/state/afk-history.jsonl",toonPath:".red/state/castle/history.toonl",kind:"toonl"},{id:"dev.agent-log",plugin:"dev",legacyPath:".red/tmp/agent.log.toonl",toonPath:".red/tmp/agent.log.toonl",kind:"toonl"},{id:"dev.supervisor-firehose",plugin:"dev",legacyPath:".red/tmp/afk-supervisor.log.toonl",toonPath:".red/tmp/supervisors/default/supervisor.log.toonl",kind:"toonl",migration:"sniff-read"},{id:"dev.code-understanding-bench-runs",plugin:"dev",legacyPath:".red/tmp/bench/code-understanding/runs.jsonl",toonPath:".red/tmp/bench/code-understanding/runs.toonl",kind:"toonl"},{id:"dev.attempt-state",plugin:"dev",legacyPath:".red/tmp/{workers,go-workers,scout-workers}/*/*/afk.state.toon",toonPath:".red/tmp/{workers,go-workers,scout-workers}/*/*/afk.state.toon",kind:"toon"},{id:"dev.statusline-count-cache",plugin:"dev",legacyPath:".red/tmp/statusline-cache.json",toonPath:".red/state/statusline/statusline-cache.toon",kind:"toon"},{id:"dev.statusline-repo-cache",plugin:"dev",legacyPath:".red/tmp/statusline-repo-cache.json",toonPath:".red/state/statusline/statusline-repo-cache.toon",kind:"toon"},{id:"dev.rsp-resident-registry",plugin:"dev",legacyPath:".red/state/rsp/rsp-resident.pid.json",toonPath:".red/state/rsp/rsp-resident.pid.toon",kind:"toon"},{id:"dev.rsp-status-summary",plugin:"dev",legacyPath:".red/state/rsp/rsp-status-summary.json",toonPath:".red/state/rsp/rsp-status-summary.toon",kind:"toon"},{id:"dev.rsp-wait-registry",plugin:"dev",legacyPath:".red/tmp/waits/*.json",toonPath:".red/tmp/waits/*.toon",kind:"toon"}],x3=[...BL,...jL]});function io(e){let{values:t,rest:r}=Xr(e,{query:Cw.query},Pw);return{argv:r,query:t.query?.trim()||void 0}}function Iw(e){let{values:t,rest:r}=Xr(e,Cw,Pw);return{argv:r,query:t.query?.trim()||void 0,full:t.full===!0}}function qL(e,t){if(!t)return!0;let r=Ad(e).toLowerCase();return t.toLowerCase().split(/\s+/).filter(Boolean).every(n=>r.includes(n))}function Le(e,t){return t?e.filter(r=>qL(r,t)):[...e]}function Xt(e,t){return Cd(e,t,{includeLegacyHelp:!0})}function Cd(e,t,r={}){let n=t.filter(Boolean);return n.length===0?e:{...e,...r.includeLegacyHelp?{help:n}:{},next_steps:n}}function Ad(e){return Array.isArray(e)?e.map(Ad).join(" "):typeof e=="object"&&e!==null?Object.values(e).map(Ad).join(" "):String(e??"")}var Cw,Pw,ao=_(()=>{"use strict";Yu();Cw={query:{kind:"value",coerce:e=>e},full:{kind:"boolean"}},Pw={stopAtSeparator:!1}});var Aa={};se(Aa,{DEFAULT_RSP_MAX_OVERHEAD_MS:()=>ka,DEFAULT_RSP_MAX_SELF_STATE_BYTES:()=>Sa,DEFAULT_RSP_OVERHEAD_CEILING:()=>Zt,DEFAULT_RSP_OVERHEAD_CONSECUTIVE_BREACHES:()=>va,DEFAULT_RSP_OVERHEAD_COOLDOWN_MS:()=>Ta,DEFAULT_RSP_OVERHEAD_NET_LOSS_FLOOR_BYTES:()=>Ra,RSP_OVERHEAD_FAMILIES:()=>zL,RSP_OVERHEAD_LEDGER_FILE:()=>Dw,RSP_OVERHEAD_SCHEMA_VERSION:()=>Nw,classifyOverheadSample:()=>Ld,noteChildProcessMs:()=>Fw,noteSelfStateBytesRead:()=>lo,overheadCounters:()=>Fd,overheadFamilyDisabled:()=>YL,overheadHealth:()=>wr,overheadLedgerPath:()=>Gd,overheadMsOf:()=>$w,overheadTelemetryFields:()=>xa,readOverheadLedger:()=>co,readSelfStateFile:()=>Oa,readSelfStateFileSync:()=>ZL,recordOverheadSample:()=>Dd,resetOverheadCounters:()=>XL,resetOverheadLedger:()=>QL,startChildProcessTimer:()=>tt});import{existsSync as UL,mkdirSync as HL,readFileSync as Lw,renameSync as WL,writeFileSync as VL}from"node:fs";import{readFile as JL}from"node:fs/promises";import{dirname as KL,join as Gw}from"node:path";function $w(e){let t=e.wrapperMs-e.childMs;return Number.isFinite(t)?Math.max(0,Id(t)):0}function Ld(e,t=Zt){let r=$w(e),n=[];return r>t.maxOverheadMs&&n.push("wall-clock-ceiling"),e.selfStateBytesRead>t.maxSelfStateBytes&&n.push("self-state-byte-ceiling"),e.selfStateBytesRead>t.netLossFloorBytes&&e.selfStateBytesRead>e.bytesSaved&&n.push("overhead-exceeds-savings"),{overhead_ms:r,breached:n.length>0,reasons:n}}function xa(e,t=Zt){let r=Ld(e,t);return{wrapper_ms:Id(e.wrapperMs),overhead_ms:r.overhead_ms,child_ms:Id(Math.max(0,e.childMs)),self_state_bytes_read:Math.max(0,Math.trunc(e.selfStateBytesRead)),bytes_saved:Math.max(0,Math.trunc(e.bytesSaved)),overhead_breached:r.breached,overhead_breach_reasons:r.reasons.join(",")}}function Gd(e){return Gw(ce(e),Dw)}function co(e){try{let t=Lw(Gd(e),"utf8"),r=nG(t);if(sG(r))return r}catch{}return{version:1,families:{}}}function Dd(e,t,r=Zt,n=Date.now()){let s=co(e),o=Ld(t,r),i=s.families[t.family]??rG(t.family,n),a=Md(i,n)?Mw(i):i,c=o.breached?a.consecutive_breaches+1:0,l={...a,family:t.family,invocations:a.invocations+1,breaches:a.breaches+(o.breached?1:0),consecutive_breaches:c,breached:o.breached,reasons:o.reasons,last_overhead_ms:o.overhead_ms,last_self_state_bytes_read:Math.max(0,Math.trunc(t.selfStateBytesRead)),last_bytes_saved:Math.max(0,Math.trunc(t.bytesSaved)),updated_at:new Date(n).toISOString()};return o.breached?c>=r.consecutiveBreaches&&(l.disabled=!0,l.disabled_at=new Date(n).toISOString(),l.disabled_until=new Date(n+r.cooldownMs).toISOString(),l.disabled_reason=eG(t.family,c,o,r)):(l.disabled=!1,l.disabled_at=null,l.disabled_until=null,l.disabled_reason=null),s.families[t.family]=l,Bw(e,s),l}function YL(e,t,r=Date.now()){let n=co(e).families[t];return!n?.disabled||Md(n,r)?null:n}function QL(e,t){let r=co(e);return t?delete r.families[t]:r.families={},Bw(e,r),r}function wr(e,t=Zt,r=Date.now()){let n=Object.values(co(e).families).map(a=>Md(a,r)?Mw(a):a).sort((a,c)=>a.family.localeCompare(c.family)),s=n.filter(a=>a.disabled),o=n.filter(a=>a.consecutive_breaches>0),i=s.length>0||o.length>0?"red":"green";return{schema_version:Nw,verdict:i,summary:tG(i,s,o),ceiling:t,breaching_families:o,disabled_families:s,families:n}}function lo(e){Number.isFinite(e)&&e>0&&(Nd+=e)}function Fw(e){Number.isFinite(e)&&e>0&&($d+=e)}function Fd(){return{selfStateBytesRead:Nd,childMs:$d}}function XL(){Nd=0,$d=0}function tt(){let e=process.hrtime.bigint(),t=!1;return()=>{t||(t=!0,Fw(Number(process.hrtime.bigint()-e)/1e6))}}async function Oa(e){let t=await JL(e,"utf8");return lo(Buffer.byteLength(t)),t}function ZL(e){let t=Lw(e,"utf8");return lo(Buffer.byteLength(t)),t}function eG(e,t,r,n){let s=r.reasons.map(o=>o==="wall-clock-ceiling"?`added ${r.overhead_ms}ms > ${n.maxOverheadMs}ms`:o==="self-state-byte-ceiling"?`self-state read > ${n.maxSelfStateBytes}B`:"self-state read exceeded bytes saved").join("; ");return`rsp ${e} exceeded its overhead ceiling on ${t} consecutive invocations (${s}); wrapper self-disabled, commands pass through raw`}function tG(e,t,r){if(e==="green")return"every wrapper family is inside its overhead ceiling";let n=[];return t.length>0&&n.push(`self-disabled: ${t.map(s=>`${s.family} (${s.reasons.join(",")||"ceiling"})`).join(", ")}`),r.length>0&&n.push(`breaching: ${r.map(s=>`${s.family} x${s.consecutive_breaches}`).join(", ")}`),n.join("; ")}function Md(e,t){if(!e.disabled||!e.disabled_until)return!1;let r=Date.parse(e.disabled_until);return Number.isFinite(r)&&r<=t}function Mw(e){return{...e,disabled:!1,disabled_at:null,disabled_until:null,disabled_reason:null,consecutive_breaches:0,breached:!1,reasons:[]}}function rG(e,t){return{family:e,invocations:0,breaches:0,consecutive_breaches:0,breached:!1,reasons:[],disabled:!1,disabled_at:null,disabled_until:null,disabled_reason:null,last_overhead_ms:0,last_self_state_bytes_read:0,last_bytes_saved:0,updated_at:new Date(t).toISOString()}}function Bw(e,t){try{let r=Gd(e);if(!UL(Gw(e,".red")))return;HL(KL(r),{recursive:!0});let n=`${r}.${process.pid}.tmp`;VL(n,`${M(t)}
28
+ `).trim()}var bt=_(()=>{"use strict";Xy();J()});function Ea(e){let t={app:e,version:IL(Jn("__RED_BUILD_VERSION__",()=>"4.1.15")??"0.0.0-dev"),gitSha:Jn("__RED_BUILD_GIT_SHA__",()=>"7d65b0d974114dba01d5cad11de71362f5a8682f")??"unknown",buildTime:Jn("__RED_BUILD_TIME__",()=>"2026-08-21T02:38:22-03:00")??"unknown",bundleAsset:Jn("__RED_BUNDLE_ASSET__",()=>"rsp-core.bundle.min.mjs")??"unknown"},r=Jn("__REDDB_SDK_VERSION__",()=>"1.23.1"),n=Jn("__REDDB_BINARY_TAG__",()=>"v1.23.1");return r&&(t.reddbSdkVersion=r),n&&(t.reddbBinaryTag=n),t}function IL(e){return e.startsWith("v")?e.slice(1):e}function _w(e){return`${e.app} ${e.version} ${e.gitSha}`}function Jn(e,t){try{let r=t();return typeof r=="string"&&r.length>0?r:void 0}catch{return process.env[e.replace(/^__|__$/g,"")]}}var Td=_(()=>{});import{isAbsolute as LL,join as Yt,resolve as xd}from"node:path";function NL(e){if(!e)throw new Error("root is required");return e.replace(/\/$/,"")}function kw(e){return Yt(NL(e),Ew)}function Sw(e){return Yt(kw(e),"state")}function Rw(e){return Yt(kw(e),"tmp")}function ce(e){return Yt(Sw(e),"rsp")}function $L(e){return Yt(Sw(e),"red-skills.rdb")}function FL(e){return Yt(Rw(e),"red-skills.rdb")}function xw(e,t){let r=$L(e);if(t(r))return r;let n=FL(e);if(t(n))throw ML();return r}function ML(){return new Error("Legacy shared store found at .red/tmp/red-skills.rdb. Run `rsp setup` to migrate it to .red/state/red-skills.rdb before using rsp, memory, or brain.")}function Ow(e){return Yt(Rw(e),"waits")}function Aw(e){let t=e.overrideEnvVars??Od;for(let n of t){let s=e.env[n];if(s)return LL(s)?s:xd(e.startDir,s)}let r=xd(e.startDir);for(;;){if(e.exists(Yt(r,Ew)))return r;let n=Yt(r,".."),s=xd(n);if(s===r)break;r=s}return e.startDir}var Ew,GL,DL,Od,vw,Tw,et=_(()=>{Ew=".red",GL="MEMORY_ROOT",DL="RED_BRAIN_ROOT",Od=[GL,DL];vw=".red/state/red-skills.rdb";Tw=".red/tmp/red-skills.rdb"});function ge(e){return M(e)}var BL,jL,x3,Qt=_(()=>{J();et();BL=[{id:"memory.config",plugin:"memory",legacyPath:".red/memory/config.json",toonPath:".red/memory/config.toon",kind:"toon"}],jL=[{id:"dev.afk-history",plugin:"dev",legacyPath:".red/state/afk-history.jsonl",toonPath:".red/state/castle/history.toonl",kind:"toonl"},{id:"dev.agent-log",plugin:"dev",legacyPath:".red/tmp/agent.log.toonl",toonPath:".red/tmp/agent.log.toonl",kind:"toonl"},{id:"dev.supervisor-firehose",plugin:"dev",legacyPath:".red/tmp/afk-supervisor.log.toonl",toonPath:".red/tmp/supervisors/default/supervisor.log.toonl",kind:"toonl",migration:"sniff-read"},{id:"dev.code-understanding-bench-runs",plugin:"dev",legacyPath:".red/tmp/bench/code-understanding/runs.jsonl",toonPath:".red/tmp/bench/code-understanding/runs.toonl",kind:"toonl"},{id:"dev.attempt-state",plugin:"dev",legacyPath:".red/tmp/{workers,go-workers,scout-workers}/*/*/afk.state.toon",toonPath:".red/tmp/{workers,go-workers,scout-workers}/*/*/afk.state.toon",kind:"toon"},{id:"dev.statusline-count-cache",plugin:"dev",legacyPath:".red/tmp/statusline-cache.json",toonPath:".red/state/statusline/statusline-cache.toon",kind:"toon"},{id:"dev.statusline-repo-cache",plugin:"dev",legacyPath:".red/tmp/statusline-repo-cache.json",toonPath:".red/state/statusline/statusline-repo-cache.toon",kind:"toon"},{id:"dev.rsp-resident-registry",plugin:"dev",legacyPath:".red/state/rsp/rsp-resident.pid.json",toonPath:".red/state/rsp/rsp-resident.pid.toon",kind:"toon"},{id:"dev.rsp-status-summary",plugin:"dev",legacyPath:".red/state/rsp/rsp-status-summary.json",toonPath:".red/state/rsp/rsp-status-summary.toon",kind:"toon"},{id:"dev.rsp-wait-registry",plugin:"dev",legacyPath:".red/tmp/waits/*.json",toonPath:".red/tmp/waits/*.toon",kind:"toon"}],x3=[...BL,...jL]});function io(e){let{values:t,rest:r}=Xr(e,{query:Cw.query},Pw);return{argv:r,query:t.query?.trim()||void 0}}function Iw(e){let{values:t,rest:r}=Xr(e,Cw,Pw);return{argv:r,query:t.query?.trim()||void 0,full:t.full===!0}}function qL(e,t){if(!t)return!0;let r=Ad(e).toLowerCase();return t.toLowerCase().split(/\s+/).filter(Boolean).every(n=>r.includes(n))}function Le(e,t){return t?e.filter(r=>qL(r,t)):[...e]}function Xt(e,t){return Cd(e,t,{includeLegacyHelp:!0})}function Cd(e,t,r={}){let n=t.filter(Boolean);return n.length===0?e:{...e,...r.includeLegacyHelp?{help:n}:{},next_steps:n}}function Ad(e){return Array.isArray(e)?e.map(Ad).join(" "):typeof e=="object"&&e!==null?Object.values(e).map(Ad).join(" "):String(e??"")}var Cw,Pw,ao=_(()=>{"use strict";Yu();Cw={query:{kind:"value",coerce:e=>e},full:{kind:"boolean"}},Pw={stopAtSeparator:!1}});var Aa={};se(Aa,{DEFAULT_RSP_MAX_OVERHEAD_MS:()=>ka,DEFAULT_RSP_MAX_SELF_STATE_BYTES:()=>Sa,DEFAULT_RSP_OVERHEAD_CEILING:()=>Zt,DEFAULT_RSP_OVERHEAD_CONSECUTIVE_BREACHES:()=>va,DEFAULT_RSP_OVERHEAD_COOLDOWN_MS:()=>Ta,DEFAULT_RSP_OVERHEAD_NET_LOSS_FLOOR_BYTES:()=>Ra,RSP_OVERHEAD_FAMILIES:()=>zL,RSP_OVERHEAD_LEDGER_FILE:()=>Dw,RSP_OVERHEAD_SCHEMA_VERSION:()=>Nw,classifyOverheadSample:()=>Ld,noteChildProcessMs:()=>Fw,noteSelfStateBytesRead:()=>lo,overheadCounters:()=>Fd,overheadFamilyDisabled:()=>YL,overheadHealth:()=>wr,overheadLedgerPath:()=>Gd,overheadMsOf:()=>$w,overheadTelemetryFields:()=>xa,readOverheadLedger:()=>co,readSelfStateFile:()=>Oa,readSelfStateFileSync:()=>ZL,recordOverheadSample:()=>Dd,resetOverheadCounters:()=>XL,resetOverheadLedger:()=>QL,startChildProcessTimer:()=>tt});import{existsSync as UL,mkdirSync as HL,readFileSync as Lw,renameSync as WL,writeFileSync as VL}from"node:fs";import{readFile as JL}from"node:fs/promises";import{dirname as KL,join as Gw}from"node:path";function $w(e){let t=e.wrapperMs-e.childMs;return Number.isFinite(t)?Math.max(0,Id(t)):0}function Ld(e,t=Zt){let r=$w(e),n=[];return r>t.maxOverheadMs&&n.push("wall-clock-ceiling"),e.selfStateBytesRead>t.maxSelfStateBytes&&n.push("self-state-byte-ceiling"),e.selfStateBytesRead>t.netLossFloorBytes&&e.selfStateBytesRead>e.bytesSaved&&n.push("overhead-exceeds-savings"),{overhead_ms:r,breached:n.length>0,reasons:n}}function xa(e,t=Zt){let r=Ld(e,t);return{wrapper_ms:Id(e.wrapperMs),overhead_ms:r.overhead_ms,child_ms:Id(Math.max(0,e.childMs)),self_state_bytes_read:Math.max(0,Math.trunc(e.selfStateBytesRead)),bytes_saved:Math.max(0,Math.trunc(e.bytesSaved)),overhead_breached:r.breached,overhead_breach_reasons:r.reasons.join(",")}}function Gd(e){return Gw(ce(e),Dw)}function co(e){try{let t=Lw(Gd(e),"utf8"),r=nG(t);if(sG(r))return r}catch{}return{version:1,families:{}}}function Dd(e,t,r=Zt,n=Date.now()){let s=co(e),o=Ld(t,r),i=s.families[t.family]??rG(t.family,n),a=Md(i,n)?Mw(i):i,c=o.breached?a.consecutive_breaches+1:0,l={...a,family:t.family,invocations:a.invocations+1,breaches:a.breaches+(o.breached?1:0),consecutive_breaches:c,breached:o.breached,reasons:o.reasons,last_overhead_ms:o.overhead_ms,last_self_state_bytes_read:Math.max(0,Math.trunc(t.selfStateBytesRead)),last_bytes_saved:Math.max(0,Math.trunc(t.bytesSaved)),updated_at:new Date(n).toISOString()};return o.breached?c>=r.consecutiveBreaches&&(l.disabled=!0,l.disabled_at=new Date(n).toISOString(),l.disabled_until=new Date(n+r.cooldownMs).toISOString(),l.disabled_reason=eG(t.family,c,o,r)):(l.disabled=!1,l.disabled_at=null,l.disabled_until=null,l.disabled_reason=null),s.families[t.family]=l,Bw(e,s),l}function YL(e,t,r=Date.now()){let n=co(e).families[t];return!n?.disabled||Md(n,r)?null:n}function QL(e,t){let r=co(e);return t?delete r.families[t]:r.families={},Bw(e,r),r}function wr(e,t=Zt,r=Date.now()){let n=Object.values(co(e).families).map(a=>Md(a,r)?Mw(a):a).sort((a,c)=>a.family.localeCompare(c.family)),s=n.filter(a=>a.disabled),o=n.filter(a=>a.consecutive_breaches>0),i=s.length>0||o.length>0?"red":"green";return{schema_version:Nw,verdict:i,summary:tG(i,s,o),ceiling:t,breaching_families:o,disabled_families:s,families:n}}function lo(e){Number.isFinite(e)&&e>0&&(Nd+=e)}function Fw(e){Number.isFinite(e)&&e>0&&($d+=e)}function Fd(){return{selfStateBytesRead:Nd,childMs:$d}}function XL(){Nd=0,$d=0}function tt(){let e=process.hrtime.bigint(),t=!1;return()=>{t||(t=!0,Fw(Number(process.hrtime.bigint()-e)/1e6))}}async function Oa(e){let t=await JL(e,"utf8");return lo(Buffer.byteLength(t)),t}function ZL(e){let t=Lw(e,"utf8");return lo(Buffer.byteLength(t)),t}function eG(e,t,r,n){let s=r.reasons.map(o=>o==="wall-clock-ceiling"?`added ${r.overhead_ms}ms > ${n.maxOverheadMs}ms`:o==="self-state-byte-ceiling"?`self-state read > ${n.maxSelfStateBytes}B`:"self-state read exceeded bytes saved").join("; ");return`rsp ${e} exceeded its overhead ceiling on ${t} consecutive invocations (${s}); wrapper self-disabled, commands pass through raw`}function tG(e,t,r){if(e==="green")return"every wrapper family is inside its overhead ceiling";let n=[];return t.length>0&&n.push(`self-disabled: ${t.map(s=>`${s.family} (${s.reasons.join(",")||"ceiling"})`).join(", ")}`),r.length>0&&n.push(`breaching: ${r.map(s=>`${s.family} x${s.consecutive_breaches}`).join(", ")}`),n.join("; ")}function Md(e,t){if(!e.disabled||!e.disabled_until)return!1;let r=Date.parse(e.disabled_until);return Number.isFinite(r)&&r<=t}function Mw(e){return{...e,disabled:!1,disabled_at:null,disabled_until:null,disabled_reason:null,consecutive_breaches:0,breached:!1,reasons:[]}}function rG(e,t){return{family:e,invocations:0,breaches:0,consecutive_breaches:0,breached:!1,reasons:[],disabled:!1,disabled_at:null,disabled_until:null,disabled_reason:null,last_overhead_ms:0,last_self_state_bytes_read:0,last_bytes_saved:0,updated_at:new Date(t).toISOString()}}function Bw(e,t){try{let r=Gd(e);if(!UL(Gw(e,".red")))return;HL(KL(r),{recursive:!0});let n=`${r}.${process.pid}.tmp`;VL(n,`${M(t)}
29
29
  `,{encoding:"utf8",mode:384}),WL(n,r)}catch{}}function nG(e){try{return JSON.parse(e)}catch{return z(e)}}function sG(e){return!Pd(e)||e.version!==1||!Pd(e.families)?!1:Object.values(e.families).every(oG)}function oG(e){return Pd(e)&&typeof e.family=="string"&&typeof e.consecutive_breaches=="number"&&typeof e.disabled=="boolean"}function Pd(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Id(e){return Number.isFinite(e)?Math.round(e*1e3)/1e3:0}var Dw,Nw,ka,Sa,Ra,va,Ta,zL,Zt,Nd,$d,we=_(()=>{"use strict";et();J();Dw="overhead-budget.toon",Nw="red.rsp.overhead.v1",ka=250,Sa=1024*1024,Ra=64*1024,va=3,Ta=6*60*60*1e3,zL=["git","gh","gh-api-json","vitest","cargo","cat","exec","proxy"],Zt={maxOverheadMs:ka,maxSelfStateBytes:Sa,netLossFloorBytes:Ra,consecutiveBreaches:va,cooldownMs:Ta};Nd=0,$d=0});function Uw(e){return e.trimStart().startsWith("{")?"json":"toon"}function jd(e){let t=0;for(;e[t]===`
30
30
  `||e[t]==="\r";)t+=1;let r=e.slice(t);if(r==="")return null;let n=Uw(r);if(n==="json"){let o=r.indexOf(`
31
31
  `);return o<0?null:{frame:r.slice(0,o),dialect:n,rest:r.slice(o+1)}}let s=r.indexOf(`
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
3
3
  import{spawn as L}from"node:child_process";import{isUtf8 as te}from"node:buffer";async function _(e,n=t=>t){let t=[],r=[];return e.stdout?.on("data",i=>t.push(Buffer.from(i))),e.stderr?.on("data",i=>r.push(Buffer.from(i))),await new Promise(i=>{let c=!1,o=async(a,s)=>{if(c)return;c=!0;let l=Buffer.concat(t),u=l;if(l.length>0&&te(l))try{u=await n(l)}catch{}if(process.stdout.write(u),process.stderr.write(Buffer.concat(r)),s){process.kill(process.pid,s),i(128);return}i(a??0)};e.once("error",a=>{r.push(Buffer.from(`${a instanceof Error?a.message:String(a)}
4
- `)),o(127,null)}),e.once("close",(a,s)=>void o(a,s))})}var re=new Set(["dashboard","stats","gains","show","git","gh","vitest","cargo","cat","exec","wait","doctor","status","sweep","setup","mcp","shell-init","server","warm-resident","gh-api-json","hook"]);function R(e){let n=e[0];if(n==="--full"||n==="--brief"||n==="--terse")return e[1]!=="--"||!e[2]?null:{kind:"argv",argv:[...e.slice(2)],level:n.slice(2)};if(!n||n.startsWith("-"))return n!=="--"||!e[1]?null:{kind:"argv",argv:[...e.slice(1)],level:"automatic"};if(n==="proxy"){if(process.env.RSP_PROXY_FAIL_INTERNAL==="1")return null;let t=e.indexOf("--"),r=t>=0?e.slice(1,t):[];if(r.some(a=>a!=="--full"&&a!=="--brief"&&a!=="--terse"))return null;let i=t>=0?e.slice(t+1):e.slice(1);if(i.length!==1||!i[0]?.trim())return null;let c=i[0];if(ie(c))return null;let o=r.includes("--terse")?"terse":r.includes("--brief")?"brief":r.includes("--full")?"full":"automatic";return{kind:"shell",commandLine:c,level:o}}return re.has(n)?null:{kind:"argv",argv:[...e],level:"automatic"}}async function I(e,n){let t=e.kind==="argv"?L(e.argv[0],e.argv.slice(1),{stdio:["inherit","pipe","pipe"]}):L(e.commandLine,{shell:!0,stdio:["inherit","pipe","pipe"]});return await _(t,n)}function ie(e){return/(?:^|&&|\|\||[;|])\s*(?:(?:[A-Za-z_][A-Za-z0-9_]*=[^\s]+|env)\s+)*(?:git\s+(?:status|log|diff|show|blame|branch\s+-av)(?:\s|$)|gh\s+(?:pr|issue|run)\s+(?:list|view)(?:\s|$)|vitest(?:\s|$)|cargo\s+test(?:\s|$)|(?:cat|head|tail)\s+)/.test(e)}function F(e){let n={app:e,version:oe(x("__RED_BUILD_VERSION__",()=>"4.1.13")??"0.0.0-dev"),gitSha:x("__RED_BUILD_GIT_SHA__",()=>"19ba7780d0a8be832373d24cce303d1833430d2d")??"unknown",buildTime:x("__RED_BUILD_TIME__",()=>"2026-08-21T01:42:13-03:00")??"unknown",bundleAsset:x("__RED_BUNDLE_ASSET__",()=>"rsp.bundle.min.mjs")??"unknown"},t=x("__REDDB_SDK_VERSION__",()=>"1.23.1"),r=x("__REDDB_BINARY_TAG__",()=>"v1.23.1");return t&&(n.reddbSdkVersion=t),r&&(n.reddbBinaryTag=r),n}function oe(e){return e.startsWith("v")?e.slice(1):e}function N(e){return`${e.app} ${e.version} ${e.gitSha}`}function x(e,n){try{let t=n();return typeof t=="string"&&t.length>0?t:void 0}catch{return process.env[e.replace(/^__|__$/g,"")]}}var D={"=":"data",":=":{to:"data",typed:!0},":":"meta"},se=/^[a-z][a-z0-9+.-]*:\/\//i;function ce(e,n){return typeof n=="string"?{separator:e,to:n,typed:!1,prefix:!1}:{separator:e,to:n.to,typed:n.typed??!1,prefix:n.prefix??!1}}function ae(e=D){return Object.entries(e).map(([n,t])=>ce(n,t)).sort((n,t)=>t.separator.length-n.separator.length)}function ue(e){return/^-\d+(\.\d+)?$/.test(e)}function O(e){return!(!e||e.startsWith("-")&&!ue(e))}function k(e){if(e==="true")return!0;if(e==="false")return!1;if(e==="null")return null;let n=Number(e);return!Number.isNaN(n)&&Number.isFinite(n)&&e.trim()!==""?n:e}function P(e){if(e==="true")return!0;if(e==="false")return!1;if(e==="null")return null;if(e.startsWith("[")&&e.endsWith("]")||e.startsWith("{")&&e.endsWith("}"))try{return JSON.parse(e)}catch{}let n=Number(e);return!Number.isNaN(n)&&Number.isFinite(n)&&e.trim()!==""?n:e.includes(",")?e.split(",").map(t=>P(t.trim())):e}function w(e,n){switch(n){case"boolean":return le(e);case"number":return fe(e);case"array":return e.split(",").map(t=>k(t.trim()));case"string":default:return e}}function le(e){let n=e.toLowerCase().trim();return n==="true"||n==="yes"||n==="1"||n==="on"}function fe(e){if(e.trim()==="")throw new TypeError(`Cannot convert "${e}" to number`);let n=Number(e);if(Number.isNaN(n))throw new TypeError(`Cannot convert "${e}" to number`);return n}function b(e){return e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1):e}function de(e,n={}){return e.map(t=>{let r=n[t.type];return r?r(t.value):t.value}).join("")}function d(e,n){return{type:e,value:n}}function pe(e){let n=[],t=he(e);if(n.push(d("section-header","Usage:"),d("text"," "),d("usage-text",t),d("newline",`
4
+ `)),o(127,null)}),e.once("close",(a,s)=>void o(a,s))})}var re=new Set(["dashboard","stats","gains","show","git","gh","vitest","cargo","cat","exec","wait","doctor","status","sweep","setup","mcp","shell-init","server","warm-resident","gh-api-json","hook"]);function R(e){let n=e[0];if(n==="--full"||n==="--brief"||n==="--terse")return e[1]!=="--"||!e[2]?null:{kind:"argv",argv:[...e.slice(2)],level:n.slice(2)};if(!n||n.startsWith("-"))return n!=="--"||!e[1]?null:{kind:"argv",argv:[...e.slice(1)],level:"automatic"};if(n==="proxy"){if(process.env.RSP_PROXY_FAIL_INTERNAL==="1")return null;let t=e.indexOf("--"),r=t>=0?e.slice(1,t):[];if(r.some(a=>a!=="--full"&&a!=="--brief"&&a!=="--terse"))return null;let i=t>=0?e.slice(t+1):e.slice(1);if(i.length!==1||!i[0]?.trim())return null;let c=i[0];if(ie(c))return null;let o=r.includes("--terse")?"terse":r.includes("--brief")?"brief":r.includes("--full")?"full":"automatic";return{kind:"shell",commandLine:c,level:o}}return re.has(n)?null:{kind:"argv",argv:[...e],level:"automatic"}}async function I(e,n){let t=e.kind==="argv"?L(e.argv[0],e.argv.slice(1),{stdio:["inherit","pipe","pipe"]}):L(e.commandLine,{shell:!0,stdio:["inherit","pipe","pipe"]});return await _(t,n)}function ie(e){return/(?:^|&&|\|\||[;|])\s*(?:(?:[A-Za-z_][A-Za-z0-9_]*=[^\s]+|env)\s+)*(?:git\s+(?:status|log|diff|show|blame|branch\s+-av)(?:\s|$)|gh\s+(?:pr|issue|run)\s+(?:list|view)(?:\s|$)|vitest(?:\s|$)|cargo\s+test(?:\s|$)|(?:cat|head|tail)\s+)/.test(e)}function F(e){let n={app:e,version:oe(x("__RED_BUILD_VERSION__",()=>"4.1.15")??"0.0.0-dev"),gitSha:x("__RED_BUILD_GIT_SHA__",()=>"7d65b0d974114dba01d5cad11de71362f5a8682f")??"unknown",buildTime:x("__RED_BUILD_TIME__",()=>"2026-08-21T02:38:22-03:00")??"unknown",bundleAsset:x("__RED_BUNDLE_ASSET__",()=>"rsp.bundle.min.mjs")??"unknown"},t=x("__REDDB_SDK_VERSION__",()=>"1.23.1"),r=x("__REDDB_BINARY_TAG__",()=>"v1.23.1");return t&&(n.reddbSdkVersion=t),r&&(n.reddbBinaryTag=r),n}function oe(e){return e.startsWith("v")?e.slice(1):e}function N(e){return`${e.app} ${e.version} ${e.gitSha}`}function x(e,n){try{let t=n();return typeof t=="string"&&t.length>0?t:void 0}catch{return process.env[e.replace(/^__|__$/g,"")]}}var D={"=":"data",":=":{to:"data",typed:!0},":":"meta"},se=/^[a-z][a-z0-9+.-]*:\/\//i;function ce(e,n){return typeof n=="string"?{separator:e,to:n,typed:!1,prefix:!1}:{separator:e,to:n.to,typed:n.typed??!1,prefix:n.prefix??!1}}function ae(e=D){return Object.entries(e).map(([n,t])=>ce(n,t)).sort((n,t)=>t.separator.length-n.separator.length)}function ue(e){return/^-\d+(\.\d+)?$/.test(e)}function O(e){return!(!e||e.startsWith("-")&&!ue(e))}function k(e){if(e==="true")return!0;if(e==="false")return!1;if(e==="null")return null;let n=Number(e);return!Number.isNaN(n)&&Number.isFinite(n)&&e.trim()!==""?n:e}function P(e){if(e==="true")return!0;if(e==="false")return!1;if(e==="null")return null;if(e.startsWith("[")&&e.endsWith("]")||e.startsWith("{")&&e.endsWith("}"))try{return JSON.parse(e)}catch{}let n=Number(e);return!Number.isNaN(n)&&Number.isFinite(n)&&e.trim()!==""?n:e.includes(",")?e.split(",").map(t=>P(t.trim())):e}function w(e,n){switch(n){case"boolean":return le(e);case"number":return fe(e);case"array":return e.split(",").map(t=>k(t.trim()));case"string":default:return e}}function le(e){let n=e.toLowerCase().trim();return n==="true"||n==="yes"||n==="1"||n==="on"}function fe(e){if(e.trim()==="")throw new TypeError(`Cannot convert "${e}" to number`);let n=Number(e);if(Number.isNaN(n))throw new TypeError(`Cannot convert "${e}" to number`);return n}function b(e){return e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1):e}function de(e,n={}){return e.map(t=>{let r=n[t.type];return r?r(t.value):t.value}).join("")}function d(e,n){return{type:e,value:n}}function pe(e){let n=[],t=he(e);if(n.push(d("section-header","Usage:"),d("text"," "),d("usage-text",t),d("newline",`
5
5
  `),d("newline",`
6
6
  `)),e.positional&&e.positional.length>0){n.push(d("section-header","Arguments:"),d("newline",`
7
7
  `));for(let r of e.positional)if(r.description){let i=r.variadic?`${r.name}...`:r.name;n.push(d("indent"," "),d("positional-name",`<${i}>`)),r.required||n.push(d("positional-optional"," (optional)")),n.push(d("newline",`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reddb-io/red-skills",
3
- "version": "4.1.13",
3
+ "version": "4.1.15",
4
4
  "description": "RedSkills core npm package: compatibility bin shims, marketplace manifests, host generators, and non-plugin supporting runtimes. Plugin bundles ship in @reddb-io/red-skills-<plugin> packages (ADR 0146).",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",