@lensmcp/nx-plugin 1.19.0 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";var f=Object.defineProperty;var r=(n,e)=>f(n,"name",{value:e,configurable:!0});var d=Object.defineProperty,i=r((n,e)=>d(n,"name",{value:e,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=agentBuildExecutor;const node_fs_1=require("node:fs"),node_path_1=require("node:path"),node_child_process_1=require("node:child_process"),node_fs_2=require("node:fs");async function agentBuildExecutor(n,e){const t={kind:n.kind??"vite-react",updateBaseline:n.updateBaseline??!0,projectRoot:n.projectRoot};if(t.kind!=="vite-react")return console.error(`[agent-build] Phase 2 only supports kind="vite-react" (got "${t.kind}").`),{success:!1};const o=e.projectName,s=t.projectRoot?(0,node_path_1.resolve)(e.root,t.projectRoot):o&&e.projectsConfigurations?(0,node_path_1.resolve)(e.root,e.projectsConfigurations.projects[o]?.root??"."):e.root,u=locateBin("vite",[s,e.root]);if(!u)return console.error("[agent-build] Could not find vite binary in node_modules/.bin."),{success:!1};const a=resolveFirstExisting(["vite.config.ts","vite.config.js","vite.config.mjs"],s)??(0,node_path_1.join)(s,"vite.config.ts");console.log(`[agent-build] vite build (project=${o??s})`);const l=((0,node_child_process_1.spawnSync)(u,["build","--config",a,s],{cwd:s,stdio:"inherit",env:{...process.env}}).status??1)===0;if(l&&t.updateBaseline){const c=(0,node_path_1.join)(e.root,".lensmcp","baseline",`${o??"app"}.bundle.json`);try{(0,node_fs_1.mkdirSync)((0,node_path_1.dirname)(c),{recursive:!0}),(0,node_fs_1.writeFileSync)(c,JSON.stringify({schemaVersion:1,project:o??null,buildOutDir:(0,node_path_1.join)(s,"dist"),timestamp:new Date().toISOString(),note:"Phase 2 baseline marker. Per-chunk JSON is materialised by the running lensmcp-mcp session (the self-contained bundle) once the supervisor wires the plugin bus."},null,2)+`
2
- `),console.log(`[agent-build] baseline written: ${c}`)}catch(p){console.warn(`[agent-build] could not write baseline: ${p.message}`)}}return{success:l}}r(agentBuildExecutor,"agentBuildExecutor"),i(agentBuildExecutor,"agentBuildExecutor");function locateBin(n,e){for(const t of e){const o=(0,node_path_1.join)(t,"node_modules",".bin",n);if((0,node_fs_2.existsSync)(o))return o}}r(locateBin,"locateBin"),i(locateBin,"locateBin");function resolveFirstExisting(n,e){for(const t of n){const o=(0,node_path_1.join)(e,t);if((0,node_fs_2.existsSync)(o))return o}}r(resolveFirstExisting,"resolveFirstExisting"),i(resolveFirstExisting,"resolveFirstExisting");
1
+ "use strict";var v=Object.defineProperty;var c=(o,e)=>v(o,"name",{value:e,configurable:!0});var f=Object.defineProperty,r=c((o,e)=>f(o,"name",{value:e,configurable:!0}),"r"),d=Object.defineProperty,i=r((o,e)=>d(o,"name",{value:e,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=agentBuildExecutor;const node_fs_1=require("node:fs"),node_path_1=require("node:path"),node_child_process_1=require("node:child_process"),node_fs_2=require("node:fs");async function agentBuildExecutor(o,e){const n={kind:o.kind??"vite-react",updateBaseline:o.updateBaseline??!0,projectRoot:o.projectRoot};if(n.kind!=="vite-react")return console.error(`[agent-build] Phase 2 only supports kind="vite-react" (got "${n.kind}").`),{success:!1};const t=e.projectName,s=n.projectRoot?(0,node_path_1.resolve)(e.root,n.projectRoot):t&&e.projectsConfigurations?(0,node_path_1.resolve)(e.root,e.projectsConfigurations.projects[t]?.root??"."):e.root,u=locateBin("vite",[s,e.root]);if(!u)return console.error("[agent-build] Could not find vite binary in node_modules/.bin."),{success:!1};const p=resolveFirstExisting(["vite.config.ts","vite.config.js","vite.config.mjs"],s)??(0,node_path_1.join)(s,"vite.config.ts");console.log(`[agent-build] vite build (project=${t??s})`);const a=((0,node_child_process_1.spawnSync)(u,["build","--config",p,s],{cwd:s,stdio:"inherit",env:{...process.env}}).status??1)===0;if(a&&n.updateBaseline){const l=(0,node_path_1.join)(e.root,".lensmcp","baseline",`${t??"app"}.bundle.json`);try{(0,node_fs_1.mkdirSync)((0,node_path_1.dirname)(l),{recursive:!0}),(0,node_fs_1.writeFileSync)(l,JSON.stringify({schemaVersion:1,project:t??null,buildOutDir:(0,node_path_1.join)(s,"dist"),timestamp:new Date().toISOString(),note:"Phase 2 baseline marker. Per-chunk JSON is materialised by the running lensmcp-mcp session (the self-contained bundle) once the supervisor wires the plugin bus."},null,2)+`
2
+ `),console.log(`[agent-build] baseline written: ${l}`)}catch(g){console.warn(`[agent-build] could not write baseline: ${g.message}`)}}return{success:a}}c(agentBuildExecutor,"agentBuildExecutor"),r(agentBuildExecutor,"agentBuildExecutor"),i(agentBuildExecutor,"agentBuildExecutor");function locateBin(o,e){for(const n of e){const t=(0,node_path_1.join)(n,"node_modules",".bin",o);if((0,node_fs_2.existsSync)(t))return t}}c(locateBin,"locateBin"),r(locateBin,"locateBin"),i(locateBin,"locateBin");function resolveFirstExisting(o,e){for(const n of o){const t=(0,node_path_1.join)(e,n);if((0,node_fs_2.existsSync)(t))return t}}c(resolveFirstExisting,"resolveFirstExisting"),r(resolveFirstExisting,"resolveFirstExisting"),i(resolveFirstExisting,"resolveFirstExisting");
@@ -1,4 +1,4 @@
1
- "use strict";var L=Object.defineProperty;var E=(t,o)=>L(t,"name",{value:o,configurable:!0});var T=Object.defineProperty,l=E((t,o)=>T(t,"name",{value:o,configurable:!0}),"l");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=agentDevExecutor;const node_child_process_1=require("node:child_process"),node_fs_1=require("node:fs"),node_path_1=require("node:path"),lens_frontend_1=require("../../lens-frontend");async function agentDevExecutor(t,o){const n={kind:t.kind??"vite-react",chrome:t.chrome??!0,headless:t.headless??!0,node:t.node??!0,devTarget:t.devTarget,projectRoot:t.projectRoot,port:t.port,openUrl:t.openUrl,devCommand:t.devCommand,wsPort:t.wsPort};if(n.kind!=="vite-react"&&n.kind!=="nestjs"&&n.kind!=="imported")return console.error(`[agent-dev] supported kinds are "vite-react", "nestjs", "imported" (got "${n.kind}").`),{success:!1};const P=o.projectName,d=n.projectRoot?(0,node_path_1.resolve)(o.root,n.projectRoot):P&&o.projectsConfigurations?(0,node_path_1.resolve)(o.root,o.projectsConfigurations.projects[P]?.root??"."):o.root;if(n.kind==="nestjs")return runNestjs(d,o);if(n.kind==="imported")return runImported(d,o,{devCommand:n.devCommand,chrome:n.chrome,headless:n.headless,openUrl:n.openUrl,wsPort:n.wsPort??5747,node:n.node});const a=(0,lens_frontend_1.findMcpBundle)(o.root);a||console.warn("[agent-dev] No lensmcp-mcp bundle found \u2014 skipping MCP server. Install the self-contained CLI: `npm i -D lensmcp` (it ships `bundled/main.js`).");const S=[],c=new Map;let s=!1;function p(e,r,v,g,C=!1,i){const w=(0,node_child_process_1.spawn)(r,v,{cwd:d,env:{...process.env,...g??{}},stdio:"inherit"});return S.push(w),w.on("exit",(f,h)=>{if(!s){if(C){const N=c.get(e)??0;if(i&&N<i.max){c.set(e,N+1),console.warn(`[agent-dev] ${e} exited (code=${f} sig=${h}); respawning in ${Math.round(i.delayMs/1e3)}s (${N+1}/${i.max}).`),setTimeout(()=>{s||p(e,r,v,g,C,i)},i.delayMs).unref?.();return}console.warn(`[agent-dev] ${e} exited (code=${f} sig=${h}); continuing.`);return}console.warn(`[agent-dev] ${e} exited unexpectedly (code=${f} sig=${h}); shutting down others.`),u()}}),w}E(p,"d"),l(p,"spawnChild");function u(){if(!s){s=!0;for(const e of S)try{e.kill("SIGTERM")}catch{}}}E(u,"a"),l(u,"shutdown"),process.on("SIGINT",u),process.on("SIGTERM",u);const m=process.env.LENSMCP_EVENT_FILE??(0,node_path_1.join)(o.root,".lensmcp","events.jsonl");try{(0,node_fs_1.mkdirSync)((0,node_path_1.dirname)(m),{recursive:!0});const e=(0,node_fs_1.statSync)(m,{throwIfNoEntry:!1});!e||Date.now()-e.mtimeMs>6e4?(0,node_fs_1.writeFileSync)(m,""):console.log("[agent-dev] event bridge is active (written <60s ago) \u2014 appending, not truncating.")}catch{}const M={LENSMCP_EVENT_FILE:m};console.log(`[agent-dev] event bridge \u2192 ${m}`);try{(0,lens_frontend_1.spawnLensFrontend)({projectRoot:d,workspaceRoot:o.root,...P?{project:P}:{},eventFile:m,...n.port!==void 0?{port:n.port}:{},chrome:n.chrome,headless:n.headless,...n.openUrl?{openUrl:n.openUrl}:{},log:l(e=>console.log(e),"log")},p)}catch(e){return console.error(e.message),u(),{success:!1}}return a&&(console.log(`[agent-dev] starting LensMCP MCP server (${a})`),p("lensmcp-mcp",process.execPath,[a],{...M,LENSMCP_TRANSPORT:process.env.LENSMCP_TRANSPORT??"http",LENSMCP_PORT:process.env.LENSMCP_PORT??"3000"})),new Promise(e=>{const r=l(()=>{s?Promise.allSettled(S.map(v=>new Promise(g=>{v.exitCode!==null?g():v.on("exit",()=>g())}))).then(()=>e({success:!0})):setTimeout(r,500)},"tick");r()})}E(agentDevExecutor,"agentDevExecutor"),l(agentDevExecutor,"agentDevExecutor");async function runNestjs(t,o){const n=o.projectName,P=(n?o.projectsConfigurations?.projects[n]?.targets?.build:void 0)?.options?.outputPath,d=[...typeof P=="string"?[(0,node_path_1.join)(o.root,P,"main.js")]:[],(0,node_path_1.join)(t,"dist","main.js"),(0,node_path_1.join)(o.root,"dist",(0,node_path_1.relative)(o.root,t),"main.js")],a=d.find(c=>(0,node_fs_1.existsSync)(c));if(!a)return console.error(`[agent-dev] No built NestJS entry found. Looked in:
2
- `+d.map(c=>` \u2022 ${c}`).join(`
1
+ "use strict";var I=Object.defineProperty;var f=(t,o)=>I(t,"name",{value:o,configurable:!0});var L=Object.defineProperty,E=f((t,o)=>L(t,"name",{value:o,configurable:!0}),"E"),T=Object.defineProperty,l=E((t,o)=>T(t,"name",{value:o,configurable:!0}),"l");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=agentDevExecutor;const node_child_process_1=require("node:child_process"),node_fs_1=require("node:fs"),node_path_1=require("node:path"),lens_frontend_1=require("../../lens-frontend");async function agentDevExecutor(t,o){const n={kind:t.kind??"vite-react",chrome:t.chrome??!0,headless:t.headless??!0,node:t.node??!0,devTarget:t.devTarget,projectRoot:t.projectRoot,port:t.port,openUrl:t.openUrl,devCommand:t.devCommand,wsPort:t.wsPort};if(n.kind!=="vite-react"&&n.kind!=="nestjs"&&n.kind!=="imported")return console.error(`[agent-dev] supported kinds are "vite-react", "nestjs", "imported" (got "${n.kind}").`),{success:!1};const P=o.projectName,a=n.projectRoot?(0,node_path_1.resolve)(o.root,n.projectRoot):P&&o.projectsConfigurations?(0,node_path_1.resolve)(o.root,o.projectsConfigurations.projects[P]?.root??"."):o.root;if(n.kind==="nestjs")return runNestjs(a,o);if(n.kind==="imported")return runImported(a,o,{devCommand:n.devCommand,chrome:n.chrome,headless:n.headless,openUrl:n.openUrl,wsPort:n.wsPort??5747,node:n.node});const p=(0,lens_frontend_1.findMcpBundle)(o.root);p||console.warn("[agent-dev] No lensmcp-mcp bundle found \u2014 skipping MCP server. Install the self-contained CLI: `npm i -D lensmcp` (it ships `bundled/main.js`).");const S=[],c=new Map;let s=!1;function i(e,r,g,v,M=!1,d){const _=(0,node_child_process_1.spawn)(r,g,{cwd:a,env:{...process.env,...v??{}},stdio:"inherit"});return S.push(_),_.on("exit",(N,h)=>{if(!s){if(M){const w=c.get(e)??0;if(d&&w<d.max){c.set(e,w+1),console.warn(`[agent-dev] ${e} exited (code=${N} sig=${h}); respawning in ${Math.round(d.delayMs/1e3)}s (${w+1}/${d.max}).`),setTimeout(()=>{s||i(e,r,g,v,M,d)},d.delayMs).unref?.();return}console.warn(`[agent-dev] ${e} exited (code=${N} sig=${h}); continuing.`);return}console.warn(`[agent-dev] ${e} exited unexpectedly (code=${N} sig=${h}); shutting down others.`),u()}}),_}f(i,"p"),E(i,"d"),l(i,"spawnChild");function u(){if(!s){s=!0;for(const e of S)try{e.kill("SIGTERM")}catch{}}}f(u,"u"),E(u,"a"),l(u,"shutdown"),process.on("SIGINT",u),process.on("SIGTERM",u);const m=process.env.LENSMCP_EVENT_FILE??(0,node_path_1.join)(o.root,".lensmcp","events.jsonl");try{(0,node_fs_1.mkdirSync)((0,node_path_1.dirname)(m),{recursive:!0});const e=(0,node_fs_1.statSync)(m,{throwIfNoEntry:!1});!e||Date.now()-e.mtimeMs>6e4?(0,node_fs_1.writeFileSync)(m,""):console.log("[agent-dev] event bridge is active (written <60s ago) \u2014 appending, not truncating.")}catch{}const C={LENSMCP_EVENT_FILE:m};console.log(`[agent-dev] event bridge \u2192 ${m}`);try{(0,lens_frontend_1.spawnLensFrontend)({projectRoot:a,workspaceRoot:o.root,...P?{project:P}:{},eventFile:m,...n.port!==void 0?{port:n.port}:{},chrome:n.chrome,headless:n.headless,...n.openUrl?{openUrl:n.openUrl}:{},log:l(e=>console.log(e),"log")},i)}catch(e){return console.error(e.message),u(),{success:!1}}return p&&(console.log(`[agent-dev] starting LensMCP MCP server (${p})`),i("lensmcp-mcp",process.execPath,[p],{...C,LENSMCP_TRANSPORT:process.env.LENSMCP_TRANSPORT??"http",LENSMCP_PORT:process.env.LENSMCP_PORT??"3000"})),new Promise(e=>{const r=l(()=>{s?Promise.allSettled(S.map(g=>new Promise(v=>{g.exitCode!==null?v():g.on("exit",()=>v())}))).then(()=>e({success:!0})):setTimeout(r,500)},"tick");r()})}f(agentDevExecutor,"agentDevExecutor"),E(agentDevExecutor,"agentDevExecutor"),l(agentDevExecutor,"agentDevExecutor");async function runNestjs(t,o){const n=o.projectName,P=(n?o.projectsConfigurations?.projects[n]?.targets?.build:void 0)?.options?.outputPath,a=[...typeof P=="string"?[(0,node_path_1.join)(o.root,P,"main.js")]:[],(0,node_path_1.join)(t,"dist","main.js"),(0,node_path_1.join)(o.root,"dist",(0,node_path_1.relative)(o.root,t),"main.js")],p=a.find(c=>(0,node_fs_1.existsSync)(c));if(!p)return console.error(`[agent-dev] No built NestJS entry found. Looked in:
2
+ `+a.map(c=>` \u2022 ${c}`).join(`
3
3
  `)+`
4
- Build first: \`nx build ${n??"<project>"}\`.`),{success:!1};console.log(`[agent-dev] node ${a}`);const S=(0,node_child_process_1.spawn)(process.execPath,[a],{cwd:t,stdio:"inherit",env:{...process.env,LENSMCP_TRANSPORT:process.env.LENSMCP_TRANSPORT??"http",LENSMCP_EVENT_FILE:process.env.LENSMCP_EVENT_FILE??(0,node_path_1.join)(o.root,".lensmcp","events.jsonl")}});return new Promise(c=>{const s=l(()=>{try{S.kill("SIGTERM")}catch{}},"onSignal");process.on("SIGINT",s),process.on("SIGTERM",s),S.on("exit",p=>{process.off("SIGINT",s),process.off("SIGTERM",s),c({success:p===0})})})}E(runNestjs,"runNestjs"),l(runNestjs,"runNestjs");async function runImported(t,o,n){if(!n.devCommand)return console.error('[agent-dev] kind="imported" needs a `devCommand` (your dev-server command, e.g. "npm run dev").\n Add it to the agent-dev target options, or pass `--devCommand "npm run dev"`.'),{success:!1};const P=(0,lens_frontend_1.findBridgeBundle)(o.root);if(!P)return console.error("[agent-dev] No lensmcp bridge bundle found. Install the self-contained CLI: `npm i -D lensmcp` (it ships `bundled/bridge.js`)."),{success:!1};const d=(0,lens_frontend_1.findMcpBundle)(o.root);d||console.warn("[agent-dev] No lensmcp-mcp bundle found \u2014 skipping MCP server. Install the self-contained CLI: `npm i -D lensmcp`.");const a=[],S=new Map;let c=!1;function s(e,r,v,g,C=!1,i,w=!1){const f=(0,node_child_process_1.spawn)(r,v,{cwd:t,env:{...process.env,...g??{}},stdio:"inherit",shell:w});return a.push(f),f.on("exit",(h,N)=>{if(!c){if(C){const _=S.get(e)??0;if(i&&_<i.max){S.set(e,_+1),console.warn(`[agent-dev] ${e} exited (code=${h} sig=${N}); respawning in ${Math.round(i.delayMs/1e3)}s (${_+1}/${i.max}).`),setTimeout(()=>{c||s(e,r,v,g,C,i,w)},i.delayMs).unref?.();return}console.warn(`[agent-dev] ${e} exited (code=${h} sig=${N}); continuing.`);return}console.warn(`[agent-dev] ${e} exited unexpectedly (code=${h} sig=${N}); shutting down others.`),p()}}),f}E(s,"r"),l(s,"spawnChild");function p(){if(!c){c=!0;for(const e of a)try{e.kill("SIGTERM")}catch{}}}E(p,"d"),l(p,"shutdown"),process.on("SIGINT",p),process.on("SIGTERM",p);const u=process.env.LENSMCP_EVENT_FILE??(0,node_path_1.join)(o.root,".lensmcp","events.jsonl");try{(0,node_fs_1.mkdirSync)((0,node_path_1.dirname)(u),{recursive:!0});const e=(0,node_fs_1.statSync)(u,{throwIfNoEntry:!1});!e||Date.now()-e.mtimeMs>6e4?(0,node_fs_1.writeFileSync)(u,""):console.log("[agent-dev] event bridge is active (written <60s ago) \u2014 appending, not truncating.")}catch{}const m={LENSMCP_EVENT_FILE:u};console.log(`[agent-dev] event bridge \u2192 ${u}`),console.log(`[agent-dev] starting bridge \u2192 ws://127.0.0.1:${n.wsPort}`),s("bridge",process.execPath,[P],{...m,LENSMCP_WS_HOST:process.env.LENSMCP_WS_HOST??"127.0.0.1",LENSMCP_WS_PORT:String(n.wsPort)}),d&&(console.log(`[agent-dev] starting LensMCP MCP server (${d})`),s("lensmcp-mcp",process.execPath,[d],{...m,LENSMCP_TRANSPORT:process.env.LENSMCP_TRANSPORT??"http",LENSMCP_PORT:process.env.LENSMCP_PORT??"3000"}));const M={...m,LENSMCP_WS_PORT:String(n.wsPort)};if(n.node)if([t,o.root].some(e=>(0,node_fs_1.existsSync)((0,node_path_1.join)(e,"node_modules","@lensmcp","node-instrumentation")))){const e="--import @lensmcp/node-instrumentation/register";M.NODE_OPTIONS=process.env.NODE_OPTIONS?`${process.env.NODE_OPTIONS} ${e}`:e,console.log("[agent-dev] backend taps: NODE_OPTIONS += --import @lensmcp/node-instrumentation/register")}else console.warn("[agent-dev] @lensmcp/node-instrumentation not installed \u2014 skipping backend taps. Add it: `npm i -D @lensmcp/node-instrumentation`.");if(console.log(`[agent-dev] front-end seam: add \`import '@lensmcp/client-runtime/auto'\` to your app entry (connects to ws://127.0.0.1:${n.wsPort}).`),console.log(`[agent-dev] starting dev command: ${n.devCommand}`),s("dev",n.devCommand,[],M,!1,void 0,!0),n.chrome){const e=(0,lens_frontend_1.findCaptureRunner)(o.root),r=n.openUrl;e?r?(console.log(`[agent-dev] starting browser capture \u2192 ${r}`),s("browser-capture",process.execPath,[e],{...m,LENSMCP_DEV_URL:r,LENSMCP_TOKENS_FILE:(0,node_path_1.join)(o.root,"lensmcp.tokens.json"),LENSMCP_RULES_FILE:(0,node_path_1.join)(o.root,"lensmcp.rules.json"),LENSMCP_HEADLESS:n.headless===!1?"false":"true"},!0,{delayMs:1e4,max:5})):console.warn("[agent-dev] no `openUrl` provided \u2014 skipping Chrome capture (set openUrl to your dev URL)."):console.warn("[agent-dev] browser-capture runner not found \u2014 skipping live capture. Install the self-contained CLI: `npm i -D lensmcp`.")}return new Promise(e=>{const r=l(()=>{c?Promise.allSettled(a.map(v=>new Promise(g=>{v.exitCode!==null?g():v.on("exit",()=>g())}))).then(()=>e({success:!0})):setTimeout(r,500)},"tick");r()})}E(runImported,"runImported"),l(runImported,"runImported");
4
+ Build first: \`nx build ${n??"<project>"}\`.`),{success:!1};console.log(`[agent-dev] node ${p}`);const S=(0,node_child_process_1.spawn)(process.execPath,[p],{cwd:t,stdio:"inherit",env:{...process.env,LENSMCP_TRANSPORT:process.env.LENSMCP_TRANSPORT??"http",LENSMCP_EVENT_FILE:process.env.LENSMCP_EVENT_FILE??(0,node_path_1.join)(o.root,".lensmcp","events.jsonl")}});return new Promise(c=>{const s=l(()=>{try{S.kill("SIGTERM")}catch{}},"onSignal");process.on("SIGINT",s),process.on("SIGTERM",s),S.on("exit",i=>{process.off("SIGINT",s),process.off("SIGTERM",s),c({success:i===0})})})}f(runNestjs,"runNestjs"),E(runNestjs,"runNestjs"),l(runNestjs,"runNestjs");async function runImported(t,o,n){if(!n.devCommand)return console.error('[agent-dev] kind="imported" needs a `devCommand` (your dev-server command, e.g. "npm run dev").\n Add it to the agent-dev target options, or pass `--devCommand "npm run dev"`.'),{success:!1};const P=(0,lens_frontend_1.findBridgeBundle)(o.root);if(!P)return console.error("[agent-dev] No lensmcp bridge bundle found. Install the self-contained CLI: `npm i -D lensmcp` (it ships `bundled/bridge.js`)."),{success:!1};const a=(0,lens_frontend_1.findMcpBundle)(o.root);a||console.warn("[agent-dev] No lensmcp-mcp bundle found \u2014 skipping MCP server. Install the self-contained CLI: `npm i -D lensmcp`.");const p=[],S=new Map;let c=!1;function s(e,r,g,v,M=!1,d,_=!1){const N=(0,node_child_process_1.spawn)(r,g,{cwd:t,env:{...process.env,...v??{}},stdio:"inherit",shell:_});return p.push(N),N.on("exit",(h,w)=>{if(!c){if(M){const j=S.get(e)??0;if(d&&j<d.max){S.set(e,j+1),console.warn(`[agent-dev] ${e} exited (code=${h} sig=${w}); respawning in ${Math.round(d.delayMs/1e3)}s (${j+1}/${d.max}).`),setTimeout(()=>{c||s(e,r,g,v,M,d,_)},d.delayMs).unref?.();return}console.warn(`[agent-dev] ${e} exited (code=${h} sig=${w}); continuing.`);return}console.warn(`[agent-dev] ${e} exited unexpectedly (code=${h} sig=${w}); shutting down others.`),i()}}),N}f(s,"s"),E(s,"r"),l(s,"spawnChild");function i(){if(!c){c=!0;for(const e of p)try{e.kill("SIGTERM")}catch{}}}f(i,"p"),E(i,"d"),l(i,"shutdown"),process.on("SIGINT",i),process.on("SIGTERM",i);const u=process.env.LENSMCP_EVENT_FILE??(0,node_path_1.join)(o.root,".lensmcp","events.jsonl");try{(0,node_fs_1.mkdirSync)((0,node_path_1.dirname)(u),{recursive:!0});const e=(0,node_fs_1.statSync)(u,{throwIfNoEntry:!1});!e||Date.now()-e.mtimeMs>6e4?(0,node_fs_1.writeFileSync)(u,""):console.log("[agent-dev] event bridge is active (written <60s ago) \u2014 appending, not truncating.")}catch{}const m={LENSMCP_EVENT_FILE:u};console.log(`[agent-dev] event bridge \u2192 ${u}`),console.log(`[agent-dev] starting bridge \u2192 ws://127.0.0.1:${n.wsPort}`),s("bridge",process.execPath,[P],{...m,LENSMCP_WS_HOST:process.env.LENSMCP_WS_HOST??"127.0.0.1",LENSMCP_WS_PORT:String(n.wsPort)}),a&&(console.log(`[agent-dev] starting LensMCP MCP server (${a})`),s("lensmcp-mcp",process.execPath,[a],{...m,LENSMCP_TRANSPORT:process.env.LENSMCP_TRANSPORT??"http",LENSMCP_PORT:process.env.LENSMCP_PORT??"3000"}));const C={...m,LENSMCP_WS_PORT:String(n.wsPort)};if(n.node)if([t,o.root].some(e=>(0,node_fs_1.existsSync)((0,node_path_1.join)(e,"node_modules","@lensmcp","node-instrumentation")))){const e="--import @lensmcp/node-instrumentation/register";C.NODE_OPTIONS=process.env.NODE_OPTIONS?`${process.env.NODE_OPTIONS} ${e}`:e,console.log("[agent-dev] backend taps: NODE_OPTIONS += --import @lensmcp/node-instrumentation/register")}else console.warn("[agent-dev] @lensmcp/node-instrumentation not installed \u2014 skipping backend taps. Add it: `npm i -D @lensmcp/node-instrumentation`.");if(console.log(`[agent-dev] front-end seam: add \`import '@lensmcp/client-runtime/auto'\` to your app entry (connects to ws://127.0.0.1:${n.wsPort}).`),console.log(`[agent-dev] starting dev command: ${n.devCommand}`),s("dev",n.devCommand,[],C,!1,void 0,!0),n.chrome){const e=(0,lens_frontend_1.findCaptureRunner)(o.root),r=n.openUrl;e?r?(console.log(`[agent-dev] starting browser capture \u2192 ${r}`),s("browser-capture",process.execPath,[e],{...m,LENSMCP_DEV_URL:r,LENSMCP_TOKENS_FILE:(0,node_path_1.join)(o.root,"lensmcp.tokens.json"),LENSMCP_RULES_FILE:(0,node_path_1.join)(o.root,"lensmcp.rules.json"),LENSMCP_HEADLESS:n.headless===!1?"false":"true"},!0,{delayMs:1e4,max:5})):console.warn("[agent-dev] no `openUrl` provided \u2014 skipping Chrome capture (set openUrl to your dev URL)."):console.warn("[agent-dev] browser-capture runner not found \u2014 skipping live capture. Install the self-contained CLI: `npm i -D lensmcp`.")}return new Promise(e=>{const r=l(()=>{c?Promise.allSettled(p.map(g=>new Promise(v=>{g.exitCode!==null?v():g.on("exit",()=>v())}))).then(()=>e({success:!0})):setTimeout(r,500)},"tick");r()})}f(runImported,"runImported"),E(runImported,"runImported"),l(runImported,"runImported");
@@ -1,3 +1,3 @@
1
- "use strict";var k=Object.defineProperty;var d=(s,e)=>k(s,"name",{value:e,configurable:!0});var g=Object.defineProperty,l=d((s,e)=>g(s,"name",{value:e,configurable:!0}),"l");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=agentVerifyExecutor;const node_child_process_1=require("node:child_process"),node_fs_1=require("node:fs"),node_path_1=require("node:path");async function agentVerifyExecutor(s,e){const i={kind:s.kind??"vite-react",skipTypecheck:s.skipTypecheck??!1,skipLint:s.skipLint??!1,skipBuild:s.skipBuild??!1,projectRoot:s.projectRoot},n=e.projectName??null,o=i.projectRoot?(0,node_path_1.resolve)(e.root,i.projectRoot):n&&e.projectsConfigurations?(0,node_path_1.resolve)(e.root,e.projectsConfigurations.projects[n]?.root??"."):e.root,c=Date.now(),r=[];if(i.skipTypecheck)r.push({name:"typecheck",result:"skipped",durationMs:0});else{const t=locateBin("tsc",[o,e.root]),a=resolveFirstExisting(["tsconfig.json"],o);if(!t||!a)r.push({name:"typecheck",result:"skipped",durationMs:0,summary:"no tsc/tsconfig"});else{const u=Date.now(),p=runStageCommand("tsc --noEmit",t,["--noEmit","-p",a],o);r.push({name:"typecheck",result:p.status===0?"passed":"failed",durationMs:Date.now()-u,exitCode:p.status??-1})}}if(i.skipLint)r.push({name:"lint",result:"skipped",durationMs:0});else{const t=locateBin("eslint",[o,e.root]);if(!t)r.push({name:"lint",result:"skipped",durationMs:0,summary:"no eslint"});else{const a=Date.now(),u=runStageCommand("eslint .",t,["."],o);r.push({name:"lint",result:u.status===0?"passed":"failed",durationMs:Date.now()-a,exitCode:u.status??-1})}}if(i.skipBuild)r.push({name:"build",result:"skipped",durationMs:0});else{const t=locateBin("vite",[o,e.root]);if(!t)r.push({name:"build",result:"skipped",durationMs:0,summary:"no vite"});else{const a=resolveFirstExisting(["vite.config.ts","vite.config.js","vite.config.mjs"],o)??(0,node_path_1.join)(o,"vite.config.ts"),u=Date.now(),p=runStageCommand("vite build",t,["build","--config",a,o],o);r.push({name:"build",result:p.status===0?"passed":"failed",durationMs:Date.now()-u,exitCode:p.status??-1})}}const m=r.some(t=>t.result==="failed")?"failed":"passed",f={schemaVersion:1,project:n,timestamp:new Date(c).toISOString(),durationMs:Date.now()-c,status:m,stages:r},y=(0,node_path_1.join)(e.root,".lensmcp","verifications");try{(0,node_fs_1.mkdirSync)(y,{recursive:!0});const t=c,a=`${(n??"app").replace(/[^a-zA-Z0-9_-]+/g,"-")}-${t}.json`;(0,node_fs_1.writeFileSync)((0,node_path_1.join)(y,a),JSON.stringify(f,null,2)+`
2
- `),(0,node_fs_1.writeFileSync)((0,node_path_1.join)(y,"latest.json"),JSON.stringify(f,null,2)+`
3
- `)}catch(t){console.warn(`[agent-verify] could not write report: ${t.message}`)}for(const t of f.stages)console.log(`[agent-verify] ${t.name}: ${t.result}${t.exitCode!==void 0?` (exit ${t.exitCode})`:""}`);return console.log(`[agent-verify] ${m} in ${f.durationMs}ms`),{success:m==="passed"}}d(agentVerifyExecutor,"agentVerifyExecutor"),l(agentVerifyExecutor,"agentVerifyExecutor");function runStageCommand(s,e,i,n){console.log(`[agent-verify] ${s}`);const o=(0,node_child_process_1.spawnSync)(e,i,{cwd:n,encoding:"utf8"}),c=`${o.stdout??""}${o.stderr??""}`;return c.trim()&&process.stdout.write(c.replace(/^(?=.)/gm," ")),o}d(runStageCommand,"runStageCommand"),l(runStageCommand,"runStageCommand");function locateBin(s,e){for(const i of e){const n=(0,node_path_1.join)(i,"node_modules",".bin",s);if((0,node_fs_1.existsSync)(n))return n}}d(locateBin,"locateBin"),l(locateBin,"locateBin");function resolveFirstExisting(s,e){for(const i of s){const n=(0,node_path_1.join)(e,i);if((0,node_fs_1.existsSync)(n))return n}}d(resolveFirstExisting,"resolveFirstExisting"),l(resolveFirstExisting,"resolveFirstExisting"),node_path_1.dirname;
1
+ "use strict";var j=Object.defineProperty;var p=(s,e)=>j(s,"name",{value:e,configurable:!0});var k=Object.defineProperty,d=p((s,e)=>k(s,"name",{value:e,configurable:!0}),"d"),g=Object.defineProperty,l=d((s,e)=>g(s,"name",{value:e,configurable:!0}),"l");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=agentVerifyExecutor;const node_child_process_1=require("node:child_process"),node_fs_1=require("node:fs"),node_path_1=require("node:path");async function agentVerifyExecutor(s,e){const i={kind:s.kind??"vite-react",skipTypecheck:s.skipTypecheck??!1,skipLint:s.skipLint??!1,skipBuild:s.skipBuild??!1,projectRoot:s.projectRoot},n=e.projectName??null,o=i.projectRoot?(0,node_path_1.resolve)(e.root,i.projectRoot):n&&e.projectsConfigurations?(0,node_path_1.resolve)(e.root,e.projectsConfigurations.projects[n]?.root??"."):e.root,c=Date.now(),r=[];if(i.skipTypecheck)r.push({name:"typecheck",result:"skipped",durationMs:0});else{const t=locateBin("tsc",[o,e.root]),a=resolveFirstExisting(["tsconfig.json"],o);if(!t||!a)r.push({name:"typecheck",result:"skipped",durationMs:0,summary:"no tsc/tsconfig"});else{const u=Date.now(),f=runStageCommand("tsc --noEmit",t,["--noEmit","-p",a],o);r.push({name:"typecheck",result:f.status===0?"passed":"failed",durationMs:Date.now()-u,exitCode:f.status??-1})}}if(i.skipLint)r.push({name:"lint",result:"skipped",durationMs:0});else{const t=locateBin("eslint",[o,e.root]);if(!t)r.push({name:"lint",result:"skipped",durationMs:0,summary:"no eslint"});else{const a=Date.now(),u=runStageCommand("eslint .",t,["."],o);r.push({name:"lint",result:u.status===0?"passed":"failed",durationMs:Date.now()-a,exitCode:u.status??-1})}}if(i.skipBuild)r.push({name:"build",result:"skipped",durationMs:0});else{const t=locateBin("vite",[o,e.root]);if(!t)r.push({name:"build",result:"skipped",durationMs:0,summary:"no vite"});else{const a=resolveFirstExisting(["vite.config.ts","vite.config.js","vite.config.mjs"],o)??(0,node_path_1.join)(o,"vite.config.ts"),u=Date.now(),f=runStageCommand("vite build",t,["build","--config",a,o],o);r.push({name:"build",result:f.status===0?"passed":"failed",durationMs:Date.now()-u,exitCode:f.status??-1})}}const y=r.some(t=>t.result==="failed")?"failed":"passed",m={schemaVersion:1,project:n,timestamp:new Date(c).toISOString(),durationMs:Date.now()-c,status:y,stages:r},v=(0,node_path_1.join)(e.root,".lensmcp","verifications");try{(0,node_fs_1.mkdirSync)(v,{recursive:!0});const t=c,a=`${(n??"app").replace(/[^a-zA-Z0-9_-]+/g,"-")}-${t}.json`;(0,node_fs_1.writeFileSync)((0,node_path_1.join)(v,a),JSON.stringify(m,null,2)+`
2
+ `),(0,node_fs_1.writeFileSync)((0,node_path_1.join)(v,"latest.json"),JSON.stringify(m,null,2)+`
3
+ `)}catch(t){console.warn(`[agent-verify] could not write report: ${t.message}`)}for(const t of m.stages)console.log(`[agent-verify] ${t.name}: ${t.result}${t.exitCode!==void 0?` (exit ${t.exitCode})`:""}`);return console.log(`[agent-verify] ${y} in ${m.durationMs}ms`),{success:y==="passed"}}p(agentVerifyExecutor,"agentVerifyExecutor"),d(agentVerifyExecutor,"agentVerifyExecutor"),l(agentVerifyExecutor,"agentVerifyExecutor");function runStageCommand(s,e,i,n){console.log(`[agent-verify] ${s}`);const o=(0,node_child_process_1.spawnSync)(e,i,{cwd:n,encoding:"utf8"}),c=`${o.stdout??""}${o.stderr??""}`;return c.trim()&&process.stdout.write(c.replace(/^(?=.)/gm," ")),o}p(runStageCommand,"runStageCommand"),d(runStageCommand,"runStageCommand"),l(runStageCommand,"runStageCommand");function locateBin(s,e){for(const i of e){const n=(0,node_path_1.join)(i,"node_modules",".bin",s);if((0,node_fs_1.existsSync)(n))return n}}p(locateBin,"locateBin"),d(locateBin,"locateBin"),l(locateBin,"locateBin");function resolveFirstExisting(s,e){for(const i of s){const n=(0,node_path_1.join)(e,i);if((0,node_fs_1.existsSync)(n))return n}}p(resolveFirstExisting,"resolveFirstExisting"),d(resolveFirstExisting,"resolveFirstExisting"),l(resolveFirstExisting,"resolveFirstExisting"),node_path_1.dirname;
@@ -1,9 +1,9 @@
1
- "use strict";var f=Object.defineProperty;var p=(n,t)=>f(n,"name",{value:t,configurable:!0});var m=Object.defineProperty,a=p((n,t)=>m(n,"name",{value:t,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0}),exports.initGenerator=initGenerator;const devkit_1=require("@nx/devkit"),DEFAULT_LENSMCP_CONFIG={schemaVersion:1,storage:"memory",transport:"stdio",retention:{sessions:5,events:5e3,screenshots:50,buildReports:20,visualFrames:200,heapSnapshots:3,tracesWithErrors:20,verifications:10},redaction:{headers:["authorization","cookie","set-cookie","x-api-key"],paths:["password","token","secret","apiKey","api_key"]},channels:{blockingStatusChanged:{enabled:!0,minSeverity:"error"},memoryLeakSuspected:{enabled:!0,minSeverity:"warning"},bundleRegression:{enabled:!0,minSeverity:"warning"},visualViolationBlocking:{enabled:!0,minSeverity:"error"},verificationCompleted:{enabled:!0,minSeverity:"info"}},thresholds:{dbInLoop:5,nPlusOne:3,renderStorm:5,slowRouteMs:500,slowRenderMs:16}},LENSMCP_GITIGNORE_MARKER="# LensMCP runtime artifacts (per-session storage)",LENSMCP_GITIGNORE_ENTRY=".lensmcp/";async function initGenerator(n,t={}){const s={skipFormat:t.skipFormat??!1,registerHostConfig:t.registerHostConfig??"auto"},e=[];if(n.exists("nx.json"))(0,devkit_1.updateJson)(n,"nx.json",r=>{r.plugins=Array.isArray(r.plugins)?r.plugins:[],r.plugins.some(o=>typeof o=="string"?o==="@lensmcp/nx-plugin":o&&typeof o=="object"&&"plugin"in o?o.plugin==="@lensmcp/nx-plugin":!1)||(r.plugins.push("@lensmcp/nx-plugin"),e.push("nx.json: registered @lensmcp/nx-plugin"));const d=r.lensmcp??{};return r.lensmcp=mergeDeep(DEFAULT_LENSMCP_CONFIG,d),(!("lensmcp"in r)||Object.keys(d).length===0)&&e.push("nx.json: added workspace-wide `lensmcp` config block"),r});else throw new Error("No nx.json found at the workspace root. Are you in a Nx workspace?");const i=".gitignore",c=n.exists(i)?n.read(i,"utf-8")??"":"";if(!c.split(`
2
- `).some(r=>r.trim()===LENSMCP_GITIGNORE_ENTRY)){const r=c.endsWith(`
1
+ "use strict";var h=Object.defineProperty;var c=(s,n)=>h(s,"name",{value:n,configurable:!0});var f=Object.defineProperty,p=c((s,n)=>f(s,"name",{value:n,configurable:!0}),"p"),m=Object.defineProperty,a=p((s,n)=>m(s,"name",{value:n,configurable:!0}),"a");Object.defineProperty(exports,"__esModule",{value:!0}),exports.initGenerator=initGenerator;const devkit_1=require("@nx/devkit"),DEFAULT_LENSMCP_CONFIG={schemaVersion:1,storage:"memory",transport:"stdio",retention:{sessions:5,events:5e3,screenshots:50,buildReports:20,visualFrames:200,heapSnapshots:3,tracesWithErrors:20,verifications:10},redaction:{headers:["authorization","cookie","set-cookie","x-api-key"],paths:["password","token","secret","apiKey","api_key"]},channels:{blockingStatusChanged:{enabled:!0,minSeverity:"error"},memoryLeakSuspected:{enabled:!0,minSeverity:"warning"},bundleRegression:{enabled:!0,minSeverity:"warning"},visualViolationBlocking:{enabled:!0,minSeverity:"error"},verificationCompleted:{enabled:!0,minSeverity:"info"}},thresholds:{dbInLoop:5,nPlusOne:3,renderStorm:5,slowRouteMs:500,slowRenderMs:16}},LENSMCP_GITIGNORE_MARKER="# LensMCP runtime artifacts (per-session storage)",LENSMCP_GITIGNORE_ENTRY=".lensmcp/";async function initGenerator(s,n={}){const r={skipFormat:n.skipFormat??!1,registerHostConfig:n.registerHostConfig??"auto"},e=[];if(s.exists("nx.json"))(0,devkit_1.updateJson)(s,"nx.json",t=>{t.plugins=Array.isArray(t.plugins)?t.plugins:[],t.plugins.some(o=>typeof o=="string"?o==="@lensmcp/nx-plugin":o&&typeof o=="object"&&"plugin"in o?o.plugin==="@lensmcp/nx-plugin":!1)||(t.plugins.push("@lensmcp/nx-plugin"),e.push("nx.json: registered @lensmcp/nx-plugin"));const y=t.lensmcp??{};return t.lensmcp=mergeDeep(DEFAULT_LENSMCP_CONFIG,y),(!("lensmcp"in t)||Object.keys(y).length===0)&&e.push("nx.json: added workspace-wide `lensmcp` config block"),t});else throw new Error("No nx.json found at the workspace root. Are you in a Nx workspace?");const i=".gitignore",l=s.exists(i)?s.read(i,"utf-8")??"":"";if(!l.split(`
2
+ `).some(t=>t.trim()===LENSMCP_GITIGNORE_ENTRY)){const t=l.endsWith(`
3
3
  `)?"":`
4
- `;n.write(i,`${c}${r}
4
+ `;s.write(i,`${l}${t}
5
5
  ${LENSMCP_GITIGNORE_MARKER}
6
6
  ${LENSMCP_GITIGNORE_ENTRY}
7
- `),e.push(`${i}: added \`${LENSMCP_GITIGNORE_ENTRY}\``)}const l=(0,devkit_1.joinPathFragments)(".lensmcp",".keep");n.exists(l)||(n.write(l,""),e.push(`${l}: created`));const u=(0,devkit_1.joinPathFragments)(".lensmcp","install-trail.json"),g=(n.exists(u)?JSON.parse(n.read(u,"utf-8")??"{}"):void 0)??{schemaVersion:1,installedAt:new Date().toISOString(),steps:[]};g.steps.push(...e),n.write(u,JSON.stringify(g,null,2)+`
8
- `),s.registerHostConfig!=="never"&&registerWorkspaceMcpConfig(n,e),s.skipFormat||await(0,devkit_1.formatFiles)(n)}p(initGenerator,"initGenerator"),a(initGenerator,"initGenerator");const LENSMCP_MCP_SERVER_ENTRY={command:"npx",args:["-y","lensmcp","mcp"]};function registerWorkspaceMcpConfig(n,t){const s=".mcp.json";let e={};if(n.exists(s))try{e=JSON.parse(n.read(s,"utf-8")??"{}")}catch{e={}}(!e||typeof e!="object")&&(e={}),(!e.mcpServers||typeof e.mcpServers!="object")&&(e.mcpServers={}),!e.mcpServers.lensmcp&&(e.mcpServers.lensmcp={...LENSMCP_MCP_SERVER_ENTRY},n.write(s,JSON.stringify(e,null,2)+`
9
- `),t.push(".mcp.json: registered lensmcp MCP server (stdio)"))}p(registerWorkspaceMcpConfig,"registerWorkspaceMcpConfig"),a(registerWorkspaceMcpConfig,"registerWorkspaceMcpConfig"),exports.default=initGenerator;function mergeDeep(n,t){const s={...n};for(const[e,i]of Object.entries(t))i!==null&&typeof i=="object"&&!Array.isArray(i)&&s[e]!==null&&typeof s[e]=="object"&&!Array.isArray(s[e])?s[e]=mergeDeep(s[e],i):s[e]=i;return s}p(mergeDeep,"mergeDeep"),a(mergeDeep,"mergeDeep");
7
+ `),e.push(`${i}: added \`${LENSMCP_GITIGNORE_ENTRY}\``)}const u=(0,devkit_1.joinPathFragments)(".lensmcp",".keep");s.exists(u)||(s.write(u,""),e.push(`${u}: created`));const g=(0,devkit_1.joinPathFragments)(".lensmcp","install-trail.json"),d=(s.exists(g)?JSON.parse(s.read(g,"utf-8")??"{}"):void 0)??{schemaVersion:1,installedAt:new Date().toISOString(),steps:[]};d.steps.push(...e),s.write(g,JSON.stringify(d,null,2)+`
8
+ `),r.registerHostConfig!=="never"&&registerWorkspaceMcpConfig(s,e),r.skipFormat||await(0,devkit_1.formatFiles)(s)}c(initGenerator,"initGenerator"),p(initGenerator,"initGenerator"),a(initGenerator,"initGenerator");const LENSMCP_MCP_SERVER_ENTRY={command:"npx",args:["-y","lensmcp","mcp"]};function registerWorkspaceMcpConfig(s,n){const r=".mcp.json";let e={};if(s.exists(r))try{e=JSON.parse(s.read(r,"utf-8")??"{}")}catch{e={}}(!e||typeof e!="object")&&(e={}),(!e.mcpServers||typeof e.mcpServers!="object")&&(e.mcpServers={}),!e.mcpServers.lensmcp&&(e.mcpServers.lensmcp={...LENSMCP_MCP_SERVER_ENTRY},s.write(r,JSON.stringify(e,null,2)+`
9
+ `),n.push(".mcp.json: registered lensmcp MCP server (stdio)"))}c(registerWorkspaceMcpConfig,"registerWorkspaceMcpConfig"),p(registerWorkspaceMcpConfig,"registerWorkspaceMcpConfig"),a(registerWorkspaceMcpConfig,"registerWorkspaceMcpConfig"),exports.default=initGenerator;function mergeDeep(s,n){const r={...s};for(const[e,i]of Object.entries(n))i!==null&&typeof i=="object"&&!Array.isArray(i)&&r[e]!==null&&typeof r[e]=="object"&&!Array.isArray(r[e])?r[e]=mergeDeep(r[e],i):r[e]=i;return r}c(mergeDeep,"mergeDeep"),p(mergeDeep,"mergeDeep"),a(mergeDeep,"mergeDeep");
@@ -1,8 +1,8 @@
1
- "use strict";var h=Object.defineProperty;var c=(e,r)=>h(e,"name",{value:r,configurable:!0});var A=Object.defineProperty,i=c((e,r)=>A(e,"name",{value:r,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.setupNestGenerator=setupNestGenerator,exports.findAppModule=findAppModule,exports.patchMainBootstrap=patchMainBootstrap,exports.patchAppModule=patchAppModule;const devkit_1=require("@nx/devkit"),BOOTSTRAP_IMPORT="import { createLensmcpNestApp } from '@lensmcp/nest-instrumentation';",IMPORT_LINE="import { LensmcpModule } from '@lensmcp/nest-instrumentation';",MODULE_CALL="LensmcpModule.forRoot({ projectName: '__PROJECT__' })";async function setupNestGenerator(e,r){const n={project:r.project,skipFormat:r.skipFormat??!1},t=(0,devkit_1.readProjectConfiguration)(e,n.project),s=findMain(e,t.root);if(!s)throw new Error(`setup-nest: no main.ts found under ${t.root}/src.`);const o=e.read(s,"utf-8")??"",p=patchMainBootstrap(o,n.project);if(p===null)throw new Error(`setup-nest: could not safely patch ${s}.
1
+ "use strict";var N=Object.defineProperty;var p=(t,r)=>N(t,"name",{value:r,configurable:!0});var h=Object.defineProperty,c=p((t,r)=>h(t,"name",{value:r,configurable:!0}),"c"),A=Object.defineProperty,i=c((t,r)=>A(t,"name",{value:r,configurable:!0}),"i");Object.defineProperty(exports,"__esModule",{value:!0}),exports.setupNestGenerator=setupNestGenerator,exports.findAppModule=findAppModule,exports.patchMainBootstrap=patchMainBootstrap,exports.patchAppModule=patchAppModule;const devkit_1=require("@nx/devkit"),BOOTSTRAP_IMPORT="import { createLensmcpNestApp } from '@lensmcp/nest-instrumentation';",IMPORT_LINE="import { LensmcpModule } from '@lensmcp/nest-instrumentation';",MODULE_CALL="LensmcpModule.forRoot({ projectName: '__PROJECT__' })";async function setupNestGenerator(t,r){const n={project:r.project,skipFormat:r.skipFormat??!1},e=(0,devkit_1.readProjectConfiguration)(t,n.project),s=findMain(t,e.root);if(!s)throw new Error(`setup-nest: no main.ts found under ${e.root}/src.`);const o=t.read(s,"utf-8")??"",a=patchMainBootstrap(o,n.project);if(a===null)throw new Error(`setup-nest: could not safely patch ${s}.
2
2
  Expected a \`NestFactory.create(AppModule)\` bootstrap call. Edit manually: replace it with \`createLensmcpNestApp(AppModule, { projectName: '${n.project}' })\` and import it from '@lensmcp/nest-instrumentation'.
3
- (Or use the module form: add \`${IMPORT_LINE}\` and push ${MODULE_CALL.replace("__PROJECT__",n.project)} into the @Module imports array.)`);p!==o&&e.write(s,p);const a={...t.targets??{}};a["agent-dev"]||(a["agent-dev"]={executor:"@lensmcp/nx-plugin:agent-dev",options:{kind:"nestjs"}},t.targets=a,(0,devkit_1.updateProjectConfiguration)(e,n.project,t)),n.skipFormat||await(0,devkit_1.formatFiles)(e)}c(setupNestGenerator,"setupNestGenerator"),i(setupNestGenerator,"setupNestGenerator"),exports.default=setupNestGenerator;function findMain(e,r){for(const n of["src/main.ts","main.ts","src/index.ts"]){const t=(0,devkit_1.joinPathFragments)(r,n);if(e.exists(t))return t}}c(findMain,"findMain"),i(findMain,"findMain");function findAppModule(e,r){for(const n of["src/app.module.ts","app.module.ts"]){const t=(0,devkit_1.joinPathFragments)(r,n);if(e.exists(t))return t}}c(findAppModule,"findAppModule"),i(findAppModule,"findAppModule");const CREATE_CALL_RE=/NestFactory\s*\.\s*create\s*(?:<[\s\S]*?>)?\s*\(/;function patchMainBootstrap(e,r){if(/createLensmcpNestApp\s*\(/.test(e))return e;const n=CREATE_CALL_RE.exec(e);if(!n)return null;const t=n.index+n[0].length-1,s=matchingParen(e,t);if(s===-1)return null;const o=e.slice(t+1,s),{moduleArg:p,restArg:a}=splitTopLevelArgs(o);if(!p.trim())return null;const u=r.replace(/\\/g,"\\\\").replace(/'/g,"\\'"),m=a.trim(),d=m?`{ projectName: '${u}', nestOptions: ${m} }`:`{ projectName: '${u}' }`,f=`createLensmcpNestApp(${p.trim()}, ${d})`;let l=e.slice(0,n.index)+f+e.slice(s+1);return l=addBootstrapImport(l),l=dropUnusedNestFactoryImport(l),l}c(patchMainBootstrap,"patchMainBootstrap"),i(patchMainBootstrap,"patchMainBootstrap");function addBootstrapImport(e){if(/createLensmcpNestApp[\s\S]*?from\s*['"]@lensmcp\/nest-instrumentation['"]/.test(e))return e;const r=[...e.matchAll(/^\s*import .+;?\s*$/gm)],n=r.length?r[r.length-1]:null;if(n&&n.index!==void 0){const t=n.index+n[0].length;return e.slice(0,t)+`
4
- ${BOOTSTRAP_IMPORT}`+e.slice(t)}return`${BOOTSTRAP_IMPORT}
5
- ${e}`}c(addBootstrapImport,"addBootstrapImport"),i(addBootstrapImport,"addBootstrapImport");function dropUnusedNestFactoryImport(e){if(/\bNestFactory\b/.test(stripNestFactoryImportSpan(e).rest))return e;const{match:r}=stripNestFactoryImportSpan(e);if(!r)return e;const n=r.names.filter(s=>s!=="NestFactory");if(n.length===0)return e.slice(0,r.start)+e.slice(r.end).replace(/^\n/,"");const t=`import { ${n.join(", ")} } from '@nestjs/core';`;return e.slice(0,r.start)+t+e.slice(r.end)}c(dropUnusedNestFactoryImport,"dropUnusedNestFactoryImport"),i(dropUnusedNestFactoryImport,"dropUnusedNestFactoryImport");function stripNestFactoryImportSpan(e){const r=/import\s*\{([^}]*)\}\s*from\s*['"]@nestjs\/core['"];?/.exec(e);if(!r)return{match:null,rest:e};const n=r[1].split(",").map(p=>p.trim()).filter(Boolean),t=r.index,s=r.index+r[0].length,o=e.slice(0,t)+e.slice(s);return{match:{start:t,end:s,names:n},rest:o}}c(stripNestFactoryImportSpan,"stripNestFactoryImportSpan"),i(stripNestFactoryImportSpan,"stripNestFactoryImportSpan");function matchingParen(e,r){let n=0;for(let t=r;t<e.length;t++){const s=skipNonCode(e,t);if(s>t){t=s-1;continue}const o=e[t];if(o==="(")n++;else if(o===")"&&(n--,n===0))return t}return-1}c(matchingParen,"matchingParen"),i(matchingParen,"matchingParen");function splitTopLevelArgs(e){let r=0;for(let n=0;n<e.length;n++){const t=skipNonCode(e,n);if(t>n){n=t-1;continue}const s=e[n];if(s==="("||s==="["||s==="{")r++;else if(s===")"||s==="]"||s==="}")r--;else if(s===","&&r===0)return{moduleArg:e.slice(0,n),restArg:e.slice(n+1)}}return{moduleArg:e,restArg:""}}c(splitTopLevelArgs,"splitTopLevelArgs"),i(splitTopLevelArgs,"splitTopLevelArgs");function skipNonCode(e,r){const n=e[r];if(n==='"'||n==="'"||n==="`"){for(let t=r+1;t<e.length;t++){if(e[t]==="\\"){t++;continue}if(e[t]===n)return t+1}return e.length}if(n==="/"&&e[r+1]==="/"){const t=e.indexOf(`
6
- `,r);return t===-1?e.length:t}if(n==="/"&&e[r+1]==="*"){const t=e.indexOf("*/",r+2);return t===-1?e.length:t+2}return r}c(skipNonCode,"skipNonCode"),i(skipNonCode,"skipNonCode");function patchAppModule(e,r){const n=e.includes("from '@lensmcp/nest-instrumentation'")||e.includes('from "@lensmcp/nest-instrumentation"'),t=/LensmcpModule\s*\.\s*forRoot\s*\(/.test(e);if(n&&t)return e;const s=e.indexOf("imports:");if(s===-1||e.indexOf("[",s)===-1)return null;let o=e;if(!n){const f=[...e.matchAll(/^\s*import .+;?\s*$/gm)],l=f.length>0?f[f.length-1]:null;if(l&&l.index!==void 0){const g=l.index+l[0].length;o=e.slice(0,g)+`
7
- ${IMPORT_LINE}`+e.slice(g)}else o=`${IMPORT_LINE}
8
- `+e}if(t)return o;const p=o.indexOf("[",o.indexOf("imports:")),a=o.slice(0,p+1),u=o.slice(p+1),m=u.replace(/^\s*/,"").startsWith("]")?"":", ",d=MODULE_CALL.replace("__PROJECT__",r);return`${a}${d}${m}${u}`}c(patchAppModule,"patchAppModule"),i(patchAppModule,"patchAppModule");
3
+ (Or use the module form: add \`${IMPORT_LINE}\` and push ${MODULE_CALL.replace("__PROJECT__",n.project)} into the @Module imports array.)`);a!==o&&t.write(s,a);const u={...e.targets??{}};u["agent-dev"]||(u["agent-dev"]={executor:"@lensmcp/nx-plugin:agent-dev",options:{kind:"nestjs"}},e.targets=u,(0,devkit_1.updateProjectConfiguration)(t,n.project,e)),n.skipFormat||await(0,devkit_1.formatFiles)(t)}p(setupNestGenerator,"setupNestGenerator"),c(setupNestGenerator,"setupNestGenerator"),i(setupNestGenerator,"setupNestGenerator"),exports.default=setupNestGenerator;function findMain(t,r){for(const n of["src/main.ts","main.ts","src/index.ts"]){const e=(0,devkit_1.joinPathFragments)(r,n);if(t.exists(e))return e}}p(findMain,"findMain"),c(findMain,"findMain"),i(findMain,"findMain");function findAppModule(t,r){for(const n of["src/app.module.ts","app.module.ts"]){const e=(0,devkit_1.joinPathFragments)(r,n);if(t.exists(e))return e}}p(findAppModule,"findAppModule"),c(findAppModule,"findAppModule"),i(findAppModule,"findAppModule");const CREATE_CALL_RE=/NestFactory\s*\.\s*create\s*(?:<[\s\S]*?>)?\s*\(/;function patchMainBootstrap(t,r){if(/createLensmcpNestApp\s*\(/.test(t))return t;const n=CREATE_CALL_RE.exec(t);if(!n)return null;const e=n.index+n[0].length-1,s=matchingParen(t,e);if(s===-1)return null;const o=t.slice(e+1,s),{moduleArg:a,restArg:u}=splitTopLevelArgs(o);if(!a.trim())return null;const m=r.replace(/\\/g,"\\\\").replace(/'/g,"\\'"),f=u.trim(),g=f?`{ projectName: '${m}', nestOptions: ${f} }`:`{ projectName: '${m}' }`,d=`createLensmcpNestApp(${a.trim()}, ${g})`;let l=t.slice(0,n.index)+d+t.slice(s+1);return l=addBootstrapImport(l),l=dropUnusedNestFactoryImport(l),l}p(patchMainBootstrap,"patchMainBootstrap"),c(patchMainBootstrap,"patchMainBootstrap"),i(patchMainBootstrap,"patchMainBootstrap");function addBootstrapImport(t){if(/createLensmcpNestApp[\s\S]*?from\s*['"]@lensmcp\/nest-instrumentation['"]/.test(t))return t;const r=[...t.matchAll(/^\s*import .+;?\s*$/gm)],n=r.length?r[r.length-1]:null;if(n&&n.index!==void 0){const e=n.index+n[0].length;return t.slice(0,e)+`
4
+ ${BOOTSTRAP_IMPORT}`+t.slice(e)}return`${BOOTSTRAP_IMPORT}
5
+ ${t}`}p(addBootstrapImport,"addBootstrapImport"),c(addBootstrapImport,"addBootstrapImport"),i(addBootstrapImport,"addBootstrapImport");function dropUnusedNestFactoryImport(t){if(/\bNestFactory\b/.test(stripNestFactoryImportSpan(t).rest))return t;const{match:r}=stripNestFactoryImportSpan(t);if(!r)return t;const n=r.names.filter(s=>s!=="NestFactory");if(n.length===0)return t.slice(0,r.start)+t.slice(r.end).replace(/^\n/,"");const e=`import { ${n.join(", ")} } from '@nestjs/core';`;return t.slice(0,r.start)+e+t.slice(r.end)}p(dropUnusedNestFactoryImport,"dropUnusedNestFactoryImport"),c(dropUnusedNestFactoryImport,"dropUnusedNestFactoryImport"),i(dropUnusedNestFactoryImport,"dropUnusedNestFactoryImport");function stripNestFactoryImportSpan(t){const r=/import\s*\{([^}]*)\}\s*from\s*['"]@nestjs\/core['"];?/.exec(t);if(!r)return{match:null,rest:t};const n=r[1].split(",").map(a=>a.trim()).filter(Boolean),e=r.index,s=r.index+r[0].length,o=t.slice(0,e)+t.slice(s);return{match:{start:e,end:s,names:n},rest:o}}p(stripNestFactoryImportSpan,"stripNestFactoryImportSpan"),c(stripNestFactoryImportSpan,"stripNestFactoryImportSpan"),i(stripNestFactoryImportSpan,"stripNestFactoryImportSpan");function matchingParen(t,r){let n=0;for(let e=r;e<t.length;e++){const s=skipNonCode(t,e);if(s>e){e=s-1;continue}const o=t[e];if(o==="(")n++;else if(o===")"&&(n--,n===0))return e}return-1}p(matchingParen,"matchingParen"),c(matchingParen,"matchingParen"),i(matchingParen,"matchingParen");function splitTopLevelArgs(t){let r=0;for(let n=0;n<t.length;n++){const e=skipNonCode(t,n);if(e>n){n=e-1;continue}const s=t[n];if(s==="("||s==="["||s==="{")r++;else if(s===")"||s==="]"||s==="}")r--;else if(s===","&&r===0)return{moduleArg:t.slice(0,n),restArg:t.slice(n+1)}}return{moduleArg:t,restArg:""}}p(splitTopLevelArgs,"splitTopLevelArgs"),c(splitTopLevelArgs,"splitTopLevelArgs"),i(splitTopLevelArgs,"splitTopLevelArgs");function skipNonCode(t,r){const n=t[r];if(n==='"'||n==="'"||n==="`"){for(let e=r+1;e<t.length;e++){if(t[e]==="\\"){e++;continue}if(t[e]===n)return e+1}return t.length}if(n==="/"&&t[r+1]==="/"){const e=t.indexOf(`
6
+ `,r);return e===-1?t.length:e}if(n==="/"&&t[r+1]==="*"){const e=t.indexOf("*/",r+2);return e===-1?t.length:e+2}return r}p(skipNonCode,"skipNonCode"),c(skipNonCode,"skipNonCode"),i(skipNonCode,"skipNonCode");function patchAppModule(t,r){const n=t.includes("from '@lensmcp/nest-instrumentation'")||t.includes('from "@lensmcp/nest-instrumentation"'),e=/LensmcpModule\s*\.\s*forRoot\s*\(/.test(t);if(n&&e)return t;const s=t.indexOf("imports:");if(s===-1||t.indexOf("[",s)===-1)return null;let o=t;if(!n){const d=[...t.matchAll(/^\s*import .+;?\s*$/gm)],l=d.length>0?d[d.length-1]:null;if(l&&l.index!==void 0){const x=l.index+l[0].length;o=t.slice(0,x)+`
7
+ ${IMPORT_LINE}`+t.slice(x)}else o=`${IMPORT_LINE}
8
+ `+t}if(e)return o;const a=o.indexOf("[",o.indexOf("imports:")),u=o.slice(0,a+1),m=o.slice(a+1),f=m.replace(/^\s*/,"").startsWith("]")?"":", ",g=MODULE_CALL.replace("__PROJECT__",r);return`${u}${g}${f}${m}`}p(patchAppModule,"patchAppModule"),c(patchAppModule,"patchAppModule"),i(patchAppModule,"patchAppModule");
@@ -1,5 +1,5 @@
1
- "use strict";var v=Object.defineProperty;var p=(e,t)=>v(e,"name",{value:t,configurable:!0});var m=Object.defineProperty,l=p((e,t)=>m(e,"name",{value:t,configurable:!0}),"l");Object.defineProperty(exports,"__esModule",{value:!0}),exports.setupViteGenerator=setupViteGenerator,exports.patchViteConfig=patchViteConfig;const devkit_1=require("@nx/devkit"),IMPORT_LINE="import { lensmcpVitePlugin } from '@lensmcp/vite-plugin';";async function setupViteGenerator(e,t){const o={project:t.project,skipFormat:t.skipFormat??!1},i=(0,devkit_1.readProjectConfiguration)(e,o.project),n=findViteConfig(e,i.root);if(!n)throw new Error(`setup-vite: no vite.config.{ts,mts,js,mjs,cts,cjs} found under ${i.root}.`);const r=e.read(n,"utf-8")??"",c=patchViteConfig(r);if(c===null)throw new Error(`setup-vite: could not safely patch ${n}.
1
+ "use strict";var j=Object.defineProperty;var a=(e,t)=>j(e,"name",{value:t,configurable:!0});var v=Object.defineProperty,p=a((e,t)=>v(e,"name",{value:t,configurable:!0}),"p"),m=Object.defineProperty,l=p((e,t)=>m(e,"name",{value:t,configurable:!0}),"l");Object.defineProperty(exports,"__esModule",{value:!0}),exports.setupViteGenerator=setupViteGenerator,exports.patchViteConfig=patchViteConfig;const devkit_1=require("@nx/devkit"),IMPORT_LINE="import { lensmcpVitePlugin } from '@lensmcp/vite-plugin';";async function setupViteGenerator(e,t){const o={project:t.project,skipFormat:t.skipFormat??!1},i=(0,devkit_1.readProjectConfiguration)(e,o.project),n=findViteConfig(e,i.root);if(!n)throw new Error(`setup-vite: no vite.config.{ts,mts,js,mjs,cts,cjs} found under ${i.root}.`);const r=e.read(n,"utf-8")??"",c=patchViteConfig(r);if(c===null)throw new Error(`setup-vite: could not safely patch ${n}.
2
2
  Expected a defineConfig({ plugins: [...] }) or defineConfig(({ mode }) => ({ plugins: [...] })) shape.
3
- Edit manually: add \`${IMPORT_LINE}\` and push \`lensmcpVitePlugin({ enabled: mode !== 'production' })\` into the plugins array.`);c!==r&&e.write(n,c);const s={...i.targets??{}};s["agent-dev"]||(s["agent-dev"]={executor:"@lensmcp/nx-plugin:agent-dev",options:{kind:"vite-react",chrome:!0,headless:!0}},i.targets=s,(0,devkit_1.updateProjectConfiguration)(e,o.project,i)),o.skipFormat||await(0,devkit_1.formatFiles)(e)}p(setupViteGenerator,"setupViteGenerator"),l(setupViteGenerator,"setupViteGenerator"),exports.default=setupViteGenerator;function findViteConfig(e,t){for(const o of["vite.config.ts","vite.config.mts","vite.config.js","vite.config.mjs","vite.config.cts","vite.config.cjs"]){const i=(0,devkit_1.joinPathFragments)(t,o);if(e.exists(i))return i}}p(findViteConfig,"findViteConfig"),l(findViteConfig,"findViteConfig");function patchViteConfig(e){const t=e.includes("from '@lensmcp/vite-plugin'")||e.includes('from "@lensmcp/vite-plugin"'),o=/lensmcpVitePlugin\s*\(/.test(e);if(t&&o)return e;const i=e.indexOf("plugins:");if(i===-1||e.indexOf("[",i)===-1)return null;let n=e;if(!t){const a=[...e.matchAll(/^\s*import .+;?\s*$/gm)],u=a.length>0?a[a.length-1]:null;if(u&&u.index!==void 0){const f=u.index+u[0].length;n=e.slice(0,f)+`
4
- ${IMPORT_LINE}`+e.slice(f)}else n=`${IMPORT_LINE}
5
- `+e}if(o)return n;const r=n.indexOf("[",n.indexOf("plugins:")),c=n.slice(0,r+1),s=n.slice(r+1),d=s.replace(/^\s*/,"").startsWith("]")?"":", ",g=/defineConfig\s*\(\s*(?:async\s*)?\(\s*\{[^}]*\bmode\b[^}]*\}/.test(n)?"mode !== 'production'":"process.env.NODE_ENV !== 'production'";return`${c}lensmcpVitePlugin({ enabled: ${g} })${d}${s}`}p(patchViteConfig,"patchViteConfig"),l(patchViteConfig,"patchViteConfig");
3
+ Edit manually: add \`${IMPORT_LINE}\` and push \`lensmcpVitePlugin({ enabled: mode !== 'production' })\` into the plugins array.`);c!==r&&e.write(n,c);const s={...i.targets??{}};s["agent-dev"]||(s["agent-dev"]={executor:"@lensmcp/nx-plugin:agent-dev",options:{kind:"vite-react",chrome:!0,headless:!0}},i.targets=s,(0,devkit_1.updateProjectConfiguration)(e,o.project,i)),o.skipFormat||await(0,devkit_1.formatFiles)(e)}a(setupViteGenerator,"setupViteGenerator"),p(setupViteGenerator,"setupViteGenerator"),l(setupViteGenerator,"setupViteGenerator"),exports.default=setupViteGenerator;function findViteConfig(e,t){for(const o of["vite.config.ts","vite.config.mts","vite.config.js","vite.config.mjs","vite.config.cts","vite.config.cjs"]){const i=(0,devkit_1.joinPathFragments)(t,o);if(e.exists(i))return i}}a(findViteConfig,"findViteConfig"),p(findViteConfig,"findViteConfig"),l(findViteConfig,"findViteConfig");function patchViteConfig(e){const t=e.includes("from '@lensmcp/vite-plugin'")||e.includes('from "@lensmcp/vite-plugin"'),o=/lensmcpVitePlugin\s*\(/.test(e);if(t&&o)return e;const i=e.indexOf("plugins:");if(i===-1||e.indexOf("[",i)===-1)return null;let n=e;if(!t){const u=[...e.matchAll(/^\s*import .+;?\s*$/gm)],f=u.length>0?u[u.length-1]:null;if(f&&f.index!==void 0){const d=f.index+f[0].length;n=e.slice(0,d)+`
4
+ ${IMPORT_LINE}`+e.slice(d)}else n=`${IMPORT_LINE}
5
+ `+e}if(o)return n;const r=n.indexOf("[",n.indexOf("plugins:")),c=n.slice(0,r+1),s=n.slice(r+1),g=s.replace(/^\s*/,"").startsWith("]")?"":", ",h=/defineConfig\s*\(\s*(?:async\s*)?\(\s*\{[^}]*\bmode\b[^}]*\}/.test(n)?"mode !== 'production'":"process.env.NODE_ENV !== 'production'";return`${c}lensmcpVitePlugin({ enabled: ${h} })${g}${s}`}a(patchViteConfig,"patchViteConfig"),p(patchViteConfig,"patchViteConfig"),l(patchViteConfig,"patchViteConfig");
package/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var i=Object.defineProperty;var o=(t,r)=>i(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.default=exports.agentVerifyExecutor=exports.agentBuildExecutor=exports.agentDevExecutor=exports.patchAppModule=exports.patchMainBootstrap=exports.setupNestGenerator=exports.patchViteConfig=exports.setupViteGenerator=exports.initGenerator=void 0;const tslib_1=require("tslib");var init_js_1=require("./generators/init/init.js");Object.defineProperty(exports,"initGenerator",{enumerable:!0,get:e(function(){return init_js_1.initGenerator},"get")});var setup_vite_js_1=require("./generators/setup-vite/setup-vite.js");Object.defineProperty(exports,"setupViteGenerator",{enumerable:!0,get:e(function(){return setup_vite_js_1.setupViteGenerator},"get")}),Object.defineProperty(exports,"patchViteConfig",{enumerable:!0,get:e(function(){return setup_vite_js_1.patchViteConfig},"get")});var setup_nest_js_1=require("./generators/setup-nest/setup-nest.js");Object.defineProperty(exports,"setupNestGenerator",{enumerable:!0,get:e(function(){return setup_nest_js_1.setupNestGenerator},"get")}),Object.defineProperty(exports,"patchMainBootstrap",{enumerable:!0,get:e(function(){return setup_nest_js_1.patchMainBootstrap},"get")}),Object.defineProperty(exports,"patchAppModule",{enumerable:!0,get:e(function(){return setup_nest_js_1.patchAppModule},"get")});var agent_dev_js_1=require("./executors/agent-dev/agent-dev.js");Object.defineProperty(exports,"agentDevExecutor",{enumerable:!0,get:e(function(){return tslib_1.__importDefault(agent_dev_js_1).default},"get")});var agent_build_js_1=require("./executors/agent-build/agent-build.js");Object.defineProperty(exports,"agentBuildExecutor",{enumerable:!0,get:e(function(){return tslib_1.__importDefault(agent_build_js_1).default},"get")});var agent_verify_js_1=require("./executors/agent-verify/agent-verify.js");Object.defineProperty(exports,"agentVerifyExecutor",{enumerable:!0,get:e(function(){return tslib_1.__importDefault(agent_verify_js_1).default},"get")});var init_js_2=require("./generators/init/init.js");Object.defineProperty(exports,"default",{enumerable:!0,get:e(function(){return init_js_2.initGenerator},"get")});
1
+ "use strict";var a=Object.defineProperty;var u=(t,r)=>a(t,"name",{value:r,configurable:!0});var i=Object.defineProperty,o=u((t,r)=>i(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.default=exports.agentVerifyExecutor=exports.agentBuildExecutor=exports.agentDevExecutor=exports.patchAppModule=exports.patchMainBootstrap=exports.setupNestGenerator=exports.patchViteConfig=exports.setupViteGenerator=exports.initGenerator=void 0;const tslib_1=require("tslib");var init_js_1=require("./generators/init/init.js");Object.defineProperty(exports,"initGenerator",{enumerable:!0,get:e(function(){return init_js_1.initGenerator},"get")});var setup_vite_js_1=require("./generators/setup-vite/setup-vite.js");Object.defineProperty(exports,"setupViteGenerator",{enumerable:!0,get:e(function(){return setup_vite_js_1.setupViteGenerator},"get")}),Object.defineProperty(exports,"patchViteConfig",{enumerable:!0,get:e(function(){return setup_vite_js_1.patchViteConfig},"get")});var setup_nest_js_1=require("./generators/setup-nest/setup-nest.js");Object.defineProperty(exports,"setupNestGenerator",{enumerable:!0,get:e(function(){return setup_nest_js_1.setupNestGenerator},"get")}),Object.defineProperty(exports,"patchMainBootstrap",{enumerable:!0,get:e(function(){return setup_nest_js_1.patchMainBootstrap},"get")}),Object.defineProperty(exports,"patchAppModule",{enumerable:!0,get:e(function(){return setup_nest_js_1.patchAppModule},"get")});var agent_dev_js_1=require("./executors/agent-dev/agent-dev.js");Object.defineProperty(exports,"agentDevExecutor",{enumerable:!0,get:e(function(){return tslib_1.__importDefault(agent_dev_js_1).default},"get")});var agent_build_js_1=require("./executors/agent-build/agent-build.js");Object.defineProperty(exports,"agentBuildExecutor",{enumerable:!0,get:e(function(){return tslib_1.__importDefault(agent_build_js_1).default},"get")});var agent_verify_js_1=require("./executors/agent-verify/agent-verify.js");Object.defineProperty(exports,"agentVerifyExecutor",{enumerable:!0,get:e(function(){return tslib_1.__importDefault(agent_verify_js_1).default},"get")});var init_js_2=require("./generators/init/init.js");Object.defineProperty(exports,"default",{enumerable:!0,get:e(function(){return init_js_2.initGenerator},"get")});
package/lens-frontend.js CHANGED
@@ -1 +1 @@
1
- "use strict";var _=Object.defineProperty;var s=(n,e)=>_(n,"name",{value:e,configurable:!0});var g=Object.defineProperty,t=s((n,e)=>g(n,"name",{value:e,configurable:!0}),"t");Object.defineProperty(exports,"__esModule",{value:!0}),exports.spawnLensFrontend=spawnLensFrontend,exports.locateBin=locateBin,exports.resolveFirstExisting=resolveFirstExisting,exports.globalNodeModules=globalNodeModules,exports.findMcpBundle=findMcpBundle,exports.findDashboardBundle=findDashboardBundle,exports.findCaptureRunner=findCaptureRunner,exports.findBridgeBundle=findBridgeBundle;const node_child_process_1=require("node:child_process"),node_fs_1=require("node:fs"),node_path_1=require("node:path");function spawnLensFrontend(n,e){const i=n.log??(l=>console.log(l)),{projectRoot:o,workspaceRoot:c,eventFile:v}=n,u=n.chrome!==!1,b=n.headless!==!1,p=n.viteBin??locateBin("vite",[o,c]);if(!p)throw new Error("[lens] Could not find the vite binary in node_modules/.bin.");const r=n.port??(u?5173:void 0),a=["--config",resolveFirstExisting(["vite.config.ts","vite.config.mts","vite.config.js","vite.config.mjs","vite.config.cts","vite.config.cjs"],o)??(0,node_path_1.join)(o,"vite.config.ts"),o];r!==void 0&&a.push("--port",String(r),"--strictPort");const f={LENSMCP_EVENT_FILE:v,...n.viteEnv??{}},j=n.labelPrefix??"";i(`[lens] starting Vite for ${n.project??o}${r?` on :${r}`:""}`);const m=e(`${j}vite`,p,a,f),d=n.openUrl??(r?`http://localhost:${r}/`:void 0);if(u){const l=findCaptureRunner(c);l?d?(i(`[lens] starting browser capture \u2192 ${d}`),e(`${j}browser-capture`,process.execPath,[l],{...f,LENSMCP_DEV_URL:d,LENSMCP_TOKENS_FILE:(0,node_path_1.join)(c,"lensmcp.tokens.json"),LENSMCP_RULES_FILE:(0,node_path_1.join)(c,"lensmcp.rules.json"),LENSMCP_HEADLESS:b===!1?"false":"true"},!0,{delayMs:1e4,max:5})):i("[lens] no dev URL/port resolved \u2014 skipping live capture."):i("[lens] browser-capture runner not found \u2014 skipping live capture. Install the self-contained CLI: `npm i -D lensmcp` (it ships `bundled/capture-runner.js`).")}return{...r!==void 0?{devPort:r}:{},...d?{devUrl:d}:{},vite:m}}s(spawnLensFrontend,"spawnLensFrontend"),t(spawnLensFrontend,"spawnLensFrontend");function locateBin(n,e){for(const i of e){const o=(0,node_path_1.join)(i,"node_modules",".bin",n);if((0,node_fs_1.existsSync)(o))return o}}s(locateBin,"locateBin"),t(locateBin,"locateBin");function resolveFirstExisting(n,e){for(const i of n){const o=(0,node_path_1.join)(e,i);if((0,node_fs_1.existsSync)(o))return o}}s(resolveFirstExisting,"resolveFirstExisting"),t(resolveFirstExisting,"resolveFirstExisting");let cachedGlobalRoot;function globalNodeModules(){if(cachedGlobalRoot!==void 0)return cachedGlobalRoot??void 0;const n=(0,node_path_1.resolve)((0,node_path_1.dirname)(process.execPath),"..","lib","node_modules");if((0,node_fs_1.existsSync)(n))return cachedGlobalRoot=n,n;try{const e=(0,node_child_process_1.execSync)("npm root -g",{encoding:"utf8",timeout:5e3}).trim();cachedGlobalRoot=e&&(0,node_fs_1.existsSync)(e)?e:null}catch{cachedGlobalRoot=null}return cachedGlobalRoot??void 0}s(globalNodeModules,"globalNodeModules"),t(globalNodeModules,"globalNodeModules");function findMcpBundle(n){const e=globalNodeModules();return firstExisting([(0,node_path_1.join)(n,"node_modules","lensmcp","bundled","main.js"),...e?[(0,node_path_1.join)(e,"lensmcp","bundled","main.js")]:[],(0,node_path_1.join)(n,"servers","lensmcp-mcp","dist","main.js")])}s(findMcpBundle,"findMcpBundle"),t(findMcpBundle,"findMcpBundle");function findDashboardBundle(n){const e=globalNodeModules();return firstExisting([(0,node_path_1.join)(n,"node_modules","lensmcp","bundled","dashboard.js"),...e?[(0,node_path_1.join)(e,"lensmcp","bundled","dashboard.js")]:[],(0,node_path_1.join)(n,"servers","lensmcp-mcp","dist","dashboard.js")])}s(findDashboardBundle,"findDashboardBundle"),t(findDashboardBundle,"findDashboardBundle");function findCaptureRunner(n){const e=globalNodeModules();return firstExisting([(0,node_path_1.join)(n,"node_modules","lensmcp","bundled","capture-runner.js"),...e?[(0,node_path_1.join)(e,"lensmcp","bundled","capture-runner.js")]:[],(0,node_path_1.join)(n,"libs","browser-capture","dist","capture-runner.js")])}s(findCaptureRunner,"findCaptureRunner"),t(findCaptureRunner,"findCaptureRunner");function findBridgeBundle(n){const e=globalNodeModules();return firstExisting([(0,node_path_1.join)(n,"node_modules","lensmcp","bundled","bridge.js"),...e?[(0,node_path_1.join)(e,"lensmcp","bundled","bridge.js")]:[],(0,node_path_1.join)(n,"libs","bridge","dist","main.js")])}s(findBridgeBundle,"findBridgeBundle"),t(findBridgeBundle,"findBridgeBundle");function firstExisting(n){for(const e of n)if((0,node_fs_1.existsSync)(e))return e}s(firstExisting,"firstExisting"),t(firstExisting,"firstExisting");
1
+ "use strict";var h=Object.defineProperty;var i=(e,n)=>h(e,"name",{value:n,configurable:!0});var _=Object.defineProperty,s=i((e,n)=>_(e,"name",{value:n,configurable:!0}),"s"),g=Object.defineProperty,t=s((e,n)=>g(e,"name",{value:n,configurable:!0}),"t");Object.defineProperty(exports,"__esModule",{value:!0}),exports.spawnLensFrontend=spawnLensFrontend,exports.locateBin=locateBin,exports.resolveFirstExisting=resolveFirstExisting,exports.globalNodeModules=globalNodeModules,exports.findMcpBundle=findMcpBundle,exports.findDashboardBundle=findDashboardBundle,exports.findCaptureRunner=findCaptureRunner,exports.findBridgeBundle=findBridgeBundle;const node_child_process_1=require("node:child_process"),node_fs_1=require("node:fs"),node_path_1=require("node:path");function spawnLensFrontend(e,n){const r=e.log??(u=>console.log(u)),{projectRoot:o,workspaceRoot:c,eventFile:j}=e,a=e.chrome!==!1,m=e.headless!==!1,p=e.viteBin??locateBin("vite",[o,c]);if(!p)throw new Error("[lens] Could not find the vite binary in node_modules/.bin.");const d=e.port??(a?5173:void 0),f=["--config",resolveFirstExisting(["vite.config.ts","vite.config.mts","vite.config.js","vite.config.mjs","vite.config.cts","vite.config.cjs"],o)??(0,node_path_1.join)(o,"vite.config.ts"),o];d!==void 0&&f.push("--port",String(d),"--strictPort");const v={LENSMCP_EVENT_FILE:j,...e.viteEnv??{}},b=e.labelPrefix??"";r(`[lens] starting Vite for ${e.project??o}${d?` on :${d}`:""}`);const x=n(`${b}vite`,p,f,v),l=e.openUrl??(d?`http://localhost:${d}/`:void 0);if(a){const u=findCaptureRunner(c);u?l?(r(`[lens] starting browser capture \u2192 ${l}`),n(`${b}browser-capture`,process.execPath,[u],{...v,LENSMCP_DEV_URL:l,LENSMCP_TOKENS_FILE:(0,node_path_1.join)(c,"lensmcp.tokens.json"),LENSMCP_RULES_FILE:(0,node_path_1.join)(c,"lensmcp.rules.json"),LENSMCP_HEADLESS:m===!1?"false":"true"},!0,{delayMs:1e4,max:5})):r("[lens] no dev URL/port resolved \u2014 skipping live capture."):r("[lens] browser-capture runner not found \u2014 skipping live capture. Install the self-contained CLI: `npm i -D lensmcp` (it ships `bundled/capture-runner.js`).")}return{...d!==void 0?{devPort:d}:{},...l?{devUrl:l}:{},vite:x}}i(spawnLensFrontend,"spawnLensFrontend"),s(spawnLensFrontend,"spawnLensFrontend"),t(spawnLensFrontend,"spawnLensFrontend");function locateBin(e,n){for(const r of n){const o=(0,node_path_1.join)(r,"node_modules",".bin",e);if((0,node_fs_1.existsSync)(o))return o}}i(locateBin,"locateBin"),s(locateBin,"locateBin"),t(locateBin,"locateBin");function resolveFirstExisting(e,n){for(const r of e){const o=(0,node_path_1.join)(n,r);if((0,node_fs_1.existsSync)(o))return o}}i(resolveFirstExisting,"resolveFirstExisting"),s(resolveFirstExisting,"resolveFirstExisting"),t(resolveFirstExisting,"resolveFirstExisting");let cachedGlobalRoot;function globalNodeModules(){if(cachedGlobalRoot!==void 0)return cachedGlobalRoot??void 0;const e=(0,node_path_1.resolve)((0,node_path_1.dirname)(process.execPath),"..","lib","node_modules");if((0,node_fs_1.existsSync)(e))return cachedGlobalRoot=e,e;try{const n=(0,node_child_process_1.execSync)("npm root -g",{encoding:"utf8",timeout:5e3}).trim();cachedGlobalRoot=n&&(0,node_fs_1.existsSync)(n)?n:null}catch{cachedGlobalRoot=null}return cachedGlobalRoot??void 0}i(globalNodeModules,"globalNodeModules"),s(globalNodeModules,"globalNodeModules"),t(globalNodeModules,"globalNodeModules");function findMcpBundle(e){const n=globalNodeModules();return firstExisting([(0,node_path_1.join)(e,"node_modules","lensmcp","bundled","main.js"),...n?[(0,node_path_1.join)(n,"lensmcp","bundled","main.js")]:[],(0,node_path_1.join)(e,"servers","lensmcp-mcp","dist","main.js")])}i(findMcpBundle,"findMcpBundle"),s(findMcpBundle,"findMcpBundle"),t(findMcpBundle,"findMcpBundle");function findDashboardBundle(e){const n=globalNodeModules();return firstExisting([(0,node_path_1.join)(e,"node_modules","lensmcp","bundled","dashboard.js"),...n?[(0,node_path_1.join)(n,"lensmcp","bundled","dashboard.js")]:[],(0,node_path_1.join)(e,"servers","lensmcp-mcp","dist","dashboard.js")])}i(findDashboardBundle,"findDashboardBundle"),s(findDashboardBundle,"findDashboardBundle"),t(findDashboardBundle,"findDashboardBundle");function findCaptureRunner(e){const n=globalNodeModules();return firstExisting([(0,node_path_1.join)(e,"node_modules","lensmcp","bundled","capture-runner.js"),...n?[(0,node_path_1.join)(n,"lensmcp","bundled","capture-runner.js")]:[],(0,node_path_1.join)(e,"libs","browser-capture","dist","capture-runner.js")])}i(findCaptureRunner,"findCaptureRunner"),s(findCaptureRunner,"findCaptureRunner"),t(findCaptureRunner,"findCaptureRunner");function findBridgeBundle(e){const n=globalNodeModules();return firstExisting([(0,node_path_1.join)(e,"node_modules","lensmcp","bundled","bridge.js"),...n?[(0,node_path_1.join)(n,"lensmcp","bundled","bridge.js")]:[],(0,node_path_1.join)(e,"libs","bridge","dist","main.js")])}i(findBridgeBundle,"findBridgeBundle"),s(findBridgeBundle,"findBridgeBundle"),t(findBridgeBundle,"findBridgeBundle");function firstExisting(e){for(const n of e)if((0,node_fs_1.existsSync)(n))return n}i(firstExisting,"firstExisting"),s(firstExisting,"firstExisting"),t(firstExisting,"firstExisting");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lensmcp/nx-plugin",
3
- "version": "1.19.0",
3
+ "version": "1.20.0",
4
4
  "main": "./index.js",
5
5
  "module": "./index.js",
6
6
  "types": "./index.d.ts",