@predicatelabs/sdk 0.99.9

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 (302) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +252 -0
  3. package/dist/actions.d.ts +185 -0
  4. package/dist/actions.d.ts.map +1 -0
  5. package/dist/actions.js +1120 -0
  6. package/dist/actions.js.map +1 -0
  7. package/dist/agent-runtime.d.ts +352 -0
  8. package/dist/agent-runtime.d.ts.map +1 -0
  9. package/dist/agent-runtime.js +1170 -0
  10. package/dist/agent-runtime.js.map +1 -0
  11. package/dist/agent.d.ts +164 -0
  12. package/dist/agent.d.ts.map +1 -0
  13. package/dist/agent.js +408 -0
  14. package/dist/agent.js.map +1 -0
  15. package/dist/asserts/expect.d.ts +159 -0
  16. package/dist/asserts/expect.d.ts.map +1 -0
  17. package/dist/asserts/expect.js +547 -0
  18. package/dist/asserts/expect.js.map +1 -0
  19. package/dist/asserts/index.d.ts +58 -0
  20. package/dist/asserts/index.d.ts.map +1 -0
  21. package/dist/asserts/index.js +70 -0
  22. package/dist/asserts/index.js.map +1 -0
  23. package/dist/asserts/query.d.ts +199 -0
  24. package/dist/asserts/query.d.ts.map +1 -0
  25. package/dist/asserts/query.js +288 -0
  26. package/dist/asserts/query.js.map +1 -0
  27. package/dist/backends/actions.d.ts +119 -0
  28. package/dist/backends/actions.d.ts.map +1 -0
  29. package/dist/backends/actions.js +291 -0
  30. package/dist/backends/actions.js.map +1 -0
  31. package/dist/backends/browser-use-adapter.d.ts +131 -0
  32. package/dist/backends/browser-use-adapter.d.ts.map +1 -0
  33. package/dist/backends/browser-use-adapter.js +219 -0
  34. package/dist/backends/browser-use-adapter.js.map +1 -0
  35. package/dist/backends/cdp-backend.d.ts +66 -0
  36. package/dist/backends/cdp-backend.d.ts.map +1 -0
  37. package/dist/backends/cdp-backend.js +273 -0
  38. package/dist/backends/cdp-backend.js.map +1 -0
  39. package/dist/backends/index.d.ts +80 -0
  40. package/dist/backends/index.d.ts.map +1 -0
  41. package/dist/backends/index.js +101 -0
  42. package/dist/backends/index.js.map +1 -0
  43. package/dist/backends/protocol.d.ts +156 -0
  44. package/dist/backends/protocol.d.ts.map +1 -0
  45. package/dist/backends/protocol.js +16 -0
  46. package/dist/backends/protocol.js.map +1 -0
  47. package/dist/backends/sentience-context.d.ts +143 -0
  48. package/dist/backends/sentience-context.d.ts.map +1 -0
  49. package/dist/backends/sentience-context.js +359 -0
  50. package/dist/backends/sentience-context.js.map +1 -0
  51. package/dist/backends/snapshot.d.ts +188 -0
  52. package/dist/backends/snapshot.d.ts.map +1 -0
  53. package/dist/backends/snapshot.js +360 -0
  54. package/dist/backends/snapshot.js.map +1 -0
  55. package/dist/browser.d.ts +154 -0
  56. package/dist/browser.d.ts.map +1 -0
  57. package/dist/browser.js +920 -0
  58. package/dist/browser.js.map +1 -0
  59. package/dist/canonicalization.d.ts +126 -0
  60. package/dist/canonicalization.d.ts.map +1 -0
  61. package/dist/canonicalization.js +161 -0
  62. package/dist/canonicalization.js.map +1 -0
  63. package/dist/captcha/strategies.d.ts +12 -0
  64. package/dist/captcha/strategies.d.ts.map +1 -0
  65. package/dist/captcha/strategies.js +43 -0
  66. package/dist/captcha/strategies.js.map +1 -0
  67. package/dist/captcha/types.d.ts +45 -0
  68. package/dist/captcha/types.d.ts.map +1 -0
  69. package/dist/captcha/types.js +12 -0
  70. package/dist/captcha/types.js.map +1 -0
  71. package/dist/cli.d.ts +5 -0
  72. package/dist/cli.d.ts.map +1 -0
  73. package/dist/cli.js +422 -0
  74. package/dist/cli.js.map +1 -0
  75. package/dist/conversational-agent.d.ts +123 -0
  76. package/dist/conversational-agent.d.ts.map +1 -0
  77. package/dist/conversational-agent.js +341 -0
  78. package/dist/conversational-agent.js.map +1 -0
  79. package/dist/cursor-policy.d.ts +41 -0
  80. package/dist/cursor-policy.d.ts.map +1 -0
  81. package/dist/cursor-policy.js +81 -0
  82. package/dist/cursor-policy.js.map +1 -0
  83. package/dist/debugger.d.ts +28 -0
  84. package/dist/debugger.d.ts.map +1 -0
  85. package/dist/debugger.js +107 -0
  86. package/dist/debugger.js.map +1 -0
  87. package/dist/expect.d.ts +16 -0
  88. package/dist/expect.d.ts.map +1 -0
  89. package/dist/expect.js +67 -0
  90. package/dist/expect.js.map +1 -0
  91. package/dist/failure-artifacts.d.ts +95 -0
  92. package/dist/failure-artifacts.d.ts.map +1 -0
  93. package/dist/failure-artifacts.js +805 -0
  94. package/dist/failure-artifacts.js.map +1 -0
  95. package/dist/generator.d.ts +16 -0
  96. package/dist/generator.d.ts.map +1 -0
  97. package/dist/generator.js +205 -0
  98. package/dist/generator.js.map +1 -0
  99. package/dist/index.d.ts +37 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +160 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/inspector.d.ts +13 -0
  104. package/dist/inspector.d.ts.map +1 -0
  105. package/dist/inspector.js +153 -0
  106. package/dist/inspector.js.map +1 -0
  107. package/dist/llm-provider.d.ts +144 -0
  108. package/dist/llm-provider.d.ts.map +1 -0
  109. package/dist/llm-provider.js +460 -0
  110. package/dist/llm-provider.js.map +1 -0
  111. package/dist/ordinal.d.ts +90 -0
  112. package/dist/ordinal.d.ts.map +1 -0
  113. package/dist/ordinal.js +249 -0
  114. package/dist/ordinal.js.map +1 -0
  115. package/dist/overlay.d.ts +63 -0
  116. package/dist/overlay.d.ts.map +1 -0
  117. package/dist/overlay.js +102 -0
  118. package/dist/overlay.js.map +1 -0
  119. package/dist/protocols/browser-protocol.d.ts +79 -0
  120. package/dist/protocols/browser-protocol.d.ts.map +1 -0
  121. package/dist/protocols/browser-protocol.js +9 -0
  122. package/dist/protocols/browser-protocol.js.map +1 -0
  123. package/dist/query.d.ts +66 -0
  124. package/dist/query.d.ts.map +1 -0
  125. package/dist/query.js +482 -0
  126. package/dist/query.js.map +1 -0
  127. package/dist/read.d.ts +47 -0
  128. package/dist/read.d.ts.map +1 -0
  129. package/dist/read.js +128 -0
  130. package/dist/read.js.map +1 -0
  131. package/dist/recorder.d.ts +44 -0
  132. package/dist/recorder.d.ts.map +1 -0
  133. package/dist/recorder.js +262 -0
  134. package/dist/recorder.js.map +1 -0
  135. package/dist/runtime-agent.d.ts +72 -0
  136. package/dist/runtime-agent.d.ts.map +1 -0
  137. package/dist/runtime-agent.js +357 -0
  138. package/dist/runtime-agent.js.map +1 -0
  139. package/dist/screenshot.d.ts +17 -0
  140. package/dist/screenshot.d.ts.map +1 -0
  141. package/dist/screenshot.js +40 -0
  142. package/dist/screenshot.js.map +1 -0
  143. package/dist/snapshot-diff.d.ts +23 -0
  144. package/dist/snapshot-diff.d.ts.map +1 -0
  145. package/dist/snapshot-diff.js +119 -0
  146. package/dist/snapshot-diff.js.map +1 -0
  147. package/dist/snapshot.d.ts +47 -0
  148. package/dist/snapshot.d.ts.map +1 -0
  149. package/dist/snapshot.js +358 -0
  150. package/dist/snapshot.js.map +1 -0
  151. package/dist/textSearch.d.ts +64 -0
  152. package/dist/textSearch.d.ts.map +1 -0
  153. package/dist/textSearch.js +113 -0
  154. package/dist/textSearch.js.map +1 -0
  155. package/dist/tools/context.d.ts +18 -0
  156. package/dist/tools/context.d.ts.map +1 -0
  157. package/dist/tools/context.js +40 -0
  158. package/dist/tools/context.js.map +1 -0
  159. package/dist/tools/defaults.d.ts +5 -0
  160. package/dist/tools/defaults.d.ts.map +1 -0
  161. package/dist/tools/defaults.js +368 -0
  162. package/dist/tools/defaults.js.map +1 -0
  163. package/dist/tools/filesystem.d.ts +12 -0
  164. package/dist/tools/filesystem.d.ts.map +1 -0
  165. package/dist/tools/filesystem.js +137 -0
  166. package/dist/tools/filesystem.js.map +1 -0
  167. package/dist/tools/index.d.ts +5 -0
  168. package/dist/tools/index.d.ts.map +1 -0
  169. package/dist/tools/index.js +15 -0
  170. package/dist/tools/index.js.map +1 -0
  171. package/dist/tools/registry.d.ts +38 -0
  172. package/dist/tools/registry.d.ts.map +1 -0
  173. package/dist/tools/registry.js +100 -0
  174. package/dist/tools/registry.js.map +1 -0
  175. package/dist/tracing/cloud-sink.d.ts +189 -0
  176. package/dist/tracing/cloud-sink.d.ts.map +1 -0
  177. package/dist/tracing/cloud-sink.js +1067 -0
  178. package/dist/tracing/cloud-sink.js.map +1 -0
  179. package/dist/tracing/index-schema.d.ts +231 -0
  180. package/dist/tracing/index-schema.d.ts.map +1 -0
  181. package/dist/tracing/index-schema.js +235 -0
  182. package/dist/tracing/index-schema.js.map +1 -0
  183. package/dist/tracing/index.d.ts +12 -0
  184. package/dist/tracing/index.d.ts.map +1 -0
  185. package/dist/tracing/index.js +28 -0
  186. package/dist/tracing/index.js.map +1 -0
  187. package/dist/tracing/indexer.d.ts +20 -0
  188. package/dist/tracing/indexer.d.ts.map +1 -0
  189. package/dist/tracing/indexer.js +347 -0
  190. package/dist/tracing/indexer.js.map +1 -0
  191. package/dist/tracing/jsonl-sink.d.ts +51 -0
  192. package/dist/tracing/jsonl-sink.d.ts.map +1 -0
  193. package/dist/tracing/jsonl-sink.js +329 -0
  194. package/dist/tracing/jsonl-sink.js.map +1 -0
  195. package/dist/tracing/sink.d.ts +25 -0
  196. package/dist/tracing/sink.d.ts.map +1 -0
  197. package/dist/tracing/sink.js +15 -0
  198. package/dist/tracing/sink.js.map +1 -0
  199. package/dist/tracing/tracer-factory.d.ts +102 -0
  200. package/dist/tracing/tracer-factory.d.ts.map +1 -0
  201. package/dist/tracing/tracer-factory.js +375 -0
  202. package/dist/tracing/tracer-factory.js.map +1 -0
  203. package/dist/tracing/tracer.d.ts +140 -0
  204. package/dist/tracing/tracer.d.ts.map +1 -0
  205. package/dist/tracing/tracer.js +336 -0
  206. package/dist/tracing/tracer.js.map +1 -0
  207. package/dist/tracing/types.d.ts +203 -0
  208. package/dist/tracing/types.d.ts.map +1 -0
  209. package/dist/tracing/types.js +8 -0
  210. package/dist/tracing/types.js.map +1 -0
  211. package/dist/types.d.ts +422 -0
  212. package/dist/types.d.ts.map +1 -0
  213. package/dist/types.js +6 -0
  214. package/dist/types.js.map +1 -0
  215. package/dist/utils/action-executor.d.ts +25 -0
  216. package/dist/utils/action-executor.d.ts.map +1 -0
  217. package/dist/utils/action-executor.js +121 -0
  218. package/dist/utils/action-executor.js.map +1 -0
  219. package/dist/utils/browser-evaluator.d.ts +76 -0
  220. package/dist/utils/browser-evaluator.d.ts.map +1 -0
  221. package/dist/utils/browser-evaluator.js +130 -0
  222. package/dist/utils/browser-evaluator.js.map +1 -0
  223. package/dist/utils/browser.d.ts +30 -0
  224. package/dist/utils/browser.d.ts.map +1 -0
  225. package/dist/utils/browser.js +75 -0
  226. package/dist/utils/browser.js.map +1 -0
  227. package/dist/utils/element-filter.d.ts +76 -0
  228. package/dist/utils/element-filter.d.ts.map +1 -0
  229. package/dist/utils/element-filter.js +195 -0
  230. package/dist/utils/element-filter.js.map +1 -0
  231. package/dist/utils/grid-utils.d.ts +37 -0
  232. package/dist/utils/grid-utils.d.ts.map +1 -0
  233. package/dist/utils/grid-utils.js +283 -0
  234. package/dist/utils/grid-utils.js.map +1 -0
  235. package/dist/utils/llm-interaction-handler.d.ts +41 -0
  236. package/dist/utils/llm-interaction-handler.d.ts.map +1 -0
  237. package/dist/utils/llm-interaction-handler.js +171 -0
  238. package/dist/utils/llm-interaction-handler.js.map +1 -0
  239. package/dist/utils/llm-response-builder.d.ts +56 -0
  240. package/dist/utils/llm-response-builder.d.ts.map +1 -0
  241. package/dist/utils/llm-response-builder.js +130 -0
  242. package/dist/utils/llm-response-builder.js.map +1 -0
  243. package/dist/utils/selector-utils.d.ts +12 -0
  244. package/dist/utils/selector-utils.d.ts.map +1 -0
  245. package/dist/utils/selector-utils.js +32 -0
  246. package/dist/utils/selector-utils.js.map +1 -0
  247. package/dist/utils/snapshot-event-builder.d.ts +28 -0
  248. package/dist/utils/snapshot-event-builder.d.ts.map +1 -0
  249. package/dist/utils/snapshot-event-builder.js +88 -0
  250. package/dist/utils/snapshot-event-builder.js.map +1 -0
  251. package/dist/utils/snapshot-processor.d.ts +27 -0
  252. package/dist/utils/snapshot-processor.d.ts.map +1 -0
  253. package/dist/utils/snapshot-processor.js +47 -0
  254. package/dist/utils/snapshot-processor.js.map +1 -0
  255. package/dist/utils/trace-event-builder.d.ts +122 -0
  256. package/dist/utils/trace-event-builder.d.ts.map +1 -0
  257. package/dist/utils/trace-event-builder.js +365 -0
  258. package/dist/utils/trace-event-builder.js.map +1 -0
  259. package/dist/utils/trace-file-manager.d.ts +70 -0
  260. package/dist/utils/trace-file-manager.d.ts.map +1 -0
  261. package/dist/utils/trace-file-manager.js +194 -0
  262. package/dist/utils/trace-file-manager.js.map +1 -0
  263. package/dist/utils/zod.d.ts +5 -0
  264. package/dist/utils/zod.d.ts.map +1 -0
  265. package/dist/utils/zod.js +80 -0
  266. package/dist/utils/zod.js.map +1 -0
  267. package/dist/utils.d.ts +8 -0
  268. package/dist/utils.d.ts.map +1 -0
  269. package/dist/utils.js +13 -0
  270. package/dist/utils.js.map +1 -0
  271. package/dist/verification.d.ts +194 -0
  272. package/dist/verification.d.ts.map +1 -0
  273. package/dist/verification.js +530 -0
  274. package/dist/verification.js.map +1 -0
  275. package/dist/vision-executor.d.ts +18 -0
  276. package/dist/vision-executor.d.ts.map +1 -0
  277. package/dist/vision-executor.js +60 -0
  278. package/dist/vision-executor.js.map +1 -0
  279. package/dist/visual-agent.d.ts +120 -0
  280. package/dist/visual-agent.d.ts.map +1 -0
  281. package/dist/visual-agent.js +796 -0
  282. package/dist/visual-agent.js.map +1 -0
  283. package/dist/wait.d.ts +35 -0
  284. package/dist/wait.d.ts.map +1 -0
  285. package/dist/wait.js +76 -0
  286. package/dist/wait.js.map +1 -0
  287. package/package.json +94 -0
  288. package/spec/README.md +72 -0
  289. package/spec/SNAPSHOT_V1.md +208 -0
  290. package/spec/sdk-types.md +259 -0
  291. package/spec/snapshot.schema.json +148 -0
  292. package/src/extension/background.js +104 -0
  293. package/src/extension/content.js +162 -0
  294. package/src/extension/injected_api.js +1399 -0
  295. package/src/extension/manifest.json +36 -0
  296. package/src/extension/pkg/README.md +1340 -0
  297. package/src/extension/pkg/package.json +15 -0
  298. package/src/extension/pkg/sentience_core.d.ts +51 -0
  299. package/src/extension/pkg/sentience_core.js +371 -0
  300. package/src/extension/pkg/sentience_core_bg.wasm +0 -0
  301. package/src/extension/pkg/sentience_core_bg.wasm.d.ts +10 -0
  302. package/src/extension/release.json +116 -0
@@ -0,0 +1,365 @@
1
+ "use strict";
2
+ /**
3
+ * TraceEventBuilder - Common trace event building patterns
4
+ *
5
+ * This utility class extracts common trace event building logic to reduce duplication
6
+ * and ensure consistency across different parts of the codebase.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TraceEventBuilder = void 0;
10
+ const crypto_1 = require("crypto");
11
+ /**
12
+ * TraceEventBuilder provides static methods for building trace events
13
+ */
14
+ class TraceEventBuilder {
15
+ /**
16
+ * Compute SHA256 hash of text
17
+ *
18
+ * @param text - Text to hash
19
+ * @returns SHA256 hash as hex string
20
+ *
21
+ * @private
22
+ */
23
+ static computeHash(text) {
24
+ return (0, crypto_1.createHash)('sha256').update(text, 'utf8').digest('hex');
25
+ }
26
+ /**
27
+ * Build snapshot digest from snapshot data
28
+ *
29
+ * @param snapshot - Snapshot to compute digest for
30
+ * @returns Digest string in format "sha256:..."
31
+ */
32
+ static buildSnapshotDigest(snapshot) {
33
+ const digestInput = `${snapshot.url}${snapshot.timestamp || ''}`;
34
+ return `sha256:${this.computeHash(digestInput)}`;
35
+ }
36
+ /**
37
+ * Build LLM usage data from LLM response
38
+ *
39
+ * @param llmResponse - LLM response object
40
+ * @returns LLM usage data for trace event
41
+ */
42
+ static buildLLMData(llmResponse) {
43
+ const responseText = llmResponse.content;
44
+ const responseHash = `sha256:${this.computeHash(responseText)}`;
45
+ return {
46
+ model: llmResponse.modelName,
47
+ response_text: responseText,
48
+ response_hash: responseHash,
49
+ usage: {
50
+ prompt_tokens: llmResponse.promptTokens || 0,
51
+ completion_tokens: llmResponse.completionTokens || 0,
52
+ total_tokens: llmResponse.totalTokens || 0,
53
+ },
54
+ };
55
+ }
56
+ /**
57
+ * Build execution data from action result
58
+ *
59
+ * @param result - Agent action result
60
+ * @param snapshot - Snapshot used for the action
61
+ * @returns Execution data for trace event
62
+ */
63
+ static buildExecutionData(result, snapshot) {
64
+ const execData = {
65
+ success: result.success,
66
+ action: result.action || 'unknown',
67
+ outcome: result.outcome ||
68
+ (result.success
69
+ ? `Action ${result.action || 'unknown'} executed successfully`
70
+ : `Action ${result.action || 'unknown'} failed`),
71
+ duration_ms: result.durationMs,
72
+ };
73
+ if (result.cursor !== undefined) {
74
+ execData.cursor = result.cursor;
75
+ }
76
+ // Add optional exec fields
77
+ if (result.elementId !== undefined) {
78
+ execData.element_id = result.elementId;
79
+ // Add bounding box if element found
80
+ const element = snapshot.elements.find(e => e.id === result.elementId);
81
+ if (element) {
82
+ execData.bounding_box = {
83
+ x: element.bbox.x,
84
+ y: element.bbox.y,
85
+ width: element.bbox.width,
86
+ height: element.bbox.height,
87
+ };
88
+ }
89
+ }
90
+ if (result.text !== undefined) {
91
+ execData.text = result.text;
92
+ }
93
+ if (result.key !== undefined) {
94
+ execData.key = result.key;
95
+ }
96
+ if (result.error !== undefined) {
97
+ execData.error = result.error;
98
+ }
99
+ return execData;
100
+ }
101
+ /**
102
+ * Build verify data from action result
103
+ *
104
+ * @param result - Agent action result
105
+ * @param snapshot - Snapshot used for the action
106
+ * @returns Verify data for trace event
107
+ */
108
+ static buildVerifyData(result, snapshot) {
109
+ const verifyPassed = result.success && (result.urlChanged || result.action !== 'click');
110
+ const verifySignals = {
111
+ passed: verifyPassed,
112
+ signals: {
113
+ url_changed: result.urlChanged || false,
114
+ },
115
+ };
116
+ if (result.error) {
117
+ verifySignals.signals.error = result.error;
118
+ }
119
+ // Add elements_found array if element was targeted
120
+ if (result.elementId !== undefined) {
121
+ const element = snapshot.elements.find(e => e.id === result.elementId);
122
+ if (element) {
123
+ verifySignals.signals.elements_found = [
124
+ {
125
+ label: `Element ${result.elementId}`,
126
+ bounding_box: {
127
+ x: element.bbox.x,
128
+ y: element.bbox.y,
129
+ width: element.bbox.width,
130
+ height: element.bbox.height,
131
+ },
132
+ },
133
+ ];
134
+ }
135
+ }
136
+ return verifySignals;
137
+ }
138
+ /**
139
+ * Build complete step_end event data
140
+ *
141
+ * @param params - Parameters for building step_end event
142
+ * @returns Complete step_end event data
143
+ */
144
+ static buildStepEndData(params) {
145
+ const { stepId, stepIndex, goal, attempt, preUrl, postUrl, postSnapshotDigest, snapshot, llmResponse, result, } = params;
146
+ const snapshotDigest = this.buildSnapshotDigest(snapshot);
147
+ const llmData = this.buildLLMData(llmResponse);
148
+ const execData = this.buildExecutionData(result, snapshot);
149
+ const verifyData = this.buildVerifyData(result, snapshot);
150
+ // Build elements data for pre field (include diff_status from snapshot)
151
+ // Normalize importance values to importance_score (0-1 range) per snapshot
152
+ const importanceValues = snapshot.elements.map(el => el.importance);
153
+ const minImportance = importanceValues.length > 0 ? Math.min(...importanceValues) : 0;
154
+ const maxImportance = importanceValues.length > 0 ? Math.max(...importanceValues) : 0;
155
+ const importanceRange = maxImportance - minImportance;
156
+ const preElements = snapshot.elements.map(el => {
157
+ // Compute normalized importance_score
158
+ let importanceScore;
159
+ if (importanceRange > 0) {
160
+ importanceScore = (el.importance - minImportance) / importanceRange;
161
+ }
162
+ else {
163
+ importanceScore = 0.5;
164
+ }
165
+ return {
166
+ id: el.id,
167
+ role: el.role,
168
+ text: el.text,
169
+ bbox: el.bbox,
170
+ importance: el.importance,
171
+ importance_score: importanceScore,
172
+ visual_cues: el.visual_cues,
173
+ in_viewport: el.in_viewport,
174
+ is_occluded: el.is_occluded,
175
+ z_index: el.z_index,
176
+ fused_rank_index: el.fused_rank_index,
177
+ heuristic_index: el.heuristic_index,
178
+ ml_probability: el.ml_probability,
179
+ ml_score: el.ml_score,
180
+ diff_status: el.diff_status,
181
+ };
182
+ });
183
+ return {
184
+ v: 1,
185
+ step_id: stepId,
186
+ step_index: stepIndex,
187
+ goal: goal,
188
+ attempt: attempt,
189
+ pre: {
190
+ url: preUrl,
191
+ snapshot_digest: snapshotDigest,
192
+ elements: preElements, // Add elements array with diff_status
193
+ },
194
+ llm: llmData,
195
+ exec: execData,
196
+ post: {
197
+ url: postUrl || undefined,
198
+ snapshot_digest: postSnapshotDigest,
199
+ },
200
+ verify: verifyData,
201
+ };
202
+ }
203
+ /**
204
+ * Build step_end event data for AgentRuntime (verification loop).
205
+ */
206
+ static buildRuntimeStepEndData(params) {
207
+ const { stepId, stepIndex, goal, attempt, preUrl, postUrl, preSnapshotDigest, postSnapshotDigest, execData, verifyData, assertions, taskDone, taskDoneLabel, } = params;
208
+ const signals = { ...(verifyData?.signals || {}) };
209
+ if (assertions && assertions.length > 0) {
210
+ signals.assertions = assertions;
211
+ }
212
+ if (typeof taskDone === 'boolean') {
213
+ signals.task_done = taskDone;
214
+ }
215
+ if (taskDoneLabel) {
216
+ signals.task_done_label = taskDoneLabel;
217
+ }
218
+ return {
219
+ v: 1,
220
+ step_id: stepId,
221
+ step_index: stepIndex,
222
+ goal,
223
+ attempt,
224
+ pre: {
225
+ url: preUrl,
226
+ snapshot_digest: preSnapshotDigest,
227
+ },
228
+ llm: {},
229
+ exec: execData,
230
+ post: {
231
+ url: postUrl,
232
+ snapshot_digest: postSnapshotDigest,
233
+ },
234
+ verify: {
235
+ passed: verifyData?.passed ?? false,
236
+ signals,
237
+ },
238
+ };
239
+ }
240
+ /**
241
+ * Build snapshot event data
242
+ *
243
+ * @param snapshot - Snapshot to build event data for
244
+ * @param goal - Optional goal/task description
245
+ * @returns Snapshot event data
246
+ */
247
+ static buildSnapshotData(snapshot, goal) {
248
+ const data = {
249
+ url: snapshot.url,
250
+ element_count: snapshot.elements.length,
251
+ timestamp: snapshot.timestamp,
252
+ };
253
+ if (goal) {
254
+ data.goal = goal;
255
+ }
256
+ // Convert elements to trace elements (simplified - just include IDs and basic info)
257
+ if (snapshot.elements.length > 0) {
258
+ data.elements = snapshot.elements.slice(0, 100).map((el) => ({
259
+ id: el.id,
260
+ role: el.role,
261
+ text: el.text || undefined,
262
+ importance: el.importance,
263
+ bbox: {
264
+ x: el.bbox.x,
265
+ y: el.bbox.y,
266
+ width: el.bbox.width,
267
+ height: el.bbox.height,
268
+ },
269
+ }));
270
+ }
271
+ if (snapshot.screenshot) {
272
+ data.screenshot_base64 = snapshot.screenshot;
273
+ data.screenshot_format = snapshot.screenshot_format || 'png';
274
+ }
275
+ return data;
276
+ }
277
+ /**
278
+ * Build partial step_end event data for failed steps
279
+ *
280
+ * This is used when a step fails after collecting some data (snapshot, LLM response, etc.)
281
+ * but before completing execution. It ensures diff_status and other fields are preserved
282
+ * in traces even when the agent run fails.
283
+ *
284
+ * @param params - Parameters for building partial step_end event
285
+ * @returns Partial step_end event data
286
+ */
287
+ static buildPartialStepEndData(params) {
288
+ const { stepId, stepIndex, goal, attempt, preUrl, postUrl, snapshot, postSnapshotDigest, llmResponse, error, durationMs, } = params;
289
+ // Build pre data
290
+ const preData = {
291
+ url: preUrl || undefined,
292
+ snapshot_digest: snapshot ? this.buildSnapshotDigest(snapshot) : undefined,
293
+ };
294
+ // Add elements with diff_status if snapshot is available
295
+ if (snapshot && snapshot.elements.length > 0) {
296
+ const importanceValues = snapshot.elements.map(el => el.importance);
297
+ const minImportance = importanceValues.length > 0 ? Math.min(...importanceValues) : 0;
298
+ const maxImportance = importanceValues.length > 0 ? Math.max(...importanceValues) : 0;
299
+ const importanceRange = maxImportance - minImportance;
300
+ preData.elements = snapshot.elements.map(el => {
301
+ let importanceScore;
302
+ if (importanceRange > 0) {
303
+ importanceScore = (el.importance - minImportance) / importanceRange;
304
+ }
305
+ else {
306
+ importanceScore = 0.5;
307
+ }
308
+ return {
309
+ id: el.id,
310
+ role: el.role,
311
+ text: el.text,
312
+ bbox: el.bbox,
313
+ importance: el.importance,
314
+ importance_score: importanceScore,
315
+ visual_cues: el.visual_cues,
316
+ in_viewport: el.in_viewport,
317
+ is_occluded: el.is_occluded,
318
+ z_index: el.z_index,
319
+ fused_rank_index: el.fused_rank_index,
320
+ heuristic_index: el.heuristic_index,
321
+ ml_probability: el.ml_probability,
322
+ ml_score: el.ml_score,
323
+ diff_status: el.diff_status,
324
+ };
325
+ });
326
+ }
327
+ // Build LLM data if available
328
+ let llmData;
329
+ if (llmResponse) {
330
+ llmData = this.buildLLMData(llmResponse);
331
+ }
332
+ // Build exec data for failure
333
+ const execData = {
334
+ success: false,
335
+ action: 'error',
336
+ outcome: error,
337
+ duration_ms: durationMs,
338
+ error: error,
339
+ };
340
+ // Build verify data for failure
341
+ const verifyData = {
342
+ passed: false,
343
+ signals: {
344
+ error: error,
345
+ },
346
+ };
347
+ return {
348
+ v: 1,
349
+ step_id: stepId,
350
+ step_index: stepIndex,
351
+ goal: goal,
352
+ attempt: attempt,
353
+ pre: preData,
354
+ llm: llmData,
355
+ exec: execData,
356
+ post: {
357
+ url: postUrl || undefined,
358
+ snapshot_digest: postSnapshotDigest,
359
+ },
360
+ verify: verifyData,
361
+ };
362
+ }
363
+ }
364
+ exports.TraceEventBuilder = TraceEventBuilder;
365
+ //# sourceMappingURL=trace-event-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-event-builder.js","sourceRoot":"","sources":["../../src/utils/trace-event-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * TraceFileManager - Common trace file operations
3
+ *
4
+ * Extracts common file operations from CloudTraceSink and JsonlTraceSink
5
+ * to reduce duplication and standardize error handling
6
+ */
7
+ import * as fs from 'fs';
8
+ import { TraceEvent } from '../tracing/types';
9
+ export interface TraceFileOptions {
10
+ flags?: string;
11
+ encoding?: BufferEncoding;
12
+ autoClose?: boolean;
13
+ }
14
+ /**
15
+ * TraceFileManager provides static methods for common trace file operations
16
+ */
17
+ export declare class TraceFileManager {
18
+ /**
19
+ * Ensure directory exists and is writable
20
+ *
21
+ * @param dirPath - Directory path to ensure exists
22
+ * @throws Error if directory cannot be created or is not writable
23
+ */
24
+ static ensureDirectory(dirPath: string): void;
25
+ /**
26
+ * Create a write stream for trace file
27
+ *
28
+ * @param filePath - Path to trace file
29
+ * @param options - Stream options
30
+ * @returns WriteStream or null if creation fails
31
+ */
32
+ static createWriteStream(filePath: string, options?: TraceFileOptions): fs.WriteStream | null;
33
+ /**
34
+ * Write a trace event as JSON line
35
+ *
36
+ * @param stream - Write stream
37
+ * @param event - Trace event to write
38
+ * @returns True if written successfully, false otherwise
39
+ */
40
+ static writeEvent(stream: fs.WriteStream, event: TraceEvent): boolean;
41
+ /**
42
+ * Close and flush a write stream
43
+ *
44
+ * @param stream - Write stream to close
45
+ * @returns Promise that resolves when stream is closed
46
+ */
47
+ static closeStream(stream: fs.WriteStream): Promise<void>;
48
+ /**
49
+ * Check if a file exists
50
+ *
51
+ * @param filePath - File path to check
52
+ * @returns True if file exists, false otherwise
53
+ */
54
+ static fileExists(filePath: string): boolean;
55
+ /**
56
+ * Get file size in bytes
57
+ *
58
+ * @param filePath - File path
59
+ * @returns File size in bytes, or 0 if file doesn't exist
60
+ */
61
+ static getFileSize(filePath: string): number;
62
+ /**
63
+ * Delete a file safely
64
+ *
65
+ * @param filePath - File path to delete
66
+ * @returns True if deleted successfully, false otherwise
67
+ */
68
+ static deleteFile(filePath: string): boolean;
69
+ }
70
+ //# sourceMappingURL=trace-file-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-file-manager.d.ts","sourceRoot":"","sources":["../../src/utils/trace-file-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAY7C;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,EAAE,CAAC,WAAW,GAAG,IAAI;IAkBxB;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO;IAmBrE;;;;;OAKG;WACU,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB/D;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQ5C;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAY5C;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAY7C"}
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ /**
3
+ * TraceFileManager - Common trace file operations
4
+ *
5
+ * Extracts common file operations from CloudTraceSink and JsonlTraceSink
6
+ * to reduce duplication and standardize error handling
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.TraceFileManager = void 0;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ /**
46
+ * TraceFileManager provides static methods for common trace file operations
47
+ */
48
+ class TraceFileManager {
49
+ /**
50
+ * Ensure directory exists and is writable
51
+ *
52
+ * @param dirPath - Directory path to ensure exists
53
+ * @throws Error if directory cannot be created or is not writable
54
+ */
55
+ static ensureDirectory(dirPath) {
56
+ try {
57
+ if (!fs.existsSync(dirPath)) {
58
+ fs.mkdirSync(dirPath, { recursive: true });
59
+ }
60
+ // Verify directory is writable
61
+ fs.accessSync(dirPath, fs.constants.W_OK);
62
+ }
63
+ catch (error) {
64
+ throw new Error(`Failed to create or access directory ${dirPath}: ${error}`);
65
+ }
66
+ }
67
+ /**
68
+ * Create a write stream for trace file
69
+ *
70
+ * @param filePath - Path to trace file
71
+ * @param options - Stream options
72
+ * @returns WriteStream or null if creation fails
73
+ */
74
+ static createWriteStream(filePath, options = {}) {
75
+ try {
76
+ const dir = path.dirname(filePath);
77
+ this.ensureDirectory(dir);
78
+ const stream = fs.createWriteStream(filePath, {
79
+ flags: options.flags || 'a',
80
+ encoding: options.encoding || 'utf-8',
81
+ autoClose: options.autoClose !== false,
82
+ });
83
+ return stream;
84
+ }
85
+ catch (error) {
86
+ console.error(`[TraceFileManager] Failed to create write stream for ${filePath}:`, error);
87
+ return null;
88
+ }
89
+ }
90
+ /**
91
+ * Write a trace event as JSON line
92
+ *
93
+ * @param stream - Write stream
94
+ * @param event - Trace event to write
95
+ * @returns True if written successfully, false otherwise
96
+ */
97
+ static writeEvent(stream, event) {
98
+ try {
99
+ const jsonLine = JSON.stringify(event) + '\n';
100
+ const written = stream.write(jsonLine);
101
+ // Handle backpressure
102
+ if (!written) {
103
+ stream.once('drain', () => {
104
+ // Stream is ready again
105
+ });
106
+ }
107
+ return true;
108
+ }
109
+ catch (error) {
110
+ console.error('[TraceFileManager] Failed to write event:', error);
111
+ return false;
112
+ }
113
+ }
114
+ /**
115
+ * Close and flush a write stream
116
+ *
117
+ * @param stream - Write stream to close
118
+ * @returns Promise that resolves when stream is closed
119
+ */
120
+ static async closeStream(stream) {
121
+ return new Promise((resolve, reject) => {
122
+ if (stream.destroyed) {
123
+ resolve();
124
+ return;
125
+ }
126
+ stream.end(() => {
127
+ resolve();
128
+ });
129
+ stream.once('error', error => {
130
+ reject(error);
131
+ });
132
+ // Timeout after 5 seconds
133
+ setTimeout(() => {
134
+ if (!stream.destroyed) {
135
+ stream.destroy();
136
+ resolve();
137
+ }
138
+ }, 5000);
139
+ });
140
+ }
141
+ /**
142
+ * Check if a file exists
143
+ *
144
+ * @param filePath - File path to check
145
+ * @returns True if file exists, false otherwise
146
+ */
147
+ static fileExists(filePath) {
148
+ try {
149
+ return fs.existsSync(filePath);
150
+ }
151
+ catch {
152
+ return false;
153
+ }
154
+ }
155
+ /**
156
+ * Get file size in bytes
157
+ *
158
+ * @param filePath - File path
159
+ * @returns File size in bytes, or 0 if file doesn't exist
160
+ */
161
+ static getFileSize(filePath) {
162
+ try {
163
+ if (fs.existsSync(filePath)) {
164
+ const stats = fs.statSync(filePath);
165
+ return stats.size;
166
+ }
167
+ return 0;
168
+ }
169
+ catch {
170
+ return 0;
171
+ }
172
+ }
173
+ /**
174
+ * Delete a file safely
175
+ *
176
+ * @param filePath - File path to delete
177
+ * @returns True if deleted successfully, false otherwise
178
+ */
179
+ static deleteFile(filePath) {
180
+ try {
181
+ if (fs.existsSync(filePath)) {
182
+ fs.unlinkSync(filePath);
183
+ return true;
184
+ }
185
+ return false;
186
+ }
187
+ catch (error) {
188
+ console.error(`[TraceFileManager] Failed to delete file ${filePath}:`, error);
189
+ return false;
190
+ }
191
+ }
192
+ }
193
+ exports.TraceFileManager = TraceFileManager;
194
+ //# sourceMappingURL=trace-file-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-file-manager.js","sourceRoot":"","sources":["../../src/utils/trace-file-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ZodTypeAny } from 'zod';
2
+ type JsonSchema = Record<string, any>;
3
+ export declare function zodToJsonSchema(schema: ZodTypeAny): JsonSchema;
4
+ export {};
5
+ //# sourceMappingURL=zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../src/utils/zod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,UAAU,EAAE,MAAM,KAAK,CAAC;AAExD,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAkCtC,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAkD9D"}