@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.
Files changed (170) hide show
  1. package/README.md +3 -3
  2. package/dist/agent/act.d.ts +30 -2
  3. package/dist/agent/act.d.ts.map +1 -1
  4. package/dist/agent/act.js +4 -4
  5. package/dist/agent/act.js.map +1 -1
  6. package/dist/agent/default-agent.d.ts +16 -7
  7. package/dist/agent/default-agent.d.ts.map +1 -1
  8. package/dist/agent/default-agent.js +35 -34
  9. package/dist/agent/default-agent.js.map +1 -1
  10. package/dist/agent/interactive-step.d.ts +38 -0
  11. package/dist/agent/interactive-step.d.ts.map +1 -0
  12. package/dist/agent/interactive-step.js +131 -0
  13. package/dist/agent/interactive-step.js.map +1 -0
  14. package/dist/agent/model/tool-choice.d.ts +21 -0
  15. package/dist/agent/model/tool-choice.d.ts.map +1 -0
  16. package/dist/agent/model/tool-choice.js +49 -0
  17. package/dist/agent/model/tool-choice.js.map +1 -0
  18. package/dist/agent/tool-loop.d.ts +4 -4
  19. package/dist/agent/tool-loop.d.ts.map +1 -1
  20. package/dist/agent/tool-loop.js +100 -23
  21. package/dist/agent/tool-loop.js.map +1 -1
  22. package/dist/cli/docs-url.d.ts +1 -1
  23. package/dist/cli/docs-url.d.ts.map +1 -1
  24. package/dist/cli/docs-url.js +1 -1
  25. package/dist/cli/docs-url.js.map +1 -1
  26. package/dist/cli/index.d.ts.map +1 -1
  27. package/dist/cli/index.js +22 -3
  28. package/dist/cli/index.js.map +1 -1
  29. package/dist/cli/init/engine-versions.json +1 -1
  30. package/dist/cli/init/engines.d.ts +16 -15
  31. package/dist/cli/init/engines.d.ts.map +1 -1
  32. package/dist/cli/init/engines.js +23 -23
  33. package/dist/cli/init/engines.js.map +1 -1
  34. package/dist/cli/init/mcp-config.d.ts +31 -0
  35. package/dist/cli/init/mcp-config.d.ts.map +1 -0
  36. package/dist/cli/init/mcp-config.js +72 -0
  37. package/dist/cli/init/mcp-config.js.map +1 -0
  38. package/dist/cli/init/scaffold.d.ts +1 -1
  39. package/dist/cli/init/scaffold.js +1 -1
  40. package/dist/cli/init/scaffold.js.map +1 -1
  41. package/dist/cli/init.d.ts.map +1 -1
  42. package/dist/cli/init.js +64 -28
  43. package/dist/cli/init.js.map +1 -1
  44. package/dist/cli/mcp.d.ts +15 -0
  45. package/dist/cli/mcp.d.ts.map +1 -0
  46. package/dist/cli/mcp.js +63 -0
  47. package/dist/cli/mcp.js.map +1 -0
  48. package/dist/collect/registry.d.ts.map +1 -1
  49. package/dist/collect/registry.js +23 -2
  50. package/dist/collect/registry.js.map +1 -1
  51. package/dist/collect/select.d.ts +9 -2
  52. package/dist/collect/select.d.ts.map +1 -1
  53. package/dist/collect/select.js +57 -11
  54. package/dist/collect/select.js.map +1 -1
  55. package/dist/config/resolve.d.ts +8 -5
  56. package/dist/config/resolve.d.ts.map +1 -1
  57. package/dist/config/resolve.js +11 -9
  58. package/dist/config/resolve.js.map +1 -1
  59. package/dist/credentials.d.ts +6 -0
  60. package/dist/credentials.d.ts.map +1 -1
  61. package/dist/credentials.js +9 -0
  62. package/dist/credentials.js.map +1 -1
  63. package/dist/explore/index.d.ts.map +1 -1
  64. package/dist/explore/index.js +6 -4
  65. package/dist/explore/index.js.map +1 -1
  66. package/dist/internal/ai-trace.d.ts +2 -0
  67. package/dist/internal/ai-trace.d.ts.map +1 -1
  68. package/dist/internal/ai-trace.js +3 -0
  69. package/dist/internal/ai-trace.js.map +1 -1
  70. package/dist/internal/ids.d.ts +2 -2
  71. package/dist/internal/ids.d.ts.map +1 -1
  72. package/dist/internal/ids.js +3 -3
  73. package/dist/internal/ids.js.map +1 -1
  74. package/dist/internal/package-manager.d.ts +4 -0
  75. package/dist/internal/package-manager.d.ts.map +1 -1
  76. package/dist/internal/package-manager.js +26 -0
  77. package/dist/internal/package-manager.js.map +1 -1
  78. package/dist/mcp/catalog.d.ts +50 -0
  79. package/dist/mcp/catalog.d.ts.map +1 -0
  80. package/dist/mcp/catalog.js +172 -0
  81. package/dist/mcp/catalog.js.map +1 -0
  82. package/dist/mcp/config.d.ts +11 -0
  83. package/dist/mcp/config.d.ts.map +1 -0
  84. package/dist/mcp/config.js +16 -0
  85. package/dist/mcp/config.js.map +1 -0
  86. package/dist/mcp/server.d.ts +29 -0
  87. package/dist/mcp/server.d.ts.map +1 -0
  88. package/dist/mcp/server.js +86 -0
  89. package/dist/mcp/server.js.map +1 -0
  90. package/dist/mcp/session.d.ts +68 -0
  91. package/dist/mcp/session.d.ts.map +1 -0
  92. package/dist/mcp/session.js +317 -0
  93. package/dist/mcp/session.js.map +1 -0
  94. package/dist/mcp/tools.d.ts +77 -0
  95. package/dist/mcp/tools.d.ts.map +1 -0
  96. package/dist/mcp/tools.js +179 -0
  97. package/dist/mcp/tools.js.map +1 -0
  98. package/dist/report/build.d.ts +8 -0
  99. package/dist/report/build.d.ts.map +1 -1
  100. package/dist/report/build.js +3 -1
  101. package/dist/report/build.js.map +1 -1
  102. package/dist/report/format.d.ts +19 -0
  103. package/dist/report/format.d.ts.map +1 -1
  104. package/dist/report/format.js +42 -0
  105. package/dist/report/format.js.map +1 -1
  106. package/dist/report/junit.d.ts.map +1 -1
  107. package/dist/report/junit.js +4 -1
  108. package/dist/report/junit.js.map +1 -1
  109. package/dist/report/list.d.ts +10 -1
  110. package/dist/report/list.d.ts.map +1 -1
  111. package/dist/report/list.js +35 -13
  112. package/dist/report/list.js.map +1 -1
  113. package/dist/run/events.d.ts +12 -3
  114. package/dist/run/events.d.ts.map +1 -1
  115. package/dist/run/events.js.map +1 -1
  116. package/dist/run/execute.d.ts +2 -2
  117. package/dist/run/execute.d.ts.map +1 -1
  118. package/dist/run/execute.js +19 -14
  119. package/dist/run/execute.js.map +1 -1
  120. package/dist/run/fixtures.d.ts +10 -4
  121. package/dist/run/fixtures.d.ts.map +1 -1
  122. package/dist/run/fixtures.js +23 -23
  123. package/dist/run/fixtures.js.map +1 -1
  124. package/dist/run/in-process.d.ts.map +1 -1
  125. package/dist/run/in-process.js +4 -3
  126. package/dist/run/in-process.js.map +1 -1
  127. package/dist/run/provision.d.ts +51 -0
  128. package/dist/run/provision.d.ts.map +1 -0
  129. package/dist/run/provision.js +94 -0
  130. package/dist/run/provision.js.map +1 -0
  131. package/dist/run/records.d.ts +4 -0
  132. package/dist/run/records.d.ts.map +1 -1
  133. package/dist/run/runner.d.ts +5 -2
  134. package/dist/run/runner.d.ts.map +1 -1
  135. package/dist/run/runner.js +21 -69
  136. package/dist/run/runner.js.map +1 -1
  137. package/dist/run/scheduler.d.ts +5 -2
  138. package/dist/run/scheduler.d.ts.map +1 -1
  139. package/dist/run/scheduler.js +13 -10
  140. package/dist/run/scheduler.js.map +1 -1
  141. package/dist/run/serial.d.ts +1 -1
  142. package/dist/run/serial.d.ts.map +1 -1
  143. package/dist/run/serial.js +7 -2
  144. package/dist/run/serial.js.map +1 -1
  145. package/dist/run/standalone.d.ts +63 -0
  146. package/dist/run/standalone.d.ts.map +1 -0
  147. package/dist/run/standalone.js +152 -0
  148. package/dist/run/standalone.js.map +1 -0
  149. package/dist/run/units.d.ts +6 -3
  150. package/dist/run/units.d.ts.map +1 -1
  151. package/dist/run/units.js +0 -0
  152. package/dist/run/units.js.map +1 -1
  153. package/dist/run/worker/entry.js +2 -2
  154. package/dist/run/worker/entry.js.map +1 -1
  155. package/dist/run/worker/protocol.d.ts +5 -0
  156. package/dist/run/worker/protocol.d.ts.map +1 -1
  157. package/dist/run/worker/protocol.js.map +1 -1
  158. package/dist/run/worker/session.d.ts +3 -4
  159. package/dist/run/worker/session.d.ts.map +1 -1
  160. package/dist/run/worker/session.js +5 -4
  161. package/dist/run/worker/session.js.map +1 -1
  162. package/dist/types.d.ts +8 -4
  163. package/dist/types.d.ts.map +1 -1
  164. package/package.json +7 -6
  165. package/skills/e2e/SKILL.md +5 -2
  166. package/skills/e2e/references/agent.md +2 -2
  167. package/skills/e2e/references/explore.md +3 -3
  168. package/skills/e2e/references/mcp.md +88 -0
  169. package/skills/e2e/references/running.md +4 -3
  170. 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
- readonly runCommand: string;
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: 'Playwright';
26
- readonly hint: 'browser testing';
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 runCommand: 'APP_URL=http://localhost:3000 npx --no-install e2e run';
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 runCommand: 'APP_URL=http://localhost:3000 npx --no-install e2e run';
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,UAAU,EAAE,MAAM,CAAC;CAC7B;AASD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE/D;AAMD,sFAAsF;AACtF,wBAAgB,gBAAgB;iBAItB,YAAY;oBACT,YAAY;mBACb,iBAAiB;;;qBAGf;;;;;;;;MAQR;sBACS;;;;;;;CAOd;wBACgB;;;;;;;CAOhB;yBACiB,wDAAwD;;iBAGhE,MAAM;oBACH,MAAM;mBACP,+BAA+B;;;qBAG7B;sDACwC;sBACvC;;;;;;CAMd;yBACiB,wDAAwD;;iBAGhE,cAAc;oBACX,cAAc;mBACf,iCAAiC;;;;;;yBAgC3B,0BAA0B;GAG3C;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"}
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"}
@@ -27,8 +27,8 @@ export function getEnginePresets() {
27
27
  return [
28
28
  {
29
29
  id: 'playwright',
30
- label: 'Playwright',
31
- hint: 'browser testing',
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
- runCommand: 'APP_URL=http://localhost:3000 npx --no-install e2e run',
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: 'agent-device',
81
- hint: 'mobile testing: iOS and Android',
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
- runCommand: 'npx --no-install e2e run',
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;AAc7D;;;;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,YAAY;YACnB,IAAI,EAAE,iBAAiB;YACvB,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,UAAU,EAAE,wDAAwD;SACrE;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,UAAU,EAAE,wDAAwD;SACrE;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,iCAAiC;YACvC,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,UAAU,EAAE,0BAA0B;SACvC;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"}
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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"}
@@ -13,6 +13,6 @@ export declare function createScaffold(engineId: EngineId, model: ScaffoldModel
13
13
  };
14
14
  config: string;
15
15
  example: string;
16
- runCommand: string;
16
+ needsAppUrl: boolean;
17
17
  };
18
18
  //# sourceMappingURL=scaffold.d.ts.map
@@ -47,7 +47,7 @@ ${configFields.join('\n')}
47
47
  } satisfies E2EConfig;
48
48
  `,
49
49
  example: engine.example + (gateway === undefined ? '' : engine.aiExample ?? ''),
50
- runCommand: engine.runCommand,
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,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;AACJ,CAAC"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAiB3C,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;AAsBD;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqLlF"}
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 SCRIPTS = { 'test:e2e': 'e2e run' };
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 (clack.isCancel(selectedEngine))
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 (clack.isCancel(gateway))
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 (clack.isCancel(endpoint))
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
- // The skill goes where an earlier run put it; a project without one chooses.
112
- let skillDirs = findInstalledSkillDirs(cwd);
113
- if (skillDirs.length === 0) {
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 (clack.isCancel(proceed) || !proceed)
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 (clack.isCancel(selected))
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('skipped the agent skill; agents can still print it with npx --no-install e2e guide');
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;
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAiB,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAkB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,qBAAqB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACtH,OAAO,EAAE,cAAc,EAAsB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAiBnE,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAEzC,MAAM,iBAAiB,GAAG;IACxB,eAAe;IACf,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,gBAAgB;IAChB,YAAY;CACb,CAAC;AAEF,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAE1C,mFAAmF;AACnF,MAAM,eAAe,GAAc,QAAQ,CAAC;AAI5C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,OAAO,GAAgB,EAAE;IAC/D,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE5F,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,KAAK,CAAC,GAAG,CAAC,KAAK,CACb,8KAA8K,CAC/K,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACpD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,6BAA6B,CAAC,CAAC;QAC1E,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,GAAmC,CAAC;IACxC,IAAI,CAAC;QACH,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,uBAAuB,qBAAqB,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxI,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;IACtC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5G,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9D,IAAI,cAAc,KAAK,SAAS;QAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,cAAc,EAAE,CAAC,CAAC;IAC5F,IAAI,aAAa;QAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;IAE1E,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAExF,6GAA6G;IAC7G,IAAI,MAAM,GAAa,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC;IACjF,IAAI,KAAK,GAA8B,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/G,IAAI,cAAc,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjD,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,MAAM,CAAW;YAClD,OAAO,EAAE,eAAe;YACxB,YAAY,EAAE,iBAAiB;YAC/B,OAAO,EAAE,gBAAgB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;SACvF,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;YAAE,OAAO,SAAS,EAAE,CAAC;QACvD,MAAM,GAAG,cAAc,CAAC;QAExB,4EAA4E;QAC5E,iDAAiD;QACjD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAgB;YAChD,OAAO,EAAE,sDAAsD;YAC/D,YAAY,EAAE,eAAe;YAC7B,OAAO,EAAE;gBACP,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,+CAA+C,EAAE;aACxF;SACF,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,SAAS,EAAE,CAAC;QAChD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,KAAK,GAAG,SAAS,CAAC;QACpB,CAAC;aAAM,IAAI,OAAO,KAAK,mBAAmB,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;gBAChC,OAAO,EAAE,uCAAuC;gBAChD,WAAW,EAAE,2BAA2B;gBACxC,QAAQ,EAAE,gBAAgB;aAC3B,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,SAAS,EAAE,CAAC;YACjD,KAAK,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,EAAE,OAAO,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,IAAI,SAAS,GAAsB,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC/D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAS;gBAC/C,OAAO,EAAE,0CAA0C;gBACnD,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnF,aAAa,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAC9D,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,SAAS,EAAE,CAAC;YACjD,SAAS,GAAG,QAAQ,CAAC;QACvB,CAAC;IACH,CAAC;IACD,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAErE,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC1E,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpF,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9H,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YACvF,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;KAClG,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnF,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG;YACd,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjF,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC;YACnG,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3D,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3E,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACnE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,6BAA6B,OAAO,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/G,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,EAAE,CAAC;QACjD,OAAO,GAAG,QAAQ,CAAC;IACrB,CAAC;IAED,gFAAgF;IAChF,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9C,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;IAClH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,cAAc,KAAK,EAAE,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAClF,aAAa,CAAC,aAAa,EAAE,GAAG,cAAc,GAAG,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,aAAa,CAAC,MAAM,WAAW,CAAC,CAAC;QAC1E,IAAI,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,kBAAkB,4DAA4D,QAAQ,sCAAsC,CAAC,CAAC;QAClJ,CAAC;IACH,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;QAC/G,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACjF,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,MAAM,iBAAiB,OAAO,UAAU,CAAC,CAAC;YAClF,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;QACjD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,IAAI,GAAG;QACX,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QACtF,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,UAAU;QAC1C,QAAQ,CAAC,UAAU;KACpB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACvC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;AAChH,CAAC;AAED,kFAAkF;AAClF,SAAS,gBAAgB,CAAC,KAAyB;IACjD,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,oDAAoD,CAAC;IAChF,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,OAAO,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACvH,OAAO,4CAA4C,CAAC;AACtD,CAAC;AAED,uFAAuF;AACvF,SAAS,SAAS;IAChB,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC;AACX,CAAC"}
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"}
@@ -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