This commit is contained in:
Tommy D. Rossi
2025-11-16 11:58:30 +01:00
parent 66112f2818
commit a07d75ebf3
3 changed files with 24 additions and 7 deletions
+8
View File
@@ -1,5 +1,13 @@
# Changelog # Changelog
## 0.0.4
### Patch Changes
- Added `context` field to `State` type
- Renamed `ToolState` interface to `State`
- Limit execute tool output to 1000 characters with truncation message
## 0.0.3 ## 0.0.3
### Patch Changes ### Patch Changes
+2 -2
View File
@@ -1,9 +1,9 @@
{ {
"name": "playwriter", "name": "playwriter",
"description": "", "description": "",
"version": "0.0.3", "version": "0.0.4",
"type": "module", "type": "module",
"repository": "https://github.com/remorses/", "repository": "https://github.com/remorses/playwriter",
"scripts": { "scripts": {
"build": "rm -rf dist *.tsbuildinfo && mkdir dist && cp src/resource.md src/prompt.md dist/ && tsc", "build": "rm -rf dist *.tsbuildinfo && mkdir dist && cp src/resource.md src/prompt.md dist/ && tsc",
"prepublishOnly": "pnpm build", "prepublishOnly": "pnpm build",
+14 -5
View File
@@ -1,7 +1,7 @@
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js' import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js' import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
import { z } from 'zod' import { z } from 'zod'
import { Page, Browser, chromium } from 'playwright-core' import { Page, Browser, BrowserContext, chromium } from 'playwright-core'
import fs from 'node:fs' import fs from 'node:fs'
import path from 'node:path' import path from 'node:path'
import { spawn } from 'node:child_process' import { spawn } from 'node:child_process'
@@ -10,16 +10,18 @@ import vm from 'node:vm'
const require = createRequire(import.meta.url) const require = createRequire(import.meta.url)
interface ToolState { interface State {
isConnected: boolean isConnected: boolean
page: Page | null page: Page | null
browser: Browser | null browser: Browser | null
context: BrowserContext | null
} }
const state: ToolState = { const state: State = {
isConnected: false, isConnected: false,
page: null, page: null,
browser: null, browser: null,
context: null,
} }
const RELAY_PORT = 19988 const RELAY_PORT = 19988
@@ -76,6 +78,7 @@ async function ensureConnection(): Promise<{ browser: Browser; page: Page }> {
state.browser = browser state.browser = browser
state.page = page state.page = page
state.context = context
state.isConnected = true state.isConnected = true
return { browser, page } return { browser, page }
@@ -125,7 +128,7 @@ server.tool(
await ensureConnection() await ensureConnection()
const page = await getCurrentPage() const page = await getCurrentPage()
const context = page.context() const context = state.context || page.context()
console.error('Executing code:', code) console.error('Executing code:', code)
try { try {
@@ -197,11 +200,17 @@ server.tool(
responseText += 'Code executed successfully (no output)' responseText += 'Code executed successfully (no output)'
} }
const MAX_LENGTH = 1000
let finalText = responseText.trim()
if (finalText.length > MAX_LENGTH) {
finalText = finalText.slice(0, MAX_LENGTH) + `\n\n[Truncated to ${MAX_LENGTH} characters. Better manage your logs or paginate them to read the full logs]`
}
return { return {
content: [ content: [
{ {
type: 'text', type: 'text',
text: responseText.trim(), text: finalText,
}, },
], ],
} }