@e2edev/e2e 0.5.0 → 0.6.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 (415) hide show
  1. package/README.md +64 -25
  2. package/dist/agent/act.d.ts +2 -2
  3. package/dist/agent/act.js +14 -37
  4. package/dist/agent/act.js.map +1 -1
  5. package/dist/agent/actions.d.ts +2 -2
  6. package/dist/agent/actions.d.ts.map +1 -1
  7. package/dist/agent/actions.js +1 -1
  8. package/dist/agent/ai-sdk.d.ts +1 -2
  9. package/dist/agent/ai-sdk.d.ts.map +1 -1
  10. package/dist/agent/ai-sdk.js +1 -2
  11. package/dist/agent/ai-sdk.js.map +1 -1
  12. package/dist/agent/default-agent.d.ts +10 -32
  13. package/dist/agent/default-agent.d.ts.map +1 -1
  14. package/dist/agent/default-agent.js +6 -13
  15. package/dist/agent/default-agent.js.map +1 -1
  16. package/dist/agent/derived.d.ts +1 -1
  17. package/dist/agent/derived.js +1 -1
  18. package/dist/agent/error.d.ts +2 -4
  19. package/dist/agent/error.d.ts.map +1 -1
  20. package/dist/agent/error.js +3 -5
  21. package/dist/agent/error.js.map +1 -1
  22. package/dist/agent/executor.d.ts +23 -52
  23. package/dist/agent/executor.d.ts.map +1 -1
  24. package/dist/agent/executor.js +1 -2
  25. package/dist/agent/executor.js.map +1 -1
  26. package/dist/agent/index.d.ts +1 -1
  27. package/dist/agent/index.d.ts.map +1 -1
  28. package/dist/agent/index.js +10 -7
  29. package/dist/agent/index.js.map +1 -1
  30. package/dist/agent/invocation.d.ts +8 -6
  31. package/dist/agent/invocation.d.ts.map +1 -1
  32. package/dist/agent/invocation.js +9 -4
  33. package/dist/agent/invocation.js.map +1 -1
  34. package/dist/agent/ledger.d.ts +17 -12
  35. package/dist/agent/ledger.d.ts.map +1 -1
  36. package/dist/agent/ledger.js +6 -9
  37. package/dist/agent/ledger.js.map +1 -1
  38. package/dist/agent/model/adapter.d.ts +7 -4
  39. package/dist/agent/model/adapter.d.ts.map +1 -1
  40. package/dist/agent/model/adapter.js +2 -2
  41. package/dist/agent/model/adapter.js.map +1 -1
  42. package/dist/agent/model/router.d.ts +1 -1
  43. package/dist/agent/model/router.d.ts.map +1 -1
  44. package/dist/agent/model/router.js +1 -1
  45. package/dist/agent/model/router.js.map +1 -1
  46. package/dist/agent/model/sdk.d.ts +11 -1
  47. package/dist/agent/model/sdk.d.ts.map +1 -1
  48. package/dist/agent/model/sdk.js +54 -10
  49. package/dist/agent/model/sdk.js.map +1 -1
  50. package/dist/agent/observation.d.ts +7 -7
  51. package/dist/agent/observation.d.ts.map +1 -1
  52. package/dist/agent/observation.js +7 -7
  53. package/dist/agent/observation.js.map +1 -1
  54. package/dist/agent/phases.d.ts +3 -3
  55. package/dist/agent/phases.d.ts.map +1 -1
  56. package/dist/agent/phases.js +4 -4
  57. package/dist/agent/phases.js.map +1 -1
  58. package/dist/agent/primitives.d.ts +4 -25
  59. package/dist/agent/primitives.d.ts.map +1 -1
  60. package/dist/agent/primitives.js +3 -36
  61. package/dist/agent/primitives.js.map +1 -1
  62. package/dist/agent/prompts.d.ts +1 -1
  63. package/dist/agent/prompts.js +1 -1
  64. package/dist/agent/protocol.d.ts +2 -3
  65. package/dist/agent/protocol.d.ts.map +1 -1
  66. package/dist/agent/protocol.js +2 -3
  67. package/dist/agent/protocol.js.map +1 -1
  68. package/dist/agent/public.d.ts +8 -10
  69. package/dist/agent/public.d.ts.map +1 -1
  70. package/dist/agent/public.js +7 -8
  71. package/dist/agent/public.js.map +1 -1
  72. package/dist/agent/replay.d.ts +2 -2
  73. package/dist/agent/replay.d.ts.map +1 -1
  74. package/dist/agent/replay.js +1 -1
  75. package/dist/agent/secrets.d.ts +3 -3
  76. package/dist/agent/secrets.d.ts.map +1 -1
  77. package/dist/agent/secrets.js +4 -4
  78. package/dist/agent/secrets.js.map +1 -1
  79. package/dist/agent/step-cache.d.ts +1 -1
  80. package/dist/agent/step-cache.d.ts.map +1 -1
  81. package/dist/agent/step-cache.js +7 -1
  82. package/dist/agent/step-cache.js.map +1 -1
  83. package/dist/agent/tool-loop.d.ts +9 -33
  84. package/dist/agent/tool-loop.d.ts.map +1 -1
  85. package/dist/agent/tool-loop.js +15 -38
  86. package/dist/agent/tool-loop.js.map +1 -1
  87. package/dist/agent/tool.d.ts +4 -5
  88. package/dist/agent/tool.d.ts.map +1 -1
  89. package/dist/agent/tool.js +2 -7
  90. package/dist/agent/tool.js.map +1 -1
  91. package/dist/cache/anchors.d.ts +2 -2
  92. package/dist/cache/anchors.d.ts.map +1 -1
  93. package/dist/cache/anchors.js +1 -1
  94. package/dist/cache/context.d.ts +6 -1
  95. package/dist/cache/context.d.ts.map +1 -1
  96. package/dist/cache/context.js +2 -1
  97. package/dist/cache/context.js.map +1 -1
  98. package/dist/cache/decide.d.ts +1 -1
  99. package/dist/cache/decide.js +1 -1
  100. package/dist/cache/identity.d.ts +9 -9
  101. package/dist/cache/identity.d.ts.map +1 -1
  102. package/dist/cache/identity.js +6 -6
  103. package/dist/cache/identity.js.map +1 -1
  104. package/dist/cache/recorder.d.ts +4 -2
  105. package/dist/cache/recorder.d.ts.map +1 -1
  106. package/dist/cache/recorder.js +10 -1
  107. package/dist/cache/recorder.js.map +1 -1
  108. package/dist/cache/relocate.d.ts +2 -2
  109. package/dist/cache/relocate.d.ts.map +1 -1
  110. package/dist/cache/relocate.js +1 -1
  111. package/dist/cache/store.d.ts +1 -1
  112. package/dist/cache/store.js +1 -1
  113. package/dist/cache/trace.d.ts +16 -1
  114. package/dist/cache/trace.d.ts.map +1 -1
  115. package/dist/cache/trace.js +22 -1
  116. package/dist/cache/trace.js.map +1 -1
  117. package/dist/cli/bin.js +9 -1
  118. package/dist/cli/bin.js.map +1 -1
  119. package/dist/cli/cache.d.ts +25 -0
  120. package/dist/cli/cache.d.ts.map +1 -0
  121. package/dist/cli/cache.js +249 -0
  122. package/dist/cli/cache.js.map +1 -0
  123. package/dist/cli/docs-url.d.ts +3 -0
  124. package/dist/cli/docs-url.d.ts.map +1 -0
  125. package/dist/cli/docs-url.js +3 -0
  126. package/dist/cli/docs-url.js.map +1 -0
  127. package/dist/cli/guide.d.ts +4 -0
  128. package/dist/cli/guide.d.ts.map +1 -0
  129. package/dist/cli/guide.js +16 -0
  130. package/dist/cli/guide.js.map +1 -0
  131. package/dist/cli/index.d.ts +1 -1
  132. package/dist/cli/index.d.ts.map +1 -1
  133. package/dist/cli/index.js +211 -42
  134. package/dist/cli/index.js.map +1 -1
  135. package/dist/cli/init/agent-skill.d.ts +34 -0
  136. package/dist/cli/init/agent-skill.d.ts.map +1 -0
  137. package/dist/cli/init/agent-skill.js +44 -0
  138. package/dist/cli/init/agent-skill.js.map +1 -0
  139. package/dist/cli/init/{backends.d.ts → engines.d.ts} +39 -32
  140. package/dist/cli/init/engines.d.ts.map +1 -0
  141. package/dist/cli/init/{backends.js → engines.js} +43 -34
  142. package/dist/cli/init/engines.js.map +1 -0
  143. package/dist/cli/init/package.d.ts +19 -3
  144. package/dist/cli/init/package.d.ts.map +1 -1
  145. package/dist/cli/init/package.js +20 -20
  146. package/dist/cli/init/package.js.map +1 -1
  147. package/dist/cli/init/scaffold.d.ts +3 -3
  148. package/dist/cli/init/scaffold.d.ts.map +1 -1
  149. package/dist/cli/init/scaffold.js +13 -12
  150. package/dist/cli/init/scaffold.js.map +1 -1
  151. package/dist/cli/init.d.ts +14 -2
  152. package/dist/cli/init.d.ts.map +1 -1
  153. package/dist/cli/init.js +104 -25
  154. package/dist/cli/init.js.map +1 -1
  155. package/dist/cli/signals.d.ts +5 -2
  156. package/dist/cli/signals.d.ts.map +1 -1
  157. package/dist/cli/signals.js +9 -3
  158. package/dist/cli/signals.js.map +1 -1
  159. package/dist/cli/skill.d.ts +16 -0
  160. package/dist/cli/skill.d.ts.map +1 -0
  161. package/dist/cli/skill.js +57 -0
  162. package/dist/cli/skill.js.map +1 -0
  163. package/dist/collect/collect.d.ts +40 -3
  164. package/dist/collect/collect.d.ts.map +1 -1
  165. package/dist/collect/collect.js +142 -19
  166. package/dist/collect/collect.js.map +1 -1
  167. package/dist/collect/registry.d.ts +1 -1
  168. package/dist/collect/registry.d.ts.map +1 -1
  169. package/dist/collect/registry.js +2 -2
  170. package/dist/collect/registry.js.map +1 -1
  171. package/dist/collect/select.d.ts +1 -1
  172. package/dist/collect/select.d.ts.map +1 -1
  173. package/dist/collect/select.js +81 -8
  174. package/dist/collect/select.js.map +1 -1
  175. package/dist/config/agent.d.ts +14 -2
  176. package/dist/config/agent.d.ts.map +1 -1
  177. package/dist/config/agent.js +36 -11
  178. package/dist/config/agent.js.map +1 -1
  179. package/dist/config/app.d.ts +76 -19
  180. package/dist/config/app.d.ts.map +1 -1
  181. package/dist/config/app.js +159 -104
  182. package/dist/config/app.js.map +1 -1
  183. package/dist/config/diagnose.d.ts +15 -0
  184. package/dist/config/diagnose.d.ts.map +1 -0
  185. package/dist/config/diagnose.js +122 -0
  186. package/dist/config/diagnose.js.map +1 -0
  187. package/dist/config/load.d.ts +9 -1
  188. package/dist/config/load.d.ts.map +1 -1
  189. package/dist/config/load.js +35 -3
  190. package/dist/config/load.js.map +1 -1
  191. package/dist/config/resolve.d.ts +8 -7
  192. package/dist/config/resolve.d.ts.map +1 -1
  193. package/dist/config/resolve.js +73 -40
  194. package/dist/config/resolve.js.map +1 -1
  195. package/dist/config/validate.d.ts +6 -2
  196. package/dist/config/validate.d.ts.map +1 -1
  197. package/dist/config/validate.js +20 -3
  198. package/dist/config/validate.js.map +1 -1
  199. package/dist/credentials.d.ts +1 -1
  200. package/dist/credentials.d.ts.map +1 -1
  201. package/dist/credentials.js +1 -1
  202. package/dist/credentials.js.map +1 -1
  203. package/dist/{backend → engine}/contract.d.ts +27 -19
  204. package/dist/engine/contract.d.ts.map +1 -0
  205. package/dist/{backend → engine}/contract.js +18 -18
  206. package/dist/engine/contract.js.map +1 -0
  207. package/dist/{backend → engine}/index.d.ts +141 -79
  208. package/dist/engine/index.d.ts.map +1 -0
  209. package/dist/{backend → engine}/index.js +62 -37
  210. package/dist/engine/index.js.map +1 -0
  211. package/dist/engine/session.d.ts +23 -0
  212. package/dist/engine/session.d.ts.map +1 -0
  213. package/dist/{backend → engine}/session.js +58 -51
  214. package/dist/engine/session.js.map +1 -0
  215. package/dist/{backend → engine}/surface.d.ts +11 -11
  216. package/dist/engine/surface.d.ts.map +1 -0
  217. package/dist/{backend → engine}/surface.js +2 -2
  218. package/dist/engine/surface.js.map +1 -0
  219. package/dist/engine/timing.d.ts.map +1 -0
  220. package/dist/engine/timing.js +8 -0
  221. package/dist/engine/timing.js.map +1 -0
  222. package/dist/expect/async.d.ts +1 -1
  223. package/dist/expect/async.d.ts.map +1 -1
  224. package/dist/expect/async.js +37 -1
  225. package/dist/expect/async.js.map +1 -1
  226. package/dist/expect/index.js +1 -1
  227. package/dist/expect/values.d.ts +1 -1
  228. package/dist/expect/values.d.ts.map +1 -1
  229. package/dist/expect/values.js +1 -1
  230. package/dist/expect/values.js.map +1 -1
  231. package/dist/index.d.ts +3 -5
  232. package/dist/index.d.ts.map +1 -1
  233. package/dist/index.js +1 -5
  234. package/dist/index.js.map +1 -1
  235. package/dist/internal/brands.d.ts +1 -1
  236. package/dist/internal/brands.d.ts.map +1 -1
  237. package/dist/internal/brands.js +1 -1
  238. package/dist/internal/brands.js.map +1 -1
  239. package/dist/internal/errors.d.ts +37 -19
  240. package/dist/internal/errors.d.ts.map +1 -1
  241. package/dist/internal/errors.js +94 -44
  242. package/dist/internal/errors.js.map +1 -1
  243. package/dist/internal/globs.d.ts +2 -2
  244. package/dist/internal/globs.d.ts.map +1 -1
  245. package/dist/internal/globs.js +2 -2
  246. package/dist/internal/globs.js.map +1 -1
  247. package/dist/internal/ids.d.ts +3 -3
  248. package/dist/internal/ids.d.ts.map +1 -1
  249. package/dist/internal/ids.js +3 -3
  250. package/dist/internal/ids.js.map +1 -1
  251. package/dist/internal/node-version.d.ts +10 -0
  252. package/dist/internal/node-version.d.ts.map +1 -0
  253. package/dist/internal/node-version.js +28 -0
  254. package/dist/internal/node-version.js.map +1 -0
  255. package/dist/internal/objects.d.ts +21 -0
  256. package/dist/internal/objects.d.ts.map +1 -0
  257. package/dist/internal/objects.js +14 -0
  258. package/dist/internal/objects.js.map +1 -0
  259. package/dist/internal/package-manager.d.ts +10 -0
  260. package/dist/internal/package-manager.d.ts.map +1 -0
  261. package/dist/internal/package-manager.js +43 -0
  262. package/dist/internal/package-manager.js.map +1 -0
  263. package/dist/internal/redact.d.ts +1 -1
  264. package/dist/internal/redact.d.ts.map +1 -1
  265. package/dist/internal/redact.js +1 -1
  266. package/dist/internal/redact.js.map +1 -1
  267. package/dist/internal/suggest.d.ts +16 -0
  268. package/dist/internal/suggest.d.ts.map +1 -0
  269. package/dist/internal/suggest.js +61 -0
  270. package/dist/internal/suggest.js.map +1 -0
  271. package/dist/internal/text.d.ts +1 -1
  272. package/dist/internal/text.d.ts.map +1 -1
  273. package/dist/internal/text.js +1 -1
  274. package/dist/internal/text.js.map +1 -1
  275. package/dist/internal/urls.d.ts +3 -3
  276. package/dist/internal/urls.d.ts.map +1 -1
  277. package/dist/internal/urls.js +8 -3
  278. package/dist/internal/urls.js.map +1 -1
  279. package/dist/locator/engine.d.ts +7 -7
  280. package/dist/locator/engine.d.ts.map +1 -1
  281. package/dist/locator/engine.js +14 -14
  282. package/dist/locator/engine.js.map +1 -1
  283. package/dist/locator/expression.d.ts +5 -3
  284. package/dist/locator/expression.d.ts.map +1 -1
  285. package/dist/locator/expression.js +25 -5
  286. package/dist/locator/expression.js.map +1 -1
  287. package/dist/locator/screen.d.ts +1 -1
  288. package/dist/locator/screen.d.ts.map +1 -1
  289. package/dist/locator/screen.js +3 -3
  290. package/dist/locator/screen.js.map +1 -1
  291. package/dist/report/build.d.ts +10 -9
  292. package/dist/report/build.d.ts.map +1 -1
  293. package/dist/report/build.js +25 -22
  294. package/dist/report/build.js.map +1 -1
  295. package/dist/report/code-frame.d.ts +8 -4
  296. package/dist/report/code-frame.d.ts.map +1 -1
  297. package/dist/report/code-frame.js +23 -18
  298. package/dist/report/code-frame.js.map +1 -1
  299. package/dist/report/debug-steps.js +1 -1
  300. package/dist/report/debug-steps.js.map +1 -1
  301. package/dist/report/format.d.ts +73 -0
  302. package/dist/report/format.d.ts.map +1 -0
  303. package/dist/report/format.js +147 -0
  304. package/dist/report/format.js.map +1 -0
  305. package/dist/report/junit.d.ts +1 -1
  306. package/dist/report/junit.d.ts.map +1 -1
  307. package/dist/report/junit.js +1 -1
  308. package/dist/report/junit.js.map +1 -1
  309. package/dist/report/list.d.ts +96 -47
  310. package/dist/report/list.d.ts.map +1 -1
  311. package/dist/report/list.js +489 -244
  312. package/dist/report/list.js.map +1 -1
  313. package/dist/report/live-window.d.ts +28 -0
  314. package/dist/report/live-window.d.ts.map +1 -0
  315. package/dist/report/live-window.js +102 -0
  316. package/dist/report/live-window.js.map +1 -0
  317. package/dist/report/write.d.ts +1 -1
  318. package/dist/report/write.d.ts.map +1 -1
  319. package/dist/report/write.js +1 -1
  320. package/dist/report/write.js.map +1 -1
  321. package/dist/run/budget.d.ts +2 -2
  322. package/dist/run/budget.js +2 -2
  323. package/dist/run/declared-processes.d.ts +30 -0
  324. package/dist/run/declared-processes.d.ts.map +1 -0
  325. package/dist/run/declared-processes.js +61 -0
  326. package/dist/run/declared-processes.js.map +1 -0
  327. package/dist/run/events.d.ts +30 -2
  328. package/dist/run/events.d.ts.map +1 -1
  329. package/dist/run/events.js.map +1 -1
  330. package/dist/run/execute.d.ts +19 -16
  331. package/dist/run/execute.d.ts.map +1 -1
  332. package/dist/run/execute.js +65 -67
  333. package/dist/run/execute.js.map +1 -1
  334. package/dist/run/fixture-recording.d.ts +10 -4
  335. package/dist/run/fixture-recording.d.ts.map +1 -1
  336. package/dist/run/fixture-recording.js +19 -6
  337. package/dist/run/fixture-recording.js.map +1 -1
  338. package/dist/run/fixtures.d.ts +2 -2
  339. package/dist/run/fixtures.d.ts.map +1 -1
  340. package/dist/run/fixtures.js +72 -44
  341. package/dist/run/fixtures.js.map +1 -1
  342. package/dist/run/in-process.d.ts +1 -1
  343. package/dist/run/in-process.js +1 -1
  344. package/dist/run/managed-process.d.ts +46 -9
  345. package/dist/run/managed-process.d.ts.map +1 -1
  346. package/dist/run/managed-process.js +136 -50
  347. package/dist/run/managed-process.js.map +1 -1
  348. package/dist/run/realm.d.ts +2 -2
  349. package/dist/run/realm.js +2 -2
  350. package/dist/run/runner.d.ts +23 -1
  351. package/dist/run/runner.d.ts.map +1 -1
  352. package/dist/run/runner.js +111 -40
  353. package/dist/run/runner.js.map +1 -1
  354. package/dist/run/scheduler.d.ts +5 -5
  355. package/dist/run/scheduler.d.ts.map +1 -1
  356. package/dist/run/scheduler.js +7 -7
  357. package/dist/run/scheduler.js.map +1 -1
  358. package/dist/run/serial.d.ts +10 -2
  359. package/dist/run/serial.d.ts.map +1 -1
  360. package/dist/run/serial.js +5 -3
  361. package/dist/run/serial.js.map +1 -1
  362. package/dist/run/sessions.d.ts +10 -10
  363. package/dist/run/sessions.d.ts.map +1 -1
  364. package/dist/run/sessions.js +11 -11
  365. package/dist/run/sessions.js.map +1 -1
  366. package/dist/run/steps.d.ts +3 -3
  367. package/dist/run/steps.d.ts.map +1 -1
  368. package/dist/run/steps.js +1 -1
  369. package/dist/run/steps.js.map +1 -1
  370. package/dist/run/units.d.ts +1 -1
  371. package/dist/run/units.js +1 -1
  372. package/dist/run/worker/entry.d.ts +1 -1
  373. package/dist/run/worker/entry.js +2 -2
  374. package/dist/run/worker/entry.js.map +1 -1
  375. package/dist/run/worker/protocol.d.ts +18 -6
  376. package/dist/run/worker/protocol.d.ts.map +1 -1
  377. package/dist/run/worker/protocol.js +1 -1
  378. package/dist/run/worker/protocol.js.map +1 -1
  379. package/dist/run/worker/session.d.ts +2 -2
  380. package/dist/run/worker/session.d.ts.map +1 -1
  381. package/dist/run/worker/session.js +5 -3
  382. package/dist/run/worker/session.js.map +1 -1
  383. package/dist/types.d.ts +58 -41
  384. package/dist/types.d.ts.map +1 -1
  385. package/dist/types.js +2 -2
  386. package/package.json +13 -12
  387. package/skills/e2e/SKILL.md +110 -0
  388. package/skills/e2e/references/agent.md +210 -0
  389. package/skills/e2e/references/debugging.md +81 -0
  390. package/skills/e2e/references/running.md +153 -0
  391. package/skills/e2e/references/setup.md +238 -0
  392. package/skills/e2e/references/writing-tests.md +289 -0
  393. package/dist/backend/contract.d.ts.map +0 -1
  394. package/dist/backend/contract.js.map +0 -1
  395. package/dist/backend/index.d.ts.map +0 -1
  396. package/dist/backend/index.js.map +0 -1
  397. package/dist/backend/session.d.ts +0 -23
  398. package/dist/backend/session.d.ts.map +0 -1
  399. package/dist/backend/session.js.map +0 -1
  400. package/dist/backend/surface.d.ts.map +0 -1
  401. package/dist/backend/surface.js.map +0 -1
  402. package/dist/backend/timing.d.ts.map +0 -1
  403. package/dist/backend/timing.js +0 -8
  404. package/dist/backend/timing.js.map +0 -1
  405. package/dist/cli/init/backends.d.ts.map +0 -1
  406. package/dist/cli/init/backends.js.map +0 -1
  407. package/dist/report/live-status.d.ts +0 -51
  408. package/dist/report/live-status.d.ts.map +0 -1
  409. package/dist/report/live-status.js +0 -163
  410. package/dist/report/live-status.js.map +0 -1
  411. package/dist/run/fixture-legacy.d.ts +0 -36
  412. package/dist/run/fixture-legacy.d.ts.map +0 -1
  413. package/dist/run/fixture-legacy.js +0 -143
  414. package/dist/run/fixture-legacy.js.map +0 -1
  415. /package/dist/{backend → engine}/timing.d.ts +0 -0
@@ -1,29 +1,29 @@
1
1
  /**
2
- * The backend contract (RFC0002): the typed, model-free body of one target.
2
+ * The engine contract: the typed, model-free body of one target.
3
3
  *
4
- * A backend never talks to a model. It declares capabilities - observation,
4
+ * An engine never talks to a model. It declares capabilities - observation,
5
5
  * actions, location, state, artifacts, contributed fixtures - and the harness
6
- * grades what a target can do from what its backend declares: observation
6
+ * grades what a target can do from what its engine declares: observation
7
7
  * unlocks the judgment tier and prompt snapshots, `perform` unlocks the
8
8
  * harness-routed node actions (the agent's grammar verbs and the `screen`
9
9
  * tier's actions alike), location unlocks `screen`/`expect`. Every piece of
10
10
  * model-facing vocabulary is an agent-side `defineTool`; a target with no
11
- * backend at all is valid and simply runs everything opaque.
11
+ * engine at all is valid and simply runs everything opaque.
12
12
  *
13
- * Core knows this contract and never a backend's internals: no platform noun
14
- * appears here. A document backend, a simulator backend, and a desktop backend
13
+ * Core knows this contract and never an engine's internals: no platform noun
14
+ * appears here. A document engine, a simulator engine, and a desktop engine
15
15
  * fill in the same members with different bodies.
16
16
  *
17
- * `defineBackend` is the loud manifest: capability detection happens here,
18
- * synchronously, at config load - a malformed backend fails the run instead
17
+ * `defineEngine` is the loud manifest: capability detection happens here,
18
+ * synchronously, at config load - a malformed engine fails the run instead
19
19
  * of silently demoting itself to a lower tier.
20
20
  */
21
- import { backendBrand } from '../internal/brands.js';
21
+ import { engineBrand } from '../internal/brands.js';
22
22
  import { ConfigurationError } from '../internal/errors.js';
23
- // Semantics the spec requires every backend and contributed fixture to
24
- // reproduce exactly, exported so a backend never carries its own copy: the
25
- // runner error taxonomy (06-cli.md), text-pattern matching (04-locators.md),
26
- // URL matching (03-assertions.md), assertion polling (03-assertions.md), and
23
+ // Semantics the spec requires every engine and contributed fixture to
24
+ // reproduce exactly, exported so an engine never carries its own copy: the
25
+ // runner error taxonomy, text-pattern matching,
26
+ // URL matching, assertion polling, and
27
27
  // the JSON-value rules for data a fixture returns.
28
28
  export { ConfigurationError, InfrastructureError, TestError } from '../internal/errors.js';
29
29
  export { validateJsonValue } from '../internal/json-value.js';
@@ -31,9 +31,10 @@ export { describePattern, matchesText, toTextPattern } from '../internal/text.js
31
31
  export { raceAbort } from './timing.js';
32
32
  export { Deadline, pollCondition, withTimeout, withinCleanupBudget } from '../internal/time.js';
33
33
  export { urlMatches } from '../internal/urls.js';
34
- import { BACKEND_SPI_VERSION, } from './contract.js';
35
- export { BACKEND_ERROR_CODES, BACKEND_SPI_VERSION, BackendError, OBSERVED_NAME_LIMIT, OBSERVED_TEXT_LIMIT, RETRYABLE_BACKEND_ERROR_CODES, } from './contract.js';
36
- /** Every key a backend may declare; anything else is rejected at config load. */
34
+ export { obj } from '../internal/objects.js';
35
+ import { ENGINE_SPI_VERSION, } from './contract.js';
36
+ export { ENGINE_ERROR_CODES, ENGINE_SPI_VERSION, EngineError, OBSERVED_NAME_LIMIT, OBSERVED_TEXT_LIMIT, RETRYABLE_ENGINE_ERROR_CODES, } from './contract.js';
37
+ /** Every key an engine may declare; anything else is rejected at config load. */
37
38
  const KNOWN_KEYS = [
38
39
  'name',
39
40
  'version',
@@ -59,6 +60,20 @@ const NESTED_KEYS = {
59
60
  artifacts: ['screenshot', 'startTrace', 'stopTrace'],
60
61
  app: ['navigate', 'back', 'restart', 'clearState'],
61
62
  };
63
+ /**
64
+ * Declarative members of the `app` manifest: facts about the app under test,
65
+ * copied through as data. Their values are validated when the config resolves
66
+ * the target, where an error can name it.
67
+ */
68
+ const APP_DECLARATION_KEYS = [
69
+ 'url',
70
+ 'allowedOrigins',
71
+ 'environment',
72
+ 'identity',
73
+ 'command',
74
+ 'readyUrl',
75
+ 'services',
76
+ ];
62
77
  const FUNCTION_MEMBERS = [
63
78
  'observe',
64
79
  'locate',
@@ -75,26 +90,36 @@ const FUNCTION_MEMBERS = [
75
90
  const RESERVED_FIXTURES = new Set(['agent', 'app', 'screen', 'platform', 'session']);
76
91
  const FIXTURE_NAME_PATTERN = /^[a-z][A-Za-z0-9]*$/;
77
92
  function invalid(name, detail) {
78
- return new ConfigurationError('INVALID_CONFIG', `backend "${name}": ${detail}`);
93
+ return new ConfigurationError('INVALID_CONFIG', `engine "${name}": ${detail}`);
79
94
  }
80
95
  /**
81
96
  * Validates one nested manifest (`state`, `artifacts`, `app`): a plain object
82
- * whose keys are closed and whose declared members are functions. Returns a
83
- * copy with every member bound to the manifest, so class-based bodies work.
97
+ * whose keys are closed and whose declared members are functions, except the
98
+ * `app` declaration's data members, which are copied through. Returns a copy
99
+ * with every function bound to the manifest, so class-based bodies work.
84
100
  */
85
101
  function nestedManifest(name, key, value, required = []) {
86
- if (typeof value !== 'object' || value === null) {
102
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
87
103
  throw invalid(name, `${key} must be an object`);
88
104
  }
89
- const allowed = NESTED_KEYS[key];
105
+ const hooks = NESTED_KEYS[key];
106
+ const data = key === 'app' ? APP_DECLARATION_KEYS : [];
90
107
  const source = value;
91
108
  for (const member of Object.keys(source)) {
92
- if (!allowed.includes(member)) {
93
- throw invalid(name, `${key} has unknown key "${member}"; expected one of ${allowed.join(', ')}`);
109
+ if (!hooks.includes(member) && !data.includes(member)) {
110
+ throw invalid(name, `${key} has unknown key "${member}"; expected one of ${[...data, ...hooks].join(', ')}`);
94
111
  }
95
112
  }
96
113
  const bound = {};
97
- for (const member of allowed) {
114
+ for (const member of data) {
115
+ const fact = source[member];
116
+ if (fact === undefined)
117
+ continue;
118
+ if (typeof fact === 'function')
119
+ throw invalid(name, `${key}.${member} is a declaration, not a hook`);
120
+ bound[member] = fact;
121
+ }
122
+ for (const member of hooks) {
98
123
  const fn = source[member];
99
124
  if (fn === undefined) {
100
125
  if (required.includes(member))
@@ -108,7 +133,7 @@ function nestedManifest(name, key, value, required = []) {
108
133
  return bound;
109
134
  }
110
135
  /**
111
- * Validates a backend and computes its capability set. Runs synchronously at
136
+ * Validates an engine and computes its capability set. Runs synchronously at
112
137
  * config load and fails loud: a misspelled member or an undeclared dependency
113
138
  * is `INVALID_CONFIG`, never a silent demotion to a lower tier.
114
139
  *
@@ -116,19 +141,19 @@ function nestedManifest(name, key, value, required = []) {
116
141
  * through the prototype chain and binding every function to the spec, so a
117
142
  * class instance (own state fields included) is as valid a body as a literal.
118
143
  */
119
- export function defineBackend(spec) {
144
+ export function defineEngine(spec) {
120
145
  if (typeof spec !== 'object' || spec === null) {
121
- throw new ConfigurationError('INVALID_CONFIG', 'defineBackend requires a backend object');
146
+ throw new ConfigurationError('INVALID_CONFIG', 'defineEngine requires an engine object');
122
147
  }
123
148
  if (typeof spec.name !== 'string' || spec.name.trim() === '') {
124
- throw new ConfigurationError('INVALID_CONFIG', 'backend.name must be a non-empty string');
149
+ throw new ConfigurationError('INVALID_CONFIG', 'engine.name must be a non-empty string');
125
150
  }
126
151
  const name = spec.name;
127
152
  if (typeof spec.version !== 'string' || spec.version.trim() === '') {
128
153
  throw invalid(name, 'version must be a non-empty string; it is provenance and keys the trace cache');
129
154
  }
130
- if (spec.spiVersion !== BACKEND_SPI_VERSION) {
131
- throw invalid(name, `declares spiVersion ${String(spec.spiVersion)}; this runner supports ${BACKEND_SPI_VERSION}`);
155
+ if (spec.spiVersion !== ENGINE_SPI_VERSION) {
156
+ throw invalid(name, `declares spiVersion ${String(spec.spiVersion)}; this runner supports ${ENGINE_SPI_VERSION}`);
132
157
  }
133
158
  // A literal's unknown key is a misspelling or a misplaced tool; a class
134
159
  // instance's own fields are its state, so only literals are checked.
@@ -136,7 +161,7 @@ export function defineBackend(spec) {
136
161
  const known = KNOWN_KEYS;
137
162
  for (const key of Object.keys(spec)) {
138
163
  if (!known.includes(key)) {
139
- throw invalid(name, `unknown key "${key}" - tools belong on the agent, not the backend`);
164
+ throw invalid(name, `unknown key "${key}" - tools belong on the agent, not the engine`);
140
165
  }
141
166
  }
142
167
  }
@@ -185,7 +210,7 @@ export function defineBackend(spec) {
185
210
  }
186
211
  capabilities.add(fixture);
187
212
  }
188
- // Bound like every other member, so a class-based backend keeps `this`
213
+ // Bound like every other member, so a class-based engine keeps `this`
189
214
  // in its fixture factories too.
190
215
  handle['fixtures'] = Object.freeze(Object.fromEntries(Object.entries(spec.fixtures).map(([fixture, factory]) => [
191
216
  fixture,
@@ -206,17 +231,17 @@ export function defineBackend(spec) {
206
231
  }
207
232
  if (spec.app !== undefined)
208
233
  handle['app'] = nestedManifest(name, 'app', spec.app);
209
- // Assembled key by key above, so the record is a Backend by construction.
234
+ // Assembled key by key above, so the record is an Engine by construction.
210
235
  return Object.freeze({
211
236
  ...handle,
212
- [backendBrand]: true,
237
+ [engineBrand]: true,
213
238
  capabilities,
214
239
  });
215
240
  }
216
- /** True for a defineBackend-branded handle, across realms. */
217
- export function isBackendHandle(value) {
241
+ /** True for a defineEngine-branded handle, across realms. */
242
+ export function isEngineHandle(value) {
218
243
  return (typeof value === 'object' &&
219
244
  value !== null &&
220
- value[backendBrand] === true);
245
+ value[engineBrand] === true);
221
246
  }
222
247
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The engine-to-session adapter. One adapter per attempt satisfies
3
+ * the internal `TargetSession` surface over the engine contract, so the agent
4
+ * tier, the judgment tier, the trace cache, and the fixture graph program
5
+ * against one shape. It is the single seam every engine call crosses, which
6
+ * makes it the one place two rules are enforced: a capability the engine does
7
+ * not declare fails loud with `UNSUPPORTED_CAPABILITY` at the moment of use,
8
+ * and anything an engine throws that is not an `EngineError` is normalized to
9
+ * a non-retryable `ENGINE_FAILURE`, so a crashed engine is an infrastructure
10
+ * failure everywhere and never a retry-eligible test failure.
11
+ */
12
+ import type { EngineHandle } from './index.ts';
13
+ import { type TargetSession } from './surface.ts';
14
+ export interface EngineSessionOptions {
15
+ readonly engine: EngineHandle | undefined;
16
+ readonly targetName: string;
17
+ }
18
+ /**
19
+ * Builds one session over an engine. One adapter per attempt; revisions are
20
+ * minted per adapter, so refs can never leak across attempts.
21
+ */
22
+ export declare function createEngineSession(options: EngineSessionOptions): TargetSession;
23
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/engine/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAmED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAuJhF"}
@@ -1,25 +1,25 @@
1
1
  /**
2
- * The backend-to-session adapter (RFC0002). One adapter per attempt satisfies
3
- * the internal `TargetSession` surface over the backend contract, so the agent
2
+ * The engine-to-session adapter. One adapter per attempt satisfies
3
+ * the internal `TargetSession` surface over the engine contract, so the agent
4
4
  * tier, the judgment tier, the trace cache, and the fixture graph program
5
- * against one shape. It is the single seam every backend call crosses, which
6
- * makes it the one place two rules are enforced: a capability the backend does
5
+ * against one shape. It is the single seam every engine call crosses, which
6
+ * makes it the one place two rules are enforced: a capability the engine does
7
7
  * not declare fails loud with `UNSUPPORTED_CAPABILITY` at the moment of use,
8
- * and anything a backend throws that is not a `BackendError` is normalized to
9
- * a non-retryable `BACKEND_FAILURE`, so a crashed backend is an infrastructure
8
+ * and anything an engine throws that is not an `EngineError` is normalized to
9
+ * a non-retryable `ENGINE_FAILURE`, so a crashed engine is an infrastructure
10
10
  * failure everywhere and never a retry-eligible test failure.
11
11
  */
12
- import { asBackendError, ConfigurationError, E2EError, errorMessage, isForeignE2EError, } from '../internal/errors.js';
13
- import { BackendError, } from './surface.js';
12
+ import { asEngineError, ConfigurationError, E2EError, errorMessage, isForeignE2EError, } from '../internal/errors.js';
13
+ import { EngineError, } from './surface.js';
14
14
  /** Located refs are pruned oldest-first past this bound so the map cannot grow unboundedly. */
15
15
  const MAX_LOCATED_REFS = 2048;
16
16
  /** Revision prefixes: the adapter mints `l<n>` for locate and `b<n>` for observe. */
17
17
  const LOCATE_REVISION_PREFIX = 'l';
18
18
  const OBSERVE_REVISION_PREFIX = 'b';
19
19
  /**
20
- * Stamps the adapter's revision onto every ref. Backends mint stable ids;
20
+ * Stamps the adapter's revision onto every ref. Engines mint stable ids;
21
21
  * the adapter owns revisions, so the staleness rule (act on the newest
22
- * observation only) holds without every backend reimplementing it.
22
+ * observation only) holds without every engine reimplementing it.
23
23
  */
24
24
  function stampRevision(node, revision) {
25
25
  return {
@@ -30,7 +30,7 @@ function stampRevision(node, revision) {
30
30
  : { children: node.children.map((child) => stampRevision(child, revision)) }),
31
31
  };
32
32
  }
33
- /** Wraps a backend snapshot's root nodes into the single-root observation tree. */
33
+ /** Wraps an engine snapshot's root nodes into the single-root observation tree. */
34
34
  function toTree(nodes, revision) {
35
35
  const stamped = nodes.map((node) => stampRevision(node, revision));
36
36
  const first = stamped[0];
@@ -49,46 +49,49 @@ function countSecure(nodes) {
49
49
  return count;
50
50
  }
51
51
  /**
52
- * Normalizes what a backend threw onto the error contract. `BackendError`
52
+ * Normalizes what an engine threw onto the error contract. `EngineError`
53
53
  * (from any module copy) and runner errors pass through; anything else is the
54
- * backend failing outside its contract, reported as infrastructure.
54
+ * engine failing outside its contract, reported as infrastructure.
55
55
  */
56
56
  function normalize(cause, label) {
57
- if (cause instanceof E2EError || isForeignE2EError(cause) || asBackendError(cause) !== undefined) {
57
+ if (cause instanceof E2EError || isForeignE2EError(cause) || asEngineError(cause) !== undefined) {
58
58
  throw cause;
59
59
  }
60
- throw new BackendError('BACKEND_FAILURE', `${label} failed: ${errorMessage(cause)}`, {
60
+ throw new EngineError('ENGINE_FAILURE', `${label} failed: ${errorMessage(cause)}`, {
61
61
  retryable: false,
62
62
  cause,
63
63
  });
64
64
  }
65
- /** The grammar verbs a backend declaration can honor. */
66
- function declaredVerbs(backend) {
65
+ /** The grammar verbs an engine declaration can honor. */
66
+ function declaredVerbs(engine) {
67
67
  const verbs = new Set();
68
- if (backend?.perform !== undefined) {
68
+ if (engine?.perform !== undefined) {
69
69
  for (const verb of ['tap', 'type', 'typeSecret', 'press', 'select'])
70
70
  verbs.add(verb);
71
71
  }
72
- if (backend?.swipe !== undefined)
72
+ if (engine?.swipe !== undefined)
73
73
  verbs.add('scroll');
74
- if (backend?.app?.navigate !== undefined)
74
+ if (engine?.app?.navigate !== undefined)
75
75
  verbs.add('navigate');
76
76
  return verbs;
77
77
  }
78
78
  /**
79
- * Builds one session over a backend. One adapter per attempt; revisions are
79
+ * Builds one session over an engine. One adapter per attempt; revisions are
80
80
  * minted per adapter, so refs can never leak across attempts.
81
81
  */
82
- export function createBackendSession(options) {
83
- const { backend, targetName } = options;
82
+ export function createEngineSession(options) {
83
+ const { engine, targetName } = options;
84
84
  let revision = 0;
85
85
  let viewport = { width: 1, height: 1, scale: 1 };
86
86
  const unsupported = (what) => {
87
- throw new ConfigurationError('UNSUPPORTED_CAPABILITY', `target "${targetName}" has no backend capability for ${what}`);
87
+ const remedy = engine === undefined
88
+ ? 'the target declares no engine; add one, such as playwright({ url }) from @e2edev/playwright or agentDevice({ platform, app }) from @e2edev/agent-device'
89
+ : `engine ${engine.name} does not implement it`;
90
+ throw new ConfigurationError('UNSUPPORTED_CAPABILITY', `target "${targetName}" has no engine capability for ${what}: ${remedy}`);
88
91
  };
89
92
  /**
90
93
  * One declared member as a guarded call: capability-checked at the moment of
91
- * use and error-normalized. `defineBackend` bound every member to its body,
94
+ * use and error-normalized. `defineEngine` bound every member to its body,
92
95
  * so the function is called as is.
93
96
  */
94
97
  const guard = (what, fn) => async (...args) => {
@@ -103,14 +106,14 @@ export function createBackendSession(options) {
103
106
  };
104
107
  // Located nodes, cached by id so `read(ref)` answers from the resolution
105
108
  // that minted the ref. A read against an older resolution is NODE_STALE,
106
- // which the engine treats as retryable: it re-resolves and reads again.
109
+ // which the locator engine treats as retryable: it re-resolves and reads again.
107
110
  let locateRevision = 0;
108
111
  const located = new Map();
109
- const stale = (ref) => new BackendError('NODE_STALE', `node ${ref.id} is stale; re-resolve`, { retryable: true });
112
+ const stale = (ref) => new EngineError('NODE_STALE', `node ${ref.id} is stale; re-resolve`, { retryable: true });
110
113
  /**
111
- * A located ref from a superseded resolution never reaches the backend.
112
- * Observation refs are exempt: they are checked by the backend against its
113
- * newest observation, and a backend with stable ids may legitimately hand
114
+ * A located ref from a superseded resolution never reaches the engine.
115
+ * Observation refs are exempt: they are checked by the engine against its
116
+ * newest observation, and an engine with stable ids may legitimately hand
114
117
  * the same id to both tiers.
115
118
  */
116
119
  const rejectSupersededLocate = (ref) => {
@@ -120,35 +123,35 @@ export function createBackendSession(options) {
120
123
  if (known !== undefined && known.ref.revision !== ref.revision)
121
124
  throw stale(ref);
122
125
  };
123
- const locateRaw = guard('locators (screen)', backend?.locate);
124
- const observeRaw = guard('observation', backend?.observe);
126
+ const locateRaw = guard('locators (screen)', engine?.locate);
127
+ const observeRaw = guard('observation', engine?.observe);
125
128
  const app = {
126
- open: guard('navigation', backend?.app?.navigate),
127
- back: guard('back navigation', backend?.app?.back),
128
- restart: guard('app restart', backend?.app?.restart),
129
- clearState: guard('app state clearing', backend?.app?.clearState),
129
+ open: guard('navigation', engine?.app?.navigate),
130
+ back: guard('back navigation', engine?.app?.back),
131
+ restart: guard('app restart', engine?.app?.restart),
132
+ clearState: guard('app state clearing', engine?.app?.clearState),
130
133
  };
131
134
  const artifacts = {
132
- screenshot: guard('screenshots', backend?.artifacts?.screenshot),
133
- ...(backend?.artifacts?.startTrace === undefined || backend.artifacts.stopTrace === undefined
135
+ screenshot: guard('screenshots', engine?.artifacts?.screenshot),
136
+ ...(engine?.artifacts?.startTrace === undefined || engine.artifacts.stopTrace === undefined
134
137
  ? {}
135
138
  : {
136
- startTrace: guard('traces', backend.artifacts.startTrace),
137
- stopTrace: guard('traces', backend.artifacts.stopTrace),
139
+ startTrace: guard('traces', engine.artifacts.startTrace),
140
+ stopTrace: guard('traces', engine.artifacts.stopTrace),
138
141
  }),
139
142
  };
140
143
  let ended = false;
141
144
  return {
142
- verbs: declaredVerbs(backend),
145
+ verbs: declaredVerbs(engine),
143
146
  app,
144
147
  artifacts,
145
- ...(backend?.state === undefined
148
+ ...(engine?.state === undefined
146
149
  ? {}
147
150
  : {
148
- captureState: guard('state capture', backend.state.capture),
149
- restoreState: guard('state restore', backend.state.restore),
151
+ captureState: guard('state capture', engine.state.capture),
152
+ restoreState: guard('state restore', engine.state.restore),
150
153
  }),
151
- ...(backend?.url === undefined ? {} : { url: guard('the current URL', backend.url) }),
154
+ ...(engine?.url === undefined ? {} : { url: guard('the current URL', engine.url) }),
152
155
  async observe(operation, observeOptions) {
153
156
  const snapshot = await observeRaw(operation, observeOptions?.pixels === true ? { pixels: true } : {});
154
157
  if (snapshot.viewport !== undefined)
@@ -169,7 +172,11 @@ export function createBackendSession(options) {
169
172
  };
170
173
  },
171
174
  async locate(expression, operation) {
172
- const nodes = await locateRaw(expression, operation);
175
+ // An engine answers `visible` inside scopes, filters, and indices, where
176
+ // only it can; the harness holds a top-level query to the same predicate
177
+ // so a direct query never resolves to a node its own state calls hidden.
178
+ const nodes = (await locateRaw(expression, operation)).filter((node) => !(expression.kind === 'query' && expression.query.visible === true) ||
179
+ node.states?.hidden !== true);
173
180
  locateRevision += 1;
174
181
  const locateRev = `${LOCATE_REVISION_PREFIX}${locateRevision}`;
175
182
  const refs = [];
@@ -187,7 +194,7 @@ export function createBackendSession(options) {
187
194
  return refs;
188
195
  },
189
196
  async read(ref) {
190
- if (backend?.locate === undefined)
197
+ if (engine?.locate === undefined)
191
198
  unsupported('locators (screen)');
192
199
  const node = located.get(ref.id);
193
200
  if (node === undefined || node.ref.revision !== ref.revision)
@@ -198,16 +205,16 @@ export function createBackendSession(options) {
198
205
  rejectSupersededLocate(ref);
199
206
  if (action.kind === 'dragTo')
200
207
  rejectSupersededLocate(action.target);
201
- await guard(`the "${action.kind}" action`, backend?.perform)(ref, action, operation);
208
+ await guard(`the "${action.kind}" action`, engine?.perform)(ref, action, operation);
202
209
  },
203
- swipe: guard('swipe gestures', backend?.swipe),
204
- // The backend outlives the attempt; only the per-attempt isolation ends
210
+ swipe: guard('swipe gestures', engine?.swipe),
211
+ // The engine outlives the attempt; only the per-attempt isolation ends
205
212
  // here, exactly once. dispose() belongs to the worker.
206
213
  close: guard('attempt end', async (operation) => {
207
214
  if (ended)
208
215
  return;
209
216
  ended = true;
210
- await backend?.endAttempt?.({ signal: operation.signal, timeoutMs: operation.timeoutMs });
217
+ await engine?.endAttempt?.({ signal: operation.signal, timeoutMs: operation.timeoutMs });
211
218
  }),
212
219
  };
213
220
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/engine/session.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * The internal session surface the harness consumes for one attempt. It is
3
- * produced only by `createBackendSession` (the backend-to-session adapter) and
3
+ * produced only by `createEngineSession` (the engine-to-session adapter) and
4
4
  * is never part of the public API: the locator engine, the agent tiers, and
5
5
  * the attempt executor program against it so that revision minting, staleness
6
6
  * checks, and capability gating exist exactly once.
@@ -9,17 +9,17 @@
9
9
  */
10
10
  import type { Momentum, ScrollDirection } from '../types.ts';
11
11
  import type { LocatorAction, LocatorExpression, NodeRef, ObservationPixels, OperationContext, SemanticNode } from './contract.ts';
12
- import type { BackendObserveOptions, BackendState } from './index.ts';
12
+ import type { EngineObserveOptions, EngineState } from './index.ts';
13
13
  export type * from './contract.ts';
14
- export { BackendError } from './contract.ts';
15
- export type { BackendObserveOptions, BackendState } from './index.ts';
14
+ export { EngineError } from './contract.ts';
15
+ export type { EngineObserveOptions, EngineState } from './index.ts';
16
16
  /**
17
17
  * The agent's action grammar, by verb. A session declares which verbs its
18
- * backend can honor so the agent offers the model exactly that vocabulary.
18
+ * engine can honor so the agent offers the model exactly that vocabulary.
19
19
  */
20
20
  export type GrammarVerb = 'tap' | 'type' | 'typeSecret' | 'press' | 'select' | 'scroll' | 'navigate';
21
21
  export interface Observation {
22
- /** Location captured with this tree, when the backend can provide it. */
22
+ /** Location captured with this tree, when the engine can provide it. */
23
23
  readonly url?: string;
24
24
  readonly revision: string;
25
25
  readonly capturedAt: string;
@@ -31,7 +31,7 @@ export interface Observation {
31
31
  readonly scale: number;
32
32
  };
33
33
  /**
34
- * What the backend masked against what it saw. Pixel completeness is judged
34
+ * What the engine masked against what it saw. Pixel completeness is judged
35
35
  * downstream from these counts: fewer masked regions than secure nodes
36
36
  * withholds the pixels and keeps the tree.
37
37
  */
@@ -59,10 +59,10 @@ export interface SessionArtifacts {
59
59
  stopTrace?(operation: OperationContext): Promise<string>;
60
60
  }
61
61
  export interface TargetSession {
62
- /** Grammar verbs the backend can honor, read from its declaration. */
62
+ /** Grammar verbs the engine can honor, read from its declaration. */
63
63
  readonly verbs: ReadonlySet<GrammarVerb>;
64
64
  /** Captures one atomic agent observation; the harness redacts it downstream. */
65
- observe(operation: OperationContext, options?: BackendObserveOptions): Promise<Observation>;
65
+ observe(operation: OperationContext, options?: EngineObserveOptions): Promise<Observation>;
66
66
  /** Resolves immediately; the runner owns query polling and strictness. */
67
67
  locate(expression: LocatorExpression, operation: OperationContext): Promise<readonly NodeRef[]>;
68
68
  /** Reads one node from the resolution that minted its ref. */
@@ -74,9 +74,9 @@ export interface TargetSession {
74
74
  readonly app: SessionApp;
75
75
  readonly artifacts: SessionArtifacts;
76
76
  /** Captures immutable app state for a session envelope. */
77
- captureState?(operation: OperationContext): Promise<BackendState>;
77
+ captureState?(operation: OperationContext): Promise<EngineState>;
78
78
  /** Replaces current app state with an immutable captured state. */
79
- restoreState?(state: BackendState, operation: OperationContext): Promise<void>;
79
+ restoreState?(state: EngineState, operation: OperationContext): Promise<void>;
80
80
  /** Current top-level URL of the surface, when the platform has one. */
81
81
  url?(operation: OperationContext): Promise<string>;
82
82
  /** Ends the attempt's isolation within the operation's budget. Idempotent. */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/engine/surface.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * The internal session surface the harness consumes for one attempt. It is
3
- * produced only by `createBackendSession` (the backend-to-session adapter) and
3
+ * produced only by `createEngineSession` (the engine-to-session adapter) and
4
4
  * is never part of the public API: the locator engine, the agent tiers, and
5
5
  * the attempt executor program against it so that revision minting, staleness
6
6
  * checks, and capability gating exist exactly once.
7
7
  *
8
8
  * Re-exports the contract vocabulary so internal modules import one path.
9
9
  */
10
- export { BackendError } from './contract.js';
10
+ export { EngineError } from './contract.js';
11
11
  //# sourceMappingURL=surface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/engine/surface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAcH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/engine/timing.ts"],"names":[],"mappings":"AAIA,uFAAuF;AACvF,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAElH"}
@@ -0,0 +1,8 @@
1
+ /** Cancellation with the engine error taxonomy and shared lifecycle mechanics. */
2
+ import { withAbort } from '../internal/time.js';
3
+ import { EngineError } from './contract.js';
4
+ /** Checks cancellation before dispatching a thunk, then abandons the wait on abort. */
5
+ export function raceAbort(work, signal, label) {
6
+ return withAbort(work, signal, () => new EngineError('CANCELLED', `${label} cancelled`, { retryable: false }));
7
+ }
8
+ //# sourceMappingURL=timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/engine/timing.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,uFAAuF;AACvF,MAAM,UAAU,SAAS,CAAI,IAAqC,EAAE,MAAmB,EAAE,KAAa;IACpG,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,GAAG,KAAK,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACjH,CAAC"}
@@ -1,4 +1,4 @@
1
- /** Runner-owned polling locator assertions (spec 03-assertions.md). */
1
+ /** Runner-owned polling locator assertions. */
2
2
  import type { LocatorInternals } from '../locator/screen.ts';
3
3
  import type { AsyncExpectation } from '../types.ts';
4
4
  export declare function createAsyncExpectation(internals: LocatorInternals): AsyncExpectation;
@@ -1 +1 @@
1
- {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/expect/async.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAQvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,aAAa,CAAC;AA2P/D,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,gBAAgB,GAAG,gBAAgB,CAEpF"}
1
+ {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/expect/async.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAQ/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,aAAa,CAAC;AAsS/D,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,gBAAgB,GAAG,gBAAgB,CAEpF"}