@everydaydevopsio/pilot 0.6.3 → 0.7.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.
- package/AGENTS.md +5 -0
- package/CHANGELOG.md +16 -0
- package/README.md +19 -2
- package/dist/browser/driver/capabilities.d.ts +22 -0
- package/dist/browser/driver/capabilities.d.ts.map +1 -0
- package/dist/browser/driver/capabilities.js +70 -0
- package/dist/browser/driver/capabilities.js.map +1 -0
- package/dist/browser/driver/cdp-driver.d.ts +77 -0
- package/dist/browser/driver/cdp-driver.d.ts.map +1 -0
- package/dist/browser/driver/cdp-driver.js +190 -0
- package/dist/browser/driver/cdp-driver.js.map +1 -0
- package/dist/browser/driver/factory.d.ts +10 -0
- package/dist/browser/driver/factory.d.ts.map +1 -0
- package/dist/browser/driver/factory.js +23 -0
- package/dist/browser/driver/factory.js.map +1 -0
- package/dist/browser/driver/index.d.ts +6 -0
- package/dist/browser/driver/index.d.ts.map +1 -0
- package/dist/browser/driver/index.js +5 -0
- package/dist/browser/driver/index.js.map +1 -0
- package/dist/browser/driver/types.d.ts +106 -0
- package/dist/browser/driver/types.d.ts.map +1 -0
- package/dist/browser/driver/types.js +25 -0
- package/dist/browser/driver/types.js.map +1 -0
- package/dist/browser/types.d.ts +3 -0
- package/dist/browser/types.d.ts.map +1 -1
- package/dist/commands/connect.d.ts +2 -2
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +2 -2
- package/dist/commands/connect.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -15
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +32 -74
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/browser.d.ts +2 -3
- package/dist/mcp/tools/browser.d.ts.map +1 -1
- package/dist/mcp/tools/browser.js +38 -72
- package/dist/mcp/tools/browser.js.map +1 -1
- package/dist/mcp/tools/connect.d.ts +2 -3
- package/dist/mcp/tools/connect.d.ts.map +1 -1
- package/dist/mcp/tools/connect.js +9 -9
- package/dist/mcp/tools/connect.js.map +1 -1
- package/dist/mcp/tools/driver-context.d.ts +14 -0
- package/dist/mcp/tools/driver-context.d.ts.map +1 -0
- package/dist/mcp/tools/driver-context.js +43 -0
- package/dist/mcp/tools/driver-context.js.map +1 -0
- package/dist/mcp/tools/files.d.ts.map +1 -1
- package/dist/mcp/tools/files.js +5 -15
- package/dist/mcp/tools/files.js.map +1 -1
- package/dist/mcp/tools/interaction.d.ts.map +1 -1
- package/dist/mcp/tools/interaction.js +7 -26
- package/dist/mcp/tools/interaction.js.map +1 -1
- package/dist/mcp/tools/network.d.ts.map +1 -1
- package/dist/mcp/tools/network.js +3 -11
- package/dist/mcp/tools/network.js.map +1 -1
- package/dist/mcp/tools/performance.d.ts.map +1 -1
- package/dist/mcp/tools/performance.js +2 -12
- package/dist/mcp/tools/performance.js.map +1 -1
- package/dist/mcp/tools/snapshot.d.ts.map +1 -1
- package/dist/mcp/tools/snapshot.js +3 -14
- package/dist/mcp/tools/snapshot.js.map +1 -1
- package/dist/mcp/tools/styles.d.ts.map +1 -1
- package/dist/mcp/tools/styles.js +2 -11
- package/dist/mcp/tools/styles.js.map +1 -1
- package/package.json +1 -1
- package/src/browser/driver/capabilities.ts +88 -0
- package/src/browser/driver/cdp-driver.ts +260 -0
- package/src/browser/driver/factory.ts +33 -0
- package/src/browser/driver/index.ts +22 -0
- package/src/browser/driver/types.ts +156 -0
- package/src/browser/types.ts +3 -0
- package/src/commands/connect.ts +3 -3
- package/src/mcp/server.ts +48 -91
- package/src/mcp/tools/browser.ts +39 -90
- package/src/mcp/tools/connect.ts +10 -11
- package/src/mcp/tools/driver-context.ts +56 -0
- package/src/mcp/tools/files.ts +5 -16
- package/src/mcp/tools/interaction.ts +7 -27
- package/src/mcp/tools/network.ts +2 -12
- package/src/mcp/tools/performance.ts +2 -13
- package/src/mcp/tools/snapshot.ts +3 -15
- package/src/mcp/tools/styles.ts +2 -12
|
@@ -1,21 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import type { BrowserContext } from '../server.js';
|
|
4
|
-
import {
|
|
5
|
-
import { executeHover } from '../../commands/hover.js';
|
|
6
|
-
import { executePressKey } from '../../commands/press_key.js';
|
|
7
|
-
import { executeSelect } from '../../commands/select.js';
|
|
8
|
-
import { executeCheck } from '../../commands/check.js';
|
|
9
|
-
import { executeScroll } from '../../commands/scroll.js';
|
|
10
|
-
|
|
11
|
-
function requireContext(context: BrowserContext) {
|
|
12
|
-
const manager = context.manager;
|
|
13
|
-
if (!manager || !manager.isConnected()) {
|
|
14
|
-
throw new Error('Browser not started. Call browser_start first.');
|
|
15
|
-
}
|
|
16
|
-
const client = manager.getClient()!;
|
|
17
|
-
return { client, refMap: context.elementRefMap };
|
|
18
|
-
}
|
|
4
|
+
import { requireDriver } from './driver-context.js';
|
|
19
5
|
|
|
20
6
|
const fillShape = {
|
|
21
7
|
ref: z.string().describe('Element ref from browser_snapshot (e.g. "e3")'),
|
|
@@ -81,8 +67,7 @@ export function registerInteractionTools(
|
|
|
81
67
|
'Fill a form field by element ref. Replaces the entire field value and fires input/change events compatible with React, Vue, and Svelte. Use browser_snapshot first to get refs.',
|
|
82
68
|
fillShape,
|
|
83
69
|
async ({ ref, value }) => {
|
|
84
|
-
const {
|
|
85
|
-
const result = await executeFill(client, refMap, { ref, value });
|
|
70
|
+
const result = await requireDriver(context).fill({ ref, value });
|
|
86
71
|
return {
|
|
87
72
|
content: [
|
|
88
73
|
{
|
|
@@ -113,8 +98,7 @@ export function registerInteractionTools(
|
|
|
113
98
|
isError: true
|
|
114
99
|
};
|
|
115
100
|
}
|
|
116
|
-
const
|
|
117
|
-
const result = await executeHover(client, refMap, params);
|
|
101
|
+
const result = await requireDriver(context).hover(params);
|
|
118
102
|
return {
|
|
119
103
|
content: [
|
|
120
104
|
{
|
|
@@ -131,8 +115,7 @@ export function registerInteractionTools(
|
|
|
131
115
|
'Press a key or key combination. Supports named keys (Enter, Tab, Escape, etc.) and modifier combos (Control+a, Meta+c, Shift+Enter).',
|
|
132
116
|
pressKeyShape,
|
|
133
117
|
async ({ key }) => {
|
|
134
|
-
const
|
|
135
|
-
const result = await executePressKey(client, { key });
|
|
118
|
+
const result = await requireDriver(context).pressKey({ key });
|
|
136
119
|
const modStr =
|
|
137
120
|
result.modifiers.length > 0
|
|
138
121
|
? ` with modifiers: ${result.modifiers.join('+')}`
|
|
@@ -165,8 +148,7 @@ export function registerInteractionTools(
|
|
|
165
148
|
isError: true
|
|
166
149
|
};
|
|
167
150
|
}
|
|
168
|
-
const
|
|
169
|
-
const result = await executeSelect(client, refMap, params);
|
|
151
|
+
const result = await requireDriver(context).select(params);
|
|
170
152
|
return {
|
|
171
153
|
content: [
|
|
172
154
|
{
|
|
@@ -183,8 +165,7 @@ export function registerInteractionTools(
|
|
|
183
165
|
'Toggle a checkbox or radio button by ref. Optionally set to a specific checked state.',
|
|
184
166
|
checkShape,
|
|
185
167
|
async ({ ref, checked }) => {
|
|
186
|
-
const {
|
|
187
|
-
const result = await executeCheck(client, refMap, { ref, checked });
|
|
168
|
+
const result = await requireDriver(context).check({ ref, checked });
|
|
188
169
|
return {
|
|
189
170
|
content: [
|
|
190
171
|
{
|
|
@@ -217,8 +198,7 @@ export function registerInteractionTools(
|
|
|
217
198
|
isError: true
|
|
218
199
|
};
|
|
219
200
|
}
|
|
220
|
-
const
|
|
221
|
-
const result = await executeScroll(client, refMap, params);
|
|
201
|
+
const result = await requireDriver(context).scroll(params);
|
|
222
202
|
return {
|
|
223
203
|
content: [
|
|
224
204
|
{
|
package/src/mcp/tools/network.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import type { BrowserContext } from '../server.js';
|
|
4
|
+
import { requireDriver } from './driver-context.js';
|
|
4
5
|
import {
|
|
5
|
-
executeNetwork,
|
|
6
6
|
formatNetworkList,
|
|
7
7
|
formatNetworkDetail
|
|
8
8
|
} from '../../commands/network.js';
|
|
@@ -48,15 +48,6 @@ const networkShape = {
|
|
|
48
48
|
.describe('Maximum number of results (list only)')
|
|
49
49
|
};
|
|
50
50
|
|
|
51
|
-
function requireContext(context: BrowserContext) {
|
|
52
|
-
const manager = context.manager;
|
|
53
|
-
if (!manager || !manager.isConnected()) {
|
|
54
|
-
throw new Error('Browser not started. Call browser_start first.');
|
|
55
|
-
}
|
|
56
|
-
const client = manager.getClient()!;
|
|
57
|
-
return { client, networkBuffer: context.networkBuffer };
|
|
58
|
-
}
|
|
59
|
-
|
|
60
51
|
export function registerNetworkTools(
|
|
61
52
|
server: McpServer,
|
|
62
53
|
context: BrowserContext
|
|
@@ -66,8 +57,7 @@ export function registerNetworkTools(
|
|
|
66
57
|
'Inspect captured network requests. Actions: "list" shows request summaries with filters (url, method, status, resourceType, failed); "get" returns full detail for a request ID including headers and response body; "clear" resets the buffer.',
|
|
67
58
|
networkShape,
|
|
68
59
|
async (params) => {
|
|
69
|
-
const
|
|
70
|
-
const result = await executeNetwork(client, networkBuffer, params);
|
|
60
|
+
const result = await requireDriver(context).network(params);
|
|
71
61
|
|
|
72
62
|
let text: string;
|
|
73
63
|
if (result.action === 'list') {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import type { BrowserContext } from '../server.js';
|
|
4
|
-
import {
|
|
4
|
+
import { requireDriver } from './driver-context.js';
|
|
5
5
|
|
|
6
6
|
const performanceShape = {
|
|
7
7
|
action: z
|
|
@@ -11,14 +11,6 @@ const performanceShape = {
|
|
|
11
11
|
)
|
|
12
12
|
};
|
|
13
13
|
|
|
14
|
-
function requireContext(context: BrowserContext) {
|
|
15
|
-
const manager = context.manager;
|
|
16
|
-
if (!manager || !manager.isConnected()) {
|
|
17
|
-
throw new Error('Browser not started. Call browser_start first.');
|
|
18
|
-
}
|
|
19
|
-
return { client: manager.getClient()! };
|
|
20
|
-
}
|
|
21
|
-
|
|
22
14
|
export function registerPerformanceTools(
|
|
23
15
|
server: McpServer,
|
|
24
16
|
context: BrowserContext
|
|
@@ -28,10 +20,7 @@ export function registerPerformanceTools(
|
|
|
28
20
|
'Inspect page performance. Actions: "start" begins tracing (call before navigating), "stop" ends collection, "analyze" returns an agent-friendly summary with navigation timing, long tasks, slow requests, large resources, and JS execution time.',
|
|
29
21
|
performanceShape,
|
|
30
22
|
async ({ action }) => {
|
|
31
|
-
const
|
|
32
|
-
const result = await executePerformance(client, context.traceState, {
|
|
33
|
-
action
|
|
34
|
-
});
|
|
23
|
+
const result = await requireDriver(context).performance({ action });
|
|
35
24
|
return {
|
|
36
25
|
content: [{ type: 'text' as const, text: result.text }]
|
|
37
26
|
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import type { BrowserContext } from '../server.js';
|
|
4
|
-
import {
|
|
5
|
-
import { executeFind } from '../../commands/find.js';
|
|
4
|
+
import { requireDriver } from './driver-context.js';
|
|
6
5
|
|
|
7
6
|
const findShape = {
|
|
8
7
|
role: z
|
|
@@ -23,15 +22,6 @@ const findShape = {
|
|
|
23
22
|
)
|
|
24
23
|
};
|
|
25
24
|
|
|
26
|
-
function requireContext(context: BrowserContext) {
|
|
27
|
-
const manager = context.manager;
|
|
28
|
-
if (!manager || !manager.isConnected()) {
|
|
29
|
-
throw new Error('Browser not started. Call browser_start first.');
|
|
30
|
-
}
|
|
31
|
-
const client = manager.getClient()!;
|
|
32
|
-
return { client, refMap: context.elementRefMap };
|
|
33
|
-
}
|
|
34
|
-
|
|
35
25
|
export function registerSnapshotTools(
|
|
36
26
|
server: McpServer,
|
|
37
27
|
context: BrowserContext
|
|
@@ -41,8 +31,7 @@ export function registerSnapshotTools(
|
|
|
41
31
|
'Capture a structured accessibility snapshot of the current page. Returns interactive and meaningful elements with short refs (e1, e2, ...) that can be used with browser_click and other interaction tools instead of CSS selectors.',
|
|
42
32
|
{},
|
|
43
33
|
async () => {
|
|
44
|
-
const
|
|
45
|
-
const result = await executeSnapshot(client, refMap);
|
|
34
|
+
const result = await requireDriver(context).snapshot();
|
|
46
35
|
return {
|
|
47
36
|
content: [{ type: 'text' as const, text: result.text }]
|
|
48
37
|
};
|
|
@@ -54,8 +43,7 @@ export function registerSnapshotTools(
|
|
|
54
43
|
'Find elements in the current page matching a query. Takes a new snapshot and filters by role, name, or text. Returns matching elements with refs.',
|
|
55
44
|
findShape,
|
|
56
45
|
async ({ role, name, text }) => {
|
|
57
|
-
const {
|
|
58
|
-
const result = await executeFind(client, refMap, { role, name, text });
|
|
46
|
+
const result = await requireDriver(context).find({ role, name, text });
|
|
59
47
|
return {
|
|
60
48
|
content: [{ type: 'text' as const, text: result.text }]
|
|
61
49
|
};
|
package/src/mcp/tools/styles.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import type { BrowserContext } from '../server.js';
|
|
4
|
-
import {
|
|
4
|
+
import { requireDriver } from './driver-context.js';
|
|
5
5
|
|
|
6
6
|
const stylesShape = {
|
|
7
7
|
ref: z.string().describe('Element ref from browser_snapshot (e.g. "e3")'),
|
|
@@ -13,15 +13,6 @@ const stylesShape = {
|
|
|
13
13
|
)
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
function requireContext(context: BrowserContext) {
|
|
17
|
-
const manager = context.manager;
|
|
18
|
-
if (!manager || !manager.isConnected()) {
|
|
19
|
-
throw new Error('Browser not started. Call browser_start first.');
|
|
20
|
-
}
|
|
21
|
-
const client = manager.getClient()!;
|
|
22
|
-
return { client, refMap: context.elementRefMap };
|
|
23
|
-
}
|
|
24
|
-
|
|
25
16
|
export function registerStylesTools(
|
|
26
17
|
server: McpServer,
|
|
27
18
|
context: BrowserContext
|
|
@@ -31,8 +22,7 @@ export function registerStylesTools(
|
|
|
31
22
|
'Inspect computed styles, matched CSS rules, and box model for an element by ref. Helps diagnose visibility issues (display:none, opacity:0), layout problems (margins, positioning, overflow), and identify which CSS rule is responsible for a property. Use browser_snapshot first to get refs.',
|
|
32
23
|
stylesShape,
|
|
33
24
|
async ({ ref, properties }) => {
|
|
34
|
-
const {
|
|
35
|
-
const result = await executeStyles(client, refMap, { ref, properties });
|
|
25
|
+
const result = await requireDriver(context).styles({ ref, properties });
|
|
36
26
|
return {
|
|
37
27
|
content: [{ type: 'text' as const, text: result.text }]
|
|
38
28
|
};
|