@ciandt-flow/flow-ai-obs 0.9.1-beta.690 → 0.9.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/dist/cli.js +1 -1
- package/dist/setup.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
'use strict';var Pe=require('readline/promises'),fs=require('https'),O=require('fs'),mt=require('os'),Lt=require('path'),child_process=require('child_process'),Us=require('http'),util=require('util'),crypto=require('crypto');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var Pe__namespace=/*#__PURE__*/_interopNamespace(Pe);var fs__default=/*#__PURE__*/_interopDefault(fs);var O__namespace=/*#__PURE__*/_interopNamespace(O);var mt__namespace=/*#__PURE__*/_interopNamespace(mt);var Lt__namespace=/*#__PURE__*/_interopNamespace(Lt);var Us__default=/*#__PURE__*/_interopDefault(Us);var ve=Object.defineProperty;var is=Object.getOwnPropertyDescriptor;var as=Object.getOwnPropertyNames;var cs=Object.prototype.hasOwnProperty;var $t=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var g=(t,e,n)=>()=>{if(n)throw n[0];try{return t&&(e=t(t=0)),e}catch(r){throw n=[r],r}};var ls=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(n){throw e=0,n}},$=(t,e)=>{for(var n in e)ve(t,n,{get:e[n],enumerable:true});},us=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of as(e))!cs.call(t,s)&&s!==n&&ve(t,s,{get:()=>e[s],enumerable:!(r=is(e,s))||r.enumerable});return t};var U=t=>us(ve({},"__esModule",{value:true}),t);var be={};$(be,{bold:()=>P,cyan:()=>v,dim:()=>p,green:()=>b,red:()=>I,yellow:()=>R});function yt(t,e){return ds?n=>`\x1B[${t}m${n}\x1B[${e}m`:n=>n}var ds,b,I,R,v,P,p,ct=g(()=>{"use strict";ds=!process.env.NO_COLOR&&process.stdout.isTTY;b=yt("32","39"),I=yt("31","39"),R=yt("33","39"),v=yt("36","39"),P=yt("1","22"),p=yt("2","22");});var Ft=ls((li,ps)=>{ps.exports={name:"@ciandt-flow/flow-ai-obs",version:"0.9.1
|
|
2
|
+
'use strict';var Pe=require('readline/promises'),fs=require('https'),O=require('fs'),mt=require('os'),Lt=require('path'),child_process=require('child_process'),Us=require('http'),util=require('util'),crypto=require('crypto');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var Pe__namespace=/*#__PURE__*/_interopNamespace(Pe);var fs__default=/*#__PURE__*/_interopDefault(fs);var O__namespace=/*#__PURE__*/_interopNamespace(O);var mt__namespace=/*#__PURE__*/_interopNamespace(mt);var Lt__namespace=/*#__PURE__*/_interopNamespace(Lt);var Us__default=/*#__PURE__*/_interopDefault(Us);var ve=Object.defineProperty;var is=Object.getOwnPropertyDescriptor;var as=Object.getOwnPropertyNames;var cs=Object.prototype.hasOwnProperty;var $t=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var g=(t,e,n)=>()=>{if(n)throw n[0];try{return t&&(e=t(t=0)),e}catch(r){throw n=[r],r}};var ls=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(n){throw e=0,n}},$=(t,e)=>{for(var n in e)ve(t,n,{get:e[n],enumerable:true});},us=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of as(e))!cs.call(t,s)&&s!==n&&ve(t,s,{get:()=>e[s],enumerable:!(r=is(e,s))||r.enumerable});return t};var U=t=>us(ve({},"__esModule",{value:true}),t);var be={};$(be,{bold:()=>P,cyan:()=>v,dim:()=>p,green:()=>b,red:()=>I,yellow:()=>R});function yt(t,e){return ds?n=>`\x1B[${t}m${n}\x1B[${e}m`:n=>n}var ds,b,I,R,v,P,p,ct=g(()=>{"use strict";ds=!process.env.NO_COLOR&&process.stdout.isTTY;b=yt("32","39"),I=yt("31","39"),R=yt("33","39"),v=yt("36","39"),P=yt("1","22"),p=yt("2","22");});var Ft=ls((li,ps)=>{ps.exports={name:"@ciandt-flow/flow-ai-obs",version:"0.9.1",description:"Claude Code hooks for Langfuse OTLP tracing \u2014 cross-platform",main:"dist/index.js",bin:{"flow-ai-obs":"dist/cli.js","flow-ai-obs-setup":"dist/setup.js"},scripts:{build:"tsup",test:"jest",typecheck:"tsc --noEmit",lint:"eslint src bin scripts",format:'prettier --write "src/**/*.ts" "bin/**/*.ts" "scripts/**/*.ts"',"format:check":'prettier --check "src/**/*.ts" "bin/**/*.ts" "scripts/**/*.ts"',"security-scan":"trufflehog filesystem src/ --fail --no-update --exclude-paths .trufflehogignore",postinstall:`node -e "require('fs').existsSync('dist/setup.js') && require('child_process').execFileSync(process.execPath, ['dist/setup.js'], {stdio:'inherit'})"`,prepublishOnly:"npm run security-scan && npm run build","release:npm":"changeset publish",changeset:"changeset","version-packages":"changeset version","install:hooks":"node dist/cli.js install","auth:login":"node dist/cli.js auth login","auth:logout":"node dist/cli.js auth logout","auth:status":"node dist/cli.js auth status",smoke:"bash scripts/smoke-test.sh","smoke:debug":"bash scripts/smoke-test.sh --debug","smoke:send":"bash scripts/smoke-test.sh --send --allow-http --debug"},files:["dist/","README.md","LICENSE.md"],keywords:["claude-code","langfuse","observability","otlp","hooks","flow","ciandt"],author:"CI&T Flow Team",license:"SEE LICENSE IN LICENSE.md",private:!1,dependencies:{},optionalDependencies:{keytar:"7.9.0"},devDependencies:{"@changesets/changelog-github":"^0.6.0","@changesets/cli":"^2.30.0","@types/jest":"^30.0.0","@types/node":"^25.8.0",jest:"^30.4.2","ts-jest":"^29.4.9",tsup:"^8.5.1","eslint-config-prettier":"^10.1.5",prettier:"^3.5.3",typescript:"^6.0.3","typescript-eslint":"^8.33.0"},engines:{node:">=18.0.0"},overrides:{esbuild:"^0.28.1"},publishConfig:{registry:"https://registry.npmjs.org",access:"public"},repository:{type:"git",url:"git+https://github.com/CI-T-HyperX/flow-codeassistant-observability.git"}};});function lt(){return process.stdout.isTTY===true&&process.stdin.isTTY===true&&!process.argv.includes("--no-interactive")}async function Ie(t,e){let n=Pe__namespace.createInterface({input:process.stdin,output:process.stdout}),s=`${t} ${e===true?"(Y/n)":e===false?"(y/N)":"(y/n)"}: `;for(let i=1;i<=3;i++)try{let o=(await n.question(s)).trim().toLowerCase();if(o===""&&e!==void 0)return n.close(),e;if(o==="y"||o==="yes")return n.close(),!0;if(o==="n"||o==="no")return n.close(),!1;i<3&&process.stdout.write(` Invalid input. Please answer "y" or "n".
|
|
3
3
|
`);}catch(o){throw n.close(),o}if(n.close(),e!==void 0)return e;throw new Error("Too many invalid attempts for yes/no prompt")}async function yn(t,e){let n=Pe__namespace.createInterface({input:process.stdin,output:process.stdout});try{let r=(await n.question(`${t}: `)).trim();if(e);return r}catch(r){throw r}finally{n.close();}}var Ue=g(()=>{"use strict";});var At={};$(At,{checkForUpdate:()=>Ss,checkForUpdateInteractive:()=>Ts,fetchLatestVersionAsync:()=>Ln,isNewer:()=>_t,pkg:()=>N,primeUpdateCache:()=>ys,runUpdate:()=>kn});function N(){return Ne||(Ne=Ft()),Ne}function _t(t,e){let n=i=>{let o=String(i).replace(/^v/,"").match(/^(\d+)\.(\d+)\.(\d+)/);return o?[+o[1],+o[2],+o[3]]:null},r=n(t),s=n(e);return !r||!s?false:s[0]!==r[0]?s[0]>r[0]:s[1]!==r[1]?s[1]>r[1]:s[2]>r[2]}function Fe(){try{let t=JSON.parse(O__namespace.default.readFileSync(On,"utf8"));return typeof t.latestVersion!="string"||Date.now()-t.checkedAt>=hs?null:t}catch{return null}}function xe(t,e,n=Date.now()){try{O__namespace.default.writeFileSync(On,JSON.stringify({latestVersion:t,updatePriority:e??null,checkedAt:n}),{mode:384});}catch{}}function De(t){let e=N().name,n=fs__default.default.get(`https://registry.npmjs.org/${encodeURIComponent(e)}/latest`,{timeout:Es},r=>{if(r.statusCode!==200)return r.resume(),t(new Error(`HTTP ${r.statusCode}`));let s="";r.setEncoding("utf8"),r.on("data",i=>{s+=i;}),r.on("end",()=>{try{let i=JSON.parse(s);if(typeof i.version!="string")throw new Error("no version field");t(null,{version:i.version,updatePriority:typeof i.updatePriority=="string"?i.updatePriority:null});}catch(i){t(i);}});});n.on("error",t),n.on("timeout",()=>{n.destroy(new Error("timeout"));});}function Ce(t){let e=N().name,r=` Update available: ${N().version} \u2192 ${t}`,s=` Run: npm install -g ${e}`,i=Math.max(r.length,s.length)+2,o="\u2500".repeat(i);process.stderr.write(`
|
|
4
4
|
\u256D${o}\u256E
|
|
5
5
|
\u2502${r.padEnd(i)}\u2502
|
package/dist/setup.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
'use strict';var child_process=require('child_process'),util=require('util'),i=require('fs'),d=require('path'),u=require('os'),de=require('https');require('readline/promises');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var i__namespace=/*#__PURE__*/_interopNamespace(i);var d__namespace=/*#__PURE__*/_interopNamespace(d);var u__namespace=/*#__PURE__*/_interopNamespace(u);var de__default=/*#__PURE__*/_interopDefault(de);var I=Object.defineProperty;var Lt=Object.getOwnPropertyDescriptor;var Rt=Object.getOwnPropertyNames;var kt=Object.prototype.hasOwnProperty;var O=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var A=(t,e,n)=>()=>{if(n)throw n[0];try{return t&&(e=t(t=0)),e}catch(r){throw n=[r],r}};var Pt=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(n){throw e=0,n}},L=(t,e)=>{for(var n in e)I(t,n,{get:e[n],enumerable:true});},It=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Rt(e))!kt.call(t,s)&&s!==n&&I(t,s,{get:()=>e[s],enumerable:!(r=Lt(e,s))||r.enumerable});return t};var Ct=t=>It(I({},"__esModule",{value:true}),t);var J={};L(J,{BUFFER:()=>Dt,CONFIG_DIR_NAME:()=>E,CONFIG_FILE_NAME:()=>T,DEBUG_LOG_FILENAME:()=>U,ENV:()=>p,FEATURES:()=>$t,FLOW_URLS:()=>bt,HOOK_TIMEOUTS:()=>b,INSTALLER:()=>N,NATIVE_OTEL:()=>C,OTLP:()=>Ut,STATE_FILE_PREFIX:()=>Mt,TRACE_LIMITS:()=>xt,VAULT:()=>y,getFlowBaseUrl:()=>h,getFlowUrls:()=>R,getLlmProxy:()=>Ft,getMetrics:()=>Ht});function h(){let t=process.env.FLOW_BASE_URL;return t&&t.trim()?t.trim():Nt}function R(){let t=h();return {AUTH_ENGINE:process.env.FLOW_AUTH_ENGINE_URL||`${t}/auth-engine-api/v2/api-key/token`,GATEWAY_TRACES:process.env.FLOW_GATEWAY_TRACES_URL||`${t}/flow-langfuse-gateway/v1/traces`,GATEWAY_HEALTH:process.env.FLOW_GATEWAY_HEALTH_URL||`${t}/flow-langfuse-gateway/v1/health`,OTEL_ENDPOINT:process.env.FLOW_OTEL_ENDPOINT_URL||`${t}/otel`}}function Ft(){let t=h();return {ANTHROPIC_BASE_URL:process.env.FLOW_LLM_PROXY_URL??`${t}/flow-llm-proxy/`,ANTHROPIC_MODEL:process.env.FLOW_LLM_PROXY_MODEL??"anthropic.claude-4-6-sonnet",ANTHROPIC_SMALL_FAST_MODEL:process.env.FLOW_LLM_PROXY_SMALL_MODEL??"anthropic.claude-4-6-haiku",CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS:"1"}}function Ht(){let t=h();return {API_URL:process.env.FLOW_METRICS_URL||`${t}/metrics-collector-api/log-event`,BOOSTER:"flow-ai-obs"}}var Nt,bt,y,E,T,Ut,C,p,$t,N,b,Dt,U,xt,Mt,l=A(()=>{"use strict";Nt="https://flow.ciandt.com";bt=R(),y={SERVICE:"flow-plugins-cli",ACCOUNT_CREDS:"credentials",ACCOUNT_TOKEN:"token-cache"},E="FLOW-nodejs",T="config.json",Ut={SCOPE_NAME:"flow-ai-obs",SCOPE_VERSION:"0.1.0"};C={CLAUDE_CODE_ENABLE_TELEMETRY:"1",OTEL_EXPORTER_OTLP_PROTOCOL:"http/json",OTEL_METRICS_EXPORTER:"otlp",OTEL_LOGS_EXPORTER:"otlp",OTEL_LOG_TOOL_DETAILS:"1",OTEL_LOG_USER_PROMPTS:"1"},p={FLOW_TELEMETRY:"FLOW_TELEMETRY",FLOW_TELEMETRY_GATEWAY:"FLOW_TELEMETRY_GATEWAY_URL",LANGFUSE_BASE_URL:"LANGFUSE_BASE_URL",LANGFUSE_PUBLIC_KEY:"LANGFUSE_PUBLIC_KEY",LANGFUSE_SECRET_KEY:"LANGFUSE_SECRET_KEY",ANTHROPIC_MODEL:"ANTHROPIC_MODEL",ANTHROPIC_AUTH_TOKEN:"ANTHROPIC_AUTH_TOKEN",FLOW_OBS_DEBUG:"FLOW_TELEMETRY_DEBUG",FLOW_OBS_ALLOW_HTTP:"FLOW_TELEMETRY_ALLOW_HTTP",BUFFER_TTL_DAYS:"FLOW_TELEMETRY_BUFFER_TTL_DAYS",BUFFER_MAX_FILES:"FLOW_TELEMETRY_BUFFER_MAX_FILES"},$t={KEYCHAIN_ENABLED:!1},N={LOCK_STALE_MS:3e4,CONNECTIVITY_MAX_RETRY:3,CONNECTIVITY_RETRY_MS:2e3,CLI:"flow-ai-obs "},b={UserPromptSubmit:5,PreToolUse:3,PostToolUse:10,Stop:15},Dt={FILE_PREFIX:"flow-obs-buffer-",DEFAULT_TTL_DAYS:4,MIN_TTL_DAYS:1,MAX_TTL_DAYS:30,DEFAULT_MAX_FILES:50,MIN_MAX_FILES:1,MAX_MAX_FILES:500,REPLAY_BATCH_SIZE:10},U="flow-ai-obs-debug.log",xt={TOOL_INPUT:2e4,TOOL_OUTPUT:2e4,TRACE_OUTPUT:2e4,USER_INSTRUCTION:1e4,TRACE_INPUT:5e4,TOOL_BRIEF:60};Mt="flow-obs-";});var X={};L(X,{MacOsKeyVaultProvider:()=>x});var D,x,q=A(()=>{"use strict";D=util.promisify(child_process.execFile),x=class{static async isAvailable(){try{return i.accessSync("/usr/bin/security",i.constants.X_OK),!0}catch{return !1}}async getSecret(e,n){try{let{stdout:r}=await D("security",["find-generic-password","-w","-a",n,"-s",e]);return r.trim()||null}catch{return null}}async setSecret(e,n,r){await D("security",["add-generic-password","-U","-a",n,"-s",e,"-w",r]);}async deleteSecret(e,n){try{return await D("security",["delete-generic-password","-a",n,"-s",e]),!0}catch{return !1}}getStoragePath(){return "macOS Keychain"}};});var Z={};L(Z,{LinuxKeyVaultProvider:()=>H});var z,H,Q=A(()=>{"use strict";z=util.promisify(child_process.execFile),H=class{static async isAvailable(){let e=["/usr/bin/secret-tool","/bin/secret-tool","/usr/local/bin/secret-tool"];for(let n of e)try{return i.accessSync(n,i.constants.X_OK),!0}catch{}return !1}async getSecret(e,n){try{let{stdout:r}=await z("secret-tool",["lookup","service",e,"account",n]);return r.trim()||null}catch{return null}}async setSecret(e,n,r){await new Promise((s,o)=>{let a=child_process.spawn("secret-tool",["store","--label",e,"service",e,"account",n]);a.on("error",o),a.on("close",m=>{m===0?s():o(new Error(`secret-tool exited with code ${m}`));}),a.stdin.write(r),a.stdin.end();});}async deleteSecret(e,n){try{return await z("secret-tool",["clear","service",e,"account",n]),!0}catch{return !1}}getStoragePath(){return "Linux Secret Service (libsecret)"}};});var tt={};L(tt,{WindowsKeyVaultProvider:()=>M});var M,et=A(()=>{"use strict";M=class{static async isAvailable(){try{return await O("keytar").getPassword("__flow_probe__","__flow_probe__"),!0}catch{return !1}}async getSecret(e,n){return O("keytar").getPassword(e,n)}async setSecret(e,n,r){await O("keytar").setPassword(e,n,r);}async deleteSecret(e,n){return O("keytar").deletePassword(e,n)}getStoragePath(){return "Windows Credential Manager"}};});var mt=Pt((On,pe)=>{pe.exports={name:"@ciandt-flow/flow-ai-obs",version:"0.9.1-beta.690",description:"Claude Code hooks for Langfuse OTLP tracing \u2014 cross-platform",main:"dist/index.js",bin:{"flow-ai-obs":"dist/cli.js","flow-ai-obs-setup":"dist/setup.js"},scripts:{build:"tsup",test:"jest",typecheck:"tsc --noEmit",lint:"eslint src bin scripts",format:'prettier --write "src/**/*.ts" "bin/**/*.ts" "scripts/**/*.ts"',"format:check":'prettier --check "src/**/*.ts" "bin/**/*.ts" "scripts/**/*.ts"',"security-scan":"trufflehog filesystem src/ --fail --no-update --exclude-paths .trufflehogignore",postinstall:`node -e "require('fs').existsSync('dist/setup.js') && require('child_process').execFileSync(process.execPath, ['dist/setup.js'], {stdio:'inherit'})"`,prepublishOnly:"npm run security-scan && npm run build","release:npm":"changeset publish",changeset:"changeset","version-packages":"changeset version","install:hooks":"node dist/cli.js install","auth:login":"node dist/cli.js auth login","auth:logout":"node dist/cli.js auth logout","auth:status":"node dist/cli.js auth status",smoke:"bash scripts/smoke-test.sh","smoke:debug":"bash scripts/smoke-test.sh --debug","smoke:send":"bash scripts/smoke-test.sh --send --allow-http --debug"},files:["dist/","README.md","LICENSE.md"],keywords:["claude-code","langfuse","observability","otlp","hooks","flow","ciandt"],author:"CI&T Flow Team",license:"SEE LICENSE IN LICENSE.md",private:!1,dependencies:{},optionalDependencies:{keytar:"7.9.0"},devDependencies:{"@changesets/changelog-github":"^0.6.0","@changesets/cli":"^2.30.0","@types/jest":"^30.0.0","@types/node":"^25.8.0",jest:"^30.4.2","ts-jest":"^29.4.9",tsup:"^8.5.1","eslint-config-prettier":"^10.1.5",prettier:"^3.5.3",typescript:"^6.0.3","typescript-eslint":"^8.33.0"},engines:{node:">=18.0.0"},overrides:{esbuild:"^0.28.1"},publishConfig:{registry:"https://registry.npmjs.org",access:"public"},repository:{type:"git",url:"git+https://github.com/CI-T-HyperX/flow-codeassistant-observability.git"}};});l();var F={credentials:"credentials","token-cache":"tokenCache"};function _(){let t=u__namespace.default.homedir();if(process.platform==="darwin")return d__namespace.default.join(t,"Library","Preferences",E,T);if(process.platform==="win32"){let n=process.env.APPDATA??d__namespace.default.join(t,"AppData","Roaming");return d__namespace.default.join(n,E,T)}let e=process.env.XDG_CONFIG_HOME??d__namespace.default.join(t,".config");return d__namespace.default.join(e,E,T)}function $(){try{let t=i__namespace.default.readFileSync(_(),"utf8");return JSON.parse(t)}catch{return {}}}function K(t){let e=_();i__namespace.default.mkdirSync(d__namespace.default.dirname(e),{recursive:true}),i__namespace.default.writeFileSync(e,JSON.stringify(t,null,2),{encoding:"utf8",mode:384});}var k=class{static isAvailable(){return true}static hasExistingData(){try{if(!i__namespace.default.existsSync(_()))return !1;let e=JSON.parse(i__namespace.default.readFileSync(_(),"utf8"));return !!(e&&e.credentials)}catch{return false}}async getSecret(e,n){let r=$(),s=F[n]??n,o=r[s];return o?typeof o=="string"?o:JSON.stringify(o):null}async setSecret(e,n,r){let s=$(),o=F[n]??n;if(n==="token-cache")try{s[o]=JSON.parse(r);}catch{s[o]=r;}else s[o]=r;K(s);}async deleteSecret(e,n){let r=$(),s=F[n]??n;return s in r?(delete r[s],K(r),true):false}getStoragePath(){return `config.json (unencrypted) \u2014 ${_()}`}};async function nt(){return await zt()??new k}async function zt(){switch(process.platform){case "darwin":{let{MacOsKeyVaultProvider:t}=await Promise.resolve().then(()=>(q(),X));return await t.isAvailable()?new t:null}case "linux":{let{LinuxKeyVaultProvider:t}=await Promise.resolve().then(()=>(Q(),Z));return await t.isAvailable()?new t:null}case "win32":{let{WindowsKeyVaultProvider:t}=await Promise.resolve().then(()=>(et(),tt));return await t.isAvailable()?new t:null}default:return null}}l();var Zt=y.SERVICE,Qt=y.ACCOUNT_CREDS;y.ACCOUNT_TOKEN;var V=null;function te(){return V||(V=nt()),V}async function rt(){let e=await(await te()).getSecret(Zt,Qt);if(!e)return null;try{return JSON.parse(e)}catch{return null}}l();l();l();d.join(u.tmpdir(),U);!process.env.NO_COLOR&&process.stdout.isTTY;function j(){return process.platform==="win32"?false:process.getuid?.()===0}function st(){if(process.platform==="linux"&&process.getuid?.()===0&&process.env.SUDO_USER){let e=child_process.spawnSync("getent",["passwd",process.env.SUDO_USER],{encoding:"utf8",timeout:5e3}).stdout?.split(":")[5]?.trim();if(e)return {home:e,username:process.env.SUDO_USER}}return {home:u__namespace.homedir(),username:process.env.SUDO_USER||process.env.USER||u__namespace.userInfo().username}}function P(){if(process.env.WSL_DISTRO_NAME&&process.platform==="linux"){let t=process.env.USERPROFILE;if(!t){let n=child_process.spawnSync("cmd.exe",["/c","echo","%USERPROFILE%"],{encoding:"utf8",timeout:5e3}).stdout?.trim();n&&/^[A-Za-z]:\\/.test(n)&&(t=n);}if(t){let e=t.replace(/^([A-Za-z]):/,(n,r)=>`/mnt/${r.toLowerCase()}`).replace(/\\/g,"/");return d__namespace.join(e,".claude","settings.json")}return d__namespace.join(u__namespace.homedir(),".claude","settings.json")}if(process.platform==="win32"){let t=process.env.USERPROFILE||u__namespace.homedir();return d__namespace.join(t,".claude","settings.json")}if(process.platform==="linux"&&process.getuid?.()===0&&process.env.SUDO_USER){let e=child_process.spawnSync("getent",["passwd",process.env.SUDO_USER],{encoding:"utf8",timeout:5e3}).stdout?.split(":")[5]?.trim();if(e)return d__namespace.join(e,".claude","settings.json")}return d__namespace.join(u__namespace.homedir(),".claude","settings.json")}var ot="flow-ai-obs",it="config.json";function ct(){if(process.platform==="win32"){let n=process.env.APPDATA||d__namespace.join(u__namespace.homedir(),"AppData","Roaming");return d__namespace.join(n,ot,it)}let t=st(),e=process.env.XDG_CONFIG_HOME||d__namespace.join(t.home,".config");return d__namespace.join(e,ot,it)}var ce=N.LOCK_STALE_MS;function lt(t){try{let e=i__namespace.statSync(t);Date.now()-e.mtimeMs>ce&&i__namespace.unlinkSync(t);}catch{}try{i__namespace.writeFileSync(t,String(process.pid),{flag:"wx"});}catch(e){throw e.code==="EEXIST"?new Error("Another install is already in progress. If this is stale, remove: "+t):e}}function ut(t){try{i__namespace.unlinkSync(t);}catch{}}function le(t,e){let r=(Array.isArray(t)?t:[]).map(s=>{if(!Array.isArray(s?.hooks))return null;let o=s.hooks.filter(a=>!a.command?.startsWith?.("flow-ai-obs "));return o.length>0?{...s,hooks:o}:null}).filter(s=>s!=null);return [e,...r]}function pt(t,e){let n=P(),r=n+".lock",s=[];i__namespace.mkdirSync(d__namespace.dirname(n),{recursive:true}),lt(r);try{if(i__namespace.existsSync(n)){i__namespace.copyFileSync(n,n+".bkp");try{i__namespace.chmodSync(n+".bkp",384);}catch{}}let o=ct();if(i__namespace.existsSync(o)){let c=o+".bkp";i__namespace.copyFileSync(o,c);try{i__namespace.chmodSync(c,384);}catch{}}let a={};try{a=JSON.parse(i__namespace.readFileSync(n,"utf8"));}catch{}let m=a.env&&typeof a.env=="object"?a.env:{};delete m.OTEL_EXPORTER_OTLP_HEADERS;let{getFlowUrls:St}=(l(),Ct(J)),wt=St().OTEL_ENDPOINT,vt={...C,OTEL_EXPORTER_OTLP_ENDPOINT:t??wt};a.env={...m,...vt,...e??{}},a.otelHeadersHelper="flow-ai-obs otel-headers",(!a.hooks||typeof a.hooks!="object"||Array.isArray(a.hooks))&&(a.hooks={});let Ot=(c,v)=>({matcher:"",hooks:[{type:"command",command:`flow-ai-obs ${c}`,timeout:v}]}),At=["UserPromptSubmit","PreToolUse","PostToolUse","Stop"],B=a.hooks;for(let c of At){let v=le(B[c],Ot(c,b[c]));v.length>1&&s.push(c),B[c]=v;}i__namespace.writeFileSync(n,JSON.stringify(a,null,2)+`
|
|
2
|
+
'use strict';var child_process=require('child_process'),util=require('util'),i=require('fs'),d=require('path'),u=require('os'),de=require('https');require('readline/promises');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var i__namespace=/*#__PURE__*/_interopNamespace(i);var d__namespace=/*#__PURE__*/_interopNamespace(d);var u__namespace=/*#__PURE__*/_interopNamespace(u);var de__default=/*#__PURE__*/_interopDefault(de);var I=Object.defineProperty;var Lt=Object.getOwnPropertyDescriptor;var Rt=Object.getOwnPropertyNames;var kt=Object.prototype.hasOwnProperty;var O=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var A=(t,e,n)=>()=>{if(n)throw n[0];try{return t&&(e=t(t=0)),e}catch(r){throw n=[r],r}};var Pt=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(n){throw e=0,n}},L=(t,e)=>{for(var n in e)I(t,n,{get:e[n],enumerable:true});},It=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Rt(e))!kt.call(t,s)&&s!==n&&I(t,s,{get:()=>e[s],enumerable:!(r=Lt(e,s))||r.enumerable});return t};var Ct=t=>It(I({},"__esModule",{value:true}),t);var J={};L(J,{BUFFER:()=>Dt,CONFIG_DIR_NAME:()=>E,CONFIG_FILE_NAME:()=>T,DEBUG_LOG_FILENAME:()=>U,ENV:()=>p,FEATURES:()=>$t,FLOW_URLS:()=>bt,HOOK_TIMEOUTS:()=>b,INSTALLER:()=>N,NATIVE_OTEL:()=>C,OTLP:()=>Ut,STATE_FILE_PREFIX:()=>Mt,TRACE_LIMITS:()=>xt,VAULT:()=>y,getFlowBaseUrl:()=>h,getFlowUrls:()=>R,getLlmProxy:()=>Ft,getMetrics:()=>Ht});function h(){let t=process.env.FLOW_BASE_URL;return t&&t.trim()?t.trim():Nt}function R(){let t=h();return {AUTH_ENGINE:process.env.FLOW_AUTH_ENGINE_URL||`${t}/auth-engine-api/v2/api-key/token`,GATEWAY_TRACES:process.env.FLOW_GATEWAY_TRACES_URL||`${t}/flow-langfuse-gateway/v1/traces`,GATEWAY_HEALTH:process.env.FLOW_GATEWAY_HEALTH_URL||`${t}/flow-langfuse-gateway/v1/health`,OTEL_ENDPOINT:process.env.FLOW_OTEL_ENDPOINT_URL||`${t}/otel`}}function Ft(){let t=h();return {ANTHROPIC_BASE_URL:process.env.FLOW_LLM_PROXY_URL??`${t}/flow-llm-proxy/`,ANTHROPIC_MODEL:process.env.FLOW_LLM_PROXY_MODEL??"anthropic.claude-4-6-sonnet",ANTHROPIC_SMALL_FAST_MODEL:process.env.FLOW_LLM_PROXY_SMALL_MODEL??"anthropic.claude-4-6-haiku",CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS:"1"}}function Ht(){let t=h();return {API_URL:process.env.FLOW_METRICS_URL||`${t}/metrics-collector-api/log-event`,BOOSTER:"flow-ai-obs"}}var Nt,bt,y,E,T,Ut,C,p,$t,N,b,Dt,U,xt,Mt,l=A(()=>{"use strict";Nt="https://flow.ciandt.com";bt=R(),y={SERVICE:"flow-plugins-cli",ACCOUNT_CREDS:"credentials",ACCOUNT_TOKEN:"token-cache"},E="FLOW-nodejs",T="config.json",Ut={SCOPE_NAME:"flow-ai-obs",SCOPE_VERSION:"0.1.0"};C={CLAUDE_CODE_ENABLE_TELEMETRY:"1",OTEL_EXPORTER_OTLP_PROTOCOL:"http/json",OTEL_METRICS_EXPORTER:"otlp",OTEL_LOGS_EXPORTER:"otlp",OTEL_LOG_TOOL_DETAILS:"1",OTEL_LOG_USER_PROMPTS:"1"},p={FLOW_TELEMETRY:"FLOW_TELEMETRY",FLOW_TELEMETRY_GATEWAY:"FLOW_TELEMETRY_GATEWAY_URL",LANGFUSE_BASE_URL:"LANGFUSE_BASE_URL",LANGFUSE_PUBLIC_KEY:"LANGFUSE_PUBLIC_KEY",LANGFUSE_SECRET_KEY:"LANGFUSE_SECRET_KEY",ANTHROPIC_MODEL:"ANTHROPIC_MODEL",ANTHROPIC_AUTH_TOKEN:"ANTHROPIC_AUTH_TOKEN",FLOW_OBS_DEBUG:"FLOW_TELEMETRY_DEBUG",FLOW_OBS_ALLOW_HTTP:"FLOW_TELEMETRY_ALLOW_HTTP",BUFFER_TTL_DAYS:"FLOW_TELEMETRY_BUFFER_TTL_DAYS",BUFFER_MAX_FILES:"FLOW_TELEMETRY_BUFFER_MAX_FILES"},$t={KEYCHAIN_ENABLED:!1},N={LOCK_STALE_MS:3e4,CONNECTIVITY_MAX_RETRY:3,CONNECTIVITY_RETRY_MS:2e3,CLI:"flow-ai-obs "},b={UserPromptSubmit:5,PreToolUse:3,PostToolUse:10,Stop:15},Dt={FILE_PREFIX:"flow-obs-buffer-",DEFAULT_TTL_DAYS:4,MIN_TTL_DAYS:1,MAX_TTL_DAYS:30,DEFAULT_MAX_FILES:50,MIN_MAX_FILES:1,MAX_MAX_FILES:500,REPLAY_BATCH_SIZE:10},U="flow-ai-obs-debug.log",xt={TOOL_INPUT:2e4,TOOL_OUTPUT:2e4,TRACE_OUTPUT:2e4,USER_INSTRUCTION:1e4,TRACE_INPUT:5e4,TOOL_BRIEF:60};Mt="flow-obs-";});var X={};L(X,{MacOsKeyVaultProvider:()=>x});var D,x,q=A(()=>{"use strict";D=util.promisify(child_process.execFile),x=class{static async isAvailable(){try{return i.accessSync("/usr/bin/security",i.constants.X_OK),!0}catch{return !1}}async getSecret(e,n){try{let{stdout:r}=await D("security",["find-generic-password","-w","-a",n,"-s",e]);return r.trim()||null}catch{return null}}async setSecret(e,n,r){await D("security",["add-generic-password","-U","-a",n,"-s",e,"-w",r]);}async deleteSecret(e,n){try{return await D("security",["delete-generic-password","-a",n,"-s",e]),!0}catch{return !1}}getStoragePath(){return "macOS Keychain"}};});var Z={};L(Z,{LinuxKeyVaultProvider:()=>H});var z,H,Q=A(()=>{"use strict";z=util.promisify(child_process.execFile),H=class{static async isAvailable(){let e=["/usr/bin/secret-tool","/bin/secret-tool","/usr/local/bin/secret-tool"];for(let n of e)try{return i.accessSync(n,i.constants.X_OK),!0}catch{}return !1}async getSecret(e,n){try{let{stdout:r}=await z("secret-tool",["lookup","service",e,"account",n]);return r.trim()||null}catch{return null}}async setSecret(e,n,r){await new Promise((s,o)=>{let a=child_process.spawn("secret-tool",["store","--label",e,"service",e,"account",n]);a.on("error",o),a.on("close",m=>{m===0?s():o(new Error(`secret-tool exited with code ${m}`));}),a.stdin.write(r),a.stdin.end();});}async deleteSecret(e,n){try{return await z("secret-tool",["clear","service",e,"account",n]),!0}catch{return !1}}getStoragePath(){return "Linux Secret Service (libsecret)"}};});var tt={};L(tt,{WindowsKeyVaultProvider:()=>M});var M,et=A(()=>{"use strict";M=class{static async isAvailable(){try{return await O("keytar").getPassword("__flow_probe__","__flow_probe__"),!0}catch{return !1}}async getSecret(e,n){return O("keytar").getPassword(e,n)}async setSecret(e,n,r){await O("keytar").setPassword(e,n,r);}async deleteSecret(e,n){return O("keytar").deletePassword(e,n)}getStoragePath(){return "Windows Credential Manager"}};});var mt=Pt((On,pe)=>{pe.exports={name:"@ciandt-flow/flow-ai-obs",version:"0.9.1",description:"Claude Code hooks for Langfuse OTLP tracing \u2014 cross-platform",main:"dist/index.js",bin:{"flow-ai-obs":"dist/cli.js","flow-ai-obs-setup":"dist/setup.js"},scripts:{build:"tsup",test:"jest",typecheck:"tsc --noEmit",lint:"eslint src bin scripts",format:'prettier --write "src/**/*.ts" "bin/**/*.ts" "scripts/**/*.ts"',"format:check":'prettier --check "src/**/*.ts" "bin/**/*.ts" "scripts/**/*.ts"',"security-scan":"trufflehog filesystem src/ --fail --no-update --exclude-paths .trufflehogignore",postinstall:`node -e "require('fs').existsSync('dist/setup.js') && require('child_process').execFileSync(process.execPath, ['dist/setup.js'], {stdio:'inherit'})"`,prepublishOnly:"npm run security-scan && npm run build","release:npm":"changeset publish",changeset:"changeset","version-packages":"changeset version","install:hooks":"node dist/cli.js install","auth:login":"node dist/cli.js auth login","auth:logout":"node dist/cli.js auth logout","auth:status":"node dist/cli.js auth status",smoke:"bash scripts/smoke-test.sh","smoke:debug":"bash scripts/smoke-test.sh --debug","smoke:send":"bash scripts/smoke-test.sh --send --allow-http --debug"},files:["dist/","README.md","LICENSE.md"],keywords:["claude-code","langfuse","observability","otlp","hooks","flow","ciandt"],author:"CI&T Flow Team",license:"SEE LICENSE IN LICENSE.md",private:!1,dependencies:{},optionalDependencies:{keytar:"7.9.0"},devDependencies:{"@changesets/changelog-github":"^0.6.0","@changesets/cli":"^2.30.0","@types/jest":"^30.0.0","@types/node":"^25.8.0",jest:"^30.4.2","ts-jest":"^29.4.9",tsup:"^8.5.1","eslint-config-prettier":"^10.1.5",prettier:"^3.5.3",typescript:"^6.0.3","typescript-eslint":"^8.33.0"},engines:{node:">=18.0.0"},overrides:{esbuild:"^0.28.1"},publishConfig:{registry:"https://registry.npmjs.org",access:"public"},repository:{type:"git",url:"git+https://github.com/CI-T-HyperX/flow-codeassistant-observability.git"}};});l();var F={credentials:"credentials","token-cache":"tokenCache"};function _(){let t=u__namespace.default.homedir();if(process.platform==="darwin")return d__namespace.default.join(t,"Library","Preferences",E,T);if(process.platform==="win32"){let n=process.env.APPDATA??d__namespace.default.join(t,"AppData","Roaming");return d__namespace.default.join(n,E,T)}let e=process.env.XDG_CONFIG_HOME??d__namespace.default.join(t,".config");return d__namespace.default.join(e,E,T)}function $(){try{let t=i__namespace.default.readFileSync(_(),"utf8");return JSON.parse(t)}catch{return {}}}function K(t){let e=_();i__namespace.default.mkdirSync(d__namespace.default.dirname(e),{recursive:true}),i__namespace.default.writeFileSync(e,JSON.stringify(t,null,2),{encoding:"utf8",mode:384});}var k=class{static isAvailable(){return true}static hasExistingData(){try{if(!i__namespace.default.existsSync(_()))return !1;let e=JSON.parse(i__namespace.default.readFileSync(_(),"utf8"));return !!(e&&e.credentials)}catch{return false}}async getSecret(e,n){let r=$(),s=F[n]??n,o=r[s];return o?typeof o=="string"?o:JSON.stringify(o):null}async setSecret(e,n,r){let s=$(),o=F[n]??n;if(n==="token-cache")try{s[o]=JSON.parse(r);}catch{s[o]=r;}else s[o]=r;K(s);}async deleteSecret(e,n){let r=$(),s=F[n]??n;return s in r?(delete r[s],K(r),true):false}getStoragePath(){return `config.json (unencrypted) \u2014 ${_()}`}};async function nt(){return await zt()??new k}async function zt(){switch(process.platform){case "darwin":{let{MacOsKeyVaultProvider:t}=await Promise.resolve().then(()=>(q(),X));return await t.isAvailable()?new t:null}case "linux":{let{LinuxKeyVaultProvider:t}=await Promise.resolve().then(()=>(Q(),Z));return await t.isAvailable()?new t:null}case "win32":{let{WindowsKeyVaultProvider:t}=await Promise.resolve().then(()=>(et(),tt));return await t.isAvailable()?new t:null}default:return null}}l();var Zt=y.SERVICE,Qt=y.ACCOUNT_CREDS;y.ACCOUNT_TOKEN;var V=null;function te(){return V||(V=nt()),V}async function rt(){let e=await(await te()).getSecret(Zt,Qt);if(!e)return null;try{return JSON.parse(e)}catch{return null}}l();l();l();d.join(u.tmpdir(),U);!process.env.NO_COLOR&&process.stdout.isTTY;function j(){return process.platform==="win32"?false:process.getuid?.()===0}function st(){if(process.platform==="linux"&&process.getuid?.()===0&&process.env.SUDO_USER){let e=child_process.spawnSync("getent",["passwd",process.env.SUDO_USER],{encoding:"utf8",timeout:5e3}).stdout?.split(":")[5]?.trim();if(e)return {home:e,username:process.env.SUDO_USER}}return {home:u__namespace.homedir(),username:process.env.SUDO_USER||process.env.USER||u__namespace.userInfo().username}}function P(){if(process.env.WSL_DISTRO_NAME&&process.platform==="linux"){let t=process.env.USERPROFILE;if(!t){let n=child_process.spawnSync("cmd.exe",["/c","echo","%USERPROFILE%"],{encoding:"utf8",timeout:5e3}).stdout?.trim();n&&/^[A-Za-z]:\\/.test(n)&&(t=n);}if(t){let e=t.replace(/^([A-Za-z]):/,(n,r)=>`/mnt/${r.toLowerCase()}`).replace(/\\/g,"/");return d__namespace.join(e,".claude","settings.json")}return d__namespace.join(u__namespace.homedir(),".claude","settings.json")}if(process.platform==="win32"){let t=process.env.USERPROFILE||u__namespace.homedir();return d__namespace.join(t,".claude","settings.json")}if(process.platform==="linux"&&process.getuid?.()===0&&process.env.SUDO_USER){let e=child_process.spawnSync("getent",["passwd",process.env.SUDO_USER],{encoding:"utf8",timeout:5e3}).stdout?.split(":")[5]?.trim();if(e)return d__namespace.join(e,".claude","settings.json")}return d__namespace.join(u__namespace.homedir(),".claude","settings.json")}var ot="flow-ai-obs",it="config.json";function ct(){if(process.platform==="win32"){let n=process.env.APPDATA||d__namespace.join(u__namespace.homedir(),"AppData","Roaming");return d__namespace.join(n,ot,it)}let t=st(),e=process.env.XDG_CONFIG_HOME||d__namespace.join(t.home,".config");return d__namespace.join(e,ot,it)}var ce=N.LOCK_STALE_MS;function lt(t){try{let e=i__namespace.statSync(t);Date.now()-e.mtimeMs>ce&&i__namespace.unlinkSync(t);}catch{}try{i__namespace.writeFileSync(t,String(process.pid),{flag:"wx"});}catch(e){throw e.code==="EEXIST"?new Error("Another install is already in progress. If this is stale, remove: "+t):e}}function ut(t){try{i__namespace.unlinkSync(t);}catch{}}function le(t,e){let r=(Array.isArray(t)?t:[]).map(s=>{if(!Array.isArray(s?.hooks))return null;let o=s.hooks.filter(a=>!a.command?.startsWith?.("flow-ai-obs "));return o.length>0?{...s,hooks:o}:null}).filter(s=>s!=null);return [e,...r]}function pt(t,e){let n=P(),r=n+".lock",s=[];i__namespace.mkdirSync(d__namespace.dirname(n),{recursive:true}),lt(r);try{if(i__namespace.existsSync(n)){i__namespace.copyFileSync(n,n+".bkp");try{i__namespace.chmodSync(n+".bkp",384);}catch{}}let o=ct();if(i__namespace.existsSync(o)){let c=o+".bkp";i__namespace.copyFileSync(o,c);try{i__namespace.chmodSync(c,384);}catch{}}let a={};try{a=JSON.parse(i__namespace.readFileSync(n,"utf8"));}catch{}let m=a.env&&typeof a.env=="object"?a.env:{};delete m.OTEL_EXPORTER_OTLP_HEADERS;let{getFlowUrls:St}=(l(),Ct(J)),wt=St().OTEL_ENDPOINT,vt={...C,OTEL_EXPORTER_OTLP_ENDPOINT:t??wt};a.env={...m,...vt,...e??{}},a.otelHeadersHelper="flow-ai-obs otel-headers",(!a.hooks||typeof a.hooks!="object"||Array.isArray(a.hooks))&&(a.hooks={});let Ot=(c,v)=>({matcher:"",hooks:[{type:"command",command:`flow-ai-obs ${c}`,timeout:v}]}),At=["UserPromptSubmit","PreToolUse","PostToolUse","Stop"],B=a.hooks;for(let c of At){let v=le(B[c],Ot(c,b[c]));v.length>1&&s.push(c),B[c]=v;}i__namespace.writeFileSync(n,JSON.stringify(a,null,2)+`
|
|
3
3
|
`,{encoding:"utf8",mode:384});try{i__namespace.chmodSync(n,384);}catch{}}finally{ut(r);}return {settingsPath:n,preserved:s}}function dt(t){let e=P(),n=e+".lock";i__namespace.mkdirSync(d__namespace.dirname(e),{recursive:true}),lt(n);try{let r={};try{r=JSON.parse(i__namespace.readFileSync(e,"utf8"));}catch{}(!r.env||typeof r.env!="object")&&(r.env={}),Object.assign(r.env,t),i__namespace.writeFileSync(e,JSON.stringify(r,null,2)+`
|
|
4
4
|
`,{encoding:"utf8",mode:384});try{i__namespace.chmodSync(e,384);}catch{}}finally{ut(n);}}l();function ft(t){if(!t)return null;try{let e=t.split(".");if(e.length<2)return null;let n=JSON.parse(Buffer.from(e[1].replace(/-/g,"+").replace(/_/g,"/"),"base64").toString("utf8")),{clientId:r,clientSecret:s,tenant:o}=n;return !r||!s||!o?null:{clientId:r,clientSecret:s,tenant:o}}catch{return null}}function gt(t){let e=Buffer.from(JSON.stringify({alg:"none",typ:"JWT"})).toString("base64url"),n=Buffer.from(JSON.stringify({clientId:t.clientId,clientSecret:t.clientSecret,tenant:t.tenant})).toString("base64url");return `${e}.${n}.`}l();var W;function yt(){return W||(W=mt()),W}var Et=d__namespace.default.join(u__namespace.default.tmpdir(),"flow-obs-update-cache.json"),me=1440*60*1e3,he=3e3;function ye(t,e){let n=o=>{let a=String(o).replace(/^v/,"").match(/^(\d+)\.(\d+)\.(\d+)/);return a?[+a[1],+a[2],+a[3]]:null},r=n(t),s=n(e);return !r||!s?false:s[0]!==r[0]?s[0]>r[0]:s[1]!==r[1]?s[1]>r[1]:s[2]>r[2]}function Ee(){try{let t=JSON.parse(i__namespace.default.readFileSync(Et,"utf8"));return typeof t.latestVersion!="string"||Date.now()-t.checkedAt>=me?null:t}catch{return null}}function Te(t,e,n=Date.now()){try{i__namespace.default.writeFileSync(Et,JSON.stringify({latestVersion:t,updatePriority:e??null,checkedAt:n}),{mode:384});}catch{}}function _e(t){let e=yt().name,n=de__default.default.get(`https://registry.npmjs.org/${encodeURIComponent(e)}/latest`,{timeout:he},r=>{if(r.statusCode!==200)return r.resume(),t(new Error(`HTTP ${r.statusCode}`));let s="";r.setEncoding("utf8"),r.on("data",o=>{s+=o;}),r.on("end",()=>{try{let o=JSON.parse(s);if(typeof o.version!="string")throw new Error("no version field");t(null,{version:o.version,updatePriority:typeof o.updatePriority=="string"?o.updatePriority:null});}catch(o){t(o);}});});n.on("error",t),n.on("timeout",()=>{n.destroy(new Error("timeout"));});}function Tt(){try{if(Ee())return;setImmediate(()=>{_e((t,e)=>{t||!e||ye(yt().version,e.version)&&Te(e.version,e.updatePriority,0);});});}catch{}}var Se=d__namespace.default.resolve(__dirname,".."),we=process.env.INIT_CWD?d__namespace.default.resolve(process.env.INIT_CWD):null;we===Se&&process.exit(0);j()&&(process.stderr.write(`
|
|
5
5
|
[flow-ai-obs] \u2717 Do not install with sudo.
|