@pinta-ai/pinta-musecode 0.3.0 → 0.4.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.1
4
+
5
+ ### Changed
6
+ - `@pinta-ai/core` `^0.8.0` → `^0.9.0`. The guard request now declares this
7
+ adaptor's own timeout (10s) as `x-pinta-guard-budget-ms`, so the manager
8
+ bounds its work — the backend package check in particular — by the number
9
+ the caller actually waits rather than by a copy of it in the manager's repo.
10
+ The value is unchanged, so the manager's behavior for this adaptor is too;
11
+ the point is that a future change to `TIMEOUT_MS` needs no manager change.
12
+
13
+ ### Compatibility
14
+ - Pinta Manager 0.1.11 or later remains the guard-payload floor. Managers
15
+ before 0.1.10 ignore the header.
16
+
17
+ Refs PTA-579.
18
+
19
+ ## 0.4.0
20
+
21
+ ### Changed
22
+ - Keep the existing event-local scalar `muse.model` forwarding and add
23
+ `muse.model_source=reported:model`. A reported selection, including on
24
+ `PostLLMCall`, is not asserted to be the provider's actual response identity.
25
+ - Preserve raw model evidence while omitting blank, placeholder, non-string
26
+ and JSON-prefixed IDs, including malformed/truncated strings starting with
27
+ `{` or `[` after trimming.
28
+ - Add regression and built CJS/ESM loopback OTLP coverage for all event
29
+ envelopes, switches, subagents, absent models, guards and redaction.
30
+
31
+ ### Compatibility
32
+ - Pinta Manager 0.1.11 or later remains the guard-payload compatibility floor;
33
+ `@pinta-ai/core` remains `^0.8.0`. No new required envelope fields or additional
34
+ desktop upgrade are needed.
35
+ - LLM-event opt-in, guard/shadow behavior, internal-tool exemptions and event
36
+ counts are unchanged. Missing models are not inferred from prior events,
37
+ parents, subagents or transcripts; no model cache or I/O is added.
38
+
39
+ Refs PTA-524.
40
+
3
41
  ## 0.3.0
4
42
 
5
43
  ### Changed
package/README.md CHANGED
@@ -240,6 +240,26 @@ Present on every event: `hook_event_name`, `session_id`, `cwd`, `model`,
240
240
  > parent's, and no parent id is present. Correlate subagents through the trace
241
241
  > file (which the adapter does) rather than through `session_id`.
242
242
 
243
+ ### Model telemetry
244
+
245
+ The recorded top-level `model` field is already forwarded as **`muse.model`**
246
+ on every emitted event. It remains an exact scalar ID, with
247
+ `muse.model_source=reported:model`; even on `PostLLMCall`, that field alone is
248
+ not proof of the provider's actual response model. A supplied `provider` stays
249
+ at `muse.provider`. Request/response IDs and the rest of the raw event retain
250
+ their existing keys and redaction.
251
+
252
+ Missing, blank, non-string and placeholder models (`unknown`, `undefined`,
253
+ `null`, `n/a`, `none`, `-`, `auto`, `default`) do **not** populate `muse.model`.
254
+ Neither does any trimmed string starting with `{` or `[`, even malformed or
255
+ truncated JSON-like strings with no closing brace.
256
+ Unusable or whitespace-normalized raw values are retained as `muse.model_raw`.
257
+ There is no fallback to a parent, previous turn, subagent, tool argument or
258
+ transcript: each firing event is its own evidence. A missing model stays
259
+ missing. This costs only fixed in-memory checks, with **no added file reads,
260
+ host commands, network requests or cache**. LLM event opt-in, event counts,
261
+ guard decisions and trace behavior are unchanged.
262
+
243
263
  ### Deny contract — measured
244
264
 
245
265
  There is **no single deny shape**, and the plan's warning not to assume one was
package/dist/index.js CHANGED
@@ -1,26 +1,26 @@
1
- "use strict";var ht=Object.create;var le=Object.defineProperty;var Et=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var St=Object.getPrototypeOf,vt=Object.prototype.hasOwnProperty;var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Tt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Pt(t))!vt.call(e,o)&&o!==r&&le(e,o,{get:()=>t[o],enumerable:!(n=Et(t,o))||n.enumerable});return e};var y=(e,t,r)=>(r=e!=null?ht(St(e)):{},Tt(t||!e||!e.__esModule?le(r,"default",{value:e,enumerable:!0}):r,e));var Y=h(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.PATTERNS=p.MAX_BYTES=void 0;p.truncateTo=fe;p.truncate=bt;p.collectMatches=pe;p.resolveOverlaps=de;p.applyMatches=ge;p.redact=Ot;p.MAX_BYTES=102400;function fe(e,t){let r=Buffer.from(e,"utf-8");return r.length<=t?e:`${r.subarray(0,Math.max(0,t)).toString("utf-8")}\u2026[TRUNCATED:${r.length}]`}function bt(e){return fe(e,p.MAX_BYTES)}p.PATTERNS=[{type:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{type:"aws_secret_key",regex:/(?:aws[_-]?secret(?:[_-]?(?:access)?[_-]?key)?)\s*[:=]\s*["']?([A-Za-z0-9/+=]{40})(?![A-Za-z0-9/+=])/gi,captureGroup:1},{type:"gcp_service_account",regex:/\{[\s\S]{0,200}?"type"\s*:\s*"service_account"[\s\S]*?\}/g},{type:"github_token",regex:/gh[pousr]_[A-Za-z0-9]{36,}/g},{type:"gitlab_token",regex:/glpat-[A-Za-z0-9_-]{20}/g},{type:"slack_token",regex:/xox[abrsp]-[0-9A-Za-z-]{10,}/g},{type:"openai_key",regex:/sk-(?:proj-)?[A-Za-z0-9_-]{40,}/g},{type:"anthropic_key",regex:/sk-ant-[A-Za-z0-9_-]{50,}/g},{type:"stripe_key",regex:/(?:sk|rk|pk)_(?:live|test)_[A-Za-z0-9]{20,}/g},{type:"jwt",regex:/eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g},{type:"private_key_block",regex:/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g},{type:"bearer_token",regex:/bearer\s+([A-Za-z0-9._~+/=-]{12,})/gi,captureGroup:1},{type:"basic_auth",regex:/basic\s+([A-Za-z0-9+/=]{12,})/gi,captureGroup:1},{type:"db_url_password",regex:/\b(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|redis):\/\/[^:\s/]+:([^@\s]+)@/gi,captureGroup:1},{type:"cli_password_flag",regex:/(?:--password|--pass|--pwd)[=\s]([^\s'"]+)/g,captureGroup:1},{type:"cli_password_short",regex:/\s-p([^\s'"]+)/g,captureGroup:1,requireContext:"bash"},{type:"env_var_secret",regex:/^(?:export\s+)?([A-Z][A-Z0-9_]*(?:KEY|SECRET|TOKEN|PASSWORD|PASSWD|PWD|API_KEY)[A-Z0-9_]*)\s*=\s*["']?([^\s"'\n]+)/gm,captureGroup:2}];function pe(e,t){let r=[];for(let n of p.PATTERNS){if(n.requireContext&&n.requireContext!==t.context)continue;let o=new RegExp(n.regex.source,n.regex.flags),i;for(;(i=o.exec(e))!==null;){let a=n.captureGroup??0,u=i[a];if(u===void 0){i.index===o.lastIndex&&o.lastIndex++;continue}let c=i.index,m=i.index+i[0].length,x=c+i[0].indexOf(u),mt=x+u.length;r.push({start:c,end:m,replaceStart:x,replaceEnd:mt,type:n.type}),i.index===o.lastIndex&&o.lastIndex++}}return r}function de(e){let t=[...e].sort((o,i)=>o.start!==i.start?o.start-i.start:i.end-i.start-(o.end-o.start)),r=[],n=-1;for(let o of t)o.start<n||(r.push(o),n=o.end);return r}function ge(e,t){let r=[...t].sort((o,i)=>i.replaceStart-o.replaceStart),n=e;for(let o of r)n=n.slice(0,o.replaceStart)+`[REDACTED:${o.type}]`+n.slice(o.replaceEnd);return n}function Ot(e,t={}){if(e.length===0)return e;let r=pe(e,t);if(r.length===0)return e;let n=de(r);return ge(e,n)}});var z=h(f=>{"use strict";var At=f&&f.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(f,"__esModule",{value:!0});f.MAX_SPAN_BYTES=void 0;f.ulidToTraceId=he;f.newSpanId=Ee;f.snakeCase=xt;f.toOtlpValue=Pe;f.attrsFromRecord=Mt;f.guardAttrs=Se;f.clientAttrs=ve;f.enforceSpanBudget=Te;f.buildPayload=Rt;f.attachGuard=be;f.mergeBatch=Dt;var kt=At(require("crypto")),X=Y(),wt="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function he(e){if(e.length!==26)throw new Error(`ulidToTraceId: expected 26 chars, got ${e.length}`);let t=0n;for(let n of e){let o=wt.indexOf(n);if(o<0)throw new Error(`ulidToTraceId: invalid Crockford char "${n}"`);t=t<<5n|BigInt(o)}let r=(1n<<128n)-1n;return t&=r,t.toString(16).padStart(32,"0")}function Ee(){return kt.default.randomBytes(8).toString("hex")}function xt(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var _e=new Set;function j(e,t,r){let n=(0,X.truncate)(t);if((r.skipRedactKeys??_e).has(e))return n;let o=(r.bashContextKeys??_e).has(e)?"bash":void 0;return(0,X.redact)(n,{context:o})}function Pe(e,t,r={}){if(t==null)return null;switch(typeof t){case"string":return{stringValue:j(e,t,r)};case"boolean":return{boolValue:t};case"number":return Number.isInteger(t)?{intValue:t}:{doubleValue:t};case"object":try{return{stringValue:j(e,JSON.stringify(t),r)}}catch{return{stringValue:j(e,String(t),r)}}default:return{stringValue:j(e,String(t),r)}}}function Mt(e,t,r={}){let n=[];for(let[o,i]of Object.entries(e)){let a=`${t}.${o}`,u=Pe(a,i,r);u!==null&&n.push({key:a,value:u})}return n}function Se(e){let t=[{key:"pinta.guard.decision",value:{stringValue:e.decision.toLowerCase()}},{key:"pinta.guard.duration_ms",value:{intValue:e.durationMs}}];return e.reason&&t.push({key:"pinta.guard.matched_rule",value:{stringValue:e.reason}}),e.failOpenReason&&t.push({key:"pinta.guard.fail_open_reason",value:{stringValue:e.failOpenReason}}),t}function ve(e){return[{key:"pinta.client.rtt_ms",value:Number.isInteger(e.rttMs)?{intValue:e.rttMs}:{doubleValue:e.rttMs}},{key:"pinta.client.op",value:{stringValue:e.op}}]}f.MAX_SPAN_BYTES=800*1024;function ye(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var me=1024;function Te(e,t=f.MAX_SPAN_BYTES){let r=ye(e);for(let n=0;n<100&&r>t;n++){let o=null,i=0;for(let c of e.attributes){if(!("stringValue"in c.value))continue;let m=Buffer.byteLength(c.value.stringValue,"utf-8");m>i&&(i=m,o=c.value)}if(o===null||i<=me)break;let a=r-t,u=Math.max(me,i-a-64);o.stringValue=(0,X.truncateTo)(o.stringValue,u),r=ye(e)}return e}function Rt(e){let t=e.now??Date.now(),r=(BigInt(t)*1000000n).toString(),n=[...e.attributes],o={traceId:he(e.traceId),spanId:Ee(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:r,endTimeUnixNano:r,attributes:n};Te(o);let i={resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[o]}]}]};return be(i,e.guard,e.clientTiming)}function be(e,t,r){let n=e.resourceSpans[0]?.scopeSpans[0]?.spans[0];if(!n)return e;t&&n.attributes.push(...Se(t));let o=r??(t?.clientRttMs!==void 0?{op:"guard",rttMs:t.clientRttMs}:null);return o&&n.attributes.push(...ve(o)),e}function Dt(e){let t=[];for(let r of e)t.push(...r.resourceSpans);return{resourceSpans:t}}});var Oe=h(O=>{"use strict";Object.defineProperty(O,"__esModule",{value:!0});O.GUARD_STATUS_REFUSED=void 0;O.evaluateGuard=Ct;var jt=1e4,Nt="pinta-core";function N(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var It=new Set(["ALLOW","DENY","REVIEW"]);O.GUARD_STATUS_REFUSED=410;async function Ct(e,t,r={}){if(!t||r.disabled)return null;let n=r.timeoutMs??jt,o=Date.now(),i=new AbortController,a=setTimeout(()=>i.abort(),n);try{let u=await fetch(t,{method:"POST",headers:{"content-type":"application/json","user-agent":r.userAgent??Nt,"x-pinta-relay-token":r.token??"",...r.agentType?{"x-pinta-agent-type":r.agentType}:{}},body:JSON.stringify(e),signal:i.signal});if(u.status===O.GUARD_STATUS_REFUSED)return N(Date.now()-o,"refused");if(u.status!==200)return N(Date.now()-o,"error");let c=await u.json(),m=c?.durationMs===void 0||typeof c.durationMs=="number"&&Number.isFinite(c.durationMs);if(!c||!It.has(c.decision)||!m)return N(Date.now()-o,"error");let x=Date.now()-o;return{decision:c.decision,reason:c.reason??null,userMessage:c.userMessage??null,durationMs:c.durationMs??x,clientRttMs:x}}catch(u){let c=u.name,m=c==="AbortError"||c==="TimeoutError"?"timeout":"error";return N(Date.now()-o,m)}finally{clearTimeout(a)}}});var I=h(M=>{"use strict";var Bt=M&&M.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(M,"__esModule",{value:!0});M.atomicWriteFileSync=Lt;var Ae=Bt(require("fs"));function Lt(e,t){let r=`${e}.${process.pid}.tmp`;Ae.default.writeFileSync(r,t),Ae.default.renameSync(r,e)}});var W=h(E=>{"use strict";var ke=E&&E.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(E,"__esModule",{value:!0});E.MemoryRetryQueue=E.DiskRetryQueue=void 0;var d=ke(require("fs")),C=ke(require("path")),$t=I(),B=1e3,Ut=50,qt=5,K=class{filePath;lockPath;logPrefix;constructor(t,r){this.filePath=C.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=r}enqueue(t){try{d.default.mkdirSync(C.default.dirname(this.filePath),{recursive:!0});let r=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
2
- `;d.default.appendFileSync(this.filePath,r),this.trim()}catch(r){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${r}
3
- `)}}readAll(){try{let t=d.default.readFileSync(this.filePath,"utf-8"),r=[];for(let n of t.split(`
4
- `))if(n.trim())try{let o=JSON.parse(n);Array.isArray(o?.payload?.resourceSpans)&&r.push(o)}catch{}return r}catch{return[]}}rewrite(t){try{if(t.length===0){d.default.existsSync(this.filePath)&&d.default.unlinkSync(this.filePath);return}d.default.mkdirSync(C.default.dirname(this.filePath),{recursive:!0}),(0,$t.atomicWriteFileSync)(this.filePath,t.map(r=>JSON.stringify(r)).join(`
1
+ "use strict";var Et=Object.create;var fe=Object.defineProperty;var Pt=Object.getOwnPropertyDescriptor;var St=Object.getOwnPropertyNames;var vt=Object.getPrototypeOf,Tt=Object.prototype.hasOwnProperty;var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var bt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of St(t))!Tt.call(e,o)&&o!==r&&fe(e,o,{get:()=>t[o],enumerable:!(n=Pt(t,o))||n.enumerable});return e};var m=(e,t,r)=>(r=e!=null?Et(vt(e)):{},bt(t||!e||!e.__esModule?fe(r,"default",{value:e,enumerable:!0}):r,e));var Y=h(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.PATTERNS=d.MAX_BYTES=void 0;d.truncateTo=de;d.truncate=Ot;d.collectMatches=pe;d.resolveOverlaps=_e;d.applyMatches=ge;d.redact=At;d.MAX_BYTES=102400;function de(e,t){let r=Buffer.from(e,"utf-8");return r.length<=t?e:`${r.subarray(0,Math.max(0,t)).toString("utf-8")}\u2026[TRUNCATED:${r.length}]`}function Ot(e){return de(e,d.MAX_BYTES)}d.PATTERNS=[{type:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{type:"aws_secret_key",regex:/(?:aws[_-]?secret(?:[_-]?(?:access)?[_-]?key)?)\s*[:=]\s*["']?([A-Za-z0-9/+=]{40})(?![A-Za-z0-9/+=])/gi,captureGroup:1},{type:"gcp_service_account",regex:/\{[\s\S]{0,200}?"type"\s*:\s*"service_account"[\s\S]*?\}/g},{type:"github_token",regex:/gh[pousr]_[A-Za-z0-9]{36,}/g},{type:"gitlab_token",regex:/glpat-[A-Za-z0-9_-]{20}/g},{type:"slack_token",regex:/xox[abrsp]-[0-9A-Za-z-]{10,}/g},{type:"openai_key",regex:/sk-(?:proj-)?[A-Za-z0-9_-]{40,}/g},{type:"anthropic_key",regex:/sk-ant-[A-Za-z0-9_-]{50,}/g},{type:"stripe_key",regex:/(?:sk|rk|pk)_(?:live|test)_[A-Za-z0-9]{20,}/g},{type:"jwt",regex:/eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g},{type:"private_key_block",regex:/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g},{type:"bearer_token",regex:/bearer\s+([A-Za-z0-9._~+/=-]{12,})/gi,captureGroup:1},{type:"basic_auth",regex:/basic\s+([A-Za-z0-9+/=]{12,})/gi,captureGroup:1},{type:"db_url_password",regex:/\b(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|redis):\/\/[^:\s/]+:([^@\s]+)@/gi,captureGroup:1},{type:"cli_password_flag",regex:/(?:--password|--pass|--pwd)[=\s]([^\s'"]+)/g,captureGroup:1},{type:"cli_password_short",regex:/\s-p([^\s'"]+)/g,captureGroup:1,requireContext:"bash"},{type:"env_var_secret",regex:/^(?:export\s+)?([A-Z][A-Z0-9_]*(?:KEY|SECRET|TOKEN|PASSWORD|PASSWD|PWD|API_KEY)[A-Z0-9_]*)\s*=\s*["']?([^\s"'\n]+)/gm,captureGroup:2}];function pe(e,t){let r=[];for(let n of d.PATTERNS){if(n.requireContext&&n.requireContext!==t.context)continue;let o=new RegExp(n.regex.source,n.regex.flags),i;for(;(i=o.exec(e))!==null;){let a=n.captureGroup??0,u=i[a];if(u===void 0){i.index===o.lastIndex&&o.lastIndex++;continue}let c=i.index,y=i.index+i[0].length,x=c+i[0].indexOf(u),ht=x+u.length;r.push({start:c,end:y,replaceStart:x,replaceEnd:ht,type:n.type}),i.index===o.lastIndex&&o.lastIndex++}}return r}function _e(e){let t=[...e].sort((o,i)=>o.start!==i.start?o.start-i.start:i.end-i.start-(o.end-o.start)),r=[],n=-1;for(let o of t)o.start<n||(r.push(o),n=o.end);return r}function ge(e,t){let r=[...t].sort((o,i)=>i.replaceStart-o.replaceStart),n=e;for(let o of r)n=n.slice(0,o.replaceStart)+`[REDACTED:${o.type}]`+n.slice(o.replaceEnd);return n}function At(e,t={}){if(e.length===0)return e;let r=pe(e,t);if(r.length===0)return e;let n=_e(r);return ge(e,n)}});var z=h(f=>{"use strict";var kt=f&&f.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(f,"__esModule",{value:!0});f.MAX_SPAN_BYTES=void 0;f.ulidToTraceId=Ee;f.newSpanId=Pe;f.snakeCase=Mt;f.toOtlpValue=Se;f.attrsFromRecord=Dt;f.guardAttrs=ve;f.clientAttrs=Te;f.enforceSpanBudget=be;f.buildPayload=Rt;f.attachGuard=Oe;f.mergeBatch=jt;var wt=kt(require("crypto")),X=Y(),xt="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Ee(e){if(e.length!==26)throw new Error(`ulidToTraceId: expected 26 chars, got ${e.length}`);let t=0n;for(let n of e){let o=xt.indexOf(n);if(o<0)throw new Error(`ulidToTraceId: invalid Crockford char "${n}"`);t=t<<5n|BigInt(o)}let r=(1n<<128n)-1n;return t&=r,t.toString(16).padStart(32,"0")}function Pe(){return wt.default.randomBytes(8).toString("hex")}function Mt(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var me=new Set;function j(e,t,r){let n=(0,X.truncate)(t);if((r.skipRedactKeys??me).has(e))return n;let o=(r.bashContextKeys??me).has(e)?"bash":void 0;return(0,X.redact)(n,{context:o})}function Se(e,t,r={}){if(t==null)return null;switch(typeof t){case"string":return{stringValue:j(e,t,r)};case"boolean":return{boolValue:t};case"number":return Number.isInteger(t)?{intValue:t}:{doubleValue:t};case"object":try{return{stringValue:j(e,JSON.stringify(t),r)}}catch{return{stringValue:j(e,String(t),r)}}default:return{stringValue:j(e,String(t),r)}}}function Dt(e,t,r={}){let n=[];for(let[o,i]of Object.entries(e)){let a=`${t}.${o}`,u=Se(a,i,r);u!==null&&n.push({key:a,value:u})}return n}function ve(e){let t=[{key:"pinta.guard.decision",value:{stringValue:e.decision.toLowerCase()}},{key:"pinta.guard.duration_ms",value:{intValue:e.durationMs}}];return e.reason&&t.push({key:"pinta.guard.matched_rule",value:{stringValue:e.reason}}),e.failOpenReason&&t.push({key:"pinta.guard.fail_open_reason",value:{stringValue:e.failOpenReason}}),t}function Te(e){return[{key:"pinta.client.rtt_ms",value:Number.isInteger(e.rttMs)?{intValue:e.rttMs}:{doubleValue:e.rttMs}},{key:"pinta.client.op",value:{stringValue:e.op}}]}f.MAX_SPAN_BYTES=800*1024;function ye(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var he=1024;function be(e,t=f.MAX_SPAN_BYTES){let r=ye(e);for(let n=0;n<100&&r>t;n++){let o=null,i=0;for(let c of e.attributes){if(!("stringValue"in c.value))continue;let y=Buffer.byteLength(c.value.stringValue,"utf-8");y>i&&(i=y,o=c.value)}if(o===null||i<=he)break;let a=r-t,u=Math.max(he,i-a-64);o.stringValue=(0,X.truncateTo)(o.stringValue,u),r=ye(e)}return e}function Rt(e){let t=e.now??Date.now(),r=(BigInt(t)*1000000n).toString(),n=[...e.attributes],o={traceId:Ee(e.traceId),spanId:Pe(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:r,endTimeUnixNano:r,attributes:n};be(o);let i={resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[o]}]}]};return Oe(i,e.guard,e.clientTiming)}function Oe(e,t,r){let n=e.resourceSpans[0]?.scopeSpans[0]?.spans[0];if(!n)return e;t&&n.attributes.push(...ve(t));let o=r??(t?.clientRttMs!==void 0?{op:"guard",rttMs:t.clientRttMs}:null);return o&&n.attributes.push(...Te(o)),e}function jt(e){let t=[];for(let r of e)t.push(...r.resourceSpans);return{resourceSpans:t}}});var Ae=h(E=>{"use strict";Object.defineProperty(E,"__esModule",{value:!0});E.GUARD_STATUS_REFUSED=E.GUARD_BUDGET_HEADER=void 0;E.evaluateGuard=Ct;var Nt=1e4,It="pinta-core";E.GUARD_BUDGET_HEADER="x-pinta-guard-budget-ms";function N(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var Bt=new Set(["ALLOW","DENY","REVIEW"]);E.GUARD_STATUS_REFUSED=410;async function Ct(e,t,r={}){if(!t||r.disabled)return null;let n=r.timeoutMs??Nt,o=Date.now(),i=new AbortController,a=setTimeout(()=>i.abort(),n);try{let u=await fetch(t,{method:"POST",headers:{"content-type":"application/json","user-agent":r.userAgent??It,"x-pinta-relay-token":r.token??"",...r.agentType?{"x-pinta-agent-type":r.agentType}:{},...Number.isFinite(n)&&n>0?{[E.GUARD_BUDGET_HEADER]:String(n)}:{}},body:JSON.stringify(e),signal:i.signal});if(u.status===E.GUARD_STATUS_REFUSED)return N(Date.now()-o,"refused");if(u.status!==200)return N(Date.now()-o,"error");let c=await u.json(),y=c?.durationMs===void 0||typeof c.durationMs=="number"&&Number.isFinite(c.durationMs);if(!c||!Bt.has(c.decision)||!y)return N(Date.now()-o,"error");let x=Date.now()-o;return{decision:c.decision,reason:c.reason??null,userMessage:c.userMessage??null,durationMs:c.durationMs??x,clientRttMs:x}}catch(u){let c=u.name,y=c==="AbortError"||c==="TimeoutError"?"timeout":"error";return N(Date.now()-o,y)}finally{clearTimeout(a)}}});var I=h(M=>{"use strict";var Ut=M&&M.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(M,"__esModule",{value:!0});M.atomicWriteFileSync=Lt;var ke=Ut(require("fs"));function Lt(e,t){let r=`${e}.${process.pid}.tmp`;ke.default.writeFileSync(r,t),ke.default.renameSync(r,e)}});var W=h(P=>{"use strict";var we=P&&P.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(P,"__esModule",{value:!0});P.MemoryRetryQueue=P.DiskRetryQueue=void 0;var p=we(require("fs")),B=we(require("path")),$t=I(),C=1e3,Gt=50,Ft=5,H=class{filePath;lockPath;logPrefix;constructor(t,r){this.filePath=B.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=r}enqueue(t){try{p.default.mkdirSync(B.default.dirname(this.filePath),{recursive:!0});let r=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
2
+ `;p.default.appendFileSync(this.filePath,r),this.trim()}catch(r){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${r}
3
+ `)}}readAll(){try{let t=p.default.readFileSync(this.filePath,"utf-8"),r=[];for(let n of t.split(`
4
+ `))if(n.trim())try{let o=JSON.parse(n);Array.isArray(o?.payload?.resourceSpans)&&r.push(o)}catch{}return r}catch{return[]}}rewrite(t){try{if(t.length===0){p.default.existsSync(this.filePath)&&p.default.unlinkSync(this.filePath);return}p.default.mkdirSync(B.default.dirname(this.filePath),{recursive:!0}),(0,$t.atomicWriteFileSync)(this.filePath,t.map(r=>JSON.stringify(r)).join(`
5
5
  `)+`
6
6
  `)}catch(r){process.stderr.write(`[${this.logPrefix}] retry-queue rewrite failed: ${r}
7
- `)}}tryAcquireLock(){let t=Date.now();try{d.default.mkdirSync(C.default.dirname(this.lockPath),{recursive:!0})}catch(r){return process.stderr.write(`[${this.logPrefix}] retry-queue lock mkdir failed: ${r}
8
- `),!1}for(;Date.now()-t<Ut;)try{let r=d.default.openSync(this.lockPath,"wx");return d.default.writeSync(r,String(process.pid)),d.default.closeSync(r),!0}catch(r){if(r?.code!=="EEXIST")return process.stderr.write(`[${this.logPrefix}] retry-queue lock open failed: ${r}
9
- `),!1;try{let i=d.default.statSync(this.lockPath);if(Date.now()-i.mtimeMs>3e4){d.default.unlinkSync(this.lockPath);continue}}catch{}let n=qt,o=Date.now()+n;for(;Date.now()<o;);}return!1}release(){try{d.default.unlinkSync(this.lockPath)}catch{}}trim(){let t=this.readAll();if(t.length<=B)return;let r=t.length-B;process.stderr.write(`[${this.logPrefix}] retry-queue full, dropping ${r} oldest entries
10
- `),this.rewrite(t.slice(r))}};E.DiskRetryQueue=K;var Z=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>B&&this.entries.splice(0,this.entries.length-B)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};E.MemoryRetryQueue=Z});var je=h(l=>{"use strict";Object.defineProperty(l,"__esModule",{value:!0});l.MemoryTransport=l.DiskTransport=l.MAX_POST_BYTES=void 0;l.parseHeadersEnv=Re;l.envOptionsResolver=De;l.postOtlp=R;var we=W(),xe=z(),Ft=5e3;l.MAX_POST_BYTES=900*1024;function L(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function Me(e,t,r){let n=[],o=[],i=[],a=0;for(let u of e){let c=t(u);if(c>r){o.push(u);continue}i.length>0&&a+c>r&&(n.push(i),i=[],a=0),i.push(u),a+=c}return i.length>0&&n.push(i),{chunks:n,oversize:o}}function Re(e){if(!e)return{};if(typeof e=="object")return{...e};let t={};for(let r of e.split(",")){let[n,...o]=r.split("=");n&&o.length>0&&(t[n.trim()]=o.join("=").trim())}return t}function De(){let e=process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,t=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,r;return e?r=e.replace(/\/+$/,""):t&&(r=t.replace(/\/+$/,"")+"/v1/traces"),r?{endpoint:r,headers:Re(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function R(e,t,r){let n=new AbortController,o=setTimeout(()=>n.abort(),Ft);try{let i=await fetch(t.endpoint,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify(e),signal:n.signal});if(!i.ok){let a="";try{a=(await i.text()).slice(0,200)}catch{}let u=i.status===401||i.status===403?" \u2014 check OTEL_EXPORTER_OTLP_HEADERS (relay token)":i.status===404?" \u2014 check OTEL_EXPORTER_OTLP_TRACES_ENDPOINT path":i.status>=500?" \u2014 collector may be down":"";return process.stderr.write(`[${r}] OTLP POST ${i.status} ${t.endpoint}${u}${a?` body=${a}`:""}
7
+ `)}}tryAcquireLock(){let t=Date.now();try{p.default.mkdirSync(B.default.dirname(this.lockPath),{recursive:!0})}catch(r){return process.stderr.write(`[${this.logPrefix}] retry-queue lock mkdir failed: ${r}
8
+ `),!1}for(;Date.now()-t<Gt;)try{let r=p.default.openSync(this.lockPath,"wx");return p.default.writeSync(r,String(process.pid)),p.default.closeSync(r),!0}catch(r){if(r?.code!=="EEXIST")return process.stderr.write(`[${this.logPrefix}] retry-queue lock open failed: ${r}
9
+ `),!1;try{let i=p.default.statSync(this.lockPath);if(Date.now()-i.mtimeMs>3e4){p.default.unlinkSync(this.lockPath);continue}}catch{}let n=Ft,o=Date.now()+n;for(;Date.now()<o;);}return!1}release(){try{p.default.unlinkSync(this.lockPath)}catch{}}trim(){let t=this.readAll();if(t.length<=C)return;let r=t.length-C;process.stderr.write(`[${this.logPrefix}] retry-queue full, dropping ${r} oldest entries
10
+ `),this.rewrite(t.slice(r))}};P.DiskRetryQueue=H;var K=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>C&&this.entries.splice(0,this.entries.length-C)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};P.MemoryRetryQueue=K});var Ne=h(l=>{"use strict";Object.defineProperty(l,"__esModule",{value:!0});l.MemoryTransport=l.DiskTransport=l.MAX_POST_BYTES=void 0;l.parseHeadersEnv=Re;l.envOptionsResolver=je;l.postOtlp=D;var xe=W(),Me=z(),qt=5e3;l.MAX_POST_BYTES=900*1024;function U(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function De(e,t,r){let n=[],o=[],i=[],a=0;for(let u of e){let c=t(u);if(c>r){o.push(u);continue}i.length>0&&a+c>r&&(n.push(i),i=[],a=0),i.push(u),a+=c}return i.length>0&&n.push(i),{chunks:n,oversize:o}}function Re(e){if(!e)return{};if(typeof e=="object")return{...e};let t={};for(let r of e.split(",")){let[n,...o]=r.split("=");n&&o.length>0&&(t[n.trim()]=o.join("=").trim())}return t}function je(){let e=process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,t=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,r;return e?r=e.replace(/\/+$/,""):t&&(r=t.replace(/\/+$/,"")+"/v1/traces"),r?{endpoint:r,headers:Re(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function D(e,t,r){let n=new AbortController,o=setTimeout(()=>n.abort(),qt);try{let i=await fetch(t.endpoint,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify(e),signal:n.signal});if(!i.ok){let a="";try{a=(await i.text()).slice(0,200)}catch{}let u=i.status===401||i.status===403?" \u2014 check OTEL_EXPORTER_OTLP_HEADERS (relay token)":i.status===404?" \u2014 check OTEL_EXPORTER_OTLP_TRACES_ENDPOINT path":i.status>=500?" \u2014 collector may be down":"";return process.stderr.write(`[${r}] OTLP POST ${i.status} ${t.endpoint}${u}${a?` body=${a}`:""}
11
11
  `),!1}return!0}catch(i){return process.stderr.write(`[${r}] OTLP POST failed: ${i.message??String(i)}
12
- `),!1}finally{clearTimeout(o)}}var H=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new we.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??De}async send(t){let r=this.resolveOptions();if(!r||this.dropIfOversized(t))return;await R(t,r,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(t&&this.queue.tryAcquireLock())try{let r=this.queue.readAll();if(r.length===0)return;let{chunks:n,oversize:o}=Me(r,u=>L(u.payload),l.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized retry ${o.length===1?"entry":"entries"} (each > ${l.MAX_POST_BYTES} bytes \u2014 the backend caps the request body, so they can never be delivered)
13
- `);let i=[].concat(...n),a=0;for(let u of n){if(!await R((0,xe.mergeBatch)(u.map(m=>m.payload)),t,this.logPrefix))break;a+=u.length}this.queue.rewrite(i.slice(a))}catch(r){process.stderr.write(`[${this.logPrefix}] flush failed: ${r?.message??String(r)}
14
- `)}finally{this.queue.release()}}dropIfOversized(t){let r=L(t);return r<=l.MAX_POST_BYTES?!1:(process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (${r} > ${l.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
15
- `),!0)}};l.DiskTransport=H;var J=class{queue=new we.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let r=this.resolveOptions();if(!r)return;if(L(t)>l.MAX_POST_BYTES){process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (> ${l.MAX_POST_BYTES} bytes) \u2014 undeliverable, not buffered
16
- `);return}await R(t,r,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(!t)return;let r=this.queue.drain();if(r.length===0)return;let{chunks:n,oversize:o}=Me(r,L,l.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized buffered ${o.length===1?"payload":"payloads"} (each > ${l.MAX_POST_BYTES} bytes \u2014 undeliverable)
17
- `);let i=[].concat(...n),a=0;for(let u of n){if(!await R((0,xe.mergeBatch)(u),t,this.logPrefix))break;a+=u.length}for(let u of i.slice(a))this.queue.enqueue(u)}};l.MemoryTransport=J});var re=h(v=>{"use strict";var te=v&&v.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(v,"__esModule",{value:!0});v.TraceManager=void 0;v.generateUlid=Ie;var Ne=te(require("fs")),Gt=te(require("path")),Vt=te(require("crypto")),Yt=I(),Q="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Ie(){let e=Date.now(),t="",r=e;for(let i=0;i<10;i++)t=Q[r&31]+t,r=Math.floor(r/32);let n=Vt.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=Q[n[i]&31];for(;o.length<16;)o+=Q[0];return t+o}var ee=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=Ie();return this.save(t),t}currentTrace(){try{let t=Ne.default.readFileSync(this.tracePath,"utf-8"),{traceId:r}=JSON.parse(t);if(r)return r}catch{}return this.newTrace()}save(t){try{Ne.default.mkdirSync(Gt.default.dirname(this.tracePath),{recursive:!0}),(0,Yt.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(r){process.stderr.write(`[pinta-core] trace persistence failed: ${r}
18
- `)}}};v.TraceManager=ee});var Ue=h(P=>{"use strict";var Be=P&&P.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(P,"__esModule",{value:!0});P.MemorySessionTraceManager=P.DiskSessionTraceManager=void 0;var Ce=Be(require("fs")),Xt=Be(require("path")),Le=re(),zt=I(),$e=200,ne=class{tracePath;maxSessions;constructor(t,r={}){this.tracePath=t,this.maxSessions=r.maxSessions??$e}read(){try{let t=JSON.parse(Ce.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{Ce.default.mkdirSync(Xt.default.dirname(this.tracePath),{recursive:!0});let r=Object.entries(t),n=r.length>this.maxSessions?Object.fromEntries(r.slice(-this.maxSessions)):t;(0,zt.atomicWriteFileSync)(this.tracePath,JSON.stringify(n))}catch{}}newTrace(t){let r=t||"default",n=(0,Le.generateUlid)(),o=this.read();return o[r]=n,this.write(o),n}currentTrace(t){let r=t||"default",n=this.read()[r];return n||this.newTrace(r)}};P.DiskSessionTraceManager=ne;var oe=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??$e}newTrace(t){let r=t||"default",n=(0,Le.generateUlid)();if(this.map.set(r,n),this.map.size>this.maxSessions){let o=this.map.keys().next().value;o!==void 0&&this.map.delete(o)}return n}currentTrace(t){let r=t||"default";return this.map.get(r)??this.newTrace(r)}};P.MemorySessionTraceManager=oe});var Ge=h(T=>{"use strict";var se=T&&T.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(T,"__esModule",{value:!0});T.envFilePath=Wt;T.parseEnvFile=Fe;T.loadEnvFile=Ht;var Kt=se(require("node:fs")),Zt=se(require("node:os")),qe=se(require("node:path"));function Wt(e,t,r){let n=r?process.env[r]:void 0,o=n&&n.length>0?n:qe.default.join(Zt.default.homedir(),e);return qe.default.join(o,t)}function Fe(e){let t={};for(let r of e.split(`
19
- `)){let n=r.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<0)continue;let i=n.slice(0,o).trim(),a=n.slice(o+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),i&&(t[i]=a)}return t}function Ht(e){let t;try{t=Kt.default.readFileSync(e,"utf-8")}catch{return}let r=Fe(t);for(let[n,o]of Object.entries(r))process.env[n]===void 0&&(process.env[n]=o)}});var b=h(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});s.loadEnvFile=s.parseEnvFile=s.envFilePath=s.MemorySessionTraceManager=s.DiskSessionTraceManager=s.generateUlid=s.TraceManager=s.MAX_POST_BYTES=s.parseHeadersEnv=s.envOptionsResolver=s.postOtlp=s.MemoryTransport=s.DiskTransport=s.MemoryRetryQueue=s.DiskRetryQueue=s.GUARD_STATUS_REFUSED=s.evaluateGuard=s.MAX_SPAN_BYTES=s.enforceSpanBudget=s.mergeBatch=s.attachGuard=s.buildPayload=s.clientAttrs=s.guardAttrs=s.attrsFromRecord=s.toOtlpValue=s.snakeCase=s.newSpanId=s.ulidToTraceId=s.MAX_BYTES=s.PATTERNS=s.applyMatches=s.resolveOverlaps=s.collectMatches=s.truncateTo=s.truncate=s.redact=void 0;var S=Y();Object.defineProperty(s,"redact",{enumerable:!0,get:function(){return S.redact}});Object.defineProperty(s,"truncate",{enumerable:!0,get:function(){return S.truncate}});Object.defineProperty(s,"truncateTo",{enumerable:!0,get:function(){return S.truncateTo}});Object.defineProperty(s,"collectMatches",{enumerable:!0,get:function(){return S.collectMatches}});Object.defineProperty(s,"resolveOverlaps",{enumerable:!0,get:function(){return S.resolveOverlaps}});Object.defineProperty(s,"applyMatches",{enumerable:!0,get:function(){return S.applyMatches}});Object.defineProperty(s,"PATTERNS",{enumerable:!0,get:function(){return S.PATTERNS}});Object.defineProperty(s,"MAX_BYTES",{enumerable:!0,get:function(){return S.MAX_BYTES}});var _=z();Object.defineProperty(s,"ulidToTraceId",{enumerable:!0,get:function(){return _.ulidToTraceId}});Object.defineProperty(s,"newSpanId",{enumerable:!0,get:function(){return _.newSpanId}});Object.defineProperty(s,"snakeCase",{enumerable:!0,get:function(){return _.snakeCase}});Object.defineProperty(s,"toOtlpValue",{enumerable:!0,get:function(){return _.toOtlpValue}});Object.defineProperty(s,"attrsFromRecord",{enumerable:!0,get:function(){return _.attrsFromRecord}});Object.defineProperty(s,"guardAttrs",{enumerable:!0,get:function(){return _.guardAttrs}});Object.defineProperty(s,"clientAttrs",{enumerable:!0,get:function(){return _.clientAttrs}});Object.defineProperty(s,"buildPayload",{enumerable:!0,get:function(){return _.buildPayload}});Object.defineProperty(s,"attachGuard",{enumerable:!0,get:function(){return _.attachGuard}});Object.defineProperty(s,"mergeBatch",{enumerable:!0,get:function(){return _.mergeBatch}});Object.defineProperty(s,"enforceSpanBudget",{enumerable:!0,get:function(){return _.enforceSpanBudget}});Object.defineProperty(s,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return _.MAX_SPAN_BYTES}});var Ve=Oe();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return Ve.evaluateGuard}});Object.defineProperty(s,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return Ve.GUARD_STATUS_REFUSED}});var Ye=W();Object.defineProperty(s,"DiskRetryQueue",{enumerable:!0,get:function(){return Ye.DiskRetryQueue}});Object.defineProperty(s,"MemoryRetryQueue",{enumerable:!0,get:function(){return Ye.MemoryRetryQueue}});var A=je();Object.defineProperty(s,"DiskTransport",{enumerable:!0,get:function(){return A.DiskTransport}});Object.defineProperty(s,"MemoryTransport",{enumerable:!0,get:function(){return A.MemoryTransport}});Object.defineProperty(s,"postOtlp",{enumerable:!0,get:function(){return A.postOtlp}});Object.defineProperty(s,"envOptionsResolver",{enumerable:!0,get:function(){return A.envOptionsResolver}});Object.defineProperty(s,"parseHeadersEnv",{enumerable:!0,get:function(){return A.parseHeadersEnv}});Object.defineProperty(s,"MAX_POST_BYTES",{enumerable:!0,get:function(){return A.MAX_POST_BYTES}});var Xe=re();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return Xe.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return Xe.generateUlid}});var ze=Ue();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return ze.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return ze.MemorySessionTraceManager}});var ie=Ge();Object.defineProperty(s,"envFilePath",{enumerable:!0,get:function(){return ie.envFilePath}});Object.defineProperty(s,"parseEnvFile",{enumerable:!0,get:function(){return ie.parseEnvFile}});Object.defineProperty(s,"loadEnvFile",{enumerable:!0,get:function(){return ie.loadEnvFile}})});var Ke=y(require("node:os")),$=y(require("node:path")),ae=y(b());var Jt="pinta-musecode.env";function Qt(){let e=process.env.XDG_CONFIG_HOME;return e&&e.length>0?$.default.join(e,"muse"):$.default.join(Ke.default.homedir(),".config","muse")}function er(){return $.default.join(Qt(),Jt)}function Ze(e=er()){(0,ae.loadEnvFile)(e)}var We=y(require("node:os")),ue=y(require("node:path"));function tr(){return process.env.PINTA_MUSECODE_DATA||process.env.PINTA_PLUGIN_DATA||ue.default.join(We.default.homedir(),".pinta","adaptors","pinta-musecode")}function He(){let e=tr();return{pluginData:e,tracePath:ue.default.join(e,"trace.json")}}function Je(){return process.env.PINTA_MUSE_ENFORCE==="1"}function Qe(){return process.env.PINTA_MUSE_LLM_EVENTS==="1"}var rr=["SessionStart","UserPromptSubmit","PreToolUse","PermissionRequest","PostToolUse","PreLLMCall","PostLLMCall","PreCompact","PostCompact","SubagentStart","SubagentStop","Stop"],nr=new Set(rr);function or(e){return nr.has(e)}var sr=["hook_event_name","event","hook","hook_event","eventName"];function et(e,t){for(let r of e){let n=r.startsWith("--event=")?r.slice(8):r;if(or(n))return n}for(let r of sr){let n=t[r];if(typeof n=="string"&&n.length>0)return n}return null}function U(e){return e==="PreToolUse"||e==="PermissionRequest"}function tt(e){return e==="PreLLMCall"||e==="PostLLMCall"}var ir=new Set(["subagent_spawn","subagent_status","subagent_send_message","subagent_cancel","subagent_wait","subagent_read_result"]);function rt(e){return e!==void 0&&ir.has(e)}var ft=y(b());var nt=y(b());var k="0.3.0";var ar=1e4,ur=`pinta-musecode/${k}`;function ot(e,t){return(0,nt.evaluateGuard)(e,t,{timeoutMs:ar,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:ur})}function cr(){let e=process.env.PINTA_MUSE_DENY_FORMAT;return e==="exit2"||e==="json"?e:"auto"}function lr(e,t){return U(e)?{hookSpecificOutput:{hookEventName:e,permissionDecision:"deny",permissionDecisionReason:t}}:{decision:"block",reason:t}}function st(e,t,r={}){let n=r.stdout??(a=>process.stdout.write(a)),o=r.stderr??(a=>process.stderr.write(a)),i=cr();return i==="exit2"?(o(`${t}
20
- `),{written:!0,exitCode:2}):(n(JSON.stringify(lr(e,t))+`
12
+ `),!1}finally{clearTimeout(o)}}var Z=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new xe.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??je}async send(t){let r=this.resolveOptions();if(!r||this.dropIfOversized(t))return;await D(t,r,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(t&&this.queue.tryAcquireLock())try{let r=this.queue.readAll();if(r.length===0)return;let{chunks:n,oversize:o}=De(r,u=>U(u.payload),l.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized retry ${o.length===1?"entry":"entries"} (each > ${l.MAX_POST_BYTES} bytes \u2014 the backend caps the request body, so they can never be delivered)
13
+ `);let i=[].concat(...n),a=0;for(let u of n){if(!await D((0,Me.mergeBatch)(u.map(y=>y.payload)),t,this.logPrefix))break;a+=u.length}this.queue.rewrite(i.slice(a))}catch(r){process.stderr.write(`[${this.logPrefix}] flush failed: ${r?.message??String(r)}
14
+ `)}finally{this.queue.release()}}dropIfOversized(t){let r=U(t);return r<=l.MAX_POST_BYTES?!1:(process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (${r} > ${l.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
15
+ `),!0)}};l.DiskTransport=Z;var J=class{queue=new xe.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let r=this.resolveOptions();if(!r)return;if(U(t)>l.MAX_POST_BYTES){process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (> ${l.MAX_POST_BYTES} bytes) \u2014 undeliverable, not buffered
16
+ `);return}await D(t,r,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(!t)return;let r=this.queue.drain();if(r.length===0)return;let{chunks:n,oversize:o}=De(r,U,l.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized buffered ${o.length===1?"payload":"payloads"} (each > ${l.MAX_POST_BYTES} bytes \u2014 undeliverable)
17
+ `);let i=[].concat(...n),a=0;for(let u of n){if(!await D((0,Me.mergeBatch)(u),t,this.logPrefix))break;a+=u.length}for(let u of i.slice(a))this.queue.enqueue(u)}};l.MemoryTransport=J});var re=h(T=>{"use strict";var te=T&&T.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(T,"__esModule",{value:!0});T.TraceManager=void 0;T.generateUlid=Be;var Ie=te(require("fs")),Vt=te(require("path")),Yt=te(require("crypto")),Xt=I(),Q="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Be(){let e=Date.now(),t="",r=e;for(let i=0;i<10;i++)t=Q[r&31]+t,r=Math.floor(r/32);let n=Yt.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=Q[n[i]&31];for(;o.length<16;)o+=Q[0];return t+o}var ee=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=Be();return this.save(t),t}currentTrace(){try{let t=Ie.default.readFileSync(this.tracePath,"utf-8"),{traceId:r}=JSON.parse(t);if(r)return r}catch{}return this.newTrace()}save(t){try{Ie.default.mkdirSync(Vt.default.dirname(this.tracePath),{recursive:!0}),(0,Xt.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(r){process.stderr.write(`[pinta-core] trace persistence failed: ${r}
18
+ `)}}};T.TraceManager=ee});var Ge=h(S=>{"use strict";var Ue=S&&S.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(S,"__esModule",{value:!0});S.MemorySessionTraceManager=S.DiskSessionTraceManager=void 0;var Ce=Ue(require("fs")),zt=Ue(require("path")),Le=re(),Ht=I(),$e=200,ne=class{tracePath;maxSessions;constructor(t,r={}){this.tracePath=t,this.maxSessions=r.maxSessions??$e}read(){try{let t=JSON.parse(Ce.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{Ce.default.mkdirSync(zt.default.dirname(this.tracePath),{recursive:!0});let r=Object.entries(t),n=r.length>this.maxSessions?Object.fromEntries(r.slice(-this.maxSessions)):t;(0,Ht.atomicWriteFileSync)(this.tracePath,JSON.stringify(n))}catch{}}newTrace(t){let r=t||"default",n=(0,Le.generateUlid)(),o=this.read();return o[r]=n,this.write(o),n}currentTrace(t){let r=t||"default",n=this.read()[r];return n||this.newTrace(r)}};S.DiskSessionTraceManager=ne;var oe=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??$e}newTrace(t){let r=t||"default",n=(0,Le.generateUlid)();if(this.map.set(r,n),this.map.size>this.maxSessions){let o=this.map.keys().next().value;o!==void 0&&this.map.delete(o)}return n}currentTrace(t){let r=t||"default";return this.map.get(r)??this.newTrace(r)}};S.MemorySessionTraceManager=oe});var Ve=h(b=>{"use strict";var se=b&&b.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(b,"__esModule",{value:!0});b.envFilePath=Zt;b.parseEnvFile=qe;b.loadEnvFile=Jt;var Kt=se(require("node:fs")),Wt=se(require("node:os")),Fe=se(require("node:path"));function Zt(e,t,r){let n=r?process.env[r]:void 0,o=n&&n.length>0?n:Fe.default.join(Wt.default.homedir(),e);return Fe.default.join(o,t)}function qe(e){let t={};for(let r of e.split(`
19
+ `)){let n=r.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<0)continue;let i=n.slice(0,o).trim(),a=n.slice(o+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),i&&(t[i]=a)}return t}function Jt(e){let t;try{t=Kt.default.readFileSync(e,"utf-8")}catch{return}let r=qe(t);for(let[n,o]of Object.entries(r))process.env[n]===void 0&&(process.env[n]=o)}});var O=h(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});s.loadEnvFile=s.parseEnvFile=s.envFilePath=s.MemorySessionTraceManager=s.DiskSessionTraceManager=s.generateUlid=s.TraceManager=s.MAX_POST_BYTES=s.parseHeadersEnv=s.envOptionsResolver=s.postOtlp=s.MemoryTransport=s.DiskTransport=s.MemoryRetryQueue=s.DiskRetryQueue=s.GUARD_BUDGET_HEADER=s.GUARD_STATUS_REFUSED=s.evaluateGuard=s.MAX_SPAN_BYTES=s.enforceSpanBudget=s.mergeBatch=s.attachGuard=s.buildPayload=s.clientAttrs=s.guardAttrs=s.attrsFromRecord=s.toOtlpValue=s.snakeCase=s.newSpanId=s.ulidToTraceId=s.MAX_BYTES=s.PATTERNS=s.applyMatches=s.resolveOverlaps=s.collectMatches=s.truncateTo=s.truncate=s.redact=void 0;var v=Y();Object.defineProperty(s,"redact",{enumerable:!0,get:function(){return v.redact}});Object.defineProperty(s,"truncate",{enumerable:!0,get:function(){return v.truncate}});Object.defineProperty(s,"truncateTo",{enumerable:!0,get:function(){return v.truncateTo}});Object.defineProperty(s,"collectMatches",{enumerable:!0,get:function(){return v.collectMatches}});Object.defineProperty(s,"resolveOverlaps",{enumerable:!0,get:function(){return v.resolveOverlaps}});Object.defineProperty(s,"applyMatches",{enumerable:!0,get:function(){return v.applyMatches}});Object.defineProperty(s,"PATTERNS",{enumerable:!0,get:function(){return v.PATTERNS}});Object.defineProperty(s,"MAX_BYTES",{enumerable:!0,get:function(){return v.MAX_BYTES}});var g=z();Object.defineProperty(s,"ulidToTraceId",{enumerable:!0,get:function(){return g.ulidToTraceId}});Object.defineProperty(s,"newSpanId",{enumerable:!0,get:function(){return g.newSpanId}});Object.defineProperty(s,"snakeCase",{enumerable:!0,get:function(){return g.snakeCase}});Object.defineProperty(s,"toOtlpValue",{enumerable:!0,get:function(){return g.toOtlpValue}});Object.defineProperty(s,"attrsFromRecord",{enumerable:!0,get:function(){return g.attrsFromRecord}});Object.defineProperty(s,"guardAttrs",{enumerable:!0,get:function(){return g.guardAttrs}});Object.defineProperty(s,"clientAttrs",{enumerable:!0,get:function(){return g.clientAttrs}});Object.defineProperty(s,"buildPayload",{enumerable:!0,get:function(){return g.buildPayload}});Object.defineProperty(s,"attachGuard",{enumerable:!0,get:function(){return g.attachGuard}});Object.defineProperty(s,"mergeBatch",{enumerable:!0,get:function(){return g.mergeBatch}});Object.defineProperty(s,"enforceSpanBudget",{enumerable:!0,get:function(){return g.enforceSpanBudget}});Object.defineProperty(s,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return g.MAX_SPAN_BYTES}});var ie=Ae();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return ie.evaluateGuard}});Object.defineProperty(s,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return ie.GUARD_STATUS_REFUSED}});Object.defineProperty(s,"GUARD_BUDGET_HEADER",{enumerable:!0,get:function(){return ie.GUARD_BUDGET_HEADER}});var Ye=W();Object.defineProperty(s,"DiskRetryQueue",{enumerable:!0,get:function(){return Ye.DiskRetryQueue}});Object.defineProperty(s,"MemoryRetryQueue",{enumerable:!0,get:function(){return Ye.MemoryRetryQueue}});var A=Ne();Object.defineProperty(s,"DiskTransport",{enumerable:!0,get:function(){return A.DiskTransport}});Object.defineProperty(s,"MemoryTransport",{enumerable:!0,get:function(){return A.MemoryTransport}});Object.defineProperty(s,"postOtlp",{enumerable:!0,get:function(){return A.postOtlp}});Object.defineProperty(s,"envOptionsResolver",{enumerable:!0,get:function(){return A.envOptionsResolver}});Object.defineProperty(s,"parseHeadersEnv",{enumerable:!0,get:function(){return A.parseHeadersEnv}});Object.defineProperty(s,"MAX_POST_BYTES",{enumerable:!0,get:function(){return A.MAX_POST_BYTES}});var Xe=re();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return Xe.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return Xe.generateUlid}});var ze=Ge();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return ze.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return ze.MemorySessionTraceManager}});var ae=Ve();Object.defineProperty(s,"envFilePath",{enumerable:!0,get:function(){return ae.envFilePath}});Object.defineProperty(s,"parseEnvFile",{enumerable:!0,get:function(){return ae.parseEnvFile}});Object.defineProperty(s,"loadEnvFile",{enumerable:!0,get:function(){return ae.loadEnvFile}})});var He=m(require("node:os")),L=m(require("node:path")),ue=m(O());var Qt="pinta-musecode.env";function er(){let e=process.env.XDG_CONFIG_HOME;return e&&e.length>0?L.default.join(e,"muse"):L.default.join(He.default.homedir(),".config","muse")}function tr(){return L.default.join(er(),Qt)}function Ke(e=tr()){(0,ue.loadEnvFile)(e)}var We=m(require("node:os")),ce=m(require("node:path"));function rr(){return process.env.PINTA_MUSECODE_DATA||process.env.PINTA_PLUGIN_DATA||ce.default.join(We.default.homedir(),".pinta","adaptors","pinta-musecode")}function Ze(){let e=rr();return{pluginData:e,tracePath:ce.default.join(e,"trace.json")}}function Je(){return process.env.PINTA_MUSE_ENFORCE==="1"}function Qe(){return process.env.PINTA_MUSE_LLM_EVENTS==="1"}var nr=["SessionStart","UserPromptSubmit","PreToolUse","PermissionRequest","PostToolUse","PreLLMCall","PostLLMCall","PreCompact","PostCompact","SubagentStart","SubagentStop","Stop"],or=new Set(nr);function sr(e){return or.has(e)}var ir=["hook_event_name","event","hook","hook_event","eventName"];function et(e,t){for(let r of e){let n=r.startsWith("--event=")?r.slice(8):r;if(sr(n))return n}for(let r of ir){let n=t[r];if(typeof n=="string"&&n.length>0)return n}return null}function $(e){return e==="PreToolUse"||e==="PermissionRequest"}function tt(e){return e==="PreLLMCall"||e==="PostLLMCall"}var ar=new Set(["subagent_spawn","subagent_status","subagent_send_message","subagent_cancel","subagent_wait","subagent_read_result"]);function rt(e){return e!==void 0&&ar.has(e)}var dt=m(O());var nt=m(O());var k="0.4.1";var ur=1e4,cr=`pinta-musecode/${k}`;function ot(e,t){return(0,nt.evaluateGuard)(e,t,{timeoutMs:ur,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:cr})}function lr(){let e=process.env.PINTA_MUSE_DENY_FORMAT;return e==="exit2"||e==="json"?e:"auto"}function fr(e,t){return $(e)?{hookSpecificOutput:{hookEventName:e,permissionDecision:"deny",permissionDecisionReason:t}}:{decision:"block",reason:t}}function st(e,t,r={}){let n=r.stdout??(a=>process.stdout.write(a)),o=r.stderr??(a=>process.stderr.write(a)),i=lr();return i==="exit2"?(o(`${t}
20
+ `),{written:!0,exitCode:2}):(n(JSON.stringify(fr(e,t))+`
21
21
  `),i==="json"?{written:!0,exitCode:0}:(o(`${t}
22
- `),{written:!0,exitCode:2}))}var it=y(b()),q=class extends it.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-musecode"})}};var at=y(b()),F=class extends at.TraceManager{constructor(t){super(t.tracePath)}};var V=y(require("node:os")),w=y(b());var fr="musecode",g="muse",G;function pr(){if(G===void 0)try{G=V.default.userInfo().username}catch{G=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return G}function dr(e){for(let t of["muse_version","version","cli_version"]){let r=e[t];if(typeof r=="string"&&r.length>0)return r}return process.env.MUSE_VERSION??"unknown"}var gr=new Set([`${g}.hook`,`${g}.tool_name`,`${g}.tool_use_id`,`${g}.session_id`,`${g}.cwd`,`${g}.permission_mode`,`${g}.agent_id`,`${g}.agent_type`]),_r=new Set([`${g}.tool_input`,`${g}.tool_response`]),yr={skipRedactKeys:gr,bashContextKeys:_r};function mr(e){let t=[];t.push({key:"ingest.type",value:{stringValue:fr}}),t.push({key:`${g}.hook`,value:{stringValue:e.hook_event_name}});let r={};for(let[n,o]of Object.entries(e))n!=="hook_event_name"&&(r[n]=o);return t.push(...(0,w.attrsFromRecord)(r,g,yr)),t}function hr(e){return[{key:"service.name",value:{stringValue:"muse-code"}},{key:"service.version",value:{stringValue:dr(e)}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-musecode"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:k}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:pr()}},{key:"host.name",value:{stringValue:V.default.hostname()}},{key:"host.arch",value:{stringValue:V.default.arch()}}]}function ut(e){return(0,w.buildPayload)({traceId:e.traceId,spanName:`${g}.${(0,w.snakeCase)(e.event.hook_event_name)}`,attributes:mr(e.event),resource:hr(e.event),scope:{name:"pinta-musecode",version:k},now:e.now})}function ce(e,t,r={}){let n=new F(t),o=r.traceMode==="new"?n.newTrace():n.currentTrace();return ut({event:e,traceId:o})}async function ct(e,t){let r=new q(t);await r.flush(),await r.send(e)}async function Er(e,t,r={}){await ct(ce(e,t,r),t)}async function D(e,t,r={}){try{await Er(e,t,r)}catch(n){process.stderr.write(`[pinta-musecode] telemetry emit failed: ${n}
23
- `)}}async function lt(e,t){try{await ct(e,t)}catch(r){process.stderr.write(`[pinta-musecode] telemetry emit failed: ${r}
24
- `)}}async function pt(e,t){if(rt(e.tool_name))return await D(e,t),0;let r=ce(e,t),n=await ot(r,process.env.PINTA_GUARD_ENDPOINT),o=0;if(n?.decision==="DENY"&&Je()){let i=n.userMessage??n.reason??"guard_deny";o=st(e.hook_event_name,i).exitCode}return(0,ft.attachGuard)(r,n),await lt(r,t),o}async function dt(e,t){return await D(e,t),0}async function gt(e,t){return await D(e,t,{traceMode:"new"}),0}async function _t(e){return 0}async function Pr(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}function Sr(e){let t=e.trim();if(t.length===0)return{};try{let r=JSON.parse(t);if(r!==null&&typeof r=="object"&&!Array.isArray(r))return r}catch{}return{}}async function vr(e,t){let r=e.hook_event_name;return U(r)?pt(e,t):r==="UserPromptSubmit"?gt(e,t):tt(r)&&!Qe()?_t(e):dt(e,t)}async function yt(e=process.argv.slice(2)){let t=0;try{let r=He(),n=Sr(await Pr()),o=et(e,n);if(o===null)return process.stderr.write(`[pinta-musecode] could not resolve hook event name; skipping
25
- `),0;let i={...n,hook_event_name:o};t=await vr(i,r)}catch(r){process.stderr.write(`[pinta-musecode] error: ${r}
26
- `),t=0}return t}Ze();async function Tr(){let e=await yt();process.exit(e)}Tr();
22
+ `),{written:!0,exitCode:2}))}var it=m(O()),G=class extends it.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-musecode"})}};var at=m(O()),F=class extends at.TraceManager{constructor(t){super(t.tracePath)}};var V=m(require("node:os"));var dr=new Set(["unknown","undefined","null","n/a","none","-","auto","default"]);function ut(e){if(typeof e!="string")return;let t=e.trim();if(!(!t||t.startsWith("{")||t.startsWith("[")||dr.has(t.toLowerCase())))return t}var w=m(O());var pr="musecode",_="muse",q;function _r(){if(q===void 0)try{q=V.default.userInfo().username}catch{q=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return q}function gr(e){for(let t of["muse_version","version","cli_version"]){let r=e[t];if(typeof r=="string"&&r.length>0)return r}return process.env.MUSE_VERSION??"unknown"}var mr=new Set([`${_}.hook`,`${_}.tool_name`,`${_}.tool_use_id`,`${_}.session_id`,`${_}.cwd`,`${_}.permission_mode`,`${_}.agent_id`,`${_}.agent_type`]),yr=new Set([`${_}.tool_input`,`${_}.tool_response`]),hr={skipRedactKeys:mr,bashContextKeys:yr};function Er(e){let t=[];t.push({key:"ingest.type",value:{stringValue:pr}}),t.push({key:`${_}.hook`,value:{stringValue:e.hook_event_name}});let r={},n=ut(e.model);for(let[o,i]of Object.entries(e))if(o!=="hook_event_name"){if(o==="model"){i!==n&&(r.model_raw=i);continue}if(o==="model_source"){r.model_source_raw=i;continue}r[o]=i}return n&&(r.model=n,r.model_source="reported:model"),t.push(...(0,w.attrsFromRecord)(r,_,hr)),t}function Pr(e){return[{key:"service.name",value:{stringValue:"muse-code"}},{key:"service.version",value:{stringValue:gr(e)}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-musecode"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:k}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:_r()}},{key:"host.name",value:{stringValue:V.default.hostname()}},{key:"host.arch",value:{stringValue:V.default.arch()}}]}function ct(e){return(0,w.buildPayload)({traceId:e.traceId,spanName:`${_}.${(0,w.snakeCase)(e.event.hook_event_name)}`,attributes:Er(e.event),resource:Pr(e.event),scope:{name:"pinta-musecode",version:k},now:e.now})}function le(e,t,r={}){let n=new F(t),o=r.traceMode==="new"?n.newTrace():n.currentTrace();return ct({event:e,traceId:o})}async function lt(e,t){let r=new G(t);await r.flush(),await r.send(e)}async function Sr(e,t,r={}){await lt(le(e,t,r),t)}async function R(e,t,r={}){try{await Sr(e,t,r)}catch(n){process.stderr.write(`[pinta-musecode] telemetry emit failed: ${n}
23
+ `)}}async function ft(e,t){try{await lt(e,t)}catch(r){process.stderr.write(`[pinta-musecode] telemetry emit failed: ${r}
24
+ `)}}async function pt(e,t){if(rt(e.tool_name))return await R(e,t),0;let r=le(e,t),n=await ot(r,process.env.PINTA_GUARD_ENDPOINT),o=0;if(n?.decision==="DENY"&&Je()){let i=n.userMessage??n.reason??"guard_deny";o=st(e.hook_event_name,i).exitCode}return(0,dt.attachGuard)(r,n),await ft(r,t),o}async function _t(e,t){return await R(e,t),0}async function gt(e,t){return await R(e,t,{traceMode:"new"}),0}async function mt(e){return 0}async function vr(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}function Tr(e){let t=e.trim();if(t.length===0)return{};try{let r=JSON.parse(t);if(r!==null&&typeof r=="object"&&!Array.isArray(r))return r}catch{}return{}}async function br(e,t){let r=e.hook_event_name;return $(r)?pt(e,t):r==="UserPromptSubmit"?gt(e,t):tt(r)&&!Qe()?mt(e):_t(e,t)}async function yt(e=process.argv.slice(2)){let t=0;try{let r=Ze(),n=Tr(await vr()),o=et(e,n);if(o===null)return process.stderr.write(`[pinta-musecode] could not resolve hook event name; skipping
25
+ `),0;let i={...n,hook_event_name:o};t=await br(i,r)}catch(r){process.stderr.write(`[pinta-musecode] error: ${r}
26
+ `),t=0}return t}Ke();async function Or(){let e=await yt();process.exit(e)}Or();
package/dist/index.mjs CHANGED
@@ -1,27 +1,27 @@
1
1
  import{createRequire as __pintaCreateRequire}from 'node:module';const require=__pintaCreateRequire(import.meta.url);
2
- var yt=Object.create;var le=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var Et=Object.getOwnPropertyNames;var Pt=Object.getPrototypeOf,St=Object.prototype.hasOwnProperty;var _=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var vt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Et(t))!St.call(e,o)&&o!==r&&le(e,o,{get:()=>t[o],enumerable:!(n=ht(t,o))||n.enumerable});return e};var O=(e,t,r)=>(r=e!=null?yt(Pt(e)):{},vt(t||!e||!e.__esModule?le(r,"default",{value:e,enumerable:!0}):r,e));var V=h(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.PATTERNS=p.MAX_BYTES=void 0;p.truncateTo=fe;p.truncate=Tt;p.collectMatches=pe;p.resolveOverlaps=de;p.applyMatches=ge;p.redact=bt;p.MAX_BYTES=102400;function fe(e,t){let r=Buffer.from(e,"utf-8");return r.length<=t?e:`${r.subarray(0,Math.max(0,t)).toString("utf-8")}\u2026[TRUNCATED:${r.length}]`}function Tt(e){return fe(e,p.MAX_BYTES)}p.PATTERNS=[{type:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{type:"aws_secret_key",regex:/(?:aws[_-]?secret(?:[_-]?(?:access)?[_-]?key)?)\s*[:=]\s*["']?([A-Za-z0-9/+=]{40})(?![A-Za-z0-9/+=])/gi,captureGroup:1},{type:"gcp_service_account",regex:/\{[\s\S]{0,200}?"type"\s*:\s*"service_account"[\s\S]*?\}/g},{type:"github_token",regex:/gh[pousr]_[A-Za-z0-9]{36,}/g},{type:"gitlab_token",regex:/glpat-[A-Za-z0-9_-]{20}/g},{type:"slack_token",regex:/xox[abrsp]-[0-9A-Za-z-]{10,}/g},{type:"openai_key",regex:/sk-(?:proj-)?[A-Za-z0-9_-]{40,}/g},{type:"anthropic_key",regex:/sk-ant-[A-Za-z0-9_-]{50,}/g},{type:"stripe_key",regex:/(?:sk|rk|pk)_(?:live|test)_[A-Za-z0-9]{20,}/g},{type:"jwt",regex:/eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g},{type:"private_key_block",regex:/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g},{type:"bearer_token",regex:/bearer\s+([A-Za-z0-9._~+/=-]{12,})/gi,captureGroup:1},{type:"basic_auth",regex:/basic\s+([A-Za-z0-9+/=]{12,})/gi,captureGroup:1},{type:"db_url_password",regex:/\b(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|redis):\/\/[^:\s/]+:([^@\s]+)@/gi,captureGroup:1},{type:"cli_password_flag",regex:/(?:--password|--pass|--pwd)[=\s]([^\s'"]+)/g,captureGroup:1},{type:"cli_password_short",regex:/\s-p([^\s'"]+)/g,captureGroup:1,requireContext:"bash"},{type:"env_var_secret",regex:/^(?:export\s+)?([A-Z][A-Z0-9_]*(?:KEY|SECRET|TOKEN|PASSWORD|PASSWD|PWD|API_KEY)[A-Z0-9_]*)\s*=\s*["']?([^\s"'\n]+)/gm,captureGroup:2}];function pe(e,t){let r=[];for(let n of p.PATTERNS){if(n.requireContext&&n.requireContext!==t.context)continue;let o=new RegExp(n.regex.source,n.regex.flags),i;for(;(i=o.exec(e))!==null;){let a=n.captureGroup??0,u=i[a];if(u===void 0){i.index===o.lastIndex&&o.lastIndex++;continue}let c=i.index,y=i.index+i[0].length,M=c+i[0].indexOf(u),mt=M+u.length;r.push({start:c,end:y,replaceStart:M,replaceEnd:mt,type:n.type}),i.index===o.lastIndex&&o.lastIndex++}}return r}function de(e){let t=[...e].sort((o,i)=>o.start!==i.start?o.start-i.start:i.end-i.start-(o.end-o.start)),r=[],n=-1;for(let o of t)o.start<n||(r.push(o),n=o.end);return r}function ge(e,t){let r=[...t].sort((o,i)=>i.replaceStart-o.replaceStart),n=e;for(let o of r)n=n.slice(0,o.replaceStart)+`[REDACTED:${o.type}]`+n.slice(o.replaceEnd);return n}function bt(e,t={}){if(e.length===0)return e;let r=pe(e,t);if(r.length===0)return e;let n=de(r);return ge(e,n)}});var X=h(f=>{"use strict";var Ot=f&&f.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(f,"__esModule",{value:!0});f.MAX_SPAN_BYTES=void 0;f.ulidToTraceId=he;f.newSpanId=Ee;f.snakeCase=wt;f.toOtlpValue=Pe;f.attrsFromRecord=xt;f.guardAttrs=Se;f.clientAttrs=ve;f.enforceSpanBudget=Te;f.buildPayload=Mt;f.attachGuard=be;f.mergeBatch=Rt;var At=Ot(_("crypto")),Y=V(),kt="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function he(e){if(e.length!==26)throw new Error(`ulidToTraceId: expected 26 chars, got ${e.length}`);let t=0n;for(let n of e){let o=kt.indexOf(n);if(o<0)throw new Error(`ulidToTraceId: invalid Crockford char "${n}"`);t=t<<5n|BigInt(o)}let r=(1n<<128n)-1n;return t&=r,t.toString(16).padStart(32,"0")}function Ee(){return At.default.randomBytes(8).toString("hex")}function wt(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var _e=new Set;function N(e,t,r){let n=(0,Y.truncate)(t);if((r.skipRedactKeys??_e).has(e))return n;let o=(r.bashContextKeys??_e).has(e)?"bash":void 0;return(0,Y.redact)(n,{context:o})}function Pe(e,t,r={}){if(t==null)return null;switch(typeof t){case"string":return{stringValue:N(e,t,r)};case"boolean":return{boolValue:t};case"number":return Number.isInteger(t)?{intValue:t}:{doubleValue:t};case"object":try{return{stringValue:N(e,JSON.stringify(t),r)}}catch{return{stringValue:N(e,String(t),r)}}default:return{stringValue:N(e,String(t),r)}}}function xt(e,t,r={}){let n=[];for(let[o,i]of Object.entries(e)){let a=`${t}.${o}`,u=Pe(a,i,r);u!==null&&n.push({key:a,value:u})}return n}function Se(e){let t=[{key:"pinta.guard.decision",value:{stringValue:e.decision.toLowerCase()}},{key:"pinta.guard.duration_ms",value:{intValue:e.durationMs}}];return e.reason&&t.push({key:"pinta.guard.matched_rule",value:{stringValue:e.reason}}),e.failOpenReason&&t.push({key:"pinta.guard.fail_open_reason",value:{stringValue:e.failOpenReason}}),t}function ve(e){return[{key:"pinta.client.rtt_ms",value:Number.isInteger(e.rttMs)?{intValue:e.rttMs}:{doubleValue:e.rttMs}},{key:"pinta.client.op",value:{stringValue:e.op}}]}f.MAX_SPAN_BYTES=800*1024;function me(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var ye=1024;function Te(e,t=f.MAX_SPAN_BYTES){let r=me(e);for(let n=0;n<100&&r>t;n++){let o=null,i=0;for(let c of e.attributes){if(!("stringValue"in c.value))continue;let y=Buffer.byteLength(c.value.stringValue,"utf-8");y>i&&(i=y,o=c.value)}if(o===null||i<=ye)break;let a=r-t,u=Math.max(ye,i-a-64);o.stringValue=(0,Y.truncateTo)(o.stringValue,u),r=me(e)}return e}function Mt(e){let t=e.now??Date.now(),r=(BigInt(t)*1000000n).toString(),n=[...e.attributes],o={traceId:he(e.traceId),spanId:Ee(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:r,endTimeUnixNano:r,attributes:n};Te(o);let i={resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[o]}]}]};return be(i,e.guard,e.clientTiming)}function be(e,t,r){let n=e.resourceSpans[0]?.scopeSpans[0]?.spans[0];if(!n)return e;t&&n.attributes.push(...Se(t));let o=r??(t?.clientRttMs!==void 0?{op:"guard",rttMs:t.clientRttMs}:null);return o&&n.attributes.push(...ve(o)),e}function Rt(e){let t=[];for(let r of e)t.push(...r.resourceSpans);return{resourceSpans:t}}});var Oe=h(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});A.GUARD_STATUS_REFUSED=void 0;A.evaluateGuard=It;var Dt=1e4,jt="pinta-core";function I(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var Nt=new Set(["ALLOW","DENY","REVIEW"]);A.GUARD_STATUS_REFUSED=410;async function It(e,t,r={}){if(!t||r.disabled)return null;let n=r.timeoutMs??Dt,o=Date.now(),i=new AbortController,a=setTimeout(()=>i.abort(),n);try{let u=await fetch(t,{method:"POST",headers:{"content-type":"application/json","user-agent":r.userAgent??jt,"x-pinta-relay-token":r.token??"",...r.agentType?{"x-pinta-agent-type":r.agentType}:{}},body:JSON.stringify(e),signal:i.signal});if(u.status===A.GUARD_STATUS_REFUSED)return I(Date.now()-o,"refused");if(u.status!==200)return I(Date.now()-o,"error");let c=await u.json(),y=c?.durationMs===void 0||typeof c.durationMs=="number"&&Number.isFinite(c.durationMs);if(!c||!Nt.has(c.decision)||!y)return I(Date.now()-o,"error");let M=Date.now()-o;return{decision:c.decision,reason:c.reason??null,userMessage:c.userMessage??null,durationMs:c.durationMs??M,clientRttMs:M}}catch(u){let c=u.name,y=c==="AbortError"||c==="TimeoutError"?"timeout":"error";return I(Date.now()-o,y)}finally{clearTimeout(a)}}});var C=h(R=>{"use strict";var Ct=R&&R.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(R,"__esModule",{value:!0});R.atomicWriteFileSync=Bt;var Ae=Ct(_("fs"));function Bt(e,t){let r=`${e}.${process.pid}.tmp`;Ae.default.writeFileSync(r,t),Ae.default.renameSync(r,e)}});var Z=h(E=>{"use strict";var ke=E&&E.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(E,"__esModule",{value:!0});E.MemoryRetryQueue=E.DiskRetryQueue=void 0;var d=ke(_("fs")),B=ke(_("path")),Lt=C(),L=1e3,$t=50,Ut=5,z=class{filePath;lockPath;logPrefix;constructor(t,r){this.filePath=B.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=r}enqueue(t){try{d.default.mkdirSync(B.default.dirname(this.filePath),{recursive:!0});let r=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
3
- `;d.default.appendFileSync(this.filePath,r),this.trim()}catch(r){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${r}
4
- `)}}readAll(){try{let t=d.default.readFileSync(this.filePath,"utf-8"),r=[];for(let n of t.split(`
5
- `))if(n.trim())try{let o=JSON.parse(n);Array.isArray(o?.payload?.resourceSpans)&&r.push(o)}catch{}return r}catch{return[]}}rewrite(t){try{if(t.length===0){d.default.existsSync(this.filePath)&&d.default.unlinkSync(this.filePath);return}d.default.mkdirSync(B.default.dirname(this.filePath),{recursive:!0}),(0,Lt.atomicWriteFileSync)(this.filePath,t.map(r=>JSON.stringify(r)).join(`
2
+ var ht=Object.create;var fe=Object.defineProperty;var Et=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var St=Object.getPrototypeOf,vt=Object.prototype.hasOwnProperty;var g=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Tt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Pt(t))!vt.call(e,o)&&o!==r&&fe(e,o,{get:()=>t[o],enumerable:!(n=Et(t,o))||n.enumerable});return e};var A=(e,t,r)=>(r=e!=null?ht(St(e)):{},Tt(t||!e||!e.__esModule?fe(r,"default",{value:e,enumerable:!0}):r,e));var V=h(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.PATTERNS=d.MAX_BYTES=void 0;d.truncateTo=de;d.truncate=bt;d.collectMatches=pe;d.resolveOverlaps=_e;d.applyMatches=ge;d.redact=Ot;d.MAX_BYTES=102400;function de(e,t){let r=Buffer.from(e,"utf-8");return r.length<=t?e:`${r.subarray(0,Math.max(0,t)).toString("utf-8")}\u2026[TRUNCATED:${r.length}]`}function bt(e){return de(e,d.MAX_BYTES)}d.PATTERNS=[{type:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{type:"aws_secret_key",regex:/(?:aws[_-]?secret(?:[_-]?(?:access)?[_-]?key)?)\s*[:=]\s*["']?([A-Za-z0-9/+=]{40})(?![A-Za-z0-9/+=])/gi,captureGroup:1},{type:"gcp_service_account",regex:/\{[\s\S]{0,200}?"type"\s*:\s*"service_account"[\s\S]*?\}/g},{type:"github_token",regex:/gh[pousr]_[A-Za-z0-9]{36,}/g},{type:"gitlab_token",regex:/glpat-[A-Za-z0-9_-]{20}/g},{type:"slack_token",regex:/xox[abrsp]-[0-9A-Za-z-]{10,}/g},{type:"openai_key",regex:/sk-(?:proj-)?[A-Za-z0-9_-]{40,}/g},{type:"anthropic_key",regex:/sk-ant-[A-Za-z0-9_-]{50,}/g},{type:"stripe_key",regex:/(?:sk|rk|pk)_(?:live|test)_[A-Za-z0-9]{20,}/g},{type:"jwt",regex:/eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g},{type:"private_key_block",regex:/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g},{type:"bearer_token",regex:/bearer\s+([A-Za-z0-9._~+/=-]{12,})/gi,captureGroup:1},{type:"basic_auth",regex:/basic\s+([A-Za-z0-9+/=]{12,})/gi,captureGroup:1},{type:"db_url_password",regex:/\b(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|redis):\/\/[^:\s/]+:([^@\s]+)@/gi,captureGroup:1},{type:"cli_password_flag",regex:/(?:--password|--pass|--pwd)[=\s]([^\s'"]+)/g,captureGroup:1},{type:"cli_password_short",regex:/\s-p([^\s'"]+)/g,captureGroup:1,requireContext:"bash"},{type:"env_var_secret",regex:/^(?:export\s+)?([A-Z][A-Z0-9_]*(?:KEY|SECRET|TOKEN|PASSWORD|PASSWD|PWD|API_KEY)[A-Z0-9_]*)\s*=\s*["']?([^\s"'\n]+)/gm,captureGroup:2}];function pe(e,t){let r=[];for(let n of d.PATTERNS){if(n.requireContext&&n.requireContext!==t.context)continue;let o=new RegExp(n.regex.source,n.regex.flags),i;for(;(i=o.exec(e))!==null;){let a=n.captureGroup??0,u=i[a];if(u===void 0){i.index===o.lastIndex&&o.lastIndex++;continue}let c=i.index,y=i.index+i[0].length,M=c+i[0].indexOf(u),yt=M+u.length;r.push({start:c,end:y,replaceStart:M,replaceEnd:yt,type:n.type}),i.index===o.lastIndex&&o.lastIndex++}}return r}function _e(e){let t=[...e].sort((o,i)=>o.start!==i.start?o.start-i.start:i.end-i.start-(o.end-o.start)),r=[],n=-1;for(let o of t)o.start<n||(r.push(o),n=o.end);return r}function ge(e,t){let r=[...t].sort((o,i)=>i.replaceStart-o.replaceStart),n=e;for(let o of r)n=n.slice(0,o.replaceStart)+`[REDACTED:${o.type}]`+n.slice(o.replaceEnd);return n}function Ot(e,t={}){if(e.length===0)return e;let r=pe(e,t);if(r.length===0)return e;let n=_e(r);return ge(e,n)}});var X=h(f=>{"use strict";var At=f&&f.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(f,"__esModule",{value:!0});f.MAX_SPAN_BYTES=void 0;f.ulidToTraceId=Ee;f.newSpanId=Pe;f.snakeCase=xt;f.toOtlpValue=Se;f.attrsFromRecord=Mt;f.guardAttrs=ve;f.clientAttrs=Te;f.enforceSpanBudget=be;f.buildPayload=Dt;f.attachGuard=Oe;f.mergeBatch=Rt;var kt=At(g("crypto")),Y=V(),wt="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Ee(e){if(e.length!==26)throw new Error(`ulidToTraceId: expected 26 chars, got ${e.length}`);let t=0n;for(let n of e){let o=wt.indexOf(n);if(o<0)throw new Error(`ulidToTraceId: invalid Crockford char "${n}"`);t=t<<5n|BigInt(o)}let r=(1n<<128n)-1n;return t&=r,t.toString(16).padStart(32,"0")}function Pe(){return kt.default.randomBytes(8).toString("hex")}function xt(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var me=new Set;function N(e,t,r){let n=(0,Y.truncate)(t);if((r.skipRedactKeys??me).has(e))return n;let o=(r.bashContextKeys??me).has(e)?"bash":void 0;return(0,Y.redact)(n,{context:o})}function Se(e,t,r={}){if(t==null)return null;switch(typeof t){case"string":return{stringValue:N(e,t,r)};case"boolean":return{boolValue:t};case"number":return Number.isInteger(t)?{intValue:t}:{doubleValue:t};case"object":try{return{stringValue:N(e,JSON.stringify(t),r)}}catch{return{stringValue:N(e,String(t),r)}}default:return{stringValue:N(e,String(t),r)}}}function Mt(e,t,r={}){let n=[];for(let[o,i]of Object.entries(e)){let a=`${t}.${o}`,u=Se(a,i,r);u!==null&&n.push({key:a,value:u})}return n}function ve(e){let t=[{key:"pinta.guard.decision",value:{stringValue:e.decision.toLowerCase()}},{key:"pinta.guard.duration_ms",value:{intValue:e.durationMs}}];return e.reason&&t.push({key:"pinta.guard.matched_rule",value:{stringValue:e.reason}}),e.failOpenReason&&t.push({key:"pinta.guard.fail_open_reason",value:{stringValue:e.failOpenReason}}),t}function Te(e){return[{key:"pinta.client.rtt_ms",value:Number.isInteger(e.rttMs)?{intValue:e.rttMs}:{doubleValue:e.rttMs}},{key:"pinta.client.op",value:{stringValue:e.op}}]}f.MAX_SPAN_BYTES=800*1024;function ye(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var he=1024;function be(e,t=f.MAX_SPAN_BYTES){let r=ye(e);for(let n=0;n<100&&r>t;n++){let o=null,i=0;for(let c of e.attributes){if(!("stringValue"in c.value))continue;let y=Buffer.byteLength(c.value.stringValue,"utf-8");y>i&&(i=y,o=c.value)}if(o===null||i<=he)break;let a=r-t,u=Math.max(he,i-a-64);o.stringValue=(0,Y.truncateTo)(o.stringValue,u),r=ye(e)}return e}function Dt(e){let t=e.now??Date.now(),r=(BigInt(t)*1000000n).toString(),n=[...e.attributes],o={traceId:Ee(e.traceId),spanId:Pe(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:r,endTimeUnixNano:r,attributes:n};be(o);let i={resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[o]}]}]};return Oe(i,e.guard,e.clientTiming)}function Oe(e,t,r){let n=e.resourceSpans[0]?.scopeSpans[0]?.spans[0];if(!n)return e;t&&n.attributes.push(...ve(t));let o=r??(t?.clientRttMs!==void 0?{op:"guard",rttMs:t.clientRttMs}:null);return o&&n.attributes.push(...Te(o)),e}function Rt(e){let t=[];for(let r of e)t.push(...r.resourceSpans);return{resourceSpans:t}}});var Ae=h(E=>{"use strict";Object.defineProperty(E,"__esModule",{value:!0});E.GUARD_STATUS_REFUSED=E.GUARD_BUDGET_HEADER=void 0;E.evaluateGuard=Bt;var jt=1e4,Nt="pinta-core";E.GUARD_BUDGET_HEADER="x-pinta-guard-budget-ms";function I(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var It=new Set(["ALLOW","DENY","REVIEW"]);E.GUARD_STATUS_REFUSED=410;async function Bt(e,t,r={}){if(!t||r.disabled)return null;let n=r.timeoutMs??jt,o=Date.now(),i=new AbortController,a=setTimeout(()=>i.abort(),n);try{let u=await fetch(t,{method:"POST",headers:{"content-type":"application/json","user-agent":r.userAgent??Nt,"x-pinta-relay-token":r.token??"",...r.agentType?{"x-pinta-agent-type":r.agentType}:{},...Number.isFinite(n)&&n>0?{[E.GUARD_BUDGET_HEADER]:String(n)}:{}},body:JSON.stringify(e),signal:i.signal});if(u.status===E.GUARD_STATUS_REFUSED)return I(Date.now()-o,"refused");if(u.status!==200)return I(Date.now()-o,"error");let c=await u.json(),y=c?.durationMs===void 0||typeof c.durationMs=="number"&&Number.isFinite(c.durationMs);if(!c||!It.has(c.decision)||!y)return I(Date.now()-o,"error");let M=Date.now()-o;return{decision:c.decision,reason:c.reason??null,userMessage:c.userMessage??null,durationMs:c.durationMs??M,clientRttMs:M}}catch(u){let c=u.name,y=c==="AbortError"||c==="TimeoutError"?"timeout":"error";return I(Date.now()-o,y)}finally{clearTimeout(a)}}});var B=h(D=>{"use strict";var Ct=D&&D.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(D,"__esModule",{value:!0});D.atomicWriteFileSync=Ut;var ke=Ct(g("fs"));function Ut(e,t){let r=`${e}.${process.pid}.tmp`;ke.default.writeFileSync(r,t),ke.default.renameSync(r,e)}});var K=h(P=>{"use strict";var we=P&&P.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(P,"__esModule",{value:!0});P.MemoryRetryQueue=P.DiskRetryQueue=void 0;var p=we(g("fs")),C=we(g("path")),Lt=B(),U=1e3,$t=50,Gt=5,z=class{filePath;lockPath;logPrefix;constructor(t,r){this.filePath=C.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=r}enqueue(t){try{p.default.mkdirSync(C.default.dirname(this.filePath),{recursive:!0});let r=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
3
+ `;p.default.appendFileSync(this.filePath,r),this.trim()}catch(r){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${r}
4
+ `)}}readAll(){try{let t=p.default.readFileSync(this.filePath,"utf-8"),r=[];for(let n of t.split(`
5
+ `))if(n.trim())try{let o=JSON.parse(n);Array.isArray(o?.payload?.resourceSpans)&&r.push(o)}catch{}return r}catch{return[]}}rewrite(t){try{if(t.length===0){p.default.existsSync(this.filePath)&&p.default.unlinkSync(this.filePath);return}p.default.mkdirSync(C.default.dirname(this.filePath),{recursive:!0}),(0,Lt.atomicWriteFileSync)(this.filePath,t.map(r=>JSON.stringify(r)).join(`
6
6
  `)+`
7
7
  `)}catch(r){process.stderr.write(`[${this.logPrefix}] retry-queue rewrite failed: ${r}
8
- `)}}tryAcquireLock(){let t=Date.now();try{d.default.mkdirSync(B.default.dirname(this.lockPath),{recursive:!0})}catch(r){return process.stderr.write(`[${this.logPrefix}] retry-queue lock mkdir failed: ${r}
9
- `),!1}for(;Date.now()-t<$t;)try{let r=d.default.openSync(this.lockPath,"wx");return d.default.writeSync(r,String(process.pid)),d.default.closeSync(r),!0}catch(r){if(r?.code!=="EEXIST")return process.stderr.write(`[${this.logPrefix}] retry-queue lock open failed: ${r}
10
- `),!1;try{let i=d.default.statSync(this.lockPath);if(Date.now()-i.mtimeMs>3e4){d.default.unlinkSync(this.lockPath);continue}}catch{}let n=Ut,o=Date.now()+n;for(;Date.now()<o;);}return!1}release(){try{d.default.unlinkSync(this.lockPath)}catch{}}trim(){let t=this.readAll();if(t.length<=L)return;let r=t.length-L;process.stderr.write(`[${this.logPrefix}] retry-queue full, dropping ${r} oldest entries
11
- `),this.rewrite(t.slice(r))}};E.DiskRetryQueue=z;var K=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>L&&this.entries.splice(0,this.entries.length-L)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};E.MemoryRetryQueue=K});var je=h(l=>{"use strict";Object.defineProperty(l,"__esModule",{value:!0});l.MemoryTransport=l.DiskTransport=l.MAX_POST_BYTES=void 0;l.parseHeadersEnv=Re;l.envOptionsResolver=De;l.postOtlp=D;var we=Z(),xe=X(),Ft=5e3;l.MAX_POST_BYTES=900*1024;function $(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function Me(e,t,r){let n=[],o=[],i=[],a=0;for(let u of e){let c=t(u);if(c>r){o.push(u);continue}i.length>0&&a+c>r&&(n.push(i),i=[],a=0),i.push(u),a+=c}return i.length>0&&n.push(i),{chunks:n,oversize:o}}function Re(e){if(!e)return{};if(typeof e=="object")return{...e};let t={};for(let r of e.split(",")){let[n,...o]=r.split("=");n&&o.length>0&&(t[n.trim()]=o.join("=").trim())}return t}function De(){let e=process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,t=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,r;return e?r=e.replace(/\/+$/,""):t&&(r=t.replace(/\/+$/,"")+"/v1/traces"),r?{endpoint:r,headers:Re(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function D(e,t,r){let n=new AbortController,o=setTimeout(()=>n.abort(),Ft);try{let i=await fetch(t.endpoint,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify(e),signal:n.signal});if(!i.ok){let a="";try{a=(await i.text()).slice(0,200)}catch{}let u=i.status===401||i.status===403?" \u2014 check OTEL_EXPORTER_OTLP_HEADERS (relay token)":i.status===404?" \u2014 check OTEL_EXPORTER_OTLP_TRACES_ENDPOINT path":i.status>=500?" \u2014 collector may be down":"";return process.stderr.write(`[${r}] OTLP POST ${i.status} ${t.endpoint}${u}${a?` body=${a}`:""}
8
+ `)}}tryAcquireLock(){let t=Date.now();try{p.default.mkdirSync(C.default.dirname(this.lockPath),{recursive:!0})}catch(r){return process.stderr.write(`[${this.logPrefix}] retry-queue lock mkdir failed: ${r}
9
+ `),!1}for(;Date.now()-t<$t;)try{let r=p.default.openSync(this.lockPath,"wx");return p.default.writeSync(r,String(process.pid)),p.default.closeSync(r),!0}catch(r){if(r?.code!=="EEXIST")return process.stderr.write(`[${this.logPrefix}] retry-queue lock open failed: ${r}
10
+ `),!1;try{let i=p.default.statSync(this.lockPath);if(Date.now()-i.mtimeMs>3e4){p.default.unlinkSync(this.lockPath);continue}}catch{}let n=Gt,o=Date.now()+n;for(;Date.now()<o;);}return!1}release(){try{p.default.unlinkSync(this.lockPath)}catch{}}trim(){let t=this.readAll();if(t.length<=U)return;let r=t.length-U;process.stderr.write(`[${this.logPrefix}] retry-queue full, dropping ${r} oldest entries
11
+ `),this.rewrite(t.slice(r))}};P.DiskRetryQueue=z;var H=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>U&&this.entries.splice(0,this.entries.length-U)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};P.MemoryRetryQueue=H});var Ne=h(l=>{"use strict";Object.defineProperty(l,"__esModule",{value:!0});l.MemoryTransport=l.DiskTransport=l.MAX_POST_BYTES=void 0;l.parseHeadersEnv=Re;l.envOptionsResolver=je;l.postOtlp=R;var xe=K(),Me=X(),Ft=5e3;l.MAX_POST_BYTES=900*1024;function L(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function De(e,t,r){let n=[],o=[],i=[],a=0;for(let u of e){let c=t(u);if(c>r){o.push(u);continue}i.length>0&&a+c>r&&(n.push(i),i=[],a=0),i.push(u),a+=c}return i.length>0&&n.push(i),{chunks:n,oversize:o}}function Re(e){if(!e)return{};if(typeof e=="object")return{...e};let t={};for(let r of e.split(",")){let[n,...o]=r.split("=");n&&o.length>0&&(t[n.trim()]=o.join("=").trim())}return t}function je(){let e=process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,t=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,r;return e?r=e.replace(/\/+$/,""):t&&(r=t.replace(/\/+$/,"")+"/v1/traces"),r?{endpoint:r,headers:Re(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function R(e,t,r){let n=new AbortController,o=setTimeout(()=>n.abort(),Ft);try{let i=await fetch(t.endpoint,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify(e),signal:n.signal});if(!i.ok){let a="";try{a=(await i.text()).slice(0,200)}catch{}let u=i.status===401||i.status===403?" \u2014 check OTEL_EXPORTER_OTLP_HEADERS (relay token)":i.status===404?" \u2014 check OTEL_EXPORTER_OTLP_TRACES_ENDPOINT path":i.status>=500?" \u2014 collector may be down":"";return process.stderr.write(`[${r}] OTLP POST ${i.status} ${t.endpoint}${u}${a?` body=${a}`:""}
12
12
  `),!1}return!0}catch(i){return process.stderr.write(`[${r}] OTLP POST failed: ${i.message??String(i)}
13
- `),!1}finally{clearTimeout(o)}}var W=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new we.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??De}async send(t){let r=this.resolveOptions();if(!r||this.dropIfOversized(t))return;await D(t,r,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(t&&this.queue.tryAcquireLock())try{let r=this.queue.readAll();if(r.length===0)return;let{chunks:n,oversize:o}=Me(r,u=>$(u.payload),l.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized retry ${o.length===1?"entry":"entries"} (each > ${l.MAX_POST_BYTES} bytes \u2014 the backend caps the request body, so they can never be delivered)
14
- `);let i=[].concat(...n),a=0;for(let u of n){if(!await D((0,xe.mergeBatch)(u.map(y=>y.payload)),t,this.logPrefix))break;a+=u.length}this.queue.rewrite(i.slice(a))}catch(r){process.stderr.write(`[${this.logPrefix}] flush failed: ${r?.message??String(r)}
15
- `)}finally{this.queue.release()}}dropIfOversized(t){let r=$(t);return r<=l.MAX_POST_BYTES?!1:(process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (${r} > ${l.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
16
- `),!0)}};l.DiskTransport=W;var H=class{queue=new we.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let r=this.resolveOptions();if(!r)return;if($(t)>l.MAX_POST_BYTES){process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (> ${l.MAX_POST_BYTES} bytes) \u2014 undeliverable, not buffered
17
- `);return}await D(t,r,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(!t)return;let r=this.queue.drain();if(r.length===0)return;let{chunks:n,oversize:o}=Me(r,$,l.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized buffered ${o.length===1?"payload":"payloads"} (each > ${l.MAX_POST_BYTES} bytes \u2014 undeliverable)
18
- `);let i=[].concat(...n),a=0;for(let u of n){if(!await D((0,xe.mergeBatch)(u),t,this.logPrefix))break;a+=u.length}for(let u of i.slice(a))this.queue.enqueue(u)}};l.MemoryTransport=H});var te=h(v=>{"use strict";var ee=v&&v.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(v,"__esModule",{value:!0});v.TraceManager=void 0;v.generateUlid=Ie;var Ne=ee(_("fs")),qt=ee(_("path")),Gt=ee(_("crypto")),Vt=C(),J="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Ie(){let e=Date.now(),t="",r=e;for(let i=0;i<10;i++)t=J[r&31]+t,r=Math.floor(r/32);let n=Gt.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=J[n[i]&31];for(;o.length<16;)o+=J[0];return t+o}var Q=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=Ie();return this.save(t),t}currentTrace(){try{let t=Ne.default.readFileSync(this.tracePath,"utf-8"),{traceId:r}=JSON.parse(t);if(r)return r}catch{}return this.newTrace()}save(t){try{Ne.default.mkdirSync(qt.default.dirname(this.tracePath),{recursive:!0}),(0,Vt.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(r){process.stderr.write(`[pinta-core] trace persistence failed: ${r}
19
- `)}}};v.TraceManager=Q});var Ue=h(P=>{"use strict";var Be=P&&P.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(P,"__esModule",{value:!0});P.MemorySessionTraceManager=P.DiskSessionTraceManager=void 0;var Ce=Be(_("fs")),Yt=Be(_("path")),Le=te(),Xt=C(),$e=200,re=class{tracePath;maxSessions;constructor(t,r={}){this.tracePath=t,this.maxSessions=r.maxSessions??$e}read(){try{let t=JSON.parse(Ce.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{Ce.default.mkdirSync(Yt.default.dirname(this.tracePath),{recursive:!0});let r=Object.entries(t),n=r.length>this.maxSessions?Object.fromEntries(r.slice(-this.maxSessions)):t;(0,Xt.atomicWriteFileSync)(this.tracePath,JSON.stringify(n))}catch{}}newTrace(t){let r=t||"default",n=(0,Le.generateUlid)(),o=this.read();return o[r]=n,this.write(o),n}currentTrace(t){let r=t||"default",n=this.read()[r];return n||this.newTrace(r)}};P.DiskSessionTraceManager=re;var ne=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??$e}newTrace(t){let r=t||"default",n=(0,Le.generateUlid)();if(this.map.set(r,n),this.map.size>this.maxSessions){let o=this.map.keys().next().value;o!==void 0&&this.map.delete(o)}return n}currentTrace(t){let r=t||"default";return this.map.get(r)??this.newTrace(r)}};P.MemorySessionTraceManager=ne});var Ge=h(T=>{"use strict";var oe=T&&T.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(T,"__esModule",{value:!0});T.envFilePath=Zt;T.parseEnvFile=qe;T.loadEnvFile=Wt;var zt=oe(_("node:fs")),Kt=oe(_("node:os")),Fe=oe(_("node:path"));function Zt(e,t,r){let n=r?process.env[r]:void 0,o=n&&n.length>0?n:Fe.default.join(Kt.default.homedir(),e);return Fe.default.join(o,t)}function qe(e){let t={};for(let r of e.split(`
20
- `)){let n=r.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<0)continue;let i=n.slice(0,o).trim(),a=n.slice(o+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),i&&(t[i]=a)}return t}function Wt(e){let t;try{t=zt.default.readFileSync(e,"utf-8")}catch{return}let r=qe(t);for(let[n,o]of Object.entries(r))process.env[n]===void 0&&(process.env[n]=o)}});var b=h(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});s.loadEnvFile=s.parseEnvFile=s.envFilePath=s.MemorySessionTraceManager=s.DiskSessionTraceManager=s.generateUlid=s.TraceManager=s.MAX_POST_BYTES=s.parseHeadersEnv=s.envOptionsResolver=s.postOtlp=s.MemoryTransport=s.DiskTransport=s.MemoryRetryQueue=s.DiskRetryQueue=s.GUARD_STATUS_REFUSED=s.evaluateGuard=s.MAX_SPAN_BYTES=s.enforceSpanBudget=s.mergeBatch=s.attachGuard=s.buildPayload=s.clientAttrs=s.guardAttrs=s.attrsFromRecord=s.toOtlpValue=s.snakeCase=s.newSpanId=s.ulidToTraceId=s.MAX_BYTES=s.PATTERNS=s.applyMatches=s.resolveOverlaps=s.collectMatches=s.truncateTo=s.truncate=s.redact=void 0;var S=V();Object.defineProperty(s,"redact",{enumerable:!0,get:function(){return S.redact}});Object.defineProperty(s,"truncate",{enumerable:!0,get:function(){return S.truncate}});Object.defineProperty(s,"truncateTo",{enumerable:!0,get:function(){return S.truncateTo}});Object.defineProperty(s,"collectMatches",{enumerable:!0,get:function(){return S.collectMatches}});Object.defineProperty(s,"resolveOverlaps",{enumerable:!0,get:function(){return S.resolveOverlaps}});Object.defineProperty(s,"applyMatches",{enumerable:!0,get:function(){return S.applyMatches}});Object.defineProperty(s,"PATTERNS",{enumerable:!0,get:function(){return S.PATTERNS}});Object.defineProperty(s,"MAX_BYTES",{enumerable:!0,get:function(){return S.MAX_BYTES}});var m=X();Object.defineProperty(s,"ulidToTraceId",{enumerable:!0,get:function(){return m.ulidToTraceId}});Object.defineProperty(s,"newSpanId",{enumerable:!0,get:function(){return m.newSpanId}});Object.defineProperty(s,"snakeCase",{enumerable:!0,get:function(){return m.snakeCase}});Object.defineProperty(s,"toOtlpValue",{enumerable:!0,get:function(){return m.toOtlpValue}});Object.defineProperty(s,"attrsFromRecord",{enumerable:!0,get:function(){return m.attrsFromRecord}});Object.defineProperty(s,"guardAttrs",{enumerable:!0,get:function(){return m.guardAttrs}});Object.defineProperty(s,"clientAttrs",{enumerable:!0,get:function(){return m.clientAttrs}});Object.defineProperty(s,"buildPayload",{enumerable:!0,get:function(){return m.buildPayload}});Object.defineProperty(s,"attachGuard",{enumerable:!0,get:function(){return m.attachGuard}});Object.defineProperty(s,"mergeBatch",{enumerable:!0,get:function(){return m.mergeBatch}});Object.defineProperty(s,"enforceSpanBudget",{enumerable:!0,get:function(){return m.enforceSpanBudget}});Object.defineProperty(s,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return m.MAX_SPAN_BYTES}});var Ve=Oe();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return Ve.evaluateGuard}});Object.defineProperty(s,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return Ve.GUARD_STATUS_REFUSED}});var Ye=Z();Object.defineProperty(s,"DiskRetryQueue",{enumerable:!0,get:function(){return Ye.DiskRetryQueue}});Object.defineProperty(s,"MemoryRetryQueue",{enumerable:!0,get:function(){return Ye.MemoryRetryQueue}});var k=je();Object.defineProperty(s,"DiskTransport",{enumerable:!0,get:function(){return k.DiskTransport}});Object.defineProperty(s,"MemoryTransport",{enumerable:!0,get:function(){return k.MemoryTransport}});Object.defineProperty(s,"postOtlp",{enumerable:!0,get:function(){return k.postOtlp}});Object.defineProperty(s,"envOptionsResolver",{enumerable:!0,get:function(){return k.envOptionsResolver}});Object.defineProperty(s,"parseHeadersEnv",{enumerable:!0,get:function(){return k.parseHeadersEnv}});Object.defineProperty(s,"MAX_POST_BYTES",{enumerable:!0,get:function(){return k.MAX_POST_BYTES}});var Xe=te();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return Xe.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return Xe.generateUlid}});var ze=Ue();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return ze.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return ze.MemorySessionTraceManager}});var se=Ge();Object.defineProperty(s,"envFilePath",{enumerable:!0,get:function(){return se.envFilePath}});Object.defineProperty(s,"parseEnvFile",{enumerable:!0,get:function(){return se.parseEnvFile}});Object.defineProperty(s,"loadEnvFile",{enumerable:!0,get:function(){return se.loadEnvFile}})});import{realpathSync as br}from"node:fs";import{pathToFileURL as Or}from"node:url";var ae=O(b());import Ht from"node:os";import ie from"node:path";var Jt="pinta-musecode.env";function Qt(){let e=process.env.XDG_CONFIG_HOME;return e&&e.length>0?ie.join(e,"muse"):ie.join(Ht.homedir(),".config","muse")}function er(){return ie.join(Qt(),Jt)}function Ke(e=er()){(0,ae.loadEnvFile)(e)}import tr from"node:os";import Ze from"node:path";function rr(){return process.env.PINTA_MUSECODE_DATA||process.env.PINTA_PLUGIN_DATA||Ze.join(tr.homedir(),".pinta","adaptors","pinta-musecode")}function We(){let e=rr();return{pluginData:e,tracePath:Ze.join(e,"trace.json")}}function He(){return process.env.PINTA_MUSE_ENFORCE==="1"}function Je(){return process.env.PINTA_MUSE_LLM_EVENTS==="1"}var nr=["SessionStart","UserPromptSubmit","PreToolUse","PermissionRequest","PostToolUse","PreLLMCall","PostLLMCall","PreCompact","PostCompact","SubagentStart","SubagentStop","Stop"],or=new Set(nr);function sr(e){return or.has(e)}var ir=["hook_event_name","event","hook","hook_event","eventName"];function Qe(e,t){for(let r of e){let n=r.startsWith("--event=")?r.slice(8):r;if(sr(n))return n}for(let r of ir){let n=t[r];if(typeof n=="string"&&n.length>0)return n}return null}function U(e){return e==="PreToolUse"||e==="PermissionRequest"}function et(e){return e==="PreLLMCall"||e==="PostLLMCall"}var ar=new Set(["subagent_spawn","subagent_status","subagent_send_message","subagent_cancel","subagent_wait","subagent_read_result"]);function tt(e){return e!==void 0&&ar.has(e)}var lt=O(b());var rt=O(b());var w="0.3.0";var ur=1e4,cr=`pinta-musecode/${w}`;function nt(e,t){return(0,rt.evaluateGuard)(e,t,{timeoutMs:ur,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:cr})}function lr(){let e=process.env.PINTA_MUSE_DENY_FORMAT;return e==="exit2"||e==="json"?e:"auto"}function fr(e,t){return U(e)?{hookSpecificOutput:{hookEventName:e,permissionDecision:"deny",permissionDecisionReason:t}}:{decision:"block",reason:t}}function ot(e,t,r={}){let n=r.stdout??(a=>process.stdout.write(a)),o=r.stderr??(a=>process.stderr.write(a)),i=lr();return i==="exit2"?(o(`${t}
21
- `),{written:!0,exitCode:2}):(n(JSON.stringify(fr(e,t))+`
13
+ `),!1}finally{clearTimeout(o)}}var W=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new xe.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??je}async send(t){let r=this.resolveOptions();if(!r||this.dropIfOversized(t))return;await R(t,r,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(t&&this.queue.tryAcquireLock())try{let r=this.queue.readAll();if(r.length===0)return;let{chunks:n,oversize:o}=De(r,u=>L(u.payload),l.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized retry ${o.length===1?"entry":"entries"} (each > ${l.MAX_POST_BYTES} bytes \u2014 the backend caps the request body, so they can never be delivered)
14
+ `);let i=[].concat(...n),a=0;for(let u of n){if(!await R((0,Me.mergeBatch)(u.map(y=>y.payload)),t,this.logPrefix))break;a+=u.length}this.queue.rewrite(i.slice(a))}catch(r){process.stderr.write(`[${this.logPrefix}] flush failed: ${r?.message??String(r)}
15
+ `)}finally{this.queue.release()}}dropIfOversized(t){let r=L(t);return r<=l.MAX_POST_BYTES?!1:(process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (${r} > ${l.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
16
+ `),!0)}};l.DiskTransport=W;var Z=class{queue=new xe.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let r=this.resolveOptions();if(!r)return;if(L(t)>l.MAX_POST_BYTES){process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (> ${l.MAX_POST_BYTES} bytes) \u2014 undeliverable, not buffered
17
+ `);return}await R(t,r,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(!t)return;let r=this.queue.drain();if(r.length===0)return;let{chunks:n,oversize:o}=De(r,L,l.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized buffered ${o.length===1?"payload":"payloads"} (each > ${l.MAX_POST_BYTES} bytes \u2014 undeliverable)
18
+ `);let i=[].concat(...n),a=0;for(let u of n){if(!await R((0,Me.mergeBatch)(u),t,this.logPrefix))break;a+=u.length}for(let u of i.slice(a))this.queue.enqueue(u)}};l.MemoryTransport=Z});var te=h(T=>{"use strict";var ee=T&&T.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(T,"__esModule",{value:!0});T.TraceManager=void 0;T.generateUlid=Be;var Ie=ee(g("fs")),qt=ee(g("path")),Vt=ee(g("crypto")),Yt=B(),J="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Be(){let e=Date.now(),t="",r=e;for(let i=0;i<10;i++)t=J[r&31]+t,r=Math.floor(r/32);let n=Vt.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=J[n[i]&31];for(;o.length<16;)o+=J[0];return t+o}var Q=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=Be();return this.save(t),t}currentTrace(){try{let t=Ie.default.readFileSync(this.tracePath,"utf-8"),{traceId:r}=JSON.parse(t);if(r)return r}catch{}return this.newTrace()}save(t){try{Ie.default.mkdirSync(qt.default.dirname(this.tracePath),{recursive:!0}),(0,Yt.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(r){process.stderr.write(`[pinta-core] trace persistence failed: ${r}
19
+ `)}}};T.TraceManager=Q});var Ge=h(S=>{"use strict";var Ue=S&&S.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(S,"__esModule",{value:!0});S.MemorySessionTraceManager=S.DiskSessionTraceManager=void 0;var Ce=Ue(g("fs")),Xt=Ue(g("path")),Le=te(),zt=B(),$e=200,re=class{tracePath;maxSessions;constructor(t,r={}){this.tracePath=t,this.maxSessions=r.maxSessions??$e}read(){try{let t=JSON.parse(Ce.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{Ce.default.mkdirSync(Xt.default.dirname(this.tracePath),{recursive:!0});let r=Object.entries(t),n=r.length>this.maxSessions?Object.fromEntries(r.slice(-this.maxSessions)):t;(0,zt.atomicWriteFileSync)(this.tracePath,JSON.stringify(n))}catch{}}newTrace(t){let r=t||"default",n=(0,Le.generateUlid)(),o=this.read();return o[r]=n,this.write(o),n}currentTrace(t){let r=t||"default",n=this.read()[r];return n||this.newTrace(r)}};S.DiskSessionTraceManager=re;var ne=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??$e}newTrace(t){let r=t||"default",n=(0,Le.generateUlid)();if(this.map.set(r,n),this.map.size>this.maxSessions){let o=this.map.keys().next().value;o!==void 0&&this.map.delete(o)}return n}currentTrace(t){let r=t||"default";return this.map.get(r)??this.newTrace(r)}};S.MemorySessionTraceManager=ne});var Ve=h(b=>{"use strict";var oe=b&&b.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(b,"__esModule",{value:!0});b.envFilePath=Wt;b.parseEnvFile=qe;b.loadEnvFile=Zt;var Ht=oe(g("node:fs")),Kt=oe(g("node:os")),Fe=oe(g("node:path"));function Wt(e,t,r){let n=r?process.env[r]:void 0,o=n&&n.length>0?n:Fe.default.join(Kt.default.homedir(),e);return Fe.default.join(o,t)}function qe(e){let t={};for(let r of e.split(`
20
+ `)){let n=r.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<0)continue;let i=n.slice(0,o).trim(),a=n.slice(o+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),i&&(t[i]=a)}return t}function Zt(e){let t;try{t=Ht.default.readFileSync(e,"utf-8")}catch{return}let r=qe(t);for(let[n,o]of Object.entries(r))process.env[n]===void 0&&(process.env[n]=o)}});var O=h(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});s.loadEnvFile=s.parseEnvFile=s.envFilePath=s.MemorySessionTraceManager=s.DiskSessionTraceManager=s.generateUlid=s.TraceManager=s.MAX_POST_BYTES=s.parseHeadersEnv=s.envOptionsResolver=s.postOtlp=s.MemoryTransport=s.DiskTransport=s.MemoryRetryQueue=s.DiskRetryQueue=s.GUARD_BUDGET_HEADER=s.GUARD_STATUS_REFUSED=s.evaluateGuard=s.MAX_SPAN_BYTES=s.enforceSpanBudget=s.mergeBatch=s.attachGuard=s.buildPayload=s.clientAttrs=s.guardAttrs=s.attrsFromRecord=s.toOtlpValue=s.snakeCase=s.newSpanId=s.ulidToTraceId=s.MAX_BYTES=s.PATTERNS=s.applyMatches=s.resolveOverlaps=s.collectMatches=s.truncateTo=s.truncate=s.redact=void 0;var v=V();Object.defineProperty(s,"redact",{enumerable:!0,get:function(){return v.redact}});Object.defineProperty(s,"truncate",{enumerable:!0,get:function(){return v.truncate}});Object.defineProperty(s,"truncateTo",{enumerable:!0,get:function(){return v.truncateTo}});Object.defineProperty(s,"collectMatches",{enumerable:!0,get:function(){return v.collectMatches}});Object.defineProperty(s,"resolveOverlaps",{enumerable:!0,get:function(){return v.resolveOverlaps}});Object.defineProperty(s,"applyMatches",{enumerable:!0,get:function(){return v.applyMatches}});Object.defineProperty(s,"PATTERNS",{enumerable:!0,get:function(){return v.PATTERNS}});Object.defineProperty(s,"MAX_BYTES",{enumerable:!0,get:function(){return v.MAX_BYTES}});var m=X();Object.defineProperty(s,"ulidToTraceId",{enumerable:!0,get:function(){return m.ulidToTraceId}});Object.defineProperty(s,"newSpanId",{enumerable:!0,get:function(){return m.newSpanId}});Object.defineProperty(s,"snakeCase",{enumerable:!0,get:function(){return m.snakeCase}});Object.defineProperty(s,"toOtlpValue",{enumerable:!0,get:function(){return m.toOtlpValue}});Object.defineProperty(s,"attrsFromRecord",{enumerable:!0,get:function(){return m.attrsFromRecord}});Object.defineProperty(s,"guardAttrs",{enumerable:!0,get:function(){return m.guardAttrs}});Object.defineProperty(s,"clientAttrs",{enumerable:!0,get:function(){return m.clientAttrs}});Object.defineProperty(s,"buildPayload",{enumerable:!0,get:function(){return m.buildPayload}});Object.defineProperty(s,"attachGuard",{enumerable:!0,get:function(){return m.attachGuard}});Object.defineProperty(s,"mergeBatch",{enumerable:!0,get:function(){return m.mergeBatch}});Object.defineProperty(s,"enforceSpanBudget",{enumerable:!0,get:function(){return m.enforceSpanBudget}});Object.defineProperty(s,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return m.MAX_SPAN_BYTES}});var se=Ae();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return se.evaluateGuard}});Object.defineProperty(s,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return se.GUARD_STATUS_REFUSED}});Object.defineProperty(s,"GUARD_BUDGET_HEADER",{enumerable:!0,get:function(){return se.GUARD_BUDGET_HEADER}});var Ye=K();Object.defineProperty(s,"DiskRetryQueue",{enumerable:!0,get:function(){return Ye.DiskRetryQueue}});Object.defineProperty(s,"MemoryRetryQueue",{enumerable:!0,get:function(){return Ye.MemoryRetryQueue}});var k=Ne();Object.defineProperty(s,"DiskTransport",{enumerable:!0,get:function(){return k.DiskTransport}});Object.defineProperty(s,"MemoryTransport",{enumerable:!0,get:function(){return k.MemoryTransport}});Object.defineProperty(s,"postOtlp",{enumerable:!0,get:function(){return k.postOtlp}});Object.defineProperty(s,"envOptionsResolver",{enumerable:!0,get:function(){return k.envOptionsResolver}});Object.defineProperty(s,"parseHeadersEnv",{enumerable:!0,get:function(){return k.parseHeadersEnv}});Object.defineProperty(s,"MAX_POST_BYTES",{enumerable:!0,get:function(){return k.MAX_POST_BYTES}});var Xe=te();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return Xe.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return Xe.generateUlid}});var ze=Ge();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return ze.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return ze.MemorySessionTraceManager}});var ie=Ve();Object.defineProperty(s,"envFilePath",{enumerable:!0,get:function(){return ie.envFilePath}});Object.defineProperty(s,"parseEnvFile",{enumerable:!0,get:function(){return ie.parseEnvFile}});Object.defineProperty(s,"loadEnvFile",{enumerable:!0,get:function(){return ie.loadEnvFile}})});import{realpathSync as Ar}from"node:fs";import{pathToFileURL as kr}from"node:url";var ue=A(O());import Jt from"node:os";import ae from"node:path";var Qt="pinta-musecode.env";function er(){let e=process.env.XDG_CONFIG_HOME;return e&&e.length>0?ae.join(e,"muse"):ae.join(Jt.homedir(),".config","muse")}function tr(){return ae.join(er(),Qt)}function He(e=tr()){(0,ue.loadEnvFile)(e)}import rr from"node:os";import Ke from"node:path";function nr(){return process.env.PINTA_MUSECODE_DATA||process.env.PINTA_PLUGIN_DATA||Ke.join(rr.homedir(),".pinta","adaptors","pinta-musecode")}function We(){let e=nr();return{pluginData:e,tracePath:Ke.join(e,"trace.json")}}function Ze(){return process.env.PINTA_MUSE_ENFORCE==="1"}function Je(){return process.env.PINTA_MUSE_LLM_EVENTS==="1"}var or=["SessionStart","UserPromptSubmit","PreToolUse","PermissionRequest","PostToolUse","PreLLMCall","PostLLMCall","PreCompact","PostCompact","SubagentStart","SubagentStop","Stop"],sr=new Set(or);function ir(e){return sr.has(e)}var ar=["hook_event_name","event","hook","hook_event","eventName"];function Qe(e,t){for(let r of e){let n=r.startsWith("--event=")?r.slice(8):r;if(ir(n))return n}for(let r of ar){let n=t[r];if(typeof n=="string"&&n.length>0)return n}return null}function $(e){return e==="PreToolUse"||e==="PermissionRequest"}function et(e){return e==="PreLLMCall"||e==="PostLLMCall"}var ur=new Set(["subagent_spawn","subagent_status","subagent_send_message","subagent_cancel","subagent_wait","subagent_read_result"]);function tt(e){return e!==void 0&&ur.has(e)}var ft=A(O());var rt=A(O());var w="0.4.1";var cr=1e4,lr=`pinta-musecode/${w}`;function nt(e,t){return(0,rt.evaluateGuard)(e,t,{timeoutMs:cr,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:lr})}function fr(){let e=process.env.PINTA_MUSE_DENY_FORMAT;return e==="exit2"||e==="json"?e:"auto"}function dr(e,t){return $(e)?{hookSpecificOutput:{hookEventName:e,permissionDecision:"deny",permissionDecisionReason:t}}:{decision:"block",reason:t}}function ot(e,t,r={}){let n=r.stdout??(a=>process.stdout.write(a)),o=r.stderr??(a=>process.stderr.write(a)),i=fr();return i==="exit2"?(o(`${t}
21
+ `),{written:!0,exitCode:2}):(n(JSON.stringify(dr(e,t))+`
22
22
  `),i==="json"?{written:!0,exitCode:0}:(o(`${t}
23
- `),{written:!0,exitCode:2}))}var st=O(b()),F=class extends st.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-musecode"})}};var it=O(b()),q=class extends it.TraceManager{constructor(t){super(t.tracePath)}};var x=O(b());import ue from"node:os";var pr="musecode",g="muse",G;function dr(){if(G===void 0)try{G=ue.userInfo().username}catch{G=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return G}function gr(e){for(let t of["muse_version","version","cli_version"]){let r=e[t];if(typeof r=="string"&&r.length>0)return r}return process.env.MUSE_VERSION??"unknown"}var _r=new Set([`${g}.hook`,`${g}.tool_name`,`${g}.tool_use_id`,`${g}.session_id`,`${g}.cwd`,`${g}.permission_mode`,`${g}.agent_id`,`${g}.agent_type`]),mr=new Set([`${g}.tool_input`,`${g}.tool_response`]),yr={skipRedactKeys:_r,bashContextKeys:mr};function hr(e){let t=[];t.push({key:"ingest.type",value:{stringValue:pr}}),t.push({key:`${g}.hook`,value:{stringValue:e.hook_event_name}});let r={};for(let[n,o]of Object.entries(e))n!=="hook_event_name"&&(r[n]=o);return t.push(...(0,x.attrsFromRecord)(r,g,yr)),t}function Er(e){return[{key:"service.name",value:{stringValue:"muse-code"}},{key:"service.version",value:{stringValue:gr(e)}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-musecode"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:w}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:dr()}},{key:"host.name",value:{stringValue:ue.hostname()}},{key:"host.arch",value:{stringValue:ue.arch()}}]}function at(e){return(0,x.buildPayload)({traceId:e.traceId,spanName:`${g}.${(0,x.snakeCase)(e.event.hook_event_name)}`,attributes:hr(e.event),resource:Er(e.event),scope:{name:"pinta-musecode",version:w},now:e.now})}function ce(e,t,r={}){let n=new q(t),o=r.traceMode==="new"?n.newTrace():n.currentTrace();return at({event:e,traceId:o})}async function ut(e,t){let r=new F(t);await r.flush(),await r.send(e)}async function Pr(e,t,r={}){await ut(ce(e,t,r),t)}async function j(e,t,r={}){try{await Pr(e,t,r)}catch(n){process.stderr.write(`[pinta-musecode] telemetry emit failed: ${n}
24
- `)}}async function ct(e,t){try{await ut(e,t)}catch(r){process.stderr.write(`[pinta-musecode] telemetry emit failed: ${r}
25
- `)}}async function ft(e,t){if(tt(e.tool_name))return await j(e,t),0;let r=ce(e,t),n=await nt(r,process.env.PINTA_GUARD_ENDPOINT),o=0;if(n?.decision==="DENY"&&He()){let i=n.userMessage??n.reason??"guard_deny";o=ot(e.hook_event_name,i).exitCode}return(0,lt.attachGuard)(r,n),await ct(r,t),o}async function pt(e,t){return await j(e,t),0}async function dt(e,t){return await j(e,t,{traceMode:"new"}),0}async function gt(e){return 0}async function Sr(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}function vr(e){let t=e.trim();if(t.length===0)return{};try{let r=JSON.parse(t);if(r!==null&&typeof r=="object"&&!Array.isArray(r))return r}catch{}return{}}async function Tr(e,t){let r=e.hook_event_name;return U(r)?ft(e,t):r==="UserPromptSubmit"?dt(e,t):et(r)&&!Je()?gt(e):pt(e,t)}async function _t(e=process.argv.slice(2)){let t=0;try{let r=We(),n=vr(await Sr()),o=Qe(e,n);if(o===null)return process.stderr.write(`[pinta-musecode] could not resolve hook event name; skipping
26
- `),0;let i={...n,hook_event_name:o};t=await Tr(i,r)}catch(r){process.stderr.write(`[pinta-musecode] error: ${r}
27
- `),t=0}return t}Ke();function Ar(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===Or(br(e)).href}catch{return!1}}async function kr(){let e=await _t();process.exit(e)}Ar()&&kr();
23
+ `),{written:!0,exitCode:2}))}var st=A(O()),G=class extends st.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-musecode"})}};var it=A(O()),F=class extends it.TraceManager{constructor(t){super(t.tracePath)}};import ce from"node:os";var pr=new Set(["unknown","undefined","null","n/a","none","-","auto","default"]);function at(e){if(typeof e!="string")return;let t=e.trim();if(!(!t||t.startsWith("{")||t.startsWith("[")||pr.has(t.toLowerCase())))return t}var x=A(O());var _r="musecode",_="muse",q;function gr(){if(q===void 0)try{q=ce.userInfo().username}catch{q=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return q}function mr(e){for(let t of["muse_version","version","cli_version"]){let r=e[t];if(typeof r=="string"&&r.length>0)return r}return process.env.MUSE_VERSION??"unknown"}var yr=new Set([`${_}.hook`,`${_}.tool_name`,`${_}.tool_use_id`,`${_}.session_id`,`${_}.cwd`,`${_}.permission_mode`,`${_}.agent_id`,`${_}.agent_type`]),hr=new Set([`${_}.tool_input`,`${_}.tool_response`]),Er={skipRedactKeys:yr,bashContextKeys:hr};function Pr(e){let t=[];t.push({key:"ingest.type",value:{stringValue:_r}}),t.push({key:`${_}.hook`,value:{stringValue:e.hook_event_name}});let r={},n=at(e.model);for(let[o,i]of Object.entries(e))if(o!=="hook_event_name"){if(o==="model"){i!==n&&(r.model_raw=i);continue}if(o==="model_source"){r.model_source_raw=i;continue}r[o]=i}return n&&(r.model=n,r.model_source="reported:model"),t.push(...(0,x.attrsFromRecord)(r,_,Er)),t}function Sr(e){return[{key:"service.name",value:{stringValue:"muse-code"}},{key:"service.version",value:{stringValue:mr(e)}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-musecode"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:w}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:gr()}},{key:"host.name",value:{stringValue:ce.hostname()}},{key:"host.arch",value:{stringValue:ce.arch()}}]}function ut(e){return(0,x.buildPayload)({traceId:e.traceId,spanName:`${_}.${(0,x.snakeCase)(e.event.hook_event_name)}`,attributes:Pr(e.event),resource:Sr(e.event),scope:{name:"pinta-musecode",version:w},now:e.now})}function le(e,t,r={}){let n=new F(t),o=r.traceMode==="new"?n.newTrace():n.currentTrace();return ut({event:e,traceId:o})}async function ct(e,t){let r=new G(t);await r.flush(),await r.send(e)}async function vr(e,t,r={}){await ct(le(e,t,r),t)}async function j(e,t,r={}){try{await vr(e,t,r)}catch(n){process.stderr.write(`[pinta-musecode] telemetry emit failed: ${n}
24
+ `)}}async function lt(e,t){try{await ct(e,t)}catch(r){process.stderr.write(`[pinta-musecode] telemetry emit failed: ${r}
25
+ `)}}async function dt(e,t){if(tt(e.tool_name))return await j(e,t),0;let r=le(e,t),n=await nt(r,process.env.PINTA_GUARD_ENDPOINT),o=0;if(n?.decision==="DENY"&&Ze()){let i=n.userMessage??n.reason??"guard_deny";o=ot(e.hook_event_name,i).exitCode}return(0,ft.attachGuard)(r,n),await lt(r,t),o}async function pt(e,t){return await j(e,t),0}async function _t(e,t){return await j(e,t,{traceMode:"new"}),0}async function gt(e){return 0}async function Tr(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}function br(e){let t=e.trim();if(t.length===0)return{};try{let r=JSON.parse(t);if(r!==null&&typeof r=="object"&&!Array.isArray(r))return r}catch{}return{}}async function Or(e,t){let r=e.hook_event_name;return $(r)?dt(e,t):r==="UserPromptSubmit"?_t(e,t):et(r)&&!Je()?gt(e):pt(e,t)}async function mt(e=process.argv.slice(2)){let t=0;try{let r=We(),n=br(await Tr()),o=Qe(e,n);if(o===null)return process.stderr.write(`[pinta-musecode] could not resolve hook event name; skipping
26
+ `),0;let i={...n,hook_event_name:o};t=await Or(i,r)}catch(r){process.stderr.write(`[pinta-musecode] error: ${r}
27
+ `),t=0}return t}He();function wr(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===kr(Ar(e)).href}catch{return!1}}async function xr(){let e=await mt();process.exit(e)}wr()&&xr();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pinta-ai/pinta-musecode",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "Generic OTLP forwarder for Meta Muse Code hook events",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
@@ -39,7 +39,7 @@
39
39
  "prepublishOnly": "npm run build"
40
40
  },
41
41
  "devDependencies": {
42
- "@pinta-ai/core": "^0.8.0",
42
+ "@pinta-ai/core": "^0.9.0",
43
43
  "@types/node": "^22.0.0",
44
44
  "esbuild": "^0.24.0",
45
45
  "tsx": "^4.0.0",