@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 @@
1
+ {"version":3,"file":"browser-evaluator.d.ts","sourceRoot":"","sources":["../../src/utils/browser-evaluator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;;;;;;;;;;;;OAiBG;WACU,QAAQ,CAAC,CAAC,EACrB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACrC,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,CAAC,CAAC;IA0Cb;;;;;;;;;;;;;;;;;;;OAmBG;WACU,8BAA8B,CAAC,CAAC,EAC3C,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACrC,IAAI,CAAC,EAAE,GAAG,EACV,aAAa,CAAC,EAAE,CAAC,GAChB,OAAO,CAAC,CAAC,CAAC;IAab;;;;;;;;;;;;;;;;OAgBG;WACU,gBAAgB,CAC3B,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAC3C,OAAO,GAAE,MAAa,GACrB,OAAO,CAAC,IAAI,CAAC;CAqBjB"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ /**
3
+ * BrowserEvaluator - Common browser evaluation patterns with standardized error handling
4
+ *
5
+ * This utility class extracts common page.evaluate() patterns to reduce code duplication
6
+ * and provide consistent error handling across snapshot, actions, wait, and read modules.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.BrowserEvaluator = void 0;
10
+ /**
11
+ * BrowserEvaluator provides static methods for common browser evaluation patterns
12
+ */
13
+ class BrowserEvaluator {
14
+ /**
15
+ * Execute a browser evaluation script with standardized error handling
16
+ *
17
+ * @param page - Playwright Page instance
18
+ * @param script - Function to execute in browser context
19
+ * @param args - Arguments to pass to the script
20
+ * @param options - Evaluation options (timeout, retries, error handler)
21
+ * @returns Promise resolving to the evaluation result
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const result = await BrowserEvaluator.evaluate(
26
+ * page,
27
+ * (opts) => (window as any).sentience.snapshot(opts),
28
+ * { limit: 50 }
29
+ * );
30
+ * ```
31
+ */
32
+ static async evaluate(page, script, args, options = {}) {
33
+ const { timeout, retries = 0, onError } = options;
34
+ let lastError;
35
+ for (let attempt = 0; attempt <= retries; attempt++) {
36
+ try {
37
+ if (timeout) {
38
+ return await Promise.race([
39
+ page.evaluate(script, args),
40
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`Evaluation timeout after ${timeout}ms`)), timeout)),
41
+ ]);
42
+ }
43
+ return await page.evaluate(script, args);
44
+ }
45
+ catch (error) {
46
+ lastError = error instanceof Error ? error : new Error(String(error));
47
+ // Call custom error handler if provided
48
+ if (onError) {
49
+ onError(lastError);
50
+ }
51
+ // If this was the last retry, throw the error
52
+ if (attempt === retries) {
53
+ throw new Error(`Browser evaluation failed after ${retries + 1} attempt(s): ${lastError.message}`);
54
+ }
55
+ // Wait before retry (exponential backoff)
56
+ if (attempt < retries) {
57
+ await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 100));
58
+ }
59
+ }
60
+ }
61
+ // This should never be reached, but TypeScript needs it
62
+ throw lastError || new Error('Browser evaluation failed');
63
+ }
64
+ /**
65
+ * Execute a browser evaluation with navigation-aware error handling
66
+ * Navigation may destroy the context, so we handle that gracefully
67
+ *
68
+ * @param page - Playwright Page instance
69
+ * @param script - Function to execute in browser context
70
+ * @param args - Arguments to pass to the script
71
+ * @param fallbackValue - Value to return if evaluation fails due to navigation
72
+ * @returns Promise resolving to the evaluation result or fallback value
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * const success = await BrowserEvaluator.evaluateWithNavigationFallback(
77
+ * page,
78
+ * (id) => (window as any).sentience.click(id),
79
+ * elementId,
80
+ * true // Assume success if navigation destroyed context
81
+ * );
82
+ * ```
83
+ */
84
+ static async evaluateWithNavigationFallback(page, script, args, fallbackValue) {
85
+ try {
86
+ return await page.evaluate(script, args);
87
+ }
88
+ catch (error) {
89
+ // Navigation might have destroyed context, return fallback if provided
90
+ if (fallbackValue !== undefined) {
91
+ return fallbackValue;
92
+ }
93
+ // Otherwise rethrow
94
+ throw error;
95
+ }
96
+ }
97
+ /**
98
+ * Wait for a condition in the browser context with timeout
99
+ *
100
+ * @param page - Playwright Page instance
101
+ * @param condition - Function that returns a truthy value when condition is met
102
+ * @param timeout - Maximum time to wait in milliseconds
103
+ * @returns Promise resolving when condition is met
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * await BrowserEvaluator.waitForCondition(
108
+ * page,
109
+ * () => typeof (window as any).sentience !== 'undefined',
110
+ * 5000
111
+ * );
112
+ * ```
113
+ */
114
+ static async waitForCondition(page, condition, timeout = 5000) {
115
+ try {
116
+ await page.waitForFunction(condition, { timeout });
117
+ }
118
+ catch (error) {
119
+ // Gather diagnostics if wait fails
120
+ const diag = await this.evaluateWithNavigationFallback(page, () => ({
121
+ sentience_defined: typeof window.sentience !== 'undefined',
122
+ extension_id: document.documentElement.dataset.sentienceExtensionId || 'not set',
123
+ url: window.location.href,
124
+ }), undefined, { sentience_defined: false, extension_id: 'not set', url: 'unknown' });
125
+ throw new Error(`Condition wait failed after ${timeout}ms. ` + `Diagnostics: ${JSON.stringify(diag)}`);
126
+ }
127
+ }
128
+ }
129
+ exports.BrowserEvaluator = BrowserEvaluator;
130
+ //# sourceMappingURL=browser-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-evaluator.js","sourceRoot":"","sources":["../../src/utils/browser-evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Browser-related utility functions
3
+ */
4
+ import { BrowserContext } from 'playwright';
5
+ /**
6
+ * Save current browser storage state (cookies + localStorage) to a file.
7
+ *
8
+ * This is useful for capturing a logged-in session to reuse later.
9
+ *
10
+ * @param context - Playwright BrowserContext
11
+ * @param filePath - Path to save the storage state JSON file
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { SentienceBrowser } from 'sentience-ts';
16
+ * import { saveStorageState } from 'sentience-ts/utils/browser';
17
+ *
18
+ * const browser = new SentienceBrowser();
19
+ * await browser.start();
20
+ *
21
+ * // User logs in manually or via agent
22
+ * await browser.getPage().goto('https://example.com');
23
+ * // ... login happens ...
24
+ *
25
+ * // Save session for later
26
+ * await saveStorageState(browser.getContext(), 'auth.json');
27
+ * ```
28
+ */
29
+ export declare function saveStorageState(context: BrowserContext, filePath: string): Promise<void>;
30
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/utils/browser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/F"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /**
3
+ * Browser-related utility functions
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.saveStorageState = saveStorageState;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ /**
43
+ * Save current browser storage state (cookies + localStorage) to a file.
44
+ *
45
+ * This is useful for capturing a logged-in session to reuse later.
46
+ *
47
+ * @param context - Playwright BrowserContext
48
+ * @param filePath - Path to save the storage state JSON file
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * import { SentienceBrowser } from 'sentience-ts';
53
+ * import { saveStorageState } from 'sentience-ts/utils/browser';
54
+ *
55
+ * const browser = new SentienceBrowser();
56
+ * await browser.start();
57
+ *
58
+ * // User logs in manually or via agent
59
+ * await browser.getPage().goto('https://example.com');
60
+ * // ... login happens ...
61
+ *
62
+ * // Save session for later
63
+ * await saveStorageState(browser.getContext(), 'auth.json');
64
+ * ```
65
+ */
66
+ async function saveStorageState(context, filePath) {
67
+ const storageState = await context.storageState();
68
+ const dir = path.dirname(filePath);
69
+ if (!fs.existsSync(dir)) {
70
+ fs.mkdirSync(dir, { recursive: true });
71
+ }
72
+ fs.writeFileSync(filePath, JSON.stringify(storageState, null, 2));
73
+ console.log(`✅ [Sentience] Saved storage state to ${filePath}`);
74
+ }
75
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/utils/browser.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BH,4CAQC;AAnCD,uCAAyB;AACzB,2CAA6B;AAE7B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACI,KAAK,UAAU,gBAAgB,CAAC,OAAuB,EAAE,QAAgB;IAC9E,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * ElementFilter - Consolidates element filtering logic
3
+ *
4
+ * This utility class extracts common element filtering patterns from agent.ts and query.ts
5
+ * to reduce code duplication and improve maintainability.
6
+ */
7
+ import { Snapshot, Element } from '../types';
8
+ export interface FilterOptions {
9
+ maxElements?: number;
10
+ minImportance?: number;
11
+ maxImportance?: number;
12
+ inViewportOnly?: boolean;
13
+ clickableOnly?: boolean;
14
+ }
15
+ /**
16
+ * ElementFilter provides static methods for filtering elements from snapshots
17
+ */
18
+ export declare class ElementFilter {
19
+ /**
20
+ * Filter elements by importance score
21
+ *
22
+ * @param snapshot - Snapshot containing elements
23
+ * @param maxElements - Maximum number of elements to return (default: 50)
24
+ * @returns Filtered and sorted array of elements
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const filtered = ElementFilter.filterByImportance(snap, 50);
29
+ * ```
30
+ */
31
+ static filterByImportance(snapshot: Snapshot, maxElements?: number): Element[];
32
+ /**
33
+ * Filter elements relevant to a goal using keyword matching
34
+ * Applies goal-based keyword matching to boost relevant elements
35
+ *
36
+ * @param snapshot - Snapshot containing elements
37
+ * @param goal - Goal/task description to match against
38
+ * @param maxElements - Maximum number of elements to return (default: 50)
39
+ * @returns Filtered and scored array of elements
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const filtered = ElementFilter.filterByGoal(snap, "Click the search box", 50);
44
+ * ```
45
+ */
46
+ static filterByGoal(snapshot: Snapshot, goal: string, maxElements?: number): Element[];
47
+ /**
48
+ * Filter elements using multiple criteria
49
+ *
50
+ * @param snapshot - Snapshot containing elements
51
+ * @param options - Filter options
52
+ * @returns Filtered array of elements
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const filtered = ElementFilter.filter(snap, {
57
+ * maxElements: 50,
58
+ * minImportance: 0.5,
59
+ * inViewportOnly: true,
60
+ * clickableOnly: false
61
+ * });
62
+ * ```
63
+ */
64
+ static filter(snapshot: Snapshot, options?: FilterOptions): Element[];
65
+ /**
66
+ * Extract keywords from a goal string
67
+ * Removes common stop words and returns meaningful keywords
68
+ *
69
+ * @param goal - Goal string to extract keywords from
70
+ * @returns Array of keywords
71
+ *
72
+ * @private
73
+ */
74
+ private static extractKeywords;
75
+ }
76
+ //# sourceMappingURL=element-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-filter.d.ts","sourceRoot":"","sources":["../../src/utils/element-filter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,GAAE,MAAW,GAAG,OAAO,EAAE;IAWlF;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,MAAW,GAAG,OAAO,EAAE;IA6C1F;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,EAAE;IAgCzE;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;CA8D/B"}
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ /**
3
+ * ElementFilter - Consolidates element filtering logic
4
+ *
5
+ * This utility class extracts common element filtering patterns from agent.ts and query.ts
6
+ * to reduce code duplication and improve maintainability.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ElementFilter = void 0;
10
+ /**
11
+ * ElementFilter provides static methods for filtering elements from snapshots
12
+ */
13
+ class ElementFilter {
14
+ /**
15
+ * Filter elements by importance score
16
+ *
17
+ * @param snapshot - Snapshot containing elements
18
+ * @param maxElements - Maximum number of elements to return (default: 50)
19
+ * @returns Filtered and sorted array of elements
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const filtered = ElementFilter.filterByImportance(snap, 50);
24
+ * ```
25
+ */
26
+ static filterByImportance(snapshot, maxElements = 50) {
27
+ // Filter out REMOVED elements - they're not actionable and shouldn't be in LLM context
28
+ const elements = snapshot.elements.filter(el => el.diff_status !== 'REMOVED');
29
+ // Sort by importance (descending)
30
+ elements.sort((a, b) => b.importance - a.importance);
31
+ // Return top N elements
32
+ return elements.slice(0, maxElements);
33
+ }
34
+ /**
35
+ * Filter elements relevant to a goal using keyword matching
36
+ * Applies goal-based keyword matching to boost relevant elements
37
+ *
38
+ * @param snapshot - Snapshot containing elements
39
+ * @param goal - Goal/task description to match against
40
+ * @param maxElements - Maximum number of elements to return (default: 50)
41
+ * @returns Filtered and scored array of elements
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * const filtered = ElementFilter.filterByGoal(snap, "Click the search box", 50);
46
+ * ```
47
+ */
48
+ static filterByGoal(snapshot, goal, maxElements = 50) {
49
+ if (!goal) {
50
+ return this.filterByImportance(snapshot, maxElements);
51
+ }
52
+ // Filter out REMOVED elements - they're not actionable and shouldn't be in LLM context
53
+ const elements = snapshot.elements.filter(el => el.diff_status !== 'REMOVED');
54
+ const goalLower = goal.toLowerCase();
55
+ const keywords = this.extractKeywords(goalLower);
56
+ // Score elements based on keyword matches
57
+ const scoredElements = [];
58
+ for (const element of elements) {
59
+ let score = element.importance; // Start with base importance
60
+ // Boost score for keyword matches in text
61
+ if (element.text) {
62
+ const textLower = element.text.toLowerCase();
63
+ for (const keyword of keywords) {
64
+ if (textLower.includes(keyword)) {
65
+ score += 0.5; // Boost for keyword match
66
+ }
67
+ }
68
+ }
69
+ // Boost score for keyword matches in role
70
+ const roleLower = element.role.toLowerCase();
71
+ for (const keyword of keywords) {
72
+ if (roleLower.includes(keyword)) {
73
+ score += 0.3; // Smaller boost for role match
74
+ }
75
+ }
76
+ scoredElements.push([score, element]);
77
+ }
78
+ // Sort by score (descending)
79
+ scoredElements.sort((a, b) => b[0] - a[0]);
80
+ // Return top N elements
81
+ return scoredElements.slice(0, maxElements).map(([_, element]) => element);
82
+ }
83
+ /**
84
+ * Filter elements using multiple criteria
85
+ *
86
+ * @param snapshot - Snapshot containing elements
87
+ * @param options - Filter options
88
+ * @returns Filtered array of elements
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const filtered = ElementFilter.filter(snap, {
93
+ * maxElements: 50,
94
+ * minImportance: 0.5,
95
+ * inViewportOnly: true,
96
+ * clickableOnly: false
97
+ * });
98
+ * ```
99
+ */
100
+ static filter(snapshot, options = {}) {
101
+ // Filter out REMOVED elements - they're not actionable and shouldn't be in LLM context
102
+ let elements = snapshot.elements.filter(el => el.diff_status !== 'REMOVED');
103
+ // Apply filters
104
+ if (options.minImportance !== undefined) {
105
+ elements = elements.filter(el => el.importance >= options.minImportance);
106
+ }
107
+ if (options.maxImportance !== undefined) {
108
+ elements = elements.filter(el => el.importance <= options.maxImportance);
109
+ }
110
+ if (options.inViewportOnly) {
111
+ elements = elements.filter(el => el.in_viewport);
112
+ }
113
+ if (options.clickableOnly) {
114
+ elements = elements.filter(el => el.visual_cues.is_clickable);
115
+ }
116
+ // Sort by importance (descending)
117
+ elements.sort((a, b) => b.importance - a.importance);
118
+ // Apply max elements limit
119
+ if (options.maxElements !== undefined) {
120
+ elements = elements.slice(0, options.maxElements);
121
+ }
122
+ return elements;
123
+ }
124
+ /**
125
+ * Extract keywords from a goal string
126
+ * Removes common stop words and returns meaningful keywords
127
+ *
128
+ * @param goal - Goal string to extract keywords from
129
+ * @returns Array of keywords
130
+ *
131
+ * @private
132
+ */
133
+ static extractKeywords(goal) {
134
+ // Common stop words to filter out
135
+ const stopWords = new Set([
136
+ 'the',
137
+ 'a',
138
+ 'an',
139
+ 'and',
140
+ 'or',
141
+ 'but',
142
+ 'in',
143
+ 'on',
144
+ 'at',
145
+ 'to',
146
+ 'for',
147
+ 'of',
148
+ 'with',
149
+ 'by',
150
+ 'from',
151
+ 'as',
152
+ 'is',
153
+ 'was',
154
+ 'are',
155
+ 'were',
156
+ 'be',
157
+ 'been',
158
+ 'being',
159
+ 'have',
160
+ 'has',
161
+ 'had',
162
+ 'do',
163
+ 'does',
164
+ 'did',
165
+ 'will',
166
+ 'would',
167
+ 'should',
168
+ 'could',
169
+ 'may',
170
+ 'might',
171
+ 'must',
172
+ 'can',
173
+ 'this',
174
+ 'that',
175
+ 'these',
176
+ 'those',
177
+ 'i',
178
+ 'you',
179
+ 'he',
180
+ 'she',
181
+ 'it',
182
+ 'we',
183
+ 'they',
184
+ ]);
185
+ // Split by whitespace and punctuation, filter out stop words and short words
186
+ const words = goal
187
+ .toLowerCase()
188
+ .split(/[\s,.;:!?()[\]{}'"]+/)
189
+ .filter(word => word.length > 2 && !stopWords.has(word));
190
+ // Remove duplicates
191
+ return Array.from(new Set(words));
192
+ }
193
+ }
194
+ exports.ElementFilter = ElementFilter;
195
+ //# sourceMappingURL=element-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-filter.js","sourceRoot":"","sources":["../../src/utils/element-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Utility functions for working with grid layout data in snapshots.
3
+ */
4
+ import type { Snapshot, GridInfo } from '../types';
5
+ /**
6
+ * Get grid coordinates (bounding boxes) for detected grids.
7
+ *
8
+ * Groups elements by grid_id and computes the overall bounding box,
9
+ * row/column counts, and item count for each grid.
10
+ *
11
+ * @param snapshot - The snapshot containing elements with layout data
12
+ * @param gridId - Optional grid ID to filter by. If undefined, returns all grids.
13
+ * @returns Array of GridInfo objects, one per detected grid, sorted by grid_id.
14
+ * Each GridInfo contains:
15
+ * - grid_id: The grid identifier
16
+ * - bbox: Bounding box (x, y, width, height) in document coordinates
17
+ * - row_count: Number of rows in the grid
18
+ * - col_count: Number of columns in the grid
19
+ * - item_count: Total number of items in the grid
20
+ * - confidence: Confidence score (currently 1.0)
21
+ * - label: Optional inferred label (e.g., "product_grid", "search_results", "navigation")
22
+ * Note: Label inference is best-effort and may not always be accurate
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const snapshot = await browser.snapshot();
27
+ * // Get all grids
28
+ * const allGrids = getGridBounds(snapshot);
29
+ * // Get specific grid
30
+ * const mainGrid = getGridBounds(snapshot, 0);
31
+ * if (mainGrid.length > 0) {
32
+ * console.log(`Grid 0: ${mainGrid[0].item_count} items at (${mainGrid[0].bbox.x}, ${mainGrid[0].bbox.y})`);
33
+ * }
34
+ * ```
35
+ */
36
+ export declare function getGridBounds(snapshot: Snapshot, gridId?: number): GridInfo[];
37
+ //# sourceMappingURL=grid-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-utils.d.ts","sourceRoot":"","sources":["../../src/utils/grid-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAW,MAAM,UAAU,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAgI7E"}