@pinta-ai/pinta-copilot 0.6.0 → 0.7.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 +18 -18
- package/dist/index.mjs +16 -16
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`;
|
|
3
|
-
`)}}readAll(){try{let t=
|
|
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){
|
|
1
|
+
"use strict";var dt=Object.create;var pe=Object.defineProperty;var _t=Object.getOwnPropertyDescriptor;var gt=Object.getOwnPropertyNames;var ht=Object.getPrototypeOf,yt=Object.prototype.hasOwnProperty;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 gt(t))!yt.call(e,o)&&o!==r&&pe(e,o,{get:()=>t[o],enumerable:!(n=_t(t,o))||n.enumerable});return e};var m=(e,t,r)=>(r=e!=null?dt(ht(e)):{},mt(t||!e||!e.__esModule?pe(r,"default",{value:e,enumerable:!0}):r,e));var X=y(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.PATTERNS=p.MAX_BYTES=void 0;p.truncateTo=de;p.truncate=Pt;p.collectMatches=_e;p.resolveOverlaps=ge;p.applyMatches=he;p.redact=Ot;p.MAX_BYTES=102400;function de(e,t){let r=Buffer.from(e,"utf-8");return r.length<=t?e:`${r.subarray(0,Math.max(0,t)).toString("utf-8")}\u2026[TRUNCATED:${r.length}]`}function Pt(e){return de(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 _e(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,d=i.index+i[0].length,g=c+i[0].indexOf(u),Y=g+u.length;r.push({start:c,end:d,replaceStart:g,replaceEnd:Y,type:n.type}),i.index===o.lastIndex&&o.lastIndex++}}return r}function ge(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 he(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=_e(e,t);if(r.length===0)return e;let n=ge(r);return he(e,n)}});var z=y(f=>{"use strict";var St=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=Oe;f.newSpanId=Se;f.snakeCase=Et;f.toOtlpValue=Te;f.attrsFromRecord=bt;f.guardAttrs=ve;f.clientAttrs=Ee;f.enforceSpanBudget=be;f.buildPayload=kt;f.mergeBatch=wt;var Tt=St(require("crypto")),K=X(),vt="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Oe(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 Se(){return Tt.default.randomBytes(8).toString("hex")}function Et(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var ye=new Set;function D(e,t,r){let n=(0,K.truncate)(t);if((r.skipRedactKeys??ye).has(e))return n;let o=(r.bashContextKeys??ye).has(e)?"bash":void 0;return(0,K.redact)(n,{context:o})}function Te(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 bt(e,t,r={}){let n=[];for(let[o,i]of Object.entries(e)){let a=`${t}.${o}`,u=Te(a,i,r);u!==null&&n.push({key:a,value:u})}return n}function ve(e){let t=[{key:"pinta.guard.decision",value:{stringValue:e.decision.toLowerCase()}},{key:"pinta.guard.duration_ms",value:{intValue:e.durationMs}}];return e.reason&&t.push({key:"pinta.guard.matched_rule",value:{stringValue:e.reason}}),e.failOpenReason&&t.push({key:"pinta.guard.fail_open_reason",value:{stringValue:e.failOpenReason}}),t}function Ee(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 Pe=1024;function be(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 d=Buffer.byteLength(c.value.stringValue,"utf-8");d>i&&(i=d,o=c.value)}if(o===null||i<=Pe)break;let a=r-t,u=Math.max(Pe,i-a-64);o.stringValue=(0,K.truncateTo)(o.stringValue,u),r=me(e)}return e}function kt(e){let t=e.now??Date.now(),r=(BigInt(t)*1000000n).toString(),n=[...e.attributes];e.guard&&n.push(...ve(e.guard));let o=e.clientTiming??(e.guard?.clientRttMs!==void 0?{op:"guard",rttMs:e.guard.clientRttMs}:null);o&&n.push(...Ee(o));let i={traceId:Oe(e.traceId),spanId:Se(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:r,endTimeUnixNano:r,attributes:n};return be(i),{resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[i]}]}]}}function wt(e){let t=[];for(let r of e)t.push(...r.resourceSpans);return{resourceSpans:t}}});var ke=y(J=>{"use strict";Object.defineProperty(J,"__esModule",{value:!0});J.evaluateGuard=It;var At=1e4,Mt="pinta-core";function Z(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var Rt=new Set(["ALLOW","DENY","REVIEW"]);async function It(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??Mt,"x-pinta-relay-token":r.token??""},body:JSON.stringify({input:e}),signal:i.signal});if(u.status!==200)return Z(Date.now()-o,"error");let c=await u.json(),d=c?.durationMs===void 0||typeof c.durationMs=="number"&&Number.isFinite(c.durationMs);if(!c||!Rt.has(c.decision)||!d)return Z(Date.now()-o,"error");let g=Date.now()-o;return{decision:c.decision,reason:c.reason??null,userMessage:c.userMessage??null,durationMs:c.durationMs??g,clientRttMs:g}}catch(u){let c=u.name,d=c==="AbortError"||c==="TimeoutError"?"timeout":"error";return Z(Date.now()-o,d)}finally{clearTimeout(a)}}});var j=y(I=>{"use strict";var Nt=I&&I.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(I,"__esModule",{value:!0});I.atomicWriteFileSync=xt;var we=Nt(require("fs"));function xt(e,t){let r=`${e}.${process.pid}.tmp`;we.default.writeFileSync(r,t),we.default.renameSync(r,e)}});var Q=y(S=>{"use strict";var Ae=S&&S.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(S,"__esModule",{value:!0});S.MemoryRetryQueue=S.DiskRetryQueue=void 0;var _=Ae(require("fs")),C=Ae(require("path")),Dt=j(),L=1e3,jt=50,Ct=5,H=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{_.default.mkdirSync(C.default.dirname(this.filePath),{recursive:!0});let r=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
|
|
2
|
+
`;_.default.appendFileSync(this.filePath,r),this.trim()}catch(r){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${r}
|
|
3
|
+
`)}}readAll(){try{let t=_.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){_.default.existsSync(this.filePath)&&_.default.unlinkSync(this.filePath);return}_.default.mkdirSync(C.default.dirname(this.filePath),{recursive:!0}),(0,Dt.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{
|
|
8
|
-
`),!1}for(;Date.now()-t<
|
|
9
|
-
`),!1;try{let i=
|
|
10
|
-
`),this.rewrite(t.slice(r))}};S.DiskRetryQueue=
|
|
7
|
+
`)}}tryAcquireLock(){let t=Date.now();try{_.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<jt;)try{let r=_.default.openSync(this.lockPath,"wx");return _.default.writeSync(r,String(process.pid)),_.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=_.default.statSync(this.lockPath);if(Date.now()-i.mtimeMs>3e4){_.default.unlinkSync(this.lockPath);continue}}catch{}let n=Ct,o=Date.now()+n;for(;Date.now()<o;);}return!1}release(){try{_.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
|
|
10
|
+
`),this.rewrite(t.slice(r))}};S.DiskRetryQueue=H;var W=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}};S.MemoryRetryQueue=W});var De=y(l=>{"use strict";Object.defineProperty(l,"__esModule",{value:!0});l.MemoryTransport=l.DiskTransport=l.MAX_POST_BYTES=void 0;l.parseHeadersEnv=Ne;l.envOptionsResolver=xe;l.postOtlp=N;var Me=Q(),Re=z(),Lt=5e3;l.MAX_POST_BYTES=900*1024;function q(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function Ie(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 Ne(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:Ne(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function N(e,t,r){let n=new AbortController,o=setTimeout(()=>n.abort(),Lt);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
|
|
13
|
-
`);let i=[].concat(...n),a=0;for(let u of n){if(!await
|
|
14
|
-
`)}finally{this.queue.release()}}dropIfOversized(t){let r=
|
|
15
|
-
`),!0)}};l.DiskTransport=
|
|
16
|
-
`);return}await
|
|
17
|
-
`);let i=[].concat(...n),a=0;for(let u of n){if(!await
|
|
18
|
-
`)}}};
|
|
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 Vt(e){let t;try{t=Bt.default.readFileSync(e,"utf-8")}catch{return}let r=$e(t);for(let[n,o]of Object.entries(r))process.env[n]===void 0&&(process.env[n]=o)}});var w=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 T=Y();Object.defineProperty(s,"redact",{enumerable:!0,get:function(){return T.redact}});Object.defineProperty(s,"truncate",{enumerable:!0,get:function(){return T.truncate}});Object.defineProperty(s,"truncateTo",{enumerable:!0,get:function(){return T.truncateTo}});Object.defineProperty(s,"collectMatches",{enumerable:!0,get:function(){return T.collectMatches}});Object.defineProperty(s,"resolveOverlaps",{enumerable:!0,get:function(){return T.resolveOverlaps}});Object.defineProperty(s,"applyMatches",{enumerable:!0,get:function(){return T.applyMatches}});Object.defineProperty(s,"PATTERNS",{enumerable:!0,get:function(){return T.PATTERNS}});Object.defineProperty(s,"MAX_BYTES",{enumerable:!0,get:function(){return T.MAX_BYTES}});var h=K();Object.defineProperty(s,"ulidToTraceId",{enumerable:!0,get:function(){return h.ulidToTraceId}});Object.defineProperty(s,"newSpanId",{enumerable:!0,get:function(){return h.newSpanId}});Object.defineProperty(s,"snakeCase",{enumerable:!0,get:function(){return h.snakeCase}});Object.defineProperty(s,"toOtlpValue",{enumerable:!0,get:function(){return h.toOtlpValue}});Object.defineProperty(s,"attrsFromRecord",{enumerable:!0,get:function(){return h.attrsFromRecord}});Object.defineProperty(s,"guardAttrs",{enumerable:!0,get:function(){return h.guardAttrs}});Object.defineProperty(s,"clientAttrs",{enumerable:!0,get:function(){return h.clientAttrs}});Object.defineProperty(s,"buildPayload",{enumerable:!0,get:function(){return h.buildPayload}});Object.defineProperty(s,"mergeBatch",{enumerable:!0,get:function(){return h.mergeBatch}});Object.defineProperty(s,"enforceSpanBudget",{enumerable:!0,get:function(){return h.enforceSpanBudget}});Object.defineProperty(s,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return h.MAX_SPAN_BYTES}});var Ut=ve();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return Ut.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 A=Re();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 Ue=oe();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return Ue.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return Ue.generateUlid}});var Ge=Le();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return Ge.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return Ge.MemorySessionTraceManager}});var ue=Fe();Object.defineProperty(s,"envFilePath",{enumerable:!0,get:function(){return ue.envFilePath}});Object.defineProperty(s,"parseEnvFile",{enumerable:!0,get:function(){return ue.parseEnvFile}});Object.defineProperty(s,"loadEnvFile",{enumerable:!0,get:function(){return ue.loadEnvFile}})});var N=P(w());function Gt(){return(0,N.envFilePath)(".copilot","pinta-copilot.env","COPILOT_HOME")}function Ye(e=Gt()){(0,N.loadEnvFile)(e)}var Xe=P(require("os")),L=P(require("path"));function Yt(){return process.env.COPILOT_HOME||L.default.join(Xe.default.homedir(),".copilot")}function Ke(){let e=process.env.COPILOT_PLUGIN_DATA||L.default.join(Yt(),"pinta-copilot-data");return{pluginData:e,tracePath:L.default.join(e,"trace.json")}}function ze(e=process.env){return e.COPILOT_AGENT_JOB_ID||e.COPILOT_AGENT_SESSION_ID||e.COPILOT_AGENT_PROMPT?"cloud":e.ELECTRON_RUN_AS_NODE||e.VSCODE_IPC_HOOK||e.VSCODE_PID?"ext":"cli"}function m(e){return typeof e=="string"?e:void 0}function M(e){return m(e.hook_event_name)??m(e.hookEventName)??m(e.hookName)??(process.env.PINTA_COPILOT_EVENT||void 0)}function Ze(e){return m(e.session_id)??m(e.sessionId)}function Je(e){return m(e.tool_name)??m(e.toolName)}function He(e){return m(e.cwd)??m(e.workingDirectory)}function We(e){return e.tool_input??e.toolArgs??e.toolInput}var Xt={sessionstart:"SessionStart",sessionend:"SessionEnd",userpromptsubmit:"UserPromptSubmit",userpromptsubmitted:"UserPromptSubmit",pretooluse:"PreToolUse",posttooluse:"PostToolUse",posttoolusefailure:"PostToolUseFailure",stop:"Stop",agentstop:"Stop",subagentstart:"SubagentStart",subagentstop:"SubagentStop",precompact:"PreCompact",notification:"Notification",permissionrequest:"PermissionRequest",erroroccurred:"ErrorOccurred"};function Qe(e){let t=M(e);return t?Xt[t.toLowerCase()]??"Unknown":"Unknown"}function et(e){return e==="PreToolUse"||e==="PermissionRequest"}var Kt=new Set(["report_intent","ask_user"]);function tt(e){return e!==void 0&&Kt.has(e)}function rt(e,t){return e==="PreToolUse"?JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:t}}):e==="PermissionRequest"?JSON.stringify({behavior:"deny",message:t}):null}var $=P(w());function zt(){let e=process.env.COPILOT_PLUGIN_OPTION_ENDPOINT||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:(0,$.parseHeadersEnv)(process.env.COPILOT_PLUGIN_OPTION_HEADERS||process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}var B=class extends $.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-copilot",resolveOptions:zt})}};var nt=P(w()),F=class extends nt.DiskSessionTraceManager{constructor(t){super(t.tracePath)}};var U=P(require("os")),k=P(w());var V;function Zt(){if(V===void 0)try{V=U.default.userInfo().username}catch{V=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return V}var ot="0.6.0";function Jt(){return process.env.COPILOT_CLI_VERSION||"unknown"}var Ht=new Set(["copilot.hook","copilot.tool_name","copilot.toolName","copilot.tool_use_id","copilot.toolUseId","copilot.session_id","copilot.sessionId","copilot.transcript_path","copilot.transcriptPath","copilot.cwd","copilot.permission_mode","copilot.surface","copilot.agent_id","copilot.agent_type","copilot.agent_name","copilot.agent_display_name","copilot.stop_reason","copilot.notification_type"]),Wt=new Set(["copilot.tool_input","copilot.toolInput","copilot.tool_response","copilot.tool_result"]),Qt={skipRedactKeys:Ht,bashContextKeys:Wt},er=new Set(["hook_event_name","hookEventName","hookName"]);function tr(e,t){let r=Object.fromEntries(Object.entries(e).filter(([n])=>!er.has(n)));return[{key:"ingest.type",value:{stringValue:"copilot"}},{key:"copilot.hook",value:{stringValue:M(e)??"unknown"}},{key:"copilot.surface",value:{stringValue:t}},...(0,k.attrsFromRecord)(r,"copilot",Qt)]}function rr(){return[{key:"service.name",value:{stringValue:"copilot"}},{key:"service.version",value:{stringValue:Jt()}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-copilot"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:ot}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:Zt()}},{key:"host.name",value:{stringValue:U.default.hostname()}},{key:"host.arch",value:{stringValue:U.default.arch()}}]}function st(e){return(0,k.buildPayload)({traceId:e.traceId,spanName:`copilot.${(0,k.snakeCase)(M(e.event)??"unknown")}`,attributes:tr(e.event,e.surface),resource:rr(),scope:{name:"pinta-copilot",version:ot},now:e.now,guard:e.guard})}var it=P(w());function nr(){return Number(process.env.PINTA_GUARD_TIMEOUT_MS)||50}var or="pinta-copilot/0.6.0";function at(e,t){return(0,it.evaluateGuard)(e,t,{timeoutMs:nr(),token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:or})}async function sr(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function ut(){try{let e=Ke(),t=ze(),r=await sr(),n=JSON.parse(r),o=Qe(n),i=Ze(n),a=new B(e);await a.flush();let u=new F(e),c=o==="UserPromptSubmit"?u.newTrace(i):u.currentTrace(i),d=Je(n),_=null;if(et(o)&&!tt(d)){let v=We(n);_=await at({spanId:i??"unknown",toolName:d,method:M(n),cwd:He(n),toolInput:v,rawTextFields:{toolInput:typeof v=="string"?v:JSON.stringify(v??null)}},process.env.PINTA_GUARD_ENDPOINT)}if(_?.decision==="DENY"){let v=rt(o,_.userMessage??_.reason??"guard_deny");v&&process.stdout.write(v+`
|
|
20
|
-
`)}let
|
|
21
|
-
`)}return 0}
|
|
12
|
+
`),!1}finally{clearTimeout(o)}}var ee=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new Me.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 N(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}=Ie(r,u=>q(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 N((0,Re.mergeBatch)(u.map(d=>d.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=q(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=ee;var te=class{queue=new Me.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let r=this.resolveOptions();if(!r)return;if(q(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 N(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}=Ie(r,q,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 N((0,Re.mergeBatch)(u),t,this.logPrefix))break;a+=u.length}for(let u of i.slice(a))this.queue.enqueue(u)}};l.MemoryTransport=te});var se=y(b=>{"use strict";var oe=b&&b.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(b,"__esModule",{value:!0});b.TraceManager=void 0;b.generateUlid=Ce;var je=oe(require("fs")),qt=oe(require("path")),Bt=oe(require("crypto")),Vt=j(),re="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Ce(){let e=Date.now(),t="",r=e;for(let i=0;i<10;i++)t=re[r&31]+t,r=Math.floor(r/32);let n=Bt.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=re[n[i]&31];for(;o.length<16;)o+=re[0];return t+o}var ne=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=Ce();return this.save(t),t}currentTrace(){try{let t=je.default.readFileSync(this.tracePath,"utf-8"),{traceId:r}=JSON.parse(t);if(r)return r}catch{}return this.newTrace()}save(t){try{je.default.mkdirSync(qt.default.dirname(this.tracePath),{recursive:!0}),(0,Vt.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(r){process.stderr.write(`[pinta-core] trace persistence failed: ${r}
|
|
18
|
+
`)}}};b.TraceManager=ne});var $e=y(T=>{"use strict";var qe=T&&T.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(T,"__esModule",{value:!0});T.MemorySessionTraceManager=T.DiskSessionTraceManager=void 0;var Le=qe(require("fs")),$t=qe(require("path")),Be=se(),Ft=j(),Ve=200,ie=class{tracePath;maxSessions;constructor(t,r={}){this.tracePath=t,this.maxSessions=r.maxSessions??Ve}read(){try{let t=JSON.parse(Le.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{Le.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,Ft.atomicWriteFileSync)(this.tracePath,JSON.stringify(n))}catch{}}newTrace(t){let r=t||"default",n=(0,Be.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)}};T.DiskSessionTraceManager=ie;var ae=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??Ve}newTrace(t){let r=t||"default",n=(0,Be.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)}};T.MemorySessionTraceManager=ae});var Ge=y(k=>{"use strict";var ue=k&&k.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(k,"__esModule",{value:!0});k.envFilePath=Yt;k.parseEnvFile=Ue;k.loadEnvFile=Xt;var Ut=ue(require("node:fs")),Gt=ue(require("node:os")),Fe=ue(require("node:path"));function Yt(e,t,r){let n=r?process.env[r]:void 0,o=n&&n.length>0?n:Fe.default.join(Gt.default.homedir(),e);return Fe.default.join(o,t)}function Ue(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 Xt(e){let t;try{t=Ut.default.readFileSync(e,"utf-8")}catch{return}let r=Ue(t);for(let[n,o]of Object.entries(r))process.env[n]===void 0&&(process.env[n]=o)}});var M=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=X();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 h=z();Object.defineProperty(s,"ulidToTraceId",{enumerable:!0,get:function(){return h.ulidToTraceId}});Object.defineProperty(s,"newSpanId",{enumerable:!0,get:function(){return h.newSpanId}});Object.defineProperty(s,"snakeCase",{enumerable:!0,get:function(){return h.snakeCase}});Object.defineProperty(s,"toOtlpValue",{enumerable:!0,get:function(){return h.toOtlpValue}});Object.defineProperty(s,"attrsFromRecord",{enumerable:!0,get:function(){return h.attrsFromRecord}});Object.defineProperty(s,"guardAttrs",{enumerable:!0,get:function(){return h.guardAttrs}});Object.defineProperty(s,"clientAttrs",{enumerable:!0,get:function(){return h.clientAttrs}});Object.defineProperty(s,"buildPayload",{enumerable:!0,get:function(){return h.buildPayload}});Object.defineProperty(s,"mergeBatch",{enumerable:!0,get:function(){return h.mergeBatch}});Object.defineProperty(s,"enforceSpanBudget",{enumerable:!0,get:function(){return h.enforceSpanBudget}});Object.defineProperty(s,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return h.MAX_SPAN_BYTES}});var Kt=ke();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return Kt.evaluateGuard}});var Ye=Q();Object.defineProperty(s,"DiskRetryQueue",{enumerable:!0,get:function(){return Ye.DiskRetryQueue}});Object.defineProperty(s,"MemoryRetryQueue",{enumerable:!0,get:function(){return Ye.MemoryRetryQueue}});var A=De();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=se();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return Xe.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return Xe.generateUlid}});var Ke=$e();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return Ke.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return Ke.MemorySessionTraceManager}});var ce=Ge();Object.defineProperty(s,"envFilePath",{enumerable:!0,get:function(){return ce.envFilePath}});Object.defineProperty(s,"parseEnvFile",{enumerable:!0,get:function(){return ce.parseEnvFile}});Object.defineProperty(s,"loadEnvFile",{enumerable:!0,get:function(){return ce.loadEnvFile}})});var x=m(M());function zt(){return(0,x.envFilePath)(".copilot","pinta-copilot.env","COPILOT_HOME")}function ze(e=zt()){(0,x.loadEnvFile)(e)}var Ze=m(require("os")),B=m(require("path"));function Zt(){return process.env.COPILOT_HOME||B.default.join(Ze.default.homedir(),".copilot")}function Je(){let e=process.env.COPILOT_PLUGIN_DATA||B.default.join(Zt(),"pinta-copilot-data");return{pluginData:e,tracePath:B.default.join(e,"trace.json")}}function He(e=process.env){return e.COPILOT_AGENT_JOB_ID||e.COPILOT_AGENT_SESSION_ID||e.COPILOT_AGENT_PROMPT?"cloud":e.ELECTRON_RUN_AS_NODE||e.VSCODE_IPC_HOOK||e.VSCODE_PID?"ext":"cli"}function O(e){return typeof e=="string"?e:void 0}function R(e){return O(e.hook_event_name)??O(e.hookEventName)??O(e.hookName)??(process.env.PINTA_COPILOT_EVENT||void 0)}function We(e){return O(e.session_id)??O(e.sessionId)}function Qe(e){return O(e.tool_name)??O(e.toolName)}function et(e){return O(e.cwd)??O(e.workingDirectory)}function tt(e){return e.tool_input??e.toolArgs??e.toolInput}var Jt={sessionstart:"SessionStart",sessionend:"SessionEnd",userpromptsubmit:"UserPromptSubmit",userpromptsubmitted:"UserPromptSubmit",pretooluse:"PreToolUse",posttooluse:"PostToolUse",posttoolusefailure:"PostToolUseFailure",stop:"Stop",agentstop:"Stop",subagentstart:"SubagentStart",subagentstop:"SubagentStop",precompact:"PreCompact",notification:"Notification",permissionrequest:"PermissionRequest",erroroccurred:"ErrorOccurred"};function rt(e){let t=R(e);return t?Jt[t.toLowerCase()]??"Unknown":"Unknown"}function nt(e){return e==="PreToolUse"||e==="PermissionRequest"}var Ht=new Set(["report_intent","ask_user"]);function ot(e){return e!==void 0&&Ht.has(e)}function st(e,t){return e==="PreToolUse"?JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:t}}):e==="PermissionRequest"?JSON.stringify({behavior:"deny",message:t}):null}var $=m(M());function Wt(){let e=process.env.COPILOT_PLUGIN_OPTION_ENDPOINT||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:(0,$.parseHeadersEnv)(process.env.COPILOT_PLUGIN_OPTION_HEADERS||process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}var V=class extends $.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-copilot",resolveOptions:Wt})}};var it=m(M()),F=class extends it.DiskSessionTraceManager{constructor(t){super(t.tracePath)}};var at=m(require("fs")),G=m(require("os")),fe=m(require("path")),w=m(M());var U;function Qt(){if(U===void 0)try{U=G.default.userInfo().username}catch{U=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return U}var ut="0.6.0",er=new Set(["","unknown","undefined","null","n/a","none"]);function P(e){let t=typeof e=="string"?e.trim():void 0;return t&&!er.has(t.toLowerCase())?t:void 0}var tr=/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/;function rr(e){let t=P(e);return t&&tr.test(t)?t:void 0}function nr(e){let t=e?P(e.copilot_version)??P(e.copilotVersion)??P(e.cli_version)??P(e.cliVersion)??P(e.version):void 0;return t||(le===void 0&&(le=or()),le??void 0)}var le;function or(){let e=P(process.env.COPILOT_CLI_BINARY_VERSION)??P(process.env.COPILOT_CLI_VERSION);if(e)return e;let t=P(process.env.COPILOT_CLI_RESOLVED_DIST_DIR);if(t){let r=rr(fe.default.basename(t));if(r)return r;let n=sr(t);if(n)return n}return null}function sr(e){try{let t=at.default.readFileSync(fe.default.join(e,"package.json"),"utf8");return P(JSON.parse(t).version)}catch{return}}var ir=new Set(["copilot.hook","copilot.tool_name","copilot.toolName","copilot.tool_use_id","copilot.toolUseId","copilot.session_id","copilot.sessionId","copilot.transcript_path","copilot.transcriptPath","copilot.cwd","copilot.permission_mode","copilot.surface","copilot.agent_id","copilot.agent_type","copilot.agent_name","copilot.agent_display_name","copilot.stop_reason","copilot.notification_type"]),ar=new Set(["copilot.tool_input","copilot.toolInput","copilot.tool_response","copilot.tool_result"]),ur={skipRedactKeys:ir,bashContextKeys:ar},cr=new Set(["hook_event_name","hookEventName","hookName"]);function lr(e,t){let r=Object.fromEntries(Object.entries(e).filter(([n])=>!cr.has(n)));return[{key:"ingest.type",value:{stringValue:"copilot"}},{key:"copilot.hook",value:{stringValue:R(e)??"unknown"}},{key:"copilot.surface",value:{stringValue:t}},...(0,w.attrsFromRecord)(r,"copilot",ur)]}function fr(e){let t=nr(e);return[{key:"service.name",value:{stringValue:"copilot"}},...t?[{key:"service.version",value:{stringValue:t}}]:[],{key:"telemetry.sdk.name",value:{stringValue:"pinta-copilot"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:ut}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:Qt()}},{key:"host.name",value:{stringValue:G.default.hostname()}},{key:"host.arch",value:{stringValue:G.default.arch()}}]}function ct(e){return(0,w.buildPayload)({traceId:e.traceId,spanName:`copilot.${(0,w.snakeCase)(R(e.event)??"unknown")}`,attributes:lr(e.event,e.surface),resource:fr(e.event),scope:{name:"pinta-copilot",version:ut},now:e.now,guard:e.guard})}var lt=m(M());function pr(){return Number(process.env.PINTA_GUARD_TIMEOUT_MS)||50}var dr="pinta-copilot/0.6.0";function ft(e,t){return(0,lt.evaluateGuard)(e,t,{timeoutMs:pr(),token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:dr})}async function _r(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function pt(){try{let e=Je(),t=He(),r=await _r(),n=JSON.parse(r),o=rt(n),i=We(n),a=new V(e);await a.flush();let u=new F(e),c=o==="UserPromptSubmit"?u.newTrace(i):u.currentTrace(i),d=Qe(n),g=null;if(nt(o)&&!ot(d)){let E=tt(n);g=await ft({spanId:i??"unknown",toolName:d,method:R(n),cwd:et(n),toolInput:E,rawTextFields:{toolInput:typeof E=="string"?E:JSON.stringify(E??null)}},process.env.PINTA_GUARD_ENDPOINT)}if(g?.decision==="DENY"){let E=st(o,g.userMessage??g.reason??"guard_deny");E&&process.stdout.write(E+`
|
|
20
|
+
`)}let Y=ct({event:n,traceId:c,surface:t,guard:g});await a.send(Y)}catch(e){process.stderr.write(`[pinta-copilot] error: ${e}
|
|
21
|
+
`)}return 0}ze();async function gr(){let e=await pt();process.exit(e)}gr();
|
package/dist/index.mjs
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import{createRequire as __pintaCreateRequire}from 'node:module';const require=__pintaCreateRequire(import.meta.url);
|
|
2
|
-
var
|
|
2
|
+
var At=Object.create;var _e=Object.defineProperty;var It=Object.getOwnPropertyDescriptor;var Mt=Object.getOwnPropertyNames;var Rt=Object.getPrototypeOf,xt=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 _=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Nt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Mt(t))!xt.call(e,o)&&o!==r&&_e(e,o,{get:()=>t[o],enumerable:!(n=It(t,o))||n.enumerable});return e};var R=(e,t,r)=>(r=e!=null?At(Rt(e)):{},Nt(t||!e||!e.__esModule?_e(r,"default",{value:e,enumerable:!0}):r,e));var Y=_(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.PATTERNS=d.MAX_BYTES=void 0;d.truncateTo=Se;d.truncate=Dt;d.collectMatches=Pe;d.resolveOverlaps=Te;d.applyMatches=Oe;d.redact=jt;d.MAX_BYTES=102400;function Se(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 Dt(e){return Se(e,d.MAX_BYTES)}d.PATTERNS=[{type:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{type:"aws_secret_key",regex:/(?:aws[_-]?secret(?:[_-]?(?:access)?[_-]?key)?)\s*[:=]\s*["']?([A-Za-z0-9/+=]{40})(?![A-Za-z0-9/+=])/gi,captureGroup:1},{type:"gcp_service_account",regex:/\{[\s\S]{0,200}?"type"\s*:\s*"service_account"[\s\S]*?\}/g},{type:"github_token",regex:/gh[pousr]_[A-Za-z0-9]{36,}/g},{type:"gitlab_token",regex:/glpat-[A-Za-z0-9_-]{20}/g},{type:"slack_token",regex:/xox[abrsp]-[0-9A-Za-z-]{10,}/g},{type:"openai_key",regex:/sk-(?:proj-)?[A-Za-z0-9_-]{40,}/g},{type:"anthropic_key",regex:/sk-ant-[A-Za-z0-9_-]{50,}/g},{type:"stripe_key",regex:/(?:sk|rk|pk)_(?:live|test)_[A-Za-z0-9]{20,}/g},{type:"jwt",regex:/eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g},{type:"private_key_block",regex:/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g},{type:"bearer_token",regex:/bearer\s+([A-Za-z0-9._~+/=-]{12,})/gi,captureGroup:1},{type:"basic_auth",regex:/basic\s+([A-Za-z0-9+/=]{12,})/gi,captureGroup:1},{type:"db_url_password",regex:/\b(?:postgres|postgresql|mysql|mariadb|mongodb(?:\+srv)?|redis):\/\/[^:\s/]+:([^@\s]+)@/gi,captureGroup:1},{type:"cli_password_flag",regex:/(?:--password|--pass|--pwd)[=\s]([^\s'"]+)/g,captureGroup:1},{type:"cli_password_short",regex:/\s-p([^\s'"]+)/g,captureGroup:1,requireContext:"bash"},{type:"env_var_secret",regex:/^(?:export\s+)?([A-Z][A-Z0-9_]*(?:KEY|SECRET|TOKEN|PASSWORD|PASSWD|PWD|API_KEY)[A-Z0-9_]*)\s*=\s*["']?([^\s"'\n]+)/gm,captureGroup:2}];function Pe(e,t){let r=[];for(let n of d.PATTERNS){if(n.requireContext&&n.requireContext!==t.context)continue;let o=new RegExp(n.regex.source,n.regex.flags),s;for(;(s=o.exec(e))!==null;){let u=n.captureGroup??0,a=s[u];if(a===void 0){s.index===o.lastIndex&&o.lastIndex++;continue}let c=s.index,l=s.index+s[0].length,g=c+s[0].indexOf(a),X=g+a.length;r.push({start:c,end:l,replaceStart:g,replaceEnd:X,type:n.type}),s.index===o.lastIndex&&o.lastIndex++}}return r}function Te(e){let t=[...e].sort((o,s)=>o.start!==s.start?o.start-s.start:s.end-s.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 Oe(e,t){let r=[...t].sort((o,s)=>s.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 jt(e,t={}){if(e.length===0)return e;let r=Pe(e,t);if(r.length===0)return e;let n=Te(r);return Oe(e,n)}});var z=_(f=>{"use strict";var Ct=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=be;f.newSpanId=ke;f.snakeCase=Ft;f.toOtlpValue=Ae;f.attrsFromRecord=$t;f.guardAttrs=Ie;f.clientAttrs=Me;f.enforceSpanBudget=Re;f.buildPayload=Bt;f.mergeBatch=Vt;var Lt=Ct(m("crypto")),K=Y(),qt="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function be(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=qt.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 ke(){return Lt.default.randomBytes(8).toString("hex")}function Ft(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var Ee=new Set;function j(e,t,r){let n=(0,K.truncate)(t);if((r.skipRedactKeys??Ee).has(e))return n;let o=(r.bashContextKeys??Ee).has(e)?"bash":void 0;return(0,K.redact)(n,{context:o})}function Ae(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 $t(e,t,r={}){let n=[];for(let[o,s]of Object.entries(e)){let u=`${t}.${o}`,a=Ae(u,s,r);a!==null&&n.push({key:u,value:a})}return n}function Ie(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 Me(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 ve(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}var we=1024;function Re(e,t=f.MAX_SPAN_BYTES){let r=ve(e);for(let n=0;n<100&&r>t;n++){let o=null,s=0;for(let c of e.attributes){if(!("stringValue"in c.value))continue;let l=Buffer.byteLength(c.value.stringValue,"utf-8");l>s&&(s=l,o=c.value)}if(o===null||s<=we)break;let u=r-t,a=Math.max(we,s-u-64);o.stringValue=(0,K.truncateTo)(o.stringValue,a),r=ve(e)}return e}function Bt(e){let t=e.now??Date.now(),r=(BigInt(t)*1000000n).toString(),n=[...e.attributes];e.guard&&n.push(...Ie(e.guard));let o=e.clientTiming??(e.guard?.clientRttMs!==void 0?{op:"guard",rttMs:e.guard.clientRttMs}:null);o&&n.push(...Me(o));let s={traceId:be(e.traceId),spanId:ke(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:r,endTimeUnixNano:r,attributes:n};return Re(s),{resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[s]}]}]}}function Vt(e){let t=[];for(let r of e)t.push(...r.resourceSpans);return{resourceSpans:t}}});var xe=_(H=>{"use strict";Object.defineProperty(H,"__esModule",{value:!0});H.evaluateGuard=Yt;var Ut=1e4,Gt="pinta-core";function Z(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}var Xt=new Set(["ALLOW","DENY","REVIEW"]);async function Yt(e,t,r={}){if(!t||r.disabled)return null;let n=r.timeoutMs??Ut,o=Date.now(),s=new AbortController,u=setTimeout(()=>s.abort(),n);try{let a=await fetch(t,{method:"POST",headers:{"content-type":"application/json","user-agent":r.userAgent??Gt,"x-pinta-relay-token":r.token??""},body:JSON.stringify({input:e}),signal:s.signal});if(a.status!==200)return Z(Date.now()-o,"error");let c=await a.json(),l=c?.durationMs===void 0||typeof c.durationMs=="number"&&Number.isFinite(c.durationMs);if(!c||!Xt.has(c.decision)||!l)return Z(Date.now()-o,"error");let g=Date.now()-o;return{decision:c.decision,reason:c.reason??null,userMessage:c.userMessage??null,durationMs:c.durationMs??g,clientRttMs:g}}catch(a){let c=a.name,l=c==="AbortError"||c==="TimeoutError"?"timeout":"error";return Z(Date.now()-o,l)}finally{clearTimeout(u)}}});var C=_(x=>{"use strict";var Kt=x&&x.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(x,"__esModule",{value:!0});x.atomicWriteFileSync=zt;var Ne=Kt(m("fs"));function zt(e,t){let r=`${e}.${process.pid}.tmp`;Ne.default.writeFileSync(r,t),Ne.default.renameSync(r,e)}});var Q=_(T=>{"use strict";var De=T&&T.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(T,"__esModule",{value:!0});T.MemoryRetryQueue=T.DiskRetryQueue=void 0;var h=De(m("fs")),L=De(m("path")),Zt=C(),q=1e3,Ht=50,Jt=5,J=class{filePath;lockPath;logPrefix;constructor(t,r){this.filePath=L.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=r}enqueue(t){try{h.default.mkdirSync(L.default.dirname(this.filePath),{recursive:!0});let r=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
|
|
3
3
|
`;h.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=h.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){h.default.existsSync(this.filePath)&&h.default.unlinkSync(this.filePath);return}h.default.mkdirSync(
|
|
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){h.default.existsSync(this.filePath)&&h.default.unlinkSync(this.filePath);return}h.default.mkdirSync(L.default.dirname(this.filePath),{recursive:!0}),(0,Zt.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{h.default.mkdirSync(
|
|
9
|
-
`),!1}for(;Date.now()-t<
|
|
10
|
-
`),!1;try{let s=h.default.statSync(this.lockPath);if(Date.now()-s.mtimeMs>3e4){h.default.unlinkSync(this.lockPath);continue}}catch{}let n=
|
|
11
|
-
`),this.rewrite(t.slice(r))}};
|
|
8
|
+
`)}}tryAcquireLock(){let t=Date.now();try{h.default.mkdirSync(L.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<Ht;)try{let r=h.default.openSync(this.lockPath,"wx");return h.default.writeSync(r,String(process.pid)),h.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 s=h.default.statSync(this.lockPath);if(Date.now()-s.mtimeMs>3e4){h.default.unlinkSync(this.lockPath);continue}}catch{}let n=Jt,o=Date.now()+n;for(;Date.now()<o;);}return!1}release(){try{h.default.unlinkSync(this.lockPath)}catch{}}trim(){let t=this.readAll();if(t.length<=q)return;let r=t.length-q;process.stderr.write(`[${this.logPrefix}] retry-queue full, dropping ${r} oldest entries
|
|
11
|
+
`),this.rewrite(t.slice(r))}};T.DiskRetryQueue=J;var W=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>q&&this.entries.splice(0,this.entries.length-q)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};T.MemoryRetryQueue=W});var $e=_(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.MemoryTransport=p.DiskTransport=p.MAX_POST_BYTES=void 0;p.parseHeadersEnv=qe;p.envOptionsResolver=Fe;p.postOtlp=N;var je=Q(),Ce=z(),Wt=5e3;p.MAX_POST_BYTES=900*1024;function F(e){let t=JSON.stringify(e);return t===void 0?0:Buffer.byteLength(t,"utf-8")}function Le(e,t,r){let n=[],o=[],s=[],u=0;for(let a of e){let c=t(a);if(c>r){o.push(a);continue}s.length>0&&u+c>r&&(n.push(s),s=[],u=0),s.push(a),u+=c}return s.length>0&&n.push(s),{chunks:n,oversize:o}}function qe(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 Fe(){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:qe(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function N(e,t,r){let n=new AbortController,o=setTimeout(()=>n.abort(),Wt);try{let s=await fetch(t.endpoint,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify(e),signal:n.signal});if(!s.ok){let u="";try{u=(await s.text()).slice(0,200)}catch{}let a=s.status===401||s.status===403?" \u2014 check OTEL_EXPORTER_OTLP_HEADERS (relay token)":s.status===404?" \u2014 check OTEL_EXPORTER_OTLP_TRACES_ENDPOINT path":s.status>=500?" \u2014 collector may be down":"";return process.stderr.write(`[${r}] OTLP POST ${s.status} ${t.endpoint}${a}${u?` body=${u}`:""}
|
|
12
12
|
`),!1}return!0}catch(s){return process.stderr.write(`[${r}] OTLP POST failed: ${s.message??String(s)}
|
|
13
|
-
`),!1}finally{clearTimeout(o)}}var
|
|
14
|
-
`);let s=[].concat(...n),
|
|
15
|
-
`)}finally{this.queue.release()}}dropIfOversized(t){let r=
|
|
16
|
-
`),!0)}};p.DiskTransport=
|
|
17
|
-
`);return}await
|
|
18
|
-
`);let s=[].concat(...n),
|
|
19
|
-
`)}}};
|
|
20
|
-
`)){let n=r.trim();if(!n||n.startsWith("#"))continue;let o=n.indexOf("=");if(o<0)continue;let s=n.slice(0,o).trim(),c=n.slice(o+1).trim();(c.startsWith('"')&&c.endsWith('"')||c.startsWith("'")&&c.endsWith("'"))&&(c=c.slice(1,-1)),s&&(t[s]=c)}return t}function or(e){let t;try{t=tr.default.readFileSync(e,"utf-8")}catch{return}let r=Ke(t);for(let[n,o]of Object.entries(r))process.env[n]===void 0&&(process.env[n]=o)}});var A=_(i=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0});i.loadEnvFile=i.parseEnvFile=i.envFilePath=i.MemorySessionTraceManager=i.DiskSessionTraceManager=i.generateUlid=i.TraceManager=i.MAX_POST_BYTES=i.parseHeadersEnv=i.envOptionsResolver=i.postOtlp=i.MemoryTransport=i.DiskTransport=i.MemoryRetryQueue=i.DiskRetryQueue=i.evaluateGuard=i.MAX_SPAN_BYTES=i.enforceSpanBudget=i.mergeBatch=i.buildPayload=i.clientAttrs=i.guardAttrs=i.attrsFromRecord=i.toOtlpValue=i.snakeCase=i.newSpanId=i.ulidToTraceId=i.MAX_BYTES=i.PATTERNS=i.applyMatches=i.resolveOverlaps=i.collectMatches=i.truncateTo=i.truncate=i.redact=void 0;var O=X();Object.defineProperty(i,"redact",{enumerable:!0,get:function(){return O.redact}});Object.defineProperty(i,"truncate",{enumerable:!0,get:function(){return O.truncate}});Object.defineProperty(i,"truncateTo",{enumerable:!0,get:function(){return O.truncateTo}});Object.defineProperty(i,"collectMatches",{enumerable:!0,get:function(){return O.collectMatches}});Object.defineProperty(i,"resolveOverlaps",{enumerable:!0,get:function(){return O.resolveOverlaps}});Object.defineProperty(i,"applyMatches",{enumerable:!0,get:function(){return O.applyMatches}});Object.defineProperty(i,"PATTERNS",{enumerable:!0,get:function(){return O.PATTERNS}});Object.defineProperty(i,"MAX_BYTES",{enumerable:!0,get:function(){return O.MAX_BYTES}});var y=K();Object.defineProperty(i,"ulidToTraceId",{enumerable:!0,get:function(){return y.ulidToTraceId}});Object.defineProperty(i,"newSpanId",{enumerable:!0,get:function(){return y.newSpanId}});Object.defineProperty(i,"snakeCase",{enumerable:!0,get:function(){return y.snakeCase}});Object.defineProperty(i,"toOtlpValue",{enumerable:!0,get:function(){return y.toOtlpValue}});Object.defineProperty(i,"attrsFromRecord",{enumerable:!0,get:function(){return y.attrsFromRecord}});Object.defineProperty(i,"guardAttrs",{enumerable:!0,get:function(){return y.guardAttrs}});Object.defineProperty(i,"clientAttrs",{enumerable:!0,get:function(){return y.clientAttrs}});Object.defineProperty(i,"buildPayload",{enumerable:!0,get:function(){return y.buildPayload}});Object.defineProperty(i,"mergeBatch",{enumerable:!0,get:function(){return y.mergeBatch}});Object.defineProperty(i,"enforceSpanBudget",{enumerable:!0,get:function(){return y.enforceSpanBudget}});Object.defineProperty(i,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return y.MAX_SPAN_BYTES}});var sr=Ie();Object.defineProperty(i,"evaluateGuard",{enumerable:!0,get:function(){return sr.evaluateGuard}});var Ze=H();Object.defineProperty(i,"DiskRetryQueue",{enumerable:!0,get:function(){return Ze.DiskRetryQueue}});Object.defineProperty(i,"MemoryRetryQueue",{enumerable:!0,get:function(){return Ze.MemoryRetryQueue}});var k=Le();Object.defineProperty(i,"DiskTransport",{enumerable:!0,get:function(){return k.DiskTransport}});Object.defineProperty(i,"MemoryTransport",{enumerable:!0,get:function(){return k.MemoryTransport}});Object.defineProperty(i,"postOtlp",{enumerable:!0,get:function(){return k.postOtlp}});Object.defineProperty(i,"envOptionsResolver",{enumerable:!0,get:function(){return k.envOptionsResolver}});Object.defineProperty(i,"parseHeadersEnv",{enumerable:!0,get:function(){return k.parseHeadersEnv}});Object.defineProperty(i,"MAX_POST_BYTES",{enumerable:!0,get:function(){return k.MAX_POST_BYTES}});var Je=oe();Object.defineProperty(i,"TraceManager",{enumerable:!0,get:function(){return Je.TraceManager}});Object.defineProperty(i,"generateUlid",{enumerable:!0,get:function(){return Je.generateUlid}});var We=Xe();Object.defineProperty(i,"DiskSessionTraceManager",{enumerable:!0,get:function(){return We.DiskSessionTraceManager}});Object.defineProperty(i,"MemorySessionTraceManager",{enumerable:!0,get:function(){return We.MemorySessionTraceManager}});var ce=ze();Object.defineProperty(i,"envFilePath",{enumerable:!0,get:function(){return ce.envFilePath}});Object.defineProperty(i,"parseEnvFile",{enumerable:!0,get:function(){return ce.parseEnvFile}});Object.defineProperty(i,"loadEnvFile",{enumerable:!0,get:function(){return ce.loadEnvFile}})});import{realpathSync as zr}from"node:fs";import{pathToFileURL as Zr}from"node:url";var N=I(A());function ir(){return(0,N.envFilePath)(".copilot","pinta-copilot.env","COPILOT_HOME")}function He(e=ir()){(0,N.loadEnvFile)(e)}import ar from"os";import ue from"path";function le(){return process.env.COPILOT_HOME||ue.join(ar.homedir(),".copilot")}function Qe(){let e=process.env.COPILOT_PLUGIN_DATA||ue.join(le(),"pinta-copilot-data");return{pluginData:e,tracePath:ue.join(e,"trace.json")}}function et(e=process.env){return e.COPILOT_AGENT_JOB_ID||e.COPILOT_AGENT_SESSION_ID||e.COPILOT_AGENT_PROMPT?"cloud":e.ELECTRON_RUN_AS_NODE||e.VSCODE_IPC_HOOK||e.VSCODE_PID?"ext":"cli"}function S(e){return typeof e=="string"?e:void 0}function M(e){return S(e.hook_event_name)??S(e.hookEventName)??S(e.hookName)??(process.env.PINTA_COPILOT_EVENT||void 0)}function tt(e){return S(e.session_id)??S(e.sessionId)}function rt(e){return S(e.tool_name)??S(e.toolName)}function nt(e){return S(e.cwd)??S(e.workingDirectory)}function ot(e){return e.tool_input??e.toolArgs??e.toolInput}var cr={sessionstart:"SessionStart",sessionend:"SessionEnd",userpromptsubmit:"UserPromptSubmit",userpromptsubmitted:"UserPromptSubmit",pretooluse:"PreToolUse",posttooluse:"PostToolUse",posttoolusefailure:"PostToolUseFailure",stop:"Stop",agentstop:"Stop",subagentstart:"SubagentStart",subagentstop:"SubagentStop",precompact:"PreCompact",notification:"Notification",permissionrequest:"PermissionRequest",erroroccurred:"ErrorOccurred"};function st(e){let t=M(e);return t?cr[t.toLowerCase()]??"Unknown":"Unknown"}function it(e){return e==="PreToolUse"||e==="PermissionRequest"}var ur=new Set(["report_intent","ask_user"]);function at(e){return e!==void 0&&ur.has(e)}function ct(e,t){return e==="PreToolUse"?JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:t}}):e==="PermissionRequest"?JSON.stringify({behavior:"deny",message:t}):null}var $=I(A());function lr(){let e=process.env.COPILOT_PLUGIN_OPTION_ENDPOINT||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:(0,$.parseHeadersEnv)(process.env.COPILOT_PLUGIN_OPTION_HEADERS||process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}var F=class extends $.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-copilot",resolveOptions:lr})}};var ut=I(A()),B=class extends ut.DiskSessionTraceManager{constructor(t){super(t.tracePath)}};var w=I(A());import pe from"os";var U;function pr(){if(U===void 0)try{U=pe.userInfo().username}catch{U=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return U}var lt="0.6.0";function fr(){return process.env.COPILOT_CLI_VERSION||"unknown"}var dr=new Set(["copilot.hook","copilot.tool_name","copilot.toolName","copilot.tool_use_id","copilot.toolUseId","copilot.session_id","copilot.sessionId","copilot.transcript_path","copilot.transcriptPath","copilot.cwd","copilot.permission_mode","copilot.surface","copilot.agent_id","copilot.agent_type","copilot.agent_name","copilot.agent_display_name","copilot.stop_reason","copilot.notification_type"]),gr=new Set(["copilot.tool_input","copilot.toolInput","copilot.tool_response","copilot.tool_result"]),hr={skipRedactKeys:dr,bashContextKeys:gr},mr=new Set(["hook_event_name","hookEventName","hookName"]);function yr(e,t){let r=Object.fromEntries(Object.entries(e).filter(([n])=>!mr.has(n)));return[{key:"ingest.type",value:{stringValue:"copilot"}},{key:"copilot.hook",value:{stringValue:M(e)??"unknown"}},{key:"copilot.surface",value:{stringValue:t}},...(0,w.attrsFromRecord)(r,"copilot",hr)]}function _r(){return[{key:"service.name",value:{stringValue:"copilot"}},{key:"service.version",value:{stringValue:fr()}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-copilot"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:lt}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:pr()}},{key:"host.name",value:{stringValue:pe.hostname()}},{key:"host.arch",value:{stringValue:pe.arch()}}]}function pt(e){return(0,w.buildPayload)({traceId:e.traceId,spanName:`copilot.${(0,w.snakeCase)(M(e.event)??"unknown")}`,attributes:yr(e.event,e.surface),resource:_r(),scope:{name:"pinta-copilot",version:lt},now:e.now,guard:e.guard})}var ft=I(A());function Sr(){return Number(process.env.PINTA_GUARD_TIMEOUT_MS)||50}var Pr="pinta-copilot/0.6.0";function dt(e,t){return(0,ft.evaluateGuard)(e,t,{timeoutMs:Sr(),token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:Pr})}async function Tr(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function gt(){try{let e=Qe(),t=et(),r=await Tr(),n=JSON.parse(r),o=st(n),s=tt(n),c=new F(e);await c.flush();let a=new B(e),u=o==="UserPromptSubmit"?a.newTrace(s):a.currentTrace(s),l=rt(n),g=null;if(it(o)&&!at(l)){let E=ot(n);g=await dt({spanId:s??"unknown",toolName:l,method:M(n),cwd:nt(n),toolInput:E,rawTextFields:{toolInput:typeof E=="string"?E:JSON.stringify(E??null)}},process.env.PINTA_GUARD_ENDPOINT)}if(g?.decision==="DENY"){let E=ct(o,g.userMessage??g.reason??"guard_deny");E&&process.stdout.write(E+`
|
|
21
|
-
`)}let
|
|
22
|
-
`)}return 0}import{opendir as
|
|
13
|
+
`),!1}finally{clearTimeout(o)}}var ee=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new je.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??Fe}async send(t){let r=this.resolveOptions();if(!r||this.dropIfOversized(t))return;await N(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}=Le(r,a=>F(a.payload),p.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized retry ${o.length===1?"entry":"entries"} (each > ${p.MAX_POST_BYTES} bytes \u2014 the backend caps the request body, so they can never be delivered)
|
|
14
|
+
`);let s=[].concat(...n),u=0;for(let a of n){if(!await N((0,Ce.mergeBatch)(a.map(l=>l.payload)),t,this.logPrefix))break;u+=a.length}this.queue.rewrite(s.slice(u))}catch(r){process.stderr.write(`[${this.logPrefix}] flush failed: ${r?.message??String(r)}
|
|
15
|
+
`)}finally{this.queue.release()}}dropIfOversized(t){let r=F(t);return r<=p.MAX_POST_BYTES?!1:(process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (${r} > ${p.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
|
|
16
|
+
`),!0)}};p.DiskTransport=ee;var te=class{queue=new je.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let r=this.resolveOptions();if(!r)return;if(F(t)>p.MAX_POST_BYTES){process.stderr.write(`[${this.logPrefix}] dropping oversized span payload (> ${p.MAX_POST_BYTES} bytes) \u2014 undeliverable, not buffered
|
|
17
|
+
`);return}await N(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}=Le(r,F,p.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized buffered ${o.length===1?"payload":"payloads"} (each > ${p.MAX_POST_BYTES} bytes \u2014 undeliverable)
|
|
18
|
+
`);let s=[].concat(...n),u=0;for(let a of n){if(!await N((0,Ce.mergeBatch)(a),t,this.logPrefix))break;u+=a.length}for(let a of s.slice(u))this.queue.enqueue(a)}};p.MemoryTransport=te});var se=_(w=>{"use strict";var oe=w&&w.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(w,"__esModule",{value:!0});w.TraceManager=void 0;w.generateUlid=Ve;var Be=oe(m("fs")),Qt=oe(m("path")),er=oe(m("crypto")),tr=C(),re="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Ve(){let e=Date.now(),t="",r=e;for(let s=0;s<10;s++)t=re[r&31]+t,r=Math.floor(r/32);let n=er.default.randomBytes(10),o="";for(let s=0;s<10;s++)o+=re[n[s]&31];for(;o.length<16;)o+=re[0];return t+o}var ne=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=Ve();return this.save(t),t}currentTrace(){try{let t=Be.default.readFileSync(this.tracePath,"utf-8"),{traceId:r}=JSON.parse(t);if(r)return r}catch{}return this.newTrace()}save(t){try{Be.default.mkdirSync(Qt.default.dirname(this.tracePath),{recursive:!0}),(0,tr.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(r){process.stderr.write(`[pinta-core] trace persistence failed: ${r}
|
|
19
|
+
`)}}};w.TraceManager=ne});var Ke=_(O=>{"use strict";var Ge=O&&O.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(O,"__esModule",{value:!0});O.MemorySessionTraceManager=O.DiskSessionTraceManager=void 0;var Ue=Ge(m("fs")),rr=Ge(m("path")),Xe=se(),nr=C(),Ye=200,ie=class{tracePath;maxSessions;constructor(t,r={}){this.tracePath=t,this.maxSessions=r.maxSessions??Ye}read(){try{let t=JSON.parse(Ue.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{Ue.default.mkdirSync(rr.default.dirname(this.tracePath),{recursive:!0});let r=Object.entries(t),n=r.length>this.maxSessions?Object.fromEntries(r.slice(-this.maxSessions)):t;(0,nr.atomicWriteFileSync)(this.tracePath,JSON.stringify(n))}catch{}}newTrace(t){let r=t||"default",n=(0,Xe.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)}};O.DiskSessionTraceManager=ie;var ae=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??Ye}newTrace(t){let r=t||"default",n=(0,Xe.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)}};O.MemorySessionTraceManager=ae});var He=_(b=>{"use strict";var ue=b&&b.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(b,"__esModule",{value:!0});b.envFilePath=ir;b.parseEnvFile=Ze;b.loadEnvFile=ar;var or=ue(m("node:fs")),sr=ue(m("node:os")),ze=ue(m("node:path"));function ir(e,t,r){let n=r?process.env[r]:void 0,o=n&&n.length>0?n:ze.default.join(sr.default.homedir(),e);return ze.default.join(o,t)}function Ze(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 s=n.slice(0,o).trim(),u=n.slice(o+1).trim();(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),s&&(t[s]=u)}return t}function ar(e){let t;try{t=or.default.readFileSync(e,"utf-8")}catch{return}let r=Ze(t);for(let[n,o]of Object.entries(r))process.env[n]===void 0&&(process.env[n]=o)}});var I=_(i=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0});i.loadEnvFile=i.parseEnvFile=i.envFilePath=i.MemorySessionTraceManager=i.DiskSessionTraceManager=i.generateUlid=i.TraceManager=i.MAX_POST_BYTES=i.parseHeadersEnv=i.envOptionsResolver=i.postOtlp=i.MemoryTransport=i.DiskTransport=i.MemoryRetryQueue=i.DiskRetryQueue=i.evaluateGuard=i.MAX_SPAN_BYTES=i.enforceSpanBudget=i.mergeBatch=i.buildPayload=i.clientAttrs=i.guardAttrs=i.attrsFromRecord=i.toOtlpValue=i.snakeCase=i.newSpanId=i.ulidToTraceId=i.MAX_BYTES=i.PATTERNS=i.applyMatches=i.resolveOverlaps=i.collectMatches=i.truncateTo=i.truncate=i.redact=void 0;var E=Y();Object.defineProperty(i,"redact",{enumerable:!0,get:function(){return E.redact}});Object.defineProperty(i,"truncate",{enumerable:!0,get:function(){return E.truncate}});Object.defineProperty(i,"truncateTo",{enumerable:!0,get:function(){return E.truncateTo}});Object.defineProperty(i,"collectMatches",{enumerable:!0,get:function(){return E.collectMatches}});Object.defineProperty(i,"resolveOverlaps",{enumerable:!0,get:function(){return E.resolveOverlaps}});Object.defineProperty(i,"applyMatches",{enumerable:!0,get:function(){return E.applyMatches}});Object.defineProperty(i,"PATTERNS",{enumerable:!0,get:function(){return E.PATTERNS}});Object.defineProperty(i,"MAX_BYTES",{enumerable:!0,get:function(){return E.MAX_BYTES}});var y=z();Object.defineProperty(i,"ulidToTraceId",{enumerable:!0,get:function(){return y.ulidToTraceId}});Object.defineProperty(i,"newSpanId",{enumerable:!0,get:function(){return y.newSpanId}});Object.defineProperty(i,"snakeCase",{enumerable:!0,get:function(){return y.snakeCase}});Object.defineProperty(i,"toOtlpValue",{enumerable:!0,get:function(){return y.toOtlpValue}});Object.defineProperty(i,"attrsFromRecord",{enumerable:!0,get:function(){return y.attrsFromRecord}});Object.defineProperty(i,"guardAttrs",{enumerable:!0,get:function(){return y.guardAttrs}});Object.defineProperty(i,"clientAttrs",{enumerable:!0,get:function(){return y.clientAttrs}});Object.defineProperty(i,"buildPayload",{enumerable:!0,get:function(){return y.buildPayload}});Object.defineProperty(i,"mergeBatch",{enumerable:!0,get:function(){return y.mergeBatch}});Object.defineProperty(i,"enforceSpanBudget",{enumerable:!0,get:function(){return y.enforceSpanBudget}});Object.defineProperty(i,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return y.MAX_SPAN_BYTES}});var ur=xe();Object.defineProperty(i,"evaluateGuard",{enumerable:!0,get:function(){return ur.evaluateGuard}});var Je=Q();Object.defineProperty(i,"DiskRetryQueue",{enumerable:!0,get:function(){return Je.DiskRetryQueue}});Object.defineProperty(i,"MemoryRetryQueue",{enumerable:!0,get:function(){return Je.MemoryRetryQueue}});var A=$e();Object.defineProperty(i,"DiskTransport",{enumerable:!0,get:function(){return A.DiskTransport}});Object.defineProperty(i,"MemoryTransport",{enumerable:!0,get:function(){return A.MemoryTransport}});Object.defineProperty(i,"postOtlp",{enumerable:!0,get:function(){return A.postOtlp}});Object.defineProperty(i,"envOptionsResolver",{enumerable:!0,get:function(){return A.envOptionsResolver}});Object.defineProperty(i,"parseHeadersEnv",{enumerable:!0,get:function(){return A.parseHeadersEnv}});Object.defineProperty(i,"MAX_POST_BYTES",{enumerable:!0,get:function(){return A.MAX_POST_BYTES}});var We=se();Object.defineProperty(i,"TraceManager",{enumerable:!0,get:function(){return We.TraceManager}});Object.defineProperty(i,"generateUlid",{enumerable:!0,get:function(){return We.generateUlid}});var Qe=Ke();Object.defineProperty(i,"DiskSessionTraceManager",{enumerable:!0,get:function(){return Qe.DiskSessionTraceManager}});Object.defineProperty(i,"MemorySessionTraceManager",{enumerable:!0,get:function(){return Qe.MemorySessionTraceManager}});var ce=He();Object.defineProperty(i,"envFilePath",{enumerable:!0,get:function(){return ce.envFilePath}});Object.defineProperty(i,"parseEnvFile",{enumerable:!0,get:function(){return ce.parseEnvFile}});Object.defineProperty(i,"loadEnvFile",{enumerable:!0,get:function(){return ce.loadEnvFile}})});import{realpathSync as nn}from"node:fs";import{pathToFileURL as on}from"node:url";var D=R(I());function cr(){return(0,D.envFilePath)(".copilot","pinta-copilot.env","COPILOT_HOME")}function et(e=cr()){(0,D.loadEnvFile)(e)}import lr from"os";import le from"path";function pe(){return process.env.COPILOT_HOME||le.join(lr.homedir(),".copilot")}function tt(){let e=process.env.COPILOT_PLUGIN_DATA||le.join(pe(),"pinta-copilot-data");return{pluginData:e,tracePath:le.join(e,"trace.json")}}function rt(e=process.env){return e.COPILOT_AGENT_JOB_ID||e.COPILOT_AGENT_SESSION_ID||e.COPILOT_AGENT_PROMPT?"cloud":e.ELECTRON_RUN_AS_NODE||e.VSCODE_IPC_HOOK||e.VSCODE_PID?"ext":"cli"}function P(e){return typeof e=="string"?e:void 0}function M(e){return P(e.hook_event_name)??P(e.hookEventName)??P(e.hookName)??(process.env.PINTA_COPILOT_EVENT||void 0)}function nt(e){return P(e.session_id)??P(e.sessionId)}function ot(e){return P(e.tool_name)??P(e.toolName)}function st(e){return P(e.cwd)??P(e.workingDirectory)}function it(e){return e.tool_input??e.toolArgs??e.toolInput}var pr={sessionstart:"SessionStart",sessionend:"SessionEnd",userpromptsubmit:"UserPromptSubmit",userpromptsubmitted:"UserPromptSubmit",pretooluse:"PreToolUse",posttooluse:"PostToolUse",posttoolusefailure:"PostToolUseFailure",stop:"Stop",agentstop:"Stop",subagentstart:"SubagentStart",subagentstop:"SubagentStop",precompact:"PreCompact",notification:"Notification",permissionrequest:"PermissionRequest",erroroccurred:"ErrorOccurred"};function at(e){let t=M(e);return t?pr[t.toLowerCase()]??"Unknown":"Unknown"}function ut(e){return e==="PreToolUse"||e==="PermissionRequest"}var fr=new Set(["report_intent","ask_user"]);function ct(e){return e!==void 0&&fr.has(e)}function lt(e,t){return e==="PreToolUse"?JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:t}}):e==="PermissionRequest"?JSON.stringify({behavior:"deny",message:t}):null}var B=R(I());function dr(){let e=process.env.COPILOT_PLUGIN_OPTION_ENDPOINT||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:(0,B.parseHeadersEnv)(process.env.COPILOT_PLUGIN_OPTION_HEADERS||process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}var $=class extends B.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-copilot",resolveOptions:dr})}};var pt=R(I()),V=class extends pt.DiskSessionTraceManager{constructor(t){super(t.tracePath)}};var k=R(I());import gr from"fs";import de from"os";import ft from"path";var U;function hr(){if(U===void 0)try{U=de.userInfo().username}catch{U=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return U}var dt="0.6.0",mr=new Set(["","unknown","undefined","null","n/a","none"]);function S(e){let t=typeof e=="string"?e.trim():void 0;return t&&!mr.has(t.toLowerCase())?t:void 0}var yr=/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/;function _r(e){let t=S(e);return t&&yr.test(t)?t:void 0}function Sr(e){let t=e?S(e.copilot_version)??S(e.copilotVersion)??S(e.cli_version)??S(e.cliVersion)??S(e.version):void 0;return t||(fe===void 0&&(fe=Pr()),fe??void 0)}var fe;function Pr(){let e=S(process.env.COPILOT_CLI_BINARY_VERSION)??S(process.env.COPILOT_CLI_VERSION);if(e)return e;let t=S(process.env.COPILOT_CLI_RESOLVED_DIST_DIR);if(t){let r=_r(ft.basename(t));if(r)return r;let n=Tr(t);if(n)return n}return null}function Tr(e){try{let t=gr.readFileSync(ft.join(e,"package.json"),"utf8");return S(JSON.parse(t).version)}catch{return}}var Or=new Set(["copilot.hook","copilot.tool_name","copilot.toolName","copilot.tool_use_id","copilot.toolUseId","copilot.session_id","copilot.sessionId","copilot.transcript_path","copilot.transcriptPath","copilot.cwd","copilot.permission_mode","copilot.surface","copilot.agent_id","copilot.agent_type","copilot.agent_name","copilot.agent_display_name","copilot.stop_reason","copilot.notification_type"]),Er=new Set(["copilot.tool_input","copilot.toolInput","copilot.tool_response","copilot.tool_result"]),vr={skipRedactKeys:Or,bashContextKeys:Er},wr=new Set(["hook_event_name","hookEventName","hookName"]);function br(e,t){let r=Object.fromEntries(Object.entries(e).filter(([n])=>!wr.has(n)));return[{key:"ingest.type",value:{stringValue:"copilot"}},{key:"copilot.hook",value:{stringValue:M(e)??"unknown"}},{key:"copilot.surface",value:{stringValue:t}},...(0,k.attrsFromRecord)(r,"copilot",vr)]}function kr(e){let t=Sr(e);return[{key:"service.name",value:{stringValue:"copilot"}},...t?[{key:"service.version",value:{stringValue:t}}]:[],{key:"telemetry.sdk.name",value:{stringValue:"pinta-copilot"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:dt}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:hr()}},{key:"host.name",value:{stringValue:de.hostname()}},{key:"host.arch",value:{stringValue:de.arch()}}]}function gt(e){return(0,k.buildPayload)({traceId:e.traceId,spanName:`copilot.${(0,k.snakeCase)(M(e.event)??"unknown")}`,attributes:br(e.event,e.surface),resource:kr(e.event),scope:{name:"pinta-copilot",version:dt},now:e.now,guard:e.guard})}var ht=R(I());function Ar(){return Number(process.env.PINTA_GUARD_TIMEOUT_MS)||50}var Ir="pinta-copilot/0.6.0";function mt(e,t){return(0,ht.evaluateGuard)(e,t,{timeoutMs:Ar(),token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:Ir})}async function Mr(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}async function yt(){try{let e=tt(),t=rt(),r=await Mr(),n=JSON.parse(r),o=at(n),s=nt(n),u=new $(e);await u.flush();let a=new V(e),c=o==="UserPromptSubmit"?a.newTrace(s):a.currentTrace(s),l=ot(n),g=null;if(ut(o)&&!ct(l)){let v=it(n);g=await mt({spanId:s??"unknown",toolName:l,method:M(n),cwd:st(n),toolInput:v,rawTextFields:{toolInput:typeof v=="string"?v:JSON.stringify(v??null)}},process.env.PINTA_GUARD_ENDPOINT)}if(g?.decision==="DENY"){let v=lt(o,g.userMessage??g.reason??"guard_deny");v&&process.stdout.write(v+`
|
|
21
|
+
`)}let X=gt({event:n,traceId:c,surface:t,guard:g});await u.send(X)}catch(e){process.stderr.write(`[pinta-copilot] error: ${e}
|
|
22
|
+
`)}return 0}import{opendir as Gr,stat as Xr}from"node:fs/promises";import G from"node:path";import{spawn as Pt}from"node:child_process";import{copyFile as ge,mkdtemp as Rr,rm as xr,stat as Nr}from"node:fs/promises";import Dr from"node:os";import he from"node:path";var jr=2e3,Cr=250,_t=3,St=3e4,Lr=3e4,me;function qr(){return me||(me=new Promise(e=>{let t=Pt("sqlite3",["-version"],{stdio:"ignore"});t.once("error",()=>e(!1)),t.once("exit",r=>e(r===0))})),me}function Fr(e){return`'${e.replace(/'/g,"''")}'`}async function $r(e,t){let r=`.backup ${Fr(t)}`;await new Promise((n,o)=>{let s=Pt("sqlite3",[e,r],{stdio:["ignore","ignore","pipe"],timeout:Lr,killSignal:"SIGKILL"}),u="";s.stderr?.on("data",a=>{u+=a.toString()}),s.once("error",o),s.once("exit",a=>{a===0?n():o(new Error(`sqlite3 .backup exited ${a}: ${u.trim()}`))})})}async function ye(e){try{return await Nr(e)}catch{return}}function Tt(e,t){return e===void 0||t===void 0?e===void 0&&t===void 0:e.size===t.size&&e.mtimeMs===t.mtimeMs}function Ot(e){return{wal:`${e}-wal`,shm:`${e}-shm`}}async function Br(e){let{wal:t,shm:r}=Ot(e),n=[e,t,r],o=Date.now(),s=o,u=await Promise.all(n.map(async a=>({path:a,st:await ye(a)})));for(;;){if(Date.now()-s>=jr)return u;if(Date.now()-o>=St)throw new Error(`snapshot: ${e} never quiesced within ${St}ms (actively written?)`);await new Promise(l=>setTimeout(l,Cr));let a=await Promise.all(n.map(async l=>({path:l,st:await ye(l)})));a.every((l,g)=>Tt(l.st,u[g].st))||(s=Date.now()),u=a}}async function Vr(e,t){let{wal:r,shm:n}=Ot(e),o=await Br(e);if(await ge(e,t),o.find(a=>a.path===r)?.st!==void 0&&await ge(r,`${t}-wal`),o.find(a=>a.path===n)?.st!==void 0&&await ge(n,`${t}-shm`),!(await Promise.all([e,r,n].map(async a=>({path:a,st:await ye(a)})))).every((a,c)=>Tt(a.st,o[c].st)))throw new Error(`snapshot: ${e} changed during quiesce-copy (torn-read guard)`)}async function Ur(e,t){let r;for(let n=1;n<=_t;n++)try{await Vr(e,t);return}catch(o){r=o}throw new Error(`snapshot: quiesce-copy of ${e} failed after ${_t} attempts: ${String(r)}`)}async function Et(e,t={}){let r=t.tmpDirBase??Dr.tmpdir(),n=await Rr(he.join(r,"pinta-copilot-snapshot-")),o=he.join(n,he.basename(e.absPath));try{if(await qr())try{return await $r(e.absPath,o),o}catch{}return await Ur(e.absPath,o),o}catch(s){throw await xr(n,{recursive:!0,force:!0}).catch(()=>{}),s}}var Yr="pinta-copilot",vt="events.jsonl",wt="session.db",Kr="rewind-snapshots/backups/";function zr(){return G.join(pe(),"session-state")}function Zr(e,t){return G.relative(e,t).split(G.sep).join("/")}function Hr(e){return e.endsWith(".db-wal")||e.endsWith(".db-shm")}function Jr(e){let[t]=e.split("/");return!t||t===e?{}:{sessionId:t}}function Wr(e,t){let r=e.split("/").length===2;return r&&t===vt?"append-log":r&&t===wt?"database":"rewritten-doc"}function Qr(e){let t=e.split("/"),r=t[t.length-1]??"";return t.length===2&&(r===vt||r===wt)?"session-log":e.includes(Kr)?"other":"meta"}async function bt(){return[zr()]}async function*kt(e,t){let r;try{r=await Gr(t)}catch{return}try{for await(let n of r){let o=G.join(t,n.name);n.isDirectory()?yield*kt(e,o):n.isFile()&&(yield{absPath:o,relPath:Zr(e,o)})}}catch{return}}async function*en(e){let[t]=await bt(),r=e.since?.getTime();for await(let{absPath:n,relPath:o}of kt(t,t)){let s=o.split("/"),u=s[s.length-1]??"";if(Hr(u))continue;let a;try{a=await Xr(n)}catch{continue}r!==void 0&&a.mtime.getTime()<=r||(yield{relPath:o,absPath:n,size:a.size,mtime:a.mtime,...Jr(o),semantics:Wr(o,u)})}}async function tn(e){return Et(e)}var rn={id:Yr,roots:bt,scan:en,classify:Qr,snapshot:tn};et();function sn(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===on(nn(e)).href}catch{return!1}}async function an(){let e=await yt();process.exit(e)}sn()&&an();export{rn as lifecycle};
|