@pinta-ai/pinta-musecode 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +9 -9
- package/dist/index.mjs +9 -9
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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=
|
|
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
2
|
`;d.default.appendFileSync(this.filePath,r),this.trim()}catch(r){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${r}
|
|
3
3
|
`)}}readAll(){try{let t=d.default.readFileSync(this.filePath,"utf-8"),r=[];for(let n of t.split(`
|
|
4
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(`
|
|
@@ -7,19 +7,19 @@
|
|
|
7
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
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
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
|
|
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}`:""}
|
|
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
|
|
13
|
-
`);let i=[].concat(...n),a=0;for(let u of n){if(!await R((0,
|
|
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
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
|
|
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
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,
|
|
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
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
|
|
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
20
|
`),{written:!0,exitCode:2}):(n(JSON.stringify(sr(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")),
|
|
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,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
|
|
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
24
|
`),0;let i={...n,hook_event_name:o};t=await hr(i,r)}catch(r){process.stderr.write(`[pinta-musecode] error: ${r}
|
|
25
25
|
`),t=0}return t}Xe();async function yr(){let e=await lt();process.exit(e)}yr();
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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
|
|
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
3
|
`;d.default.appendFileSync(this.filePath,r),this.trim()}catch(r){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${r}
|
|
4
4
|
`)}}readAll(){try{let t=d.default.readFileSync(this.filePath,"utf-8"),r=[];for(let n of t.split(`
|
|
5
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(`
|
|
@@ -8,19 +8,19 @@ var ft=Object.create;var ce=Object.defineProperty;var pt=Object.getOwnPropertyDe
|
|
|
8
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
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
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
|
|
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}`:""}
|
|
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
|
|
14
|
-
`);let i=[].concat(...n),a=0;for(let u of n){if(!await D((0,
|
|
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
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
|
|
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
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,
|
|
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
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
|
|
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
21
|
`),{written:!0,exitCode:2}):(n(JSON.stringify(ir(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
|
|
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,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
|
|
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
25
|
`),0;let i={...n,hook_event_name:o};t=await yr(i,r)}catch(r){process.stderr.write(`[pinta-musecode] error: ${r}
|
|
26
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();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pinta-ai/pinta-musecode",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.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.
|
|
42
|
+
"@pinta-ai/core": "^0.6.0",
|
|
43
43
|
"@types/node": "^22.0.0",
|
|
44
44
|
"esbuild": "^0.24.0",
|
|
45
45
|
"tsx": "^4.0.0",
|