@dex-ai/sdk 0.1.30
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 +308 -0
- package/dist/agent.d.ts +181 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +41 -0
- package/dist/agent.js.map +1 -0
- package/dist/context.d.ts +68 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +8 -0
- package/dist/context.js.map +1 -0
- package/dist/create-agent.d.ts +7 -0
- package/dist/create-agent.d.ts.map +1 -0
- package/dist/create-agent.js +205 -0
- package/dist/create-agent.js.map +1 -0
- package/dist/extension.d.ts +162 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +20 -0
- package/dist/extension.js.map +1 -0
- package/dist/generate.d.ts +10 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +839 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/message.d.ts +89 -0
- package/dist/message.d.ts.map +1 -0
- package/dist/message.js +17 -0
- package/dist/message.js.map +1 -0
- package/dist/messages.d.ts +98 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +339 -0
- package/dist/messages.js.map +1 -0
- package/dist/model.d.ts +39 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +11 -0
- package/dist/model.js.map +1 -0
- package/dist/provider.d.ts +157 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +39 -0
- package/dist/provider.js.map +1 -0
- package/dist/resolve-schema.d.ts +44 -0
- package/dist/resolve-schema.d.ts.map +1 -0
- package/dist/resolve-schema.js +367 -0
- package/dist/resolve-schema.js.map +1 -0
- package/dist/schema.d.ts +80 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +90 -0
- package/dist/schema.js.map +1 -0
- package/dist/tool-dispatch.d.ts +24 -0
- package/dist/tool-dispatch.d.ts.map +1 -0
- package/dist/tool-dispatch.js +120 -0
- package/dist/tool-dispatch.js.map +1 -0
- package/dist/tool-result-cache.d.ts +43 -0
- package/dist/tool-result-cache.d.ts.map +1 -0
- package/dist/tool-result-cache.js +118 -0
- package/dist/tool-result-cache.js.map +1 -0
- package/dist/tool.d.ts +96 -0
- package/dist/tool.d.ts.map +1 -0
- package/dist/tool.js +29 -0
- package/dist/tool.js.map +1 -0
- package/dist/util.d.ts +26 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +104 -0
- package/dist/util.js.map +1 -0
- package/package.json +41 -0
- package/src/agent.ts +235 -0
- package/src/context.ts +82 -0
- package/src/create-agent.ts +237 -0
- package/src/extension.ts +244 -0
- package/src/generate.ts +943 -0
- package/src/index.ts +113 -0
- package/src/message.ts +114 -0
- package/src/messages.test.ts +299 -0
- package/src/messages.ts +423 -0
- package/src/model.ts +43 -0
- package/src/provider.ts +187 -0
- package/src/resolve-schema.test.ts +351 -0
- package/src/resolve-schema.ts +426 -0
- package/src/schema.ts +131 -0
- package/src/tool-dispatch.ts +166 -0
- package/src/tool-result-cache.test.ts +182 -0
- package/src/tool-result-cache.ts +164 -0
- package/src/tool.ts +110 -0
- package/src/util.ts +110 -0
package/src/util.ts
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/** Small helpers used across the agent loop. */
|
|
2
|
+
|
|
3
|
+
import type { StandardSchemaV1 } from "./index";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Format an error with full stack trace for troubleshooting.
|
|
7
|
+
* Handles nested errors, non-Error throws, and provider metadata.
|
|
8
|
+
*/
|
|
9
|
+
export function formatError(err: unknown): string {
|
|
10
|
+
if (!(err instanceof Error)) {
|
|
11
|
+
return `Non-Error thrown: ${JSON.stringify(err)}`;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const parts: string[] = [];
|
|
15
|
+
parts.push(`${err.name}: ${err.message}`);
|
|
16
|
+
|
|
17
|
+
// Include stack trace
|
|
18
|
+
if (err.stack) {
|
|
19
|
+
// Strip the first line (it's the message, already shown)
|
|
20
|
+
const stackLines = err.stack.split("\n").slice(1);
|
|
21
|
+
if (stackLines.length > 0) {
|
|
22
|
+
parts.push(stackLines.slice(0, 15).join("\n"));
|
|
23
|
+
if (stackLines.length > 15) {
|
|
24
|
+
parts.push(` ... ${stackLines.length - 15} more frames`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Provider-specific metadata (e.g. HTTP status, response body)
|
|
30
|
+
const meta = (err as any).status ?? (err as any).statusCode;
|
|
31
|
+
if (meta) parts.push(` HTTP status: ${meta}`);
|
|
32
|
+
const code = (err as any).code;
|
|
33
|
+
if (code) parts.push(` code: ${code}`);
|
|
34
|
+
const type = (err as any).type;
|
|
35
|
+
if (type) parts.push(` type: ${type}`);
|
|
36
|
+
|
|
37
|
+
// Nested cause (Error.cause)
|
|
38
|
+
if ((err as any).cause) {
|
|
39
|
+
parts.push(` caused by: ${formatError((err as any).cause)}`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return parts.join("\n");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Validate a value against a Standard Schema. Returns either { value } or { issues }. */
|
|
46
|
+
export async function validateWithSchema<I, O>(
|
|
47
|
+
schema: StandardSchemaV1<I, O>,
|
|
48
|
+
value: unknown,
|
|
49
|
+
) {
|
|
50
|
+
const res = await schema["~standard"].validate(value);
|
|
51
|
+
return res;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Merge two optional AbortSignals into one AbortController.signal. */
|
|
55
|
+
export function mergeSignals(
|
|
56
|
+
a?: AbortSignal,
|
|
57
|
+
b?: AbortSignal,
|
|
58
|
+
): { signal: AbortSignal; dispose: () => void } {
|
|
59
|
+
const ctrl = new AbortController();
|
|
60
|
+
const relay = (reason: unknown) => ctrl.abort(reason);
|
|
61
|
+
const la = a && (() => relay(a!.reason));
|
|
62
|
+
const lb = b && (() => relay(b!.reason));
|
|
63
|
+
if (a?.aborted) ctrl.abort(a.reason);
|
|
64
|
+
else if (b?.aborted) ctrl.abort(b.reason);
|
|
65
|
+
if (la) a!.addEventListener("abort", la, { once: true });
|
|
66
|
+
if (lb) b!.addEventListener("abort", lb, { once: true });
|
|
67
|
+
const dispose = () => {
|
|
68
|
+
if (la) a!.removeEventListener("abort", la);
|
|
69
|
+
if (lb) b!.removeEventListener("abort", lb);
|
|
70
|
+
};
|
|
71
|
+
return { signal: ctrl.signal, dispose };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** A queue-backed push channel that becomes an AsyncIterable. Used to fan out StreamParts to callers. */
|
|
75
|
+
export class PushStream<T> implements AsyncIterable<T> {
|
|
76
|
+
private buffer: T[] = [];
|
|
77
|
+
private resolvers: Array<(r: IteratorResult<T>) => void> = [];
|
|
78
|
+
private closed = false;
|
|
79
|
+
private failure: unknown = null;
|
|
80
|
+
|
|
81
|
+
push(v: T) {
|
|
82
|
+
if (this.closed) return;
|
|
83
|
+
const r = this.resolvers.shift();
|
|
84
|
+
if (r) r({ value: v, done: false });
|
|
85
|
+
else this.buffer.push(v);
|
|
86
|
+
}
|
|
87
|
+
close() {
|
|
88
|
+
this.closed = true;
|
|
89
|
+
while (this.resolvers.length)
|
|
90
|
+
this.resolvers.shift()!({ value: undefined as any, done: true });
|
|
91
|
+
}
|
|
92
|
+
fail(err: unknown) {
|
|
93
|
+
this.failure = err;
|
|
94
|
+
this.close();
|
|
95
|
+
}
|
|
96
|
+
[Symbol.asyncIterator](): AsyncIterator<T> {
|
|
97
|
+
return {
|
|
98
|
+
next: () => {
|
|
99
|
+
if (this.buffer.length)
|
|
100
|
+
return Promise.resolve({ value: this.buffer.shift()!, done: false });
|
|
101
|
+
if (this.failure) return Promise.reject(this.failure);
|
|
102
|
+
if (this.closed)
|
|
103
|
+
return Promise.resolve({ value: undefined as any, done: true });
|
|
104
|
+
return new Promise<IteratorResult<T>>((resolve) =>
|
|
105
|
+
this.resolvers.push(resolve),
|
|
106
|
+
);
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|