@e2edev/e2e 0.5.1 → 0.6.1

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 (337) hide show
  1. package/README.md +24 -11
  2. package/dist/agent/act.d.ts +1 -1
  3. package/dist/agent/act.js +4 -2
  4. package/dist/agent/act.js.map +1 -1
  5. package/dist/agent/ai-sdk.d.ts +1 -2
  6. package/dist/agent/ai-sdk.d.ts.map +1 -1
  7. package/dist/agent/ai-sdk.js +1 -2
  8. package/dist/agent/ai-sdk.js.map +1 -1
  9. package/dist/agent/default-agent.d.ts +7 -3
  10. package/dist/agent/default-agent.d.ts.map +1 -1
  11. package/dist/agent/default-agent.js +2 -2
  12. package/dist/agent/default-agent.js.map +1 -1
  13. package/dist/agent/derived.d.ts +1 -1
  14. package/dist/agent/derived.js +1 -1
  15. package/dist/agent/error.d.ts +2 -2
  16. package/dist/agent/error.d.ts.map +1 -1
  17. package/dist/agent/error.js +2 -2
  18. package/dist/agent/error.js.map +1 -1
  19. package/dist/agent/executor.d.ts +8 -3
  20. package/dist/agent/executor.d.ts.map +1 -1
  21. package/dist/agent/executor.js +1 -1
  22. package/dist/agent/executor.js.map +1 -1
  23. package/dist/agent/index.d.ts +1 -1
  24. package/dist/agent/index.d.ts.map +1 -1
  25. package/dist/agent/index.js +8 -5
  26. package/dist/agent/index.js.map +1 -1
  27. package/dist/agent/invocation.d.ts +2 -2
  28. package/dist/agent/invocation.d.ts.map +1 -1
  29. package/dist/agent/invocation.js +9 -3
  30. package/dist/agent/invocation.js.map +1 -1
  31. package/dist/agent/ledger.d.ts +1 -1
  32. package/dist/agent/ledger.js +1 -1
  33. package/dist/agent/model/adapter.d.ts +7 -4
  34. package/dist/agent/model/adapter.d.ts.map +1 -1
  35. package/dist/agent/model/adapter.js +2 -2
  36. package/dist/agent/model/adapter.js.map +1 -1
  37. package/dist/agent/model/router.d.ts +1 -1
  38. package/dist/agent/model/router.d.ts.map +1 -1
  39. package/dist/agent/model/router.js +1 -1
  40. package/dist/agent/model/router.js.map +1 -1
  41. package/dist/agent/model/sdk.d.ts +11 -1
  42. package/dist/agent/model/sdk.d.ts.map +1 -1
  43. package/dist/agent/model/sdk.js +54 -10
  44. package/dist/agent/model/sdk.js.map +1 -1
  45. package/dist/agent/observation.d.ts +1 -1
  46. package/dist/agent/observation.d.ts.map +1 -1
  47. package/dist/agent/observation.js +2 -2
  48. package/dist/agent/observation.js.map +1 -1
  49. package/dist/agent/prompts.d.ts +1 -1
  50. package/dist/agent/prompts.js +1 -1
  51. package/dist/agent/protocol.d.ts +2 -3
  52. package/dist/agent/protocol.d.ts.map +1 -1
  53. package/dist/agent/protocol.js +2 -3
  54. package/dist/agent/protocol.js.map +1 -1
  55. package/dist/agent/public.d.ts +1 -1
  56. package/dist/agent/public.js +1 -1
  57. package/dist/agent/replay.d.ts +1 -1
  58. package/dist/agent/replay.js +1 -1
  59. package/dist/agent/secrets.d.ts +1 -1
  60. package/dist/agent/secrets.d.ts.map +1 -1
  61. package/dist/agent/secrets.js +1 -1
  62. package/dist/agent/secrets.js.map +1 -1
  63. package/dist/agent/step-cache.d.ts +1 -1
  64. package/dist/agent/step-cache.d.ts.map +1 -1
  65. package/dist/agent/step-cache.js +7 -1
  66. package/dist/agent/step-cache.js.map +1 -1
  67. package/dist/agent/tool-loop.d.ts +7 -3
  68. package/dist/agent/tool-loop.d.ts.map +1 -1
  69. package/dist/agent/tool-loop.js +6 -5
  70. package/dist/agent/tool-loop.js.map +1 -1
  71. package/dist/agent/usage.d.ts +6 -1
  72. package/dist/agent/usage.d.ts.map +1 -1
  73. package/dist/agent/usage.js +12 -0
  74. package/dist/agent/usage.js.map +1 -1
  75. package/dist/cache/anchors.d.ts +1 -1
  76. package/dist/cache/anchors.js +1 -1
  77. package/dist/cache/context.d.ts +6 -1
  78. package/dist/cache/context.d.ts.map +1 -1
  79. package/dist/cache/context.js +2 -1
  80. package/dist/cache/context.js.map +1 -1
  81. package/dist/cache/decide.d.ts +1 -1
  82. package/dist/cache/decide.js +1 -1
  83. package/dist/cache/identity.d.ts +1 -1
  84. package/dist/cache/identity.js +1 -1
  85. package/dist/cache/recorder.d.ts +4 -2
  86. package/dist/cache/recorder.d.ts.map +1 -1
  87. package/dist/cache/recorder.js +10 -1
  88. package/dist/cache/recorder.js.map +1 -1
  89. package/dist/cache/relocate.d.ts +1 -1
  90. package/dist/cache/relocate.js +1 -1
  91. package/dist/cache/store.d.ts +1 -1
  92. package/dist/cache/store.js +1 -1
  93. package/dist/cache/trace.d.ts +16 -1
  94. package/dist/cache/trace.d.ts.map +1 -1
  95. package/dist/cache/trace.js +22 -1
  96. package/dist/cache/trace.js.map +1 -1
  97. package/dist/cli/bin.js +9 -1
  98. package/dist/cli/bin.js.map +1 -1
  99. package/dist/cli/cache.d.ts +25 -0
  100. package/dist/cli/cache.d.ts.map +1 -0
  101. package/dist/cli/cache.js +249 -0
  102. package/dist/cli/cache.js.map +1 -0
  103. package/dist/cli/docs-url.d.ts +3 -0
  104. package/dist/cli/docs-url.d.ts.map +1 -0
  105. package/dist/cli/docs-url.js +3 -0
  106. package/dist/cli/docs-url.js.map +1 -0
  107. package/dist/cli/guide.d.ts +4 -0
  108. package/dist/cli/guide.d.ts.map +1 -0
  109. package/dist/cli/guide.js +16 -0
  110. package/dist/cli/guide.js.map +1 -0
  111. package/dist/cli/index.d.ts +1 -1
  112. package/dist/cli/index.d.ts.map +1 -1
  113. package/dist/cli/index.js +210 -41
  114. package/dist/cli/index.js.map +1 -1
  115. package/dist/cli/init/agent-skill.d.ts +34 -0
  116. package/dist/cli/init/agent-skill.d.ts.map +1 -0
  117. package/dist/cli/init/agent-skill.js +44 -0
  118. package/dist/cli/init/agent-skill.js.map +1 -0
  119. package/dist/cli/init/engines.d.ts +31 -23
  120. package/dist/cli/init/engines.d.ts.map +1 -1
  121. package/dist/cli/init/engines.js +34 -24
  122. package/dist/cli/init/engines.js.map +1 -1
  123. package/dist/cli/init/package.d.ts +19 -3
  124. package/dist/cli/init/package.d.ts.map +1 -1
  125. package/dist/cli/init/package.js +20 -20
  126. package/dist/cli/init/package.js.map +1 -1
  127. package/dist/cli/init/scaffold.d.ts.map +1 -1
  128. package/dist/cli/init/scaffold.js +5 -3
  129. package/dist/cli/init/scaffold.js.map +1 -1
  130. package/dist/cli/init.d.ts +14 -2
  131. package/dist/cli/init.d.ts.map +1 -1
  132. package/dist/cli/init.js +94 -16
  133. package/dist/cli/init.js.map +1 -1
  134. package/dist/cli/signals.d.ts +4 -1
  135. package/dist/cli/signals.d.ts.map +1 -1
  136. package/dist/cli/signals.js +8 -2
  137. package/dist/cli/signals.js.map +1 -1
  138. package/dist/cli/skill.d.ts +16 -0
  139. package/dist/cli/skill.d.ts.map +1 -0
  140. package/dist/cli/skill.js +57 -0
  141. package/dist/cli/skill.js.map +1 -0
  142. package/dist/collect/collect.d.ts +9 -1
  143. package/dist/collect/collect.d.ts.map +1 -1
  144. package/dist/collect/collect.js +50 -5
  145. package/dist/collect/collect.js.map +1 -1
  146. package/dist/collect/registry.d.ts +1 -1
  147. package/dist/collect/registry.d.ts.map +1 -1
  148. package/dist/collect/registry.js +1 -1
  149. package/dist/collect/registry.js.map +1 -1
  150. package/dist/collect/select.d.ts +1 -1
  151. package/dist/collect/select.d.ts.map +1 -1
  152. package/dist/collect/select.js +77 -8
  153. package/dist/collect/select.js.map +1 -1
  154. package/dist/config/agent.d.ts +14 -2
  155. package/dist/config/agent.d.ts.map +1 -1
  156. package/dist/config/agent.js +53 -16
  157. package/dist/config/agent.js.map +1 -1
  158. package/dist/config/app.d.ts +2 -2
  159. package/dist/config/app.d.ts.map +1 -1
  160. package/dist/config/app.js +3 -3
  161. package/dist/config/app.js.map +1 -1
  162. package/dist/config/diagnose.d.ts +15 -0
  163. package/dist/config/diagnose.d.ts.map +1 -0
  164. package/dist/config/diagnose.js +122 -0
  165. package/dist/config/diagnose.js.map +1 -0
  166. package/dist/config/load.d.ts +9 -1
  167. package/dist/config/load.d.ts.map +1 -1
  168. package/dist/config/load.js +35 -3
  169. package/dist/config/load.js.map +1 -1
  170. package/dist/config/resolve.d.ts +2 -2
  171. package/dist/config/resolve.d.ts.map +1 -1
  172. package/dist/config/resolve.js +51 -16
  173. package/dist/config/resolve.js.map +1 -1
  174. package/dist/config/validate.d.ts +6 -2
  175. package/dist/config/validate.d.ts.map +1 -1
  176. package/dist/config/validate.js +20 -3
  177. package/dist/config/validate.js.map +1 -1
  178. package/dist/credentials.d.ts +1 -1
  179. package/dist/credentials.d.ts.map +1 -1
  180. package/dist/credentials.js +1 -1
  181. package/dist/credentials.js.map +1 -1
  182. package/dist/engine/contract.d.ts +2 -2
  183. package/dist/engine/contract.js +1 -1
  184. package/dist/engine/index.d.ts +2 -2
  185. package/dist/engine/index.js +3 -3
  186. package/dist/engine/index.js.map +1 -1
  187. package/dist/engine/session.d.ts +1 -1
  188. package/dist/engine/session.d.ts.map +1 -1
  189. package/dist/engine/session.js +5 -2
  190. package/dist/engine/session.js.map +1 -1
  191. package/dist/expect/async.d.ts +1 -1
  192. package/dist/expect/async.d.ts.map +1 -1
  193. package/dist/expect/async.js +37 -1
  194. package/dist/expect/async.js.map +1 -1
  195. package/dist/expect/values.d.ts +1 -1
  196. package/dist/expect/values.d.ts.map +1 -1
  197. package/dist/expect/values.js +1 -1
  198. package/dist/expect/values.js.map +1 -1
  199. package/dist/index.d.ts +0 -3
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +0 -4
  202. package/dist/index.js.map +1 -1
  203. package/dist/internal/errors.d.ts +21 -3
  204. package/dist/internal/errors.d.ts.map +1 -1
  205. package/dist/internal/errors.js +55 -5
  206. package/dist/internal/errors.js.map +1 -1
  207. package/dist/internal/globs.d.ts +2 -2
  208. package/dist/internal/globs.d.ts.map +1 -1
  209. package/dist/internal/globs.js +2 -2
  210. package/dist/internal/globs.js.map +1 -1
  211. package/dist/internal/ids.d.ts +3 -3
  212. package/dist/internal/ids.d.ts.map +1 -1
  213. package/dist/internal/ids.js +3 -3
  214. package/dist/internal/ids.js.map +1 -1
  215. package/dist/internal/node-version.d.ts +10 -0
  216. package/dist/internal/node-version.d.ts.map +1 -0
  217. package/dist/internal/node-version.js +28 -0
  218. package/dist/internal/node-version.js.map +1 -0
  219. package/dist/internal/package-manager.d.ts +10 -0
  220. package/dist/internal/package-manager.d.ts.map +1 -0
  221. package/dist/internal/package-manager.js +43 -0
  222. package/dist/internal/package-manager.js.map +1 -0
  223. package/dist/internal/redact.d.ts +1 -1
  224. package/dist/internal/redact.d.ts.map +1 -1
  225. package/dist/internal/redact.js +1 -1
  226. package/dist/internal/redact.js.map +1 -1
  227. package/dist/internal/suggest.d.ts +16 -0
  228. package/dist/internal/suggest.d.ts.map +1 -0
  229. package/dist/internal/suggest.js +61 -0
  230. package/dist/internal/suggest.js.map +1 -0
  231. package/dist/internal/text.d.ts +1 -1
  232. package/dist/internal/text.d.ts.map +1 -1
  233. package/dist/internal/text.js +1 -1
  234. package/dist/internal/text.js.map +1 -1
  235. package/dist/internal/urls.d.ts +2 -2
  236. package/dist/internal/urls.d.ts.map +1 -1
  237. package/dist/internal/urls.js +2 -2
  238. package/dist/internal/urls.js.map +1 -1
  239. package/dist/locator/engine.d.ts +1 -1
  240. package/dist/locator/engine.d.ts.map +1 -1
  241. package/dist/locator/engine.js +1 -1
  242. package/dist/locator/engine.js.map +1 -1
  243. package/dist/locator/expression.d.ts +1 -1
  244. package/dist/locator/expression.d.ts.map +1 -1
  245. package/dist/locator/expression.js +1 -1
  246. package/dist/locator/expression.js.map +1 -1
  247. package/dist/locator/screen.js +1 -1
  248. package/dist/locator/screen.js.map +1 -1
  249. package/dist/report/build.d.ts +1 -1
  250. package/dist/report/build.d.ts.map +1 -1
  251. package/dist/report/build.js +4 -4
  252. package/dist/report/build.js.map +1 -1
  253. package/dist/report/format.d.ts +9 -1
  254. package/dist/report/format.d.ts.map +1 -1
  255. package/dist/report/format.js +17 -4
  256. package/dist/report/format.js.map +1 -1
  257. package/dist/report/junit.d.ts +1 -1
  258. package/dist/report/junit.d.ts.map +1 -1
  259. package/dist/report/junit.js +1 -1
  260. package/dist/report/junit.js.map +1 -1
  261. package/dist/report/list-model.d.ts +79 -0
  262. package/dist/report/list-model.d.ts.map +1 -0
  263. package/dist/report/list-model.js +10 -0
  264. package/dist/report/list-model.js.map +1 -0
  265. package/dist/report/list-steps.d.ts +27 -0
  266. package/dist/report/list-steps.d.ts.map +1 -0
  267. package/dist/report/list-steps.js +65 -0
  268. package/dist/report/list-steps.js.map +1 -0
  269. package/dist/report/list.d.ts +26 -24
  270. package/dist/report/list.d.ts.map +1 -1
  271. package/dist/report/list.js +89 -157
  272. package/dist/report/list.js.map +1 -1
  273. package/dist/report/live-window.d.ts +11 -0
  274. package/dist/report/live-window.d.ts.map +1 -1
  275. package/dist/report/live-window.js +12 -5
  276. package/dist/report/live-window.js.map +1 -1
  277. package/dist/report/running-tree.d.ts +46 -0
  278. package/dist/report/running-tree.d.ts.map +1 -0
  279. package/dist/report/running-tree.js +182 -0
  280. package/dist/report/running-tree.js.map +1 -0
  281. package/dist/report/write.d.ts +1 -1
  282. package/dist/report/write.d.ts.map +1 -1
  283. package/dist/report/write.js +1 -1
  284. package/dist/report/write.js.map +1 -1
  285. package/dist/run/budget.d.ts +2 -2
  286. package/dist/run/budget.js +2 -2
  287. package/dist/run/declared-processes.d.ts +1 -1
  288. package/dist/run/declared-processes.js +1 -1
  289. package/dist/run/events.d.ts +2 -0
  290. package/dist/run/events.d.ts.map +1 -1
  291. package/dist/run/events.js.map +1 -1
  292. package/dist/run/execute.d.ts +2 -3
  293. package/dist/run/execute.d.ts.map +1 -1
  294. package/dist/run/execute.js +4 -5
  295. package/dist/run/execute.js.map +1 -1
  296. package/dist/run/fixtures.d.ts +1 -1
  297. package/dist/run/fixtures.d.ts.map +1 -1
  298. package/dist/run/fixtures.js +41 -5
  299. package/dist/run/fixtures.js.map +1 -1
  300. package/dist/run/managed-process.d.ts +8 -1
  301. package/dist/run/managed-process.d.ts.map +1 -1
  302. package/dist/run/managed-process.js +35 -17
  303. package/dist/run/managed-process.js.map +1 -1
  304. package/dist/run/realm.d.ts +2 -2
  305. package/dist/run/realm.js +2 -2
  306. package/dist/run/runner.d.ts +22 -0
  307. package/dist/run/runner.d.ts.map +1 -1
  308. package/dist/run/runner.js +47 -9
  309. package/dist/run/runner.js.map +1 -1
  310. package/dist/run/scheduler.d.ts +1 -2
  311. package/dist/run/scheduler.d.ts.map +1 -1
  312. package/dist/run/scheduler.js +2 -3
  313. package/dist/run/scheduler.js.map +1 -1
  314. package/dist/run/serial.d.ts +1 -1
  315. package/dist/run/serial.d.ts.map +1 -1
  316. package/dist/run/serial.js +3 -3
  317. package/dist/run/serial.js.map +1 -1
  318. package/dist/run/sessions.d.ts +1 -1
  319. package/dist/run/sessions.d.ts.map +1 -1
  320. package/dist/run/sessions.js +1 -1
  321. package/dist/run/sessions.js.map +1 -1
  322. package/dist/run/steps.d.ts +8 -2
  323. package/dist/run/steps.d.ts.map +1 -1
  324. package/dist/run/steps.js +1 -1
  325. package/dist/run/steps.js.map +1 -1
  326. package/dist/run/units.d.ts +1 -1
  327. package/dist/run/units.js +1 -1
  328. package/dist/types.d.ts +27 -8
  329. package/dist/types.d.ts.map +1 -1
  330. package/dist/types.js +2 -2
  331. package/package.json +13 -12
  332. package/skills/e2e/SKILL.md +110 -0
  333. package/skills/e2e/references/agent.md +210 -0
  334. package/skills/e2e/references/debugging.md +81 -0
  335. package/skills/e2e/references/running.md +153 -0
  336. package/skills/e2e/references/setup.md +239 -0
  337. package/skills/e2e/references/writing-tests.md +289 -0
@@ -1,4 +1,4 @@
1
- /** package.json reading, dependency additions, and package-manager detection for `e2e init`. */
1
+ /** package.json reading and dependency additions for `e2e init`. */
2
2
  import { z } from 'zod';
3
3
  declare const packageSchema: z.ZodObject<{
4
4
  dependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -6,6 +6,7 @@ declare const packageSchema: z.ZodObject<{
6
6
  peerDependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
7
7
  optionalDependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
8
8
  packageManager: z.ZodOptional<z.ZodString>;
9
+ scripts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
9
10
  }, z.core.$loose>;
10
11
  type PackageManifest = z.infer<typeof packageSchema>;
11
12
  /**
@@ -21,8 +22,11 @@ export declare function readPackage(cwd: string): {
21
22
  peerDependencies?: Record<string, string> | undefined;
22
23
  optionalDependencies?: Record<string, string> | undefined;
23
24
  packageManager?: string | undefined;
25
+ scripts?: Record<string, string> | undefined;
24
26
  };
25
27
  };
28
+ /** Why a manifest failed to read: the JSON parser's own position, or the field that has the wrong shape. */
29
+ export declare function describeManifestError(cause: unknown): string;
26
30
  /** Adds only missing dependencies to devDependencies and returns what was added. */
27
31
  export declare function addDependencies(manifest: PackageManifest, dependencies: Readonly<Record<string, string>>): {
28
32
  manifest: {
@@ -32,11 +36,23 @@ export declare function addDependencies(manifest: PackageManifest, dependencies:
32
36
  peerDependencies?: Record<string, string> | undefined;
33
37
  optionalDependencies?: Record<string, string> | undefined;
34
38
  packageManager?: string | undefined;
39
+ scripts?: Record<string, string> | undefined;
40
+ };
41
+ additions: [string, string][];
42
+ };
43
+ /** Adds only missing scripts and returns what was added. */
44
+ export declare function addScripts(manifest: PackageManifest, scripts: Readonly<Record<string, string>>): {
45
+ manifest: {
46
+ [x: string]: unknown;
47
+ dependencies?: Record<string, string> | undefined;
48
+ devDependencies?: Record<string, string> | undefined;
49
+ peerDependencies?: Record<string, string> | undefined;
50
+ optionalDependencies?: Record<string, string> | undefined;
51
+ packageManager?: string | undefined;
52
+ scripts?: Record<string, string> | undefined;
35
53
  };
36
54
  additions: [string, string][];
37
55
  };
38
- /** The `packageManager` field wins, then a lockfile, then the manager that invoked the CLI, then npm. */
39
- export declare function detectPackageManager(cwd: string, manifest: PackageManifest): string;
40
56
  /** Serializes with the original manifest's indentation and newline convention. */
41
57
  export declare function serializePackage(manifest: PackageManifest, original: string | undefined): string;
42
58
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/cli/init/package.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAIhG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,QAAA,MAAM,aAAa;;;;;;iBAMjB,CAAC;AACH,KAAK,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAWrD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM;;;;;;;;;;EAKtC;AAQD,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;;;;;;;;EAOxG;AAED,yGAAyG;AACzG,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,CAQnF;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIhG"}
1
+ {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/cli/init/package.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAIpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,QAAA,MAAM,aAAa;;;;;;;iBAOjB,CAAC;AACH,KAAK,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAErD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM;;;;;;;;;;;EAKtC;AAED,4GAA4G;AAC5G,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAO5D;AAQD,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;;;;;;;;;EAOxG;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;;;;;;;;;;EAO9F;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIhG"}
@@ -1,4 +1,4 @@
1
- /** package.json reading, dependency additions, and package-manager detection for `e2e init`. */
1
+ /** package.json reading and dependency additions for `e2e init`. */
2
2
  import { existsSync, readFileSync } from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import { z } from 'zod';
@@ -9,15 +9,8 @@ const packageSchema = z.looseObject({
9
9
  peerDependencies: dependencyBlock,
10
10
  optionalDependencies: dependencyBlock,
11
11
  packageManager: z.string().optional(),
12
+ scripts: z.record(z.string(), z.string()).optional(),
12
13
  });
13
- const PACKAGE_MANAGERS = new Set(['npm', 'pnpm', 'yarn', 'bun']);
14
- const LOCKFILES = [
15
- ['pnpm-lock.yaml', 'pnpm'],
16
- ['yarn.lock', 'yarn'],
17
- ['bun.lock', 'bun'],
18
- ['bun.lockb', 'bun'],
19
- ['package-lock.json', 'npm'],
20
- ];
21
14
  /**
22
15
  * Reads and validates the manifest, keeping its original text so edits can
23
16
  * preserve formatting. A missing manifest starts as a private ESM package.
@@ -28,6 +21,15 @@ export function readPackage(cwd) {
28
21
  const manifest = packageSchema.parse(original === undefined ? { private: true, type: 'module' } : JSON.parse(original));
29
22
  return { original, manifest };
30
23
  }
24
+ /** Why a manifest failed to read: the JSON parser's own position, or the field that has the wrong shape. */
25
+ export function describeManifestError(cause) {
26
+ if (cause instanceof z.ZodError) {
27
+ return cause.issues
28
+ .map((issue) => `${issue.path.length === 0 ? 'package.json' : issue.path.join('.')}: ${issue.message}`)
29
+ .join('; ');
30
+ }
31
+ return cause instanceof Error ? cause.message : String(cause);
32
+ }
31
33
  /** True when any dependency section lists `name`, so existing versions and workspace links are kept. */
32
34
  function declaresDependency(manifest, name) {
33
35
  return [manifest.dependencies, manifest.devDependencies, manifest.peerDependencies, manifest.optionalDependencies]
@@ -43,17 +45,15 @@ export function addDependencies(manifest, dependencies) {
43
45
  additions,
44
46
  };
45
47
  }
46
- /** The `packageManager` field wins, then a lockfile, then the manager that invoked the CLI, then npm. */
47
- export function detectPackageManager(cwd, manifest) {
48
- const configured = manifest.packageManager?.split('@')[0];
49
- if (configured !== undefined && PACKAGE_MANAGERS.has(configured))
50
- return configured;
51
- for (const [lock, manager] of LOCKFILES) {
52
- if (existsSync(path.join(cwd, lock)))
53
- return manager;
54
- }
55
- const invoking = process.env['npm_config_user_agent']?.split('/')[0];
56
- return invoking !== undefined && PACKAGE_MANAGERS.has(invoking) ? invoking : 'npm';
48
+ /** Adds only missing scripts and returns what was added. */
49
+ export function addScripts(manifest, scripts) {
50
+ const additions = Object.entries(scripts).filter(([name]) => manifest.scripts?.[name] === undefined);
51
+ if (additions.length === 0)
52
+ return { manifest, additions };
53
+ return {
54
+ manifest: { ...manifest, scripts: { ...manifest.scripts, ...Object.fromEntries(additions) } },
55
+ additions,
56
+ };
57
57
  }
58
58
  /** Serializes with the original manifest's indentation and newline convention. */
59
59
  export function serializePackage(manifest, original) {
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","sourceRoot":"","sources":["../../../src/cli/init/package.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package.js","sourceRoot":"","sources":["../../../src/cli/init/package.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../src/cli/init/scaffold.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAQ9D,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO;;;;;;;;EA2B7D"}
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../../src/cli/init/scaffold.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAU9D,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO;;;;;;;;EA2B7D"}
@@ -2,6 +2,8 @@ import { packageVersion } from '../../internal/package-version.js';
2
2
  import { getEnginePreset } from './engines.js';
3
3
  const AGENT_IMPORT = "import { createAgent } from '@e2edev/e2e/agent';";
4
4
  const AGENT_CONFIG = ` // The model comes from E2E_MODEL; authenticate with E2E_MODEL_API_KEY.
5
+ // E2E_MODEL_ENDPOINT points at another OpenAI-compatible endpoint (default: the AI Gateway).
6
+ // To call a provider directly, pass an AI SDK model: createAgent({ model: openai('gpt-5.4-mini') }).
5
7
  agent: createAgent({
6
8
  system: 'You are a thorough QA agent. Verify every outcome.',
7
9
  }),`;
@@ -9,7 +11,7 @@ const AGENT_CONFIG = ` // The model comes from E2E_MODEL; authenticate with E2E
9
11
  export function createScaffold(engineId, ai) {
10
12
  const engine = getEnginePreset(engineId);
11
13
  const imports = [
12
- "import { defineConfig } from '@e2edev/e2e';",
14
+ "import type { E2EConfig } from '@e2edev/e2e';",
13
15
  ...(ai ? [AGENT_IMPORT] : []),
14
16
  ...engine.imports,
15
17
  ];
@@ -25,9 +27,9 @@ export function createScaffold(engineId, ai) {
25
27
  },
26
28
  config: `${imports.join('\n')}
27
29
 
28
- export default defineConfig({
30
+ export default {
29
31
  ${configFields.join('\n')}
30
- });
32
+ } satisfies E2EConfig;
31
33
  `,
32
34
  example: engine.example + (ai ? engine.aiExample ?? '' : ''),
33
35
  runCommand: engine.runCommand,
@@ -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;AAE9D,MAAM,YAAY,GAAG,kDAAkD,CAAC;AACxE,MAAM,YAAY,GAAG;;;MAGf,CAAC;AAEP,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,QAAkB,EAAE,EAAW;IAC5D,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG;QACd,6CAA6C;QAC7C,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,MAAM,CAAC,OAAO;KAClB,CAAC;IACF,MAAM,YAAY,GAAG;QACnB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,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,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC;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,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,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;AAE9D,MAAM,YAAY,GAAG,kDAAkD,CAAC;AACxE,MAAM,YAAY,GAAG;;;;;MAKf,CAAC;AAEP,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,QAAkB,EAAE,EAAW;IAC5D,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG;QACd,+CAA+C;QAC/C,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,MAAM,CAAC,OAAO;KAClB,CAAC;IACF,MAAM,YAAY,GAAG;QACnB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,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,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC;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,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;AACJ,CAAC"}
@@ -1,11 +1,23 @@
1
- /** Non-destructive project scaffolding (spec 06-cli.md). */
1
+ /** Non-destructive project scaffolding. */
2
2
  export interface InitOptions {
3
3
  yes?: boolean;
4
+ /**
5
+ * The directory argument as the user typed it, when `cwd` was chosen from
6
+ * one; the closing `next:` line then starts with `cd` into it.
7
+ */
8
+ directory?: string;
9
+ /**
10
+ * Whether prompts can be answered. The CLI passes its terminal state; a
11
+ * non-interactive run without `--yes` stops before asking anything, since
12
+ * a prompt nobody can answer would otherwise wait forever.
13
+ */
14
+ interactive?: boolean;
4
15
  }
5
16
  /**
6
17
  * Runs `e2e init`. Every prompt happens before the first write, existing
7
18
  * config and test files are never touched, and dependencies install only when
8
- * the user asks.
19
+ * the user asks. The agent skill is offered once; later runs refresh the
20
+ * copies that exist and never add new locations.
9
21
  */
10
22
  export declare function init(cwd: string, options?: InitOptions): Promise<number>;
11
23
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAW5D,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAaD;;;;GAIG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsGlF"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAgB3C,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;AAiBD;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoKlF"}
package/dist/cli/init.js CHANGED
@@ -1,35 +1,56 @@
1
- /** Non-destructive project scaffolding (spec 06-cli.md). */
1
+ /** Non-destructive project scaffolding. */
2
2
  import * as clack from '@clack/prompts';
3
3
  import { spawnSync } from 'node:child_process';
4
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
5
+ import os from 'node:os';
5
6
  import path from 'node:path';
6
7
  import { esmPackageHint } from '../config/esm.js';
8
+ import { detectPackageManager } from '../internal/package-manager.js';
9
+ import { DOCS_URL } from './docs-url.js';
10
+ import { findInstalledSkillDirs, planSkillInstall, SKILL_LOCATIONS } from './init/agent-skill.js';
7
11
  import { getEnginePresets, DEFAULT_ENGINE_ID } from './init/engines.js';
8
- import { addDependencies, detectPackageManager, readPackage, serializePackage } from './init/package.js';
12
+ import { addDependencies, addScripts, describeManifestError, readPackage, serializePackage } from './init/package.js';
9
13
  import { createScaffold } from './init/scaffold.js';
14
+ import { MISSING_SKILL_MESSAGE, readSkillFiles } from './skill.js';
15
+ const CACHE_IGNORE_ENTRY = '.e2e/cache/';
10
16
  const GITIGNORE_ENTRIES = [
11
17
  'node_modules/',
12
18
  '.e2e/artifacts/',
13
- '.e2e/cache/',
19
+ CACHE_IGNORE_ENTRY,
14
20
  '.e2e/sessions/',
15
21
  '.e2e/report.json',
16
22
  '.e2e/ai-trace.json',
17
23
  '.e2e/junit.xml',
18
24
  '.e2e/logs/',
19
25
  ];
26
+ const SCRIPTS = { 'test:e2e': 'e2e run' };
20
27
  /**
21
28
  * Runs `e2e init`. Every prompt happens before the first write, existing
22
29
  * config and test files are never touched, and dependencies install only when
23
- * the user asks.
30
+ * the user asks. The agent skill is offered once; later runs refresh the
31
+ * copies that exist and never add new locations.
24
32
  */
25
33
  export async function init(cwd, options = {}) {
26
- clack.intro('e2e init');
34
+ clack.intro(options.directory === undefined ? 'e2e init' : `e2e init ${options.directory}`);
35
+ if (options.interactive === false && !options.yes) {
36
+ clack.log.error('e2e init asks questions and needs an interactive terminal; run it from a terminal, or pass --yes to accept the defaults (Playwright, AI on, no installation)');
37
+ return 2;
38
+ }
39
+ if (existsSync(cwd) && !statSync(cwd).isDirectory()) {
40
+ clack.log.error(`${options.directory ?? cwd} is a file, not a directory`);
41
+ return 2;
42
+ }
27
43
  let pkg;
28
44
  try {
29
45
  pkg = readPackage(cwd);
30
46
  }
31
- catch {
32
- clack.log.error('invalid package.json; fix it before running e2e init');
47
+ catch (cause) {
48
+ clack.log.error(`${path.join(cwd, 'package.json')} could not be read: ${describeManifestError(cause)}; fix it before running e2e init`);
49
+ return 2;
50
+ }
51
+ const bundledSkill = readSkillFiles();
52
+ if (bundledSkill.length === 0) {
53
+ clack.log.error(MISSING_SKILL_MESSAGE);
33
54
  return 2;
34
55
  }
35
56
  const existingConfig = ['e2e.config.ts', 'e2e.config.mts'].find((file) => existsSync(path.join(cwd, file)));
@@ -49,7 +70,7 @@ export async function init(cwd, options = {}) {
49
70
  const ignoreLines = existingIgnore.split(/\r?\n/);
50
71
  const missingIgnore = GITIGNORE_ENTRIES.filter((entry) => !ignoreLines.includes(entry));
51
72
  // Engine and AI are choices for a new config only; an existing config keeps its own dependencies.
52
- let engine = DEFAULT_ENGINE_ID;
73
+ let engine = existingConfig === undefined ? DEFAULT_ENGINE_ID : 'none';
53
74
  let ai = existingConfig === undefined;
54
75
  if (existingConfig === undefined && !options.yes) {
55
76
  const selectedEngine = await clack.select({
@@ -65,32 +86,56 @@ export async function init(cwd, options = {}) {
65
86
  return cancelled();
66
87
  ai = enableAi;
67
88
  }
89
+ // The skill goes where an earlier run put it; a project without one chooses.
90
+ let skillDirs = findInstalledSkillDirs(cwd);
91
+ if (skillDirs.length === 0) {
92
+ if (options.yes) {
93
+ skillDirs = SKILL_LOCATIONS.map((location) => location.dir);
94
+ }
95
+ else {
96
+ const selected = await clack.multiselect({
97
+ message: 'Install the e2e skill for coding agents?',
98
+ options: SKILL_LOCATIONS.map(({ dir, hint }) => ({ value: dir, label: dir, hint })),
99
+ initialValues: SKILL_LOCATIONS.map((location) => location.dir),
100
+ required: false,
101
+ });
102
+ if (clack.isCancel(selected))
103
+ return cancelled();
104
+ skillDirs = selected;
105
+ }
106
+ }
107
+ const skillInstalls = planSkillInstall(cwd, skillDirs, bundledSkill);
68
108
  const scaffold = createScaffold(engine, ai);
69
- const { manifest, additions } = addDependencies(pkg.manifest, scaffold.dependencies);
70
- if (additions.length > 0) {
71
- clack.log.info(`add dev dependencies: ${additions.map(([name, version]) => `${name}@${version}`).join(', ')}`);
109
+ const dependencies = addDependencies(pkg.manifest, scaffold.dependencies);
110
+ const { manifest, additions: scripts } = addScripts(dependencies.manifest, SCRIPTS);
111
+ if (dependencies.additions.length > 0) {
112
+ clack.log.info(`add dev dependencies: ${dependencies.additions.map(([name, version]) => `${name}@${version}`).join(', ')}`);
113
+ }
114
+ if (scripts.length > 0) {
115
+ clack.log.info(`add scripts: ${scripts.map(([name, command]) => `${name} (${command})`).join(', ')}`);
72
116
  }
73
117
  const files = [
74
- ...(pkg.original === undefined || additions.length > 0
118
+ ...(pkg.original === undefined || dependencies.additions.length > 0 || scripts.length > 0
75
119
  ? [{ relative: 'package.json', content: serializePackage(manifest, pkg.original), existing: pkg.original !== undefined }]
76
120
  : []),
77
121
  ...(existingConfig === undefined ? [{ relative: 'e2e.config.ts', content: scaffold.config, existing: false }] : []),
78
122
  ...(exampleExists ? [] : [{ relative: examplePath, content: scaffold.example, existing: false }]),
79
123
  ];
80
- if (files.length === 0 && missingIgnore.length === 0) {
124
+ if (files.length === 0 && skillInstalls.length === 0 && missingIgnore.length === 0) {
81
125
  clack.outro('nothing to create; project already initialized');
82
126
  return 0;
83
127
  }
84
128
  if (!options.yes) {
85
129
  const actions = [
86
130
  ...files.map((file) => `${file.existing ? 'update' : 'create'} ${file.relative}`),
131
+ ...skillInstalls.map((install) => `${install.existing ? 'update' : 'create'} ${install.relative}/`),
87
132
  ...(missingIgnore.length > 0 ? ['update .gitignore'] : []),
88
133
  ];
89
134
  const proceed = await clack.confirm({ message: `${actions.join(', ')}?` });
90
135
  if (clack.isCancel(proceed) || !proceed)
91
136
  return cancelled();
92
137
  }
93
- const manager = detectPackageManager(cwd, manifest);
138
+ const manager = detectPackageManager(cwd, manifest.packageManager);
94
139
  let install = false;
95
140
  if (!options.yes) {
96
141
  const selected = await clack.confirm({ message: `Install dependencies with ${manager}?`, initialValue: true });
@@ -98,16 +143,31 @@ export async function init(cwd, options = {}) {
98
143
  return cancelled();
99
144
  install = selected;
100
145
  }
146
+ // The first write; a directory named on the command line comes into being here.
147
+ mkdirSync(cwd, { recursive: true });
101
148
  for (const file of files) {
102
149
  const absolute = path.join(cwd, file.relative);
103
150
  mkdirSync(path.dirname(absolute), { recursive: true });
104
151
  writeFileSync(absolute, file.content, 'utf8');
105
152
  clack.log.success(`${file.existing ? 'updated' : 'created'} ${file.relative}`);
106
153
  }
154
+ for (const skill of skillInstalls) {
155
+ for (const file of skill.files) {
156
+ mkdirSync(path.dirname(file.absolute), { recursive: true });
157
+ writeFileSync(file.absolute, file.content, 'utf8');
158
+ }
159
+ clack.log.success(`${skill.existing ? 'updated' : 'created'} ${skill.relative}/ (${skill.files.length} files)`);
160
+ }
161
+ if (skillDirs.length === 0) {
162
+ clack.log.info('skipped the agent skill; agents can still print it with npx --no-install e2e guide');
163
+ }
107
164
  if (missingIgnore.length > 0) {
108
165
  const prefix = existingIgnore === '' || existingIgnore.endsWith('\n') ? '' : '\n';
109
166
  writeFileSync(gitignorePath, `${existingIgnore}${prefix}${missingIgnore.join('\n')}\n`, 'utf8');
110
167
  clack.log.success(`updated .gitignore (${missingIgnore.length} entries)`);
168
+ if (missingIgnore.includes(CACHE_IGNORE_ENTRY)) {
169
+ clack.log.info(`${CACHE_IGNORE_ENTRY} is ignored; committing agent.act replays is opt-in, see ${DOCS_URL}/reference/config#commit-your-traces`);
170
+ }
111
171
  }
112
172
  if (install) {
113
173
  const result = spawnSync(manager, ['install'], { cwd, stdio: 'inherit', shell: process.platform === 'win32' });
@@ -118,9 +178,27 @@ export async function init(cwd, options = {}) {
118
178
  return result.signal === 'SIGINT' ? 130 : 2;
119
179
  }
120
180
  }
121
- clack.outro(`next: ${install ? '' : `${manager} install, then `}${scaffold.runCommand}`);
181
+ if (!existsSync(path.join(cwd, 'tsconfig.json'))) {
182
+ clack.log.info('no tsconfig.json; add one for editor completions on e2e.config.ts and tests/');
183
+ }
184
+ const next = [
185
+ options.directory === undefined ? undefined : `cd ${shellArgument(options.directory)}`,
186
+ install ? undefined : `${manager} install`,
187
+ scaffold.runCommand,
188
+ ].filter((step) => step !== undefined);
189
+ clack.outro(`next: ${next.join(', then ')}`);
122
190
  return 0;
123
191
  }
192
+ /**
193
+ * A path as the user will paste it into their shell: bare while every character
194
+ * is safe, otherwise quoted for the platform (single quotes for POSIX shells,
195
+ * double quotes for cmd and PowerShell), so `apps/my web` stays one argument.
196
+ */
197
+ function shellArgument(value) {
198
+ if (/^[A-Za-z0-9_./@%+=:,-]+$/.test(value))
199
+ return value;
200
+ return os.platform() === 'win32' ? `"${value.replaceAll('"', '""')}"` : `'${value.replaceAll("'", "'\\''")}'`;
201
+ }
124
202
  /** Cancellation is only reachable before the first write, so nothing needs undoing. */
125
203
  function cancelled() {
126
204
  clack.cancel('cancelled; no changes were made');
@@ -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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"}
@@ -8,7 +8,10 @@
8
8
  * The escalation ladder behind SIGINT and SIGTERM. The next rung is the first
9
9
  * one not yet reached, so the state is the signals themselves: the first
10
10
  * signal interrupts, the second forces, the third exits on the spot — the
11
- * last resort for a teardown that is itself stuck.
11
+ * last resort for a teardown that is itself stuck. That exit skips the
12
+ * runner's teardown, so the app and service process groups it spawned are
13
+ * killed first; otherwise they outlive the run in their own groups and the
14
+ * next run fails with `APP_ALREADY_RUNNING`.
12
15
  */
13
16
  export declare class SignalLadder {
14
17
  private readonly graceful;
@@ -1 +1 @@
1
- {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/cli/signals.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAEhD,qEAAqE;IACrE,IAAI,eAAe,IAAI,WAAW,CAEjC;IAED,+EAA+E;IAC/E,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,4DAA4D;IAC5D,GAAG,CAAC,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAmC,GAAG,MAAM,IAAI,CAY3E;CACF"}
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/cli/signals.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAEhD,qEAAqE;IACrE,IAAI,eAAe,IAAI,WAAW,CAEjC;IAED,+EAA+E;IAC/E,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,4DAA4D;IAC5D,GAAG,CAAC,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAmC,GAAG,MAAM,IAAI,CAe3E;CACF"}
@@ -4,11 +4,15 @@
4
4
  * its own signals — so process termination is owned here, by the one caller
5
5
  * that is the process.
6
6
  */
7
+ import { killManagedProcessGroups } from '../run/managed-process.js';
7
8
  /**
8
9
  * The escalation ladder behind SIGINT and SIGTERM. The next rung is the first
9
10
  * one not yet reached, so the state is the signals themselves: the first
10
11
  * signal interrupts, the second forces, the third exits on the spot — the
11
- * last resort for a teardown that is itself stuck.
12
+ * last resort for a teardown that is itself stuck. That exit skips the
13
+ * runner's teardown, so the app and service process groups it spawned are
14
+ * killed first; otherwise they outlive the run in their own groups and the
15
+ * next run fails with `APP_ALREADY_RUNNING`.
12
16
  */
13
17
  export class SignalLadder {
14
18
  graceful = new AbortController();
@@ -28,8 +32,10 @@ export class SignalLadder {
28
32
  this.graceful.abort();
29
33
  else if (!this.forced.signal.aborted)
30
34
  this.forced.abort();
31
- else
35
+ else {
36
+ killManagedProcessGroups();
32
37
  exit(130);
38
+ }
33
39
  };
34
40
  process.on('SIGINT', escalate);
35
41
  process.on('SIGTERM', escalate);
@@ -1 +1 @@
1
- {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/cli/signals.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACN,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IAEhD,qEAAqE;IACrE,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,+EAA+E;IAC/E,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,4DAA4D;IAC5D,GAAG,CAAC,IAAI,GAA2B,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7D,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO;gBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;iBACpD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;gBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;;gBACrD,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3C,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/cli/signals.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAY;IACN,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IAEhD,qEAAqE;IACrE,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,+EAA+E;IAC/E,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,4DAA4D;IAC5D,GAAG,CAAC,IAAI,GAA2B,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7D,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO;gBAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;iBACpD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;gBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;iBACrD,CAAC;gBACJ,wBAAwB,EAAE,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3C,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ /** The bundled agent skill: `SKILL.md` plus one reference file per `e2e guide` topic. */
2
+ export declare const SKILL_NAME = "e2e";
3
+ /** Printed when a build or an install left the skill files out of the package. */
4
+ export declare const MISSING_SKILL_MESSAGE = "this installation ships no skill files; reinstall @e2edev/e2e";
5
+ export interface SkillFile {
6
+ /** Path relative to the skill root with `/` separators. */
7
+ readonly relative: string;
8
+ readonly content: string;
9
+ }
10
+ /** Every file of the skill, `SKILL.md` first, or none when the installation lacks it. */
11
+ export declare function readSkillFiles(): readonly SkillFile[];
12
+ /** Topics `e2e guide <topic>` accepts: one per `references/<topic>.md`. */
13
+ export declare function skillTopics(): readonly string[];
14
+ /** The overview (`SKILL.md` without its frontmatter) or one topic's text; undefined for an unknown topic. */
15
+ export declare function readGuide(topic: string | undefined): string | undefined;
16
+ //# sourceMappingURL=skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/cli/skill.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAMzF,eAAO,MAAM,UAAU,QAAQ,CAAC;AAEhC,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,kEAAkE,CAAC;AAmBrG,MAAM,WAAW,SAAS;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,yFAAyF;AACzF,wBAAgB,cAAc,IAAI,SAAS,SAAS,EAAE,CAcrD;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,IAAI,SAAS,MAAM,EAAE,CAI/C;AAED,6GAA6G;AAC7G,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMvE"}
@@ -0,0 +1,57 @@
1
+ /** The bundled agent skill: `SKILL.md` plus one reference file per `e2e guide` topic. */
2
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ export const SKILL_NAME = 'e2e';
6
+ /** Printed when a build or an install left the skill files out of the package. */
7
+ export const MISSING_SKILL_MESSAGE = 'this installation ships no skill files; reinstall @e2edev/e2e';
8
+ const TOPIC_PREFIX = 'references/';
9
+ /**
10
+ * The published package ships the skill at `<package>/skills/e2e`, copied from
11
+ * the repository's `skills/e2e` by the build. That copy is tried first so a
12
+ * user project's own `skills/` directory is never mistaken for it; inside the
13
+ * repository the source directory is read directly, so nothing here needs a
14
+ * build. Undefined only for a broken installation.
15
+ */
16
+ function skillDirectory() {
17
+ for (const candidate of ['../../skills/e2e/', '../../../../skills/e2e/']) {
18
+ const dir = fileURLToPath(new URL(candidate, import.meta.url));
19
+ if (existsSync(path.join(dir, 'SKILL.md')))
20
+ return dir;
21
+ }
22
+ return undefined;
23
+ }
24
+ /** Every file of the skill, `SKILL.md` first, or none when the installation lacks it. */
25
+ export function readSkillFiles() {
26
+ const root = skillDirectory();
27
+ if (root === undefined)
28
+ return [];
29
+ const files = [];
30
+ const walk = (dir) => {
31
+ const entries = readdirSync(dir, { withFileTypes: true }).toSorted((a, b) => a.name.localeCompare(b.name));
32
+ for (const entry of entries) {
33
+ const absolute = path.join(dir, entry.name);
34
+ if (entry.isDirectory())
35
+ walk(absolute);
36
+ else
37
+ files.push({ relative: path.relative(root, absolute).split(path.sep).join('/'), content: readFileSync(absolute, 'utf8') });
38
+ }
39
+ };
40
+ walk(root);
41
+ return [...files.filter((file) => file.relative === 'SKILL.md'), ...files.filter((file) => file.relative !== 'SKILL.md')];
42
+ }
43
+ /** Topics `e2e guide <topic>` accepts: one per `references/<topic>.md`. */
44
+ export function skillTopics() {
45
+ return readSkillFiles()
46
+ .filter((file) => file.relative.startsWith(TOPIC_PREFIX) && file.relative.endsWith('.md'))
47
+ .map((file) => file.relative.slice(TOPIC_PREFIX.length, -'.md'.length));
48
+ }
49
+ /** The overview (`SKILL.md` without its frontmatter) or one topic's text; undefined for an unknown topic. */
50
+ export function readGuide(topic) {
51
+ const files = readSkillFiles();
52
+ if (topic === undefined) {
53
+ return files.find((file) => file.relative === 'SKILL.md')?.content.replace(/^---\n[\s\S]*?\n---\n+/, '');
54
+ }
55
+ return files.find((file) => file.relative === `${TOPIC_PREFIX}${topic}.md`)?.content;
56
+ }
57
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/cli/skill.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAEzF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC;AAEhC,kFAAkF;AAClF,MAAM,CAAC,MAAM,qBAAqB,GAAG,+DAA+D,CAAC;AAErG,MAAM,YAAY,GAAG,aAAa,CAAC;AAEnC;;;;;;GAMG;AACH,SAAS,cAAc;IACrB,KAAK,MAAM,SAAS,IAAI,CAAC,mBAAmB,EAAE,yBAAyB,CAAC,EAAE,CAAC;QACzE,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;IACzD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAQD,yFAAyF;AACzF,MAAM,UAAU,cAAc;IAC5B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3G,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;gBACnC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAClI,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC;AAC5H,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,WAAW;IACzB,OAAO,cAAc,EAAE;SACpB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACzF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,SAAS,CAAC,KAAyB;IACjD,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,GAAG,YAAY,GAAG,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC;AACvF,CAAC"}
@@ -34,6 +34,14 @@ export interface CollectedFile {
34
34
  export interface Collection {
35
35
  readonly files: readonly CollectedFile[];
36
36
  readonly tests: readonly CollectedTest[];
37
+ /** Every file the config globs matched, before positionals narrowed it. */
38
+ readonly discovered: readonly string[];
39
+ /**
40
+ * Files that look like tests but match no config glob, gathered only when
41
+ * the globs matched nothing: a `login.test.ts` beside an empty `tests/**`
42
+ * is almost always the file the author meant.
43
+ */
44
+ readonly nearMisses: readonly string[];
37
45
  /**
38
46
  * Positional arguments, as written, that selected no discovered file. They
39
47
  * are not an error on their own: a positional narrows the selection, and
@@ -56,7 +64,7 @@ export interface PositionalSelection {
56
64
  /**
57
65
  * Narrows the files the config globs discovered by positional arguments. Each
58
66
  * positional resolves from the project root and is one of: a glob (any `*` or
59
- * `?`) in the 05-config.md grammar matched against the discovered files, an
67
+ * `?`) in the test glob grammar matched against the discovered files, an
60
68
  * existing directory selecting every discovered file beneath it, or a file
61
69
  * path matched exactly. Positionals only narrow: a file the config globs did
62
70
  * not discover is never selected. Discovery order is preserved.