@e2edev/e2e 0.11.0 → 0.12.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/README.md +3 -3
- package/dist/agent/act.d.ts +30 -2
- package/dist/agent/act.d.ts.map +1 -1
- package/dist/agent/act.js +4 -4
- package/dist/agent/act.js.map +1 -1
- package/dist/agent/default-agent.d.ts +16 -7
- package/dist/agent/default-agent.d.ts.map +1 -1
- package/dist/agent/default-agent.js +35 -34
- package/dist/agent/default-agent.js.map +1 -1
- package/dist/agent/interactive-step.d.ts +38 -0
- package/dist/agent/interactive-step.d.ts.map +1 -0
- package/dist/agent/interactive-step.js +131 -0
- package/dist/agent/interactive-step.js.map +1 -0
- package/dist/agent/model/tool-choice.d.ts +21 -0
- package/dist/agent/model/tool-choice.d.ts.map +1 -0
- package/dist/agent/model/tool-choice.js +49 -0
- package/dist/agent/model/tool-choice.js.map +1 -0
- package/dist/agent/tool-loop.d.ts +4 -4
- package/dist/agent/tool-loop.d.ts.map +1 -1
- package/dist/agent/tool-loop.js +100 -23
- package/dist/agent/tool-loop.js.map +1 -1
- package/dist/cli/docs-url.d.ts +1 -1
- package/dist/cli/docs-url.d.ts.map +1 -1
- package/dist/cli/docs-url.js +1 -1
- package/dist/cli/docs-url.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +22 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/engine-versions.json +1 -1
- package/dist/cli/init/engines.d.ts +16 -15
- package/dist/cli/init/engines.d.ts.map +1 -1
- package/dist/cli/init/engines.js +23 -23
- package/dist/cli/init/engines.js.map +1 -1
- package/dist/cli/init/mcp-config.d.ts +31 -0
- package/dist/cli/init/mcp-config.d.ts.map +1 -0
- package/dist/cli/init/mcp-config.js +72 -0
- package/dist/cli/init/mcp-config.js.map +1 -0
- package/dist/cli/init/scaffold.d.ts +1 -1
- package/dist/cli/init/scaffold.js +1 -1
- package/dist/cli/init/scaffold.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +64 -28
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/mcp.d.ts +15 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +63 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/collect/registry.d.ts.map +1 -1
- package/dist/collect/registry.js +23 -2
- package/dist/collect/registry.js.map +1 -1
- package/dist/collect/select.d.ts +9 -2
- package/dist/collect/select.d.ts.map +1 -1
- package/dist/collect/select.js +57 -11
- package/dist/collect/select.js.map +1 -1
- package/dist/config/resolve.d.ts +8 -5
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +11 -9
- package/dist/config/resolve.js.map +1 -1
- package/dist/credentials.d.ts +6 -0
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +9 -0
- package/dist/credentials.js.map +1 -1
- package/dist/explore/index.d.ts.map +1 -1
- package/dist/explore/index.js +6 -4
- package/dist/explore/index.js.map +1 -1
- package/dist/internal/ai-trace.d.ts +2 -0
- package/dist/internal/ai-trace.d.ts.map +1 -1
- package/dist/internal/ai-trace.js +3 -0
- package/dist/internal/ai-trace.js.map +1 -1
- package/dist/internal/ids.d.ts +2 -2
- package/dist/internal/ids.d.ts.map +1 -1
- package/dist/internal/ids.js +3 -3
- package/dist/internal/ids.js.map +1 -1
- package/dist/internal/package-manager.d.ts +4 -0
- package/dist/internal/package-manager.d.ts.map +1 -1
- package/dist/internal/package-manager.js +26 -0
- package/dist/internal/package-manager.js.map +1 -1
- package/dist/mcp/catalog.d.ts +50 -0
- package/dist/mcp/catalog.d.ts.map +1 -0
- package/dist/mcp/catalog.js +172 -0
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/mcp/config.d.ts +11 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +16 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/server.d.ts +29 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +86 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session.d.ts +68 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +317 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/tools.d.ts +77 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +179 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/report/build.d.ts +8 -0
- package/dist/report/build.d.ts.map +1 -1
- package/dist/report/build.js +3 -1
- package/dist/report/build.js.map +1 -1
- package/dist/report/format.d.ts +19 -0
- package/dist/report/format.d.ts.map +1 -1
- package/dist/report/format.js +42 -0
- package/dist/report/format.js.map +1 -1
- package/dist/report/junit.d.ts.map +1 -1
- package/dist/report/junit.js +4 -1
- package/dist/report/junit.js.map +1 -1
- package/dist/report/list.d.ts +10 -1
- package/dist/report/list.d.ts.map +1 -1
- package/dist/report/list.js +35 -13
- package/dist/report/list.js.map +1 -1
- package/dist/run/events.d.ts +12 -3
- package/dist/run/events.d.ts.map +1 -1
- package/dist/run/events.js.map +1 -1
- package/dist/run/execute.d.ts +2 -2
- package/dist/run/execute.d.ts.map +1 -1
- package/dist/run/execute.js +19 -14
- package/dist/run/execute.js.map +1 -1
- package/dist/run/fixtures.d.ts +10 -4
- package/dist/run/fixtures.d.ts.map +1 -1
- package/dist/run/fixtures.js +23 -23
- package/dist/run/fixtures.js.map +1 -1
- package/dist/run/in-process.d.ts.map +1 -1
- package/dist/run/in-process.js +4 -3
- package/dist/run/in-process.js.map +1 -1
- package/dist/run/provision.d.ts +51 -0
- package/dist/run/provision.d.ts.map +1 -0
- package/dist/run/provision.js +94 -0
- package/dist/run/provision.js.map +1 -0
- package/dist/run/records.d.ts +4 -0
- package/dist/run/records.d.ts.map +1 -1
- package/dist/run/runner.d.ts +5 -2
- package/dist/run/runner.d.ts.map +1 -1
- package/dist/run/runner.js +21 -69
- package/dist/run/runner.js.map +1 -1
- package/dist/run/scheduler.d.ts +5 -2
- package/dist/run/scheduler.d.ts.map +1 -1
- package/dist/run/scheduler.js +13 -10
- package/dist/run/scheduler.js.map +1 -1
- package/dist/run/serial.d.ts +1 -1
- package/dist/run/serial.d.ts.map +1 -1
- package/dist/run/serial.js +7 -2
- package/dist/run/serial.js.map +1 -1
- package/dist/run/standalone.d.ts +63 -0
- package/dist/run/standalone.d.ts.map +1 -0
- package/dist/run/standalone.js +152 -0
- package/dist/run/standalone.js.map +1 -0
- package/dist/run/units.d.ts +6 -3
- package/dist/run/units.d.ts.map +1 -1
- package/dist/run/units.js +0 -0
- package/dist/run/units.js.map +1 -1
- package/dist/run/worker/entry.js +2 -2
- package/dist/run/worker/entry.js.map +1 -1
- package/dist/run/worker/protocol.d.ts +5 -0
- package/dist/run/worker/protocol.d.ts.map +1 -1
- package/dist/run/worker/protocol.js.map +1 -1
- package/dist/run/worker/session.d.ts +3 -4
- package/dist/run/worker/session.d.ts.map +1 -1
- package/dist/run/worker/session.js +5 -4
- package/dist/run/worker/session.js.map +1 -1
- package/dist/types.d.ts +8 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -6
- package/skills/e2e/SKILL.md +5 -2
- package/skills/e2e/references/agent.md +2 -2
- package/skills/e2e/references/explore.md +3 -3
- package/skills/e2e/references/mcp.md +88 -0
- package/skills/e2e/references/running.md +4 -3
- package/skills/e2e/references/setup.md +7 -6
|
@@ -8,7 +8,8 @@ export interface EnginePreset {
|
|
|
8
8
|
readonly config: string;
|
|
9
9
|
readonly example: string;
|
|
10
10
|
readonly aiExample?: string;
|
|
11
|
-
|
|
11
|
+
/** Whether the run hint sets APP_URL, for engines that drive a URL. */
|
|
12
|
+
readonly needsAppUrl: boolean;
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
15
|
* The range init writes for an engine. Engines version independently of the
|
|
@@ -22,8 +23,8 @@ export declare function engineRange(version: string | undefined): string;
|
|
|
22
23
|
/** Builds prompt choices and scaffolds with defaults for the machine running init. */
|
|
23
24
|
export declare function getEnginePresets(): readonly [{
|
|
24
25
|
readonly id: 'playwright';
|
|
25
|
-
readonly label: '
|
|
26
|
-
readonly hint: '
|
|
26
|
+
readonly label: 'Web';
|
|
27
|
+
readonly hint: 'Playwright';
|
|
27
28
|
readonly dependencies: Readonly<Record<string, string>>;
|
|
28
29
|
readonly imports: readonly ["import { playwright } from '@e2edev/playwright';"];
|
|
29
30
|
readonly config: ` // The engine declares the app it drives; APP_URL overrides the default at run time.
|
|
@@ -51,7 +52,17 @@ test('app opens', async ({ app, web }) => {
|
|
|
51
52
|
// await agent.assert('one question about the screen');
|
|
52
53
|
// });
|
|
53
54
|
`;
|
|
54
|
-
readonly
|
|
55
|
+
readonly needsAppUrl: true;
|
|
56
|
+
}, {
|
|
57
|
+
readonly id: 'agent-device';
|
|
58
|
+
readonly label: 'Mobile (iOS/Android)';
|
|
59
|
+
readonly hint: 'agent-device';
|
|
60
|
+
readonly dependencies: Readonly<Record<string, string>>;
|
|
61
|
+
readonly imports: readonly ["import { agentDevice } from '@e2edev/agent-device';"];
|
|
62
|
+
readonly config: " // Requires Xcode and an iOS simulator. Replace Settings with your app's bundle ID.\n targets: [{ name: 'ios', engine: agentDevice({ platform: 'ios', app: 'Settings' }) }],\n workers: 1," | " // Requires the Android SDK and an emulator. Replace com.android.settings with your app's package.\n targets: [{ name: 'android', engine: agentDevice({ platform: 'android', app: 'com.android.settings' }) }],\n workers: 1,";
|
|
63
|
+
readonly example: "import { test } from '@e2edev/agent-device';\nimport { expect } from '@e2edev/e2e';\n\ntest('Settings opens', async ({ screen }) => {\n await expect(screen.getByRole('button', { name: 'General' })).toBeVisible();\n});\n" | "import { test } from '@e2edev/agent-device';\nimport { expect } from '@e2edev/e2e';\n\ntest('Settings opens', async ({ screen }) => {\n await expect(screen.getByText('Network & internet')).toBeVisible();\n});\n";
|
|
64
|
+
readonly aiExample: "\n// Runs once the key the model in e2e.config.ts reads is in the environment:\n// test('the agent opens General', async ({ agent, device }) => {\n// await agent.act('open General settings');\n// await expect(device.locator('role=NavigationBar id=General')).toBeVisible();\n// });\n" | "\n// Runs once the key the model in e2e.config.ts reads is in the environment:\n// test('the agent opens Network settings', async ({ agent, device }) => {\n// await agent.act('open Network & internet settings');\n// await expect(device.locator('id=com.android.settings:id/collapsing_toolbar')).toHaveText('Network & internet');\n// });\n";
|
|
65
|
+
readonly needsAppUrl: false;
|
|
55
66
|
}, {
|
|
56
67
|
readonly id: 'none';
|
|
57
68
|
readonly label: 'None';
|
|
@@ -67,17 +78,7 @@ test('app responds', async () => {
|
|
|
67
78
|
expect(response.ok).toBe(true);
|
|
68
79
|
});
|
|
69
80
|
`;
|
|
70
|
-
readonly
|
|
71
|
-
}, {
|
|
72
|
-
readonly id: 'agent-device';
|
|
73
|
-
readonly label: 'agent-device';
|
|
74
|
-
readonly hint: 'mobile testing: iOS and Android';
|
|
75
|
-
readonly dependencies: Readonly<Record<string, string>>;
|
|
76
|
-
readonly imports: readonly ["import { agentDevice } from '@e2edev/agent-device';"];
|
|
77
|
-
readonly config: " // Requires Xcode and an iOS simulator. Replace Settings with your app's bundle ID.\n targets: [{ name: 'ios', engine: agentDevice({ platform: 'ios', app: 'Settings' }) }],\n workers: 1," | " // Requires the Android SDK and an emulator. Replace com.android.settings with your app's package.\n targets: [{ name: 'android', engine: agentDevice({ platform: 'android', app: 'com.android.settings' }) }],\n workers: 1,";
|
|
78
|
-
readonly example: "import { test } from '@e2edev/agent-device';\nimport { expect } from '@e2edev/e2e';\n\ntest('Settings opens', async ({ screen }) => {\n await expect(screen.getByRole('button', { name: 'General' })).toBeVisible();\n});\n" | "import { test } from '@e2edev/agent-device';\nimport { expect } from '@e2edev/e2e';\n\ntest('Settings opens', async ({ screen }) => {\n await expect(screen.getByText('Network & internet')).toBeVisible();\n});\n";
|
|
79
|
-
readonly aiExample: "\n// Runs once the key the model in e2e.config.ts reads is in the environment:\n// test('the agent opens General', async ({ agent, device }) => {\n// await agent.act('open General settings');\n// await expect(device.locator('role=NavigationBar id=General')).toBeVisible();\n// });\n" | "\n// Runs once the key the model in e2e.config.ts reads is in the environment:\n// test('the agent opens Network settings', async ({ agent, device }) => {\n// await agent.act('open Network & internet settings');\n// await expect(device.locator('id=com.android.settings:id/collapsing_toolbar')).toHaveText('Network & internet');\n// });\n";
|
|
80
|
-
readonly runCommand: 'npx --no-install e2e run';
|
|
81
|
+
readonly needsAppUrl: true;
|
|
81
82
|
}];
|
|
82
83
|
export type EngineId = ReturnType<typeof getEnginePresets>[number]['id'];
|
|
83
84
|
export declare const DEFAULT_ENGINE_ID = "playwright";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engines.d.ts","sourceRoot":"","sources":["../../../src/cli/init/engines.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAKhG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"engines.d.ts","sourceRoot":"","sources":["../../../src/cli/init/engines.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAKhG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AASD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE/D;AAMD,sFAAsF;AACtF,wBAAgB,gBAAgB;iBAItB,YAAY;oBACT,KAAK;mBACN,YAAY;;;qBAGV;;;;;;;;MAQR;sBACS;;;;;;;CAOd;wBACgB;;;;;;;CAOhB;;;iBAIS,cAAc;oBACX,sBAAsB;mBACvB,cAAc;;;;;;;;iBAmChB,MAAM;oBACH,MAAM;mBACP,+BAA+B;;;qBAG7B;sDACwC;sBACvC;;;;;;CAMd;;GAIA;AAED,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AACzE,eAAO,MAAM,iBAAiB,eAAkC,CAAC;AAEjE,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,YAAY,CAI1D"}
|
package/dist/cli/init/engines.js
CHANGED
|
@@ -27,8 +27,8 @@ export function getEnginePresets() {
|
|
|
27
27
|
return [
|
|
28
28
|
{
|
|
29
29
|
id: 'playwright',
|
|
30
|
-
label: '
|
|
31
|
-
hint: '
|
|
30
|
+
label: 'Web',
|
|
31
|
+
hint: 'Playwright',
|
|
32
32
|
dependencies: engineDependency('@e2edev/playwright'),
|
|
33
33
|
imports: ["import { playwright } from '@e2edev/playwright';"],
|
|
34
34
|
config: ` // The engine declares the app it drives; APP_URL overrides the default at run time.
|
|
@@ -56,29 +56,12 @@ test('app opens', async ({ app, web }) => {
|
|
|
56
56
|
// await agent.assert('one question about the screen');
|
|
57
57
|
// });
|
|
58
58
|
`,
|
|
59
|
-
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
id: 'none',
|
|
63
|
-
label: 'None',
|
|
64
|
-
hint: 'HTTP tests or your own engine',
|
|
65
|
-
dependencies: {},
|
|
66
|
-
imports: [],
|
|
67
|
-
config: ` // Add an engine here when your tests need to drive an app.
|
|
68
|
-
targets: [{ name: 'default', platform: 'custom' }],`,
|
|
69
|
-
example: `import { test, expect } from '@e2edev/e2e';
|
|
70
|
-
|
|
71
|
-
test('app responds', async () => {
|
|
72
|
-
const response = await fetch(process.env.APP_URL ?? 'http://localhost:3000');
|
|
73
|
-
expect(response.ok).toBe(true);
|
|
74
|
-
});
|
|
75
|
-
`,
|
|
76
|
-
runCommand: 'APP_URL=http://localhost:3000 npx --no-install e2e run',
|
|
59
|
+
needsAppUrl: true,
|
|
77
60
|
},
|
|
78
61
|
{
|
|
79
62
|
id: 'agent-device',
|
|
80
|
-
label: '
|
|
81
|
-
hint: '
|
|
63
|
+
label: 'Mobile (iOS/Android)',
|
|
64
|
+
hint: 'agent-device',
|
|
82
65
|
dependencies: engineDependency('@e2edev/agent-device'),
|
|
83
66
|
imports: ["import { agentDevice } from '@e2edev/agent-device';"],
|
|
84
67
|
config: ios
|
|
@@ -110,7 +93,24 @@ test('Settings opens', async ({ screen }) => {
|
|
|
110
93
|
// await expect(device.locator('id=com.android.settings:id/collapsing_toolbar')).toHaveText('Network & internet');
|
|
111
94
|
// });
|
|
112
95
|
`,
|
|
113
|
-
|
|
96
|
+
needsAppUrl: false,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: 'none',
|
|
100
|
+
label: 'None',
|
|
101
|
+
hint: 'HTTP tests or your own engine',
|
|
102
|
+
dependencies: {},
|
|
103
|
+
imports: [],
|
|
104
|
+
config: ` // Add an engine here when your tests need to drive an app.
|
|
105
|
+
targets: [{ name: 'default', platform: 'custom' }],`,
|
|
106
|
+
example: `import { test, expect } from '@e2edev/e2e';
|
|
107
|
+
|
|
108
|
+
test('app responds', async () => {
|
|
109
|
+
const response = await fetch(process.env.APP_URL ?? 'http://localhost:3000');
|
|
110
|
+
expect(response.ok).toBe(true);
|
|
111
|
+
});
|
|
112
|
+
`,
|
|
113
|
+
needsAppUrl: true,
|
|
114
114
|
},
|
|
115
115
|
];
|
|
116
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engines.js","sourceRoot":"","sources":["../../../src/cli/init/engines.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAEhG,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"engines.js","sourceRoot":"","sources":["../../../src/cli/init/engines.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAEhG,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAe7D;;;;GAIG;AACH,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAiD,CAAC;AAE5H;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,QAAQ,CAAC;IACvC,OAAO;QACL;YACE,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,YAAY;YAClB,YAAY,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;YACpD,OAAO,EAAE,CAAC,kDAAkD,CAAC;YAC7D,MAAM,EAAE;;;;;;;;MAQR;YACA,OAAO,EAAE;;;;;;;CAOd;YACK,SAAS,EAAE;;;;;;;CAOhB;YACK,WAAW,EAAE,IAAI;SAClB;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,sBAAsB;YAC7B,IAAI,EAAE,cAAc;YACpB,YAAY,EAAE,gBAAgB,CAAC,sBAAsB,CAAC;YACtD,OAAO,EAAE,CAAC,qDAAqD,CAAC;YAChE,MAAM,EAAE,GAAG;gBACT,CAAC,CAAC;;cAEI;gBACN,CAAC,CAAC;;cAEI;YACR,OAAO,EAAE;;;;iBAIE,GAAG,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,wCAAwC;;CAElH;YACK,SAAS,EAAE,GAAG;gBACZ,CAAC,CAAC;;;;;;CAMT;gBACO,CAAC,CAAC;;;;;;CAMT;YACK,WAAW,EAAE,KAAK;SACnB;QACD;YACE,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,+BAA+B;YACrC,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,EAAE;YACX,MAAM,EAAE;sDACwC;YAChD,OAAO,EAAE;;;;;;CAMd;YACK,WAAW,EAAE,IAAI;SAClB;KACyC,CAAC;AAC/C,CAAC;AAGD,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAA+B,CAAC;AAEjE,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAAC,EAAY;IAC1C,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `e2e init` step that registers the `e2e mcp` server with the coding
|
|
3
|
+
* agents that read a project-level MCP config file. Each file is JSON with a
|
|
4
|
+
* `mcpServers` map; the entry is merged in and every other server is left
|
|
5
|
+
* exactly as it was.
|
|
6
|
+
*/
|
|
7
|
+
/** Where project-scoped MCP servers are declared. */
|
|
8
|
+
export declare const MCP_LOCATIONS: readonly [{
|
|
9
|
+
readonly file: '.mcp.json';
|
|
10
|
+
readonly hint: 'Claude Code';
|
|
11
|
+
}, {
|
|
12
|
+
readonly file: '.cursor/mcp.json';
|
|
13
|
+
readonly hint: 'Cursor';
|
|
14
|
+
}];
|
|
15
|
+
export interface McpRegistration {
|
|
16
|
+
/** Project-relative file, e.g. `.mcp.json`. */
|
|
17
|
+
readonly relative: string;
|
|
18
|
+
/** True when the file already existed, so the write is an update. */
|
|
19
|
+
readonly existing: boolean;
|
|
20
|
+
readonly absolute: string;
|
|
21
|
+
readonly content: string;
|
|
22
|
+
}
|
|
23
|
+
/** Known config files that already register the e2e server. */
|
|
24
|
+
export declare function findRegisteredMcpFiles(cwd: string): string[];
|
|
25
|
+
/**
|
|
26
|
+
* Plans the writes for the given files. A file without the entry gets it
|
|
27
|
+
* merged in; one whose entry already matches needs nothing and is left out.
|
|
28
|
+
* Other servers, other keys, and the file's indentation are preserved.
|
|
29
|
+
*/
|
|
30
|
+
export declare function planMcpRegistration(cwd: string, files: readonly string[]): McpRegistration[];
|
|
31
|
+
//# sourceMappingURL=mcp-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../../src/cli/init/mcp-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,qDAAqD;AACrD,eAAO,MAAM,aAAa;mBAChB,WAAW;mBAAQ,aAAa;;mBAChC,kBAAkB;mBAAQ,QAAQ;EACD,CAAC;AAO5C,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAsBD,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAS5D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,eAAe,EAAE,CAqB5F"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `e2e init` step that registers the `e2e mcp` server with the coding
|
|
3
|
+
* agents that read a project-level MCP config file. Each file is JSON with a
|
|
4
|
+
* `mcpServers` map; the entry is merged in and every other server is left
|
|
5
|
+
* exactly as it was.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
/** Where project-scoped MCP servers are declared. */
|
|
10
|
+
export const MCP_LOCATIONS = [
|
|
11
|
+
{ file: '.mcp.json', hint: 'Claude Code' },
|
|
12
|
+
{ file: '.cursor/mcp.json', hint: 'Cursor' },
|
|
13
|
+
];
|
|
14
|
+
const MCP_SERVER_NAME = 'e2e';
|
|
15
|
+
/** How every client starts the server: the project's own e2e, never a fetched one. */
|
|
16
|
+
const SERVER_ENTRY = { command: 'npx', args: ['--no-install', 'e2e', 'mcp'] };
|
|
17
|
+
function readDocument(absolute) {
|
|
18
|
+
if (!existsSync(absolute))
|
|
19
|
+
return undefined;
|
|
20
|
+
const text = readFileSync(absolute, 'utf8');
|
|
21
|
+
let parsed;
|
|
22
|
+
try {
|
|
23
|
+
parsed = text.trim() === '' ? {} : JSON.parse(text);
|
|
24
|
+
}
|
|
25
|
+
catch (cause) {
|
|
26
|
+
throw new Error(`${absolute} is not valid JSON; fix it or remove it before registering the MCP server`, { cause });
|
|
27
|
+
}
|
|
28
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
29
|
+
throw new Error(`${absolute} must hold a JSON object with a "mcpServers" map`);
|
|
30
|
+
}
|
|
31
|
+
return parsed;
|
|
32
|
+
}
|
|
33
|
+
/** Known config files that already register the e2e server. */
|
|
34
|
+
export function findRegisteredMcpFiles(cwd) {
|
|
35
|
+
return MCP_LOCATIONS.map((location) => location.file).filter((file) => {
|
|
36
|
+
try {
|
|
37
|
+
const servers = readDocument(path.join(cwd, file))?.mcpServers;
|
|
38
|
+
return typeof servers === 'object' && servers !== null && MCP_SERVER_NAME in servers;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Plans the writes for the given files. A file without the entry gets it
|
|
47
|
+
* merged in; one whose entry already matches needs nothing and is left out.
|
|
48
|
+
* Other servers, other keys, and the file's indentation are preserved.
|
|
49
|
+
*/
|
|
50
|
+
export function planMcpRegistration(cwd, files) {
|
|
51
|
+
const registrations = [];
|
|
52
|
+
for (const file of files) {
|
|
53
|
+
const absolute = path.join(cwd, file);
|
|
54
|
+
const document = readDocument(absolute) ?? {};
|
|
55
|
+
const servers = typeof document.mcpServers === 'object' && document.mcpServers !== null && !Array.isArray(document.mcpServers)
|
|
56
|
+
? document.mcpServers
|
|
57
|
+
: {};
|
|
58
|
+
if (JSON.stringify(servers[MCP_SERVER_NAME]) === JSON.stringify(SERVER_ENTRY))
|
|
59
|
+
continue;
|
|
60
|
+
const merged = { ...document, mcpServers: { ...servers, [MCP_SERVER_NAME]: SERVER_ENTRY } };
|
|
61
|
+
const original = existsSync(absolute) ? readFileSync(absolute, 'utf8') : undefined;
|
|
62
|
+
const indent = original?.match(/\n([\t ]+)"/)?.[1] ?? ' ';
|
|
63
|
+
registrations.push({
|
|
64
|
+
relative: file,
|
|
65
|
+
existing: original !== undefined,
|
|
66
|
+
absolute,
|
|
67
|
+
content: `${JSON.stringify(merged, null, indent)}\n`,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return registrations;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=mcp-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../../src/cli/init/mcp-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,7 +47,7 @@ ${configFields.join('\n')}
|
|
|
47
47
|
} satisfies E2EConfig;
|
|
48
48
|
`,
|
|
49
49
|
example: engine.example + (gateway === undefined ? '' : engine.aiExample ?? ''),
|
|
50
|
-
|
|
50
|
+
needsAppUrl: engine.needsAppUrl,
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
//# sourceMappingURL=scaffold.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../src/cli/init/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAiB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAkB,MAAM,eAAe,CAAC;AAEjE,MAAM,YAAY,GAAG,kDAAkD,CAAC;AAQxE;;;;;GAKG;AACH,SAAS,WAAW,CAAC,KAAoB;IACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO;OACF,MAAM,CAAC,OAAO;;;;eAIN,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;;;KAGtC,CAAC;AACN,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,QAAkB,EAAE,KAAgC;IACjF,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG;QACd,+CAA+C;QAC/C,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAChD,GAAG,MAAM,CAAC,OAAO;QACjB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KACnD,CAAC;IACF,MAAM,YAAY,GAAG;QACnB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM;KACd,CAAC;IAEF,OAAO;QACL,YAAY,EAAE;YACZ,aAAa,EAAE,IAAI,cAAc,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE;YACtF,GAAG,MAAM,CAAC,YAAY;YACtB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;SAC5E;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG/B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;CAExB;QACG,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/E,
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../../src/cli/init/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAiB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAkB,MAAM,eAAe,CAAC;AAEjE,MAAM,YAAY,GAAG,kDAAkD,CAAC;AAQxE;;;;;GAKG;AACH,SAAS,WAAW,CAAC,KAAoB;IACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO;OACF,MAAM,CAAC,OAAO;;;;eAIN,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;;;KAGtC,CAAC;AACN,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,QAAkB,EAAE,KAAgC;IACjF,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG;QACd,+CAA+C;QAC/C,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAChD,GAAG,MAAM,CAAC,OAAO;QACjB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KACnD,CAAC;IACF,MAAM,YAAY,GAAG;QACnB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM;KACd,CAAC;IAEF,OAAO;QACL,YAAY,EAAE;YACZ,aAAa,EAAE,IAAI,cAAc,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE;YACtF,GAAG,MAAM,CAAC,YAAY;YACtB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;SAC5E;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG/B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;CAExB;QACG,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/E,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC;AACJ,CAAC"}
|
package/dist/cli/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,2CAA2C;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAkB3C,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAuBD;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwMlF"}
|
package/dist/cli/init.js
CHANGED
|
@@ -4,12 +4,13 @@ import { spawnSync } from 'node:child_process';
|
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
5
5
|
import os from 'node:os';
|
|
6
6
|
import path from 'node:path';
|
|
7
|
-
import { detectPackageManager } from '../internal/package-manager.js';
|
|
7
|
+
import { detectPackageManager, execCommand, runScriptCommand } from '../internal/package-manager.js';
|
|
8
8
|
import { DOCS_URL } from './docs-url.js';
|
|
9
9
|
import { findInstalledSkillDirs, planSkillInstall, SKILL_LOCATIONS } from './init/agent-skill.js';
|
|
10
10
|
import { isLoopbackHost } from '../internal/urls.js';
|
|
11
11
|
import { getEnginePresets, DEFAULT_ENGINE_ID } from './init/engines.js';
|
|
12
12
|
import { GATEWAYS } from './init/gateways.js';
|
|
13
|
+
import { findRegisteredMcpFiles, MCP_LOCATIONS, planMcpRegistration } from './init/mcp-config.js';
|
|
13
14
|
import { addDependencies, addScripts, describeManifestError, readPackage, serializePackage } from './init/package.js';
|
|
14
15
|
import { createScaffold } from './init/scaffold.js';
|
|
15
16
|
import { MISSING_SKILL_MESSAGE, readSkillFiles } from './skill.js';
|
|
@@ -24,7 +25,8 @@ const GITIGNORE_ENTRIES = [
|
|
|
24
25
|
'.e2e/junit.xml',
|
|
25
26
|
'.e2e/logs/',
|
|
26
27
|
];
|
|
27
|
-
const
|
|
28
|
+
const RUN_SCRIPT = 'test:e2e';
|
|
29
|
+
const SCRIPTS = { [RUN_SCRIPT]: 'e2e run' };
|
|
28
30
|
/** The gateway `--yes` picks; the choice is written into the config either way. */
|
|
29
31
|
const DEFAULT_GATEWAY = 'vercel';
|
|
30
32
|
/**
|
|
@@ -76,7 +78,7 @@ export async function init(cwd, options = {}) {
|
|
|
76
78
|
initialValue: DEFAULT_ENGINE_ID,
|
|
77
79
|
options: getEnginePresets().map(({ id, label, hint }) => ({ value: id, label, hint })),
|
|
78
80
|
});
|
|
79
|
-
if (
|
|
81
|
+
if (isCancelled(selectedEngine))
|
|
80
82
|
return cancelled();
|
|
81
83
|
engine = selectedEngine;
|
|
82
84
|
// The gateway is a visible choice, not a runner default: the config imports
|
|
@@ -89,7 +91,7 @@ export async function init(cwd, options = {}) {
|
|
|
89
91
|
{ value: 'none', label: 'None', hint: 'deterministic tests only; add a gateway later' },
|
|
90
92
|
],
|
|
91
93
|
});
|
|
92
|
-
if (
|
|
94
|
+
if (isCancelled(gateway))
|
|
93
95
|
return cancelled();
|
|
94
96
|
if (gateway === 'none') {
|
|
95
97
|
model = undefined;
|
|
@@ -100,7 +102,7 @@ export async function init(cwd, options = {}) {
|
|
|
100
102
|
placeholder: 'http://127.0.0.1:11434/v1',
|
|
101
103
|
validate: validateEndpoint,
|
|
102
104
|
});
|
|
103
|
-
if (
|
|
105
|
+
if (isCancelled(endpoint))
|
|
104
106
|
return cancelled();
|
|
105
107
|
model = { gateway, endpoint: endpoint.trim() };
|
|
106
108
|
}
|
|
@@ -108,25 +110,21 @@ export async function init(cwd, options = {}) {
|
|
|
108
110
|
model = { gateway };
|
|
109
111
|
}
|
|
110
112
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if (options.yes) {
|
|
115
|
-
skillDirs = SKILL_LOCATIONS.map((location) => location.dir);
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
const selected = await clack.multiselect({
|
|
119
|
-
message: 'Install the e2e skill for coding agents?',
|
|
120
|
-
options: SKILL_LOCATIONS.map(({ dir, hint }) => ({ value: dir, label: dir, hint })),
|
|
121
|
-
initialValues: SKILL_LOCATIONS.map((location) => location.dir),
|
|
122
|
-
required: false,
|
|
123
|
-
});
|
|
124
|
-
if (clack.isCancel(selected))
|
|
125
|
-
return cancelled();
|
|
126
|
-
skillDirs = selected;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
113
|
+
const skillDirs = await chooseLocations(findInstalledSkillDirs(cwd), SKILL_LOCATIONS.map(({ dir, hint }) => ({ value: dir, hint })), 'Install the e2e skill for coding agents?', options.yes);
|
|
114
|
+
if (isCancelled(skillDirs))
|
|
115
|
+
return cancelled();
|
|
129
116
|
const skillInstalls = planSkillInstall(cwd, skillDirs, bundledSkill);
|
|
117
|
+
const mcpFiles = await chooseLocations(findRegisteredMcpFiles(cwd), MCP_LOCATIONS.map(({ file, hint }) => ({ value: file, hint })), 'Register the e2e MCP server for coding agents?', options.yes);
|
|
118
|
+
if (isCancelled(mcpFiles))
|
|
119
|
+
return cancelled();
|
|
120
|
+
let mcpRegistrations;
|
|
121
|
+
try {
|
|
122
|
+
mcpRegistrations = planMcpRegistration(cwd, mcpFiles);
|
|
123
|
+
}
|
|
124
|
+
catch (cause) {
|
|
125
|
+
clack.log.error(cause instanceof Error ? cause.message : String(cause));
|
|
126
|
+
return 2;
|
|
127
|
+
}
|
|
130
128
|
const scaffold = createScaffold(engine, model);
|
|
131
129
|
const dependencies = addDependencies(pkg.manifest, scaffold.dependencies);
|
|
132
130
|
const { manifest, additions: scripts } = addScripts(dependencies.manifest, SCRIPTS);
|
|
@@ -143,7 +141,7 @@ export async function init(cwd, options = {}) {
|
|
|
143
141
|
...(existingConfig === undefined ? [{ relative: 'e2e.config.ts', content: scaffold.config, existing: false }] : []),
|
|
144
142
|
...(exampleExists ? [] : [{ relative: examplePath, content: scaffold.example, existing: false }]),
|
|
145
143
|
];
|
|
146
|
-
if (files.length === 0 && skillInstalls.length === 0 && missingIgnore.length === 0) {
|
|
144
|
+
if (files.length === 0 && skillInstalls.length === 0 && mcpRegistrations.length === 0 && missingIgnore.length === 0) {
|
|
147
145
|
clack.outro('nothing to create; project already initialized');
|
|
148
146
|
return 0;
|
|
149
147
|
}
|
|
@@ -151,17 +149,18 @@ export async function init(cwd, options = {}) {
|
|
|
151
149
|
const actions = [
|
|
152
150
|
...files.map((file) => `${file.existing ? 'update' : 'create'} ${file.relative}`),
|
|
153
151
|
...skillInstalls.map((install) => `${install.existing ? 'update' : 'create'} ${install.relative}/`),
|
|
152
|
+
...mcpRegistrations.map((registration) => `${registration.existing ? 'update' : 'create'} ${registration.relative}`),
|
|
154
153
|
...(missingIgnore.length > 0 ? ['update .gitignore'] : []),
|
|
155
154
|
];
|
|
156
155
|
const proceed = await clack.confirm({ message: `${actions.join(', ')}?` });
|
|
157
|
-
if (
|
|
156
|
+
if (isCancelled(proceed) || !proceed)
|
|
158
157
|
return cancelled();
|
|
159
158
|
}
|
|
160
159
|
const manager = detectPackageManager(cwd, manifest.packageManager);
|
|
161
160
|
let install = false;
|
|
162
161
|
if (!options.yes) {
|
|
163
162
|
const selected = await clack.confirm({ message: `Install dependencies with ${manager}?`, initialValue: true });
|
|
164
|
-
if (
|
|
163
|
+
if (isCancelled(selected))
|
|
165
164
|
return cancelled();
|
|
166
165
|
install = selected;
|
|
167
166
|
}
|
|
@@ -181,7 +180,15 @@ export async function init(cwd, options = {}) {
|
|
|
181
180
|
clack.log.success(`${skill.existing ? 'updated' : 'created'} ${skill.relative}/ (${skill.files.length} files)`);
|
|
182
181
|
}
|
|
183
182
|
if (skillDirs.length === 0) {
|
|
184
|
-
clack.log.info(
|
|
183
|
+
clack.log.info(`skipped the agent skill; agents can still print it with ${execCommand(manager, 'e2e guide')}`);
|
|
184
|
+
}
|
|
185
|
+
for (const registration of mcpRegistrations) {
|
|
186
|
+
mkdirSync(path.dirname(registration.absolute), { recursive: true });
|
|
187
|
+
writeFileSync(registration.absolute, registration.content, 'utf8');
|
|
188
|
+
clack.log.success(`${registration.existing ? 'updated' : 'created'} ${registration.relative} (e2e mcp server)`);
|
|
189
|
+
}
|
|
190
|
+
if (mcpFiles.length === 0) {
|
|
191
|
+
clack.log.info('skipped the MCP server; register it later with: claude mcp add e2e -- npx --no-install e2e mcp');
|
|
185
192
|
}
|
|
186
193
|
if (missingIgnore.length > 0) {
|
|
187
194
|
const prefix = existingIgnore === '' || existingIgnore.endsWith('\n') ? '' : '\n';
|
|
@@ -203,10 +210,14 @@ export async function init(cwd, options = {}) {
|
|
|
203
210
|
if (!existsSync(path.join(cwd, 'tsconfig.json'))) {
|
|
204
211
|
clack.log.info('no tsconfig.json; add one for editor completions on e2e.config.ts and tests/');
|
|
205
212
|
}
|
|
213
|
+
// The script init adds, unless the project already had one of its own under that name.
|
|
214
|
+
const runCommand = /^e2e run(?:\s|$)/u.test(manifest.scripts?.[RUN_SCRIPT] ?? '')
|
|
215
|
+
? runScriptCommand(manager, RUN_SCRIPT)
|
|
216
|
+
: execCommand(manager, 'e2e run');
|
|
206
217
|
const next = [
|
|
207
218
|
options.directory === undefined ? undefined : `cd ${shellArgument(options.directory)}`,
|
|
208
219
|
install ? undefined : `${manager} install`,
|
|
209
|
-
scaffold.runCommand
|
|
220
|
+
`${scaffold.needsAppUrl ? 'APP_URL=http://localhost:3000 ' : ''}${runCommand}`,
|
|
210
221
|
].filter((step) => step !== undefined);
|
|
211
222
|
clack.outro(`next: ${next.join(', then ')}`);
|
|
212
223
|
return 0;
|
|
@@ -238,6 +249,31 @@ function validateEndpoint(value) {
|
|
|
238
249
|
return 'must use HTTPS unless the host is loopback';
|
|
239
250
|
}
|
|
240
251
|
/** Cancellation is only reachable before the first write, so nothing needs undoing. */
|
|
252
|
+
/**
|
|
253
|
+
* `@clack/core` 1.5 narrows `isCancel` to its unique cancel symbol while the
|
|
254
|
+
* prompts still resolve to `Value | symbol`, so the guard alone no longer
|
|
255
|
+
* removes `symbol` from a prompt result. This one does.
|
|
256
|
+
*/
|
|
257
|
+
/**
|
|
258
|
+
* Where an agent-facing artifact (the skill, the MCP registration) goes: the
|
|
259
|
+
* locations an earlier run chose, refreshed and never extended; for a project
|
|
260
|
+
* without one, every known location under `--yes`, else the user's pick.
|
|
261
|
+
*/
|
|
262
|
+
async function chooseLocations(found, locations, message, yes) {
|
|
263
|
+
if (found.length > 0)
|
|
264
|
+
return found;
|
|
265
|
+
if (yes)
|
|
266
|
+
return locations.map((location) => location.value);
|
|
267
|
+
return clack.multiselect({
|
|
268
|
+
message,
|
|
269
|
+
options: locations.map(({ value, hint }) => ({ value, label: value, hint })),
|
|
270
|
+
initialValues: locations.map((location) => location.value),
|
|
271
|
+
required: false,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
function isCancelled(value) {
|
|
275
|
+
return clack.isCancel(value);
|
|
276
|
+
}
|
|
241
277
|
function cancelled() {
|
|
242
278
|
clack.cancel('cancelled; no changes were made');
|
|
243
279
|
return 0;
|
package/dist/cli/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `e2e mcp` command: claims stdout for the protocol, then serves. Over
|
|
3
|
+
* stdio, stdout is the JSON-RPC stream, so anything else that writes there
|
|
4
|
+
* (a stray console.log, a library banner) would corrupt the handshake. The
|
|
5
|
+
* transport keeps the process's own stdout writer, and everything else that
|
|
6
|
+
* reaches process.stdout is redirected to stderr for the whole process.
|
|
7
|
+
*/
|
|
8
|
+
export interface McpCommandOptions {
|
|
9
|
+
config?: string | undefined;
|
|
10
|
+
target?: string | undefined;
|
|
11
|
+
headless?: boolean | undefined;
|
|
12
|
+
}
|
|
13
|
+
/** Runs the server until the client disconnects or a signal arrives; returns the exit code. */
|
|
14
|
+
export declare function mcp(version: string, options: McpCommandOptions): Promise<number>;
|
|
15
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/cli/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC;AAwBD,+FAA+F;AAC/F,wBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BtF"}
|
package/dist/cli/mcp.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `e2e mcp` command: claims stdout for the protocol, then serves. Over
|
|
3
|
+
* stdio, stdout is the JSON-RPC stream, so anything else that writes there
|
|
4
|
+
* (a stray console.log, a library banner) would corrupt the handshake. The
|
|
5
|
+
* transport keeps the process's own stdout writer, and everything else that
|
|
6
|
+
* reaches process.stdout is redirected to stderr for the whole process.
|
|
7
|
+
*/
|
|
8
|
+
import { Writable } from 'node:stream';
|
|
9
|
+
import { isCiMode } from '../config/resolve.js';
|
|
10
|
+
import { errorMessage, exitCodeForCategory, classifyError } from '../internal/errors.js';
|
|
11
|
+
import { serveMcp } from '../mcp/server.js';
|
|
12
|
+
/**
|
|
13
|
+
* Diverts every later `process.stdout` write to stderr and returns a stream
|
|
14
|
+
* that still reaches the real stdout. The protocol stream wraps the original
|
|
15
|
+
* writer rather than opening file descriptor 1 again: once Node has set up
|
|
16
|
+
* `process.stdout` on a pipe, the descriptor is non-blocking, and a plain
|
|
17
|
+
* `fs` write to it fails with EAGAIN as soon as the client reads slower than
|
|
18
|
+
* the server writes (a screenshot result), killing the server. The socket
|
|
19
|
+
* writer queues and retries instead.
|
|
20
|
+
*/
|
|
21
|
+
function claimStdout() {
|
|
22
|
+
const stdout = process.stdout;
|
|
23
|
+
const stderr = process.stderr;
|
|
24
|
+
const write = stdout.write.bind(stdout);
|
|
25
|
+
stdout.write = ((chunk, encoding, callback) => stderr.write(chunk, encoding, callback));
|
|
26
|
+
return new Writable({
|
|
27
|
+
write(chunk, _encoding, callback) {
|
|
28
|
+
write(chunk, callback);
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/** Runs the server until the client disconnects or a signal arrives; returns the exit code. */
|
|
33
|
+
export async function mcp(version, options) {
|
|
34
|
+
const stdout = claimStdout();
|
|
35
|
+
const stop = new AbortController();
|
|
36
|
+
const onSignal = () => stop.abort();
|
|
37
|
+
process.once('SIGINT', onSignal);
|
|
38
|
+
process.once('SIGTERM', onSignal);
|
|
39
|
+
try {
|
|
40
|
+
return await serveMcp({
|
|
41
|
+
cwd: process.cwd(),
|
|
42
|
+
configPath: options.config,
|
|
43
|
+
target: options.target,
|
|
44
|
+
headed: options.headless !== true && !isCiMode(process.env),
|
|
45
|
+
env: process.env,
|
|
46
|
+
version,
|
|
47
|
+
stdin: process.stdin,
|
|
48
|
+
stdout,
|
|
49
|
+
log: (line) => process.stderr.write(`e2e mcp: ${line}\n`),
|
|
50
|
+
signal: stop.signal,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (cause) {
|
|
54
|
+
const error = classifyError(cause);
|
|
55
|
+
process.stderr.write(`e2e mcp: ${error.code}: ${errorMessage(cause)}\n`);
|
|
56
|
+
return exitCodeForCategory(error.category);
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
process.off('SIGINT', onSignal);
|
|
60
|
+
process.off('SIGTERM', onSignal);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=mcp.js.map
|