sentienceapi 0.90.1
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.md +43 -0
- package/README.md +946 -0
- package/dist/actions.d.ts +54 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +349 -0
- package/dist/actions.js.map +1 -0
- package/dist/agent.d.ts +157 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +437 -0
- package/dist/agent.js.map +1 -0
- package/dist/browser.d.ts +46 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +622 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +174 -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 +327 -0
- package/dist/conversational-agent.js.map +1 -0
- package/dist/expect.d.ts +16 -0
- package/dist/expect.d.ts.map +1 -0
- package/dist/expect.js +66 -0
- package/dist/expect.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 +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -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 +147 -0
- package/dist/inspector.js.map +1 -0
- package/dist/llm-provider.d.ts +60 -0
- package/dist/llm-provider.d.ts.map +1 -0
- package/dist/llm-provider.js +106 -0
- package/dist/llm-provider.js.map +1 -0
- package/dist/query.d.ts +8 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +337 -0
- package/dist/query.js.map +1 -0
- package/dist/read.d.ts +40 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +86 -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 +256 -0
- package/dist/recorder.js.map +1 -0
- package/dist/screenshot.d.ts +17 -0
- package/dist/screenshot.d.ts.map +1 -0
- package/dist/screenshot.js +37 -0
- package/dist/screenshot.js.map +1 -0
- package/dist/snapshot.d.ts +23 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +187 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/tracing/cloud-sink.d.ts +74 -0
- package/dist/tracing/cloud-sink.d.ts.map +1 -0
- package/dist/tracing/cloud-sink.js +262 -0
- package/dist/tracing/cloud-sink.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/jsonl-sink.d.ts +41 -0
- package/dist/tracing/jsonl-sink.d.ts.map +1 -0
- package/dist/tracing/jsonl-sink.js +168 -0
- package/dist/tracing/jsonl-sink.js.map +1 -0
- package/dist/tracing/sink.d.ts +24 -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 +57 -0
- package/dist/tracing/tracer-factory.d.ts.map +1 -0
- package/dist/tracing/tracer-factory.js +274 -0
- package/dist/tracing/tracer-factory.js.map +1 -0
- package/dist/tracing/tracer.d.ts +74 -0
- package/dist/tracing/tracer.d.ts.map +1 -0
- package/dist/tracing/tracer.js +131 -0
- package/dist/tracing/tracer.js.map +1 -0
- package/dist/tracing/types.d.ts +63 -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 +110 -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.d.ts +29 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +74 -0
- package/dist/utils.js.map +1 -0
- package/dist/wait.d.ts +20 -0
- package/dist/wait.d.ts.map +1 -0
- package/dist/wait.js +63 -0
- package/dist/wait.js.map +1 -0
- package/package.json +72 -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
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
/**
|
|
12
|
+
* Sentience API base URL (constant)
|
|
13
|
+
*/
|
|
14
|
+
export declare const SENTIENCE_API_URL = "https://api.sentienceapi.com";
|
|
15
|
+
/**
|
|
16
|
+
* Create tracer with automatic tier detection
|
|
17
|
+
*
|
|
18
|
+
* Tier Detection:
|
|
19
|
+
* - If apiKey is provided: Try to initialize CloudTraceSink (Pro/Enterprise)
|
|
20
|
+
* - If cloud init fails or no apiKey: Fall back to JsonlTraceSink (Free tier)
|
|
21
|
+
*
|
|
22
|
+
* @param options - Configuration options
|
|
23
|
+
* @param options.apiKey - Sentience API key (e.g., "sk_pro_xxxxx")
|
|
24
|
+
* @param options.runId - Unique identifier for this agent run (generates UUID if not provided)
|
|
25
|
+
* @param options.apiUrl - Sentience API base URL (default: https://api.sentienceapi.com)
|
|
26
|
+
* @returns Tracer configured with appropriate sink
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* // Pro tier user
|
|
31
|
+
* const tracer = await createTracer({ apiKey: "sk_pro_xyz", runId: "demo" });
|
|
32
|
+
* // Returns: Tracer with CloudTraceSink
|
|
33
|
+
*
|
|
34
|
+
* // Free tier user
|
|
35
|
+
* const tracer = await createTracer({ runId: "demo" });
|
|
36
|
+
* // Returns: Tracer with JsonlTraceSink (local-only)
|
|
37
|
+
*
|
|
38
|
+
* // Use with agent
|
|
39
|
+
* const agent = new SentienceAgent(browser, llm, 50, true, tracer);
|
|
40
|
+
* await agent.act("Click search");
|
|
41
|
+
* await tracer.close(); // Uploads to cloud if Pro tier
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function createTracer(options: {
|
|
45
|
+
apiKey?: string;
|
|
46
|
+
runId?: string;
|
|
47
|
+
apiUrl?: string;
|
|
48
|
+
}): Promise<Tracer>;
|
|
49
|
+
/**
|
|
50
|
+
* Synchronous version of createTracer for non-async contexts
|
|
51
|
+
* Always returns local JsonlTraceSink (no cloud upload)
|
|
52
|
+
*
|
|
53
|
+
* @param runId - Unique identifier for this agent run (generates UUID if not provided)
|
|
54
|
+
* @returns Tracer with JsonlTraceSink
|
|
55
|
+
*/
|
|
56
|
+
export declare function createLocalTracer(runId?: string): Tracer;
|
|
57
|
+
//# 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;AAIlC;;GAEG;AACH,eAAO,MAAM,iBAAiB,iCAAiC,CAAC;AA2IhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6DlB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAYxD"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tracer Factory with Automatic Tier Detection
|
|
4
|
+
*
|
|
5
|
+
* Provides convenient factory function for creating tracers with cloud upload support
|
|
6
|
+
*
|
|
7
|
+
* PRODUCTION HARDENING:
|
|
8
|
+
* - Recovers orphaned traces from previous crashes on SDK init (Risk #3)
|
|
9
|
+
* - Passes runId to CloudTraceSink for persistent cache naming (Risk #1)
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.SENTIENCE_API_URL = void 0;
|
|
46
|
+
exports.createTracer = createTracer;
|
|
47
|
+
exports.createLocalTracer = createLocalTracer;
|
|
48
|
+
const path = __importStar(require("path"));
|
|
49
|
+
const fs = __importStar(require("fs"));
|
|
50
|
+
const os = __importStar(require("os"));
|
|
51
|
+
const https = __importStar(require("https"));
|
|
52
|
+
const http = __importStar(require("http"));
|
|
53
|
+
const url_1 = require("url");
|
|
54
|
+
const crypto_1 = require("crypto");
|
|
55
|
+
const tracer_1 = require("./tracer");
|
|
56
|
+
const cloud_sink_1 = require("./cloud-sink");
|
|
57
|
+
const jsonl_sink_1 = require("./jsonl-sink");
|
|
58
|
+
/**
|
|
59
|
+
* Sentience API base URL (constant)
|
|
60
|
+
*/
|
|
61
|
+
exports.SENTIENCE_API_URL = 'https://api.sentienceapi.com';
|
|
62
|
+
/**
|
|
63
|
+
* Get persistent cache directory for traces
|
|
64
|
+
*/
|
|
65
|
+
function getPersistentCacheDir() {
|
|
66
|
+
const homeDir = os.homedir();
|
|
67
|
+
return path.join(homeDir, '.sentience', 'traces', 'pending');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Recover orphaned traces from previous crashes
|
|
71
|
+
* PRODUCTION FIX: Risk #3 - Upload traces from crashed sessions
|
|
72
|
+
*
|
|
73
|
+
* Note: Silently skips in test environments to avoid test noise
|
|
74
|
+
*/
|
|
75
|
+
async function recoverOrphanedTraces(apiKey, apiUrl = exports.SENTIENCE_API_URL) {
|
|
76
|
+
// Skip orphan recovery in test environments (CI, Jest, etc.)
|
|
77
|
+
// This prevents test failures from orphan recovery attempts
|
|
78
|
+
const isTestEnv = process.env.CI === 'true' ||
|
|
79
|
+
process.env.NODE_ENV === 'test' ||
|
|
80
|
+
process.env.JEST_WORKER_ID !== undefined ||
|
|
81
|
+
(typeof global !== 'undefined' && global.__JEST__);
|
|
82
|
+
if (isTestEnv) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const cacheDir = getPersistentCacheDir();
|
|
86
|
+
if (!fs.existsSync(cacheDir)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
let orphanedFiles;
|
|
90
|
+
try {
|
|
91
|
+
orphanedFiles = fs.readdirSync(cacheDir).filter(f => f.endsWith('.jsonl'));
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
// Silently fail if directory read fails (permissions, etc.)
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (orphanedFiles.length === 0) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
console.log(`⚠️ [Sentience] Found ${orphanedFiles.length} un-uploaded trace(s) from previous run(s)`);
|
|
101
|
+
console.log(' Attempting to upload now...');
|
|
102
|
+
for (const file of orphanedFiles) {
|
|
103
|
+
const filePath = path.join(cacheDir, file);
|
|
104
|
+
const runId = path.basename(file, '.jsonl');
|
|
105
|
+
try {
|
|
106
|
+
// Request upload URL for this orphaned trace
|
|
107
|
+
// Use a shorter timeout for orphan recovery to avoid blocking
|
|
108
|
+
const response = await Promise.race([
|
|
109
|
+
httpPost(`${apiUrl}/v1/traces/init`, { run_id: runId }, { Authorization: `Bearer ${apiKey}` }),
|
|
110
|
+
new Promise((resolve) => setTimeout(() => resolve({ status: 500, data: {} }), 5000))
|
|
111
|
+
]);
|
|
112
|
+
if (response.status === 200 && response.data.upload_url) {
|
|
113
|
+
// Create a temporary CloudTraceSink to upload this orphaned trace
|
|
114
|
+
const sink = new cloud_sink_1.CloudTraceSink(response.data.upload_url, runId);
|
|
115
|
+
await sink.close(); // This will upload the existing file
|
|
116
|
+
console.log(`✅ [Sentience] Uploaded orphaned trace: ${runId}`);
|
|
117
|
+
}
|
|
118
|
+
// Silently skip failures - don't log errors for orphan recovery
|
|
119
|
+
// These are expected in many scenarios (network issues, invalid API keys, etc.)
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
// Silently skip failures - don't log errors for orphan recovery
|
|
123
|
+
// These are expected in many scenarios (network issues, invalid API keys, etc.)
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Make HTTP/HTTPS POST request using built-in Node modules
|
|
129
|
+
*/
|
|
130
|
+
function httpPost(url, data, headers) {
|
|
131
|
+
return new Promise((resolve, reject) => {
|
|
132
|
+
const urlObj = new url_1.URL(url);
|
|
133
|
+
const protocol = urlObj.protocol === 'https:' ? https : http;
|
|
134
|
+
const body = JSON.stringify(data);
|
|
135
|
+
const options = {
|
|
136
|
+
hostname: urlObj.hostname,
|
|
137
|
+
port: urlObj.port || (urlObj.protocol === 'https:' ? 443 : 80),
|
|
138
|
+
path: urlObj.pathname + urlObj.search,
|
|
139
|
+
method: 'POST',
|
|
140
|
+
headers: {
|
|
141
|
+
'Content-Type': 'application/json',
|
|
142
|
+
'Content-Length': Buffer.byteLength(body),
|
|
143
|
+
...headers,
|
|
144
|
+
},
|
|
145
|
+
timeout: 10000, // 10 second timeout
|
|
146
|
+
};
|
|
147
|
+
const req = protocol.request(options, (res) => {
|
|
148
|
+
let responseBody = '';
|
|
149
|
+
res.on('data', (chunk) => {
|
|
150
|
+
responseBody += chunk;
|
|
151
|
+
});
|
|
152
|
+
res.on('end', () => {
|
|
153
|
+
try {
|
|
154
|
+
const parsed = responseBody ? JSON.parse(responseBody) : {};
|
|
155
|
+
resolve({ status: res.statusCode || 500, data: parsed });
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
resolve({ status: res.statusCode || 500, data: {} });
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
req.on('error', (error) => {
|
|
163
|
+
reject(error);
|
|
164
|
+
});
|
|
165
|
+
req.on('timeout', () => {
|
|
166
|
+
req.destroy();
|
|
167
|
+
reject(new Error('Request timeout'));
|
|
168
|
+
});
|
|
169
|
+
req.write(body);
|
|
170
|
+
req.end();
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Create tracer with automatic tier detection
|
|
175
|
+
*
|
|
176
|
+
* Tier Detection:
|
|
177
|
+
* - If apiKey is provided: Try to initialize CloudTraceSink (Pro/Enterprise)
|
|
178
|
+
* - If cloud init fails or no apiKey: Fall back to JsonlTraceSink (Free tier)
|
|
179
|
+
*
|
|
180
|
+
* @param options - Configuration options
|
|
181
|
+
* @param options.apiKey - Sentience API key (e.g., "sk_pro_xxxxx")
|
|
182
|
+
* @param options.runId - Unique identifier for this agent run (generates UUID if not provided)
|
|
183
|
+
* @param options.apiUrl - Sentience API base URL (default: https://api.sentienceapi.com)
|
|
184
|
+
* @returns Tracer configured with appropriate sink
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* // Pro tier user
|
|
189
|
+
* const tracer = await createTracer({ apiKey: "sk_pro_xyz", runId: "demo" });
|
|
190
|
+
* // Returns: Tracer with CloudTraceSink
|
|
191
|
+
*
|
|
192
|
+
* // Free tier user
|
|
193
|
+
* const tracer = await createTracer({ runId: "demo" });
|
|
194
|
+
* // Returns: Tracer with JsonlTraceSink (local-only)
|
|
195
|
+
*
|
|
196
|
+
* // Use with agent
|
|
197
|
+
* const agent = new SentienceAgent(browser, llm, 50, true, tracer);
|
|
198
|
+
* await agent.act("Click search");
|
|
199
|
+
* await tracer.close(); // Uploads to cloud if Pro tier
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
202
|
+
async function createTracer(options) {
|
|
203
|
+
const runId = options.runId || (0, crypto_1.randomUUID)();
|
|
204
|
+
const apiUrl = options.apiUrl || exports.SENTIENCE_API_URL;
|
|
205
|
+
// PRODUCTION FIX: Recover orphaned traces from previous crashes
|
|
206
|
+
// Note: This is skipped in test environments (see recoverOrphanedTraces function)
|
|
207
|
+
// Run in background to avoid blocking tracer creation
|
|
208
|
+
if (options.apiKey) {
|
|
209
|
+
// Don't await - run in background to avoid blocking
|
|
210
|
+
recoverOrphanedTraces(options.apiKey, apiUrl).catch(() => {
|
|
211
|
+
// Silently fail - orphan recovery should not block tracer creation
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// 1. Try to initialize Cloud Sink (Pro/Enterprise tier)
|
|
215
|
+
if (options.apiKey) {
|
|
216
|
+
try {
|
|
217
|
+
// Request pre-signed upload URL from backend
|
|
218
|
+
const response = await httpPost(`${apiUrl}/v1/traces/init`, { run_id: runId }, { Authorization: `Bearer ${options.apiKey}` });
|
|
219
|
+
if (response.status === 200 && response.data.upload_url) {
|
|
220
|
+
const uploadUrl = response.data.upload_url;
|
|
221
|
+
console.log('☁️ [Sentience] Cloud tracing enabled (Pro tier)');
|
|
222
|
+
// PRODUCTION FIX: Pass runId for persistent cache naming
|
|
223
|
+
return new tracer_1.Tracer(runId, new cloud_sink_1.CloudTraceSink(uploadUrl, runId));
|
|
224
|
+
}
|
|
225
|
+
else if (response.status === 403) {
|
|
226
|
+
console.log('⚠️ [Sentience] Cloud tracing requires Pro tier');
|
|
227
|
+
console.log(' Falling back to local-only tracing');
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
console.log(`⚠️ [Sentience] Cloud init failed: HTTP ${response.status}`);
|
|
231
|
+
console.log(' Falling back to local-only tracing');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
if (error.message?.includes('timeout')) {
|
|
236
|
+
console.log('⚠️ [Sentience] Cloud init timeout');
|
|
237
|
+
}
|
|
238
|
+
else if (error.code === 'ECONNREFUSED' || error.message?.includes('connect')) {
|
|
239
|
+
console.log('⚠️ [Sentience] Cloud init connection error');
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
console.log(`⚠️ [Sentience] Cloud init error: ${error.message}`);
|
|
243
|
+
}
|
|
244
|
+
console.log(' Falling back to local-only tracing');
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// 2. Fallback to Local Sink (Free tier / Offline mode)
|
|
248
|
+
const tracesDir = path.join(process.cwd(), 'traces');
|
|
249
|
+
// Create traces directory if it doesn't exist
|
|
250
|
+
if (!fs.existsSync(tracesDir)) {
|
|
251
|
+
fs.mkdirSync(tracesDir, { recursive: true });
|
|
252
|
+
}
|
|
253
|
+
const localPath = path.join(tracesDir, `${runId}.jsonl`);
|
|
254
|
+
console.log(`💾 [Sentience] Local tracing: ${localPath}`);
|
|
255
|
+
return new tracer_1.Tracer(runId, new jsonl_sink_1.JsonlTraceSink(localPath));
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Synchronous version of createTracer for non-async contexts
|
|
259
|
+
* Always returns local JsonlTraceSink (no cloud upload)
|
|
260
|
+
*
|
|
261
|
+
* @param runId - Unique identifier for this agent run (generates UUID if not provided)
|
|
262
|
+
* @returns Tracer with JsonlTraceSink
|
|
263
|
+
*/
|
|
264
|
+
function createLocalTracer(runId) {
|
|
265
|
+
const traceRunId = runId || (0, crypto_1.randomUUID)();
|
|
266
|
+
const tracesDir = path.join(process.cwd(), 'traces');
|
|
267
|
+
if (!fs.existsSync(tracesDir)) {
|
|
268
|
+
fs.mkdirSync(tracesDir, { recursive: true });
|
|
269
|
+
}
|
|
270
|
+
const localPath = path.join(tracesDir, `${traceRunId}.jsonl`);
|
|
271
|
+
console.log(`💾 [Sentience] Local tracing: ${localPath}`);
|
|
272
|
+
return new tracer_1.Tracer(traceRunId, new jsonl_sink_1.JsonlTraceSink(localPath));
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=tracer-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracer-factory.js","sourceRoot":"","sources":["../../src/tracing/tracer-factory.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwLH,oCAiEC;AASD,8CAYC;AA5QD,2CAA6B;AAC7B,uCAAyB;AACzB,uCAAyB;AACzB,6CAA+B;AAC/B,2CAA6B;AAC7B,6BAA0B;AAC1B,mCAAoC;AACpC,qCAAkC;AAClC,6CAA8C;AAC9C,6CAA8C;AAE9C;;GAEG;AACU,QAAA,iBAAiB,GAAG,8BAA8B,CAAC;AAEhE;;GAEG;AACH,SAAS,qBAAqB;IAC5B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,qBAAqB,CAAC,MAAc,EAAE,SAAiB,yBAAiB;IACrF,6DAA6D;IAC7D,4DAA4D;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM;QACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM;QAC/B,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS;QACxC,CAAC,OAAO,MAAM,KAAK,WAAW,IAAK,MAAc,CAAC,QAAQ,CAAC,CAAC;IAE9E,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;IAEzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,IAAI,aAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,aAAa,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4DAA4D;QAC5D,OAAO;IACT,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,aAAa,CAAC,MAAM,4CAA4C,CAAC,CAAC;IACvG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE5C,IAAI,CAAC;YACH,6CAA6C;YAC7C,8DAA8D;YAC9D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAClC,QAAQ,CACN,GAAG,MAAM,iBAAiB,EAC1B,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,CACtC;gBACD,IAAI,OAAO,CAAgC,CAAC,OAAO,EAAE,EAAE,CACrD,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAC3D;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxD,kEAAkE;gBAClE,MAAM,IAAI,GAAG,IAAI,2BAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;gBACjE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,qCAAqC;gBACzD,OAAO,CAAC,GAAG,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,gEAAgE;YAChE,gFAAgF;QAClF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,gEAAgE;YAChE,gFAAgF;QAClF,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAW,EAAE,IAAS,EAAE,OAA+B;IAIvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,SAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,IAAI,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;gBACzC,GAAG,OAAO;aACX;YACD,OAAO,EAAE,KAAK,EAAE,oBAAoB;SACrC,CAAC;QAEF,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5C,IAAI,YAAY,GAAG,EAAE,CAAC;YAEtB,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvB,YAAY,IAAI,KAAK,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5D,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACrB,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChB,GAAG,CAAC,GAAG,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACI,KAAK,UAAU,YAAY,CAAC,OAIlC;IACC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAA,mBAAU,GAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,yBAAiB,CAAC;IAEnD,gEAAgE;IAChE,kFAAkF;IAClF,sDAAsD;IACtD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,oDAAoD;QACpD,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACvD,mEAAmE;QACrE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,6CAA6C;YAC7C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAC7B,GAAG,MAAM,iBAAiB,EAC1B,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE,EAAE,CAC9C,CAAC;YAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;gBAE3C,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;gBAChE,yDAAyD;gBACzD,OAAO,IAAI,eAAM,CAAC,KAAK,EAAE,IAAI,2BAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;YACjE,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBAC/D,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,2CAA2C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,qCAAqC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAErD,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;IAE1D,OAAO,IAAI,eAAM,CAAC,KAAK,EAAE,IAAI,2BAAc,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,KAAc;IAC9C,MAAM,UAAU,GAAG,KAAK,IAAI,IAAA,mBAAU,GAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAErD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,UAAU,QAAQ,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;IAE1D,OAAO,IAAI,eAAM,CAAC,UAAU,EAAE,IAAI,2BAAc,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracer Class
|
|
3
|
+
*
|
|
4
|
+
* High-level API for emitting trace events with automatic sequencing and timestamps
|
|
5
|
+
*/
|
|
6
|
+
import { TraceSink } from './sink';
|
|
7
|
+
import { TraceEventData } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Tracer provides a high-level API for recording agent execution traces
|
|
10
|
+
*/
|
|
11
|
+
export declare class Tracer {
|
|
12
|
+
private runId;
|
|
13
|
+
private sink;
|
|
14
|
+
private seq;
|
|
15
|
+
/**
|
|
16
|
+
* Create a new Tracer
|
|
17
|
+
* @param runId - Unique run identifier (UUID)
|
|
18
|
+
* @param sink - TraceSink implementation (e.g., JsonlTraceSink)
|
|
19
|
+
*/
|
|
20
|
+
constructor(runId: string, sink: TraceSink);
|
|
21
|
+
/**
|
|
22
|
+
* Emit a trace event
|
|
23
|
+
* @param eventType - Type of event (e.g., 'run_start', 'snapshot')
|
|
24
|
+
* @param data - Event-specific payload
|
|
25
|
+
* @param stepId - Optional step UUID
|
|
26
|
+
*/
|
|
27
|
+
emit(eventType: string, data: TraceEventData, stepId?: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Emit run_start event
|
|
30
|
+
* @param agent - Agent type (e.g., 'SentienceAgent')
|
|
31
|
+
* @param llmModel - Optional LLM model name
|
|
32
|
+
* @param config - Optional configuration
|
|
33
|
+
*/
|
|
34
|
+
emitRunStart(agent: string, llmModel?: string, config?: Record<string, any>): void;
|
|
35
|
+
/**
|
|
36
|
+
* Emit step_start event
|
|
37
|
+
* @param stepId - Step UUID
|
|
38
|
+
* @param stepIndex - Step number (1-indexed)
|
|
39
|
+
* @param goal - Goal description
|
|
40
|
+
* @param attempt - Retry attempt number (0 = first try)
|
|
41
|
+
* @param preUrl - Optional URL before step execution
|
|
42
|
+
*/
|
|
43
|
+
emitStepStart(stepId: string, stepIndex: number, goal: string, attempt?: number, preUrl?: string): void;
|
|
44
|
+
/**
|
|
45
|
+
* Emit run_end event
|
|
46
|
+
* @param steps - Total number of steps executed
|
|
47
|
+
*/
|
|
48
|
+
emitRunEnd(steps: number): void;
|
|
49
|
+
/**
|
|
50
|
+
* Emit error event
|
|
51
|
+
* @param stepId - Step UUID where error occurred
|
|
52
|
+
* @param error - Error message
|
|
53
|
+
* @param attempt - Retry attempt number
|
|
54
|
+
*/
|
|
55
|
+
emitError(stepId: string, error: string, attempt?: number): void;
|
|
56
|
+
/**
|
|
57
|
+
* Close the underlying sink (flush buffered data)
|
|
58
|
+
* @param blocking - If false, upload happens in background (default: true). Only applies to CloudTraceSink.
|
|
59
|
+
*/
|
|
60
|
+
close(blocking?: boolean): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Get run ID
|
|
63
|
+
*/
|
|
64
|
+
getRunId(): string;
|
|
65
|
+
/**
|
|
66
|
+
* Get current sequence number
|
|
67
|
+
*/
|
|
68
|
+
getSeq(): number;
|
|
69
|
+
/**
|
|
70
|
+
* Get sink type (for debugging)
|
|
71
|
+
*/
|
|
72
|
+
getSinkType(): string;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=tracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/tracing/tracer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAc,cAAc,EAAE,MAAM,SAAS,CAAC;AAErD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,GAAG,CAAS;IAEpB;;;;OAIG;gBACS,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAM1C;;;;;OAKG;IACH,IAAI,CACF,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,cAAc,EACpB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAwBP;;;;;OAKG;IACH,YAAY,CACV,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,IAAI;IAQP;;;;;;;OAOG;IACH,aAAa,CACX,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAU,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI;IAeP;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI/B;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,GAAG,IAAI;IAInE;;;OAGG;IACG,KAAK,CAAC,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IASpD;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,WAAW,IAAI,MAAM;CAGtB"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tracer Class
|
|
4
|
+
*
|
|
5
|
+
* High-level API for emitting trace events with automatic sequencing and timestamps
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.Tracer = void 0;
|
|
9
|
+
/**
|
|
10
|
+
* Tracer provides a high-level API for recording agent execution traces
|
|
11
|
+
*/
|
|
12
|
+
class Tracer {
|
|
13
|
+
/**
|
|
14
|
+
* Create a new Tracer
|
|
15
|
+
* @param runId - Unique run identifier (UUID)
|
|
16
|
+
* @param sink - TraceSink implementation (e.g., JsonlTraceSink)
|
|
17
|
+
*/
|
|
18
|
+
constructor(runId, sink) {
|
|
19
|
+
this.runId = runId;
|
|
20
|
+
this.sink = sink;
|
|
21
|
+
this.seq = 0;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Emit a trace event
|
|
25
|
+
* @param eventType - Type of event (e.g., 'run_start', 'snapshot')
|
|
26
|
+
* @param data - Event-specific payload
|
|
27
|
+
* @param stepId - Optional step UUID
|
|
28
|
+
*/
|
|
29
|
+
emit(eventType, data, stepId) {
|
|
30
|
+
this.seq += 1;
|
|
31
|
+
// Generate timestamps
|
|
32
|
+
const tsMs = Date.now();
|
|
33
|
+
const ts = new Date(tsMs).toISOString();
|
|
34
|
+
const event = {
|
|
35
|
+
v: 1,
|
|
36
|
+
type: eventType,
|
|
37
|
+
ts,
|
|
38
|
+
ts_ms: tsMs,
|
|
39
|
+
run_id: this.runId,
|
|
40
|
+
seq: this.seq,
|
|
41
|
+
data,
|
|
42
|
+
};
|
|
43
|
+
if (stepId) {
|
|
44
|
+
event.step_id = stepId;
|
|
45
|
+
}
|
|
46
|
+
this.sink.emit(event);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Emit run_start event
|
|
50
|
+
* @param agent - Agent type (e.g., 'SentienceAgent')
|
|
51
|
+
* @param llmModel - Optional LLM model name
|
|
52
|
+
* @param config - Optional configuration
|
|
53
|
+
*/
|
|
54
|
+
emitRunStart(agent, llmModel, config) {
|
|
55
|
+
const data = { agent };
|
|
56
|
+
if (llmModel)
|
|
57
|
+
data.llm_model = llmModel;
|
|
58
|
+
if (config)
|
|
59
|
+
data.config = config;
|
|
60
|
+
this.emit('run_start', data);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Emit step_start event
|
|
64
|
+
* @param stepId - Step UUID
|
|
65
|
+
* @param stepIndex - Step number (1-indexed)
|
|
66
|
+
* @param goal - Goal description
|
|
67
|
+
* @param attempt - Retry attempt number (0 = first try)
|
|
68
|
+
* @param preUrl - Optional URL before step execution
|
|
69
|
+
*/
|
|
70
|
+
emitStepStart(stepId, stepIndex, goal, attempt = 0, preUrl) {
|
|
71
|
+
const data = {
|
|
72
|
+
step_id: stepId,
|
|
73
|
+
step_index: stepIndex,
|
|
74
|
+
goal,
|
|
75
|
+
attempt,
|
|
76
|
+
};
|
|
77
|
+
if (preUrl) {
|
|
78
|
+
data.url = preUrl;
|
|
79
|
+
}
|
|
80
|
+
this.emit('step_start', data, stepId);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Emit run_end event
|
|
84
|
+
* @param steps - Total number of steps executed
|
|
85
|
+
*/
|
|
86
|
+
emitRunEnd(steps) {
|
|
87
|
+
this.emit('run_end', { steps });
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Emit error event
|
|
91
|
+
* @param stepId - Step UUID where error occurred
|
|
92
|
+
* @param error - Error message
|
|
93
|
+
* @param attempt - Retry attempt number
|
|
94
|
+
*/
|
|
95
|
+
emitError(stepId, error, attempt = 0) {
|
|
96
|
+
this.emit('error', { step_id: stepId, error, attempt }, stepId);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Close the underlying sink (flush buffered data)
|
|
100
|
+
* @param blocking - If false, upload happens in background (default: true). Only applies to CloudTraceSink.
|
|
101
|
+
*/
|
|
102
|
+
async close(blocking = true) {
|
|
103
|
+
// Check if sink has a close method that accepts blocking parameter
|
|
104
|
+
if (typeof this.sink.close === 'function' && this.sink.close.length > 0) {
|
|
105
|
+
await this.sink.close(blocking);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
await this.sink.close();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get run ID
|
|
113
|
+
*/
|
|
114
|
+
getRunId() {
|
|
115
|
+
return this.runId;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get current sequence number
|
|
119
|
+
*/
|
|
120
|
+
getSeq() {
|
|
121
|
+
return this.seq;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get sink type (for debugging)
|
|
125
|
+
*/
|
|
126
|
+
getSinkType() {
|
|
127
|
+
return this.sink.getSinkType();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.Tracer = Tracer;
|
|
131
|
+
//# sourceMappingURL=tracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/tracing/tracer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracing Types
|
|
3
|
+
*
|
|
4
|
+
* Schema v1 - Compatible with Python SDK
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* TraceEvent represents a single event in an agent execution trace
|
|
8
|
+
*/
|
|
9
|
+
export interface TraceEvent {
|
|
10
|
+
/** Schema version (always 1 for now) */
|
|
11
|
+
v: number;
|
|
12
|
+
/** Event type (e.g., 'run_start', 'snapshot', 'action') */
|
|
13
|
+
type: string;
|
|
14
|
+
/** ISO 8601 timestamp */
|
|
15
|
+
ts: string;
|
|
16
|
+
/** Run UUID */
|
|
17
|
+
run_id: string;
|
|
18
|
+
/** Sequence number (monotonically increasing) */
|
|
19
|
+
seq: number;
|
|
20
|
+
/** Event-specific payload */
|
|
21
|
+
data: Record<string, any>;
|
|
22
|
+
/** Optional step UUID (for step-scoped events) */
|
|
23
|
+
step_id?: string;
|
|
24
|
+
/** Optional Unix timestamp in milliseconds */
|
|
25
|
+
ts_ms?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* TraceEventData contains common fields for event payloads
|
|
29
|
+
*/
|
|
30
|
+
export interface TraceEventData {
|
|
31
|
+
goal?: string;
|
|
32
|
+
step_index?: number;
|
|
33
|
+
attempt?: number;
|
|
34
|
+
step_id?: string;
|
|
35
|
+
url?: string;
|
|
36
|
+
elements?: Array<{
|
|
37
|
+
id: number;
|
|
38
|
+
bbox: {
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
width: number;
|
|
42
|
+
height: number;
|
|
43
|
+
};
|
|
44
|
+
role: string;
|
|
45
|
+
text?: string;
|
|
46
|
+
}>;
|
|
47
|
+
model?: string;
|
|
48
|
+
prompt_tokens?: number;
|
|
49
|
+
completion_tokens?: number;
|
|
50
|
+
response_text?: string;
|
|
51
|
+
action_type?: string;
|
|
52
|
+
element_id?: number;
|
|
53
|
+
text?: string;
|
|
54
|
+
key?: string;
|
|
55
|
+
success?: boolean;
|
|
56
|
+
error?: string;
|
|
57
|
+
agent?: string;
|
|
58
|
+
llm_model?: string;
|
|
59
|
+
config?: Record<string, any>;
|
|
60
|
+
steps?: number;
|
|
61
|
+
[key: string]: any;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tracing/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,CAAC,EAAE,MAAM,CAAC;IAEV,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IAEb,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IAEX,eAAe;IACf,MAAM,EAAE,MAAM,CAAC;IAEf,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IAEZ,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1B,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAE7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9D,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IAGH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tracing/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|