@pinta-ai/pinta-musecode 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,48 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Changed
6
+ - Keep the existing event-local scalar `muse.model` forwarding and add
7
+ `muse.model_source=reported:model`. A reported selection, including on
8
+ `PostLLMCall`, is not asserted to be the provider's actual response identity.
9
+ - Preserve raw model evidence while omitting blank, placeholder, non-string
10
+ and JSON-prefixed IDs, including malformed/truncated strings starting with
11
+ `{` or `[` after trimming.
12
+ - Add regression and built CJS/ESM loopback OTLP coverage for all event
13
+ envelopes, switches, subagents, absent models, guards and redaction.
14
+
15
+ ### Compatibility
16
+ - Pinta Manager 0.1.11 or later remains the guard-payload compatibility floor;
17
+ `@pinta-ai/core` remains `^0.8.0`. No new required envelope fields or additional
18
+ desktop upgrade are needed.
19
+ - LLM-event opt-in, guard/shadow behavior, internal-tool exemptions and event
20
+ counts are unchanged. Missing models are not inferred from prior events,
21
+ parents, subagents or transcripts; no model cache or I/O is added.
22
+
23
+ Refs PTA-524.
24
+
25
+ ## 0.3.0
26
+
27
+ ### Changed
28
+ - The guard is asked about the span, not about a summary of it. Until now the
29
+ `PreToolUse` gate assembled a five-field `GuardInput` (tool name, input, working
30
+ directory, hook, session) beside the span that carried the same facts under
31
+ `muse.*`, and the two were free to drift — `cwd` (PTA-176) and the hook name
32
+ (PTA-207) were on the span and missing from the summary. Now the span is built
33
+ first, `POST /guard/evaluate` receives that OTLP payload unwrapped, the manager
34
+ projects it through the same AgentEvent assembly the backend stores it with,
35
+ and the verdict is attached to the same object before it is relayed — the span
36
+ the manager judged is the span the backend stores, `spanId` included.
37
+ Requires Pinta Manager 0.1.11 or later; an older manager answers `400` and the
38
+ gate fails open (`pinta.guard.fail_open_reason: error`), a newer manager that
39
+ refuses a body answers `410`, recorded as `refused`.
40
+ - `@pinta-ai/core` `^0.6.0` → `^0.8.0` (`evaluateGuard(payload)`, `attachGuard`).
41
+
42
+ ## 0.2.0
43
+
44
+ - Version derived from one literal (`src/core/version.ts`); the build fails on drift.
45
+
3
46
  ## 0.1.2
4
47
 
5
48
  ### Fixed
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,25 +1,26 @@
1
- "use strict";var pt=Object.create;var ce=Object.defineProperty;var dt=Object.getOwnPropertyDescriptor;var gt=Object.getOwnPropertyNames;var _t=Object.getPrototypeOf,mt=Object.prototype.hasOwnProperty;var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ht=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of gt(t))!mt.call(e,o)&&o!==r&&ce(e,o,{get:()=>t[o],enumerable:!(n=dt(t,o))||n.enumerable});return e};var y=(e,t,r)=>(r=e!=null?pt(_t(e)):{},ht(t||!e||!e.__esModule?ce(r,"default",{value:e,enumerable:!0}):r,e));var G=h(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.PATTERNS=p.MAX_BYTES=void 0;p.truncateTo=le;p.truncate=yt;p.collectMatches=fe;p.resolveOverlaps=pe;p.applyMatches=de;p.redact=Et;p.MAX_BYTES=102400;function le(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 yt(e){return le(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 fe(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,M=c+i[0].indexOf(u),ft=M+u.length;r.push({start:c,end:m,replaceStart:M,replaceEnd:ft,type:n.type}),i.index===o.lastIndex&&o.lastIndex++}}return r}function pe(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 de(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 Et(e,t={}){if(e.length===0)return e;let r=fe(e,t);if(r.length===0)return e;let n=pe(r);return de(e,n)}});var Y=h(f=>{"use strict";var Pt=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=ye;f.snakeCase=Tt;f.toOtlpValue=Ee;f.attrsFromRecord=Ot;f.guardAttrs=Pe;f.clientAttrs=ve;f.enforceSpanBudget=Se;f.buildPayload=bt;f.mergeBatch=kt;var vt=Pt(require("crypto")),U=G(),St="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=St.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 ye(){return vt.default.randomBytes(8).toString("hex")}function Tt(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var ge=new Set;function D(e,t,r){let n=(0,U.truncate)(t);if((r.skipRedactKeys??ge).has(e))return n;let o=(r.bashContextKeys??ge).has(e)?"bash":void 0;return(0,U.redact)(n,{context:o})}function Ee(e,t,r={}){if(t==null)return null;switch(typeof t){case"string":return{stringValue:D(e,t,r)};case"boolean":return{boolValue:t};case"number":return Number.isInteger(t)?{intValue:t}:{doubleValue:t};case"object":try{return{stringValue:D(e,JSON.stringify(t),r)}}catch{return{stringValue:D(e,String(t),r)}}default:return{stringValue:D(e,String(t),r)}}}function Ot(e,t,r={}){let n=[];for(let[o,i]of Object.entries(e)){let a=`${t}.${o}`,u=Ee(a,i,r);u!==null&&n.push({key:a,value:u})}return n}function Pe(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 _e(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var me=1024;function Se(e,t=f.MAX_SPAN_BYTES){let r=_e(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,U.truncateTo)(o.stringValue,u),r=_e(e)}return e}function bt(e){let t=e.now??Date.now(),r=(BigInt(t)*1000000n).toString(),n=[...e.attributes];e.guard&&n.push(...Pe(e.guard));let o=e.clientTiming??(e.guard?.clientRttMs!==void 0?{op:"guard",rttMs:e.guard.clientRttMs}:null);o&&n.push(...ve(o));let i={traceId:he(e.traceId),spanId:ye(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:r,endTimeUnixNano:r,attributes:n};return Se(i),{resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[i]}]}]}}function kt(e){let t=[];for(let r of e)t.push(...r.resourceSpans);return{resourceSpans:t}}});var Te=h(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.evaluateGuard=xt;var At=1e4,wt="pinta-core";function X(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var Mt=new Set(["ALLOW","DENY","REVIEW"]);async function xt(e,t,r={}){if(!t||r.disabled)return null;let n=r.timeoutMs??At,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??wt,"x-pinta-relay-token":r.token??""},body:JSON.stringify({input:e}),signal:i.signal});if(u.status!==200)return X(Date.now()-o,"error");let c=await u.json(),m=c?.durationMs===void 0||typeof c.durationMs=="number"&&Number.isFinite(c.durationMs);if(!c||!Mt.has(c.decision)||!m)return X(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,m=c==="AbortError"||c==="TimeoutError"?"timeout":"error";return X(Date.now()-o,m)}finally{clearTimeout(a)}}});var j=h(x=>{"use strict";var Rt=x&&x.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(x,"__esModule",{value:!0});x.atomicWriteFileSync=Dt;var Oe=Rt(require("fs"));function Dt(e,t){let r=`${e}.${process.pid}.tmp`;Oe.default.writeFileSync(r,t),Oe.default.renameSync(r,e)}});var W=h(E=>{"use strict";var be=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=be(require("fs")),N=be(require("path")),jt=j(),I=1e3,Nt=50,It=5,K=class{filePath;lockPath;logPrefix;constructor(t,r){this.filePath=N.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=r}enqueue(t){try{d.default.mkdirSync(N.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(N.default.dirname(this.filePath),{recursive:!0}),(0,jt.atomicWriteFileSync)(this.filePath,t.map(r=>JSON.stringify(r)).join(`
1
+ "use strict";var Et=Object.create;var le=Object.defineProperty;var Pt=Object.getOwnPropertyDescriptor;var St=Object.getOwnPropertyNames;var vt=Object.getPrototypeOf,Tt=Object.prototype.hasOwnProperty;var y=(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&&le(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?le(r,"default",{value:e,enumerable:!0}):r,e));var Y=y(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.PATTERNS=d.MAX_BYTES=void 0;d.truncateTo=fe;d.truncate=Ot;d.collectMatches=de;d.resolveOverlaps=pe;d.applyMatches=ge;d.redact=At;d.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 Ot(e){return fe(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 de(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,h=i.index+i[0].length,x=c+i[0].indexOf(u),yt=x+u.length;r.push({start:c,end:h,replaceStart:x,replaceEnd:yt,type:n.type}),i.index===o.lastIndex&&o.lastIndex++}}return r}function pe(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=de(e,t);if(r.length===0)return e;let n=pe(r);return ge(e,n)}});var z=y(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=ye;f.newSpanId=Ee;f.snakeCase=Mt;f.toOtlpValue=Pe;f.attrsFromRecord=Rt;f.guardAttrs=Se;f.clientAttrs=ve;f.enforceSpanBudget=Te;f.buildPayload=Dt;f.attachGuard=be;f.mergeBatch=jt;var wt=kt(require("crypto")),X=Y(),xt="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function ye(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 Ee(){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 _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 Rt(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 he=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 h=Buffer.byteLength(c.value.stringValue,"utf-8");h>i&&(i=h,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=me(e)}return e}function Dt(e){let t=e.now??Date.now(),r=(BigInt(t)*1000000n).toString(),n=[...e.attributes],o={traceId:ye(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 jt(e){let t=[];for(let r of e)t.push(...r.resourceSpans);return{resourceSpans:t}}});var Oe=y(O=>{"use strict";Object.defineProperty(O,"__esModule",{value:!0});O.GUARD_STATUS_REFUSED=void 0;O.evaluateGuard=Bt;var Nt=1e4,It="pinta-core";function N(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var Ct=new Set(["ALLOW","DENY","REVIEW"]);O.GUARD_STATUS_REFUSED=410;async function Bt(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}:{}},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(),h=c?.durationMs===void 0||typeof c.durationMs=="number"&&Number.isFinite(c.durationMs);if(!c||!Ct.has(c.decision)||!h)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,h=c==="AbortError"||c==="TimeoutError"?"timeout":"error";return N(Date.now()-o,h)}finally{clearTimeout(a)}}});var I=y(M=>{"use strict";var Lt=M&&M.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(M,"__esModule",{value:!0});M.atomicWriteFileSync=$t;var Ae=Lt(require("fs"));function $t(e,t){let r=`${e}.${process.pid}.tmp`;Ae.default.writeFileSync(r,t),Ae.default.renameSync(r,e)}});var Z=y(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 p=ke(require("fs")),C=ke(require("path")),Ut=I(),B=1e3,qt=50,Ft=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{p.default.mkdirSync(C.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(C.default.dirname(this.filePath),{recursive:!0}),(0,Ut.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(N.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<Nt;)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=It,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<=I)return;let r=t.length-I;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>I&&this.entries.splice(0,this.entries.length-I)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};E.MemoryRetryQueue=Z});var Re=h(l=>{"use strict";Object.defineProperty(l,"__esModule",{value:!0});l.MemoryTransport=l.DiskTransport=l.MAX_POST_BYTES=void 0;l.parseHeadersEnv=Me;l.envOptionsResolver=xe;l.postOtlp=R;var ke=W(),Ae=Y(),Ct=5e3;l.MAX_POST_BYTES=900*1024;function C(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function we(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 Me(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 xe(){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:Me(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function R(e,t,r){let n=new AbortController,o=setTimeout(()=>n.abort(),Ct);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(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<qt;)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<=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 W=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=W});var je=y(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=Z(),xe=z(),Gt=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(),Gt);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 J=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new ke.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??xe}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}=we(r,u=>C(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,Ae.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=C(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=J;var H=class{queue=new ke.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let r=this.resolveOptions();if(!r)return;if(C(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}=we(r,C,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,Ae.mergeBatch)(u),t,this.logPrefix))break;a+=u.length}for(let u of i.slice(a))this.queue.enqueue(u)}};l.MemoryTransport=H});var re=h(S=>{"use strict";var te=S&&S.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(S,"__esModule",{value:!0});S.TraceManager=void 0;S.generateUlid=je;var De=te(require("fs")),Bt=te(require("path")),Lt=te(require("crypto")),$t=j(),Q="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function je(){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=Lt.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=je();return this.save(t),t}currentTrace(){try{let t=De.default.readFileSync(this.tracePath,"utf-8"),{traceId:r}=JSON.parse(t);if(r)return r}catch{}return this.newTrace()}save(t){try{De.default.mkdirSync(Bt.default.dirname(this.tracePath),{recursive:!0}),(0,$t.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(r){process.stderr.write(`[pinta-core] trace persistence failed: ${r}
18
- `)}}};S.TraceManager=ee});var Le=h(P=>{"use strict";var Ie=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 Ne=Ie(require("fs")),qt=Ie(require("path")),Ce=re(),Ft=j(),Be=200,ne=class{tracePath;maxSessions;constructor(t,r={}){this.tracePath=t,this.maxSessions=r.maxSessions??Be}read(){try{let t=JSON.parse(Ne.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{Ne.default.mkdirSync(qt.default.dirname(this.tracePath),{recursive:!0});let r=Object.entries(t),n=r.length>this.maxSessions?Object.fromEntries(r.slice(-this.maxSessions)):t;(0,Ft.atomicWriteFileSync)(this.tracePath,JSON.stringify(n))}catch{}}newTrace(t){let r=t||"default",n=(0,Ce.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??Be}newTrace(t){let r=t||"default",n=(0,Ce.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 Fe=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=Ut;T.parseEnvFile=qe;T.loadEnvFile=Yt;var Vt=se(require("node:fs")),Gt=se(require("node:os")),$e=se(require("node:path"));function Ut(e,t,r){let n=r?process.env[r]:void 0,o=n&&n.length>0?n:$e.default.join(Gt.default.homedir(),e);return $e.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 Yt(e){let t;try{t=Vt.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.evaluateGuard=s.MAX_SPAN_BYTES=s.enforceSpanBudget=s.mergeBatch=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=G();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 _=Y();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,"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 Xt=Te();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return Xt.evaluateGuard}});var Ve=W();Object.defineProperty(s,"DiskRetryQueue",{enumerable:!0,get:function(){return Ve.DiskRetryQueue}});Object.defineProperty(s,"MemoryRetryQueue",{enumerable:!0,get:function(){return Ve.MemoryRetryQueue}});var O=Re();Object.defineProperty(s,"DiskTransport",{enumerable:!0,get:function(){return O.DiskTransport}});Object.defineProperty(s,"MemoryTransport",{enumerable:!0,get:function(){return O.MemoryTransport}});Object.defineProperty(s,"postOtlp",{enumerable:!0,get:function(){return O.postOtlp}});Object.defineProperty(s,"envOptionsResolver",{enumerable:!0,get:function(){return O.envOptionsResolver}});Object.defineProperty(s,"parseHeadersEnv",{enumerable:!0,get:function(){return O.parseHeadersEnv}});Object.defineProperty(s,"MAX_POST_BYTES",{enumerable:!0,get:function(){return O.MAX_POST_BYTES}});var Ge=re();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return Ge.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return Ge.generateUlid}});var Ue=Le();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return Ue.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return Ue.MemorySessionTraceManager}});var ie=Fe();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 Ye=y(require("node:os")),B=y(require("node:path")),ae=y(b());var zt="pinta-musecode.env";function Kt(){let e=process.env.XDG_CONFIG_HOME;return e&&e.length>0?B.default.join(e,"muse"):B.default.join(Ye.default.homedir(),".config","muse")}function Zt(){return B.default.join(Kt(),zt)}function Xe(e=Zt()){(0,ae.loadEnvFile)(e)}var ze=y(require("node:os")),ue=y(require("node:path"));function Wt(){return process.env.PINTA_MUSECODE_DATA||process.env.PINTA_PLUGIN_DATA||ue.default.join(ze.default.homedir(),".pinta","adaptors","pinta-musecode")}function Ke(){let e=Wt();return{pluginData:e,tracePath:ue.default.join(e,"trace.json")}}function Ze(){return process.env.PINTA_MUSE_ENFORCE==="1"}function We(){return process.env.PINTA_MUSE_LLM_EVENTS==="1"}var Jt=["SessionStart","UserPromptSubmit","PreToolUse","PermissionRequest","PostToolUse","PreLLMCall","PostLLMCall","PreCompact","PostCompact","SubagentStart","SubagentStop","Stop"],Ht=new Set(Jt);function Qt(e){return Ht.has(e)}var er=["hook_event_name","event","hook","hook_event","eventName"];function Je(e,t){for(let r of e){let n=r.startsWith("--event=")?r.slice(8):r;if(Qt(n))return n}for(let r of er){let n=t[r];if(typeof n=="string"&&n.length>0)return n}return null}function L(e){return e==="PreToolUse"||e==="PermissionRequest"}function He(e){return e==="PreLLMCall"||e==="PostLLMCall"}var tr=new Set(["subagent_spawn","subagent_status","subagent_send_message","subagent_cancel","subagent_wait","subagent_read_result"]);function Qe(e){return e!==void 0&&tr.has(e)}var et=y(b());var k="0.2.0";var rr=1e4,nr=`pinta-musecode/${k}`;function tt(e,t){return(0,et.evaluateGuard)(e,t,{timeoutMs:rr,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:nr})}function or(){let e=process.env.PINTA_MUSE_DENY_FORMAT;return e==="exit2"||e==="json"?e:"auto"}function sr(e,t){return L(e)?{hookSpecificOutput:{hookEventName:e,permissionDecision:"deny",permissionDecisionReason:t}}:{decision:"block",reason:t}}function rt(e,t,r={}){let n=r.stdout??(a=>process.stdout.write(a)),o=r.stderr??(a=>process.stderr.write(a)),i=or();return i==="exit2"?(o(`${t}
20
- `),{written:!0,exitCode:2}):(n(JSON.stringify(sr(e,t))+`
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(h=>h.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=y(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")),Vt=te(require("path")),Yt=te(require("crypto")),Xt=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=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=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(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
+ `)}}};v.TraceManager=ee});var Ue=y(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")),zt=Be(require("path")),Le=re(),Kt=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,Kt.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=y(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=Ht;T.parseEnvFile=Fe;T.loadEnvFile=Jt;var Wt=se(require("node:fs")),Zt=se(require("node:os")),qe=se(require("node:path"));function Ht(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 Jt(e){let t;try{t=Wt.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=y(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=Z();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=m(require("node:os")),$=m(require("node:path")),ae=m(b());var Qt="pinta-musecode.env";function er(){let e=process.env.XDG_CONFIG_HOME;return e&&e.length>0?$.default.join(e,"muse"):$.default.join(Ke.default.homedir(),".config","muse")}function tr(){return $.default.join(er(),Qt)}function We(e=tr()){(0,ae.loadEnvFile)(e)}var Ze=m(require("node:os")),ue=m(require("node:path"));function rr(){return process.env.PINTA_MUSECODE_DATA||process.env.PINTA_PLUGIN_DATA||ue.default.join(Ze.default.homedir(),".pinta","adaptors","pinta-musecode")}function He(){let e=rr();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 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 U(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(b());var nt=m(b());var k="0.4.0";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 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=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 nt=y(b()),$=class extends nt.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-musecode"})}};var ot=y(b()),q=class extends ot.TraceManager{constructor(t){super(t.tracePath)}};var V=y(require("node:os")),A=y(b());var ir="musecode",g="muse",F;function ar(){if(F===void 0)try{F=V.default.userInfo().username}catch{F=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return F}function ur(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 cr=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`]),lr=new Set([`${g}.tool_input`,`${g}.tool_response`]),fr={skipRedactKeys:cr,bashContextKeys:lr};function pr(e){let t=[];t.push({key:"ingest.type",value:{stringValue:ir}}),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,A.attrsFromRecord)(r,g,fr)),t}function dr(e){return[{key:"service.name",value:{stringValue:"muse-code"}},{key:"service.version",value:{stringValue:ur(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:ar()}},{key:"host.name",value:{stringValue:V.default.hostname()}},{key:"host.arch",value:{stringValue:V.default.arch()}}]}function st(e){return(0,A.buildPayload)({traceId:e.traceId,spanName:`${g}.${(0,A.snakeCase)(e.event.hook_event_name)}`,attributes:pr(e.event),resource:dr(e.event),scope:{name:"pinta-musecode",version:k},now:e.now,guard:e.guard})}async function gr(e,t,r={}){let n=new $(t);await n.flush();let o=new q(t),i=r.traceMode==="new"?o.newTrace():o.currentTrace(),a=st({event:e,traceId:i,guard:r.guard});await n.send(a)}async function w(e,t,r={}){try{await gr(e,t,r)}catch(n){process.stderr.write(`[pinta-musecode] telemetry emit failed: ${n}
23
- `)}}async function it(e,t){if(Qe(e.tool_name))return await w(e,t),0;let r=typeof e.tool_input=="string"?e.tool_input:JSON.stringify(e.tool_input),n=await tt({spanId:e.session_id??"unknown",toolName:e.tool_name,method:e.hook_event_name,cwd:e.cwd,toolInput:e.tool_input,rawTextFields:{toolInput:r??""}},process.env.PINTA_GUARD_ENDPOINT),o=0;if(n?.decision==="DENY"&&Ze()){let i=n.userMessage??n.reason??"guard_deny";o=rt(e.hook_event_name,i).exitCode}return await w(e,t,{guard:n}),o}async function at(e,t){return await w(e,t),0}async function ut(e,t){return await w(e,t,{traceMode:"new"}),0}async function ct(e){return 0}async function _r(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}function mr(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 hr(e,t){let r=e.hook_event_name;return L(r)?it(e,t):r==="UserPromptSubmit"?ut(e,t):He(r)&&!We()?ct(e):at(e,t)}async function lt(e=process.argv.slice(2)){let t=0;try{let r=Ke(),n=mr(await _r()),o=Je(e,n);if(o===null)return process.stderr.write(`[pinta-musecode] could not resolve hook event name; skipping
24
- `),0;let i={...n,hook_event_name:o};t=await hr(i,r)}catch(r){process.stderr.write(`[pinta-musecode] error: ${r}
25
- `),t=0}return t}Xe();async function yr(){let e=await lt();process.exit(e)}yr();
22
+ `),{written:!0,exitCode:2}))}var it=m(b()),q=class extends it.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-musecode"})}};var at=m(b()),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(b());var pr="musecode",g="muse",G;function gr(){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 _r(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([`${g}.hook`,`${g}.tool_name`,`${g}.tool_use_id`,`${g}.session_id`,`${g}.cwd`,`${g}.permission_mode`,`${g}.agent_id`,`${g}.agent_type`]),hr=new Set([`${g}.tool_input`,`${g}.tool_response`]),yr={skipRedactKeys:mr,bashContextKeys:hr};function Er(e){let t=[];t.push({key:"ingest.type",value:{stringValue:pr}}),t.push({key:`${g}.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,g,yr)),t}function Pr(e){return[{key:"service.name",value:{stringValue:"muse-code"}},{key:"service.version",value:{stringValue:_r(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:gr()}},{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:`${g}.${(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 ce(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 q(t);await r.flush(),await r.send(e)}async function Sr(e,t,r={}){await lt(ce(e,t,r),t)}async function D(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 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,dt.attachGuard)(r,n),await ft(r,t),o}async function gt(e,t){return await D(e,t),0}async function _t(e,t){return await D(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 U(r)?pt(e,t):r==="UserPromptSubmit"?_t(e,t):tt(r)&&!Qe()?mt(e):gt(e,t)}async function ht(e=process.argv.slice(2)){let t=0;try{let r=He(),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}We();async function Or(){let e=await ht();process.exit(e)}Or();
package/dist/index.mjs CHANGED
@@ -1,26 +1,27 @@
1
1
  import{createRequire as __pintaCreateRequire}from 'node:module';const require=__pintaCreateRequire(import.meta.url);
2
- var ft=Object.create;var ce=Object.defineProperty;var pt=Object.getOwnPropertyDescriptor;var dt=Object.getOwnPropertyNames;var gt=Object.getPrototypeOf,_t=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 y=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var mt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of dt(t))!_t.call(e,o)&&o!==r&&ce(e,o,{get:()=>t[o],enumerable:!(n=pt(t,o))||n.enumerable});return e};var x=(e,t,r)=>(r=e!=null?ft(gt(e)):{},mt(t||!e||!e.__esModule?ce(r,"default",{value:e,enumerable:!0}):r,e));var V=y(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.PATTERNS=p.MAX_BYTES=void 0;p.truncateTo=le;p.truncate=ht;p.collectMatches=fe;p.resolveOverlaps=pe;p.applyMatches=de;p.redact=yt;p.MAX_BYTES=102400;function le(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 ht(e){return le(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 fe(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,h=i.index+i[0].length,M=c+i[0].indexOf(u),lt=M+u.length;r.push({start:c,end:h,replaceStart:M,replaceEnd:lt,type:n.type}),i.index===o.lastIndex&&o.lastIndex++}}return r}function pe(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 de(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 yt(e,t={}){if(e.length===0)return e;let r=fe(e,t);if(r.length===0)return e;let n=pe(r);return de(e,n)}});var U=y(f=>{"use strict";var Et=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=ye;f.snakeCase=St;f.toOtlpValue=Ee;f.attrsFromRecord=Tt;f.guardAttrs=Pe;f.clientAttrs=ve;f.enforceSpanBudget=Se;f.buildPayload=Ot;f.mergeBatch=bt;var Pt=Et(_("crypto")),G=V(),vt="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=vt.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 ye(){return Pt.default.randomBytes(8).toString("hex")}function St(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var ge=new Set;function j(e,t,r){let n=(0,G.truncate)(t);if((r.skipRedactKeys??ge).has(e))return n;let o=(r.bashContextKeys??ge).has(e)?"bash":void 0;return(0,G.redact)(n,{context:o})}function Ee(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 Tt(e,t,r={}){let n=[];for(let[o,i]of Object.entries(e)){let a=`${t}.${o}`,u=Ee(a,i,r);u!==null&&n.push({key:a,value:u})}return n}function Pe(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 _e(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var me=1024;function Se(e,t=f.MAX_SPAN_BYTES){let r=_e(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 h=Buffer.byteLength(c.value.stringValue,"utf-8");h>i&&(i=h,o=c.value)}if(o===null||i<=me)break;let a=r-t,u=Math.max(me,i-a-64);o.stringValue=(0,G.truncateTo)(o.stringValue,u),r=_e(e)}return e}function Ot(e){let t=e.now??Date.now(),r=(BigInt(t)*1000000n).toString(),n=[...e.attributes];e.guard&&n.push(...Pe(e.guard));let o=e.clientTiming??(e.guard?.clientRttMs!==void 0?{op:"guard",rttMs:e.guard.clientRttMs}:null);o&&n.push(...ve(o));let i={traceId:he(e.traceId),spanId:ye(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:r,endTimeUnixNano:r,attributes:n};return Se(i),{resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[i]}]}]}}function bt(e){let t=[];for(let r of e)t.push(...r.resourceSpans);return{resourceSpans:t}}});var Te=y(X=>{"use strict";Object.defineProperty(X,"__esModule",{value:!0});X.evaluateGuard=Mt;var kt=1e4,At="pinta-core";function Y(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var wt=new Set(["ALLOW","DENY","REVIEW"]);async function Mt(e,t,r={}){if(!t||r.disabled)return null;let n=r.timeoutMs??kt,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??At,"x-pinta-relay-token":r.token??""},body:JSON.stringify({input:e}),signal:i.signal});if(u.status!==200)return Y(Date.now()-o,"error");let c=await u.json(),h=c?.durationMs===void 0||typeof c.durationMs=="number"&&Number.isFinite(c.durationMs);if(!c||!wt.has(c.decision)||!h)return Y(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,h=c==="AbortError"||c==="TimeoutError"?"timeout":"error";return Y(Date.now()-o,h)}finally{clearTimeout(a)}}});var N=y(R=>{"use strict";var xt=R&&R.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(R,"__esModule",{value:!0});R.atomicWriteFileSync=Rt;var Oe=xt(_("fs"));function Rt(e,t){let r=`${e}.${process.pid}.tmp`;Oe.default.writeFileSync(r,t),Oe.default.renameSync(r,e)}});var Z=y(E=>{"use strict";var be=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=be(_("fs")),I=be(_("path")),Dt=N(),C=1e3,jt=50,Nt=5,z=class{filePath;lockPath;logPrefix;constructor(t,r){this.filePath=I.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=r}enqueue(t){try{d.default.mkdirSync(I.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(I.default.dirname(this.filePath),{recursive:!0}),(0,Dt.atomicWriteFileSync)(this.filePath,t.map(r=>JSON.stringify(r)).join(`
2
+ var yt=Object.create;var le=Object.defineProperty;var Et=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var St=Object.getPrototypeOf,vt=Object.prototype.hasOwnProperty;var m=(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 y=(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 O=(e,t,r)=>(r=e!=null?yt(St(e)):{},Tt(t||!e||!e.__esModule?le(r,"default",{value:e,enumerable:!0}):r,e));var V=y(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.PATTERNS=d.MAX_BYTES=void 0;d.truncateTo=fe;d.truncate=bt;d.collectMatches=de;d.resolveOverlaps=pe;d.applyMatches=ge;d.redact=Ot;d.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,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 de(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,h=i.index+i[0].length,M=c+i[0].indexOf(u),ht=M+u.length;r.push({start:c,end:h,replaceStart:M,replaceEnd:ht,type:n.type}),i.index===o.lastIndex&&o.lastIndex++}}return r}function pe(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=de(e,t);if(r.length===0)return e;let n=pe(r);return ge(e,n)}});var X=y(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=ye;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(m("crypto")),Y=V(),wt="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function ye(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 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 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 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 _e(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var he=1024;function Te(e,t=f.MAX_SPAN_BYTES){let r=_e(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 h=Buffer.byteLength(c.value.stringValue,"utf-8");h>i&&(i=h,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=_e(e)}return e}function Rt(e){let t=e.now??Date.now(),r=(BigInt(t)*1000000n).toString(),n=[...e.attributes],o={traceId:ye(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=y(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});A.GUARD_STATUS_REFUSED=void 0;A.evaluateGuard=Ct;var jt=1e4,Nt="pinta-core";function I(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var It=new Set(["ALLOW","DENY","REVIEW"]);A.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===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(),h=c?.durationMs===void 0||typeof c.durationMs=="number"&&Number.isFinite(c.durationMs);if(!c||!It.has(c.decision)||!h)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,h=c==="AbortError"||c==="TimeoutError"?"timeout":"error";return I(Date.now()-o,h)}finally{clearTimeout(a)}}});var C=y(R=>{"use strict";var Bt=R&&R.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(R,"__esModule",{value:!0});R.atomicWriteFileSync=Lt;var Ae=Bt(m("fs"));function Lt(e,t){let r=`${e}.${process.pid}.tmp`;Ae.default.writeFileSync(r,t),Ae.default.renameSync(r,e)}});var W=y(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 p=ke(m("fs")),B=ke(m("path")),$t=C(),L=1e3,Ut=50,Ft=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{p.default.mkdirSync(B.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(B.default.dirname(this.filePath),{recursive:!0}),(0,$t.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(I.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<jt;)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=Nt,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<=C)return;let r=t.length-C;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>C&&this.entries.splice(0,this.entries.length-C)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};E.MemoryRetryQueue=K});var Re=y(l=>{"use strict";Object.defineProperty(l,"__esModule",{value:!0});l.MemoryTransport=l.DiskTransport=l.MAX_POST_BYTES=void 0;l.parseHeadersEnv=Me;l.envOptionsResolver=xe;l.postOtlp=D;var ke=Z(),Ae=U(),It=5e3;l.MAX_POST_BYTES=900*1024;function B(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function we(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 Me(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 xe(){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:Me(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function D(e,t,r){let n=new AbortController,o=setTimeout(()=>n.abort(),It);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(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<Ut;)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=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<=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=y(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=W(),xe=X(),qt=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(),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}`:""}
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 ke.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??xe}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}=we(r,u=>B(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,Ae.mergeBatch)(u.map(h=>h.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=B(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 J=class{queue=new ke.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let r=this.resolveOptions();if(!r)return;if(B(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}=we(r,B,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,Ae.mergeBatch)(u),t,this.logPrefix))break;a+=u.length}for(let u of i.slice(a))this.queue.enqueue(u)}};l.MemoryTransport=J});var te=y(S=>{"use strict";var ee=S&&S.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(S,"__esModule",{value:!0});S.TraceManager=void 0;S.generateUlid=je;var De=ee(_("fs")),Ct=ee(_("path")),Bt=ee(_("crypto")),Lt=N(),H="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function je(){let e=Date.now(),t="",r=e;for(let i=0;i<10;i++)t=H[r&31]+t,r=Math.floor(r/32);let n=Bt.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=H[n[i]&31];for(;o.length<16;)o+=H[0];return t+o}var Q=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=je();return this.save(t),t}currentTrace(){try{let t=De.default.readFileSync(this.tracePath,"utf-8"),{traceId:r}=JSON.parse(t);if(r)return r}catch{}return this.newTrace()}save(t){try{De.default.mkdirSync(Ct.default.dirname(this.tracePath),{recursive:!0}),(0,Lt.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(r){process.stderr.write(`[pinta-core] trace persistence failed: ${r}
19
- `)}}};S.TraceManager=Q});var Le=y(P=>{"use strict";var Ie=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 Ne=Ie(_("fs")),$t=Ie(_("path")),Ce=te(),qt=N(),Be=200,re=class{tracePath;maxSessions;constructor(t,r={}){this.tracePath=t,this.maxSessions=r.maxSessions??Be}read(){try{let t=JSON.parse(Ne.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{Ne.default.mkdirSync($t.default.dirname(this.tracePath),{recursive:!0});let r=Object.entries(t),n=r.length>this.maxSessions?Object.fromEntries(r.slice(-this.maxSessions)):t;(0,qt.atomicWriteFileSync)(this.tracePath,JSON.stringify(n))}catch{}}newTrace(t){let r=t||"default",n=(0,Ce.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??Be}newTrace(t){let r=t||"default",n=(0,Ce.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 Fe=y(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=Gt;T.parseEnvFile=qe;T.loadEnvFile=Ut;var Ft=oe(_("node:fs")),Vt=oe(_("node:os")),$e=oe(_("node:path"));function Gt(e,t,r){let n=r?process.env[r]:void 0,o=n&&n.length>0?n:$e.default.join(Vt.default.homedir(),e);return $e.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 Ut(e){let t;try{t=Ft.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=y(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.evaluateGuard=s.MAX_SPAN_BYTES=s.enforceSpanBudget=s.mergeBatch=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=U();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,"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 Yt=Te();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return Yt.evaluateGuard}});var Ve=Z();Object.defineProperty(s,"DiskRetryQueue",{enumerable:!0,get:function(){return Ve.DiskRetryQueue}});Object.defineProperty(s,"MemoryRetryQueue",{enumerable:!0,get:function(){return Ve.MemoryRetryQueue}});var O=Re();Object.defineProperty(s,"DiskTransport",{enumerable:!0,get:function(){return O.DiskTransport}});Object.defineProperty(s,"MemoryTransport",{enumerable:!0,get:function(){return O.MemoryTransport}});Object.defineProperty(s,"postOtlp",{enumerable:!0,get:function(){return O.postOtlp}});Object.defineProperty(s,"envOptionsResolver",{enumerable:!0,get:function(){return O.envOptionsResolver}});Object.defineProperty(s,"parseHeadersEnv",{enumerable:!0,get:function(){return O.parseHeadersEnv}});Object.defineProperty(s,"MAX_POST_BYTES",{enumerable:!0,get:function(){return O.MAX_POST_BYTES}});var Ge=te();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return Ge.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return Ge.generateUlid}});var Ue=Le();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return Ue.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return Ue.MemorySessionTraceManager}});var se=Fe();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 Er}from"node:fs";import{pathToFileURL as Pr}from"node:url";var ae=x(b());import Xt from"node:os";import ie from"node:path";var zt="pinta-musecode.env";function Kt(){let e=process.env.XDG_CONFIG_HOME;return e&&e.length>0?ie.join(e,"muse"):ie.join(Xt.homedir(),".config","muse")}function Zt(){return ie.join(Kt(),zt)}function Ye(e=Zt()){(0,ae.loadEnvFile)(e)}import Wt from"node:os";import Xe from"node:path";function Jt(){return process.env.PINTA_MUSECODE_DATA||process.env.PINTA_PLUGIN_DATA||Xe.join(Wt.homedir(),".pinta","adaptors","pinta-musecode")}function ze(){let e=Jt();return{pluginData:e,tracePath:Xe.join(e,"trace.json")}}function Ke(){return process.env.PINTA_MUSE_ENFORCE==="1"}function Ze(){return process.env.PINTA_MUSE_LLM_EVENTS==="1"}var Ht=["SessionStart","UserPromptSubmit","PreToolUse","PermissionRequest","PostToolUse","PreLLMCall","PostLLMCall","PreCompact","PostCompact","SubagentStart","SubagentStop","Stop"],Qt=new Set(Ht);function er(e){return Qt.has(e)}var tr=["hook_event_name","event","hook","hook_event","eventName"];function We(e,t){for(let r of e){let n=r.startsWith("--event=")?r.slice(8):r;if(er(n))return n}for(let r of tr){let n=t[r];if(typeof n=="string"&&n.length>0)return n}return null}function L(e){return e==="PreToolUse"||e==="PermissionRequest"}function Je(e){return e==="PreLLMCall"||e==="PostLLMCall"}var rr=new Set(["subagent_spawn","subagent_status","subagent_send_message","subagent_cancel","subagent_wait","subagent_read_result"]);function He(e){return e!==void 0&&rr.has(e)}var Qe=x(b());var k="0.2.0";var nr=1e4,or=`pinta-musecode/${k}`;function et(e,t){return(0,Qe.evaluateGuard)(e,t,{timeoutMs:nr,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:or})}function sr(){let e=process.env.PINTA_MUSE_DENY_FORMAT;return e==="exit2"||e==="json"?e:"auto"}function ir(e,t){return L(e)?{hookSpecificOutput:{hookEventName:e,permissionDecision:"deny",permissionDecisionReason:t}}:{decision:"block",reason:t}}function tt(e,t,r={}){let n=r.stdout??(a=>process.stdout.write(a)),o=r.stderr??(a=>process.stderr.write(a)),i=sr();return i==="exit2"?(o(`${t}
21
- `),{written:!0,exitCode:2}):(n(JSON.stringify(ir(e,t))+`
13
+ `),!1}finally{clearTimeout(o)}}var Z=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(h=>h.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=Z;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=y(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(m("fs")),Gt=ee(m("path")),Vt=ee(m("crypto")),Yt=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=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=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}
19
+ `)}}};v.TraceManager=Q});var Ue=y(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(m("fs")),Xt=Be(m("path")),Le=te(),zt=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(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=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=y(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=Ht;var Kt=oe(m("node:fs")),Wt=oe(m("node:os")),Fe=oe(m("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(`
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 Ht(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 b=y(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 _=X();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 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 Ar}from"node:fs";import{pathToFileURL as kr}from"node:url";var ae=O(b());import Jt from"node:os";import ie from"node:path";var Qt="pinta-musecode.env";function er(){let e=process.env.XDG_CONFIG_HOME;return e&&e.length>0?ie.join(e,"muse"):ie.join(Jt.homedir(),".config","muse")}function tr(){return ie.join(er(),Qt)}function Ke(e=tr()){(0,ae.loadEnvFile)(e)}import rr from"node:os";import We from"node:path";function nr(){return process.env.PINTA_MUSECODE_DATA||process.env.PINTA_PLUGIN_DATA||We.join(rr.homedir(),".pinta","adaptors","pinta-musecode")}function Ze(){let e=nr();return{pluginData:e,tracePath:We.join(e,"trace.json")}}function He(){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 U(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=O(b());var rt=O(b());var w="0.4.0";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 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=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 rt=x(b()),$=class extends rt.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-musecode"})}};var nt=x(b()),q=class extends nt.TraceManager{constructor(t){super(t.tracePath)}};var A=x(b());import ue from"node:os";var ar="musecode",g="muse",F;function ur(){if(F===void 0)try{F=ue.userInfo().username}catch{F=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return F}function cr(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 lr=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`]),fr=new Set([`${g}.tool_input`,`${g}.tool_response`]),pr={skipRedactKeys:lr,bashContextKeys:fr};function dr(e){let t=[];t.push({key:"ingest.type",value:{stringValue:ar}}),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,A.attrsFromRecord)(r,g,pr)),t}function gr(e){return[{key:"service.name",value:{stringValue:"muse-code"}},{key:"service.version",value:{stringValue:cr(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:ur()}},{key:"host.name",value:{stringValue:ue.hostname()}},{key:"host.arch",value:{stringValue:ue.arch()}}]}function ot(e){return(0,A.buildPayload)({traceId:e.traceId,spanName:`${g}.${(0,A.snakeCase)(e.event.hook_event_name)}`,attributes:dr(e.event),resource:gr(e.event),scope:{name:"pinta-musecode",version:k},now:e.now,guard:e.guard})}async function _r(e,t,r={}){let n=new $(t);await n.flush();let o=new q(t),i=r.traceMode==="new"?o.newTrace():o.currentTrace(),a=ot({event:e,traceId:i,guard:r.guard});await n.send(a)}async function w(e,t,r={}){try{await _r(e,t,r)}catch(n){process.stderr.write(`[pinta-musecode] telemetry emit failed: ${n}
24
- `)}}async function st(e,t){if(He(e.tool_name))return await w(e,t),0;let r=typeof e.tool_input=="string"?e.tool_input:JSON.stringify(e.tool_input),n=await et({spanId:e.session_id??"unknown",toolName:e.tool_name,method:e.hook_event_name,cwd:e.cwd,toolInput:e.tool_input,rawTextFields:{toolInput:r??""}},process.env.PINTA_GUARD_ENDPOINT),o=0;if(n?.decision==="DENY"&&Ke()){let i=n.userMessage??n.reason??"guard_deny";o=tt(e.hook_event_name,i).exitCode}return await w(e,t,{guard:n}),o}async function it(e,t){return await w(e,t),0}async function at(e,t){return await w(e,t,{traceMode:"new"}),0}async function ut(e){return 0}async function mr(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}function hr(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 yr(e,t){let r=e.hook_event_name;return L(r)?st(e,t):r==="UserPromptSubmit"?at(e,t):Je(r)&&!Ze()?ut(e):it(e,t)}async function ct(e=process.argv.slice(2)){let t=0;try{let r=ze(),n=hr(await mr()),o=We(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 yr(i,r)}catch(r){process.stderr.write(`[pinta-musecode] error: ${r}
26
- `),t=0}return t}Ye();function vr(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===Pr(Er(e)).href}catch{return!1}}async function Sr(){let e=await ct();process.exit(e)}vr()&&Sr();
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)}};import ue 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=O(b());var gr="musecode",g="muse",G;function mr(){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 _r(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 hr=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`]),yr=new Set([`${g}.tool_input`,`${g}.tool_response`]),Er={skipRedactKeys:hr,bashContextKeys:yr};function Pr(e){let t=[];t.push({key:"ingest.type",value:{stringValue:gr}}),t.push({key:`${g}.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,g,Er)),t}function Sr(e){return[{key:"service.name",value:{stringValue:"muse-code"}},{key:"service.version",value:{stringValue:_r(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:mr()}},{key:"host.name",value:{stringValue:ue.hostname()}},{key:"host.arch",value:{stringValue:ue.arch()}}]}function ut(e){return(0,x.buildPayload)({traceId:e.traceId,spanName:`${g}.${(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 ce(e,t,r={}){let n=new q(t),o=r.traceMode==="new"?n.newTrace():n.currentTrace();return ut({event:e,traceId:o})}async function ct(e,t){let r=new F(t);await r.flush(),await r.send(e)}async function vr(e,t,r={}){await ct(ce(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=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,ft.attachGuard)(r,n),await lt(r,t),o}async function pt(e,t){return await j(e,t),0}async function gt(e,t){return await j(e,t,{traceMode:"new"}),0}async function mt(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 U(r)?dt(e,t):r==="UserPromptSubmit"?gt(e,t):et(r)&&!Je()?mt(e):pt(e,t)}async function _t(e=process.argv.slice(2)){let t=0;try{let r=Ze(),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}Ke();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 _t();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.2.0",
3
+ "version": "0.4.0",
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.6.0",
42
+ "@pinta-ai/core": "^0.8.0",
43
43
  "@types/node": "^22.0.0",
44
44
  "esbuild": "^0.24.0",
45
45
  "tsx": "^4.0.0",