@lensmcp/node-instrumentation 1.23.10 → 1.23.12

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/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var s=Object.defineProperty;var i=(t,r)=>s(t,"name",{value:r,configurable:!0});var p=Object.defineProperty,o=i((t,r)=>p(t,"name",{value:r,configurable:!0}),"o"),n=Object.defineProperty,e=o((t,r)=>n(t,"name",{value:r,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.resetActiveWorkForTests=exports.installActiveWorkProbe=exports.beginActiveWork=exports.activeWorkSnapshot=exports.installLensmcpNodeInstrumentation=exports.installChildAppBridge=exports.nestTap=exports.bullmqTap=exports.redisTap=exports.pgTap=exports.tapExec=exports.tapFs=exports.stopEventLoopTapForTests=exports.tapEventLoop=exports.resetEgressTapForTests=exports.tapEgress=exports.installRequireHook=exports.createEventFloodGuard=exports.maybeRotateEventFile=exports.EVENT_MAX_FILES=exports.EVENT_MAX_BYTES=exports.EVENT_FILE=exports.PROJECT=exports.isLensWriting=exports.lensEmit=void 0;var emit_1=require("./lib/emit");Object.defineProperty(exports,"lensEmit",{enumerable:!0,get:e(function(){return emit_1.lensEmit},"get")}),Object.defineProperty(exports,"isLensWriting",{enumerable:!0,get:e(function(){return emit_1.isLensWriting},"get")}),Object.defineProperty(exports,"PROJECT",{enumerable:!0,get:e(function(){return emit_1.PROJECT},"get")}),Object.defineProperty(exports,"EVENT_FILE",{enumerable:!0,get:e(function(){return emit_1.EVENT_FILE},"get")}),Object.defineProperty(exports,"EVENT_MAX_BYTES",{enumerable:!0,get:e(function(){return emit_1.EVENT_MAX_BYTES},"get")}),Object.defineProperty(exports,"EVENT_MAX_FILES",{enumerable:!0,get:e(function(){return emit_1.EVENT_MAX_FILES},"get")}),Object.defineProperty(exports,"maybeRotateEventFile",{enumerable:!0,get:e(function(){return emit_1.maybeRotateEventFile},"get")});var flood_guard_1=require("./lib/flood-guard");Object.defineProperty(exports,"createEventFloodGuard",{enumerable:!0,get:e(function(){return flood_guard_1.createEventFloodGuard},"get")});var require_hook_1=require("./lib/require-hook");Object.defineProperty(exports,"installRequireHook",{enumerable:!0,get:e(function(){return require_hook_1.installRequireHook},"get")});var tap_egress_1=require("./lib/tap-egress");Object.defineProperty(exports,"tapEgress",{enumerable:!0,get:e(function(){return tap_egress_1.tapEgress},"get")}),Object.defineProperty(exports,"resetEgressTapForTests",{enumerable:!0,get:e(function(){return tap_egress_1.resetEgressTapForTests},"get")});var tap_event_loop_1=require("./lib/tap-event-loop");Object.defineProperty(exports,"tapEventLoop",{enumerable:!0,get:e(function(){return tap_event_loop_1.tapEventLoop},"get")}),Object.defineProperty(exports,"stopEventLoopTapForTests",{enumerable:!0,get:e(function(){return tap_event_loop_1.stopEventLoopTapForTests},"get")});var tap_fs_1=require("./lib/tap-fs");Object.defineProperty(exports,"tapFs",{enumerable:!0,get:e(function(){return tap_fs_1.tapFs},"get")});var tap_exec_1=require("./lib/tap-exec");Object.defineProperty(exports,"tapExec",{enumerable:!0,get:e(function(){return tap_exec_1.tapExec},"get")});var tap_pg_1=require("./lib/tap-pg");Object.defineProperty(exports,"pgTap",{enumerable:!0,get:e(function(){return tap_pg_1.pgTap},"get")});var tap_redis_1=require("./lib/tap-redis");Object.defineProperty(exports,"redisTap",{enumerable:!0,get:e(function(){return tap_redis_1.redisTap},"get")});var tap_bullmq_1=require("./lib/tap-bullmq");Object.defineProperty(exports,"bullmqTap",{enumerable:!0,get:e(function(){return tap_bullmq_1.bullmqTap},"get")});var tap_nest_1=require("./lib/tap-nest");Object.defineProperty(exports,"nestTap",{enumerable:!0,get:e(function(){return tap_nest_1.nestTap},"get")}),Object.defineProperty(exports,"installChildAppBridge",{enumerable:!0,get:e(function(){return tap_nest_1.installChildAppBridge},"get")});var install_1=require("./lib/install");Object.defineProperty(exports,"installLensmcpNodeInstrumentation",{enumerable:!0,get:e(function(){return install_1.installLensmcpNodeInstrumentation},"get")});var active_work_1=require("./lib/active-work");Object.defineProperty(exports,"activeWorkSnapshot",{enumerable:!0,get:e(function(){return active_work_1.activeWorkSnapshot},"get")}),Object.defineProperty(exports,"beginActiveWork",{enumerable:!0,get:e(function(){return active_work_1.beginActiveWork},"get")}),Object.defineProperty(exports,"installActiveWorkProbe",{enumerable:!0,get:e(function(){return active_work_1.installActiveWorkProbe},"get")}),Object.defineProperty(exports,"resetActiveWorkForTests",{enumerable:!0,get:e(function(){return active_work_1.resetActiveWorkForTests},"get")});
1
+ "use strict";var p=Object.defineProperty;var o=(t,r)=>p(t,"name",{value:r,configurable:!0});var n=Object.defineProperty,e=o((t,r)=>n(t,"name",{value:r,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.resetActiveWorkForTests=exports.installActiveWorkProbe=exports.beginActiveWork=exports.activeWorkSnapshot=exports.installLensmcpNodeInstrumentation=exports.installChildAppBridge=exports.nestTap=exports.bullmqTap=exports.redisTap=exports.pgTap=exports.tapExec=exports.tapFs=exports.stopEventLoopTapForTests=exports.tapEventLoop=exports.resetEgressTapForTests=exports.tapEgress=exports.installRequireHook=exports.createEventFloodGuard=exports.maybeRotateEventFile=exports.EVENT_MAX_FILES=exports.EVENT_MAX_BYTES=exports.EVENT_FILE=exports.PROJECT=exports.isLensWriting=exports.lensEmit=void 0;var emit_1=require("./lib/emit");Object.defineProperty(exports,"lensEmit",{enumerable:!0,get:e(function(){return emit_1.lensEmit},"get")}),Object.defineProperty(exports,"isLensWriting",{enumerable:!0,get:e(function(){return emit_1.isLensWriting},"get")}),Object.defineProperty(exports,"PROJECT",{enumerable:!0,get:e(function(){return emit_1.PROJECT},"get")}),Object.defineProperty(exports,"EVENT_FILE",{enumerable:!0,get:e(function(){return emit_1.EVENT_FILE},"get")}),Object.defineProperty(exports,"EVENT_MAX_BYTES",{enumerable:!0,get:e(function(){return emit_1.EVENT_MAX_BYTES},"get")}),Object.defineProperty(exports,"EVENT_MAX_FILES",{enumerable:!0,get:e(function(){return emit_1.EVENT_MAX_FILES},"get")}),Object.defineProperty(exports,"maybeRotateEventFile",{enumerable:!0,get:e(function(){return emit_1.maybeRotateEventFile},"get")});var flood_guard_1=require("./lib/flood-guard");Object.defineProperty(exports,"createEventFloodGuard",{enumerable:!0,get:e(function(){return flood_guard_1.createEventFloodGuard},"get")});var require_hook_1=require("./lib/require-hook");Object.defineProperty(exports,"installRequireHook",{enumerable:!0,get:e(function(){return require_hook_1.installRequireHook},"get")});var tap_egress_1=require("./lib/tap-egress");Object.defineProperty(exports,"tapEgress",{enumerable:!0,get:e(function(){return tap_egress_1.tapEgress},"get")}),Object.defineProperty(exports,"resetEgressTapForTests",{enumerable:!0,get:e(function(){return tap_egress_1.resetEgressTapForTests},"get")});var tap_event_loop_1=require("./lib/tap-event-loop");Object.defineProperty(exports,"tapEventLoop",{enumerable:!0,get:e(function(){return tap_event_loop_1.tapEventLoop},"get")}),Object.defineProperty(exports,"stopEventLoopTapForTests",{enumerable:!0,get:e(function(){return tap_event_loop_1.stopEventLoopTapForTests},"get")});var tap_fs_1=require("./lib/tap-fs");Object.defineProperty(exports,"tapFs",{enumerable:!0,get:e(function(){return tap_fs_1.tapFs},"get")});var tap_exec_1=require("./lib/tap-exec");Object.defineProperty(exports,"tapExec",{enumerable:!0,get:e(function(){return tap_exec_1.tapExec},"get")});var tap_pg_1=require("./lib/tap-pg");Object.defineProperty(exports,"pgTap",{enumerable:!0,get:e(function(){return tap_pg_1.pgTap},"get")});var tap_redis_1=require("./lib/tap-redis");Object.defineProperty(exports,"redisTap",{enumerable:!0,get:e(function(){return tap_redis_1.redisTap},"get")});var tap_bullmq_1=require("./lib/tap-bullmq");Object.defineProperty(exports,"bullmqTap",{enumerable:!0,get:e(function(){return tap_bullmq_1.bullmqTap},"get")});var tap_nest_1=require("./lib/tap-nest");Object.defineProperty(exports,"nestTap",{enumerable:!0,get:e(function(){return tap_nest_1.nestTap},"get")}),Object.defineProperty(exports,"installChildAppBridge",{enumerable:!0,get:e(function(){return tap_nest_1.installChildAppBridge},"get")});var install_1=require("./lib/install");Object.defineProperty(exports,"installLensmcpNodeInstrumentation",{enumerable:!0,get:e(function(){return install_1.installLensmcpNodeInstrumentation},"get")});var active_work_1=require("./lib/active-work");Object.defineProperty(exports,"activeWorkSnapshot",{enumerable:!0,get:e(function(){return active_work_1.activeWorkSnapshot},"get")}),Object.defineProperty(exports,"beginActiveWork",{enumerable:!0,get:e(function(){return active_work_1.beginActiveWork},"get")}),Object.defineProperty(exports,"installActiveWorkProbe",{enumerable:!0,get:e(function(){return active_work_1.installActiveWorkProbe},"get")}),Object.defineProperty(exports,"resetActiveWorkForTests",{enumerable:!0,get:e(function(){return active_work_1.resetActiveWorkForTests},"get")});
@@ -1 +1 @@
1
- "use strict";var v=Object.defineProperty;var r=(t,e)=>v(t,"name",{value:e,configurable:!0});var a=Object.defineProperty,o=r((t,e)=>a(t,"name",{value:e,configurable:!0}),"o"),i=Object.defineProperty,n=o((t,e)=>i(t,"name",{value:e,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.beginActiveWorkGeneration=beginActiveWorkGeneration,exports.activeWorkGeneration=activeWorkGeneration,exports.beginActiveWork=beginActiveWork,exports.activeWorkSnapshot=activeWorkSnapshot,exports.installActiveWorkProbe=installActiveWorkProbe,exports.resetActiveWorkForTests=resetActiveWorkForTests;const GLOBAL_KEY="__lensmcpActiveWork",running=new Set;let currentGeneration=0;function beginActiveWorkGeneration(){return++currentGeneration}r(beginActiveWorkGeneration,"beginActiveWorkGeneration"),o(beginActiveWorkGeneration,"beginActiveWorkGeneration"),n(beginActiveWorkGeneration,"beginActiveWorkGeneration");function activeWorkGeneration(){return currentGeneration}r(activeWorkGeneration,"activeWorkGeneration"),o(activeWorkGeneration,"activeWorkGeneration"),n(activeWorkGeneration,"activeWorkGeneration");function beginActiveWork(t){const e={at:Date.now(),...t===void 0?{}:{gen:t}};running.add(e);let c=!1;return()=>{c||(c=!0,running.delete(e))}}r(beginActiveWork,"beginActiveWork"),o(beginActiveWork,"beginActiveWork"),n(beginActiveWork,"beginActiveWork");function activeWorkSnapshot(t){let e,c=0;for(const s of running)t!==void 0&&s.gen!==void 0&&s.gen!==t||(c+=1,(e===void 0||s.at<e)&&(e=s.at));return{count:c,...e===void 0?{}:{oldestStartedAt:e}}}r(activeWorkSnapshot,"activeWorkSnapshot"),o(activeWorkSnapshot,"activeWorkSnapshot"),n(activeWorkSnapshot,"activeWorkSnapshot");function installActiveWorkProbe(){globalThis[GLOBAL_KEY]=activeWorkSnapshot,globalThis.__lensmcpBeginWorkGeneration=beginActiveWorkGeneration}r(installActiveWorkProbe,"installActiveWorkProbe"),o(installActiveWorkProbe,"installActiveWorkProbe"),n(installActiveWorkProbe,"installActiveWorkProbe");function resetActiveWorkForTests(){running.clear(),currentGeneration=0}r(resetActiveWorkForTests,"resetActiveWorkForTests"),o(resetActiveWorkForTests,"resetActiveWorkForTests"),n(resetActiveWorkForTests,"resetActiveWorkForTests");
1
+ "use strict";var a=Object.defineProperty;var o=(t,e)=>a(t,"name",{value:e,configurable:!0});var i=Object.defineProperty,n=o((t,e)=>i(t,"name",{value:e,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.beginActiveWorkGeneration=beginActiveWorkGeneration,exports.activeWorkGeneration=activeWorkGeneration,exports.beginActiveWork=beginActiveWork,exports.activeWorkSnapshot=activeWorkSnapshot,exports.installActiveWorkProbe=installActiveWorkProbe,exports.resetActiveWorkForTests=resetActiveWorkForTests;const GLOBAL_KEY="__lensmcpActiveWork",running=new Set;let currentGeneration=0;function beginActiveWorkGeneration(){return++currentGeneration}o(beginActiveWorkGeneration,"beginActiveWorkGeneration"),n(beginActiveWorkGeneration,"beginActiveWorkGeneration");function activeWorkGeneration(){return currentGeneration}o(activeWorkGeneration,"activeWorkGeneration"),n(activeWorkGeneration,"activeWorkGeneration");function beginActiveWork(t){const e={at:Date.now(),...t===void 0?{}:{gen:t}};running.add(e);let r=!1;return()=>{r||(r=!0,running.delete(e))}}o(beginActiveWork,"beginActiveWork"),n(beginActiveWork,"beginActiveWork");function activeWorkSnapshot(t){let e,r=0;for(const c of running)t!==void 0&&c.gen!==void 0&&c.gen!==t||(r+=1,(e===void 0||c.at<e)&&(e=c.at));return{count:r,...e===void 0?{}:{oldestStartedAt:e}}}o(activeWorkSnapshot,"activeWorkSnapshot"),n(activeWorkSnapshot,"activeWorkSnapshot");function installActiveWorkProbe(){globalThis[GLOBAL_KEY]=activeWorkSnapshot,globalThis.__lensmcpBeginWorkGeneration=beginActiveWorkGeneration}o(installActiveWorkProbe,"installActiveWorkProbe"),n(installActiveWorkProbe,"installActiveWorkProbe");function resetActiveWorkForTests(){running.clear(),currentGeneration=0}o(resetActiveWorkForTests,"resetActiveWorkForTests"),n(resetActiveWorkForTests,"resetActiveWorkForTests");
@@ -1,16 +1,16 @@
1
- "use strict";var z=Object.defineProperty;var _=(t,e)=>z(t,"name",{value:e,configurable:!0});var j=Object.defineProperty,d=_((t,e)=>j(t,"name",{value:e,configurable:!0}),"d"),M=Object.defineProperty,u=d((t,e)=>M(t,"name",{value:e,configurable:!0}),"u");Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseExtraHosts=parseExtraHosts,exports.matchTarget=matchTarget,exports.flattenContent=flattenContent,exports.normalizeRequest=normalizeRequest,exports.mapUsage=mapUsage,exports.normalizeResponse=normalizeResponse,exports.createStreamAccumulator=createStreamAccumulator;const isObj=u(t=>typeof t=="object"&&t!==null&&!Array.isArray(t),"isObj"),asArr=u(t=>Array.isArray(t)?t:[],"asArr"),asStr=u(t=>typeof t=="string"?t:void 0,"asStr"),asNum=u(t=>typeof t=="number"&&Number.isFinite(t)?t:void 0,"asNum"),MAX_ACCUMULATED_CHARS=512*1024,MAX_EVENT_BUFFER_CHARS=1024*1024,MAX_BLOCK_JSON_CHARS=2e3,KNOWN_HOSTS=[{test:/^api\.openai\.com$/i,provider:"openai"},{test:/\.openai\.azure\.com$/i,provider:"openai"},{test:/^api\.anthropic\.com$/i,provider:"anthropic"}],authorityOf=u(t=>t.trim().toLowerCase().replace(/^[a-z][a-z0-9+.-]*:\/\//,"").replace(/[/?#].*$/,""),"authorityOf");function parseExtraHosts(t){const e=new Map;for(const o of(t??"").split(",")){const a=o.lastIndexOf("=");if(a===-1)continue;const n=authorityOf(o.slice(0,a)),i=o.slice(a+1).trim().toLowerCase();n&&(i==="openai"||i==="anthropic")&&e.set(n,i)}return e}_(parseExtraHosts,"parseExtraHosts"),d(parseExtraHosts,"parseExtraHosts"),u(parseExtraHosts,"parseExtraHosts");function apiFor(t,e){const o=e.replace(/\/+$/,"").toLowerCase();if(t==="anthropic")return o.endsWith("/messages")?"messages":void 0;if(o.endsWith("/chat/completions"))return"chat";if(o.endsWith("/responses"))return"responses";if(o.endsWith("/embeddings"))return"embeddings"}_(apiFor,"apiFor"),d(apiFor,"apiFor"),u(apiFor,"apiFor");function matchTarget(t,e,o,a){const n=t.toLowerCase(),i=a.get(e?`${n}:${e}`:n)??a.get(n)??KNOWN_HOSTS.find(p=>p.test.test(n))?.provider;if(!i)return;const c=apiFor(i,o);return c?{provider:i,api:c}:void 0}_(matchTarget,"matchTarget"),d(matchTarget,"matchTarget"),u(matchTarget,"matchTarget");function jsonText(t,e=MAX_BLOCK_JSON_CHARS){try{const o=JSON.stringify(t);return o===void 0?"":o.length>e?`${o.slice(0,e)}\u2026`:o}catch{return""}}_(jsonText,"jsonText"),d(jsonText,"jsonText"),u(jsonText,"jsonText");const argsText=u(t=>typeof t=="string"?t:t==null?void 0:jsonText(t,8192),"argsText");function flattenContent(t){if(t==null)return"";if(typeof t=="string")return t;if(!Array.isArray(t))return jsonText(t);const e=[];for(const o of t){if(typeof o=="string"){e.push(o);continue}if(!isObj(o))continue;const a=asStr(o.type)??"";switch(a){case"text":case"input_text":case"output_text":e.push(asStr(o.text)??"");break;case"refusal":e.push(`[refusal] ${asStr(o.refusal)??""}`);break;case"image_url":case"image":case"input_image":e.push("[image]");break;case"input_audio":case"audio":e.push("[audio]");break;case"file":case"input_file":case"document":e.push("[file]");break;case"tool_use":e.push(`[tool_use ${asStr(o.name)??""} ${jsonText(o.input)}]`);break;case"tool_result":e.push(`[tool_result ${flattenContent(o.content)}]`);break;case"thinking":e.push(`[thinking] ${asStr(o.thinking)??""}`);break;case"redacted_thinking":e.push("[redacted_thinking]");break;default:e.push(asStr(o.text)??`[${a||"part"}]`)}}return e.filter(o=>o!=="").join(`
2
- `)}_(flattenContent,"flattenContent"),d(flattenContent,"flattenContent"),u(flattenContent,"flattenContent");const SCALAR_PARAMS={chat:["temperature","top_p","max_tokens","max_completion_tokens","n","seed","presence_penalty","frequency_penalty","tool_choice","reasoning_effort","service_tier"],responses:["temperature","top_p","max_output_tokens","tool_choice","parallel_tool_calls","service_tier"],messages:["max_tokens","temperature","top_p","top_k"],embeddings:["dimensions","encoding_format"]};function scalarParams(t,e){const o={};for(const p of SCALAR_PARAMS[e]){const h=t[p];(typeof h=="string"||typeof h=="number"||typeof h=="boolean")&&(o[p]=h)}const a=t.reasoning;isObj(a)&&typeof a.effort=="string"&&(o.reasoning_effort=a.effort);const n=t.thinking;isObj(n)&&(typeof n.type=="string"&&(o.thinking=n.type),typeof n.budget_tokens=="number"&&(o.thinking_budget_tokens=n.budget_tokens));const i=t.response_format;isObj(i)&&typeof i.type=="string"&&(o.response_format=i.type);const c=t.tool_choice;return isObj(c)&&typeof c.type=="string"&&(o.tool_choice=c.type),o}_(scalarParams,"scalarParams"),d(scalarParams,"scalarParams"),u(scalarParams,"scalarParams");function toolsOf(t){const e=[];for(const o of asArr(t.tools)){if(!isObj(o))continue;const a=isObj(o.function)?o.function:void 0,n=asStr(a?.name)??asStr(o.name)??asStr(o.type);if(!n)continue;const i=asStr(a?.description)??asStr(o.description);e.push(i?{name:n,description:i}:{name:n})}return e}_(toolsOf,"toolsOf"),d(toolsOf,"toolsOf"),u(toolsOf,"toolsOf");function chatMessage(t){let e=flattenContent(t.content);for(const o of asArr(t.tool_calls)){if(!isObj(o))continue;const a=isObj(o.function)?o.function:{};e+=`${e?`
3
- `:""}[tool_call ${asStr(a.name)??""} ${asStr(a.arguments)??""}]`}return{role:asStr(t.role)??"unknown",content:e}}_(chatMessage,"chatMessage"),d(chatMessage,"chatMessage"),u(chatMessage,"chatMessage");function responsesInput(t){if(typeof t=="string")return[{role:"user",content:t}];const e=[];for(const o of asArr(t)){if(!isObj(o))continue;const a=asStr(o.type);a==="function_call_output"?e.push({role:"tool",content:flattenContent(o.output)}):a==="function_call"?e.push({role:"assistant",content:`[tool_call ${asStr(o.name)??""} ${asStr(o.arguments)??""}]`}):e.push({role:asStr(o.role)??a??"user",content:flattenContent(o.content)})}return e}_(responsesInput,"responsesInput"),d(responsesInput,"responsesInput"),u(responsesInput,"responsesInput");function normalizeRequest(t,e){const o={messages:[],tools:[],params:{},stream:!1};if(!isObj(e))return o;const a={...o,...asStr(e.model)?{model:asStr(e.model)}:{},stream:e.stream===!0,params:scalarParams(e,t.api),tools:toolsOf(e)};switch(t.api){case"chat":a.messages=asArr(e.messages).filter(isObj).map(chatMessage);break;case"responses":{const n=asStr(e.instructions);n&&(a.system=n),a.messages=responsesInput(e.input);break}case"messages":{const n=e.system,i=typeof n=="string"?n:flattenContent(n);i&&(a.system=i),a.messages=asArr(e.messages).filter(isObj).map(c=>({role:asStr(c.role)??"unknown",content:flattenContent(c.content)}));break}case"embeddings":{const n=e.input;a.inputCount=Array.isArray(n)?n.length:n===void 0?0:1;break}}return a}_(normalizeRequest,"normalizeRequest"),d(normalizeRequest,"normalizeRequest"),u(normalizeRequest,"normalizeRequest");function mapUsage(t,e=!0){if(!isObj(t))return{};const o=isObj(t.prompt_tokens_details)?t.prompt_tokens_details:isObj(t.input_tokens_details)?t.input_tokens_details:{},a=isObj(t.completion_tokens_details)?t.completion_tokens_details:isObj(t.output_tokens_details)?t.output_tokens_details:{},n={},i=asNum(t.prompt_tokens)??asNum(t.input_tokens),c=asNum(t.completion_tokens)??asNum(t.output_tokens),p=asNum(o.cached_tokens)??asNum(t.cache_read_input_tokens),h=asNum(a.reasoning_tokens);i!==void 0&&(n.promptTokens=i),c!==void 0&&(n.completionTokens=c),p!==void 0&&(n.cachedTokens=p),h!==void 0&&(n.reasoningTokens=h);const m=asNum(t.total_tokens);return m!==void 0?n.totalTokens=m:e&&i!==void 0&&c!==void 0&&(n.totalTokens=i+c),n}_(mapUsage,"mapUsage"),d(mapUsage,"mapUsage"),u(mapUsage,"mapUsage");const withTotal=u(t=>t.totalTokens===void 0&&t.promptTokens!==void 0&&t.completionTokens!==void 0?{...t,totalTokens:t.promptTokens+t.completionTokens}:t,"withTotal");function errorMessage(t){const e=t.error;if(typeof e=="string")return e;if(isObj(e))return asStr(e.message)??asStr(e.type)??asStr(e.code)}_(errorMessage,"errorMessage"),d(errorMessage,"errorMessage"),u(errorMessage,"errorMessage");function normalizeResponse(t,e){const o={completion:"",toolCalls:[],usage:{}};if(!isObj(e))return o;const a=asStr(e.id),n=asStr(e.model);a&&(o.id=a),n&&(o.model=n);const i=errorMessage(e);switch(i&&(o.error=i),o.usage=mapUsage(e.usage),t.api){case"chat":{const c=asArr(e.choices).find(isObj),p=c&&isObj(c.message)?c.message:void 0;if(p){o.completion=flattenContent(p.content);const m=asStr(p.refusal);m&&(o.completion+=`${o.completion?`
4
- `:""}[refusal] ${m}`);const k=asStr(p.reasoning_content)??asStr(p.reasoning);k&&(o.reasoning=k);for(const y of asArr(p.tool_calls)){if(!isObj(y))continue;const v=isObj(y.function)?y.function:{},C=argsText(v.arguments);o.toolCalls.push({...asStr(y.id)?{id:asStr(y.id)}:{},name:asStr(v.name)??"tool",...C!==void 0?{arguments:C}:{}})}const f=isObj(p.function_call)?p.function_call:void 0;if(f){const y=argsText(f.arguments);o.toolCalls.push({name:asStr(f.name)??"tool",...y!==void 0?{arguments:y}:{}})}}const h=asStr(c?.finish_reason);h&&(o.finishReason=h);break}case"responses":{const c=[],p=[];for(const f of asArr(e.output)){if(!isObj(f))continue;const y=asStr(f.type);if(y==="message")c.push(flattenContent(f.content));else if(y==="function_call")o.toolCalls.push({...asStr(f.call_id)??asStr(f.id)?{id:asStr(f.call_id)??asStr(f.id)}:{},name:asStr(f.name)??"tool",...asStr(f.arguments)!==void 0?{arguments:asStr(f.arguments)}:{}});else if(y==="reasoning")for(const v of asArr(f.summary))isObj(v)&&asStr(v.text)&&p.push(asStr(v.text))}o.completion=c.filter(Boolean).join(`
1
+ "use strict";var j=Object.defineProperty;var d=(t,e)=>j(t,"name",{value:e,configurable:!0});var M=Object.defineProperty,u=d((t,e)=>M(t,"name",{value:e,configurable:!0}),"u");Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseExtraHosts=parseExtraHosts,exports.matchTarget=matchTarget,exports.flattenContent=flattenContent,exports.normalizeRequest=normalizeRequest,exports.mapUsage=mapUsage,exports.normalizeResponse=normalizeResponse,exports.createStreamAccumulator=createStreamAccumulator;const isObj=u(t=>typeof t=="object"&&t!==null&&!Array.isArray(t),"isObj"),asArr=u(t=>Array.isArray(t)?t:[],"asArr"),asStr=u(t=>typeof t=="string"?t:void 0,"asStr"),asNum=u(t=>typeof t=="number"&&Number.isFinite(t)?t:void 0,"asNum"),MAX_ACCUMULATED_CHARS=512*1024,MAX_EVENT_BUFFER_CHARS=1024*1024,MAX_BLOCK_JSON_CHARS=2e3,KNOWN_HOSTS=[{test:/^api\.openai\.com$/i,provider:"openai"},{test:/\.openai\.azure\.com$/i,provider:"openai"},{test:/^api\.anthropic\.com$/i,provider:"anthropic"}],authorityOf=u(t=>t.trim().toLowerCase().replace(/^[a-z][a-z0-9+.-]*:\/\//,"").replace(/[/?#].*$/,""),"authorityOf");function parseExtraHosts(t){const e=new Map;for(const o of(t??"").split(",")){const a=o.lastIndexOf("=");if(a===-1)continue;const n=authorityOf(o.slice(0,a)),r=o.slice(a+1).trim().toLowerCase();n&&(r==="openai"||r==="anthropic")&&e.set(n,r)}return e}d(parseExtraHosts,"parseExtraHosts"),u(parseExtraHosts,"parseExtraHosts");function apiFor(t,e){const o=e.replace(/\/+$/,"").toLowerCase();if(t==="anthropic")return o.endsWith("/messages")?"messages":void 0;if(o.endsWith("/chat/completions"))return"chat";if(o.endsWith("/responses"))return"responses";if(o.endsWith("/embeddings"))return"embeddings"}d(apiFor,"apiFor"),u(apiFor,"apiFor");function matchTarget(t,e,o,a){const n=t.toLowerCase(),r=a.get(e?`${n}:${e}`:n)??a.get(n)??KNOWN_HOSTS.find(p=>p.test.test(n))?.provider;if(!r)return;const c=apiFor(r,o);return c?{provider:r,api:c}:void 0}d(matchTarget,"matchTarget"),u(matchTarget,"matchTarget");function jsonText(t,e=MAX_BLOCK_JSON_CHARS){try{const o=JSON.stringify(t);return o===void 0?"":o.length>e?`${o.slice(0,e)}\u2026`:o}catch{return""}}d(jsonText,"jsonText"),u(jsonText,"jsonText");const argsText=u(t=>typeof t=="string"?t:t==null?void 0:jsonText(t,8192),"argsText");function flattenContent(t){if(t==null)return"";if(typeof t=="string")return t;if(!Array.isArray(t))return jsonText(t);const e=[];for(const o of t){if(typeof o=="string"){e.push(o);continue}if(!isObj(o))continue;const a=asStr(o.type)??"";switch(a){case"text":case"input_text":case"output_text":e.push(asStr(o.text)??"");break;case"refusal":e.push(`[refusal] ${asStr(o.refusal)??""}`);break;case"image_url":case"image":case"input_image":e.push("[image]");break;case"input_audio":case"audio":e.push("[audio]");break;case"file":case"input_file":case"document":e.push("[file]");break;case"tool_use":e.push(`[tool_use ${asStr(o.name)??""} ${jsonText(o.input)}]`);break;case"tool_result":e.push(`[tool_result ${flattenContent(o.content)}]`);break;case"thinking":e.push(`[thinking] ${asStr(o.thinking)??""}`);break;case"redacted_thinking":e.push("[redacted_thinking]");break;default:e.push(asStr(o.text)??`[${a||"part"}]`)}}return e.filter(o=>o!=="").join(`
2
+ `)}d(flattenContent,"flattenContent"),u(flattenContent,"flattenContent");const SCALAR_PARAMS={chat:["temperature","top_p","max_tokens","max_completion_tokens","n","seed","presence_penalty","frequency_penalty","tool_choice","reasoning_effort","service_tier"],responses:["temperature","top_p","max_output_tokens","tool_choice","parallel_tool_calls","service_tier"],messages:["max_tokens","temperature","top_p","top_k"],embeddings:["dimensions","encoding_format"]};function scalarParams(t,e){const o={};for(const p of SCALAR_PARAMS[e]){const _=t[p];(typeof _=="string"||typeof _=="number"||typeof _=="boolean")&&(o[p]=_)}const a=t.reasoning;isObj(a)&&typeof a.effort=="string"&&(o.reasoning_effort=a.effort);const n=t.thinking;isObj(n)&&(typeof n.type=="string"&&(o.thinking=n.type),typeof n.budget_tokens=="number"&&(o.thinking_budget_tokens=n.budget_tokens));const r=t.response_format;isObj(r)&&typeof r.type=="string"&&(o.response_format=r.type);const c=t.tool_choice;return isObj(c)&&typeof c.type=="string"&&(o.tool_choice=c.type),o}d(scalarParams,"scalarParams"),u(scalarParams,"scalarParams");function toolsOf(t){const e=[];for(const o of asArr(t.tools)){if(!isObj(o))continue;const a=isObj(o.function)?o.function:void 0,n=asStr(a?.name)??asStr(o.name)??asStr(o.type);if(!n)continue;const r=asStr(a?.description)??asStr(o.description);e.push(r?{name:n,description:r}:{name:n})}return e}d(toolsOf,"toolsOf"),u(toolsOf,"toolsOf");function chatMessage(t){let e=flattenContent(t.content);for(const o of asArr(t.tool_calls)){if(!isObj(o))continue;const a=isObj(o.function)?o.function:{};e+=`${e?`
3
+ `:""}[tool_call ${asStr(a.name)??""} ${asStr(a.arguments)??""}]`}return{role:asStr(t.role)??"unknown",content:e}}d(chatMessage,"chatMessage"),u(chatMessage,"chatMessage");function responsesInput(t){if(typeof t=="string")return[{role:"user",content:t}];const e=[];for(const o of asArr(t)){if(!isObj(o))continue;const a=asStr(o.type);a==="function_call_output"?e.push({role:"tool",content:flattenContent(o.output)}):a==="function_call"?e.push({role:"assistant",content:`[tool_call ${asStr(o.name)??""} ${asStr(o.arguments)??""}]`}):e.push({role:asStr(o.role)??a??"user",content:flattenContent(o.content)})}return e}d(responsesInput,"responsesInput"),u(responsesInput,"responsesInput");function normalizeRequest(t,e){const o={messages:[],tools:[],params:{},stream:!1};if(!isObj(e))return o;const a={...o,...asStr(e.model)?{model:asStr(e.model)}:{},stream:e.stream===!0,params:scalarParams(e,t.api),tools:toolsOf(e)};switch(t.api){case"chat":a.messages=asArr(e.messages).filter(isObj).map(chatMessage);break;case"responses":{const n=asStr(e.instructions);n&&(a.system=n),a.messages=responsesInput(e.input);break}case"messages":{const n=e.system,r=typeof n=="string"?n:flattenContent(n);r&&(a.system=r),a.messages=asArr(e.messages).filter(isObj).map(c=>({role:asStr(c.role)??"unknown",content:flattenContent(c.content)}));break}case"embeddings":{const n=e.input;a.inputCount=Array.isArray(n)?n.length:n===void 0?0:1;break}}return a}d(normalizeRequest,"normalizeRequest"),u(normalizeRequest,"normalizeRequest");function mapUsage(t,e=!0){if(!isObj(t))return{};const o=isObj(t.prompt_tokens_details)?t.prompt_tokens_details:isObj(t.input_tokens_details)?t.input_tokens_details:{},a=isObj(t.completion_tokens_details)?t.completion_tokens_details:isObj(t.output_tokens_details)?t.output_tokens_details:{},n={},r=asNum(t.prompt_tokens)??asNum(t.input_tokens),c=asNum(t.completion_tokens)??asNum(t.output_tokens),p=asNum(o.cached_tokens)??asNum(t.cache_read_input_tokens),_=asNum(a.reasoning_tokens);r!==void 0&&(n.promptTokens=r),c!==void 0&&(n.completionTokens=c),p!==void 0&&(n.cachedTokens=p),_!==void 0&&(n.reasoningTokens=_);const f=asNum(t.total_tokens);return f!==void 0?n.totalTokens=f:e&&r!==void 0&&c!==void 0&&(n.totalTokens=r+c),n}d(mapUsage,"mapUsage"),u(mapUsage,"mapUsage");const withTotal=u(t=>t.totalTokens===void 0&&t.promptTokens!==void 0&&t.completionTokens!==void 0?{...t,totalTokens:t.promptTokens+t.completionTokens}:t,"withTotal");function errorMessage(t){const e=t.error;if(typeof e=="string")return e;if(isObj(e))return asStr(e.message)??asStr(e.type)??asStr(e.code)}d(errorMessage,"errorMessage"),u(errorMessage,"errorMessage");function normalizeResponse(t,e){const o={completion:"",toolCalls:[],usage:{}};if(!isObj(e))return o;const a=asStr(e.id),n=asStr(e.model);a&&(o.id=a),n&&(o.model=n);const r=errorMessage(e);switch(r&&(o.error=r),o.usage=mapUsage(e.usage),t.api){case"chat":{const c=asArr(e.choices).find(isObj),p=c&&isObj(c.message)?c.message:void 0;if(p){o.completion=flattenContent(p.content);const f=asStr(p.refusal);f&&(o.completion+=`${o.completion?`
4
+ `:""}[refusal] ${f}`);const h=asStr(p.reasoning_content)??asStr(p.reasoning);h&&(o.reasoning=h);for(const k of asArr(p.tool_calls)){if(!isObj(k))continue;const y=isObj(k.function)?k.function:{},b=argsText(y.arguments);o.toolCalls.push({...asStr(k.id)?{id:asStr(k.id)}:{},name:asStr(y.name)??"tool",...b!==void 0?{arguments:b}:{}})}const m=isObj(p.function_call)?p.function_call:void 0;if(m){const k=argsText(m.arguments);o.toolCalls.push({name:asStr(m.name)??"tool",...k!==void 0?{arguments:k}:{}})}}const _=asStr(c?.finish_reason);_&&(o.finishReason=_);break}case"responses":{const c=[],p=[];for(const m of asArr(e.output)){if(!isObj(m))continue;const k=asStr(m.type);if(k==="message")c.push(flattenContent(m.content));else if(k==="function_call")o.toolCalls.push({...asStr(m.call_id)??asStr(m.id)?{id:asStr(m.call_id)??asStr(m.id)}:{},name:asStr(m.name)??"tool",...asStr(m.arguments)!==void 0?{arguments:asStr(m.arguments)}:{}});else if(k==="reasoning")for(const y of asArr(m.summary))isObj(y)&&asStr(y.text)&&p.push(asStr(y.text))}o.completion=c.filter(Boolean).join(`
5
5
  `),p.length&&(o.reasoning=p.join(`
6
- `));const h=isObj(e.incomplete_details)?asStr(e.incomplete_details.reason):void 0,m=asStr(e.status),k=h??m;k&&(o.finishReason=k),!o.error&&isObj(e.error)&&(o.error=errorMessage(e));break}case"messages":{const c=[],p=[];for(const m of asArr(e.content)){if(!isObj(m))continue;const k=asStr(m.type);k==="text"?c.push(asStr(m.text)??""):k==="thinking"?p.push(asStr(m.thinking)??""):(k==="tool_use"||k==="server_tool_use"||k==="mcp_tool_use")&&o.toolCalls.push({...asStr(m.id)?{id:asStr(m.id)}:{},name:asStr(m.name)??"tool",arguments:jsonText(m.input)})}o.completion=c.filter(Boolean).join(`
6
+ `));const _=isObj(e.incomplete_details)?asStr(e.incomplete_details.reason):void 0,f=asStr(e.status),h=_??f;h&&(o.finishReason=h),!o.error&&isObj(e.error)&&(o.error=errorMessage(e));break}case"messages":{const c=[],p=[];for(const f of asArr(e.content)){if(!isObj(f))continue;const h=asStr(f.type);h==="text"?c.push(asStr(f.text)??""):h==="thinking"?p.push(asStr(f.thinking)??""):(h==="tool_use"||h==="server_tool_use"||h==="mcp_tool_use")&&o.toolCalls.push({...asStr(f.id)?{id:asStr(f.id)}:{},name:asStr(f.name)??"tool",arguments:jsonText(f.input)})}o.completion=c.filter(Boolean).join(`
7
7
  `),p.length&&(o.reasoning=p.filter(Boolean).join(`
8
- `));const h=asStr(e.stop_reason);h&&(o.finishReason=h);break}case"embeddings":o.vectorCount=asArr(e.data).length;break}return o}_(normalizeResponse,"normalizeResponse"),d(normalizeResponse,"normalizeResponse"),u(normalizeResponse,"normalizeResponse");function createStreamAccumulator(t){let e="",o=0,a,n,i="",c="",p="",h,m={},k,f;const y=new Map,v=u((r,s)=>{s&&(r==="text"?i.length<MAX_ACCUMULATED_CHARS&&(i+=s):r==="reasoning"?c.length<MAX_ACCUMULATED_CHARS&&(c+=s):p.length<MAX_ACCUMULATED_CHARS&&(p+=s))},"append"),C=u(r=>{let s=y.get(r);return s||(s={name:"",args:""},y.set(r,s)),s},"tool");function $(r){const s=asArr(r.choices).find(isObj),g=s&&isObj(s.delta)?s.delta:void 0;if(g){v("text",asStr(g.content)??""),v("refusal",asStr(g.refusal)??""),v("reasoning",asStr(g.reasoning_content)??asStr(g.reasoning)??"");const x=isObj(g.function_call)?g.function_call:void 0;if(x){const b=C(-1);asStr(x.name)&&(b.name+=asStr(x.name)),asStr(x.arguments)&&(b.args+=asStr(x.arguments))}for(const b of asArr(g.tool_calls)){if(!isObj(b))continue;const w=C(asNum(b.index)??0);asStr(b.id)&&(w.id=asStr(b.id));const T=isObj(b.function)?b.function:{};asStr(T.name)&&(w.name+=asStr(T.name)),asStr(T.arguments)&&(w.args+=asStr(T.arguments))}}const l=asStr(s?.finish_reason);l&&(h=l),isObj(r.usage)&&(m={...m,...mapUsage(r.usage,!1)})}_($,"$"),d($,"R"),u($,"onChat");function O(r){const s=asStr(r.type)??"";s==="response.output_text.delta"?v("text",asStr(r.delta)??""):s==="response.completed"||s==="response.incomplete"||s==="response.failed"?f=normalizeResponse(t,r.response):s==="error"&&(k=asStr(r.message)??k)}_(O,"O"),d(O,"O"),u(O,"onResponses");function R(r){const s=asStr(r.type)??"",g=asNum(r.index)??0;if(s==="message_start"){const l=isObj(r.message)?r.message:{};a=asStr(l.id)??a,n=asStr(l.model)??n,m={...m,...mapUsage(l.usage,!1)}}else if(s==="content_block_start"){const l=isObj(r.content_block)?r.content_block:{};if(asStr(l.type)==="tool_use"||asStr(l.type)==="server_tool_use"||asStr(l.type)==="mcp_tool_use"){const x=C(g);x.id=asStr(l.id),x.name=asStr(l.name)??"tool"}else asStr(l.type)==="text"&&v("text",asStr(l.text)??"")}else if(s==="content_block_delta"){const l=isObj(r.delta)?r.delta:{},x=asStr(l.type);x==="text_delta"?v("text",asStr(l.text)??""):x==="thinking_delta"?v("reasoning",asStr(l.thinking)??""):x==="input_json_delta"&&(C(g).args+=asStr(l.partial_json)??"")}else if(s==="message_delta"){const l=isObj(r.delta)?r.delta:{};asStr(l.stop_reason)&&(h=asStr(l.stop_reason)),m={...m,...mapUsage(r.usage,!1)}}else s==="error"&&(k=errorMessage(r)??k)}_(R,"R"),d(R,"S"),u(R,"onAnthropic");function S(r){o+=1,a=asStr(r.id)??a,n=asStr(r.model)??n,t.api==="messages"?R(r):t.api==="responses"?O(r):$(r);const s=t.api==="messages"?void 0:errorMessage(r);s&&(k=s)}_(S,"S"),d(S,"b"),u(S,"onEvent");function A(r){const s=[];for(const l of r.split(`
8
+ `));const _=asStr(e.stop_reason);_&&(o.finishReason=_);break}case"embeddings":o.vectorCount=asArr(e.data).length;break}return o}d(normalizeResponse,"normalizeResponse"),u(normalizeResponse,"normalizeResponse");function createStreamAccumulator(t){let e="",o=0,a,n,r="",c="",p="",_,f={},h,m;const k=new Map,y=u((i,s)=>{s&&(i==="text"?r.length<MAX_ACCUMULATED_CHARS&&(r+=s):i==="reasoning"?c.length<MAX_ACCUMULATED_CHARS&&(c+=s):p.length<MAX_ACCUMULATED_CHARS&&(p+=s))},"append"),b=u(i=>{let s=k.get(i);return s||(s={name:"",args:""},k.set(i,s)),s},"tool");function $(i){const s=asArr(i.choices).find(isObj),g=s&&isObj(s.delta)?s.delta:void 0;if(g){y("text",asStr(g.content)??""),y("refusal",asStr(g.refusal)??""),y("reasoning",asStr(g.reasoning_content)??asStr(g.reasoning)??"");const x=isObj(g.function_call)?g.function_call:void 0;if(x){const v=b(-1);asStr(x.name)&&(v.name+=asStr(x.name)),asStr(x.arguments)&&(v.args+=asStr(x.arguments))}for(const v of asArr(g.tool_calls)){if(!isObj(v))continue;const T=b(asNum(v.index)??0);asStr(v.id)&&(T.id=asStr(v.id));const C=isObj(v.function)?v.function:{};asStr(C.name)&&(T.name+=asStr(C.name)),asStr(C.arguments)&&(T.args+=asStr(C.arguments))}}const l=asStr(s?.finish_reason);l&&(_=l),isObj(i.usage)&&(f={...f,...mapUsage(i.usage,!1)})}d($,"R"),u($,"onChat");function O(i){const s=asStr(i.type)??"";s==="response.output_text.delta"?y("text",asStr(i.delta)??""):s==="response.completed"||s==="response.incomplete"||s==="response.failed"?m=normalizeResponse(t,i.response):s==="error"&&(h=asStr(i.message)??h)}d(O,"O"),u(O,"onResponses");function R(i){const s=asStr(i.type)??"",g=asNum(i.index)??0;if(s==="message_start"){const l=isObj(i.message)?i.message:{};a=asStr(l.id)??a,n=asStr(l.model)??n,f={...f,...mapUsage(l.usage,!1)}}else if(s==="content_block_start"){const l=isObj(i.content_block)?i.content_block:{};if(asStr(l.type)==="tool_use"||asStr(l.type)==="server_tool_use"||asStr(l.type)==="mcp_tool_use"){const x=b(g);x.id=asStr(l.id),x.name=asStr(l.name)??"tool"}else asStr(l.type)==="text"&&y("text",asStr(l.text)??"")}else if(s==="content_block_delta"){const l=isObj(i.delta)?i.delta:{},x=asStr(l.type);x==="text_delta"?y("text",asStr(l.text)??""):x==="thinking_delta"?y("reasoning",asStr(l.thinking)??""):x==="input_json_delta"&&(b(g).args+=asStr(l.partial_json)??"")}else if(s==="message_delta"){const l=isObj(i.delta)?i.delta:{};asStr(l.stop_reason)&&(_=asStr(l.stop_reason)),f={...f,...mapUsage(i.usage,!1)}}else s==="error"&&(h=errorMessage(i)??h)}d(R,"S"),u(R,"onAnthropic");function S(i){o+=1,a=asStr(i.id)??a,n=asStr(i.model)??n,t.api==="messages"?R(i):t.api==="responses"?O(i):$(i);const s=t.api==="messages"?void 0:errorMessage(i);s&&(h=s)}d(S,"b"),u(S,"onEvent");function A(i){const s=[];for(const l of i.split(`
9
9
  `))l.startsWith("data:")&&s.push(l.slice(5).replace(/^ /,""));if(!s.length)return;const g=s.join(`
10
- `);if(g!=="[DONE]")try{const l=JSON.parse(g);isObj(l)&&S(l)}catch{}}return _(A,"A"),d(A,"$"),u(A,"parseEvent"),{push(r){e=(e+r).replace(/\r\n/g,`
10
+ `);if(g!=="[DONE]")try{const l=JSON.parse(g);isObj(l)&&S(l)}catch{}}return d(A,"$"),u(A,"parseEvent"),{push(i){e=(e+i).replace(/\r\n/g,`
11
11
  `);let s=e.indexOf(`
12
12
 
13
13
  `);for(;s!==-1;)A(e.slice(0,s)),e=e.slice(s+2),s=e.indexOf(`
14
14
 
15
- `);e.length>MAX_EVENT_BUFFER_CHARS&&(e="")},end(){e.trim()&&A(e),e="";const r=[...y.entries()].sort((g,l)=>g[0]-l[0]).map(([,g])=>({...g.id?{id:g.id}:{},name:g.name||"tool",...g.args?{arguments:g.args}:{}})),s={...a?{id:a}:{},...n?{model:n}:{},completion:p?`${i}${i?`
16
- `:""}[refusal] ${p}`:i,...c?{reasoning:c}:{},toolCalls:r,...h?{finishReason:h}:{},usage:withTotal(m),...k?{error:k}:{}};return f?{...s,...f,completion:f.completion||s.completion,toolCalls:f.toolCalls.length?f.toolCalls:s.toolCalls,usage:{...s.usage,...f.usage}}:s},get eventCount(){return o}}}_(createStreamAccumulator,"createStreamAccumulator"),d(createStreamAccumulator,"createStreamAccumulator"),u(createStreamAccumulator,"createStreamAccumulator");
15
+ `);e.length>MAX_EVENT_BUFFER_CHARS&&(e="")},end(){e.trim()&&A(e),e="";const i=[...k.entries()].sort((g,l)=>g[0]-l[0]).map(([,g])=>({...g.id?{id:g.id}:{},name:g.name||"tool",...g.args?{arguments:g.args}:{}})),s={...a?{id:a}:{},...n?{model:n}:{},completion:p?`${r}${r?`
16
+ `:""}[refusal] ${p}`:r,...c?{reasoning:c}:{},toolCalls:i,..._?{finishReason:_}:{},usage:withTotal(f),...h?{error:h}:{}};return m?{...s,...m,completion:m.completion||s.completion,toolCalls:m.toolCalls.length?m.toolCalls:s.toolCalls,usage:{...s.usage,...m.usage}}:s},get eventCount(){return o}}}d(createStreamAccumulator,"createStreamAccumulator"),u(createStreamAccumulator,"createStreamAccumulator");
package/lib/ai-store.js CHANGED
@@ -1 +1 @@
1
- "use strict";var E=Object.defineProperty;var d=(e,n)=>E(e,"name",{value:n,configurable:!0});var p=Object.defineProperty,u=d((e,n)=>p(e,"name",{value:n,configurable:!0}),"u"),f=Object.defineProperty,i=u((e,n)=>f(e,"name",{value:n,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.redactAiText=redactAiText,exports.newAiCallId=newAiCallId,exports.fitAiContent=fitAiContent,exports.removeAiContent=removeAiContent,exports.writeAiContent=writeAiContent;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),ai_content_1=require("@lensmcp/core/ai-content"),redact_1=require("@lensmcp/core/redact"),emit_1=require("./emit"),mkdirSync=nodeFs.mkdirSync,writeFileSync=nodeFs.writeFileSync,renameSync=nodeFs.renameSync,readdirSync=nodeFs.readdirSync,unlinkSync=nodeFs.unlinkSync,AI_SECRET_PATTERNS=[/\bsk-(?:ant-|proj-|live-|test-)?[A-Za-z0-9_-]{20,}/g,/\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g,/\bgh[pousr]_[A-Za-z0-9]{30,}/g,/\bxox[abprs]-[A-Za-z0-9-]{10,}/g,/\bAIza[0-9A-Za-z_-]{35}\b/g],PEM_BEGIN="-----BEGIN ",PEM_UNTERMINATED_BODY_CHARS=4096;function redactPrivateKeys(e){if(!e.includes("PRIVATE KEY-----"))return e;let n="",t=0,r=!1;for(;;){const s=e.indexOf(PEM_BEGIN,t);if(s===-1)break;const o=e.indexOf("-----",s+PEM_BEGIN.length);if(o===-1)break;const m=e.slice(s+PEM_BEGIN.length,o);if(!/^[A-Z ]{0,30}PRIVATE KEY$/.test(m)){n+=e.slice(t,o+5),t=o+5;continue}n+=e.slice(t,s);const a=r?-1:e.indexOf("-----END ",o+5);let l;if(a===-1)r=!0,l=Math.min(e.length,o+5+PEM_UNTERMINATED_BODY_CHARS);else{const c=e.indexOf("-----",a+9);l=c===-1?e.length:c+5}n+=redact_1.REDACTED,t=l}return n+e.slice(t)}d(redactPrivateKeys,"redactPrivateKeys"),u(redactPrivateKeys,"redactPrivateKeys"),i(redactPrivateKeys,"redactPrivateKeys");const JSON_PAIR_RE=/"([A-Za-z0-9_.-]{1,64})"\s*:\s*"((?:[^"\\]|\\.){1,8192})"/g,ASSIGNMENT_RE=/\b([A-Za-z][A-Za-z0-9_-]{1,40})(\s*[:=]\s*)([^\s"'`,;&)}\]]{8,200})/g,CREDENTIAL_NAME_RE=/(token|secret|pass(?:word|wd)?|pwd|api[-_]?key|apikey|credential|authorization|bearer)/i;function redactStructured(e){return e.replace(JSON_PAIR_RE,(n,t)=>(0,redact_1.isSecretParam)(t)?`"${t}": "${redact_1.REDACTED}"`:n).replace(ASSIGNMENT_RE,(n,t,r)=>CREDENTIAL_NAME_RE.test(t)&&(0,redact_1.isSecretParam)(t)?`${t}${r}${redact_1.REDACTED}`:n)}d(redactStructured,"redactStructured"),u(redactStructured,"redactStructured"),i(redactStructured,"redactStructured");function redactAiText(e){let n=redactStructured((0,redact_1.redactText)(redactPrivateKeys(e)));for(const t of AI_SECRET_PATTERNS)n=n.replace(t,redact_1.REDACTED);return n}d(redactAiText,"redactAiText"),u(redactAiText,"redactAiText"),i(redactAiText,"redactAiText");const intEnv=i((e,n,t,r)=>{const s=Number(process.env[e]);return Number.isFinite(s)&&s>=t&&s<=r?Math.floor(s):n},"intEnv"),maxFieldChars=i(()=>intEnv("LENSMCP_AI_MAX_CHARS",32*1024,256,4*1024*1024),"maxFieldChars"),maxFileBytes=i(()=>intEnv("LENSMCP_AI_MAX_BYTES",256*1024,4*1024,16*1024*1024),"maxFileBytes"),maxFiles=i(()=>intEnv("LENSMCP_AI_MAX_FILES",200,1,1e4),"maxFiles");function newAiCallId(){const e=Date.now().toString(36).padStart(9,"0"),n=Math.random().toString(36).slice(2,8).padEnd(6,"0");return`ai_${e}${n}`}d(newAiCallId,"newAiCallId"),u(newAiCallId,"newAiCallId"),i(newAiCallId,"newAiCallId");const PRE_CLIP_FACTOR=4,MAX_MESSAGES=400;function sanitize(e,n){const t={cut:e.truncated===!0},r=i((o,m=n)=>{if(o===void 0)return;const a=m*PRE_CLIP_FACTOR;let l=o;return l.length>a&&(t.cut=!0,l=l.slice(0,a)),redactAiText(l)},"clean"),s={...e,request:{...e.request,...e.request.system!==void 0?{system:r(e.request.system)}:{},messages:e.request.messages.slice(0,MAX_MESSAGES*4).map(o=>({role:o.role,content:r(o.content)})),...e.request.tools?{tools:e.request.tools.map(o=>({name:r(o.name,200),...o.description?{description:r(o.description,512)}:{}}))}:{}},...e.response?{response:{...e.response,...e.response.completion!==void 0?{completion:r(e.response.completion)}:{},...e.response.reasoning!==void 0?{reasoning:r(e.response.reasoning)}:{},...e.response.error!==void 0?{error:r(e.response.error,2048)}:{},...e.response.toolCalls?{toolCalls:e.response.toolCalls.map(o=>({...o.id?{id:o.id}:{},name:r(o.name,200),...o.arguments!==void 0?{arguments:r(o.arguments,8192)}:{}}))}:{}}}:{}};return e.request.messages.length>MAX_MESSAGES*4&&(t.cut=!0),t.cut&&(s.truncated=!0),s}d(sanitize,"sanitize"),u(sanitize,"sanitize"),i(sanitize,"sanitize");function clipTo(e,n,t){const r={cut:e.truncated===!0},s=i((c,A=n)=>{if(c!==void 0)return c.length>A&&(r.cut=!0),(0,redact_1.clip)(c,A)},"c"),o=e.request.messages;let m=o;if(o.length>t){const c=Math.min(2,t);m=[...o.slice(0,c),...o.slice(o.length-(t-c))],r.cut=!0}const a=e.response,l={...e,request:{...e.request,...e.request.system!==void 0?{system:s(e.request.system)}:{},messages:m.map(c=>({role:c.role,content:s(c.content)}))},...a?{response:{...a,...a.completion!==void 0?{completion:s(a.completion)}:{},...a.reasoning!==void 0?{reasoning:s(a.reasoning)}:{},...a.toolCalls?{toolCalls:a.toolCalls.map(c=>({...c,...c.arguments!==void 0?{arguments:s(c.arguments,Math.min(n,8192))}:{}}))}:{}}}:{}};return r.cut?l.truncated=!0:delete l.truncated,l}d(clipTo,"clipTo"),u(clipTo,"clipTo"),i(clipTo,"clipTo");function fitAiContent(e){const n=maxFileBytes();let t=maxFieldChars(),r=MAX_MESSAGES;const s=sanitize(e,t);let o=clipTo(s,t,r),m=JSON.stringify(o);for(;m.length>n&&(t>256||r>2);)t>256?t=Math.max(256,Math.floor(t/2)):r=Math.max(2,Math.floor(r/2)),o=clipTo(s,t,r),m=JSON.stringify(o);return{json:m,content:o}}d(fitAiContent,"fitAiContent"),u(fitAiContent,"fitAiContent"),i(fitAiContent,"fitAiContent");let writes=0;function prune(e){try{const n=readdirSync(e).filter(r=>/^ai_[0-9a-z]+\.json$/.test(r)).sort(),t=n.length-maxFiles();for(let r=0;r<t;r+=1)try{unlinkSync(`${e}/${n[r]}`)}catch{}}catch{}}d(prune,"prune"),u(prune,"prune"),i(prune,"prune");function removeAiContent(e){try{unlinkSync((0,ai_content_1.aiContentFile)(emit_1.EVENT_FILE,e))}catch{}}d(removeAiContent,"removeAiContent"),u(removeAiContent,"removeAiContent"),i(removeAiContent,"removeAiContent");function writeAiContent(e){try{const n=(0,ai_content_1.aiContentDir)(emit_1.EVENT_FILE);mkdirSync(n,{recursive:!0,mode:448});const{json:t,content:r}=fitAiContent(e),s=`${n}/${e.id}.json`;return writeFileSync(`${s}.tmp`,t,{mode:384}),renameSync(`${s}.tmp`,s),writes+=1,(writes===1||writes%20===0)&&prune(n),{id:e.id,truncated:r.truncated===!0}}catch{return}}d(writeAiContent,"writeAiContent"),u(writeAiContent,"writeAiContent"),i(writeAiContent,"writeAiContent");
1
+ "use strict";var p=Object.defineProperty;var u=(e,n)=>p(e,"name",{value:n,configurable:!0});var f=Object.defineProperty,i=u((e,n)=>f(e,"name",{value:n,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.redactAiText=redactAiText,exports.newAiCallId=newAiCallId,exports.fitAiContent=fitAiContent,exports.removeAiContent=removeAiContent,exports.writeAiContent=writeAiContent;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),ai_content_1=require("@lensmcp/core/ai-content"),redact_1=require("@lensmcp/core/redact"),emit_1=require("./emit"),mkdirSync=nodeFs.mkdirSync,writeFileSync=nodeFs.writeFileSync,renameSync=nodeFs.renameSync,readdirSync=nodeFs.readdirSync,unlinkSync=nodeFs.unlinkSync,AI_SECRET_PATTERNS=[/\bsk-(?:ant-|proj-|live-|test-)?[A-Za-z0-9_-]{20,}/g,/\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g,/\bgh[pousr]_[A-Za-z0-9]{30,}/g,/\bxox[abprs]-[A-Za-z0-9-]{10,}/g,/\bAIza[0-9A-Za-z_-]{35}\b/g],PEM_BEGIN="-----BEGIN ",PEM_UNTERMINATED_BODY_CHARS=4096;function redactPrivateKeys(e){if(!e.includes("PRIVATE KEY-----"))return e;let n="",t=0,r=!1;for(;;){const o=e.indexOf(PEM_BEGIN,t);if(o===-1)break;const s=e.indexOf("-----",o+PEM_BEGIN.length);if(s===-1)break;const d=e.slice(o+PEM_BEGIN.length,s);if(!/^[A-Z ]{0,30}PRIVATE KEY$/.test(d)){n+=e.slice(t,s+5),t=s+5;continue}n+=e.slice(t,o);const c=r?-1:e.indexOf("-----END ",s+5);let l;if(c===-1)r=!0,l=Math.min(e.length,s+5+PEM_UNTERMINATED_BODY_CHARS);else{const a=e.indexOf("-----",c+9);l=a===-1?e.length:a+5}n+=redact_1.REDACTED,t=l}return n+e.slice(t)}u(redactPrivateKeys,"redactPrivateKeys"),i(redactPrivateKeys,"redactPrivateKeys");const JSON_PAIR_RE=/"([A-Za-z0-9_.-]{1,64})"\s*:\s*"((?:[^"\\]|\\.){1,8192})"/g,ASSIGNMENT_RE=/\b([A-Za-z][A-Za-z0-9_-]{1,40})(\s*[:=]\s*)([^\s"'`,;&)}\]]{8,200})/g,CREDENTIAL_NAME_RE=/(token|secret|pass(?:word|wd)?|pwd|api[-_]?key|apikey|credential|authorization|bearer)/i;function redactStructured(e){return e.replace(JSON_PAIR_RE,(n,t)=>(0,redact_1.isSecretParam)(t)?`"${t}": "${redact_1.REDACTED}"`:n).replace(ASSIGNMENT_RE,(n,t,r)=>CREDENTIAL_NAME_RE.test(t)&&(0,redact_1.isSecretParam)(t)?`${t}${r}${redact_1.REDACTED}`:n)}u(redactStructured,"redactStructured"),i(redactStructured,"redactStructured");function redactAiText(e){let n=redactStructured((0,redact_1.redactText)(redactPrivateKeys(e)));for(const t of AI_SECRET_PATTERNS)n=n.replace(t,redact_1.REDACTED);return n}u(redactAiText,"redactAiText"),i(redactAiText,"redactAiText");const intEnv=i((e,n,t,r)=>{const o=Number(process.env[e]);return Number.isFinite(o)&&o>=t&&o<=r?Math.floor(o):n},"intEnv"),maxFieldChars=i(()=>intEnv("LENSMCP_AI_MAX_CHARS",32*1024,256,4*1024*1024),"maxFieldChars"),maxFileBytes=i(()=>intEnv("LENSMCP_AI_MAX_BYTES",256*1024,4*1024,16*1024*1024),"maxFileBytes"),maxFiles=i(()=>intEnv("LENSMCP_AI_MAX_FILES",200,1,1e4),"maxFiles");function newAiCallId(){const e=Date.now().toString(36).padStart(9,"0"),n=Math.random().toString(36).slice(2,8).padEnd(6,"0");return`ai_${e}${n}`}u(newAiCallId,"newAiCallId"),i(newAiCallId,"newAiCallId");const PRE_CLIP_FACTOR=4,MAX_MESSAGES=400;function sanitize(e,n){const t={cut:e.truncated===!0},r=i((s,d=n)=>{if(s===void 0)return;const c=d*PRE_CLIP_FACTOR;let l=s;return l.length>c&&(t.cut=!0,l=l.slice(0,c)),redactAiText(l)},"clean"),o={...e,request:{...e.request,...e.request.system!==void 0?{system:r(e.request.system)}:{},messages:e.request.messages.slice(0,MAX_MESSAGES*4).map(s=>({role:s.role,content:r(s.content)})),...e.request.tools?{tools:e.request.tools.map(s=>({name:r(s.name,200),...s.description?{description:r(s.description,512)}:{}}))}:{}},...e.response?{response:{...e.response,...e.response.completion!==void 0?{completion:r(e.response.completion)}:{},...e.response.reasoning!==void 0?{reasoning:r(e.response.reasoning)}:{},...e.response.error!==void 0?{error:r(e.response.error,2048)}:{},...e.response.toolCalls?{toolCalls:e.response.toolCalls.map(s=>({...s.id?{id:s.id}:{},name:r(s.name,200),...s.arguments!==void 0?{arguments:r(s.arguments,8192)}:{}}))}:{}}}:{}};return e.request.messages.length>MAX_MESSAGES*4&&(t.cut=!0),t.cut&&(o.truncated=!0),o}u(sanitize,"sanitize"),i(sanitize,"sanitize");function clipTo(e,n,t){const r={cut:e.truncated===!0},o=i((a,m=n)=>{if(a!==void 0)return a.length>m&&(r.cut=!0),(0,redact_1.clip)(a,m)},"c"),s=e.request.messages;let d=s;if(s.length>t){const a=Math.min(2,t);d=[...s.slice(0,a),...s.slice(s.length-(t-a))],r.cut=!0}const c=e.response,l={...e,request:{...e.request,...e.request.system!==void 0?{system:o(e.request.system)}:{},messages:d.map(a=>({role:a.role,content:o(a.content)}))},...c?{response:{...c,...c.completion!==void 0?{completion:o(c.completion)}:{},...c.reasoning!==void 0?{reasoning:o(c.reasoning)}:{},...c.toolCalls?{toolCalls:c.toolCalls.map(a=>({...a,...a.arguments!==void 0?{arguments:o(a.arguments,Math.min(n,8192))}:{}}))}:{}}}:{}};return r.cut?l.truncated=!0:delete l.truncated,l}u(clipTo,"clipTo"),i(clipTo,"clipTo");function fitAiContent(e){const n=maxFileBytes();let t=maxFieldChars(),r=MAX_MESSAGES;const o=sanitize(e,t);let s=clipTo(o,t,r),d=JSON.stringify(s);for(;d.length>n&&(t>256||r>2);)t>256?t=Math.max(256,Math.floor(t/2)):r=Math.max(2,Math.floor(r/2)),s=clipTo(o,t,r),d=JSON.stringify(s);return{json:d,content:s}}u(fitAiContent,"fitAiContent"),i(fitAiContent,"fitAiContent");let writes=0;function prune(e){try{const n=readdirSync(e).filter(r=>/^ai_[0-9a-z]+\.json$/.test(r)).sort(),t=n.length-maxFiles();for(let r=0;r<t;r+=1)try{unlinkSync(`${e}/${n[r]}`)}catch{}}catch{}}u(prune,"prune"),i(prune,"prune");function removeAiContent(e){try{unlinkSync((0,ai_content_1.aiContentFile)(emit_1.EVENT_FILE,e))}catch{}}u(removeAiContent,"removeAiContent"),i(removeAiContent,"removeAiContent");function writeAiContent(e){try{const n=(0,ai_content_1.aiContentDir)(emit_1.EVENT_FILE);mkdirSync(n,{recursive:!0,mode:448});const{json:t,content:r}=fitAiContent(e),o=`${n}/${e.id}.json`;return writeFileSync(`${o}.tmp`,t,{mode:384}),renameSync(`${o}.tmp`,o),writes+=1,(writes===1||writes%20===0)&&prune(n),{id:e.id,truncated:r.truncated===!0}}catch{return}}u(writeAiContent,"writeAiContent"),i(writeAiContent,"writeAiContent");
package/lib/emit.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var m=Object.defineProperty;var p=(e,r)=>m(e,"name",{value:r,configurable:!0});var l=Object.defineProperty,E=p((e,r)=>l(e,"name",{value:r,configurable:!0}),"E"),a=Object.defineProperty,c=E((e,r)=>a(e,"name",{value:r,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.EVENT_FILE=exports.PROJECT=exports.EVENT_MAX_FILES=exports.EVENT_MAX_BYTES=void 0,exports.maybeRotateEventFile=maybeRotateEventFile,exports.isLensWriting=isLensWriting,exports.lensEmit=lensEmit,exports.lensLog=lensLog;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),node_path_1=require("node:path"),bus_rotation_1=require("@lensmcp/core/bus-rotation"),flood_guard_1=require("./flood-guard"),flow_context_1=require("./flow-context"),appendFileSync=nodeFs.appendFileSync,mkdirSync=nodeFs.mkdirSync,statSync=nodeFs.statSync,renameSync=nodeFs.renameSync,unlinkSync=nodeFs.unlinkSync,openSync=nodeFs.openSync,closeSync=nodeFs.closeSync;exports.EVENT_MAX_BYTES=(()=>{const e=Number(process.env.LENSMCP_EVENT_MAX_BYTES);return Number.isFinite(e)&&e>0?e:50*1024*1024})(),exports.EVENT_MAX_FILES=(()=>{const e=Number(process.env.LENSMCP_EVENT_MAX_FILES);return Number.isFinite(e)&&e>=1&&e<=20?Math.floor(e):5})();const ROTATE_CHECK_BYTES=1024*1024,bytesSinceCheck=new Map;function maybeRotateEventFile(e,r,n){const s=(bytesSinceCheck.get(e)??0)+r;if(s<ROTATE_CHECK_BYTES&&n===void 0){bytesSinceCheck.set(e,s);return}const o=n?.maxBytes??exports.EVENT_MAX_BYTES,t=n?.maxFiles??exports.EVENT_MAX_FILES;try{const i=statSync(e).size;if(bytesSinceCheck.set(e,0),i<=o)return}catch{bytesSinceCheck.set(e,s);return}(0,bus_rotation_1.rotateBusFile)(e,{maxBytes:o,maxFiles:t,fs:{statSync,renameSync,unlinkSync,openSync,closeSync}})}p(maybeRotateEventFile,"maybeRotateEventFile"),E(maybeRotateEventFile,"maybeRotateEventFile"),c(maybeRotateEventFile,"maybeRotateEventFile"),exports.PROJECT=process.env.LENSMCP_PROJECT||process.env.SERVICE_NAME||"app",exports.EVENT_FILE=process.env.LENSMCP_EVENT_FILE||`${process.cwd()}/.lensmcp/events.jsonl`;let writing=!1,dirReady=!1;const emitGuard=(0,flood_guard_1.createEventFloodGuard)({burst:30,perSec:5}),logGuard=(0,flood_guard_1.createEventFloodGuard)({burst:120,perSec:20});function isLensWriting(){return writing}p(isLensWriting,"isLensWriting"),E(isLensWriting,"isLensWriting"),c(isLensWriting,"isLensWriting");function lensEmit(e,r,n,s,o,t,i="cluster"){try{writing=!0;const u=o??`${e}:${String(s.name??e)}`,d=emitGuard.admit(u);if(!d.ok)return!1;dirReady||(mkdirSync((0,node_path_1.dirname)(exports.EVENT_FILE),{recursive:!0}),dirReady=!0);const _=JSON.stringify({id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),sessionId:"pending",timestamp:Date.now(),source:e,category:i,severity:r,context:{sessionId:"pending",projectName:exports.PROJECT,...t?.flowId?{flowId:t.flowId}:{},...t?.requestId?{requestId:t.requestId}:{},...t?.originNodeId?{originNodeId:t.originNodeId}:{}},fingerprint:u,title:n,raw:{project:exports.PROJECT,...s,...d.suppressed>0?{floodSuppressed:d.suppressed}:{}}})+`
2
- `;return maybeRotateEventFile(exports.EVENT_FILE,_.length),appendFileSync(exports.EVENT_FILE,_),!0}catch{return!1}finally{writing=!1}}p(lensEmit,"lensEmit"),E(lensEmit,"lensEmit"),c(lensEmit,"lensEmit");function lensLog(e,r,n){try{writing=!0;const s=e==="error"||e==="fatal"?`log:error:${exports.PROJECT}`:`log:${exports.PROJECT}`,o=logGuard.admit(s);if(!o.ok)return;dirReady||(mkdirSync((0,node_path_1.dirname)(exports.EVENT_FILE),{recursive:!0}),dirReady=!0);const t=(0,flow_context_1.flowContext)(),i=JSON.stringify({id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),sessionId:"pending",timestamp:Date.now(),source:"nestjs",category:"runtime",severity:e,context:{sessionId:"pending",projectName:exports.PROJECT,...t?.flowId?{flowId:t.flowId}:{},...t?.requestId?{requestId:t.requestId}:{}},fingerprint:s,title:r,raw:{project:exports.PROJECT,kind:"log",...n?.stack?{request:{error:{message:r,stack:n.stack}}}:{},...o.suppressed>0?{floodSuppressed:o.suppressed}:{}}})+`
3
- `;maybeRotateEventFile(exports.EVENT_FILE,i.length),appendFileSync(exports.EVENT_FILE,i)}catch{}finally{writing=!1}}p(lensLog,"lensLog"),E(lensLog,"lensLog"),c(lensLog,"lensLog");
1
+ "use strict";var l=Object.defineProperty;var E=(e,r)=>l(e,"name",{value:r,configurable:!0});var a=Object.defineProperty,c=E((e,r)=>a(e,"name",{value:r,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.EVENT_FILE=exports.PROJECT=exports.EVENT_MAX_FILES=exports.EVENT_MAX_BYTES=void 0,exports.maybeRotateEventFile=maybeRotateEventFile,exports.isLensWriting=isLensWriting,exports.lensEmit=lensEmit,exports.lensLog=lensLog;const tslib_1=require("tslib"),nodeFs=tslib_1.__importStar(require("node:fs")),node_path_1=require("node:path"),bus_rotation_1=require("@lensmcp/core/bus-rotation"),flood_guard_1=require("./flood-guard"),flow_context_1=require("./flow-context"),appendFileSync=nodeFs.appendFileSync,mkdirSync=nodeFs.mkdirSync,statSync=nodeFs.statSync,renameSync=nodeFs.renameSync,unlinkSync=nodeFs.unlinkSync,openSync=nodeFs.openSync,closeSync=nodeFs.closeSync;exports.EVENT_MAX_BYTES=(()=>{const e=Number(process.env.LENSMCP_EVENT_MAX_BYTES);return Number.isFinite(e)&&e>0?e:50*1024*1024})(),exports.EVENT_MAX_FILES=(()=>{const e=Number(process.env.LENSMCP_EVENT_MAX_FILES);return Number.isFinite(e)&&e>=1&&e<=20?Math.floor(e):5})();const ROTATE_CHECK_BYTES=1024*1024,bytesSinceCheck=new Map;function maybeRotateEventFile(e,r,o){const s=(bytesSinceCheck.get(e)??0)+r;if(s<ROTATE_CHECK_BYTES&&o===void 0){bytesSinceCheck.set(e,s);return}const n=o?.maxBytes??exports.EVENT_MAX_BYTES,t=o?.maxFiles??exports.EVENT_MAX_FILES;try{const i=statSync(e).size;if(bytesSinceCheck.set(e,0),i<=n)return}catch{bytesSinceCheck.set(e,s);return}(0,bus_rotation_1.rotateBusFile)(e,{maxBytes:n,maxFiles:t,fs:{statSync,renameSync,unlinkSync,openSync,closeSync}})}E(maybeRotateEventFile,"maybeRotateEventFile"),c(maybeRotateEventFile,"maybeRotateEventFile"),exports.PROJECT=process.env.LENSMCP_PROJECT||process.env.SERVICE_NAME||"app",exports.EVENT_FILE=process.env.LENSMCP_EVENT_FILE||`${process.cwd()}/.lensmcp/events.jsonl`;let writing=!1,dirReady=!1;const emitGuard=(0,flood_guard_1.createEventFloodGuard)({burst:30,perSec:5}),logGuard=(0,flood_guard_1.createEventFloodGuard)({burst:120,perSec:20});function isLensWriting(){return writing}E(isLensWriting,"isLensWriting"),c(isLensWriting,"isLensWriting");function lensEmit(e,r,o,s,n,t,i="cluster"){try{writing=!0;const d=n??`${e}:${String(s.name??e)}`,p=emitGuard.admit(d);if(!p.ok)return!1;dirReady||(mkdirSync((0,node_path_1.dirname)(exports.EVENT_FILE),{recursive:!0}),dirReady=!0);const u=JSON.stringify({id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),sessionId:"pending",timestamp:Date.now(),source:e,category:i,severity:r,context:{sessionId:"pending",projectName:exports.PROJECT,...t?.flowId?{flowId:t.flowId}:{},...t?.requestId?{requestId:t.requestId}:{},...t?.originNodeId?{originNodeId:t.originNodeId}:{}},fingerprint:d,title:o,raw:{project:exports.PROJECT,...s,...p.suppressed>0?{floodSuppressed:p.suppressed}:{}}})+`
2
+ `;return maybeRotateEventFile(exports.EVENT_FILE,u.length),appendFileSync(exports.EVENT_FILE,u),!0}catch{return!1}finally{writing=!1}}E(lensEmit,"lensEmit"),c(lensEmit,"lensEmit");function lensLog(e,r,o){try{writing=!0;const s=e==="error"||e==="fatal"?`log:error:${exports.PROJECT}`:`log:${exports.PROJECT}`,n=logGuard.admit(s);if(!n.ok)return;dirReady||(mkdirSync((0,node_path_1.dirname)(exports.EVENT_FILE),{recursive:!0}),dirReady=!0);const t=(0,flow_context_1.flowContext)(),i=JSON.stringify({id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),sessionId:"pending",timestamp:Date.now(),source:"nestjs",category:"runtime",severity:e,context:{sessionId:"pending",projectName:exports.PROJECT,...t?.flowId?{flowId:t.flowId}:{},...t?.requestId?{requestId:t.requestId}:{}},fingerprint:s,title:r,raw:{project:exports.PROJECT,kind:"log",...o?.stack?{request:{error:{message:r,stack:o.stack}}}:{},...n.suppressed>0?{floodSuppressed:n.suppressed}:{}}})+`
3
+ `;maybeRotateEventFile(exports.EVENT_FILE,i.length),appendFileSync(exports.EVENT_FILE,i)}catch{}finally{writing=!1}}E(lensLog,"lensLog"),c(lensLog,"lensLog");
@@ -1 +1 @@
1
- "use strict";var u=Object.defineProperty;var c=(r,t)=>u(r,"name",{value:t,configurable:!0});var n=Object.defineProperty,a=c((r,t)=>n(r,"name",{value:t,configurable:!0}),"a"),o=Object.defineProperty,e=a((r,t)=>o(r,"name",{value:t,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createEventFloodGuard=void 0;var protocol_types_1=require("@lensmcp/protocol-types");Object.defineProperty(exports,"createEventFloodGuard",{enumerable:!0,get:e(function(){return protocol_types_1.createEventFloodGuard},"get")});
1
+ "use strict";var n=Object.defineProperty;var a=(r,t)=>n(r,"name",{value:t,configurable:!0});var o=Object.defineProperty,e=a((r,t)=>o(r,"name",{value:t,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createEventFloodGuard=void 0;var protocol_types_1=require("@lensmcp/protocol-types");Object.defineProperty(exports,"createEventFloodGuard",{enumerable:!0,get:e(function(){return protocol_types_1.createEventFloodGuard},"get")});
@@ -1 +1 @@
1
- "use strict";var d=Object.defineProperty;var r=(e,t)=>d(e,"name",{value:t,configurable:!0});var u=Object.defineProperty,o=r((e,t)=>u(e,"name",{value:t,configurable:!0}),"o"),s=Object.defineProperty,n=o((e,t)=>s(e,"name",{value:t,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.flowContextStatus=flowContextStatus,exports.resetFlowContextForTests=resetFlowContextForTests,exports.isRequireEsmError=isRequireEsmError,exports.isModuleNotFoundError=isModuleNotFoundError,exports.primeFlowContext=primeFlowContext,exports.runInFlowContext=runInFlowContext,exports.liveFlowContext=liveFlowContext,exports.flowContext=flowContext;let getCtx=null,runWith=null,status={state:"not-primed"},warned=!1;function flowContextStatus(){return status}r(flowContextStatus,"flowContextStatus"),o(flowContextStatus,"flowContextStatus"),n(flowContextStatus,"flowContextStatus");function resetFlowContextForTests(){getCtx=null,runWith=null,status={state:"not-primed"},warned=!1}r(resetFlowContextForTests,"resetFlowContextForTests"),o(resetFlowContextForTests,"resetFlowContextForTests"),n(resetFlowContextForTests,"resetFlowContextForTests");function isRequireEsmError(e){const t=e?.code;return t==="ERR_REQUIRE_ESM"||t==="ERR_REQUIRE_ASYNC_MODULE"}r(isRequireEsmError,"isRequireEsmError"),o(isRequireEsmError,"isRequireEsmError"),n(isRequireEsmError,"isRequireEsmError");function isModuleNotFoundError(e){const t=e;return t?.code!=="MODULE_NOT_FOUND"&&t?.code!=="ERR_MODULE_NOT_FOUND"?!1:String(t?.message??"").includes("@lensmcp/nest-instrumentation")}r(isModuleNotFoundError,"isModuleNotFoundError"),o(isModuleNotFoundError,"isModuleNotFoundError"),n(isModuleNotFoundError,"isModuleNotFoundError");function requireNestInstrumentation(){return require("@lensmcp/nest-instrumentation")}r(requireNestInstrumentation,"requireNestInstrumentation"),o(requireNestInstrumentation,"requireNestInstrumentation"),n(requireNestInstrumentation,"requireNestInstrumentation");function primeFlowContext(e=requireNestInstrumentation){try{const t=e();getCtx=t.currentLensmcpContext,runWith=t.runInLensmcpContext,status={state:"ready"}}catch(t){if(getCtx=null,runWith=null,isModuleNotFoundError(t)){status={state:"absent"};return}const i=t instanceof Error?t.message:String(t);if(status=isRequireEsmError(t)?{state:"runtime-too-old",detail:i}:{state:"failed",detail:i},!warned){warned=!0;const l=status.state==="runtime-too-old"?`this Node (${process.version}) cannot require an ESM package; @lensmcp/node-instrumentation needs >=20.19`:i;console.warn(`[lensmcp] flow correlation is OFF \u2014 could not load @lensmcp/nest-instrumentation: ${l}`)}}}r(primeFlowContext,"primeFlowContext"),o(primeFlowContext,"primeFlowContext"),n(primeFlowContext,"primeFlowContext");function runInFlowContext(e,t){if(!runWith)return t();try{return runWith({sessionId:"pending",requestId:e.requestId,...e.flowId?{flowId:e.flowId}:{}},t)}catch{return t()}}r(runInFlowContext,"runInFlowContext"),o(runInFlowContext,"runInFlowContext"),n(runInFlowContext,"runInFlowContext");function liveFlowContext(){try{return getCtx?.()}catch{return}}r(liveFlowContext,"liveFlowContext"),o(liveFlowContext,"liveFlowContext"),n(liveFlowContext,"liveFlowContext");function flowContext(){const e=liveFlowContext();if(e)return{...e.flowId?{flowId:e.flowId}:{},...e.requestId?{requestId:e.requestId}:{},...e.originNodeId?{originNodeId:e.originNodeId}:{}}}r(flowContext,"flowContext"),o(flowContext,"flowContext"),n(flowContext,"flowContext");
1
+ "use strict";var u=Object.defineProperty;var o=(e,t)=>u(e,"name",{value:t,configurable:!0});var s=Object.defineProperty,n=o((e,t)=>s(e,"name",{value:t,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.flowContextStatus=flowContextStatus,exports.resetFlowContextForTests=resetFlowContextForTests,exports.isRequireEsmError=isRequireEsmError,exports.isModuleNotFoundError=isModuleNotFoundError,exports.primeFlowContext=primeFlowContext,exports.runInFlowContext=runInFlowContext,exports.liveFlowContext=liveFlowContext,exports.flowContext=flowContext;let getCtx=null,runWith=null,status={state:"not-primed"},warned=!1;function flowContextStatus(){return status}o(flowContextStatus,"flowContextStatus"),n(flowContextStatus,"flowContextStatus");function resetFlowContextForTests(){getCtx=null,runWith=null,status={state:"not-primed"},warned=!1}o(resetFlowContextForTests,"resetFlowContextForTests"),n(resetFlowContextForTests,"resetFlowContextForTests");function isRequireEsmError(e){const t=e?.code;return t==="ERR_REQUIRE_ESM"||t==="ERR_REQUIRE_ASYNC_MODULE"}o(isRequireEsmError,"isRequireEsmError"),n(isRequireEsmError,"isRequireEsmError");function isModuleNotFoundError(e){const t=e;return t?.code!=="MODULE_NOT_FOUND"&&t?.code!=="ERR_MODULE_NOT_FOUND"?!1:String(t?.message??"").includes("@lensmcp/nest-instrumentation")}o(isModuleNotFoundError,"isModuleNotFoundError"),n(isModuleNotFoundError,"isModuleNotFoundError");function requireNestInstrumentation(){return require("@lensmcp/nest-instrumentation")}o(requireNestInstrumentation,"requireNestInstrumentation"),n(requireNestInstrumentation,"requireNestInstrumentation");function primeFlowContext(e=requireNestInstrumentation){try{const t=e();getCtx=t.currentLensmcpContext,runWith=t.runInLensmcpContext,status={state:"ready"}}catch(t){if(getCtx=null,runWith=null,isModuleNotFoundError(t)){status={state:"absent"};return}const r=t instanceof Error?t.message:String(t);if(status=isRequireEsmError(t)?{state:"runtime-too-old",detail:r}:{state:"failed",detail:r},!warned){warned=!0;const i=status.state==="runtime-too-old"?`this Node (${process.version}) cannot require an ESM package; @lensmcp/node-instrumentation needs >=20.19`:r;console.warn(`[lensmcp] flow correlation is OFF \u2014 could not load @lensmcp/nest-instrumentation: ${i}`)}}}o(primeFlowContext,"primeFlowContext"),n(primeFlowContext,"primeFlowContext");function runInFlowContext(e,t){if(!runWith)return t();try{return runWith({sessionId:"pending",requestId:e.requestId,...e.flowId?{flowId:e.flowId}:{}},t)}catch{return t()}}o(runInFlowContext,"runInFlowContext"),n(runInFlowContext,"runInFlowContext");function liveFlowContext(){try{return getCtx?.()}catch{return}}o(liveFlowContext,"liveFlowContext"),n(liveFlowContext,"liveFlowContext");function flowContext(){const e=liveFlowContext();if(e)return{...e.flowId?{flowId:e.flowId}:{},...e.requestId?{requestId:e.requestId}:{},...e.originNodeId?{originNodeId:e.originNodeId}:{}}}o(flowContext,"flowContext"),n(flowContext,"flowContext");
package/lib/install.js CHANGED
@@ -1 +1 @@
1
- "use strict";var i=Object.defineProperty;var n=(t,r)=>i(t,"name",{value:r,configurable:!0});var p=Object.defineProperty,a=n((t,r)=>p(t,"name",{value:r,configurable:!0}),"a"),s=Object.defineProperty,e=a((t,r)=>s(t,"name",{value:r,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installLensmcpNodeInstrumentation=installLensmcpNodeInstrumentation;const require_hook_1=require("./require-hook"),flow_context_1=require("./flow-context"),tap_egress_1=require("./tap-egress"),tap_ai_1=require("./tap-ai"),tap_fs_1=require("./tap-fs"),tap_exec_1=require("./tap-exec"),tap_pg_1=require("./tap-pg"),tap_redis_1=require("./tap-redis"),active_work_1=require("./active-work"),tap_bullmq_1=require("./tap-bullmq"),tap_nest_1=require("./tap-nest"),tap_event_loop_1=require("./tap-event-loop"),tap_stdout_1=require("./tap-stdout");function installLensmcpNodeInstrumentation(){const t=globalThis;if(!t.__lensmcpNodeInstrumented&&(t.__lensmcpNodeInstrumented=!0,process.env.LENSMCP_AUTO!=="0")){try{(0,active_work_1.installActiveWorkProbe)()}catch{}try{(0,flow_context_1.primeFlowContext)()}catch{}try{(0,tap_egress_1.tapEgress)()}catch{}try{(0,tap_ai_1.tapAi)()}catch{}try{(0,tap_fs_1.tapFs)()}catch{}try{(0,tap_exec_1.tapExec)()}catch{}try{(0,tap_stdout_1.tapStdout)()}catch{}try{(0,tap_event_loop_1.tapEventLoop)()}catch{}try{(0,require_hook_1.installRequireHook)({pg:tap_pg_1.pgTap,ioredis:tap_redis_1.redisTap,bullmq:tap_bullmq_1.bullmqTap,"@nestjs/core":tap_nest_1.nestTap})}catch{}try{(0,tap_nest_1.installChildAppBridge)()}catch{}}}n(installLensmcpNodeInstrumentation,"installLensmcpNodeInstrumentation"),a(installLensmcpNodeInstrumentation,"installLensmcpNodeInstrumentation"),e(installLensmcpNodeInstrumentation,"installLensmcpNodeInstrumentation");
1
+ "use strict";var p=Object.defineProperty;var a=(t,r)=>p(t,"name",{value:r,configurable:!0});var s=Object.defineProperty,e=a((t,r)=>s(t,"name",{value:r,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installLensmcpNodeInstrumentation=installLensmcpNodeInstrumentation;const require_hook_1=require("./require-hook"),flow_context_1=require("./flow-context"),tap_egress_1=require("./tap-egress"),tap_ai_1=require("./tap-ai"),tap_fs_1=require("./tap-fs"),tap_exec_1=require("./tap-exec"),tap_pg_1=require("./tap-pg"),tap_redis_1=require("./tap-redis"),active_work_1=require("./active-work"),tap_bullmq_1=require("./tap-bullmq"),tap_nest_1=require("./tap-nest"),tap_event_loop_1=require("./tap-event-loop"),tap_stdout_1=require("./tap-stdout");function installLensmcpNodeInstrumentation(){const t=globalThis;if(!t.__lensmcpNodeInstrumented&&(t.__lensmcpNodeInstrumented=!0,process.env.LENSMCP_AUTO!=="0")){try{(0,active_work_1.installActiveWorkProbe)()}catch{}try{(0,flow_context_1.primeFlowContext)()}catch{}try{(0,tap_egress_1.tapEgress)()}catch{}try{(0,tap_ai_1.tapAi)()}catch{}try{(0,tap_fs_1.tapFs)()}catch{}try{(0,tap_exec_1.tapExec)()}catch{}try{(0,tap_stdout_1.tapStdout)()}catch{}try{(0,tap_event_loop_1.tapEventLoop)()}catch{}try{(0,require_hook_1.installRequireHook)({pg:tap_pg_1.pgTap,ioredis:tap_redis_1.redisTap,bullmq:tap_bullmq_1.bullmqTap,"@nestjs/core":tap_nest_1.nestTap})}catch{}try{(0,tap_nest_1.installChildAppBridge)()}catch{}}}a(installLensmcpNodeInstrumentation,"installLensmcpNodeInstrumentation"),e(installLensmcpNodeInstrumentation,"installLensmcpNodeInstrumentation");
@@ -1 +1 @@
1
- "use strict";var f=Object.defineProperty;var u=(e,o)=>f(e,"name",{value:o,configurable:!0});var l=Object.defineProperty,s=u((e,o)=>l(e,"name",{value:o,configurable:!0}),"s"),a=Object.defineProperty,r=s((e,o)=>a(e,"name",{value:o,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installRequireHook=installRequireHook;const tapped=new Set;function runTap(e,o,d){try{o(d)!==!1&&tapped.add(e)}catch{tapped.add(e)}}u(runTap,"runTap"),s(runTap,"runTap"),r(runTap,"runTap");function installRequireHook(e){const o=require("node:module"),d=o._load;o._load=function(n,...i){const c=d.call(this,n,...i),t=e[n];return t&&!tapped.has(n)&&runTap(n,t,c),c};for(const n of Object.keys(e)){if(tapped.has(n))continue;const i=e[n];if(i)try{const c=require.resolve(n),t=require.cache[c];t&&runTap(n,i,t.exports)}catch{}}}u(installRequireHook,"installRequireHook"),s(installRequireHook,"installRequireHook"),r(installRequireHook,"installRequireHook");
1
+ "use strict";var l=Object.defineProperty;var s=(e,n)=>l(e,"name",{value:n,configurable:!0});var a=Object.defineProperty,r=s((e,n)=>a(e,"name",{value:n,configurable:!0}),"r");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installRequireHook=installRequireHook;const tapped=new Set;function runTap(e,n,u){try{n(u)!==!1&&tapped.add(e)}catch{tapped.add(e)}}s(runTap,"runTap"),r(runTap,"runTap");function installRequireHook(e){const n=require("node:module"),u=n._load;n._load=function(t,...c){const i=u.call(this,t,...c),o=e[t];return o&&!tapped.has(t)&&runTap(t,o,i),i};for(const t of Object.keys(e)){if(tapped.has(t))continue;const c=e[t];if(c)try{const i=require.resolve(t),o=require.cache[i];o&&runTap(t,c,o.exports)}catch{}}}s(installRequireHook,"installRequireHook"),r(installRequireHook,"installRequireHook");
package/lib/tap-ai.js CHANGED
@@ -1 +1 @@
1
- "use strict";var E=Object.defineProperty;var u=(e,t)=>E(e,"name",{value:t,configurable:!0});var R=Object.defineProperty,c=u((e,t)=>R(e,"name",{value:t,configurable:!0}),"c"),x=Object.defineProperty,d=c((e,t)=>x(e,"name",{value:t,configurable:!0}),"d");Object.defineProperty(exports,"__esModule",{value:!0}),exports.aiCaptureMode=aiCaptureMode,exports.flushAiTapForTests=flushAiTapForTests,exports.resetAiTapForTests=resetAiTapForTests,exports.tapAi=tapAi;const emit_1=require("./emit"),flow_context_1=require("./flow-context"),ai_providers_1=require("./ai-providers"),ai_store_1=require("./ai-store");function aiCaptureMode(e=process.env){const t=(e.LENSMCP_AI_CAPTURE??"").trim().toLowerCase();return t==="content"?"content":t==="metadata"||t==="1"||t==="true"||t==="on"?"metadata":"off"}u(aiCaptureMode,"aiCaptureMode"),c(aiCaptureMode,"aiCaptureMode"),d(aiCaptureMode,"aiCaptureMode");const MAX_REQUEST_PARSE_BYTES=2*1024*1024,MAX_RESPONSE_PARSE_BYTES=8*1024*1024,MAX_STREAM_BYTES=8*1024*1024,MAX_STREAM_MS=300*1e3,MAX_ENDPOINT_CHARS=256;function locate(e){try{const t=new URL(typeof e=="string"?e:e instanceof URL?e.href:e.url);return{host:t.hostname,port:t.port,pathname:t.pathname}}catch{return}}u(locate,"locate"),c(locate,"locate"),d(locate,"locate");const methodOf=d((e,t)=>{const r=typeof e=="object"&&e!==null&&!(e instanceof URL)?e.method:void 0;return String(t?.method??r??"GET").toUpperCase()},"methodOf"),decode=d(e=>({bytes:e.byteLength,...e.byteLength<=MAX_REQUEST_PARSE_BYTES?{text:Buffer.from(e.buffer,e.byteOffset,e.byteLength).toString("utf8")}:{}}),"decode");function takeRequestBody(e,t){const r=t?.body;if(typeof r=="string")return{text:r,bytes:Buffer.byteLength(r)};if(r instanceof ArrayBuffer)return decode(new Uint8Array(r));if(ArrayBuffer.isView(r))return decode(new Uint8Array(r.buffer,r.byteOffset,r.byteLength));if(typeof Blob<"u"&&r instanceof Blob)return{bytes:r.size,...r.size<=MAX_REQUEST_PARSE_BYTES?{pending:r.text().catch(()=>{})}:{}};if(r==null&&typeof e=="object"&&e!==null&&!(e instanceof URL)){const n=e;if(!n.bodyUsed&&n.body)try{return{pending:n.clone().text().catch(()=>{})}}catch{return{}}}return{}}u(takeRequestBody,"takeRequestBody"),c(takeRequestBody,"takeRequestBody"),d(takeRequestBody,"takeRequestBody");const sum=d(e=>e.reduce((t,r)=>t+r,0),"sum");function parseJson(e){if(e)try{return JSON.parse(e)}catch{return}}u(parseJson,"parseJson"),c(parseJson,"parseJson"),d(parseJson,"parseJson");function headerOf(e,t){try{return e?.headers?.get?.(t)??""}catch{return""}}u(headerOf,"headerOf"),c(headerOf,"headerOf"),d(headerOf,"headerOf");const statusOf=d(e=>typeof e?.status=="number"?e.status:void 0,"statusOf");function failureKind(e,t){const r=e?.name,n=r==="TimeoutError";return{timedOut:n,aborted:!n&&(r==="AbortError"||t?.aborted===!0)}}u(failureKind,"failureKind"),c(failureKind,"failureKind"),d(failureKind,"failureKind");async function readStream(e,t,r){const n=(0,ai_providers_1.createStreamAccumulator)(t);let i,o=!1;const a=e.body;if(a){const p=a.getReader(),s=new TextDecoder;let m=0;try{for(;;){const{done:g,value:y}=await p.read();if(g)break;if(m+=y.byteLength,n.push(s.decode(y,{stream:!0})),i===void 0&&n.eventCount>0&&(i=Date.now()-r),m>MAX_STREAM_BYTES||Date.now()-r>MAX_STREAM_MS){o=!0,await p.cancel().catch(()=>{});break}}}catch{o=!0}}return{response:n.end(),sse:!0,cut:o,...i!==void 0?{firstEventMs:i}:{}}}u(readStream,"readStream"),c(readStream,"readStream"),d(readStream,"readStream");async function readBody(e){const t={completion:"",toolCalls:[],usage:{}};if(!e.res||!e.clone)return{response:t,sse:!1,cut:!1};try{if(headerOf(e.res,"content-type").includes("text/event-stream"))return await readStream(e.clone,e.target,e.startedAt);const r=Number(headerOf(e.res,"content-length"));if(Number.isFinite(r)&&r>MAX_RESPONSE_PARSE_BYTES)return{response:t,sse:!1,cut:!1};const n=await e.clone.text().catch(()=>{});if(n&&/^\s*(?:event|data):/.test(n)){const i=(0,ai_providers_1.createStreamAccumulator)(e.target);return i.push(n),{response:i.end(),sse:!0,cut:!1}}return{response:(0,ai_providers_1.normalizeResponse)(e.target,parseJson(n)),sse:!1,cut:!1}}catch{return{response:t,sse:!1,cut:!1}}}u(readBody,"readBody"),c(readBody,"readBody"),d(readBody,"readBody");async function capture(e){const t=readBody(e),r=e.request.text??await e.request.pending,n=e.request.bytes??(r?Buffer.byteLength(r):void 0),i=n!==void 0&&n>MAX_REQUEST_PARSE_BYTES,o=(0,ai_providers_1.normalizeRequest)(e.target,i?void 0:parseJson(r)),a=statusOf(e.res),p=await t;let s=p.response;const m=o.stream||p.sse,g=p.firstEventMs,y=p.cut,{aborted:v,timedOut:_}=e.failure!==void 0?failureKind(e.failure,e.signal):{aborted:!1,timedOut:!1};e.failure!==void 0&&(s={...s,error:String(e.failure?.message??e.failure)});const A=v||y,T=Date.now()-e.startedAt,l=s.model??o.model,w=sum(o.messages.map(S=>S.content.length))+(o.system?.length??0);let f,h=!1;if(e.mode==="content"&&e.target.api!=="embeddings"){const S={schemaVersion:1,id:(0,ai_store_1.newAiCallId)(),capturedAt:Date.now(),...e.ctx?.flowId?{flowId:e.ctx.flowId}:{},...e.ctx?.requestId?{requestId:e.ctx.requestId}:{},provider:e.target.provider,api:e.target.api,...l?{model:l}:{},host:e.host,endpoint:e.endpoint,stream:m,...a!==void 0?{status:a}:{},request:{...o.system?{system:o.system}:{},messages:o.messages,...o.tools.length?{tools:o.tools}:{},...Object.keys(o.params).length?{params:o.params}:{}},response:{completion:s.completion,...s.reasoning?{reasoning:s.reasoning}:{},...s.toolCalls.length?{toolCalls:s.toolCalls}:{},...s.finishReason?{finishReason:s.finishReason}:{},usage:s.usage,...s.error?{error:s.error}:{}}},M=(0,ai_store_1.writeAiContent)(S);M&&(f=M.id,h=M.truncated)}const b=a!==void 0&&a>=400||e.failure!==void 0&&!v,C=l??"?";!(0,emit_1.lensEmit)("ai",e.failure!==void 0&&!v?"error":"info",a!==void 0?`ai ${e.target.provider}/${C} ${e.target.api} \u2192 ${a}`:`ai ${e.target.provider}/${C} ${e.target.api} ${v?"aborted":"failed"}`,{name:e.target.provider,kind:"ai-call",provider:e.target.provider,api:e.target.api,...l?{model:l}:{},...o.model&&l&&o.model!==l?{requestedModel:o.model}:{},host:e.host,endpoint:e.endpoint,method:e.method,...a!==void 0?{status:a}:{},stream:m,startedAt:e.startedAt,durationMs:T,...e.ttfbMs!==void 0?{ttfbMs:e.ttfbMs}:{},...g!==void 0?{firstEventMs:g}:{},...Object.keys(s.usage).length?{usage:s.usage}:{},...s.finishReason?{finishReason:s.finishReason}:{},toolCallCount:s.toolCalls.length,sizes:{messageCount:o.messages.length,toolCount:o.tools.length,promptChars:w,completionChars:s.completion.length,...n!==void 0?{requestBytes:n}:{}},...o.inputCount!==void 0?{inputCount:o.inputCount}:{},...s.vectorCount!==void 0?{vectorCount:s.vectorCount}:{},contentCaptured:f!==void 0,...f?{contentRef:f}:{},...h?{truncated:!0}:{},...A?{aborted:!0}:{},..._?{timedOut:!0}:{},...s.error?{error:(0,ai_store_1.redactAiText)(s.error).slice(0,300)}:{}},b?`ai:error:${e.target.provider}:${C}`:`ai:${e.target.provider}:${C}`,e.ctx,"ai")&&f&&(0,ai_store_1.removeAiContent)(f)}u(capture,"capture"),c(capture,"capture"),d(capture,"capture");let savedFetch;const pending=new Set;async function flushAiTapForTests(){await Promise.allSettled([...pending])}u(flushAiTapForTests,"flushAiTapForTests"),c(flushAiTapForTests,"flushAiTapForTests"),d(flushAiTapForTests,"flushAiTapForTests");function resetAiTapForTests(){const e=globalThis;savedFetch&&(e.fetch=savedFetch),delete e.__lensmcpAiTap,savedFetch=void 0,pending.clear()}u(resetAiTapForTests,"resetAiTapForTests"),c(resetAiTapForTests,"resetAiTapForTests"),d(resetAiTapForTests,"resetAiTapForTests");function tapAi(){const e=aiCaptureMode();if(e==="off")return;const t=globalThis;if(typeof t.fetch!="function"||t.__lensmcpAiTap)return;t.__lensmcpAiTap=!0;const r=(0,ai_providers_1.parseExtraHosts)(process.env.LENSMCP_AI_HOSTS),n=t.fetch.bind(globalThis);savedFetch=t.fetch,t.fetch=(async(i,o)=>{const a=locate(i),p=methodOf(i,o),s=a&&p==="POST"?(0,ai_providers_1.matchTarget)(a.host,a.port,a.pathname,r):void 0;if(!a||!s)return n(i,o);const m=Date.now(),g=(0,flow_context_1.flowContext)(),y=a.pathname.length>MAX_ENDPOINT_CHARS?`${a.pathname.slice(0,MAX_ENDPOINT_CHARS)}\u2026`:a.pathname,v=takeRequestBody(i,o),_=o?.signal??(typeof i=="object"&&i!==null&&!(i instanceof URL)?i.signal:void 0),A=d(h=>{const b=capture(h).catch(()=>{});pending.add(b),b.finally(()=>pending.delete(b))},"track"),T={mode:e,target:s,host:a.host,endpoint:y,method:p,startedAt:m,ctx:g,signal:_,request:v};let l;try{l=await n(i,o)}catch(h){throw A({...T,failure:h}),h}const w=Date.now()-m;let f;try{f=l.clone()}catch{f=void 0}return A({...T,ttfbMs:w,res:l,...f?{clone:f}:{}}),l})}u(tapAi,"tapAi"),c(tapAi,"tapAi"),d(tapAi,"tapAi");
1
+ "use strict";var R=Object.defineProperty;var c=(t,e)=>R(t,"name",{value:e,configurable:!0});var x=Object.defineProperty,d=c((t,e)=>x(t,"name",{value:e,configurable:!0}),"d");Object.defineProperty(exports,"__esModule",{value:!0}),exports.aiCaptureMode=aiCaptureMode,exports.flushAiTapForTests=flushAiTapForTests,exports.resetAiTapForTests=resetAiTapForTests,exports.tapAi=tapAi;const emit_1=require("./emit"),flow_context_1=require("./flow-context"),ai_providers_1=require("./ai-providers"),ai_store_1=require("./ai-store");function aiCaptureMode(t=process.env){const e=(t.LENSMCP_AI_CAPTURE??"").trim().toLowerCase();return e==="content"?"content":e==="metadata"||e==="1"||e==="true"||e==="on"?"metadata":"off"}c(aiCaptureMode,"aiCaptureMode"),d(aiCaptureMode,"aiCaptureMode");const MAX_REQUEST_PARSE_BYTES=2*1024*1024,MAX_RESPONSE_PARSE_BYTES=8*1024*1024,MAX_STREAM_BYTES=8*1024*1024,MAX_STREAM_MS=300*1e3,MAX_ENDPOINT_CHARS=256;function locate(t){try{const e=new URL(typeof t=="string"?t:t instanceof URL?t.href:t.url);return{host:e.hostname,port:e.port,pathname:e.pathname}}catch{return}}c(locate,"locate"),d(locate,"locate");const methodOf=d((t,e)=>{const o=typeof t=="object"&&t!==null&&!(t instanceof URL)?t.method:void 0;return String(e?.method??o??"GET").toUpperCase()},"methodOf"),decode=d(t=>({bytes:t.byteLength,...t.byteLength<=MAX_REQUEST_PARSE_BYTES?{text:Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString("utf8")}:{}}),"decode");function takeRequestBody(t,e){const o=e?.body;if(typeof o=="string")return{text:o,bytes:Buffer.byteLength(o)};if(o instanceof ArrayBuffer)return decode(new Uint8Array(o));if(ArrayBuffer.isView(o))return decode(new Uint8Array(o.buffer,o.byteOffset,o.byteLength));if(typeof Blob<"u"&&o instanceof Blob)return{bytes:o.size,...o.size<=MAX_REQUEST_PARSE_BYTES?{pending:o.text().catch(()=>{})}:{}};if(o==null&&typeof t=="object"&&t!==null&&!(t instanceof URL)){const s=t;if(!s.bodyUsed&&s.body)try{return{pending:s.clone().text().catch(()=>{})}}catch{return{}}}return{}}c(takeRequestBody,"takeRequestBody"),d(takeRequestBody,"takeRequestBody");const sum=d(t=>t.reduce((e,o)=>e+o,0),"sum");function parseJson(t){if(t)try{return JSON.parse(t)}catch{return}}c(parseJson,"parseJson"),d(parseJson,"parseJson");function headerOf(t,e){try{return t?.headers?.get?.(e)??""}catch{return""}}c(headerOf,"headerOf"),d(headerOf,"headerOf");const statusOf=d(t=>typeof t?.status=="number"?t.status:void 0,"statusOf");function failureKind(t,e){const o=t?.name,s=o==="TimeoutError";return{timedOut:s,aborted:!s&&(o==="AbortError"||e?.aborted===!0)}}c(failureKind,"failureKind"),d(failureKind,"failureKind");async function readStream(t,e,o){const s=(0,ai_providers_1.createStreamAccumulator)(e);let i,r=!1;const a=t.body;if(a){const f=a.getReader(),n=new TextDecoder;let p=0;try{for(;;){const{done:m,value:g}=await f.read();if(m)break;if(p+=g.byteLength,s.push(n.decode(g,{stream:!0})),i===void 0&&s.eventCount>0&&(i=Date.now()-o),p>MAX_STREAM_BYTES||Date.now()-o>MAX_STREAM_MS){r=!0,await f.cancel().catch(()=>{});break}}}catch{r=!0}}return{response:s.end(),sse:!0,cut:r,...i!==void 0?{firstEventMs:i}:{}}}c(readStream,"readStream"),d(readStream,"readStream");async function readBody(t){const e={completion:"",toolCalls:[],usage:{}};if(!t.res||!t.clone)return{response:e,sse:!1,cut:!1};try{if(headerOf(t.res,"content-type").includes("text/event-stream"))return await readStream(t.clone,t.target,t.startedAt);const o=Number(headerOf(t.res,"content-length"));if(Number.isFinite(o)&&o>MAX_RESPONSE_PARSE_BYTES)return{response:e,sse:!1,cut:!1};const s=await t.clone.text().catch(()=>{});if(s&&/^\s*(?:event|data):/.test(s)){const i=(0,ai_providers_1.createStreamAccumulator)(t.target);return i.push(s),{response:i.end(),sse:!0,cut:!1}}return{response:(0,ai_providers_1.normalizeResponse)(t.target,parseJson(s)),sse:!1,cut:!1}}catch{return{response:e,sse:!1,cut:!1}}}c(readBody,"readBody"),d(readBody,"readBody");async function capture(t){const e=readBody(t),o=t.request.text??await t.request.pending,s=t.request.bytes??(o?Buffer.byteLength(o):void 0),i=s!==void 0&&s>MAX_REQUEST_PARSE_BYTES,r=(0,ai_providers_1.normalizeRequest)(t.target,i?void 0:parseJson(o)),a=statusOf(t.res),f=await e;let n=f.response;const p=r.stream||f.sse,m=f.firstEventMs,g=f.cut,{aborted:y,timedOut:T}=t.failure!==void 0?failureKind(t.failure,t.signal):{aborted:!1,timedOut:!1};t.failure!==void 0&&(n={...n,error:String(t.failure?.message??t.failure)});const b=y||g,A=Date.now()-t.startedAt,u=n.model??r.model,_=sum(r.messages.map(w=>w.content.length))+(r.system?.length??0);let l,h=!1;if(t.mode==="content"&&t.target.api!=="embeddings"){const w={schemaVersion:1,id:(0,ai_store_1.newAiCallId)(),capturedAt:Date.now(),...t.ctx?.flowId?{flowId:t.ctx.flowId}:{},...t.ctx?.requestId?{requestId:t.ctx.requestId}:{},provider:t.target.provider,api:t.target.api,...u?{model:u}:{},host:t.host,endpoint:t.endpoint,stream:p,...a!==void 0?{status:a}:{},request:{...r.system?{system:r.system}:{},messages:r.messages,...r.tools.length?{tools:r.tools}:{},...Object.keys(r.params).length?{params:r.params}:{}},response:{completion:n.completion,...n.reasoning?{reasoning:n.reasoning}:{},...n.toolCalls.length?{toolCalls:n.toolCalls}:{},...n.finishReason?{finishReason:n.finishReason}:{},usage:n.usage,...n.error?{error:n.error}:{}}},S=(0,ai_store_1.writeAiContent)(w);S&&(l=S.id,h=S.truncated)}const v=a!==void 0&&a>=400||t.failure!==void 0&&!y,C=u??"?";!(0,emit_1.lensEmit)("ai",t.failure!==void 0&&!y?"error":"info",a!==void 0?`ai ${t.target.provider}/${C} ${t.target.api} \u2192 ${a}`:`ai ${t.target.provider}/${C} ${t.target.api} ${y?"aborted":"failed"}`,{name:t.target.provider,kind:"ai-call",provider:t.target.provider,api:t.target.api,...u?{model:u}:{},...r.model&&u&&r.model!==u?{requestedModel:r.model}:{},host:t.host,endpoint:t.endpoint,method:t.method,...a!==void 0?{status:a}:{},stream:p,startedAt:t.startedAt,durationMs:A,...t.ttfbMs!==void 0?{ttfbMs:t.ttfbMs}:{},...m!==void 0?{firstEventMs:m}:{},...Object.keys(n.usage).length?{usage:n.usage}:{},...n.finishReason?{finishReason:n.finishReason}:{},toolCallCount:n.toolCalls.length,sizes:{messageCount:r.messages.length,toolCount:r.tools.length,promptChars:_,completionChars:n.completion.length,...s!==void 0?{requestBytes:s}:{}},...r.inputCount!==void 0?{inputCount:r.inputCount}:{},...n.vectorCount!==void 0?{vectorCount:n.vectorCount}:{},contentCaptured:l!==void 0,...l?{contentRef:l}:{},...h?{truncated:!0}:{},...b?{aborted:!0}:{},...T?{timedOut:!0}:{},...n.error?{error:(0,ai_store_1.redactAiText)(n.error).slice(0,300)}:{}},v?`ai:error:${t.target.provider}:${C}`:`ai:${t.target.provider}:${C}`,t.ctx,"ai")&&l&&(0,ai_store_1.removeAiContent)(l)}c(capture,"capture"),d(capture,"capture");let savedFetch;const pending=new Set;async function flushAiTapForTests(){await Promise.allSettled([...pending])}c(flushAiTapForTests,"flushAiTapForTests"),d(flushAiTapForTests,"flushAiTapForTests");function resetAiTapForTests(){const t=globalThis;savedFetch&&(t.fetch=savedFetch),delete t.__lensmcpAiTap,savedFetch=void 0,pending.clear()}c(resetAiTapForTests,"resetAiTapForTests"),d(resetAiTapForTests,"resetAiTapForTests");function tapAi(){const t=aiCaptureMode();if(t==="off")return;const e=globalThis;if(typeof e.fetch!="function"||e.__lensmcpAiTap)return;e.__lensmcpAiTap=!0;const o=(0,ai_providers_1.parseExtraHosts)(process.env.LENSMCP_AI_HOSTS),s=e.fetch.bind(globalThis);savedFetch=e.fetch,e.fetch=(async(i,r)=>{const a=locate(i),f=methodOf(i,r),n=a&&f==="POST"?(0,ai_providers_1.matchTarget)(a.host,a.port,a.pathname,o):void 0;if(!a||!n)return s(i,r);const p=Date.now(),m=(0,flow_context_1.flowContext)(),g=a.pathname.length>MAX_ENDPOINT_CHARS?`${a.pathname.slice(0,MAX_ENDPOINT_CHARS)}\u2026`:a.pathname,y=takeRequestBody(i,r),T=r?.signal??(typeof i=="object"&&i!==null&&!(i instanceof URL)?i.signal:void 0),b=d(h=>{const v=capture(h).catch(()=>{});pending.add(v),v.finally(()=>pending.delete(v))},"track"),A={mode:t,target:n,host:a.host,endpoint:g,method:f,startedAt:p,ctx:m,signal:T,request:y};let u;try{u=await s(i,r)}catch(h){throw b({...A,failure:h}),h}const _=Date.now()-p;let l;try{l=u.clone()}catch{l=void 0}return b({...A,ttfbMs:_,res:u,...l?{clone:l}:{}}),u})}c(tapAi,"tapAi"),d(tapAi,"tapAi");
package/lib/tap-bullmq.js CHANGED
@@ -1 +1 @@
1
- "use strict";var h=Object.defineProperty;var f=(t,e)=>h(t,"name",{value:e,configurable:!0});var b=Object.defineProperty,d=f((t,e)=>b(t,"name",{value:e,configurable:!0}),"d"),w=Object.defineProperty,a=d((t,e)=>w(t,"name",{value:e,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0}),exports.bullmqTap=bullmqTap,exports.resetQueueStatePublishersForTests=resetQueueStatePublishersForTests;const active_work_1=require("./active-work"),workerGeneration=new WeakMap,emit_1=require("./emit"),flow_context_1=require("./flow-context");function jobFlow(t){const e=t?.opts?.__lensmcpFlow;return e&&typeof e=="object"?e:void 0}f(jobFlow,"jobFlow"),d(jobFlow,"jobFlow"),a(jobFlow,"jobFlow");const jobLegId=a((t,e)=>`job:${t}#${e?.id??"?"}`,"jobLegId"),publishers=new Map,sources=new Map,sourceFor=a(t=>{let e=sources.get(t);return e||sources.set(t,e={}),e},"sourceFor"),usable=a(t=>!!t&&t.closing===void 0,"usable"),currentQueue=a(t=>{const e=sources.get(t),n=e?.app?.deref();return usable(n)?n:e?.own},"currentQueue");function ownConnection(t){if(!t||typeof t!="object")return;const e=t;if(typeof e.duplicate=="function")try{return e.duplicate()}catch{return}return Object.fromEntries(Object.entries(e).filter(([,n])=>typeof n!="function"))}f(ownConnection,"ownConnection"),d(ownConnection,"ownConnection"),a(ownConnection,"ownConnection");function bullmqTap(t){const e=t;if(typeof e?.Queue!="function"||typeof e?.Worker!="function")return!1;tappedQueue=e.Queue;try{tapQueueAdd(e)}catch{}try{tapWorkerEmit(e)}catch{}try{tapWorkerProcess(e)}catch{}try{tapWorkerConstruct(e)}catch{}return!0}f(bullmqTap,"bullmqTap"),d(bullmqTap,"bullmqTap"),a(bullmqTap,"bullmqTap");function tapWorkerConstruct(t){const e=t.Worker;if(typeof e!="function"||e.__lensmcpGen)return;const n=new Proxy(e,{construct(u,r,i){const l=Reflect.construct(u,r,i);try{workerGeneration.set(l,(0,active_work_1.activeWorkGeneration)())}catch{}return l}});Object.defineProperty(e,"__lensmcpGen",{value:!0,enumerable:!1}),t.Worker=n}f(tapWorkerConstruct,"tapWorkerConstruct"),d(tapWorkerConstruct,"tapWorkerConstruct"),a(tapWorkerConstruct,"tapWorkerConstruct");function tapWorkerProcess(t){const e=t.Worker?.prototype,n=e?.callProcessJob;if(!e||typeof n!="function"||n.__lensmcp)return;const u=a(async function(r,...i){const l=workerGeneration.get(this),s=(0,active_work_1.beginActiveWork)(l),c=jobFlow(r);if(!c?.flowId)return n.call(this,r,...i).finally(s);const o=String(this?.name??r?.queueName??"queue"),q=jobLegId(o,r),m=Date.now(),y={flowId:c.flowId,requestId:q};return(0,flow_context_1.runInFlowContext)(y,async()=>{try{const p=await n.call(this,r,...i);return(0,emit_1.lensEmit)("queue","info",`process ${r?.name}#${r?.id} (${Date.now()-m}ms)`,{queue:o,kind:"queue-process",job:r?.name,jobId:r?.id,startedAt:m,durationMs:Date.now()-m,status:"ok"},`queue:${o}`,y),p}catch(p){throw(0,emit_1.lensEmit)("queue","error",`process ${r?.name}#${r?.id} failed (${Date.now()-m}ms)`,{queue:o,kind:"queue-process",job:r?.name,jobId:r?.id,startedAt:m,durationMs:Date.now()-m,status:"error",error:String(p?.message??p)},`queue:${o}`,y),p}finally{s()}})},"wrapped");u.__lensmcp=!0,e.callProcessJob=u}f(tapWorkerProcess,"tapWorkerProcess"),d(tapWorkerProcess,"tapWorkerProcess"),a(tapWorkerProcess,"tapWorkerProcess");function tapQueueAdd(t){const e=t.Queue?.prototype,n=e?.add;if(!e||typeof n!="function"||n.__lensmcp)return;const u=a(async function(r,...i){const l=Date.now(),s=(0,flow_context_1.flowContext)();if(s?.flowId){const o=i[1]??{};i[1]={...o,__lensmcpFlow:{flowId:s.flowId,...s.requestId?{originRequestId:s.requestId}:{}}}}const c=await n.call(this,r,...i);try{const o=String(this?.name??"queue"),q=i[0];let m;try{const p=JSON.stringify(q);m=p&&p!=="undefined"?p.length>300?p.slice(0,299)+"\u2026":p:void 0}catch{}(0,emit_1.lensEmit)("queue","info",`enqueued ${r}#${c?.id} \u2192 ${o}`,{queue:o,kind:"queue-enqueued",job:r,jobId:c?.id,...m?{data:m}:{},startedAt:l,durationMs:Date.now()-l},`queue:${o}`,s);const y=sourceFor(o);y.app?.deref()!==this&&(y.app=new WeakRef(this)),ensureStatePublisher(o)}catch{}return c},"wrapped");u.__lensmcp=!0,e.add=u}f(tapQueueAdd,"tapQueueAdd"),d(tapQueueAdd,"tapQueueAdd"),a(tapQueueAdd,"tapQueueAdd");function tapWorkerEmit(t){const e=t.Worker?.prototype,n=e?.emit;if(!e||typeof n!="function"||n.__lensmcp)return;const u=a(function(r,...i){try{observeWorkerEvent(this,String(r),i)}catch{}return n.call(this,r,...i)},"wrapped");u.__lensmcp=!0,e.emit=u}f(tapWorkerEmit,"tapWorkerEmit"),d(tapWorkerEmit,"tapWorkerEmit"),a(tapWorkerEmit,"tapWorkerEmit");function observeWorkerEvent(t,e,n){if(e!=="active"&&e!=="completed"&&e!=="failed")return;const u=String(t.name??"queue"),r=n[0],i=jobFlow(r),l=i?.flowId?{flowId:i.flowId,requestId:jobLegId(u,r)}:void 0;if(e==="active")(0,emit_1.lensEmit)("queue","info",`processing ${r?.name}#${r?.id}`,{queue:u,kind:"queue-active",jobId:r?.id},`queue:${u}`,l);else if(e==="completed"){let s;try{const c=r?.returnvalue??n[1],o=JSON.stringify(c);s=o&&o!=="undefined"?o.length>160?o.slice(0,159)+"\u2026":o:void 0}catch{}(0,emit_1.lensEmit)("queue","info",`completed ${r?.name}#${r?.id}`,{queue:u,kind:"queue-completed",jobId:r?.id,...s?{returned:s}:{}},`queue:${u}`,l)}else{const s=n[1];(0,emit_1.lensEmit)("queue","error",`job ${r?.id} failed: ${s?.message}`,{queue:u,kind:"queue-failed",jobId:r?.id,error:String(s?.message??s)},`queue:${u}`,l)}if(!currentQueue(u))try{const s=t.opts,c=ownConnection(s?.connection);if(c){const o=snapshotQueueClass();o&&(sourceFor(u).own=new o(u,{connection:c}))}}catch{}ensureStatePublisher(u)}f(observeWorkerEvent,"observeWorkerEvent"),d(observeWorkerEvent,"observeWorkerEvent"),a(observeWorkerEvent,"observeWorkerEvent");let tappedQueue;function snapshotQueueClass(){if(tappedQueue)return tappedQueue;try{return require("bullmq").Queue}catch{return}}f(snapshotQueueClass,"snapshotQueueClass"),d(snapshotQueueClass,"snapshotQueueClass"),a(snapshotQueueClass,"snapshotQueueClass");function ensureStatePublisher(t){if(publishers.has(t))return;let e="";const n=setInterval(()=>{(async()=>{try{const u=currentQueue(t);if(!u)return;const r=await u.getJobCounts(),i=[];for(const c of["active","waiting","failed","completed","delayed"])for(const o of await u.getJobs([c],0,7)){const q=o?.data?.to;i.push({id:String(o.id),name:o.name,state:c,timestamp:o.timestamp??0,...typeof q=="string"?{to:q}:{}})}i.sort((c,o)=>Number(o.timestamp)-Number(c.timestamp));const l=i.slice(0,8),s=JSON.stringify([r,l.map(c=>`${c.id}${c.state}`)]);if(s===e)return;e=s,(0,emit_1.lensEmit)("queue","info",`queue state: ${r.active??0} active \xB7 ${r.waiting??0} waiting \xB7 ${r.failed??0} failed`,{queue:t,kind:"queue-state",counts:r,recent:l},`queue:${t}`)}catch{}})()},2e3);n.unref?.(),publishers.set(t,n)}f(ensureStatePublisher,"ensureStatePublisher"),d(ensureStatePublisher,"ensureStatePublisher"),a(ensureStatePublisher,"ensureStatePublisher");function resetQueueStatePublishersForTests(){for(const t of publishers.values())clearInterval(t);publishers.clear(),sources.clear()}f(resetQueueStatePublishersForTests,"resetQueueStatePublishersForTests"),d(resetQueueStatePublishersForTests,"resetQueueStatePublishersForTests"),a(resetQueueStatePublishersForTests,"resetQueueStatePublishersForTests");
1
+ "use strict";var b=Object.defineProperty;var d=(t,e)=>b(t,"name",{value:e,configurable:!0});var w=Object.defineProperty,a=d((t,e)=>w(t,"name",{value:e,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0}),exports.bullmqTap=bullmqTap,exports.resetQueueStatePublishersForTests=resetQueueStatePublishersForTests;const active_work_1=require("./active-work"),workerGeneration=new WeakMap,emit_1=require("./emit"),flow_context_1=require("./flow-context");function jobFlow(t){const e=t?.opts?.__lensmcpFlow;return e&&typeof e=="object"?e:void 0}d(jobFlow,"jobFlow"),a(jobFlow,"jobFlow");const jobLegId=a((t,e)=>`job:${t}#${e?.id??"?"}`,"jobLegId"),publishers=new Map,sources=new Map,sourceFor=a(t=>{let e=sources.get(t);return e||sources.set(t,e={}),e},"sourceFor"),usable=a(t=>!!t&&t.closing===void 0,"usable"),currentQueue=a(t=>{const e=sources.get(t),o=e?.app?.deref();return usable(o)?o:e?.own},"currentQueue");function ownConnection(t){if(!t||typeof t!="object")return;const e=t;if(typeof e.duplicate=="function")try{return e.duplicate()}catch{return}return Object.fromEntries(Object.entries(e).filter(([,o])=>typeof o!="function"))}d(ownConnection,"ownConnection"),a(ownConnection,"ownConnection");function bullmqTap(t){const e=t;if(typeof e?.Queue!="function"||typeof e?.Worker!="function")return!1;tappedQueue=e.Queue;try{tapQueueAdd(e)}catch{}try{tapWorkerEmit(e)}catch{}try{tapWorkerProcess(e)}catch{}try{tapWorkerConstruct(e)}catch{}return!0}d(bullmqTap,"bullmqTap"),a(bullmqTap,"bullmqTap");function tapWorkerConstruct(t){const e=t.Worker;if(typeof e!="function"||e.__lensmcpGen)return;const o=new Proxy(e,{construct(u,n,i){const l=Reflect.construct(u,n,i);try{workerGeneration.set(l,(0,active_work_1.activeWorkGeneration)())}catch{}return l}});Object.defineProperty(e,"__lensmcpGen",{value:!0,enumerable:!1}),t.Worker=o}d(tapWorkerConstruct,"tapWorkerConstruct"),a(tapWorkerConstruct,"tapWorkerConstruct");function tapWorkerProcess(t){const e=t.Worker?.prototype,o=e?.callProcessJob;if(!e||typeof o!="function"||o.__lensmcp)return;const u=a(async function(n,...i){const l=workerGeneration.get(this),s=(0,active_work_1.beginActiveWork)(l),c=jobFlow(n);if(!c?.flowId)return o.call(this,n,...i).finally(s);const r=String(this?.name??n?.queueName??"queue"),m=jobLegId(r,n),p=Date.now(),q={flowId:c.flowId,requestId:m};return(0,flow_context_1.runInFlowContext)(q,async()=>{try{const f=await o.call(this,n,...i);return(0,emit_1.lensEmit)("queue","info",`process ${n?.name}#${n?.id} (${Date.now()-p}ms)`,{queue:r,kind:"queue-process",job:n?.name,jobId:n?.id,startedAt:p,durationMs:Date.now()-p,status:"ok"},`queue:${r}`,q),f}catch(f){throw(0,emit_1.lensEmit)("queue","error",`process ${n?.name}#${n?.id} failed (${Date.now()-p}ms)`,{queue:r,kind:"queue-process",job:n?.name,jobId:n?.id,startedAt:p,durationMs:Date.now()-p,status:"error",error:String(f?.message??f)},`queue:${r}`,q),f}finally{s()}})},"wrapped");u.__lensmcp=!0,e.callProcessJob=u}d(tapWorkerProcess,"tapWorkerProcess"),a(tapWorkerProcess,"tapWorkerProcess");function tapQueueAdd(t){const e=t.Queue?.prototype,o=e?.add;if(!e||typeof o!="function"||o.__lensmcp)return;const u=a(async function(n,...i){const l=Date.now(),s=(0,flow_context_1.flowContext)();if(s?.flowId){const r=i[1]??{};i[1]={...r,__lensmcpFlow:{flowId:s.flowId,...s.requestId?{originRequestId:s.requestId}:{}}}}const c=await o.call(this,n,...i);try{const r=String(this?.name??"queue"),m=i[0];let p;try{const f=JSON.stringify(m);p=f&&f!=="undefined"?f.length>300?f.slice(0,299)+"\u2026":f:void 0}catch{}(0,emit_1.lensEmit)("queue","info",`enqueued ${n}#${c?.id} \u2192 ${r}`,{queue:r,kind:"queue-enqueued",job:n,jobId:c?.id,...p?{data:p}:{},startedAt:l,durationMs:Date.now()-l},`queue:${r}`,s);const q=sourceFor(r);q.app?.deref()!==this&&(q.app=new WeakRef(this)),ensureStatePublisher(r)}catch{}return c},"wrapped");u.__lensmcp=!0,e.add=u}d(tapQueueAdd,"tapQueueAdd"),a(tapQueueAdd,"tapQueueAdd");function tapWorkerEmit(t){const e=t.Worker?.prototype,o=e?.emit;if(!e||typeof o!="function"||o.__lensmcp)return;const u=a(function(n,...i){try{observeWorkerEvent(this,String(n),i)}catch{}return o.call(this,n,...i)},"wrapped");u.__lensmcp=!0,e.emit=u}d(tapWorkerEmit,"tapWorkerEmit"),a(tapWorkerEmit,"tapWorkerEmit");function observeWorkerEvent(t,e,o){if(e!=="active"&&e!=="completed"&&e!=="failed")return;const u=String(t.name??"queue"),n=o[0],i=jobFlow(n),l=i?.flowId?{flowId:i.flowId,requestId:jobLegId(u,n)}:void 0;if(e==="active")(0,emit_1.lensEmit)("queue","info",`processing ${n?.name}#${n?.id}`,{queue:u,kind:"queue-active",jobId:n?.id},`queue:${u}`,l);else if(e==="completed"){let s;try{const c=n?.returnvalue??o[1],r=JSON.stringify(c);s=r&&r!=="undefined"?r.length>160?r.slice(0,159)+"\u2026":r:void 0}catch{}(0,emit_1.lensEmit)("queue","info",`completed ${n?.name}#${n?.id}`,{queue:u,kind:"queue-completed",jobId:n?.id,...s?{returned:s}:{}},`queue:${u}`,l)}else{const s=o[1];(0,emit_1.lensEmit)("queue","error",`job ${n?.id} failed: ${s?.message}`,{queue:u,kind:"queue-failed",jobId:n?.id,error:String(s?.message??s)},`queue:${u}`,l)}if(!currentQueue(u))try{const s=t.opts,c=ownConnection(s?.connection);if(c){const r=snapshotQueueClass();r&&(sourceFor(u).own=new r(u,{connection:c}))}}catch{}ensureStatePublisher(u)}d(observeWorkerEvent,"observeWorkerEvent"),a(observeWorkerEvent,"observeWorkerEvent");let tappedQueue;function snapshotQueueClass(){if(tappedQueue)return tappedQueue;try{return require("bullmq").Queue}catch{return}}d(snapshotQueueClass,"snapshotQueueClass"),a(snapshotQueueClass,"snapshotQueueClass");function ensureStatePublisher(t){if(publishers.has(t))return;let e="";const o=setInterval(()=>{(async()=>{try{const u=currentQueue(t);if(!u)return;const n=await u.getJobCounts(),i=[];for(const c of["active","waiting","failed","completed","delayed"])for(const r of await u.getJobs([c],0,7)){const m=r?.data?.to;i.push({id:String(r.id),name:r.name,state:c,timestamp:r.timestamp??0,...typeof m=="string"?{to:m}:{}})}i.sort((c,r)=>Number(r.timestamp)-Number(c.timestamp));const l=i.slice(0,8),s=JSON.stringify([n,l.map(c=>`${c.id}${c.state}`)]);if(s===e)return;e=s,(0,emit_1.lensEmit)("queue","info",`queue state: ${n.active??0} active \xB7 ${n.waiting??0} waiting \xB7 ${n.failed??0} failed`,{queue:t,kind:"queue-state",counts:n,recent:l},`queue:${t}`)}catch{}})()},2e3);o.unref?.(),publishers.set(t,o)}d(ensureStatePublisher,"ensureStatePublisher"),a(ensureStatePublisher,"ensureStatePublisher");function resetQueueStatePublishersForTests(){for(const t of publishers.values())clearInterval(t);publishers.clear(),sources.clear()}d(resetQueueStatePublishersForTests,"resetQueueStatePublishersForTests"),a(resetQueueStatePublishersForTests,"resetQueueStatePublishersForTests");
package/lib/tap-egress.js CHANGED
@@ -1 +1 @@
1
- "use strict";var T=Object.defineProperty;var d=(t,s)=>T(t,"name",{value:s,configurable:!0});var y=Object.defineProperty,f=d((t,s)=>y(t,"name",{value:s,configurable:!0}),"f"),g=Object.defineProperty,i=f((t,s)=>g(t,"name",{value:s,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.tapEgress=tapEgress,exports.resetEgressTapForTests=resetEgressTapForTests;const redact_1=require("@lensmcp/core/redact"),emit_1=require("./emit"),flow_context_1=require("./flow-context"),INTERNAL=[/\.local$/i,/\.internal$/i,/^localhost$/i,/^127\./,/^\[?::1\]?$/,/^0\.0\.0\.0$/,/^10\./,/^192\.168\./,/^172\.(1[6-9]|2\d|3[01])\./,/^169\.254\./,/^\[?[fF][cCdD][0-9a-fA-F]{2}:/,/^\[?[fF][eE]80:/],isInternal=i(t=>t===""||INTERNAL.some(s=>s.test(t)),"isInternal"),CAPTURE_QUERY=process.env.LENSMCP_EGRESS_QUERY==="1",MAX_PATH_CHARS=256,clipPath=i(t=>t.length>MAX_PATH_CHARS?`${t.slice(0,MAX_PATH_CHARS)}\u2026`:t,"clipPath");function capturePath(t,s){const e=t||"/";return!CAPTURE_QUERY||s.length<=1?clipPath(e):(0,redact_1.redactUrl)(`${e}${s}`)}d(capturePath,"capturePath"),f(capturePath,"capturePath"),i(capturePath,"capturePath");const fingerprintFor=i((t,s)=>s?`external:error:${t}`:`external:${t}`,"fingerprintFor");function tapEgress(){tapFetch(),tapHttpModule("http"),tapHttpModule("https")}d(tapEgress,"tapEgress"),f(tapEgress,"tapEgress"),i(tapEgress,"tapEgress");let savedFetch;const httpOriginals=new Map;function resetEgressTapForTests(){const t=globalThis;savedFetch&&(t.fetch=savedFetch),delete t.__lensmcpFetchTap,restoreHttp("http"),restoreHttp("https"),savedFetch=void 0}d(resetEgressTapForTests,"resetEgressTapForTests"),f(resetEgressTapForTests,"resetEgressTapForTests"),i(resetEgressTapForTests,"resetEgressTapForTests");function restoreHttp(t){const s=httpOriginals.get(t);if(!s)return;const e=require(`node:${t}`);e.request=s.request,e.get=s.get,httpOriginals.delete(t)}d(restoreHttp,"restoreHttp"),f(restoreHttp,"restoreHttp"),i(restoreHttp,"restoreHttp");function tapFetch(){const t=globalThis;if(typeof t.fetch!="function"||t.__lensmcpFetchTap)return;t.__lensmcpFetchTap=!0;const s=t.fetch.bind(globalThis);savedFetch=t.fetch,t.fetch=(async(e,a)=>{let n="",c="/",o=!1;try{const p=new URL(typeof e=="string"?e:e instanceof URL?e.href:e.url);n=p.hostname,o=p.search.length>1,c=capturePath(p.pathname,p.search)}catch{}if(isInternal(n))return s(e,a);const r=Date.now(),u=(0,flow_context_1.flowContext)(),h=(0,flow_context_1.liveFlowContext)();h&&(h.externalCallCount=(h.externalCallCount??0)+1);const m=typeof e=="object"&&e!==null&&!(e instanceof URL)?e.method:void 0,l=String(a?.method??m??"GET").toUpperCase();try{const p=await s(e,a),E=p.status>=500;return(0,emit_1.lensEmit)("external","info",`egress ${l} ${n} \u2192 ${p.status}`,{name:n,kind:"egress",method:l,host:n,path:c,status:p.status,...o?{hasQuery:!0}:{},startedAt:r,durationMs:Date.now()-r},fingerprintFor(n,E),u),p}catch(p){throw(0,emit_1.lensEmit)("external","error",`egress ${l} ${n} failed`,{name:n,kind:"egress",method:l,host:n,path:c,...o?{hasQuery:!0}:{},error:String(p?.message??p),startedAt:r,durationMs:Date.now()-r},fingerprintFor(n,!0),u),p}})}d(tapFetch,"tapFetch"),f(tapFetch,"tapFetch"),i(tapFetch,"tapFetch");function tapHttpModule(t){const s=require(`node:${t}`),e=s.request;if(typeof e!="function"||e.__lensmcp)return;httpOriginals.set(t,{request:e,get:s.get});const a=i(function(...n){const c=e.apply(this,n);try{observe(n,c)}catch{}return c},"wrapped");a.__lensmcp=!0,s.request=a,typeof s.get=="function"&&(s.get=function(...n){const c=a.apply(this,n);return c.end(),c})}d(tapHttpModule,"tapHttpModule"),f(tapHttpModule,"tapHttpModule"),i(tapHttpModule,"tapHttpModule");function observe(t,s){const{host:e,method:a,path:n,hasQuery:c}=parseTarget(t);if(isInternal(e))return;const o=Date.now(),r=(0,flow_context_1.flowContext)(),u=(0,flow_context_1.liveFlowContext)();u&&(u.externalCallCount=(u.externalCallCount??0)+1);let h=!1;s.once("response",(...m)=>{if(h)return;h=!0;const l=m[0]?.statusCode;(0,emit_1.lensEmit)("external","info",`egress ${a} ${e} \u2192 ${l??"?"}`,{name:e,kind:"egress",method:a,host:e,path:n,...l!=null?{status:l}:{},...c?{hasQuery:!0}:{},startedAt:o,durationMs:Date.now()-o},fingerprintFor(e,l!=null&&l>=500),r)}),s.once("error",(...m)=>{if(h)return;h=!0;const l=m[0];(0,emit_1.lensEmit)("external","error",`egress ${a} ${e} failed`,{name:e,kind:"egress",method:a,host:e,path:n,...c?{hasQuery:!0}:{},error:String(l?.message??l),startedAt:o,durationMs:Date.now()-o},fingerprintFor(e,!0),r)})}d(observe,"observe"),f(observe,"observe"),i(observe,"observe");function parseTarget(t){let s="",e="GET",a="/",n=!1;const c=i((o,r)=>{n=r.length>1,a=capturePath(o,r)},"take");for(const o of t)if(typeof o=="string")try{const r=new URL(o);s=r.hostname,c(r.pathname,r.search)}catch{}else if(o instanceof URL)s=o.hostname,c(o.pathname,o.search);else if(o&&typeof o=="object"){const r=o;if(typeof r.method=="string"&&(e=r.method.toUpperCase()),typeof r.socketPath=="string")return{host:"",method:e,path:a,hasQuery:n};if(typeof r.path=="string"){const u=r.path,h=u.indexOf("?");c(h===-1?u:u.slice(0,h),h===-1?"":u.slice(h))}typeof r.hostname=="string"&&r.hostname?s=r.hostname:typeof r.host=="string"&&r.host&&(s=r.host.split(":")[0]??"")}return{host:s,method:e,path:a,hasQuery:n}}d(parseTarget,"parseTarget"),f(parseTarget,"parseTarget"),i(parseTarget,"parseTarget");
1
+ "use strict";var y=Object.defineProperty;var f=(t,s)=>y(t,"name",{value:s,configurable:!0});var g=Object.defineProperty,i=f((t,s)=>g(t,"name",{value:s,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.tapEgress=tapEgress,exports.resetEgressTapForTests=resetEgressTapForTests;const redact_1=require("@lensmcp/core/redact"),emit_1=require("./emit"),flow_context_1=require("./flow-context"),INTERNAL=[/\.local$/i,/\.internal$/i,/^localhost$/i,/^127\./,/^\[?::1\]?$/,/^0\.0\.0\.0$/,/^10\./,/^192\.168\./,/^172\.(1[6-9]|2\d|3[01])\./,/^169\.254\./,/^\[?[fF][cCdD][0-9a-fA-F]{2}:/,/^\[?[fF][eE]80:/],isInternal=i(t=>t===""||INTERNAL.some(s=>s.test(t)),"isInternal"),CAPTURE_QUERY=process.env.LENSMCP_EGRESS_QUERY==="1",MAX_PATH_CHARS=256,clipPath=i(t=>t.length>MAX_PATH_CHARS?`${t.slice(0,MAX_PATH_CHARS)}\u2026`:t,"clipPath");function capturePath(t,s){const e=t||"/";return!CAPTURE_QUERY||s.length<=1?clipPath(e):(0,redact_1.redactUrl)(`${e}${s}`)}f(capturePath,"capturePath"),i(capturePath,"capturePath");const fingerprintFor=i((t,s)=>s?`external:error:${t}`:`external:${t}`,"fingerprintFor");function tapEgress(){tapFetch(),tapHttpModule("http"),tapHttpModule("https")}f(tapEgress,"tapEgress"),i(tapEgress,"tapEgress");let savedFetch;const httpOriginals=new Map;function resetEgressTapForTests(){const t=globalThis;savedFetch&&(t.fetch=savedFetch),delete t.__lensmcpFetchTap,restoreHttp("http"),restoreHttp("https"),savedFetch=void 0}f(resetEgressTapForTests,"resetEgressTapForTests"),i(resetEgressTapForTests,"resetEgressTapForTests");function restoreHttp(t){const s=httpOriginals.get(t);if(!s)return;const e=require(`node:${t}`);e.request=s.request,e.get=s.get,httpOriginals.delete(t)}f(restoreHttp,"restoreHttp"),i(restoreHttp,"restoreHttp");function tapFetch(){const t=globalThis;if(typeof t.fetch!="function"||t.__lensmcpFetchTap)return;t.__lensmcpFetchTap=!0;const s=t.fetch.bind(globalThis);savedFetch=t.fetch,t.fetch=(async(e,a)=>{let r="",c="/",o=!1;try{const p=new URL(typeof e=="string"?e:e instanceof URL?e.href:e.url);r=p.hostname,o=p.search.length>1,c=capturePath(p.pathname,p.search)}catch{}if(isInternal(r))return s(e,a);const n=Date.now(),u=(0,flow_context_1.flowContext)(),h=(0,flow_context_1.liveFlowContext)();h&&(h.externalCallCount=(h.externalCallCount??0)+1);const d=typeof e=="object"&&e!==null&&!(e instanceof URL)?e.method:void 0,l=String(a?.method??d??"GET").toUpperCase();try{const p=await s(e,a),m=p.status>=500;return(0,emit_1.lensEmit)("external","info",`egress ${l} ${r} \u2192 ${p.status}`,{name:r,kind:"egress",method:l,host:r,path:c,status:p.status,...o?{hasQuery:!0}:{},startedAt:n,durationMs:Date.now()-n},fingerprintFor(r,m),u),p}catch(p){throw(0,emit_1.lensEmit)("external","error",`egress ${l} ${r} failed`,{name:r,kind:"egress",method:l,host:r,path:c,...o?{hasQuery:!0}:{},error:String(p?.message??p),startedAt:n,durationMs:Date.now()-n},fingerprintFor(r,!0),u),p}})}f(tapFetch,"tapFetch"),i(tapFetch,"tapFetch");function tapHttpModule(t){const s=require(`node:${t}`),e=s.request;if(typeof e!="function"||e.__lensmcp)return;httpOriginals.set(t,{request:e,get:s.get});const a=i(function(...r){const c=e.apply(this,r);try{observe(r,c)}catch{}return c},"wrapped");a.__lensmcp=!0,s.request=a,typeof s.get=="function"&&(s.get=function(...r){const c=a.apply(this,r);return c.end(),c})}f(tapHttpModule,"tapHttpModule"),i(tapHttpModule,"tapHttpModule");function observe(t,s){const{host:e,method:a,path:r,hasQuery:c}=parseTarget(t);if(isInternal(e))return;const o=Date.now(),n=(0,flow_context_1.flowContext)(),u=(0,flow_context_1.liveFlowContext)();u&&(u.externalCallCount=(u.externalCallCount??0)+1);let h=!1;s.once("response",(...d)=>{if(h)return;h=!0;const l=d[0]?.statusCode;(0,emit_1.lensEmit)("external","info",`egress ${a} ${e} \u2192 ${l??"?"}`,{name:e,kind:"egress",method:a,host:e,path:r,...l!=null?{status:l}:{},...c?{hasQuery:!0}:{},startedAt:o,durationMs:Date.now()-o},fingerprintFor(e,l!=null&&l>=500),n)}),s.once("error",(...d)=>{if(h)return;h=!0;const l=d[0];(0,emit_1.lensEmit)("external","error",`egress ${a} ${e} failed`,{name:e,kind:"egress",method:a,host:e,path:r,...c?{hasQuery:!0}:{},error:String(l?.message??l),startedAt:o,durationMs:Date.now()-o},fingerprintFor(e,!0),n)})}f(observe,"observe"),i(observe,"observe");function parseTarget(t){let s="",e="GET",a="/",r=!1;const c=i((o,n)=>{r=n.length>1,a=capturePath(o,n)},"take");for(const o of t)if(typeof o=="string")try{const n=new URL(o);s=n.hostname,c(n.pathname,n.search)}catch{}else if(o instanceof URL)s=o.hostname,c(o.pathname,o.search);else if(o&&typeof o=="object"){const n=o;if(typeof n.method=="string"&&(e=n.method.toUpperCase()),typeof n.socketPath=="string")return{host:"",method:e,path:a,hasQuery:r};if(typeof n.path=="string"){const u=n.path,h=u.indexOf("?");c(h===-1?u:u.slice(0,h),h===-1?"":u.slice(h))}typeof n.hostname=="string"&&n.hostname?s=n.hostname:typeof n.host=="string"&&n.host&&(s=n.host.split(":")[0]??"")}return{host:s,method:e,path:a,hasQuery:r}}f(parseTarget,"parseTarget"),i(parseTarget,"parseTarget");
@@ -1 +1 @@
1
- "use strict";var v=Object.defineProperty;var s=(e,o)=>v(e,"name",{value:o,configurable:!0});var m=Object.defineProperty,r=s((e,o)=>m(e,"name",{value:o,configurable:!0}),"r"),a=Object.defineProperty,n=r((e,o)=>a(e,"name",{value:o,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.tapEventLoop=tapEventLoop,exports.stopEventLoopTapForTests=stopEventLoopTapForTests;const node_perf_hooks_1=require("node:perf_hooks"),emit_1=require("./emit"),SAMPLE_MS=(()=>{const e=Number(process.env.LENSMCP_EVENT_LOOP_SAMPLE_MS);return Number.isFinite(e)&&e>=1e3?e:3e4})(),REPORT_ABOVE_MS=(()=>{const e=Number(process.env.LENSMCP_EVENT_LOOP_MIN_MS);return Number.isFinite(e)&&e>=0?e:50})(),RESOLUTION_MS=20;let timer,published=!1;function tapEventLoop(){if(process.env.LENSMCP_EVENT_LOOP==="0"||timer)return;const e=(0,node_perf_hooks_1.monitorEventLoopDelay)({resolution:RESOLUTION_MS});e.enable(),timer=setInterval(()=>{const o=RESOLUTION_MS,p=e.mean/1e6;if(!Number.isFinite(p))return;const i=Math.max(0,p-o),t=Math.max(0,e.max/1e6-o),u=Math.max(0,e.percentile(99)/1e6-o);e.reset(),!(published&&t<REPORT_ABOVE_MS)&&(published=!0,(0,emit_1.lensEmit)("perf",t>=1e3?"error":"info",`event loop lag ${i.toFixed(1)}ms mean / ${t.toFixed(1)}ms max`,{kind:"event-loop-lag",lagMs:Number(i.toFixed(2)),maxMs:Number(t.toFixed(2)),p99Ms:Number(u.toFixed(2)),windowMs:SAMPLE_MS},"perf:event-loop-lag",void 0,"performance"))},SAMPLE_MS),timer.unref?.()}s(tapEventLoop,"tapEventLoop"),r(tapEventLoop,"tapEventLoop"),n(tapEventLoop,"tapEventLoop");function stopEventLoopTapForTests(){timer&&clearInterval(timer),timer=void 0,published=!1}s(stopEventLoopTapForTests,"stopEventLoopTapForTests"),r(stopEventLoopTapForTests,"stopEventLoopTapForTests"),n(stopEventLoopTapForTests,"stopEventLoopTapForTests");
1
+ "use strict";var m=Object.defineProperty;var r=(e,o)=>m(e,"name",{value:o,configurable:!0});var a=Object.defineProperty,n=r((e,o)=>a(e,"name",{value:o,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.tapEventLoop=tapEventLoop,exports.stopEventLoopTapForTests=stopEventLoopTapForTests;const node_perf_hooks_1=require("node:perf_hooks"),emit_1=require("./emit"),SAMPLE_MS=(()=>{const e=Number(process.env.LENSMCP_EVENT_LOOP_SAMPLE_MS);return Number.isFinite(e)&&e>=1e3?e:3e4})(),REPORT_ABOVE_MS=(()=>{const e=Number(process.env.LENSMCP_EVENT_LOOP_MIN_MS);return Number.isFinite(e)&&e>=0?e:50})(),RESOLUTION_MS=20;let timer,published=!1;function tapEventLoop(){if(process.env.LENSMCP_EVENT_LOOP==="0"||timer)return;const e=(0,node_perf_hooks_1.monitorEventLoopDelay)({resolution:RESOLUTION_MS});e.enable(),timer=setInterval(()=>{const o=RESOLUTION_MS,s=e.mean/1e6;if(!Number.isFinite(s))return;const i=Math.max(0,s-o),t=Math.max(0,e.max/1e6-o),p=Math.max(0,e.percentile(99)/1e6-o);e.reset(),!(published&&t<REPORT_ABOVE_MS)&&(published=!0,(0,emit_1.lensEmit)("perf",t>=1e3?"error":"info",`event loop lag ${i.toFixed(1)}ms mean / ${t.toFixed(1)}ms max`,{kind:"event-loop-lag",lagMs:Number(i.toFixed(2)),maxMs:Number(t.toFixed(2)),p99Ms:Number(p.toFixed(2)),windowMs:SAMPLE_MS},"perf:event-loop-lag",void 0,"performance"))},SAMPLE_MS),timer.unref?.()}r(tapEventLoop,"tapEventLoop"),n(tapEventLoop,"tapEventLoop");function stopEventLoopTapForTests(){timer&&clearInterval(timer),timer=void 0,published=!1}r(stopEventLoopTapForTests,"stopEventLoopTapForTests"),n(stopEventLoopTapForTests,"stopEventLoopTapForTests");
package/lib/tap-exec.js CHANGED
@@ -1 +1 @@
1
- "use strict";var m=Object.defineProperty;var d=(n,e)=>m(n,"name",{value:e,configurable:!0});var f=Object.defineProperty,l=d((n,e)=>f(n,"name",{value:e,configurable:!0}),"l"),x=Object.defineProperty,u=l((n,e)=>x(n,"name",{value:e,configurable:!0}),"u");Object.defineProperty(exports,"__esModule",{value:!0}),exports.tapExec=tapExec;const emit_1=require("./emit"),fmtCmd=u((n,e)=>{const r=Array.isArray(e)?e.map(String).slice(0,8).join(" "):"";return`${String(n)}${r?" "+r:""}`.slice(0,200)},"fmtCmd");function wrap(n,e,r){const t=n[e];if(typeof t!="function"||t.__lensmcp)return;const c=r(t);c.__lensmcp=!0,n[e]=c}d(wrap,"wrap"),l(wrap,"wrap"),u(wrap,"wrap");function observeChild(n,e,r){if(!r||typeof r.once!="function")return;const t=r;if(t.__lensmcpObserved)return;t.__lensmcpObserved=!0;const c=Date.now();r.once("exit",(...o)=>{const i=o[0],a=o[1];(0,emit_1.lensEmit)("exec",i===0?"info":"error",`exec ${e.split(" ")[0]} \u2192 ${i??a}`,{name:"exec",kind:"exec",cmd:e,via:n,...i!=null?{code:i}:{},...a?{signal:a}:{},durationMs:Date.now()-c,...r.pid?{pid:r.pid}:{}})}),r.once("error",(...o)=>{const i=o[0];(0,emit_1.lensEmit)("exec","error",`exec ${e.split(" ")[0]} failed to start`,{name:"exec",kind:"exec",cmd:e,via:n,error:String(i?.message??i),durationMs:Date.now()-c})})}d(observeChild,"observeChild"),l(observeChild,"observeChild"),u(observeChild,"observeChild");function tapExec(){const n=require("node:child_process");for(const e of["spawn","fork"])wrap(n,e,r=>function(t,...c){const o=Array.isArray(c[0])?c[0]:[],i=r.call(this,t,...c);try{observeChild(e,fmtCmd(t,o),i)}catch{}return i});wrap(n,"exec",e=>function(r,...t){const c=e.call(this,r,...t);try{observeChild("exec",String(r).slice(0,200),c)}catch{}return c}),wrap(n,"execFile",e=>function(r,...t){const c=Array.isArray(t[0])?t[0]:[],o=e.call(this,r,...t);try{observeChild("execFile",fmtCmd(r,c),o)}catch{}return o});for(const e of["execSync","execFileSync","spawnSync"])wrap(n,e,r=>function(t,...c){const o=Array.isArray(c[0])?c[0]:[],i=e==="execSync"?String(t).slice(0,200):fmtCmd(t,o),a=Date.now();try{const s=r.call(this,t,...c),p=s&&typeof s=="object"&&"status"in s?s.status??0:0;return(0,emit_1.lensEmit)("exec",p===0?"info":"error",`exec ${i.split(" ")[0]} \u2192 ${p}`,{name:"exec",kind:"exec",cmd:i,via:e,code:p,durationMs:Date.now()-a,sync:!0}),s}catch(s){throw(0,emit_1.lensEmit)("exec","error",`exec ${i.split(" ")[0]} failed`,{name:"exec",kind:"exec",cmd:i,via:e,error:String(s?.message??s),durationMs:Date.now()-a,sync:!0}),s}})}d(tapExec,"tapExec"),l(tapExec,"tapExec"),u(tapExec,"tapExec");
1
+ "use strict";var f=Object.defineProperty;var l=(t,e)=>f(t,"name",{value:e,configurable:!0});var x=Object.defineProperty,u=l((t,e)=>x(t,"name",{value:e,configurable:!0}),"u");Object.defineProperty(exports,"__esModule",{value:!0}),exports.tapExec=tapExec;const emit_1=require("./emit"),fmtCmd=u((t,e)=>{const c=Array.isArray(e)?e.map(String).slice(0,8).join(" "):"";return`${String(t)}${c?" "+c:""}`.slice(0,200)},"fmtCmd");function wrap(t,e,c){const n=t[e];if(typeof n!="function"||n.__lensmcp)return;const r=c(n);r.__lensmcp=!0,t[e]=r}l(wrap,"wrap"),u(wrap,"wrap");function observeChild(t,e,c){if(!c||typeof c.once!="function")return;const n=c;if(n.__lensmcpObserved)return;n.__lensmcpObserved=!0;const r=Date.now();c.once("exit",(...s)=>{const i=s[0],a=s[1];(0,emit_1.lensEmit)("exec",i===0?"info":"error",`exec ${e.split(" ")[0]} \u2192 ${i??a}`,{name:"exec",kind:"exec",cmd:e,via:t,...i!=null?{code:i}:{},...a?{signal:a}:{},durationMs:Date.now()-r,...c.pid?{pid:c.pid}:{}})}),c.once("error",(...s)=>{const i=s[0];(0,emit_1.lensEmit)("exec","error",`exec ${e.split(" ")[0]} failed to start`,{name:"exec",kind:"exec",cmd:e,via:t,error:String(i?.message??i),durationMs:Date.now()-r})})}l(observeChild,"observeChild"),u(observeChild,"observeChild");function tapExec(){const t=require("node:child_process");for(const e of["spawn","fork"])wrap(t,e,c=>function(n,...r){const s=Array.isArray(r[0])?r[0]:[],i=c.call(this,n,...r);try{observeChild(e,fmtCmd(n,s),i)}catch{}return i});wrap(t,"exec",e=>function(c,...n){const r=e.call(this,c,...n);try{observeChild("exec",String(c).slice(0,200),r)}catch{}return r}),wrap(t,"execFile",e=>function(c,...n){const r=Array.isArray(n[0])?n[0]:[],s=e.call(this,c,...n);try{observeChild("execFile",fmtCmd(c,r),s)}catch{}return s});for(const e of["execSync","execFileSync","spawnSync"])wrap(t,e,c=>function(n,...r){const s=Array.isArray(r[0])?r[0]:[],i=e==="execSync"?String(n).slice(0,200):fmtCmd(n,s),a=Date.now();try{const o=c.call(this,n,...r),d=o&&typeof o=="object"&&"status"in o?o.status??0:0;return(0,emit_1.lensEmit)("exec",d===0?"info":"error",`exec ${i.split(" ")[0]} \u2192 ${d}`,{name:"exec",kind:"exec",cmd:i,via:e,code:d,durationMs:Date.now()-a,sync:!0}),o}catch(o){throw(0,emit_1.lensEmit)("exec","error",`exec ${i.split(" ")[0]} failed`,{name:"exec",kind:"exec",cmd:i,via:e,error:String(o?.message??o),durationMs:Date.now()-a,sync:!0}),o}})}l(tapExec,"tapExec"),u(tapExec,"tapExec");
package/lib/tap-fs.js CHANGED
@@ -1 +1 @@
1
- "use strict";var h=Object.defineProperty;var f=(t,s)=>h(t,"name",{value:s,configurable:!0});var d=Object.defineProperty,c=f((t,s)=>d(t,"name",{value:s,configurable:!0}),"c"),u=Object.defineProperty,l=c((t,s)=>u(t,"name",{value:s,configurable:!0}),"l");Object.defineProperty(exports,"__esModule",{value:!0}),exports.tapFs=tapFs;const tslib_1=require("tslib"),os=tslib_1.__importStar(require("node:os")),emit_1=require("./emit"),bucket={reads:0,writes:0,bytesRead:0,bytesWritten:0,paths:new Map};let timer=null;const TMP=os.tmpdir(),CWD=process.cwd(),SKIP=["node_modules","/.nx/","/dist/","/.git/",".lensmcp"];function trackedPath(t){if((0,emit_1.isLensWriting)())return null;const s=typeof t=="string"?t:Buffer.isBuffer(t)?t.toString():t instanceof URL?t.pathname:null;return!s||s===emit_1.EVENT_FILE||s.startsWith(TMP)||SKIP.some(r=>s.includes(r))?null:s}f(trackedPath,"trackedPath"),c(trackedPath,"trackedPath"),l(trackedPath,"trackedPath");function record(t,s,r=0){const e=trackedPath(s);if(!e)return;t==="read"?(bucket.reads+=1,bucket.bytesRead+=r):(bucket.writes+=1,bucket.bytesWritten+=r);const n=e.startsWith(CWD)?e.slice(CWD.length+1):e;bucket.paths.size<50&&bucket.paths.set(n,(bucket.paths.get(n)??0)+1),timer||(timer=setTimeout(flush,1e3),timer.unref?.())}f(record,"record"),c(record,"record"),l(record,"record");function flush(){timer=null;const{reads:t,writes:s,bytesRead:r,bytesWritten:e}=bucket;if(t+s===0)return;const n=[...bucket.paths.entries()].sort((i,a)=>a[1]-i[1]).slice(0,3).map(([i])=>i);bucket.reads=bucket.writes=bucket.bytesRead=bucket.bytesWritten=0,bucket.paths.clear(),(0,emit_1.lensEmit)("fs","info",`fs ${t} reads \xB7 ${s} writes`,{name:"fs",kind:"fs-ops",reads:t,writes:s,bytesRead:r,bytesWritten:e,top:n},`fs:${emit_1.PROJECT}`)}f(flush,"flush"),c(flush,"flush"),l(flush,"flush");const byteLen=l(t=>typeof t=="string"?Buffer.byteLength(t):Buffer.isBuffer(t)?t.length:0,"byteLen");function wrap(t,s,r){const e=t?.[s];if(!t||typeof e!="function"||e.__lensmcp)return;const n=r(e);n.__lensmcp=!0;try{t[s]=n}catch{}}f(wrap,"wrap"),c(wrap,"wrap"),l(wrap,"wrap");function tapFs(){const t=require("node:fs");wrap(t,"readFileSync",r=>function(e,...n){const i=r.call(this,e,...n);return record("read",e,byteLen(i)),i}),wrap(t,"writeFileSync",r=>function(e,n,...i){const a=r.call(this,e,n,...i);return record("write",e,byteLen(n)),a}),wrap(t,"appendFileSync",r=>function(e,n,...i){const a=r.call(this,e,n,...i);return record("write",e,byteLen(n)),a}),wrap(t,"readFile",r=>function(e,...n){const i=n[n.length-1];return typeof i=="function"&&(n[n.length-1]=(a,o)=>{a||record("read",e,byteLen(o)),i(a,o)}),r.call(this,e,...n)});for(const r of["writeFile","appendFile"])wrap(t,r,e=>function(n,i,...a){const o=a[a.length-1];return typeof o=="function"&&(a[a.length-1]=p=>{p||record("write",n,byteLen(i)),o(p)}),e.call(this,n,i,...a)});const s=t.promises;wrap(s,"readFile",r=>async function(e,...n){const i=await r.call(this,e,...n);return record("read",e,byteLen(i)),i});for(const r of["writeFile","appendFile"])wrap(s,r,e=>async function(n,i,...a){const o=await e.call(this,n,i,...a);return record("write",n,byteLen(i)),o});wrap(t,"createReadStream",r=>function(e,...n){return record("read",e,0),r.call(this,e,...n)}),wrap(t,"createWriteStream",r=>function(e,...n){return record("write",e,0),r.call(this,e,...n)})}f(tapFs,"tapFs"),c(tapFs,"tapFs"),l(tapFs,"tapFs");
1
+ "use strict";var d=Object.defineProperty;var c=(e,i)=>d(e,"name",{value:i,configurable:!0});var u=Object.defineProperty,l=c((e,i)=>u(e,"name",{value:i,configurable:!0}),"l");Object.defineProperty(exports,"__esModule",{value:!0}),exports.tapFs=tapFs;const tslib_1=require("tslib"),os=tslib_1.__importStar(require("node:os")),emit_1=require("./emit"),bucket={reads:0,writes:0,bytesRead:0,bytesWritten:0,paths:new Map};let timer=null;const TMP=os.tmpdir(),CWD=process.cwd(),SKIP=["node_modules","/.nx/","/dist/","/.git/",".lensmcp"];function trackedPath(e){if((0,emit_1.isLensWriting)())return null;const i=typeof e=="string"?e:Buffer.isBuffer(e)?e.toString():e instanceof URL?e.pathname:null;return!i||i===emit_1.EVENT_FILE||i.startsWith(TMP)||SKIP.some(n=>i.includes(n))?null:i}c(trackedPath,"trackedPath"),l(trackedPath,"trackedPath");function record(e,i,n=0){const t=trackedPath(i);if(!t)return;e==="read"?(bucket.reads+=1,bucket.bytesRead+=n):(bucket.writes+=1,bucket.bytesWritten+=n);const r=t.startsWith(CWD)?t.slice(CWD.length+1):t;bucket.paths.size<50&&bucket.paths.set(r,(bucket.paths.get(r)??0)+1),timer||(timer=setTimeout(flush,1e3),timer.unref?.())}c(record,"record"),l(record,"record");function flush(){timer=null;const{reads:e,writes:i,bytesRead:n,bytesWritten:t}=bucket;if(e+i===0)return;const r=[...bucket.paths.entries()].sort((s,a)=>a[1]-s[1]).slice(0,3).map(([s])=>s);bucket.reads=bucket.writes=bucket.bytesRead=bucket.bytesWritten=0,bucket.paths.clear(),(0,emit_1.lensEmit)("fs","info",`fs ${e} reads \xB7 ${i} writes`,{name:"fs",kind:"fs-ops",reads:e,writes:i,bytesRead:n,bytesWritten:t,top:r},`fs:${emit_1.PROJECT}`)}c(flush,"flush"),l(flush,"flush");const byteLen=l(e=>typeof e=="string"?Buffer.byteLength(e):Buffer.isBuffer(e)?e.length:0,"byteLen");function wrap(e,i,n){const t=e?.[i];if(!e||typeof t!="function"||t.__lensmcp)return;const r=n(t);r.__lensmcp=!0;try{e[i]=r}catch{}}c(wrap,"wrap"),l(wrap,"wrap");function tapFs(){const e=require("node:fs");wrap(e,"readFileSync",n=>function(t,...r){const s=n.call(this,t,...r);return record("read",t,byteLen(s)),s}),wrap(e,"writeFileSync",n=>function(t,r,...s){const a=n.call(this,t,r,...s);return record("write",t,byteLen(r)),a}),wrap(e,"appendFileSync",n=>function(t,r,...s){const a=n.call(this,t,r,...s);return record("write",t,byteLen(r)),a}),wrap(e,"readFile",n=>function(t,...r){const s=r[r.length-1];return typeof s=="function"&&(r[r.length-1]=(a,o)=>{a||record("read",t,byteLen(o)),s(a,o)}),n.call(this,t,...r)});for(const n of["writeFile","appendFile"])wrap(e,n,t=>function(r,s,...a){const o=a[a.length-1];return typeof o=="function"&&(a[a.length-1]=f=>{f||record("write",r,byteLen(s)),o(f)}),t.call(this,r,s,...a)});const i=e.promises;wrap(i,"readFile",n=>async function(t,...r){const s=await n.call(this,t,...r);return record("read",t,byteLen(s)),s});for(const n of["writeFile","appendFile"])wrap(i,n,t=>async function(r,s,...a){const o=await t.call(this,r,s,...a);return record("write",r,byteLen(s)),o});wrap(e,"createReadStream",n=>function(t,...r){return record("read",t,0),n.call(this,t,...r)}),wrap(e,"createWriteStream",n=>function(t,...r){return record("write",t,0),n.call(this,t,...r)})}c(tapFs,"tapFs"),l(tapFs,"tapFs");
package/lib/tap-nest.js CHANGED
@@ -1 +1 @@
1
- "use strict";var y=Object.defineProperty;var p=(e,t)=>y(e,"name",{value:t,configurable:!0});var d=Object.defineProperty,c=p((e,t)=>d(e,"name",{value:t,configurable:!0}),"c"),f=Object.defineProperty,s=c((e,t)=>f(e,"name",{value:t,configurable:!0}),"s");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installChildAppBridge=installChildAppBridge,exports.nestTap=nestTap;const emit_1=require("./emit"),WRAPPED=Symbol.for("lensmcp.wrappedRoot"),captures=[],waiters=[];function pushCapture(e){const t=waiters.shift();t?(clearTimeout(t.timer),t.resolve(e)):captures.push(e)}p(pushCapture,"pushCapture"),c(pushCapture,"pushCapture"),s(pushCapture,"pushCapture");function nextCapture(e=6e4){const t=captures.shift();return t?Promise.resolve(t):new Promise((n,o)=>{const i={resolve:n,reject:o,timer:setTimeout(()=>{const r=waiters.indexOf(i);r>=0&&waiters.splice(r,1),o(new Error("[lensmcp] no NestJS app captured within 60s \u2014 does main.ts call app.listen()? (zero-touch pods boot by running your main and intercepting listen)"))},e)};i.timer.unref?.(),waiters.push(i)})}p(nextCapture,"nextCapture"),c(nextCapture,"nextCapture"),s(nextCapture,"nextCapture");function installChildAppBridge(){if(process.env.APP_RUNNER!=="1")return;const e=global,t=s(()=>nextCapture(),"factory");e.createChildApp=t,e.__lensmcpCreateChildApp=t}p(installChildAppBridge,"installChildAppBridge"),c(installChildAppBridge,"installChildAppBridge"),s(installChildAppBridge,"installChildAppBridge");function nestTap(e){const t=e,n=t?.NestFactory,o=n?.create;if(!n||typeof o!="function")return!1;if(o.__lensmcp)return!0;const i=s(async function(r,...l){let a=r;const u=r,m=!!(u?.[WRAPPED]||u?.module?.[WRAPPED]);if(process.env.LENSMCP_NEST!=="0"&&!m)try{a=await buildLensmcpRoot(r)}catch{a=r}return o.call(this??n,a,...l)},"wrapped");if(i.__lensmcp=!0,n.create=i,process.env.APP_RUNNER==="1"){const r=t?.NestApplication?.prototype,l=r?.listen;if(r&&typeof l=="function"&&!l.__lensmcp){const a=s(async function(u,...m){return captureApp(this,u).catch(h=>(console.error("[lensmcp] pod capture failed, falling back to TCP listen:",h),l.call(this,u,...m)))},"listenWrapped");a.__lensmcp=!0,r.listen=a}}return!0}p(nestTap,"nestTap"),c(nestTap,"nestTap"),s(nestTap,"nestTap");async function buildLensmcpRoot(e){const t=await import("@lensmcp/nest-instrumentation"),n=require("@nestjs/common"),o=t.LensmcpModule.forRoot({projectName:emit_1.PROJECT,trace:{autoInstrumentMethods:!0},memory:{mode:"light",scope:"all"}});class i{static{p(this,"i")}static{c(this,"n")}static{s(this,"LensmcpZeroTouchRoot")}}return i[WRAPPED]=!0,n.Module({imports:[o,e]})(i),i}p(buildLensmcpRoot,"buildLensmcpRoot"),c(buildLensmcpRoot,"buildLensmcpRoot"),s(buildLensmcpRoot,"buildLensmcpRoot");async function captureApp(e,t){await e.init();let n=e.getHttpAdapter?.()?.getInstance?.();if(typeof n!="function"){const o=n;o?.ready&&await o.ready(),typeof o?.routing=="function"&&(n=s((i,r)=>o.routing(i,r),"handler"))}if(typeof n!="function")throw new Error("[lensmcp] cannot derive a request handler from the HTTP adapter");return pushCapture({handler:n,serviceConfig:{port:t??process.env.PORT??0},close:s(()=>Promise.resolve(e.close()).then(()=>{}),"close")}),e.getHttpServer?.()}p(captureApp,"captureApp"),c(captureApp,"captureApp"),s(captureApp,"captureApp");
1
+ "use strict";var d=Object.defineProperty;var c=(e,t)=>d(e,"name",{value:t,configurable:!0});var f=Object.defineProperty,s=c((e,t)=>f(e,"name",{value:t,configurable:!0}),"s");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installChildAppBridge=installChildAppBridge,exports.nestTap=nestTap;const emit_1=require("./emit"),WRAPPED=Symbol.for("lensmcp.wrappedRoot"),captures=[],waiters=[];function pushCapture(e){const t=waiters.shift();t?(clearTimeout(t.timer),t.resolve(e)):captures.push(e)}c(pushCapture,"pushCapture"),s(pushCapture,"pushCapture");function nextCapture(e=6e4){const t=captures.shift();return t?Promise.resolve(t):new Promise((n,r)=>{const i={resolve:n,reject:r,timer:setTimeout(()=>{const o=waiters.indexOf(i);o>=0&&waiters.splice(o,1),r(new Error("[lensmcp] no NestJS app captured within 60s \u2014 does main.ts call app.listen()? (zero-touch pods boot by running your main and intercepting listen)"))},e)};i.timer.unref?.(),waiters.push(i)})}c(nextCapture,"nextCapture"),s(nextCapture,"nextCapture");function installChildAppBridge(){if(process.env.APP_RUNNER!=="1")return;const e=global,t=s(()=>nextCapture(),"factory");e.createChildApp=t,e.__lensmcpCreateChildApp=t}c(installChildAppBridge,"installChildAppBridge"),s(installChildAppBridge,"installChildAppBridge");function nestTap(e){const t=e,n=t?.NestFactory,r=n?.create;if(!n||typeof r!="function")return!1;if(r.__lensmcp)return!0;const i=s(async function(o,...a){let p=o;const l=o,u=!!(l?.[WRAPPED]||l?.module?.[WRAPPED]);if(process.env.LENSMCP_NEST!=="0"&&!u)try{p=await buildLensmcpRoot(o)}catch{p=o}return r.call(this??n,p,...a)},"wrapped");if(i.__lensmcp=!0,n.create=i,process.env.APP_RUNNER==="1"){const o=t?.NestApplication?.prototype,a=o?.listen;if(o&&typeof a=="function"&&!a.__lensmcp){const p=s(async function(l,...u){return captureApp(this,l).catch(m=>(console.error("[lensmcp] pod capture failed, falling back to TCP listen:",m),a.call(this,l,...u)))},"listenWrapped");p.__lensmcp=!0,o.listen=p}}return!0}c(nestTap,"nestTap"),s(nestTap,"nestTap");async function buildLensmcpRoot(e){const t=await import("@lensmcp/nest-instrumentation"),n=require("@nestjs/common"),r=t.LensmcpModule.forRoot({projectName:emit_1.PROJECT,trace:{autoInstrumentMethods:!0},memory:{mode:"light",scope:"all"}});class i{static{c(this,"n")}static{s(this,"LensmcpZeroTouchRoot")}}return i[WRAPPED]=!0,n.Module({imports:[r,e]})(i),i}c(buildLensmcpRoot,"buildLensmcpRoot"),s(buildLensmcpRoot,"buildLensmcpRoot");async function captureApp(e,t){await e.init();let n=e.getHttpAdapter?.()?.getInstance?.();if(typeof n!="function"){const r=n;r?.ready&&await r.ready(),typeof r?.routing=="function"&&(n=s((i,o)=>r.routing(i,o),"handler"))}if(typeof n!="function")throw new Error("[lensmcp] cannot derive a request handler from the HTTP adapter");return pushCapture({handler:n,serviceConfig:{port:t??process.env.PORT??0},close:s(()=>Promise.resolve(e.close()).then(()=>{}),"close")}),e.getHttpServer?.()}c(captureApp,"captureApp"),s(captureApp,"captureApp");
package/lib/tap-pg.js CHANGED
@@ -1 +1 @@
1
- "use strict";var L=Object.defineProperty;var f=(e,t)=>L(e,"name",{value:t,configurable:!0});var x=Object.defineProperty,c=f((e,t)=>x(e,"name",{value:t,configurable:!0}),"c"),E=Object.defineProperty,n=c((e,t)=>E(e,"name",{value:t,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.pgTap=pgTap;const emit_1=require("./emit"),flow_context_1=require("./flow-context"),SKIP_OPS=new Set(["BEGIN","COMMIT","ROLLBACK","SET","SHOW","DEALLOCATE","DISCARD"]);function parseSql(e){const t=(e.match(/^\s*(\w+)/)?.[1]??"query").toUpperCase(),r=e.match(/\b(?:from|into|update|join|table(?:\s+if\s+not\s+exists)?)\s+"?([\w$.]+)"?/i)?.[1]?.split(".").pop();return{op:t,...r?{table:r}:{}}}f(parseSql,"parseSql"),c(parseSql,"parseSql"),n(parseSql,"parseSql");const oneLine=n(e=>e.replace(/\s+/g," ").trim(),"oneLine"),clip=n((e,t)=>e.length>t?e.slice(0,t-1)+"\u2026":e,"clip");function paramPreview(e){if(!(!Array.isArray(e)||e.length===0))return e.slice(0,10).map(t=>{if(t==null)return String(t);const r=typeof t=="string"?t:(()=>{try{return JSON.stringify(t)}catch{return String(t)}})();return clip(r,80)})}f(paramPreview,"paramPreview"),c(paramPreview,"paramPreview"),n(paramPreview,"paramPreview");const rowsOf=n(e=>e?.rowCount??e?.rows?.length??0,"rowsOf");function resultPreview(e){const t=e?.rows;if(!(!Array.isArray(t)||t.length===0))try{return clip(JSON.stringify(t.slice(0,2)),240)}catch{return}}f(resultPreview,"resultPreview"),c(resultPreview,"resultPreview"),n(resultPreview,"resultPreview");function pgTap(e){const t=e?.Client?.prototype,r=t?.query;if(!t||typeof r!="function")return!1;if(r.__lensmcp)return!0;const q=n(function(a,s,d){const u=a,b=typeof u=="string"?u:u?.text;if(!b||u&&typeof u=="object"&&typeof u.submit=="function")return r.call(this,a,s,d);const{op:C,table:i}=parseSql(b);if(SKIP_OPS.has(C))return r.call(this,a,s,d);const p=C.toLowerCase(),_=`db:${p}:${i??"query"}`,g=Date.now(),S=(0,flow_context_1.flowContext)(),h=(0,flow_context_1.liveFlowContext)();h&&(h.dbCallCount=(h.dbCallCount??0)+1);const A=clip(oneLine(b),500),w=paramPreview(Array.isArray(s)?s:a?.values),v=n((o,y)=>{const l=Date.now()-g;if(o)(0,emit_1.lensEmit)("db","error",`${p}${i?" "+i:""} failed (${l}ms)`,{name:"postgres",kind:"db-query",op:p,...i?{table:i}:{},query:A,...w?{params:w}:{},startedAt:g,error:String(o?.message??o),durationMs:l},`db:error:${p}:${i??"query"}`,S);else{const $=rowsOf(y),P=resultPreview(y);(0,emit_1.lensEmit)("db","info",`${p} ${i??"query"} (${$} rows, ${l}ms)`,{name:"postgres",kind:"db-query",op:p,...i?{table:i}:{},query:A,...w?{params:w}:{},...P?{result:P}:{},startedAt:g,rows:$,durationMs:l},_,S)}},"done"),O=typeof d=="function"?d:typeof s=="function"?s:void 0;if(O){const o=n((y,l)=>{try{v(y,l)}catch{}O(y,l)},"wrappedCb");return typeof s=="function"?r.call(this,a,o):r.call(this,a,s,o)}const m=r.call(this,a,s);return m&&typeof m.then=="function"&&m.then(o=>v(void 0,o),o=>v(o,void 0)),m},"wrapped");return q.__lensmcp=!0,t.query=q,!0}f(pgTap,"pgTap"),c(pgTap,"pgTap"),n(pgTap,"pgTap");
1
+ "use strict";var x=Object.defineProperty;var c=(t,e)=>x(t,"name",{value:e,configurable:!0});var E=Object.defineProperty,n=c((t,e)=>E(t,"name",{value:e,configurable:!0}),"n");Object.defineProperty(exports,"__esModule",{value:!0}),exports.pgTap=pgTap;const emit_1=require("./emit"),flow_context_1=require("./flow-context"),SKIP_OPS=new Set(["BEGIN","COMMIT","ROLLBACK","SET","SHOW","DEALLOCATE","DISCARD"]);function parseSql(t){const e=(t.match(/^\s*(\w+)/)?.[1]??"query").toUpperCase(),r=t.match(/\b(?:from|into|update|join|table(?:\s+if\s+not\s+exists)?)\s+"?([\w$.]+)"?/i)?.[1]?.split(".").pop();return{op:e,...r?{table:r}:{}}}c(parseSql,"parseSql"),n(parseSql,"parseSql");const oneLine=n(t=>t.replace(/\s+/g," ").trim(),"oneLine"),clip=n((t,e)=>t.length>e?t.slice(0,e-1)+"\u2026":t,"clip");function paramPreview(t){if(!(!Array.isArray(t)||t.length===0))return t.slice(0,10).map(e=>{if(e==null)return String(e);const r=typeof e=="string"?e:(()=>{try{return JSON.stringify(e)}catch{return String(e)}})();return clip(r,80)})}c(paramPreview,"paramPreview"),n(paramPreview,"paramPreview");const rowsOf=n(t=>t?.rowCount??t?.rows?.length??0,"rowsOf");function resultPreview(t){const e=t?.rows;if(!(!Array.isArray(e)||e.length===0))try{return clip(JSON.stringify(e.slice(0,2)),240)}catch{return}}c(resultPreview,"resultPreview"),n(resultPreview,"resultPreview");function pgTap(t){const e=t?.Client?.prototype,r=e?.query;if(!e||typeof r!="function")return!1;if(r.__lensmcp)return!0;const C=n(function(a,i,y){const l=a,m=typeof l=="string"?l:l?.text;if(!m||l&&typeof l=="object"&&typeof l.submit=="function")return r.call(this,a,i,y);const{op:q,table:s}=parseSql(m);if(SKIP_OPS.has(q))return r.call(this,a,i,y);const p=q.toLowerCase(),_=`db:${p}:${s??"query"}`,b=Date.now(),S=(0,flow_context_1.flowContext)(),g=(0,flow_context_1.liveFlowContext)();g&&(g.dbCallCount=(g.dbCallCount??0)+1);const v=clip(oneLine(m),500),d=paramPreview(Array.isArray(i)?i:a?.values),h=n((o,f)=>{const u=Date.now()-b;if(o)(0,emit_1.lensEmit)("db","error",`${p}${s?" "+s:""} failed (${u}ms)`,{name:"postgres",kind:"db-query",op:p,...s?{table:s}:{},query:v,...d?{params:d}:{},startedAt:b,error:String(o?.message??o),durationMs:u},`db:error:${p}:${s??"query"}`,S);else{const $=rowsOf(f),O=resultPreview(f);(0,emit_1.lensEmit)("db","info",`${p} ${s??"query"} (${$} rows, ${u}ms)`,{name:"postgres",kind:"db-query",op:p,...s?{table:s}:{},query:v,...d?{params:d}:{},...O?{result:O}:{},startedAt:b,rows:$,durationMs:u},_,S)}},"done"),A=typeof y=="function"?y:typeof i=="function"?i:void 0;if(A){const o=n((f,u)=>{try{h(f,u)}catch{}A(f,u)},"wrappedCb");return typeof i=="function"?r.call(this,a,o):r.call(this,a,i,o)}const w=r.call(this,a,i);return w&&typeof w.then=="function"&&w.then(o=>h(void 0,o),o=>h(o,void 0)),w},"wrapped");return C.__lensmcp=!0,e.query=C,!0}c(pgTap,"pgTap"),n(pgTap,"pgTap");
package/lib/tap-redis.js CHANGED
@@ -1 +1 @@
1
- "use strict";var v=Object.defineProperty;var l=(t,e)=>v(t,"name",{value:e,configurable:!0});var b=Object.defineProperty,a=l((t,e)=>b(t,"name",{value:e,configurable:!0}),"a"),h=Object.defineProperty,c=a((t,e)=>h(t,"name",{value:e,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.redisTap=redisTap;const emit_1=require("./emit"),flow_context_1=require("./flow-context"),HOUSEKEEPING=new Set(["info","ping","hello","auth","select","client","cluster","command","subscribe","psubscribe","unsubscribe","punsubscribe","echo","quit","wait","script","config","debug","memory","readonly","readwrite"]),MAX_PER_SEC=30;let emitted=0,windowStart=0;function isBullTraffic(t){const e=String(t.name??"").toLowerCase();if(e==="eval"||e==="evalsha")return!0;const r=t.args??[];for(let n=0;n<Math.min(r.length,4);n++){const s=String(r[n]??"");if(s.startsWith("bull:")||s.startsWith("{bull"))return!0}return!1}l(isBullTraffic,"isBullTraffic"),a(isBullTraffic,"isBullTraffic"),c(isBullTraffic,"isBullTraffic");function redisTap(t){const e=t,r=(e?.default??e)?.prototype,n=r?.sendCommand;if(!r||typeof n!="function")return!1;if(n.__lensmcp)return!0;const s=c(function(i,u){const m=n.call(this,i,u);try{observe(i)}catch{}return m},"wrapped");return s.__lensmcp=!0,r.sendCommand=s,!0}l(redisTap,"redisTap"),a(redisTap,"redisTap"),c(redisTap,"redisTap");const clip=c((t,e)=>t.length>e?t.slice(0,e-1)+"\u2026":t,"clip");function commandLine(t,e){const r=e.slice(0,6).map((n,s)=>{const i=String(n??"");return s>0&&i.length>48?`\u2026(${(i.length/1024).toFixed(1)}kb)`:clip(i,64)});return[t.toUpperCase(),...r].join(" ")}l(commandLine,"commandLine"),a(commandLine,"commandLine"),c(commandLine,"commandLine");function observe(t){const e=String(t?.name??"").toLowerCase();if(!e||HOUSEKEEPING.has(e)||isBullTraffic(t))return;const r=(0,flow_context_1.liveFlowContext)();r&&(r.redisCallCount=(r.redisCallCount??0)+1);const n=Date.now();if(n-windowStart>1e3&&(windowStart=n,emitted=0),++emitted>MAX_PER_SEC)return;const s=t?.args??[],i=String(s[0]??""),u=(0,flow_context_1.flowContext)(),m=commandLine(e,s),p={name:"cache",kind:"redis-op",op:e,key:i,command:m,startedAt:n};if(e==="get"&&t.promise&&typeof t.promise.then=="function"){const f=n;t.promise.then(d=>{const o=d!=null;(0,emit_1.lensEmit)("redis","info",`cache ${o?"hit":"miss"} ${i}`,{...p,hit:o,durationMs:Date.now()-f,...o?{value:clip(String(d),120)}:{}},"redis:cache",u)},()=>{});return}if(e==="set"){const f=s.map(g=>String(g)),d=f.findIndex(g=>g.toUpperCase()==="EX"),o=d>=0?Number(f[d+1]):void 0;(0,emit_1.lensEmit)("redis","info",o?`cache set ${i} (ttl ${o}s)`:`cache set ${i}`,{...p,...o?{ttlSec:o}:{}},"redis:cache",u);return}(0,emit_1.lensEmit)("redis","info",`cache ${e} ${i}`,p,"redis:cache",u)}l(observe,"observe"),a(observe,"observe"),c(observe,"observe");
1
+ "use strict";var b=Object.defineProperty;var a=(t,e)=>b(t,"name",{value:e,configurable:!0});var h=Object.defineProperty,c=a((t,e)=>h(t,"name",{value:e,configurable:!0}),"c");Object.defineProperty(exports,"__esModule",{value:!0}),exports.redisTap=redisTap;const emit_1=require("./emit"),flow_context_1=require("./flow-context"),HOUSEKEEPING=new Set(["info","ping","hello","auth","select","client","cluster","command","subscribe","psubscribe","unsubscribe","punsubscribe","echo","quit","wait","script","config","debug","memory","readonly","readwrite"]),MAX_PER_SEC=30;let emitted=0,windowStart=0;function isBullTraffic(t){const e=String(t.name??"").toLowerCase();if(e==="eval"||e==="evalsha")return!0;const r=t.args??[];for(let n=0;n<Math.min(r.length,4);n++){const s=String(r[n]??"");if(s.startsWith("bull:")||s.startsWith("{bull"))return!0}return!1}a(isBullTraffic,"isBullTraffic"),c(isBullTraffic,"isBullTraffic");function redisTap(t){const e=t,r=(e?.default??e)?.prototype,n=r?.sendCommand;if(!r||typeof n!="function")return!1;if(n.__lensmcp)return!0;const s=c(function(i,l){const f=n.call(this,i,l);try{observe(i)}catch{}return f},"wrapped");return s.__lensmcp=!0,r.sendCommand=s,!0}a(redisTap,"redisTap"),c(redisTap,"redisTap");const clip=c((t,e)=>t.length>e?t.slice(0,e-1)+"\u2026":t,"clip");function commandLine(t,e){const r=e.slice(0,6).map((n,s)=>{const i=String(n??"");return s>0&&i.length>48?`\u2026(${(i.length/1024).toFixed(1)}kb)`:clip(i,64)});return[t.toUpperCase(),...r].join(" ")}a(commandLine,"commandLine"),c(commandLine,"commandLine");function observe(t){const e=String(t?.name??"").toLowerCase();if(!e||HOUSEKEEPING.has(e)||isBullTraffic(t))return;const r=(0,flow_context_1.liveFlowContext)();r&&(r.redisCallCount=(r.redisCallCount??0)+1);const n=Date.now();if(n-windowStart>1e3&&(windowStart=n,emitted=0),++emitted>MAX_PER_SEC)return;const s=t?.args??[],i=String(s[0]??""),l=(0,flow_context_1.flowContext)(),f=commandLine(e,s),m={name:"cache",kind:"redis-op",op:e,key:i,command:f,startedAt:n};if(e==="get"&&t.promise&&typeof t.promise.then=="function"){const d=n;t.promise.then(u=>{const o=u!=null;(0,emit_1.lensEmit)("redis","info",`cache ${o?"hit":"miss"} ${i}`,{...m,hit:o,durationMs:Date.now()-d,...o?{value:clip(String(u),120)}:{}},"redis:cache",l)},()=>{});return}if(e==="set"){const d=s.map(p=>String(p)),u=d.findIndex(p=>p.toUpperCase()==="EX"),o=u>=0?Number(d[u+1]):void 0;(0,emit_1.lensEmit)("redis","info",o?`cache set ${i} (ttl ${o}s)`:`cache set ${i}`,{...m,...o?{ttlSec:o}:{}},"redis:cache",l);return}(0,emit_1.lensEmit)("redis","info",`cache ${e} ${i}`,m,"redis:cache",l)}a(observe,"observe"),c(observe,"observe");
package/lib/tap-stdout.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var l=Object.defineProperty;var f=(t,e)=>l(t,"name",{value:e,configurable:!0});var a=Object.defineProperty,c=f((t,e)=>a(t,"name",{value:e,configurable:!0}),"c"),u=Object.defineProperty,o=c((t,e)=>u(t,"name",{value:e,configurable:!0}),"o");Object.defineProperty(exports,"__esModule",{value:!0}),exports.tapStdout=tapStdout;const emit_1=require("./emit"),ANSI=new RegExp("\x1B\\[[0-9;]*m","g");function severityOf(t,e){return/\bFATAL\b/.test(t)?"fatal":/\bERROR\b/.test(t)?"error":/\bWARN\b/.test(t)?"warning":/\bDEBUG\b/.test(t)||/\bVERBOSE\b/.test(t)?"debug":/\bLOG\b/.test(t)?"info":e}f(severityOf,"severityOf"),c(severityOf,"severityOf"),o(severityOf,"severityOf");const STACK_FRAME=/^\s+(at\s|\.\.\.\s\d+\smore)/;function emitChunk(t,e){const i=t.split(`
2
- `).map(s=>s.replace(ANSI,"").replace(/\s+$/,""));let n=0;for(;n<i.length;){const s=i[n];if(n+=1,!s.trim())continue;const r=[];for(;n<i.length&&STACK_FRAME.test(i[n]);)r.push(i[n]),n+=1;const p=r.length>0?"error":severityOf(s,e);(0,emit_1.lensLog)(p,s,r.length>0?{stack:[s,...r].join(`
3
- `)}:void 0)}}f(emitChunk,"emitChunk"),c(emitChunk,"emitChunk"),o(emitChunk,"emitChunk");function tapStdout(){if(process.env.LENSMCP_LOGS==="0"||process.env.APP_RUNNER!=="1")return;const t=[[process.stdout,"info"],[process.stderr,"error"]];for(const[e,i]of t){if(e.write.__lensmcp)continue;const n=e.write.bind(e),s=o(function(r,...p){try{if(!(0,emit_1.isLensWriting)()){const b=typeof r=="string"?r:Buffer.isBuffer(r)?r.toString("utf8"):"";b&&b.indexOf("[lensmcp]")===-1&&emitChunk(b,i)}}catch{}return n(r,...p)},"wrapped");s.__lensmcp=!0,e.write=s}}f(tapStdout,"tapStdout"),c(tapStdout,"tapStdout"),o(tapStdout,"tapStdout");
1
+ "use strict";var a=Object.defineProperty;var c=(e,t)=>a(e,"name",{value:t,configurable:!0});var u=Object.defineProperty,o=c((e,t)=>u(e,"name",{value:t,configurable:!0}),"o");Object.defineProperty(exports,"__esModule",{value:!0}),exports.tapStdout=tapStdout;const emit_1=require("./emit"),ANSI=new RegExp("\x1B\\[[0-9;]*m","g");function severityOf(e,t){return/\bFATAL\b/.test(e)?"fatal":/\bERROR\b/.test(e)?"error":/\bWARN\b/.test(e)?"warning":/\bDEBUG\b/.test(e)||/\bVERBOSE\b/.test(e)?"debug":/\bLOG\b/.test(e)?"info":t}c(severityOf,"severityOf"),o(severityOf,"severityOf");const STACK_FRAME=/^\s+(at\s|\.\.\.\s\d+\smore)/;function emitChunk(e,t){const i=e.split(`
2
+ `).map(r=>r.replace(ANSI,"").replace(/\s+$/,""));let s=0;for(;s<i.length;){const r=i[s];if(s+=1,!r.trim())continue;const n=[];for(;s<i.length&&STACK_FRAME.test(i[s]);)n.push(i[s]),s+=1;const f=n.length>0?"error":severityOf(r,t);(0,emit_1.lensLog)(f,r,n.length>0?{stack:[r,...n].join(`
3
+ `)}:void 0)}}c(emitChunk,"emitChunk"),o(emitChunk,"emitChunk");function tapStdout(){if(process.env.LENSMCP_LOGS==="0"||process.env.APP_RUNNER!=="1")return;const e=[[process.stdout,"info"],[process.stderr,"error"]];for(const[t,i]of e){if(t.write.__lensmcp)continue;const s=t.write.bind(t),r=o(function(n,...f){try{if(!(0,emit_1.isLensWriting)()){const p=typeof n=="string"?n:Buffer.isBuffer(n)?n.toString("utf8"):"";p&&p.indexOf("[lensmcp]")===-1&&emitChunk(p,i)}}catch{}return s(n,...f)},"wrapped");r.__lensmcp=!0,t.write=r}}c(tapStdout,"tapStdout"),o(tapStdout,"tapStdout");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lensmcp/node-instrumentation",
3
- "version": "1.23.10",
3
+ "version": "1.23.12",
4
4
  "main": "./index.js",
5
5
  "types": "./index.d.ts",
6
6
  "exports": {
@@ -15,9 +15,9 @@
15
15
  }
16
16
  },
17
17
  "dependencies": {
18
- "@lensmcp/core": "1.23.10",
19
- "@lensmcp/nest-instrumentation": "1.23.10",
20
- "@lensmcp/protocol-types": "1.23.10",
18
+ "@lensmcp/core": "1.23.12",
19
+ "@lensmcp/nest-instrumentation": "1.23.12",
20
+ "@lensmcp/protocol-types": "1.23.12",
21
21
  "tslib": "^2.3.0"
22
22
  },
23
23
  "optionalDependencies": {
package/register.js CHANGED
@@ -1 +1 @@
1
- "use strict";var o=Object.defineProperty;var a=(t,n)=>o(t,"name",{value:n,configurable:!0});var i=Object.defineProperty,r=a((t,n)=>i(t,"name",{value:n,configurable:!0}),"r"),s=Object.defineProperty,e=r((t,n)=>s(t,"name",{value:n,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installLensmcpNodeInstrumentation=void 0;const install_1=require("./lib/install");Object.defineProperty(exports,"installLensmcpNodeInstrumentation",{enumerable:!0,get:e(function(){return install_1.installLensmcpNodeInstrumentation},"get")}),(0,install_1.installLensmcpNodeInstrumentation)();
1
+ "use strict";var i=Object.defineProperty;var r=(t,n)=>i(t,"name",{value:n,configurable:!0});var s=Object.defineProperty,e=r((t,n)=>s(t,"name",{value:n,configurable:!0}),"e");Object.defineProperty(exports,"__esModule",{value:!0}),exports.installLensmcpNodeInstrumentation=void 0;const install_1=require("./lib/install");Object.defineProperty(exports,"installLensmcpNodeInstrumentation",{enumerable:!0,get:e(function(){return install_1.installLensmcpNodeInstrumentation},"get")}),(0,install_1.installLensmcpNodeInstrumentation)();