@reddb-io/red-skills 2.55.6 → 2.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/brain.bundle.min.mjs +1 -1
- package/dist/code-nav.bundle.min.mjs +1 -1
- package/dist/dev.bundle.min.mjs +416 -415
- package/dist/memory.bundle.min.mjs +2 -2
- package/dist/rsp.bundle.min.mjs +98 -96
- package/package.json +1 -1
package/dist/rsp.bundle.min.mjs
CHANGED
|
@@ -1,60 +1,61 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
3
|
-
var
|
|
4
|
-
`,n+=2;continue}if(r==="t"){t+=" ",n+=2;continue}if(r==="r"){t+="\r",n+=2;continue}if(r==="\\"){t+="\\",n+=2;continue}if(r==='"'){t+='"',n+=2;continue}if(r==="u"){if(n+6>e.length)throw new SyntaxError(`Invalid escape sequence: truncated \\u escape at "${e.slice(n,n+6)}"`);let i=e.slice(n+2,n+6);if(!/^[0-9a-f]{4}$/i.test(i))throw new SyntaxError(`Invalid escape sequence: \\u must be followed by 4 hex digits, got "${i}"`);let s=Number.parseInt(i,16);if(s>=55296&&s<=57343)throw new SyntaxError(`Invalid escape sequence: \\u${i} is a lone surrogate; supplementary code points MUST appear as literal UTF-8`);t+=String.fromCodePoint(s),n+=6;continue}throw new SyntaxError(`Invalid escape sequence: \\${r}`)}t+=e[n],n++}return t}function Gt(e,t){let n=t+1;for(;n<e.length;){if(e[n]==="\\"&&n+1<e.length){n+=2;continue}if(e[n]==='"')return n;n++}return-1}function jn(e,t,n=0){let r=!1,i=n;for(;i<e.length;){if(e[i]==="\\"&&i+1<e.length&&r){i+=2;continue}if(e[i]==='"'){r=!r,i++;continue}if(e[i]===t&&!r)return i;i++}return-1}function j(e,t){try{return t()}catch(n){throw n instanceof U?n:n instanceof Error?new U(n.message,{line:e.lineNumber,source:e.raw,cause:n}):n}}function Ii(e){return e==="true"||e==="false"||e==="null"}function Sc(e){if(!e||!kc.test(e))return!1;let t=Number(e);return!Number.isNaN(t)&&Number.isFinite(t)}function jt(e,t,n=!1){let r=e.trimStart(),i=-1;if(r.startsWith('"')){let f=Gt(r,0);if(f===-1||!r.slice(f+1).startsWith("["))return;let w=e.length-r.length+f+1;i=e.indexOf("[",w)}else i=e.indexOf("[");if(i===-1)return;let s=e.indexOf("]",i);if(s===-1)return;let o=s+1,a=o,c=e.indexOf("{",s);if(c!==-1&&c<e.indexOf(":",s)){let f=e.slice(s+1,c);if(f!==""){if(n){let g=f.trim();throw new SyntaxError(g===""?"Unexpected whitespace between bracket and fields segment":`Unexpected content "${g}" between bracket and fields segment`)}return}let w=e.indexOf("}",c);w!==-1&&(a=w+1)}if(o=e.indexOf(":",Math.max(s,a)),o===-1)return;let u=Math.max(s+1,a),l=e.slice(u,o);if(l!==""){if(n){let f=l.trim();throw new SyntaxError(f===""?"Unexpected whitespace between bracket segment and colon":`Unexpected content "${f}" between bracket segment and colon`)}return}let d;if(i>0){let f=e.slice(0,i).trim();d=f.startsWith('"')?Cn(f):f}let m=e.slice(o+1).trim(),_=e.slice(i+1,s),R;try{R=Tc(_,t)}catch(f){if(n)throw f;return}let{length:T,delimiter:v}=R,p;if(c!==-1&&c<o){let f=e.indexOf("}",c);if(f!==-1&&f<o){let w=e.slice(c+1,f),g=Oc(w,v);if(g!==void 0){if(n)throw new SyntaxError(`Header delimiter mismatch: bracket declares "${vi(v)}" but fields segment contains unquoted "${vi(g)}"`);return}p=Un(w,v).map(k=>Cn(k.trim()))}}return{header:{key:d,length:T,delimiter:v,fields:p},inlineValues:m||void 0}}function Tc(e,t){let n=e,r=t;if(n.endsWith(" ")?(r=Mt.tab,n=n.slice(0,-1)):n.endsWith("|")&&(r=Mt.pipe,n=n.slice(0,-1)),!vc.test(n))throw new SyntaxError(`Invalid array length: "${e}" (expected non-negative integer with no leading zeros)`);return{length:Number.parseInt(n,10),delimiter:r}}function Oc(e,t){for(let n of xc)if(n!==t&&jn(e,n)!==-1)return n}function vi(e){return e===" "?"\\t":e}function Un(e,t){let n=[],r="",i=!1,s=0;for(;s<e.length;){let o=e[s];if(o==="\\"&&s+1<e.length&&i){r+=o+e[s+1],s+=2;continue}if(o==='"'){i=!i,r+=o,s++;continue}if(o===t&&!i){n.push(r.trim()),r="",s++;continue}r+=o,s++}return(r||n.length>0)&&n.push(r.trim()),n}function Ai(e){return e.map(t=>Jt(t))}function Jt(e){let t=e.trim();if(!t)return"";if(t.startsWith('"'))return Cn(t);if(Ii(t)){if(t==="true")return!0;if(t==="false")return!1;if(t==="null")return null}if(Sc(t)){let n=Number.parseFloat(t);return Object.is(n,-0)?0:n}return t}function Cn(e){let t=e.trim();if(t.startsWith('"')){let n=Gt(t,0);if(n===-1)throw new SyntaxError("Unterminated string: missing closing quote");if(n!==t.length-1)throw new SyntaxError("Unexpected characters after closing quote");return $i(t.slice(1,n))}return t}function Pc(e,t){let n=t;for(;n<e.length&&e[n]!==":";)n++;if(n>=e.length||e[n]!==":")throw new SyntaxError("Missing colon after key");let r=e.slice(t,n).trim();return n++,{key:r,end:n}}function Dc(e,t){let n=Gt(e,t);if(n===-1)throw new SyntaxError("Unterminated quoted key");let r=$i(e.slice(t+1,n)),i=n+1;if(i>=e.length||e[i]!==":")throw new SyntaxError("Missing colon after key");return i++,{key:r,end:i}}function $c(e,t){let n=e[t]==='"';return{...n?Dc(e,t):Pc(e,t),isQuoted:n}}function Ni(e){return e.trim().startsWith("[")&&jn(e,":")!==-1}function Ic(e){return jn(e,":")!==-1}function Ac(){return{lineNumber:0,blankLines:[]}}function Nc(e,t,n,r){t.lineNumber++;let i=t.lineNumber,s=0;for(;s<e.length&&e[s]===" ";)s++;let o=e.slice(s);if(!o.trim()){let c=Ti(s,n);t.blankLines.push({lineNumber:i,indent:s,depth:c});return}let a=Ti(s,n);if(r){let c=0;for(;c<e.length&&(e[c]===" "||e[c]===" ");)c++;if(e.slice(0,c).includes(" "))throw new U("Tabs are not allowed in indentation in strict mode",{line:i,source:e});if(s>0&&s%n!==0)throw new U(`Indentation must be exact multiple of ${n}, but found ${s} spaces`,{line:i,source:e})}return{raw:e,indent:s,content:o,depth:a,lineNumber:i}}function*Bc(e,t,n,r){for(let i of e){let s=Nc(i,r,t,n);s!==void 0&&(yield s)}}function Ti(e,t){return Math.floor(e/t)}function ut(e,t,n,r,i){if(r.strict&&e!==t)throw new U(`Expected ${t} ${n}, but got ${e}`,{line:i.lineNumber,source:i.raw})}function Lc(e,t,n){if(e?.depth===t&&e.content.startsWith("- "))throw new U(`Expected ${n} list array items, but found more`,{line:e.lineNumber,source:e.raw})}function Cc(e,t,n){if(e?.depth===t&&!e.content.startsWith("- ")&&Mc(e.content,n.delimiter))throw new U(`Expected ${n.length} tabular rows, but found more`,{line:e.lineNumber,source:e.raw})}function Bi(e,t,n,r,i){if(!r)return;let s=n.find(o=>o.lineNumber>e&&o.lineNumber<t);if(s)throw new U(`Blank lines inside ${i} are not allowed in strict mode`,{line:s.lineNumber})}function Mc(e,t){let n=e.indexOf(":"),r=e.indexOf(t);return n===-1||r!==-1&&r<n}function*Uc(e,t){if(t?.expandPaths!==void 0)throw new Error("expandPaths is not supported in streaming decode");let n={indent:t?.indent??2,strict:t?.strict??!0},r=Ac(),i=new jc(Bc(e,n.indent,n.strict,r),r),s=i.peekSync();if(!s){yield{type:"startObject"},yield{type:"endObject"};return}if(s.content.trim()==="[]"){i.advanceSync(),yield{type:"startArray",length:0},yield{type:"endArray"};return}if(Ni(s.content)){let a=j(s,()=>jt(s.content,W,n.strict));if(a){i.advanceSync(),yield*Ut(a.header,a.inlineValues,i,0,n,s);return}}if(i.advanceSync(),i.atEndSync()&&!Oi(s)){yield{type:"primitive",value:j(s,()=>Jt(s.content.trim()))};return}if(!Oi(s)&&i.peekSync()?.depth===0)throw new U("Top-level document must start with a key-value or array-header line",{line:s.lineNumber,source:s.raw});let o=n.strict?new Set:void 0;for(yield{type:"startObject"},yield*Je(s,i,0,n,o);!i.atEndSync();){let a=i.peekSync();if(!a||a.depth!==0)break;i.advanceSync(),yield*Je(a,i,0,n,o)}yield{type:"endObject"}}function xi(e,t,n){if(n){if(n.has(e))throw new U(`Duplicate sibling key "${e}"`,{line:t.lineNumber,source:t.raw});n.add(e)}}function*Je(e,t,n,r,i){let s=e.content,o=j(e,()=>jt(s,W,r.strict));if(o&&o.header.key!==void 0){xi(o.header.key,e,i),yield{type:"key",key:o.header.key},yield*Ut(o.header,o.inlineValues,t,n,r,e);return}let{key:a,isQuoted:c}=j(e,()=>$c(s,0)),u=s.indexOf(":",a.length),l=u>=0?s.slice(u+1).trim():"";if(xi(a,e,i),yield c?{type:"key",key:a,wasQuoted:!0}:{type:"key",key:a},!l){let d=t.peekSync();if(d&&d.depth>n){yield{type:"startObject"},yield*Fc(t,n+1,r),yield{type:"endObject"};return}yield{type:"startObject"},yield{type:"endObject"};return}if(l==="[]"){yield{type:"startArray",length:0},yield{type:"endArray"};return}yield{type:"primitive",value:j(e,()=>Jt(l))}}function*Fc(e,t,n){let r,i=n.strict?new Set:void 0;for(;!e.atEndSync();){let s=e.peekSync();if(!s||s.depth<t)break;if(r===void 0&&s.depth>=t&&(r=s.depth),s.depth===r)e.advanceSync(),yield*Je(s,e,r,n,i);else break}}function*Ut(e,t,n,r,i,s){if(yield{type:"startArray",length:e.length},t){yield*Gc(e,t,i,s),yield{type:"endArray"};return}if(e.fields&&e.fields.length>0){yield*Jc(e,n,r,i,s),yield{type:"endArray"};return}yield*qc(e,n,r,i,s),yield{type:"endArray"}}function*Gc(e,t,n,r){if(!t.trim()){ut(0,e.length,"inline array items",n,r);return}let i=j(r,()=>Un(t,e.delimiter)),s=j(r,()=>Ai(i));ut(s.length,e.length,"inline array items",n,r);for(let o of s)yield{type:"primitive",value:o}}function*Jc(e,t,n,r,i){let s=n+1,o=0,a,c,u=i;for(;!t.atEndSync()&&o<e.length;){let l=t.peekSync();if(!l||l.depth<s)break;if(l.depth===s){a===void 0&&(a=l.lineNumber),c=l.lineNumber,u=l,t.advanceSync();let d=j(l,()=>Un(l.content,e.delimiter));ut(d.length,e.fields.length,"tabular row values",r,l);let m=j(l,()=>Ai(d));yield*Wc(e.fields,m),o++}else break}ut(o,e.length,"tabular rows",r,u),r.strict&&a!==void 0&&c!==void 0&&Bi(a,c,t.getBlankLines(),r.strict,"tabular array"),r.strict&&Cc(t.peekSync(),s,e)}function*qc(e,t,n,r,i){let s=n+1,o=0,a,c,u=i;for(;!t.atEndSync()&&o<e.length;){let l=t.peekSync();if(!l||l.depth<s)break;let d=l.content.startsWith("- ")||l.content==="-";if(l.depth===s&&d){a===void 0&&(a=l.lineNumber),c=l.lineNumber,u=l,yield*Vc(t,s,r);let m=t.current();m&&(c=m.lineNumber,u=m),o++}else break}ut(o,e.length,"list array items",r,u),r.strict&&a!==void 0&&c!==void 0&&Bi(a,c,t.getBlankLines(),r.strict,"list array"),r.strict&&Lc(t.peekSync(),s,e.length)}function*Vc(e,t,n){let r=e.nextSync();if(!r)throw new ReferenceError("Expected list item");let i;if(r.content==="-"){yield{type:"startObject"},yield{type:"endObject"};return}else if(r.content.startsWith("- "))i=r.content.slice(2);else throw new U('Expected list item to start with "- "',{line:r.lineNumber,source:r.raw});if(!i.trim()){yield{type:"startObject"},yield{type:"endObject"};return}if(i.trim()==="[]"){yield{type:"startArray",length:0},yield{type:"endArray"};return}let s={...r,content:i};if(Ni(i)){let a=j(s,()=>jt(i,W,n.strict));if(a){yield*Ut(a.header,a.inlineValues,e,t,n,s);return}}let o=j(s,()=>jt(i,W,n.strict));if(o&&o.header.key!==void 0&&o.header.fields!==void 0){let a=o.header,c=n.strict?new Set([a.key]):void 0;yield{type:"startObject"},yield{type:"key",key:a.key},yield*Ut(a,o.inlineValues,e,t+1,n,s);let u=t+1;for(;!e.atEndSync();){let l=e.peekSync();if(!l||l.depth<u)break;if(l.depth===u&&!l.content.startsWith("- "))e.advanceSync(),yield*Je(l,e,u,n,c);else break}yield{type:"endObject"};return}if(Ic(i)){let a=n.strict?new Set:void 0;yield{type:"startObject"},yield*Je(s,e,t+1,n,a);let c=t+1;for(;!e.atEndSync();){let u=e.peekSync();if(!u||u.depth<c)break;if(u.depth===c&&!u.content.startsWith("- "))e.advanceSync(),yield*Je(u,e,c,n,a);else break}yield{type:"endObject"};return}yield{type:"primitive",value:j(s,()=>Jt(i))}}function Oi(e){let t=e.content;if(t.startsWith('"')){let n=Gt(t,0);return n===-1?!1:t.slice(n+1).includes(":")}else return t.includes(":")}function*Wc(e,t){yield{type:"startObject"};for(let n=0;n<e.length;n++)yield{type:"key",key:e[n]},yield{type:"primitive",value:t[n]};yield{type:"endObject"}}function te(e){if(e===null)return null;if(typeof e=="object"&&e!==null&&"toJSON"in e&&typeof e.toJSON=="function"){let t=e.toJSON();if(t!==e)return te(t)}if(typeof e=="string"||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(te);if(e instanceof Set)return Array.from(e).map(te);if(e instanceof Map)return Object.fromEntries(Array.from(e,([t,n])=>[String(t),te(n)]));if(Hc(e)){let t={};for(let n in e)Object.hasOwn(e,n)&&(t[n]=te(e[n]));return t}return null}function Pe(e){return e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean"}function le(e){return Array.isArray(e)}function $(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function lt(e){return Object.keys(e).length===0}function Hc(e){if(e===null||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function dt(e){return e.length===0||e.every(t=>Pe(t))}function Kc(e){return e.length===0||e.every(t=>le(t))}function Li(e){return e.length===0||e.every(t=>$(t))}function Qc(e){return/^[A-Z_][\w.]*$/i.test(e)}function Ci(e){return/^[A-Z_]\w*$/i.test(e)}function Xc(e,t=W){return!(!e||e!==e.trim()||Ii(e)||Zc(e)||e.includes(":")||e.includes('"')||e.includes("\\")||/[[\]{}]/.test(e)||/[\u0000-\u001F]/.test(e)||e.includes(t)||e.startsWith("-"))}function Zc(e){return zc.test(e)||Yc.test(e)}function Ct(e,t){if(Array.isArray(e))return e.map(n=>Ct(n,t));if($(e)){let n={},r=e[Mi];for(let[i,s]of Object.entries(e)){let o=r?.has(i);if(i.includes(".")&&!o){let c=i.split(".");if(c.every(u=>Ci(u))){eu(n,c,Ct(s,t),t);continue}}let a=Ct(s,t);if(i in n){let c=n[i];if(Gn(c,a))Fn(c,a,t);else{if(t)throw new TypeError(`Path expansion conflict at key "${i}": cannot merge ${typeof c} with ${typeof a}`);n[i]=a}}else n[i]=a}return n}return e}function eu(e,t,n,r){let i=e;for(let a=0;a<t.length-1;a++){let c=t[a],u=i[c];if(u===void 0){let l={};i[c]=l,i=l}else if($(u))i=u;else{if(r)throw new TypeError(`Path expansion conflict at segment "${c}": expected object but found ${typeof u}`);let l={};i[c]=l,i=l}}let s=t[t.length-1],o=i[s];if(o===void 0)i[s]=n;else if(Gn(o,n))Fn(o,n,r);else{if(r)throw new TypeError(`Path expansion conflict at key "${s}": cannot merge ${typeof o} with ${typeof n}`);i[s]=n}}function Fn(e,t,n){for(let[r,i]of Object.entries(t)){let s=e[r];if(s===void 0)e[r]=i;else if(Gn(s,i))Fn(s,i,n);else{if(n)throw new TypeError(`Path expansion conflict at key "${r}": cannot merge ${typeof s} with ${typeof i}`);e[r]=i}}}function Gn(e,t){return $(e)&&$(t)}function tu(e){let t={stack:[],root:void 0};for(let n of e)nu(t,n);return ru(t)}function nu(e,t){let{stack:n}=e;switch(t.type){case"startObject":{let r={},i=new Set;if(n.length===0)n.push({type:"object",obj:r,quotedKeys:i});else{let s=n[n.length-1];if(s.type==="object"){if(s.currentKey===void 0)throw new Error("Object startObject event without preceding key");s.obj[s.currentKey]=r,s.currentKey=void 0}else s.type==="array"&&s.arr.push(r);n.push({type:"object",obj:r,quotedKeys:i})}break}case"endObject":{if(n.length===0)throw new Error("Unexpected endObject event");let r=n.pop();if(r.type!=="object")throw new Error("Mismatched endObject event");r.quotedKeys.size>0&&Object.defineProperty(r.obj,Mi,{value:r.quotedKeys,enumerable:!1,writable:!1,configurable:!1}),n.length===0&&(e.root=r.obj);break}case"startArray":{let r=[];if(n.length===0)n.push({type:"array",arr:r});else{let i=n[n.length-1];if(i.type==="object"){if(i.currentKey===void 0)throw new Error("Array startArray event without preceding key");i.obj[i.currentKey]=r,i.currentKey=void 0}else i.type==="array"&&i.arr.push(r);n.push({type:"array",arr:r})}break}case"endArray":{if(n.length===0)throw new Error("Unexpected endArray event");let r=n.pop();if(r.type!=="array")throw new Error("Mismatched endArray event");n.length===0&&(e.root=r.arr);break}case"key":{if(n.length===0)throw new Error("Key event outside of object context");let r=n[n.length-1];if(r.type!=="object")throw new Error("Key event in non-object context");r.currentKey=t.key,t.wasQuoted&&r.quotedKeys.add(t.key);break}case"primitive":if(n.length===0)e.root=t.value;else{let r=n[n.length-1];if(r.type==="object"){if(r.currentKey===void 0)throw new Error("Primitive event without preceding key in object");r.obj[r.currentKey]=t.value,r.currentKey=void 0}else r.type==="array"&&r.arr.push(t.value)}break}}function ru(e){if(e.stack.length!==0)throw new Error("Incomplete event stream: stack not empty at end");if(e.root===void 0)throw new Error("No root value built from events");return e.root}function iu(e,t,n,r,i,s,o){if(r.keyFolding!=="safe"||!$(t))return;let{segments:a,tail:c,leafValue:u}=su(e,t,o??r.flattenDepth);if(a.length<2||!a.every(m=>Ci(m)))return;let l=ou(a),d=s?`${s}.${l}`:l;if(!n.includes(l)&&!(i&&i.has(d)))return{foldedKey:l,remainder:c,leafValue:u,segmentCount:a.length}}function su(e,t,n){let r=[e],i=t;for(;r.length<n&&$(i);){let s=Object.keys(i);if(s.length!==1)break;let o=s[0],a=i[o];r.push(o),i=a}return!$(i)||lt(i)?{segments:r,tail:void 0,leafValue:i}:{segments:r,tail:i,leafValue:i}}function ou(e){return e.join(".")}function Ve(e,t){return e===null?Ec:typeof e=="boolean"||typeof e=="number"?String(e):au(e,t)}function au(e,t=W){return Xc(e,t)?e:`"${Di(e)}"`}function We(e){return Qc(e)?e:`"${Di(e)}"`}function ji(e,t=W){return e.map(n=>Ve(n,t)).join(t)}function De(e,t){let n=t?.key,r=t?.fields,i=t?.delimiter??",",s="";if(n!=null&&(s+=We(n)),s+=`[${e}${i!==W?i:""}]`,r){let o=r.map(a=>We(a));s+=`{${o.join(i)}}`}return s+=":",s}function*cu(e,t,n){if(Pe(e)){let r=Ve(e,t.delimiter);r!==""&&(yield r);return}le(e)?yield*Mn(void 0,e,n,t):$(e)&&(yield*qe(e,n,t))}function*qe(e,t,n,r,i,s){let o=Object.keys(e);t===0&&!r&&(r=new Set(o.filter(c=>c.includes("."))));let a=s??n.flattenDepth;for(let[c,u]of Object.entries(e))yield*uu(c,u,t,n,o,r,i,a)}function*uu(e,t,n,r,i,s,o,a){let c=o?`${o}.${e}`:e,u=a??r.flattenDepth;if(r.keyFolding==="safe"&&i){let d=iu(e,t,i,r,s,o,u);if(d){let{foldedKey:m,remainder:_,leafValue:R,segmentCount:T}=d,v=We(m);if(_===void 0){if(Pe(R)){yield B(n,`${v}: ${Ve(R,r.delimiter)}`,r.indent);return}else if(le(R)){yield*Mn(m,R,n,r);return}else if($(R)&<(R)){yield B(n,`${v}:`,r.indent);return}}if($(_)){yield B(n,`${v}:`,r.indent);let p=u-T,f=o?`${o}.${m}`:m;yield*qe(_,n+1,r,s,f,p);return}}}let l=We(e);Pe(t)?yield B(n,`${l}: ${Ve(t,r.delimiter)}`,r.indent):le(t)?yield*Mn(e,t,n,r):$(t)&&(yield B(n,`${l}:`,r.indent),lt(t)||(yield*qe(t,n+1,r,s,c,u)))}function*Mn(e,t,n,r){if(t.length===0){yield B(n,e!=null?`${We(e)}: []`:"[]",r.indent);return}if(dt(t)){yield B(n,qt(t,r.delimiter,e),r.indent);return}if(Kc(t)&&t.every(i=>dt(i))){yield*lu(e,t,n,r);return}if(Li(t)){let i=Ui(t);i?yield*du(e,t,i,n,r):yield*Pi(e,t,n,r);return}yield*Pi(e,t,n,r)}function*lu(e,t,n,r){yield B(n,De(t.length,{key:e,delimiter:r.delimiter}),r.indent);for(let i of t)if(dt(i)){let s=qt(i,r.delimiter);yield V(n+1,s,r.indent)}}function qt(e,t,n){let r=De(e.length,{key:n,delimiter:t}),i=ji(e,t);return e.length===0?r:`${r} ${i}`}function*du(e,t,n,r,i){yield B(r,De(t.length,{key:e,fields:n,delimiter:i.delimiter}),i.indent),yield*Fi(t,n,r+1,i)}function Ui(e){if(e.length===0)return;let t=e[0],n=Object.keys(t);if(n.length!==0&&fu(e,n))return n}function fu(e,t){for(let n of e){if(Object.keys(n).length!==t.length)return!1;for(let r of t)if(!(r in n)||!Pe(n[r]))return!1}return!0}function*Fi(e,t,n,r){for(let i of e)yield B(n,ji(t.map(s=>i[s]),r.delimiter),r.indent)}function*Pi(e,t,n,r){yield B(n,De(t.length,{key:e,delimiter:r.delimiter}),r.indent);for(let i of t)yield*Jn(i,n+1,r)}function*mu(e,t,n){if(lt(e)){yield B(t,"-",n.indent);return}let r=Object.entries(e),[i,s]=r[0],o=r.slice(1);if(le(s)&&Li(s)){let c=Ui(s);if(c){yield V(t,De(s.length,{key:i,fields:c,delimiter:n.delimiter}),n.indent),yield*Fi(s,c,t+2,n),o.length>0&&(yield*qe(Object.fromEntries(o),t+1,n));return}}let a=We(i);if(Pe(s))yield V(t,`${a}: ${Ve(s,n.delimiter)}`,n.indent);else if(le(s))if(s.length===0)yield V(t,`${a}: []`,n.indent);else if(dt(s))yield V(t,`${a}${qt(s,n.delimiter)}`,n.indent);else{yield V(t,`${a}${De(s.length,{delimiter:n.delimiter})}`,n.indent);for(let c of s)yield*Jn(c,t+2,n)}else $(s)&&(yield V(t,`${a}:`,n.indent),lt(s)||(yield*qe(s,t+2,n)));o.length>0&&(yield*qe(Object.fromEntries(o),t+1,n))}function*Jn(e,t,n){if(Pe(e))yield V(t,Ve(e,n.delimiter),n.indent);else if(le(e))if(dt(e))yield V(t,qt(e,n.delimiter),n.indent);else{yield V(t,De(e.length,{delimiter:n.delimiter}),n.indent);for(let r of e)yield*Jn(r,t+1,n)}else $(e)&&(yield*mu(e,t,n))}function B(e,t,n){return" ".repeat(n*e)+t}function V(e,t,n){return B(e,"- "+t,n)}function pu(e,t){let n=t("",e,[]);return n===void 0?Ft(e,t,[]):Ft(te(n),t,[])}function Ft(e,t,n){return $(e)?gu(e,t,n):le(e)?yu(e,t,n):e}function gu(e,t,n){let r={};for(let[i,s]of Object.entries(e)){let o=[...n,i],a=t(i,s,o);a!==void 0&&(r[i]=Ft(te(a),t,o))}return r}function yu(e,t,n){let r=[];for(let i=0;i<e.length;i++){let s=e[i],o=[...n,i],a=t(String(i),s,o);if(a===void 0)continue;let c=te(a);r.push(Ft(c,t,o))}return r}function P(e,t){return Array.from(Gi(e,t)).join(`
|
|
5
|
-
`)}function qn(e,t){return Ji(e.split(`
|
|
6
|
-
`),t)}function Gi(e,t){let n=te(e),r=hu(t);return cu(r.replacer?pu(n,r.replacer):n,r,0)}function Ji(e,t){let n=wu(t),r=tu(Uc(e,{indent:n.indent,strict:n.strict}));return n.expandPaths==="safe"?Ct(r,n.strict):r}function hu(e){return{indent:e?.indent??2,delimiter:e?.delimiter??W,keyFolding:e?.keyFolding??"off",flattenDepth:e?.flattenDepth??Number.POSITIVE_INFINITY,replacer:e?.replacer}}function wu(e){return{indent:e?.indent??2,strict:e?.strict??!0,expandPaths:e?.expandPaths??"off"}}var Ec,Mt,W,U,kc,vc,xc,jc,zc,Yc,Mi,qi=S(()=>{Ec="null",Mt={comma:",",tab:" ",pipe:"|"},W=Mt.comma;U=class extends SyntaxError{constructor(e,t){let n=t?.line!==void 0?`Line ${t.line}: `:"";super(n+e,t?.cause!==void 0?{cause:t.cause}:void 0),this.name="ToonDecodeError",this.line=t?.line,this.source=t?.source}};kc=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:e[+-]?\d+)?$/i;vc=/^(?:0|[1-9]\d*)$/;xc=[","," ","|"];jc=class{constructor(e,t){this.buffer=[],this.done=!1,this.generator=e,this.scanState=t}getBlankLines(){return this.scanState.blankLines}async peek(){if(this.buffer.length>0)return this.buffer[0];if(this.done)return;let e=await this.generator.next();if(e.done){this.done=!0;return}return this.buffer.push(e.value),e.value}async next(){let e=await this.peek();return e!==void 0&&(this.buffer.shift(),this.lastLine=e),e}async advance(){await this.next()}current(){return this.lastLine}async atEnd(){return await this.peek()===void 0}peekSync(){if(this.buffer.length>0)return this.buffer[0];if(this.done)return;let e=this.generator.next();if(e.done){this.done=!0;return}return this.buffer.push(e.value),e.value}nextSync(){let e=this.peekSync();return e!==void 0&&(this.buffer.shift(),this.lastLine=e),e}advanceSync(){this.nextSync()}atEndSync(){return this.peekSync()===void 0}};zc=/^-?\d+(?:\.\d+)?(?:e[+-]?\d+)?$/i,Yc=/^0\d+$/;Mi=Symbol("quotedKey")});var de=S(()=>{"use strict";qi()});function Wn(e,t,n=Wi){let r=Math.max(0,Math.floor(e)),i=n in Hi?n:Wi,s=Hi[i],o=t?Math.floor(r*(1-.25)):null,a=t?Math.ceil(r*(1+.25)):null;return{tokens_saved:r,tokens_saved_estimated:t,token_estimate_range_pct:t?.25:null,tokens_saved_low:o,tokens_saved_high:a,dollars_saved_estimate_usd:Vn(r,s),dollars_saved_low_usd:o==null?null:Vn(o,s),dollars_saved_high_usd:a==null?null:Vn(a,s),pricing_model_family:i,pricing_input_usd_per_million_tokens:s,pricing_note:_u}}function Vn(e,t){return Ru(Math.max(0,e)/1e6*t)}function ft(e){return`$${e.toFixed(6)}`}function Ru(e){return Math.round(e*1e6)/1e6}var Wi,Hi,_u,Hn=S(()=>{"use strict";Wi="gpt-5",Hi={"gpt-5":1.25,"gpt-5-mini":.25,"gpt-5-nano":.05,"gpt-4.1":2,"gpt-4.1-mini":.4,"gpt-4o":2.5,"gpt-4o-mini":.15},_u="estimate derived from byte-based token estimate when token counts are estimated"});import{existsSync as Eu,readFileSync as Ey}from"node:fs";import{dirname as ku,join as Su}from"node:path";function Ki(e,t){let n=e;for(let r=0;r<16;r++){let i=Su(n,t);if(Eu(i))return i;let s=ku(n);if(s===n)break;n=s}return null}function vu(e){let t=e.indexOf(" #");return(t>=0?e.slice(0,t):e).trim()}function Kn(e,t){let n=[];for(let r of e.split(`
|
|
7
|
-
`)){let i=r.replace(/\r$/,""),s=i.trim();if(!s||s.startsWith("#"))continue;let o=i.indexOf(":");if(o<0)continue;let a=i.length-i.trimStart().length,c=i.slice(0,o).trim();if(!c)continue;let u=i.slice(o+1).trim();for(;n.length&&n[n.length-1].indent>=a;)n.pop();if(n.push({indent:a,key:c}),u&&n.map(d=>d.key).join(".")===t)return vu(u)}}var zi=S(()=>{});import{createConnection as Tu}from"node:net";async function Ke(e,t){let n=e.timeoutMs??1e3;return await new Promise((r,i)=>{let s=Tu(e.socketPath),o=!1,a="",c=setTimeout(()=>{u(()=>i(new Error("resident rsp server timed out"))),s.destroy()},n);function u(l){o||(o=!0,clearTimeout(c),l())}s.on("connect",()=>{s.write(`${JSON.stringify(t)}
|
|
8
|
-
`)}),s.on("data",l=>{a+=l.toString("utf8");let d=a.indexOf(`
|
|
9
|
-
`);if(d<0)return;let m=a.slice(0,d);u(()=>{try{r(JSON.parse(m))}catch(_){i(_)}}),s.end()}),s.on("error",l=>u(()=>i(l))),s.on("close",()=>{o||u(()=>i(new Error("resident rsp server closed without response")))})})}var zn=S(()=>{});import{createHash as xu,randomUUID as es}from"node:crypto";import{spawn as ts}from"node:child_process";import{constants as Yn}from"node:fs";import{readFileSync as Ou}from"node:fs";import{mkdir as Vt,open as Pu,readFile as ns,rename as Du,rm as H,stat as $u,writeFile as Iu}from"node:fs/promises";import{tmpdir as Au}from"node:os";import{dirname as fe,join as F,resolve as Wt}from"node:path";import{fileURLToPath as rs}from"node:url";function me(e){let t=qu(e)??Wt(e),n=Ju(t);return{rootDir:t,socketPath:F(n,"rsp.sock"),pidPath:F(n,"rsp.pid"),lockPath:F(n,"rsp.lock"),wakeLockPath:F(t,".red","tmp","rsp.wake.lock"),summaryPath:F(t,".red","tmp","rsp-status-summary.json"),registryPath:F(t,".red","tmp","rsp-resident.pid.json")}}async function Ht(e,t){if(await Vt(fe(e.socketPath),{recursive:!0,mode:448}),await Xi(e.socketPath,t))return;await Qi(e,t);let n=await cs(e.lockPath);if(n)try{if(await Xi(e.socketPath,t))return;await Qi(e,t),await Cu(e.socketPath);let r=Mu(e,t);await Yi(e.socketPath,r);return}finally{await n.close(),await H(e.lockPath,{force:!0})}await Yi(e.socketPath)}async function $e(e,t=200){try{return await ss(e,t)!=null}catch{return!1}}async function ss(e,t=200){let n=await Ke({socketPath:e,timeoutMs:t},{id:es(),op:"ping"});return n.ok?fs(n.value)?{version:Ku(n.value.version)}:{}:null}async function Kt(e,t){if(await Vt(fe(e.socketPath),{recursive:!0,mode:448}),await $e(e.socketPath,50))return!1;let n=await cs(e.wakeLockPath);if(!n)return!1;await n.close();let[r,i]=ls(t);return ts(r,[...i,"warm-resident","--socket",e.socketPath,"--pid-file",e.pidPath,"--store-uri",t.storeUri,"--ttl-days",String(t.ttlDays),"--byte-budget",String(t.byteBudget),"--telemetry-ttl-days",String(t.telemetryTtlDays??90),"--telemetry-byte-budget",String(t.telemetryByteBudget??t.byteBudget),"--telemetry-drain-interval-ms",String(t.telemetryDrainIntervalMs??3e4),"--telemetry-drain-timeout-ms",String(t.telemetryDrainTimeoutMs??2e3),"--idle-ms",String(t.idleMs??3e5),"--resident-version",t.clientVersion??"0.0.0-dev","--registry",e.registryPath,"--wake-lock",e.wakeLockPath],{cwd:e.rootDir,detached:!0,stdio:"ignore",env:{...process.env,RSP_RESIDENT_WARMER:"1"}}).unref(),!0}async function os(e,t){try{await Ht(e,t)}finally{await H(e.wakeLockPath,{force:!0})}}async function pt(e){try{let t=JSON.parse(await ns(e,"utf8"));return zu(t)?t:null}catch{return null}}async function zt(e,t){let n={version:is,pid:t.pid??process.pid,socket_path:t.socket_path,store_uri:t.store_uri,resident_version:t.resident_version,started_at:t.started_at??new Date().toISOString()};await Vt(fe(e),{recursive:!0});let r=`${e}.${process.pid}.${Date.now()}.tmp`;await Iu(r,`${JSON.stringify(n)}
|
|
10
|
-
`,{encoding:"utf8",mode:384}),await Du(r,e)}async function Yt(e,t=process.pid){try{let n=await pt(e);if(n&&n.pid!==t)return;await H(e,{force:!0})}catch{}}async function mt(e){let t=await pt(e.registryPath);if(!t)try{return await ns(e.registryPath,"utf8"),{registry_path:e.registryPath,state:"invalid"}}catch{return{registry_path:e.registryPath,state:"missing"}}if(!ze(t.pid))return{registry_path:e.registryPath,state:"registered-dead",entry:t};let n=await $e(t.socket_path,100);return n&&await Gu(t.store_uri)?{registry_path:e.registryPath,state:"registered-alive-store-missing",entry:t}:{registry_path:e.registryPath,state:n?"registered-alive-socket-healthy":"registered-alive-socket-dead",entry:t}}async function as(e){let t=await mt(e);return t.state==="registered-dead"||t.state==="invalid"?(await H(e.registryPath,{force:!0}),await mt(e)):(t.state==="registered-alive-socket-dead"||t.state==="registered-alive-store-missing")&&t.entry?(await us(t.entry.pid),await H(e.registryPath,{force:!0}),await H(t.entry.socket_path,{force:!0}),await mt(e)):t}async function Yi(e,t){let n=Date.now()+Lu(),r;for(;Date.now()<n;){if(await $e(e))return;if(t){let i=t.spawnError();if(i)throw new Error(Qn("resident rsp server spawn failed",t,i));if(t.child.exitCode!=null||t.child.signalCode!=null)throw new Error(Qn("resident rsp server exited before ready",t))}await new Promise(i=>setTimeout(i,50))}throw r instanceof Error?r:new Error(t?Qn("resident rsp server did not start",t):"resident rsp server did not start")}function Lu(){let e=Number(process.env.RSP_RESIDENT_READY_TIMEOUT_MS??"");return Number.isFinite(e)&&e>0?e:Bu}async function Cu(e){await H(e,{force:!0})}async function cs(e){await Vt(fe(e),{recursive:!0,mode:448});try{return await Pu(e,Yn.O_CREAT|Yn.O_EXCL|Yn.O_RDWR)}catch(t){if(t.code!=="EEXIST")throw t;return null}}function Mu(e,t){let[n,r]=ls(t),i=process.env.RSP_DEBUG==="1",s,o="",a=ts(n,[...r,"server","--socket",e.socketPath,"--pid-file",e.pidPath,"--store-uri",t.storeUri,"--ttl-days",String(t.ttlDays),"--byte-budget",String(t.byteBudget),"--telemetry-ttl-days",String(t.telemetryTtlDays??90),"--telemetry-byte-budget",String(t.telemetryByteBudget??t.byteBudget),"--telemetry-drain-interval-ms",String(t.telemetryDrainIntervalMs??3e4),"--telemetry-drain-timeout-ms",String(t.telemetryDrainTimeoutMs??2e3),"--idle-ms",String(t.idleMs??3e5),"--resident-version",t.clientVersion??"0.0.0-dev","--registry",e.registryPath],{cwd:e.rootDir,detached:!0,stdio:i?["ignore","ignore","pipe"]:"ignore",env:{...process.env,RSP_RESIDENT_SERVER:"1"}});return a.on("error",c=>{s=c}),i&&(a.stderr?.setEncoding("utf8"),a.stderr?.on("data",c=>{o=Uu(`${o}${c}`,ju)})),a.unref(),{child:a,stderrTail:()=>o,spawnError:()=>s}}function Qn(e,t,n){let r=[e];n&&r.push(`error: ${n.message}`),t.child.exitCode!=null&&r.push(`exit code: ${t.child.exitCode}`),t.child.signalCode!=null&&r.push(`signal: ${t.child.signalCode}`);let i=t.stderrTail().trimEnd();return i&&r.push(`stderr tail:
|
|
11
|
-
${i}`),r.join(`
|
|
12
|
-
`)}function Uu(e,t){let n=Buffer.byteLength(e,"utf8");return n<=t?e:Buffer.from(e,"utf8").subarray(n-t).toString("utf8").replace(/^\uFFFD+/,"")}async function Qi(e,t){try{let n=await pt(e.registryPath);if(!n||n.socket_path!==e.socketPath||n.store_uri!==t.storeUri)return;if(!ze(n.pid)){await H(e.registryPath,{force:!0});return}if(await $e(n.socket_path,100))return;if(ds(t.clientVersion,n.resident_version)&&(await Fu(n.pid,1500),!ze(n.pid))){await H(e.registryPath,{force:!0});return}await us(n.pid),await H(e.registryPath,{force:!0})}catch{}}function ze(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}async function us(e){if(!ze(e))return;try{process.kill(e,"SIGTERM")}catch{return}let t=Date.now()+1e3;for(;Date.now()<t;){if(!ze(e))return;await new Promise(n=>setTimeout(n,50))}try{process.kill(e,"SIGKILL")}catch{}}async function Fu(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!ze(e))return;await new Promise(r=>setTimeout(r,50))}}async function Gu(e){if(!e.startsWith("file://"))return!1;try{return await $u(rs(e)),!1}catch(t){return t.code==="ENOENT"}}function ls(e){if(e.serverCommand)return[e.serverCommand,e.serverArgs??[]];let t=process.argv[1]?Wt(process.argv[1]):rs(import.meta.url);return[process.execPath,[...process.execArgv,t]]}function Ju(e){let t=xu("sha256").update(e).digest("hex").slice(0,20),n=process.env.XDG_RUNTIME_DIR;if(n){let i=F(n,"red-skills",t);if(F(i,"rsp.sock").length<Nu)return i}let r=typeof process.getuid=="function"?process.getuid():"nouid";return F(Au(),`red-skills-${r}`,t)}function qu(e){let t=Wt(e);for(let n=0;n<32;n++){try{let i=Xn(F(t,".git"));if(i!=null)return Vu(t,i)??t;if(Xn(F(t,".git","HEAD"))!=null||Xn(F(t,".red","config.yaml"))!=null)return t}catch{}let r=fe(t);if(r===t)return null;t=r}return null}function Vu(e,t){let n=/^gitdir:\s*(.+?)\s*$/m.exec(t);if(!n)return null;let r=Wt(e,n[1]);return/[/\\]worktrees[/\\][^/\\]+$/.test(r)?fe(fe(fe(r))):null}function Xn(e){try{return Ou(e,"utf8")}catch{return null}}async function Xi(e,t){let n=await ss(e).catch(()=>null);return n?ds(t.clientVersion,n.version)?(await Wu(e,t.clientVersion),await Yu(e),!1):!0:!1}async function Wu(e,t){try{await Ke({socketPath:e,timeoutMs:200},{id:es(),op:"handover",clientVersion:t})}catch{}}function ds(e,t){return!e||!t?!1:Hu(e,t)>0}function Hu(e,t){let n=Zi(e),r=Zi(t);return!n||!r?0:n.major-r.major||n.minor-r.minor||n.patch-r.patch}function Zi(e){let t=/^(\d+)\.(\d+)\.(\d+)/.exec(String(e).trim());return t?{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3])}:null}function fs(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ku(e){return typeof e=="string"&&e.length>0?e:void 0}function zu(e){return fs(e)&&e.version===is&&Number.isInteger(e.pid)&&typeof e.socket_path=="string"&&typeof e.store_uri=="string"&&typeof e.resident_version=="string"&&typeof e.started_at=="string"}async function Yu(e){let t=Date.now()+1e3;for(;Date.now()<t;){if(!await $e(e,50))return;await new Promise(n=>setTimeout(n,50))}}var Nu,is,Bu,ju,Qt=S(()=>{zn();Nu=108,is=1,Bu=5e3;ju=8*1024});var ws={};D(ws,{DEFAULT_RSP_BYTE_BUDGET:()=>se,DEFAULT_RSP_HEAVY_GIT_BYTE_THRESHOLD:()=>re,DEFAULT_RSP_IDLE_MS:()=>nn,DEFAULT_RSP_STORE_PATH:()=>Zt,DEFAULT_RSP_TELEMETRY_BYTE_BUDGET:()=>tn,DEFAULT_RSP_TELEMETRY_DRAIN_INTERVAL_MS:()=>gs,DEFAULT_RSP_TELEMETRY_DRAIN_TIMEOUT_MS:()=>ys,DEFAULT_RSP_TELEMETRY_TTL_DAYS:()=>en,DEFAULT_RSP_TTL_DAYS:()=>ie,MIN_RSP_IDLE_MS:()=>hs,resolveRspConfig:()=>ge});import{readFileSync as Qu}from"node:fs";import{join as ms,resolve as ps}from"node:path";function ge(e,t,n){let r=Ki(ps(e),ms(".red","config.yaml")),i=r?Qu(r,"utf8"):"",s=Kn(i,"rsp.enabled")==="true",o=pe(ne(i,"rsp.ttlDays"),ie),a=pe(ne(i,"rsp.byteBudget"),se),c=pe(ne(i,"rsp.telemetryTtlDays"),en),u=pe(ne(i,"rsp.telemetryByteBudget")??ne(i,"rsp.byteBudget"),tn),l=pe(Xt(t.RSP_TELEMETRY_DRAIN_INTERVAL_MS)??ne(i,"rsp.telemetryDrainIntervalMs"),gs),d=pe(Xt(t.RSP_TELEMETRY_DRAIN_TIMEOUT_MS)??ne(i,"rsp.telemetryDrainTimeoutMs"),ys),m=Xu(Xt(t.RSP_IDLE_MS)??ne(i,"rsp.idleMs"),nn,hs),_=pe(Xt(t.RSP_HEAVY_GIT_BYTE_THRESHOLD)??ne(i,"rsp.heavyGitByteThreshold"),re),R=me(e).rootDir,T=n??t.RSP_STORE_URI??`file://${ms(ps(R),Zt)}`;return{enabled:s,storeUri:T,ttlDays:o,byteBudget:a,telemetryTtlDays:c,telemetryByteBudget:u,telemetryDrainIntervalMs:l,telemetryDrainTimeoutMs:d,idleMs:m,heavyGitByteThreshold:_}}function ne(e,t){let n=Kn(e,t);if(n==null)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function pe(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}function Xu(e,t,n){let r=pe(e,t);return Math.max(r,n)}function Xt(e){if(e==null||e.trim()==="")return;let t=Number(e);return Number.isFinite(t)?t:void 0}var re,Zt,ie,se,en,tn,gs,ys,nn,hs,K=S(()=>{"use strict";zi();Qt();re=8*1024,Zt=".red/tmp/red-skills.rdb",ie=7,se=64*1024*1024,en=90,tn=4*1024*1024,gs=3e4,ys=2e3,nn=5*6e4,hs=5e3});var bs=S(()=>{"use strict";zn()});var yt={};D(yt,{ResidentRspElisionStore:()=>gt,ensureResidentServer:()=>Ht,kickResidentServer:()=>Kt,pingResident:()=>$e,readResidentRegistry:()=>pt,removeResidentRegistry:()=>Yt,residentRegistryStatus:()=>mt,resolveResidentPaths:()=>me,sweepResidentRegistry:()=>as,warmResidentServer:()=>os,writeResidentRegistry:()=>zt});import{randomUUID as Zu}from"node:crypto";function _s(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var gt,Ie=S(()=>{"use strict";bs();Qt();gt=class{constructor(t,n,r={}){this.paths=t;this.config=n;this.opts=r}metrics;lastResponseMetrics(){return this.metrics}async mint(t,n){let i=(await this.request({op:"mint",original:Buffer.from(t).toString("base64"),meta:n})).handle;if(!i?.startsWith("el:"))throw new Error("resident rsp returned invalid handle");return i}async get(t){let n=await this.request({op:"get",handle:t});return n?_s(n)&&n.status==="expired"?n:!_s(n)||typeof n.original!="string"?null:{...n,original:Buffer.from(n.original,"base64")}:null}async stats(){return await this.request({op:"stats"})}async telemetryStats(t){return await this.request({op:"telemetry-stats",sinceDays:t})}async telemetryGains(t){return await this.request({op:"telemetry-gains",sinceDays:t})}async memory(t,n){return await this.request({op:"memory",action:t,payload:n})}async close(){}async request(t){this.opts.ensureResident!==!1&&await Ht(this.paths,this.config);let n=await Ke(this.paths,{...t,id:Zu()});if(!n.ok)throw new Error(n.error);return this.metrics={storeOpenCount:n.storeOpenCount,storeElapsedMs:n.storeElapsedMs},n.value}}});var rr={};D(rr,{RSP_WRAPPER_CAPABILITIES:()=>wt,formatCodexHookDecision:()=>xs,formatHookDecision:()=>Ts,hookDecisionFromClaudePreExecJson:()=>ks,hookDecisionFromCodexPreExecJson:()=>Ss,rewriteCommand:()=>Es,rewriteTableFromCapabilities:()=>Rs,runClaudePreExecHook:()=>il,runCodexPreExecHook:()=>sl});import{readFileSync as rn}from"node:fs";import{existsSync as el}from"node:fs";import{fileURLToPath as tl}from"node:url";function Rs(e){let t=new Map;for(let n of e)t.set(ht(n.command),["rsp",...n.wrapper]);return t}function Es(e){let t=ml(e);if(!t||t.length>0&&As(t[0]))return er(e);let n=rl(t);if(n)return n;let r=nl.get(ht(t));if(!r)return er(e);let i=wt.find(s=>ht(s.command)===ht(t));return{kind:"rewrite",command:r.join(" "),capabilityId:i?.id??ht(t)}}function rl(e){let t=e[0];return t==="cat"&&e.length===2&&Zn(e[1])?{kind:"rewrite",command:`rsp cat ${e[1]}`,capabilityId:"cat:file"}:(t==="head"||t==="tail")&&e.length===2&&Zn(e[1])?{kind:"rewrite",command:`rsp cat --${t} 10 ${e[1]}`,capabilityId:`cat:${t}`}:(t==="head"||t==="tail")&&e.length===4&&e[1]==="-n"&&/^[1-9][0-9]*$/.test(e[2])&&Zn(e[3])?{kind:"rewrite",command:`rsp cat --${t} ${e[2]} ${e[3]}`,capabilityId:`cat:${t}`}:null}function Zn(e){return!!e&&!e.startsWith("-")&&!/[ \t]/.test(e)}async function ks(e,t){return await vs(e,t)}async function Ss(e,t){return await vs(e,t)}async function vs(e,t){let n=El(e);if(!n.ok)return{kind:"passthrough",reason:n.reason};let r=n.payload,i=G(r,["cwd"])||G(r,["tool_input","cwd"])||t.cwd;if(!await(t.isEnabled??ol)(i))return{kind:"passthrough",reason:"disabled"};let o=fl(r);if(!o)return{kind:"passthrough",reason:"missing-command"};let a=(t.rewrite??Es)(o);return a.kind!=="rewrite"?a.reason?a:{...a,reason:"unsupported-command"}:(await cl(i,t.wakeResident??al),a)}function Ts(e){return e.kind==="rewrite"?Os(e.command):{stdout:"",status:0}}function xs(e){return e.kind==="rewrite"?Os(e.command):{stdout:"",status:0}}function Os(e){return{stdout:`${JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow",updatedInput:{command:e}}})}
|
|
13
|
-
`,status:0}}async function il(e){try{let t=e?rn(e,"utf8"):rn(0,"utf8"),n=await ks(t,{cwd:process.cwd()});Ps("claude-pre-exec",n);let r=Ts(n);return r.stdout&&process.stdout.write(r.stdout),r.status}catch(t){return Ds("claude-pre-exec",t),0}}async function sl(e){try{let t=e?rn(e,"utf8"):rn(0,"utf8"),n=await Ss(t,{cwd:process.cwd()});Ps("codex-pre-exec",n);let r=xs(n);return r.stdout&&process.stdout.write(r.stdout),r.status}catch(t){return Ds("codex-pre-exec",t),0}}function ol(e){return ge(e,process.env).enabled}async function al(e){let t=ge(e,process.env);if(!t.enabled||!dl(t))return;let n=me(e);await Kt(n,ll(t))}async function cl(e,t){try{await Promise.resolve(t(e))}catch(n){ul(n)}}function Ps(e,t){if(process.env.RSP_DEBUG==="1"){if(t.kind==="rewrite"){process.stderr.write(`rsp hook ${e}: rewrite ${t.capabilityId}
|
|
14
|
-
`);return}process.stderr.write(`rsp hook ${e}: passthrough ${t.reason??"unsupported-command"}
|
|
15
|
-
`)}}function Ds(e,t){process.env.RSP_DEBUG==="1"&&process.stderr.write(`rsp hook ${e}: exception ${$s(t)}
|
|
16
|
-
`)}function ul(e){process.env.RSP_DEBUG==="1"&&process.stderr.write(`rsp hook pre-exec: resident-wake-failed ${$s(e)}
|
|
17
|
-
`)}function $s(e){return e instanceof Error?e.name||"Error":typeof e}function ll(e){return{storeUri:e.storeUri,ttlDays:e.ttlDays,byteBudget:e.byteBudget,telemetryTtlDays:e.telemetryTtlDays,telemetryByteBudget:e.telemetryByteBudget,telemetryDrainIntervalMs:e.telemetryDrainIntervalMs,telemetryDrainTimeoutMs:e.telemetryDrainTimeoutMs,idleMs:e.idleMs}}function dl(e){if(!e.storeUri.startsWith("file://"))return!0;try{return el(tl(e.storeUri))}catch{return!1}}function fl(e){return G(e,["tool_input","command"])||G(e,["tool_input","cmd"])||G(e,["tool_input","args","command"])||G(e,["input","command"])||G(e,["input","cmd"])||G(e,["arguments","command"])||G(e,["arguments","cmd"])||G(e,["command"])||G(e,["cmd"])}function ml(e){let t=e.trim();if(!t||/[\n\r|&;()$<>`'"]/.test(t))return null;let n=t.split(/[ \t]+/).filter(Boolean);return n.length===0||n.some(r=>r.includes("=")&&As(r))?null:n}function er(e){let t=e.trim();return pl(t)?{kind:"rewrite",command:`rsp exec -- ${Rl(t)}`,capabilityId:"exec:compound"}:{kind:"passthrough"}}function pl(e){return!(!e||!yl(e)||!wl(e)||hl(e)||/<<-?/.test(e)||/\$\(|`/.test(e)||/[<>]/.test(e)||bl(e,"rsp")||Is(e,gl)||_l(e))}function yl(e){return/&&|[;|]/.test(e)}function hl(e){for(let t=0;t<e.length;t+=1)if(e[t]==="&"&&!(e[t-1]==="&"||e[t+1]==="&"))return!0;return!1}function wl(e){return tr(e).some(t=>{let n=nr(t);return n.length===0?!1:n[0]==="git"?["log","diff","show","blame"].includes(n[1]??""):n[0]==="gh"?n.some((r,i)=>i>0&&(r==="list"||r==="view")):n[0]==="vitest"?!0:n[0]==="cargo"&&n[1]==="test"})}function Is(e,t){return tr(e).some(n=>{let r=nr(n)[0];return r?t.has(r):!1})}function bl(e,t){return Is(e,new Set([t]))}function _l(e){return tr(e).some(t=>{let n=nr(t);return n[0]==="grep"&&n.includes("-q")})}function tr(e){return e.split(/&&|[;|]/).map(t=>t.trim()).filter(Boolean)}function nr(e){return e.split(/[ \t]+/).filter(Boolean).map(t=>t.replace(/^env$/,""))}function Rl(e){return`'${e.replace(/'/g,"'\\''")}'`}function As(e){return/^[A-Za-z_][A-Za-z0-9_]*=.*/.test(e)}function ht(e){return e.join("\0")}function El(e){try{let t=JSON.parse(e);return Ns(t)?{ok:!0,payload:t}:{ok:!1,reason:"payload-not-object"}}catch{return{ok:!1,reason:"payload-parse-error"}}}function G(e,t){let n=e;for(let r of t){if(!Ns(n))return"";n=n[r]}return typeof n=="string"?n:""}function Ns(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var wt,nl,gl,sn=S(()=>{"use strict";K();Ie();wt=[{id:"git:status",command:["git","status"],wrapper:["git","status"]},{id:"git:log",command:["git","log"],wrapper:["git","log"]},{id:"git:diff",command:["git","diff"],wrapper:["git","diff"]},{id:"git:commit",command:["git","commit"],wrapper:["git","commit"]},{id:"git:push",command:["git","push"],wrapper:["git","push"]},{id:"git:blame",command:["git","blame"],wrapper:["git","blame"]},{id:"git:branch:av",command:["git","branch","-av"],wrapper:["git","branch","-av"]},{id:"git:show",command:["git","show"],wrapper:["git","show"]},{id:"gh:pr:list",command:["gh","pr","list"],wrapper:["gh","pr","list"]},{id:"gh:pr:view",command:["gh","pr","view"],wrapper:["gh","pr","view"]},{id:"gh:issue:list",command:["gh","issue","list"],wrapper:["gh","issue","list"]},{id:"gh:issue:view",command:["gh","issue","view"],wrapper:["gh","issue","view"]},{id:"gh:run:list",command:["gh","run","list"],wrapper:["gh","run","list"]},{id:"gh:run:view",command:["gh","run","view"],wrapper:["gh","run","view"]},{id:"vitest",command:["vitest"],wrapper:["vitest"]},{id:"vitest:run",command:["vitest","run"],wrapper:["vitest","run"]},{id:"cargo:test",command:["cargo","test"],wrapper:["cargo","test"]}],nl=Rs(wt);gl=new Set(["bash","fish","htop","less","more","nano","node","python","python3","ssh","top","vi","vim","zsh"])});var sr={};D(sr,{NORMALIZATION_ALLOWLIST:()=>Js,NORMALIZE_ANSI:()=>Cs,NORMALIZE_BLANK_LINES:()=>Us,NORMALIZE_CR_PROGRESS:()=>Ms,NORMALIZE_JSON_TOON:()=>Gs,NORMALIZE_TRAILING_WHITESPACE:()=>js,formatCodexNormalizeDecision:()=>Ks,formatNormalizeDecision:()=>Hs,hookDecisionFromClaudePostExecJson:()=>qs,hookDecisionFromCodexPostExecJson:()=>Vs,normalizeOutput:()=>Ye,renderGenericJsonLane:()=>bt,runClaudePostExecHook:()=>vl,runCodexPostExecHook:()=>Tl,transcodeJsonToToon:()=>Fs});import{readFileSync as on}from"node:fs";function Fs(e,t){let n=t?.encode??P,r=t?.decode??qn,i=e.trimEnd();if(!i)return e;let s;try{s=JSON.parse(i)}catch{return e}let o;try{o=n(s)}catch{return e}let a;try{a=r(o)}catch{return e}return ir(s,a)?o:e}async function bt(e,t={}){let n=Dl(e);if(!n)return{output:e,detected:!1,lossy:!1};let r=n.value;if(!Array.isArray(r))return{output:P(r),detected:!0,lossy:!1};let i=r.length,s=Ls(t.minTokens,kl),o=Ls(t.maxItems,Sl);if(!(i>o&&Bl(e)>=s))return{output:P(r),detected:!0,lossy:!1,totalItems:i,keptItems:i};let c=$l(r,o),u={items:c},l=`items: ${c.length} of ${i} kept`,d;t.level&&t.level!=="lossless"&&(d=await t.store?.mint(Buffer.from(e),{command:t.command??"rsp json",loss:{level:t.level,bytes_elided:Buffer.byteLength(e)}}));let m=d?`original: rsp show ${d}`:`original: unavailable - re-run: ${t.command??"command"}`;return{output:[l,m,P(u)].filter(Boolean).join(`
|
|
18
|
-
`),detected:!0,lossy:!0,totalItems:i,keptItems:c.length,handle:d}}function Ye(e){let t=e;for(let n of Js)t=n.apply(t);return t}async function qs(e,t){return await Ws(e,t)}async function Vs(e,t){return await Ws(e,t)}async function Ws(e,t){let n=Pl(e),r=Ll(n,["cwd"])||t.cwd;if(!await(t.isEnabled??Ol)(r))return{kind:"passthrough",reason:"disabled"};let s=Cl(n,"tool_response");if(!s)return{kind:"passthrough",reason:"missing-output"};if(typeof s.output!="string")return{kind:"passthrough",reason:"missing-output"};let o=s.output,c=(t.normalize??Ye)(o);return c===o?{kind:"passthrough",reason:"no-change"}:{kind:"normalized",output:c}}function Hs(e){return e.kind==="normalized"?{stdout:JSON.stringify({tool_response:{output:e.output}}),status:0}:{stdout:"",status:0}}function Ks(e){return{stdout:"",status:0}}async function vl(e){let t=e?on(e,"utf8"):on(0,"utf8"),n=await qs(t,{cwd:process.cwd()}),r=Hs(n);return r.stdout&&process.stdout.write(r.stdout),r.status}async function Tl(e){let t=e?on(e,"utf8"):on(0,"utf8"),n=await Vs(t,{cwd:process.cwd()}),r=Ks(n);return r.stdout&&process.stdout.write(r.stdout),r.status}function xl(e){let t="",n=0;for(;n<e.length;){let r=e.charCodeAt(n);if(r===27){let i=e.charCodeAt(n+1);if(i===93){for(n+=2;n<e.length;){let s=e.charCodeAt(n);if(s===7){n++;break}if(s===27&&e.charCodeAt(n+1)===92){n+=2;break}n++}continue}if(i===91){for(n+=2;n<e.length&&Bs(e.charCodeAt(n));)n++;n<e.length&&n++;continue}n+=i>=32?2:1;continue}if(r===155){for(n++;n<e.length&&Bs(e.charCodeAt(n));)n++;n<e.length&&n++;continue}t+=e[n++]}return t}function Bs(e){return e>=32&&e<=63}function Ol(e){return ge(e,process.env).enabled}function Pl(e){try{let t=JSON.parse(e);return ye(t)?t:{}}catch{return{}}}function Dl(e){let t=e.trim();if(!t)return null;try{let r=JSON.parse(t);return ye(r)||Array.isArray(r)?{value:r}:null}catch{}let n=[];for(let r of e.split(/\r?\n/))if(r.trim())try{n.push(JSON.parse(r))}catch{return null}return n.length>0?{value:n}:null}function $l(e,t){if(e.length<=t)return[...e];let n=new Set,r=Math.max(1,Math.floor(t*.2));for(let s=0;s<r;s++)n.add(s),n.add(e.length-1-s);for(let s=0;s<e.length;s++)Il(e[s])&&n.add(s);for(let s of Al(e))n.add(s);for(let s of Nl(e))n.add(s);let i=Math.max(1,Math.floor(e.length/Math.max(1,t-n.size)));for(let s=0;n.size<t&&s<i;s++)for(let o=s;n.size<t&&o<e.length;o+=i)n.add(o);return[...n].sort((s,o)=>s-o).slice(0,t).map(s=>e[s])}function Il(e){if(!ye(e))return!1;let t=e.level;if(typeof t=="string"&&t.toLowerCase()==="error"||Object.prototype.hasOwnProperty.call(e,"error")&&e.error)return!0;let n=e.status;return typeof n=="number"&&n>=400}function Al(e){let t=new Map;e.forEach((r,i)=>{if(ye(r))for(let[s,o]of Object.entries(r)){if(typeof o!="number"||!Number.isFinite(o))continue;let a=t.get(s)??[];a.push({index:i,value:o}),t.set(s,a)}});let n=new Set;for(let r of t.values()){if(r.length<3)continue;let i=r.reduce((a,c)=>a+c.value,0)/r.length,s=r.reduce((a,c)=>a+Math.pow(c.value-i,2),0)/r.length,o=Math.sqrt(s);if(o!==0)for(let a of r)Math.abs(a.value-i)>o*2&&n.add(a.index)}return[...n]}function Nl(e){let t=new Set;for(let n=1;n<e.length;n++){let r=e[n-1],i=e[n];if(!(!ye(r)||!ye(i)))for(let[s,o]of Object.entries(i)){if(typeof o!="number"||!Number.isFinite(o))continue;let a=r[s];typeof a!="number"||!Number.isFinite(a)||(a===0?Math.abs(o)>10:Math.abs((o-a)/a)>=2)&&t.add(n)}}return[...t]}function Bl(e){return Math.ceil(e.length/4)}function Ls(e,t){return e==null?t:Number.isFinite(e)&&e>0?Math.floor(e):t}function Ll(e,t){let n=e;for(let r of t){if(!ye(n))return"";n=n[r]}return typeof n=="string"?n:""}function Cl(e,t){let n=e[t];return ye(n)?n:null}function ye(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ir(e,t){if(e===t)return!0;if(e===null||t===null||typeof e!=typeof t||typeof e!="object"||Array.isArray(e)!==Array.isArray(t))return!1;if(Array.isArray(e)){let o=t;return e.length!==o.length?!1:e.every((a,c)=>ir(a,o[c]))}let n=e,r=t,i=Object.keys(n),s=Object.keys(r);return i.length!==s.length?!1:i.every(o=>Object.prototype.hasOwnProperty.call(r,o)&&ir(n[o],r[o]))}var Cs,Ms,js,Us,Gs,kl,Sl,Js,_t=S(()=>{"use strict";de();K();Cs={id:"ansi",apply:xl},Ms={id:"cr-progress",apply:e=>e.split(`
|
|
19
|
-
`).map(t=>{let n=t.endsWith("\r")?t.slice(0,-1):t,r=n.lastIndexOf("\r");return r>=0?n.slice(r+1):n}).join(`
|
|
20
|
-
`)},js={id:"trailing-whitespace",apply:e=>e.split(`
|
|
21
|
-
`).map(t=>t.replace(/[ \t]+$/,"")).join(`
|
|
22
|
-
`)},Us={id:"blank-lines",apply:e=>e.replace(/\n{3,}/g,`
|
|
23
|
-
|
|
24
|
-
`)};Gs={id:"json-to-toon",apply:e=>Fs(e)},kl=200,Sl=15;Js=[Cs,Ms,js,Us,Gs]});async function zs(e,t){return Ml?Fl(e,t):jl?Jl(e,t):Ul(e,t)}async function Ul(e,t){let{spawn:n}=await import("node:child_process"),r=n(e,t,{stdio:["pipe","pipe","inherit"]});return{runtime:"node",stdin:{write(i){return new Promise((s,o)=>{r.stdin.write(i,a=>a?o(a):s())})},end(){r.stdin.end()}},stdout:r.stdout,kill(){r.kill("SIGTERM")},wait(){return new Promise(i=>{r.on("exit",s=>i(s??0))})}}}function Fl(e,t){let n=globalThis.Bun.spawn({cmd:[e,...t],stdin:"pipe",stdout:"pipe",stderr:"inherit"}),r=n.stdin.getWriter?n.stdin.getWriter():null;return{runtime:"bun",stdin:{async write(i){r?await r.write(i):(n.stdin.write(i),await n.stdin.flush())},end(){r?r.close():n.stdin.end()}},stdout:Gl(n.stdout),kill(){n.kill()},wait(){return n.exited}}}async function*Gl(e){let t=e.getReader();try{for(;;){let{value:n,done:r}=await t.read();if(r)return;yield n}}finally{t.releaseLock()}}async function Jl(e,t){let r=new globalThis.Deno.Command(e,{args:t,stdin:"piped",stdout:"piped",stderr:"inherit"}).spawn(),i=r.stdin.getWriter();return{runtime:"deno",stdin:{async write(s){await i.write(s)},end(){try{i.close()}catch{}}},stdout:ql(r.stdout),kill(){try{r.kill("SIGTERM")}catch{}},async wait(){return(await r.status).code??0}}}async function*ql(e){let t=e.getReader();try{for(;;){let{value:n,done:r}=await t.read();if(r)return;yield n}}finally{t.releaseLock()}}var Ml,jl,Ys=S(()=>{Ml=typeof globalThis.Bun<"u"&&typeof globalThis.Bun.spawn=="function",jl=typeof globalThis.Deno<"u"&&typeof globalThis.Deno.Command=="function"});import{existsSync as Vl}from"node:fs";import{join as Wl}from"node:path";function Qs(e){if(!e||typeof e!="object")throw new TypeError("resolveBin: options object required");let{name:t,packageRoot:n,envVar:r}=e;if(typeof t!="string"||t==="")throw new TypeError("resolveBin: `name` must be a non-empty string");if(typeof n!="string"||n==="")throw new TypeError("resolveBin: `packageRoot` must be a non-empty string");if(typeof r!="string"||r==="")throw new TypeError("resolveBin: `envVar` must be a non-empty string");let i=process.env?.[r];if(typeof i=="string"&&i!=="")return i;let s=Wl(n,"bin",t);if(Vl(s))return s;throw new Error(`reddb: binary "${t}" not found.
|
|
25
|
-
expected at: ${s}
|
|
3
|
+
var ou=Object.defineProperty;var E=(e,t)=>()=>(e&&(t=e(e=0)),t);var A=(e,t)=>{for(var n in t)ou(e,n,{get:t[n],enumerable:!0})};async function si(e,t){return au?lu(e,t):cu?fu(e,t):uu(e,t)}async function uu(e,t){let{spawn:n}=await import("node:child_process"),r=n(e,t,{stdio:["pipe","pipe","inherit"]});return{runtime:"node",stdin:{write(s){return new Promise((i,o)=>{r.stdin.write(s,a=>a?o(a):i())})},end(){r.stdin.end()}},stdout:r.stdout,kill(){r.kill("SIGTERM")},wait(){return new Promise(s=>{r.on("exit",i=>s(i??0))})}}}function lu(e,t){let n=globalThis.Bun.spawn({cmd:[e,...t],stdin:"pipe",stdout:"pipe",stderr:"inherit"}),r=n.stdin.getWriter?n.stdin.getWriter():null;return{runtime:"bun",stdin:{async write(s){r?await r.write(s):(n.stdin.write(s),await n.stdin.flush())},end(){r?r.close():n.stdin.end()}},stdout:du(n.stdout),kill(){n.kill()},wait(){return n.exited}}}async function*du(e){let t=e.getReader();try{for(;;){let{value:n,done:r}=await t.read();if(r)return;yield n}}finally{t.releaseLock()}}async function fu(e,t){let r=new globalThis.Deno.Command(e,{args:t,stdin:"piped",stdout:"piped",stderr:"inherit"}).spawn(),s=r.stdin.getWriter();return{runtime:"deno",stdin:{async write(i){await s.write(i)},end(){try{s.close()}catch{}}},stdout:mu(r.stdout),kill(){try{r.kill("SIGTERM")}catch{}},async wait(){return(await r.status).code??0}}}async function*mu(e){let t=e.getReader();try{for(;;){let{value:n,done:r}=await t.read();if(r)return;yield n}}finally{t.releaseLock()}}var au,cu,ii=E(()=>{au=typeof globalThis.Bun<"u"&&typeof globalThis.Bun.spawn=="function",cu=typeof globalThis.Deno<"u"&&typeof globalThis.Deno.Command=="function"});import{existsSync as pu}from"node:fs";import{join as gu}from"node:path";function oi(e){if(!e||typeof e!="object")throw new TypeError("resolveBin: options object required");let{name:t,packageRoot:n,envVar:r}=e;if(typeof t!="string"||t==="")throw new TypeError("resolveBin: `name` must be a non-empty string");if(typeof n!="string"||n==="")throw new TypeError("resolveBin: `packageRoot` must be a non-empty string");if(typeof r!="string"||r==="")throw new TypeError("resolveBin: `envVar` must be a non-empty string");let s=process.env?.[r];if(typeof s=="string"&&s!=="")return s;let i=gu(n,"bin",t);if(pu(i))return i;throw new Error(`reddb: binary "${t}" not found.
|
|
4
|
+
expected at: ${i}
|
|
26
5
|
override: set ${r}=/path/to/${t}
|
|
27
6
|
fix: re-run \`pnpm install\` (the postinstall script downloads it),
|
|
28
|
-
or check the postinstall log for a download error.`)}var
|
|
29
|
-
`)).catch(a=>{this.pending.delete(r),o(a)})})}async close(){if(!this.closed){try{await this.call("close",{})}catch{}this.#e("close requested");try{this.child.stdin.end()}catch{}await this.child.wait()}}async#t(){let t=new Uint8Array(0);try{for await(let n of this.child.stdout){let r=new Uint8Array(t.length+n.length);r.set(t,0),r.set(n,t.length),t=r;let
|
|
7
|
+
or check the postinstall log for a download error.`)}var ai=E(()=>{});import{fileURLToPath as yu}from"node:url";import{dirname as hu,resolve as wu,join as yh}from"node:path";function Ru(){return typeof process<"u"&&process.platform==="win32"?"red.exe":"red"}function ci(){let e=process.env?.REDDB_BINARY_PATH;return typeof e=="string"&&e!==""&&!process.env?.REDDB_BIN?e:oi({name:Ru(),packageRoot:_u,envVar:"REDDB_BIN"})}var bu,_u,ui=E(()=>{ai();bu=hu(yu(import.meta.url)),_u=wu(bu,"..")});var Eu,Su,w,cn,_e=E(()=>{Eu=new TextEncoder,Su=new TextDecoder("utf-8"),w=class extends Error{constructor(t,n,r){super(n),this.name="RedDBError",this.code=t,this.data=r??null}},cn=class{constructor(t){this.child=t,this.nextId=1,this.pending=new Map,this.closed=!1,this.closeReason=null,this.readerPromise=this.#t()}call(t,n={}){if(this.closed)return Promise.reject(new w("CLIENT_CLOSED",`client is closed: ${this.closeReason??"unknown"}`));let r=this.nextId++,s=JSON.stringify({jsonrpc:"2.0",id:r,method:t,params:n});return new Promise((i,o)=>{this.pending.set(r,{resolve:i,reject:o}),this.child.stdin.write(Eu.encode(s+`
|
|
8
|
+
`)).catch(a=>{this.pending.delete(r),o(a)})})}async close(){if(!this.closed){try{await this.call("close",{})}catch{}this.#e("close requested");try{this.child.stdin.end()}catch{}await this.child.wait()}}async#t(){let t=new Uint8Array(0);try{for await(let n of this.child.stdout){let r=new Uint8Array(t.length+n.length);r.set(t,0),r.set(n,t.length),t=r;let s=0;for(let i=0;i<t.length;i++)if(t[i]===10){let o=t.subarray(s,i);this.#n(Su.decode(o)),s=i+1}s>0&&(t=t.subarray(s))}}catch(n){this.#e(`stdout reader error: ${n.message}`);return}this.#e("server stdout closed")}#n(t){if(!t.trim())return;let n;try{n=JSON.parse(t)}catch(i){this.#e(`malformed server response: ${i.message}`);return}let r=n.id;if(r==null)return;let s=this.pending.get(r);s&&(this.pending.delete(r),n.error?s.reject(new w(n.error.code??"UNKNOWN",n.error.message??"unknown error",n.error.data)):s.resolve(n.result))}#e(t){if(this.closed)return;this.closed=!0,this.closeReason=t;let n=new w("CLIENT_CLOSED",t);for(let{reject:r}of this.pending.values())r(n);this.pending.clear()}}});function cr(e){if(typeof e!="string"||e.length===0)throw new TypeError("connect() requires a URI string (e.g. 'red://localhost:5050' or 'red:///data.rdb')");return e.startsWith("red://")||e==="red:"||e==="red:/"?ku(e):Tu(e)}function ku(e){let t=e;e==="red:"||e==="red:/"||e==="red://"?t="red://embedded.local":e.startsWith("red:///")?t=`red://embedded.local${e.slice(6)}`:(e==="red://memory"||e==="red://memory/"||e==="red://:memory"||e==="red://:memory:")&&(t="red://embedded.local");let n;try{n=new URL(t)}catch(l){throw new w("UNPARSEABLE_URI",`failed to parse '${e}': ${l.message}`)}let r=n.searchParams,s=(r.get("proto")||"").toLowerCase(),i=n.pathname&&n.pathname!=="/"?n.pathname:"";if(n.hostname==="embedded.local")return i?{kind:"embedded",path:i,params:r,originalUri:e}:{kind:"embedded",params:r,originalUri:e};let o=vu(s),a=n.port?Number(n.port):ar(o),c=n.username?decodeURIComponent(n.username):void 0,u=n.password?decodeURIComponent(n.password):void 0;return{kind:o,host:n.hostname,port:a,path:i||void 0,username:c,password:u,token:r.get("token")??void 0,apiKey:r.get("apiKey")??r.get("api_key")??void 0,loginUrl:r.get("loginUrl")??r.get("login_url")??void 0,params:r,originalUri:e}}function Tu(e){if(e==="memory://"||e==="memory:")return{kind:"embedded",originalUri:e};if(e.startsWith("file://")){let t=e.slice(7);if(!t)throw new TypeError(`invalid file:// URI: missing path in '${e}'`);return{kind:"embedded",path:t,originalUri:e}}if(e.startsWith("grpc://")||e.startsWith("grpcs://")||e.startsWith("reds://")){let t=e.split("://",1)[0],n;try{n=new URL("https://"+e.slice(`${t}://`.length))}catch(i){throw new w("UNPARSEABLE_URI",`failed to parse '${e}': ${i.message}`)}if(!n.hostname)throw new TypeError(`invalid ${t}:// URI: missing host in '${e}'`);let r=t==="reds"?"reds":t==="grpcs"?"grpcs":"grpc",s=n.searchParams;return{kind:r,host:n.hostname,port:n.port?Number(n.port):ar(r),username:n.username?decodeURIComponent(n.username):void 0,password:n.password?decodeURIComponent(n.password):void 0,token:s.get("token")??void 0,apiKey:s.get("apiKey")??s.get("api_key")??void 0,loginUrl:s.get("loginUrl")??s.get("login_url")??void 0,params:s,originalUri:e}}if(e.startsWith("http://")||e.startsWith("https://")){let t;try{t=new URL(e)}catch(n){throw new w("UNPARSEABLE_URI",`failed to parse '${e}': ${n.message}`)}return{kind:t.protocol==="https:"?"https":"http",host:t.hostname,port:t.port?Number(t.port):ar(t.protocol==="https:"?"https":"http"),path:t.pathname!=="/"?t.pathname:void 0,username:t.username?decodeURIComponent(t.username):void 0,password:t.password?decodeURIComponent(t.password):void 0,token:t.searchParams.get("token")??void 0,apiKey:t.searchParams.get("apiKey")??void 0,params:t.searchParams,originalUri:e}}throw new w("UNSUPPORTED_SCHEME",`unsupported URI: '${e}'. Use 'red://...' or one of memory://, file://, grpc://, http(s)://`)}function vu(e){switch(e){case"":case"red":return"red";case"reds":return"reds";case"grpc":return"grpc";case"grpcs":return"grpcs";case"http":return"http";case"https":return"https";case"pg":case"postgres":case"postgresql":return"pg";default:throw new w("UNSUPPORTED_PROTO",`unknown proto='${e}'. Supported: red | reds | grpc | grpcs | http | https | pg`)}}function ar(e){switch(e){case"http":return 5e3;case"https":return 55555;case"red":case"reds":case"redwire":return 5050;case"grpc":return 55055;case"grpcs":return 55555;case"pg":case"postgres":case"postgresql":return 5432;default:return}}var ur=E(()=>{_e()});function Ou(e){if(typeof e=="string"){let t=new TextEncoder().encode(e);return li(t)}if(e instanceof Uint8Array||typeof Buffer<"u"&&Buffer.isBuffer(e))return li(e);throw new TypeError("cache value must be a string, Uint8Array, or Buffer")}function li(e){if(typeof Buffer<"u")return Buffer.from(e).toString("base64");let t="";for(let n of e)t+=String.fromCharCode(n);return btoa(t)}function Pu(e){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(e,"base64"));let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}var xu,Tt,lr=E(()=>{_e();xu=new Set(["embedded"]),Tt=class{constructor(t,n){this._client=t,this._transport=n??null}_guard(t){if(this._transport&&xu.has(this._transport))throw new w("UNSUPPORTED_TRANSPORT",`cache.${t} is not available on '${this._transport}' transport; use @reddb-io/client for remote cache endpoints.`)}async get(t,n){this._guard("get");let r=await this._client.call("cache.get",{namespace:t,key:n});return r==null||r.value==null?null:Pu(r.value)}async put(t,n,r,s={}){this._guard("put");let i=Ou(r);await this._client.call("cache.put",{namespace:t,key:n,value:i,...s})}async exists(t,n){return this._guard("exists"),(await this._client.call("cache.exists",{namespace:t,key:n}))?.status??"maybe"}async invalidate(t,n){this._guard("invalidate"),await this._client.call("cache.invalidate",{namespace:t,key:n})}async invalidatePrefix(t,n){return this._guard("invalidatePrefix"),(await this._client.call("cache.invalidate_prefix",{namespace:t,prefix:n}))?.removed??0}async invalidateTags(t,n){return this._guard("invalidateTags"),(await this._client.call("cache.invalidate_tags",{namespace:t,tags:n}))?.removed??0}async flushNamespace(t){this._guard("flushNamespace"),await this._client.call("cache.flush_namespace",{namespace:t})}}});function dr(e,t){return`${fr(e)}.${Du(t)}`}function fr(e){let t=String(e),n=t.match(/[^A-Za-z0-9_]/);if(n)throw new w("INVALID_KV_KEY",`invalid KV key "${t}": character "${n[0]}" is not supported`);return t}function Du(e){let t=String(e);return/^[A-Za-z0-9_]+$/.test(t)?t:`'${t.replace(/'/g,"''")}'`}function Iu(e){return typeof e=="number"||typeof e=="boolean"?String(e):e==null?"NULL":typeof e=="object"?`'${JSON.stringify(e).replace(/'/g,"''")}'`:`'${String(e).replace(/'/g,"''")}'`}function di(e){return`'${String(e).replace(/'/g,"''")}'`}var nt,mr=E(()=>{_e();nt=class{constructor(t,n="kv_default"){this.client=t,this.collection=n}put(t,n,r={}){let s=r.collection??this.collection,i=Array.isArray(r.tags)&&r.tags.length>0?` TAGS [${r.tags.map(di).join(", ")}]`:"",o=r.expireMs!=null?` EXPIRE ${Number(r.expireMs)} ms`:"";return this.client.call("query",{sql:`KV PUT ${dr(s,t)} = ${Iu(n)}${o}${i}`})}set(t,n,r={}){return this.put(t,n,r)}async get(t,n={}){let r=n.collection??this.collection;return(await this.client.call("query",{sql:`KV GET ${dr(r,t)}`}))?.rows?.[0]?.value??null}async getMany(t,n={}){let r=[];for(let s of t)r.push(await this.get(s,n));return r}async exists(t,n={}){return{exists:await this.get(t,n)!==null}}async delete(t,n={}){let r=n.collection??this.collection,s=await this.client.call("query",{sql:`KV DELETE ${dr(r,t)}`}),i=s.affected??s.affected_rows??0;return{affected:i,deleted:i>0}}async list(t={}){let n=t.collection??this.collection,r=t.limit==null?100:Number(t.limit);if(!Number.isInteger(r)||r<=0)throw new w("INVALID_ARGUMENT","kv.list limit must be a positive integer");let s=t.prefix==null?"":String(t.prefix),o=(await this.client.call("query",{sql:`SELECT key, value FROM ${fr(n)} ORDER BY key ASC LIMIT ${r}`})).rows??[];return{items:s.length>0?o.filter(c=>String(c.key).startsWith(s)):o}}async invalidateTags(t,n={}){let r=n.collection??this.collection,s=await this.client.call("query",{sql:`INVALIDATE TAGS [${t.map(di).join(", ")}] FROM ${fr(r)}`});return s.affected??s.affected_rows??s.rows?.[0]?.invalidated??0}async*watch(t,n={}){if(!this.client.baseUrl)throw new w("UNSUPPORTED_TRANSPORT","kv.watch requires the HTTP transport");let r=n.collection??this.collection,s=new URLSearchParams;n.sinceLsn!=null&&s.set("since_lsn",String(n.sinceLsn)),n.limit!=null&&s.set("limit",String(n.limit));let i=s.toString()?`?${s}`:"",o=`${this.client.baseUrl}/collections/${encodeURIComponent(r)}/kv/${encodeURIComponent(String(t))}/watch${i}`,a=await fetch(o,this.client.attachAuth({method:"GET"}));if(!a.ok)throw new w("HTTP_ERROR",`kv.watch failed with HTTP ${a.status}`);let c=await a.text();for(let u of c.split(`
|
|
30
9
|
|
|
31
10
|
`)){let l=u.split(`
|
|
32
|
-
`).find(d=>d.startsWith("data: "));l&&(yield JSON.parse(l.slice(6)))}}watchPrefix(t,n={}){return this.watch(`${t}.*`,n)}}});function ud(e,t,n){let{waitMs:r,group:i=null,count:s=null}=n??{};if(!Number.isInteger(r)||r<0)throw new h("INVALID_QUEUE_WAIT","queue readWait requires an explicit non-negative integer waitMs (no infinite wait)");let o=oe(e),a=oe(t),c=i!=null?` GROUP ${oe(i)}`:"",u=s!=null?pr(s):"";return`QUEUE READ ${o}${c} CONSUMER ${a}${u} WAIT ${r}ms`}function oe(e){let t=String(e);if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(t))throw new h("INVALID_QUEUE_NAME",`invalid queue name "${t}": expected an SQL identifier`);return t}function pr(e){if(e==null)return"";if(!Number.isInteger(e)||e<0)throw new h("INVALID_QUEUE_COUNT","queue count must be a non-negative integer");return` COUNT ${e}`}function ld(e){if(!Number.isInteger(e))throw new h("INVALID_QUEUE_PRIORITY","queue priority must be an integer");return String(e)}function dd(e){if(e.key!=null&&(e.delay!=null||e.at!=null))throw new h("INVALID_ARGUMENT","QUEUE PUSH KEY cannot be combined with DELAY / AVAILABLE AT");let t="";return e.priority!=null&&(t+=` PRIORITY ${ld(e.priority)}`),e.key!=null&&(t+=` KEY ${gr(e.key)}`),e.dedup!=null&&(t+=` DEDUP ${gr(e.dedup)}`),e.delay!=null&&(t+=` DELAY ${e.delay}`),e.at!=null&&(t+=` AVAILABLE AT ${e.at}`),t}function fd(e){return typeof e=="number"||typeof e=="boolean"?String(e):e==null?"NULL":typeof e=="string"?gr(e):JSON.stringify(e)}function gr(e){return`'${String(e).replace(/'/g,"''")}'`}function mr(e){return Array.isArray(e?.rows)?e.rows.map(t=>t.payload):[]}var Et,yr=S(()=>{he();Et=class{constructor(t){this.client=t}create(t){return this.client.call("query",{sql:`CREATE QUEUE IF NOT EXISTS ${oe(t)}`})}push(t,n,r={}){let i=dd(r);return this.client.call("query",{sql:`QUEUE PUSH ${oe(t)} ${fd(n)}${i}`})}async pop(t,n){let r=await this.client.call("query",{sql:`QUEUE POP ${oe(t)}${pr(n)}`});return mr(r)}async peek(t,n){let r=await this.client.call("query",{sql:`QUEUE PEEK ${oe(t)}${pr(n)}`});return mr(r)}async len(t){let n=await this.client.call("query",{sql:`QUEUE LEN ${oe(t)}`});return Number(n?.rows?.[0]?.len??0)}purge(t){return this.client.call("query",{sql:`QUEUE PURGE ${oe(t)}`})}async readWait(t,n,r={}){let i=ud(t,n,r),s=await this.client.call("query",{sql:i});return mr(s)}}});function ro(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new h("INVALID_ARGUMENT",`${t} must be an object`)}function md(e){if(e==null)return 100;if(!Number.isInteger(e)||e<=0)throw new h("INVALID_ARGUMENT","limit must be a positive integer");return e}function cn(e){return String(e).split(".").map(io).join(".")}function io(e){let t=String(e);if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(t))throw new h("INVALID_ARGUMENT",`invalid SQL identifier "${t}"`);return t}function pd(e){return so(JSON.stringify(e))}function gd(e){return JSON.stringify(e)}function yd(e){return e==null?"NULL":typeof e=="number"||typeof e=="boolean"?String(e):typeof e=="object"?pd(e):so(e)}function so(e){return`'${String(e).replace(/'/g,"''")}'`}var kt,hr=S(()=>{he();kt=class{constructor(t){this.db=t}async insert(t,n){ro(n,"documents.insert document"),await this.ensureCollection(t);let r=await this.db.query(`INSERT INTO ${cn(t)} DOCUMENT VALUES (${gd(n)}) RETURNING *`),i=r.rows?.[0];if(!i||i.rid==null)throw new h("INVALID_RESPONSE","documents.insert expected one returned item with rid");return{affected:r.affected??1,rid:i.rid,item:i}}async get(t,n){let r=await this.db.get(t,n);if(!r.entity)throw new h("NOT_FOUND",`document ${String(n)} was not found`);return r.entity}async list(t,n={}){let r=md(n.limit),i=n.orderBy??n.order_by??"rid ASC",s=n.filter?` WHERE ${String(n.filter)}`:"";return{items:(await this.db.query(`SELECT * FROM ${cn(t)}${s} ORDER BY ${i} LIMIT ${r}`)).rows??[]}}async patch(t,n,r){ro(r,"documents.patch patch");let i=Object.entries(r);if(i.length===0)throw new h("INVALID_ARGUMENT","documents.patch patch must be a non-empty object");for(let[c]of i)if(c.includes("/"))throw new h("INVALID_ARGUMENT","documents.patch currently accepts top-level document fields");let s=i.map(([c,u])=>`${io(c)} = ${yd(u)}`).join(", "),a=(await this.db.query(`UPDATE ${cn(t)} SET ${s} WHERE rid = $1 RETURNING *`,n)).rows?.[0];if(!a)throw new h("NOT_FOUND",`document ${String(n)} was not found`);return a}async delete(t,n){let i=(await this.db.delete(t,n)).affected??0;return{affected:i,deleted:i>0}}async ensureCollection(t){try{await this.db.query(`CREATE DOCUMENT ${cn(t)}`)}catch(n){if(!String(n?.message??"").includes("already exists"))throw n}}}});function hd(e,t){if(t.secretRef){let{collection:n,key:r}=t.secretRef;return`SECRET_REF(vault, ${we(n)}.${we(r)})`}return bd(e)}function wd(e,t){for(let n of["ttl","ttlMs","ttl_ms","expireMs","expire_ms","expiresAt"])if(e[n]!=null)throw new TypeError(`${t} does not support TTL or expiration options`)}function we(e){let t=String(e);if(!/^[A-Za-z0-9_.]+$/.test(t))throw new TypeError("keyed collection and key names must use letters, numbers, underscores, or dots");return t}function bd(e){return typeof e=="number"||typeof e=="boolean"?String(e):e==null?"NULL":Array.isArray(e)||typeof e=="object"?JSON.stringify(e):oo(e)}function oo(e){return`'${String(e).replace(/'/g,"''")}'`}var St,wr=S(()=>{St=class{constructor(t,n="red.config"){this.client=t,this.collection=n}put(t,n,r={}){wd(r,"config");let i=r.collection??this.collection,s=Array.isArray(r.tags)&&r.tags.length>0?` TAGS [${r.tags.map(oo).join(", ")}]`:"";return this.client.call("query",{sql:`PUT CONFIG ${we(i)} ${we(t)} = ${hd(n,r)}${s}`})}get(t,n={}){let r=n.collection??this.collection;return this.client.call("query",{sql:`GET CONFIG ${we(r)} ${we(t)}`})}resolve(t,n={}){let r=n.collection??this.collection;return this.client.call("query",{sql:`RESOLVE CONFIG ${we(r)} ${we(t)}`})}}});function _d(e,t){for(let n of["ttl","ttlMs","ttl_ms","expireMs","expire_ms","expiresAt"])if(e[n]!=null)throw new TypeError(`${t} does not support TTL or expiration options`)}function Xe(e){let t=String(e);if(!/^[A-Za-z0-9_.]+$/.test(t))throw new TypeError("keyed collection and key names must use letters, numbers, underscores, or dots");return t}function Rd(e){return typeof e=="number"||typeof e=="boolean"?String(e):e==null?"NULL":Array.isArray(e)||typeof e=="object"?JSON.stringify(e):ao(e)}function ao(e){return`'${String(e).replace(/'/g,"''")}'`}var vt,br=S(()=>{vt=class{constructor(t,n="red.vault"){this.client=t,this.collection=n}put(t,n,r={}){_d(r,"vault");let i=r.collection??this.collection,s=Array.isArray(r.tags)&&r.tags.length>0?` TAGS [${r.tags.map(ao).join(", ")}]`:"";return this.client.call("query",{sql:`VAULT PUT ${Xe(i)}.${Xe(t)} = ${Rd(n)}${s}`})}get(t,n={}){let r=n.collection??this.collection;return this.client.call("query",{sql:`VAULT GET ${Xe(r)}.${Xe(t)}`})}unseal(t,n={}){let r=n.collection??this.collection;return this.client.call("query",{sql:`UNSEAL VAULT ${Xe(r)}.${Xe(t)}`})}}});async function uo(e){return((await e.query("SHOW COLLECTIONS")).rows??[]).map(Ed)}async function lo(e,t){return((await e.query(`SHOW COLLECTIONS WHERE name = ${Sd(t)}`)).rows??[]).some(r=>r.name===String(t))}function Ed(e){return{...e,name:String(e.name),model:String(e.model),capabilities:Array.isArray(e.capabilities)?e.capabilities:[]}}function co(e){return String(e).split(".").map(kd).join(".")}function kd(e){let t=String(e);if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(t))throw new h("INVALID_IDENTIFIER",`invalid SQL identifier "${t}"`);return t}function Sd(e){return`'${String(e).replace(/'/g,"''")}'`}var Tt,_r=S(()=>{he();Tt=class e{constructor(t,n,r=null,i=[],s=[]){this.db=t,this.collection=n,this.columns=r,this.whereClauses=i,this.params=s}select(...t){let n=t.length===1&&Array.isArray(t[0])?t[0]:t,r=n.length===1&&n[0]==="*"?null:n;return new e(this.db,this.collection,r!=null&&r.length>0?r:null,this.whereClauses,this.params)}where(t,...n){if(typeof t!="string"||t.trim().length===0)throw new h("INVALID_QUERY_BUILDER","where() requires a non-empty SQL condition");let r=n.length===1&&Array.isArray(n[0])?n[0]:n;return new e(this.db,this.collection,this.columns,[...this.whereClauses,t.trim()],[...this.params,...r])}async run(){let t=this.columns==null?"*":this.columns.map(co).join(", "),n=this.whereClauses.length>0?` WHERE ${this.whereClauses.map(o=>`(${o})`).join(" AND ")}`:"",r=`SELECT ${t} FROM ${co(this.collection)}${n}`,s=(this.params.length>0?await this.db.query(r,this.params):await this.db.query(r)).rows??[];return this.columns==null?s:s.map(o=>{let a={};for(let c of this.columns)a[c]=o[c];return a})}}});async function go(e,t={}){let n=ar(e);if(Nd(n),n.kind==="embedded"){let r=Ad(n,t.auth);if(r.token||r.username)throw new h("AUTH_NOT_APPLICABLE","auth is only meaningful for remote connections; embedded modes inherit caller privileges.");let i=Id(n),s=t.binary??Zs(),o=await zs(s,i),a=new an(o);return await a.call("version",{}),new Er(a,{transport:"embedded"})}}function mo(e){return xd(e),e instanceof Float32Array||e instanceof Float64Array?Array.from(e):e instanceof Date?{$ts:String(BigInt(e.getTime())*1000000n)}:e instanceof Uint8Array||typeof Buffer<"u"&&e instanceof Buffer?{$bytes:Pd(e)}:typeof e=="number"&&!Number.isFinite(e)?Number.isNaN(e)?{$float:"NaN"}:{$float:e>0?"Infinity":"-Infinity"}:typeof e=="string"&&$d(e)?{$uuid:e}:e}function xd(e){if(e!=null&&!(typeof e=="boolean"||typeof e=="number"||typeof e=="string")){if(e instanceof Date){if(Number.isNaN(e.getTime()))throw new h("UNSUPPORTED_PARAM","cannot encode invalid Date query parameter");return}if(!(e instanceof Uint8Array||e instanceof Float32Array||e instanceof Float64Array||typeof Buffer<"u"&&e instanceof Buffer)){if(Array.isArray(e)){if(e.every(t=>typeof t=="number"))return;throw new h("UNSUPPORTED_PARAM","array query parameters must contain only numbers")}if(!(typeof e=="object"&&Object.getPrototypeOf(e)===Object.prototype))throw new h("UNSUPPORTED_PARAM",`cannot encode query parameter of type ${typeof e}`)}}}function Od(e){return e.length===0?null:e.length===1&&Array.isArray(e[0])?e[0].map(mo):e.map(mo)}function Pd(e){let t=e instanceof Uint8Array?e:new Uint8Array(e.buffer,e.byteOffset,e.byteLength);if(typeof Buffer<"u")return Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString("base64");let n="";for(let r of t)n+=String.fromCharCode(r);return btoa(n)}function Dd(e){if(typeof Buffer<"u"){let r=Buffer.from(e,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}function $d(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}function un(e){if(Array.isArray(e))return e.map(un);if(e&&typeof e=="object"){if(Object.keys(e).length===1){if(typeof e.$bytes=="string")return Dd(e.$bytes);if(typeof e.$uuid=="string")return e.$uuid;if(typeof e.$float=="string"){if(e.$float==="NaN")return Number.NaN;if(e.$float==="Infinity"||e.$float==="+Infinity")return 1/0;if(e.$float==="-Infinity")return-1/0}if(typeof e.$ts=="string"||typeof e.$ts=="number"){let r=typeof e.$ts=="string"?BigInt(e.$ts):BigInt(Math.trunc(e.$ts));return new Date(Number(r/1000000n))}}let n={};for(let[r,i]of Object.entries(e))n[r]=un(i);return n}return e}function Id(e){return e.path?["rpc","--stdio","--path",e.path]:["rpc","--stdio"]}function Ad(e,t){let n={token:e.token??e.apiKey??null,username:e.username??null,password:e.password??null,loginUrl:e.loginUrl??null};if(t==null)return n;if(typeof t!="object")throw new TypeError("options.auth must be an object");if(t.token!=null){if(typeof t.token!="string"||t.token.length===0)throw new TypeError("options.auth.token must be a non-empty string");n.token=t.token}if(t.apiKey!=null){if(typeof t.apiKey!="string"||t.apiKey.length===0)throw new TypeError("options.auth.apiKey must be a non-empty string");n.token=t.apiKey}if(t.username!=null){if(typeof t.username!="string"||t.username.length===0)throw new TypeError("options.auth.username must be a non-empty string");n.username=t.username}if(t.password!=null){if(typeof t.password!="string"||t.password.length===0)throw new TypeError("options.auth.password must be a non-empty string");n.password=t.password}return t.loginUrl!=null&&(n.loginUrl=t.loginUrl),n}function Nd(e){if(e.kind!=="embedded")throw new h("EMBEDDED_ONLY",vd)}function kr(){return new h(fo,`${fo}: nested transactions are not supported on one connection`)}function yo(e,t){if(e&&typeof e=="object")try{e.rollbackError=t}catch{}}function Bd(e,t){if(!e||typeof e!="object"||e.rid==null&&e.id==null)throw new h("ENGINE_TOO_OLD",`${t}() requires RedDB engine >= ${po} with insert id support`);return e.rid==null&&(e.rid=e.id),e.id==null&&(e.id=e.rid),e}function Ld(e,t){if(!e||typeof e!="object"||!Array.isArray(e.rids)&&!Array.isArray(e.ids))throw new h("ENGINE_TOO_OLD",`bulkInsert() requires RedDB engine >= ${po} with bulk insert id support`);if(Array.isArray(e.rids)||(e.rids=e.ids),Array.isArray(e.ids)||(e.ids=e.rids),e.rids.length!==t)throw new h("INVALID_RESPONSE",`bulkInsert() expected ${t} rids, got ${e.rids.length}`);return e}var vd,Td,po,fo,ln,Rr,Er,ho=S(()=>{Ys();eo();he();cr();ur();fr();yr();hr();wr();br();_r();ur();fr();yr();hr();wr();br();_r();cr();vd="remote URIs are not supported in @reddb-io/sdk; install @reddb-io/client for grpc/http/red transports",Td="1.0",po="1.0.9",fo="NESTED_TX_NOT_SUPPORTED";ln=class{constructor(t){this.db=t}query(t,...n){return this.db.query(t,...n)}execute(t,...n){return this.db.execute(t,...n)}insert(t,n){return this.db.insert(t,n)}bulkInsert(t,n){return this.db.bulkInsert(t,n)}async transaction(){throw kr()}},Rr=class{constructor(t){this.db=t,this.active=!1}async begin(){if(this.db.inTransaction)throw kr();this.db.inTransaction=!0,this.active=!0;try{return await this.db.query("BEGIN")}catch(t){throw this.db.inTransaction=!1,this.active=!1,t}}async commit(){if(!this.active)throw new h("INVALID_ARGUMENT","tx.commit() called without an open transaction");try{return await this.db.query("COMMIT")}finally{this.active=!1,this.db.inTransaction=!1}}async rollback(){if(!this.active)throw new h("INVALID_ARGUMENT","tx.rollback() called without an open transaction");try{return await this.db.query("ROLLBACK")}finally{this.active=!1,this.db.inTransaction=!1}}async run(t){if(typeof t!="function")throw new TypeError("tx.run(callback) requires a function");if(this.db.inTransaction)throw new h("INVALID_ARGUMENT","nested tx.run() is not supported; issue savepoints via tx.query() instead");await this.begin();try{let n=await t(new ln(this.db));return await this.commit(),n}catch(n){if(this.active)try{await this.rollback()}catch(r){yo(n,r)}throw n}}},Er=class{constructor(t,n={}){this.client=t,this.transport=n.transport??null,this.helperSpecVersion=Td,this.cache=new Rt(t,this.transport),this.queue=new Et(t),this.queues=this.queue,this.documents=new kt(this);let r=new Qe(t);this.kv=Object.assign((i="kv_default")=>new Qe(t,i),{put:r.put.bind(r),invalidateTags:r.invalidateTags.bind(r),watch:r.watch.bind(r),watchPrefix:r.watchPrefix.bind(r)}),this.config=(i="red.config")=>new St(t,i),this.vault=(i="red.vault")=>new vt(t,i),this.inTransaction=!1}query(t,...n){if(typeof t!="string"||t.trim().length===0)return Promise.reject(new h("INVALID_ARGUMENT","query() requires a non-empty SQL string"));let r=Od(n);return r==null?this.client.call("query",{sql:t}).then(un):this.client.call("query",{sql:t,params:r}).then(un)}execute(t,...n){return this.query(t,...n)}async insert(t,n){let r=await this.client.call("insert",{collection:t,payload:n});return Bd(r,"insert")}async bulkInsert(t,n){if(Array.isArray(n)&&n.length===0)return{affected:0,rids:[],ids:[]};let r=await this.client.call("bulk_insert",{collection:t,payloads:n});return Ld(r,n.length)}tx(){return new Rr(this)}async transaction(t){if(this.inTransaction)throw kr();if(typeof t!="function")throw new TypeError("transaction(callback) requires a function");this.inTransaction=!0;let n=!1;try{await this.query("BEGIN"),n=!0;let r=await t(new ln(this));return await this.query("COMMIT"),r}catch(r){if(n)try{await this.query("ROLLBACK")}catch(i){yo(r,i)}throw r}finally{this.inTransaction=!1}}exists(t){return lo(this,t)}list(){return uo(this)}from(t){return new Tt(this,t)}get(t,n){return this.client.call("get",{collection:t,id:String(n)})}delete(t,n){return this.client.call("delete",{collection:t,id:String(n)})}health(){return this.client.call("health",{})}version(){return this.client.call("version",{})}login(t,n){return this.client.call("auth.login",{username:t,password:n})}whoami(){return this.client.call("auth.whoami",{})}changePassword(t,n){return this.client.call("auth.change_password",{current_password:t,new_password:n})}createApiKey({username:t,role:n}={}){return this.client.call("auth.create_api_key",{username:t,role:n})}revokeApiKey(t){return this.client.call("auth.revoke_api_key",{key:t})}close(){return this.client.close()}}});var Or={};D(Or,{DEFAULT_RSP_BYTE_BUDGET:()=>se,DEFAULT_RSP_TTL_DAYS:()=>ie,RSP_ELISION_COLLECTION:()=>L,RspElisionStore:()=>xt});import{createHash as Ro}from"node:crypto";import{existsSync as Cd}from"node:fs";import{mkdir as Md,readFile as Tr,readdir as Eo,rename as jd,writeFile as Ud}from"node:fs/promises";import{homedir as Fd}from"node:os";import{basename as xr,dirname as ko,join as Ze}from"node:path";import{fileURLToPath as Gd}from"node:url";function wo(e,t){return`el:${Ro("sha256").update("rsp-elision-v1\0").update(e).update("\0").update(JSON.stringify({command:t.command,loss:t.loss})).digest("hex").slice(0,12)}`}function ae(e){return`record:${e.slice(3)}`}function Ae(e){return`expired:${e.slice(3)}`}function Sr(){return"index:v1"}function Ot(e){return/^el:[a-f0-9]{12}$/.test(e)}function Jd(e){if(!tt(e))throw new Error("memory recall payload must be an object");let t=e.query;if(typeof t!="string"||t.trim()==="")throw new Error("memory recall query is required");let n=typeof e.limit=="number"&&Number.isFinite(e.limit)?e.limit:10;return{query:t,limit:n,options:{includeSuperseded:e.includeSuperseded===!0,scope:tt(e.scope)?e.scope:void 0,ranking:tt(e.ranking)?e.ranking:void 0}}}function qd(e){if(!tt(e))throw new Error("memory ingest payload must be an object");let t=e.cwd;if(typeof t!="string"||t.trim()==="")throw new Error("memory ingest cwd is required");let n=typeof e.maxFiles=="number"&&Number.isFinite(e.maxFiles)?e.maxFiles:void 0,r=Array.isArray(e.ignore)?e.ignore.filter(i=>typeof i=="string"):void 0;return{cwd:t,maxFiles:n,ignore:r}}function tt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Vd(e){return tt(e)?typeof e.key=="string"&&e.key.trim()!==""?{key:e.key,value:dn(e.value)}:typeof e.record_key=="string"&&e.record_key.trim()!==""?{key:e.record_key,value:dn(e.value)}:et(e)?{key:ae(e.handle),value:e}:fn(e)&&typeof e.handle=="string"&&Ot(e.handle)?{key:Ae(e.handle),value:e}:null:null}function dn(e){if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}}async function Wd(e,t,n){let r=[],i=new Set([".git","node_modules",".red",...n]);async function s(o){if(r.length>=t)return;let a=await Eo(o,{withFileTypes:!0}).catch(()=>[]);for(let c of a){if(r.length>=t)return;if(i.has(c.name))continue;let u=Ze(o,c.name);c.isDirectory()?await s(u):c.isFile()&&/\.(md|mdx|txt|ts|tsx|js|jsx|json|yaml|yml|toml|rs|go|py|sql)$/i.test(c.name)&&r.push(u)}}return await s(e),r}function Hd(e,t){let n=Number(e.red_entity_id??e.rid);if(!Number.isFinite(n))return null;let r=e.properties??e.PROPERTIES,i=tt(r)?r:{},s=String(e.label??e.LABEL??i.title??`memory-${n}`),o=String(e.node_type??e.NODE_TYPE??"concept"),a=String(i.content??i.summary??i.title??s),c=`${s} ${a}`.toLowerCase(),u=t.filter(l=>c.includes(l));return u.length===0&&t.length>0?null:{id:String(n),rid:n,label:s,node_type:o,score:u.length||1,excerpt:a.slice(0,500)}}function bo(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}function et(e){return be(e)?e.collection===L&&typeof e.handle=="string"&&Ot(e.handle)&&typeof e.original=="string"&&e.original_encoding==="base64"&&typeof e.original_bytes=="number"&&typeof e.command=="string"&&typeof e.created_at=="string"&&typeof e.expires_at=="string"&&Kd(e.loss):!1}function vr(e){return!be(e)||e.version!==1||!Array.isArray(e.records)?!1:e.records.every(t=>be(t)&&typeof t.handle=="string"&&Ot(t.handle)&&typeof t.key=="string"&&typeof t.bytes=="number"&&typeof t.command=="string"&&typeof t.created_at=="string"&&typeof t.expires_at=="string")}function fn(e){return be(e)&&e.status==="expired"&&typeof e.expired_at=="string"&&typeof e.command=="string"}function Kd(e){return be(e)&&typeof e.level=="string"&&typeof e.bytes_elided=="number"}function be(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function zd(e){try{let t=await Tr(e,"utf8");if(t.trim()==="")return _o();let n=JSON.parse(t);if(ef(n))return n}catch(t){if(t.code==="ENOENT"){let n=_o();return await vo(e,n),n}throw t}throw new Error("rsp elision store is unreadable")}async function Yd(e){try{let t=await Tr(e);return So(e)?e:Qd(t)?Xd(e):e}catch(t){if(t.code==="ENOENT")return e;throw t}}function Qd(e){return e.subarray(0,8).toString("ascii")==="RDBSBLK1"}function Xd(e){return xr(e)==="red.rdb"?Ze(ko(e),"tmp","rsp-elisions.json"):`${e}.json`}function So(e){return xr(e)==="red-skills.rdb"}async function Zd(){if(process.env.REDDB_BIN)return;let e=process.env.RED_SKILLS_CACHE_DIR??(process.env.XDG_CACHE_HOME?Ze(process.env.XDG_CACHE_HOME,"red-skills","bundles"):Ze(Fd(),".cache","red-skills","bundles")),t=Ze(e,"reddb"),n;try{n=await Eo(t)}catch{return}n.sort().reverse();for(let r of n){let i=Ze(t,r,process.platform==="win32"?"red.exe":"red");if(Cd(i)){process.env.REDDB_BIN=i;return}}}async function vo(e,t){await Md(ko(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;await Ud(n,`${JSON.stringify(t)}
|
|
33
|
-
`,"utf8"),await jd(n,e)}function _o(){return{version:1,records:{},tombstones:{},index:{version:1,records:[]}}}function ef(e){return be(e)&&e.version===1&&be(e.records)&&Object.values(e.records).every(et)&&be(e.tombstones)&&Object.values(e.tombstones).every(fn)&&vr(e.index)}function tf(e){if(!e.startsWith("file://"))throw new Error("rsp elision store requires a file:// URI");return Gd(e)}var L,xt,mn=S(()=>{"use strict";ho();K();L="rsp_elisions_v1",xt=class e{constructor(t,n){this.opts=n;this.path=t}document;db;path;dirty=!1;static async open(t){if(process.env.RSP_FAIL_IF_STORE_OPEN==="1"&&!t.allowResidentOpen)throw new Error("RSP_FAIL_IF_STORE_OPEN blocked store open");let n=tf(t.uri),r=await Yd(n),i=new e(r,{uri:t.uri,ttlDays:bo(t.ttlDays,ie),byteBudget:bo(t.byteBudget,se),now:t.now??(()=>new Date)});return So(r)?(await Zd(),i.db=await go(`file://${r}`),await i.ensureRedDbCollections(),await i.ensureRedDbStore()):i.document=await zd(i.path),i}async close(){await this.db?.close()}redDb(){return this.db}async mint(t,n){if(this.db)return await this.mintRedDb(t,n);let r=Buffer.from(t),i=this.opts.now(),s=i.toISOString(),o=new Date(i.getTime()+this.opts.ttlDays*24*60*60*1e3).toISOString(),a=wo(r,n),c=ae(a),u={collection:L,handle:a,original:r.toString("base64"),original_encoding:"base64",original_bytes:r.length,command:n.command,created_at:s,expires_at:o,loss:n.loss};return delete this.document.tombstones[Ae(a)],this.document.records[c]=u,this.upsertIndex({handle:a,key:c,bytes:r.length,command:n.command,created_at:s,expires_at:o}),this.prune(),await this.flush(),a}async get(t){if(this.db)return await this.getRedDb(t);if(!Ot(t))return null;let n=this.tombstone(t);if(n)return n;let r=this.document.records[ae(t)];if(!et(r))return null;if(Date.parse(r.expires_at)<=this.opts.now().getTime()){let s={status:"expired",expired_at:r.expires_at,command:r.command};return this.expireEntry({handle:r.handle,key:ae(r.handle),bytes:r.original_bytes,command:r.command,created_at:r.created_at,expires_at:r.expires_at},r.expires_at),await this.flush(),s}let i=this.readOriginal(r);return i?{collection:L,handle:r.handle,original:i,command:r.command,created_at:r.created_at,loss:r.loss}:null}async stats(){if(this.db)return await this.statsRedDb();this.prune(),await this.flush();let n=this.readIndex().records;return{records:n.length,bytes:n.reduce((r,i)=>r+i.bytes,0),oldest:n.reduce((r,i)=>r==null||i.created_at<r?i.created_at:r,null),budget:this.opts.byteBudget}}readIndex(){return this.document.index}writeIndex(t){this.document.index=t}upsertIndex(t){let r=this.readIndex().records.filter(i=>i.handle!==t.handle);r.push(t),this.writeIndex({version:1,records:r}),this.dirty=!0}prune(){let t=this.opts.now().getTime(),n=new Date(t).toISOString(),r=this.readIndex(),i=[];for(let o of r.records)Date.parse(o.expires_at)<=t?this.expireEntry(o,o.expires_at):i.push(o);let s=i.reduce((o,a)=>o+a.bytes,0);for(i.sort((o,a)=>o.created_at.localeCompare(a.created_at));s>this.opts.byteBudget&&i.length>0;){let o=i.shift();s-=o.bytes,this.expireEntry(o,n)}i.length<r.records.length&&this.writeIndex({version:1,records:i})}expireEntry(t,n){delete this.document.records[t.key],this.document.tombstones[Ae(t.handle)]={status:"expired",expired_at:n,command:t.command},this.dirty=!0}tombstone(t){let n=this.document.tombstones[Ae(t)];return fn(n)?n:null}readOriginal(t){return t.original?Buffer.from(t.original,"base64"):null}async flush(){this.dirty&&(await vo(this.path,this.document),this.dirty=!1)}kv(){if(!this.db)throw new Error("rsp RedDB store is not open");return this.db.kv(L)}async kvGet(t){let n=await this.kv().get(t);if(typeof n!="string")return n;try{return JSON.parse(n)}catch{return n}}async ensureRedDbStore(){let t=await this.readRedDbIndex();await this.writeRedDbIndex(t)}async ensureRedDbCollections(){if(!this.db)throw new Error("rsp RedDB store is not open");let t=(await this.db.list()).find(r=>r.name===L);if(!t){await this.db.query(`CREATE KV IF NOT EXISTS ${L}`);return}if(t.model==="kv")return;if(t.model!=="table")throw new Error(`cannot self-heal elision collection ${L}: unsupported model ${t.model}`);let n=await this.readLegacyElisionTableRows();await this.db.query(`DROP TABLE ${L}`),await this.db.query(`CREATE KV IF NOT EXISTS ${L}`);for(let r of n)await this.kv().put(r.key,r.value);await this.ensureMigratedRedDbIndex(n)}async readLegacyElisionTableRows(){if(!this.db)throw new Error("rsp RedDB store is not open");let t=await this.db.query(`SELECT * FROM ${L}`),n=[];for(let r of t.rows){let i=Vd(r);i&&n.push(i)}return n}async ensureMigratedRedDbIndex(t){if(t.some(i=>i.key===Sr()&&vr(dn(i.value))))return;let r=t.map(i=>{let s=dn(i.value);return et(s)?{handle:s.handle,key:ae(s.handle),bytes:s.original_bytes,command:s.command,created_at:s.created_at,expires_at:s.expires_at}:null}).filter(i=>i!=null);await this.writeRedDbIndex({version:1,records:r})}async mintRedDb(t,n){let r=Buffer.from(t),i=this.opts.now(),s=i.toISOString(),o=new Date(i.getTime()+this.opts.ttlDays*24*60*60*1e3).toISOString(),a=wo(r,n),c=ae(a),u={collection:L,handle:a,original:r.toString("base64"),original_encoding:"base64",original_bytes:r.length,command:n.command,created_at:s,expires_at:o,loss:n.loss};await this.kv().delete(Ae(a)),await this.kv().put(c,u);let d=(await this.readRedDbIndex()).records.filter(m=>m.handle!==a);return d.push({handle:a,key:c,bytes:r.length,command:n.command,created_at:s,expires_at:o}),await this.pruneRedDb({version:1,records:d},!0),await this.assertRedDbMintPersisted(a,r.length),a}async getRedDb(t){if(!Ot(t))return null;let n=await this.kvGet(Ae(t));if(fn(n))return n;let r=await this.kvGet(ae(t));if(!et(r))return null;if(Date.parse(r.expires_at)<=this.opts.now().getTime()){let s={status:"expired",expired_at:r.expires_at,command:r.command};return await this.expireRedDbEntry({handle:r.handle,key:ae(r.handle),bytes:r.original_bytes,command:r.command,created_at:r.created_at,expires_at:r.expires_at},r.expires_at),s}let i=this.readOriginal(r);return i?{collection:L,handle:r.handle,original:i,command:r.command,created_at:r.created_at,loss:r.loss}:null}async statsRedDb(){let t=await this.pruneRedDb(await this.readRedDbIndex());return{records:t.records.length,bytes:t.records.reduce((n,r)=>n+r.bytes,0),oldest:t.records.reduce((n,r)=>n==null||r.created_at<n?r.created_at:n,null),budget:this.opts.byteBudget}}async memory(t,n){if(!this.db)throw new Error("resident memory operations require the shared RedDB store");if(await this.ensureMemoryGraphStore(),t==="recall"){let r=Jd(n);return await this.memoryRecallRedDb(r.query,r.limit)}if(t==="ingest"){let r=qd(n);return await this.memoryIngestRedDb(r)}throw new Error(`unsupported memory action: ${t}`)}async ensureMemoryGraphStore(){if(!this.db)throw new Error("rsp RedDB store is not open");await this.db.execute("CREATE GRAPH IF NOT EXISTS memory_nodes"),await this.db.execute("CREATE GRAPH IF NOT EXISTS memory_edges")}async memoryIngestRedDb(t){if(!this.db)throw new Error("rsp RedDB store is not open");let n=await Wd(t.cwd,t.maxFiles??200,t.ignore??[]),r=0;for(let i of n){let o=(await Tr(i,"utf8").catch(()=>"")).trim();if(!o)continue;let a=xr(i),c=Ro("sha256").update("resident-memory-v1\0").update(i).update("\0").update(o).digest("hex");if(await this.db.kv("memory_kv").get(`resident-node-hash:${c}`)!=null)continue;let u=Date.now(),l={title:a,content:o,source:i,confidence:"EXTRACTED",hash:c,project:"default",scope:"project",importance:1,tier:"durable",provenance_tier:"oracle",created_at:u,updated_at:u,accessed_at:u,access_count:0,provenance:{source_kind:"system",writer:"rsp-resident",confidence:"EXTRACTED",evidence:[i],created_at:u,updated_at:u}},d=await this.db.query("INSERT INTO memory_nodes NODE (label, node_type, hash, properties) VALUES ($1, $2, $3, $4) RETURNING *",a,"concept",c,l),m=Number(d.rows[0]?.red_entity_id??d.rows[0]?.rid);Number.isFinite(m)&&await this.db.kv("memory_kv").put(`resident-node-hash:${c}`,m),r+=1}return{files:n.length,nodes:r,edges:0,docs:n.length,added:r,updated:0,skipped:n.length-r,stale:0,semantic:{enabled:!1,nodes:0,edges:0,token_cost:{input:0,output:0}},durationMs:0}}async memoryRecallRedDb(t,n){if(!this.db)throw new Error("rsp RedDB store is not open");let r=await this.db.query("SELECT * FROM memory_nodes"),i=t.toLowerCase().split(/\s+/).filter(Boolean),s=r.rows.map(o=>Hd(o,i)).filter(o=>o!=null).sort((o,a)=>a.score-o.score).slice(0,Math.max(1,Math.min(100,n)));return{hits:s,context_md:s.map(o=>`- memory_nodes:${o.rid} ${o.label}: ${o.excerpt}`).join(`
|
|
34
|
-
`)
|
|
35
|
-
`),
|
|
11
|
+
`).find(d=>d.startsWith("data: "));l&&(yield JSON.parse(l.slice(6)))}}watchPrefix(t,n={}){return this.watch(`${t}.*`,n)}}});function $u(e,t,n){let{waitMs:r,group:s=null,count:i=null}=n??{};if(!Number.isInteger(r)||r<0)throw new w("INVALID_QUEUE_WAIT","queue readWait requires an explicit non-negative integer waitMs (no infinite wait)");let o=ue(e),a=ue(t),c=s!=null?` GROUP ${ue(s)}`:"",u=i!=null?gr(i):"";return`QUEUE READ ${o}${c} CONSUMER ${a}${u} WAIT ${r}ms`}function ue(e){let t=String(e);if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(t))throw new w("INVALID_QUEUE_NAME",`invalid queue name "${t}": expected an SQL identifier`);return t}function gr(e){if(e==null)return"";if(!Number.isInteger(e)||e<0)throw new w("INVALID_QUEUE_COUNT","queue count must be a non-negative integer");return` COUNT ${e}`}function Au(e){if(!Number.isInteger(e))throw new w("INVALID_QUEUE_PRIORITY","queue priority must be an integer");return String(e)}function Nu(e){if(e.key!=null&&(e.delay!=null||e.at!=null))throw new w("INVALID_ARGUMENT","QUEUE PUSH KEY cannot be combined with DELAY / AVAILABLE AT");let t="";return e.priority!=null&&(t+=` PRIORITY ${Au(e.priority)}`),e.key!=null&&(t+=` KEY ${yr(e.key)}`),e.dedup!=null&&(t+=` DEDUP ${yr(e.dedup)}`),e.delay!=null&&(t+=` DELAY ${e.delay}`),e.at!=null&&(t+=` AVAILABLE AT ${e.at}`),t}function Bu(e){return typeof e=="number"||typeof e=="boolean"?String(e):e==null?"NULL":typeof e=="string"?yr(e):JSON.stringify(e)}function yr(e){return`'${String(e).replace(/'/g,"''")}'`}function pr(e){return Array.isArray(e?.rows)?e.rows.map(t=>t.payload):[]}var vt,hr=E(()=>{_e();vt=class{constructor(t){this.client=t}create(t){return this.client.call("query",{sql:`CREATE QUEUE IF NOT EXISTS ${ue(t)}`})}push(t,n,r={}){let s=Nu(r);return this.client.call("query",{sql:`QUEUE PUSH ${ue(t)} ${Bu(n)}${s}`})}async pop(t,n){let r=await this.client.call("query",{sql:`QUEUE POP ${ue(t)}${gr(n)}`});return pr(r)}async peek(t,n){let r=await this.client.call("query",{sql:`QUEUE PEEK ${ue(t)}${gr(n)}`});return pr(r)}async len(t){let n=await this.client.call("query",{sql:`QUEUE LEN ${ue(t)}`});return Number(n?.rows?.[0]?.len??0)}purge(t){return this.client.call("query",{sql:`QUEUE PURGE ${ue(t)}`})}async readWait(t,n,r={}){let s=$u(t,n,r),i=await this.client.call("query",{sql:s});return pr(i)}}});function fi(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new w("INVALID_ARGUMENT",`${t} must be an object`)}function Cu(e){if(e==null)return 100;if(!Number.isInteger(e)||e<=0)throw new w("INVALID_ARGUMENT","limit must be a positive integer");return e}function un(e){return String(e).split(".").map(mi).join(".")}function mi(e){let t=String(e);if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(t))throw new w("INVALID_ARGUMENT",`invalid SQL identifier "${t}"`);return t}function Lu(e){return pi(JSON.stringify(e))}function Mu(e){return JSON.stringify(e)}function ju(e){return e==null?"NULL":typeof e=="number"||typeof e=="boolean"?String(e):typeof e=="object"?Lu(e):pi(e)}function pi(e){return`'${String(e).replace(/'/g,"''")}'`}var xt,wr=E(()=>{_e();xt=class{constructor(t){this.db=t}async insert(t,n){fi(n,"documents.insert document"),await this.ensureCollection(t);let r=await this.db.query(`INSERT INTO ${un(t)} DOCUMENT VALUES (${Mu(n)}) RETURNING *`),s=r.rows?.[0];if(!s||s.rid==null)throw new w("INVALID_RESPONSE","documents.insert expected one returned item with rid");return{affected:r.affected??1,rid:s.rid,item:s}}async get(t,n){let r=await this.db.get(t,n);if(!r.entity)throw new w("NOT_FOUND",`document ${String(n)} was not found`);return r.entity}async list(t,n={}){let r=Cu(n.limit),s=n.orderBy??n.order_by??"rid ASC",i=n.filter?` WHERE ${String(n.filter)}`:"";return{items:(await this.db.query(`SELECT * FROM ${un(t)}${i} ORDER BY ${s} LIMIT ${r}`)).rows??[]}}async patch(t,n,r){fi(r,"documents.patch patch");let s=Object.entries(r);if(s.length===0)throw new w("INVALID_ARGUMENT","documents.patch patch must be a non-empty object");for(let[c]of s)if(c.includes("/"))throw new w("INVALID_ARGUMENT","documents.patch currently accepts top-level document fields");let i=s.map(([c,u])=>`${mi(c)} = ${ju(u)}`).join(", "),a=(await this.db.query(`UPDATE ${un(t)} SET ${i} WHERE rid = $1 RETURNING *`,n)).rows?.[0];if(!a)throw new w("NOT_FOUND",`document ${String(n)} was not found`);return a}async delete(t,n){let s=(await this.db.delete(t,n)).affected??0;return{affected:s,deleted:s>0}}async ensureCollection(t){try{await this.db.query(`CREATE DOCUMENT ${un(t)}`)}catch(n){if(!String(n?.message??"").includes("already exists"))throw n}}}});function Uu(e,t){if(t.secretRef){let{collection:n,key:r}=t.secretRef;return`SECRET_REF(vault, ${Re(n)}.${Re(r)})`}return Gu(e)}function Fu(e,t){for(let n of["ttl","ttlMs","ttl_ms","expireMs","expire_ms","expiresAt"])if(e[n]!=null)throw new TypeError(`${t} does not support TTL or expiration options`)}function Re(e){let t=String(e);if(!/^[A-Za-z0-9_.]+$/.test(t))throw new TypeError("keyed collection and key names must use letters, numbers, underscores, or dots");return t}function Gu(e){return typeof e=="number"||typeof e=="boolean"?String(e):e==null?"NULL":Array.isArray(e)||typeof e=="object"?JSON.stringify(e):gi(e)}function gi(e){return`'${String(e).replace(/'/g,"''")}'`}var Ot,br=E(()=>{Ot=class{constructor(t,n="red.config"){this.client=t,this.collection=n}put(t,n,r={}){Fu(r,"config");let s=r.collection??this.collection,i=Array.isArray(r.tags)&&r.tags.length>0?` TAGS [${r.tags.map(gi).join(", ")}]`:"";return this.client.call("query",{sql:`PUT CONFIG ${Re(s)} ${Re(t)} = ${Uu(n,r)}${i}`})}get(t,n={}){let r=n.collection??this.collection;return this.client.call("query",{sql:`GET CONFIG ${Re(r)} ${Re(t)}`})}resolve(t,n={}){let r=n.collection??this.collection;return this.client.call("query",{sql:`RESOLVE CONFIG ${Re(r)} ${Re(t)}`})}}});function Ju(e,t){for(let n of["ttl","ttlMs","ttl_ms","expireMs","expire_ms","expiresAt"])if(e[n]!=null)throw new TypeError(`${t} does not support TTL or expiration options`)}function rt(e){let t=String(e);if(!/^[A-Za-z0-9_.]+$/.test(t))throw new TypeError("keyed collection and key names must use letters, numbers, underscores, or dots");return t}function qu(e){return typeof e=="number"||typeof e=="boolean"?String(e):e==null?"NULL":Array.isArray(e)||typeof e=="object"?JSON.stringify(e):yi(e)}function yi(e){return`'${String(e).replace(/'/g,"''")}'`}var Pt,_r=E(()=>{Pt=class{constructor(t,n="red.vault"){this.client=t,this.collection=n}put(t,n,r={}){Ju(r,"vault");let s=r.collection??this.collection,i=Array.isArray(r.tags)&&r.tags.length>0?` TAGS [${r.tags.map(yi).join(", ")}]`:"";return this.client.call("query",{sql:`VAULT PUT ${rt(s)}.${rt(t)} = ${qu(n)}${i}`})}get(t,n={}){let r=n.collection??this.collection;return this.client.call("query",{sql:`VAULT GET ${rt(r)}.${rt(t)}`})}unseal(t,n={}){let r=n.collection??this.collection;return this.client.call("query",{sql:`UNSEAL VAULT ${rt(r)}.${rt(t)}`})}}});async function wi(e){return((await e.query("SHOW COLLECTIONS")).rows??[]).map(Hu)}async function bi(e,t){return((await e.query(`SHOW COLLECTIONS WHERE name = ${Wu(t)}`)).rows??[]).some(r=>r.name===String(t))}function Hu(e){return{...e,name:String(e.name),model:String(e.model),capabilities:Array.isArray(e.capabilities)?e.capabilities:[]}}function hi(e){return String(e).split(".").map(Vu).join(".")}function Vu(e){let t=String(e);if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(t))throw new w("INVALID_IDENTIFIER",`invalid SQL identifier "${t}"`);return t}function Wu(e){return`'${String(e).replace(/'/g,"''")}'`}var Dt,Rr=E(()=>{_e();Dt=class e{constructor(t,n,r=null,s=[],i=[]){this.db=t,this.collection=n,this.columns=r,this.whereClauses=s,this.params=i}select(...t){let n=t.length===1&&Array.isArray(t[0])?t[0]:t,r=n.length===1&&n[0]==="*"?null:n;return new e(this.db,this.collection,r!=null&&r.length>0?r:null,this.whereClauses,this.params)}where(t,...n){if(typeof t!="string"||t.trim().length===0)throw new w("INVALID_QUERY_BUILDER","where() requires a non-empty SQL condition");let r=n.length===1&&Array.isArray(n[0])?n[0]:n;return new e(this.db,this.collection,this.columns,[...this.whereClauses,t.trim()],[...this.params,...r])}async run(){let t=this.columns==null?"*":this.columns.map(hi).join(", "),n=this.whereClauses.length>0?` WHERE ${this.whereClauses.map(o=>`(${o})`).join(" AND ")}`:"",r=`SELECT ${t} FROM ${hi(this.collection)}${n}`,i=(this.params.length>0?await this.db.query(r,this.params):await this.db.query(r)).rows??[];return this.columns==null?i:i.map(o=>{let a={};for(let c of this.columns)a[c]=o[c];return a})}}});async function fn(e,t={}){let n=cr(e);if(rl(n),n.kind==="embedded"){let r=nl(n,t.auth);if(r.token||r.username)throw new w("AUTH_NOT_APPLICABLE","auth is only meaningful for remote connections; embedded modes inherit caller privileges.");let s=tl(n),i=t.binary??ci(),o=await si(i,s),a=new cn(o);return await a.call("version",{}),new Sr(a,{transport:"embedded"})}}function Ri(e){return Yu(e),e instanceof Float32Array||e instanceof Float64Array?Array.from(e):e instanceof Date?{$ts:String(BigInt(e.getTime())*1000000n)}:e instanceof Uint8Array||typeof Buffer<"u"&&e instanceof Buffer?{$bytes:Xu(e)}:typeof e=="number"&&!Number.isFinite(e)?Number.isNaN(e)?{$float:"NaN"}:{$float:e>0?"Infinity":"-Infinity"}:typeof e=="string"&&el(e)?{$uuid:e}:e}function Yu(e){if(e!=null&&!(typeof e=="boolean"||typeof e=="number"||typeof e=="string")){if(e instanceof Date){if(Number.isNaN(e.getTime()))throw new w("UNSUPPORTED_PARAM","cannot encode invalid Date query parameter");return}if(!(e instanceof Uint8Array||e instanceof Float32Array||e instanceof Float64Array||typeof Buffer<"u"&&e instanceof Buffer)){if(Array.isArray(e)){if(e.every(t=>typeof t=="number"))return;throw new w("UNSUPPORTED_PARAM","array query parameters must contain only numbers")}if(!(typeof e=="object"&&Object.getPrototypeOf(e)===Object.prototype))throw new w("UNSUPPORTED_PARAM",`cannot encode query parameter of type ${typeof e}`)}}}function Qu(e){return e.length===0?null:e.length===1&&Array.isArray(e[0])?e[0].map(Ri):e.map(Ri)}function Xu(e){let t=e instanceof Uint8Array?e:new Uint8Array(e.buffer,e.byteOffset,e.byteLength);if(typeof Buffer<"u")return Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString("base64");let n="";for(let r of t)n+=String.fromCharCode(r);return btoa(n)}function Zu(e){if(typeof Buffer<"u"){let r=Buffer.from(e,"base64");return new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}function el(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e)}function ln(e){if(Array.isArray(e))return e.map(ln);if(e&&typeof e=="object"){if(Object.keys(e).length===1){if(typeof e.$bytes=="string")return Zu(e.$bytes);if(typeof e.$uuid=="string")return e.$uuid;if(typeof e.$float=="string"){if(e.$float==="NaN")return Number.NaN;if(e.$float==="Infinity"||e.$float==="+Infinity")return 1/0;if(e.$float==="-Infinity")return-1/0}if(typeof e.$ts=="string"||typeof e.$ts=="number"){let r=typeof e.$ts=="string"?BigInt(e.$ts):BigInt(Math.trunc(e.$ts));return new Date(Number(r/1000000n))}}let n={};for(let[r,s]of Object.entries(e))n[r]=ln(s);return n}return e}function tl(e){return e.path?["rpc","--stdio","--path",e.path]:["rpc","--stdio"]}function nl(e,t){let n={token:e.token??e.apiKey??null,username:e.username??null,password:e.password??null,loginUrl:e.loginUrl??null};if(t==null)return n;if(typeof t!="object")throw new TypeError("options.auth must be an object");if(t.token!=null){if(typeof t.token!="string"||t.token.length===0)throw new TypeError("options.auth.token must be a non-empty string");n.token=t.token}if(t.apiKey!=null){if(typeof t.apiKey!="string"||t.apiKey.length===0)throw new TypeError("options.auth.apiKey must be a non-empty string");n.token=t.apiKey}if(t.username!=null){if(typeof t.username!="string"||t.username.length===0)throw new TypeError("options.auth.username must be a non-empty string");n.username=t.username}if(t.password!=null){if(typeof t.password!="string"||t.password.length===0)throw new TypeError("options.auth.password must be a non-empty string");n.password=t.password}return t.loginUrl!=null&&(n.loginUrl=t.loginUrl),n}function rl(e){if(e.kind!=="embedded")throw new w("EMBEDDED_ONLY",Ku)}function kr(){return new w(_i,`${_i}: nested transactions are not supported on one connection`)}function Si(e,t){if(e&&typeof e=="object")try{e.rollbackError=t}catch{}}function sl(e,t){if(!e||typeof e!="object"||e.rid==null&&e.id==null)throw new w("ENGINE_TOO_OLD",`${t}() requires RedDB engine >= ${Ei} with insert id support`);return e.rid==null&&(e.rid=e.id),e.id==null&&(e.id=e.rid),e}function il(e,t){if(!e||typeof e!="object"||!Array.isArray(e.rids)&&!Array.isArray(e.ids))throw new w("ENGINE_TOO_OLD",`bulkInsert() requires RedDB engine >= ${Ei} with bulk insert id support`);if(Array.isArray(e.rids)||(e.rids=e.ids),Array.isArray(e.ids)||(e.ids=e.rids),e.rids.length!==t)throw new w("INVALID_RESPONSE",`bulkInsert() expected ${t} rids, got ${e.rids.length}`);return e}var Ku,zu,Ei,_i,dn,Er,Sr,Tr=E(()=>{ii();ui();_e();ur();lr();mr();hr();wr();br();_r();Rr();lr();mr();hr();wr();br();_r();Rr();ur();Ku="remote URIs are not supported in @reddb-io/sdk; install @reddb-io/client for grpc/http/red transports",zu="1.0",Ei="1.0.9",_i="NESTED_TX_NOT_SUPPORTED";dn=class{constructor(t){this.db=t}query(t,...n){return this.db.query(t,...n)}execute(t,...n){return this.db.execute(t,...n)}insert(t,n){return this.db.insert(t,n)}bulkInsert(t,n){return this.db.bulkInsert(t,n)}async transaction(){throw kr()}},Er=class{constructor(t){this.db=t,this.active=!1}async begin(){if(this.db.inTransaction)throw kr();this.db.inTransaction=!0,this.active=!0;try{return await this.db.query("BEGIN")}catch(t){throw this.db.inTransaction=!1,this.active=!1,t}}async commit(){if(!this.active)throw new w("INVALID_ARGUMENT","tx.commit() called without an open transaction");try{return await this.db.query("COMMIT")}finally{this.active=!1,this.db.inTransaction=!1}}async rollback(){if(!this.active)throw new w("INVALID_ARGUMENT","tx.rollback() called without an open transaction");try{return await this.db.query("ROLLBACK")}finally{this.active=!1,this.db.inTransaction=!1}}async run(t){if(typeof t!="function")throw new TypeError("tx.run(callback) requires a function");if(this.db.inTransaction)throw new w("INVALID_ARGUMENT","nested tx.run() is not supported; issue savepoints via tx.query() instead");await this.begin();try{let n=await t(new dn(this.db));return await this.commit(),n}catch(n){if(this.active)try{await this.rollback()}catch(r){Si(n,r)}throw n}}},Sr=class{constructor(t,n={}){this.client=t,this.transport=n.transport??null,this.helperSpecVersion=zu,this.cache=new Tt(t,this.transport),this.queue=new vt(t),this.queues=this.queue,this.documents=new xt(this);let r=new nt(t);this.kv=Object.assign((s="kv_default")=>new nt(t,s),{put:r.put.bind(r),invalidateTags:r.invalidateTags.bind(r),watch:r.watch.bind(r),watchPrefix:r.watchPrefix.bind(r)}),this.config=(s="red.config")=>new Ot(t,s),this.vault=(s="red.vault")=>new Pt(t,s),this.inTransaction=!1}query(t,...n){if(typeof t!="string"||t.trim().length===0)return Promise.reject(new w("INVALID_ARGUMENT","query() requires a non-empty SQL string"));let r=Qu(n);return r==null?this.client.call("query",{sql:t}).then(ln):this.client.call("query",{sql:t,params:r}).then(ln)}execute(t,...n){return this.query(t,...n)}async insert(t,n){let r=await this.client.call("insert",{collection:t,payload:n});return sl(r,"insert")}async bulkInsert(t,n){if(Array.isArray(n)&&n.length===0)return{affected:0,rids:[],ids:[]};let r=await this.client.call("bulk_insert",{collection:t,payloads:n});return il(r,n.length)}tx(){return new Er(this)}async transaction(t){if(this.inTransaction)throw kr();if(typeof t!="function")throw new TypeError("transaction(callback) requires a function");this.inTransaction=!0;let n=!1;try{await this.query("BEGIN"),n=!0;let r=await t(new dn(this));return await this.query("COMMIT"),r}catch(r){if(n)try{await this.query("ROLLBACK")}catch(s){Si(r,s)}throw r}finally{this.inTransaction=!1}}exists(t){return bi(this,t)}list(){return wi(this)}from(t){return new Dt(this,t)}get(t,n){return this.client.call("get",{collection:t,id:String(n)})}delete(t,n){return this.client.call("delete",{collection:t,id:String(n)})}health(){return this.client.call("health",{})}version(){return this.client.call("version",{})}login(t,n){return this.client.call("auth.login",{username:t,password:n})}whoami(){return this.client.call("auth.whoami",{})}changePassword(t,n){return this.client.call("auth.change_password",{current_password:t,new_password:n})}createApiKey({username:t,role:n}={}){return this.client.call("auth.create_api_key",{username:t,role:n})}revokeApiKey(t){return this.client.call("auth.revoke_api_key",{key:t})}close(){return this.client.close()}}});function Pi(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t").replace(/[\u0000-\u001F]/g,t=>`\\u${t.charCodeAt(0).toString(16).padStart(4,"0")}`)}function Di(e){let t="",n=0;for(;n<e.length;){if(e[n]==="\\"){if(n+1>=e.length)throw new SyntaxError("Invalid escape sequence: backslash at end of string");let r=e[n+1];if(r==="n"){t+=`
|
|
12
|
+
`,n+=2;continue}if(r==="t"){t+=" ",n+=2;continue}if(r==="r"){t+="\r",n+=2;continue}if(r==="\\"){t+="\\",n+=2;continue}if(r==='"'){t+='"',n+=2;continue}if(r==="u"){if(n+6>e.length)throw new SyntaxError(`Invalid escape sequence: truncated \\u escape at "${e.slice(n,n+6)}"`);let s=e.slice(n+2,n+6);if(!/^[0-9a-f]{4}$/i.test(s))throw new SyntaxError(`Invalid escape sequence: \\u must be followed by 4 hex digits, got "${s}"`);let i=Number.parseInt(s,16);if(i>=55296&&i<=57343)throw new SyntaxError(`Invalid escape sequence: \\u${s} is a lone surrogate; supplementary code points MUST appear as literal UTF-8`);t+=String.fromCodePoint(i),n+=6;continue}throw new SyntaxError(`Invalid escape sequence: \\${r}`)}t+=e[n],n++}return t}function wn(e,t){let n=t+1;for(;n<e.length;){if(e[n]==="\\"&&n+1<e.length){n+=2;continue}if(e[n]==='"')return n;n++}return-1}function Or(e,t,n=0){let r=!1,s=n;for(;s<e.length;){if(e[s]==="\\"&&s+1<e.length&&r){s+=2;continue}if(e[s]==='"'){r=!r,s++;continue}if(e[s]===t&&!r)return s;s++}return-1}function q(e,t){try{return t()}catch(n){throw n instanceof H?n:n instanceof Error?new H(n.message,{line:e.lineNumber,source:e.raw,cause:n}):n}}function Ii(e){return e==="true"||e==="false"||e==="null"}function cl(e){if(!e||!al.test(e))return!1;let t=Number(e);return!Number.isNaN(t)&&Number.isFinite(t)}function gn(e,t,n=!1){let r=e.trimStart(),s=-1;if(r.startsWith('"')){let m=wn(r,0);if(m===-1||!r.slice(m+1).startsWith("["))return;let k=e.length-r.length+m+1;s=e.indexOf("[",k)}else s=e.indexOf("[");if(s===-1)return;let i=e.indexOf("]",s);if(i===-1)return;let o=i+1,a=o,c=e.indexOf("{",i);if(c!==-1&&c<e.indexOf(":",i)){let m=e.slice(i+1,c);if(m!==""){if(n){let R=m.trim();throw new SyntaxError(R===""?"Unexpected whitespace between bracket and fields segment":`Unexpected content "${R}" between bracket and fields segment`)}return}let k=e.indexOf("}",c);k!==-1&&(a=k+1)}if(o=e.indexOf(":",Math.max(i,a)),o===-1)return;let u=Math.max(i+1,a),l=e.slice(u,o);if(l!==""){if(n){let m=l.trim();throw new SyntaxError(m===""?"Unexpected whitespace between bracket segment and colon":`Unexpected content "${m}" between bracket segment and colon`)}return}let d;if(s>0){let m=e.slice(0,s).trim();d=m.startsWith('"')?vr(m):m}let g=e.slice(o+1).trim(),b=e.slice(s+1,i),y;try{y=ll(b,t)}catch(m){if(n)throw m;return}let{length:f,delimiter:p}=y,S;if(c!==-1&&c<o){let m=e.indexOf("}",c);if(m!==-1&&m<o){let k=e.slice(c+1,m),R=fl(k,p);if(R!==void 0){if(n)throw new SyntaxError(`Header delimiter mismatch: bracket declares "${ki(p)}" but fields segment contains unquoted "${ki(R)}"`);return}S=Pr(k,p).map(v=>vr(v.trim()))}}return{header:{key:d,length:f,delimiter:p,fields:S},inlineValues:g||void 0}}function ll(e,t){let n=e,r=t;if(n.endsWith(" ")?(r=pn.tab,n=n.slice(0,-1)):n.endsWith("|")&&(r=pn.pipe,n=n.slice(0,-1)),!ul.test(n))throw new SyntaxError(`Invalid array length: "${e}" (expected non-negative integer with no leading zeros)`);return{length:Number.parseInt(n,10),delimiter:r}}function fl(e,t){for(let n of dl)if(n!==t&&Or(e,n)!==-1)return n}function ki(e){return e===" "?"\\t":e}function Pr(e,t){let n=[],r="",s=!1,i=0;for(;i<e.length;){let o=e[i];if(o==="\\"&&i+1<e.length&&s){r+=o+e[i+1],i+=2;continue}if(o==='"'){s=!s,r+=o,i++;continue}if(o===t&&!s){n.push(r.trim()),r="",i++;continue}r+=o,i++}return(r||n.length>0)&&n.push(r.trim()),n}function $i(e){return e.map(t=>bn(t))}function bn(e){let t=e.trim();if(!t)return"";if(t.startsWith('"'))return vr(t);if(Ii(t)){if(t==="true")return!0;if(t==="false")return!1;if(t==="null")return null}if(cl(t)){let n=Number.parseFloat(t);return Object.is(n,-0)?0:n}return t}function vr(e){let t=e.trim();if(t.startsWith('"')){let n=wn(t,0);if(n===-1)throw new SyntaxError("Unterminated string: missing closing quote");if(n!==t.length-1)throw new SyntaxError("Unexpected characters after closing quote");return Di(t.slice(1,n))}return t}function ml(e,t){let n=t;for(;n<e.length&&e[n]!==":";)n++;if(n>=e.length||e[n]!==":")throw new SyntaxError("Missing colon after key");let r=e.slice(t,n).trim();return n++,{key:r,end:n}}function pl(e,t){let n=wn(e,t);if(n===-1)throw new SyntaxError("Unterminated quoted key");let r=Di(e.slice(t+1,n)),s=n+1;if(s>=e.length||e[s]!==":")throw new SyntaxError("Missing colon after key");return s++,{key:r,end:s}}function gl(e,t){let n=e[t]==='"';return{...n?pl(e,t):ml(e,t),isQuoted:n}}function Ai(e){return e.trim().startsWith("[")&&Or(e,":")!==-1}function yl(e){return Or(e,":")!==-1}function hl(){return{lineNumber:0,blankLines:[]}}function wl(e,t,n,r){t.lineNumber++;let s=t.lineNumber,i=0;for(;i<e.length&&e[i]===" ";)i++;let o=e.slice(i);if(!o.trim()){let c=Ti(i,n);t.blankLines.push({lineNumber:s,indent:i,depth:c});return}let a=Ti(i,n);if(r){let c=0;for(;c<e.length&&(e[c]===" "||e[c]===" ");)c++;if(e.slice(0,c).includes(" "))throw new H("Tabs are not allowed in indentation in strict mode",{line:s,source:e});if(i>0&&i%n!==0)throw new H(`Indentation must be exact multiple of ${n}, but found ${i} spaces`,{line:s,source:e})}return{raw:e,indent:i,content:o,depth:a,lineNumber:s}}function*bl(e,t,n,r){for(let s of e){let i=wl(s,r,t,n);i!==void 0&&(yield i)}}function Ti(e,t){return Math.floor(e/t)}function It(e,t,n,r,s){if(r.strict&&e!==t)throw new H(`Expected ${t} ${n}, but got ${e}`,{line:s.lineNumber,source:s.raw})}function _l(e,t,n){if(e?.depth===t&&e.content.startsWith("- "))throw new H(`Expected ${n} list array items, but found more`,{line:e.lineNumber,source:e.raw})}function Rl(e,t,n){if(e?.depth===t&&!e.content.startsWith("- ")&&El(e.content,n.delimiter))throw new H(`Expected ${n.length} tabular rows, but found more`,{line:e.lineNumber,source:e.raw})}function Ni(e,t,n,r,s){if(!r)return;let i=n.find(o=>o.lineNumber>e&&o.lineNumber<t);if(i)throw new H(`Blank lines inside ${s} are not allowed in strict mode`,{line:i.lineNumber})}function El(e,t){let n=e.indexOf(":"),r=e.indexOf(t);return n===-1||r!==-1&&r<n}function*kl(e,t){if(t?.expandPaths!==void 0)throw new Error("expandPaths is not supported in streaming decode");let n={indent:t?.indent??2,strict:t?.strict??!0},r=hl(),s=new Sl(bl(e,n.indent,n.strict,r),r),i=s.peekSync();if(!i){yield{type:"startObject"},yield{type:"endObject"};return}if(i.content.trim()==="[]"){s.advanceSync(),yield{type:"startArray",length:0},yield{type:"endArray"};return}if(Ai(i.content)){let a=q(i,()=>gn(i.content,ee,n.strict));if(a){s.advanceSync(),yield*yn(a.header,a.inlineValues,s,0,n,i);return}}if(s.advanceSync(),s.atEndSync()&&!xi(i)){yield{type:"primitive",value:q(i,()=>bn(i.content.trim()))};return}if(!xi(i)&&s.peekSync()?.depth===0)throw new H("Top-level document must start with a key-value or array-header line",{line:i.lineNumber,source:i.raw});let o=n.strict?new Set:void 0;for(yield{type:"startObject"},yield*st(i,s,0,n,o);!s.atEndSync();){let a=s.peekSync();if(!a||a.depth!==0)break;s.advanceSync(),yield*st(a,s,0,n,o)}yield{type:"endObject"}}function vi(e,t,n){if(n){if(n.has(e))throw new H(`Duplicate sibling key "${e}"`,{line:t.lineNumber,source:t.raw});n.add(e)}}function*st(e,t,n,r,s){let i=e.content,o=q(e,()=>gn(i,ee,r.strict));if(o&&o.header.key!==void 0){vi(o.header.key,e,s),yield{type:"key",key:o.header.key},yield*yn(o.header,o.inlineValues,t,n,r,e);return}let{key:a,isQuoted:c}=q(e,()=>gl(i,0)),u=i.indexOf(":",a.length),l=u>=0?i.slice(u+1).trim():"";if(vi(a,e,s),yield c?{type:"key",key:a,wasQuoted:!0}:{type:"key",key:a},!l){let d=t.peekSync();if(d&&d.depth>n){yield{type:"startObject"},yield*Tl(t,n+1,r),yield{type:"endObject"};return}yield{type:"startObject"},yield{type:"endObject"};return}if(l==="[]"){yield{type:"startArray",length:0},yield{type:"endArray"};return}yield{type:"primitive",value:q(e,()=>bn(l))}}function*Tl(e,t,n){let r,s=n.strict?new Set:void 0;for(;!e.atEndSync();){let i=e.peekSync();if(!i||i.depth<t)break;if(r===void 0&&i.depth>=t&&(r=i.depth),i.depth===r)e.advanceSync(),yield*st(i,e,r,n,s);else break}}function*yn(e,t,n,r,s,i){if(yield{type:"startArray",length:e.length},t){yield*vl(e,t,s,i),yield{type:"endArray"};return}if(e.fields&&e.fields.length>0){yield*xl(e,n,r,s,i),yield{type:"endArray"};return}yield*Ol(e,n,r,s,i),yield{type:"endArray"}}function*vl(e,t,n,r){if(!t.trim()){It(0,e.length,"inline array items",n,r);return}let s=q(r,()=>Pr(t,e.delimiter)),i=q(r,()=>$i(s));It(i.length,e.length,"inline array items",n,r);for(let o of i)yield{type:"primitive",value:o}}function*xl(e,t,n,r,s){let i=n+1,o=0,a,c,u=s;for(;!t.atEndSync()&&o<e.length;){let l=t.peekSync();if(!l||l.depth<i)break;if(l.depth===i){a===void 0&&(a=l.lineNumber),c=l.lineNumber,u=l,t.advanceSync();let d=q(l,()=>Pr(l.content,e.delimiter));It(d.length,e.fields.length,"tabular row values",r,l);let g=q(l,()=>$i(d));yield*Dl(e.fields,g),o++}else break}It(o,e.length,"tabular rows",r,u),r.strict&&a!==void 0&&c!==void 0&&Ni(a,c,t.getBlankLines(),r.strict,"tabular array"),r.strict&&Rl(t.peekSync(),i,e)}function*Ol(e,t,n,r,s){let i=n+1,o=0,a,c,u=s;for(;!t.atEndSync()&&o<e.length;){let l=t.peekSync();if(!l||l.depth<i)break;let d=l.content.startsWith("- ")||l.content==="-";if(l.depth===i&&d){a===void 0&&(a=l.lineNumber),c=l.lineNumber,u=l,yield*Pl(t,i,r);let g=t.current();g&&(c=g.lineNumber,u=g),o++}else break}It(o,e.length,"list array items",r,u),r.strict&&a!==void 0&&c!==void 0&&Ni(a,c,t.getBlankLines(),r.strict,"list array"),r.strict&&_l(t.peekSync(),i,e.length)}function*Pl(e,t,n){let r=e.nextSync();if(!r)throw new ReferenceError("Expected list item");let s;if(r.content==="-"){yield{type:"startObject"},yield{type:"endObject"};return}else if(r.content.startsWith("- "))s=r.content.slice(2);else throw new H('Expected list item to start with "- "',{line:r.lineNumber,source:r.raw});if(!s.trim()){yield{type:"startObject"},yield{type:"endObject"};return}if(s.trim()==="[]"){yield{type:"startArray",length:0},yield{type:"endArray"};return}let i={...r,content:s};if(Ai(s)){let a=q(i,()=>gn(s,ee,n.strict));if(a){yield*yn(a.header,a.inlineValues,e,t,n,i);return}}let o=q(i,()=>gn(s,ee,n.strict));if(o&&o.header.key!==void 0&&o.header.fields!==void 0){let a=o.header,c=n.strict?new Set([a.key]):void 0;yield{type:"startObject"},yield{type:"key",key:a.key},yield*yn(a,o.inlineValues,e,t+1,n,i);let u=t+1;for(;!e.atEndSync();){let l=e.peekSync();if(!l||l.depth<u)break;if(l.depth===u&&!l.content.startsWith("- "))e.advanceSync(),yield*st(l,e,u,n,c);else break}yield{type:"endObject"};return}if(yl(s)){let a=n.strict?new Set:void 0;yield{type:"startObject"},yield*st(i,e,t+1,n,a);let c=t+1;for(;!e.atEndSync();){let u=e.peekSync();if(!u||u.depth<c)break;if(u.depth===c&&!u.content.startsWith("- "))e.advanceSync(),yield*st(u,e,c,n,a);else break}yield{type:"endObject"};return}yield{type:"primitive",value:q(i,()=>bn(s))}}function xi(e){let t=e.content;if(t.startsWith('"')){let n=wn(t,0);return n===-1?!1:t.slice(n+1).includes(":")}else return t.includes(":")}function*Dl(e,t){yield{type:"startObject"};for(let n=0;n<e.length;n++)yield{type:"key",key:e[n]},yield{type:"primitive",value:t[n]};yield{type:"endObject"}}function le(e){if(e===null)return null;if(typeof e=="object"&&e!==null&&"toJSON"in e&&typeof e.toJSON=="function"){let t=e.toJSON();if(t!==e)return le(t)}if(typeof e=="string"||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(le);if(e instanceof Set)return Array.from(e).map(le);if(e instanceof Map)return Object.fromEntries(Array.from(e,([t,n])=>[String(t),le(n)]));if(Il(e)){let t={};for(let n in e)Object.hasOwn(e,n)&&(t[n]=le(e[n]));return t}return null}function Me(e){return e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean"}function Ee(e){return Array.isArray(e)}function B(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function $t(e){return Object.keys(e).length===0}function Il(e){if(e===null||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function At(e){return e.length===0||e.every(t=>Me(t))}function $l(e){return e.length===0||e.every(t=>Ee(t))}function Bi(e){return e.length===0||e.every(t=>B(t))}function Bl(e){return/^[A-Z_][\w.]*$/i.test(e)}function Ci(e){return/^[A-Z_]\w*$/i.test(e)}function Cl(e,t=ee){return!(!e||e!==e.trim()||Ii(e)||Ll(e)||e.includes(":")||e.includes('"')||e.includes("\\")||/[[\]{}]/.test(e)||/[\u0000-\u001F]/.test(e)||e.includes(t)||e.startsWith("-"))}function Ll(e){return Al.test(e)||Nl.test(e)}function mn(e,t){if(Array.isArray(e))return e.map(n=>mn(n,t));if(B(e)){let n={},r=e[Li];for(let[s,i]of Object.entries(e)){let o=r?.has(s);if(s.includes(".")&&!o){let c=s.split(".");if(c.every(u=>Ci(u))){Ml(n,c,mn(i,t),t);continue}}let a=mn(i,t);if(s in n){let c=n[s];if(Ir(c,a))Dr(c,a,t);else{if(t)throw new TypeError(`Path expansion conflict at key "${s}": cannot merge ${typeof c} with ${typeof a}`);n[s]=a}}else n[s]=a}return n}return e}function Ml(e,t,n,r){let s=e;for(let a=0;a<t.length-1;a++){let c=t[a],u=s[c];if(u===void 0){let l={};s[c]=l,s=l}else if(B(u))s=u;else{if(r)throw new TypeError(`Path expansion conflict at segment "${c}": expected object but found ${typeof u}`);let l={};s[c]=l,s=l}}let i=t[t.length-1],o=s[i];if(o===void 0)s[i]=n;else if(Ir(o,n))Dr(o,n,r);else{if(r)throw new TypeError(`Path expansion conflict at key "${i}": cannot merge ${typeof o} with ${typeof n}`);s[i]=n}}function Dr(e,t,n){for(let[r,s]of Object.entries(t)){let i=e[r];if(i===void 0)e[r]=s;else if(Ir(i,s))Dr(i,s,n);else{if(n)throw new TypeError(`Path expansion conflict at key "${r}": cannot merge ${typeof i} with ${typeof s}`);e[r]=s}}}function Ir(e,t){return B(e)&&B(t)}function jl(e){let t={stack:[],root:void 0};for(let n of e)Ul(t,n);return Fl(t)}function Ul(e,t){let{stack:n}=e;switch(t.type){case"startObject":{let r={},s=new Set;if(n.length===0)n.push({type:"object",obj:r,quotedKeys:s});else{let i=n[n.length-1];if(i.type==="object"){if(i.currentKey===void 0)throw new Error("Object startObject event without preceding key");i.obj[i.currentKey]=r,i.currentKey=void 0}else i.type==="array"&&i.arr.push(r);n.push({type:"object",obj:r,quotedKeys:s})}break}case"endObject":{if(n.length===0)throw new Error("Unexpected endObject event");let r=n.pop();if(r.type!=="object")throw new Error("Mismatched endObject event");r.quotedKeys.size>0&&Object.defineProperty(r.obj,Li,{value:r.quotedKeys,enumerable:!1,writable:!1,configurable:!1}),n.length===0&&(e.root=r.obj);break}case"startArray":{let r=[];if(n.length===0)n.push({type:"array",arr:r});else{let s=n[n.length-1];if(s.type==="object"){if(s.currentKey===void 0)throw new Error("Array startArray event without preceding key");s.obj[s.currentKey]=r,s.currentKey=void 0}else s.type==="array"&&s.arr.push(r);n.push({type:"array",arr:r})}break}case"endArray":{if(n.length===0)throw new Error("Unexpected endArray event");let r=n.pop();if(r.type!=="array")throw new Error("Mismatched endArray event");n.length===0&&(e.root=r.arr);break}case"key":{if(n.length===0)throw new Error("Key event outside of object context");let r=n[n.length-1];if(r.type!=="object")throw new Error("Key event in non-object context");r.currentKey=t.key,t.wasQuoted&&r.quotedKeys.add(t.key);break}case"primitive":if(n.length===0)e.root=t.value;else{let r=n[n.length-1];if(r.type==="object"){if(r.currentKey===void 0)throw new Error("Primitive event without preceding key in object");r.obj[r.currentKey]=t.value,r.currentKey=void 0}else r.type==="array"&&r.arr.push(t.value)}break}}function Fl(e){if(e.stack.length!==0)throw new Error("Incomplete event stream: stack not empty at end");if(e.root===void 0)throw new Error("No root value built from events");return e.root}function Gl(e,t,n,r,s,i,o){if(r.keyFolding!=="safe"||!B(t))return;let{segments:a,tail:c,leafValue:u}=Jl(e,t,o??r.flattenDepth);if(a.length<2||!a.every(g=>Ci(g)))return;let l=ql(a),d=i?`${i}.${l}`:l;if(!n.includes(l)&&!(s&&s.has(d)))return{foldedKey:l,remainder:c,leafValue:u,segmentCount:a.length}}function Jl(e,t,n){let r=[e],s=t;for(;r.length<n&&B(s);){let i=Object.keys(s);if(i.length!==1)break;let o=i[0],a=s[o];r.push(o),s=a}return!B(s)||$t(s)?{segments:r,tail:void 0,leafValue:s}:{segments:r,tail:s,leafValue:s}}function ql(e){return e.join(".")}function ot(e,t){return e===null?ol:typeof e=="boolean"||typeof e=="number"?String(e):Hl(e,t)}function Hl(e,t=ee){return Cl(e,t)?e:`"${Pi(e)}"`}function at(e){return Bl(e)?e:`"${Pi(e)}"`}function Mi(e,t=ee){return e.map(n=>ot(n,t)).join(t)}function je(e,t){let n=t?.key,r=t?.fields,s=t?.delimiter??",",i="";if(n!=null&&(i+=at(n)),i+=`[${e}${s!==ee?s:""}]`,r){let o=r.map(a=>at(a));i+=`{${o.join(s)}}`}return i+=":",i}function*Vl(e,t,n){if(Me(e)){let r=ot(e,t.delimiter);r!==""&&(yield r);return}Ee(e)?yield*xr(void 0,e,n,t):B(e)&&(yield*it(e,n,t))}function*it(e,t,n,r,s,i){let o=Object.keys(e);t===0&&!r&&(r=new Set(o.filter(c=>c.includes("."))));let a=i??n.flattenDepth;for(let[c,u]of Object.entries(e))yield*Wl(c,u,t,n,o,r,s,a)}function*Wl(e,t,n,r,s,i,o,a){let c=o?`${o}.${e}`:e,u=a??r.flattenDepth;if(r.keyFolding==="safe"&&s){let d=Gl(e,t,s,r,i,o,u);if(d){let{foldedKey:g,remainder:b,leafValue:y,segmentCount:f}=d,p=at(g);if(b===void 0){if(Me(y)){yield U(n,`${p}: ${ot(y,r.delimiter)}`,r.indent);return}else if(Ee(y)){yield*xr(g,y,n,r);return}else if(B(y)&&$t(y)){yield U(n,`${p}:`,r.indent);return}}if(B(b)){yield U(n,`${p}:`,r.indent);let S=u-f,m=o?`${o}.${g}`:g;yield*it(b,n+1,r,i,m,S);return}}}let l=at(e);Me(t)?yield U(n,`${l}: ${ot(t,r.delimiter)}`,r.indent):Ee(t)?yield*xr(e,t,n,r):B(t)&&(yield U(n,`${l}:`,r.indent),$t(t)||(yield*it(t,n+1,r,i,c,u)))}function*xr(e,t,n,r){if(t.length===0){yield U(n,e!=null?`${at(e)}: []`:"[]",r.indent);return}if(At(t)){yield U(n,_n(t,r.delimiter,e),r.indent);return}if($l(t)&&t.every(s=>At(s))){yield*Kl(e,t,n,r);return}if(Bi(t)){let s=ji(t);s?yield*zl(e,t,s,n,r):yield*Oi(e,t,n,r);return}yield*Oi(e,t,n,r)}function*Kl(e,t,n,r){yield U(n,je(t.length,{key:e,delimiter:r.delimiter}),r.indent);for(let s of t)if(At(s)){let i=_n(s,r.delimiter);yield Z(n+1,i,r.indent)}}function _n(e,t,n){let r=je(e.length,{key:n,delimiter:t}),s=Mi(e,t);return e.length===0?r:`${r} ${s}`}function*zl(e,t,n,r,s){yield U(r,je(t.length,{key:e,fields:n,delimiter:s.delimiter}),s.indent),yield*Ui(t,n,r+1,s)}function ji(e){if(e.length===0)return;let t=e[0],n=Object.keys(t);if(n.length!==0&&Yl(e,n))return n}function Yl(e,t){for(let n of e){if(Object.keys(n).length!==t.length)return!1;for(let r of t)if(!(r in n)||!Me(n[r]))return!1}return!0}function*Ui(e,t,n,r){for(let s of e)yield U(n,Mi(t.map(i=>s[i]),r.delimiter),r.indent)}function*Oi(e,t,n,r){yield U(n,je(t.length,{key:e,delimiter:r.delimiter}),r.indent);for(let s of t)yield*$r(s,n+1,r)}function*Ql(e,t,n){if($t(e)){yield U(t,"-",n.indent);return}let r=Object.entries(e),[s,i]=r[0],o=r.slice(1);if(Ee(i)&&Bi(i)){let c=ji(i);if(c){yield Z(t,je(i.length,{key:s,fields:c,delimiter:n.delimiter}),n.indent),yield*Ui(i,c,t+2,n),o.length>0&&(yield*it(Object.fromEntries(o),t+1,n));return}}let a=at(s);if(Me(i))yield Z(t,`${a}: ${ot(i,n.delimiter)}`,n.indent);else if(Ee(i))if(i.length===0)yield Z(t,`${a}: []`,n.indent);else if(At(i))yield Z(t,`${a}${_n(i,n.delimiter)}`,n.indent);else{yield Z(t,`${a}${je(i.length,{delimiter:n.delimiter})}`,n.indent);for(let c of i)yield*$r(c,t+2,n)}else B(i)&&(yield Z(t,`${a}:`,n.indent),$t(i)||(yield*it(i,t+2,n)));o.length>0&&(yield*it(Object.fromEntries(o),t+1,n))}function*$r(e,t,n){if(Me(e))yield Z(t,ot(e,n.delimiter),n.indent);else if(Ee(e))if(At(e))yield Z(t,_n(e,n.delimiter),n.indent);else{yield Z(t,je(e.length,{delimiter:n.delimiter}),n.indent);for(let r of e)yield*$r(r,t+1,n)}else B(e)&&(yield*Ql(e,t,n))}function U(e,t,n){return" ".repeat(n*e)+t}function Z(e,t,n){return U(e,"- "+t,n)}function Xl(e,t){let n=t("",e,[]);return n===void 0?hn(e,t,[]):hn(le(n),t,[])}function hn(e,t,n){return B(e)?Zl(e,t,n):Ee(e)?ed(e,t,n):e}function Zl(e,t,n){let r={};for(let[s,i]of Object.entries(e)){let o=[...n,s],a=t(s,i,o);a!==void 0&&(r[s]=hn(le(a),t,o))}return r}function ed(e,t,n){let r=[];for(let s=0;s<e.length;s++){let i=e[s],o=[...n,s],a=t(String(s),i,o);if(a===void 0)continue;let c=le(a);r.push(hn(c,t,o))}return r}function O(e,t){return Array.from(Fi(e,t)).join(`
|
|
13
|
+
`)}function Ar(e,t){return Gi(e.split(`
|
|
14
|
+
`),t)}function Fi(e,t){let n=le(e),r=td(t);return Vl(r.replacer?Xl(n,r.replacer):n,r,0)}function Gi(e,t){let n=nd(t),r=jl(kl(e,{indent:n.indent,strict:n.strict}));return n.expandPaths==="safe"?mn(r,n.strict):r}function td(e){return{indent:e?.indent??2,delimiter:e?.delimiter??ee,keyFolding:e?.keyFolding??"off",flattenDepth:e?.flattenDepth??Number.POSITIVE_INFINITY,replacer:e?.replacer}}function nd(e){return{indent:e?.indent??2,strict:e?.strict??!0,expandPaths:e?.expandPaths??"off"}}var ol,pn,ee,H,al,ul,dl,Sl,Al,Nl,Li,Ji=E(()=>{ol="null",pn={comma:",",tab:" ",pipe:"|"},ee=pn.comma;H=class extends SyntaxError{constructor(e,t){let n=t?.line!==void 0?`Line ${t.line}: `:"";super(n+e,t?.cause!==void 0?{cause:t.cause}:void 0),this.name="ToonDecodeError",this.line=t?.line,this.source=t?.source}};al=/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:e[+-]?\d+)?$/i;ul=/^(?:0|[1-9]\d*)$/;dl=[","," ","|"];Sl=class{constructor(e,t){this.buffer=[],this.done=!1,this.generator=e,this.scanState=t}getBlankLines(){return this.scanState.blankLines}async peek(){if(this.buffer.length>0)return this.buffer[0];if(this.done)return;let e=await this.generator.next();if(e.done){this.done=!0;return}return this.buffer.push(e.value),e.value}async next(){let e=await this.peek();return e!==void 0&&(this.buffer.shift(),this.lastLine=e),e}async advance(){await this.next()}current(){return this.lastLine}async atEnd(){return await this.peek()===void 0}peekSync(){if(this.buffer.length>0)return this.buffer[0];if(this.done)return;let e=this.generator.next();if(e.done){this.done=!0;return}return this.buffer.push(e.value),e.value}nextSync(){let e=this.peekSync();return e!==void 0&&(this.buffer.shift(),this.lastLine=e),e}advanceSync(){this.nextSync()}atEndSync(){return this.peekSync()===void 0}};Al=/^-?\d+(?:\.\d+)?(?:e[+-]?\d+)?$/i,Nl=/^0\d+$/;Li=Symbol("quotedKey")});var Se=E(()=>{"use strict";Ji()});function Br(e,t,n=Hi){let r=Math.max(0,Math.floor(e)),s=n in Vi?n:Hi,i=Vi[s],o=t?Math.floor(r*(1-.25)):null,a=t?Math.ceil(r*(1+.25)):null;return{tokens_saved:r,tokens_saved_estimated:t,token_estimate_range_pct:t?.25:null,tokens_saved_low:o,tokens_saved_high:a,dollars_saved_estimate_usd:Nr(r,i),dollars_saved_low_usd:o==null?null:Nr(o,i),dollars_saved_high_usd:a==null?null:Nr(a,i),pricing_model_family:s,pricing_input_usd_per_million_tokens:i,pricing_note:sd}}function Nr(e,t){return id(Math.max(0,e)/1e6*t)}function Nt(e){return`$${e.toFixed(6)}`}function id(e){return Math.round(e*1e6)/1e6}var Hi,Vi,sd,Cr=E(()=>{"use strict";Hi="gpt-5",Vi={"gpt-5":1.25,"gpt-5-mini":.25,"gpt-5-nano":.05,"gpt-4.1":2,"gpt-4.1-mini":.4,"gpt-4o":2.5,"gpt-4o-mini":.15},sd="estimate derived from byte-based token estimate when token counts are estimated"});import{existsSync as od,readFileSync as dw}from"node:fs";import{dirname as ad,join as cd}from"node:path";function Wi(e,t){let n=e;for(let r=0;r<16;r++){let s=cd(n,t);if(od(s))return s;let i=ad(n);if(i===n)break;n=i}return null}function ud(e){let t=e.indexOf(" #");return(t>=0?e.slice(0,t):e).trim()}function Lr(e,t){let n=[];for(let r of e.split(`
|
|
15
|
+
`)){let s=r.replace(/\r$/,""),i=s.trim();if(!i||i.startsWith("#"))continue;let o=s.indexOf(":");if(o<0)continue;let a=s.length-s.trimStart().length,c=s.slice(0,o).trim();if(!c)continue;let u=s.slice(o+1).trim();for(;n.length&&n[n.length-1].indent>=a;)n.pop();if(n.push({indent:a,key:c}),u&&n.map(d=>d.key).join(".")===t)return ud(u)}}var Ki=E(()=>{});import{createConnection as ld}from"node:net";async function ut(e,t){let n=e.timeoutMs??1e3;return await new Promise((r,s)=>{let i=ld(e.socketPath),o=!1,a="",c=setTimeout(()=>{u(()=>s(new Error("resident rsp server timed out"))),i.destroy()},n);function u(l){o||(o=!0,clearTimeout(c),l())}i.on("connect",()=>{i.write(`${JSON.stringify(t)}
|
|
16
|
+
`)}),i.on("data",l=>{a+=l.toString("utf8");let d=a.indexOf(`
|
|
17
|
+
`);if(d<0)return;let g=a.slice(0,d);u(()=>{try{r(JSON.parse(g))}catch(b){s(b)}}),i.end()}),i.on("error",l=>u(()=>s(l))),i.on("close",()=>{o||u(()=>s(new Error("resident rsp server closed without response")))})})}var Mr=E(()=>{});import{createHash as dd,randomUUID as Zi}from"node:crypto";import{spawn as eo}from"node:child_process";import{constants as jr}from"node:fs";import{readFileSync as fd}from"node:fs";import{mkdir as Rn,open as md,readFile as to,rename as pd,rm as te,stat as gd,writeFile as yd}from"node:fs/promises";import{tmpdir as hd}from"node:os";import{dirname as ke,join as V,resolve as En}from"node:path";import{fileURLToPath as no}from"node:url";function Te(e){let t=Od(e)??En(e),n=xd(t);return{rootDir:t,socketPath:V(n,"rsp.sock"),pidPath:V(n,"rsp.pid"),lockPath:V(n,"rsp.lock"),wakeLockPath:V(t,".red","tmp","rsp.wake.lock"),summaryPath:V(t,".red","tmp","rsp-status-summary.json"),registryPath:V(t,".red","tmp","rsp-resident.pid.json")}}async function Sn(e,t){if(await Rn(ke(e.socketPath),{recursive:!0,mode:448}),await Qi(e.socketPath,t))return;await Yi(e,t);let n=await ao(e.lockPath);if(n)try{if(await Qi(e.socketPath,t))return;await Yi(e,t),await Rd(e.socketPath);let r=Ed(e,t);await zi(e.socketPath,r);return}finally{await n.close(),await te(e.lockPath,{force:!0})}await zi(e.socketPath)}async function Ue(e,t=200){try{return await so(e,t)!=null}catch{return!1}}async function so(e,t=200){let n=await ut({socketPath:e,timeoutMs:t},{id:Zi(),op:"ping"});return n.ok?fo(n.value)?{version:$d(n.value.version)}:{}:null}async function kn(e,t){if(await Rn(ke(e.socketPath),{recursive:!0,mode:448}),await Ue(e.socketPath,50))return!1;let n=await ao(e.wakeLockPath);if(!n)return!1;await n.close();let[r,s]=uo(t);return eo(r,[...s,"warm-resident","--socket",e.socketPath,"--pid-file",e.pidPath,"--store-uri",t.storeUri,"--ttl-days",String(t.ttlDays),"--ephemeral-ttl-hours",String(t.ephemeralTtlHours??6),"--byte-budget",String(t.byteBudget),"--telemetry-ttl-days",String(t.telemetryTtlDays??90),"--telemetry-byte-budget",String(t.telemetryByteBudget??t.byteBudget),"--telemetry-drain-interval-ms",String(t.telemetryDrainIntervalMs??3e4),"--telemetry-drain-timeout-ms",String(t.telemetryDrainTimeoutMs??2e3),"--idle-ms",String(t.idleMs??3e5),"--resident-version",t.clientVersion??"0.0.0-dev","--registry",e.registryPath,"--wake-lock",e.wakeLockPath],{cwd:e.rootDir,detached:!0,stdio:"ignore",env:{...process.env,RSP_RESIDENT_WARMER:"1"}}).unref(),!0}async function io(e,t){try{await Sn(e,t)}finally{await te(e.wakeLockPath,{force:!0})}}async function Ct(e){try{let t=JSON.parse(await to(e,"utf8"));return Ad(t)?t:null}catch{return null}}async function Tn(e,t){let n={version:ro,pid:t.pid??process.pid,socket_path:t.socket_path,store_uri:t.store_uri,resident_version:t.resident_version,started_at:t.started_at??new Date().toISOString()};await Rn(ke(e),{recursive:!0});let r=`${e}.${process.pid}.${Date.now()}.tmp`;await yd(r,`${JSON.stringify(n)}
|
|
18
|
+
`,{encoding:"utf8",mode:384}),await pd(r,e)}async function vn(e,t=process.pid){try{let n=await Ct(e);if(n&&n.pid!==t)return;await te(e,{force:!0})}catch{}}async function Bt(e){let t=await Ct(e.registryPath);if(!t)try{return await to(e.registryPath,"utf8"),{registry_path:e.registryPath,state:"invalid"}}catch{return{registry_path:e.registryPath,state:"missing"}}if(!lt(t.pid))return{registry_path:e.registryPath,state:"registered-dead",entry:t};let n=await Ue(t.socket_path,100);return n&&await vd(t.store_uri)?{registry_path:e.registryPath,state:"registered-alive-store-missing",entry:t}:{registry_path:e.registryPath,state:n?"registered-alive-socket-healthy":"registered-alive-socket-dead",entry:t}}async function oo(e){let t=await Bt(e);return t.state==="registered-dead"||t.state==="invalid"?(await te(e.registryPath,{force:!0}),await Bt(e)):(t.state==="registered-alive-socket-dead"||t.state==="registered-alive-store-missing")&&t.entry?(await co(t.entry.pid),await te(e.registryPath,{force:!0}),await te(t.entry.socket_path,{force:!0}),await Bt(e)):t}async function zi(e,t){let n=Date.now()+_d(),r;for(;Date.now()<n;){if(await Ue(e))return;if(t){let s=t.spawnError();if(s)throw new Error(Ur("resident rsp server spawn failed",t,s));if(t.child.exitCode!=null||t.child.signalCode!=null)throw new Error(Ur("resident rsp server exited before ready",t))}await new Promise(s=>setTimeout(s,50))}throw r instanceof Error?r:new Error(t?Ur("resident rsp server did not start",t):"resident rsp server did not start")}function _d(){let e=Number(process.env.RSP_RESIDENT_READY_TIMEOUT_MS??"");return Number.isFinite(e)&&e>0?e:bd}async function Rd(e){await te(e,{force:!0})}async function ao(e){await Rn(ke(e),{recursive:!0,mode:448});try{return await md(e,jr.O_CREAT|jr.O_EXCL|jr.O_RDWR)}catch(t){if(t.code!=="EEXIST")throw t;return null}}function Ed(e,t){let[n,r]=uo(t),s=process.env.RSP_DEBUG==="1",i,o="",a=eo(n,[...r,"server","--socket",e.socketPath,"--pid-file",e.pidPath,"--store-uri",t.storeUri,"--ttl-days",String(t.ttlDays),"--ephemeral-ttl-hours",String(t.ephemeralTtlHours??6),"--byte-budget",String(t.byteBudget),"--telemetry-ttl-days",String(t.telemetryTtlDays??90),"--telemetry-byte-budget",String(t.telemetryByteBudget??t.byteBudget),"--telemetry-drain-interval-ms",String(t.telemetryDrainIntervalMs??3e4),"--telemetry-drain-timeout-ms",String(t.telemetryDrainTimeoutMs??2e3),"--idle-ms",String(t.idleMs??3e5),"--resident-version",t.clientVersion??"0.0.0-dev","--registry",e.registryPath],{cwd:e.rootDir,detached:!0,stdio:s?["ignore","ignore","pipe"]:"ignore",env:{...process.env,RSP_RESIDENT_SERVER:"1"}});return a.on("error",c=>{i=c}),s&&(a.stderr?.setEncoding("utf8"),a.stderr?.on("data",c=>{o=kd(`${o}${c}`,Sd)})),a.unref(),{child:a,stderrTail:()=>o,spawnError:()=>i}}function Ur(e,t,n){let r=[e];n&&r.push(`error: ${n.message}`),t.child.exitCode!=null&&r.push(`exit code: ${t.child.exitCode}`),t.child.signalCode!=null&&r.push(`signal: ${t.child.signalCode}`);let s=t.stderrTail().trimEnd();return s&&r.push(`stderr tail:
|
|
19
|
+
${s}`),r.join(`
|
|
20
|
+
`)}function kd(e,t){let n=Buffer.byteLength(e,"utf8");return n<=t?e:Buffer.from(e,"utf8").subarray(n-t).toString("utf8").replace(/^\uFFFD+/,"")}async function Yi(e,t){try{let n=await Ct(e.registryPath);if(!n||n.socket_path!==e.socketPath||n.store_uri!==t.storeUri)return;if(!lt(n.pid)){await te(e.registryPath,{force:!0});return}if(await Ue(n.socket_path,100))return;if(lo(t.clientVersion,n.resident_version)&&(await Td(n.pid,1500),!lt(n.pid))){await te(e.registryPath,{force:!0});return}await co(n.pid),await te(e.registryPath,{force:!0})}catch{}}function lt(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}async function co(e){if(!lt(e))return;try{process.kill(e,"SIGTERM")}catch{return}let t=Date.now()+1e3;for(;Date.now()<t;){if(!lt(e))return;await new Promise(n=>setTimeout(n,50))}try{process.kill(e,"SIGKILL")}catch{}}async function Td(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!lt(e))return;await new Promise(r=>setTimeout(r,50))}}async function vd(e){if(!e.startsWith("file://"))return!1;try{return await gd(no(e)),!1}catch(t){return t.code==="ENOENT"}}function uo(e){if(e.serverCommand)return[e.serverCommand,e.serverArgs??[]];let t=process.argv[1]?En(process.argv[1]):no(import.meta.url);return[process.execPath,[...process.execArgv,t]]}function xd(e){let t=dd("sha256").update(e).digest("hex").slice(0,20),n=process.env.XDG_RUNTIME_DIR;if(n){let s=V(n,"red-skills",t);if(V(s,"rsp.sock").length<wd)return s}let r=typeof process.getuid=="function"?process.getuid():"nouid";return V(hd(),`red-skills-${r}`,t)}function Od(e){let t=En(e);for(let n=0;n<32;n++){try{let s=Fr(V(t,".git"));if(s!=null)return Pd(t,s)??t;if(Fr(V(t,".git","HEAD"))!=null||Fr(V(t,".red","config.yaml"))!=null)return t}catch{}let r=ke(t);if(r===t)return null;t=r}return null}function Pd(e,t){let n=/^gitdir:\s*(.+?)\s*$/m.exec(t);if(!n)return null;let r=En(e,n[1]);return/[/\\]worktrees[/\\][^/\\]+$/.test(r)?ke(ke(ke(r))):null}function Fr(e){try{return fd(e,"utf8")}catch{return null}}async function Qi(e,t){let n=await so(e).catch(()=>null);return n?lo(t.clientVersion,n.version)?(await Dd(e,t.clientVersion),await Nd(e),!1):!0:!1}async function Dd(e,t){try{await ut({socketPath:e,timeoutMs:200},{id:Zi(),op:"handover",clientVersion:t})}catch{}}function lo(e,t){return!e||!t?!1:Id(e,t)>0}function Id(e,t){let n=Xi(e),r=Xi(t);return!n||!r?0:n.major-r.major||n.minor-r.minor||n.patch-r.patch}function Xi(e){let t=/^(\d+)\.(\d+)\.(\d+)/.exec(String(e).trim());return t?{major:Number(t[1]),minor:Number(t[2]),patch:Number(t[3])}:null}function fo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function $d(e){return typeof e=="string"&&e.length>0?e:void 0}function Ad(e){return fo(e)&&e.version===ro&&Number.isInteger(e.pid)&&typeof e.socket_path=="string"&&typeof e.store_uri=="string"&&typeof e.resident_version=="string"&&typeof e.started_at=="string"}async function Nd(e){let t=Date.now()+1e3;for(;Date.now()<t;){if(!await Ue(e,50))return;await new Promise(n=>setTimeout(n,50))}}var wd,ro,bd,Sd,xn=E(()=>{Mr();wd=108,ro=1,bd=5e3;Sd=8*1024});var wo={};A(wo,{DEFAULT_RSP_BYTE_BUDGET:()=>ge,DEFAULT_RSP_EPHEMERAL_TTL_HOURS:()=>pe,DEFAULT_RSP_HEAVY_GIT_BYTE_THRESHOLD:()=>fe,DEFAULT_RSP_IDLE_MS:()=>In,DEFAULT_RSP_STORE_PATH:()=>On,DEFAULT_RSP_TELEMETRY_BYTE_BUDGET:()=>Dn,DEFAULT_RSP_TELEMETRY_DRAIN_INTERVAL_MS:()=>go,DEFAULT_RSP_TELEMETRY_DRAIN_TIMEOUT_MS:()=>yo,DEFAULT_RSP_TELEMETRY_TTL_DAYS:()=>Pn,DEFAULT_RSP_TTL_DAYS:()=>me,MIN_RSP_IDLE_MS:()=>ho,resolveRspConfig:()=>ve});import{readFileSync as Bd}from"node:fs";import{join as mo,resolve as po}from"node:path";function ve(e,t,n){let r=Wi(po(e),mo(".red","config.yaml")),s=r?Bd(r,"utf8"):"",i=Lr(s,"rsp.enabled")==="true",o=de(ne(s,"rsp.ttlDays"),me),a=de(Lt(t.RSP_EPHEMERAL_TTL_HOURS)??ne(s,"rsp.ephemeralTtlHours"),pe),c=de(ne(s,"rsp.byteBudget"),ge),u=de(ne(s,"rsp.telemetryTtlDays"),Pn),l=de(ne(s,"rsp.telemetryByteBudget")??ne(s,"rsp.byteBudget"),Dn),d=de(Lt(t.RSP_TELEMETRY_DRAIN_INTERVAL_MS)??ne(s,"rsp.telemetryDrainIntervalMs"),go),g=de(Lt(t.RSP_TELEMETRY_DRAIN_TIMEOUT_MS)??ne(s,"rsp.telemetryDrainTimeoutMs"),yo),b=Cd(Lt(t.RSP_IDLE_MS)??ne(s,"rsp.idleMs"),In,ho),y=de(Lt(t.RSP_HEAVY_GIT_BYTE_THRESHOLD)??ne(s,"rsp.heavyGitByteThreshold"),fe),f=Te(e).rootDir,p=n??t.RSP_STORE_URI??`file://${mo(po(f),On)}`;return{enabled:i,storeUri:p,ttlDays:o,ephemeralTtlHours:a,byteBudget:c,telemetryTtlDays:u,telemetryByteBudget:l,telemetryDrainIntervalMs:d,telemetryDrainTimeoutMs:g,idleMs:b,heavyGitByteThreshold:y}}function ne(e,t){let n=Lr(e,t);if(n==null)return;let r=Number(n);return Number.isFinite(r)?r:void 0}function de(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}function Cd(e,t,n){let r=de(e,t);return Math.max(r,n)}function Lt(e){if(e==null||e.trim()==="")return;let t=Number(e);return Number.isFinite(t)?t:void 0}var fe,On,me,pe,ge,Pn,Dn,go,yo,In,ho,re=E(()=>{"use strict";Ki();xn();fe=8*1024,On=".red/tmp/red-skills.rdb",me=7,pe=6,ge=64*1024*1024,Pn=90,Dn=4*1024*1024,go=3e4,yo=2e3,In=5*6e4,ho=5e3});var bo=E(()=>{"use strict";Mr()});var jt={};A(jt,{ResidentRspElisionStore:()=>Mt,ensureResidentServer:()=>Sn,kickResidentServer:()=>kn,pingResident:()=>Ue,readResidentRegistry:()=>Ct,removeResidentRegistry:()=>vn,residentRegistryStatus:()=>Bt,resolveResidentPaths:()=>Te,sweepResidentRegistry:()=>oo,warmResidentServer:()=>io,writeResidentRegistry:()=>Tn});import{randomUUID as Ld}from"node:crypto";function _o(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var Mt,Fe=E(()=>{"use strict";bo();xn();Mt=class{constructor(t,n,r={}){this.paths=t;this.config=n;this.opts=r}metrics;lastResponseMetrics(){return this.metrics}async mint(t,n){let s=(await this.request({op:"mint",original:Buffer.from(t).toString("base64"),meta:n})).handle;if(!s?.startsWith("el:"))throw new Error("resident rsp returned invalid handle");return s}async get(t){let n=await this.request({op:"get",handle:t});return n?_o(n)&&n.status==="expired"?n:!_o(n)||typeof n.original!="string"?null:{...n,original:Buffer.from(n.original,"base64")}:null}async stats(){return await this.request({op:"stats"})}async accountingStats(t){return await this.request({op:"accounting-stats",byteBudget:t})}async telemetryStats(t){return await this.request({op:"telemetry-stats",sinceDays:t})}async telemetryGains(t){return await this.request({op:"telemetry-gains",sinceDays:t})}async memory(t,n){return await this.request({op:"memory",action:t,payload:n})}async close(){}async request(t){this.opts.ensureResident!==!1&&await Sn(this.paths,this.config);let n=await ut(this.paths,{...t,id:Ld()});if(!n.ok)throw new Error(n.error);return this.metrics={storeOpenCount:n.storeOpenCount,storeElapsedMs:n.storeElapsedMs},n.value}}});var qt={};A(qt,{DEFAULT_RSP_BYTE_BUDGET:()=>ge,DEFAULT_RSP_EPHEMERAL_TTL_HOURS:()=>pe,DEFAULT_RSP_TTL_DAYS:()=>me,RSP_ELISION_COLLECTION:()=>F,RspElisionStore:()=>Gt,ensureReddbBinaryFromWarmCache:()=>Ao,storageClassForCommand:()=>Je});import{createHash as Bn}from"node:crypto";import{spawnSync as Ft}from"node:child_process";import{existsSync as Md}from"node:fs";import{mkdir as jd,readFile as Kr,readdir as Po,rename as Ud,writeFile as Fd}from"node:fs/promises";import{homedir as Gd}from"node:os";import{basename as zr,dirname as Do,join as ft}from"node:path";import{fileURLToPath as Jd}from"node:url";import{gunzipSync as qd,gzipSync as Hd}from"node:zlib";function Ro(e,t){return`el:${Bn("sha256").update("rsp-elision-v1\0").update(e).update("\0").update(JSON.stringify({command:t.command,loss:t.loss})).digest("hex").slice(0,12)}`}function ye(e){return`record:${e.slice(3)}`}function Ge(e){return`expired:${e.slice(3)}`}function Gr(){return"index:v1"}function Vd(e){return`blob:${e}`}function Je(e){let t=e.trim().split(/\s+/).filter(Boolean),n=t[0]??"";if(n==="cat")return"derivable";if(n==="git"){let r=t[1]??"";return r==="log"||r==="diff"||r==="blame"||r==="show"?"derivable":Cn(t)?"re-executable":"ephemeral"}return"ephemeral"}function Ut(e){return Ln(e.storage_class)?e.storage_class:Je(e.command)}function Wd(e){return Ln(e.storage_class)?e.storage_class:Je(e.command)}function Eo(e){let t=Xd(),n={derivable:new Set,"re-executable":new Set,ephemeral:new Set};for(let r of e){let s=Wd(r);if(t[s].records+=1,t[s].raw_bytes+=r.raw_bytes??r.bytes,r.blob_key){if(n[s].has(r.blob_key))continue;n[s].add(r.blob_key)}t[s].bytes+=r.bytes}return t}function So(e,t,n,r){let s=t==="ephemeral"?r*60*60*1e3:n*24*60*60*1e3;return new Date(e.getTime()+s).toISOString()}function dt(e){let t=0,n=new Set;for(let r of e){if(r.blob_key){if(n.has(r.blob_key))continue;n.add(r.blob_key)}t+=r.bytes}return t}function ko(e,t){let n=process.cwd(),r=Ft("git",["rev-parse","--is-inside-work-tree"],{cwd:n,encoding:"utf8"});if(r.status!==0||r.stdout.trim()!=="true")return null;let s=Ft("git",["hash-object","-w","--stdin"],{cwd:n,input:e,encoding:"buffer"});if(s.status!==0)return null;let i=s.stdout.toString("utf8").trim();return/^[0-9a-f]{40,64}$/.test(i)?{kind:"git-blob",command:t,cwd:n,object_ids:[i],working_tree_fingerprint:Kd(n),original_bytes:e.length}:null}function Kd(e){let t=Jr(e,["rev-parse","HEAD"])||"unborn",n=Jr(e,["write-tree"])||"no-index",r=Jr(e,["status","--porcelain=v1","-z"])||"";return Bn("sha256").update(t).update("\0").update(n).update("\0").update(r).digest("hex")}function Jr(e,t){let n=Ft("git",t,{cwd:e,encoding:"utf8"});return n.status===0?n.stdout.trim():null}function To(e,t){let n=t.trim().split(/\s+/).filter(Boolean);if(!Cn(n))return null;let r=Io(process.cwd(),n,e.length);return!r||pt(r)!==pt(e)?null:{kind:"command",command:t,cwd:process.cwd(),argv:n,original_bytes:e.length,content_hash:pt(e)}}function Cn(e){return e[0]==="git"?e[1]==="status"?!0:e[1]!=="branch"?!1:e.length===2||e.slice(2).every(t=>/^-[avvr]+$/.test(t)):!1}function pt(e){return Bn("sha256").update("rsp-reexecutable-content-v1\0").update(e).digest("hex")}function vo(e,t,n,r){return t?Buffer.byteLength(JSON.stringify(t),"utf8"):n?Buffer.byteLength(JSON.stringify(n),"utf8"):r?r.stored_bytes:e.length}function qr(e){return typeof e.stored_bytes=="number"?e.stored_bytes:e.derivation_recipe?Buffer.byteLength(JSON.stringify(e.derivation_recipe),"utf8"):e.reexecution_recipe?Buffer.byteLength(JSON.stringify(e.reexecution_recipe),"utf8"):e.blob_key?typeof e.stored_bytes=="number"?e.stored_bytes:0:e.original_bytes}function xo(e,t,n){let r=Hd(e);return{key:Vd(t),content_hash:t,encoding:"gzip+base64",bytes:r.toString("base64"),original_bytes:e.length,stored_bytes:r.length,created_at:n}}function zd(e){try{let t=qd(Buffer.from(e.bytes,"base64"));return t.length===e.original_bytes?t:null}catch{return null}}function Yd(e){let t=e.object_ids[0];if(!t)return null;let n=Ft("git",["cat-file","-p",t],{cwd:e.cwd,encoding:"buffer",maxBuffer:Math.max(e.original_bytes+1024,1024*1024)});return n.status!==0||n.stdout.length!==e.original_bytes?null:n.stdout}function Qd(e){if(!Cn(e.argv))return null;let t=Io(e.cwd,e.argv,e.original_bytes);return t?pt(t)===e.content_hash?t:Buffer.concat([Buffer.from(`reconstructed after state moved - current snapshot follows
|
|
21
|
+
`,"utf8"),t]):null}function Io(e,t,n){let r=t[0];if(!r)return null;let s=Ft(r,t.slice(1),{cwd:e,encoding:"buffer",maxBuffer:Math.max(n+1024,1024*1024)});return s.status!==0||s.signal?null:s.stdout}function Xd(){return{derivable:{records:0,bytes:0,raw_bytes:0},"re-executable":{records:0,bytes:0,raw_bytes:0},ephemeral:{records:0,bytes:0,raw_bytes:0}}}function Jt(e){return/^el:[a-f0-9]{12}$/.test(e)}function $n(e){return/^blob:[a-f0-9]{64}$/.test(e)}function Zd(e){if(!gt(e))throw new Error("memory recall payload must be an object");let t=e.query;if(typeof t!="string"||t.trim()==="")throw new Error("memory recall query is required");let n=typeof e.limit=="number"&&Number.isFinite(e.limit)?e.limit:10;return{query:t,limit:n,options:{includeSuperseded:e.includeSuperseded===!0,scope:gt(e.scope)?e.scope:void 0,ranking:gt(e.ranking)?e.ranking:void 0}}}function ef(e){if(!gt(e))throw new Error("memory ingest payload must be an object");let t=e.cwd;if(typeof t!="string"||t.trim()==="")throw new Error("memory ingest cwd is required");let n=typeof e.maxFiles=="number"&&Number.isFinite(e.maxFiles)?e.maxFiles:void 0,r=Array.isArray(e.ignore)?e.ignore.filter(s=>typeof s=="string"):void 0;return{cwd:t,maxFiles:n,ignore:r}}function gt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function tf(e){return gt(e)?typeof e.key=="string"&&e.key.trim()!==""?{key:e.key,value:An(e.value)}:typeof e.record_key=="string"&&e.record_key.trim()!==""?{key:e.record_key,value:An(e.value)}:mt(e)?{key:ye(e.handle),value:e}:Nn(e)&&typeof e.handle=="string"&&Jt(e.handle)?{key:Ge(e.handle),value:e}:null:null}function An(e){if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}}async function nf(e,t,n){let r=[],s=new Set([".git","node_modules",".red",...n]);async function i(o){if(r.length>=t)return;let a=await Po(o,{withFileTypes:!0}).catch(()=>[]);for(let c of a){if(r.length>=t)return;if(s.has(c.name))continue;let u=ft(o,c.name);c.isDirectory()?await i(u):c.isFile()&&/\.(md|mdx|txt|ts|tsx|js|jsx|json|yaml|yml|toml|rs|go|py|sql)$/i.test(c.name)&&r.push(u)}}return await i(e),r}function rf(e,t){let n=Number(e.red_entity_id??e.rid);if(!Number.isFinite(n))return null;let r=e.properties??e.PROPERTIES,s=gt(r)?r:{},i=String(e.label??e.LABEL??s.title??`memory-${n}`),o=String(e.node_type??e.NODE_TYPE??"concept"),a=String(s.content??s.summary??s.title??i),c=`${i} ${a}`.toLowerCase(),u=t.filter(l=>c.includes(l));return u.length===0&&t.length>0?null:{id:String(n),rid:n,label:i,node_type:o,score:u.length||1,excerpt:a.slice(0,500)}}function Hr(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}function mt(e){if(!W(e))return!1;let t=typeof e.original=="string"&&e.original_encoding==="base64",n=of(e.derivation_recipe),r=af(e.reexecution_recipe),s=e.blob_key,i=typeof s=="string"&&$n(s);return e.collection===F&&typeof e.handle=="string"&&Jt(e.handle)&&(t||n||r||i)&&typeof e.original_bytes=="number"&&(e.content_hash===void 0||Yr(e.content_hash))&&(e.stored_bytes===void 0||typeof e.stored_bytes=="number")&&(s===void 0||typeof s=="string"&&$n(s))&&typeof e.command=="string"&&typeof e.created_at=="string"&&typeof e.expires_at=="string"&&sf(e.loss)&&(e.storage_class===void 0||Ln(e.storage_class))}function Vr(e){return!W(e)||e.version!==1||!Array.isArray(e.records)?!1:e.records.every(t=>{if(!W(t))return!1;let n=t.blob_key;return typeof t.handle=="string"&&Jt(t.handle)&&typeof t.key=="string"&&typeof t.bytes=="number"&&(t.raw_bytes===void 0||typeof t.raw_bytes=="number")&&typeof t.command=="string"&&typeof t.created_at=="string"&&typeof t.expires_at=="string"&&(t.storage_class===void 0||Ln(t.storage_class))&&(n===void 0||typeof n=="string"&&$n(n))})}function Wr(e){return W(e)&&typeof e.key=="string"&&$n(e.key)&&Yr(e.content_hash)&&e.encoding==="gzip+base64"&&typeof e.bytes=="string"&&typeof e.original_bytes=="number"&&typeof e.stored_bytes=="number"&&typeof e.created_at=="string"}function Nn(e){return W(e)&&e.status==="expired"&&typeof e.expired_at=="string"&&typeof e.command=="string"}function sf(e){return W(e)&&typeof e.level=="string"&&typeof e.bytes_elided=="number"}function Ln(e){return e==="derivable"||e==="re-executable"||e==="ephemeral"}function of(e){return W(e)&&e.kind==="git-blob"&&typeof e.command=="string"&&typeof e.cwd=="string"&&Array.isArray(e.object_ids)&&e.object_ids.every(t=>typeof t=="string"&&/^[0-9a-f]{40,64}$/.test(t))&&typeof e.working_tree_fingerprint=="string"&&typeof e.original_bytes=="number"}function af(e){return W(e)&&e.kind==="command"&&typeof e.command=="string"&&typeof e.cwd=="string"&&Array.isArray(e.argv)&&e.argv.every(t=>typeof t=="string")&&Cn(e.argv)&&typeof e.original_bytes=="number"&&Yr(e.content_hash)}function Yr(e){return typeof e=="string"&&/^[0-9a-f]{64}$/.test(e)}function W(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function cf(e){try{let t=await Kr(e,"utf8");if(t.trim()==="")return Oo();let n=JSON.parse(t);if(ff(n))return{...n,blobs:n.blobs??{}}}catch(t){if(t.code==="ENOENT"){let n=Oo();return await No(e,n),n}throw t}throw new Error("rsp elision store is unreadable")}async function uf(e){try{let t=await Kr(e);return $o(e)?e:lf(t)?df(e):e}catch(t){if(t.code==="ENOENT")return e;throw t}}function lf(e){return e.subarray(0,8).toString("ascii")==="RDBSBLK1"}function df(e){return zr(e)==="red.rdb"?ft(Do(e),"tmp","rsp-elisions.json"):`${e}.json`}function $o(e){return zr(e)==="red-skills.rdb"}async function Ao(){if(process.env.REDDB_BIN)return;let e=process.env.RED_SKILLS_CACHE_DIR??(process.env.XDG_CACHE_HOME?ft(process.env.XDG_CACHE_HOME,"red-skills","bundles"):ft(Gd(),".cache","red-skills","bundles")),t=ft(e,"reddb"),n;try{n=await Po(t)}catch{return}n.sort().reverse();for(let r of n){let s=ft(t,r,process.platform==="win32"?"red.exe":"red");if(Md(s)){process.env.REDDB_BIN=s;return}}}async function No(e,t){await jd(Do(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;await Fd(n,`${JSON.stringify(t)}
|
|
22
|
+
`,"utf8"),await Ud(n,e)}function Oo(){return{version:1,records:{},blobs:{},tombstones:{},index:{version:1,records:[]}}}function ff(e){return W(e)&&e.version===1&&W(e.records)&&Object.values(e.records).every(mt)&&(e.blobs===void 0||W(e.blobs)&&Object.values(e.blobs).every(Wr))&&W(e.tombstones)&&Object.values(e.tombstones).every(Nn)&&Vr(e.index)}function mf(e){if(!e.startsWith("file://"))throw new Error("rsp elision store requires a file:// URI");return Jd(e)}var F,Gt,qe=E(()=>{"use strict";Tr();re();F="rsp_elisions_v1",Gt=class e{constructor(t,n){this.opts=n;this.path=t}document;db;path;dirty=!1;static async open(t){if(process.env.RSP_FAIL_IF_STORE_OPEN==="1"&&!t.allowResidentOpen)throw new Error("RSP_FAIL_IF_STORE_OPEN blocked store open");let n=mf(t.uri),r=await uf(n),s=new e(r,{uri:t.uri,ttlDays:Hr(t.ttlDays,me),ephemeralTtlHours:Hr(t.ephemeralTtlHours,pe),byteBudget:Hr(t.byteBudget,ge),now:t.now??(()=>new Date)});return $o(r)?(await Ao(),s.db=await fn(`file://${r}`),await s.ensureRedDbCollections(),await s.ensureRedDbStore()):s.document=await cf(s.path),s}async close(){await this.db?.close()}redDb(){return this.db}async mint(t,n){if(this.db)return await this.mintRedDb(t,n);let r=Buffer.from(t),s=this.opts.now(),i=s.toISOString(),o=Ro(r,n),a=ye(o),c=Je(n.command),u=c==="derivable"?ko(r,n.command):null,l=c==="re-executable"?To(r,n.command):null,d=c==="derivable"&&!u||c==="re-executable"&&!l?"ephemeral":c,g=So(s,d,this.opts.ttlDays,this.opts.ephemeralTtlHours),b=pt(r),y=d==="ephemeral"?xo(r,b,i):null,f=vo(r,u,l,y);y&&!this.document.blobs[y.key]&&(this.document.blobs[y.key]=y,this.dirty=!0);let p={collection:F,handle:o,original_bytes:r.length,stored_bytes:f,command:n.command,created_at:i,expires_at:g,loss:n.loss,storage_class:d,content_hash:b,...u?{derivation_recipe:u}:l?{reexecution_recipe:l}:{blob_key:y?.key}};return delete this.document.tombstones[Ge(o)],this.document.records[a]=p,this.upsertIndex({handle:o,key:a,bytes:f,raw_bytes:r.length,command:n.command,created_at:i,expires_at:g,storage_class:d,blob_key:y?.key}),this.prune(),await this.flush(),o}async get(t){if(this.db)return await this.getRedDb(t);if(!Jt(t))return null;let n=this.tombstone(t);if(n)return n;let r=this.document.records[ye(t)];if(!mt(r))return null;if(Date.parse(r.expires_at)<=this.opts.now().getTime()){let i={status:"expired",expired_at:r.expires_at,command:r.command};return this.expireEntry({handle:r.handle,key:ye(r.handle),bytes:qr(r),raw_bytes:r.original_bytes,command:r.command,created_at:r.created_at,expires_at:r.expires_at,storage_class:Ut(r),blob_key:r.blob_key},r.expires_at),await this.flush(),i}let s=await this.readOriginal(r);return!s&&(r.derivation_recipe||r.reexecution_recipe)?{status:"expired",expired_at:r.expires_at,command:r.command}:s?{collection:F,handle:r.handle,original:s,command:r.command,created_at:r.created_at,loss:r.loss,storage_class:Ut(r)}:null}async stats(){if(this.db)return await this.statsRedDb();this.prune(),await this.flush();let n=this.readIndex().records;return{records:n.length,bytes:dt(n),oldest:n.reduce((r,s)=>r==null||s.created_at<r?s.created_at:r,null),budget:this.opts.byteBudget,storage_classes:Eo(n)}}readIndex(){return this.document.index}writeIndex(t){this.document.index=t}upsertIndex(t){let r=this.readIndex().records.filter(s=>s.handle!==t.handle);r.push(t),this.writeIndex({version:1,records:r}),this.dirty=!0}prune(){let t=this.opts.now().getTime(),n=new Date(t).toISOString(),r=this.readIndex(),s=[];for(let o of r.records)Date.parse(o.expires_at)<=t?this.expireEntry(o,o.expires_at):s.push(o);let i=dt(s);for(s.sort((o,a)=>o.created_at.localeCompare(a.created_at));i>this.opts.byteBudget&&s.length>0;){let o=s.shift();this.expireEntry(o,n),i=dt(s)}s.length<r.records.length&&this.writeIndex({version:1,records:s}),this.deleteUnreferencedLocalBlobs(s)}expireEntry(t,n){delete this.document.records[t.key],this.document.tombstones[Ge(t.handle)]={status:"expired",expired_at:n,command:t.command},this.dirty=!0}tombstone(t){let n=this.document.tombstones[Ge(t)];return Nn(n)?n:null}async readOriginal(t){if(t.original)return Buffer.from(t.original,"base64");if(t.derivation_recipe)return Yd(t.derivation_recipe);if(t.reexecution_recipe)return Qd(t.reexecution_recipe);if(t.blob_key){let n=this.db?await this.kvGet(t.blob_key):this.document.blobs[t.blob_key];return Wr(n)?zd(n):null}return null}deleteUnreferencedLocalBlobs(t){let n=new Set(t.map(r=>r.blob_key).filter(r=>typeof r=="string"));for(let r of Object.keys(this.document.blobs))n.has(r)||(delete this.document.blobs[r],this.dirty=!0)}async flush(){this.dirty&&(await No(this.path,this.document),this.dirty=!1)}kv(){if(!this.db)throw new Error("rsp RedDB store is not open");return this.db.kv(F)}async kvGet(t){let n=await this.kv().get(t);if(typeof n!="string")return n;try{return JSON.parse(n)}catch{return n}}async ensureRedDbStore(){let t=await this.readRedDbIndex();await this.writeRedDbIndex(t)}async ensureRedDbCollections(){if(!this.db)throw new Error("rsp RedDB store is not open");let t=(await this.db.list()).find(r=>r.name===F);if(!t){await this.db.query(`CREATE KV IF NOT EXISTS ${F}`);return}if(t.model==="kv")return;if(t.model!=="table")throw new Error(`cannot self-heal elision collection ${F}: unsupported model ${t.model}`);let n=await this.readLegacyElisionTableRows();await this.db.query(`DROP TABLE ${F}`),await this.db.query(`CREATE KV IF NOT EXISTS ${F}`);for(let r of n)await this.kv().put(r.key,r.value);await this.ensureMigratedRedDbIndex(n)}async readLegacyElisionTableRows(){if(!this.db)throw new Error("rsp RedDB store is not open");let t=await this.db.query(`SELECT * FROM ${F}`),n=[];for(let r of t.rows){let s=tf(r);s&&n.push(s)}return n}async ensureMigratedRedDbIndex(t){if(t.some(s=>s.key===Gr()&&Vr(An(s.value))))return;let r=t.map(s=>{let i=An(s.value);return mt(i)?{handle:i.handle,key:ye(i.handle),bytes:qr(i),raw_bytes:i.original_bytes,command:i.command,created_at:i.created_at,expires_at:i.expires_at,storage_class:Ut(i),blob_key:i.blob_key}:null}).filter(s=>s!=null);await this.writeRedDbIndex({version:1,records:r})}async mintRedDb(t,n){let r=Buffer.from(t),s=this.opts.now(),i=s.toISOString(),o=Ro(r,n),a=ye(o),c=Je(n.command),u=c==="derivable"?ko(r,n.command):null,l=c==="re-executable"?To(r,n.command):null,d=c==="derivable"&&!u||c==="re-executable"&&!l?"ephemeral":c,g=So(s,d,this.opts.ttlDays,this.opts.ephemeralTtlHours),b=pt(r),y=d==="ephemeral"?xo(r,b,i):null,f=vo(r,u,l,y);y&&!Wr(await this.kvGet(y.key))&&await this.kv().put(y.key,y);let p={collection:F,handle:o,original_bytes:r.length,stored_bytes:f,command:n.command,created_at:i,expires_at:g,loss:n.loss,storage_class:d,content_hash:b,...u?{derivation_recipe:u}:l?{reexecution_recipe:l}:{blob_key:y?.key}};await this.kv().delete(Ge(o)),await this.kv().put(a,p);let m=(await this.readRedDbIndex()).records.filter(k=>k.handle!==o);return m.push({handle:o,key:a,bytes:f,raw_bytes:r.length,command:n.command,created_at:i,expires_at:g,storage_class:d,blob_key:y?.key}),await this.pruneRedDb({version:1,records:m},!0),await this.assertRedDbMintPersisted(o,f),o}async getRedDb(t){if(!Jt(t))return null;let n=await this.kvGet(Ge(t));if(Nn(n))return n;let r=await this.kvGet(ye(t));if(!mt(r))return null;if(Date.parse(r.expires_at)<=this.opts.now().getTime()){let i={status:"expired",expired_at:r.expires_at,command:r.command};return await this.expireRedDbEntry({handle:r.handle,key:ye(r.handle),bytes:qr(r),raw_bytes:r.original_bytes,command:r.command,created_at:r.created_at,expires_at:r.expires_at,storage_class:Ut(r),blob_key:r.blob_key},r.expires_at),i}let s=await this.readOriginal(r);return!s&&(r.derivation_recipe||r.reexecution_recipe)?{status:"expired",expired_at:r.expires_at,command:r.command}:s?{collection:F,handle:r.handle,original:s,command:r.command,created_at:r.created_at,loss:r.loss,storage_class:Ut(r)}:null}async statsRedDb(){let t=await this.pruneRedDb(await this.readRedDbIndex());return{records:t.records.length,bytes:dt(t.records),oldest:t.records.reduce((n,r)=>n==null||r.created_at<n?r.created_at:n,null),budget:this.opts.byteBudget,storage_classes:Eo(t.records)}}async memory(t,n){if(!this.db)throw new Error("resident memory operations require the shared RedDB store");if(await this.ensureMemoryGraphStore(),t==="recall"){let r=Zd(n);return await this.memoryRecallRedDb(r.query,r.limit)}if(t==="ingest"){let r=ef(n);return await this.memoryIngestRedDb(r)}throw new Error(`unsupported memory action: ${t}`)}async ensureMemoryGraphStore(){if(!this.db)throw new Error("rsp RedDB store is not open");await this.db.execute("CREATE GRAPH IF NOT EXISTS memory_nodes"),await this.db.execute("CREATE GRAPH IF NOT EXISTS memory_edges")}async memoryIngestRedDb(t){if(!this.db)throw new Error("rsp RedDB store is not open");let n=await nf(t.cwd,t.maxFiles??200,t.ignore??[]),r=0;for(let s of n){let o=(await Kr(s,"utf8").catch(()=>"")).trim();if(!o)continue;let a=zr(s),c=Bn("sha256").update("resident-memory-v1\0").update(s).update("\0").update(o).digest("hex");if(await this.db.kv("memory_kv").get(`resident-node-hash:${c}`)!=null)continue;let u=Date.now(),l={title:a,content:o,source:s,confidence:"EXTRACTED",hash:c,project:"default",scope:"project",importance:1,tier:"durable",provenance_tier:"oracle",created_at:u,updated_at:u,accessed_at:u,access_count:0,provenance:{source_kind:"system",writer:"rsp-resident",confidence:"EXTRACTED",evidence:[s],created_at:u,updated_at:u}},d=await this.db.query("INSERT INTO memory_nodes NODE (label, node_type, hash, properties) VALUES ($1, $2, $3, $4) RETURNING *",a,"concept",c,l),g=Number(d.rows[0]?.red_entity_id??d.rows[0]?.rid);Number.isFinite(g)&&await this.db.kv("memory_kv").put(`resident-node-hash:${c}`,g),r+=1}return{files:n.length,nodes:r,edges:0,docs:n.length,added:r,updated:0,skipped:n.length-r,stale:0,semantic:{enabled:!1,nodes:0,edges:0,token_cost:{input:0,output:0}},durationMs:0}}async memoryRecallRedDb(t,n){if(!this.db)throw new Error("rsp RedDB store is not open");let r=await this.db.query("SELECT * FROM memory_nodes"),s=t.toLowerCase().split(/\s+/).filter(Boolean),i=r.rows.map(o=>rf(o,s)).filter(o=>o!=null).sort((o,a)=>a.score-o.score).slice(0,Math.max(1,Math.min(100,n)));return{hits:i,context_md:i.map(o=>`- memory_nodes:${o.rid} ${o.label}: ${o.excerpt}`).join(`
|
|
23
|
+
`),diagnostics:{vector:{status:"unavailable",candidates:0,contributed:0,reason:"resident-basic-recall"}}}}async readRedDbIndex(){let t=await this.kvGet(Gr());return Vr(t)?t:{version:1,records:[]}}async writeRedDbIndex(t){await this.kv().put(Gr(),t)}async pruneRedDb(t,n=!1){let r=this.opts.now().getTime(),s=new Date(r).toISOString(),i=[];for(let c of t.records)Date.parse(c.expires_at)<=r?await this.expireRedDbEntry(c,c.expires_at):i.push(c);let o=dt(i);for(i.sort((c,u)=>c.created_at.localeCompare(u.created_at));o>this.opts.byteBudget&&i.length>0;){let c=i.shift();await this.expireRedDbEntry(c,s),o=dt(i)}let a={version:1,records:i};return(n||i.length<t.records.length)&&await this.writeRedDbIndex(a),await this.deleteUnreferencedRedDbBlobs(i),a}async expireRedDbEntry(t,n){await this.kv().delete(t.key),await this.kv().put(Ge(t.handle),{status:"expired",expired_at:n,command:t.command})}async deleteUnreferencedRedDbBlobs(t){let n=new Set(t.map(s=>s.blob_key).filter(s=>typeof s=="string")),r=await this.kv().list({limit:1e4}).catch(()=>({items:[]}));for(let s of r.items)s.key.startsWith("blob:")&&!n.has(s.key)&&await this.kv().delete(s.key)}async assertRedDbMintPersisted(t,n){let r=await this.kvGet(ye(t));if(!mt(r))throw new Error(`rsp resident failed to persist elision record ${t}`);let i=(await this.readRedDbIndex()).records.find(o=>o.handle===t);if(!i||i.bytes!==n)throw new Error(`rsp resident failed to persist elision index ${t}`)}}});var Kt={};A(Kt,{RSP_ACCOUNTING_EVENTS_COLLECTION:()=>K,RSP_DECISIONS_COLLECTION:()=>we,RSP_TELEMETRY_DEGRADATIONS_COLLECTION:()=>Pe,RSP_TELEMETRY_INDEX_COLLECTION:()=>Wt,RSP_TELEMETRY_INVOCATIONS_COLLECTION:()=>Oe,RSP_TELEMETRY_SPOOL:()=>Go,appendTelemetryEvent:()=>Zr,drainTelemetrySpool:()=>es,parseTelemetryEvent:()=>ts,readAccountingLaneStats:()=>ns,readTelemetryGainsReport:()=>rs,readTelemetryStats:()=>Fn,takeTelemetrySpool:()=>Ef,telemetrySpoolPath:()=>Un});import{appendFileSync as pf,mkdirSync as gf,readFileSync as yf}from"node:fs";import{mkdir as jo,readdir as hf,readFile as wf,rename as Uo,rm as Fo,writeFile as Qr}from"node:fs/promises";import{basename as bf,dirname as jn,join as Xr}from"node:path";function Un(e){return Xr(e,Go)}async function Zr(e,t){try{let n=Un(e);gf(jn(n),{recursive:!0}),pf(n,`${JSON.stringify(Rf(t))}
|
|
24
|
+
`,{encoding:"utf8",mode:384})}catch{}}function Rf(e){return Bo(Bo(e,"raw_text","raw_bytes"),"emitted_text","emitted_bytes")}function Bo(e,t,n){let r=e[t];if(typeof r!="string")return e;let s=Buffer.byteLength(r,"utf8");if(s<=_f)return e;let i={...e};return delete i[t],he(i[n])===0&&(i[n]=s),i.estimated=!0,i}async function Ef(e){let t=Un(e),n=`${t}.${process.pid}.${Date.now()}.drain`;try{await jo(jn(t),{recursive:!0}),await Uo(t,n)}catch(r){return r.code==="ENOENT"?[]:[]}try{return await Qr(t,"",{flag:"wx"}).catch(()=>{}),(await Jo(n)).split(/\r?\n/).filter(s=>s.trim()!=="")}finally{await Fo(n,{force:!0})}}async function es(e,t){let n=Un(e);await jo(jn(n),{recursive:!0}).catch(()=>{});for(let s of await Sf(n))await Co(n,s,t);let r=`${n}.${process.pid}.${Date.now()}.drain`;try{await Uo(n,r)}catch{return}await Qr(n,"",{flag:"wx"}).catch(()=>{}),await Co(n,r,t)}async function Sf(e){let t=jn(e),n=`${bf(e)}.`;return(await hf(t).catch(()=>[])).filter(s=>s.startsWith(n)&&s.endsWith(".drain")).filter(s=>{let i=Number(s.slice(n.length).split(".")[0]);return!(Number.isInteger(i)&&i!==process.pid&&kf(i))}).sort().map(s=>Xr(t,s))}function kf(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}async function Co(e,t,n){let r=[];try{let i=(await Jo(t)).split(/\r?\n/).filter(o=>o.trim()!=="");for(let o of i){try{if(await n(o))continue}catch{}r.push(o)}}finally{if(r.length>0){let s=Tf(e);await Qr(e,`${r.join(`
|
|
25
|
+
`)}
|
|
26
|
+
${s}`,"utf8")}await Fo(t,{force:!0})}}function Tf(e){try{return yf(e,"utf8")}catch{return""}}async function Jo(e){let t="";for(let n=0;n<5;n++){let r=await wf(e,"utf8").catch(()=>"");if(r===t)return r;t=r,await new Promise(s=>setTimeout(s,2))}return t}function ts(e){try{let t=JSON.parse(e);return!Ho(t)||t.collection!==K&&t.collection!==we&&t.collection!==Oe&&t.collection!==Pe?null:t}catch{return null}}async function Fn(e,t,n=new Date){let r=Number.isFinite(t)&&t>0?t:30,s=n.getTime()-r*24*60*60*1e3,i=await qo(e,s),o=(await Ht(e,we)).filter(_=>ht(_)>=s),a=i.filter(_=>D(_.event_type)!=="show"&&D(_.degradation_reason)===""),c=i.filter(_=>D(_.event_type)==="show"),u=i.filter(_=>D(_.degradation_reason)!==""),l=0,d=0,g=0,b=0,y=!1,f=new Map,p=new Map,S=[],m=0,k=0,R=0;for(let _ of a){_.elided===!0&&l++;let P=he(_.raw_bytes),h=he(_.emitted_bytes),T=Math.max(0,P-h),Xe=Mn(_,"raw"),Ze=Mn(_,"emitted"),Y=Math.max(0,Xe.tokens-Ze.tokens);y||=(_.estimated===!0||Xe.estimated||Ze.estimated)&&Y>0,d+=P,g+=h,b+=Y;let J=He(_).slice(0,10);J&&f.set(J,(f.get(J)??0)+Y);let Le=D(_.command)||"unknown",be=p.get(Le)??{command:Le,invocations:0,bytes_saved:0,tokens_saved:0};be.invocations++,be.bytes_saved+=T,be.tokens_saved+=Y,p.set(Le,be);let et=Vt(_.wrapper_ms);et!=null&&S.push(et),m+=he(_.store_open_count);let tt=Vt(_.store_elapsed_ms);tt!=null&&(k+=tt,R++)}let v=new Map,$=null;for(let _ of u){let P=D(_.degradation_reason)||D(_.reason)||"unknown";v.set(P,(v.get(P)??0)+1);let h=He(_);(!$||h>$.timestamp)&&($={timestamp:h,reason:P,command:D(_.command)||"unknown"})}let j=a.length+u.length,z=c.filter(_=>_.hit===!0).length,I=Br(b,y),on=vf(o);return{window_days:r,empty:i.length===0,savings:{invocations:a.length,elided:l,raw_bytes:d,emitted_bytes:g,bytes_saved:Math.max(0,d-g),tokens_saved:b,tokens_saved_estimated:I.tokens_saved_estimated,token_estimate_range_pct:I.token_estimate_range_pct,tokens_saved_low:I.tokens_saved_low,tokens_saved_high:I.tokens_saved_high,dollars_saved_estimate_usd:I.dollars_saved_estimate_usd,dollars_saved_low_usd:I.dollars_saved_low_usd,dollars_saved_high_usd:I.dollars_saved_high_usd,pricing_model_family:I.pricing_model_family,pricing_input_usd_per_million_tokens:I.pricing_input_usd_per_million_tokens,pricing_note:I.pricing_note,daily_tokens_saved:[...f.entries()].sort(([_],[P])=>_.localeCompare(P)).map(([_,P])=>({date:_,tokens_saved:P})),top_commands:[...p.values()].sort((_,P)=>P.bytes_saved-_.bytes_saved||P.tokens_saved-_.tokens_saved||_.command.localeCompare(P.command))},health:{degradations:u.length,degradation_rate:j===0?0:u.length/j,show_total:c.length,show_hits:z,show_misses:Math.max(0,c.length-z),show_hit_rate:c.length===0?0:xe(z/c.length),by_reason:[...v.entries()].sort((_,P)=>P[1]-_[1]||_[0].localeCompare(P[0])).map(([_,P])=>({reason:_,count:P})),most_recent:$},latency:{wrapper_ms_p50:yt(S,.5),wrapper_ms_p95:yt(S,.95),store_open_count_sum:m,store_elapsed_ms_sum:xe(k),store_elapsed_ms_avg:R===0?null:xe(k/R)},decisions:on}}function vf(e){let t=0,n=0,r=0,s=new Map;for(let i of e){let o=D(i.decision);if(o==="contributed"?t++:o==="failed-open"?r++:n++,o!=="contributed"){let a=D(i.reason)||"unknown";s.set(a,(s.get(a)??0)+1)}}return{seen:e.length,contributed:t,passed:n,failed_open:r,contribution_rate:e.length===0?0:xe(t/e.length),top_pass_reasons:[...s.entries()].sort((i,o)=>o[1]-i[1]||i[0].localeCompare(o[0])).map(([i,o])=>({reason:i,count:o}))}}async function ns(e,t,n=new Date){let s=(await Ht(e,K)).filter(i=>ht(i)<=n.getTime()||He(i)==="");return{records:s.length,bytes:s.reduce((i,o)=>i+Buffer.byteLength(JSON.stringify(o),"utf8"),0),oldest:s.reduce((i,o)=>{let a=He(o);return a&&(i==null||a<i)?a:i},null),budget:t,storage_classes:xf(s)}}async function rs(e,t,n=new Date){let r=Number.isFinite(t)&&t>0?t:28,s=n.toISOString(),i=new Date(n.getTime()-r*24*60*60*1e3).toISOString(),o=Date.parse(i),a=await qo(e,o),c=a.filter(h=>D(h.event_type)!=="show"&&D(h.degradation_reason)===""),u=a.filter(h=>D(h.degradation_reason)!==""),l=[...c,...u].map(ht).filter(h=>Number.isFinite(h)&&h>0),d=l.length===0?null:Math.min(...l),g=d==null?0:Math.max(1,Math.min(r,Math.ceil((n.getTime()-d)/Cf()))),b=[],y=new Map,f=new Map,p=new Map,S=new Map,m=new Map,k=new Map,R=0,v=!1,$=0,j=null,z=0,I=0;for(let h of c){let T=He(h),Xe=T.slice(0,10),Ze=T.slice(0,16),Y=Mo(D(h.command)),J=Math.max(0,Mn(h,"raw").tokens-Mn(h,"emitted").tokens);R+=J,v||=h.estimated===!0&&J>0;let Le=Math.max(0,he(h.raw_bytes)-he(h.emitted_bytes)),be=Vt(h.wrapper_ms);if(be!=null){b.push(be);let ri=y.get(Y)??[];ri.push(be),y.set(Y,ri)}Xe&&f.set(Xe,(f.get(Xe)??0)+1),Ze&&p.set(Ze,(p.get(Ze)??0)+1);let et=If(T);et&&S.set(et,(S.get(et)??0)+1);let tt=Nf(T);tt&&m.set(tt,(m.get(tt)??0)+J);let an=k.get(Y)??{command_family:Y,invocations:0,tokens_saved:0,bytes_saved:0};an.invocations++,an.tokens_saved+=J,an.bytes_saved+=Le,k.set(Y,an),h.elided===!0&&$++,(h.store_open_count!=null||h.store_elapsed_ms!=null)&&(z++,he(h.store_open_count)>0&&I++),J>0&&(!j||J>j.tokens_saved||J===j.tokens_saved&&Le>j.bytes_saved)&&(j={timestamp:T,command_family:Y,tokens_saved:J,bytes_saved:Le})}let on=u.map(h=>({timestamp:He(h),command_family:Mo(D(h.command)),reason:D(h.degradation_reason)||D(h.reason)||"unknown"})).sort((h,T)=>h.timestamp.localeCompare(T.timestamp)),_=new Map;for(let h of on)_.set(h.reason,(_.get(h.reason)??0)+1);let P=[...p.entries()].sort((h,T)=>T[1]-h[1]||h[0].localeCompare(T[0]))[0];return{schema_version:"red.rsp.gains.v1",window:{requested_days:r,data_days:g,since:i,until:s,label:`window: ${r}d, data: ${g}d`,empty:c.length===0&&u.length===0,invocations:c.length,degradations:u.length},latency:{global:Lo(b),by_command_family:[...y.entries()].sort((h,T)=>T[1].length-h[1].length||h[0].localeCompare(T[0])).map(([h,T])=>({command_family:h,count:T.length,...Lo(T)}))},throughput:{requests_per_day:[...f.entries()].sort(([h],[T])=>h.localeCompare(T)).map(([h,T])=>({date:h,requests:T})),active_minute_avg:p.size===0?null:xe([...p.values()].reduce((h,T)=>h+T,0)/p.size),peak_minute:P?{minute:P[0],requests:P[1]}:null,hour_weekday_heatmap:$f(S)},savings:{tokens:Br(R,v),weekly_tokens_saved:Bf(m),elision_rate:c.length===0?0:xe($/c.length),top_commands_by_tokens_saved:[...k.values()].sort((h,T)=>T.tokens_saved-h.tokens_saved||T.bytes_saved-h.bytes_saved||h.command_family.localeCompare(T.command_family)).slice(0,10),top_commands_by_invocation_count:[...k.values()].sort((h,T)=>T.invocations-h.invocations||T.tokens_saved-h.tokens_saved||h.command_family.localeCompare(T.command_family)).slice(0,10),single_biggest_elision:j},health:{degradation_timeline:on,degradations_by_reason:[..._.entries()].sort((h,T)=>T[1]-h[1]||h[0].localeCompare(T[0])).map(([h,T])=>({reason:h,count:T})),cold_boots:z===0?null:I,warm_hits:z===0?null:Math.max(0,z-I)}}}async function qo(e,t){let n=(await Ht(e,K)).filter(i=>ht(i)>=t);if(n.length>0)return n;let r=(await Ht(e,Oe)).filter(i=>ht(i)>=t).map(i=>({...i,event_type:"invocation"})),s=(await Ht(e,Pe)).filter(i=>ht(i)>=t).map(i=>({...i,event_type:"invocation",degradation_reason:D(i.reason)||"unknown"}));return[...r,...s]}function Mn(e,t){let n=Vt(e[t==="raw"?"tokens_raw":"tokens_emitted"]);if(n!=null)return{tokens:n,estimated:!1};let r=he(e[t==="raw"?"raw_bytes":"emitted_bytes"]);return{tokens:Math.ceil(r/4),estimated:r>0}}function xf(e){let t=Pf();for(let n of e){if(D(n.event_type)==="show"||D(n.degradation_reason)!==""||n.elided!==!0)continue;let r=Of(n.storage_class)??Je(D(n.command));t[r].records+=1;let s=he(n.raw_bytes);t[r].bytes+=s,t[r].raw_bytes+=s}return t}function Of(e){return e==="derivable"||e==="re-executable"||e==="ephemeral"?e:null}function Pf(){return{derivable:{records:0,bytes:0,raw_bytes:0},"re-executable":{records:0,bytes:0,raw_bytes:0},ephemeral:{records:0,bytes:0,raw_bytes:0}}}async function Ht(e,t){return(await e.kv(t).list({limit:1e4}).catch(r=>{if(r instanceof Error&&/\bnot found\b/i.test(r.message))return{items:[]};throw r})).items.map(r=>Df(r.value)).filter(r=>Ho(r))}function Df(e){if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}}function ht(e){let t=Date.parse(He(e));return Number.isFinite(t)?t:0}function He(e){return D(e.created_at)||D(e.ts)||""}function D(e){return typeof e=="string"?e:""}function he(e){return Vt(e)??0}function Vt(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function yt(e,t){if(e.length===0)return null;let n=[...e].sort((s,i)=>s-i),r=Math.min(n.length-1,Math.max(0,Math.ceil(n.length*t)-1));return xe(n[r])}function Lo(e){return{wrapper_ms_p50:yt(e,.5),wrapper_ms_p90:yt(e,.9),wrapper_ms_p95:yt(e,.95),wrapper_ms_p99:yt(e,.99)}}function xe(e){return Math.round(e*100)/100}function Mo(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?"unknown":t[0]==="git"&&t[1]?`git ${t[1]}`:t[0]==="gh"&&t[1]&&t[2]?`gh ${t[1]} ${t[2]}`:t[0]==="gh"&&t[1]?`gh ${t[1]}`:t[0]==="cargo"&&t[1]?`cargo ${t[1]}`:t[0]==="vitest"?"vitest":t[0]}function If(e){let t=new Date(e);return Number.isFinite(t.getTime())?`${Af(t.getUTCDay())}:${t.getUTCHours()}`:null}function $f(e){let t=[];for(let n of["sun","mon","tue","wed","thu","fri","sat"])for(let r=0;r<24;r++){let s=e.get(`${n}:${r}`)??0;s>0&&t.push({weekday:n,hour:r,requests:s})}return t}function Af(e){return["sun","mon","tue","wed","thu","fri","sat"][e]??"unknown"}function Nf(e){let t=new Date(e);if(!Number.isFinite(t.getTime()))return null;let n=t.getUTCDay(),r=n===0?-6:1-n;return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()+r)).toISOString().slice(0,10)}function Bf(e){let t=null;return[...e.entries()].sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>{let s=t==null||t===0?null:xe((r-t)/t*100);return t=r,{week_start:n,tokens_saved:r,wow_delta_pct:s}})}function Cf(){return 24*60*60*1e3}function Ho(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var Go,K,we,Oe,Pe,Wt,_f,Ve=E(()=>{"use strict";qe();Cr();Go=Xr(".red","tmp","rsp-telemetry.spool.jsonl"),K="rsp_accounting_events_v1",we="rsp_decisions_v1",Oe="rsp_telemetry_invocations_v1",Pe="rsp_telemetry_degradations_v1",Wt="rsp_telemetry_index_v1",_f=64*1024});var ds={};A(ds,{RSP_WRAPPER_CAPABILITIES:()=>Qt,formatCodexHookDecision:()=>Yo,formatHookDecision:()=>zo,hookDecisionFromClaudePreExecJson:()=>Ff,hookDecisionFromCodexPreExecJson:()=>Gf,rewriteCommand:()=>Wo,rewriteTableFromCapabilities:()=>Vo,runClaudePreExecHook:()=>Jf,runCodexPreExecHook:()=>qf});import{readFileSync as Gn}from"node:fs";import{existsSync as Lf}from"node:fs";import{fileURLToPath as Mf}from"node:url";function Vo(e){let t=new Map;for(let n of e)t.set(Yt(n.command),["rsp",...n.wrapper]);return t}function Wo(e){let t=Qf(e);if(!t||t.length>0&&ra(t[0]))return is(e);let n=Uf(t);if(n)return n;let r=jf.get(Yt(t));if(!r)return is(e);let s=Qt.find(i=>Yt(i.command)===Yt(t));return{kind:"rewrite",command:r.join(" "),capabilityId:s?.id??Yt(t)}}function Uf(e){let t=e[0];return t==="cat"&&e.length===2&&ss(e[1])?{kind:"rewrite",command:`rsp cat ${e[1]}`,capabilityId:"cat:file"}:(t==="head"||t==="tail")&&e.length===2&&ss(e[1])?{kind:"rewrite",command:`rsp cat --${t} 10 ${e[1]}`,capabilityId:`cat:${t}`}:(t==="head"||t==="tail")&&e.length===4&&e[1]==="-n"&&/^[1-9][0-9]*$/.test(e[2])&&ss(e[3])?{kind:"rewrite",command:`rsp cat --${t} ${e[2]} ${e[3]}`,capabilityId:`cat:${t}`}:null}function ss(e){return!!e&&!e.startsWith("-")&&!/[ \t]/.test(e)}async function Ff(e,t){return await Ko(e,t)}async function Gf(e,t){return await Ko(e,t)}async function Ko(e,t){return(await as(e,t,"pre-exec")).decision}async function as(e,t,n){let r=sa(e);if(!r.ok){let u={kind:"passthrough",reason:r.reason};return{decision:u,telemetryRoot:t.cwd,event:zt({hook:n,command:"",decision:u,reason:r.reason})}}let s=r.payload,i=Q(s,["cwd"])||Q(s,["tool_input","cwd"])||t.cwd;if(!await(t.isEnabled??Hf)(i)){let u={kind:"passthrough",reason:"disabled"};return{decision:u,telemetryRoot:i,event:zt({hook:n,command:os(s),decision:u,reason:"disabled"})}}let a=os(s);if(!a){let u={kind:"passthrough",reason:"missing-command"};return{decision:u,telemetryRoot:i,event:zt({hook:n,command:a,decision:u,reason:"missing-command"})}}let c=(t.rewrite??Wo)(a);if(c.kind!=="rewrite"){let u=c.reason?c:{...c,reason:"unsupported-command"};return{decision:u,telemetryRoot:i,event:zt({hook:n,command:a,decision:u,reason:u.reason??"unsupported-command"})}}return await Wf(i,t.wakeResident??Vf),{decision:c,telemetryRoot:i,event:zt({hook:n,command:a,decision:c,reason:"matched-capability"})}}function zo(e){return e.kind==="rewrite"?Qo(e.command):{stdout:"",status:0}}function Yo(e){return e.kind==="rewrite"?Qo(e.command):{stdout:"",status:0}}function Qo(e){return{stdout:`${JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow",updatedInput:{command:e}}})}
|
|
27
|
+
`,status:0}}async function Jf(e){let t="";try{t=e?Gn(e,"utf8"):Gn(0,"utf8");let n=await as(t,{cwd:process.cwd()},"claude-pre-exec");Jn(n.telemetryRoot,n.event);let r=n.decision;Zo("claude-pre-exec",r);let s=zo(r);return s.stdout&&process.stdout.write(s.stdout),s.status}catch(n){return Jn(process.cwd(),Xo("claude-pre-exec",t,n)),ea("claude-pre-exec",n),0}}async function qf(e){let t="";try{t=e?Gn(e,"utf8"):Gn(0,"utf8");let n=await as(t,{cwd:process.cwd()},"codex-pre-exec");Jn(n.telemetryRoot,n.event);let r=n.decision;Zo("codex-pre-exec",r);let s=Yo(r);return s.stdout&&process.stdout.write(s.stdout),s.status}catch(n){return Jn(process.cwd(),Xo("codex-pre-exec",t,n)),ea("codex-pre-exec",n),0}}function Jn(e,t){Zr(e,t).catch(()=>{})}function zt(e){let t=e.command.trim(),n=e.decision.kind==="rewrite"?e.decision.capabilityId:void 0;return{collection:we,event_type:"decision",ts:new Date().toISOString(),hook:e.hook,command:t||"unknown",command_family:na(t),decision:n?"contributed":"passed",reason:e.reason,capability_id:n}}function Xo(e,t,n){let r=sa(t),s=r.ok?os(r.payload):"";return{collection:we,event_type:"decision",ts:new Date().toISOString(),hook:e,command:s||"unknown",command_family:na(s),decision:"failed-open",reason:"hook-exception",error:cs(n)}}function Hf(e){return ve(e,process.env).enabled}async function Vf(e){let t=ve(e,process.env);if(!t.enabled||!Yf(t))return;let n=Te(e);await kn(n,zf(t))}async function Wf(e,t){try{await Promise.resolve(t(e))}catch(n){Kf(n)}}function Zo(e,t){if(process.env.RSP_DEBUG==="1"){if(t.kind==="rewrite"){process.stderr.write(`rsp hook ${e}: rewrite ${t.capabilityId}
|
|
28
|
+
`);return}process.stderr.write(`rsp hook ${e}: passthrough ${t.reason??"unsupported-command"}
|
|
29
|
+
`)}}function ea(e,t){process.env.RSP_DEBUG==="1"&&process.stderr.write(`rsp hook ${e}: exception ${cs(t)}
|
|
30
|
+
`)}function Kf(e){process.env.RSP_DEBUG==="1"&&process.stderr.write(`rsp hook pre-exec: resident-wake-failed ${cs(e)}
|
|
31
|
+
`)}function cs(e){return e instanceof Error?e.name||"Error":typeof e}function zf(e){return{storeUri:e.storeUri,ttlDays:e.ttlDays,ephemeralTtlHours:e.ephemeralTtlHours,byteBudget:e.byteBudget,telemetryTtlDays:e.telemetryTtlDays,telemetryByteBudget:e.telemetryByteBudget,telemetryDrainIntervalMs:e.telemetryDrainIntervalMs,telemetryDrainTimeoutMs:e.telemetryDrainTimeoutMs,idleMs:e.idleMs}}function Yf(e){if(!e.storeUri.startsWith("file://"))return!0;try{return Lf(Mf(e.storeUri))}catch{return!1}}function os(e){return Q(e,["tool_input","command"])||Q(e,["tool_input","cmd"])||Q(e,["tool_input","args","command"])||Q(e,["input","command"])||Q(e,["input","cmd"])||Q(e,["arguments","command"])||Q(e,["arguments","cmd"])||Q(e,["command"])||Q(e,["cmd"])}function Qf(e){let t=e.trim();if(!t||/[\n\r|&;()$<>`'"]/.test(t))return null;let n=t.split(/[ \t]+/).filter(Boolean);return n.length===0||n.some(r=>r.includes("=")&&ra(r))?null:n}function is(e){let t=e.trim();return Xf(t)?{kind:"rewrite",command:`rsp exec -- ${im(t)}`,capabilityId:"exec:compound"}:{kind:"passthrough"}}function Xf(e){return!(!e||!em(e)||!nm(e)||tm(e)||/<<-?/.test(e)||/\$\(|`/.test(e)||/[<>]/.test(e)||rm(e,"rsp")||ta(e,Zf)||sm(e))}function em(e){return/&&|[;|]/.test(e)}function tm(e){for(let t=0;t<e.length;t+=1)if(e[t]==="&"&&!(e[t-1]==="&"||e[t+1]==="&"))return!0;return!1}function nm(e){return us(e).some(t=>{let n=ls(t);return n.length===0?!1:n[0]==="git"?["log","diff","show","blame"].includes(n[1]??""):n[0]==="gh"?n.some((r,s)=>s>0&&(r==="list"||r==="view")):n[0]==="vitest"?!0:n[0]==="cargo"&&n[1]==="test"})}function ta(e,t){return us(e).some(n=>{let r=ls(n)[0];return r?t.has(r):!1})}function rm(e,t){return ta(e,new Set([t]))}function sm(e){return us(e).some(t=>{let n=ls(t);return n[0]==="grep"&&n.includes("-q")})}function us(e){return e.split(/&&|[;|]/).map(t=>t.trim()).filter(Boolean)}function ls(e){return e.split(/[ \t]+/).filter(Boolean).map(t=>t.replace(/^env$/,""))}function im(e){return`'${e.replace(/'/g,"'\\''")}'`}function na(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?"unknown":t[0]==="git"&&t[1]?`git ${t[1]}`:t[0]==="gh"&&t[1]&&t[2]?`gh ${t[1]} ${t[2]}`:t[0]==="gh"&&t[1]?`gh ${t[1]}`:t[0]==="cargo"&&t[1]?`cargo ${t[1]}`:t[0]==="vitest"?"vitest":t[0]}function ra(e){return/^[A-Za-z_][A-Za-z0-9_]*=.*/.test(e)}function Yt(e){return e.join("\0")}function sa(e){try{let t=JSON.parse(e);return ia(t)?{ok:!0,payload:t}:{ok:!1,reason:"payload-not-object"}}catch{return{ok:!1,reason:"payload-parse-error"}}}function Q(e,t){let n=e;for(let r of t){if(!ia(n))return"";n=n[r]}return typeof n=="string"?n:""}function ia(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var Qt,jf,Zf,qn=E(()=>{"use strict";re();Fe();Ve();Qt=[{id:"git:status",command:["git","status"],wrapper:["git","status"]},{id:"git:log",command:["git","log"],wrapper:["git","log"]},{id:"git:diff",command:["git","diff"],wrapper:["git","diff"]},{id:"git:commit",command:["git","commit"],wrapper:["git","commit"]},{id:"git:push",command:["git","push"],wrapper:["git","push"]},{id:"git:blame",command:["git","blame"],wrapper:["git","blame"]},{id:"git:branch:av",command:["git","branch","-av"],wrapper:["git","branch","-av"]},{id:"git:show",command:["git","show"],wrapper:["git","show"]},{id:"gh:pr:list",command:["gh","pr","list"],wrapper:["gh","pr","list"]},{id:"gh:pr:view",command:["gh","pr","view"],wrapper:["gh","pr","view"]},{id:"gh:issue:list",command:["gh","issue","list"],wrapper:["gh","issue","list"]},{id:"gh:issue:view",command:["gh","issue","view"],wrapper:["gh","issue","view"]},{id:"gh:run:list",command:["gh","run","list"],wrapper:["gh","run","list"]},{id:"gh:run:view",command:["gh","run","view"],wrapper:["gh","run","view"]},{id:"vitest",command:["vitest"],wrapper:["vitest"]},{id:"vitest:run",command:["vitest","run"],wrapper:["vitest","run"]},{id:"cargo:test",command:["cargo","test"],wrapper:["cargo","test"]}],jf=Vo(Qt);Zf=new Set(["bash","fish","htop","less","more","nano","node","python","python3","ssh","top","vi","vim","zsh"])});var ms={};A(ms,{NORMALIZATION_ALLOWLIST:()=>pa,NORMALIZE_ANSI:()=>ca,NORMALIZE_BLANK_LINES:()=>da,NORMALIZE_CR_PROGRESS:()=>ua,NORMALIZE_JSON_TOON:()=>ma,NORMALIZE_TRAILING_WHITESPACE:()=>la,formatCodexNormalizeDecision:()=>ba,formatNormalizeDecision:()=>wa,hookDecisionFromClaudePostExecJson:()=>ga,hookDecisionFromCodexPostExecJson:()=>ya,normalizeOutput:()=>wt,renderGenericJsonLane:()=>Xt,runClaudePostExecHook:()=>cm,runCodexPostExecHook:()=>um,transcodeJsonToToon:()=>fa});import{readFileSync as Hn}from"node:fs";function fa(e,t){let n=t?.encode??O,r=t?.decode??Ar,s=e.trimEnd();if(!s)return e;let i;try{i=JSON.parse(s)}catch{return e}let o;try{o=n(i)}catch{return e}let a;try{a=r(o)}catch{return e}return fs(i,a)?o:e}async function Xt(e,t={}){let n=mm(e);if(!n)return{output:e,detected:!1,lossy:!1};let r=n.value;if(!Array.isArray(r))return{output:O(r),detected:!0,lossy:!1};let s=r.length,i=aa(t.minTokens,om),o=aa(t.maxItems,am);if(!(s>o&&wm(e)>=i))return{output:O(r),detected:!0,lossy:!1,totalItems:s,keptItems:s};let c=pm(r,o),u={items:c},l=`items: ${c.length} of ${s} kept`,d;t.level&&t.level!=="lossless"&&(d=await t.store?.mint(Buffer.from(e),{command:t.command??"rsp json",loss:{level:t.level,bytes_elided:Buffer.byteLength(e)}}));let g=d?`original: rsp show ${d}`:`original: unavailable - re-run: ${t.command??"command"}`;return{output:[l,g,O(u)].filter(Boolean).join(`
|
|
32
|
+
`),detected:!0,lossy:!0,totalItems:s,keptItems:c.length,handle:d}}function wt(e){let t=e;for(let n of pa)t=n.apply(t);return t}async function ga(e,t){return await ha(e,t)}async function ya(e,t){return await ha(e,t)}async function ha(e,t){let n=fm(e),r=bm(n,["cwd"])||t.cwd;if(!await(t.isEnabled??dm)(r))return{kind:"passthrough",reason:"disabled"};let i=_m(n,"tool_response");if(!i)return{kind:"passthrough",reason:"missing-output"};if(typeof i.output!="string")return{kind:"passthrough",reason:"missing-output"};let o=i.output,c=(t.normalize??wt)(o);return c===o?{kind:"passthrough",reason:"no-change"}:{kind:"normalized",output:c}}function wa(e){return e.kind==="normalized"?{stdout:JSON.stringify({tool_response:{output:e.output}}),status:0}:{stdout:"",status:0}}function ba(e){return{stdout:"",status:0}}async function cm(e){let t=e?Hn(e,"utf8"):Hn(0,"utf8"),n=await ga(t,{cwd:process.cwd()}),r=wa(n);return r.stdout&&process.stdout.write(r.stdout),r.status}async function um(e){let t=e?Hn(e,"utf8"):Hn(0,"utf8"),n=await ya(t,{cwd:process.cwd()}),r=ba(n);return r.stdout&&process.stdout.write(r.stdout),r.status}function lm(e){let t="",n=0;for(;n<e.length;){let r=e.charCodeAt(n);if(r===27){let s=e.charCodeAt(n+1);if(s===93){for(n+=2;n<e.length;){let i=e.charCodeAt(n);if(i===7){n++;break}if(i===27&&e.charCodeAt(n+1)===92){n+=2;break}n++}continue}if(s===91){for(n+=2;n<e.length&&oa(e.charCodeAt(n));)n++;n<e.length&&n++;continue}n+=s>=32?2:1;continue}if(r===155){for(n++;n<e.length&&oa(e.charCodeAt(n));)n++;n<e.length&&n++;continue}t+=e[n++]}return t}function oa(e){return e>=32&&e<=63}function dm(e){return ve(e,process.env).enabled}function fm(e){try{let t=JSON.parse(e);return De(t)?t:{}}catch{return{}}}function mm(e){let t=e.trim();if(!t)return null;try{let r=JSON.parse(t);return De(r)||Array.isArray(r)?{value:r}:null}catch{}let n=[];for(let r of e.split(/\r?\n/))if(r.trim())try{n.push(JSON.parse(r))}catch{return null}return n.length>0?{value:n}:null}function pm(e,t){if(e.length<=t)return[...e];let n=new Set,r=Math.max(1,Math.floor(t*.2));for(let i=0;i<r;i++)n.add(i),n.add(e.length-1-i);for(let i=0;i<e.length;i++)gm(e[i])&&n.add(i);for(let i of ym(e))n.add(i);for(let i of hm(e))n.add(i);let s=Math.max(1,Math.floor(e.length/Math.max(1,t-n.size)));for(let i=0;n.size<t&&i<s;i++)for(let o=i;n.size<t&&o<e.length;o+=s)n.add(o);return[...n].sort((i,o)=>i-o).slice(0,t).map(i=>e[i])}function gm(e){if(!De(e))return!1;let t=e.level;if(typeof t=="string"&&t.toLowerCase()==="error"||Object.prototype.hasOwnProperty.call(e,"error")&&e.error)return!0;let n=e.status;return typeof n=="number"&&n>=400}function ym(e){let t=new Map;e.forEach((r,s)=>{if(De(r))for(let[i,o]of Object.entries(r)){if(typeof o!="number"||!Number.isFinite(o))continue;let a=t.get(i)??[];a.push({index:s,value:o}),t.set(i,a)}});let n=new Set;for(let r of t.values()){if(r.length<3)continue;let s=r.reduce((a,c)=>a+c.value,0)/r.length,i=r.reduce((a,c)=>a+Math.pow(c.value-s,2),0)/r.length,o=Math.sqrt(i);if(o!==0)for(let a of r)Math.abs(a.value-s)>o*2&&n.add(a.index)}return[...n]}function hm(e){let t=new Set;for(let n=1;n<e.length;n++){let r=e[n-1],s=e[n];if(!(!De(r)||!De(s)))for(let[i,o]of Object.entries(s)){if(typeof o!="number"||!Number.isFinite(o))continue;let a=r[i];typeof a!="number"||!Number.isFinite(a)||(a===0?Math.abs(o)>10:Math.abs((o-a)/a)>=2)&&t.add(n)}}return[...t]}function wm(e){return Math.ceil(e.length/4)}function aa(e,t){return e==null?t:Number.isFinite(e)&&e>0?Math.floor(e):t}function bm(e,t){let n=e;for(let r of t){if(!De(n))return"";n=n[r]}return typeof n=="string"?n:""}function _m(e,t){let n=e[t];return De(n)?n:null}function De(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function fs(e,t){if(e===t)return!0;if(e===null||t===null||typeof e!=typeof t||typeof e!="object"||Array.isArray(e)!==Array.isArray(t))return!1;if(Array.isArray(e)){let o=t;return e.length!==o.length?!1:e.every((a,c)=>fs(a,o[c]))}let n=e,r=t,s=Object.keys(n),i=Object.keys(r);return s.length!==i.length?!1:s.every(o=>Object.prototype.hasOwnProperty.call(r,o)&&fs(n[o],r[o]))}var ca,ua,la,da,ma,om,am,pa,Zt=E(()=>{"use strict";Se();re();ca={id:"ansi",apply:lm},ua={id:"cr-progress",apply:e=>e.split(`
|
|
33
|
+
`).map(t=>{let n=t.endsWith("\r")?t.slice(0,-1):t,r=n.lastIndexOf("\r");return r>=0?n.slice(r+1):n}).join(`
|
|
34
|
+
`)},la={id:"trailing-whitespace",apply:e=>e.split(`
|
|
35
|
+
`).map(t=>t.replace(/[ \t]+$/,"")).join(`
|
|
36
|
+
`)},da={id:"blank-lines",apply:e=>e.replace(/\n{3,}/g,`
|
|
37
|
+
|
|
38
|
+
`)};ma={id:"json-to-toon",apply:e=>fa(e)},om=200,am=15;pa=[ca,ua,la,da,ma]});var xa={};A(xa,{REPO_STORE_PATH:()=>ps,mergeRspBlock:()=>ka,provisionRspRepoStore:()=>Om});import{constants as Rm}from"node:fs";import{access as Em,copyFile as Sm,mkdir as _a,readFile as km,writeFile as Ra}from"node:fs/promises";import{dirname as Tm,join as Vn,resolve as vm}from"node:path";async function Om(e,t={}){let n=vm(e),r=Vn(n,".red"),s=Vn(r,"config.yaml"),i=Vn(n,ps);await _a(r,{recursive:!0}),await _a(Tm(i),{recursive:!0});let o="";try{o=await km(s,"utf8")}catch(g){if(g.code!=="ENOENT")throw g}let a=ka(o,{enabled:!0,ttlDays:t.ttlDays??me,ephemeralTtlHours:t.ephemeralTtlHours??pe,byteBudget:t.byteBudget??ge,heavyGitByteThreshold:t.heavyGitByteThreshold??fe}),c=a!==o;c&&await Ra(s,a,"utf8");let u=!await Sa(i),l=!1;if(u){let g=Vn(n,xm);if(await Sa(g))await Sm(g,i),l=!0;else{let{RspElisionStore:b}=await Promise.resolve().then(()=>(qe(),qt)),y=process.env.REDDB_BIN;try{await(await b.open({uri:`file://${i}`,ttlDays:t.ttlDays??me,ephemeralTtlHours:t.ephemeralTtlHours??pe,byteBudget:t.byteBudget??ge,allowResidentOpen:!0})).close()}finally{y===void 0?delete process.env.REDDB_BIN:process.env.REDDB_BIN=y}}}let d=Pm(a,ps);return d!==a&&await Ra(s,d,"utf8"),{configPath:s,storePath:i,configChanged:c||d!==a,storeCreated:u,memoryStoreMigrated:l}}function ka(e,t){let n=["rsp:",` enabled: ${t.enabled?"true":"false"}`,` ttlDays: ${Wn(t.ttlDays,me)}`,` ephemeralTtlHours: ${Wn(t.ephemeralTtlHours,pe)}`,` byteBudget: ${Wn(t.byteBudget,ge)}`,` heavyGitByteThreshold: ${Wn(t.heavyGitByteThreshold,fe)}`],r=e===""?[]:e.replace(/\n+$/,"").split(`
|
|
39
|
+
`),s=Ta(r,"rsp");if(s===-1){let a=[...r];return a.length>0&&a[a.length-1].trim()!==""&&a.push(""),a.push(...n),`${a.join(`
|
|
36
40
|
`)}
|
|
37
|
-
`}let
|
|
41
|
+
`}let i=gs(r,s,0);return`${[...r.slice(0,s),...n,...r.slice(i)].join(`
|
|
38
42
|
`)}
|
|
39
|
-
`}function
|
|
40
|
-
`),r
|
|
43
|
+
`}function Ta(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(hs(r)&&ys(r)===0&&va(r)===t)return n}return-1}function gs(e,t,n){let r=e.length;for(let s=t+1;s<e.length;s++)if(hs(e[s])&&ys(e[s])<=n){r=s;break}for(;r-1>t&&e[r-1].trim()==="";)r--;return r}function ys(e){return(e.match(/^ */)?.[0]??"").length}function hs(e){let t=e.trim();return t!==""&&!t.startsWith("#")}function va(e){return e.replace(/^ */,"").replace(/:.*$/,"").trim()}function Wn(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}function Pm(e,t){let n=e===""?[]:e.replace(/\n+$/,"").split(`
|
|
44
|
+
`),r=Ta(n,"plugins");if(r===-1)return e;let s=gs(n,r,0),i=Ea(n,"memory",r+1,s,2);if(i===-1)return e;let o=gs(n,i,2),a=[...n],c=Ea(a,"storePath",i+1,o,4);return c!==-1?a[c]=` storePath: ${t}`:a.splice(o,0,` storePath: ${t}`),`${a.join(`
|
|
41
45
|
`)}
|
|
42
|
-
`}function
|
|
46
|
+
`}function Ea(e,t,n,r,s){for(let i=n;i<r;i++){let o=e[i];if(hs(o)&&ys(o)===s&&va(o)===t)return i}return-1}async function Sa(e){try{return await Em(e,Rm.F_OK),!0}catch{return!1}}var ps,xm,Oa=E(()=>{"use strict";re();ps=On,xm=".red/memory/graph.rdb"});var Na={};A(Na,{runRspMcpServer:()=>Im});import{createInterface as Dm}from"node:readline";async function Im(){let e=ve(process.cwd(),process.env),t=Dm({input:process.stdin,crlfDelay:1/0});for await(let n of t){if(!n.trim())continue;let r;try{r=JSON.parse(n);let s=await $m(r,e);$a({jsonrpc:"2.0",id:r.id??null,result:s})}catch(s){$a({jsonrpc:"2.0",id:typeof Aa(n)?.id>"u"?null:Aa(n)?.id,error:{code:-32e3,message:s instanceof Error?s.message:String(s)}})}}}async function $m(e,t){if(e.method==="initialize")return{protocolVersion:"2024-11-05",capabilities:{tools:{}},serverInfo:{name:"rsp",version:"0.1.0"}};if(e.method==="tools/list")return t.enabled?{tools:[{name:"rsp_status",description:"Explain whether rsp is enabled in this directory.",inputSchema:{type:"object",properties:{}}},{name:"rsp_stats",description:"Read resident rsp accounting stats.",inputSchema:{type:"object",properties:{}}},{name:"rsp_show",description:"Read an rsp elision handle through the resident server.",inputSchema:{type:"object",properties:{handle:{type:"string"}},required:["handle"]}},{name:"rsp_compress",description:"Compress arbitrary text or JSON through rsp normalization, JSON selection, TOON rendering, and reversible elision.",inputSchema:{type:"object",properties:{payload:{description:"Text, JSON value, or JSON-serializable payload to compress."},level:{type:"string",enum:["brief","terse"],description:"Compression level. Defaults to brief."}},required:["payload"]}}]}:{tools:[{name:"rsp_status",description:"Explain whether rsp is enabled in this directory.",inputSchema:{type:"object",properties:{}}}]};if(e.method==="tools/call"){let n=e.params;if(n?.name==="rsp_status")return{content:[{type:"text",text:Ia(t)}]};if(!t.enabled)return{content:[{type:"text",text:Ia(t)}],isError:!0};let r=Mm(t);if(n?.name==="rsp_stats")return{content:[{type:"text",text:JSON.stringify(await r.accountingStats(t.telemetryByteBudget))}]};if(n?.name==="rsp_show"){let s=String(n.arguments?.handle??""),i=await r.get(s);return i?"status"in i?{content:[{type:"text",text:JSON.stringify(i)}],isError:!0}:{content:[{type:"text",text:i.original.toString("utf8")}]}:{content:[{type:"text",text:"not found"}],isError:!0}}if(n?.name==="rsp_compress")return{content:[{type:"text",text:await Am(n.arguments,r)}]}}return{}}async function Am(e,t){let n=Nm(e?.payload),r=Bm(e?.level),s=await Xt(n,{level:r,command:"rsp mcp compress",store:t});if(s.detected)return Pa(s.output);let i=wt(n);if(r==="brief"&&Buffer.byteLength(i)<=2*1024)return Pa(i);let o=Buffer.from(n),a=await t.mint(o,{command:"rsp mcp compress",loss:{level:r,bytes_elided:o.length}});return Cm(i,o.length,a,r)}function Nm(e){return typeof e=="string"?e:e==null?"":JSON.stringify(e)}function Bm(e){return e==="terse"?"terse":"brief"}function Cm(e,t,n,r){let s=r==="terse"?1024:2048,i=Buffer.from(e),o=Math.max(1,Math.floor(s/2)),a=Da(i.subarray(0,o)),c=Da(i.subarray(Math.max(0,i.length-o))),u=["payload summary",`bytes: ${t}`,`lines: ${Lm(i)}`,"head:",a];return c&&c!==a&&u.push("tail:",c),u.push(`\u2026 elided payload (+${t}) \u2014 rsp show ${n}`),`${u.join(`
|
|
43
47
|
`)}
|
|
44
|
-
`}function
|
|
48
|
+
`}function Pa(e){return e.endsWith(`
|
|
45
49
|
`)?e:`${e}
|
|
46
|
-
`}function
|
|
47
|
-
`)}function
|
|
48
|
-
`),0;if(!
|
|
49
|
-
`),await
|
|
50
|
-
`)}function
|
|
51
|
-
`)}function
|
|
52
|
-
`)}function hn(e,t){if(t.length===0)return[];if(t.some(s=>s.command.length===1))return[`${e}() {`," if command -v rsp >/dev/null 2>&1; then",` command rsp ${e} "$@"`," return"," fi",` command ${e} "$@"`,"}"];let n=t.map(s=>s.command.slice(1)).filter(s=>s.length===1).map(s=>s[0]).filter(wn),r=t.map(s=>s.command.slice(1)).filter(s=>s.length>1&&s.every(wn)),i=[`${e}() {`," if ! command -v rsp >/dev/null 2>&1; then",` command ${e} "$@"`," return"," fi",' case "$1" in'];if(n.length>0){let s=n.map(o=>zo(o)).join("|");i.push(` ${s}) command rsp ${e} "$@" ;;`)}for(let[s,o]of zf(r)){let a=o.map(c=>c.map((u,l)=>`[ "$${l+2}" = '${Qf(u)}' ]`).join(" && ")).join(" || ");i.push(` ${zo(s)}) if ${a}; then command rsp ${e} "$@"; else command ${e} "$@"; fi ;;`)}return i.push(` *) command ${e} "$@" ;;`," esac","}"),i}function zf(e){let t=new Map;for(let[n,...r]of e){if(!n)continue;let i=t.get(n)??[];i.push(r),t.set(n,i)}return t}function Yf(e){let t=new Map;for(let n of e){let r=n.command[0];if(!r||!wn(r))continue;let i=t.get(r)??[];i.push(n),t.set(r,i)}return t}function wn(e){return!!(e&&/^[A-Za-z0-9_./:-]+$/.test(e))}function zo(e){return e.replace(/[\\|)&;]/g,"\\$&")}function Qf(e){return e.replace(/'/g,"'\\''")}function Xf(e){return e.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}var Qo=S(()=>{"use strict";sn()});function Fr(e){if(typeof e!="object"||e===null)return!1;let t=e;return t.schemaVersion===1&&typeof t.id=="string"&&t.id.length>0&&typeof t.emitter=="string"&&t.emitter.length>0&&typeof t.occurredAt=="string"&&typeof t.taskClass=="string"&&Zf(t.chosenOption)&&em(t.outcome)&&tm(t.cost)}function Zf(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.kind=="string"&&t.kind.length>0}function em(e){return e==="success"||e==="failure"||e==="escalated"}function tm(e){if(typeof e!="object"||e===null)return!1;let t=e.signal;return t==="none"||t==="low"||t==="medium"||t==="high"||t==="unknown"}var Xo=S(()=>{});import{createHash as nm}from"node:crypto";function la(e,t){return new Jr(e,t)}function Zo(e){let t=Number(e.red_entity_id??e.rid),n=qr(e.properties??e.PROPERTIES),r=da(String(e.node_type??e.NODE_TYPE??n.kind??"note"));if(!Number.isFinite(t))return null;let i=String(n.id??e.label??e.LABEL??t),s=String(n.title??e.label??e.LABEL??i),o=String(n.content??""),a=Array.isArray(n.tags)?n.tags.map(String):[],c=Date.now();return{rid:t,label:String(e.label??e.LABEL??i),kind:r,properties:{...n,id:i,title:s,content:o,tags:a,created_at:Number(n.created_at??c),updated_at:Number(n.updated_at??n.created_at??c),hash:String(n.hash??"")}}}function ea(e){let t=Number(e.red_entity_id??e.rid),n=Number(e.from??e.FROM??e.from_rid??e.source),r=Number(e.to??e.TO??e.to_rid??e.target),i=fa(String(e.label??e.LABEL??"related_to"));return!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)?null:{rid:t,kind:i,from_rid:n,to_rid:r,weight:Number(e.weight??1),properties:qr(e.properties??e.PROPERTIES)}}function sm(e){let t=Number(e.red_entity_id??e.rid),n=qr(e.properties??e.PROPERTIES);return!Number.isFinite(t)||!Fr(n)?null:{rid:t,event:n}}function qr(e){return e==null?{}:typeof e=="string"?JSON.parse(e):bn(e)?e:{}}function da(e){let t=e==="contact"?"person":e;if(rm.has(t))return t;throw new Error(`invalid Brain artifact kind: ${e}`)}function fa(e){if(im.has(e))return e;throw new Error(`invalid Brain connection kind: ${e}`)}function om(e){return e==="hour"||e==="week"||e==="month"?e:"day"}function ta(e){if(typeof e=="number")return e;let t=String(e??"");return/^\d+$/.test(t)?Number(t):t}function Be(e){return bn(e)?e:{}}function na(e,t){return Be(e)[t]}function ra(e,t){let n=e[t];if(typeof n!="string")throw new Error(`brain ${t} must be a string`);return n}function ia(e,t){let n=e[t];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function sa(e){let t=Be(e);return{excludeRids:Array.isArray(t.excludeRids)?t.excludeRids.map(Number).filter(Number.isFinite):void 0}}function A(e){return typeof e=="string"&&e.length>0?e:void 0}function bn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Gr(e){return e!=null}function am(e){return Array.from(new Set(e.map(t=>t.trim()).filter(Boolean))).sort()}function cm(e){return nm("sha256").update(JSON.stringify(e)).digest("hex")}function um(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"artifact"}function oa(e){return`artifact-hash:${e}`}function aa(e,t,n){return`connection:${e}:${t}:${n}`}function ca(){return"model-tier-bandit:v1"}function lm(e){return e.toLowerCase().split(/[^a-z0-9_]+/).map(t=>t.trim()).filter(t=>t.length>1)}function ua(e,t){let n=0,r=e.indexOf(t);for(;r>=0;)n++,r=e.indexOf(t,r+t.length);return n}function ma(e,t){let n=e.properties.title.toLowerCase(),r=e.properties.content.toLowerCase(),i=e.properties.tags.map(o=>o.toLowerCase()),s=e.kind.toLowerCase();return{lexical:t.reduce((o,a)=>o+ua(n,a)*3+ua(r,a),0),tags:t.reduce((o,a)=>o+i.reduce((c,u)=>c+(u===a?4:u.includes(a)||a.includes(u)?2:0),0),0),kind:t.reduce((o,a)=>o+(s===a?3:s.includes(a)||a.includes(s)?1:0),0)}}function dm(e,t,n,r){let i=0;for(let s of n){let o=s.from_rid===e.rid?s.to_rid:s.to_rid===e.rid?s.from_rid:null;if(o==null)continue;let a=r.get(o);if(!a)continue;let c=pa({...ma(a,t),connections:0,vector:0}).total;c>0&&(i+=Math.min(c,12)*.35)}return Ne(i)}function pa(e){return{...e,lexical:Ne(e.lexical),tags:Ne(e.tags),kind:Ne(e.kind),connections:Ne(e.connections),vector:Ne(e.vector),total:Ne(e.lexical+e.tags+e.kind+e.connections+e.vector)}}function Ne(e){return Math.round(e*1e3)/1e3}function fm(e,t){if(e.length<=220)return e;let n=e.toLowerCase(),r=t.map(s=>n.indexOf(s)).filter(s=>s>=0).sort((s,o)=>s-o)[0]??0,i=Math.max(0,r-80);return`${i>0?"...":""}${e.slice(i,i+220)}${i+220<e.length?"...":""}`}function mm(e,t){let n=t.length===0?"none":t[0].score>=5?"high":t[0].score>=3?"medium":"low",r=t.length===0?[`No Brain artifacts matched "${e}".`]:[];return{answer:t.length===0?`Brain has no cited evidence for "${e}".`:`Brain found ${t.length} cited artifact${t.length===1?"":"s"} for "${e}".`,hits:t,citations:t.map((i,s)=>({ref:`B${s+1}`,rid:i.artifact.rid,id:i.artifact.properties.id,title:i.artifact.properties.title,kind:i.artifact.kind,score:i.score,score_breakdown:i.score_breakdown,excerpt:i.excerpt})),confidence:n,missing_evidence:r}}function pm(e){let t={};for(let n of e)t[n]=(t[n]??0)+1;return t}var z,rm,im,Jr,ga=S(()=>{"use strict";Xo();z={artifacts:"brain_artifacts",connections:"brain_connections",outcomeEvents:"brain_outcome_events",kv:"brain_kv"},rm=new Set(["pillar","decision","concept","question","playbook","task","event","pattern","hypothesis","fact","source","bookmark","note","reference","custom","project","idea","meeting","claim","organization","person"]),im=new Set(["supports","contradicts","depends_on","derived_from","related_to","part_of","preceded_by","followed_by","authored","tagged"]),Jr=class{constructor(t,n){this.db=t;this.uri=n}async request(t,n){if(await this.bootstrap(),t==="status")return await this.status();if(t==="capture")return await this.capture(Be(n));if(t==="getArtifact")return await this.getArtifact(na(n,"ridOrId"));if(t==="listArtifacts")return await this.listArtifacts();if(t==="search"){let r=Be(n);return await this.search(ra(r,"query"),ia(r,"limit")??10,sa(r.options))}if(t==="think"){let r=Be(n);return await this.think(ra(r,"query"),ia(r,"limit")??8,sa(r.options))}if(t==="link")return await this.link(Be(n));if(t==="backlinks")return await this.backlinks(na(n,"target"));if(t==="listConnections")return await this.listConnections();if(t==="eventKpis")return await this.eventKpis(Be(n));if(t==="appendOutcomeEvent")return await this.appendOutcomeEvent(n);if(t==="replayOutcomeEvents")return await this.replayOutcomeEvents();if(t==="loadModelTierBanditDocument")return await this.loadModelTierBanditDocument();if(t==="saveModelTierBanditDocument")return await this.saveModelTierBanditDocument(n);if(t==="refreshModelTierBanditDocument")return await this.refreshModelTierBanditDocument();throw new Error(`unsupported resident brain action: ${t}`)}async bootstrap(){await this.db.execute(`CREATE GRAPH IF NOT EXISTS ${z.artifacts}`),await this.db.execute(`CREATE GRAPH IF NOT EXISTS ${z.connections}`),await this.db.execute(`CREATE GRAPH IF NOT EXISTS ${z.outcomeEvents}`)}async status(){let t=await this.listArtifacts(),n=await this.listConnections();return{uri:this.uri,artifacts:t.length,connections:n.length,kinds:pm(t.map(r=>r.kind))}}async capture(t){let n=A(t.title)||"Untitled artifact",r=A(t.content);if(!r)throw new Error("brain capture requires content");let i=da(A(t.kind)||"note"),s=am(Array.isArray(t.tags)?t.tags.map(String):[]),o=Date.now(),a=cm([i,n,r,s,A(t.sourcePath),A(t.sourceSession)]),c=await this.kv().get(oa(a));if(c!=null){let R=await this.getArtifact(Number(c));if(R)return R}let u=`${um(n)}-${a.slice(0,8)}`,l={id:u,title:n,content:r,tags:s,source_agent:A(t.sourceAgent),source_runner:A(t.sourceRunner),source_session:A(t.sourceSession),source_path:A(t.sourcePath),created_at:o,updated_at:o,hash:a,metadata:bn(t.metadata)?t.metadata:void 0},m=(await this.db.query(`INSERT INTO ${z.artifacts} NODE (label, node_type, hash, properties) VALUES ($1, $2, $3, $4) RETURNING *`,u,i,a,l)).rows[0];if(!m)throw new Error("INSERT artifact returned no row");let _=Zo(m);if(!_)throw new Error("INSERT artifact returned invalid row");return await this.kv().put(oa(a),_.rid),await this.materializeTagConnections(_),_}async getArtifact(t){let n=await this.listArtifacts();return typeof t=="number"?n.find(r=>r.rid===t)??null:n.find(r=>r.properties.id===t||r.label===t)??null}async listArtifacts(){return(await this.db.query(`SELECT * FROM ${z.artifacts}`)).rows.map(Zo).filter(Gr)}async search(t,n,r={}){let i=lm(t),s=new Set(r.excludeRids??[]),o=await this.listArtifacts(),a=await this.listConnections(),c=new Map(o.map(u=>[u.rid,u]));return o.filter(u=>!s.has(u.rid)).map(u=>{let l=ma(u,i),d=pa({...l,connections:dm(u,i,a,c),vector:0});return{artifact:u,score:d.total,score_breakdown:d,excerpt:fm(u.properties.content,i)}}).filter(u=>u.score>0).sort((u,l)=>l.score-u.score||l.artifact.properties.updated_at-u.artifact.properties.updated_at).slice(0,Math.max(1,Math.min(100,n)))}async think(t,n,r={}){let i=(await this.search(t,Math.max(n*2,n+5),r)).slice(0,n);return mm(t,i)}async link(t){let n=await this.getArtifact(ta(t.from)),r=await this.getArtifact(ta(t.to));if(!n)throw new Error(`Brain artifact not found: ${String(t.from)}`);if(!r)throw new Error(`Brain artifact not found: ${String(t.to)}`);let i=fa(A(t.kind)||"related_to"),s=await this.findConnection(n.rid,r.rid,i);if(s!=null){let l=(await this.listConnections()).find(d=>d.rid===s);if(l)return l}let o={reason:A(t.reason),confidence:A(t.confidence)||"explicit",created_at:Date.now(),metadata:bn(t.metadata)?t.metadata:void 0},c=(await this.db.query(`INSERT INTO ${z.connections} EDGE (label, from, to, weight, properties) VALUES ($1, $2, $3, $4, $5) RETURNING *`,i,n.rid,r.rid,1,o)).rows[0];if(!c)throw new Error("INSERT connection returned no row");let u=ea(c);if(!u)throw new Error("INSERT connection returned invalid row");return await this.kv().put(aa(n.rid,r.rid,i),u.rid),u}async backlinks(t){let n=await this.getArtifact(t);if(!n)throw new Error(`Brain artifact not found: ${t}`);return(await this.listConnections()).filter(r=>r.to_rid===n.rid)}async listConnections(){return(await this.db.query(`SELECT * FROM ${z.connections}`)).rows.map(ea).filter(Gr)}async eventKpis(t){let n=(await this.listArtifacts()).filter(s=>s.kind==="event"),r=om(A(t.interval)||"day"),i=A(t.timeField)==="ingested"?"ingested":"event";return{kind:"event",interval:r,timeField:i,range:{from:null,to:null},total:n.length,series:[{group:null,total:n.length,buckets:[]}]}}async appendOutcomeEvent(t){if(!Fr(t))throw new Error("invalid Brain outcome event");if(!(await this.db.query(`INSERT INTO ${z.outcomeEvents} NODE (label, node_type, properties) VALUES ($1, $2, $3) RETURNING *`,t.id,`outcome_event.v${t.schemaVersion}`,t)).rows[0])throw new Error("INSERT outcome event returned no row");return t}async replayOutcomeEvents(){return(await this.db.query(`SELECT * FROM ${z.outcomeEvents}`)).rows.map(sm).filter(Gr).sort((n,r)=>n.rid-r.rid).map(({event:n})=>n)}async loadModelTierBanditDocument(){let t=await this.kv().get(ca());return typeof t=="string"?JSON.parse(t):t}async saveModelTierBanditDocument(t){return await this.kv().put(ca(),JSON.stringify(t)),t}async refreshModelTierBanditDocument(){let t=await this.loadModelTierBanditDocument();if(t!=null)return t;let n={schema_version:"brain.model-tier-bandit.v1",updated_at:new Date().toISOString(),arms:{}};return await this.saveModelTierBanditDocument(n),n}async materializeTagConnections(t){if(t.properties.metadata?.derived_kind!=="tag")for(let n of t.properties.tags){let r=await this.capture({title:n,content:`Tag: ${n}`,kind:"custom",tags:["tag"],metadata:{derived:!0,derived_kind:"tag"}});await this.link({from:t.rid,to:r.rid,kind:"tagged",confidence:"derived"})}}async findConnection(t,n,r){let i=await this.kv().get(aa(t,n,r));return i!=null?Number(i):null}kv(){return this.db.kv(z.kv)}}});var Yr={};D(Yr,{RSP_TELEMETRY_DEGRADATIONS_COLLECTION:()=>Ee,RSP_TELEMETRY_INDEX_COLLECTION:()=>At,RSP_TELEMETRY_INVOCATIONS_COLLECTION:()=>Re,RSP_TELEMETRY_SPOOL:()=>ka,appendTelemetryEvent:()=>Em,drainTelemetrySpool:()=>Hr,parseTelemetryEvent:()=>Kr,readTelemetryGainsReport:()=>zr,readTelemetryStats:()=>Sn,takeTelemetrySpool:()=>Sm,telemetrySpoolPath:()=>kn});import{appendFileSync as gm,mkdirSync as ym,readFileSync as hm}from"node:fs";import{mkdir as _a,readdir as wm,readFile as bm,rename as Ra,rm as Ea,writeFile as Vr}from"node:fs/promises";import{basename as _m,dirname as En,join as Wr}from"node:path";function kn(e){return Wr(e,ka)}async function Em(e,t){try{let n=kn(e);ym(En(n),{recursive:!0}),gm(n,`${JSON.stringify(km(t))}
|
|
53
|
-
`,{encoding:"utf8",mode:384})
|
|
54
|
-
`)}
|
|
55
|
-
${i}`,"utf8")}await Ea(t,{force:!0})}}function xm(e){try{return hm(e,"utf8")}catch{return""}}async function Sa(e){let t="";for(let n=0;n<5;n++){let r=await bm(e,"utf8").catch(()=>"");if(r===t)return r;t=r,await new Promise(i=>setTimeout(i,2))}return t}function Kr(e){try{let t=JSON.parse(e);return!va(t)||t.collection!==Re&&t.collection!==Ee?null:t}catch{return null}}async function Sn(e,t,n=new Date){let r=Number.isFinite(t)&&t>0?t:30,i=n.getTime()-r*24*60*60*1e3,s=(await _n(e,Re)).filter(b=>$t(b)>=i),o=(await _n(e,Ee)).filter(b=>$t(b)>=i),a=0,c=0,u=0,l=0,d=!1,m=new Map,_=new Map,R=[],T=0,v=0,p=0;for(let b of s){b.elided===!0&&a++;let x=J(b.raw_bytes),M=J(b.emitted_bytes),ee=Math.max(0,x-M),ce=Math.max(0,J(b.tokens_raw)-J(b.tokens_emitted));d||=b.estimated===!0&&ce>0,c+=x,u+=M,l+=ce;let Oe=It(b).slice(0,10);Oe&&m.set(Oe,(m.get(Oe)??0)+ce);let y=_e(b.command)||"unknown",E=_.get(y)??{command:y,invocations:0,bytes_saved:0,tokens_saved:0};E.invocations++,E.bytes_saved+=ee,E.tokens_saved+=ce,_.set(y,E);let Ue=Rn(b.wrapper_ms);Ue!=null&&R.push(Ue),T+=J(b.store_open_count);let Fe=Rn(b.store_elapsed_ms);Fe!=null&&(v+=Fe,p++)}let f=new Map,w=null;for(let b of o){let x=_e(b.reason)||"unknown";f.set(x,(f.get(x)??0)+1);let M=It(b);(!w||M>w.timestamp)&&(w={timestamp:M,reason:x,command:_e(b.command)||"unknown"})}let g=s.length+o.length,k=Wn(l,d);return{window_days:r,empty:s.length===0&&o.length===0,savings:{invocations:s.length,elided:a,raw_bytes:c,emitted_bytes:u,bytes_saved:Math.max(0,c-u),tokens_saved:l,tokens_saved_estimated:k.tokens_saved_estimated,token_estimate_range_pct:k.token_estimate_range_pct,tokens_saved_low:k.tokens_saved_low,tokens_saved_high:k.tokens_saved_high,dollars_saved_estimate_usd:k.dollars_saved_estimate_usd,dollars_saved_low_usd:k.dollars_saved_low_usd,dollars_saved_high_usd:k.dollars_saved_high_usd,pricing_model_family:k.pricing_model_family,pricing_input_usd_per_million_tokens:k.pricing_input_usd_per_million_tokens,pricing_note:k.pricing_note,daily_tokens_saved:[...m.entries()].sort(([b],[x])=>b.localeCompare(x)).map(([b,x])=>({date:b,tokens_saved:x})),top_commands:[..._.values()].sort((b,x)=>x.bytes_saved-b.bytes_saved||x.tokens_saved-b.tokens_saved||b.command.localeCompare(x.command))},health:{degradations:o.length,degradation_rate:g===0?0:o.length/g,by_reason:[...f.entries()].sort((b,x)=>x[1]-b[1]||b[0].localeCompare(x[0])).map(([b,x])=>({reason:b,count:x})),most_recent:w},latency:{wrapper_ms_p50:rt(R,.5),wrapper_ms_p95:rt(R,.95),store_open_count_sum:T,store_elapsed_ms_sum:it(v),store_elapsed_ms_avg:p===0?null:it(v/p)}}}async function zr(e,t,n=new Date){let r=Number.isFinite(t)&&t>0?t:28,i=n.toISOString(),s=new Date(n.getTime()-r*24*60*60*1e3).toISOString(),o=Date.parse(s),a=(await _n(e,Re)).filter(y=>$t(y)>=o),c=(await _n(e,Ee)).filter(y=>$t(y)>=o),u=[...a,...c].map($t).filter(y=>Number.isFinite(y)&&y>0),l=u.length===0?null:Math.min(...u),d=l==null?0:Math.max(1,Math.min(r,Math.ceil((n.getTime()-l)/Nm()))),m=[],_=new Map,R=new Map,T=new Map,v=new Map,p=new Map,f=new Map,w=0,g=!1,k=0,b=null,x=0,M=0;for(let y of a){let E=It(y),Ue=E.slice(0,10),Fe=E.slice(0,16),Ge=ba(_e(y.command)),ue=Math.max(0,J(y.tokens_raw)-J(y.tokens_emitted));w+=ue,g||=y.estimated===!0&&ue>0;let An=Math.max(0,J(y.raw_bytes)-J(y.emitted_bytes)),Nn=Rn(y.wrapper_ms);if(Nn!=null){m.push(Nn);let Si=_.get(Ge)??[];Si.push(Nn),_.set(Ge,Si)}Ue&&R.set(Ue,(R.get(Ue)??0)+1),Fe&&T.set(Fe,(T.get(Fe)??0)+1);let Bn=Pm(E);Bn&&v.set(Bn,(v.get(Bn)??0)+1);let Ln=Im(E);Ln&&p.set(Ln,(p.get(Ln)??0)+ue);let Lt=f.get(Ge)??{command_family:Ge,invocations:0,tokens_saved:0,bytes_saved:0};Lt.invocations++,Lt.tokens_saved+=ue,Lt.bytes_saved+=An,f.set(Ge,Lt),y.elided===!0&&k++,(y.store_open_count!=null||y.store_elapsed_ms!=null)&&(x++,J(y.store_open_count)>0&&M++),ue>0&&(!b||ue>b.tokens_saved||ue===b.tokens_saved&&An>b.bytes_saved)&&(b={timestamp:E,command_family:Ge,tokens_saved:ue,bytes_saved:An})}let ee=c.map(y=>({timestamp:It(y),command_family:ba(_e(y.command)),reason:_e(y.reason)||"unknown"})).sort((y,E)=>y.timestamp.localeCompare(E.timestamp)),ce=new Map;for(let y of ee)ce.set(y.reason,(ce.get(y.reason)??0)+1);let Oe=[...T.entries()].sort((y,E)=>E[1]-y[1]||y[0].localeCompare(E[0]))[0];return{schema_version:"red.rsp.gains.v1",window:{requested_days:r,data_days:d,since:s,until:i,label:`window: ${r}d, data: ${d}d`,empty:a.length===0&&c.length===0,invocations:a.length,degradations:c.length},latency:{global:wa(m),by_command_family:[..._.entries()].sort((y,E)=>E[1].length-y[1].length||y[0].localeCompare(E[0])).map(([y,E])=>({command_family:y,count:E.length,...wa(E)}))},throughput:{requests_per_day:[...R.entries()].sort(([y],[E])=>y.localeCompare(E)).map(([y,E])=>({date:y,requests:E})),active_minute_avg:T.size===0?null:it([...T.values()].reduce((y,E)=>y+E,0)/T.size),peak_minute:Oe?{minute:Oe[0],requests:Oe[1]}:null,hour_weekday_heatmap:Dm(v)},savings:{tokens:Wn(w,g),weekly_tokens_saved:Am(p),elision_rate:a.length===0?0:it(k/a.length),top_commands_by_tokens_saved:[...f.values()].sort((y,E)=>E.tokens_saved-y.tokens_saved||E.bytes_saved-y.bytes_saved||y.command_family.localeCompare(E.command_family)).slice(0,10),top_commands_by_invocation_count:[...f.values()].sort((y,E)=>E.invocations-y.invocations||E.tokens_saved-y.tokens_saved||y.command_family.localeCompare(E.command_family)).slice(0,10),single_biggest_elision:b},health:{degradation_timeline:ee,degradations_by_reason:[...ce.entries()].sort((y,E)=>E[1]-y[1]||y[0].localeCompare(E[0])).map(([y,E])=>({reason:y,count:E})),cold_boots:x===0?null:M,warm_hits:x===0?null:Math.max(0,x-M)}}}async function _n(e,t){return(await e.kv(t).list({limit:1e4}).catch(r=>{if(r instanceof Error&&/\bnot found\b/i.test(r.message))return{items:[]};throw r})).items.map(r=>Om(r.value)).filter(r=>va(r))}function Om(e){if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}}function $t(e){let t=Date.parse(It(e));return Number.isFinite(t)?t:0}function It(e){return _e(e.created_at)||_e(e.ts)||""}function _e(e){return typeof e=="string"?e:""}function J(e){return Rn(e)??0}function Rn(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function rt(e,t){if(e.length===0)return null;let n=[...e].sort((i,s)=>i-s),r=Math.min(n.length-1,Math.max(0,Math.ceil(n.length*t)-1));return it(n[r])}function wa(e){return{wrapper_ms_p50:rt(e,.5),wrapper_ms_p90:rt(e,.9),wrapper_ms_p95:rt(e,.95),wrapper_ms_p99:rt(e,.99)}}function it(e){return Math.round(e*100)/100}function ba(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?"unknown":t[0]==="git"&&t[1]?`git ${t[1]}`:t[0]==="gh"&&t[1]&&t[2]?`gh ${t[1]} ${t[2]}`:t[0]==="gh"&&t[1]?`gh ${t[1]}`:t[0]==="cargo"&&t[1]?`cargo ${t[1]}`:t[0]==="vitest"?"vitest":t[0]}function Pm(e){let t=new Date(e);return Number.isFinite(t.getTime())?`${$m(t.getUTCDay())}:${t.getUTCHours()}`:null}function Dm(e){let t=[];for(let n of["sun","mon","tue","wed","thu","fri","sat"])for(let r=0;r<24;r++){let i=e.get(`${n}:${r}`)??0;i>0&&t.push({weekday:n,hour:r,requests:i})}return t}function $m(e){return["sun","mon","tue","wed","thu","fri","sat"][e]??"unknown"}function Im(e){let t=new Date(e);if(!Number.isFinite(t.getTime()))return null;let n=t.getUTCDay(),r=n===0?-6:1-n;return new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()+r)).toISOString().slice(0,10)}function Am(e){let t=null;return[...e.entries()].sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>{let i=t==null||t===0?null:it((r-t)/t*100);return t=r,{week_start:n,tokens_saved:r,wow_delta_pct:i}})}function Nm(){return 24*60*60*1e3}function va(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var ka,Re,Ee,At,Rm,vn=S(()=>{"use strict";Hn();ka=Wr(".red","tmp","rsp-telemetry.spool.jsonl"),Re="rsp_telemetry_invocations_v1",Ee="rsp_telemetry_degradations_v1",At="rsp_telemetry_index_v1",Rm=64*1024});var Ma={};D(Ma,{runResidentServer:()=>Gm});import{randomUUID as Zr}from"node:crypto";import{execFileSync as Bm,spawn as Lm}from"node:child_process";import{existsSync as Cm}from"node:fs";import{mkdir as Ia,rename as Mm,rm as Ta,writeFile as Aa}from"node:fs/promises";import{createServer as jm}from"node:net";import{dirname as ti,join as Nt}from"node:path";import{fileURLToPath as Um,pathToFileURL as Fm}from"node:url";async function Gm(e){await Ia(ti(e.socketPath),{recursive:!0});let t=tp();ep();let n=e.telemetryDrainTimeoutMs??Na,r={kind:"opening",startedAt:process.hrtime.bigint()},i,s=!1,o=e.idleMs??nn,a,c,u=!1,l=new Set,d=e.telemetryDrainIntervalMs??3e4,m=jm(g=>{l.add(g),g.once("close",()=>l.delete(g)),R(),cp(g,async k=>{R();let b=await up(r,k,e.storeUri,e.residentVersion??"0.0.0-dev"),x={id:k.id,ok:!0,value:b,storeOpenCount:r.kind==="ready"?r.storeOpenCount:void 0,storeElapsedMs:r.kind==="ready"?r.storeElapsedMs:void 0};Ca(g,x),k.op==="handover"&&setImmediate(()=>_())})});function _(){s=!0,u=!0,c=Zm(c),m.close();for(let g of l)g.destroy()}function R(){r.kind!=="opening"&&(a&&clearTimeout(a),a=setTimeout(()=>{_()},o),a.unref())}let v=["SIGINT","SIGTERM"].map(g=>{let k=()=>{Tn(),m.close();for(let b of l)b.destroy();setTimeout(()=>process.exit(0),1e3)};return process.once(g,k),{signal:g,handler:k}});await new Promise((g,k)=>{m.once("error",k),m.listen(e.socketPath,()=>{m.off("error",k),g()})}),(async()=>{let g=process.hrtime.bigint();process.env.RSP_TEST_HANG_RESIDENT_STORE_OPEN==="1"&&await new Promise(()=>{});let k=Number(process.env.RSP_TEST_DELAY_RESIDENT_STORE_OPEN_MS??"0");Number.isFinite(k)&&k>0&&await new Promise(ee=>setTimeout(ee,k));let b=await xt.open({uri:e.storeUri,ttlDays:e.ttlDays,byteBudget:e.byteBudget,allowResidentOpen:!0}),x=Number(process.hrtime.bigint()-g)/1e6,M=new ei(b,{rootDir:e.rootDir??process.cwd(),ttlDays:e.telemetryTtlDays??en,byteBudget:e.telemetryByteBudget??e.byteBudget??tn});if(s){await b.close();return}if(await Qr(M,n),s){await b.close();return}r={kind:"ready",store:b,telemetry:M,storeOpenCount:1,storeElapsedMs:x},i=setInterval(()=>{let ee=r.kind==="ready"?r:void 0;ee&&Qr(ee.telemetry,n)},d),i.unref(),R()})().catch(g=>{r={kind:"failed",error:g instanceof Error?g:new Error(String(g))},R()}),e.pidPath&&await Aa(e.pidPath,`${process.pid}
|
|
56
|
-
`,{encoding:"utf8",mode:384});let p=e.residentVersion??"0.0.0-dev",f=e.registryPath??Nt(e.rootDir??process.cwd(),".red","tmp","rsp-resident.pid.json");try{await zt(f,{socket_path:e.socketPath,store_uri:e.storeUri,resident_version:p})}catch{}await new Promise(g=>m.once("close",g)),a&&clearTimeout(a),i&&clearInterval(i),await Ta(e.socketPath,{force:!0});let w=r;w.kind==="ready"&&(await Qr(w.telemetry,n,u),await w.store.close()),c&&clearTimeout(c);for(let{signal:g,handler:k}of v)process.off(g,k);t?.kill("SIGTERM"),Tn(),e.pidPath&&await Ta(e.pidPath,{force:!0}),await Yt(f)}async function Km(e,t,n=new Date){let r=await Sn(e,1,n),i=n.toISOString().slice(0,10),s=r.savings.daily_tokens_saved.find(u=>u.date===i)?.tokens_saved??0,o=r.savings.tokens_saved>0?s/r.savings.tokens_saved*r.savings.dollars_saved_estimate_usd:0,a=Nt(t,Wm),c=`${a}.${process.pid}.${Date.now()}.tmp`;await Ia(ti(a),{recursive:!0}),await Aa(c,JSON.stringify({version:1,tokens_saved_today:s,dollars_saved_today_usd:Math.round(o*1e6)/1e6,updated_at:n.toISOString()}),{encoding:"utf8",mode:384}),await Mm(c,a)}async function Qr(e,t=Na,n=!1){try{n&&process.env.RSP_TEST_HANG_TELEMETRY_DRAIN==="1"&&await new Promise(()=>{}),await La(e.drainAndSweep(),t,"telemetry drain timed out")}catch(r){process.stderr.write(`rsp resident: telemetry drain failed: ${r instanceof Error?r.message:String(r)}
|
|
57
|
-
`)}}async function zm(e){let t=[];for(let n of Hm){let r=await Ym(e,n);r.ok||(r.previousModel&&(r.previousModel!=="collection"&&await Qm(e,n,r.previousModel),t.push({collection:n,previousModel:r.previousModel})),await e.query(`CREATE KV IF NOT EXISTS ${Ba(n)}`))}return t}async function Ym(e,t){try{return await e.kv(t).get("__rsp_telemetry_model_probe__"),{ok:!0}}catch(n){let r=n instanceof Error?n.message:String(n);if(/\bnot found\b/i.test(r))return{ok:!1,previousModel:null};let i=r.match(/model mismatch: expected kv, got ([A-Za-z_][A-Za-z0-9_]*)/i);if(i?.[1])return{ok:!1,previousModel:i[1].toLowerCase()};if(/does not allow 'kv' operations/i.test(r))return{ok:!1,previousModel:"collection"};let s=(await e.list()).find(o=>o.name===t);if(s&&s.model!=="kv")return{ok:!1,previousModel:s.model};throw n}}async function Qm(e,t,n){let r=Xm(n);if(!r)throw new Error(`cannot self-heal telemetry collection ${t}: unsupported model ${n}`);await e.query(`DROP ${r} ${Ba(t)}`)}function Xm(e){let t=e.toLowerCase();return t==="table"?"TABLE":t==="kv"?"KV":t==="graph"?"GRAPH":t==="queue"?"QUEUE":t==="document"||t==="documents"?"DOCUMENT":null}function Ba(e){if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e))throw new Error(`invalid telemetry collection name: ${e}`);return e}function Zm(e){return e&&clearTimeout(e),setTimeout(()=>{Tn(),process.exit(0)},Vm)}function ep(){xa||(xa=!0,process.on("exit",()=>Tn()))}function tp(){if(process.platform==="win32")return;let t=Lm(process.execPath,["-e",`
|
|
50
|
+
`}function Da(e){return e.toString("utf8").replace(/�$/g,"")}function Lm(e){if(e.length===0)return 0;let t=0;for(let n of e)n===10&&t++;return e[e.length-1]===10?t:t+1}function Mm(e){return new Mt(Te(process.cwd()),{storeUri:e.storeUri,ttlDays:e.ttlDays,ephemeralTtlHours:e.ephemeralTtlHours,byteBudget:e.byteBudget,telemetryTtlDays:e.telemetryTtlDays,telemetryByteBudget:e.telemetryByteBudget,telemetryDrainIntervalMs:e.telemetryDrainIntervalMs,telemetryDrainTimeoutMs:e.telemetryDrainTimeoutMs,idleMs:e.idleMs})}function Ia(e){return e.enabled?"rsp is enabled in this directory":"rsp is not enabled in this directory; run /red-setup"}function $a(e){process.stdout.write(`${JSON.stringify(e)}
|
|
51
|
+
`)}function Aa(e){try{return JSON.parse(e)}catch{return null}}var Ba=E(()=>{"use strict";re();Zt();Fe()});var Fa={};A(Fa,{renderWaitHelp:()=>Rs,runWait:()=>qm});import{spawn as Ss}from"node:child_process";import{existsSync as _s}from"node:fs";import{mkdir as jm,readdir as Um,readFile as Fm,rm as Ma,writeFile as ja}from"node:fs/promises";import{join as tn,resolve as ws}from"node:path";import{randomUUID as Gm}from"node:crypto";async function qm(e,t=process.cwd()){let n=Vm(e);if(n.kind==="help"||e.includes("--help")||e.includes("-h"))return process.stdout.write(Rs()),0;if(n.kind==="ls")return process.stdout.write(`${O({waits:await Zm(t)})}
|
|
52
|
+
`),0;if(!Hm(n.kind))return process.stdout.write(Rs()),2;let r=n.kind,s={id:Gm(),target:rp(n),reason:n.options.reason,pid:process.pid,started_at:new Date().toISOString(),poll_tier:Jm[n.kind],status:"running"},i=tn(await Es(t),`${s.id}.json`),o={status:"indeterminate",exitCode:2,summary:"wait did not start"};try{return await jm(await Es(t),{recursive:!0}),await ja(i,JSON.stringify(s,null,2),"utf8"),o=await Wm({...n,kind:r},t,i,s),process.stdout.write(`${O(np(r,s,o))}
|
|
53
|
+
`),await tp(n.options),o.exitCode}finally{await Ma(i,{force:!0})}}function Hm(e){return e==="cmd"||e==="pr"||e==="run"||e==="release"}function Rs(){return["usage: rsp wait <subcommand> [options]","","Subcommands:"," rsp wait pr <number> [--timeout 45m] [--reason <text>]"," rsp wait run <id|--branch <branch> --latest> [--timeout 45m]"," rsp wait release [--tag <glob>] [--timeout 2h]",' rsp wait cmd -- "<command line>" [--timeout 30m]'," rsp wait ls","","Examples:",' rsp wait pr 123 --reason "before merge"'," rsp wait run --branch feature/wait --latest",' rsp wait release --tag "v2.*"',' rsp wait cmd -- "pnpm -C apps/rsp build"'," rsp wait ls","","Doctrine: never hand-write sleep polling loops; run rsp wait in a background shell - process exit IS the signal.","Exit codes: 0 = success verdict, 1 = failure verdict, 2 = timeout/indeterminate.",'Completion hooks: --signal-pid <pid> [--signal USR1] and --notify-cmd "<cmd>" run after a verdict.',""].join(`
|
|
54
|
+
`)}function Vm(e){let t=e[1],n={timeoutMs:Ca.cmd,reason:"",signal:"SIGUSR1"},r={kind:t,options:n};if(!t||t==="--help"||t==="-h")return{...r,kind:"help"};if(t==="ls")return r;if(t!=="cmd"&&t!=="pr"&&t!=="run"&&t!=="release")return{...r,kind:void 0};n.timeoutMs=Ca[t];let s=e.indexOf("--"),i=s>=0?s:e.length;for(let o=2;o<i;o++){let a=e[o];a==="--timeout"?n.timeoutMs=ip(e[++o]??""):a==="--reason"?n.reason=e[++o]??"":a==="--signal-pid"?n.signalPid=Number(e[++o]):a==="--signal"?n.signal=op(e[++o]??""):a==="--notify-cmd"?n.notifyCmd=e[++o]??"":t==="run"&&a==="--branch"?r.branch=e[++o]??"":t==="run"&&a==="--latest"?r.latest=!0:t==="release"&&a==="--tag"?r.tagGlob=e[++o]??"":!a.startsWith("--")&&!r.target&&(r.target=a)}return t==="cmd"&&(r.commandLine=s>=0?e.slice(s+1).join(" "):""),r}async function Wm(e,t,n,r){switch(e.kind){case"cmd":return await Km(e.commandLine??"",e.options.timeoutMs,t,n,r);case"pr":return await bs(()=>zm(e.target??"",t),e.options.timeoutMs,15e3,n,r);case"run":return await bs(()=>Ym(e,t),e.options.timeoutMs,15e3,n,r);case"release":return await bs(()=>Xm(e.tagGlob,new Date(r.started_at),t),e.options.timeoutMs,6e4,n,r)}}async function Km(e,t,n,r,s){return e.trim()?await new Promise(i=>{let o=!1,a=l=>{o||(o=!0,i(l))},c=Ss(e,{cwd:n,shell:!0,stdio:"ignore",detached:!1}),u=setTimeout(()=>{c.kill("SIGTERM"),en(r,s,"timeout"),a({status:"timeout",exitCode:2,summary:`command timed out after ${Ua(t)}`})},t);c.once("error",l=>{clearTimeout(u),en(r,s,"failure"),a({status:"failure",exitCode:1,summary:l.message})}),c.once("close",(l,d)=>{if(clearTimeout(u),o)return;let g=l===0;en(r,s,g?"success":"failure"),a({status:g?"success":"failure",exitCode:g?0:1,summary:g?"command exited successfully":`command exited with ${d??l??"unknown"}`,details:{status:l??null,signal:d??null}})})}):{status:"indeterminate",exitCode:2,summary:"missing command line"}}async function bs(e,t,n,r,s){let i=Date.now()+t,o=0;for(;Date.now()<i;){let a=await e();if(a.status!=="running"&&a.status!=="indeterminate")return await en(r,s,a.status),a;let c=Math.min(n*4,Math.round(n*Math.pow(1.25,o++)))+Math.floor(Math.random()*1e3);await up(Math.min(c,Math.max(0,i-Date.now())))}return await en(r,s,"timeout"),{status:"timeout",exitCode:2,summary:`timed out after ${Ua(t)}`}}async function zm(e,t){if(!/^[1-9][0-9]*$/.test(e))return{status:"indeterminate",exitCode:2,summary:"missing PR number"};let n=await Kn(["pr","view",e,"--json","number,state,mergeable,statusCheckRollup,url"],t);if(n.status!==0)return{status:"indeterminate",exitCode:2,summary:n.stderr||"gh pr view failed"};let r=ks(n.stdout),s=Array.isArray(r.statusCheckRollup)?r.statusCheckRollup:[],i=s.map(sp),o=i.filter(c=>c==="failure").length,a=i.filter(c=>c==="pending").length;return String(r.state)!=="OPEN"?bt("failure",`PR #${e} is ${String(r.state).toLowerCase()}`,{mergeable:String(r.mergeable??"")}):o>0?bt("failure",`PR #${e} has failing checks`,{failing:o,pending:a,mergeable:String(r.mergeable??"")}):a>0?{status:"running",exitCode:2,summary:`PR #${e} has ${a} pending checks`}:bt("success",`PR #${e} checks passed`,{checks:s.length,mergeable:String(r.mergeable??"")})}async function Ym(e,t){let n=e.target??(e.latest&&e.branch?await Qm(e.branch,t):"");if(!n)return{status:"indeterminate",exitCode:2,summary:"missing run id"};let r=await Kn(["run","view",n,"--json","databaseId,status,conclusion,workflowName,headBranch,url"],t);if(r.status!==0)return{status:"indeterminate",exitCode:2,summary:r.stderr||"gh run view failed"};let s=ks(r.stdout),i=String(s.status??"").toLowerCase(),o=String(s.conclusion??"").toLowerCase();return i!=="completed"?{status:"running",exitCode:2,summary:`run ${n} is ${i||"pending"}`}:o==="success"?bt("success",`run ${n} succeeded`,La(s)):bt("failure",`run ${n} concluded ${o||"unknown"}`,La(s))}async function Qm(e,t){let n=await Kn(["run","list","--branch",e,"--limit","1","--json","databaseId"],t);if(n.status!==0)return"";let r=JSON.parse(n.stdout),s=Array.isArray(r)?r[0]:void 0;return zn(s)&&s.databaseId!=null?String(s.databaseId):""}async function Xm(e,t,n){let r=await Kn(["release","list","--limit","20","--json","tagName,publishedAt,isDraft"],n);if(r.status!==0)return{status:"indeterminate",exitCode:2,summary:r.stderr||"gh release list failed"};let s=JSON.parse(r.stdout),o=(Array.isArray(s)?s.filter(zn):[]).find(a=>{let c=String(a.tagName??""),u=new Date(String(a.publishedAt??""));return a.isDraft!==!0&&(!e||ap(e,c))&&u>=t});return o?bt("success",`release ${String(o.tagName)} published`,{tag:String(o.tagName),published_at:String(o.publishedAt??"")}):{status:"running",exitCode:2,summary:"no matching release is published yet"}}async function Kn(e,t){return await new Promise(n=>{let r=Ss("gh",e,{cwd:t,stdio:["ignore","pipe","pipe"]}),s=[],i=[];r.stdout.on("data",o=>s.push(Buffer.from(o))),r.stderr.on("data",o=>i.push(Buffer.from(o))),r.once("error",o=>n({status:1,stdout:"",stderr:o.message})),r.once("close",o=>{n({status:o??1,stdout:Buffer.concat(s).toString("utf8"),stderr:Buffer.concat(i).toString("utf8").trim()})})})}async function Zm(e){let t=await Es(e);if(!_s(t))return[];let n=await Um(t).catch(()=>[]),r=[];for(let s of n.filter(i=>i.endsWith(".json"))){let i=tn(t,s),o=ks(await Fm(i,"utf8").catch(()=>"{}")),a=typeof o.pid=="number"?o.pid:0;if(!a||!cp(a)){await Ma(i,{force:!0});continue}r.push(o)}return r}async function Es(e){return tn(await ep(e),".red","tmp","waits")}async function ep(e){let t=ws(e);for(;;){if(_s(tn(t,".red"))||_s(tn(t,".git")))return t;let n=ws(t,"..");if(n===t)return ws(e);t=n}}async function en(e,t,n){await ja(e,JSON.stringify({...t,status:n},null,2),"utf8").catch(()=>{})}async function tp(e){if(e.signalPid&&Number.isInteger(e.signalPid)&&e.signalPid>0)try{process.kill(e.signalPid,e.signal)}catch{}e.notifyCmd?.trim()&&await new Promise(t=>{let n=Ss(e.notifyCmd,{shell:!0,stdio:"ignore",detached:!0});n.once("error",()=>t()),n.once("close",()=>t())})}function np(e,t,n){return{wait:{id:t.id,target:t.target,kind:e,status:n.status,reason:t.reason,started_at:t.started_at,completed_at:new Date().toISOString(),poll_tier:t.poll_tier},verdict:{exit_code:n.exitCode,summary:n.summary,...n.details?{details:n.details}:{}}}}function bt(e,t,n){return{status:e,exitCode:e==="success"?0:1,summary:t,details:n}}function rp(e){return e.kind==="cmd"?`cmd:${e.commandLine??""}`:e.kind==="run"&&e.branch&&e.latest?`run:${e.branch}:latest`:e.kind==="release"?`release:${e.tagGlob??"*"}`:`${e.kind}:${e.target??""}`}function sp(e){let t=zn(e)?e:{},n=String(t.conclusion??t.state??t.status??"").toLowerCase();return["success","successful","passed","completed","neutral","skipped"].includes(n)?"success":["failure","failed","error","timed_out","cancelled","action_required"].includes(n)?"failure":"pending"}function La(e){return{database_id:typeof e.databaseId=="number"?e.databaseId:String(e.databaseId??""),conclusion:String(e.conclusion??""),workflow:String(e.workflowName??""),branch:String(e.headBranch??""),url:String(e.url??"")}}function ks(e){let t=JSON.parse(e);if(!zn(t))throw new Error("expected JSON object");return t}function zn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ip(e){let t=/^([1-9][0-9]*)(ms|s|m|h)?$/.exec(e);if(!t)throw new Error(`invalid timeout: ${e}`);let n=Number(t[1]),r=t[2]??"ms";return r==="ms"?n:r==="s"?n*1e3:r==="m"?n*6e4:n*60*6e4}function op(e){return e.startsWith("SIG")?e:`SIG${e}`}function Ua(e){return e%36e5===0?`${e/36e5}h`:e%6e4===0?`${e/6e4}m`:e%1e3===0?`${e/1e3}s`:`${e}ms`}function ap(e,t){let n=e.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${n}$`).test(t)}function cp(e){try{return process.kill(e,0),!0}catch{return!1}}async function up(e){await new Promise(t=>setTimeout(t,e))}var Ca,Jm,Ga=E(()=>{"use strict";Se();Ca={cmd:30*6e4,pr:60*6e4,run:60*6e4,release:2*60*6e4},Jm={cmd:"local-cmd:2-5s",pr:"github-pr:15-20s-backoff-jitter",run:"github-run:15-20s-backoff-jitter",release:"release:60s"}});var qa={};A(qa,{renderShellInit:()=>lp});function lp(e,t=Qt){if(e==="fish")return dp(t);if(e==="bash"||e==="zsh")return fp(e,t);throw new Error(`unsupported shell: ${e}`)}function dp(e){return["# rsp shell-init fish","# Opt-in only: source this output from config.fish; remove that line to restore raw commands.","if type -q rsp",...[...new Set(e.map(n=>n.command[0]).filter(Qn))].map(n=>` abbr --add --position command -- ${n} '${yp(`rsp ${n}`)}'`)," function rspx --description 'Run a shell pipeline through rsp exec'"," rsp exec -- $argv"," end","else"," # rsp is not on PATH; rsp abbreviations and rspx were not installed.","end",""].join(`
|
|
55
|
+
`)}function fp(e,t){let n=pp(t);return[`# rsp shell-init ${e}`,`# Opt-in only: source this output from ${e} startup files; remove that line to restore raw commands.`,...Yn("git",n.get("git")??[]),...Yn("gh",n.get("gh")??[]),...Yn("vitest",n.get("vitest")??[]),...Yn("cargo",n.get("cargo")??[]),"rspx() {"," if command -v rsp >/dev/null 2>&1; then",' command rsp exec -- "$@"'," return"," fi"," printf '%s\\n' 'rspx requires rsp with exec support on PATH' >&2"," return 127","}",""].join(`
|
|
56
|
+
`)}function Yn(e,t){if(t.length===0)return[];if(t.some(i=>i.command.length===1))return[`${e}() {`," if command -v rsp >/dev/null 2>&1; then",` command rsp ${e} "$@"`," return"," fi",` command ${e} "$@"`,"}"];let n=t.map(i=>i.command.slice(1)).filter(i=>i.length===1).map(i=>i[0]).filter(Qn),r=t.map(i=>i.command.slice(1)).filter(i=>i.length>1&&i.every(Qn)),s=[`${e}() {`," if ! command -v rsp >/dev/null 2>&1; then",` command ${e} "$@"`," return"," fi",' case "$1" in'];if(n.length>0){let i=n.map(o=>Ja(o)).join("|");s.push(` ${i}) command rsp ${e} "$@" ;;`)}for(let[i,o]of mp(r)){let a=o.map(c=>c.map((u,l)=>`[ "$${l+2}" = '${gp(u)}' ]`).join(" && ")).join(" || ");s.push(` ${Ja(i)}) if ${a}; then command rsp ${e} "$@"; else command ${e} "$@"; fi ;;`)}return s.push(` *) command ${e} "$@" ;;`," esac","}"),s}function mp(e){let t=new Map;for(let[n,...r]of e){if(!n)continue;let s=t.get(n)??[];s.push(r),t.set(n,s)}return t}function pp(e){let t=new Map;for(let n of e){let r=n.command[0];if(!r||!Qn(r))continue;let s=t.get(r)??[];s.push(n),t.set(r,s)}return t}function Qn(e){return!!(e&&/^[A-Za-z0-9_./:-]+$/.test(e))}function Ja(e){return e.replace(/[\\|)&;]/g,"\\$&")}function gp(e){return e.replace(/'/g,"'\\''")}function yp(e){return e.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}var Ha=E(()=>{"use strict";qn()});function Ts(e){if(typeof e!="object"||e===null)return!1;let t=e;return t.schemaVersion===1&&typeof t.id=="string"&&t.id.length>0&&typeof t.emitter=="string"&&t.emitter.length>0&&typeof t.occurredAt=="string"&&typeof t.taskClass=="string"&&hp(t.chosenOption)&&wp(t.outcome)&&bp(t.cost)}function hp(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.kind=="string"&&t.kind.length>0}function wp(e){return e==="success"||e==="failure"||e==="escalated"}function bp(e){if(typeof e!="object"||e===null)return!1;let t=e.signal;return t==="none"||t==="low"||t==="medium"||t==="high"||t==="unknown"}var Va=E(()=>{});import{createHash as _p}from"node:crypto";function sc(e,t){return new xs(e,t)}function Wa(e){let t=Number(e.red_entity_id??e.rid),n=Os(e.properties??e.PROPERTIES),r=ic(String(e.node_type??e.NODE_TYPE??n.kind??"note"));if(!Number.isFinite(t))return null;let s=String(n.id??e.label??e.LABEL??t),i=String(n.title??e.label??e.LABEL??s),o=String(n.content??""),a=Array.isArray(n.tags)?n.tags.map(String):[],c=Date.now();return{rid:t,label:String(e.label??e.LABEL??s),kind:r,properties:{...n,id:s,title:i,content:o,tags:a,created_at:Number(n.created_at??c),updated_at:Number(n.updated_at??n.created_at??c),hash:String(n.hash??"")}}}function Ka(e){let t=Number(e.red_entity_id??e.rid),n=Number(e.from??e.FROM??e.from_rid??e.source),r=Number(e.to??e.TO??e.to_rid??e.target),s=oc(String(e.label??e.LABEL??"related_to"));return!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)?null:{rid:t,kind:s,from_rid:n,to_rid:r,weight:Number(e.weight??1),properties:Os(e.properties??e.PROPERTIES)}}function Sp(e){let t=Number(e.red_entity_id??e.rid),n=Os(e.properties??e.PROPERTIES);return!Number.isFinite(t)||!Ts(n)?null:{rid:t,event:n}}function Os(e){return e==null?{}:typeof e=="string"?JSON.parse(e):Xn(e)?e:{}}function ic(e){let t=e==="contact"?"person":e;if(Rp.has(t))return t;throw new Error(`invalid Brain artifact kind: ${e}`)}function oc(e){if(Ep.has(e))return e;throw new Error(`invalid Brain connection kind: ${e}`)}function kp(e){return e==="hour"||e==="week"||e==="month"?e:"day"}function za(e){if(typeof e=="number")return e;let t=String(e??"");return/^\d+$/.test(t)?Number(t):t}function Ke(e){return Xn(e)?e:{}}function Ya(e,t){return Ke(e)[t]}function Qa(e,t){let n=e[t];if(typeof n!="string")throw new Error(`brain ${t} must be a string`);return n}function Xa(e,t){let n=e[t];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function Za(e){let t=Ke(e);return{excludeRids:Array.isArray(t.excludeRids)?t.excludeRids.map(Number).filter(Number.isFinite):void 0}}function L(e){return typeof e=="string"&&e.length>0?e:void 0}function Xn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function vs(e){return e!=null}function Tp(e){return Array.from(new Set(e.map(t=>t.trim()).filter(Boolean))).sort()}function vp(e){return _p("sha256").update(JSON.stringify(e)).digest("hex")}function xp(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"artifact"}function ec(e){return`artifact-hash:${e}`}function tc(e,t,n){return`connection:${e}:${t}:${n}`}function nc(){return"model-tier-bandit:v1"}function Op(e){return e.toLowerCase().split(/[^a-z0-9_]+/).map(t=>t.trim()).filter(t=>t.length>1)}function rc(e,t){let n=0,r=e.indexOf(t);for(;r>=0;)n++,r=e.indexOf(t,r+t.length);return n}function ac(e,t){let n=e.properties.title.toLowerCase(),r=e.properties.content.toLowerCase(),s=e.properties.tags.map(o=>o.toLowerCase()),i=e.kind.toLowerCase();return{lexical:t.reduce((o,a)=>o+rc(n,a)*3+rc(r,a),0),tags:t.reduce((o,a)=>o+s.reduce((c,u)=>c+(u===a?4:u.includes(a)||a.includes(u)?2:0),0),0),kind:t.reduce((o,a)=>o+(i===a?3:i.includes(a)||a.includes(i)?1:0),0)}}function Pp(e,t,n,r){let s=0;for(let i of n){let o=i.from_rid===e.rid?i.to_rid:i.to_rid===e.rid?i.from_rid:null;if(o==null)continue;let a=r.get(o);if(!a)continue;let c=cc({...ac(a,t),connections:0,vector:0}).total;c>0&&(s+=Math.min(c,12)*.35)}return We(s)}function cc(e){return{...e,lexical:We(e.lexical),tags:We(e.tags),kind:We(e.kind),connections:We(e.connections),vector:We(e.vector),total:We(e.lexical+e.tags+e.kind+e.connections+e.vector)}}function We(e){return Math.round(e*1e3)/1e3}function Dp(e,t){if(e.length<=220)return e;let n=e.toLowerCase(),r=t.map(i=>n.indexOf(i)).filter(i=>i>=0).sort((i,o)=>i-o)[0]??0,s=Math.max(0,r-80);return`${s>0?"...":""}${e.slice(s,s+220)}${s+220<e.length?"...":""}`}function Ip(e,t){let n=t.length===0?"none":t[0].score>=5?"high":t[0].score>=3?"medium":"low",r=t.length===0?[`No Brain artifacts matched "${e}".`]:[];return{answer:t.length===0?`Brain has no cited evidence for "${e}".`:`Brain found ${t.length} cited artifact${t.length===1?"":"s"} for "${e}".`,hits:t,citations:t.map((s,i)=>({ref:`B${i+1}`,rid:s.artifact.rid,id:s.artifact.properties.id,title:s.artifact.properties.title,kind:s.artifact.kind,score:s.score,score_breakdown:s.score_breakdown,excerpt:s.excerpt})),confidence:n,missing_evidence:r}}function $p(e){let t={};for(let n of e)t[n]=(t[n]??0)+1;return t}var se,Rp,Ep,xs,uc=E(()=>{"use strict";Va();se={artifacts:"brain_artifacts",connections:"brain_connections",outcomeEvents:"brain_outcome_events",kv:"brain_kv"},Rp=new Set(["pillar","decision","concept","question","playbook","task","event","pattern","hypothesis","fact","source","bookmark","note","reference","custom","project","idea","meeting","claim","organization","person"]),Ep=new Set(["supports","contradicts","depends_on","derived_from","related_to","part_of","preceded_by","followed_by","authored","tagged"]),xs=class{constructor(t,n){this.db=t;this.uri=n}async request(t,n){if(await this.bootstrap(),t==="status")return await this.status();if(t==="capture")return await this.capture(Ke(n));if(t==="getArtifact")return await this.getArtifact(Ya(n,"ridOrId"));if(t==="listArtifacts")return await this.listArtifacts();if(t==="search"){let r=Ke(n);return await this.search(Qa(r,"query"),Xa(r,"limit")??10,Za(r.options))}if(t==="think"){let r=Ke(n);return await this.think(Qa(r,"query"),Xa(r,"limit")??8,Za(r.options))}if(t==="link")return await this.link(Ke(n));if(t==="backlinks")return await this.backlinks(Ya(n,"target"));if(t==="listConnections")return await this.listConnections();if(t==="eventKpis")return await this.eventKpis(Ke(n));if(t==="appendOutcomeEvent")return await this.appendOutcomeEvent(n);if(t==="replayOutcomeEvents")return await this.replayOutcomeEvents();if(t==="loadModelTierBanditDocument")return await this.loadModelTierBanditDocument();if(t==="saveModelTierBanditDocument")return await this.saveModelTierBanditDocument(n);if(t==="refreshModelTierBanditDocument")return await this.refreshModelTierBanditDocument();throw new Error(`unsupported resident brain action: ${t}`)}async bootstrap(){await this.db.execute(`CREATE GRAPH IF NOT EXISTS ${se.artifacts}`),await this.db.execute(`CREATE GRAPH IF NOT EXISTS ${se.connections}`),await this.db.execute(`CREATE GRAPH IF NOT EXISTS ${se.outcomeEvents}`)}async status(){let t=await this.listArtifacts(),n=await this.listConnections();return{uri:this.uri,artifacts:t.length,connections:n.length,kinds:$p(t.map(r=>r.kind))}}async capture(t){let n=L(t.title)||"Untitled artifact",r=L(t.content);if(!r)throw new Error("brain capture requires content");let s=ic(L(t.kind)||"note"),i=Tp(Array.isArray(t.tags)?t.tags.map(String):[]),o=Date.now(),a=vp([s,n,r,i,L(t.sourcePath),L(t.sourceSession)]),c=await this.kv().get(ec(a));if(c!=null){let y=await this.getArtifact(Number(c));if(y)return y}let u=`${xp(n)}-${a.slice(0,8)}`,l={id:u,title:n,content:r,tags:i,source_agent:L(t.sourceAgent),source_runner:L(t.sourceRunner),source_session:L(t.sourceSession),source_path:L(t.sourcePath),created_at:o,updated_at:o,hash:a,metadata:Xn(t.metadata)?t.metadata:void 0},g=(await this.db.query(`INSERT INTO ${se.artifacts} NODE (label, node_type, hash, properties) VALUES ($1, $2, $3, $4) RETURNING *`,u,s,a,l)).rows[0];if(!g)throw new Error("INSERT artifact returned no row");let b=Wa(g);if(!b)throw new Error("INSERT artifact returned invalid row");return await this.kv().put(ec(a),b.rid),await this.materializeTagConnections(b),b}async getArtifact(t){let n=await this.listArtifacts();return typeof t=="number"?n.find(r=>r.rid===t)??null:n.find(r=>r.properties.id===t||r.label===t)??null}async listArtifacts(){return(await this.db.query(`SELECT * FROM ${se.artifacts}`)).rows.map(Wa).filter(vs)}async search(t,n,r={}){let s=Op(t),i=new Set(r.excludeRids??[]),o=await this.listArtifacts(),a=await this.listConnections(),c=new Map(o.map(u=>[u.rid,u]));return o.filter(u=>!i.has(u.rid)).map(u=>{let l=ac(u,s),d=cc({...l,connections:Pp(u,s,a,c),vector:0});return{artifact:u,score:d.total,score_breakdown:d,excerpt:Dp(u.properties.content,s)}}).filter(u=>u.score>0).sort((u,l)=>l.score-u.score||l.artifact.properties.updated_at-u.artifact.properties.updated_at).slice(0,Math.max(1,Math.min(100,n)))}async think(t,n,r={}){let s=(await this.search(t,Math.max(n*2,n+5),r)).slice(0,n);return Ip(t,s)}async link(t){let n=await this.getArtifact(za(t.from)),r=await this.getArtifact(za(t.to));if(!n)throw new Error(`Brain artifact not found: ${String(t.from)}`);if(!r)throw new Error(`Brain artifact not found: ${String(t.to)}`);let s=oc(L(t.kind)||"related_to"),i=await this.findConnection(n.rid,r.rid,s);if(i!=null){let l=(await this.listConnections()).find(d=>d.rid===i);if(l)return l}let o={reason:L(t.reason),confidence:L(t.confidence)||"explicit",created_at:Date.now(),metadata:Xn(t.metadata)?t.metadata:void 0},c=(await this.db.query(`INSERT INTO ${se.connections} EDGE (label, from, to, weight, properties) VALUES ($1, $2, $3, $4, $5) RETURNING *`,s,n.rid,r.rid,1,o)).rows[0];if(!c)throw new Error("INSERT connection returned no row");let u=Ka(c);if(!u)throw new Error("INSERT connection returned invalid row");return await this.kv().put(tc(n.rid,r.rid,s),u.rid),u}async backlinks(t){let n=await this.getArtifact(t);if(!n)throw new Error(`Brain artifact not found: ${t}`);return(await this.listConnections()).filter(r=>r.to_rid===n.rid)}async listConnections(){return(await this.db.query(`SELECT * FROM ${se.connections}`)).rows.map(Ka).filter(vs)}async eventKpis(t){let n=(await this.listArtifacts()).filter(i=>i.kind==="event"),r=kp(L(t.interval)||"day"),s=L(t.timeField)==="ingested"?"ingested":"event";return{kind:"event",interval:r,timeField:s,range:{from:null,to:null},total:n.length,series:[{group:null,total:n.length,buckets:[]}]}}async appendOutcomeEvent(t){if(!Ts(t))throw new Error("invalid Brain outcome event");if(!(await this.db.query(`INSERT INTO ${se.outcomeEvents} NODE (label, node_type, properties) VALUES ($1, $2, $3) RETURNING *`,t.id,`outcome_event.v${t.schemaVersion}`,t)).rows[0])throw new Error("INSERT outcome event returned no row");return t}async replayOutcomeEvents(){return(await this.db.query(`SELECT * FROM ${se.outcomeEvents}`)).rows.map(Sp).filter(vs).sort((n,r)=>n.rid-r.rid).map(({event:n})=>n)}async loadModelTierBanditDocument(){let t=await this.kv().get(nc());return typeof t=="string"?JSON.parse(t):t}async saveModelTierBanditDocument(t){return await this.kv().put(nc(),JSON.stringify(t)),t}async refreshModelTierBanditDocument(){let t=await this.loadModelTierBanditDocument();if(t!=null)return t;let n={schema_version:"brain.model-tier-bandit.v1",updated_at:new Date().toISOString(),arms:{}};return await this.saveModelTierBanditDocument(n),n}async materializeTagConnections(t){if(t.properties.metadata?.derived_kind!=="tag")for(let n of t.properties.tags){let r=await this.capture({title:n,content:`Tag: ${n}`,kind:"custom",tags:["tag"],metadata:{derived:!0,derived_kind:"tag"}});await this.link({from:t.rid,to:r.rid,kind:"tagged",confidence:"derived"})}}async findConnection(t,n,r){let s=await this.kv().get(tc(t,n,r));return s!=null?Number(s):null}kv(){return this.db.kv(se.kv)}}});var Ec={};A(Ec,{runResidentServer:()=>Up});import{randomUUID as _t}from"node:crypto";import{execFileSync as Ap,spawn as Np}from"node:child_process";import{existsSync as Bp}from"node:fs";import{mkdir as yc,rename as Cp,rm as lc,writeFile as hc}from"node:fs/promises";import{createServer as Lp}from"node:net";import{dirname as $s,join as nn}from"node:path";import{fileURLToPath as Mp,pathToFileURL as jp}from"node:url";async function Up(e){await yc($s(e.socketPath),{recursive:!0});let t=Zp();Xp();let n=e.telemetryDrainTimeoutMs??wc,r={kind:"opening",startedAt:process.hrtime.bigint()},s,i=!1,o=e.idleMs??In,a,c,u=!1,l=new Set,d=e.telemetryDrainIntervalMs??3e4,g=Lp(R=>{l.add(R),R.once("close",()=>l.delete(R)),y(),og(R,async v=>{y();let $=await ag(r,v,e.storeUri,e.residentVersion??"0.0.0-dev"),j={id:v.id,ok:!0,value:$,storeOpenCount:r.kind==="ready"?r.storeOpenCount:void 0,storeElapsedMs:r.kind==="ready"?r.storeElapsedMs:void 0};Rc(R,j),v.op==="handover"&&setImmediate(()=>b())})});function b(){i=!0,u=!0,c=Qp(c),g.close();for(let R of l)R.destroy()}function y(){r.kind!=="opening"&&(a&&clearTimeout(a),a=setTimeout(()=>{b()},o),a.unref())}let p=["SIGINT","SIGTERM"].map(R=>{let v=()=>{Zn(),g.close();for(let $ of l)$.destroy();setTimeout(()=>process.exit(0),1e3)};return process.once(R,v),{signal:R,handler:v}});await new Promise((R,v)=>{g.once("error",v),g.listen(e.socketPath,()=>{g.off("error",v),R()})}),(async()=>{let R=process.hrtime.bigint();process.env.RSP_TEST_HANG_RESIDENT_STORE_OPEN==="1"&&await new Promise(()=>{});let v=Number(process.env.RSP_TEST_DELAY_RESIDENT_STORE_OPEN_MS??"0");Number.isFinite(v)&&v>0&&await new Promise(I=>setTimeout(I,v));let $=await Gt.open({uri:e.storeUri,ttlDays:e.ttlDays,ephemeralTtlHours:e.ephemeralTtlHours,byteBudget:e.byteBudget,allowResidentOpen:!0}),j=Number(process.hrtime.bigint()-R)/1e6,z=new Is($,{rootDir:e.rootDir??process.cwd(),ttlDays:e.telemetryTtlDays??Pn,byteBudget:e.telemetryByteBudget??e.byteBudget??Dn});if(i){await $.close();return}if(await Ps(z,n),i){await $.close();return}r={kind:"ready",store:$,telemetry:z,storeOpenCount:1,storeElapsedMs:j},s=setInterval(()=>{let I=r.kind==="ready"?r:void 0;I&&Ps(I.telemetry,n)},d),s.unref(),y()})().catch(R=>{r={kind:"failed",error:R instanceof Error?R:new Error(String(R))},y()}),e.pidPath&&await hc(e.pidPath,`${process.pid}
|
|
57
|
+
`,{encoding:"utf8",mode:384});let S=e.residentVersion??"0.0.0-dev",m=e.registryPath??nn(e.rootDir??process.cwd(),".red","tmp","rsp-resident.pid.json");try{await Tn(m,{socket_path:e.socketPath,store_uri:e.storeUri,resident_version:S})}catch{}await new Promise(R=>g.once("close",R)),a&&clearTimeout(a),s&&clearInterval(s),await lc(e.socketPath,{force:!0});let k=r;k.kind==="ready"&&(await Ps(k.telemetry,n,u),await k.store.close()),c&&clearTimeout(c);for(let{signal:R,handler:v}of p)process.off(R,v);t?.kill("SIGTERM"),Zn(),e.pidPath&&await lc(e.pidPath,{force:!0}),await vn(m)}async function Vp(e,t,n=new Date){let r=await Fn(e,1,n),s=n.toISOString().slice(0,10),i=r.savings.daily_tokens_saved.find(u=>u.date===s)?.tokens_saved??0,o=r.savings.tokens_saved>0?i/r.savings.tokens_saved*r.savings.dollars_saved_estimate_usd:0,a=nn(t,qp),c=`${a}.${process.pid}.${Date.now()}.tmp`;await yc($s(a),{recursive:!0}),await hc(c,JSON.stringify({version:1,tokens_saved_today:i,dollars_saved_today_usd:Math.round(o*1e6)/1e6,show_total_today:r.health.show_total,show_hit_rate:r.health.show_total>0?r.health.show_hit_rate:void 0,decisions:r.decisions.seen>0?{seen:r.decisions.seen,contributed:r.decisions.contributed}:void 0,updated_at:n.toISOString()}),{encoding:"utf8",mode:384}),await Cp(c,a)}async function Ps(e,t=wc,n=!1){try{n&&process.env.RSP_TEST_HANG_TELEMETRY_DRAIN==="1"&&await new Promise(()=>{}),await _c(e.drainAndSweep(),t,"telemetry drain timed out")}catch(r){process.stderr.write(`rsp resident: telemetry drain failed: ${r instanceof Error?r.message:String(r)}
|
|
58
|
+
`)}}async function Wp(e){let t=[];for(let n of Hp){let r=await Kp(e,n);r.ok||(r.previousModel&&(r.previousModel!=="collection"&&await zp(e,n,r.previousModel),t.push({collection:n,previousModel:r.previousModel})),await e.query(`CREATE KV IF NOT EXISTS ${bc(n)}`))}return t}async function Kp(e,t){try{return await e.kv(t).get("__rsp_telemetry_model_probe__"),{ok:!0}}catch(n){let r=n instanceof Error?n.message:String(n);if(/\bnot found\b/i.test(r))return{ok:!1,previousModel:null};let s=r.match(/model mismatch: expected kv, got ([A-Za-z_][A-Za-z0-9_]*)/i);if(s?.[1])return{ok:!1,previousModel:s[1].toLowerCase()};if(/does not allow 'kv' operations/i.test(r))return{ok:!1,previousModel:"collection"};let i=(await e.list()).find(o=>o.name===t);if(i&&i.model!=="kv")return{ok:!1,previousModel:i.model};throw n}}async function zp(e,t,n){let r=Yp(n);if(!r)throw new Error(`cannot self-heal telemetry collection ${t}: unsupported model ${n}`);await e.query(`DROP ${r} ${bc(t)}`)}function Yp(e){let t=e.toLowerCase();return t==="table"?"TABLE":t==="kv"?"KV":t==="graph"?"GRAPH":t==="queue"?"QUEUE":t==="document"||t==="documents"?"DOCUMENT":null}function bc(e){if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e))throw new Error(`invalid telemetry collection name: ${e}`);return e}function Qp(e){return e&&clearTimeout(e),setTimeout(()=>{Zn(),process.exit(0)},Jp)}function Xp(){dc||(dc=!0,process.on("exit",()=>Zn()))}function Zp(){if(process.platform==="win32")return;let t=Np(process.execPath,["-e",`
|
|
58
59
|
const { execFileSync } = require("node:child_process");
|
|
59
60
|
const parentPid = Number(process.argv[1]);
|
|
60
61
|
const known = new Set();
|
|
@@ -95,62 +96,63 @@ const timer = setInterval(() => {
|
|
|
95
96
|
clearInterval(timer);
|
|
96
97
|
process.exit(0);
|
|
97
98
|
}, 500);
|
|
98
|
-
`,String(process.pid)],{detached:!0,stdio:"ignore"});return t.unref(),t}function
|
|
99
|
-
`);if(
|
|
100
|
-
`)}catch{}}async function
|
|
101
|
-
`).filter(
|
|
99
|
+
`,String(process.pid)],{detached:!0,stdio:"ignore"});return t.unref(),t}function Zn(){for(let e of eg())try{process.kill(e,"SIGTERM")}catch{}}function eg(){if(process.platform==="win32")return[];let e="";try{e=Ap("ps",["-eo","pid=,ppid=,args="],{encoding:"utf8"})}catch{return[]}let t=[];for(let n of e.split(/\n/)){let r=/^\s*(\d+)\s+(\d+)\s+([\s\S]*)$/.exec(n);if(!r)continue;let s=Number(r[1]),i=Number(r[2]),o=r[3]??"";i===process.pid&&/(^|\s)\S*red(?:\.exe)?\s+rpc\s+--stdio(\s|$)/.test(o)&&t.push(s)}return t}async function tg(e){if(e.collection!==Oe)return e;let t=await fc(e.raw_text,pc(e.raw_bytes)),n=await fc(e.emitted_text,pc(e.emitted_bytes)),{raw_text:r,emitted_text:s,...i}=e;return{...i,tokens_raw:t.tokens,tokens_emitted:n.tokens,estimated:t.estimated||n.estimated}}async function fc(e,t){if(typeof e=="string"){let n=Buffer.byteLength(e,"utf8");if(n<=Fp)try{return await _c((async()=>({tokens:(await ng())("cl100k_base").encode(e).length,estimated:!1}))(),Gp,"telemetry tokenization timed out")}catch{return{tokens:Math.ceil(n/4),estimated:!0}}return{tokens:Math.ceil(n/4),estimated:!0}}return t!=null?{tokens:Math.ceil(t/4),estimated:!0}:{tokens:0,estimated:!1}}async function ng(){return mc??=import(jp(rg()).href).then(e=>{let t=e.getEncoding;if(!t)throw new Error("js-tiktoken getEncoding export not found");return t}),await mc}function rg(){let e=$s(Mp(import.meta.url)),n=[nn(e,"..","node_modules","js-tiktoken","dist","index.js"),nn(e,"..","apps","rsp","node_modules","js-tiktoken","dist","index.js")].find(r=>Bp(r));if(!n)throw new Error("js-tiktoken dependency not found");return n}function pc(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:void 0}function M(e){return typeof e=="string"&&e.trim()!==""?e:void 0}function Ds(e){return e.trim().split(/\s+/).filter(Boolean)[0]??"unknown"}async function _c(e,t,n){let r;try{return await Promise.race([e,new Promise((s,i)=>{r=setTimeout(()=>i(new Error(n)),t),r.unref()})])}finally{r&&clearTimeout(r)}}function sg(e){try{return JSON.parse(e)}catch{return e}}function ig(e){return gc(e)&&e.version===1&&Array.isArray(e.records)&&e.records.every(t=>gc(t)&&(t.collection===K||t.collection===we||t.collection===Oe||t.collection===Pe)&&typeof t.key=="string"&&typeof t.created_at=="string"&&typeof t.expires_at=="string"&&typeof t.bytes=="number")}function gc(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function og(e,t){let n="";e.setEncoding("utf8"),e.on("error",()=>{}),e.on("data",r=>{n+=r;let s=n.indexOf(`
|
|
100
|
+
`);if(s<0)return;let i=n.slice(0,s);e.pause(),(async()=>{let o;try{o=JSON.parse(i),await t(o)}catch(a){let u={id:o?.id??_t(),ok:!1,error:a instanceof Error?a.message:String(a)};Rc(e,u)}finally{e.end()}})()})}function Rc(e,t){if(!(e.destroyed||!e.writable))try{e.write(`${JSON.stringify(t)}
|
|
101
|
+
`)}catch{}}async function ag(e,t,n,r){if(t.op==="handover")return{handover:!0,version:r,clientVersion:t.clientVersion};if(e.kind==="opening")throw new Error("rsp resident store is not ready");if(e.kind==="failed")throw new Error(`rsp resident store failed to open: ${e.error.message}`);let s=e.store;if(t.op==="ping")return{pong:!0,version:r};if(t.op==="stats")return await s.stats();if(t.op==="accounting-stats"){let i=s.redDb();if(!i)throw new Error("rsp accounting stats require the shared RedDB store");return await ns(i,t.byteBudget)}if(t.op==="telemetry-stats"){let i=s.redDb();if(!i)throw new Error("rsp telemetry stats require the shared RedDB store");return await Fn(i,t.sinceDays)}if(t.op==="telemetry-gains"){let i=s.redDb();if(!i)throw new Error("rsp telemetry gains require the shared RedDB store");return await rs(i,t.sinceDays)}if(t.op==="mint")return{handle:await s.mint(Buffer.from(t.original,"base64"),t.meta)};if(t.op==="get")return ug(await s.get(t.handle));if(t.op==="memory")return await s.memory(t.action,t.payload);if(t.op==="brain")return await cg(s,n,t.action,t.payload);throw new Error(`unsupported resident op: ${t.op??"unknown"}`)}async function cg(e,t,n,r){let s=e.redDb();if(!s)throw new Error("resident brain operations require the shared RedDB store");return await sc(s,t).request(n,r)}function ug(e){return e?"status"in e?e:{...e,original:e.original.toString("base64"),original_encoding:"base64"}:null}var Fp,Gp,wc,Jp,qp,Hp,Is,dc,mc,Sc=E(()=>{"use strict";xn();qe();uc();Ve();re();Fp=256*1024,Gp=500,wc=2e3,Jp=Math.max(1,Number(process.env.RSP_TEST_IDLE_SHUTDOWN_WATCHDOG_MS??"10000")),qp=nn(".red","tmp","rsp-status-summary.json"),Hp=[K,we,Oe,Pe,Wt],Is=class{constructor(t,n){this.store=t;this.opts=n;this.pendingHeals=[...n.bootHeals??[]]}running;pending=!1;pendingHeals;async drainAndSweep(){if(this.running){this.pending=!0,await this.running;return}this.running=(async()=>{do this.pending=!1,await this.drainAndSweepOnce();while(this.pending)})().finally(()=>{this.running=void 0}),await this.running}async drainAndSweepOnce(){let t=this.store.redDb();if(!t)return;let n=await Wp(t);n.unshift(...this.pendingHeals),this.pendingHeals=[];let r=await this.readIndex(t),s=r.records.length,i=[...r.records];for(let a of n)i.push(await this.writeDrainDegradation(t,{reason:"telemetry collection model mismatch",command:"rsp resident telemetry drain",source_collection:a.collection,error:`expected kv, got ${a.previousModel}`,bytes:0}));await es(this.opts.rootDir,async a=>{let c=ts(a);if(!c){let u=await this.writeDrainDegradation(t,{reason:"telemetry parse failed",command:"unknown",bytes:Buffer.byteLength(a,"utf8")});return i.push(u),!0}try{let u=await this.writeEvent(t,c);i.push(u);let l=await this.writeAccountingMirror(t,c);return l&&i.push(l),!0}catch(u){let l=await this.writeDrainDegradation(t,{reason:"telemetry event dropped",command:M(c.command)||"unknown",source_id:M(c.id),source_collection:M(c.collection),error:u instanceof Error?u.message:String(u),bytes:Buffer.byteLength(a,"utf8")});return i.push(l),!0}});let o=i.length>s;await this.prune(t,{version:1,records:i},o),await Vp(t,this.opts.rootDir)}async writeEvent(t,n){let r=new Date,s=typeof n.created_at=="string"?n.created_at:r.toISOString(),i=new Date(Date.parse(s)+this.opts.ttlDays*24*60*60*1e3).toISOString(),o=typeof n.id=="string"&&n.id.trim()!==""?n.id:_t(),a={...await tg(n),id:o,created_at:s,expires_at:i};return await t.kv(n.collection).put(o,a),{collection:n.collection,key:o,created_at:s,expires_at:i,bytes:n.collection===K?0:typeof n.bytes=="number"&&Number.isFinite(n.bytes)?Math.max(0,n.bytes):Buffer.byteLength(JSON.stringify(a),"utf8")}}async writeAccountingMirror(t,n){return n.collection===K||n.accounting_recorded===!0?null:n.collection===Oe?await this.writeEvent(t,{collection:K,id:`mirror:${M(n.id)||_t()}`,created_at:M(n.created_at)||M(n.ts)||new Date().toISOString(),event_type:"invocation",command:M(n.command)||"unknown",command_class:Ds(M(n.command)||"unknown"),wrapper:n.wrapper,loss:n.loss,elided:n.elided,raw_bytes:n.raw_bytes,emitted_bytes:n.emitted_bytes,tokens_raw:n.tokens_raw,tokens_emitted:n.tokens_emitted,estimated:n.estimated,wrapper_ms:n.wrapper_ms,store_open_count:n.store_open_count,store_elapsed_ms:n.store_elapsed_ms}):n.collection===Pe?await this.writeEvent(t,{collection:K,id:`mirror:${M(n.id)||_t()}`,created_at:M(n.created_at)||M(n.ts)||new Date().toISOString(),event_type:"invocation",command:M(n.command)||"unknown",command_class:Ds(M(n.command)||"unknown"),loss:"lossless",raw_bytes:0,emitted_bytes:0,degradation_reason:M(n.reason)||"unknown"}):null}async writeDrainDegradation(t,n){let r=await this.writeEvent(t,{collection:Pe,id:_t(),created_at:new Date().toISOString(),reason:n.reason,command:n.command,bytes:n.bytes,source_id:n.source_id,source_collection:n.source_collection,error:n.error});return await this.writeEvent(t,{collection:K,id:`mirror:${_t()}`,created_at:r.created_at,event_type:"invocation",command:n.command,command_class:Ds(n.command),loss:"lossless",raw_bytes:0,emitted_bytes:0,degradation_reason:n.reason,source_id:n.source_id,source_collection:n.source_collection,error:n.error}),r}async readIndex(t){let n=await t.kv(Wt).get("index:v1"),r=typeof n=="string"?sg(n):n;return ig(r)?r:{version:1,records:[]}}async writeIndex(t,n){await t.kv(Wt).put("index:v1",n)}async prune(t,n,r=!1){let s=Date.now(),i=[];for(let a of n.records)Date.parse(a.expires_at)<=s?await t.kv(a.collection).delete(a.key):i.push(a);let o=i.reduce((a,c)=>a+c.bytes,0);for(i.sort((a,c)=>a.created_at.localeCompare(c.created_at));o>this.opts.byteBudget&&i.length>0;){let a=i.shift();o-=a.bytes,await t.kv(a.collection).delete(a.key)}(r||i.length<n.records.length)&&await this.writeIndex(t,{version:1,records:i})}};dc=!1});function Ie(e){let t=[],n;for(let r=0;r<e.length;r++){let s=e[r];if(s==="--query"){n=e[++r];continue}if(s.startsWith("--query=")){n=s.slice(8);continue}t.push(s)}return{argv:t,query:n?.trim()||void 0}}function kc(e,t){if(!t)return!0;let n=As(e).toLowerCase();return t.toLowerCase().split(/\s+/).filter(Boolean).every(r=>n.includes(r))}function C(e,t){return t?e.filter(n=>kc(n,t)):[...e]}function Rt(e,t){if(!t)return e;let r=e.split(`
|
|
102
|
+
`).filter(s=>s&&kc(s,t));return r.length>0?`${r.join(`
|
|
102
103
|
`)}
|
|
103
|
-
`:""}function
|
|
104
|
-
`)return{stdout:Buffer.from(
|
|
105
|
-
`;return{stdout:Buffer.from(`${
|
|
106
|
-
${l}`),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal,payload:a.payload,mintedHandle:u,bytesElided:c,rowsElided:a.rowsElided,rawOutput:Buffer.from(o)}}function
|
|
107
|
-
`;let
|
|
108
|
-
`)[0]??"",r=/^\[([^ ]+) ([0-9a-f]+)\] (.+)$/.exec(n),
|
|
109
|
-
`).filter(Boolean),r=n.find(c=>c.startsWith("To "))?.slice(3)??"",
|
|
110
|
-
`),
|
|
111
|
-
`).filter(Boolean).map(o=>{let[a,c,u,l,d,
|
|
112
|
-
`)){let
|
|
113
|
-
`).length:0,files:
|
|
114
|
-
`;return{stdout:Buffer.from(`${
|
|
115
|
-
${
|
|
104
|
+
`:""}function $e(e,t){let n=t.filter(Boolean);return n.length===0?e:{...e,help:n}}function As(e){return Array.isArray(e)?e.map(As).join(" "):typeof e=="object"&&e!==null?Object.values(e).map(As).join(" "):String(e??"")}var er=E(()=>{"use strict"});var Ns={};A(Ns,{DEFAULT_RSP_HEAVY_GIT_BYTE_THRESHOLD:()=>fe,GIT_LOG_MACHINE_FIELDS:()=>Tc,recoveryInstruction:()=>X,renderGitContract:()=>vc,runGitWrapper:()=>dg});import{spawn as lg}from"node:child_process";async function dg(e,t){let n=xc(e),r=Oc(n.argv),s=await gg(r,n.argv.slice(1));return vc(e,s,t)}async function vc(e,t,n){let r=xc(e);if((t.status??0)!==0||t.signal)return{stdout:Buffer.from(Rt(t.stdout,r.query)),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal};let s=Oc(r.argv),i=yg(s,r.argv,t.stdout,r.query);if(i===`git empty
|
|
105
|
+
`)return{stdout:Buffer.from(i),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal};let o=O(i);if(fg(s,o,r.full,n))return{stdout:Buffer.from(o),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal,payload:i};let a=xg(i);if(!a)return{stdout:Buffer.from(o),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal,payload:i};let c=Buffer.byteLength(o),u=await n.store?.mint(Buffer.from(o),{command:e.join(" "),loss:{level:"terse",bytes_elided:c}});if(!u)throw new Error("terse git output requires an elision store");let l=`\u2026 elided ${a.rowsElided} rows (+${c}) \u2014 ${X(u)}
|
|
106
|
+
`;return{stdout:Buffer.from(`${O(a.payload)}
|
|
107
|
+
${l}`),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal,payload:a.payload,mintedHandle:u,bytesElided:c,rowsElided:a.rowsElided,rawOutput:Buffer.from(o)}}function X(e){return e.startsWith("el:")?`rsp show ${e}`:e}function xc(e){let t=Ie(e),n=[],r=!1;for(let s of t.argv){if(s==="--full"){r=!0;continue}n.push(s)}return{argv:n,query:t.query,full:r}}function fg(e,t,n,r){if(r.level==="terse")return!1;if(n||r.level==="full"||!mg(e)||r.level!=="lossless")return!0;let s=vg(r.heavyGitByteThreshold,fe);return Buffer.byteLength(t)<=s}function mg(e){return e==="diff"||e==="log"||e==="blame"||e==="show"}function Oc(e){if(e[0]!=="git")throw new Error("expected rsp git <subcommand>");let t=e[1];if(t==="status"||t==="log"||t==="diff"||t==="commit"||t==="push"||t==="blame"||t==="branch"||t==="show")return t;throw new Error(`unsupported git subcommand: ${t??""}`)}function pg(e,t){let n=t.slice(1);switch(e){case"status":return["status","--porcelain=v2","-z","-b",...n];case"log":return["log",`--format=%x1e${Tc.join("%x1f")}`,"-z",...n];case"diff":return["diff","--numstat","-z",...n];case"commit":return["commit",...n];case"push":return["push","--porcelain",...n];case"blame":return["blame","--line-porcelain",...n];case"branch":return["branch","--format=%(HEAD)%00%(refname:short)%00%(objectname:short)%00%(upstream:short)%00%(worktreepath)%00%(contents:subject)",...n];case"show":return["show","--format=%x1e%H%x1f%h%x1f%an%x1f%aI%x1f%s%x1f%b%x1e","--stat",...n]}}async function gg(e,t){let n=lg("git",pg(e,t),{stdio:["ignore","pipe","pipe"]}),r=[],s=[];return n.stdout.on("data",i=>r.push(i)),n.stderr.on("data",i=>s.push(i)),await new Promise((i,o)=>{n.on("error",o),n.on("close",(a,c)=>{i({stdout:Buffer.concat(r).toString("utf8"),stderr:Buffer.concat(s).toString("utf8"),status:a,signal:c})})})}function yg(e,t,n,r){switch(e){case"status":return hg(t,n,r);case"log":return wg(t,n,r);case"diff":return bg(t,n,r);case"commit":return Ae(_g(t,n),r,["rsp git status --query <path-or-state>"]);case"push":return Ae(Rg(t,n),r,["rsp gh pr list --query <branch>"]);case"blame":return Eg(t,n,r);case"branch":return Sg(t,n,r);case"show":return kg(t,n,r)}}function hg(e,t,n){let r="",s=[];for(let a of t.split("\0")){if(!a)continue;if(a.startsWith("# branch.head ")){r=a.slice(14);continue}if(!a.startsWith("1 "))continue;let c=a.split(" "),u=c[1]??"..",l=c.slice(8).join(" ");s.push({path:l,index:u[0]??".",worktree:u[1]??".",state:Tg(u)})}if(s.length===0)return`git empty
|
|
108
|
+
`;let i=C(s,n),o=Pc(i,"state");return Ae({command:e.join(" "),branch:r,rows:i,summary:`${n?`${i.length}/${s.length}`:i.length} changes: ${o.added??0} added, ${o.modified??0} modified, ${o.deleted??0} deleted`},n,["rsp git diff --query <path>","rsp git log --query <subject>"])}function wg(e,t,n){let r=t.split("\0").filter(Boolean).map(i=>{let o=i.replace(/^\x1e/,"").split("");return{short:o[0]??"",author:o[1]??"",date:o[2]??"",subject:o[3]??""}}),s=C(r,n);return Ae({command:e.join(" "),commits:s,summary:`${n?`${s.length}/${r.length}`:s.length} commits`},n,["rsp git diff --query <path>","rsp gh pr list --query <branch>"])}function bg(e,t,n){let s=t.split("\0").filter(Boolean).map(a=>{let[c,u,l]=a.split(" ");return{path:l??"",added:c==="-"?null:Number(c??0),deleted:u==="-"?null:Number(u??0)}}),i=C(s,n),o=i.reduce((a,c)=>(a.added+=typeof c.added=="number"?c.added:0,a.deleted+=typeof c.deleted=="number"?c.deleted:0,a),{added:0,deleted:0});return Ae({command:e.join(" "),files:i,summary:`${n?`${i.length}/${s.length}`:i.length} files, +${o.added} -${o.deleted}`},n,["rsp git status --query <path>","rsp git log --query <subject>"])}function _g(e,t){let n=t.split(`
|
|
109
|
+
`)[0]??"",r=/^\[([^ ]+) ([0-9a-f]+)\] (.+)$/.exec(n),s=/(\d+) files? changed/.exec(t),i=/(\d+) insertions?\(\+\)/.exec(t),o=/(\d+) deletions?\(-\)/.exec(t),a=r?.[1]??"",c=r?.[2]??"",u=Number(s?.[1]??0),l=Number(i?.[1]??0),d=Number(o?.[1]??0);return{command:e.join(" "),branch:a,commit:c,subject:r?.[3]??"",files_changed:u,insertions:l,deletions:d,summary:`commit ${c} on ${a}: ${u} files, +${l} -${d}`}}function Rg(e,t){let n=t.split(`
|
|
110
|
+
`).filter(Boolean),r=n.find(c=>c.startsWith("To "))?.slice(3)??"",s=n.filter(c=>c.includes(" ")).map(c=>{let[u,l,d=""]=c.split(" "),[g,b]=(l??"").split(":");return{flag:u??"",from:g??"",to:b??"",summary:d}}),i=s.find(c=>c.flag!=="=")??s[0],o=i?.to.startsWith("refs/heads/")?i.to.slice(11):i?.to??"",a=i?.summary.includes("..")?1:0;return{command:e.join(" "),remote:r,refs:s,summary:`pushed ${o} -> ${r} +${a} commits`}}function Eg(e,t,n){let r=t.split(`
|
|
111
|
+
`),s=[],i=null;for(let c of r){let u=/^([0-9a-f]{8,40}) \d+ (\d+)(?: \d+)?$/.exec(c);if(u){i={commit:u[1]??"",finalLine:Number(u[2]??0),author:"",path:""};continue}if(!i)continue;if(c.startsWith("author ")){i.author=c.slice(7);continue}if(c.startsWith("filename ")){i.path=c.slice(9);continue}if(!c.startsWith(" "))continue;let l=s.at(-1),d=i.commit.slice(0,12);l&&l.commit===d&&l.author===i.author&&l.path===i.path&&l.line_end+1===i.finalLine?l.line_end=i.finalLine:s.push({line_start:i.finalLine,line_end:i.finalLine,author:i.author,commit:d,path:i.path}),i=null}let o=C(s,n),a=Pc(o,"author");return Ae({command:e.join(" "),ranges:o,authors:a,summary:`${n?`${o.length}/${s.length}`:o.length} ranges, ${Object.keys(a).length} authors`},n,["rsp git show --query <commit>","rsp git log --query <author>"])}function Sg(e,t,n){let r=t.split(`
|
|
112
|
+
`).filter(Boolean).map(o=>{let[a,c,u,l,d,g]=o.split("\0");return{current:a==="*",name:c??"",commit:u??"",upstream:l||null,worktree:d||null,subject:g??""}}),s=C(r,n),i=s.find(o=>o.current)?.name??"";return Ae({command:e.join(" "),branches:s,summary:`${n?`${s.length}/${r.length}`:s.length} branches${i?`, current ${i}`:""}`},n,["rsp git log --query <branch>","rsp gh pr list --query <branch>"])}function kg(e,t,n){let r=t.indexOf(""),s=r>=0?t.indexOf("",r+1):-1,i=r>=0&&s>=0?t.slice(r+1,s):"",o=s>=0?t.slice(s+1):t,[a,c,u,l,d,g=""]=i.split(""),b=[];for(let m of o.split(`
|
|
113
|
+
`)){let k=/^\s*(.+?)\s+\|\s+(\d+)\s+([+\-]+|Bin.*)$/.exec(m);if(!k)continue;let R=k[3]??"";b.push({path:(k[1]??"").trim(),changed:Number(k[2]??0),added:[...R].filter(v=>v==="+").length,deleted:[...R].filter(v=>v==="-").length,binary:R.startsWith("Bin")})}let y=C(b,n),f=0,p=0,S=0;for(let m of y)f+=typeof m.changed=="number"?m.changed:0,p+=typeof m.added=="number"?m.added:0,S+=typeof m.deleted=="number"?m.deleted:0;return Ae({command:e.join(" "),commit:a??"",short:c??"",author:u??"",date:l??"",subject:d??"",body_lines:g.trim()?g.trim().split(`
|
|
114
|
+
`).length:0,files:y,summary:`${n?`${y.length}/${b.length}`:y.length} files, ${f} changed, +${p} -${S}`},n,["rsp git blame --query <author-or-path>","rsp git diff --query <path>"])}function Ae(e,t,n){return t?$e(e,n):e}function Tg(e){return e.includes("A")?"added":e.includes("D")?"deleted":e.includes("R")?"renamed":e.includes("M")?"modified":"changed"}function Pc(e,t){let n={};for(let r of e){let s=String(r[t]??"");n[s]=(n[s]??0)+1}return n}function vg(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}function xg(e){for(let t of["rows","commits","files","refs","ranges","branches"]){let n=e[t];if(Array.isArray(n)&&n.length>1)return{payload:{...e,[t]:n.slice(0,1)},rowsElided:n.length-1}}return null}var Tc,ze=E(()=>{"use strict";Se();re();er();re();Tc=["%h","%an","%as","%s"]});var Ms={};A(Ms,{renderGhContract:()=>$c,runGhWrapper:()=>Ig});import{spawn as Ic}from"node:child_process";async function Ig(e,t){let n=Ac(e),r=await Ag(n);return $c(e,r,t)}async function $c(e,t,n){let r=Ie(e);if((t.status??0)!==0||t.signal)return{stdout:Buffer.from(Rt(t.stdout,r.query)),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal};let s=Ac(e),i=tr(t.stdout),o=Bg(s,e,i);if(typeof o=="string")return{stdout:Buffer.from(o),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal};let a=Gg(o);if(a){if(!n.store)throw new Error("truncated gh output requires an elision store");let y=await n.store.mint(Buffer.from(a.original),{command:e.join(" "),loss:{level:s.full?"brief":n.level,bytes_elided:a.bytes}});a.target.truncated.handle=y}let c=a?.target.truncated.handle||void 0,u=O(o);if(n.level!=="terse")return{stdout:Buffer.from(u),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal,payload:o,mintedHandle:c,bytesElided:a?.bytes};let l=Jg(o);if(!l)return{stdout:Buffer.from(u),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal,payload:o,mintedHandle:c,bytesElided:a?.bytes};let d=Buffer.byteLength(u),g=await n.store?.mint(Buffer.from(u),{command:e.join(" "),loss:{level:"terse",bytes_elided:d}});if(!g)throw new Error("terse gh output requires an elision store");let b=`\u2026 elided ${l.rowsElided} rows (+${d}) \u2014 ${X(g)}
|
|
115
|
+
`;return{stdout:Buffer.from(`${O(l.payload)}
|
|
116
|
+
${b}`),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal,payload:l.payload,mintedHandle:g,bytesElided:d,rowsElided:l.rowsElided,rawOutput:Buffer.from(u)}}function Ac(e){let t=Ie(e);if(t.argv[0]!=="gh")throw new Error("expected rsp gh <surface> <subcommand>");let n=t.argv[1],r=t.argv[2];if(!(n==="pr"||n==="issue"||n==="run"))throw new Error(`unsupported gh surface: ${n??""}`);let s=n==="pr"&&r&&r!=="list"&&r!=="view";if(!(r==="list"||r==="view"||s))throw new Error(`unsupported gh subcommand: ${r??""}`);let i=[],o=!1,a=!1;for(let u of t.argv.slice(3))u==="--full"?o=!0:u==="--wide"?a=!0:i.push(u);return{kind:n,action:s?"combined":r==="list"?"list":"view",target:s?r:void 0,full:o,wide:a,passthrough:i,query:t.query}}function $g(e){if(e.action==="combined")throw new Error("combined gh command uses multiple machine calls");let t=`${e.kind}:${e.action}`,n=e.wide?Pg[t]:Og[t];return[e.kind,e.action,...e.passthrough,"--json",n.join(",")]}async function Ag(e){if(e.action==="combined")return await Ng(e);let t=Ic("gh",$g(e),{stdio:["ignore","pipe","pipe"]}),n=[],r=[];return t.stdout.on("data",s=>n.push(s)),t.stderr.on("data",s=>r.push(s)),await new Promise((s,i)=>{t.on("error",i),t.on("close",(o,a)=>{s({stdout:Buffer.concat(n).toString("utf8"),stderr:Buffer.concat(r).toString("utf8"),status:o,signal:a})})})}async function Ng(e){let t=e.target??"",n=["number","title","state","body","author","labels","url","baseRefName","headRefName"],r=["comments"],[s,i,o]=await Promise.all([Bs(["pr","view",t,"--json",n.join(",")]),Bs(["pr","checks",t,"--json","name,state,bucket,conclusion,link,startedAt,completedAt,workflow"]),Bs(["pr","view",t,"--comments","--json",r.join(",")])]),a=[s,i,o].find(c=>(c.status??0)!==0||c.signal);return a||{stdout:JSON.stringify({view:tr(s.stdout),checks:tr(i.stdout),comments:tr(o.stdout)}),stderr:[s.stderr,i.stderr,o.stderr].filter(Boolean).join(""),status:0,signal:null}}async function Bs(e){let t=Ic("gh",e,{stdio:["ignore","pipe","pipe"]}),n=[],r=[];return t.stdout.on("data",s=>n.push(s)),t.stderr.on("data",s=>r.push(s)),await new Promise((s,i)=>{t.on("error",i),t.on("close",(o,a)=>{s({stdout:Buffer.concat(n).toString("utf8"),stderr:Buffer.concat(r).toString("utf8"),status:o,signal:a})})})}function Bg(e,t,n){if(e.action==="list"&&Array.isArray(n)&&n.length===0)return jg(e.kind);let r={command:t.join(" ")};switch(`${e.kind}:${e.action}`){case"pr:list":{let s=St(n).map(o=>Nc(o,e.wide)),i=C(s,e.query);return Et({...r,prs:i,summary:`${Cs(i.length,s.length,e.query)} ${Dc(i,"open")} PRs`},e,["rsp gh pr <number>","rsp gh pr list --query <title-or-label>"])}case"pr:view":return Et({...r,pr:Bc(ie(n),e),summary:`PR #${Ye(ie(n),"number")}`},e,["rsp gh pr <number>","rsp gh pr view <number> --full"]);case"pr:combined":return Cg(e,t,ie(n));case"issue:list":{let s=St(n).map(o=>Cc(o,e.wide)),i=C(s,e.query);return Et({...r,issues:i,summary:`${Cs(i.length,s.length,e.query)} ${Dc(i,"open")} issues`},e,["rsp gh issue view <number>","rsp gh issue list --query <label-or-title>"])}case"issue:view":return Et({...r,issue:Ug(ie(n),e),summary:`issue #${Ye(ie(n),"number")}`},e,["rsp gh issue view <number> --full"]);case"run:list":{let s=St(n).map(o=>Lc(o,e.wide)),i=C(s,e.query);return Et({...r,runs:i,summary:`${Cs(i.length,s.length,e.query)} runs`},e,["rsp gh run view <id>","rsp gh run list --query <workflow-or-status>"])}case"run:view":return Et({...r,run:Fg(ie(n),e),summary:`run ${Ye(ie(n),"databaseId")}`},e,["rsp gh run view <id> --full"])}throw new Error(`unsupported gh command: ${e.kind} ${e.action}`)}function Cg(e,t,n){let r=Bc(ie(n.view),{...e,action:"view",wide:!0}),s=C(St(n.checks).map(Lg),e.query),i=ie(n.comments).comments,o=C(St(i).map(Mg).slice(-3),e.query);return $e({command:t.join(" "),pr:r,checks:s,comments:o,summary:`PR #${Ye(ie(n.view),"number")}: ${s.length} checks, ${o.length} comments`},["rsp gh pr view <number> --full","rsp gh pr <number> --query <check-or-comment>","rsp gh run view <id>"])}function Lg(e){return{name:x(e,"name"),state:rn(e),bucket:x(e,"bucket"),conclusion:x(e,"conclusion"),workflow:x(e,"workflow"),link:x(e,"link")}}function Mg(e){return{author:Uc(e.author),body:nr(e,"body",Ls,!1),created:x(e,"createdAt")}}function jg(e){return e==="pr"?`0 open PRs \u2014 try: rsp gh issue list
|
|
116
117
|
`:e==="issue"?`0 open issues \u2014 try: rsp gh issue list --state all
|
|
117
118
|
`:`0 runs \u2014 try: rsp gh run list --limit 20
|
|
118
|
-
`}function
|
|
119
|
-
${
|
|
119
|
+
`}function Nc(e,t){let n={number:Ye(e,"number"),title:x(e,"title"),state:rn(e),draft:!!e.isDraft};return t&&Object.assign(n,Mc(e)),n}function Bc(e,t){let n=Nc(e,t.wide);return n.body=nr(e,"body",Ls,t.full),t.wide&&(n.base=x(e,"baseRefName"),n.head=x(e,"headRefName")),n}function Cc(e,t){let n={number:Ye(e,"number"),title:x(e,"title"),state:rn(e),labels:jc(e.labels)};return t&&Object.assign(n,Mc(e)),n}function Ug(e,t){let n=Cc(e,t.wide);return n.body=nr(e,"body",Ls,t.full),n}function Lc(e,t){let n={id:Ye(e,"databaseId"),name:x(e,"name"),status:rn(e),conclusion:x(e,"conclusion")};return t&&(n.event=x(e,"event"),n.branch=x(e,"headBranch"),n.workflow=x(e,"workflowName"),n.created=x(e,"createdAt")),n}function Fg(e,t){let n=Lc(e,t.wide),r=St(e.jobs).map(s=>({name:x(s,"name"),status:rn(s),conclusion:x(s,"conclusion"),log:nr(s,"log",Dg,t.full)}));return n.jobs=r,n}function nr(e,t,n,r){let s=x(e,t);if(r||Buffer.byteLength(s)<=n)return s;let i=s.slice(0,n),o={preview:i,truncated:{bytes:Buffer.byteLength(s),shown_bytes:Buffer.byteLength(i),hint:"--full",handle:""}};return Object.defineProperty(o,"__rsp_original",{value:s,enumerable:!1}),o}function Gg(e){let t=[e];for(;t.length>0;){let n=t.pop();if(Array.isArray(n))t.push(...n);else if(kt(n)){if(kt(n.truncated)&&n.truncated.handle===""&&typeof n.preview=="string"){let r=typeof n.__rsp_original=="string"?n.__rsp_original:n.preview;return{target:n,original:r,bytes:Number(n.truncated.bytes??0)}}t.push(...Object.values(n))}}return null}function Jg(e){for(let t of["prs","issues","runs","jobs"]){let n=e[t];if(Array.isArray(n)&&n.length>1)return{payload:{...e,[t]:n.slice(0,1)},rowsElided:n.length-1}}return null}function Dc(e,t){return e.every(n=>n.state===t)?t:"returned"}function Cs(e,t,n){return n?`${e}/${t}`:String(e)}function Et(e,t,n){return t.query?$e(e,n):e}function rn(e){return(x(e,"state")||x(e,"status")).toLowerCase()}function Mc(e){return{author:Uc(e.author),labels:jc(e.labels),url:x(e,"url"),updated:x(e,"updatedAt")}}function jc(e){return Array.isArray(e)?e.map(t=>kt(t)?x(t,"name"):String(t)).filter(Boolean):[]}function Uc(e){return kt(e)?x(e,"login"):""}function tr(e){return e.trim()?JSON.parse(e):null}function St(e){return Array.isArray(e)?e.filter(kt):[]}function ie(e){return kt(e)?e:{}}function x(e,t){let n=e[t];return typeof n=="string"?n:""}function Ye(e,t){let n=e[t];return typeof n=="number"?n:0}function kt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var Og,Pg,Ls,Dg,js=E(()=>{"use strict";Se();ze();er();Og={"pr:list":["number","title","state","isDraft"],"pr:view":["number","title","state","body"],"issue:list":["number","title","state","labels"],"issue:view":["number","title","state","body"],"run:list":["databaseId","name","status","conclusion"],"run:view":["databaseId","name","status","conclusion","jobs"]},Pg={"pr:list":["number","title","state","isDraft","author","labels","url","updatedAt"],"pr:view":["number","title","state","body","author","labels","url","baseRefName","headRefName"],"issue:list":["number","title","state","labels","author","url","updatedAt"],"issue:view":["number","title","state","body","author","labels","url","updatedAt"],"run:list":["databaseId","name","status","conclusion","event","headBranch","workflowName","createdAt"],"run:view":["databaseId","name","status","conclusion","event","headBranch","workflowName","createdAt","jobs","url"]},Ls=160,Dg=160});var Fs={};A(Fs,{renderTestContract:()=>Fc,runTestWrapper:()=>Kg});import{spawn as qg}from"node:child_process";async function Kg(e,t){let n=Ie(e),r=await Zg(n.argv);return await Fc(e,r,t)}async function Fc(e,t,n){let r=Ie(e),i=Gc(r.argv)==="vitest"?ey(t.stdout):ty(t.stdout),o=t.status;if(!i||(o??0)!==0&&i.failed===0)return{stdout:Buffer.from(Rt(t.stdout,r.query)),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal};let a=`${i.failed}/${i.total} failed \xB7 ${i.suites} suites \xB7 ${sy(i.durationSeconds)}`,c=C(i.failures,r.query);if(n.level==="terse")return await zg(r.argv,t,{...i,failures:c},o,a,n,r.query);let u=[],l,d=0;for(let y of c){let f=await ny(y.excerpt,r.argv.join(" "),n.store);u.push({suite:y.suite,name:y.name,excerpt:f.text}),l??=f.handle,d+=f.bytesElided}let g={exit_code:o,summary:r.query?`${a} \xB7 ${c.length}/${i.failures.length} failures matched`:a};u.length>0&&(g.failures=u);let b=r.query?$e(g,["rsp show <handle>","rsp vitest --query <suite-or-test>"]):g;return{stdout:Buffer.from(O(b)),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal,payload:b,mintedHandle:l,bytesElided:d>0?d:void 0,rowsElided:u.length>0?Math.max(0,i.total-u.length):void 0}}async function zg(e,t,n,r,s,i,o){let a=Yg(n.failures),c={exit_code:r,summary:o?`${s} \xB7 ${n.failures.length} failures matched`:s};a.length>0&&(c.failures=a);let u=o?$e(c,["rsp show <handle>","rsp vitest --query <suite-or-test>"]):c,l=O(u),d=Math.max(0,n.failures.length-a.length),g=a.some((k,R)=>k.excerpt!==n.failures[R].excerpt);if(d===0&&!g)return{stdout:Buffer.from(l),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal,payload:u};let b={exit_code:r,summary:s};n.failures.length>0&&(b.failures=n.failures.map(k=>({suite:k.suite,name:k.name,excerpt:k.excerpt})));let y=O(b),f=Buffer.byteLength(y),p=await i.store?.mint(Buffer.from(y),{command:e.join(" "),loss:{level:"terse",bytes_elided:f}});if(!p)throw new Error("terse test output requires an elision store");let m=`\u2026 elided ${d>0?`${d} failures`:"full detail"} (+${f}) \u2014 ${X(p)}`;return{stdout:Buffer.from(`${l}
|
|
120
|
+
${m}`),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal,payload:u,mintedHandle:p,bytesElided:f,rowsElided:d,rawOutput:Buffer.from(y)}}function Yg(e){let t=[],n=Vg;for(let r of e.slice(0,Wg)){let s=Qg(r.excerpt,Math.min(Hg,n));n=Math.max(0,n-Buffer.byteLength(s)),t.push({suite:r.suite,name:r.name,excerpt:s})}return t}function Qg(e,t){if(t<=0)return"";let n=e.split(`
|
|
120
121
|
`),r=n.length<=2?e:`${n[0]}
|
|
121
122
|
\u2026
|
|
122
|
-
${n[n.length-1]}`,
|
|
123
|
-
`).filter(Boolean).map(c=>
|
|
124
|
-
`)}),
|
|
125
|
-
\u2026 elided ${o} bytes (+${r.length}) \u2014 ${
|
|
126
|
-
`):""}function
|
|
127
|
-
`;if(!o&&Buffer.byteLength(c)<=
|
|
128
|
-
`;return{stdout:Buffer.from(`${c}${l}`),stderr:Buffer.alloc(0),status:0,signal:null,payload:a,mintedHandle:u,bytesElided:n.length,rawOutput:n}}function
|
|
129
|
-
`),r=n.at(-1)==="",
|
|
123
|
+
${n[n.length-1]}`,s=Buffer.from(r);return s.length<=t?r:s.subarray(0,t).toString("utf8").replace(/�$/,"")}function Gc(e){if(e[0]==="vitest")return"vitest";if(e[0]==="cargo"&&e[1]==="test")return"cargo";throw new Error(`unsupported test command: ${e.join(" ")}`)}function Xg(e){if(Gc(e)==="vitest"){let s=e.slice(1);return{executable:"vitest",args:s.some(o=>o==="--reporter=json"||o==="--reporter"||o.startsWith("--reporter="))?s:["run","--reporter=json",...s]}}let n=e.slice(1);return{executable:"cargo",args:n.some(s=>s==="--message-format=json"||s.startsWith("--message-format="))?n:["test","--message-format=json",...n.slice(1)]}}async function Zg(e){let t=Xg(e),n=qg(t.executable,t.args,{stdio:["ignore","pipe","pipe"]}),r=[],s=[];return n.stdout.on("data",i=>r.push(i)),n.stderr.on("data",i=>s.push(i)),await new Promise((i,o)=>{n.on("error",o),n.on("close",(a,c)=>{i({stdout:Buffer.concat(r).toString("utf8"),stderr:Buffer.concat(s).toString("utf8"),status:a,signal:c})})})}function ey(e){let t=Jc(e);if(!Ne(t))return null;let n=Array.isArray(t.testResults)?t.testResults:[],r=[],s=Be(t.numTotalTests),i=Be(t.numFailedTests),o=iy(Be(t.startTime),Be(t.endTime));for(let a of n){if(!Ne(a))continue;let c=oe(a.name)||oe(a.file)||"",u=Array.isArray(a.assertionResults)?a.assertionResults:[];for(let l of u)Ne(l)&&l.status==="failed"&&r.push({suite:c,name:oe(l.fullName)||oe(l.title)||oe(l.name),excerpt:ry(l.failureMessages)||oe(l.failureMessage)})}return s||=n.reduce((a,c)=>!Ne(c)||!Array.isArray(c.assertionResults)?a:a+c.assertionResults.length,0),i||=r.length,o||=n.reduce((a,c)=>Ne(c)?a+Be(c.perfStats&&Ne(c.perfStats)?c.perfStats.runtime:c.duration)/1e3:a,0),{failed:i,total:s,suites:n.length||1,durationSeconds:o,failures:r}}function ty(e){let t=e.split(`
|
|
124
|
+
`).filter(Boolean).map(c=>Jc(c)).filter(Ne);if(t.length===0)return null;let n=[],r=0,s=0,i=0,o=0,a=[];for(let c of t){if(c.type==="suite"){c.event==="started"&&(i+=1,r+=Be(c.test_count)),(c.event==="failed"||c.event==="ok")&&(s+=Be(c.failed),o+=Be(c.exec_time));continue}if(c.type==="test"&&c.event==="failed"){n.push({suite:oe(c.name).split("::").slice(0,-1).join("::"),name:oe(c.name),excerpt:oe(c.stdout)});continue}if(c.reason==="compiler-message"&&Ne(c.message)){let u=oe(c.message.rendered);u&&a.push(u)}}return n.length===0&&a.length>0&&(n.push({suite:"cargo check",name:"compile-error",excerpt:a.join(`
|
|
125
|
+
`)}),i||=1,r||=1,s||=1),s||=n.length,i||=1,r||=Math.max(s,n.length),{failed:s,total:r,suites:i,durationSeconds:o,failures:n}}async function ny(e,t,n){let r=Buffer.from(e);if(r.length<=Us)return{text:e,bytesElided:0};if(!n)throw new Error("over-limit test failure excerpt requires an elision store");let s=await n.mint(r,{command:t,loss:{level:"brief",bytes_elided:r.length}}),i=r.subarray(0,Us).toString("utf8").replace(/\uFFFD$/,""),o=r.length-Buffer.byteLength(i);return{text:`${i}
|
|
126
|
+
\u2026 elided ${o} bytes (+${r.length}) \u2014 ${X(s)}`,handle:s,bytesElided:r.length}}function Jc(e){try{return JSON.parse(e)}catch{return null}}function ry(e){return Array.isArray(e)?e.map(t=>String(t)).filter(Boolean).join(`
|
|
127
|
+
`):""}function sy(e){return`${Number(e.toFixed(1))}s`}function iy(e,t){return e>0&&t>e?(t-e)/1e3:0}function Be(e){return typeof e=="number"&&Number.isFinite(e)?e:0}function oe(e){return typeof e=="string"?e:""}function Ne(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var Us,Hg,Vg,Wg,Gs=E(()=>{"use strict";Se();ze();er();Us=320,Hg=160,Vg=Us,Wg=3});var Hs={};A(Hs,{parseCatCommand:()=>qs,renderCatContract:()=>my,runCatWrapper:()=>fy});import{isUtf8 as oy}from"node:buffer";import{readFile as ay}from"node:fs/promises";import{extname as cy}from"node:path";async function fy(e,t){let n=qs(e),r=await ay(n.file);return zc(r)?{stdout:r,stderr:Buffer.alloc(0),status:0,signal:null,rawOutput:r}:await Kc(e,n,r,t)}async function my(e,t,n){if((t.status??0)!==0||t.signal)return{stdout:Buffer.from(t.stdout),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal};let r=qs(e),s=Buffer.from(t.stdout,"utf8");return zc(s)?{stdout:s,stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal,rawOutput:s}:{...await Kc(e,r,s,n),stderr:Buffer.from(t.stderr),status:t.status,signal:t.signal}}function qs(e){if(e[0]!=="cat")throw new Error("expected rsp cat <file>");let t=e.slice(1),n="full",r,s=!1,i=[];for(let o=0;o<t.length;o++){let a=t[o];if(a==="--full"){s=!0;continue}if(a==="--head"||a==="--tail"){n=a.slice(2),r=Wc(t[++o],Js);continue}if(a.startsWith("--head=")||a.startsWith("--tail=")){let[c,u]=a.split("=",2);n=c.slice(2),r=Wc(u,Js);continue}i.push(a)}if(i.length!==1)throw new Error("usage: rsp cat [--full] [--head N|--tail N] <file>");return{file:i[0],mode:n,...r?{limit:r}:{},...s?{inlineFull:s}:{}}}async function Kc(e,t,n,r){let s=n.toString("utf8"),i=yy(s,t);if(t.inlineFull)return{stdout:Buffer.from(i.text),stderr:Buffer.alloc(0),status:0,signal:null,rawOutput:n};let o=r.level!=="lossless"||n.length>Vc(r.heavyByteThreshold,qc)||i.truncated;if(!Hc(t.file)&&!o)return{stdout:Buffer.from(i.text),stderr:Buffer.alloc(0),status:0,signal:null,rawOutput:n};let a=Hc(t.file)?py(e,t.file,n,s,r.level,i):gy(e,t.file,n,s,i),c=`${O(a)}
|
|
128
|
+
`;if(!o&&Buffer.byteLength(c)<=Vc(r.heavyByteThreshold,qc))return{stdout:Buffer.from(c),stderr:Buffer.alloc(0),status:0,signal:null,payload:a,rawOutput:n};let u=await r.store?.mint(n,{command:e.join(" "),loss:{level:r.level==="lossless"?"terse":r.level,bytes_elided:n.length}});if(!u)throw new Error("rsp cat elision requires an elision store");let l=`\u2026 elided file bytes (+${n.length}) \u2014 ${X(u)}
|
|
129
|
+
`;return{stdout:Buffer.from(`${c}${l}`),stderr:Buffer.alloc(0),status:0,signal:null,payload:a,mintedHandle:u,bytesElided:n.length,rawOutput:n}}function py(e,t,n,r,s,i){let o=rr(r),a=s==="terse"?ly:uy,c=rr(i.text),u=c.slice(0,a),l=c.slice(Math.max(u.length,c.length-a));return{command:e.join(" "),file:t,kind:"code",outline_source:"regex",bytes:n.length,lines:o.length,symbols:hy(o),content:{head:u,tail:l,truncated:i.truncated||u.length+l.length<o.length}}}function gy(e,t,n,r,s){return{command:e.join(" "),file:t,kind:"text",bytes:n.length,lines:rr(r).length,content:rr(s.text),truncated:s.truncated}}function yy(e,t){if(t.mode==="full")return{text:e,truncated:!1};let n=e.split(`
|
|
130
|
+
`),r=n.at(-1)==="",s=r?n.slice(0,-1):n,i=t.limit??Js,o=t.mode==="head"?s.slice(0,i):s.slice(Math.max(0,s.length-i));return{text:`${o.join(`
|
|
130
131
|
`)}${r&&o.length>0?`
|
|
131
|
-
`:""}`,truncated:o.length<
|
|
132
|
-
`);return t.at(-1)===""?t.slice(0,-1):t}function
|
|
132
|
+
`:""}`,truncated:o.length<s.length}}function hy(e){let t=[];for(let n=0;n<e.length;n++){let s=e[n].trim(),i=/^(?:export\s+)?(?:default\s+)?(?:abstract\s+)?(class|interface|type)\s+([A-Za-z_$][\w$]*)/.exec(s);if(i){t.push({kind:i[1],name:i[2],line:n+1,signature:s});continue}let o=/^(?:export\s+)?(?:default\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\([^)]*\)\s*(?::[^{]+)?/.exec(s);if(o){t.push({kind:"function",name:o[1],line:n+1,signature:s});continue}let a=/^(?:public\s+|private\s+|protected\s+|static\s+|async\s+)*([A-Za-z_$][\w$]*)\s*\([^)]*\)\s*(?::[^{]+)?\s*\{/.exec(s);a&&!wy(a[1])&&t.push({kind:"method",name:a[1],line:n+1,signature:s})}return t}function rr(e){let t=e.split(`
|
|
133
|
+
`);return t.at(-1)===""?t.slice(0,-1):t}function zc(e){return e.includes(0)||!oy(e)}function Hc(e){return dy.has(cy(e).toLowerCase())}function wy(e){return["for","if","switch","while"].includes(e)}function Vc(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}function Wc(e,t){let n=Number(e);return Number.isInteger(n)&&n>0?n:t}var qc,Js,uy,ly,dy,Vs=E(()=>{"use strict";Se();ze();qc=8*1024,Js=10,uy=8,ly=2,dy=new Set([".c",".cc",".cpp",".cs",".go",".java",".js",".jsx",".mjs",".py",".rs",".ts",".tsx"])});var sr={};A(sr,{parseExecCommandLine:()=>Xc,renderExecContract:()=>Qc,runExecWrapper:()=>ky});import{isUtf8 as by}from"node:buffer";import{spawn as _y}from"node:child_process";async function ky(e,t){let n=Xc(e),r=await Ty(n);return await Qc(n,r,t)}async function Qc(e,t,n){let r=Buffer.from(t.stdout,"binary"),s=Buffer.from(t.stderr,"binary");if(r.length===0)return{stdout:r,stderr:s,status:t.status,signal:t.signal,rawOutput:r};let i=vy(r);if(i.kind==="text"){let d=await Xt(i.text,{level:n.level,command:e,store:n.store?{mint:async(...g)=>await n.store.mint(...g)}:void 0});if(d.detected)return{stdout:Buffer.from(d.output),stderr:s,status:t.status,signal:t.signal,mintedHandle:d.handle,bytesElided:d.lossy?r.length:void 0,rawOutput:r}}let o=i.kind==="text"?Buffer.from(i.text):r,a=Py(n.heavyByteThreshold,Ry);if(o.length<=a&&n.level!=="terse")return{stdout:o,stderr:s,status:t.status,signal:t.signal,rawOutput:r};let c=r.length,u=n.level==="lossless"?"terse":n.level,l=await n.store?.mint(r,{command:e,loss:{level:u,bytes_elided:c}});if(!l)throw new Error("rsp exec output elision requires an elision store");return{stdout:Buffer.from(xy(o,r.length,l,n.level)),stderr:s,status:t.status,signal:t.signal,mintedHandle:l,bytesElided:c,rawOutput:r}}function Xc(e){if(e[0]!=="exec")throw new Error("expected rsp exec -- <command line>");let t=e.indexOf("--"),n=t>=0?e.slice(t+1):e.slice(1),r=n.length===1?n[0]:n.join(" ");if(!r.trim())throw new Error("usage: rsp exec -- <command line>");return r}async function Ty(e){let t=_y(e,{shell:!0,stdio:["inherit","pipe","pipe"]}),n=[],r=[];return t.stdout.on("data",s=>n.push(s)),t.stderr.on("data",s=>r.push(s)),await new Promise((s,i)=>{t.on("error",i),t.on("close",(o,a)=>{s({stdout:Buffer.concat(n).toString("binary"),stderr:Buffer.concat(r).toString("binary"),status:o,signal:a})})})}function vy(e){return by(e)?{kind:"text",text:wt(e.toString("utf8"))}:{kind:"bytes"}}function xy(e,t,n,r){let i=Math.max(1,Math.floor((r==="terse"?Sy:Ey)/2)),o=Yc(e.subarray(0,i)),a=Yc(e.subarray(Math.max(0,e.length-i))),c=Oy(e),u=["stdout summary",`bytes: ${t}`,`lines: ${c}`,"head:",o];return a&&a!==o&&u.push("tail:",a),u.push(`\u2026 elided stdout (+${t}) \u2014 ${X(n)}`),`${u.join(`
|
|
133
134
|
`)}
|
|
134
|
-
`}function
|
|
135
|
-
`),2;let{renderShellInit:
|
|
136
|
-
`),0);if(n.command==="git"&&
|
|
137
|
-
`),0)}if(n.command==="warm-resident"){let
|
|
138
|
-
`),0}if(!n.storeUri&&
|
|
139
|
-
`),1);let
|
|
140
|
-
`),1;let
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
`),2}catch(
|
|
135
|
+
`}function Yc(e){return e.toString("utf8").replace(/�$/g,"")}function Oy(e){if(e.length===0)return 0;let t=0;for(let n of e)n===10&&t++;return e[e.length-1]===10?t:t+1}function Py(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}var Ry,Ey,Sy,ir=E(()=>{"use strict";ze();Zt();Ry=8*1024,Ey=2*1024,Sy=1024});Tr();Se();import{spawn as Dy}from"node:child_process";import{createHash as Iy}from"node:crypto";import{appendFileSync as Zc,existsSync as sn,mkdirSync as $y,readFileSync as Ay,readdirSync as Ny,statSync as By}from"node:fs";import{tmpdir as Cy}from"node:os";import{dirname as nu,join as ce}from"node:path";import{fileURLToPath as ru}from"node:url";function qi(e){let t={app:e,version:rd(ct("__RED_BUILD_VERSION__",()=>"2.56.0")??"0.0.0-dev"),gitSha:ct("__RED_BUILD_GIT_SHA__",()=>"c2f4ab02c1e92164b21e5855e6e168615ba1e2c3")??"unknown",buildTime:ct("__RED_BUILD_TIME__",()=>"2026-07-14T11:25:37-03:00")??"unknown",bundleAsset:ct("__RED_BUNDLE_ASSET__",()=>"rsp.bundle.min.mjs")??"unknown"},n=ct("__REDDB_SDK_VERSION__",()=>"1.23.1"),r=ct("__REDDB_BINARY_TAG__",()=>"v1.23.1");return n&&(t.reddbSdkVersion=n),r&&(t.reddbBinaryTag=r),t}function rd(e){return e.startsWith("v")?e.slice(1):e}function ct(e,t){try{let n=t();return typeof n=="string"&&n.length>0?n:void 0}catch{return process.env[e.replace(/^__|__$/g,"")]}}Cr();async function Ly(e=process.argv.slice(2)){let t=qi("rsp"),n=Xy(e);if(n.command==="hook"&&n.positional[1]==="claude-pre-exec"){let{runClaudePreExecHook:f}=await Promise.resolve().then(()=>(qn(),ds));return await f()}if(n.command==="hook"&&n.positional[1]==="codex-pre-exec"){let{runCodexPreExecHook:f}=await Promise.resolve().then(()=>(qn(),ds));return await f()}if(n.command==="hook"&&n.positional[1]==="claude-post-exec"){let{runClaudePostExecHook:f}=await Promise.resolve().then(()=>(Zt(),ms));return await f()}if(n.command==="hook"&&n.positional[1]==="codex-post-exec"){let{runCodexPostExecHook:f}=await Promise.resolve().then(()=>(Zt(),ms));return await f()}if(n.command==="setup"){let{provisionRspRepoStore:f}=await Promise.resolve().then(()=>(Oa(),xa)),p=await f(process.cwd());return process.stdout.write(ch(p)),0}if(n.command==="mcp"){let{runRspMcpServer:f}=await Promise.resolve().then(()=>(Ba(),Na));return await f(),0}if(n.command==="wait"){let{runWait:f}=await Promise.resolve().then(()=>(Ga(),Fa));return await f(n.positional)}if(n.command==="shell-init"){let f=n.positional[1];if(f!=="fish"&&f!=="bash"&&f!=="zsh")return process.stdout.write(`error: usage rsp shell-init fish|bash|zsh
|
|
136
|
+
`),2;let{renderShellInit:p}=await Promise.resolve().then(()=>(Ha(),qa));return process.stdout.write(p(f)),0}let{resolveRspConfig:r}=await Promise.resolve().then(()=>(re(),wo)),s=r(process.cwd(),process.env,n.storeUri),i=Yy(n.command);if(!s.enabled)return i?await zy(n.positional):(process.stdout.write(`${ei()}
|
|
137
|
+
`),0);if(n.command==="git"&&Ys(n.positional)){let f=process.hrtime.bigint();return await G(n,await Qs(),f,void 0,await My(process.cwd()))}let{resolveResidentPaths:o,ResidentRspElisionStore:a,ensureResidentServer:c}=await Promise.resolve().then(()=>(Fe(),jt));if(n.command==="server"){let{runResidentServer:f}=await Promise.resolve().then(()=>(Sc(),Ec)),p=o(process.cwd()),S=ae(n.positional,"--socket")??p.socketPath,m=r(process.cwd(),process.env,n.storeUri??ae(n.positional,"--store-uri"));return m.enabled?(await f({socketPath:S,pidPath:ae(n.positional,"--pid-file")??o(process.cwd()).pidPath,rootDir:p.rootDir,storeUri:m.storeUri,ttlDays:N(n.positional,"--ttl-days")??m.ttlDays,ephemeralTtlHours:N(n.positional,"--ephemeral-ttl-hours")??m.ephemeralTtlHours,byteBudget:N(n.positional,"--byte-budget")??m.byteBudget,telemetryTtlDays:N(n.positional,"--telemetry-ttl-days")??m.telemetryTtlDays,telemetryByteBudget:N(n.positional,"--telemetry-byte-budget")??m.telemetryByteBudget,telemetryDrainIntervalMs:N(n.positional,"--telemetry-drain-interval-ms")??m.telemetryDrainIntervalMs,telemetryDrainTimeoutMs:N(n.positional,"--telemetry-drain-timeout-ms")??m.telemetryDrainTimeoutMs,idleMs:N(n.positional,"--idle-ms")??m.idleMs,residentVersion:ae(n.positional,"--resident-version")??t.version,registryPath:ae(n.positional,"--registry")??p.registryPath}),0):(process.stdout.write(`${ei()}
|
|
138
|
+
`),0)}if(n.command==="warm-resident"){let f=o(process.cwd()),p=ae(n.positional,"--socket")??f.socketPath,S=ae(n.positional,"--wake-lock")??f.wakeLockPath,m=r(process.cwd(),process.env,n.storeUri??ae(n.positional,"--store-uri"));if(!m.enabled)return 0;let{warmResidentServer:k}=await Promise.resolve().then(()=>(Fe(),jt));return await k({...f,socketPath:p,wakeLockPath:S},{storeUri:m.storeUri,ttlDays:N(n.positional,"--ttl-days")??m.ttlDays,ephemeralTtlHours:N(n.positional,"--ephemeral-ttl-hours")??m.ephemeralTtlHours,byteBudget:N(n.positional,"--byte-budget")??m.byteBudget,telemetryTtlDays:N(n.positional,"--telemetry-ttl-days")??m.telemetryTtlDays,telemetryByteBudget:N(n.positional,"--telemetry-byte-budget")??m.telemetryByteBudget,telemetryDrainIntervalMs:N(n.positional,"--telemetry-drain-interval-ms")??m.telemetryDrainIntervalMs,telemetryDrainTimeoutMs:N(n.positional,"--telemetry-drain-timeout-ms")??m.telemetryDrainTimeoutMs,idleMs:N(n.positional,"--idle-ms")??m.idleMs,clientVersion:t.version}),0}let u=o(process.cwd());if(n.command==="status"||n.command==="sweep"){let{residentRegistryStatus:f,sweepResidentRegistry:p}=await Promise.resolve().then(()=>(Fe(),jt)),S=n.command==="sweep"?await p(u):await f(u);return process.stdout.write(`${O(S)}
|
|
139
|
+
`),0}if(!n.storeUri&&s.storeUri.startsWith("file://")&&!sn(ru(s.storeUri)))return i?await Fy(n,s,u.rootDir):(process.stdout.write(`error: rsp repo store is not provisioned - run /red-setup
|
|
140
|
+
`),1);let l=(f=!0)=>Promise.resolve(new a(u,{storeUri:s.storeUri,ttlDays:s.ttlDays,ephemeralTtlHours:s.ephemeralTtlHours,byteBudget:s.byteBudget,telemetryTtlDays:s.telemetryTtlDays,telemetryByteBudget:s.telemetryByteBudget,telemetryDrainIntervalMs:s.telemetryDrainIntervalMs,telemetryDrainTimeoutMs:s.telemetryDrainTimeoutMs,idleMs:s.idleMs,clientVersion:t.version},{ensureResident:f})),d=()=>c(u,{storeUri:s.storeUri,ttlDays:s.ttlDays,ephemeralTtlHours:s.ephemeralTtlHours,byteBudget:s.byteBudget,telemetryTtlDays:s.telemetryTtlDays,telemetryByteBudget:s.telemetryByteBudget,telemetryDrainIntervalMs:s.telemetryDrainIntervalMs,telemetryDrainTimeoutMs:s.telemetryDrainTimeoutMs,idleMs:s.idleMs,clientVersion:t.version}),g=async()=>{let{RspElisionStore:f}=await Promise.resolve().then(()=>(qe(),qt));return await f.open({uri:s.storeUri,ttlDays:s.ttlDays,ephemeralTtlHours:s.ephemeralTtlHours,byteBudget:s.byteBudget})},b=()=>s.storeUri.endsWith("/red-skills.rdb")?l():g(),y;try{if(!n.command||n.command==="stats"){let{stats:f,telemetry:p}=await Gy(s,eu(n.positional,30));return process.stdout.write(eh(f,p,Zy(n.positional))),0}if(n.command==="gains"){let f=await b();if(y=()=>f.close(),!Uy(f))return process.stdout.write(`error: rsp gains requires the shared RedDB store
|
|
141
|
+
`),1;let p=await f.telemetryGains(eu(n.positional,28));return process.stdout.write(th(p)),0}if(n.command==="git"){if(Ce(d()),Ys(n.positional)){let k=process.hrtime.bigint();return await G(n,await Qs(),k,void 0,u.rootDir)}let{runGitWrapper:f}=await Promise.resolve().then(()=>(ze(),Ns)),p=new Qe(()=>l(!1));y=()=>p.close();let S=process.hrtime.bigint(),m=await f(n.positional,{level:n.level,store:p,heavyGitByteThreshold:s.heavyGitByteThreshold});return await G(n,m,S,p,u.rootDir)}if(n.command==="gh"){Ce(d());let{runGhWrapper:f}=await Promise.resolve().then(()=>(js(),Ms)),p=new Qe(()=>l(!1));y=()=>p.close();let S=process.hrtime.bigint(),m=await f(n.positional,{level:n.level,store:p});return await G(n,m,S,p,u.rootDir)}if(n.command==="vitest"||n.command==="cargo"){Ce(d());let{runTestWrapper:f}=await Promise.resolve().then(()=>(Gs(),Fs)),p=new Qe(()=>l(!1));y=()=>p.close();let S=process.hrtime.bigint(),m=await f(n.positional,{level:n.level,store:p});return await G(n,m,S,p,u.rootDir)}if(n.command==="cat"){Ce(d());let{runCatWrapper:f}=await Promise.resolve().then(()=>(Vs(),Hs)),p=new Qe(()=>l(!1));y=()=>p.close();let S=process.hrtime.bigint(),m=await f(n.positional,{level:n.level,store:p,heavyByteThreshold:s.heavyGitByteThreshold});return await G(n,m,S,p,u.rootDir)}if(n.command==="exec"){Ce(d());let{runExecWrapper:f}=await Promise.resolve().then(()=>(ir(),sr)),p=new Qe(()=>l(!1));y=()=>p.close();let S=process.hrtime.bigint(),m=await f(n.positional,{level:n.level,store:p,heavyByteThreshold:s.heavyGitByteThreshold});return await G(n,m,S,p,u.rootDir)}if(n.command==="show"&&n.handle){let f=await b();y=()=>f.close();let p=await f.get(n.handle);if(p&&"original"in p&&p.original)return process.stdout.write(p.original),await Ws(u.rootDir,n.handle,!0,p.original.length),0;if(p?.status==="expired"){let m=`expired ${p.expired_at} \u2014 re-run: ${p.command}
|
|
142
|
+
`;return process.stdout.write(m),await Ws(u.rootDir,n.handle,!1,Buffer.byteLength(m,"utf8")),1}let S=`expired unknown \u2014 re-run: ${n.handle}
|
|
143
|
+
`;return process.stdout.write(S),await Ws(u.rootDir,n.handle,!1,Buffer.byteLength(S,"utf8")),1}return process.stdout.write(`error: usage rsp show el:<id>
|
|
144
|
+
`),2}catch(f){if(i)return await Zs("wrapper failed",n.positional,f,u.rootDir);throw f}finally{await y?.()}}function ae(e,t){let n=e.indexOf(t);return n>=0?e[n+1]:void 0}function N(e,t){let n=ae(e,t);if(n==null)return;let r=Number(n);return Number.isFinite(r)&&r>0?r:void 0}function Ys(e){return e.length===2&&e[0]==="git"&&e[1]==="status"}async function Qs(){if(jy(process.cwd()))return{stdout:Buffer.from(`git empty
|
|
144
145
|
`),stderr:Buffer.alloc(0),status:0,signal:null};let{spawnSync:e}=await import("node:child_process");if(e("git",["diff-index","--quiet","HEAD","--"],{stdio:"ignore"}).status===0)return{stdout:Buffer.from(`git empty
|
|
145
146
|
`),stderr:Buffer.alloc(0),status:0,signal:null};let n=e("git",["status","--porcelain=v1"],{encoding:"buffer"});if((n.status??0)!==0)return{stdout:n.stdout,stderr:n.stderr,status:n.status??1,signal:n.signal};let r=n.stdout.length===0?Buffer.from(`git empty
|
|
146
|
-
`):n.stdout;return{stdout:r,stderr:n.stderr,status:0,signal:n.signal,rawOutput:r}}async function
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
`)
|
|
150
|
-
`),
|
|
151
|
-
`),
|
|
152
|
-
`),
|
|
153
|
-
`)}function
|
|
154
|
-
`
|
|
155
|
-
`)}
|
|
156
|
-
`)
|
|
147
|
+
`):n.stdout;return{stdout:r,stderr:n.stderr,status:0,signal:n.signal,rawOutput:r}}async function My(e){try{let{resolveResidentPaths:t}=await Promise.resolve().then(()=>(Fe(),jt));return t(e).rootDir}catch{return e}}function jy(e){try{return!sn(`${e}/.git`)||sn(`${e}/.git/index`)?!1:Ny(e).every(t=>t===".git")}catch{return!1}}function Uy(e){return typeof e=="object"&&e!==null&&"telemetryGains"in e&&typeof e.telemetryGains=="function"}var Qe=class{constructor(t){this.openStore=t}store;metrics;async mint(...t){try{let n=await this.open(),r=await n.mint(...t);return this.metrics=n.lastResponseMetrics?.(),r}catch{return`recovery unavailable (resident cold) \u2014 re-run: ${t[1].command}`}}async close(){if(!this.store)return;let t;try{t=await this.store}catch{return}await t.close()}open(){return this.store??=this.openStore(),this.store}lastResponseMetrics(){return this.metrics}},Xs=class{async mint(t,n){return`recovery unavailable (cold store) \u2014 re-run: ${n.command}`}lastResponseMetrics(){}async close(){}};async function Fy(e,t,n,r){if(process.env.RSP_DEBUG==="1")throw r instanceof Error?r:new Error("cold store");let s=new Xs,i=process.hrtime.bigint();try{if(e.command==="git"){if(Ys(e.positional))return await G(e,await Qs(),i,s,n,t);let{runGitWrapper:o}=await Promise.resolve().then(()=>(ze(),Ns)),a=await o(e.positional,{level:e.level,store:s,heavyGitByteThreshold:t.heavyGitByteThreshold});return await G(e,a,i,s,n,t)}if(e.command==="gh"){let{runGhWrapper:o}=await Promise.resolve().then(()=>(js(),Ms)),a=await o(e.positional,{level:e.level,store:s});return await G(e,a,i,s,n,t)}if(e.command==="vitest"||e.command==="cargo"){let{runTestWrapper:o}=await Promise.resolve().then(()=>(Gs(),Fs)),a=await o(e.positional,{level:e.level,store:s});return await G(e,a,i,s,n,t)}if(e.command==="cat"){let{runCatWrapper:o}=await Promise.resolve().then(()=>(Vs(),Hs)),a=await o(e.positional,{level:e.level,store:s,heavyByteThreshold:t.heavyGitByteThreshold});return await G(e,a,i,s,n,t)}if(e.command==="exec"){let{runExecWrapper:o}=await Promise.resolve().then(()=>(ir(),sr)),a=await o(e.positional,{level:e.level,store:s,heavyByteThreshold:t.heavyGitByteThreshold});return await G(e,a,i,s)}}catch(o){return await Zs("wrapper failed",e.positional,o,n)}finally{await s.close()}return await Zs("wrapper failed",e.positional,r,n)}async function Gy(e,t){let n={stats:ah(e.telemetryByteBudget),telemetry:ni(t)};if(!e.storeUri.startsWith("file://"))return n;let r=ru(e.storeUri);if(!sn(r))return n;if(!r.endsWith("red-skills.rdb")){let{RspElisionStore:c}=await Promise.resolve().then(()=>(qe(),qt)),u=await c.open({uri:e.storeUri,ttlDays:e.ttlDays,ephemeralTtlHours:e.ephemeralTtlHours,byteBudget:e.byteBudget});try{return{stats:await u.stats(),telemetry:ni(t)}}finally{await u.close()}}let{ensureReddbBinaryFromWarmCache:s}=await Promise.resolve().then(()=>(qe(),qt));await s();let{readAccountingLaneStats:i,readTelemetryStats:o}=await Promise.resolve().then(()=>(Ve(),Kt)),a=await fn(e.storeUri);try{return{stats:await i(a,e.telemetryByteBudget),telemetry:await o(a,t)}}finally{await a.close()}}async function G(e,t,n,r,s=process.cwd(),i){process.stdout.write(t.stdout),process.stderr.write(t.stderr);let o=Number(process.hrtime.bigint()-n)/1e6;return r?(Ce(Wy(s,e,t,o,r.lastResponseMetrics())),i&&Jy(s,i)):Ky(s,e,t,o),t.signal?(process.kill(process.pid,t.signal),128):t.status??0}function Jy(e,t){try{let n=ce(e,".red","tmp","rsp-telemetry.spool.jsonl"),r=By(n),s=t.telemetryDrainIntervalMs*2;if(r.size<t.telemetryByteBudget&&!Vy(n,Date.now()-s))return;let i=qy(e),o=Hy(i),a=ce(o,"rsp.sock"),c=ce(o,"rsp.pid"),u=ce(i,".red","tmp","rsp-resident.pid.json"),l=ce(i,".red","tmp","rsp.wake.lock");Dy(process.execPath,[...process.execArgv,process.argv[1]??"","warm-resident","--socket",a,"--pid-file",c,"--store-uri",t.storeUri,"--ttl-days",String(t.ttlDays),"--ephemeral-ttl-hours",String(t.ephemeralTtlHours),"--byte-budget",String(t.byteBudget),"--telemetry-ttl-days",String(t.telemetryTtlDays),"--telemetry-byte-budget",String(t.telemetryByteBudget),"--telemetry-drain-interval-ms",String(t.telemetryDrainIntervalMs),"--telemetry-drain-timeout-ms",String(t.telemetryDrainTimeoutMs),"--idle-ms",String(t.idleMs),"--registry",u,"--wake-lock",l],{cwd:i,detached:!0,stdio:"ignore",env:{...process.env,RSP_RESIDENT_WARMER:"1"}}).unref()}catch{}}function qy(e){let t=e;for(;;){if(sn(ce(t,".git")))return t;let n=nu(t);if(n===t)return e;t=n}}function Hy(e){let t=Iy("sha256").update(e).digest("hex").slice(0,20),n=process.env.XDG_RUNTIME_DIR;if(n){let s=ce(n,"red-skills",t);if(ce(s,"rsp.sock").length<108)return s}let r=typeof process.getuid=="function"?process.getuid():"nouid";return ce(Cy(),`red-skills-${r}`,t)}function Vy(e,t){try{let n=Ay(e,"utf8");for(let r of n.split(/\r?\n/))if(r.trim())try{let s=JSON.parse(r),i=typeof s.created_at=="string"?s.created_at:s.ts;if(typeof i=="string"){let o=Date.parse(i);if(Number.isFinite(o)&&o<=t)return!0}}catch{}}catch{}return!1}async function Wy(e,t,n,r,s){let i=Buffer.concat([n.stdout,n.stderr]),o=Buffer.concat([n.rawOutput??n.stdout,n.stderr]),{appendTelemetryEvent:a,RSP_ACCOUNTING_EVENTS_COLLECTION:c,RSP_TELEMETRY_INVOCATIONS_COLLECTION:u}=await Promise.resolve().then(()=>(Ve(),Kt));await a(e,{collection:c,event_type:"invocation",ts:new Date().toISOString(),command:or(t),command_class:t.command??"unknown",wrapper:t.command,loss:t.level,elided:!!(n.mintedHandle||n.bytesElided),raw_bytes:o.length,emitted_bytes:i.length,wrapper_ms:r,store_open_count:s?.storeOpenCount,store_elapsed_ms:s?.storeElapsedMs}),await a(e,{collection:u,ts:new Date().toISOString(),command:or(t),wrapper:t.command,loss:t.level,elided:!!(n.mintedHandle||n.bytesElided),raw_bytes:o.length,emitted_bytes:i.length,raw_text:o.toString("utf8"),emitted_text:i.toString("utf8"),wrapper_ms:r,store_open_count:s?.storeOpenCount,store_elapsed_ms:s?.storeElapsedMs,accounting_recorded:!0})}function Ky(e,t,n,r){try{let s=Buffer.concat([n.stdout,n.stderr]),i=Buffer.concat([n.rawOutput??n.stdout,n.stderr]),o=ce(e,".red","tmp","rsp-telemetry.spool.jsonl"),a=JSON.stringify({collection:"rsp_accounting_events_v1",event_type:"invocation",ts:new Date().toISOString(),command:or(t),command_class:t.command??"unknown",wrapper:t.command,loss:t.level,elided:!!(n.mintedHandle||n.bytesElided),raw_bytes:i.length,emitted_bytes:s.length,wrapper_ms:r}),c=JSON.stringify({collection:"rsp_telemetry_invocations_v1",ts:new Date().toISOString(),command:or(t),wrapper:t.command,loss:t.level,elided:!!(n.mintedHandle||n.bytesElided),raw_bytes:i.length,emitted_bytes:s.length,wrapper_ms:r,accounting_recorded:!0}),u=`${a}
|
|
148
|
+
${c}
|
|
149
|
+
`;try{Zc(o,u,{encoding:"utf8",mode:384})}catch(l){if(l.code!=="ENOENT")return;$y(nu(o),{recursive:!0}),Zc(o,u,{encoding:"utf8",mode:384})}}catch{}}async function Zs(e,t,n,r){if(process.env.RSP_DEBUG==="1")throw n instanceof Error?n:new Error(e);process.stderr.write(`rsp: ${e}, passing through
|
|
150
|
+
`);let s=await su(t);if(r){let{appendTelemetryEvent:i,RSP_ACCOUNTING_EVENTS_COLLECTION:o,RSP_TELEMETRY_DEGRADATIONS_COLLECTION:a}=await Promise.resolve().then(()=>(Ve(),Kt));Ce(i(r,{collection:o,event_type:"invocation",ts:new Date().toISOString(),command:ti(t),command_class:t[0]??"unknown",loss:"lossless",raw_bytes:0,emitted_bytes:0,degradation_reason:e})),Ce(i(r,{collection:a,ts:new Date().toISOString(),command:ti(t),reason:e,accounting_recorded:!0}))}return s}function Ce(e){e.catch(()=>{})}async function Ws(e,t,n,r){let{appendTelemetryEvent:s,RSP_ACCOUNTING_EVENTS_COLLECTION:i}=await Promise.resolve().then(()=>(Ve(),Kt));await s(e,{collection:i,event_type:"show",ts:new Date().toISOString(),command:"rsp show",command_class:"show",handle:t,hit:n,loss:"lossless",raw_bytes:n?r:0,emitted_bytes:r})}async function zy(e){return process.env.RSP_DEBUG==="1"&&process.stderr.write(`rsp: ${ei()}, passing through
|
|
151
|
+
`),await su(e)}function ei(){return"rsp is not enabled in this directory; run /red-setup"}function Yy(e){return e==="git"||e==="gh"||e==="vitest"||e==="cargo"||e==="cat"||e==="exec"}async function su(e){if(e[0]==="exec")return await Qy(e);let t=e[0];if(!t)return 2;let{spawn:n}=await import("node:child_process"),r=n(t,e.slice(1),{stdio:"inherit"});return await new Promise(s=>{r.on("error",i=>{process.stderr.write(`${i instanceof Error?i.message:String(i)}
|
|
152
|
+
`),s(127)}),r.on("close",(i,o)=>{if(o){process.kill(process.pid,o),s(128);return}s(i??0)})})}async function Qy(e){let t;try{let{parseExecCommandLine:s}=await Promise.resolve().then(()=>(ir(),sr));t=s(e)}catch(s){return process.stderr.write(`${s instanceof Error?s.message:String(s)}
|
|
153
|
+
`),2}let{spawn:n}=await import("node:child_process"),r=n(t,{shell:!0,stdio:"inherit"});return await new Promise(s=>{r.on("error",i=>{process.stderr.write(`${i instanceof Error?i.message:String(i)}
|
|
154
|
+
`),s(127)}),r.on("close",(i,o)=>{if(o){process.kill(process.pid,o),s(128);return}s(i??0)})})}function or(e){return ti(e.positional)}function ti(e){if(e[0]!=="exec")return e.join(" ");try{let t=e.indexOf("--"),n=t>=0?e.slice(t+1):e.slice(1);return n.length===1?n[0]:n.join(" ")}catch{return e.join(" ")}}function Xy(e){let t={level:"lossless",positional:[]},n=[];for(let r=0;r<e.length;r++){let s=e[r];s==="--store-uri"?t.storeUri=e[++r]:s==="--brief"?t.level="brief":s==="--terse"?t.level="terse":s==="--query"?t.query=e[++r]:s.startsWith("--query=")?t.query=s.slice(8):n.push(s)}return t.query&&n[0]!=="show"&&!n.some(r=>r==="--query"||r.startsWith("--query="))&&n.push("--query",t.query),t.command=n[0],t.handle=n[1],t.positional=n,t}function eu(e,t){let n=ae(e,"--since")??e.find(i=>i.startsWith("--since="))?.slice(8);if(!n)return t;let r=/^(\d+)(d)?$/.exec(n);if(!r)return t;let s=Number(r[1]);return Number.isFinite(s)&&s>0?s:t}function Zy(e){return e.includes("--full")}function eh(e,t=ni(30),n=!1){let r=t.savings.top_commands.slice(0,n?10:3),s=n?t.savings.daily_tokens_saved:t.savings.daily_tokens_saved.slice(-7),i=e.storage_classes??iu();return[`records: ${e.records}`,`bytes: ${e.bytes}`,`oldest: ${e.oldest??"none"}`,`budget: ${e.budget}`,"storage_classes:",...oh(i),"savings:",` window_days: ${t.window_days}`,` empty: ${t.empty}`,` invocations: ${t.savings.invocations}`,` elided: ${t.savings.elided}`,` raw_bytes: ${t.savings.raw_bytes}`,` emitted_bytes: ${t.savings.emitted_bytes}`,` bytes_saved: ${t.savings.bytes_saved}`,` tokens_saved: ${nh(t.savings)}`,` dollars_saved_estimate_usd: ${rh(t.savings)}`,` pricing_model_family: ${t.savings.pricing_model_family}`,` pricing_input_usd_per_million_tokens: ${t.savings.pricing_input_usd_per_million_tokens}`,` pricing_note: ${t.savings.pricing_note}`," daily_tokens_saved:",...sh(s),...!n&&t.savings.daily_tokens_saved.length>s.length?[` elided_days: ${t.savings.daily_tokens_saved.length-s.length}`," hint: --full"]:[]," top_commands:",...ih(r),"health:",` degradations: ${t.health.degradations}`,` degradation_rate: ${zs(t.health.degradation_rate)}`,` show_total: ${t.health.show_total}`,` show_hits: ${t.health.show_hits}`,` show_misses: ${t.health.show_misses}`,` show_hit_rate: ${zs(t.health.show_hit_rate)}`,` most_recent_degradation_at: ${t.health.most_recent?.timestamp??"none"}`,` most_recent_degradation_reason: ${t.health.most_recent?.reason??"none"}`," degradations_by_reason:",...tu(t.health.by_reason),"decisions:",` seen: ${t.decisions.seen}`,` contributed: ${t.decisions.contributed}`,` passed: ${t.decisions.passed}`,` failed_open: ${t.decisions.failed_open}`,` contribution_rate: ${zs(t.decisions.contribution_rate)}`," top_pass_reasons:",...tu(t.decisions.top_pass_reasons.slice(0,n?10:3)),"latency:",` wrapper_ms_p50: ${Ks(t.latency.wrapper_ms_p50)}`,` wrapper_ms_p95: ${Ks(t.latency.wrapper_ms_p95)}`,` store_open_count_sum: ${t.latency.store_open_count_sum}`,` store_elapsed_ms_sum: ${t.latency.store_elapsed_ms_sum}`,` store_elapsed_ms_avg: ${Ks(t.latency.store_elapsed_ms_avg)}`,""].join(`
|
|
155
|
+
`)}function th(e){return`${O(e)}
|
|
156
|
+
`}function nh(e){return e.tokens_saved_estimated?`${e.tokens_saved_low}-${e.tokens_saved_high} (estimate_midpoint: ${e.tokens_saved}, range_pct: ${e.token_estimate_range_pct})`:String(e.tokens_saved)}function rh(e){return e.dollars_saved_low_usd==null||e.dollars_saved_high_usd==null?Nt(e.dollars_saved_estimate_usd):`${Nt(e.dollars_saved_low_usd)}-${Nt(e.dollars_saved_high_usd)} (estimate_midpoint: ${Nt(e.dollars_saved_estimate_usd)})`}function sh(e){return e.length===0?[" empty: true"]:e.map(t=>` ${t.date}: ${t.tokens_saved}`)}function ih(e){return e.length===0?[" empty: true"]:e.map(t=>` - command: ${t.command} invocations: ${t.invocations} bytes_saved: ${t.bytes_saved} tokens_saved: ${t.tokens_saved}`)}function tu(e){return e.length===0?[" empty: true"]:e.map(t=>` ${t.reason}: ${t.count}`)}function oh(e){return["derivable","re-executable","ephemeral"].map(t=>` ${t}: records: ${e[t].records} bytes: ${e[t].bytes} raw_bytes: ${e[t].raw_bytes}`)}function Ks(e){return e==null?"none":String(e)}function zs(e){return e.toFixed(4).replace(/0+$/,"").replace(/\.$/,".0")}function ni(e){return{window_days:e,empty:!0,savings:{invocations:0,elided:0,raw_bytes:0,emitted_bytes:0,bytes_saved:0,tokens_saved:0,tokens_saved_estimated:!1,token_estimate_range_pct:null,tokens_saved_low:null,tokens_saved_high:null,dollars_saved_estimate_usd:0,dollars_saved_low_usd:null,dollars_saved_high_usd:null,pricing_model_family:"gpt-5",pricing_input_usd_per_million_tokens:1.25,pricing_note:"estimate derived from byte-based token estimate when token counts are estimated",daily_tokens_saved:[],top_commands:[]},health:{degradations:0,degradation_rate:0,show_total:0,show_hits:0,show_misses:0,show_hit_rate:0,by_reason:[],most_recent:null},latency:{wrapper_ms_p50:null,wrapper_ms_p95:null,store_open_count_sum:0,store_elapsed_ms_sum:0,store_elapsed_ms_avg:null},decisions:{seen:0,contributed:0,passed:0,failed_open:0,contribution_rate:0,top_pass_reasons:[]}}}function ah(e){return{records:0,bytes:0,oldest:null,budget:e,storage_classes:iu()}}function iu(){return{derivable:{records:0,bytes:0,raw_bytes:0},"re-executable":{records:0,bytes:0,raw_bytes:0},ephemeral:{records:0,bytes:0,raw_bytes:0}}}function ch(e){return[`config: ${e.configChanged?"updated":"unchanged"}`,`store: ${e.storeCreated?"created":"existing"}`,""].join(`
|
|
157
|
+
`)}import.meta.url===`file://${process.argv[1]}`&&Ly().then(e=>process.exit(e),e=>{process.stdout.write(`error: ${e instanceof Error?e.message:String(e)}
|
|
158
|
+
`),process.exit(1)});export{Ly as main,ch as renderSetupResult,eh as renderStats};
|