@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,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToolRegistry = void 0;
4
+ exports.defineTool = defineTool;
5
+ const zod_1 = require("../utils/zod");
6
+ function defineTool(spec) {
7
+ return spec;
8
+ }
9
+ class ToolRegistry {
10
+ constructor() {
11
+ this.tools = new Map();
12
+ }
13
+ register(spec) {
14
+ if (this.tools.has(spec.name)) {
15
+ throw new Error(`tool already registered: ${spec.name}`);
16
+ }
17
+ this.tools.set(spec.name, spec);
18
+ return this;
19
+ }
20
+ get(name) {
21
+ return this.tools.get(name);
22
+ }
23
+ list() {
24
+ return Array.from(this.tools.values());
25
+ }
26
+ llmTools() {
27
+ return this.list().map(spec => ({
28
+ name: spec.name,
29
+ description: spec.description ?? '',
30
+ parameters: spec.parameters ?? (0, zod_1.zodToJsonSchema)(spec.input),
31
+ }));
32
+ }
33
+ validateInput(name, payload) {
34
+ const spec = this.tools.get(name);
35
+ if (!spec) {
36
+ throw new Error(`tool not found: ${name}`);
37
+ }
38
+ const parsed = spec.input.safeParse(payload);
39
+ if (!parsed.success) {
40
+ throw new Error(parsed.error.message);
41
+ }
42
+ return parsed.data;
43
+ }
44
+ validateOutput(name, payload) {
45
+ const spec = this.tools.get(name);
46
+ if (!spec) {
47
+ throw new Error(`tool not found: ${name}`);
48
+ }
49
+ const parsed = spec.output.safeParse(payload);
50
+ if (!parsed.success) {
51
+ throw new Error(parsed.error.message);
52
+ }
53
+ return parsed.data;
54
+ }
55
+ validateCall(name, payload) {
56
+ const spec = this.tools.get(name);
57
+ if (!spec) {
58
+ throw new Error(`tool not found: ${name}`);
59
+ }
60
+ return { input: this.validateInput(name, payload), spec };
61
+ }
62
+ async execute(name, payload, ctx = null) {
63
+ const start = Date.now();
64
+ const { input, spec } = this.validateCall(name, payload);
65
+ if (!spec.handler) {
66
+ throw new Error(`tool has no handler: ${name}`);
67
+ }
68
+ const runtime = ctx?.runtime;
69
+ const tracer = runtime?.tracer;
70
+ const stepId = runtime?.stepId ?? runtime?.step_id ?? null;
71
+ try {
72
+ const result = await Promise.resolve(spec.handler(ctx, input));
73
+ const validated = this.validateOutput(name, result);
74
+ if (tracer) {
75
+ tracer.emit('tool_call', {
76
+ tool_name: name,
77
+ inputs: input,
78
+ outputs: validated,
79
+ success: true,
80
+ duration_ms: Date.now() - start,
81
+ }, stepId || undefined);
82
+ }
83
+ return validated;
84
+ }
85
+ catch (err) {
86
+ if (tracer) {
87
+ tracer.emit('tool_call', {
88
+ tool_name: name,
89
+ inputs: input,
90
+ success: false,
91
+ error: String(err?.message ?? err),
92
+ duration_ms: Date.now() - start,
93
+ }, stepId || undefined);
94
+ }
95
+ throw err;
96
+ }
97
+ }
98
+ }
99
+ exports.ToolRegistry = ToolRegistry;
100
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * CloudTraceSink - Enterprise Cloud Upload
3
+ *
4
+ * Implements "Local Write, Batch Upload" pattern for cloud tracing
5
+ *
6
+ * PRODUCTION HARDENING:
7
+ * - Uses persistent cache directory (~/.sentience/traces/pending/) to survive crashes
8
+ * - Supports non-blocking close() to avoid hanging user scripts
9
+ * - Preserves traces locally on upload failure
10
+ */
11
+ import { TraceSink } from './sink';
12
+ import { TraceEvent } from './types';
13
+ /**
14
+ * Optional logger interface for SDK users
15
+ */
16
+ export interface SentienceLogger {
17
+ info(message: string): void;
18
+ warn(message: string): void;
19
+ error(message: string): void;
20
+ }
21
+ /**
22
+ * CloudTraceSink writes trace events to a local temp file,
23
+ * then uploads the complete trace to cloud storage on close()
24
+ *
25
+ * Architecture:
26
+ * 1. **Local Buffer**: Writes to temp file (zero latency, non-blocking)
27
+ * 2. **Pre-signed URL**: Uses secure pre-signed PUT URL from backend API
28
+ * 3. **Batch Upload**: Uploads complete file on close() or at intervals
29
+ * 4. **Zero Credential Exposure**: Never embeds cloud credentials in SDK
30
+ *
31
+ * This design ensures:
32
+ * - Fast agent performance (microseconds per emit, not milliseconds)
33
+ * - Security (credentials stay on backend)
34
+ * - Reliability (network issues don't crash the agent)
35
+ *
36
+ * Example:
37
+ * const sink = new CloudTraceSink(uploadUrl);
38
+ * const tracer = new Tracer(runId, sink);
39
+ * tracer.emitRunStart('SentienceAgent');
40
+ * await tracer.close(); // Uploads to cloud
41
+ */
42
+ export declare class CloudTraceSink extends TraceSink {
43
+ private uploadUrl;
44
+ private tempFilePath;
45
+ private runId;
46
+ private writeStream;
47
+ private closed;
48
+ private apiKey?;
49
+ private apiUrl;
50
+ private logger?;
51
+ private traceFileSizeBytes;
52
+ private screenshotTotalSizeBytes;
53
+ private screenshotCount;
54
+ private indexFileSizeBytes;
55
+ private uploadSuccessful;
56
+ /**
57
+ * Create a new CloudTraceSink
58
+ *
59
+ * @param uploadUrl - Pre-signed PUT URL from Sentience API
60
+ * @param runId - Run ID for persistent cache naming
61
+ * @param apiKey - Sentience API key for calling /v1/traces/complete
62
+ * @param apiUrl - Sentience API base URL (default: https://api.sentienceapi.com)
63
+ * @param logger - Optional logger instance for logging file sizes and errors
64
+ */
65
+ constructor(uploadUrl: string, runId?: string, apiKey?: string, apiUrl?: string, logger?: SentienceLogger);
66
+ /**
67
+ * Emit a trace event to local temp file (fast, non-blocking)
68
+ *
69
+ * @param event - Trace event to emit
70
+ */
71
+ emit(event: TraceEvent): void;
72
+ /**
73
+ * Upload data to cloud using Node's built-in https module
74
+ */
75
+ private _uploadToCloud;
76
+ /**
77
+ * Upload buffered trace to cloud via pre-signed URL
78
+ *
79
+ * @param blocking - If false, upload happens in background (default: true)
80
+ *
81
+ * PRODUCTION FIX: Non-blocking mode prevents hanging user scripts
82
+ * on slow uploads (Risk #2 from production hardening plan)
83
+ */
84
+ close(blocking?: boolean): Promise<void>;
85
+ /**
86
+ * Internal upload logic (called by both blocking and non-blocking close)
87
+ */
88
+ private _doUpload;
89
+ /**
90
+ * Infer final status from trace events by reading the trace file.
91
+ * @returns Final status: "success", "failure", "partial", or "unknown"
92
+ */
93
+ private _inferFinalStatusFromTrace;
94
+ /**
95
+ * Extract execution statistics from trace file.
96
+ * @returns Trace statistics for /v1/traces/complete
97
+ */
98
+ private _extractStatsFromTrace;
99
+ /**
100
+ * Call /v1/traces/complete to report file sizes and stats to gateway.
101
+ *
102
+ * This is a best-effort call - failures are logged but don't affect upload success.
103
+ */
104
+ private _completeTrace;
105
+ /**
106
+ * Generate trace index file (automatic on close)
107
+ */
108
+ private generateIndex;
109
+ /**
110
+ * Upload trace index file to cloud storage.
111
+ *
112
+ * Called after successful trace upload to provide fast timeline rendering.
113
+ * The index file enables O(1) step lookups without parsing the entire trace.
114
+ */
115
+ private _uploadIndex;
116
+ /**
117
+ * Request index upload URL from Sentience API
118
+ */
119
+ private _requestIndexUploadUrl;
120
+ /**
121
+ * Upload index data to cloud using pre-signed URL
122
+ */
123
+ private _uploadIndexToCloud;
124
+ /**
125
+ * Normalize screenshot data by extracting base64 from data URL if needed.
126
+ *
127
+ * Handles both formats:
128
+ * - Data URL: "data:image/jpeg;base64,/9j/4AAQ..."
129
+ * - Pure base64: "/9j/4AAQ..."
130
+ *
131
+ * @param screenshotRaw - Raw screenshot data (data URL or base64)
132
+ * @param defaultFormat - Default format if not detected from data URL
133
+ * @returns Tuple of [base64String, formatString]
134
+ */
135
+ private _normalizeScreenshotData;
136
+ /**
137
+ * Extract screenshots from trace events.
138
+ *
139
+ * @returns Map of sequence number to screenshot data
140
+ */
141
+ private _extractScreenshotsFromTrace;
142
+ /**
143
+ * Create trace file without screenshot_base64 fields.
144
+ *
145
+ * @param outputPath - Path to write cleaned trace file
146
+ */
147
+ private _createCleanedTrace;
148
+ /**
149
+ * Request pre-signed upload URLs for screenshots from gateway.
150
+ *
151
+ * @param sequences - List of screenshot sequence numbers
152
+ * @returns Map of sequence number to upload URL
153
+ */
154
+ private _requestScreenshotUrls;
155
+ /**
156
+ * Upload screenshots extracted from trace events.
157
+ *
158
+ * Steps:
159
+ * 1. Request pre-signed URLs from gateway (/v1/screenshots/init)
160
+ * 2. Decode base64 to image bytes
161
+ * 3. Upload screenshots in parallel (10 concurrent workers)
162
+ * 4. Track upload progress
163
+ *
164
+ * @param screenshots - Map of sequence to screenshot data
165
+ */
166
+ private _uploadScreenshots;
167
+ /**
168
+ * Upload a single screenshot to pre-signed URL.
169
+ *
170
+ * @param sequence - Screenshot sequence number
171
+ * @param uploadUrl - Pre-signed upload URL
172
+ * @param screenshotData - Screenshot data with base64 and format
173
+ * @returns True if upload successful, false otherwise
174
+ */
175
+ private _uploadSingleScreenshot;
176
+ /**
177
+ * Upload screenshot data to cloud using pre-signed URL
178
+ */
179
+ private _uploadScreenshotToCloud;
180
+ /**
181
+ * Delete local files after successful upload.
182
+ */
183
+ private _cleanupFiles;
184
+ /**
185
+ * Get unique identifier for this sink
186
+ */
187
+ getSinkType(): string;
188
+ }
189
+ //# sourceMappingURL=cloud-sink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-sink.d.ts","sourceRoot":"","sources":["../../src/tracing/cloud-sink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,UAAU,EAAc,MAAM,SAAS,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAkBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,cAAe,SAAQ,SAAS;IAC3C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAkB;IAGjC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,wBAAwB,CAAa;IAC7C,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,kBAAkB,CAAa;IAGvC,OAAO,CAAC,gBAAgB,CAAkB;IAE1C;;;;;;;;OAQG;gBAED,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,eAAe;IAkC1B;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAkB7B;;OAEG;YACW,cAAc;IAwC5B;;;;;;;OAOG;IACG,KAAK,CAAC,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BpD;;OAEG;YACW,SAAS;IA+FvB;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IA4DlC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA8F9B;;;;OAIG;YACW,cAAc;IAsE5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;;;;OAKG;YACW,YAAY;IA+E1B;;OAEG;YACW,sBAAsB;IAyDpC;;OAEG;YACW,mBAAmB;IAuCjC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,wBAAwB;IAwChC;;;;OAIG;YACW,4BAA4B;IAoD1C;;;;OAIG;YACW,mBAAmB;IAsCjC;;;;;OAKG;YACW,sBAAsB;IAwEpC;;;;;;;;;;OAUG;YACW,kBAAkB;IA0EhC;;;;;;;OAOG;YACW,uBAAuB;IAgCrC;;OAEG;YACW,wBAAwB;IA0CtC;;OAEG;YACW,aAAa;IAW3B;;OAEG;IACH,WAAW,IAAI,MAAM;CAGtB"}