@arden-hq/loop 0.0.0-stage → 0.1.0
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 +202 -0
- package/README.md +121 -2
- package/dist/abort.d.ts +9 -0
- package/dist/abort.d.ts.map +1 -0
- package/dist/abort.js +31 -0
- package/dist/abort.js.map +1 -0
- package/dist/agent/agent.d.ts +48 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +146 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/background-tools.d.ts +51 -0
- package/dist/agent/background-tools.d.ts.map +1 -0
- package/dist/agent/background-tools.js +257 -0
- package/dist/agent/background-tools.js.map +1 -0
- package/dist/agent/budget.d.ts +5 -0
- package/dist/agent/budget.d.ts.map +1 -0
- package/dist/agent/budget.js +48 -0
- package/dist/agent/budget.js.map +1 -0
- package/dist/agent/config.d.ts +61 -0
- package/dist/agent/config.d.ts.map +1 -0
- package/dist/agent/config.js +99 -0
- package/dist/agent/config.js.map +1 -0
- package/dist/agent/guards.d.ts +10 -0
- package/dist/agent/guards.d.ts.map +1 -0
- package/dist/agent/guards.js +136 -0
- package/dist/agent/guards.js.map +1 -0
- package/dist/agent/history-journal.d.ts +18 -0
- package/dist/agent/history-journal.d.ts.map +1 -0
- package/dist/agent/history-journal.js +87 -0
- package/dist/agent/history-journal.js.map +1 -0
- package/dist/agent/history-projection.d.ts +6 -0
- package/dist/agent/history-projection.d.ts.map +1 -0
- package/dist/agent/history-projection.js +62 -0
- package/dist/agent/history-projection.js.map +1 -0
- package/dist/agent/interactions.d.ts +14 -0
- package/dist/agent/interactions.d.ts.map +1 -0
- package/dist/agent/interactions.js +85 -0
- package/dist/agent/interactions.js.map +1 -0
- package/dist/agent/middleware.d.ts +5 -0
- package/dist/agent/middleware.d.ts.map +1 -0
- package/dist/agent/middleware.js +55 -0
- package/dist/agent/middleware.js.map +1 -0
- package/dist/agent/model-output-projection.d.ts +27 -0
- package/dist/agent/model-output-projection.d.ts.map +1 -0
- package/dist/agent/model-output-projection.js +138 -0
- package/dist/agent/model-output-projection.js.map +1 -0
- package/dist/agent/model-output.d.ts +19 -0
- package/dist/agent/model-output.d.ts.map +1 -0
- package/dist/agent/model-output.js +172 -0
- package/dist/agent/model-output.js.map +1 -0
- package/dist/agent/model-turn.d.ts +29 -0
- package/dist/agent/model-turn.d.ts.map +1 -0
- package/dist/agent/model-turn.js +401 -0
- package/dist/agent/model-turn.js.map +1 -0
- package/dist/agent/policy.d.ts +28 -0
- package/dist/agent/policy.d.ts.map +1 -0
- package/dist/agent/policy.js +109 -0
- package/dist/agent/policy.js.map +1 -0
- package/dist/agent/provider-capabilities.d.ts +12 -0
- package/dist/agent/provider-capabilities.d.ts.map +1 -0
- package/dist/agent/provider-capabilities.js +76 -0
- package/dist/agent/provider-capabilities.js.map +1 -0
- package/dist/agent/recovery.d.ts +8 -0
- package/dist/agent/recovery.d.ts.map +1 -0
- package/dist/agent/recovery.js +21 -0
- package/dist/agent/recovery.js.map +1 -0
- package/dist/agent/replies.d.ts +3 -0
- package/dist/agent/replies.d.ts.map +1 -0
- package/dist/agent/replies.js +24 -0
- package/dist/agent/replies.js.map +1 -0
- package/dist/agent/run-state.d.ts +98 -0
- package/dist/agent/run-state.d.ts.map +1 -0
- package/dist/agent/run-state.js +454 -0
- package/dist/agent/run-state.js.map +1 -0
- package/dist/agent/run.d.ts +6 -0
- package/dist/agent/run.d.ts.map +1 -0
- package/dist/agent/run.js +462 -0
- package/dist/agent/run.js.map +1 -0
- package/dist/agent/streamed-call-history.d.ts +20 -0
- package/dist/agent/streamed-call-history.d.ts.map +1 -0
- package/dist/agent/streamed-call-history.js +71 -0
- package/dist/agent/streamed-call-history.js.map +1 -0
- package/dist/agent/streaming-tools.d.ts +23 -0
- package/dist/agent/streaming-tools.d.ts.map +1 -0
- package/dist/agent/streaming-tools.js +67 -0
- package/dist/agent/streaming-tools.js.map +1 -0
- package/dist/agent/structured-output.d.ts +27 -0
- package/dist/agent/structured-output.d.ts.map +1 -0
- package/dist/agent/structured-output.js +26 -0
- package/dist/agent/structured-output.js.map +1 -0
- package/dist/agent/tool-admission.d.ts +18 -0
- package/dist/agent/tool-admission.d.ts.map +1 -0
- package/dist/agent/tool-admission.js +22 -0
- package/dist/agent/tool-admission.js.map +1 -0
- package/dist/contracts/events.d.ts +236 -0
- package/dist/contracts/events.d.ts.map +1 -0
- package/dist/contracts/events.js +13 -0
- package/dist/contracts/events.js.map +1 -0
- package/dist/contracts/messages.d.ts +234 -0
- package/dist/contracts/messages.d.ts.map +1 -0
- package/dist/contracts/messages.js +11 -0
- package/dist/contracts/messages.js.map +1 -0
- package/dist/contracts/provider.d.ts +177 -0
- package/dist/contracts/provider.d.ts.map +1 -0
- package/dist/contracts/provider.js +26 -0
- package/dist/contracts/provider.js.map +1 -0
- package/dist/contracts/tools.d.ts +217 -0
- package/dist/contracts/tools.d.ts.map +1 -0
- package/dist/contracts/tools.js +16 -0
- package/dist/contracts/tools.js.map +1 -0
- package/dist/errors.d.ts +112 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +190 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/concurrency.d.ts +11 -0
- package/dist/internal/concurrency.d.ts.map +1 -0
- package/dist/internal/concurrency.js +86 -0
- package/dist/internal/concurrency.js.map +1 -0
- package/dist/internal/stream.d.ts +25 -0
- package/dist/internal/stream.d.ts.map +1 -0
- package/dist/internal/stream.js +97 -0
- package/dist/internal/stream.js.map +1 -0
- package/dist/internal/validate.d.ts +30 -0
- package/dist/internal/validate.d.ts.map +1 -0
- package/dist/internal/validate.js +480 -0
- package/dist/internal/validate.js.map +1 -0
- package/dist/providers/kit/errors.d.ts +40 -0
- package/dist/providers/kit/errors.d.ts.map +1 -0
- package/dist/providers/kit/errors.js +48 -0
- package/dist/providers/kit/errors.js.map +1 -0
- package/dist/providers/kit/index.d.ts +10 -0
- package/dist/providers/kit/index.d.ts.map +1 -0
- package/dist/providers/kit/index.js +10 -0
- package/dist/providers/kit/index.js.map +1 -0
- package/dist/providers/kit/retry.d.ts +43 -0
- package/dist/providers/kit/retry.d.ts.map +1 -0
- package/dist/providers/kit/retry.js +118 -0
- package/dist/providers/kit/retry.js.map +1 -0
- package/dist/providers/kit/sse.d.ts +22 -0
- package/dist/providers/kit/sse.d.ts.map +1 -0
- package/dist/providers/kit/sse.js +70 -0
- package/dist/providers/kit/sse.js.map +1 -0
- package/dist/providers/openai-responses/citations.d.ts +21 -0
- package/dist/providers/openai-responses/citations.d.ts.map +1 -0
- package/dist/providers/openai-responses/citations.js +65 -0
- package/dist/providers/openai-responses/citations.js.map +1 -0
- package/dist/providers/openai-responses/continuation.d.ts +19 -0
- package/dist/providers/openai-responses/continuation.d.ts.map +1 -0
- package/dist/providers/openai-responses/continuation.js +28 -0
- package/dist/providers/openai-responses/continuation.js.map +1 -0
- package/dist/providers/openai-responses/errors.d.ts +28 -0
- package/dist/providers/openai-responses/errors.d.ts.map +1 -0
- package/dist/providers/openai-responses/errors.js +103 -0
- package/dist/providers/openai-responses/errors.js.map +1 -0
- package/dist/providers/openai-responses/history.d.ts +8 -0
- package/dist/providers/openai-responses/history.d.ts.map +1 -0
- package/dist/providers/openai-responses/history.js +93 -0
- package/dist/providers/openai-responses/history.js.map +1 -0
- package/dist/providers/openai-responses/items.d.ts +106 -0
- package/dist/providers/openai-responses/items.d.ts.map +1 -0
- package/dist/providers/openai-responses/items.js +124 -0
- package/dist/providers/openai-responses/items.js.map +1 -0
- package/dist/providers/openai-responses/parameter-schema.d.ts +11 -0
- package/dist/providers/openai-responses/parameter-schema.d.ts.map +1 -0
- package/dist/providers/openai-responses/parameter-schema.js +186 -0
- package/dist/providers/openai-responses/parameter-schema.js.map +1 -0
- package/dist/providers/openai-responses/provider.d.ts +54 -0
- package/dist/providers/openai-responses/provider.d.ts.map +1 -0
- package/dist/providers/openai-responses/provider.js +270 -0
- package/dist/providers/openai-responses/provider.js.map +1 -0
- package/dist/providers/openai-responses/request.d.ts +41 -0
- package/dist/providers/openai-responses/request.d.ts.map +1 -0
- package/dist/providers/openai-responses/request.js +276 -0
- package/dist/providers/openai-responses/request.js.map +1 -0
- package/dist/providers/openai-responses/response.d.ts +7 -0
- package/dist/providers/openai-responses/response.d.ts.map +1 -0
- package/dist/providers/openai-responses/response.js +354 -0
- package/dist/providers/openai-responses/response.js.map +1 -0
- package/dist/providers/openai-responses/stored-items.d.ts +9 -0
- package/dist/providers/openai-responses/stored-items.d.ts.map +1 -0
- package/dist/providers/openai-responses/stored-items.js +133 -0
- package/dist/providers/openai-responses/stored-items.js.map +1 -0
- package/dist/providers/openai-responses/tool-search.d.ts +12 -0
- package/dist/providers/openai-responses/tool-search.d.ts.map +1 -0
- package/dist/providers/openai-responses/tool-search.js +68 -0
- package/dist/providers/openai-responses/tool-search.js.map +1 -0
- package/dist/providers/openai-responses/tools.d.ts +33 -0
- package/dist/providers/openai-responses/tools.d.ts.map +1 -0
- package/dist/providers/openai-responses/tools.js +53 -0
- package/dist/providers/openai-responses/tools.js.map +1 -0
- package/dist/providers/openai-responses/web-search.d.ts +5 -0
- package/dist/providers/openai-responses/web-search.d.ts.map +1 -0
- package/dist/providers/openai-responses/web-search.js +114 -0
- package/dist/providers/openai-responses/web-search.js.map +1 -0
- package/dist/providers/openai-responses/websocket.d.ts +29 -0
- package/dist/providers/openai-responses/websocket.d.ts.map +1 -0
- package/dist/providers/openai-responses/websocket.js +400 -0
- package/dist/providers/openai-responses/websocket.js.map +1 -0
- package/dist/tools/dispatch.d.ts +65 -0
- package/dist/tools/dispatch.d.ts.map +1 -0
- package/dist/tools/dispatch.js +536 -0
- package/dist/tools/dispatch.js.map +1 -0
- package/dist/tools/display-title.d.ts +18 -0
- package/dist/tools/display-title.d.ts.map +1 -0
- package/dist/tools/display-title.js +50 -0
- package/dist/tools/display-title.js.map +1 -0
- package/dist/tools/search.d.ts +36 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +224 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/tool.d.ts +200 -0
- package/dist/tools/tool.d.ts.map +1 -0
- package/dist/tools/tool.js +275 -0
- package/dist/tools/tool.js.map +1 -0
- package/dist/tools/truncate.d.ts +18 -0
- package/dist/tools/truncate.d.ts.map +1 -0
- package/dist/tools/truncate.js +76 -0
- package/dist/tools/truncate.js.map +1 -0
- package/package.json +67 -4
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Counting semaphore. `acquire()` resolves to a release function. */
|
|
2
|
+
export interface Semaphore {
|
|
3
|
+
readonly acquire: () => Promise<() => void>;
|
|
4
|
+
}
|
|
5
|
+
export declare const makeSemaphore: (permits: number) => Semaphore;
|
|
6
|
+
/** FIFO read/write lock. Consecutive readers share; a queued writer blocks later readers. */
|
|
7
|
+
export interface FairReadWriteLock {
|
|
8
|
+
readonly acquire: (write: boolean) => Promise<() => void>;
|
|
9
|
+
}
|
|
10
|
+
export declare const makeFairReadWriteLock: () => FairReadWriteLock;
|
|
11
|
+
//# sourceMappingURL=concurrency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../src/internal/concurrency.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;CAC5C;AAED,eAAO,MAAM,aAAa,YAAa,MAAM,KAAG,SA8B/C,CAAA;AAQD,6FAA6F;AAC7F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;CAC1D;AAED,eAAO,MAAM,qBAAqB,QAAO,iBAmDxC,CAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
export const makeSemaphore = (permits) => {
|
|
2
|
+
let available = permits;
|
|
3
|
+
const waiters = [];
|
|
4
|
+
const release = () => {
|
|
5
|
+
const next = waiters.shift();
|
|
6
|
+
if (next !== undefined)
|
|
7
|
+
next();
|
|
8
|
+
else
|
|
9
|
+
available += 1;
|
|
10
|
+
};
|
|
11
|
+
const makeReleaser = () => {
|
|
12
|
+
let released = false;
|
|
13
|
+
return () => {
|
|
14
|
+
if (released)
|
|
15
|
+
return;
|
|
16
|
+
released = true;
|
|
17
|
+
release();
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
return {
|
|
21
|
+
acquire: () => {
|
|
22
|
+
if (available > 0) {
|
|
23
|
+
available -= 1;
|
|
24
|
+
return Promise.resolve(makeReleaser());
|
|
25
|
+
}
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
waiters.push(() => resolve(makeReleaser()));
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export const makeFairReadWriteLock = () => {
|
|
33
|
+
const queue = [];
|
|
34
|
+
let readers = 0;
|
|
35
|
+
let writer = false;
|
|
36
|
+
const grant = (waiter) => {
|
|
37
|
+
if (waiter.write)
|
|
38
|
+
writer = true;
|
|
39
|
+
else
|
|
40
|
+
readers += 1;
|
|
41
|
+
waiter.grant();
|
|
42
|
+
};
|
|
43
|
+
const drain = () => {
|
|
44
|
+
if (writer)
|
|
45
|
+
return;
|
|
46
|
+
if (readers > 0) {
|
|
47
|
+
grantQueuedReaders();
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const first = queue.shift();
|
|
51
|
+
if (first === undefined)
|
|
52
|
+
return;
|
|
53
|
+
grant(first);
|
|
54
|
+
if (first.write)
|
|
55
|
+
return;
|
|
56
|
+
grantQueuedReaders();
|
|
57
|
+
};
|
|
58
|
+
const grantQueuedReaders = () => {
|
|
59
|
+
for (let next = queue[0]; next?.write === false; next = queue[0]) {
|
|
60
|
+
queue.shift();
|
|
61
|
+
grant(next);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const release = (waiter) => {
|
|
65
|
+
if (waiter.released)
|
|
66
|
+
return;
|
|
67
|
+
waiter.released = true;
|
|
68
|
+
if (waiter.write)
|
|
69
|
+
writer = false;
|
|
70
|
+
else
|
|
71
|
+
readers -= 1;
|
|
72
|
+
drain();
|
|
73
|
+
};
|
|
74
|
+
return {
|
|
75
|
+
acquire: (write) => new Promise((resolve) => {
|
|
76
|
+
const waiter = {
|
|
77
|
+
write,
|
|
78
|
+
grant: () => resolve(() => release(waiter)),
|
|
79
|
+
released: false
|
|
80
|
+
};
|
|
81
|
+
queue.push(waiter);
|
|
82
|
+
drain();
|
|
83
|
+
})
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=concurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../src/internal/concurrency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded async push-queue with waiting-consumer handoff.
|
|
3
|
+
*
|
|
4
|
+
* `push()` resolves immediately while the buffer is under its bound, otherwise
|
|
5
|
+
* suspends until the consumer pulls — real backpressure without making the loop
|
|
6
|
+
* strictly pull-driven. `fail(error)`/`end()` terminate; `abort()` rejects both
|
|
7
|
+
* waiting sides with an AbortError.
|
|
8
|
+
*/
|
|
9
|
+
export declare class EventQueue<T> {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(bound?: number);
|
|
12
|
+
push(item: T): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Non-suspending push for lossy channels (tool progress): delivers to a
|
|
15
|
+
* waiting consumer or buffers below the bound; returns false — dropping the
|
|
16
|
+
* item — when the queue is full or terminal, so a spamming producer cannot
|
|
17
|
+
* grow the buffer past its bound.
|
|
18
|
+
*/
|
|
19
|
+
tryPush(item: T): boolean;
|
|
20
|
+
next(): Promise<IteratorResult<T>>;
|
|
21
|
+
end(): void;
|
|
22
|
+
fail(error: unknown): void;
|
|
23
|
+
abort(): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/internal/stream.ts"],"names":[],"mappings":"AAcA;;;;;;;GAOG;AACH,qBAAa,UAAU,CAAC,CAAC;;IAOvB,YAAY,KAAK,GAAE,MAAsB,EAExC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAc3B;IAED;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAUxB;IAED,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAcjC;IAED,GAAG,IAAI,IAAI,CAEV;IAED,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEzB;IAED,KAAK,IAAI,IAAI,CAEZ;CAgBF"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { abortError } from "../abort.js";
|
|
2
|
+
const DEFAULT_BOUND = 256;
|
|
3
|
+
/**
|
|
4
|
+
* Bounded async push-queue with waiting-consumer handoff.
|
|
5
|
+
*
|
|
6
|
+
* `push()` resolves immediately while the buffer is under its bound, otherwise
|
|
7
|
+
* suspends until the consumer pulls — real backpressure without making the loop
|
|
8
|
+
* strictly pull-driven. `fail(error)`/`end()` terminate; `abort()` rejects both
|
|
9
|
+
* waiting sides with an AbortError.
|
|
10
|
+
*/
|
|
11
|
+
export class EventQueue {
|
|
12
|
+
#bound;
|
|
13
|
+
#buffer = [];
|
|
14
|
+
#pushers = [];
|
|
15
|
+
#takers = [];
|
|
16
|
+
#terminal = null;
|
|
17
|
+
constructor(bound = DEFAULT_BOUND) {
|
|
18
|
+
this.#bound = bound;
|
|
19
|
+
}
|
|
20
|
+
push(item) {
|
|
21
|
+
if (this.#terminal !== null) {
|
|
22
|
+
return Promise.reject("error" in this.#terminal ? this.#terminal.error : abortError());
|
|
23
|
+
}
|
|
24
|
+
const taker = this.#takers.shift();
|
|
25
|
+
if (taker !== undefined) {
|
|
26
|
+
taker.resolve({ done: false, value: item });
|
|
27
|
+
return Promise.resolve();
|
|
28
|
+
}
|
|
29
|
+
this.#buffer.push(item);
|
|
30
|
+
if (this.#buffer.length <= this.#bound)
|
|
31
|
+
return Promise.resolve();
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
this.#pushers.push({ resolve, reject });
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Non-suspending push for lossy channels (tool progress): delivers to a
|
|
38
|
+
* waiting consumer or buffers below the bound; returns false — dropping the
|
|
39
|
+
* item — when the queue is full or terminal, so a spamming producer cannot
|
|
40
|
+
* grow the buffer past its bound.
|
|
41
|
+
*/
|
|
42
|
+
tryPush(item) {
|
|
43
|
+
if (this.#terminal !== null)
|
|
44
|
+
return false;
|
|
45
|
+
const taker = this.#takers.shift();
|
|
46
|
+
if (taker !== undefined) {
|
|
47
|
+
taker.resolve({ done: false, value: item });
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
if (this.#buffer.length >= this.#bound)
|
|
51
|
+
return false;
|
|
52
|
+
this.#buffer.push(item);
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
next() {
|
|
56
|
+
const item = this.#buffer.shift();
|
|
57
|
+
if (item !== undefined) {
|
|
58
|
+
this.#pushers.shift()?.resolve();
|
|
59
|
+
return Promise.resolve({ done: false, value: item });
|
|
60
|
+
}
|
|
61
|
+
if (this.#terminal !== null) {
|
|
62
|
+
return "error" in this.#terminal
|
|
63
|
+
? Promise.reject(this.#terminal.error)
|
|
64
|
+
: Promise.resolve({ done: true, value: undefined });
|
|
65
|
+
}
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
this.#takers.push({ resolve, reject });
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
end() {
|
|
71
|
+
this.#settle({ done: true });
|
|
72
|
+
}
|
|
73
|
+
fail(error) {
|
|
74
|
+
this.#settle({ error });
|
|
75
|
+
}
|
|
76
|
+
abort() {
|
|
77
|
+
this.#settle({ error: abortError() });
|
|
78
|
+
}
|
|
79
|
+
#settle(terminal) {
|
|
80
|
+
if (this.#terminal !== null)
|
|
81
|
+
return;
|
|
82
|
+
this.#terminal = terminal;
|
|
83
|
+
for (const pusher of this.#pushers.splice(0)) {
|
|
84
|
+
pusher.reject("error" in terminal ? terminal.error : abortError());
|
|
85
|
+
}
|
|
86
|
+
if ("error" in terminal) {
|
|
87
|
+
this.#buffer.length = 0;
|
|
88
|
+
for (const taker of this.#takers.splice(0))
|
|
89
|
+
taker.reject(terminal.error);
|
|
90
|
+
}
|
|
91
|
+
else if (this.#buffer.length === 0) {
|
|
92
|
+
for (const taker of this.#takers.splice(0))
|
|
93
|
+
taker.resolve({ done: true, value: undefined });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/internal/stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ChatMessage, ProviderToolCall } from "../contracts/messages.js";
|
|
2
|
+
import type { ToolResult } from "../contracts/tools.js";
|
|
3
|
+
import { type CompletionResponse, type ProviderStreamRetry, type OutputItemReady, type ToolCallStreamDelta } from "../contracts/provider.js";
|
|
4
|
+
/**
|
|
5
|
+
* Structural validation of one chat message; throws `ProtocolContractError`
|
|
6
|
+
* whose cause names the broken field. Extension fields ride through untouched.
|
|
7
|
+
*/
|
|
8
|
+
export declare const decodeMessage: (value: unknown) => ChatMessage;
|
|
9
|
+
/** Structural history validation. Extension fields ride through untouched. */
|
|
10
|
+
export declare const decodeMessages: (value: unknown) => ReadonlyArray<ChatMessage>;
|
|
11
|
+
export type ParsedStreamItem = {
|
|
12
|
+
readonly _tag: "TextDelta";
|
|
13
|
+
readonly content: string;
|
|
14
|
+
} | {
|
|
15
|
+
readonly _tag: "ReasoningDelta";
|
|
16
|
+
readonly content: string;
|
|
17
|
+
} | {
|
|
18
|
+
readonly _tag: "ToolCallDelta";
|
|
19
|
+
readonly delta: Required<Omit<ToolCallStreamDelta, "_tag">>;
|
|
20
|
+
} | {
|
|
21
|
+
readonly _tag: "ProviderToolCall";
|
|
22
|
+
readonly call: Required<ProviderToolCall>;
|
|
23
|
+
} | OutputItemReady | ProviderStreamRetry | CompletionResponse;
|
|
24
|
+
/** Validate one provider stream item by its tag; malformed items become ModelProviderError. */
|
|
25
|
+
export declare const parseModelItem: (raw: unknown) => ParsedStreamItem;
|
|
26
|
+
/** Terminal-response validation. Ported 1:1 from the previous runtime. */
|
|
27
|
+
export declare const validateCompletion: (response: CompletionResponse) => CompletionResponse;
|
|
28
|
+
/** Fill ToolResult defaults; throws TypeError on a structurally invalid value. */
|
|
29
|
+
export declare const normalizeToolResult: (value: unknown) => Required<ToolResult>;
|
|
30
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/internal/validate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,WAAW,EAGX,gBAAgB,EAEjB,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAA;AAmKjC;;;GAGG;AACH,eAAO,MAAM,aAAa,UAAW,OAAO,KAAG,WAG9C,CAAA;AAED,8EAA8E;AAC9E,eAAO,MAAM,cAAc,UAAW,OAAO,KAAG,aAAa,CAAC,WAAW,CAGxE,CAAA;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,GAC/F;IAAE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAA;CAAE,GAChF,eAAe,GACf,mBAAmB,GACnB,kBAAkB,CAAA;AA2PtB,+FAA+F;AAC/F,eAAO,MAAM,cAAc,QAAS,OAAO,KAAG,gBAmC7C,CAAA;AAED,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,aAAc,kBAAkB,KAAG,kBAoBjE,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,UAAW,OAAO,KAAG,QAAQ,CAAC,UAAU,CAkCvE,CAAA"}
|