@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,329 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JSONL Trace Sink
|
|
4
|
+
*
|
|
5
|
+
* Writes trace events to a local JSONL (JSON Lines) file
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.JsonlTraceSink = void 0;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const sink_1 = require("./sink");
|
|
45
|
+
/**
|
|
46
|
+
* JsonlTraceSink writes trace events to a JSONL file (one JSON object per line)
|
|
47
|
+
*/
|
|
48
|
+
class JsonlTraceSink extends sink_1.TraceSink {
|
|
49
|
+
/**
|
|
50
|
+
* Create a new JSONL trace sink
|
|
51
|
+
* @param filePath - Path to the JSONL file (will be created if doesn't exist)
|
|
52
|
+
*/
|
|
53
|
+
constructor(filePath) {
|
|
54
|
+
super();
|
|
55
|
+
this.writeStream = null;
|
|
56
|
+
this.closed = false;
|
|
57
|
+
this.path = filePath;
|
|
58
|
+
// Create parent directories if needed (synchronously)
|
|
59
|
+
const dir = path.dirname(filePath);
|
|
60
|
+
try {
|
|
61
|
+
if (!fs.existsSync(dir)) {
|
|
62
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
63
|
+
}
|
|
64
|
+
// Verify directory is writable
|
|
65
|
+
fs.accessSync(dir, fs.constants.W_OK);
|
|
66
|
+
// Open file in append mode with line buffering
|
|
67
|
+
this.writeStream = fs.createWriteStream(filePath, {
|
|
68
|
+
flags: 'a',
|
|
69
|
+
encoding: 'utf-8',
|
|
70
|
+
autoClose: true,
|
|
71
|
+
});
|
|
72
|
+
// Handle stream errors (suppress logging if stream is closed)
|
|
73
|
+
this.writeStream.on('error', error => {
|
|
74
|
+
if (!this.closed) {
|
|
75
|
+
console.error('[JsonlTraceSink] Stream error:', error);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
console.error('[JsonlTraceSink] Failed to initialize sink:', error);
|
|
81
|
+
this.writeStream = null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Emit a trace event (write as JSON line)
|
|
86
|
+
* @param event - Trace event to emit
|
|
87
|
+
*/
|
|
88
|
+
emit(event) {
|
|
89
|
+
if (this.closed) {
|
|
90
|
+
// Only warn in non-test environments to avoid test noise
|
|
91
|
+
const isTestEnv = process.env.CI === 'true' ||
|
|
92
|
+
process.env.NODE_ENV === 'test' ||
|
|
93
|
+
process.env.JEST_WORKER_ID !== undefined ||
|
|
94
|
+
(typeof global !== 'undefined' && global.__JEST__);
|
|
95
|
+
if (!isTestEnv) {
|
|
96
|
+
console.warn('[JsonlTraceSink] Attempted to emit after close()');
|
|
97
|
+
}
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (!this.writeStream) {
|
|
101
|
+
console.error('[JsonlTraceSink] Write stream not available');
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const jsonLine = JSON.stringify(event) + '\n';
|
|
106
|
+
const written = this.writeStream.write(jsonLine);
|
|
107
|
+
// If write returns false, the stream is backpressured
|
|
108
|
+
// We don't need to wait, but we could add a drain listener if needed
|
|
109
|
+
if (!written) {
|
|
110
|
+
// Stream is backpressured - wait for drain
|
|
111
|
+
this.writeStream.once('drain', () => {
|
|
112
|
+
// Stream is ready again
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
// Log error but don't crash agent execution
|
|
118
|
+
console.error('[JsonlTraceSink] Failed to write event:', error);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Close the sink and flush buffered data
|
|
123
|
+
*/
|
|
124
|
+
async close() {
|
|
125
|
+
if (this.closed) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
this.closed = true;
|
|
129
|
+
// Check if stream exists and is writable
|
|
130
|
+
if (!this.writeStream || this.writeStream.destroyed) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// Store reference to satisfy TypeScript null checks
|
|
134
|
+
const stream = this.writeStream;
|
|
135
|
+
// Remove error listener to prevent late errors
|
|
136
|
+
stream.removeAllListeners('error');
|
|
137
|
+
return new Promise(resolve => {
|
|
138
|
+
// Check if stream is already closed
|
|
139
|
+
if (stream.destroyed || !stream.writable) {
|
|
140
|
+
// Stream already closed, generate index and resolve immediately
|
|
141
|
+
this.generateIndex();
|
|
142
|
+
resolve();
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
let resolved = false;
|
|
146
|
+
const doResolve = () => {
|
|
147
|
+
if (!resolved) {
|
|
148
|
+
resolved = true;
|
|
149
|
+
clearTimeout(timeout);
|
|
150
|
+
// Generate index after closing file
|
|
151
|
+
this.generateIndex();
|
|
152
|
+
resolve();
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
// Fallback timeout in case 'close' event doesn't fire (shouldn't happen, but safety)
|
|
156
|
+
const timeout = setTimeout(() => {
|
|
157
|
+
if (!resolved) {
|
|
158
|
+
doResolve();
|
|
159
|
+
}
|
|
160
|
+
}, 500);
|
|
161
|
+
// Wait for stream to fully close (Windows needs this)
|
|
162
|
+
// The 'close' event fires after all data is flushed and file handle is released
|
|
163
|
+
stream.once('close', doResolve);
|
|
164
|
+
stream.end((err) => {
|
|
165
|
+
if (err) {
|
|
166
|
+
// Silently ignore close errors in production
|
|
167
|
+
// (they're logged during stream lifetime if needed)
|
|
168
|
+
}
|
|
169
|
+
// Note: 'close' event will fire after end() completes
|
|
170
|
+
// Don't resolve here - wait for 'close' event
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Generate trace index file (automatic on close)
|
|
176
|
+
*/
|
|
177
|
+
generateIndex() {
|
|
178
|
+
try {
|
|
179
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
180
|
+
const { writeTraceIndex } = require('./indexer');
|
|
181
|
+
// Use frontend format to ensure 'step' field is present (1-based)
|
|
182
|
+
// Frontend derives sequence from step.step - 1, so step must be valid
|
|
183
|
+
const indexPath = this.path.replace(/\.jsonl$/, '.index.json');
|
|
184
|
+
writeTraceIndex(this.path, indexPath, true);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
// Non-fatal: log but don't crash
|
|
188
|
+
console.log(`⚠️ Failed to generate trace index: ${error.message}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get sink type identifier
|
|
193
|
+
*/
|
|
194
|
+
getSinkType() {
|
|
195
|
+
return `JsonlTraceSink(${this.path})`;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Get file path
|
|
199
|
+
*/
|
|
200
|
+
getPath() {
|
|
201
|
+
return this.path;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Check if sink is closed
|
|
205
|
+
*/
|
|
206
|
+
isClosed() {
|
|
207
|
+
return this.closed;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Extract execution statistics from trace file (for local traces).
|
|
211
|
+
* @returns Trace statistics
|
|
212
|
+
*/
|
|
213
|
+
getStats() {
|
|
214
|
+
try {
|
|
215
|
+
// Read trace file to extract stats
|
|
216
|
+
const traceContent = fs.readFileSync(this.path, 'utf-8');
|
|
217
|
+
const lines = traceContent.split('\n').filter(line => line.trim());
|
|
218
|
+
const events = [];
|
|
219
|
+
for (const line of lines) {
|
|
220
|
+
try {
|
|
221
|
+
const event = JSON.parse(line);
|
|
222
|
+
events.push(event);
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
if (events.length === 0) {
|
|
229
|
+
return {
|
|
230
|
+
total_steps: 0,
|
|
231
|
+
total_events: 0,
|
|
232
|
+
duration_ms: null,
|
|
233
|
+
final_status: 'unknown',
|
|
234
|
+
started_at: null,
|
|
235
|
+
ended_at: null,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
// Find run_start and run_end events
|
|
239
|
+
const runStart = events.find(e => e.type === 'run_start');
|
|
240
|
+
const runEnd = events.find(e => e.type === 'run_end');
|
|
241
|
+
// Extract timestamps
|
|
242
|
+
const startedAt = runStart?.ts || null;
|
|
243
|
+
const endedAt = runEnd?.ts || null;
|
|
244
|
+
// Calculate duration
|
|
245
|
+
let durationMs = null;
|
|
246
|
+
if (startedAt && endedAt) {
|
|
247
|
+
try {
|
|
248
|
+
const startDt = new Date(startedAt);
|
|
249
|
+
const endDt = new Date(endedAt);
|
|
250
|
+
durationMs = endDt.getTime() - startDt.getTime();
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// Ignore parse errors
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Count steps (from step_start events, only first attempt)
|
|
257
|
+
const stepIndices = new Set();
|
|
258
|
+
for (const event of events) {
|
|
259
|
+
if (event.type === 'step_start') {
|
|
260
|
+
const stepIndex = event.data?.step_index;
|
|
261
|
+
if (stepIndex !== undefined) {
|
|
262
|
+
stepIndices.add(stepIndex);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
let totalSteps = stepIndices.size;
|
|
267
|
+
// If run_end has steps count, use that (more accurate)
|
|
268
|
+
if (runEnd) {
|
|
269
|
+
const stepsFromEnd = runEnd.data?.steps;
|
|
270
|
+
if (stepsFromEnd !== undefined) {
|
|
271
|
+
totalSteps = Math.max(totalSteps, stepsFromEnd);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// Count total events
|
|
275
|
+
const totalEvents = events.length;
|
|
276
|
+
// Infer final status
|
|
277
|
+
let finalStatus = 'unknown';
|
|
278
|
+
// Check for run_end event with status
|
|
279
|
+
if (runEnd) {
|
|
280
|
+
const status = runEnd.data?.status;
|
|
281
|
+
if (status === 'success' ||
|
|
282
|
+
status === 'failure' ||
|
|
283
|
+
status === 'partial' ||
|
|
284
|
+
status === 'unknown') {
|
|
285
|
+
finalStatus = status;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
// Infer from error events
|
|
290
|
+
const hasErrors = events.some(e => e.type === 'error');
|
|
291
|
+
if (hasErrors) {
|
|
292
|
+
const stepEnds = events.filter(e => e.type === 'step_end');
|
|
293
|
+
if (stepEnds.length > 0) {
|
|
294
|
+
finalStatus = 'partial';
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
finalStatus = 'failure';
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
const stepEnds = events.filter(e => e.type === 'step_end');
|
|
302
|
+
if (stepEnds.length > 0) {
|
|
303
|
+
finalStatus = 'success';
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return {
|
|
308
|
+
total_steps: totalSteps,
|
|
309
|
+
total_events: totalEvents,
|
|
310
|
+
duration_ms: durationMs,
|
|
311
|
+
final_status: finalStatus,
|
|
312
|
+
started_at: startedAt,
|
|
313
|
+
ended_at: endedAt,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
return {
|
|
318
|
+
total_steps: 0,
|
|
319
|
+
total_events: 0,
|
|
320
|
+
duration_ms: null,
|
|
321
|
+
final_status: 'unknown',
|
|
322
|
+
started_at: null,
|
|
323
|
+
ended_at: null,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
exports.JsonlTraceSink = JsonlTraceSink;
|
|
329
|
+
//# sourceMappingURL=jsonl-sink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl-sink.js","sourceRoot":"","sources":["../../src/tracing/jsonl-sink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TraceSink Abstract Class
|
|
3
|
+
*
|
|
4
|
+
* Defines the interface for trace event sinks (local files, cloud storage, etc.)
|
|
5
|
+
*/
|
|
6
|
+
import { TraceEvent } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* Abstract base class for trace sinks
|
|
9
|
+
*/
|
|
10
|
+
export declare abstract class TraceSink {
|
|
11
|
+
/**
|
|
12
|
+
* Emit a trace event
|
|
13
|
+
* @param event - Trace event to emit
|
|
14
|
+
*/
|
|
15
|
+
abstract emit(event: TraceEvent): void;
|
|
16
|
+
/**
|
|
17
|
+
* Close the sink and flush buffered data
|
|
18
|
+
*/
|
|
19
|
+
abstract close(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Get unique identifier for this sink (for debugging)
|
|
22
|
+
*/
|
|
23
|
+
abstract getSinkType(): string;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=sink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sink.d.ts","sourceRoot":"","sources":["../../src/tracing/sink.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;GAEG;AACH,8BAAsB,SAAS;IAC7B;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAEtC;;OAEG;IACH,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,MAAM;CAC/B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TraceSink Abstract Class
|
|
4
|
+
*
|
|
5
|
+
* Defines the interface for trace event sinks (local files, cloud storage, etc.)
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.TraceSink = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* Abstract base class for trace sinks
|
|
11
|
+
*/
|
|
12
|
+
class TraceSink {
|
|
13
|
+
}
|
|
14
|
+
exports.TraceSink = TraceSink;
|
|
15
|
+
//# sourceMappingURL=sink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sink.js","sourceRoot":"","sources":["../../src/tracing/sink.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAIH;;GAEG;AACH,MAAsB,SAAS;CAgB9B;AAhBD,8BAgBC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracer Factory with Automatic Tier Detection
|
|
3
|
+
*
|
|
4
|
+
* Provides convenient factory function for creating tracers with cloud upload support
|
|
5
|
+
*
|
|
6
|
+
* PRODUCTION HARDENING:
|
|
7
|
+
* - Recovers orphaned traces from previous crashes on SDK init (Risk #3)
|
|
8
|
+
* - Passes runId to CloudTraceSink for persistent cache naming (Risk #1)
|
|
9
|
+
*/
|
|
10
|
+
import { Tracer } from './tracer';
|
|
11
|
+
import { SentienceLogger } from './cloud-sink';
|
|
12
|
+
/**
|
|
13
|
+
* Sentience API base URL (constant)
|
|
14
|
+
*/
|
|
15
|
+
export declare const SENTIENCE_API_URL = "https://api.sentienceapi.com";
|
|
16
|
+
/**
|
|
17
|
+
* Create tracer with automatic tier detection
|
|
18
|
+
*
|
|
19
|
+
* Tier Detection:
|
|
20
|
+
* - If apiKey is provided AND uploadTrace is true: Try to initialize CloudTraceSink (Pro/Enterprise)
|
|
21
|
+
* - If cloud init fails, no apiKey, or uploadTrace is false: Fall back to JsonlTraceSink (Free tier)
|
|
22
|
+
*
|
|
23
|
+
* @param options - Configuration options
|
|
24
|
+
* @param options.apiKey - Sentience API key (e.g., "sk_pro_xxxxx")
|
|
25
|
+
* @param options.runId - Unique identifier for this agent run (generates UUID if not provided)
|
|
26
|
+
* @param options.apiUrl - Sentience API base URL (default: https://api.sentienceapi.com)
|
|
27
|
+
* @param options.logger - Optional logger instance for logging file sizes and errors
|
|
28
|
+
* @param options.uploadTrace - Enable cloud trace upload (default: true for backward compatibility)
|
|
29
|
+
* @param options.goal - User's goal/objective for this trace run. This will be displayed as the trace name in the frontend. Should be descriptive and action-oriented. Example: "Add wireless headphones to cart on Amazon"
|
|
30
|
+
* @param options.agentType - Type of agent running (e.g., "SentienceAgent", "CustomAgent")
|
|
31
|
+
* @param options.llmModel - LLM model used (e.g., "gpt-4-turbo", "claude-3-5-sonnet")
|
|
32
|
+
* @param options.startUrl - Starting URL of the agent run (e.g., "https://amazon.com")
|
|
33
|
+
* @param options.screenshotProcessor - Optional function to process screenshots before upload. Takes base64 string, returns processed base64 string. Useful for PII redaction or custom image processing.
|
|
34
|
+
* @param options.autoEmitRunStart - If true (default), automatically emit run_start event with provided metadata. This ensures traces have complete structure for Studio visualization.
|
|
35
|
+
* @returns Tracer configured with appropriate sink
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* // Pro tier user with goal and metadata
|
|
40
|
+
* const tracer = await createTracer({
|
|
41
|
+
* apiKey: "sk_pro_xyz",
|
|
42
|
+
* runId: "demo",
|
|
43
|
+
* goal: "Add headphones to cart",
|
|
44
|
+
* agentType: "SentienceAgent",
|
|
45
|
+
* llmModel: "gpt-4-turbo",
|
|
46
|
+
* startUrl: "https://amazon.com",
|
|
47
|
+
* uploadTrace: true
|
|
48
|
+
* });
|
|
49
|
+
* // Returns: Tracer with CloudTraceSink
|
|
50
|
+
* // run_start event is automatically emitted
|
|
51
|
+
*
|
|
52
|
+
* // With screenshot processor for PII redaction
|
|
53
|
+
* const redactPII = (screenshot: string): string => {
|
|
54
|
+
* // Your custom redaction logic
|
|
55
|
+
* return redactedScreenshot;
|
|
56
|
+
* };
|
|
57
|
+
* const tracer = await createTracer({
|
|
58
|
+
* apiKey: "sk_pro_xyz",
|
|
59
|
+
* screenshotProcessor: redactPII
|
|
60
|
+
* });
|
|
61
|
+
* // Screenshots will be processed before upload
|
|
62
|
+
*
|
|
63
|
+
* // Pro tier user with local-only tracing
|
|
64
|
+
* const tracer = await createTracer({ apiKey: "sk_pro_xyz", runId: "demo", uploadTrace: false });
|
|
65
|
+
* // Returns: Tracer with JsonlTraceSink (local-only)
|
|
66
|
+
*
|
|
67
|
+
* // Disable auto-emit for manual control
|
|
68
|
+
* const tracer = await createTracer({ runId: "demo", autoEmitRunStart: false });
|
|
69
|
+
* tracer.emitRunStart("MyAgent", "gpt-4o"); // Manual emit
|
|
70
|
+
*
|
|
71
|
+
* // Free tier user
|
|
72
|
+
* const tracer = await createTracer({ runId: "demo" });
|
|
73
|
+
* // Returns: Tracer with JsonlTraceSink (local-only)
|
|
74
|
+
*
|
|
75
|
+
* // Use with agent
|
|
76
|
+
* const agent = new SentienceAgent(browser, llm, 50, true, tracer);
|
|
77
|
+
* await agent.act("Click search");
|
|
78
|
+
* await tracer.close(); // Uploads to cloud if uploadTrace: true and Pro tier
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function createTracer(options: {
|
|
82
|
+
apiKey?: string;
|
|
83
|
+
runId?: string;
|
|
84
|
+
apiUrl?: string;
|
|
85
|
+
logger?: SentienceLogger;
|
|
86
|
+
uploadTrace?: boolean;
|
|
87
|
+
goal?: string;
|
|
88
|
+
agentType?: string;
|
|
89
|
+
llmModel?: string;
|
|
90
|
+
startUrl?: string;
|
|
91
|
+
screenshotProcessor?: (screenshot: string) => string;
|
|
92
|
+
autoEmitRunStart?: boolean;
|
|
93
|
+
}): Promise<Tracer>;
|
|
94
|
+
/**
|
|
95
|
+
* Synchronous version of createTracer for non-async contexts
|
|
96
|
+
* Always returns local JsonlTraceSink (no cloud upload)
|
|
97
|
+
*
|
|
98
|
+
* @param runId - Unique identifier for this agent run (generates UUID if not provided)
|
|
99
|
+
* @returns Tracer with JsonlTraceSink
|
|
100
|
+
*/
|
|
101
|
+
export declare function createLocalTracer(runId?: string): Tracer;
|
|
102
|
+
//# sourceMappingURL=tracer-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracer-factory.d.ts","sourceRoot":"","sources":["../../src/tracing/tracer-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAkB,eAAe,EAAE,MAAM,cAAc,CAAC;AAgC/D;;GAEG;AACH,eAAO,MAAM,iBAAiB,iCAAiC,CAAC;AA8JhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IACrD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,MAAM,CAAC,CAuGlB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAYxD"}
|