@pinta-ai/pinta-cc 1.9.1 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +13 -0
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pinta-cc",
|
|
3
3
|
"description": "Generic OTLP forwarder for Claude Code hook events. Converts hook events into OTLP/HTTP spans and sends them to any OpenTelemetry-compatible collector.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.10.1",
|
|
5
5
|
"license": "PolyForm-Noncommercial-1.0.0",
|
|
6
6
|
"userConfig": {
|
|
7
7
|
"endpoint": {
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to pinta-cc are documented here.
|
|
4
4
|
|
|
5
|
+
## [1.10.1] - 2026-09-29
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Publish the output-enforcement fix above both 1.10.0 and 1.9.1 so semantic
|
|
10
|
+
version selection chooses the fixed adapter.
|
|
11
|
+
|
|
12
|
+
### Compatibility
|
|
13
|
+
|
|
14
|
+
- Version-only forward release of the merged behavior shipped in 1.9.1:
|
|
15
|
+
retains the 1.10.0 timeout declaration, native output denial and deferred
|
|
16
|
+
DENY telemetry. No policy, timeout, dependency or hook behavior changes.
|
|
17
|
+
|
|
5
18
|
## [1.9.1] - 2026-09-29
|
|
6
19
|
|
|
7
20
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
`);return}await G(t,n,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(!t)return;let n=this.queue.drain();if(n.length===0)return;let{chunks:r,oversize:o}=tt(n,Q,d.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized buffered ${o.length===1?"payload":"payloads"} (each > ${d.MAX_POST_BYTES} bytes \u2014 undeliverable)
|
|
17
17
|
`);let i=[].concat(...r),a=0;for(let u of r){if(!await G((0,et.mergeBatch)(u),t,this.logPrefix))break;a+=u.length}for(let u of i.slice(a))this.queue.enqueue(u)}};d.MemoryTransport=he});var ve=S(N=>{"use strict";var Pe=N&&N.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(N,"__esModule",{value:!0});N.TraceManager=void 0;N.generateUlid=st;var it=Pe(require("fs")),xn=Pe(require("path")),Rn=Pe(require("crypto")),Mn=Z(),ye="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function st(){let e=Date.now(),t="",n=e;for(let i=0;i<10;i++)t=ye[n&31]+t,n=Math.floor(n/32);let r=Rn.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=ye[r[i]&31];for(;o.length<16;)o+=ye[0];return t+o}var Ee=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=st();return this.save(t),t}currentTrace(){try{let t=it.default.readFileSync(this.tracePath,"utf-8"),{traceId:n}=JSON.parse(t);if(n)return n}catch{}return this.newTrace()}save(t){try{it.default.mkdirSync(xn.default.dirname(this.tracePath),{recursive:!0}),(0,Mn.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(n){process.stderr.write(`[pinta-core] trace persistence failed: ${n}
|
|
18
18
|
`)}}};N.TraceManager=Ee});var dt=S(R=>{"use strict";var ut=R&&R.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(R,"__esModule",{value:!0});R.MemorySessionTraceManager=R.DiskSessionTraceManager=void 0;var at=ut(require("fs")),Dn=ut(require("path")),ct=ve(),Nn=Z(),lt=200,Se=class{tracePath;maxSessions;constructor(t,n={}){this.tracePath=t,this.maxSessions=n.maxSessions??lt}read(){try{let t=JSON.parse(at.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{at.default.mkdirSync(Dn.default.dirname(this.tracePath),{recursive:!0});let n=Object.entries(t),r=n.length>this.maxSessions?Object.fromEntries(n.slice(-this.maxSessions)):t;(0,Nn.atomicWriteFileSync)(this.tracePath,JSON.stringify(r))}catch{}}newTrace(t){let n=t||"default",r=(0,ct.generateUlid)(),o=this.read();return o[n]=r,this.write(o),r}currentTrace(t){let n=t||"default",r=this.read()[n];return r||this.newTrace(n)}};R.DiskSessionTraceManager=Se;var Te=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??lt}newTrace(t){let n=t||"default",r=(0,ct.generateUlid)();if(this.map.set(n,r),this.map.size>this.maxSessions){let o=this.map.keys().next().value;o!==void 0&&this.map.delete(o)}return r}currentTrace(t){let n=t||"default";return this.map.get(n)??this.newTrace(n)}};R.MemorySessionTraceManager=Te});var mt=S(j=>{"use strict";var be=j&&j.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(j,"__esModule",{value:!0});j.envFilePath=Cn;j.parseEnvFile=pt;j.loadEnvFile=In;var jn=be(require("node:fs")),Un=be(require("node:os")),ft=be(require("node:path"));function Cn(e,t,n){let r=n?process.env[n]:void 0,o=r&&r.length>0?r:ft.default.join(Un.default.homedir(),e);return ft.default.join(o,t)}function pt(e){let t={};for(let n of e.split(`
|
|
19
|
-
`)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.indexOf("=");if(o<0)continue;let i=r.slice(0,o).trim(),a=r.slice(o+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),i&&(t[i]=a)}return t}function In(e){let t;try{t=jn.default.readFileSync(e,"utf-8")}catch{return}let n=pt(t);for(let[r,o]of Object.entries(n))process.env[r]===void 0&&(process.env[r]=o)}});var T=S(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});s.loadEnvFile=s.parseEnvFile=s.envFilePath=s.MemorySessionTraceManager=s.DiskSessionTraceManager=s.generateUlid=s.TraceManager=s.MAX_POST_BYTES=s.parseHeadersEnv=s.envOptionsResolver=s.postOtlp=s.MemoryTransport=s.DiskTransport=s.MemoryRetryQueue=s.DiskRetryQueue=s.GUARD_BUDGET_HEADER=s.GUARD_STATUS_REFUSED=s.evaluateGuard=s.MAX_SPAN_BYTES=s.enforceSpanBudget=s.mergeBatch=s.attachGuard=s.buildPayload=s.clientAttrs=s.guardAttrs=s.attrsFromRecord=s.toOtlpValue=s.snakeCase=s.newSpanId=s.ulidToTraceId=s.MAX_BYTES=s.PATTERNS=s.applyMatches=s.resolveOverlaps=s.collectMatches=s.truncateTo=s.truncate=s.redact=void 0;var M=le();Object.defineProperty(s,"redact",{enumerable:!0,get:function(){return M.redact}});Object.defineProperty(s,"truncate",{enumerable:!0,get:function(){return M.truncate}});Object.defineProperty(s,"truncateTo",{enumerable:!0,get:function(){return M.truncateTo}});Object.defineProperty(s,"collectMatches",{enumerable:!0,get:function(){return M.collectMatches}});Object.defineProperty(s,"resolveOverlaps",{enumerable:!0,get:function(){return M.resolveOverlaps}});Object.defineProperty(s,"applyMatches",{enumerable:!0,get:function(){return M.applyMatches}});Object.defineProperty(s,"PATTERNS",{enumerable:!0,get:function(){return M.PATTERNS}});Object.defineProperty(s,"MAX_BYTES",{enumerable:!0,get:function(){return M.MAX_BYTES}});var y=fe();Object.defineProperty(s,"ulidToTraceId",{enumerable:!0,get:function(){return y.ulidToTraceId}});Object.defineProperty(s,"newSpanId",{enumerable:!0,get:function(){return y.newSpanId}});Object.defineProperty(s,"snakeCase",{enumerable:!0,get:function(){return y.snakeCase}});Object.defineProperty(s,"toOtlpValue",{enumerable:!0,get:function(){return y.toOtlpValue}});Object.defineProperty(s,"attrsFromRecord",{enumerable:!0,get:function(){return y.attrsFromRecord}});Object.defineProperty(s,"guardAttrs",{enumerable:!0,get:function(){return y.guardAttrs}});Object.defineProperty(s,"clientAttrs",{enumerable:!0,get:function(){return y.clientAttrs}});Object.defineProperty(s,"buildPayload",{enumerable:!0,get:function(){return y.buildPayload}});Object.defineProperty(s,"attachGuard",{enumerable:!0,get:function(){return y.attachGuard}});Object.defineProperty(s,"mergeBatch",{enumerable:!0,get:function(){return y.mergeBatch}});Object.defineProperty(s,"enforceSpanBudget",{enumerable:!0,get:function(){return y.enforceSpanBudget}});Object.defineProperty(s,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return y.MAX_SPAN_BYTES}});var Oe=Ze();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return Oe.evaluateGuard}});Object.defineProperty(s,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return Oe.GUARD_STATUS_REFUSED}});Object.defineProperty(s,"GUARD_BUDGET_HEADER",{enumerable:!0,get:function(){return Oe.GUARD_BUDGET_HEADER}});var gt=ge();Object.defineProperty(s,"DiskRetryQueue",{enumerable:!0,get:function(){return gt.DiskRetryQueue}});Object.defineProperty(s,"MemoryRetryQueue",{enumerable:!0,get:function(){return gt.MemoryRetryQueue}});var C=ot();Object.defineProperty(s,"DiskTransport",{enumerable:!0,get:function(){return C.DiskTransport}});Object.defineProperty(s,"MemoryTransport",{enumerable:!0,get:function(){return C.MemoryTransport}});Object.defineProperty(s,"postOtlp",{enumerable:!0,get:function(){return C.postOtlp}});Object.defineProperty(s,"envOptionsResolver",{enumerable:!0,get:function(){return C.envOptionsResolver}});Object.defineProperty(s,"parseHeadersEnv",{enumerable:!0,get:function(){return C.parseHeadersEnv}});Object.defineProperty(s,"MAX_POST_BYTES",{enumerable:!0,get:function(){return C.MAX_POST_BYTES}});var _t=ve();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return _t.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return _t.generateUlid}});var ht=dt();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return ht.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return ht.MemorySessionTraceManager}});var Ae=mt();Object.defineProperty(s,"envFilePath",{enumerable:!0,get:function(){return Ae.envFilePath}});Object.defineProperty(s,"parseEnvFile",{enumerable:!0,get:function(){return Ae.parseEnvFile}});Object.defineProperty(s,"loadEnvFile",{enumerable:!0,get:function(){return Ae.loadEnvFile}})});var q=p(T());function Bn(){return(0,q.envFilePath)(".claude","pinta-cc.env")}function yt(e=Bn()){(0,q.loadEnvFile)(e)}function Et(){process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT&&!process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT&&(process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT),process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&!process.env.OTEL_EXPORTER_OTLP_HEADERS&&(process.env.OTEL_EXPORTER_OTLP_HEADERS=`x-pinta-relay-token=${process.env.CLAUDE_PLUGIN_OPTION_API_KEY}`),!process.env.PINTA_RELAY_TOKEN&&process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&(process.env.PINTA_RELAY_TOKEN=process.env.CLAUDE_PLUGIN_OPTION_API_KEY)}var ke=p(require("path")),Pt=p(T());function vt(){let e=process.env.CLAUDE_PLUGIN_ROOT||process.cwd(),t=process.env.CLAUDE_PLUGIN_DATA||ke.default.join(e,".plugin-data");return{pluginRoot:e,pluginData:t,tracePath:ke.default.join(t,"trace.json")}}function ee(){return(0,Pt.envOptionsResolver)()!==null}function St(e){return e.hook_event_name==="PreToolUse"}function Tt(e){return e.hook_event_name==="PostToolUse"||e.hook_event_name==="PostToolUseFailure"}function bt(e){return e.hook_event_name==="UserPromptSubmit"}function Ot(e){return e.hook_event_name==="SessionStart"||e.hook_event_name==="SessionEnd"}function At(e){return e.hook_event_name==="SubagentStart"||e.hook_event_name==="SubagentStop"}function kt(e){return e.hook_event_name==="Stop"}function wt(e){return e.hook_event_name==="PermissionRequest"||e.hook_event_name==="PermissionDenied"}var Ln=new Set(["Notification","TaskCreated","TaskCompleted"]);function xt(e){return Ln.has(e.hook_event_name)}var Xt=p(T());var Rt=p(T()),$n=1e4,Fn="pinta-cc/1.
|
|
20
|
-
`)}function ie(e){return k(e)==="ENOENT"||k(e)==="ENOTDIR"}function zn(){let e=process.env.CLAUDE_CODE_EXECPATH,t=process.platform==="win32"?["claude.exe","claude.cmd"]:["claude"],n;if(e)n=[e];else{let r=(process.env.PATH??"").split(m.default.delimiter).filter(o=>m.default.isAbsolute(o));try{r.push(m.default.join(Ct.default.homedir(),".local","bin"))}catch(o){P(`native install directory lookup failed (${k(o)})`)}n=r.flatMap(o=>t.map(i=>m.default.join(o,i)))}for(let r of new Set(n))try{let o=E.default.realpathSync(r),i=E.default.statSync(o);if(!i.isFile())continue;return!e&&process.platform!=="win32"&&E.default.accessSync(o,E.default.constants.X_OK),{file:o,fingerprint:(0,oe.createHash)("sha256").update(JSON.stringify([o,i.ino,i.size,i.mtimeMs,i.ctimeMs])).digest("hex")}}catch(o){ie(o)||P(`executable lookup failed (${k(o)})`)}return P(e?"configured executable is unavailable":"no Claude executable found in PATH or ~/.local/bin"),null}function we(e){let t;try{t=JSON.parse(E.default.readFileSync(e,"utf8"))}catch(n){return ie(n)||P(`package metadata could not be read (${n instanceof SyntaxError?"INVALID_JSON":k(n)})`),null}return typeof t!="object"||t===null||!("name"in t)||!("version"in t)||typeof t.name!="string"||typeof t.version!="string"||!It.test(t.version)?null:t.name==="@anthropic-ai/claude-code"||t.name.startsWith("@anthropic-ai/claude-code-")?t.version:null}function Xn(e){let t=m.default.dirname(e),n=m.default.basename(t)===".bin"&&/^claude(?:\.cmd)?$/i.test(m.default.basename(e));for(let r=0;r<6;r++){let o=we(m.default.join(t,"package.json"));if(o)return o;if(m.default.basename(e).toLowerCase()==="claude.cmd"&&r===0){let a=we(m.default.join(t,"node_modules","@anthropic-ai","claude-code","package.json"));if(a)return a}if(n&&m.default.basename(t)==="node_modules"){let a=we(m.default.join(t,"@anthropic-ai","claude-code","package.json"));if(a)return a}let i=m.default.dirname(t);if(i===t)break;t=i}return null}function Kn(e){return typeof e=="object"&&e!==null&&"fingerprint"in e&&typeof e.fingerprint=="string"&&/^[0-9a-f]{64}$/.test(e.fingerprint)&&"version"in e&&(e.version===null||typeof e.version=="string"&&It.test(e.version))&&"checkedAt"in e&&typeof e.checkedAt=="number"&&Number.isFinite(e.checkedAt)}function Nt(e,t){let n=t-e.checkedAt;return n>=0&&n<(e.version===null?Yn:Vn)}function Hn(e){if(!e)return[];let t=m.default.join(e,Bt);try{if(E.default.statSync(t).size>16384)return P("oversized version cache ignored"),[];let n=JSON.parse(E.default.readFileSync(t,"utf8"));if(Array.isArray(n)&&n.length<=xe&&n.every(Kn))return n;P("invalid version cache ignored")}catch(n){ie(n)||P(`version cache read failed (${n instanceof SyntaxError?"INVALID_JSON":k(n)})`)}return[]}function jt(e){for(I.delete(e.fingerprint),I.set(e.fingerprint,e);I.size>xe;){let t=I.keys().next().value;t!==void 0&&I.delete(t)}}function Zn(e,t){if(!e)return;let n=m.default.join(e,Bt),r=`${n}.${process.pid}.${(0,oe.randomUUID)()}.tmp`;try{E.default.mkdirSync(e,{recursive:!0,mode:448}),E.default.writeFileSync(r,JSON.stringify(t),{encoding:"utf8",mode:384,flag:"wx"}),E.default.renameSync(r,n)}catch(o){P(`version cache write failed (${k(o)})`)}finally{try{E.default.unlinkSync(r)}catch(o){ie(o)||P(`temporary version cache cleanup failed (${k(o)})`)}}}function Jn(e){if(/\.(cmd|bat|ps1)$/i.test(e))return P("command shim has no readable Claude package metadata"),null;let t=(0,Ut.spawnSync)(e,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:!1,windowsHide:!0,timeout:qn,killSignal:"SIGKILL",maxBuffer:4096});if(t.error||t.status!==0)return P(`version probe failed (${t.error?k(t.error):`exit ${t.status??t.signal}`})`),null;let n=Gn.exec(t.stdout.trim())?.[1];return n||(P("version probe did not identify Claude Code"),null)}function Lt(e){let t=zn();if(!t)return"unknown";let n=Xn(t.file);if(n)return n;let r=Date.now(),o=Hn(e),i=[I.get(t.fingerprint),...o].find(u=>u&&u.fingerprint===t.fingerprint&&Nt(u,r));if(i)return jt(i),i.version??"unknown";let a={fingerprint:t.fingerprint,version:Jn(t.file),checkedAt:Date.now()};return jt(a),Zn(e,[...o.filter(u=>u.fingerprint!==a.fingerprint&&Nt(u,a.checkedAt)),a].slice(-xe)),a.version??"unknown"}var D=p(require("node:path"));var b=p(require("node:fs")),Re=p(require("node:path")),Wn=new Set(["","unknown","undefined","null","n/a","none","auto","default"]),Qn=256*1024,er=1024*1024,tr=4096;function U(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function Me(e){let t=U(e),n=t?"id"in t?t.id:t.name:e;if(typeof n!="string")return;let r=n.trim();if(!(r.startsWith("{")||r.startsWith("[")))return r.length<=512&&!/[\u0000-\u001f\u007f]/.test(r)&&!Wn.has(r.toLowerCase())?r:void 0}function $t(e,t){delete e.model,t&&(e.model=t.name,!(t.source==="hook.model"&&e.model_source!==void 0)&&(e.model_source!==void 0&&(e.model_original_source=e.model_source),e.model_source=t.source))}function B(e){return typeof e=="string"&&/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,255}$/.test(e)?e:void 0}function se(e){let t=typeof e=="number"?e:typeof e=="string"&&/^\d{4}-\d{2}-\d{2}T/.test(e)?Date.parse(e):NaN;return Number.isFinite(t)&&t>=0?t:void 0}function Ft(e,t){let n=e.timestamp===void 0?se(t):se(e.timestamp);return n!==void 0&&n<=t?n:void 0}function Gt(e){if(typeof e!="string"||e.length>4096||/[\u0000-\u001f]/.test(e)||!Re.default.isAbsolute(e)||Re.default.extname(e)!==".jsonl")return;let t;try{t=b.default.openSync(e,b.default.constants.O_RDONLY|b.default.constants.O_NONBLOCK|(b.default.constants.O_NOFOLLOW??0));let n=b.default.fstatSync(t);if(!n.isFile()||!Number.isSafeInteger(n.size)||n.size<=0)return;let r=Buffer.alloc(Math.min(n.size,Qn));if(b.default.readSync(t,r,0,r.length,0)!==r.length)return;let o=r.indexOf(10),i;if(o>=0)try{i=U(JSON.parse(r.toString("utf8",0,o)))}catch{}let a=Math.max(0,n.size-er),u=n.size<=r.length?r:Buffer.alloc(n.size-a);if(u!==r&&b.default.readSync(t,u,0,u.length,a)!==u.length)return;let c=b.default.fstatSync(t);if(c.size<n.size||c.size===n.size&&c.mtimeMs!==n.mtimeMs)return;let l=a>0?u.indexOf(10)+1:0,g=u.lastIndexOf(10);if(a>0&&l===0||g<l)return;let w=[],O=0;for(;g>l&&O<tr;){let X=u.lastIndexOf(10,g-1),$=Math.max(l,X+1),Ne=u.toString("utf8",$,g).trim();if(Ne){let je=U(JSON.parse(Ne));je&&w.push(je)}g=$-1,O++}return w.reverse(),{first:i,rows:w,complete:a===0&&g<0&&u[u.length-1]===10}}catch{return}finally{if(t!==void 0)try{b.default.closeSync(t)}catch{}}}function qt(e){let t=e[0];return t&&e.every(n=>n?.name===t.name)?t:void 0}var nr=new Set(["PreToolUse","PostToolUse","PostToolUseFailure","PermissionRequest","PermissionDenied"]);function rr(e,t){let n=D.default.dirname(e);if(D.default.basename(n)!=="subagents"||D.default.basename(D.default.dirname(n))!==t)return;let r=/^agent-(.+)\.jsonl$/.exec(D.default.basename(e));return B(r?.[1])}function Vt(e,t){let n=Me(e.model);if(n)return{name:n,source:"hook.model"};try{return or(e,t)}catch{return}}function or(e,t){if(!nr.has(e.hook_event_name))return;let n=B(e.session_id),r=B(e.tool_use_id),o=Ft(e,t);if(!n||!r||o===void 0||typeof e.transcript_path!="string")return;let i=rr(e.transcript_path,n),a=e.agent_id===void 0?i:B(e.agent_id);if(e.agent_id!==void 0&&!a||i!==void 0&&i!==a||!a&&e.agent_type!==void 0||D.default.basename(D.default.dirname(e.transcript_path))==="subagents"&&!i)return;let u=Gt(e.transcript_path);if(!u)return;let c=[];for(let l of u.rows){let g=se(l.timestamp);if(l.type!=="assistant"||l.sessionId!==n||g===void 0||g>o)continue;let w=l.agentId===void 0?void 0:B(l.agentId);if(w!==a||l.agentId!==void 0&&!w||l.isSidechain===!0&&!a)continue;let O=U(l.message);if(!O||O.role!==void 0&&O.role!=="assistant"||!Array.isArray(O.content)||!O.content.some($=>U($)?.type==="tool_use"&&U($)?.id===r))continue;let X=Me(O.model);c.push(X?{name:X,source:"transcript.assistant.message"}:void 0)}return qt(c)}var L=p(T()),ae;function ir(){if(ae===void 0)try{ae=ue.default.userInfo().username}catch{ae=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return ae}var Yt="1.
|
|
19
|
+
`)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.indexOf("=");if(o<0)continue;let i=r.slice(0,o).trim(),a=r.slice(o+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),i&&(t[i]=a)}return t}function In(e){let t;try{t=jn.default.readFileSync(e,"utf-8")}catch{return}let n=pt(t);for(let[r,o]of Object.entries(n))process.env[r]===void 0&&(process.env[r]=o)}});var T=S(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});s.loadEnvFile=s.parseEnvFile=s.envFilePath=s.MemorySessionTraceManager=s.DiskSessionTraceManager=s.generateUlid=s.TraceManager=s.MAX_POST_BYTES=s.parseHeadersEnv=s.envOptionsResolver=s.postOtlp=s.MemoryTransport=s.DiskTransport=s.MemoryRetryQueue=s.DiskRetryQueue=s.GUARD_BUDGET_HEADER=s.GUARD_STATUS_REFUSED=s.evaluateGuard=s.MAX_SPAN_BYTES=s.enforceSpanBudget=s.mergeBatch=s.attachGuard=s.buildPayload=s.clientAttrs=s.guardAttrs=s.attrsFromRecord=s.toOtlpValue=s.snakeCase=s.newSpanId=s.ulidToTraceId=s.MAX_BYTES=s.PATTERNS=s.applyMatches=s.resolveOverlaps=s.collectMatches=s.truncateTo=s.truncate=s.redact=void 0;var M=le();Object.defineProperty(s,"redact",{enumerable:!0,get:function(){return M.redact}});Object.defineProperty(s,"truncate",{enumerable:!0,get:function(){return M.truncate}});Object.defineProperty(s,"truncateTo",{enumerable:!0,get:function(){return M.truncateTo}});Object.defineProperty(s,"collectMatches",{enumerable:!0,get:function(){return M.collectMatches}});Object.defineProperty(s,"resolveOverlaps",{enumerable:!0,get:function(){return M.resolveOverlaps}});Object.defineProperty(s,"applyMatches",{enumerable:!0,get:function(){return M.applyMatches}});Object.defineProperty(s,"PATTERNS",{enumerable:!0,get:function(){return M.PATTERNS}});Object.defineProperty(s,"MAX_BYTES",{enumerable:!0,get:function(){return M.MAX_BYTES}});var y=fe();Object.defineProperty(s,"ulidToTraceId",{enumerable:!0,get:function(){return y.ulidToTraceId}});Object.defineProperty(s,"newSpanId",{enumerable:!0,get:function(){return y.newSpanId}});Object.defineProperty(s,"snakeCase",{enumerable:!0,get:function(){return y.snakeCase}});Object.defineProperty(s,"toOtlpValue",{enumerable:!0,get:function(){return y.toOtlpValue}});Object.defineProperty(s,"attrsFromRecord",{enumerable:!0,get:function(){return y.attrsFromRecord}});Object.defineProperty(s,"guardAttrs",{enumerable:!0,get:function(){return y.guardAttrs}});Object.defineProperty(s,"clientAttrs",{enumerable:!0,get:function(){return y.clientAttrs}});Object.defineProperty(s,"buildPayload",{enumerable:!0,get:function(){return y.buildPayload}});Object.defineProperty(s,"attachGuard",{enumerable:!0,get:function(){return y.attachGuard}});Object.defineProperty(s,"mergeBatch",{enumerable:!0,get:function(){return y.mergeBatch}});Object.defineProperty(s,"enforceSpanBudget",{enumerable:!0,get:function(){return y.enforceSpanBudget}});Object.defineProperty(s,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return y.MAX_SPAN_BYTES}});var Oe=Ze();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return Oe.evaluateGuard}});Object.defineProperty(s,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return Oe.GUARD_STATUS_REFUSED}});Object.defineProperty(s,"GUARD_BUDGET_HEADER",{enumerable:!0,get:function(){return Oe.GUARD_BUDGET_HEADER}});var gt=ge();Object.defineProperty(s,"DiskRetryQueue",{enumerable:!0,get:function(){return gt.DiskRetryQueue}});Object.defineProperty(s,"MemoryRetryQueue",{enumerable:!0,get:function(){return gt.MemoryRetryQueue}});var C=ot();Object.defineProperty(s,"DiskTransport",{enumerable:!0,get:function(){return C.DiskTransport}});Object.defineProperty(s,"MemoryTransport",{enumerable:!0,get:function(){return C.MemoryTransport}});Object.defineProperty(s,"postOtlp",{enumerable:!0,get:function(){return C.postOtlp}});Object.defineProperty(s,"envOptionsResolver",{enumerable:!0,get:function(){return C.envOptionsResolver}});Object.defineProperty(s,"parseHeadersEnv",{enumerable:!0,get:function(){return C.parseHeadersEnv}});Object.defineProperty(s,"MAX_POST_BYTES",{enumerable:!0,get:function(){return C.MAX_POST_BYTES}});var _t=ve();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return _t.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return _t.generateUlid}});var ht=dt();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return ht.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return ht.MemorySessionTraceManager}});var Ae=mt();Object.defineProperty(s,"envFilePath",{enumerable:!0,get:function(){return Ae.envFilePath}});Object.defineProperty(s,"parseEnvFile",{enumerable:!0,get:function(){return Ae.parseEnvFile}});Object.defineProperty(s,"loadEnvFile",{enumerable:!0,get:function(){return Ae.loadEnvFile}})});var q=p(T());function Bn(){return(0,q.envFilePath)(".claude","pinta-cc.env")}function yt(e=Bn()){(0,q.loadEnvFile)(e)}function Et(){process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT&&!process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT&&(process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT),process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&!process.env.OTEL_EXPORTER_OTLP_HEADERS&&(process.env.OTEL_EXPORTER_OTLP_HEADERS=`x-pinta-relay-token=${process.env.CLAUDE_PLUGIN_OPTION_API_KEY}`),!process.env.PINTA_RELAY_TOKEN&&process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&(process.env.PINTA_RELAY_TOKEN=process.env.CLAUDE_PLUGIN_OPTION_API_KEY)}var ke=p(require("path")),Pt=p(T());function vt(){let e=process.env.CLAUDE_PLUGIN_ROOT||process.cwd(),t=process.env.CLAUDE_PLUGIN_DATA||ke.default.join(e,".plugin-data");return{pluginRoot:e,pluginData:t,tracePath:ke.default.join(t,"trace.json")}}function ee(){return(0,Pt.envOptionsResolver)()!==null}function St(e){return e.hook_event_name==="PreToolUse"}function Tt(e){return e.hook_event_name==="PostToolUse"||e.hook_event_name==="PostToolUseFailure"}function bt(e){return e.hook_event_name==="UserPromptSubmit"}function Ot(e){return e.hook_event_name==="SessionStart"||e.hook_event_name==="SessionEnd"}function At(e){return e.hook_event_name==="SubagentStart"||e.hook_event_name==="SubagentStop"}function kt(e){return e.hook_event_name==="Stop"}function wt(e){return e.hook_event_name==="PermissionRequest"||e.hook_event_name==="PermissionDenied"}var Ln=new Set(["Notification","TaskCreated","TaskCompleted"]);function xt(e){return Ln.has(e.hook_event_name)}var Xt=p(T());var Rt=p(T()),$n=1e4,Fn="pinta-cc/1.10.1";function te(e,t){return(0,Rt.evaluateGuard)(e,t,{timeoutMs:$n,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:Fn})}var V=p(T());var Mt=p(T()),ne=class extends Mt.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-cc"})}};var Dt=p(T()),re=class extends Dt.TraceManager{constructor(t){super(t.tracePath)}};var ue=p(require("os"));var Ut=require("node:child_process"),oe=require("node:crypto"),E=p(require("node:fs")),Ct=p(require("node:os")),m=p(require("node:path")),It=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,Gn=/^v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)\s+\(Claude Code\)$/m,qn=2e3,Vn=24*60*60*1e3,Yn=3e4,xe=8,Bt="claude-version.json",I=new Map;function k(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"?e.code:"UNKNOWN"}function P(e){process.stderr.write(`[pinta-cc] CLI version: ${e}
|
|
20
|
+
`)}function ie(e){return k(e)==="ENOENT"||k(e)==="ENOTDIR"}function zn(){let e=process.env.CLAUDE_CODE_EXECPATH,t=process.platform==="win32"?["claude.exe","claude.cmd"]:["claude"],n;if(e)n=[e];else{let r=(process.env.PATH??"").split(m.default.delimiter).filter(o=>m.default.isAbsolute(o));try{r.push(m.default.join(Ct.default.homedir(),".local","bin"))}catch(o){P(`native install directory lookup failed (${k(o)})`)}n=r.flatMap(o=>t.map(i=>m.default.join(o,i)))}for(let r of new Set(n))try{let o=E.default.realpathSync(r),i=E.default.statSync(o);if(!i.isFile())continue;return!e&&process.platform!=="win32"&&E.default.accessSync(o,E.default.constants.X_OK),{file:o,fingerprint:(0,oe.createHash)("sha256").update(JSON.stringify([o,i.ino,i.size,i.mtimeMs,i.ctimeMs])).digest("hex")}}catch(o){ie(o)||P(`executable lookup failed (${k(o)})`)}return P(e?"configured executable is unavailable":"no Claude executable found in PATH or ~/.local/bin"),null}function we(e){let t;try{t=JSON.parse(E.default.readFileSync(e,"utf8"))}catch(n){return ie(n)||P(`package metadata could not be read (${n instanceof SyntaxError?"INVALID_JSON":k(n)})`),null}return typeof t!="object"||t===null||!("name"in t)||!("version"in t)||typeof t.name!="string"||typeof t.version!="string"||!It.test(t.version)?null:t.name==="@anthropic-ai/claude-code"||t.name.startsWith("@anthropic-ai/claude-code-")?t.version:null}function Xn(e){let t=m.default.dirname(e),n=m.default.basename(t)===".bin"&&/^claude(?:\.cmd)?$/i.test(m.default.basename(e));for(let r=0;r<6;r++){let o=we(m.default.join(t,"package.json"));if(o)return o;if(m.default.basename(e).toLowerCase()==="claude.cmd"&&r===0){let a=we(m.default.join(t,"node_modules","@anthropic-ai","claude-code","package.json"));if(a)return a}if(n&&m.default.basename(t)==="node_modules"){let a=we(m.default.join(t,"@anthropic-ai","claude-code","package.json"));if(a)return a}let i=m.default.dirname(t);if(i===t)break;t=i}return null}function Kn(e){return typeof e=="object"&&e!==null&&"fingerprint"in e&&typeof e.fingerprint=="string"&&/^[0-9a-f]{64}$/.test(e.fingerprint)&&"version"in e&&(e.version===null||typeof e.version=="string"&&It.test(e.version))&&"checkedAt"in e&&typeof e.checkedAt=="number"&&Number.isFinite(e.checkedAt)}function Nt(e,t){let n=t-e.checkedAt;return n>=0&&n<(e.version===null?Yn:Vn)}function Hn(e){if(!e)return[];let t=m.default.join(e,Bt);try{if(E.default.statSync(t).size>16384)return P("oversized version cache ignored"),[];let n=JSON.parse(E.default.readFileSync(t,"utf8"));if(Array.isArray(n)&&n.length<=xe&&n.every(Kn))return n;P("invalid version cache ignored")}catch(n){ie(n)||P(`version cache read failed (${n instanceof SyntaxError?"INVALID_JSON":k(n)})`)}return[]}function jt(e){for(I.delete(e.fingerprint),I.set(e.fingerprint,e);I.size>xe;){let t=I.keys().next().value;t!==void 0&&I.delete(t)}}function Zn(e,t){if(!e)return;let n=m.default.join(e,Bt),r=`${n}.${process.pid}.${(0,oe.randomUUID)()}.tmp`;try{E.default.mkdirSync(e,{recursive:!0,mode:448}),E.default.writeFileSync(r,JSON.stringify(t),{encoding:"utf8",mode:384,flag:"wx"}),E.default.renameSync(r,n)}catch(o){P(`version cache write failed (${k(o)})`)}finally{try{E.default.unlinkSync(r)}catch(o){ie(o)||P(`temporary version cache cleanup failed (${k(o)})`)}}}function Jn(e){if(/\.(cmd|bat|ps1)$/i.test(e))return P("command shim has no readable Claude package metadata"),null;let t=(0,Ut.spawnSync)(e,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:!1,windowsHide:!0,timeout:qn,killSignal:"SIGKILL",maxBuffer:4096});if(t.error||t.status!==0)return P(`version probe failed (${t.error?k(t.error):`exit ${t.status??t.signal}`})`),null;let n=Gn.exec(t.stdout.trim())?.[1];return n||(P("version probe did not identify Claude Code"),null)}function Lt(e){let t=zn();if(!t)return"unknown";let n=Xn(t.file);if(n)return n;let r=Date.now(),o=Hn(e),i=[I.get(t.fingerprint),...o].find(u=>u&&u.fingerprint===t.fingerprint&&Nt(u,r));if(i)return jt(i),i.version??"unknown";let a={fingerprint:t.fingerprint,version:Jn(t.file),checkedAt:Date.now()};return jt(a),Zn(e,[...o.filter(u=>u.fingerprint!==a.fingerprint&&Nt(u,a.checkedAt)),a].slice(-xe)),a.version??"unknown"}var D=p(require("node:path"));var b=p(require("node:fs")),Re=p(require("node:path")),Wn=new Set(["","unknown","undefined","null","n/a","none","auto","default"]),Qn=256*1024,er=1024*1024,tr=4096;function U(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function Me(e){let t=U(e),n=t?"id"in t?t.id:t.name:e;if(typeof n!="string")return;let r=n.trim();if(!(r.startsWith("{")||r.startsWith("[")))return r.length<=512&&!/[\u0000-\u001f\u007f]/.test(r)&&!Wn.has(r.toLowerCase())?r:void 0}function $t(e,t){delete e.model,t&&(e.model=t.name,!(t.source==="hook.model"&&e.model_source!==void 0)&&(e.model_source!==void 0&&(e.model_original_source=e.model_source),e.model_source=t.source))}function B(e){return typeof e=="string"&&/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,255}$/.test(e)?e:void 0}function se(e){let t=typeof e=="number"?e:typeof e=="string"&&/^\d{4}-\d{2}-\d{2}T/.test(e)?Date.parse(e):NaN;return Number.isFinite(t)&&t>=0?t:void 0}function Ft(e,t){let n=e.timestamp===void 0?se(t):se(e.timestamp);return n!==void 0&&n<=t?n:void 0}function Gt(e){if(typeof e!="string"||e.length>4096||/[\u0000-\u001f]/.test(e)||!Re.default.isAbsolute(e)||Re.default.extname(e)!==".jsonl")return;let t;try{t=b.default.openSync(e,b.default.constants.O_RDONLY|b.default.constants.O_NONBLOCK|(b.default.constants.O_NOFOLLOW??0));let n=b.default.fstatSync(t);if(!n.isFile()||!Number.isSafeInteger(n.size)||n.size<=0)return;let r=Buffer.alloc(Math.min(n.size,Qn));if(b.default.readSync(t,r,0,r.length,0)!==r.length)return;let o=r.indexOf(10),i;if(o>=0)try{i=U(JSON.parse(r.toString("utf8",0,o)))}catch{}let a=Math.max(0,n.size-er),u=n.size<=r.length?r:Buffer.alloc(n.size-a);if(u!==r&&b.default.readSync(t,u,0,u.length,a)!==u.length)return;let c=b.default.fstatSync(t);if(c.size<n.size||c.size===n.size&&c.mtimeMs!==n.mtimeMs)return;let l=a>0?u.indexOf(10)+1:0,g=u.lastIndexOf(10);if(a>0&&l===0||g<l)return;let w=[],O=0;for(;g>l&&O<tr;){let X=u.lastIndexOf(10,g-1),$=Math.max(l,X+1),Ne=u.toString("utf8",$,g).trim();if(Ne){let je=U(JSON.parse(Ne));je&&w.push(je)}g=$-1,O++}return w.reverse(),{first:i,rows:w,complete:a===0&&g<0&&u[u.length-1]===10}}catch{return}finally{if(t!==void 0)try{b.default.closeSync(t)}catch{}}}function qt(e){let t=e[0];return t&&e.every(n=>n?.name===t.name)?t:void 0}var nr=new Set(["PreToolUse","PostToolUse","PostToolUseFailure","PermissionRequest","PermissionDenied"]);function rr(e,t){let n=D.default.dirname(e);if(D.default.basename(n)!=="subagents"||D.default.basename(D.default.dirname(n))!==t)return;let r=/^agent-(.+)\.jsonl$/.exec(D.default.basename(e));return B(r?.[1])}function Vt(e,t){let n=Me(e.model);if(n)return{name:n,source:"hook.model"};try{return or(e,t)}catch{return}}function or(e,t){if(!nr.has(e.hook_event_name))return;let n=B(e.session_id),r=B(e.tool_use_id),o=Ft(e,t);if(!n||!r||o===void 0||typeof e.transcript_path!="string")return;let i=rr(e.transcript_path,n),a=e.agent_id===void 0?i:B(e.agent_id);if(e.agent_id!==void 0&&!a||i!==void 0&&i!==a||!a&&e.agent_type!==void 0||D.default.basename(D.default.dirname(e.transcript_path))==="subagents"&&!i)return;let u=Gt(e.transcript_path);if(!u)return;let c=[];for(let l of u.rows){let g=se(l.timestamp);if(l.type!=="assistant"||l.sessionId!==n||g===void 0||g>o)continue;let w=l.agentId===void 0?void 0:B(l.agentId);if(w!==a||l.agentId!==void 0&&!w||l.isSidechain===!0&&!a)continue;let O=U(l.message);if(!O||O.role!==void 0&&O.role!=="assistant"||!Array.isArray(O.content)||!O.content.some($=>U($)?.type==="tool_use"&&U($)?.id===r))continue;let X=Me(O.model);c.push(X?{name:X,source:"transcript.assistant.message"}:void 0)}return qt(c)}var L=p(T()),ae;function ir(){if(ae===void 0)try{ae=ue.default.userInfo().username}catch{ae=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return ae}var Yt="1.10.1",sr=new Set(["cc.hook","cc.tool_name","cc.tool_use_id","cc.session_id","cc.transcript_path","cc.cwd","cc.permission_mode"]),ar=new Set(["cc.tool_input","cc.tool_response"]),ur={skipRedactKeys:sr,bashContextKeys:ar};function cr(e,t){let n=[];n.push({key:"ingest.type",value:{stringValue:"cc"}}),n.push({key:"cc.hook",value:{stringValue:e.hook_event_name}});let r={};for(let[o,i]of Object.entries(e))o!=="hook_event_name"&&(r[o]=i);return $t(r,Vt(e,t)),n.push(...(0,L.attrsFromRecord)(r,"cc",ur)),n}function lr(e){return[{key:"service.name",value:{stringValue:"claude-code"}},{key:"service.version",value:{stringValue:Lt(e)}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-cc"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:Yt}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:ir()}},{key:"host.name",value:{stringValue:ue.default.hostname()}},{key:"host.arch",value:{stringValue:ue.default.arch()}}]}function zt(e){let t=e.now??Date.now();return(0,L.buildPayload)({traceId:e.traceId,spanName:`cc.${(0,L.snakeCase)(e.event.hook_event_name)}`,attributes:cr(e.event,t),resource:lr(e.versionCacheDir),scope:{name:"pinta-cc",version:Yt},now:t})}function Y(e,t,n={}){let r=new re(t),o=n.traceMode==="new"?r.newTrace():r.currentTrace();return zt({event:e,traceId:o,versionCacheDir:t.pluginData})}async function z(e,t){if(!ee())return;let n=new ne(t);await n.flush(),await n.send(e)}function ce(e,t){if(!ee())return;let n=Buffer.byteLength(JSON.stringify(e),"utf-8");if(n>V.MAX_POST_BYTES){process.stderr.write(`[pinta-cc] dropping oversized span payload (${n} > ${V.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
|
|
21
21
|
`);return}new V.DiskRetryQueue(t.pluginData,"pinta-cc").enqueue(e)}async function v(e,t,n={}){ee()&&await z(Y(e,t,n),t)}async function Kt(e,t){let n=Y(e,t),r=await te(n,process.env.PINTA_GUARD_ENDPOINT);if(r?.decision==="DENY"){let i={hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:r.userMessage??r.reason??"guard_deny"}};process.stdout.write(JSON.stringify(i)+`
|
|
22
22
|
`)}try{if((0,Xt.attachGuard)(n,r),r?.decision==="DENY")return ce(n,t),0;await z(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
|
|
23
23
|
`)}return 0}var Ht=p(T());async function Zt(e,t){if(e.hook_event_name==="PostToolUseFailure")return await v(e,t),0;let n=Y(e,t),r=await te(n,process.env.PINTA_GUARD_ENDPOINT);r?.decision==="DENY"&&process.stdout.write(JSON.stringify({continue:!1,stopReason:"Pinta blocked this tool output. Start a new session before continuing."})+`
|
package/dist/index.mjs
CHANGED
|
@@ -17,8 +17,8 @@ var sn=Object.create;var Ne=Object.defineProperty;var an=Object.getOwnPropertyDe
|
|
|
17
17
|
`);return}await q(t,n,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(!t)return;let n=this.queue.drain();if(n.length===0)return;let{chunks:r,oversize:o}=et(n,te,f.MAX_POST_BYTES);o.length>0&&process.stderr.write(`[${this.logPrefix}] dropping ${o.length} oversized buffered ${o.length===1?"payload":"payloads"} (each > ${f.MAX_POST_BYTES} bytes \u2014 undeliverable)
|
|
18
18
|
`);let i=[].concat(...r),a=0;for(let c of r){if(!await q((0,Qe.mergeBatch)(c),t,this.logPrefix))break;a+=c.length}for(let c of i.slice(a))this.queue.enqueue(c)}};f.MemoryTransport=_e});var ve=S(j=>{"use strict";var Pe=j&&j.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(j,"__esModule",{value:!0});j.TraceManager=void 0;j.generateUlid=it;var ot=Pe(_("fs")),Dn=Pe(_("path")),Mn=Pe(_("crypto")),jn=W(),ye="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function it(){let e=Date.now(),t="",n=e;for(let i=0;i<10;i++)t=ye[n&31]+t,n=Math.floor(n/32);let r=Mn.default.randomBytes(10),o="";for(let i=0;i<10;i++)o+=ye[r[i]&31];for(;o.length<16;)o+=ye[0];return t+o}var Ee=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=it();return this.save(t),t}currentTrace(){try{let t=ot.default.readFileSync(this.tracePath,"utf-8"),{traceId:n}=JSON.parse(t);if(n)return n}catch{}return this.newTrace()}save(t){try{ot.default.mkdirSync(Dn.default.dirname(this.tracePath),{recursive:!0}),(0,jn.atomicWriteFileSync)(this.tracePath,JSON.stringify({traceId:t}))}catch(n){process.stderr.write(`[pinta-core] trace persistence failed: ${n}
|
|
19
19
|
`)}}};j.TraceManager=Ee});var lt=S(D=>{"use strict";var at=D&&D.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(D,"__esModule",{value:!0});D.MemorySessionTraceManager=D.DiskSessionTraceManager=void 0;var st=at(_("fs")),Nn=at(_("path")),ct=ve(),In=W(),ut=200,Se=class{tracePath;maxSessions;constructor(t,n={}){this.tracePath=t,this.maxSessions=n.maxSessions??ut}read(){try{let t=JSON.parse(st.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{st.default.mkdirSync(Nn.default.dirname(this.tracePath),{recursive:!0});let n=Object.entries(t),r=n.length>this.maxSessions?Object.fromEntries(n.slice(-this.maxSessions)):t;(0,In.atomicWriteFileSync)(this.tracePath,JSON.stringify(r))}catch{}}newTrace(t){let n=t||"default",r=(0,ct.generateUlid)(),o=this.read();return o[n]=r,this.write(o),r}currentTrace(t){let n=t||"default",r=this.read()[n];return r||this.newTrace(n)}};D.DiskSessionTraceManager=Se;var Te=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??ut}newTrace(t){let n=t||"default",r=(0,ct.generateUlid)();if(this.map.set(n,r),this.map.size>this.maxSessions){let o=this.map.keys().next().value;o!==void 0&&this.map.delete(o)}return r}currentTrace(t){let n=t||"default";return this.map.get(n)??this.newTrace(n)}};D.MemorySessionTraceManager=Te});var pt=S(N=>{"use strict";var be=N&&N.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(N,"__esModule",{value:!0});N.envFilePath=Bn;N.parseEnvFile=dt;N.loadEnvFile=Ln;var Cn=be(_("node:fs")),Un=be(_("node:os")),ft=be(_("node:path"));function Bn(e,t,n){let r=n?process.env[n]:void 0,o=r&&r.length>0?r:ft.default.join(Un.default.homedir(),e);return ft.default.join(o,t)}function dt(e){let t={};for(let n of e.split(`
|
|
20
|
-
`)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.indexOf("=");if(o<0)continue;let i=r.slice(0,o).trim(),a=r.slice(o+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),i&&(t[i]=a)}return t}function Ln(e){let t;try{t=Cn.default.readFileSync(e,"utf-8")}catch{return}let n=dt(t);for(let[r,o]of Object.entries(n))process.env[r]===void 0&&(process.env[r]=o)}});var T=S(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});s.loadEnvFile=s.parseEnvFile=s.envFilePath=s.MemorySessionTraceManager=s.DiskSessionTraceManager=s.generateUlid=s.TraceManager=s.MAX_POST_BYTES=s.parseHeadersEnv=s.envOptionsResolver=s.postOtlp=s.MemoryTransport=s.DiskTransport=s.MemoryRetryQueue=s.DiskRetryQueue=s.GUARD_BUDGET_HEADER=s.GUARD_STATUS_REFUSED=s.evaluateGuard=s.MAX_SPAN_BYTES=s.enforceSpanBudget=s.mergeBatch=s.attachGuard=s.buildPayload=s.clientAttrs=s.guardAttrs=s.attrsFromRecord=s.toOtlpValue=s.snakeCase=s.newSpanId=s.ulidToTraceId=s.MAX_BYTES=s.PATTERNS=s.applyMatches=s.resolveOverlaps=s.collectMatches=s.truncateTo=s.truncate=s.redact=void 0;var M=le();Object.defineProperty(s,"redact",{enumerable:!0,get:function(){return M.redact}});Object.defineProperty(s,"truncate",{enumerable:!0,get:function(){return M.truncate}});Object.defineProperty(s,"truncateTo",{enumerable:!0,get:function(){return M.truncateTo}});Object.defineProperty(s,"collectMatches",{enumerable:!0,get:function(){return M.collectMatches}});Object.defineProperty(s,"resolveOverlaps",{enumerable:!0,get:function(){return M.resolveOverlaps}});Object.defineProperty(s,"applyMatches",{enumerable:!0,get:function(){return M.applyMatches}});Object.defineProperty(s,"PATTERNS",{enumerable:!0,get:function(){return M.PATTERNS}});Object.defineProperty(s,"MAX_BYTES",{enumerable:!0,get:function(){return M.MAX_BYTES}});var y=de();Object.defineProperty(s,"ulidToTraceId",{enumerable:!0,get:function(){return y.ulidToTraceId}});Object.defineProperty(s,"newSpanId",{enumerable:!0,get:function(){return y.newSpanId}});Object.defineProperty(s,"snakeCase",{enumerable:!0,get:function(){return y.snakeCase}});Object.defineProperty(s,"toOtlpValue",{enumerable:!0,get:function(){return y.toOtlpValue}});Object.defineProperty(s,"attrsFromRecord",{enumerable:!0,get:function(){return y.attrsFromRecord}});Object.defineProperty(s,"guardAttrs",{enumerable:!0,get:function(){return y.guardAttrs}});Object.defineProperty(s,"clientAttrs",{enumerable:!0,get:function(){return y.clientAttrs}});Object.defineProperty(s,"buildPayload",{enumerable:!0,get:function(){return y.buildPayload}});Object.defineProperty(s,"attachGuard",{enumerable:!0,get:function(){return y.attachGuard}});Object.defineProperty(s,"mergeBatch",{enumerable:!0,get:function(){return y.mergeBatch}});Object.defineProperty(s,"enforceSpanBudget",{enumerable:!0,get:function(){return y.enforceSpanBudget}});Object.defineProperty(s,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return y.MAX_SPAN_BYTES}});var Oe=He();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return Oe.evaluateGuard}});Object.defineProperty(s,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return Oe.GUARD_STATUS_REFUSED}});Object.defineProperty(s,"GUARD_BUDGET_HEADER",{enumerable:!0,get:function(){return Oe.GUARD_BUDGET_HEADER}});var mt=ge();Object.defineProperty(s,"DiskRetryQueue",{enumerable:!0,get:function(){return mt.DiskRetryQueue}});Object.defineProperty(s,"MemoryRetryQueue",{enumerable:!0,get:function(){return mt.MemoryRetryQueue}});var U=rt();Object.defineProperty(s,"DiskTransport",{enumerable:!0,get:function(){return U.DiskTransport}});Object.defineProperty(s,"MemoryTransport",{enumerable:!0,get:function(){return U.MemoryTransport}});Object.defineProperty(s,"postOtlp",{enumerable:!0,get:function(){return U.postOtlp}});Object.defineProperty(s,"envOptionsResolver",{enumerable:!0,get:function(){return U.envOptionsResolver}});Object.defineProperty(s,"parseHeadersEnv",{enumerable:!0,get:function(){return U.parseHeadersEnv}});Object.defineProperty(s,"MAX_POST_BYTES",{enumerable:!0,get:function(){return U.MAX_POST_BYTES}});var gt=ve();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return gt.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return gt.generateUlid}});var ht=lt();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return ht.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return ht.MemorySessionTraceManager}});var Ae=pt();Object.defineProperty(s,"envFilePath",{enumerable:!0,get:function(){return Ae.envFilePath}});Object.defineProperty(s,"parseEnvFile",{enumerable:!0,get:function(){return Ae.parseEnvFile}});Object.defineProperty(s,"loadEnvFile",{enumerable:!0,get:function(){return Ae.loadEnvFile}})});import{realpathSync as Rr}from"node:fs";import{pathToFileURL as Dr}from"node:url";var V=O(T());function Fn(){return(0,V.envFilePath)(".claude","pinta-cc.env")}function _t(e=Fn()){(0,V.loadEnvFile)(e)}function yt(){process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT&&!process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT&&(process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT),process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&!process.env.OTEL_EXPORTER_OTLP_HEADERS&&(process.env.OTEL_EXPORTER_OTLP_HEADERS=`x-pinta-relay-token=${process.env.CLAUDE_PLUGIN_OPTION_API_KEY}`),!process.env.PINTA_RELAY_TOKEN&&process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&(process.env.PINTA_RELAY_TOKEN=process.env.CLAUDE_PLUGIN_OPTION_API_KEY)}var Pt=O(T());import Et from"path";function vt(){let e=process.env.CLAUDE_PLUGIN_ROOT||process.cwd(),t=process.env.CLAUDE_PLUGIN_DATA||Et.join(e,".plugin-data");return{pluginRoot:e,pluginData:t,tracePath:Et.join(t,"trace.json")}}function ne(){return(0,Pt.envOptionsResolver)()!==null}function St(e){return e.hook_event_name==="PreToolUse"}function Tt(e){return e.hook_event_name==="PostToolUse"||e.hook_event_name==="PostToolUseFailure"}function bt(e){return e.hook_event_name==="UserPromptSubmit"}function Ot(e){return e.hook_event_name==="SessionStart"||e.hook_event_name==="SessionEnd"}function At(e){return e.hook_event_name==="SubagentStart"||e.hook_event_name==="SubagentStop"}function kt(e){return e.hook_event_name==="Stop"}function wt(e){return e.hook_event_name==="PermissionRequest"||e.hook_event_name==="PermissionDenied"}var $n=new Set(["Notification","TaskCreated","TaskCompleted"]);function xt(e){return $n.has(e.hook_event_name)}var zt=O(T());var Rt=O(T()),Gn=1e4,qn="pinta-cc/1.
|
|
21
|
-
`)}function se(e){return k(e)==="ENOENT"||k(e)==="ENOTDIR"}function Wn(){let e=process.env.CLAUDE_CODE_EXECPATH,t=process.platform==="win32"?["claude.exe","claude.cmd"]:["claude"],n;if(e)n=[e];else{let r=(process.env.PATH??"").split(m.delimiter).filter(o=>m.isAbsolute(o));try{r.push(m.join(Xn.homedir(),".local","bin"))}catch(o){E(`native install directory lookup failed (${k(o)})`)}n=r.flatMap(o=>t.map(i=>m.join(o,i)))}for(let r of new Set(n))try{let o=v.realpathSync(r),i=v.statSync(o);if(!i.isFile())continue;return!e&&process.platform!=="win32"&&v.accessSync(o,v.constants.X_OK),{file:o,fingerprint:Yn("sha256").update(JSON.stringify([o,i.ino,i.size,i.mtimeMs,i.ctimeMs])).digest("hex")}}catch(o){se(o)||E(`executable lookup failed (${k(o)})`)}return E(e?"configured executable is unavailable":"no Claude executable found in PATH or ~/.local/bin"),null}function ke(e){let t;try{t=JSON.parse(v.readFileSync(e,"utf8"))}catch(n){return se(n)||E(`package metadata could not be read (${n instanceof SyntaxError?"INVALID_JSON":k(n)})`),null}return typeof t!="object"||t===null||!("name"in t)||!("version"in t)||typeof t.name!="string"||typeof t.version!="string"||!It.test(t.version)?null:t.name==="@anthropic-ai/claude-code"||t.name.startsWith("@anthropic-ai/claude-code-")?t.version:null}function Qn(e){let t=m.dirname(e),n=m.basename(t)===".bin"&&/^claude(?:\.cmd)?$/i.test(m.basename(e));for(let r=0;r<6;r++){let o=ke(m.join(t,"package.json"));if(o)return o;if(m.basename(e).toLowerCase()==="claude.cmd"&&r===0){let a=ke(m.join(t,"node_modules","@anthropic-ai","claude-code","package.json"));if(a)return a}if(n&&m.basename(t)==="node_modules"){let a=ke(m.join(t,"@anthropic-ai","claude-code","package.json"));if(a)return a}let i=m.dirname(t);if(i===t)break;t=i}return null}function er(e){return typeof e=="object"&&e!==null&&"fingerprint"in e&&typeof e.fingerprint=="string"&&/^[0-9a-f]{64}$/.test(e.fingerprint)&&"version"in e&&(e.version===null||typeof e.version=="string"&&It.test(e.version))&&"checkedAt"in e&&typeof e.checkedAt=="number"&&Number.isFinite(e.checkedAt)}function jt(e,t){let n=t-e.checkedAt;return n>=0&&n<(e.version===null?Jn:Zn)}function tr(e){if(!e)return[];let t=m.join(e,Ct);try{if(v.statSync(t).size>16384)return E("oversized version cache ignored"),[];let n=JSON.parse(v.readFileSync(t,"utf8"));if(Array.isArray(n)&&n.length<=we&&n.every(er))return n;E("invalid version cache ignored")}catch(n){se(n)||E(`version cache read failed (${n instanceof SyntaxError?"INVALID_JSON":k(n)})`)}return[]}function Nt(e){for(B.delete(e.fingerprint),B.set(e.fingerprint,e);B.size>we;){let t=B.keys().next().value;t!==void 0&&B.delete(t)}}function nr(e,t){if(!e)return;let n=m.join(e,Ct),r=`${n}.${process.pid}.${zn()}.tmp`;try{v.mkdirSync(e,{recursive:!0,mode:448}),v.writeFileSync(r,JSON.stringify(t),{encoding:"utf8",mode:384,flag:"wx"}),v.renameSync(r,n)}catch(o){E(`version cache write failed (${k(o)})`)}finally{try{v.unlinkSync(r)}catch(o){se(o)||E(`temporary version cache cleanup failed (${k(o)})`)}}}function rr(e){if(/\.(cmd|bat|ps1)$/i.test(e))return E("command shim has no readable Claude package metadata"),null;let t=Vn(e,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:!1,windowsHide:!0,timeout:Hn,killSignal:"SIGKILL",maxBuffer:4096});if(t.error||t.status!==0)return E(`version probe failed (${t.error?k(t.error):`exit ${t.status??t.signal}`})`),null;let n=Kn.exec(t.stdout.trim())?.[1];return n||(E("version probe did not identify Claude Code"),null)}function Ut(e){let t=Wn();if(!t)return"unknown";let n=Qn(t.file);if(n)return n;let r=Date.now(),o=tr(e),i=[B.get(t.fingerprint),...o].find(c=>c&&c.fingerprint===t.fingerprint&&jt(c,r));if(i)return Nt(i),i.version??"unknown";let a={fingerprint:t.fingerprint,version:rr(t.file),checkedAt:Date.now()};return Nt(a),nr(e,[...o.filter(c=>c.fingerprint!==a.fingerprint&&jt(c,a.checkedAt)),a].slice(-we)),a.version??"unknown"}import C from"node:path";import w from"node:fs";import Bt from"node:path";var or=new Set(["","unknown","undefined","null","n/a","none","auto","default"]),ir=256*1024,sr=1024*1024,ar=4096;function I(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function xe(e){let t=I(e),n=t?"id"in t?t.id:t.name:e;if(typeof n!="string")return;let r=n.trim();if(!(r.startsWith("{")||r.startsWith("[")))return r.length<=512&&!/[\u0000-\u001f\u007f]/.test(r)&&!or.has(r.toLowerCase())?r:void 0}function Lt(e,t){delete e.model,t&&(e.model=t.name,!(t.source==="hook.model"&&e.model_source!==void 0)&&(e.model_source!==void 0&&(e.model_original_source=e.model_source),e.model_source=t.source))}function L(e){return typeof e=="string"&&/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,255}$/.test(e)?e:void 0}function ae(e){let t=typeof e=="number"?e:typeof e=="string"&&/^\d{4}-\d{2}-\d{2}T/.test(e)?Date.parse(e):NaN;return Number.isFinite(t)&&t>=0?t:void 0}function Ft(e,t){let n=e.timestamp===void 0?ae(t):ae(e.timestamp);return n!==void 0&&n<=t?n:void 0}function $t(e){if(typeof e!="string"||e.length>4096||/[\u0000-\u001f]/.test(e)||!Bt.isAbsolute(e)||Bt.extname(e)!==".jsonl")return;let t;try{t=w.openSync(e,w.constants.O_RDONLY|w.constants.O_NONBLOCK|(w.constants.O_NOFOLLOW??0));let n=w.fstatSync(t);if(!n.isFile()||!Number.isSafeInteger(n.size)||n.size<=0)return;let r=Buffer.alloc(Math.min(n.size,ir));if(w.readSync(t,r,0,r.length,0)!==r.length)return;let o=r.indexOf(10),i;if(o>=0)try{i=I(JSON.parse(r.toString("utf8",0,o)))}catch{}let a=Math.max(0,n.size-sr),c=n.size<=r.length?r:Buffer.alloc(n.size-a);if(c!==r&&w.readSync(t,c,0,c.length,a)!==c.length)return;let u=w.fstatSync(t);if(u.size<n.size||u.size===n.size&&u.mtimeMs!==n.mtimeMs)return;let l=a>0?c.indexOf(10)+1:0,p=c.lastIndexOf(10);if(a>0&&l===0||p<l)return;let x=[],b=0;for(;p>l&&b<ar;){let H=c.lastIndexOf(10,p-1),$=Math.max(l,H+1),Me=c.toString("utf8",$,p).trim();if(Me){let je=I(JSON.parse(Me));je&&x.push(je)}p=$-1,b++}return x.reverse(),{first:i,rows:x,complete:a===0&&p<0&&c[c.length-1]===10}}catch{return}finally{if(t!==void 0)try{w.closeSync(t)}catch{}}}function Gt(e){let t=e[0];return t&&e.every(n=>n?.name===t.name)?t:void 0}var cr=new Set(["PreToolUse","PostToolUse","PostToolUseFailure","PermissionRequest","PermissionDenied"]);function ur(e,t){let n=C.dirname(e);if(C.basename(n)!=="subagents"||C.basename(C.dirname(n))!==t)return;let r=/^agent-(.+)\.jsonl$/.exec(C.basename(e));return L(r?.[1])}function qt(e,t){let n=xe(e.model);if(n)return{name:n,source:"hook.model"};try{return lr(e,t)}catch{return}}function lr(e,t){if(!cr.has(e.hook_event_name))return;let n=L(e.session_id),r=L(e.tool_use_id),o=Ft(e,t);if(!n||!r||o===void 0||typeof e.transcript_path!="string")return;let i=ur(e.transcript_path,n),a=e.agent_id===void 0?i:L(e.agent_id);if(e.agent_id!==void 0&&!a||i!==void 0&&i!==a||!a&&e.agent_type!==void 0||C.basename(C.dirname(e.transcript_path))==="subagents"&&!i)return;let c=$t(e.transcript_path);if(!c)return;let u=[];for(let l of c.rows){let p=ae(l.timestamp);if(l.type!=="assistant"||l.sessionId!==n||p===void 0||p>o)continue;let x=l.agentId===void 0?void 0:L(l.agentId);if(x!==a||l.agentId!==void 0&&!x||l.isSidechain===!0&&!a)continue;let b=I(l.message);if(!b||b.role!==void 0&&b.role!=="assistant"||!Array.isArray(b.content)||!b.content.some($=>I($)?.type==="tool_use"&&I($)?.id===r))continue;let H=xe(b.model);u.push(H?{name:H,source:"transcript.assistant.message"}:void 0)}return Gt(u)}var F=O(T()),ce;function fr(){if(ce===void 0)try{ce=Re.userInfo().username}catch{ce=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return ce}var Vt="1.
|
|
20
|
+
`)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.indexOf("=");if(o<0)continue;let i=r.slice(0,o).trim(),a=r.slice(o+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),i&&(t[i]=a)}return t}function Ln(e){let t;try{t=Cn.default.readFileSync(e,"utf-8")}catch{return}let n=dt(t);for(let[r,o]of Object.entries(n))process.env[r]===void 0&&(process.env[r]=o)}});var T=S(s=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0});s.loadEnvFile=s.parseEnvFile=s.envFilePath=s.MemorySessionTraceManager=s.DiskSessionTraceManager=s.generateUlid=s.TraceManager=s.MAX_POST_BYTES=s.parseHeadersEnv=s.envOptionsResolver=s.postOtlp=s.MemoryTransport=s.DiskTransport=s.MemoryRetryQueue=s.DiskRetryQueue=s.GUARD_BUDGET_HEADER=s.GUARD_STATUS_REFUSED=s.evaluateGuard=s.MAX_SPAN_BYTES=s.enforceSpanBudget=s.mergeBatch=s.attachGuard=s.buildPayload=s.clientAttrs=s.guardAttrs=s.attrsFromRecord=s.toOtlpValue=s.snakeCase=s.newSpanId=s.ulidToTraceId=s.MAX_BYTES=s.PATTERNS=s.applyMatches=s.resolveOverlaps=s.collectMatches=s.truncateTo=s.truncate=s.redact=void 0;var M=le();Object.defineProperty(s,"redact",{enumerable:!0,get:function(){return M.redact}});Object.defineProperty(s,"truncate",{enumerable:!0,get:function(){return M.truncate}});Object.defineProperty(s,"truncateTo",{enumerable:!0,get:function(){return M.truncateTo}});Object.defineProperty(s,"collectMatches",{enumerable:!0,get:function(){return M.collectMatches}});Object.defineProperty(s,"resolveOverlaps",{enumerable:!0,get:function(){return M.resolveOverlaps}});Object.defineProperty(s,"applyMatches",{enumerable:!0,get:function(){return M.applyMatches}});Object.defineProperty(s,"PATTERNS",{enumerable:!0,get:function(){return M.PATTERNS}});Object.defineProperty(s,"MAX_BYTES",{enumerable:!0,get:function(){return M.MAX_BYTES}});var y=de();Object.defineProperty(s,"ulidToTraceId",{enumerable:!0,get:function(){return y.ulidToTraceId}});Object.defineProperty(s,"newSpanId",{enumerable:!0,get:function(){return y.newSpanId}});Object.defineProperty(s,"snakeCase",{enumerable:!0,get:function(){return y.snakeCase}});Object.defineProperty(s,"toOtlpValue",{enumerable:!0,get:function(){return y.toOtlpValue}});Object.defineProperty(s,"attrsFromRecord",{enumerable:!0,get:function(){return y.attrsFromRecord}});Object.defineProperty(s,"guardAttrs",{enumerable:!0,get:function(){return y.guardAttrs}});Object.defineProperty(s,"clientAttrs",{enumerable:!0,get:function(){return y.clientAttrs}});Object.defineProperty(s,"buildPayload",{enumerable:!0,get:function(){return y.buildPayload}});Object.defineProperty(s,"attachGuard",{enumerable:!0,get:function(){return y.attachGuard}});Object.defineProperty(s,"mergeBatch",{enumerable:!0,get:function(){return y.mergeBatch}});Object.defineProperty(s,"enforceSpanBudget",{enumerable:!0,get:function(){return y.enforceSpanBudget}});Object.defineProperty(s,"MAX_SPAN_BYTES",{enumerable:!0,get:function(){return y.MAX_SPAN_BYTES}});var Oe=He();Object.defineProperty(s,"evaluateGuard",{enumerable:!0,get:function(){return Oe.evaluateGuard}});Object.defineProperty(s,"GUARD_STATUS_REFUSED",{enumerable:!0,get:function(){return Oe.GUARD_STATUS_REFUSED}});Object.defineProperty(s,"GUARD_BUDGET_HEADER",{enumerable:!0,get:function(){return Oe.GUARD_BUDGET_HEADER}});var mt=ge();Object.defineProperty(s,"DiskRetryQueue",{enumerable:!0,get:function(){return mt.DiskRetryQueue}});Object.defineProperty(s,"MemoryRetryQueue",{enumerable:!0,get:function(){return mt.MemoryRetryQueue}});var U=rt();Object.defineProperty(s,"DiskTransport",{enumerable:!0,get:function(){return U.DiskTransport}});Object.defineProperty(s,"MemoryTransport",{enumerable:!0,get:function(){return U.MemoryTransport}});Object.defineProperty(s,"postOtlp",{enumerable:!0,get:function(){return U.postOtlp}});Object.defineProperty(s,"envOptionsResolver",{enumerable:!0,get:function(){return U.envOptionsResolver}});Object.defineProperty(s,"parseHeadersEnv",{enumerable:!0,get:function(){return U.parseHeadersEnv}});Object.defineProperty(s,"MAX_POST_BYTES",{enumerable:!0,get:function(){return U.MAX_POST_BYTES}});var gt=ve();Object.defineProperty(s,"TraceManager",{enumerable:!0,get:function(){return gt.TraceManager}});Object.defineProperty(s,"generateUlid",{enumerable:!0,get:function(){return gt.generateUlid}});var ht=lt();Object.defineProperty(s,"DiskSessionTraceManager",{enumerable:!0,get:function(){return ht.DiskSessionTraceManager}});Object.defineProperty(s,"MemorySessionTraceManager",{enumerable:!0,get:function(){return ht.MemorySessionTraceManager}});var Ae=pt();Object.defineProperty(s,"envFilePath",{enumerable:!0,get:function(){return Ae.envFilePath}});Object.defineProperty(s,"parseEnvFile",{enumerable:!0,get:function(){return Ae.parseEnvFile}});Object.defineProperty(s,"loadEnvFile",{enumerable:!0,get:function(){return Ae.loadEnvFile}})});import{realpathSync as Rr}from"node:fs";import{pathToFileURL as Dr}from"node:url";var V=O(T());function Fn(){return(0,V.envFilePath)(".claude","pinta-cc.env")}function _t(e=Fn()){(0,V.loadEnvFile)(e)}function yt(){process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT&&!process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT&&(process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=process.env.CLAUDE_PLUGIN_OPTION_ENDPOINT),process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&!process.env.OTEL_EXPORTER_OTLP_HEADERS&&(process.env.OTEL_EXPORTER_OTLP_HEADERS=`x-pinta-relay-token=${process.env.CLAUDE_PLUGIN_OPTION_API_KEY}`),!process.env.PINTA_RELAY_TOKEN&&process.env.CLAUDE_PLUGIN_OPTION_API_KEY&&(process.env.PINTA_RELAY_TOKEN=process.env.CLAUDE_PLUGIN_OPTION_API_KEY)}var Pt=O(T());import Et from"path";function vt(){let e=process.env.CLAUDE_PLUGIN_ROOT||process.cwd(),t=process.env.CLAUDE_PLUGIN_DATA||Et.join(e,".plugin-data");return{pluginRoot:e,pluginData:t,tracePath:Et.join(t,"trace.json")}}function ne(){return(0,Pt.envOptionsResolver)()!==null}function St(e){return e.hook_event_name==="PreToolUse"}function Tt(e){return e.hook_event_name==="PostToolUse"||e.hook_event_name==="PostToolUseFailure"}function bt(e){return e.hook_event_name==="UserPromptSubmit"}function Ot(e){return e.hook_event_name==="SessionStart"||e.hook_event_name==="SessionEnd"}function At(e){return e.hook_event_name==="SubagentStart"||e.hook_event_name==="SubagentStop"}function kt(e){return e.hook_event_name==="Stop"}function wt(e){return e.hook_event_name==="PermissionRequest"||e.hook_event_name==="PermissionDenied"}var $n=new Set(["Notification","TaskCreated","TaskCompleted"]);function xt(e){return $n.has(e.hook_event_name)}var zt=O(T());var Rt=O(T()),Gn=1e4,qn="pinta-cc/1.10.1";function re(e,t){return(0,Rt.evaluateGuard)(e,t,{timeoutMs:Gn,token:process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:qn})}var Y=O(T());var Dt=O(T()),oe=class extends Dt.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-cc"})}};var Mt=O(T()),ie=class extends Mt.TraceManager{constructor(t){super(t.tracePath)}};import Re from"os";import{spawnSync as Vn}from"node:child_process";import{createHash as Yn,randomUUID as zn}from"node:crypto";import v from"node:fs";import Xn from"node:os";import m from"node:path";var It=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/,Kn=/^v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)\s+\(Claude Code\)$/m,Hn=2e3,Zn=24*60*60*1e3,Jn=3e4,we=8,Ct="claude-version.json",B=new Map;function k(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"?e.code:"UNKNOWN"}function E(e){process.stderr.write(`[pinta-cc] CLI version: ${e}
|
|
21
|
+
`)}function se(e){return k(e)==="ENOENT"||k(e)==="ENOTDIR"}function Wn(){let e=process.env.CLAUDE_CODE_EXECPATH,t=process.platform==="win32"?["claude.exe","claude.cmd"]:["claude"],n;if(e)n=[e];else{let r=(process.env.PATH??"").split(m.delimiter).filter(o=>m.isAbsolute(o));try{r.push(m.join(Xn.homedir(),".local","bin"))}catch(o){E(`native install directory lookup failed (${k(o)})`)}n=r.flatMap(o=>t.map(i=>m.join(o,i)))}for(let r of new Set(n))try{let o=v.realpathSync(r),i=v.statSync(o);if(!i.isFile())continue;return!e&&process.platform!=="win32"&&v.accessSync(o,v.constants.X_OK),{file:o,fingerprint:Yn("sha256").update(JSON.stringify([o,i.ino,i.size,i.mtimeMs,i.ctimeMs])).digest("hex")}}catch(o){se(o)||E(`executable lookup failed (${k(o)})`)}return E(e?"configured executable is unavailable":"no Claude executable found in PATH or ~/.local/bin"),null}function ke(e){let t;try{t=JSON.parse(v.readFileSync(e,"utf8"))}catch(n){return se(n)||E(`package metadata could not be read (${n instanceof SyntaxError?"INVALID_JSON":k(n)})`),null}return typeof t!="object"||t===null||!("name"in t)||!("version"in t)||typeof t.name!="string"||typeof t.version!="string"||!It.test(t.version)?null:t.name==="@anthropic-ai/claude-code"||t.name.startsWith("@anthropic-ai/claude-code-")?t.version:null}function Qn(e){let t=m.dirname(e),n=m.basename(t)===".bin"&&/^claude(?:\.cmd)?$/i.test(m.basename(e));for(let r=0;r<6;r++){let o=ke(m.join(t,"package.json"));if(o)return o;if(m.basename(e).toLowerCase()==="claude.cmd"&&r===0){let a=ke(m.join(t,"node_modules","@anthropic-ai","claude-code","package.json"));if(a)return a}if(n&&m.basename(t)==="node_modules"){let a=ke(m.join(t,"@anthropic-ai","claude-code","package.json"));if(a)return a}let i=m.dirname(t);if(i===t)break;t=i}return null}function er(e){return typeof e=="object"&&e!==null&&"fingerprint"in e&&typeof e.fingerprint=="string"&&/^[0-9a-f]{64}$/.test(e.fingerprint)&&"version"in e&&(e.version===null||typeof e.version=="string"&&It.test(e.version))&&"checkedAt"in e&&typeof e.checkedAt=="number"&&Number.isFinite(e.checkedAt)}function jt(e,t){let n=t-e.checkedAt;return n>=0&&n<(e.version===null?Jn:Zn)}function tr(e){if(!e)return[];let t=m.join(e,Ct);try{if(v.statSync(t).size>16384)return E("oversized version cache ignored"),[];let n=JSON.parse(v.readFileSync(t,"utf8"));if(Array.isArray(n)&&n.length<=we&&n.every(er))return n;E("invalid version cache ignored")}catch(n){se(n)||E(`version cache read failed (${n instanceof SyntaxError?"INVALID_JSON":k(n)})`)}return[]}function Nt(e){for(B.delete(e.fingerprint),B.set(e.fingerprint,e);B.size>we;){let t=B.keys().next().value;t!==void 0&&B.delete(t)}}function nr(e,t){if(!e)return;let n=m.join(e,Ct),r=`${n}.${process.pid}.${zn()}.tmp`;try{v.mkdirSync(e,{recursive:!0,mode:448}),v.writeFileSync(r,JSON.stringify(t),{encoding:"utf8",mode:384,flag:"wx"}),v.renameSync(r,n)}catch(o){E(`version cache write failed (${k(o)})`)}finally{try{v.unlinkSync(r)}catch(o){se(o)||E(`temporary version cache cleanup failed (${k(o)})`)}}}function rr(e){if(/\.(cmd|bat|ps1)$/i.test(e))return E("command shim has no readable Claude package metadata"),null;let t=Vn(e,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"],shell:!1,windowsHide:!0,timeout:Hn,killSignal:"SIGKILL",maxBuffer:4096});if(t.error||t.status!==0)return E(`version probe failed (${t.error?k(t.error):`exit ${t.status??t.signal}`})`),null;let n=Kn.exec(t.stdout.trim())?.[1];return n||(E("version probe did not identify Claude Code"),null)}function Ut(e){let t=Wn();if(!t)return"unknown";let n=Qn(t.file);if(n)return n;let r=Date.now(),o=tr(e),i=[B.get(t.fingerprint),...o].find(c=>c&&c.fingerprint===t.fingerprint&&jt(c,r));if(i)return Nt(i),i.version??"unknown";let a={fingerprint:t.fingerprint,version:rr(t.file),checkedAt:Date.now()};return Nt(a),nr(e,[...o.filter(c=>c.fingerprint!==a.fingerprint&&jt(c,a.checkedAt)),a].slice(-we)),a.version??"unknown"}import C from"node:path";import w from"node:fs";import Bt from"node:path";var or=new Set(["","unknown","undefined","null","n/a","none","auto","default"]),ir=256*1024,sr=1024*1024,ar=4096;function I(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}function xe(e){let t=I(e),n=t?"id"in t?t.id:t.name:e;if(typeof n!="string")return;let r=n.trim();if(!(r.startsWith("{")||r.startsWith("[")))return r.length<=512&&!/[\u0000-\u001f\u007f]/.test(r)&&!or.has(r.toLowerCase())?r:void 0}function Lt(e,t){delete e.model,t&&(e.model=t.name,!(t.source==="hook.model"&&e.model_source!==void 0)&&(e.model_source!==void 0&&(e.model_original_source=e.model_source),e.model_source=t.source))}function L(e){return typeof e=="string"&&/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,255}$/.test(e)?e:void 0}function ae(e){let t=typeof e=="number"?e:typeof e=="string"&&/^\d{4}-\d{2}-\d{2}T/.test(e)?Date.parse(e):NaN;return Number.isFinite(t)&&t>=0?t:void 0}function Ft(e,t){let n=e.timestamp===void 0?ae(t):ae(e.timestamp);return n!==void 0&&n<=t?n:void 0}function $t(e){if(typeof e!="string"||e.length>4096||/[\u0000-\u001f]/.test(e)||!Bt.isAbsolute(e)||Bt.extname(e)!==".jsonl")return;let t;try{t=w.openSync(e,w.constants.O_RDONLY|w.constants.O_NONBLOCK|(w.constants.O_NOFOLLOW??0));let n=w.fstatSync(t);if(!n.isFile()||!Number.isSafeInteger(n.size)||n.size<=0)return;let r=Buffer.alloc(Math.min(n.size,ir));if(w.readSync(t,r,0,r.length,0)!==r.length)return;let o=r.indexOf(10),i;if(o>=0)try{i=I(JSON.parse(r.toString("utf8",0,o)))}catch{}let a=Math.max(0,n.size-sr),c=n.size<=r.length?r:Buffer.alloc(n.size-a);if(c!==r&&w.readSync(t,c,0,c.length,a)!==c.length)return;let u=w.fstatSync(t);if(u.size<n.size||u.size===n.size&&u.mtimeMs!==n.mtimeMs)return;let l=a>0?c.indexOf(10)+1:0,p=c.lastIndexOf(10);if(a>0&&l===0||p<l)return;let x=[],b=0;for(;p>l&&b<ar;){let H=c.lastIndexOf(10,p-1),$=Math.max(l,H+1),Me=c.toString("utf8",$,p).trim();if(Me){let je=I(JSON.parse(Me));je&&x.push(je)}p=$-1,b++}return x.reverse(),{first:i,rows:x,complete:a===0&&p<0&&c[c.length-1]===10}}catch{return}finally{if(t!==void 0)try{w.closeSync(t)}catch{}}}function Gt(e){let t=e[0];return t&&e.every(n=>n?.name===t.name)?t:void 0}var cr=new Set(["PreToolUse","PostToolUse","PostToolUseFailure","PermissionRequest","PermissionDenied"]);function ur(e,t){let n=C.dirname(e);if(C.basename(n)!=="subagents"||C.basename(C.dirname(n))!==t)return;let r=/^agent-(.+)\.jsonl$/.exec(C.basename(e));return L(r?.[1])}function qt(e,t){let n=xe(e.model);if(n)return{name:n,source:"hook.model"};try{return lr(e,t)}catch{return}}function lr(e,t){if(!cr.has(e.hook_event_name))return;let n=L(e.session_id),r=L(e.tool_use_id),o=Ft(e,t);if(!n||!r||o===void 0||typeof e.transcript_path!="string")return;let i=ur(e.transcript_path,n),a=e.agent_id===void 0?i:L(e.agent_id);if(e.agent_id!==void 0&&!a||i!==void 0&&i!==a||!a&&e.agent_type!==void 0||C.basename(C.dirname(e.transcript_path))==="subagents"&&!i)return;let c=$t(e.transcript_path);if(!c)return;let u=[];for(let l of c.rows){let p=ae(l.timestamp);if(l.type!=="assistant"||l.sessionId!==n||p===void 0||p>o)continue;let x=l.agentId===void 0?void 0:L(l.agentId);if(x!==a||l.agentId!==void 0&&!x||l.isSidechain===!0&&!a)continue;let b=I(l.message);if(!b||b.role!==void 0&&b.role!=="assistant"||!Array.isArray(b.content)||!b.content.some($=>I($)?.type==="tool_use"&&I($)?.id===r))continue;let H=xe(b.model);u.push(H?{name:H,source:"transcript.assistant.message"}:void 0)}return Gt(u)}var F=O(T()),ce;function fr(){if(ce===void 0)try{ce=Re.userInfo().username}catch{ce=process.env.USER??process.env.LOGNAME??(typeof process.getuid=="function"?String(process.getuid()):"unknown")}return ce}var Vt="1.10.1",dr=new Set(["cc.hook","cc.tool_name","cc.tool_use_id","cc.session_id","cc.transcript_path","cc.cwd","cc.permission_mode"]),pr=new Set(["cc.tool_input","cc.tool_response"]),mr={skipRedactKeys:dr,bashContextKeys:pr};function gr(e,t){let n=[];n.push({key:"ingest.type",value:{stringValue:"cc"}}),n.push({key:"cc.hook",value:{stringValue:e.hook_event_name}});let r={};for(let[o,i]of Object.entries(e))o!=="hook_event_name"&&(r[o]=i);return Lt(r,qt(e,t)),n.push(...(0,F.attrsFromRecord)(r,"cc",mr)),n}function hr(e){return[{key:"service.name",value:{stringValue:"claude-code"}},{key:"service.version",value:{stringValue:Ut(e)}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-cc"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:Vt}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:fr()}},{key:"host.name",value:{stringValue:Re.hostname()}},{key:"host.arch",value:{stringValue:Re.arch()}}]}function Yt(e){let t=e.now??Date.now();return(0,F.buildPayload)({traceId:e.traceId,spanName:`cc.${(0,F.snakeCase)(e.event.hook_event_name)}`,attributes:gr(e.event,t),resource:hr(e.versionCacheDir),scope:{name:"pinta-cc",version:Vt},now:t})}function z(e,t,n={}){let r=new ie(t),o=n.traceMode==="new"?r.newTrace():r.currentTrace();return Yt({event:e,traceId:o,versionCacheDir:t.pluginData})}async function X(e,t){if(!ne())return;let n=new oe(t);await n.flush(),await n.send(e)}function ue(e,t){if(!ne())return;let n=Buffer.byteLength(JSON.stringify(e),"utf-8");if(n>Y.MAX_POST_BYTES){process.stderr.write(`[pinta-cc] dropping oversized span payload (${n} > ${Y.MAX_POST_BYTES} bytes) \u2014 undeliverable, not queued
|
|
22
22
|
`);return}new Y.DiskRetryQueue(t.pluginData,"pinta-cc").enqueue(e)}async function P(e,t,n={}){ne()&&await X(z(e,t,n),t)}async function Xt(e,t){let n=z(e,t),r=await re(n,process.env.PINTA_GUARD_ENDPOINT);if(r?.decision==="DENY"){let i={hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:r.userMessage??r.reason??"guard_deny"}};process.stdout.write(JSON.stringify(i)+`
|
|
23
23
|
`)}try{if((0,zt.attachGuard)(n,r),r?.decision==="DENY")return ue(n,t),0;await X(n,t)}catch(o){process.stderr.write(`[pinta-cc] telemetry emit failed: ${o}
|
|
24
24
|
`)}return 0}var Kt=O(T());async function Ht(e,t){if(e.hook_event_name==="PostToolUseFailure")return await P(e,t),0;let n=z(e,t),r=await re(n,process.env.PINTA_GUARD_ENDPOINT);r?.decision==="DENY"&&process.stdout.write(JSON.stringify({continue:!1,stopReason:"Pinta blocked this tool output. Start a new session before continuing."})+`
|