@tiny-fish/sdk 0.0.5 → 0.0.7
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/README.md +231 -206
- package/dist/_utils/client.d.ts +14 -9
- package/dist/_utils/client.d.ts.map +1 -1
- package/dist/_utils/client.js +93 -41
- package/dist/_utils/client.js.map +1 -1
- package/dist/agent/index.d.ts +3 -3
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +39 -65
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/types.d.ts +258 -127
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js +133 -41
- package/dist/agent/types.js.map +1 -1
- package/dist/browser/index.d.ts +16 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +29 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/types.d.ts +17 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +15 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/client.d.ts +6 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +9 -0
- package/dist/client.js.map +1 -1
- package/dist/fetch/index.d.ts +10 -0
- package/dist/fetch/index.d.ts.map +1 -0
- package/dist/fetch/index.js +37 -0
- package/dist/fetch/index.js.map +1 -0
- package/dist/fetch/types.d.ts +176 -0
- package/dist/fetch/types.d.ts.map +1 -0
- package/dist/fetch/types.js +69 -0
- package/dist/fetch/types.js.map +1 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/runs/index.d.ts +1 -1
- package/dist/runs/index.d.ts.map +1 -1
- package/dist/runs/index.js +25 -16
- package/dist/runs/index.js.map +1 -1
- package/dist/runs/types.d.ts +114 -66
- package/dist/runs/types.d.ts.map +1 -1
- package/dist/runs/types.js +48 -6
- package/dist/runs/types.js.map +1 -1
- package/dist/search/index.d.ts +10 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +29 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/types.d.ts +34 -0
- package/dist/search/types.d.ts.map +1 -0
- package/dist/search/types.js +25 -0
- package/dist/search/types.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -2
package/dist/_utils/client.js
CHANGED
|
@@ -58,53 +58,105 @@ export class BaseClient {
|
|
|
58
58
|
}
|
|
59
59
|
return nextBody;
|
|
60
60
|
}
|
|
61
|
+
_buildRequestSignal(callerSignal) {
|
|
62
|
+
const timeoutSignal = AbortSignal.timeout(this.timeout);
|
|
63
|
+
if (!callerSignal) {
|
|
64
|
+
return {
|
|
65
|
+
signal: timeoutSignal,
|
|
66
|
+
timeoutSignal,
|
|
67
|
+
cleanup: () => { },
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (typeof AbortSignal.any === "function") {
|
|
71
|
+
return {
|
|
72
|
+
signal: AbortSignal.any([callerSignal, timeoutSignal]),
|
|
73
|
+
timeoutSignal,
|
|
74
|
+
cleanup: () => { },
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const controller = new AbortController();
|
|
78
|
+
const abortFromCaller = () => controller.abort(callerSignal.reason);
|
|
79
|
+
const abortFromTimeout = () => controller.abort(timeoutSignal.reason);
|
|
80
|
+
if (callerSignal.aborted) {
|
|
81
|
+
abortFromCaller();
|
|
82
|
+
}
|
|
83
|
+
else if (timeoutSignal.aborted) {
|
|
84
|
+
abortFromTimeout();
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
callerSignal.addEventListener("abort", abortFromCaller, { once: true });
|
|
88
|
+
timeoutSignal.addEventListener("abort", abortFromTimeout, { once: true });
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
signal: controller.signal,
|
|
92
|
+
timeoutSignal,
|
|
93
|
+
cleanup: () => {
|
|
94
|
+
callerSignal.removeEventListener("abort", abortFromCaller);
|
|
95
|
+
timeoutSignal.removeEventListener("abort", abortFromTimeout);
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
61
99
|
/**
|
|
62
100
|
* Core request method with retry and error mapping.
|
|
63
101
|
* All public methods (get, post, postStream) delegate here.
|
|
64
102
|
*/
|
|
65
|
-
async _request(method, path, body) {
|
|
103
|
+
async _request(method, path, body, options) {
|
|
66
104
|
const url = `${this.baseURL}${path}`;
|
|
67
105
|
const headers = this._buildHeaders();
|
|
68
106
|
const requestBody = BaseClient._injectIntegration(body);
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (error instanceof AbortError || error instanceof SDKError) {
|
|
92
|
-
throw error;
|
|
107
|
+
// The timeout signal spans the entire retry sequence, not each individual attempt.
|
|
108
|
+
const { signal: requestSignal, timeoutSignal, cleanup, } = this._buildRequestSignal(options?.signal);
|
|
109
|
+
try {
|
|
110
|
+
return await pRetry(async () => {
|
|
111
|
+
try {
|
|
112
|
+
const response = await fetch(url, {
|
|
113
|
+
method,
|
|
114
|
+
headers,
|
|
115
|
+
body: requestBody !== undefined ? JSON.stringify(requestBody) : undefined,
|
|
116
|
+
signal: requestSignal,
|
|
117
|
+
});
|
|
118
|
+
if (response.ok) {
|
|
119
|
+
return response;
|
|
120
|
+
}
|
|
121
|
+
const sdkError = await this._makeStatusError(response);
|
|
122
|
+
// Non-retryable status codes abort immediately
|
|
123
|
+
const status = response.status;
|
|
124
|
+
if (status !== 408 && status !== 429 && status < 500) {
|
|
125
|
+
throw new AbortError(sdkError);
|
|
126
|
+
}
|
|
127
|
+
// Retryable — let p-retry handle backoff
|
|
128
|
+
throw sdkError;
|
|
93
129
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
130
|
+
catch (error) {
|
|
131
|
+
// Re-throw AbortError and SDK errors as-is
|
|
132
|
+
if (error instanceof AbortError || error instanceof SDKError) {
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
if (options?.signal?.aborted && !timeoutSignal.aborted) {
|
|
136
|
+
const reason = options.signal.reason instanceof Error
|
|
137
|
+
? options.signal.reason
|
|
138
|
+
: new DOMException("Request aborted", "AbortError");
|
|
139
|
+
throw new AbortError(reason);
|
|
140
|
+
}
|
|
141
|
+
// AbortSignal.timeout throws a DOMException with name "TimeoutError"
|
|
142
|
+
// Not retried — timeouts indicate the operation is slow, not a transient issue
|
|
143
|
+
if (timeoutSignal.aborted ||
|
|
144
|
+
(error instanceof DOMException && error.name === "TimeoutError")) {
|
|
145
|
+
throw new AbortError(new APITimeoutError(`Request timed out after ${this.timeout}ms`));
|
|
146
|
+
}
|
|
147
|
+
// Network failures (DNS, refused, etc.)
|
|
148
|
+
throw new APIConnectionError(error instanceof Error ? error.message : "Connection failed");
|
|
98
149
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
150
|
+
}, {
|
|
151
|
+
retries: this.maxRetries,
|
|
152
|
+
minTimeout: 500,
|
|
153
|
+
maxTimeout: 8_000,
|
|
154
|
+
factor: 2,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
finally {
|
|
158
|
+
cleanup();
|
|
159
|
+
}
|
|
108
160
|
}
|
|
109
161
|
/**
|
|
110
162
|
* Extracts a human-readable error message from the response body.
|
|
@@ -180,15 +232,15 @@ export class BaseClient {
|
|
|
180
232
|
const searchParams = new URLSearchParams(filtered);
|
|
181
233
|
url = `${path}?${searchParams.toString()}`;
|
|
182
234
|
}
|
|
183
|
-
const response = await this._request("GET", url);
|
|
235
|
+
const response = await this._request("GET", url, undefined, options);
|
|
184
236
|
return (await response.json());
|
|
185
237
|
}
|
|
186
238
|
async post(path, options) {
|
|
187
|
-
const response = await this._request("POST", path, options?.json);
|
|
239
|
+
const response = await this._request("POST", path, options?.json, options);
|
|
188
240
|
return (await response.json());
|
|
189
241
|
}
|
|
190
242
|
async postStream(path, options) {
|
|
191
|
-
const response = await this._request("POST", path, options?.json);
|
|
243
|
+
const response = await this._request("POST", path, options?.json, options);
|
|
192
244
|
if (!response.body) {
|
|
193
245
|
throw new SDKError("Response body is null — server did not return a stream");
|
|
194
246
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/_utils/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACN,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,QAAQ,EACR,wBAAwB,GACxB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/_utils/client.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Browser automation resource.
|
|
3
3
|
*/
|
|
4
4
|
import { APIResource } from "../_utils/resource.js";
|
|
5
|
-
import { type AgentRunAsyncResponse, type AgentRunParams, type AgentRunResponse, type AgentRunWithStreamingResponse, type StreamOptions } from "./types.js";
|
|
5
|
+
import { type AgentRequestOptions, type AgentRunAsyncResponse, type AgentRunParams, type AgentRunResponse, type AgentRunWithStreamingResponse, type StreamOptions } from "./types.js";
|
|
6
6
|
/** Async-iterable wrapper around an SSE event stream, this is what we return when they call the stream endpoint */
|
|
7
7
|
export declare class AgentStream {
|
|
8
8
|
private _generator;
|
|
@@ -19,14 +19,14 @@ export declare class AgentResource extends APIResource {
|
|
|
19
19
|
*
|
|
20
20
|
* Returns a promise that resolves with the completed agent run output.
|
|
21
21
|
*/
|
|
22
|
-
run(params: AgentRunParams): Promise<AgentRunResponse>;
|
|
22
|
+
run(params: AgentRunParams, options?: AgentRequestOptions): Promise<AgentRunResponse>;
|
|
23
23
|
/**
|
|
24
24
|
* Queue a browser automation and return immediately.
|
|
25
25
|
*
|
|
26
26
|
* Does not wait for the run to complete — returns a `run_id` straight away.
|
|
27
27
|
* Use `client.runs.get(run_id)` to poll for the result.
|
|
28
28
|
*/
|
|
29
|
-
queue(params: AgentRunParams): Promise<AgentRunAsyncResponse>;
|
|
29
|
+
queue(params: AgentRunParams, options?: AgentRequestOptions): Promise<AgentRunAsyncResponse>;
|
|
30
30
|
/**
|
|
31
31
|
* Stream live events from a browser automation run.
|
|
32
32
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,6BAA6B,EAKlC,KAAK,aAAa,EAUlB,MAAM,YAAY,CAAC;AAsBpB,mHAAmH;AACnH,qBAAa,WAAW;IACvB,OAAO,CAAC,UAAU,CAAgD;IAClE,OAAO,CAAC,UAAU,CAAyB;gBAG1C,SAAS,EAAE,cAAc,CAAC,6BAA6B,CAAC,EACxD,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC;IAMlC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,6BAA6B,CAAC;IAIvE,iEAAiE;IAC3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI5B;AAsED,kCAAkC;AAClC,qBAAa,aAAc,SAAQ,WAAW;IAC7C;;;;OAIG;IACG,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQ/F;;;;;OAKG;IACG,KAAK,CACV,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,mBAAwB,GAC/B,OAAO,CAAC,qBAAqB,CAAC;IAQjC;;;;;;;;;;;;;;;OAeG;IACG,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,CAAC;CAiBvF"}
|
package/dist/agent/index.js
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser automation resource.
|
|
3
3
|
*/
|
|
4
|
+
import { SDKError } from "../_utils/errors.js";
|
|
4
5
|
import { APIResource } from "../_utils/resource.js";
|
|
5
6
|
import { parseSSEStream } from "../_utils/sse.js";
|
|
6
|
-
import {
|
|
7
|
+
import { agentRunAsyncResponseSchema, agentRunParamsSchema, agentRunResponseSchema, completeEventSchema, heartbeatEventSchema, progressEventSchema, startedEventSchema, streamingUrlEventSchema, } from "./types.js";
|
|
7
8
|
/**
|
|
8
9
|
* Build the JSON request body from typed params.
|
|
9
10
|
* Optional fields are omitted rather than sent as undefined/null.
|
|
10
11
|
*/
|
|
11
12
|
function buildRunBody(params) {
|
|
12
|
-
const
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
const parsed = agentRunParamsSchema.safeParse(params);
|
|
14
|
+
if (!parsed.success) {
|
|
15
|
+
const issue = parsed.error.issues[0];
|
|
16
|
+
throw new SDKError(issue?.message ?? "Invalid agent request");
|
|
17
|
+
}
|
|
18
|
+
const body = { goal: parsed.data.goal, url: parsed.data.url };
|
|
19
|
+
if (parsed.data.browser_profile !== undefined)
|
|
20
|
+
body.browser_profile = parsed.data.browser_profile;
|
|
21
|
+
if (parsed.data.proxy_config !== undefined)
|
|
22
|
+
body.proxy_config = parsed.data.proxy_config;
|
|
17
23
|
return body;
|
|
18
24
|
}
|
|
19
25
|
/** Async-iterable wrapper around an SSE event stream, this is what we return when they call the stream endpoint */
|
|
@@ -33,74 +39,37 @@ export class AgentStream {
|
|
|
33
39
|
await this._rawStream.cancel();
|
|
34
40
|
}
|
|
35
41
|
}
|
|
36
|
-
const VALID_RUN_STATUSES = new Set(Object.values(RunStatus));
|
|
37
|
-
/** Check that a value is a valid RunStatus enum member. */
|
|
38
|
-
function isRunStatus(value) {
|
|
39
|
-
return typeof value === "string" && VALID_RUN_STATUSES.has(value);
|
|
40
|
-
}
|
|
41
|
-
/** Check that a value looks like a RunError (has at least a message string). */
|
|
42
|
-
function isRunError(value) {
|
|
43
|
-
return (typeof value === "object" &&
|
|
44
|
-
value !== null &&
|
|
45
|
-
typeof value["message"] === "string");
|
|
46
|
-
}
|
|
47
42
|
/** Validate raw SSE data into a typed event. Returns null for malformed or unknown events. */
|
|
48
43
|
function validateEvent(data) {
|
|
49
|
-
|
|
50
|
-
if (typeof type !== "string")
|
|
51
|
-
return null;
|
|
52
|
-
switch (type) {
|
|
44
|
+
switch (data["type"]) {
|
|
53
45
|
case "STARTED": {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
return { type: "STARTED", run_id: data["run_id"], timestamp: data["timestamp"] };
|
|
46
|
+
const result = startedEventSchema.safeParse(data);
|
|
47
|
+
return result.success ? result.data : null;
|
|
57
48
|
}
|
|
58
49
|
case "STREAMING_URL": {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
typeof data["timestamp"] !== "string")
|
|
62
|
-
return null;
|
|
63
|
-
return {
|
|
64
|
-
type: "STREAMING_URL",
|
|
65
|
-
run_id: data["run_id"],
|
|
66
|
-
streaming_url: data["streaming_url"],
|
|
67
|
-
timestamp: data["timestamp"],
|
|
68
|
-
};
|
|
50
|
+
const result = streamingUrlEventSchema.safeParse(data);
|
|
51
|
+
return result.success ? result.data : null;
|
|
69
52
|
}
|
|
70
53
|
case "PROGRESS": {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
typeof data["timestamp"] !== "string")
|
|
74
|
-
return null;
|
|
75
|
-
return {
|
|
76
|
-
type: "PROGRESS",
|
|
77
|
-
run_id: data["run_id"],
|
|
78
|
-
purpose: data["purpose"],
|
|
79
|
-
timestamp: data["timestamp"],
|
|
80
|
-
};
|
|
54
|
+
const result = progressEventSchema.safeParse(data);
|
|
55
|
+
return result.success ? result.data : null;
|
|
81
56
|
}
|
|
82
57
|
case "HEARTBEAT": {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return { type: "HEARTBEAT", timestamp: data["timestamp"] };
|
|
58
|
+
const result = heartbeatEventSchema.safeParse(data);
|
|
59
|
+
return result.success ? result.data : null;
|
|
86
60
|
}
|
|
87
61
|
case "COMPLETE": {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
typeof data["
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
type: "COMPLETE",
|
|
96
|
-
run_id: data["run_id"],
|
|
97
|
-
status: data["status"],
|
|
98
|
-
timestamp: data["timestamp"],
|
|
99
|
-
result: typeof result === "object" && result !== null
|
|
100
|
-
? result
|
|
62
|
+
const normalized = {
|
|
63
|
+
...data,
|
|
64
|
+
result: typeof data["result"] === "object" && data["result"] !== null ? data["result"] : null,
|
|
65
|
+
error: typeof data["error"] === "object" &&
|
|
66
|
+
data["error"] !== null &&
|
|
67
|
+
typeof data["error"]["message"] === "string"
|
|
68
|
+
? data["error"]
|
|
101
69
|
: null,
|
|
102
|
-
error: isRunError(error) ? error : null,
|
|
103
70
|
};
|
|
71
|
+
const result = completeEventSchema.safeParse(normalized);
|
|
72
|
+
return result.success ? result.data : null;
|
|
104
73
|
}
|
|
105
74
|
default:
|
|
106
75
|
return null;
|
|
@@ -137,10 +106,12 @@ export class AgentResource extends APIResource {
|
|
|
137
106
|
*
|
|
138
107
|
* Returns a promise that resolves with the completed agent run output.
|
|
139
108
|
*/
|
|
140
|
-
async run(params) {
|
|
141
|
-
|
|
109
|
+
async run(params, options = {}) {
|
|
110
|
+
const response = await this._client.post("/v1/automation/run", {
|
|
142
111
|
json: buildRunBody(params),
|
|
112
|
+
signal: options.signal,
|
|
143
113
|
});
|
|
114
|
+
return agentRunResponseSchema.parse(response);
|
|
144
115
|
}
|
|
145
116
|
/**
|
|
146
117
|
* Queue a browser automation and return immediately.
|
|
@@ -148,10 +119,12 @@ export class AgentResource extends APIResource {
|
|
|
148
119
|
* Does not wait for the run to complete — returns a `run_id` straight away.
|
|
149
120
|
* Use `client.runs.get(run_id)` to poll for the result.
|
|
150
121
|
*/
|
|
151
|
-
async queue(params) {
|
|
152
|
-
|
|
122
|
+
async queue(params, options = {}) {
|
|
123
|
+
const response = await this._client.post("/v1/automation/run-async", {
|
|
153
124
|
json: buildRunBody(params),
|
|
125
|
+
signal: options.signal,
|
|
154
126
|
});
|
|
127
|
+
return agentRunAsyncResponseSchema.parse(response);
|
|
155
128
|
}
|
|
156
129
|
/**
|
|
157
130
|
* Stream live events from a browser automation run.
|
|
@@ -172,6 +145,7 @@ export class AgentResource extends APIResource {
|
|
|
172
145
|
async stream(params, options = {}) {
|
|
173
146
|
const raw = await this._client.postStream("/v1/automation/run-sse", {
|
|
174
147
|
json: buildRunBody(params),
|
|
148
|
+
signal: options.signal,
|
|
175
149
|
});
|
|
176
150
|
async function* generate() {
|
|
177
151
|
for await (const data of parseSSEStream(raw)) {
|
package/dist/agent/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"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"}
|