@shiplightai/mcp 0.1.49 → 0.1.50

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.
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from "module";
3
+ const require = __createRequire(import.meta.url);
4
+ import{a as O,b as P,c as Q,d as R,e as S,f as T,g as U,h as V,i as W,j as X,k as Y,l as Z,m as _,n as $,o as aa,p as ba,q as ca,r as da,s as ea,t as fa,u as ga}from"./chunk-KI54PAOH.js";import{j as l,k as m,l as n,m as o}from"./chunk-4DIUHKFB.js";import{a as f,c as g,d as h,e as i,f as j,g as k}from"./chunk-2BZVD336.js";import{b as J,e as K,f as L,g as M,h as N}from"./chunk-5GG34OWS.js";import{a as p,b as q,c as r,d as s,e as t,f as u,g as v,h as w,i as x,j as y,k as z,l as A,m as B}from"./chunk-OZ36UVHR.js";import"./chunk-UBUBM7F7.js";import"./chunk-B7PRQ6ZM.js";import{C as H,E as I}from"./chunk-XWDTDVL5.js";import{g as C,h as D,i as E,k as F,l as G}from"./chunk-X5NUVPAF.js";import{a,b,c,d,j as e}from"./chunk-HBXQFJ2K.js";import"./chunk-ETDHHU35.js";import"./chunk-LM633YUO.js";export{I as ActionHandler,H as ActionHelper,da as Agent,aa as AgentServices,ba as AgentStepEventTypes,ca as AgentTaskFailedError,_ as BrowserManager,w as DEFAULT_EVENT_LISTENER_LIMIT,A as DomService,v as EVENT_LISTENER_CANDIDATE_SELECTORS,B as HistoryTreeProcessor,f as INIT_SCRIPT,u as INTERACTION_EVENT_TYPES,t as INTERACTIVE_ROLES,e as LogLevel,l as LoginType,Y as MCPToolProvider,J as OpenAIToolProvider,ga as SDK_VERSION,p as ToolRegistry,m as TwoFactorAuthType,o as VariableStore,da as WebAgent,a as configureSdk,fa as createAgent,ea as createAgentContext,V as createToolRegistry,W as createToolRegistryWithCapabilities,T as ensureToolsRegistered,M as evaluateStatement,L as executeStep,Z as exportMCPTools,z as filterInteractionListeners,K as generateActionStep,G as getActionEntityLocatorInfo,h as getBrowserCdpUrl,X as getCapabilitySummary,F as getFramePath,r as getModel,j as getPageInfo,i as getPageWsUrl,$ as getPlatformFromDeviceName,s as getProviderOptions,b as getSdkConfig,U as getToolRegistry,O as injectUserFunction,y as isInteractionEventType,x as isInteractiveRole,R as loadKnowledgeMappings,Q as loadKnowledges,P as loadUserFunctions,d as logger,g as newBrowserContext,S as parseSSEStream,c as parseSdkLogLevelFromEnv,C as pickBestLocator,D as pickBestLocatorForElement,E as pickBestLocators,n as replaceVariables,N as runTask,k as setWindowBounds,q as toolRegistry};
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from "module";
3
+ const require = __createRequire(import.meta.url);
4
+ import{$,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,a as b,b as c,c as d,d as e,e as f,f as g,g as h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}from"./chunk-Y64TKFRF.js";import"./chunk-7W6YLS2E.js";import"./chunk-VBI4DDSS.js";import{r as a}from"./chunk-KI54PAOH.js";import"./chunk-4DIUHKFB.js";import"./chunk-2BZVD336.js";import"./chunk-HHCLRZRA.js";import"./chunk-67R4GP2H.js";import"./chunk-5GG34OWS.js";import"./chunk-OZ36UVHR.js";import"./chunk-UBUBM7F7.js";import"./chunk-B7PRQ6ZM.js";import"./chunk-XWDTDVL5.js";import"./chunk-X5NUVPAF.js";import"./chunk-HBXQFJ2K.js";import"./chunk-ETDHHU35.js";import"./chunk-LM633YUO.js";export{p as ACT_SUPPORTED_ACTIONS,f as ActionEntitySchema,V as BrowserTools,X as DataTools,W as DebugTools,k as ExtensionRelayServer,_ as LocalTestTools,l as PROMPTS,q as RESOURCES,x as RelayTools,i as SessionManager,w as SessionTools,g as StatementSchema,Y as TestCaseTools,h as TestFlowSchema,$ as TestFlowTools,Z as TestResultTools,j as TokenApiClient,o as ToolRegistry,a as WebAgent,D as actHandler,B as actSchema,J as clearExecutionHistoryHandler,H as clearExecutionHistorySchema,I as clearExecutionHistoryToolMeta,T as getActSchema,U as getActToolDefinition,C as getActToolMeta,t as getActionEntitySchemaResource,S as getLocatorsHandler,Q as getLocatorsSchema,R as getLocatorsToolMeta,M as getPageInfoHandler,K as getPageInfoSchema,L as getPageInfoToolMeta,m as getPrompt,v as getResource,r as getTestFlowJsonSchemaResource,s as getTestFlowYamlSchemaResource,c as hasLlmKey,P as inspectPageHandler,N as inspectPageSchema,O as inspectPageToolMeta,b as isLlmAction,n as listPrompts,u as listResources,e as missingApiTokenError,d as missingLlmKeyError,A as navigateHandler,y as navigateSchema,z as navigateToolMeta,G as updateVariablesHandler,E as updateVariablesSchema,F as updateVariablesToolMeta};
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __createRequire } from "module";
3
3
  const require = __createRequire(import.meta.url);
4
- import{D as r,E as e}from"./chunk-KW4N7WFX.js";import"./chunk-PFLXO7G4.js";import"./chunk-JKHKVGEC.js";import"./chunk-ETDHHU35.js";import"./chunk-LM633YUO.js";import{createRequire as t}from"module";var a=t(import.meta.url);export{r as ActionHandler,e as default};
4
+ import{D as r,E as e}from"./chunk-XWDTDVL5.js";import"./chunk-X5NUVPAF.js";import"./chunk-HBXQFJ2K.js";import"./chunk-ETDHHU35.js";import"./chunk-LM633YUO.js";import{createRequire as t}from"module";var a=t(import.meta.url);export{r as ActionHandler,e as default};
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __createRequire } from "module";
3
3
  const require = __createRequire(import.meta.url);
4
- var e="0.1.49",o=process.argv[2];if(process.argv.includes("--version")||process.argv.includes("-v")||o==="version"){let s=e==="unknown"||process.argv[1]?.includes("/monots");process.stdout.write(`shiplight-mcp ${s?`${e}-local`:e}
4
+ var e="0.1.50",o=process.argv[2];if(process.argv.includes("--version")||process.argv.includes("-v")||o==="version"){let s=e==="unknown"||process.argv[1]?.includes("/monots");process.stdout.write(`shiplight-mcp ${s?`${e}-local`:e}
5
5
  `),process.exit(0)}if(process.argv.includes("--chrome-extension-path")){let s=new URL("../chrome-extension",import.meta.url).pathname;process.stdout.write(s+`
6
6
  `),process.exit(0)}(process.argv.includes("--help")||process.argv.includes("-h")||o==="help")&&(process.stdout.write(`shiplight-mcp ${e}
7
7
 
@@ -21,4 +21,4 @@ Environment variables:
21
21
  GOOGLE_API_KEY Google API key (for Gemini models)
22
22
  API_BASE_URL Shiplight API base URL (default: https://api.shiplight.ai)
23
23
  TERMINATION_TIMEOUT Session termination timeout in ms
24
- `),process.exit(0));var{startServer:t}=await import("./server-KGF6BY7H.js");await t();
24
+ `),process.exit(0));var{startServer:t}=await import("./server-SF3CTCCU.js");await t();
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from "module";
3
+ const require = __createRequire(import.meta.url);
4
+ import{a as e,b as o,c as t}from"./chunk-VBI4DDSS.js";import"./chunk-KI54PAOH.js";import"./chunk-4DIUHKFB.js";import"./chunk-2BZVD336.js";import"./chunk-5GG34OWS.js";import"./chunk-OZ36UVHR.js";import"./chunk-UBUBM7F7.js";import"./chunk-B7PRQ6ZM.js";import"./chunk-XWDTDVL5.js";import"./chunk-X5NUVPAF.js";import"./chunk-HBXQFJ2K.js";import"./chunk-ETDHHU35.js";import"./chunk-LM633YUO.js";export{e as connectBrowser,o as forceDisconnect,t as getCacheStatus};
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from "module";
3
+ const require = __createRequire(import.meta.url);
4
+ import{Y as y,h as O,j as I,m as S,n as A,o as k,u as C,v as P}from"./chunk-Y64TKFRF.js";import"./chunk-7W6YLS2E.js";import"./chunk-VBI4DDSS.js";import"./chunk-KI54PAOH.js";import"./chunk-4DIUHKFB.js";import"./chunk-2BZVD336.js";import"./chunk-HHCLRZRA.js";import"./chunk-67R4GP2H.js";import"./chunk-5GG34OWS.js";import"./chunk-OZ36UVHR.js";import"./chunk-UBUBM7F7.js";import"./chunk-B7PRQ6ZM.js";import"./chunk-XWDTDVL5.js";import"./chunk-X5NUVPAF.js";import{a as f,d as T}from"./chunk-HBXQFJ2K.js";import"./chunk-ETDHHU35.js";import"./chunk-LM633YUO.js";import{Server as oe}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as te}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as re,ListToolsRequestSchema as ne,ListResourcesRequestSchema as ie,ReadResourceRequestSchema as ae,ListPromptsRequestSchema as le,GetPromptRequestSchema as ce,ErrorCode as E,McpError as L}from"@modelcontextprotocol/sdk/types.js";import H from"axios";import pe from"dotenv";var V=new Set(["click","double_click","right_click","hover"]),q=new Set(["press","send_keys_on_element"]),F=`
5
+ @keyframes _sl_ripple {
6
+ 0% { transform: translate(-50%,-50%) scale(1.0); opacity: 1; }
7
+ 60% { transform: translate(-50%,-50%) scale(1.8); opacity: 0.9; }
8
+ 100% { transform: translate(-50%,-50%) scale(4.0); opacity: 0; }
9
+ }
10
+ @keyframes _sl_dot {
11
+ 0% { transform: translate(-50%,-50%) scale(1.0); opacity: 1; }
12
+ 40% { transform: translate(-50%,-50%) scale(1.0); opacity: 1; }
13
+ 100% { transform: translate(-50%,-50%) scale(0.0); opacity: 0; }
14
+ }
15
+ @keyframes _sl_key_pop {
16
+ 0% { opacity: 0; transform: scale(0.6); }
17
+ 15% { opacity: 1; transform: scale(1.15); }
18
+ 25% { transform: scale(1.0); }
19
+ 75% { opacity: 1; transform: scale(1.0); }
20
+ 100% { opacity: 0; transform: scale(0.9); }
21
+ }
22
+ `;async function G(t,s,a,r,e){if(await t.evaluate(o=>{if(document.getElementById("_sl_styles"))return;let n=document.createElement("style");n.id="_sl_styles",n.textContent=o,document.head.appendChild(n)},F).catch(()=>{}),V.has(s)){let o=a.element_index;if(typeof o=="number"){let n=null;if(r){let i=r.selectorMap.get(o),l=i?.viewportCoordinates?.center;if(l)n=l;else if(i?.xpath)try{let c=i.xpath.startsWith("//")?i.xpath:`//${i.xpath}`,u=await t.locator(`xpath=${c}`).first().boundingBox({timeout:2e3});u&&(n={x:u.x+u.width/2,y:u.y+u.height/2})}catch{}}if(n){let{x:i,y:l}=n,c=s==="double_click";T.debug(`[indicator] ${s} at (${Math.round(i)}, ${Math.round(l)})`),await t.evaluate(({x:u,y:x,isDouble:D})=>{let m=window;m._sl_timers&&(m._sl_timers.forEach(p=>clearTimeout(p)),document.querySelectorAll("._sl_indicator").forEach(p=>p.remove())),m._sl_timers=[];function _(p){let h=document.createElement("div");h.className="_sl_indicator",h.style.cssText=["position:fixed",`left:${u}px`,`top:${x}px`,"width:80px","height:80px","border-radius:50%","background:rgba(255,30,30,0.25)","border:5px solid rgba(255,30,30,0.9)","pointer-events:none","z-index:2147483647",`animation:_sl_ripple 0.9s ${p}ms ease-out forwards`].join(";"),document.body.appendChild(h),m._sl_timers.push(setTimeout(()=>h.remove(),1e3+p))}function U(){let p=document.createElement("div");p.className="_sl_indicator",p.style.cssText=["position:fixed",`left:${u}px`,`top:${x}px`,"width:28px","height:28px","border-radius:50%","background:rgba(255,30,30,0.95)","pointer-events:none","z-index:2147483647","animation:_sl_dot 0.8s ease-in forwards"].join(";"),document.body.appendChild(p),m._sl_timers.push(setTimeout(()=>p.remove(),850))}_(0),_(200),U(),D&&(_(400),_(600))},{x:i,y:l,isDouble:c}),e&&await t.waitForTimeout(300)}else T.debug(`[indicator] ${s}: no coords for element_index ${o}`)}}else if(q.has(s)){let o=a.keys;typeof o=="string"&&(T.debug(`[indicator] ${s}: keys="${o}"`),await t.evaluate(({keysText:n})=>{let i=window;i._sl_timers&&(i._sl_timers.forEach(c=>clearTimeout(c)),document.querySelectorAll("._sl_indicator").forEach(c=>c.remove())),i._sl_timers=[];let l=document.createElement("div");l.className="_sl_indicator",l.style.cssText=["position:fixed","bottom:32px","left:0","right:0","width:fit-content","margin:0 auto","background:#1a1a1a","color:#fff","padding:14px 28px","border-radius:12px","font-size:28px","font-family:ui-monospace,monospace","font-weight:800","letter-spacing:0.04em","pointer-events:none","z-index:2147483647","border:3px solid rgba(255,255,255,0.25)","box-shadow:0 4px 32px rgba(0,0,0,0.5)","animation:_sl_key_pop 1.4s ease-out forwards"].join(";"),l.textContent="\u2328\uFE0F "+n,document.body.appendChild(l),i._sl_timers.push(setTimeout(()=>l.remove(),1500))},{keysText:o}),e&&await t.waitForTimeout(300))}}var g=class t{static _instance;_logLevel;constructor(){switch(process.env.LOG_LEVEL?.toUpperCase()){case"ERROR":this._logLevel=1;break;case"WARN":this._logLevel=2;break;case"INFO":this._logLevel=3;break;case"DEBUG":this._logLevel=4;break;default:this._logLevel=3}}static getInstance(){return t._instance||(t._instance=new t),t._instance}setLevel(s){this._logLevel=s}debug(...s){this._logLevel>=4&&console.error("[DEBUG]",...s)}info(...s){this._logLevel>=3&&console.error("[INFO]",...s)}warn(...s){this._logLevel>=2&&console.error("[WARN]",...s)}error(...s){this._logLevel>=1&&console.error("[ERROR]",...s)}log(...s){this.info(...s)}},K=g.getInstance(),d=K;import{createHash as Y}from"node:crypto";import{hostname as W,userInfo as j,platform as M,arch as z}from"node:os";import{PostHog as J}from"posthog-node";var X="phc_5Va2dHamGwJWX9qZqyRka5Lann5ATsg3LL4uyU63qin",Z="https://us.i.posthog.com",Q=process.env.SHIPLIGHT_TELEMETRY==="0"||process.env.DO_NOT_TRACK==="1",v=null,N=!1;function ee(){return Q?null:(v||(v=new J(X,{host:Z,flushAt:1,flushInterval:3e4})),v)}function se(){let t=`${W()}:${j().username}:${M()}:${z()}`;return Y("sha256").update(t).digest("hex")}function B(t,s){let a=ee();if(a){N||(d.info("Anonymous usage telemetry enabled. Set SHIPLIGHT_TELEMETRY=0 to disable."),N=!0);try{a.capture({distinctId:se(),event:"mcp_new_session",properties:{product:"mcp-server",version:t,platform:M(),nodeVersion:process.version,cloudMode:s,$geoip_disable:!0,$ip:null}}),a.flush().catch(()=>{})}catch{}}}process.env.PWDEBUG="console";var b=(...t)=>console.error(...t);console.log=b;console.info=b;console.debug=b;process.on("uncaughtException",t=>{console.error("[MCP] Uncaught exception (non-fatal):",t)});process.on("unhandledRejection",t=>{console.error("[MCP] Unhandled rejection (non-fatal):",t)});pe.config({override:!1});async function w(){let{SessionTools:t,RelayTools:s,BrowserTools:a,DebugTools:r,LocalTestTools:e,SessionManager:o,ExtensionRelayServer:n}=await import("./dist-T3EAKPBA.js");return{SessionTools:t,RelayTools:s,BrowserTools:a,DebugTools:r,LocalTestTools:e,SessionManager:o,ExtensionRelayServer:n}}var ue="SHIPLIGHT_API_TOKEN";function $(){return process.env[ue]||null}var R=class{constructor(s=!1,a=null){this.debugMode=s;this.relayPort=a;f({stderrOnly:!0});let r=process.env.API_BASE_URL||"https://api.shiplight.ai";this.server=new oe({name:"shiplight-mcp",version:"1.0.0"},{capabilities:{tools:{},resources:{},prompts:{}}}),this.registry=new k;let e=$();if(this.apiClient=e?new I({apiBaseUrl:r,getApiToken:()=>$()}):null,this.apiClient){let o=new y(this.apiClient);this.testCaseTools=o,this.registry.registerTools(y,o,["getTestCase","getTemplate","getFunction","saveTestCase","saveTestAccount","saveTemplate","saveFunction"])}}server;registry;sessionBackend=null;apiClient;sessionTools=null;browserTools=null;debugTools=null;testCaseTools=null;localTestTools=null;relayTools=null;relayServer=null;async initBrowserTools(){let s=O(process.env),a=process.env.TERMINATION_TIMEOUT?parseInt(process.env.TERMINATION_TIMEOUT,10):null,r={};process.env.GOOGLE_API_KEY&&(r.GOOGLE_API_KEY=process.env.GOOGLE_API_KEY),process.env.ANTHROPIC_API_KEY&&(r.ANTHROPIC_API_KEY=process.env.ANTHROPIC_API_KEY),Object.keys(r).length>0&&f({env:r});let{SessionTools:e,BrowserTools:o,DebugTools:n,LocalTestTools:i,SessionManager:l}=await w();this.sessionBackend=new l({terminationTimeout:a,onBeforeAction:process.env.SHIPLIGHT_ACTION_INDICATORS==="1"?G:void 0}),this.sessionTools=new e(this.sessionBackend,this.apiClient,s),this.browserTools=new o(this.sessionBackend),this.debugTools=new n(this.sessionBackend),this.localTestTools=new i(this.sessionBackend);let{RelayTools:c}=await w();this.relayTools=new c(this.sessionBackend),this.registry.registerAll(e,this.sessionTools).registerAll(o,this.browserTools).registerAll(n,this.debugTools).registerAll(i,this.localTestTools).registerAll(c,this.relayTools)}async startRelayServer(){if(this.relayPort===null)return!1;let s=this.relayPort,{RelayTools:a,ExtensionRelayServer:r}=await w();if(this.relayServer=new r,!this.sessionBackend||!this.relayTools)return d.error("[MCP] Cannot start relay server: session backend not initialized"),!1;try{return await this.relayServer.start(s),d.info(`[MCP] Chrome Extension Relay ready on port ${s}`),this.relayTools.setRelayServer(this.relayServer),this.debugMode&&this.registry.registerAll({toolDefinitions:a.debugToolDefinitions},this.relayTools),!0}catch(e){let o=e;return o.message&&o.message.includes("EADDRINUSE")?d.warn(`[MCP] Port ${s} already in use. Relay disabled for this instance.`):d.error("[MCP] Failed to start relay server:",e),this.relayServer=null,!1}}setupHandlers(){let{tools:s,handleToolCall:a}=this.registry.build();this.server.setRequestHandler(ne,async()=>({tools:s})),this.server.setRequestHandler(re,async r=>{try{let{name:e,arguments:o}=r.params,n=await a(e,o);return e==="new_session"&&B("0.1.50",!!this.apiClient),{content:[{type:"text",text:n}]}}catch(e){let o=e instanceof Error?e.message:String(e);if(H.isAxiosError(e)){let n=e.config?.url,i=e.config?.baseURL,l=e.response?.status;o=`${e.code||"AxiosError"}: ${e.message}`,(i||n)&&(o+=` (${i||""}${n||""})`),l&&(o+=` [${l}]`),console.error(`[MCP] API error: ${o}`)}throw H.isAxiosError(e)&&e.response?.status===401&&(o="Authentication required. Contact info@shiplight.ai to get access to cloud services and advanced features."),new L(E.InternalError,o)}}),this.server.setRequestHandler(ie,async()=>({resources:C()})),this.server.setRequestHandler(ae,async r=>{let{uri:e}=r.params,o=await P(e);if(!o)throw new L(E.InvalidRequest,`Unknown resource: ${e}`);return{contents:[{uri:e,mimeType:"text/markdown",text:o}]}}),this.server.setRequestHandler(le,async()=>({prompts:A().map(e=>({name:e.name,description:e.description}))})),this.server.setRequestHandler(ce,async r=>{let{name:e}=r.params,o=S(e);if(!o)throw new L(E.InvalidRequest,`Unknown prompt: ${e}`);return{messages:[{role:"user",content:{type:"text",text:o}}]}})}async run(){await this.initBrowserTools(),await this.startRelayServer(),this.setupHandlers();let s=new te;await this.server.connect(s),d.info("Shiplight MCP Server running on stdio")}};async function Ce(){let t=process.argv.includes("--debug"),s=process.env.SHIPLIGHT_RELAY_PORT&&parseInt(process.env.SHIPLIGHT_RELAY_PORT,10)||null;await new R(t,s).run()}export{Ce as startServer};
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __createRequire } from "module";
3
3
  const require = __createRequire(import.meta.url);
4
- import{h as E}from"./chunk-JT3U4KNR.js";import{b as _,c as I,d as C,l as N,o as R}from"./chunk-34YV5HSR.js";import{a as r}from"./chunk-Z3E7FIDS.js";import"./chunk-B7PRQ6ZM.js";import{l as O}from"./chunk-PFLXO7G4.js";import"./chunk-JKHKVGEC.js";import"./chunk-ETDHHU35.js";import"./chunk-LM633YUO.js";import{createRequire as M}from"module";import{z as x}from"zod";var X=M(import.meta.url);function D(t,s,e){let o=()=>t.stepHistory.length===0?"":`**Recent Steps**:
4
+ import{h as E}from"./chunk-2BZVD336.js";import{b as _,c as I,d as C,l as N,o as R}from"./chunk-OZ36UVHR.js";import{a as r}from"./chunk-UBUBM7F7.js";import"./chunk-B7PRQ6ZM.js";import{l as O}from"./chunk-X5NUVPAF.js";import"./chunk-HBXQFJ2K.js";import"./chunk-ETDHHU35.js";import"./chunk-LM633YUO.js";import{createRequire as M}from"module";import{z as x}from"zod";var X=M(import.meta.url);function D(t,s,e){let o=()=>t.stepHistory.length===0?"":`**Recent Steps**:
5
5
  ${t.stepHistory.slice(-3).map(a=>{let n=`${a.outcome.success?"\u2713":"\u2717"} Step ${a.stepNumber}: ${a.goal}`;if(a.actions.length>1)a.actions.forEach((c,l)=>{let h=c.action_description||"Unknown action";n+=`
6
6
  \u2192 Action ${l+1}: ${h}`});else if(a.actions.length===1){let c=a.actions[0]?.action_description||"Unknown action";n+=`
7
7
  \u2192 ${c}`}if(!a.outcome.success&&a.outcome.error){let c=a.outcome.error.substring(0,100);n+=`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shiplightai/mcp",
3
- "version": "0.1.49",
3
+ "version": "0.1.50",
4
4
  "type": "module",
5
5
  "description": "Shiplight MCP server for AI-powered test automation",
6
6
  "main": "dist/index.js",
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env node
2
- import { createRequire as __createRequire } from "module";
3
- const require = __createRequire(import.meta.url);
4
- import{i as a,m as e,n as o,o as r,p as t,q as i,r as s}from"./chunk-HQNPMIQW.js";import"./chunk-JT3U4KNR.js";import"./chunk-Z3E7FIDS.js";import"./chunk-JKHKVGEC.js";import"./chunk-ETDHHU35.js";import"./chunk-LM633YUO.js";import{createRequire as n}from"module";var c=n(import.meta.url);export{a as LoginType,e as checkLocators,t as createUnsignedInContext,s as generateAndValidateLoginLocators,i as generateValidationLocators,r as validateLogin,o as validateLoginLocators};