@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.
- package/LICENSE +24 -0
- package/README.md +252 -0
- package/dist/actions.d.ts +185 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +1120 -0
- package/dist/actions.js.map +1 -0
- package/dist/agent-runtime.d.ts +352 -0
- package/dist/agent-runtime.d.ts.map +1 -0
- package/dist/agent-runtime.js +1170 -0
- package/dist/agent-runtime.js.map +1 -0
- package/dist/agent.d.ts +164 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +408 -0
- package/dist/agent.js.map +1 -0
- package/dist/asserts/expect.d.ts +159 -0
- package/dist/asserts/expect.d.ts.map +1 -0
- package/dist/asserts/expect.js +547 -0
- package/dist/asserts/expect.js.map +1 -0
- package/dist/asserts/index.d.ts +58 -0
- package/dist/asserts/index.d.ts.map +1 -0
- package/dist/asserts/index.js +70 -0
- package/dist/asserts/index.js.map +1 -0
- package/dist/asserts/query.d.ts +199 -0
- package/dist/asserts/query.d.ts.map +1 -0
- package/dist/asserts/query.js +288 -0
- package/dist/asserts/query.js.map +1 -0
- package/dist/backends/actions.d.ts +119 -0
- package/dist/backends/actions.d.ts.map +1 -0
- package/dist/backends/actions.js +291 -0
- package/dist/backends/actions.js.map +1 -0
- package/dist/backends/browser-use-adapter.d.ts +131 -0
- package/dist/backends/browser-use-adapter.d.ts.map +1 -0
- package/dist/backends/browser-use-adapter.js +219 -0
- package/dist/backends/browser-use-adapter.js.map +1 -0
- package/dist/backends/cdp-backend.d.ts +66 -0
- package/dist/backends/cdp-backend.d.ts.map +1 -0
- package/dist/backends/cdp-backend.js +273 -0
- package/dist/backends/cdp-backend.js.map +1 -0
- package/dist/backends/index.d.ts +80 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +101 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/protocol.d.ts +156 -0
- package/dist/backends/protocol.d.ts.map +1 -0
- package/dist/backends/protocol.js +16 -0
- package/dist/backends/protocol.js.map +1 -0
- package/dist/backends/sentience-context.d.ts +143 -0
- package/dist/backends/sentience-context.d.ts.map +1 -0
- package/dist/backends/sentience-context.js +359 -0
- package/dist/backends/sentience-context.js.map +1 -0
- package/dist/backends/snapshot.d.ts +188 -0
- package/dist/backends/snapshot.d.ts.map +1 -0
- package/dist/backends/snapshot.js +360 -0
- package/dist/backends/snapshot.js.map +1 -0
- package/dist/browser.d.ts +154 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +920 -0
- package/dist/browser.js.map +1 -0
- package/dist/canonicalization.d.ts +126 -0
- package/dist/canonicalization.d.ts.map +1 -0
- package/dist/canonicalization.js +161 -0
- package/dist/canonicalization.js.map +1 -0
- package/dist/captcha/strategies.d.ts +12 -0
- package/dist/captcha/strategies.d.ts.map +1 -0
- package/dist/captcha/strategies.js +43 -0
- package/dist/captcha/strategies.js.map +1 -0
- package/dist/captcha/types.d.ts +45 -0
- package/dist/captcha/types.d.ts.map +1 -0
- package/dist/captcha/types.js +12 -0
- package/dist/captcha/types.js.map +1 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +422 -0
- package/dist/cli.js.map +1 -0
- package/dist/conversational-agent.d.ts +123 -0
- package/dist/conversational-agent.d.ts.map +1 -0
- package/dist/conversational-agent.js +341 -0
- package/dist/conversational-agent.js.map +1 -0
- package/dist/cursor-policy.d.ts +41 -0
- package/dist/cursor-policy.d.ts.map +1 -0
- package/dist/cursor-policy.js +81 -0
- package/dist/cursor-policy.js.map +1 -0
- package/dist/debugger.d.ts +28 -0
- package/dist/debugger.d.ts.map +1 -0
- package/dist/debugger.js +107 -0
- package/dist/debugger.js.map +1 -0
- package/dist/expect.d.ts +16 -0
- package/dist/expect.d.ts.map +1 -0
- package/dist/expect.js +67 -0
- package/dist/expect.js.map +1 -0
- package/dist/failure-artifacts.d.ts +95 -0
- package/dist/failure-artifacts.d.ts.map +1 -0
- package/dist/failure-artifacts.js +805 -0
- package/dist/failure-artifacts.js.map +1 -0
- package/dist/generator.d.ts +16 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +205 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +160 -0
- package/dist/index.js.map +1 -0
- package/dist/inspector.d.ts +13 -0
- package/dist/inspector.d.ts.map +1 -0
- package/dist/inspector.js +153 -0
- package/dist/inspector.js.map +1 -0
- package/dist/llm-provider.d.ts +144 -0
- package/dist/llm-provider.d.ts.map +1 -0
- package/dist/llm-provider.js +460 -0
- package/dist/llm-provider.js.map +1 -0
- package/dist/ordinal.d.ts +90 -0
- package/dist/ordinal.d.ts.map +1 -0
- package/dist/ordinal.js +249 -0
- package/dist/ordinal.js.map +1 -0
- package/dist/overlay.d.ts +63 -0
- package/dist/overlay.d.ts.map +1 -0
- package/dist/overlay.js +102 -0
- package/dist/overlay.js.map +1 -0
- package/dist/protocols/browser-protocol.d.ts +79 -0
- package/dist/protocols/browser-protocol.d.ts.map +1 -0
- package/dist/protocols/browser-protocol.js +9 -0
- package/dist/protocols/browser-protocol.js.map +1 -0
- package/dist/query.d.ts +66 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +482 -0
- package/dist/query.js.map +1 -0
- package/dist/read.d.ts +47 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +128 -0
- package/dist/read.js.map +1 -0
- package/dist/recorder.d.ts +44 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/recorder.js +262 -0
- package/dist/recorder.js.map +1 -0
- package/dist/runtime-agent.d.ts +72 -0
- package/dist/runtime-agent.d.ts.map +1 -0
- package/dist/runtime-agent.js +357 -0
- package/dist/runtime-agent.js.map +1 -0
- package/dist/screenshot.d.ts +17 -0
- package/dist/screenshot.d.ts.map +1 -0
- package/dist/screenshot.js +40 -0
- package/dist/screenshot.js.map +1 -0
- package/dist/snapshot-diff.d.ts +23 -0
- package/dist/snapshot-diff.d.ts.map +1 -0
- package/dist/snapshot-diff.js +119 -0
- package/dist/snapshot-diff.js.map +1 -0
- package/dist/snapshot.d.ts +47 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +358 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/textSearch.d.ts +64 -0
- package/dist/textSearch.d.ts.map +1 -0
- package/dist/textSearch.js +113 -0
- package/dist/textSearch.js.map +1 -0
- package/dist/tools/context.d.ts +18 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +40 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/defaults.d.ts +5 -0
- package/dist/tools/defaults.d.ts.map +1 -0
- package/dist/tools/defaults.js +368 -0
- package/dist/tools/defaults.js.map +1 -0
- package/dist/tools/filesystem.d.ts +12 -0
- package/dist/tools/filesystem.d.ts.map +1 -0
- package/dist/tools/filesystem.js +137 -0
- package/dist/tools/filesystem.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +38 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +100 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tracing/cloud-sink.d.ts +189 -0
- package/dist/tracing/cloud-sink.d.ts.map +1 -0
- package/dist/tracing/cloud-sink.js +1067 -0
- package/dist/tracing/cloud-sink.js.map +1 -0
- package/dist/tracing/index-schema.d.ts +231 -0
- package/dist/tracing/index-schema.d.ts.map +1 -0
- package/dist/tracing/index-schema.js +235 -0
- package/dist/tracing/index-schema.js.map +1 -0
- package/dist/tracing/index.d.ts +12 -0
- package/dist/tracing/index.d.ts.map +1 -0
- package/dist/tracing/index.js +28 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/tracing/indexer.d.ts +20 -0
- package/dist/tracing/indexer.d.ts.map +1 -0
- package/dist/tracing/indexer.js +347 -0
- package/dist/tracing/indexer.js.map +1 -0
- package/dist/tracing/jsonl-sink.d.ts +51 -0
- package/dist/tracing/jsonl-sink.d.ts.map +1 -0
- package/dist/tracing/jsonl-sink.js +329 -0
- package/dist/tracing/jsonl-sink.js.map +1 -0
- package/dist/tracing/sink.d.ts +25 -0
- package/dist/tracing/sink.d.ts.map +1 -0
- package/dist/tracing/sink.js +15 -0
- package/dist/tracing/sink.js.map +1 -0
- package/dist/tracing/tracer-factory.d.ts +102 -0
- package/dist/tracing/tracer-factory.d.ts.map +1 -0
- package/dist/tracing/tracer-factory.js +375 -0
- package/dist/tracing/tracer-factory.js.map +1 -0
- package/dist/tracing/tracer.d.ts +140 -0
- package/dist/tracing/tracer.d.ts.map +1 -0
- package/dist/tracing/tracer.js +336 -0
- package/dist/tracing/tracer.js.map +1 -0
- package/dist/tracing/types.d.ts +203 -0
- package/dist/tracing/types.d.ts.map +1 -0
- package/dist/tracing/types.js +8 -0
- package/dist/tracing/types.js.map +1 -0
- package/dist/types.d.ts +422 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/action-executor.d.ts +25 -0
- package/dist/utils/action-executor.d.ts.map +1 -0
- package/dist/utils/action-executor.js +121 -0
- package/dist/utils/action-executor.js.map +1 -0
- package/dist/utils/browser-evaluator.d.ts +76 -0
- package/dist/utils/browser-evaluator.d.ts.map +1 -0
- package/dist/utils/browser-evaluator.js +130 -0
- package/dist/utils/browser-evaluator.js.map +1 -0
- package/dist/utils/browser.d.ts +30 -0
- package/dist/utils/browser.d.ts.map +1 -0
- package/dist/utils/browser.js +75 -0
- package/dist/utils/browser.js.map +1 -0
- package/dist/utils/element-filter.d.ts +76 -0
- package/dist/utils/element-filter.d.ts.map +1 -0
- package/dist/utils/element-filter.js +195 -0
- package/dist/utils/element-filter.js.map +1 -0
- package/dist/utils/grid-utils.d.ts +37 -0
- package/dist/utils/grid-utils.d.ts.map +1 -0
- package/dist/utils/grid-utils.js +283 -0
- package/dist/utils/grid-utils.js.map +1 -0
- package/dist/utils/llm-interaction-handler.d.ts +41 -0
- package/dist/utils/llm-interaction-handler.d.ts.map +1 -0
- package/dist/utils/llm-interaction-handler.js +171 -0
- package/dist/utils/llm-interaction-handler.js.map +1 -0
- package/dist/utils/llm-response-builder.d.ts +56 -0
- package/dist/utils/llm-response-builder.d.ts.map +1 -0
- package/dist/utils/llm-response-builder.js +130 -0
- package/dist/utils/llm-response-builder.js.map +1 -0
- package/dist/utils/selector-utils.d.ts +12 -0
- package/dist/utils/selector-utils.d.ts.map +1 -0
- package/dist/utils/selector-utils.js +32 -0
- package/dist/utils/selector-utils.js.map +1 -0
- package/dist/utils/snapshot-event-builder.d.ts +28 -0
- package/dist/utils/snapshot-event-builder.d.ts.map +1 -0
- package/dist/utils/snapshot-event-builder.js +88 -0
- package/dist/utils/snapshot-event-builder.js.map +1 -0
- package/dist/utils/snapshot-processor.d.ts +27 -0
- package/dist/utils/snapshot-processor.d.ts.map +1 -0
- package/dist/utils/snapshot-processor.js +47 -0
- package/dist/utils/snapshot-processor.js.map +1 -0
- package/dist/utils/trace-event-builder.d.ts +122 -0
- package/dist/utils/trace-event-builder.d.ts.map +1 -0
- package/dist/utils/trace-event-builder.js +365 -0
- package/dist/utils/trace-event-builder.js.map +1 -0
- package/dist/utils/trace-file-manager.d.ts +70 -0
- package/dist/utils/trace-file-manager.d.ts.map +1 -0
- package/dist/utils/trace-file-manager.js +194 -0
- package/dist/utils/trace-file-manager.js.map +1 -0
- package/dist/utils/zod.d.ts +5 -0
- package/dist/utils/zod.d.ts.map +1 -0
- package/dist/utils/zod.js +80 -0
- package/dist/utils/zod.js.map +1 -0
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +13 -0
- package/dist/utils.js.map +1 -0
- package/dist/verification.d.ts +194 -0
- package/dist/verification.d.ts.map +1 -0
- package/dist/verification.js +530 -0
- package/dist/verification.js.map +1 -0
- package/dist/vision-executor.d.ts +18 -0
- package/dist/vision-executor.d.ts.map +1 -0
- package/dist/vision-executor.js +60 -0
- package/dist/vision-executor.js.map +1 -0
- package/dist/visual-agent.d.ts +120 -0
- package/dist/visual-agent.d.ts.map +1 -0
- package/dist/visual-agent.js +796 -0
- package/dist/visual-agent.js.map +1 -0
- package/dist/wait.d.ts +35 -0
- package/dist/wait.d.ts.map +1 -0
- package/dist/wait.js +76 -0
- package/dist/wait.js.map +1 -0
- package/package.json +94 -0
- package/spec/README.md +72 -0
- package/spec/SNAPSHOT_V1.md +208 -0
- package/spec/sdk-types.md +259 -0
- package/spec/snapshot.schema.json +148 -0
- package/src/extension/background.js +104 -0
- package/src/extension/content.js +162 -0
- package/src/extension/injected_api.js +1399 -0
- package/src/extension/manifest.json +36 -0
- package/src/extension/pkg/README.md +1340 -0
- package/src/extension/pkg/package.json +15 -0
- package/src/extension/pkg/sentience_core.d.ts +51 -0
- package/src/extension/pkg/sentience_core.js +371 -0
- package/src/extension/pkg/sentience_core_bg.wasm +0 -0
- package/src/extension/pkg/sentience_core_bg.wasm.d.ts +10 -0
- 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"}
|