@trigger.dev/core 0.0.0-chat-prerelease-20260417152143 → 0.0.0-chat-prerelease-20260418174118
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/dist/commonjs/v3/test/index.d.ts +4 -0
- package/dist/commonjs/v3/test/index.js +12 -0
- package/dist/commonjs/v3/test/index.js.map +1 -0
- package/dist/commonjs/v3/test/mock-task-context.d.ts +105 -0
- package/dist/commonjs/v3/test/mock-task-context.js +179 -0
- package/dist/commonjs/v3/test/mock-task-context.js.map +1 -0
- package/dist/commonjs/v3/test/test-input-stream-manager.d.ts +46 -0
- package/dist/commonjs/v3/test/test-input-stream-manager.js +192 -0
- package/dist/commonjs/v3/test/test-input-stream-manager.js.map +1 -0
- package/dist/commonjs/v3/test/test-realtime-streams-manager.d.ts +40 -0
- package/dist/commonjs/v3/test/test-realtime-streams-manager.js +139 -0
- package/dist/commonjs/v3/test/test-realtime-streams-manager.js.map +1 -0
- package/dist/commonjs/v3/test/test-run-metadata-manager.d.ts +31 -0
- package/dist/commonjs/v3/test/test-run-metadata-manager.js +86 -0
- package/dist/commonjs/v3/test/test-run-metadata-manager.js.map +1 -0
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/v3/test/index.d.ts +4 -0
- package/dist/esm/v3/test/index.js +5 -0
- package/dist/esm/v3/test/index.js.map +1 -0
- package/dist/esm/v3/test/mock-task-context.d.ts +105 -0
- package/dist/esm/v3/test/mock-task-context.js +176 -0
- package/dist/esm/v3/test/mock-task-context.js.map +1 -0
- package/dist/esm/v3/test/test-input-stream-manager.d.ts +46 -0
- package/dist/esm/v3/test/test-input-stream-manager.js +188 -0
- package/dist/esm/v3/test/test-input-stream-manager.js.map +1 -0
- package/dist/esm/v3/test/test-realtime-streams-manager.d.ts +40 -0
- package/dist/esm/v3/test/test-realtime-streams-manager.js +135 -0
- package/dist/esm/v3/test/test-realtime-streams-manager.js.map +1 -0
- package/dist/esm/v3/test/test-run-metadata-manager.d.ts +31 -0
- package/dist/esm/v3/test/test-run-metadata-manager.js +82 -0
- package/dist/esm/v3/test/test-run-metadata-manager.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/package.json +16 -1
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { InputStreamOncePromise, InputStreamTimeoutError } from "../inputStreams/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* In-memory implementation of `InputStreamManager` for unit tests.
|
|
4
|
+
*
|
|
5
|
+
* Tests push data via the driver's `.send(streamId, data)` method. Any
|
|
6
|
+
* pending `.once()` waiters resolve immediately, and all `.on()` handlers
|
|
7
|
+
* fire synchronously (awaited if they return a promise).
|
|
8
|
+
*
|
|
9
|
+
* Use this alongside {@link runInMockTaskContext} — not directly.
|
|
10
|
+
*/
|
|
11
|
+
export class TestInputStreamManager {
|
|
12
|
+
handlers = new Map();
|
|
13
|
+
onceWaiters = new Map();
|
|
14
|
+
latest = new Map();
|
|
15
|
+
lastSeqNums = new Map();
|
|
16
|
+
// Buffered sends that arrived before a `.once()` waiter was registered.
|
|
17
|
+
// `.once()` semantically means "wait for NEXT value" but tests often
|
|
18
|
+
// send data before the task has had a chance to reach the wait point.
|
|
19
|
+
// Buffering closes that race so the waiter picks up the pending send.
|
|
20
|
+
pendingSends = new Map();
|
|
21
|
+
setRunId(_runId, _streamsVersion) {
|
|
22
|
+
// No-op — the test driver tracks nothing about runs
|
|
23
|
+
}
|
|
24
|
+
on(streamId, handler) {
|
|
25
|
+
if (!this.handlers.has(streamId)) {
|
|
26
|
+
this.handlers.set(streamId, new Set());
|
|
27
|
+
}
|
|
28
|
+
this.handlers.get(streamId).add(handler);
|
|
29
|
+
return {
|
|
30
|
+
off: () => {
|
|
31
|
+
this.handlers.get(streamId)?.delete(handler);
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
once(streamId, options) {
|
|
36
|
+
return new InputStreamOncePromise((resolve) => {
|
|
37
|
+
if (options?.signal?.aborted) {
|
|
38
|
+
resolve({
|
|
39
|
+
ok: false,
|
|
40
|
+
error: new InputStreamTimeoutError(streamId, options.timeoutMs ?? 0),
|
|
41
|
+
});
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// Pick up any buffered send that arrived before this waiter.
|
|
45
|
+
const buffered = this.pendingSends.get(streamId);
|
|
46
|
+
if (buffered && buffered.length > 0) {
|
|
47
|
+
const next = buffered.shift();
|
|
48
|
+
if (buffered.length === 0)
|
|
49
|
+
this.pendingSends.delete(streamId);
|
|
50
|
+
resolve({ ok: true, output: next });
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const waiter = {
|
|
54
|
+
resolve,
|
|
55
|
+
signal: options?.signal,
|
|
56
|
+
};
|
|
57
|
+
if (options?.timeoutMs !== undefined) {
|
|
58
|
+
waiter.timer = setTimeout(() => {
|
|
59
|
+
this.removeWaiter(streamId, waiter);
|
|
60
|
+
resolve({
|
|
61
|
+
ok: false,
|
|
62
|
+
error: new InputStreamTimeoutError(streamId, options.timeoutMs),
|
|
63
|
+
});
|
|
64
|
+
}, options.timeoutMs);
|
|
65
|
+
}
|
|
66
|
+
if (options?.signal) {
|
|
67
|
+
const abortHandler = () => {
|
|
68
|
+
this.removeWaiter(streamId, waiter);
|
|
69
|
+
if (waiter.timer)
|
|
70
|
+
clearTimeout(waiter.timer);
|
|
71
|
+
resolve({
|
|
72
|
+
ok: false,
|
|
73
|
+
error: new InputStreamTimeoutError(streamId, options.timeoutMs ?? 0),
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
waiter.abortHandler = abortHandler;
|
|
77
|
+
options.signal.addEventListener("abort", abortHandler, { once: true });
|
|
78
|
+
}
|
|
79
|
+
if (!this.onceWaiters.has(streamId)) {
|
|
80
|
+
this.onceWaiters.set(streamId, []);
|
|
81
|
+
}
|
|
82
|
+
this.onceWaiters.get(streamId).push(waiter);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
peek(streamId) {
|
|
86
|
+
return this.latest.get(streamId);
|
|
87
|
+
}
|
|
88
|
+
lastSeqNum(streamId) {
|
|
89
|
+
return this.lastSeqNums.get(streamId);
|
|
90
|
+
}
|
|
91
|
+
setLastSeqNum(streamId, seqNum) {
|
|
92
|
+
this.lastSeqNums.set(streamId, seqNum);
|
|
93
|
+
}
|
|
94
|
+
shiftBuffer(_streamId) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
disconnectStream(_streamId) { }
|
|
98
|
+
clearHandlers() {
|
|
99
|
+
this.handlers.clear();
|
|
100
|
+
}
|
|
101
|
+
reset() {
|
|
102
|
+
// Cancel any pending waiters to avoid dangling promises leaking between tests
|
|
103
|
+
for (const waiters of this.onceWaiters.values()) {
|
|
104
|
+
for (const w of waiters) {
|
|
105
|
+
if (w.timer)
|
|
106
|
+
clearTimeout(w.timer);
|
|
107
|
+
if (w.signal && w.abortHandler) {
|
|
108
|
+
w.signal.removeEventListener("abort", w.abortHandler);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
this.onceWaiters.clear();
|
|
113
|
+
this.handlers.clear();
|
|
114
|
+
this.latest.clear();
|
|
115
|
+
this.lastSeqNums.clear();
|
|
116
|
+
this.pendingSends.clear();
|
|
117
|
+
}
|
|
118
|
+
disconnect() {
|
|
119
|
+
this.reset();
|
|
120
|
+
}
|
|
121
|
+
connectTail(_runId, _fromSeq) { }
|
|
122
|
+
// ── Test driver API (not part of InputStreamManager interface) ──────────
|
|
123
|
+
/**
|
|
124
|
+
* Push data onto an input stream. Resolves pending `once()` waiters
|
|
125
|
+
* and fires all `on()` handlers (awaiting async handlers).
|
|
126
|
+
*/
|
|
127
|
+
async __sendFromTest(streamId, data) {
|
|
128
|
+
this.latest.set(streamId, data);
|
|
129
|
+
const waiters = this.onceWaiters.get(streamId);
|
|
130
|
+
const handlers = this.handlers.get(streamId);
|
|
131
|
+
const hasWaiters = waiters && waiters.length > 0;
|
|
132
|
+
const hasHandlers = handlers && handlers.size > 0;
|
|
133
|
+
// If nothing is listening yet, buffer so the next `.once()` call picks it up.
|
|
134
|
+
if (!hasWaiters && !hasHandlers) {
|
|
135
|
+
if (!this.pendingSends.has(streamId)) {
|
|
136
|
+
this.pendingSends.set(streamId, []);
|
|
137
|
+
}
|
|
138
|
+
this.pendingSends.get(streamId).push(data);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (hasWaiters) {
|
|
142
|
+
// Drain every pending once() waiter — this mirrors the real manager's
|
|
143
|
+
// behavior where the stream tail delivers the same record to all listeners.
|
|
144
|
+
const pending = waiters.splice(0);
|
|
145
|
+
for (const w of pending) {
|
|
146
|
+
if (w.timer)
|
|
147
|
+
clearTimeout(w.timer);
|
|
148
|
+
if (w.signal && w.abortHandler) {
|
|
149
|
+
w.signal.removeEventListener("abort", w.abortHandler);
|
|
150
|
+
}
|
|
151
|
+
w.resolve({ ok: true, output: data });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (hasHandlers) {
|
|
155
|
+
await Promise.all(Array.from(handlers).map((h) => Promise.resolve().then(() => h(data))));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Immediately resolve every pending `once()` waiter for a stream with a
|
|
160
|
+
* timeout error. Used to simulate closed streams (e.g. `exitAfterPreloadIdle`).
|
|
161
|
+
*/
|
|
162
|
+
__closeFromTest(streamId) {
|
|
163
|
+
const waiters = this.onceWaiters.get(streamId);
|
|
164
|
+
if (!waiters)
|
|
165
|
+
return;
|
|
166
|
+
const pending = waiters.splice(0);
|
|
167
|
+
for (const w of pending) {
|
|
168
|
+
if (w.timer)
|
|
169
|
+
clearTimeout(w.timer);
|
|
170
|
+
if (w.signal && w.abortHandler) {
|
|
171
|
+
w.signal.removeEventListener("abort", w.abortHandler);
|
|
172
|
+
}
|
|
173
|
+
w.resolve({
|
|
174
|
+
ok: false,
|
|
175
|
+
error: new InputStreamTimeoutError(streamId, 0),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
removeWaiter(streamId, waiter) {
|
|
180
|
+
const waiters = this.onceWaiters.get(streamId);
|
|
181
|
+
if (!waiters)
|
|
182
|
+
return;
|
|
183
|
+
const idx = waiters.indexOf(waiter);
|
|
184
|
+
if (idx >= 0)
|
|
185
|
+
waiters.splice(idx, 1);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=test-input-stream-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-input-stream-manager.js","sourceRoot":"","sources":["../../../../src/v3/test/test-input-stream-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { RealtimeStreamInstance, RealtimeStreamOperationOptions, RealtimeStreamsManager } from "../realtimeStreams/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* In-memory implementation of `RealtimeStreamsManager` for unit tests.
|
|
4
|
+
* Collects every chunk that tasks write via `pipe()` or `append()` into
|
|
5
|
+
* per-stream buffers that tests can inspect.
|
|
6
|
+
*
|
|
7
|
+
* Use this alongside {@link runInMockTaskContext} — not directly.
|
|
8
|
+
*/
|
|
9
|
+
type WriteListener = (key: string, chunk: unknown) => void;
|
|
10
|
+
export declare class TestRealtimeStreamsManager implements RealtimeStreamsManager {
|
|
11
|
+
private buffers;
|
|
12
|
+
private pipeWaits;
|
|
13
|
+
private writeListeners;
|
|
14
|
+
pipe<T>(key: string, source: AsyncIterable<T> | ReadableStream<T>, _options?: RealtimeStreamOperationOptions): RealtimeStreamInstance<T>;
|
|
15
|
+
append<TPart extends BodyInit>(key: string, part: TPart, _options?: RealtimeStreamOperationOptions): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Register a listener fired for every chunk written to any stream.
|
|
18
|
+
* Returns an unsubscribe function.
|
|
19
|
+
*
|
|
20
|
+
* Intended for test harnesses that need to react to writes synchronously
|
|
21
|
+
* (e.g. resolving a "turn complete" latch).
|
|
22
|
+
*/
|
|
23
|
+
onWrite(listener: WriteListener): () => void;
|
|
24
|
+
private notify;
|
|
25
|
+
/**
|
|
26
|
+
* Return all chunks written to the given stream key in order of write.
|
|
27
|
+
*/
|
|
28
|
+
__chunksFromTest<T = unknown>(key: string): T[];
|
|
29
|
+
/**
|
|
30
|
+
* Return all chunks across every stream, keyed by stream id.
|
|
31
|
+
*/
|
|
32
|
+
__allChunksFromTest(): Record<string, unknown[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Clear the buffer for a specific stream or all streams.
|
|
35
|
+
*/
|
|
36
|
+
__clearFromTest(key?: string): void;
|
|
37
|
+
reset(): void;
|
|
38
|
+
private getBuffer;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { createAsyncIterableStreamFromAsyncIterable, } from "../streams/asyncIterableStream.js";
|
|
2
|
+
export class TestRealtimeStreamsManager {
|
|
3
|
+
buffers = new Map();
|
|
4
|
+
pipeWaits = new Map();
|
|
5
|
+
writeListeners = new Set();
|
|
6
|
+
pipe(key, source, _options) {
|
|
7
|
+
const buffer = this.getBuffer(key);
|
|
8
|
+
const self = this;
|
|
9
|
+
// Eagerly drain the source in the background so chunks land in the
|
|
10
|
+
// buffer + notify listeners even when the caller never consumes the
|
|
11
|
+
// returned stream. This mirrors the real SDK behavior: `streams.writer`
|
|
12
|
+
// awaits `instance.wait()`, it doesn't read the returned stream.
|
|
13
|
+
//
|
|
14
|
+
// The source is read ONCE (into a chunks array) and replayed into a
|
|
15
|
+
// ReadableStream so the caller can still consume it if they want.
|
|
16
|
+
const readChunks = [];
|
|
17
|
+
let resolveDone;
|
|
18
|
+
const done = new Promise((resolve) => {
|
|
19
|
+
resolveDone = resolve;
|
|
20
|
+
});
|
|
21
|
+
(async () => {
|
|
22
|
+
try {
|
|
23
|
+
const iter = source instanceof ReadableStream
|
|
24
|
+
? (async function* () {
|
|
25
|
+
const reader = source.getReader();
|
|
26
|
+
try {
|
|
27
|
+
while (true) {
|
|
28
|
+
const { done: d, value } = await reader.read();
|
|
29
|
+
if (d)
|
|
30
|
+
return;
|
|
31
|
+
yield value;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
reader.releaseLock();
|
|
36
|
+
}
|
|
37
|
+
})()
|
|
38
|
+
: source;
|
|
39
|
+
for await (const chunk of iter) {
|
|
40
|
+
readChunks.push(chunk);
|
|
41
|
+
buffer.push(chunk);
|
|
42
|
+
self.notify(key, chunk);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Swallow — tests can inspect what made it into the buffer
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
resolveDone();
|
|
50
|
+
}
|
|
51
|
+
})();
|
|
52
|
+
const replayStream = (async function* () {
|
|
53
|
+
// Wait for all chunks to be drained, then replay from our snapshot
|
|
54
|
+
await done;
|
|
55
|
+
for (const chunk of readChunks)
|
|
56
|
+
yield chunk;
|
|
57
|
+
})();
|
|
58
|
+
const wrappedStream = createAsyncIterableStreamFromAsyncIterable(replayStream);
|
|
59
|
+
if (!this.pipeWaits.has(key))
|
|
60
|
+
this.pipeWaits.set(key, []);
|
|
61
|
+
this.pipeWaits.get(key).push(done);
|
|
62
|
+
return {
|
|
63
|
+
wait: () => done.then(() => ({})),
|
|
64
|
+
get stream() {
|
|
65
|
+
return wrappedStream;
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async append(key, part, _options) {
|
|
70
|
+
this.getBuffer(key).push(part);
|
|
71
|
+
this.notify(key, part);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Register a listener fired for every chunk written to any stream.
|
|
75
|
+
* Returns an unsubscribe function.
|
|
76
|
+
*
|
|
77
|
+
* Intended for test harnesses that need to react to writes synchronously
|
|
78
|
+
* (e.g. resolving a "turn complete" latch).
|
|
79
|
+
*/
|
|
80
|
+
onWrite(listener) {
|
|
81
|
+
this.writeListeners.add(listener);
|
|
82
|
+
return () => {
|
|
83
|
+
this.writeListeners.delete(listener);
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
notify(key, chunk) {
|
|
87
|
+
for (const listener of this.writeListeners) {
|
|
88
|
+
try {
|
|
89
|
+
listener(key, chunk);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Never let a listener error break stream writes
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ── Test driver API (not part of RealtimeStreamsManager interface) ──────
|
|
97
|
+
/**
|
|
98
|
+
* Return all chunks written to the given stream key in order of write.
|
|
99
|
+
*/
|
|
100
|
+
__chunksFromTest(key) {
|
|
101
|
+
return (this.buffers.get(key) ?? []).slice();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Return all chunks across every stream, keyed by stream id.
|
|
105
|
+
*/
|
|
106
|
+
__allChunksFromTest() {
|
|
107
|
+
const result = {};
|
|
108
|
+
for (const [key, chunks] of this.buffers.entries()) {
|
|
109
|
+
result[key] = chunks.slice();
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Clear the buffer for a specific stream or all streams.
|
|
115
|
+
*/
|
|
116
|
+
__clearFromTest(key) {
|
|
117
|
+
if (key === undefined) {
|
|
118
|
+
this.buffers.clear();
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
this.buffers.delete(key);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
reset() {
|
|
125
|
+
this.buffers.clear();
|
|
126
|
+
this.pipeWaits.clear();
|
|
127
|
+
}
|
|
128
|
+
getBuffer(key) {
|
|
129
|
+
if (!this.buffers.has(key)) {
|
|
130
|
+
this.buffers.set(key, []);
|
|
131
|
+
}
|
|
132
|
+
return this.buffers.get(key);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=test-realtime-streams-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-realtime-streams-manager.js","sourceRoot":"","sources":["../../../../src/v3/test/test-realtime-streams-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { DeserializedJson } from "../../schemas/json.js";
|
|
2
|
+
import type { AsyncIterableStream } from "../streams/asyncIterableStream.js";
|
|
3
|
+
import type { RunMetadataManager, RunMetadataUpdater } from "../runMetadata/types.js";
|
|
4
|
+
/**
|
|
5
|
+
* In-memory implementation of `RunMetadataManager` for unit tests.
|
|
6
|
+
*
|
|
7
|
+
* Just stores metadata in a Map — no API calls, no queue. Good enough
|
|
8
|
+
* for tests that read/write metadata via `runMetadata.getKey()` /
|
|
9
|
+
* `runMetadata.set()`, including the IDLE_TIMEOUT and TURN_TIMEOUT
|
|
10
|
+
* checks inside `chat.agent()`.
|
|
11
|
+
*/
|
|
12
|
+
export declare class TestRunMetadataManager implements RunMetadataManager {
|
|
13
|
+
private store;
|
|
14
|
+
enterWithMetadata(metadata: Record<string, DeserializedJson>): void;
|
|
15
|
+
current(): Record<string, DeserializedJson> | undefined;
|
|
16
|
+
getKey(key: string): DeserializedJson | undefined;
|
|
17
|
+
set(key: string, value: DeserializedJson): this;
|
|
18
|
+
del(key: string): this;
|
|
19
|
+
append(key: string, value: DeserializedJson): this;
|
|
20
|
+
remove(key: string, value: DeserializedJson): this;
|
|
21
|
+
increment(key: string, value: number): this;
|
|
22
|
+
decrement(key: string, value: number): this;
|
|
23
|
+
update(metadata: Record<string, DeserializedJson>): this;
|
|
24
|
+
flush(): Promise<void>;
|
|
25
|
+
refresh(): Promise<void>;
|
|
26
|
+
stream<T>(_key: string, value: AsyncIterable<T> | ReadableStream<T>): Promise<AsyncIterable<T>>;
|
|
27
|
+
fetchStream<T>(_key: string): Promise<AsyncIterableStream<T>>;
|
|
28
|
+
get parent(): RunMetadataUpdater;
|
|
29
|
+
get root(): RunMetadataUpdater;
|
|
30
|
+
reset(): void;
|
|
31
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory implementation of `RunMetadataManager` for unit tests.
|
|
3
|
+
*
|
|
4
|
+
* Just stores metadata in a Map — no API calls, no queue. Good enough
|
|
5
|
+
* for tests that read/write metadata via `runMetadata.getKey()` /
|
|
6
|
+
* `runMetadata.set()`, including the IDLE_TIMEOUT and TURN_TIMEOUT
|
|
7
|
+
* checks inside `chat.agent()`.
|
|
8
|
+
*/
|
|
9
|
+
export class TestRunMetadataManager {
|
|
10
|
+
store = {};
|
|
11
|
+
enterWithMetadata(metadata) {
|
|
12
|
+
this.store = { ...metadata };
|
|
13
|
+
}
|
|
14
|
+
current() {
|
|
15
|
+
return { ...this.store };
|
|
16
|
+
}
|
|
17
|
+
getKey(key) {
|
|
18
|
+
return this.store[key];
|
|
19
|
+
}
|
|
20
|
+
set(key, value) {
|
|
21
|
+
this.store[key] = value;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
del(key) {
|
|
25
|
+
delete this.store[key];
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
append(key, value) {
|
|
29
|
+
const existing = this.store[key];
|
|
30
|
+
if (Array.isArray(existing)) {
|
|
31
|
+
existing.push(value);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.store[key] = [value];
|
|
35
|
+
}
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
remove(key, value) {
|
|
39
|
+
const existing = this.store[key];
|
|
40
|
+
if (Array.isArray(existing)) {
|
|
41
|
+
this.store[key] = existing.filter((v) => v !== value);
|
|
42
|
+
}
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
increment(key, value) {
|
|
46
|
+
const existing = this.store[key];
|
|
47
|
+
const current = typeof existing === "number" ? existing : 0;
|
|
48
|
+
this.store[key] = current + value;
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
decrement(key, value) {
|
|
52
|
+
return this.increment(key, -value);
|
|
53
|
+
}
|
|
54
|
+
update(metadata) {
|
|
55
|
+
this.store = { ...metadata };
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
async flush() { }
|
|
59
|
+
async refresh() { }
|
|
60
|
+
async stream(_key, value) {
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
async fetchStream(_key) {
|
|
64
|
+
// Return an empty async iterable — tests can override if needed
|
|
65
|
+
const empty = {
|
|
66
|
+
[Symbol.asyncIterator]: () => ({
|
|
67
|
+
next: () => Promise.resolve({ done: true, value: undefined }),
|
|
68
|
+
}),
|
|
69
|
+
};
|
|
70
|
+
return empty;
|
|
71
|
+
}
|
|
72
|
+
get parent() {
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
get root() {
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
reset() {
|
|
79
|
+
this.store = {};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=test-run-metadata-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-run-metadata-manager.js","sourceRoot":"","sources":["../../../../src/v3/test/test-run-metadata-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = "0.0.0-chat-prerelease-
|
|
1
|
+
export const VERSION = "0.0.0-chat-prerelease-20260418174118";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trigger.dev/core",
|
|
3
|
-
"version": "0.0.0-chat-prerelease-
|
|
3
|
+
"version": "0.0.0-chat-prerelease-20260418174118",
|
|
4
4
|
"description": "Core code used across the Trigger.dev SDK and platform",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
"./v3/utils/retries": "./src/v3/utils/retries.ts",
|
|
43
43
|
"./v3/utils/structuredLogger": "./src/v3/utils/structuredLogger.ts",
|
|
44
44
|
"./v3/chat-client": "./src/v3/chat-client.ts",
|
|
45
|
+
"./v3/test": "./src/v3/test/index.ts",
|
|
45
46
|
"./v3/zodfetch": "./src/v3/zodfetch.ts",
|
|
46
47
|
"./v3/zodMessageHandler": "./src/v3/zodMessageHandler.ts",
|
|
47
48
|
"./v3/zodNamespace": "./src/v3/zodNamespace.ts",
|
|
@@ -153,6 +154,9 @@
|
|
|
153
154
|
],
|
|
154
155
|
"v3/isomorphic": [
|
|
155
156
|
"dist/commonjs/v3/isomorphic/index.d.ts"
|
|
157
|
+
],
|
|
158
|
+
"v3/test": [
|
|
159
|
+
"dist/commonjs/v3/test/index.d.ts"
|
|
156
160
|
]
|
|
157
161
|
}
|
|
158
162
|
},
|
|
@@ -447,6 +451,17 @@
|
|
|
447
451
|
"default": "./dist/commonjs/v3/chat-client.js"
|
|
448
452
|
}
|
|
449
453
|
},
|
|
454
|
+
"./v3/test": {
|
|
455
|
+
"import": {
|
|
456
|
+
"@triggerdotdev/source": "./src/v3/test/index.ts",
|
|
457
|
+
"types": "./dist/esm/v3/test/index.d.ts",
|
|
458
|
+
"default": "./dist/esm/v3/test/index.js"
|
|
459
|
+
},
|
|
460
|
+
"require": {
|
|
461
|
+
"types": "./dist/commonjs/v3/test/index.d.ts",
|
|
462
|
+
"default": "./dist/commonjs/v3/test/index.js"
|
|
463
|
+
}
|
|
464
|
+
},
|
|
450
465
|
"./v3/zodfetch": {
|
|
451
466
|
"import": {
|
|
452
467
|
"@triggerdotdev/source": "./src/v3/zodfetch.ts",
|