@e2edev/e2e 0.12.0 → 0.14.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 (319) hide show
  1. package/README.md +4 -4
  2. package/dist/agent/act.d.ts +13 -7
  3. package/dist/agent/act.d.ts.map +1 -1
  4. package/dist/agent/act.js +125 -730
  5. package/dist/agent/act.js.map +1 -1
  6. package/dist/agent/action-dispatcher.d.ts +98 -0
  7. package/dist/agent/action-dispatcher.d.ts.map +1 -0
  8. package/dist/agent/action-dispatcher.js +319 -0
  9. package/dist/agent/action-dispatcher.js.map +1 -0
  10. package/dist/agent/actions.d.ts +16 -1
  11. package/dist/agent/actions.d.ts.map +1 -1
  12. package/dist/agent/actions.js +5 -1
  13. package/dist/agent/actions.js.map +1 -1
  14. package/dist/agent/default-agent.d.ts +1 -1
  15. package/dist/agent/default-agent.d.ts.map +1 -1
  16. package/dist/agent/default-agent.js +30 -9
  17. package/dist/agent/default-agent.js.map +1 -1
  18. package/dist/agent/error.d.ts.map +1 -1
  19. package/dist/agent/error.js +1 -0
  20. package/dist/agent/error.js.map +1 -1
  21. package/dist/agent/executor.d.ts +33 -5
  22. package/dist/agent/executor.d.ts.map +1 -1
  23. package/dist/agent/executor.js.map +1 -1
  24. package/dist/agent/index.js +1 -1
  25. package/dist/agent/index.js.map +1 -1
  26. package/dist/agent/invocation.d.ts +4 -9
  27. package/dist/agent/invocation.d.ts.map +1 -1
  28. package/dist/agent/invocation.js +1 -6
  29. package/dist/agent/invocation.js.map +1 -1
  30. package/dist/agent/model/sdk.d.ts +1 -1
  31. package/dist/agent/model/sdk.js +1 -1
  32. package/dist/agent/observation-feed.d.ts +123 -0
  33. package/dist/agent/observation-feed.d.ts.map +1 -0
  34. package/dist/agent/observation-feed.js +281 -0
  35. package/dist/agent/observation-feed.js.map +1 -0
  36. package/dist/agent/observation.d.ts +14 -1
  37. package/dist/agent/observation.d.ts.map +1 -1
  38. package/dist/agent/observation.js +58 -2
  39. package/dist/agent/observation.js.map +1 -1
  40. package/dist/agent/operation-queue.d.ts +21 -0
  41. package/dist/agent/operation-queue.d.ts.map +1 -0
  42. package/dist/agent/operation-queue.js +27 -0
  43. package/dist/agent/operation-queue.js.map +1 -0
  44. package/dist/agent/phases.js +1 -1
  45. package/dist/agent/phases.js.map +1 -1
  46. package/dist/agent/pixels.d.ts +21 -0
  47. package/dist/agent/pixels.d.ts.map +1 -0
  48. package/dist/agent/pixels.js +85 -0
  49. package/dist/agent/pixels.js.map +1 -0
  50. package/dist/agent/point-tap.d.ts +52 -0
  51. package/dist/agent/point-tap.d.ts.map +1 -0
  52. package/dist/agent/point-tap.js +88 -0
  53. package/dist/agent/point-tap.js.map +1 -0
  54. package/dist/agent/primitives.d.ts +7 -1
  55. package/dist/agent/primitives.d.ts.map +1 -1
  56. package/dist/agent/primitives.js +99 -27
  57. package/dist/agent/primitives.js.map +1 -1
  58. package/dist/agent/replay.d.ts +8 -3
  59. package/dist/agent/replay.d.ts.map +1 -1
  60. package/dist/agent/replay.js +44 -15
  61. package/dist/agent/replay.js.map +1 -1
  62. package/dist/agent/screen-update.d.ts +50 -18
  63. package/dist/agent/screen-update.d.ts.map +1 -1
  64. package/dist/agent/screen-update.js +76 -94
  65. package/dist/agent/screen-update.js.map +1 -1
  66. package/dist/agent/secrets.d.ts.map +1 -1
  67. package/dist/agent/secrets.js +13 -9
  68. package/dist/agent/secrets.js.map +1 -1
  69. package/dist/agent/step-accounting.d.ts +106 -0
  70. package/dist/agent/step-accounting.d.ts.map +1 -0
  71. package/dist/agent/step-accounting.js +216 -0
  72. package/dist/agent/step-accounting.js.map +1 -0
  73. package/dist/agent/step-cache.d.ts.map +1 -1
  74. package/dist/agent/step-cache.js +2 -2
  75. package/dist/agent/step-cache.js.map +1 -1
  76. package/dist/agent/tool-loop.d.ts.map +1 -1
  77. package/dist/agent/tool-loop.js +9 -2
  78. package/dist/agent/tool-loop.js.map +1 -1
  79. package/dist/agent/transcript-compaction.d.ts +38 -0
  80. package/dist/agent/transcript-compaction.d.ts.map +1 -0
  81. package/dist/agent/transcript-compaction.js +165 -0
  82. package/dist/agent/transcript-compaction.js.map +1 -0
  83. package/dist/cache/recorder.d.ts.map +1 -1
  84. package/dist/cache/recorder.js +20 -0
  85. package/dist/cache/recorder.js.map +1 -1
  86. package/dist/cache/trace.d.ts +28 -1
  87. package/dist/cache/trace.d.ts.map +1 -1
  88. package/dist/cache/trace.js +44 -0
  89. package/dist/cache/trace.js.map +1 -1
  90. package/dist/cli/index.d.ts.map +1 -1
  91. package/dist/cli/index.js +55 -32
  92. package/dist/cli/index.js.map +1 -1
  93. package/dist/cli/init/engine-versions.json +1 -1
  94. package/dist/cli/init/engines.d.ts +29 -10
  95. package/dist/cli/init/engines.d.ts.map +1 -1
  96. package/dist/cli/init/engines.js +34 -12
  97. package/dist/cli/init/engines.js.map +1 -1
  98. package/dist/cli/init/gateways.js +3 -3
  99. package/dist/cli/init/mcp-config.js +1 -1
  100. package/dist/cli/init/mcp-config.js.map +1 -1
  101. package/dist/cli/init/scaffold.d.ts.map +1 -1
  102. package/dist/cli/init/scaffold.js +1 -3
  103. package/dist/cli/init/scaffold.js.map +1 -1
  104. package/dist/cli/init.d.ts.map +1 -1
  105. package/dist/cli/init.js +3 -2
  106. package/dist/cli/init.js.map +1 -1
  107. package/dist/collect/collect.d.ts +8 -3
  108. package/dist/collect/collect.d.ts.map +1 -1
  109. package/dist/collect/collect.js +29 -5
  110. package/dist/collect/collect.js.map +1 -1
  111. package/dist/collect/registry.d.ts +20 -5
  112. package/dist/collect/registry.d.ts.map +1 -1
  113. package/dist/collect/registry.js +139 -54
  114. package/dist/collect/registry.js.map +1 -1
  115. package/dist/collect/select.js +3 -1
  116. package/dist/collect/select.js.map +1 -1
  117. package/dist/config/agent.d.ts +1 -7
  118. package/dist/config/agent.d.ts.map +1 -1
  119. package/dist/config/agent.js +5 -8
  120. package/dist/config/agent.js.map +1 -1
  121. package/dist/config/app.d.ts +24 -2
  122. package/dist/config/app.d.ts.map +1 -1
  123. package/dist/config/app.js +82 -15
  124. package/dist/config/app.js.map +1 -1
  125. package/dist/config/diagnose.d.ts.map +1 -1
  126. package/dist/config/diagnose.js +2 -0
  127. package/dist/config/diagnose.js.map +1 -1
  128. package/dist/config/resolve.d.ts +26 -3
  129. package/dist/config/resolve.d.ts.map +1 -1
  130. package/dist/config/resolve.js +66 -23
  131. package/dist/config/resolve.js.map +1 -1
  132. package/dist/config/secrets.d.ts +89 -0
  133. package/dist/config/secrets.d.ts.map +1 -0
  134. package/dist/config/secrets.js +67 -0
  135. package/dist/config/secrets.js.map +1 -0
  136. package/dist/engine/contract.d.ts +17 -2
  137. package/dist/engine/contract.d.ts.map +1 -1
  138. package/dist/engine/contract.js.map +1 -1
  139. package/dist/engine/index.d.ts +18 -4
  140. package/dist/engine/index.d.ts.map +1 -1
  141. package/dist/engine/index.js +8 -0
  142. package/dist/engine/index.js.map +1 -1
  143. package/dist/engine/session.d.ts.map +1 -1
  144. package/dist/engine/session.js +3 -0
  145. package/dist/engine/session.js.map +1 -1
  146. package/dist/engine/surface.d.ts +6 -2
  147. package/dist/engine/surface.d.ts.map +1 -1
  148. package/dist/engine/surface.js.map +1 -1
  149. package/dist/expect/attempt.d.ts +15 -0
  150. package/dist/expect/attempt.d.ts.map +1 -0
  151. package/dist/expect/attempt.js +33 -0
  152. package/dist/expect/attempt.js.map +1 -0
  153. package/dist/expect/index.d.ts +7 -5
  154. package/dist/expect/index.d.ts.map +1 -1
  155. package/dist/expect/index.js +8 -1
  156. package/dist/expect/index.js.map +1 -1
  157. package/dist/expect/poll.d.ts +5 -0
  158. package/dist/expect/poll.d.ts.map +1 -0
  159. package/dist/expect/poll.js +118 -0
  160. package/dist/expect/poll.js.map +1 -0
  161. package/dist/expect/values.d.ts.map +1 -1
  162. package/dist/expect/values.js +6 -1
  163. package/dist/expect/values.js.map +1 -1
  164. package/dist/explore/body.d.ts.map +1 -1
  165. package/dist/explore/body.js +3 -1
  166. package/dist/explore/body.js.map +1 -1
  167. package/dist/explore/executor.js +16 -11
  168. package/dist/explore/executor.js.map +1 -1
  169. package/dist/explore/index.d.ts +3 -2
  170. package/dist/explore/index.d.ts.map +1 -1
  171. package/dist/explore/index.js +5 -5
  172. package/dist/explore/index.js.map +1 -1
  173. package/dist/explore/plan.d.ts.map +1 -1
  174. package/dist/explore/plan.js +16 -5
  175. package/dist/explore/plan.js.map +1 -1
  176. package/dist/explore/progress.d.ts +43 -0
  177. package/dist/explore/progress.d.ts.map +1 -0
  178. package/dist/explore/progress.js +9 -0
  179. package/dist/explore/progress.js.map +1 -0
  180. package/dist/explore/state.d.ts +13 -12
  181. package/dist/explore/state.d.ts.map +1 -1
  182. package/dist/explore/state.js +28 -11
  183. package/dist/explore/state.js.map +1 -1
  184. package/dist/index.d.ts +3 -1
  185. package/dist/index.d.ts.map +1 -1
  186. package/dist/index.js +4 -1
  187. package/dist/index.js.map +1 -1
  188. package/dist/internal/brands.d.ts +2 -0
  189. package/dist/internal/brands.d.ts.map +1 -1
  190. package/dist/internal/brands.js +2 -0
  191. package/dist/internal/brands.js.map +1 -1
  192. package/dist/internal/geometry.d.ts +13 -0
  193. package/dist/internal/geometry.d.ts.map +1 -0
  194. package/dist/internal/geometry.js +16 -0
  195. package/dist/internal/geometry.js.map +1 -0
  196. package/dist/internal/urls.d.ts +6 -0
  197. package/dist/internal/urls.d.ts.map +1 -1
  198. package/dist/internal/urls.js +28 -0
  199. package/dist/internal/urls.js.map +1 -1
  200. package/dist/locator/engine.d.ts.map +1 -1
  201. package/dist/locator/engine.js +1 -0
  202. package/dist/locator/engine.js.map +1 -1
  203. package/dist/mcp/catalog.d.ts +5 -4
  204. package/dist/mcp/catalog.d.ts.map +1 -1
  205. package/dist/mcp/catalog.js +5 -36
  206. package/dist/mcp/catalog.js.map +1 -1
  207. package/dist/mcp/server.js +1 -1
  208. package/dist/mcp/server.js.map +1 -1
  209. package/dist/mcp/session.d.ts +1 -1
  210. package/dist/mcp/session.d.ts.map +1 -1
  211. package/dist/mcp/session.js +12 -6
  212. package/dist/mcp/session.js.map +1 -1
  213. package/dist/report/builtin.d.ts +14 -0
  214. package/dist/report/builtin.d.ts.map +1 -0
  215. package/dist/report/builtin.js +22 -0
  216. package/dist/report/builtin.js.map +1 -0
  217. package/dist/report/explore-text.d.ts +17 -0
  218. package/dist/report/explore-text.d.ts.map +1 -0
  219. package/dist/report/explore-text.js +37 -0
  220. package/dist/report/explore-text.js.map +1 -0
  221. package/dist/report/format.d.ts +2 -0
  222. package/dist/report/format.d.ts.map +1 -1
  223. package/dist/report/format.js +1 -1
  224. package/dist/report/format.js.map +1 -1
  225. package/dist/report/junit.d.ts +2 -4
  226. package/dist/report/junit.d.ts.map +1 -1
  227. package/dist/report/junit.js +7 -40
  228. package/dist/report/junit.js.map +1 -1
  229. package/dist/report/list-explore.d.ts +109 -0
  230. package/dist/report/list-explore.d.ts.map +1 -0
  231. package/dist/report/list-explore.js +368 -0
  232. package/dist/report/list-explore.js.map +1 -0
  233. package/dist/report/list.d.ts +21 -0
  234. package/dist/report/list.d.ts.map +1 -1
  235. package/dist/report/list.js +79 -3
  236. package/dist/report/list.js.map +1 -1
  237. package/dist/report/markdown.d.ts +39 -0
  238. package/dist/report/markdown.d.ts.map +1 -0
  239. package/dist/report/markdown.js +426 -0
  240. package/dist/report/markdown.js.map +1 -0
  241. package/dist/report/outcome.d.ts +29 -0
  242. package/dist/report/outcome.d.ts.map +1 -0
  243. package/dist/report/outcome.js +36 -0
  244. package/dist/report/outcome.js.map +1 -0
  245. package/dist/report/running-tree.d.ts +7 -7
  246. package/dist/report/running-tree.d.ts.map +1 -1
  247. package/dist/report/running-tree.js +12 -13
  248. package/dist/report/running-tree.js.map +1 -1
  249. package/dist/report/write.d.ts +10 -1
  250. package/dist/report/write.d.ts.map +1 -1
  251. package/dist/report/write.js +22 -1
  252. package/dist/report/write.js.map +1 -1
  253. package/dist/run/app-ports.d.ts +17 -0
  254. package/dist/run/app-ports.d.ts.map +1 -0
  255. package/dist/run/app-ports.js +74 -0
  256. package/dist/run/app-ports.js.map +1 -0
  257. package/dist/run/events.d.ts +10 -5
  258. package/dist/run/events.d.ts.map +1 -1
  259. package/dist/run/events.js.map +1 -1
  260. package/dist/run/execute.d.ts.map +1 -1
  261. package/dist/run/execute.js +24 -7
  262. package/dist/run/execute.js.map +1 -1
  263. package/dist/run/extended-fixtures.d.ts +33 -0
  264. package/dist/run/extended-fixtures.d.ts.map +1 -0
  265. package/dist/run/extended-fixtures.js +91 -0
  266. package/dist/run/extended-fixtures.js.map +1 -0
  267. package/dist/run/fixtures.d.ts.map +1 -1
  268. package/dist/run/fixtures.js +39 -11
  269. package/dist/run/fixtures.js.map +1 -1
  270. package/dist/run/managed-process.d.ts +18 -0
  271. package/dist/run/managed-process.d.ts.map +1 -1
  272. package/dist/run/managed-process.js +101 -6
  273. package/dist/run/managed-process.js.map +1 -1
  274. package/dist/run/realm.d.ts +5 -4
  275. package/dist/run/realm.d.ts.map +1 -1
  276. package/dist/run/realm.js +8 -7
  277. package/dist/run/realm.js.map +1 -1
  278. package/dist/run/runner.d.ts +9 -3
  279. package/dist/run/runner.d.ts.map +1 -1
  280. package/dist/run/runner.js +15 -12
  281. package/dist/run/runner.js.map +1 -1
  282. package/dist/run/secrecy.d.ts +3 -3
  283. package/dist/run/secrecy.d.ts.map +1 -1
  284. package/dist/run/secrecy.js +4 -4
  285. package/dist/run/secrecy.js.map +1 -1
  286. package/dist/run/standalone.js +6 -6
  287. package/dist/run/standalone.js.map +1 -1
  288. package/dist/run/worker/entry.js +4 -3
  289. package/dist/run/worker/entry.js.map +1 -1
  290. package/dist/run/worker/protocol.d.ts +7 -1
  291. package/dist/run/worker/protocol.d.ts.map +1 -1
  292. package/dist/run/worker/protocol.js.map +1 -1
  293. package/dist/secrets.d.ts +21 -0
  294. package/dist/secrets.d.ts.map +1 -0
  295. package/dist/secrets.js +66 -0
  296. package/dist/secrets.js.map +1 -0
  297. package/dist/types.d.ts +90 -50
  298. package/dist/types.d.ts.map +1 -1
  299. package/package.json +6 -3
  300. package/skills/e2e/SKILL.md +42 -25
  301. package/skills/e2e/references/agent.md +80 -24
  302. package/skills/e2e/references/debugging.md +6 -5
  303. package/skills/e2e/references/explore.md +13 -7
  304. package/skills/e2e/references/mcp.md +4 -4
  305. package/skills/e2e/references/running.md +32 -21
  306. package/skills/e2e/references/setup.md +42 -16
  307. package/skills/e2e/references/writing-tests.md +32 -16
  308. package/dist/agent/model/router.d.ts +0 -36
  309. package/dist/agent/model/router.d.ts.map +0 -1
  310. package/dist/agent/model/router.js +0 -45
  311. package/dist/agent/model/router.js.map +0 -1
  312. package/dist/credentials.d.ts +0 -13
  313. package/dist/credentials.d.ts.map +0 -1
  314. package/dist/credentials.js +0 -51
  315. package/dist/credentials.js.map +0 -1
  316. package/dist/explore/reporter.d.ts +0 -11
  317. package/dist/explore/reporter.d.ts.map +0 -1
  318. package/dist/explore/reporter.js +0 -54
  319. package/dist/explore/reporter.js.map +0 -1
@@ -0,0 +1,123 @@
1
+ /**
2
+ * What one step has seen of the screen, and how it looks again.
3
+ *
4
+ * The feed owns every capture of a step: the settle that reads an action's
5
+ * result after its effect, the ring of recent observations an id is resolved
6
+ * against, the pixel decision (masking proven, viewport untainted), and the
7
+ * executor's redacted view of a capture. Nothing else in the step observes
8
+ * the engine; the dispatcher and the pixel tier ask the feed.
9
+ */
10
+ import type { SemanticNode } from '../engine/surface.ts';
11
+ import type { StepAgentDetails } from '../run/steps.ts';
12
+ import type { ExecutorObservation, ExecutorObserveOptions, ExecutorTarget } from './executor.ts';
13
+ import type { AgentContext } from './invocation.ts';
14
+ import { type AgentObservation } from './observation.ts';
15
+ import type { OperationQueue } from './operation-queue.ts';
16
+ import type { StepAccounting } from './step-accounting.ts';
17
+ export interface ObservationFeedOptions {
18
+ /** The agent's observation byte ceiling, clamped per capture by the token limit. */
19
+ readonly maxObservationBytes: number;
20
+ }
21
+ export declare class ObservationFeed {
22
+ private readonly runtime;
23
+ private readonly accounting;
24
+ private readonly queue;
25
+ private readonly options;
26
+ private newest;
27
+ /** The newest observations of the step, oldest first; see MAX_RECENT_OBSERVATIONS. */
28
+ private readonly recent;
29
+ /**
30
+ * The screen shape the newest committed action was resolved against, kept
31
+ * until the next settled observation has waited for the screen to leave it.
32
+ * Armed by actions whose effect shows in the tree; a secret fill leaves no
33
+ * visible trace and a scroll moves nothing the tree records, so neither
34
+ * arms it. Without this, the observation after a tap on a link reads the
35
+ * old page, stable and wrong, and the model repairs what already worked.
36
+ */
37
+ private pendingChange;
38
+ /** The change wait the pending action asked for; undefined takes the default. */
39
+ private pendingChangeWaitMs;
40
+ /** The last pixel decision recorded on this step: `allowed`, or the withheld reason. */
41
+ private pixelsDecided;
42
+ /** Why requested pixels did not become model input, when they did not. */
43
+ private visionDegraded;
44
+ /** True once pixels this feed cleared were handed to the executor as model input. */
45
+ private pixelsSent;
46
+ constructor(runtime: AgentContext, accounting: StepAccounting, queue: OperationQueue, options: ObservationFeedOptions);
47
+ /** The newest observation of the step, if any was captured. */
48
+ get latest(): AgentObservation | undefined;
49
+ /** The newest observation, which an action addresses; before the first look there is nothing to address. */
50
+ requireLatest(): AgentObservation;
51
+ /** One raw capture in queue order, for replay's looks between retries. */
52
+ observeLatest(): Promise<AgentObservation>;
53
+ /**
54
+ * One settled capture in queue order: the executor-facing observe. An
55
+ * executor observation is followed by a model call measured in seconds, so
56
+ * the bounded settle wait is noise there — and it guarantees the model never
57
+ * reads a snapshot the app is still reacting to, which a fast model turns
58
+ * into a repeated action (double-committing a toggle) and a verdict judged
59
+ * on pre-render state. Replay's pre-action looks and the cache session's
60
+ * probes settle through this same path.
61
+ */
62
+ observeSettled(pixels?: boolean): Promise<AgentObservation>;
63
+ /** The executor-facing observe: the options checked before anything is captured, then one settled look, viewed. */
64
+ observe(options?: ExecutorObserveOptions): Promise<ExecutorObservation>;
65
+ /** The executor's view of one capture: redacted text, and the tree and pixels it asked for. */
66
+ private view;
67
+ /** Best-effort current location path + query, for trace preconditions. */
68
+ currentPath(observation?: AgentObservation): Promise<string | undefined>;
69
+ /**
70
+ * Arms the change wait: the next settled observation waits for the screen
71
+ * to leave the newest observation's shape, for the default two seconds or
72
+ * the given brief window.
73
+ */
74
+ armChange(waitMs?: number): void;
75
+ /**
76
+ * Resolves an executor target against the newest observation. An id the
77
+ * newest observation no longer carries, but a recent one did, is re-found
78
+ * in the newest one by its descriptor: a turn that batches actions keeps
79
+ * addressing the screen it saw while each action's own look re-observes,
80
+ * and an engine that mints ids per observation renumbers the tree between
81
+ * them. Exactly one match, or the id counts as gone.
82
+ */
83
+ resolve(target: ExecutorTarget): {
84
+ node: SemanticNode;
85
+ observation: AgentObservation;
86
+ };
87
+ /**
88
+ * Re-finds a node that went stale: one fresh capture, then the trace
89
+ * recorder's own descriptor matching (`cache/relocate.ts`) against it,
90
+ * exactly one match or nothing. The capture is taken directly rather than
91
+ * through the queued observe: this runs inside a queued action body, and a
92
+ * queued observation would wait on its own caller.
93
+ */
94
+ relocate(stale: SemanticNode): Promise<{
95
+ node: SemanticNode;
96
+ observation: AgentObservation;
97
+ } | undefined>;
98
+ /** The step's pixel record for the report. */
99
+ visionReport(): Pick<StepAgentDetails, 'visionInput' | 'visionDegraded'>;
100
+ /** One recorded observation; when `settle`, the captures loop inside it. */
101
+ private observeNow;
102
+ /** Makes an observation the newest, remembers it among the recent ones, and books its size. */
103
+ private publish;
104
+ /** One raw observation capture: retried at the engine, then redacted and bounded. */
105
+ private capture;
106
+ /**
107
+ * Bytes one act observation may contribute to a model turn, clamped like a
108
+ * judgment's. The loop's history grows past what any one observation costs,
109
+ * so the fixed part counted here is what every turn resends: the project
110
+ * context and the prior-step ledger.
111
+ */
112
+ private byteBudget;
113
+ /**
114
+ * Pixels for a caller that asked for them, or the reason they are withheld —
115
+ * the same decision the judgment tier makes, recorded as a policy event
116
+ * whenever it changes within the step.
117
+ */
118
+ private pixelsFor;
119
+ private recordPixelDecision;
120
+ /** The newest node matching the descriptor of what `id` named in a recent observation, if exactly one. */
121
+ private refound;
122
+ }
123
+ //# sourceMappingURL=observation-feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation-feed.d.ts","sourceRoot":"","sources":["../../src/agent/observation-feed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,281 @@
1
+ /**
2
+ * What one step has seen of the screen, and how it looks again.
3
+ *
4
+ * The feed owns every capture of a step: the settle that reads an action's
5
+ * result after its effect, the ring of recent observations an id is resolved
6
+ * against, the pixel decision (masking proven, viewport untainted), and the
7
+ * executor's redacted view of a capture. Nothing else in the step observes
8
+ * the engine; the dispatcher and the pixel tier ask the feed.
9
+ */
10
+ import { TestError } from '../internal/errors.js';
11
+ import { describeTarget } from './actions.js';
12
+ import { relocateDescriptor } from '../cache/relocate.js';
13
+ import { AgentError } from './error.js';
14
+ import { isTransitionalObservation, observationShape, pixelsForModel, prepareObservation, projectTree, settleObservation, } from './observation.js';
15
+ import { observationByteBudget } from './observation-budget.js';
16
+ import { instrumentPhase, recordPolicyEvent, retryingObserve } from './phases.js';
17
+ /**
18
+ * Observations kept for resolving an id the newest one no longer carries.
19
+ * A turn that batches actions addresses the screen it saw, while every
20
+ * action's own look re-observes; on an engine that mints ids per observation
21
+ * (a device), each look renumbers the tree. A few looks back is as far as one
22
+ * turn can reach.
23
+ */
24
+ const MAX_RECENT_OBSERVATIONS = 8;
25
+ export class ObservationFeed {
26
+ runtime;
27
+ accounting;
28
+ queue;
29
+ options;
30
+ newest;
31
+ /** The newest observations of the step, oldest first; see MAX_RECENT_OBSERVATIONS. */
32
+ recent = [];
33
+ /**
34
+ * The screen shape the newest committed action was resolved against, kept
35
+ * until the next settled observation has waited for the screen to leave it.
36
+ * Armed by actions whose effect shows in the tree; a secret fill leaves no
37
+ * visible trace and a scroll moves nothing the tree records, so neither
38
+ * arms it. Without this, the observation after a tap on a link reads the
39
+ * old page, stable and wrong, and the model repairs what already worked.
40
+ */
41
+ pendingChange;
42
+ /** The change wait the pending action asked for; undefined takes the default. */
43
+ pendingChangeWaitMs;
44
+ /** The last pixel decision recorded on this step: `allowed`, or the withheld reason. */
45
+ pixelsDecided;
46
+ /** Why requested pixels did not become model input, when they did not. */
47
+ visionDegraded;
48
+ /** True once pixels this feed cleared were handed to the executor as model input. */
49
+ pixelsSent = false;
50
+ constructor(runtime, accounting, queue, options) {
51
+ this.runtime = runtime;
52
+ this.accounting = accounting;
53
+ this.queue = queue;
54
+ this.options = options;
55
+ }
56
+ /** The newest observation of the step, if any was captured. */
57
+ get latest() {
58
+ return this.newest;
59
+ }
60
+ /** The newest observation, which an action addresses; before the first look there is nothing to address. */
61
+ requireLatest() {
62
+ if (this.newest === undefined) {
63
+ throw new AgentError('LOCATOR_NOT_FOUND', 'no observation has been captured yet; observe before acting');
64
+ }
65
+ return this.newest;
66
+ }
67
+ /** One raw capture in queue order, for replay's looks between retries. */
68
+ observeLatest() {
69
+ return this.queue.run(() => this.observeNow(false, false));
70
+ }
71
+ /**
72
+ * One settled capture in queue order: the executor-facing observe. An
73
+ * executor observation is followed by a model call measured in seconds, so
74
+ * the bounded settle wait is noise there — and it guarantees the model never
75
+ * reads a snapshot the app is still reacting to, which a fast model turns
76
+ * into a repeated action (double-committing a toggle) and a verdict judged
77
+ * on pre-render state. Replay's pre-action looks and the cache session's
78
+ * probes settle through this same path.
79
+ */
80
+ observeSettled(pixels = false) {
81
+ return this.queue.run(() => this.observeNow(true, pixels));
82
+ }
83
+ /** The executor-facing observe: the options checked before anything is captured, then one settled look, viewed. */
84
+ async observe(options = {}) {
85
+ if (options === null || typeof options !== 'object') {
86
+ throw new TestError('INVALID_ARGUMENT', 'observe options must be an object');
87
+ }
88
+ return this.view(await this.observeSettled(options.pixels === true), options);
89
+ }
90
+ /** The executor's view of one capture: redacted text, and the tree and pixels it asked for. */
91
+ async view(observation, options) {
92
+ const redact = this.runtime.redact;
93
+ // Prefer location from this capture; only engines without it need a separate probe.
94
+ const path = await this.currentPath(observation);
95
+ return {
96
+ revision: observation.revision,
97
+ text: observation.text,
98
+ truncated: observation.truncated,
99
+ viewport: observation.viewport,
100
+ ...(path === undefined ? {} : { path: redact(path) }),
101
+ ...(options.tree === true ? { tree: projectTree(observation.tree, redact) } : {}),
102
+ ...(options.pixels === true ? this.pixelsFor(observation) : {}),
103
+ };
104
+ }
105
+ /** Best-effort current location path + query, for trace preconditions. */
106
+ async currentPath(observation) {
107
+ const currentUrl = this.runtime.engine.session.url;
108
+ if (observation?.url === undefined && currentUrl === undefined)
109
+ return undefined;
110
+ try {
111
+ const url = new URL(observation?.url ?? (await currentUrl(this.accounting.operation())));
112
+ return `${url.pathname}${url.search}`;
113
+ }
114
+ catch {
115
+ return undefined;
116
+ }
117
+ }
118
+ /**
119
+ * Arms the change wait: the next settled observation waits for the screen
120
+ * to leave the newest observation's shape, for the default two seconds or
121
+ * the given brief window.
122
+ */
123
+ armChange(waitMs) {
124
+ if (this.newest === undefined)
125
+ return;
126
+ this.pendingChange = observationShape(this.newest);
127
+ this.pendingChangeWaitMs = waitMs;
128
+ }
129
+ /**
130
+ * Resolves an executor target against the newest observation. An id the
131
+ * newest observation no longer carries, but a recent one did, is re-found
132
+ * in the newest one by its descriptor: a turn that batches actions keeps
133
+ * addressing the screen it saw while each action's own look re-observes,
134
+ * and an engine that mints ids per observation renumbers the tree between
135
+ * them. Exactly one match, or the id counts as gone.
136
+ */
137
+ resolve(target) {
138
+ if (typeof target?.id !== 'string' || target.id === '') {
139
+ throw new TestError('INVALID_ARGUMENT', 'action target must be { id: string }');
140
+ }
141
+ const id = target.id.replace(/^#/, '');
142
+ const latest = this.requireLatest();
143
+ const node = latest.nodes.get(id) ?? this.refound(id, latest);
144
+ if (node === undefined) {
145
+ throw new AgentError('LOCATOR_NOT_FOUND', `node #${id} is not on the current screen (observation ${latest.revision}); it was removed or never existed`);
146
+ }
147
+ return { node, observation: latest };
148
+ }
149
+ /**
150
+ * Re-finds a node that went stale: one fresh capture, then the trace
151
+ * recorder's own descriptor matching (`cache/relocate.ts`) against it,
152
+ * exactly one match or nothing. The capture is taken directly rather than
153
+ * through the queued observe: this runs inside a queued action body, and a
154
+ * queued observation would wait on its own caller.
155
+ */
156
+ async relocate(stale) {
157
+ const options = { redact: this.runtime.redact, testIdAttribute: this.runtime.config.testIdAttribute };
158
+ const descriptor = describeTarget(stale, options.redact, options.testIdAttribute);
159
+ if (descriptor === undefined)
160
+ return undefined;
161
+ this.accounting.checkpoint();
162
+ const observation = await instrumentPhase(this.runtime, { api: this.accounting.api, kind: 'observation', phase: 'agent.observe', name: 'relocate' }, () => this.capture(false), (prepared) => ({ count: prepared.nodes.size, bytes: prepared.bytes }));
163
+ this.publish(observation);
164
+ const relocated = relocateDescriptor(descriptor, observation.nodes, options);
165
+ if (relocated.kind !== 'found')
166
+ return undefined;
167
+ const node = observation.nodes.get(relocated.id);
168
+ return node === undefined ? undefined : { node, observation };
169
+ }
170
+ /** The step's pixel record for the report. */
171
+ visionReport() {
172
+ return {
173
+ ...(this.pixelsSent ? { visionInput: true } : {}),
174
+ ...(this.visionDegraded === undefined ? {} : { visionDegraded: this.visionDegraded }),
175
+ };
176
+ }
177
+ /** One recorded observation; when `settle`, the captures loop inside it. */
178
+ async observeNow(settle, pixels) {
179
+ this.accounting.checkpoint();
180
+ // A tainted viewport never captures pixels: the engine would mask what it
181
+ // knows about, and the secret may be anywhere on screen by now.
182
+ const capturePixels = pixels && !this.runtime.taint.value;
183
+ // A settled look consumes the pending change: it waits for the screen to
184
+ // leave the pre-action shape once, and later looks read the screen as is.
185
+ const changedFrom = settle ? this.pendingChange : undefined;
186
+ const changeWaitMs = settle ? this.pendingChangeWaitMs : undefined;
187
+ if (settle) {
188
+ this.pendingChange = undefined;
189
+ this.pendingChangeWaitMs = undefined;
190
+ }
191
+ const observation = await instrumentPhase(this.runtime, { api: this.accounting.api, kind: 'observation', phase: 'agent.observe' }, () => settle
192
+ ? settleObservation(() => this.capture(capturePixels), observationShape, {
193
+ remainingMs: () => this.accounting.remainingMs(),
194
+ // The step's own hard stop must interrupt a settle sleep too —
195
+ // the attempt signal alone would let settling outlive the step
196
+ // by one poll interval.
197
+ signal: this.accounting.signal,
198
+ }, { changedFrom, changeWaitMs, transitional: isTransitionalObservation })
199
+ : this.capture(capturePixels), (prepared) => ({ count: prepared.nodes.size, bytes: prepared.bytes }));
200
+ this.publish(observation);
201
+ return observation;
202
+ }
203
+ /** Makes an observation the newest, remembers it among the recent ones, and books its size. */
204
+ publish(observation) {
205
+ this.newest = observation;
206
+ this.recent.push(observation);
207
+ if (this.recent.length > MAX_RECENT_OBSERVATIONS)
208
+ this.recent.shift();
209
+ const metrics = this.accounting.metrics;
210
+ metrics.observationBytes = Math.max(metrics.observationBytes, observation.bytes);
211
+ }
212
+ /** One raw observation capture: retried at the engine, then redacted and bounded. */
213
+ async capture(pixels) {
214
+ const raw = await retryingObserve({
215
+ observe: (operation) => this.runtime.engine.session.observe(operation, { pixels }),
216
+ operation: () => this.accounting.operation(),
217
+ guard: (cause) => this.accounting.checkpoint(cause),
218
+ signal: this.runtime.engine.signal,
219
+ api: this.accounting.api,
220
+ });
221
+ return prepareObservation(raw, {
222
+ redact: this.runtime.redact,
223
+ maxBytes: this.byteBudget(pixels),
224
+ testIdAttribute: this.runtime.config.testIdAttribute,
225
+ });
226
+ }
227
+ /**
228
+ * Bytes one act observation may contribute to a model turn, clamped like a
229
+ * judgment's. The loop's history grows past what any one observation costs,
230
+ * so the fixed part counted here is what every turn resends: the project
231
+ * context and the prior-step ledger.
232
+ */
233
+ byteBudget(pixels) {
234
+ const metrics = this.accounting.metrics;
235
+ return observationByteBudget({
236
+ maxObservationBytes: this.options.maxObservationBytes,
237
+ maxModelTokensPerCall: this.runtime.config.limits.maxModelTokensPerCall,
238
+ }, { fixedBytes: metrics.contextBytes + metrics.ledgerBytes, pixels });
239
+ }
240
+ /**
241
+ * Pixels for a caller that asked for them, or the reason they are withheld —
242
+ * the same decision the judgment tier makes, recorded as a policy event
243
+ * whenever it changes within the step.
244
+ */
245
+ pixelsFor(observation) {
246
+ const outcome = pixelsForModel(observation, this.runtime.taint.value);
247
+ if ('withheld' in outcome) {
248
+ this.recordPixelDecision('denied', outcome.withheld);
249
+ this.visionDegraded = outcome.withheld;
250
+ return { pixelsWithheld: outcome.withheld };
251
+ }
252
+ this.recordPixelDecision('allowed');
253
+ this.pixelsSent = true;
254
+ const metrics = this.accounting.metrics;
255
+ metrics.pixelBytes = Math.max(metrics.pixelBytes ?? 0, outcome.pixels.data.byteLength);
256
+ return { pixels: outcome.pixels };
257
+ }
258
+ recordPixelDecision(decision, code) {
259
+ const key = code ?? decision;
260
+ if (this.pixelsDecided === key)
261
+ return;
262
+ this.pixelsDecided = key;
263
+ recordPolicyEvent(this.runtime.steps, 'vision.pixels', decision, code);
264
+ }
265
+ /** The newest node matching the descriptor of what `id` named in a recent observation, if exactly one. */
266
+ refound(id, latest) {
267
+ let earlier;
268
+ for (let index = this.recent.length - 1; index >= 0 && earlier === undefined; index -= 1) {
269
+ earlier = this.recent[index].nodes.get(id);
270
+ }
271
+ if (earlier === undefined)
272
+ return undefined;
273
+ const options = { redact: this.runtime.redact, testIdAttribute: this.runtime.config.testIdAttribute };
274
+ const descriptor = describeTarget(earlier, options.redact, options.testIdAttribute);
275
+ if (descriptor === undefined)
276
+ return undefined;
277
+ const relocated = relocateDescriptor(descriptor, latest.nodes, options);
278
+ return relocated.kind === 'found' ? latest.nodes.get(relocated.id) : undefined;
279
+ }
280
+ }
281
+ //# sourceMappingURL=observation-feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation-feed.js","sourceRoot":"","sources":["../../src/agent/observation-feed.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /** Observation capture, redaction, and model serialization. */
2
2
  import type { Observation, SemanticNode } from '../engine/surface.ts';
3
3
  import type { VisionDegradation } from '../run/steps.ts';
4
- import type { ExecutorNode, ExecutorPixels } from './executor.ts';
4
+ import type { ExecutorNode, ExecutorObservation, ExecutorPixels } from './executor.ts';
5
5
  /** Why pixels the caller asked for are not part of this observation. */
6
6
  type PixelsWithheld = 'MASKING_UNPROVEN';
7
7
  export interface AgentObservation {
@@ -51,6 +51,19 @@ export declare function pixelsForModel(observation: AgentObservation, tainted: b
51
51
  } | {
52
52
  readonly withheld: VisionDegradation;
53
53
  };
54
+ /**
55
+ * Roles the model can act on by id: the controls a hit-tested point resolves
56
+ * to, and the lines that mark a screen as one the tree can drive at all.
57
+ */
58
+ export declare const INTERACTIVE_ROLES: ReadonlySet<string>;
59
+ /**
60
+ * How many listed nodes the model could act on by id, read off the rendered
61
+ * lines. A screen with none is one the tree cannot describe (a canvas, a
62
+ * game, a native surface the platform exposes no semantics for), and the
63
+ * model needs pixels from the first turn rather than a round trip to discover
64
+ * that. Lives next to `formatNode` so the line grammar keeps one owner.
65
+ */
66
+ export declare function interactiveNodeCount(observation: Pick<ExecutorObservation, 'text'>): number;
54
67
  /**
55
68
  * Projects the raw tree onto the executor-facing node shape: the same
56
69
  * redaction the text serialization applies, field by field, and no value at
@@ -1 +1 @@
1
- {"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../../src/agent/observation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../../src/agent/observation.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /** Observation capture, redaction, and model serialization. */
2
2
  import { collapseText } from '../internal/text.js';
3
3
  import { sleep } from '../internal/time.js';
4
+ import { sizeForModel } from './pixels.js';
4
5
  /** Appended when the node walk stopped at the observation byte budget. */
5
6
  const TRUNCATION_MARKER = '[observation truncated at the resolved observation byte limit]';
6
7
  /**
@@ -90,7 +91,47 @@ export function pixelsForModel(observation, tainted) {
90
91
  if (observation.pixels === undefined) {
91
92
  return { withheld: observation.pixelsWithheld ?? 'UNSUPPORTED_CAPABILITY' };
92
93
  }
93
- return { pixels: observation.pixels };
94
+ // Sized here, once per observation a model receives, not per capture: the
95
+ // settle loop captures several times per action and only digests the bytes.
96
+ return { pixels: sizeForModel(observation.pixels) };
97
+ }
98
+ /**
99
+ * Roles the model can act on by id: the controls a hit-tested point resolves
100
+ * to, and the lines that mark a screen as one the tree can drive at all.
101
+ */
102
+ export const INTERACTIVE_ROLES = new Set([
103
+ 'button',
104
+ 'link',
105
+ 'textbox',
106
+ 'searchbox',
107
+ 'combobox',
108
+ 'checkbox',
109
+ 'radio',
110
+ 'switch',
111
+ 'tab',
112
+ 'menuitem',
113
+ 'menuitemcheckbox',
114
+ 'menuitemradio',
115
+ 'option',
116
+ 'slider',
117
+ 'spinbutton',
118
+ 'treeitem',
119
+ ]);
120
+ /**
121
+ * How many listed nodes the model could act on by id, read off the rendered
122
+ * lines. A screen with none is one the tree cannot describe (a canvas, a
123
+ * game, a native surface the platform exposes no semantics for), and the
124
+ * model needs pixels from the first turn rather than a round trip to discover
125
+ * that. Lives next to `formatNode` so the line grammar keeps one owner.
126
+ */
127
+ export function interactiveNodeCount(observation) {
128
+ let count = 0;
129
+ for (const line of observation.text.split('\n')) {
130
+ const role = /^\s*#\S+ (\S+)/.exec(line)?.[1];
131
+ if (role !== undefined && INTERACTIVE_ROLES.has(role))
132
+ count += 1;
133
+ }
134
+ return count;
94
135
  }
95
136
  /**
96
137
  * Projects the raw tree onto the executor-facing node shape: the same
@@ -178,13 +219,28 @@ function formatNode(node, depth, redact, testIdAttribute) {
178
219
  * Lives next to `formatNode` so the line grammar keeps one owner.
179
220
  */
180
221
  export function observationShape(observation) {
181
- return observation.text
222
+ const text = observation.text
182
223
  .replaceAll(/(^|\n)(\s*)#\S+/g, '$1$2')
183
224
  .replaceAll(/ \[([^\]]*)\]/g, (_match, states) => {
184
225
  const stable = states.split(' ').filter((state) => state !== 'focused');
185
226
  return stable.length === 0 ? '' : ` [${stable.join(' ')}]`;
186
227
  })
187
228
  .replaceAll(CLOCK_PATTERN, '<time>');
229
+ // A capture taken with pixels is shaped by them too: on a canvas, a map, or
230
+ // a game the tree never moves, and without the pixels every action would
231
+ // wait out the whole change window and then be reported as having done
232
+ // nothing. A digest keeps the shape a string and the comparison cheap.
233
+ const pixels = observation.pixels;
234
+ return pixels === undefined ? text : `${text}\n<pixels ${digest(pixels.data)}>`;
235
+ }
236
+ /** FNV-1a over the image bytes: fast, and equal frames encode to equal bytes. */
237
+ function digest(bytes) {
238
+ let hash = 0x811c9dc5;
239
+ for (const byte of bytes) {
240
+ hash ^= byte;
241
+ hash = Math.imul(hash, 0x01000193) >>> 0;
242
+ }
243
+ return hash.toString(16);
188
244
  }
189
245
  /** `12:05`, `0:59`, `23:59:59`: a value that changes on its own once a second or minute. */
190
246
  const CLOCK_PATTERN = /\b\d{1,2}:\d{2}(?::\d{2})?\b/g;
@@ -1 +1 @@
1
- {"version":3,"file":"observation.js","sourceRoot":"","sources":["../../src/agent/observation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observation.js","sourceRoot":"","sources":["../../src/agent/observation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Call-order serialization for one step's observations and actions.
3
+ *
4
+ * An executor (or an AI SDK loop running parallel tool calls) that issues a
5
+ * second action before the first settles would otherwise resolve both
6
+ * targets against the same pre-action observation — exactly the wrong-node
7
+ * hazard the staleness rule exists to prevent. Queued, the second call sees
8
+ * the newest observation and a stale id fails loud instead of acting on the
9
+ * wrong node.
10
+ *
11
+ * Invariant: a queued body must never enqueue another operation itself — the
12
+ * inner call would wait behind its own caller and deadlock. Action bodies
13
+ * call the engine session directly, secret authorization never observes, and
14
+ * a relocation captures raw rather than through the queued observe.
15
+ */
16
+ export declare class OperationQueue {
17
+ private chain;
18
+ /** Runs `body` after every operation queued before it, in call order. */
19
+ run<T>(body: () => Promise<T>): Promise<T>;
20
+ }
21
+ //# sourceMappingURL=operation-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-queue.d.ts","sourceRoot":"","sources":["../../src/agent/operation-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAuC;IAEpD,yEAAyE;IACzE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CASzC;CACF"}