@pinta-ai/pinta-gemini 0.5.0 → 0.6.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 +10 -10
- package/dist/index.mjs +16 -0
- package/package.json +12 -2
package/dist/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { createRequire as __pintaCreateRequire } from 'module'; const require = __pintaCreateRequire(import.meta.url);
|
|
2
|
-
var
|
|
2
|
+
var rt=Object.create;var ie=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var ot=Object.getPrototypeOf,st=Object.prototype.hasOwnProperty;var p=(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 g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var at=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of it(t))!st.call(e,i)&&i!==r&&ie(e,i,{get:()=>t[i],enumerable:!(n=nt(t,i))||n.enumerable});return e};var T=(e,t,r)=>(r=e!=null?rt(ot(e)):{},at(t||!e||!e.__esModule?ie(r,"default",{value:e,enumerable:!0}):r,e));var C=g(c=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});c.PATTERNS=c.MAX_BYTES=void 0;c.truncate=ut;c.collectMatches=oe;c.resolveOverlaps=se;c.applyMatches=ae;c.redact=ct;c.MAX_BYTES=102400;function ut(e){let t=Buffer.from(e,"utf-8");return t.length<=c.MAX_BYTES?e:`${t.subarray(0,c.MAX_BYTES).toString("utf-8")}\u2026[TRUNCATED:${t.length}]`}c.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 oe(e,t){let r=[];for(let n of c.PATTERNS){if(n.requireContext&&n.requireContext!==t.context)continue;let i=new RegExp(n.regex.source,n.regex.flags),s;for(;(s=i.exec(e))!==null;){let a=n.captureGroup??0,u=s[a];if(u===void 0){s.index===i.lastIndex&&i.lastIndex++;continue}let f=s.index,x=s.index+s[0].length,M=f+s[0].indexOf(u),q=M+u.length;r.push({start:f,end:x,replaceStart:M,replaceEnd:q,type:n.type}),s.index===i.lastIndex&&i.lastIndex++}}return r}function se(e){let t=[...e].sort((i,s)=>i.start!==s.start?i.start-s.start:s.end-s.start-(i.end-i.start)),r=[],n=-1;for(let i of t)i.start<n||(r.push(i),n=i.end);return r}function ae(e,t){let r=[...t].sort((i,s)=>s.replaceStart-i.replaceStart),n=e;for(let i of r)n=n.slice(0,i.replaceStart)+`[REDACTED:${i.type}]`+n.slice(i.replaceEnd);return n}function ct(e,t={}){if(e.length===0)return e;let r=oe(e,t);if(r.length===0)return e;let n=se(r);return ae(e,n)}});var $=g(d=>{"use strict";var lt=d&&d.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(d,"__esModule",{value:!0});d.ulidToTraceId=le;d.newSpanId=de;d.snakeCase=ft;d.toOtlpValue=pe;d.attrsFromRecord=gt;d.guardAttrs=fe;d.clientAttrs=ge;d.buildPayload=yt;d.mergeBatch=ht;var dt=lt(p("crypto")),ue=C(),pt="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function le(e){if(e.length!==26)throw new Error(`ulidToTraceId: expected 26 chars, got ${e.length}`);let t=0n;for(let n of e){let i=pt.indexOf(n);if(i<0)throw new Error(`ulidToTraceId: invalid Crockford char "${n}"`);t=t<<5n|BigInt(i)}let r=(1n<<128n)-1n;return t&=r,t.toString(16).padStart(32,"0")}function de(){return dt.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 ce=new Set;function R(e,t,r){let n=(0,ue.truncate)(t);if((r.skipRedactKeys??ce).has(e))return n;let i=(r.bashContextKeys??ce).has(e)?"bash":void 0;return(0,ue.redact)(n,{context:i})}function pe(e,t,r={}){if(t==null)return null;switch(typeof t){case"string":return{stringValue:R(e,t,r)};case"boolean":return{boolValue:t};case"number":return Number.isInteger(t)?{intValue:t}:{doubleValue:t};case"object":try{return{stringValue:R(e,JSON.stringify(t),r)}}catch{return{stringValue:R(e,String(t),r)}}default:return{stringValue:R(e,String(t),r)}}}function gt(e,t,r={}){let n=[];for(let[i,s]of Object.entries(e)){let a=`${t}.${i}`,u=pe(a,s,r);u!==null&&n.push({key:a,value:u})}return n}function fe(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 ge(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}}]}function yt(e){let t=e.now??Date.now(),r=(BigInt(t)*1000000n).toString(),n=[...e.attributes];e.guard&&n.push(...fe(e.guard));let i=e.clientTiming??(e.guard?.clientRttMs!==void 0?{op:"guard",rttMs:e.guard.clientRttMs}:null);i&&n.push(...ge(i));let s={traceId:le(e.traceId),spanId:de(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:r,endTimeUnixNano:r,attributes:n};return{resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[s]}]}]}}function ht(e){let t=[];for(let r of e)t.push(...r.resourceSpans);return{resourceSpans:t}}});var he=g(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.evaluateGuard=Pt;var mt=1e4,_t="pinta-core";function ye(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}function vt(e){return new Promise((t,r)=>setTimeout(()=>{let n=new Error("Guard request timed out");n.name="TimeoutError",r(n)},e))}async function Pt(e,t,r={}){if(!t||r.disabled)return null;let n=r.timeoutMs??mt,i=Date.now();try{let s=await Promise.race([fetch(t,{method:"POST",headers:{"content-type":"application/json","user-agent":r.userAgent??_t,"x-pinta-relay-token":r.token??""},body:JSON.stringify({input:e})}),vt(n)]);if(s.status!==200)return ye(Date.now()-i,"error");let a=await s.json(),u=Date.now()-i;return{decision:a.decision,reason:a.reason,userMessage:a.userMessage??null,durationMs:a.durationMs??u,clientRttMs:u}}catch(s){let a=s.name==="TimeoutError"?"timeout":"error";return ye(Date.now()-i,a)}}});var U=g(_=>{"use strict";var me=_&&_.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(_,"__esModule",{value:!0});_.MemoryRetryQueue=_.DiskRetryQueue=void 0;var l=me(p("fs")),j=me(p("path")),D=1e3,Ot=50,Tt=5,L=class{filePath;lockPath;logPrefix;constructor(t,r){this.filePath=j.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=r}enqueue(t){try{l.default.mkdirSync(j.default.dirname(this.filePath),{recursive:!0});let r=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
|
|
3
3
|
`;l.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=l.default.readFileSync(this.filePath,"utf-8"),r=[];for(let n of t.split(`
|
|
5
5
|
`))if(n.trim())try{r.push(JSON.parse(n))}catch{}return r}catch{return[]}}rewrite(t){try{if(t.length===0){l.default.existsSync(this.filePath)&&l.default.unlinkSync(this.filePath);return}l.default.mkdirSync(j.default.dirname(this.filePath),{recursive:!0}),l.default.writeFileSync(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();for(l.default.mkdirSync(j.default.dirname(this.lockPath),{recursive:!0});Date.now()-t<
|
|
9
|
-
`),!1;try{let
|
|
10
|
-
`),this.rewrite(t.slice(r))}};_.DiskRetryQueue=L;var V=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>D&&this.entries.splice(0,this.entries.length-D)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};_.MemoryRetryQueue=V});var Te=g(y=>{"use strict";Object.defineProperty(y,"__esModule",{value:!0});y.MemoryTransport=y.DiskTransport=void 0;y.parseHeadersEnv=Pe;y.envOptionsResolver=Oe;y.postOtlp=b;var _e=U(),ve=$(),
|
|
11
|
-
`),!1}return!0}catch(
|
|
12
|
-
`),!1}finally{clearTimeout(i)}}var B=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new _e.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??Oe}async send(t){let r=this.resolveOptions();if(!r)return;await b(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 n=(0,ve.mergeBatch)(r.map(
|
|
13
|
-
`)){let n=r.trim();if(!n||n.startsWith("#"))continue;let i=n.indexOf("=");if(i<0)continue;let
|
|
14
|
-
`)}catch{}}
|
|
15
|
-
`),r={}}We(a,{ts:new Date().toISOString(),pid:process.pid,agent:e,event:t,argv:process.argv.slice(2),received_payload:n,normalized:i??null,guard:
|
|
16
|
-
`),process.exit(0)}
|
|
8
|
+
`)}}tryAcquireLock(){let t=Date.now();for(l.default.mkdirSync(j.default.dirname(this.lockPath),{recursive:!0});Date.now()-t<Ot;)try{let r=l.default.openSync(this.lockPath,"wx");return l.default.writeSync(r,String(process.pid)),l.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 s=l.default.statSync(this.lockPath);if(Date.now()-s.mtimeMs>3e4){l.default.unlinkSync(this.lockPath);continue}}catch{}let n=Tt,i=Date.now()+n;for(;Date.now()<i;);}return!1}release(){try{l.default.unlinkSync(this.lockPath)}catch{}}trim(){let t=this.readAll();if(t.length<=D)return;let r=t.length-D;process.stderr.write(`[${this.logPrefix}] retry-queue full, dropping ${r} oldest entries
|
|
10
|
+
`),this.rewrite(t.slice(r))}};_.DiskRetryQueue=L;var V=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>D&&this.entries.splice(0,this.entries.length-D)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};_.MemoryRetryQueue=V});var Te=g(y=>{"use strict";Object.defineProperty(y,"__esModule",{value:!0});y.MemoryTransport=y.DiskTransport=void 0;y.parseHeadersEnv=Pe;y.envOptionsResolver=Oe;y.postOtlp=b;var _e=U(),ve=$(),Et=5e3;function Pe(e){if(!e)return{};if(typeof e=="object")return{...e};let t={};for(let r of e.split(",")){let[n,...i]=r.split("=");n&&i.length>0&&(t[n.trim()]=i.join("=").trim())}return t}function Oe(){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:Pe(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function b(e,t,r){let n=new AbortController,i=setTimeout(()=>n.abort(),Et);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 a="";try{a=(await s.text()).slice(0,200)}catch{}let u=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}${u}${a?` body=${a}`:""}
|
|
11
|
+
`),!1}return!0}catch(s){return process.stderr.write(`[${r}] OTLP POST failed: ${s.message??String(s)}
|
|
12
|
+
`),!1}finally{clearTimeout(i)}}var B=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new _e.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??Oe}async send(t){let r=this.resolveOptions();if(!r)return;await b(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 n=(0,ve.mergeBatch)(r.map(s=>s.payload));await b(n,t,this.logPrefix)&&this.queue.rewrite([])}finally{this.queue.release()}}};y.DiskTransport=B;var K=class{queue=new _e.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let r=this.resolveOptions();if(!r)return;await b(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 n=(0,ve.mergeBatch)(r);if(!await b(n,t,this.logPrefix))for(let s of r)this.queue.enqueue(s)}};y.MemoryTransport=K});var X=g(E=>{"use strict";var z=E&&E.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(E,"__esModule",{value:!0});E.TraceManager=void 0;E.generateUlid=Ee;var H=z(p("fs")),kt=z(p("path")),St=z(p("crypto")),Z="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Ee(){let e=Date.now(),t="",r=e;for(let s=0;s<10;s++)t=Z[r&31]+t,r=Math.floor(r/32);let n=St.default.randomBytes(10),i="";for(let s=0;s<10;s++)i+=Z[n[s]&31];for(;i.length<16;)i+=Z[0];return t+i}var Y=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=Ee();return this.save(t),t}currentTrace(){try{let t=H.default.readFileSync(this.tracePath,"utf-8"),{traceId:r}=JSON.parse(t);if(r)return r}catch{}return this.newTrace()}save(t){H.default.mkdirSync(kt.default.dirname(this.tracePath),{recursive:!0}),H.default.writeFileSync(this.tracePath,JSON.stringify({traceId:t}))}};E.TraceManager=Y});var we=g(v=>{"use strict";var ke=v&&v.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(v,"__esModule",{value:!0});v.MemorySessionTraceManager=v.DiskSessionTraceManager=void 0;var J=ke(p("fs")),bt=ke(p("path")),Se=X(),be=200,Q=class{tracePath;maxSessions;constructor(t,r={}){this.tracePath=t,this.maxSessions=r.maxSessions??be}read(){try{let t=JSON.parse(J.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{J.default.mkdirSync(bt.default.dirname(this.tracePath),{recursive:!0});let r=Object.entries(t),n=r.length>this.maxSessions?Object.fromEntries(r.slice(-this.maxSessions)):t;J.default.writeFileSync(this.tracePath,JSON.stringify(n))}catch{}}newTrace(t){let r=t||"default",n=(0,Se.generateUlid)(),i=this.read();return i[r]=n,this.write(i),n}currentTrace(t){let r=t||"default",n=this.read()[r];return n||this.newTrace(r)}};v.DiskSessionTraceManager=Q;var W=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??be}newTrace(t){let r=t||"default",n=(0,Se.generateUlid)();if(this.map.set(r,n),this.map.size>this.maxSessions){let i=this.map.keys().next().value;i!==void 0&&this.map.delete(i)}return n}currentTrace(t){let r=t||"default";return this.map.get(r)??this.newTrace(r)}};v.MemorySessionTraceManager=W});var xe=g(k=>{"use strict";var ee=k&&k.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(k,"__esModule",{value:!0});k.envFilePath=It;k.parseEnvFile=Ie;k.loadEnvFile=xt;var wt=ee(p("node:fs")),At=ee(p("node:os")),Ae=ee(p("node:path"));function It(e,t,r){let n=r?process.env[r]:void 0,i=n&&n.length>0?n:Ae.default.join(At.default.homedir(),e);return Ae.default.join(i,t)}function Ie(e){let t={};for(let r of e.split(`
|
|
13
|
+
`)){let n=r.trim();if(!n||n.startsWith("#"))continue;let i=n.indexOf("=");if(i<0)continue;let s=n.slice(0,i).trim(),a=n.slice(i+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),s&&(t[s]=a)}return t}function xt(e){let t;try{t=wt.default.readFileSync(e,"utf-8")}catch{return}let r=Ie(t);for(let[n,i]of Object.entries(r))process.env[n]===void 0&&(process.env[n]=i)}});var P=g(o=>{"use strict";Object.defineProperty(o,"__esModule",{value:!0});o.loadEnvFile=o.parseEnvFile=o.envFilePath=o.MemorySessionTraceManager=o.DiskSessionTraceManager=o.generateUlid=o.TraceManager=o.parseHeadersEnv=o.envOptionsResolver=o.postOtlp=o.MemoryTransport=o.DiskTransport=o.MemoryRetryQueue=o.DiskRetryQueue=o.evaluateGuard=o.mergeBatch=o.buildPayload=o.clientAttrs=o.guardAttrs=o.attrsFromRecord=o.toOtlpValue=o.snakeCase=o.newSpanId=o.ulidToTraceId=o.MAX_BYTES=o.PATTERNS=o.applyMatches=o.resolveOverlaps=o.collectMatches=o.truncate=o.redact=void 0;var S=C();Object.defineProperty(o,"redact",{enumerable:!0,get:function(){return S.redact}});Object.defineProperty(o,"truncate",{enumerable:!0,get:function(){return S.truncate}});Object.defineProperty(o,"collectMatches",{enumerable:!0,get:function(){return S.collectMatches}});Object.defineProperty(o,"resolveOverlaps",{enumerable:!0,get:function(){return S.resolveOverlaps}});Object.defineProperty(o,"applyMatches",{enumerable:!0,get:function(){return S.applyMatches}});Object.defineProperty(o,"PATTERNS",{enumerable:!0,get:function(){return S.PATTERNS}});Object.defineProperty(o,"MAX_BYTES",{enumerable:!0,get:function(){return S.MAX_BYTES}});var h=$();Object.defineProperty(o,"ulidToTraceId",{enumerable:!0,get:function(){return h.ulidToTraceId}});Object.defineProperty(o,"newSpanId",{enumerable:!0,get:function(){return h.newSpanId}});Object.defineProperty(o,"snakeCase",{enumerable:!0,get:function(){return h.snakeCase}});Object.defineProperty(o,"toOtlpValue",{enumerable:!0,get:function(){return h.toOtlpValue}});Object.defineProperty(o,"attrsFromRecord",{enumerable:!0,get:function(){return h.attrsFromRecord}});Object.defineProperty(o,"guardAttrs",{enumerable:!0,get:function(){return h.guardAttrs}});Object.defineProperty(o,"clientAttrs",{enumerable:!0,get:function(){return h.clientAttrs}});Object.defineProperty(o,"buildPayload",{enumerable:!0,get:function(){return h.buildPayload}});Object.defineProperty(o,"mergeBatch",{enumerable:!0,get:function(){return h.mergeBatch}});var Mt=he();Object.defineProperty(o,"evaluateGuard",{enumerable:!0,get:function(){return Mt.evaluateGuard}});var Me=U();Object.defineProperty(o,"DiskRetryQueue",{enumerable:!0,get:function(){return Me.DiskRetryQueue}});Object.defineProperty(o,"MemoryRetryQueue",{enumerable:!0,get:function(){return Me.MemoryRetryQueue}});var w=Te();Object.defineProperty(o,"DiskTransport",{enumerable:!0,get:function(){return w.DiskTransport}});Object.defineProperty(o,"MemoryTransport",{enumerable:!0,get:function(){return w.MemoryTransport}});Object.defineProperty(o,"postOtlp",{enumerable:!0,get:function(){return w.postOtlp}});Object.defineProperty(o,"envOptionsResolver",{enumerable:!0,get:function(){return w.envOptionsResolver}});Object.defineProperty(o,"parseHeadersEnv",{enumerable:!0,get:function(){return w.parseHeadersEnv}});var Re=X();Object.defineProperty(o,"TraceManager",{enumerable:!0,get:function(){return Re.TraceManager}});Object.defineProperty(o,"generateUlid",{enumerable:!0,get:function(){return Re.generateUlid}});var je=we();Object.defineProperty(o,"DiskSessionTraceManager",{enumerable:!0,get:function(){return je.DiskSessionTraceManager}});Object.defineProperty(o,"MemorySessionTraceManager",{enumerable:!0,get:function(){return je.MemorySessionTraceManager}});var te=xe();Object.defineProperty(o,"envFilePath",{enumerable:!0,get:function(){return te.envFilePath}});Object.defineProperty(o,"parseEnvFile",{enumerable:!0,get:function(){return te.parseEnvFile}});Object.defineProperty(o,"loadEnvFile",{enumerable:!0,get:function(){return te.loadEnvFile}})});var A=T(P(),1);function Rt(){return(0,A.envFilePath)(".gemini","pinta-gemini.env","GEMINI_HOME")}function De(e=Rt()){(0,A.loadEnvFile)(e)}var Ne=T(P(),1);import jt from"os";import re from"path";function Dt(){return process.env.GEMINI_HOME||re.join(jt.homedir(),".gemini")}function Nt(){let e=process.env.GEMINI_PLUGIN_OPTION_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT;if(e)return e.replace(/\/+$/,"");let t=process.env.OTEL_EXPORTER_OTLP_ENDPOINT;if(t)return t.replace(/\/+$/,"")+"/v1/traces"}function Gt(){let e=(0,Ne.parseHeadersEnv)(process.env.GEMINI_PLUGIN_OPTION_HEADERS||process.env.OTEL_EXPORTER_OTLP_HEADERS),t=process.env.GEMINI_PLUGIN_OPTION_API_KEY;return t&&!e["x-pinta-relay-token"]&&(e["x-pinta-relay-token"]=t),e}function Ge(){let e=process.env.GEMINI_PLUGIN_DATA||re.join(Dt(),"pinta-gemini-data");return!process.env.PINTA_RELAY_TOKEN&&process.env.GEMINI_PLUGIN_OPTION_API_KEY&&(process.env.PINTA_RELAY_TOKEN=process.env.GEMINI_PLUGIN_OPTION_API_KEY),{pluginData:e,tracePath:re.join(e,"trace.json"),endpoint:Nt(),headers:Gt(),guardEndpoint:process.env.PINTA_GUARD_ENDPOINT}}function qe(e=process.argv){let t=r=>{let n=e.indexOf(r);return n>=0?e[n+1]:void 0};return{agent:t("--agent")||"gemini",event:t("--event")}}function Ce(e){let t=e.transcriptPath;if(typeof t=="string"){if(t.includes("/antigravity-cli/brain/"))return"agy";if(t.includes("/antigravity/brain/"))return"antigravity2"}}var m=e=>e==="gemini",qt={identity:{prefix:"gemini",ingest:"gemini",service:"gemini-cli"},gateEvent:"BeforeTool"},Ct={identity:{prefix:"antigravity",ingest:"antigravity",service:"antigravity-cli"},gateEvent:"PreToolUse"},$e=e=>m(e)?qt:Ct;function Fe(e){return $e(e).identity}function Le(e){return $e(e).gateEvent}var $t=new Set(["AfterModel"]),Ve=e=>$t.has(e);function Ue(e,t,r){if(m(e))return{hook:t||r.hook_event_name||"unknown",session_id:I(r.session_id),cwd:I(r.cwd),tool_name:I(r.tool_name),tool_input:r.tool_input};let n=r.workspacePaths,i=r.toolCall;return{hook:t||"unknown",session_id:I(r.conversationId),cwd:Array.isArray(n)?I(n[0]):void 0,tool_name:i?.name,tool_input:i?.args}}function I(e){return typeof e=="string"?e:void 0}var Be=T(P(),1),Ft=50,Lt="pinta-gemini/0.6.0";function Ke(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,r=t.command??t.CommandLine;return typeof r=="string"?r:void 0}function He(e,t,r){return(0,Be.evaluateGuard)(e,t,{timeoutMs:Ft,token:r??process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:Lt})}var Ze=T(P(),1),N=class extends Ze.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-gemini",resolveOptions:()=>t.endpoint?{endpoint:t.endpoint,headers:t.headers}:null})}};var Ye=T(P(),1),G=class extends Ye.DiskSessionTraceManager{constructor(t){super(t.tracePath)}};import ne from"os";var O=T(P(),1),Bt=T(P(),1),ze="0.6.0";function Vt(e){return{skipRedactKeys:new Set([`${e}.hook`,`${e}.agent`,`${e}.tool_name`,`${e}.session_id`,`${e}.transcript_path`,`${e}.transcriptPath`,`${e}.cwd`]),bashContextKeys:new Set([`${e}.tool_input`,`${e}.tool_response`,`${e}.toolCall`])}}function Ut(e){return[{key:"service.name",value:{stringValue:e}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-gemini"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:ze}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:ne.userInfo().username}},{key:"host.name",value:{stringValue:ne.hostname()}},{key:"host.arch",value:{stringValue:ne.arch()}}]}function Xe(e){let t=Fe(e.agent),r=Vt(t.prefix),n=[{key:"ingest.type",value:{stringValue:t.ingest}},{key:`${t.prefix}.hook`,value:{stringValue:e.canonical.hook}},{key:`${t.prefix}.agent`,value:{stringValue:e.agent}}];e.product&&n.push({key:`${t.prefix}.product`,value:{stringValue:e.product}}),n.push(...(0,O.attrsFromRecord)(e.event,t.prefix,r));let i=new Set(n.map(s=>s.key));for(let[s,a]of[["session_id",e.canonical.session_id],["cwd",e.canonical.cwd],["tool_name",e.canonical.tool_name]]){let u=`${t.prefix}.${s}`;if(a!=null&&!i.has(u)){let f=(0,O.toOtlpValue)(u,String(a),r);f!==null&&n.push({key:u,value:f})}}return(0,O.buildPayload)({traceId:e.traceId,spanName:`${t.ingest}.${(0,O.snakeCase)(e.canonical.hook)}`,attributes:n,resource:Ut(t.service),scope:{name:"pinta-gemini",version:ze},now:e.now,guard:e.guard})}function Je(e,t,r){if(r&&r.decision==="DENY"){let n=r.userMessage??r.reason??"guard_deny";return m(e)?{decision:"deny",reason:n,systemMessage:r.userMessage??void 0}:{decision:"deny",reason:n}}return!m(e)&&t==="PreToolUse"?{decision:"allow"}:{}}import Qe from"fs";import Kt from"path";function We(e,t){if(process.env.PINTA_GEMINI_DEBUG==="1")try{Qe.mkdirSync(e.pluginData,{recursive:!0}),Qe.appendFileSync(Kt.join(e.pluginData,"invocations.jsonl"),JSON.stringify(t)+`
|
|
14
|
+
`)}catch{}}async function Ht(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}function Zt(e,t,r){return m(e)?t.hook==="BeforeAgent":t.hook==="PreInvocation"&&r.invocationNum===1}async function et(){let{agent:e,event:t}=qe(),r={},n={},i,s=null,a=Ge();try{if(n=JSON.parse(await Ht()||"{}"),i=Ue(e,t,n),!Ve(i.hook)){let u=new N(a);await u.flush();let f=i.session_id??"unknown",x=new G(a),M=Zt(e,i,n)?x.newTrace(f):x.currentTrace(f);if(i.hook===Le(e)){let tt=Ke(i.tool_input)??(typeof i.tool_input=="string"?i.tool_input:JSON.stringify(i.tool_input??null));s=await He({spanId:f,toolName:i.tool_name,toolInput:i.tool_input,rawTextFields:{toolInput:tt}},a.guardEndpoint,a.headers["x-pinta-relay-token"])}let q=m(e)?void 0:Ce(n);await u.send(Xe({agent:e,canonical:i,event:n,traceId:M,guard:s,product:q})),r=Je(e,t,s)}}catch(u){process.stderr.write(`[pinta-gemini] error: ${u}
|
|
15
|
+
`),r={}}We(a,{ts:new Date().toISOString(),pid:process.pid,agent:e,event:t,argv:process.argv.slice(2),received_payload:n,normalized:i??null,guard:s,decision_returned:r}),process.stdout.write(JSON.stringify(r)+`
|
|
16
|
+
`),process.exit(0)}De();et();
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createRequire as __pintaCreateRequire } from 'module'; const require = __pintaCreateRequire(import.meta.url);
|
|
2
|
+
var Pt=Object.create;var fe=Object.defineProperty;var vt=Object.getOwnPropertyDescriptor;var bt=Object.getOwnPropertyNames;var Ot=Object.getPrototypeOf,Tt=Object.prototype.hasOwnProperty;var m=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var wt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of bt(t))!Tt.call(e,i)&&i!==n&&fe(e,i,{get:()=>t[i],enumerable:!(r=vt(t,i))||r.enumerable});return e};var S=(e,t,n)=>(n=e!=null?Pt(Ot(e)):{},wt(t||!e||!e.__esModule?fe(n,"default",{value:e,enumerable:!0}):n,e));var B=h(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.PATTERNS=d.MAX_BYTES=void 0;d.truncate=Et;d.collectMatches=ge;d.resolveOverlaps=me;d.applyMatches=ye;d.redact=St;d.MAX_BYTES=102400;function Et(e){let t=Buffer.from(e,"utf-8");return t.length<=d.MAX_BYTES?e:`${t.subarray(0,d.MAX_BYTES).toString("utf-8")}\u2026[TRUNCATED:${t.length}]`}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 ge(e,t){let n=[];for(let r of d.PATTERNS){if(r.requireContext&&r.requireContext!==t.context)continue;let i=new RegExp(r.regex.source,r.regex.flags),s;for(;(s=i.exec(e))!==null;){let a=r.captureGroup??0,c=s[a];if(c===void 0){s.index===i.lastIndex&&i.lastIndex++;continue}let u=s.index,f=s.index+s[0].length,y=u+s[0].indexOf(c),E=y+c.length;n.push({start:u,end:f,replaceStart:y,replaceEnd:E,type:r.type}),s.index===i.lastIndex&&i.lastIndex++}}return n}function me(e){let t=[...e].sort((i,s)=>i.start!==s.start?i.start-s.start:s.end-s.start-(i.end-i.start)),n=[],r=-1;for(let i of t)i.start<r||(n.push(i),r=i.end);return n}function ye(e,t){let n=[...t].sort((i,s)=>s.replaceStart-i.replaceStart),r=e;for(let i of n)r=r.slice(0,i.replaceStart)+`[REDACTED:${i.type}]`+r.slice(i.replaceEnd);return r}function St(e,t={}){if(e.length===0)return e;let n=ge(e,t);if(n.length===0)return e;let r=me(n);return ye(e,r)}});var H=h(g=>{"use strict";var kt=g&&g.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(g,"__esModule",{value:!0});g.ulidToTraceId=Pe;g.newSpanId=ve;g.snakeCase=xt;g.toOtlpValue=be;g.attrsFromRecord=jt;g.guardAttrs=Oe;g.clientAttrs=Te;g.buildPayload=Mt;g.mergeBatch=Rt;var At=kt(m("crypto")),he=B(),It="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Pe(e){if(e.length!==26)throw new Error(`ulidToTraceId: expected 26 chars, got ${e.length}`);let t=0n;for(let r of e){let i=It.indexOf(r);if(i<0)throw new Error(`ulidToTraceId: invalid Crockford char "${r}"`);t=t<<5n|BigInt(i)}let n=(1n<<128n)-1n;return t&=n,t.toString(16).padStart(32,"0")}function ve(){return At.default.randomBytes(8).toString("hex")}function xt(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/([A-Z])([A-Z][a-z])/g,"$1_$2").toLowerCase()}var _e=new Set;function G(e,t,n){let r=(0,he.truncate)(t);if((n.skipRedactKeys??_e).has(e))return r;let i=(n.bashContextKeys??_e).has(e)?"bash":void 0;return(0,he.redact)(r,{context:i})}function be(e,t,n={}){if(t==null)return null;switch(typeof t){case"string":return{stringValue:G(e,t,n)};case"boolean":return{boolValue:t};case"number":return Number.isInteger(t)?{intValue:t}:{doubleValue:t};case"object":try{return{stringValue:G(e,JSON.stringify(t),n)}}catch{return{stringValue:G(e,String(t),n)}}default:return{stringValue:G(e,String(t),n)}}}function jt(e,t,n={}){let r=[];for(let[i,s]of Object.entries(e)){let a=`${t}.${i}`,c=be(a,s,n);c!==null&&r.push({key:a,value:c})}return r}function Oe(e){let t=[{key:"pinta.guard.decision",value:{stringValue:e.decision.toLowerCase()}},{key:"pinta.guard.duration_ms",value:{intValue:e.durationMs}}];return e.reason&&t.push({key:"pinta.guard.matched_rule",value:{stringValue:e.reason}}),e.failOpenReason&&t.push({key:"pinta.guard.fail_open_reason",value:{stringValue:e.failOpenReason}}),t}function Te(e){return[{key:"pinta.client.rtt_ms",value:Number.isInteger(e.rttMs)?{intValue:e.rttMs}:{doubleValue:e.rttMs}},{key:"pinta.client.op",value:{stringValue:e.op}}]}function Mt(e){let t=e.now??Date.now(),n=(BigInt(t)*1000000n).toString(),r=[...e.attributes];e.guard&&r.push(...Oe(e.guard));let i=e.clientTiming??(e.guard?.clientRttMs!==void 0?{op:"guard",rttMs:e.guard.clientRttMs}:null);i&&r.push(...Te(i));let s={traceId:Pe(e.traceId),spanId:ve(),name:e.spanName,kind:e.spanKind??1,startTimeUnixNano:n,endTimeUnixNano:n,attributes:r};return{resourceSpans:[{resource:{attributes:e.resource},scopeSpans:[{scope:e.scope,spans:[s]}]}]}}function Rt(e){let t=[];for(let n of e)t.push(...n.resourceSpans);return{resourceSpans:t}}});var Ee=h(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.evaluateGuard=qt;var Dt=1e4,Nt="pinta-core";function we(e,t){return{decision:"ALLOW",reason:null,userMessage:null,durationMs:e,clientRttMs:e,failOpenReason:t}}function Ct(e){return new Promise((t,n)=>setTimeout(()=>{let r=new Error("Guard request timed out");r.name="TimeoutError",n(r)},e))}async function qt(e,t,n={}){if(!t||n.disabled)return null;let r=n.timeoutMs??Dt,i=Date.now();try{let s=await Promise.race([fetch(t,{method:"POST",headers:{"content-type":"application/json","user-agent":n.userAgent??Nt,"x-pinta-relay-token":n.token??""},body:JSON.stringify({input:e})}),Ct(r)]);if(s.status!==200)return we(Date.now()-i,"error");let a=await s.json(),c=Date.now()-i;return{decision:a.decision,reason:a.reason,userMessage:a.userMessage??null,durationMs:a.durationMs??c,clientRttMs:c}}catch(s){let a=s.name==="TimeoutError"?"timeout":"error";return we(Date.now()-i,a)}}});var X=h(b=>{"use strict";var Se=b&&b.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(b,"__esModule",{value:!0});b.MemoryRetryQueue=b.DiskRetryQueue=void 0;var p=Se(m("fs")),F=Se(m("path")),$=1e3,Gt=50,Ft=5,Y=class{filePath;lockPath;logPrefix;constructor(t,n){this.filePath=F.default.join(t,"failed-spans.jsonl"),this.lockPath=this.filePath+".lock",this.logPrefix=n}enqueue(t){try{p.default.mkdirSync(F.default.dirname(this.filePath),{recursive:!0});let n=JSON.stringify({savedAt:new Date().toISOString(),payload:t})+`
|
|
3
|
+
`;p.default.appendFileSync(this.filePath,n),this.trim()}catch(n){process.stderr.write(`[${this.logPrefix}] retry-queue enqueue failed: ${n}
|
|
4
|
+
`)}}readAll(){try{let t=p.default.readFileSync(this.filePath,"utf-8"),n=[];for(let r of t.split(`
|
|
5
|
+
`))if(r.trim())try{n.push(JSON.parse(r))}catch{}return n}catch{return[]}}rewrite(t){try{if(t.length===0){p.default.existsSync(this.filePath)&&p.default.unlinkSync(this.filePath);return}p.default.mkdirSync(F.default.dirname(this.filePath),{recursive:!0}),p.default.writeFileSync(this.filePath,t.map(n=>JSON.stringify(n)).join(`
|
|
6
|
+
`)+`
|
|
7
|
+
`)}catch(n){process.stderr.write(`[${this.logPrefix}] retry-queue rewrite failed: ${n}
|
|
8
|
+
`)}}tryAcquireLock(){let t=Date.now();for(p.default.mkdirSync(F.default.dirname(this.lockPath),{recursive:!0});Date.now()-t<Gt;)try{let n=p.default.openSync(this.lockPath,"wx");return p.default.writeSync(n,String(process.pid)),p.default.closeSync(n),!0}catch(n){if(n?.code!=="EEXIST")return process.stderr.write(`[${this.logPrefix}] retry-queue lock open failed: ${n}
|
|
9
|
+
`),!1;try{let s=p.default.statSync(this.lockPath);if(Date.now()-s.mtimeMs>3e4){p.default.unlinkSync(this.lockPath);continue}}catch{}let r=Ft,i=Date.now()+r;for(;Date.now()<i;);}return!1}release(){try{p.default.unlinkSync(this.lockPath)}catch{}}trim(){let t=this.readAll();if(t.length<=$)return;let n=t.length-$;process.stderr.write(`[${this.logPrefix}] retry-queue full, dropping ${n} oldest entries
|
|
10
|
+
`),this.rewrite(t.slice(n))}};b.DiskRetryQueue=Y;var Z=class{entries=[];enqueue(t){this.entries.push(t),this.entries.length>$&&this.entries.splice(0,this.entries.length-$)}drain(){let t=this.entries;return this.entries=[],t}get size(){return this.entries.length}};b.MemoryRetryQueue=Z});var je=h(_=>{"use strict";Object.defineProperty(_,"__esModule",{value:!0});_.MemoryTransport=_.DiskTransport=void 0;_.parseHeadersEnv=Ie;_.envOptionsResolver=xe;_.postOtlp=R;var ke=X(),Ae=H(),$t=5e3;function Ie(e){if(!e)return{};if(typeof e=="object")return{...e};let t={};for(let n of e.split(",")){let[r,...i]=n.split("=");r&&i.length>0&&(t[r.trim()]=i.join("=").trim())}return t}function xe(){let e=process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,t=process.env.OTEL_EXPORTER_OTLP_ENDPOINT,n;return e?n=e.replace(/\/+$/,""):t&&(n=t.replace(/\/+$/,"")+"/v1/traces"),n?{endpoint:n,headers:Ie(process.env.OTEL_EXPORTER_OTLP_HEADERS)}:null}async function R(e,t,n){let r=new AbortController,i=setTimeout(()=>r.abort(),$t);try{let s=await fetch(t.endpoint,{method:"POST",headers:{"Content-Type":"application/json",...t.headers},body:JSON.stringify(e),signal:r.signal});if(!s.ok){let a="";try{a=(await s.text()).slice(0,200)}catch{}let c=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(`[${n}] OTLP POST ${s.status} ${t.endpoint}${c}${a?` body=${a}`:""}
|
|
11
|
+
`),!1}return!0}catch(s){return process.stderr.write(`[${n}] OTLP POST failed: ${s.message??String(s)}
|
|
12
|
+
`),!1}finally{clearTimeout(i)}}var J=class{queue;logPrefix;resolveOptions;constructor(t){this.queue=new ke.DiskRetryQueue(t.pluginData,t.logPrefix),this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions??xe}async send(t){let n=this.resolveOptions();if(!n)return;await R(t,n,this.logPrefix)||this.queue.enqueue(t)}async flush(){let t=this.resolveOptions();if(t&&this.queue.tryAcquireLock())try{let n=this.queue.readAll();if(n.length===0)return;let r=(0,Ae.mergeBatch)(n.map(s=>s.payload));await R(r,t,this.logPrefix)&&this.queue.rewrite([])}finally{this.queue.release()}}};_.DiskTransport=J;var W=class{queue=new ke.MemoryRetryQueue;logPrefix;resolveOptions;constructor(t){this.logPrefix=t.logPrefix,this.resolveOptions=t.resolveOptions}async send(t){let n=this.resolveOptions();if(!n)return;await R(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 r=(0,Ae.mergeBatch)(n);if(!await R(r,t,this.logPrefix))for(let s of n)this.queue.enqueue(s)}};_.MemoryTransport=W});var re=h(k=>{"use strict";var ne=k&&k.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(k,"__esModule",{value:!0});k.TraceManager=void 0;k.generateUlid=Me;var Q=ne(m("fs")),Lt=ne(m("path")),Vt=ne(m("crypto")),ee="0123456789ABCDEFGHJKMNPQRSTVWXYZ";function Me(){let e=Date.now(),t="",n=e;for(let s=0;s<10;s++)t=ee[n&31]+t,n=Math.floor(n/32);let r=Vt.default.randomBytes(10),i="";for(let s=0;s<10;s++)i+=ee[r[s]&31];for(;i.length<16;)i+=ee[0];return t+i}var te=class{tracePath;constructor(t){this.tracePath=t}newTrace(){let t=Me();return this.save(t),t}currentTrace(){try{let t=Q.default.readFileSync(this.tracePath,"utf-8"),{traceId:n}=JSON.parse(t);if(n)return n}catch{}return this.newTrace()}save(t){Q.default.mkdirSync(Lt.default.dirname(this.tracePath),{recursive:!0}),Q.default.writeFileSync(this.tracePath,JSON.stringify({traceId:t}))}};k.TraceManager=te});var Ce=h(O=>{"use strict";var Re=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 ie=Re(m("fs")),Kt=Re(m("path")),De=re(),Ne=200,se=class{tracePath;maxSessions;constructor(t,n={}){this.tracePath=t,this.maxSessions=n.maxSessions??Ne}read(){try{let t=JSON.parse(ie.default.readFileSync(this.tracePath,"utf-8"));if(t&&typeof t=="object"&&!("traceId"in t))return t}catch{}return{}}write(t){try{ie.default.mkdirSync(Kt.default.dirname(this.tracePath),{recursive:!0});let n=Object.entries(t),r=n.length>this.maxSessions?Object.fromEntries(n.slice(-this.maxSessions)):t;ie.default.writeFileSync(this.tracePath,JSON.stringify(r))}catch{}}newTrace(t){let n=t||"default",r=(0,De.generateUlid)(),i=this.read();return i[n]=r,this.write(i),r}currentTrace(t){let n=t||"default",r=this.read()[n];return r||this.newTrace(n)}};O.DiskSessionTraceManager=se;var oe=class{map=new Map;maxSessions;constructor(t={}){this.maxSessions=t.maxSessions??Ne}newTrace(t){let n=t||"default",r=(0,De.generateUlid)();if(this.map.set(n,r),this.map.size>this.maxSessions){let i=this.map.keys().next().value;i!==void 0&&this.map.delete(i)}return r}currentTrace(t){let n=t||"default";return this.map.get(n)??this.newTrace(n)}};O.MemorySessionTraceManager=oe});var Fe=h(A=>{"use strict";var ae=A&&A.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(A,"__esModule",{value:!0});A.envFilePath=Ht;A.parseEnvFile=Ge;A.loadEnvFile=zt;var Ut=ae(m("node:fs")),Bt=ae(m("node:os")),qe=ae(m("node:path"));function Ht(e,t,n){let r=n?process.env[n]:void 0,i=r&&r.length>0?r:qe.default.join(Bt.default.homedir(),e);return qe.default.join(i,t)}function Ge(e){let t={};for(let n of e.split(`
|
|
13
|
+
`)){let r=n.trim();if(!r||r.startsWith("#"))continue;let i=r.indexOf("=");if(i<0)continue;let s=r.slice(0,i).trim(),a=r.slice(i+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),s&&(t[s]=a)}return t}function zt(e){let t;try{t=Ut.default.readFileSync(e,"utf-8")}catch{return}let n=Ge(t);for(let[r,i]of Object.entries(n))process.env[r]===void 0&&(process.env[r]=i)}});var T=h(o=>{"use strict";Object.defineProperty(o,"__esModule",{value:!0});o.loadEnvFile=o.parseEnvFile=o.envFilePath=o.MemorySessionTraceManager=o.DiskSessionTraceManager=o.generateUlid=o.TraceManager=o.parseHeadersEnv=o.envOptionsResolver=o.postOtlp=o.MemoryTransport=o.DiskTransport=o.MemoryRetryQueue=o.DiskRetryQueue=o.evaluateGuard=o.mergeBatch=o.buildPayload=o.clientAttrs=o.guardAttrs=o.attrsFromRecord=o.toOtlpValue=o.snakeCase=o.newSpanId=o.ulidToTraceId=o.MAX_BYTES=o.PATTERNS=o.applyMatches=o.resolveOverlaps=o.collectMatches=o.truncate=o.redact=void 0;var I=B();Object.defineProperty(o,"redact",{enumerable:!0,get:function(){return I.redact}});Object.defineProperty(o,"truncate",{enumerable:!0,get:function(){return I.truncate}});Object.defineProperty(o,"collectMatches",{enumerable:!0,get:function(){return I.collectMatches}});Object.defineProperty(o,"resolveOverlaps",{enumerable:!0,get:function(){return I.resolveOverlaps}});Object.defineProperty(o,"applyMatches",{enumerable:!0,get:function(){return I.applyMatches}});Object.defineProperty(o,"PATTERNS",{enumerable:!0,get:function(){return I.PATTERNS}});Object.defineProperty(o,"MAX_BYTES",{enumerable:!0,get:function(){return I.MAX_BYTES}});var P=H();Object.defineProperty(o,"ulidToTraceId",{enumerable:!0,get:function(){return P.ulidToTraceId}});Object.defineProperty(o,"newSpanId",{enumerable:!0,get:function(){return P.newSpanId}});Object.defineProperty(o,"snakeCase",{enumerable:!0,get:function(){return P.snakeCase}});Object.defineProperty(o,"toOtlpValue",{enumerable:!0,get:function(){return P.toOtlpValue}});Object.defineProperty(o,"attrsFromRecord",{enumerable:!0,get:function(){return P.attrsFromRecord}});Object.defineProperty(o,"guardAttrs",{enumerable:!0,get:function(){return P.guardAttrs}});Object.defineProperty(o,"clientAttrs",{enumerable:!0,get:function(){return P.clientAttrs}});Object.defineProperty(o,"buildPayload",{enumerable:!0,get:function(){return P.buildPayload}});Object.defineProperty(o,"mergeBatch",{enumerable:!0,get:function(){return P.mergeBatch}});var Yt=Ee();Object.defineProperty(o,"evaluateGuard",{enumerable:!0,get:function(){return Yt.evaluateGuard}});var $e=X();Object.defineProperty(o,"DiskRetryQueue",{enumerable:!0,get:function(){return $e.DiskRetryQueue}});Object.defineProperty(o,"MemoryRetryQueue",{enumerable:!0,get:function(){return $e.MemoryRetryQueue}});var D=je();Object.defineProperty(o,"DiskTransport",{enumerable:!0,get:function(){return D.DiskTransport}});Object.defineProperty(o,"MemoryTransport",{enumerable:!0,get:function(){return D.MemoryTransport}});Object.defineProperty(o,"postOtlp",{enumerable:!0,get:function(){return D.postOtlp}});Object.defineProperty(o,"envOptionsResolver",{enumerable:!0,get:function(){return D.envOptionsResolver}});Object.defineProperty(o,"parseHeadersEnv",{enumerable:!0,get:function(){return D.parseHeadersEnv}});var Le=re();Object.defineProperty(o,"TraceManager",{enumerable:!0,get:function(){return Le.TraceManager}});Object.defineProperty(o,"generateUlid",{enumerable:!0,get:function(){return Le.generateUlid}});var Ve=Ce();Object.defineProperty(o,"DiskSessionTraceManager",{enumerable:!0,get:function(){return Ve.DiskSessionTraceManager}});Object.defineProperty(o,"MemorySessionTraceManager",{enumerable:!0,get:function(){return Ve.MemorySessionTraceManager}});var ce=Fe();Object.defineProperty(o,"envFilePath",{enumerable:!0,get:function(){return ce.envFilePath}});Object.defineProperty(o,"parseEnvFile",{enumerable:!0,get:function(){return ce.parseEnvFile}});Object.defineProperty(o,"loadEnvFile",{enumerable:!0,get:function(){return ce.loadEnvFile}})});import{realpathSync as Nn}from"node:fs";import{pathToFileURL as Cn}from"node:url";var N=S(T(),1);function Zt(){return(0,N.envFilePath)(".gemini","pinta-gemini.env","GEMINI_HOME")}function Ke(e=Zt()){(0,N.loadEnvFile)(e)}var Ue=S(T(),1);import Xt from"os";import ue from"path";function Jt(){return process.env.GEMINI_HOME||ue.join(Xt.homedir(),".gemini")}function Wt(){let e=process.env.GEMINI_PLUGIN_OPTION_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT;if(e)return e.replace(/\/+$/,"");let t=process.env.OTEL_EXPORTER_OTLP_ENDPOINT;if(t)return t.replace(/\/+$/,"")+"/v1/traces"}function Qt(){let e=(0,Ue.parseHeadersEnv)(process.env.GEMINI_PLUGIN_OPTION_HEADERS||process.env.OTEL_EXPORTER_OTLP_HEADERS),t=process.env.GEMINI_PLUGIN_OPTION_API_KEY;return t&&!e["x-pinta-relay-token"]&&(e["x-pinta-relay-token"]=t),e}function Be(){let e=process.env.GEMINI_PLUGIN_DATA||ue.join(Jt(),"pinta-gemini-data");return!process.env.PINTA_RELAY_TOKEN&&process.env.GEMINI_PLUGIN_OPTION_API_KEY&&(process.env.PINTA_RELAY_TOKEN=process.env.GEMINI_PLUGIN_OPTION_API_KEY),{pluginData:e,tracePath:ue.join(e,"trace.json"),endpoint:Wt(),headers:Qt(),guardEndpoint:process.env.PINTA_GUARD_ENDPOINT}}function He(e=process.argv){let t=n=>{let r=e.indexOf(n);return r>=0?e[r+1]:void 0};return{agent:t("--agent")||"gemini",event:t("--event")}}function ze(e){let t=e.transcriptPath;if(typeof t=="string"){if(t.includes("/antigravity-cli/brain/"))return"agy";if(t.includes("/antigravity/brain/"))return"antigravity2"}}var v=e=>e==="gemini",en={identity:{prefix:"gemini",ingest:"gemini",service:"gemini-cli"},gateEvent:"BeforeTool"},tn={identity:{prefix:"antigravity",ingest:"antigravity",service:"antigravity-cli"},gateEvent:"PreToolUse"},Ye=e=>v(e)?en:tn;function Ze(e){return Ye(e).identity}function Xe(e){return Ye(e).gateEvent}var nn=new Set(["AfterModel"]),Je=e=>nn.has(e);function We(e,t,n){if(v(e))return{hook:t||n.hook_event_name||"unknown",session_id:C(n.session_id),cwd:C(n.cwd),tool_name:C(n.tool_name),tool_input:n.tool_input};let r=n.workspacePaths,i=n.toolCall;return{hook:t||"unknown",session_id:C(n.conversationId),cwd:Array.isArray(r)?C(r[0]):void 0,tool_name:i?.name,tool_input:i?.args}}function C(e){return typeof e=="string"?e:void 0}var Qe=S(T(),1),rn=50,sn="pinta-gemini/0.6.0";function et(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n=t.command??t.CommandLine;return typeof n=="string"?n:void 0}function tt(e,t,n){return(0,Qe.evaluateGuard)(e,t,{timeoutMs:rn,token:n??process.env.PINTA_RELAY_TOKEN??"",disabled:process.env.PINTA_GUARD_DISABLED==="1",userAgent:sn})}var nt=S(T(),1),L=class extends nt.DiskTransport{constructor(t){super({pluginData:t.pluginData,logPrefix:"pinta-gemini",resolveOptions:()=>t.endpoint?{endpoint:t.endpoint,headers:t.headers}:null})}};var rt=S(T(),1),V=class extends rt.DiskSessionTraceManager{constructor(t){super(t.tracePath)}};import le from"os";var w=S(T(),1),cn=S(T(),1),it="0.6.0";function on(e){return{skipRedactKeys:new Set([`${e}.hook`,`${e}.agent`,`${e}.tool_name`,`${e}.session_id`,`${e}.transcript_path`,`${e}.transcriptPath`,`${e}.cwd`]),bashContextKeys:new Set([`${e}.tool_input`,`${e}.tool_response`,`${e}.toolCall`])}}function an(e){return[{key:"service.name",value:{stringValue:e}},{key:"telemetry.sdk.name",value:{stringValue:"pinta-gemini"}},{key:"telemetry.sdk.language",value:{stringValue:"nodejs"}},{key:"telemetry.sdk.version",value:{stringValue:it}},{key:"process.pid",value:{intValue:process.pid}},{key:"process.owner",value:{stringValue:le.userInfo().username}},{key:"host.name",value:{stringValue:le.hostname()}},{key:"host.arch",value:{stringValue:le.arch()}}]}function st(e){let t=Ze(e.agent),n=on(t.prefix),r=[{key:"ingest.type",value:{stringValue:t.ingest}},{key:`${t.prefix}.hook`,value:{stringValue:e.canonical.hook}},{key:`${t.prefix}.agent`,value:{stringValue:e.agent}}];e.product&&r.push({key:`${t.prefix}.product`,value:{stringValue:e.product}}),r.push(...(0,w.attrsFromRecord)(e.event,t.prefix,n));let i=new Set(r.map(s=>s.key));for(let[s,a]of[["session_id",e.canonical.session_id],["cwd",e.canonical.cwd],["tool_name",e.canonical.tool_name]]){let c=`${t.prefix}.${s}`;if(a!=null&&!i.has(c)){let u=(0,w.toOtlpValue)(c,String(a),n);u!==null&&r.push({key:c,value:u})}}return(0,w.buildPayload)({traceId:e.traceId,spanName:`${t.ingest}.${(0,w.snakeCase)(e.canonical.hook)}`,attributes:r,resource:an(t.service),scope:{name:"pinta-gemini",version:it},now:e.now,guard:e.guard})}function ot(e,t,n){if(n&&n.decision==="DENY"){let r=n.userMessage??n.reason??"guard_deny";return v(e)?{decision:"deny",reason:r,systemMessage:n.userMessage??void 0}:{decision:"deny",reason:r}}return!v(e)&&t==="PreToolUse"?{decision:"allow"}:{}}import at from"fs";import un from"path";function ct(e,t){if(process.env.PINTA_GEMINI_DEBUG==="1")try{at.mkdirSync(e.pluginData,{recursive:!0}),at.appendFileSync(un.join(e.pluginData,"invocations.jsonl"),JSON.stringify(t)+`
|
|
14
|
+
`)}catch{}}async function ln(){let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}function dn(e,t,n){return v(e)?t.hook==="BeforeAgent":t.hook==="PreInvocation"&&n.invocationNum===1}async function ut(){let{agent:e,event:t}=He(),n={},r={},i,s=null,a=Be();try{if(r=JSON.parse(await ln()||"{}"),i=We(e,t,r),!Je(i.hook)){let c=new L(a);await c.flush();let u=i.session_id??"unknown",f=new V(a),y=dn(e,i,r)?f.newTrace(u):f.currentTrace(u);if(i.hook===Xe(e)){let U=et(i.tool_input)??(typeof i.tool_input=="string"?i.tool_input:JSON.stringify(i.tool_input??null));s=await tt({spanId:u,toolName:i.tool_name,toolInput:i.tool_input,rawTextFields:{toolInput:U}},a.guardEndpoint,a.headers["x-pinta-relay-token"])}let E=v(e)?void 0:ze(r);await c.send(st({agent:e,canonical:i,event:r,traceId:y,guard:s,product:E})),n=ot(e,t,s)}}catch(c){process.stderr.write(`[pinta-gemini] error: ${c}
|
|
15
|
+
`),n={}}ct(a,{ts:new Date().toISOString(),pid:process.pid,agent:e,event:t,argv:process.argv.slice(2),received_payload:r,normalized:i??null,guard:s,decision_returned:n}),process.stdout.write(JSON.stringify(n)+`
|
|
16
|
+
`),process.exit(0)}import{opendir as gt,stat as wn}from"node:fs/promises";import{homedir as En}from"node:os";import l from"node:path";import{spawn as dt}from"node:child_process";import{access as pn,copyFile as fn,mkdtemp as gn,stat as pt}from"node:fs/promises";import{constants as mn}from"node:fs";import yn from"node:os";import q from"node:path";var de,hn=["/usr/bin/sqlite3","/opt/homebrew/bin/sqlite3","/usr/local/bin/sqlite3"];async function _n(){for(let t of hn)try{return await pn(t,mn.X_OK),t}catch{}return await new Promise(t=>{let n;try{n=dt("sqlite3",["--version"],{stdio:"ignore"})}catch{t(!1);return}n.on("error",()=>t(!1)),n.on("close",r=>t(r===0))})?"sqlite3":null}async function Pn(){return de===void 0&&(de=await _n()),de}async function vn(e,t,n){await new Promise((r,i)=>{let s=dt(e,[t,`.backup '${n}'`],{stdio:["ignore","ignore","pipe"]}),a="";s.stderr?.on("data",c=>{a+=String(c)}),s.on("error",i),s.on("close",c=>{c===0?r():i(new Error(`sqlite3 .backup exited ${c}${a?`: ${a.trim()}`:""}`))})})}async function bn(e){try{let t=await pt(e);return`${t.mtimeMs}:${t.size}`}catch{return"absent"}}async function lt(e){let t=new Map;for(let n of e)t.set(n,await bn(n));return t}function On(e,t){for(let[n,r]of e)if(t.get(n)!==r)return!1;return!0}async function Tn(e,t,n,r){let i=r.minStableMs??2e3,s=r.maxRetries??3,a=r.now??Date.now,c=r.sleep??(f=>new Promise(y=>setTimeout(y,f))),u=[e,`${e}-wal`,`${e}-shm`];for(let f=1;f<=s;f++){let y=await lt(u);if(y.get(e)==="absent")throw new Error(`snapshot source vanished: ${e}`);let E=0;for(let M of u)try{let _t=await pt(M);E=Math.max(E,_t.mtimeMs)}catch{}if(a()-E<i){await c(i);continue}for(let M of u)y.get(M)!=="absent"&&await fn(M,q.join(t,q.basename(M)));r.onCopied&&await r.onCopied(f);let U=await lt(u);if(On(y,U))return n}throw new Error(`snapshot quiesce-copy did not stabilize after ${s} attempts: ${e}`)}async function ft(e,t={}){let n=t.tmpDirBase??yn.tmpdir(),r=await gn(q.join(n,"pinta-gemini-snap-")),i=q.join(r,q.basename(e.absPath)),s=t.sqlite3Path!==void 0?t.sqlite3Path:await Pn();return s?(await vn(s,e.absPath,i),i):Tn(e.absPath,r,i,t)}var Sn="pinta-gemini",K="antigravity";function kn(){let e=process.env.GEMINI_HOME;return e&&e.length>0?e:l.join(En(),".gemini")}function x(e,t){return l.relative(e,t).split(l.sep).join("/")}function mt(e){return e.endsWith("/.system_generated/logs/transcript.jsonl")||e.endsWith("/.system_generated/logs/transcript_full.jsonl")}function An(e){return e.endsWith(".jsonl")||e.endsWith(".json")}function pe(e){let t=l.extname(e);return t?e.slice(0,-t.length):e}async function yt(){return[kn()]}async function*ht(e){let t;try{t=await gt(e)}catch{return}try{for await(let n of t){let r=l.join(e,n.name);n.isDirectory()?yield*ht(r):n.isFile()&&(yield r)}}catch{return}}async function*j(e){let t;try{t=await gt(e)}catch{return}try{for await(let n of t)yield{name:n.name,isDir:n.isDirectory(),isFile:n.isFile()}}catch{return}}async function*In(e){let t=l.join(e,"tmp");for await(let n of j(t)){if(!n.isDir)continue;let r=n.name,i=l.join(t,r),s=l.join(i,"logs.json");yield{absPath:s,relPath:x(e,s),semantics:"rewritten-doc",projectKey:r};let a=l.join(i,"chats");for await(let c of j(a)){if(!c.isFile||!An(c.name))continue;let u=l.join(a,c.name);yield{absPath:u,relPath:x(e,u),semantics:"rewritten-doc",sessionId:pe(c.name),projectKey:r}}}}async function*xn(e){let t=l.join(e,"antigravity"),n=l.join(t,"conversations");for await(let s of j(n)){if(!s.isFile||!s.name.endsWith(".db"))continue;let a=l.join(n,s.name);yield{absPath:a,relPath:x(e,a),semantics:"database",sessionId:pe(s.name),projectKey:K}}let r=l.join(t,"brain");for await(let s of j(r)){if(!s.isDir)continue;let a=s.name,c=l.join(r,a);for await(let u of ht(c)){let f=x(e,u);yield{absPath:u,relPath:f,semantics:mt(f)?"append-log":"rewritten-doc",sessionId:a,projectKey:K}}}let i=l.join(t,"annotations");for await(let s of j(i)){if(!s.isFile||!s.name.endsWith(".pbtxt"))continue;let a=l.join(i,s.name);yield{absPath:a,relPath:x(e,a),semantics:"rewritten-doc",sessionId:pe(s.name),projectKey:K}}for await(let s of j(t))if(s.isFile&&(s.name.endsWith(".pb")||s.name.endsWith(".pbtxt")||s.name==="installation_id")){let a=l.join(t,s.name);yield{absPath:a,relPath:x(e,a),semantics:"rewritten-doc",projectKey:K}}}async function*jn(e){yield*In(e),yield*xn(e)}async function*Mn(e){let[t]=await yt(),n=e.since?.getTime();for await(let r of jn(t)){let i;try{i=await wn(r.absPath)}catch{continue}i.isFile()&&(n!==void 0&&i.mtime.getTime()<=n||(yield{relPath:r.relPath,absPath:r.absPath,size:i.size,mtime:i.mtime,sessionId:r.sessionId,projectKey:r.projectKey,semantics:r.semantics}))}}function Rn(e){let t=e.split("/");if(t[0]==="tmp")return t[2]==="chats"?"session-log":t[2]==="logs.json"&&t.length===3?"meta":"other";if(t[0]==="antigravity")switch(t[1]){case"conversations":return"session-log";case"brain":return mt(e)?"session-log":"meta";case"annotations":return"meta";default:return"other"}return"other"}var Dn={id:Sn,roots:yt,scan:Mn,classify:Rn,snapshot:e=>ft(e)};Ke();function qn(){let e=process.argv[1];if(!e)return!1;try{return import.meta.url===Cn(Nn(e)).href}catch{return!1}}qn()&&ut();export{Dn as lifecycle};
|
package/package.json
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pinta-ai/pinta-gemini",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Unified OTLP forwarder + guard adapter for Gemini CLI and Antigravity (agy v1.0.x / 2.0) hooks",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/index.mjs",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
7
13
|
"license": "PolyForm-Noncommercial-1.0.0",
|
|
8
14
|
"files": [
|
|
9
15
|
"dist",
|
|
@@ -17,7 +23,11 @@
|
|
|
17
23
|
},
|
|
18
24
|
"scripts": {
|
|
19
25
|
"bump": "node scripts/bump.mjs",
|
|
20
|
-
"
|
|
26
|
+
"typecheck": "tsc --noEmit",
|
|
27
|
+
"build": "npm run build:hook && npm run build:esm",
|
|
28
|
+
"build:hook": "esbuild src/index.ts --bundle --platform=node --format=esm --target=node18 --minify --outfile=dist/index.js --banner:js=\"import { createRequire as __pintaCreateRequire } from 'module'; const require = __pintaCreateRequire(import.meta.url);\"",
|
|
29
|
+
"build:esm": "esbuild src/index.mts --bundle --platform=node --format=esm --target=node18 --minify --outfile=dist/index.mjs --banner:js=\"import { createRequire as __pintaCreateRequire } from 'module'; const require = __pintaCreateRequire(import.meta.url);\"",
|
|
30
|
+
"smoke:import": "node scripts/smoke-import.mjs",
|
|
21
31
|
"test": "vitest run",
|
|
22
32
|
"install-hooks": "tsx tools/install-hooks.ts",
|
|
23
33
|
"uninstall-hooks": "tsx tools/install-hooks.ts --uninstall",
|