@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.
Files changed (33) hide show
  1. package/dist/commonjs/v3/test/index.d.ts +4 -0
  2. package/dist/commonjs/v3/test/index.js +12 -0
  3. package/dist/commonjs/v3/test/index.js.map +1 -0
  4. package/dist/commonjs/v3/test/mock-task-context.d.ts +105 -0
  5. package/dist/commonjs/v3/test/mock-task-context.js +179 -0
  6. package/dist/commonjs/v3/test/mock-task-context.js.map +1 -0
  7. package/dist/commonjs/v3/test/test-input-stream-manager.d.ts +46 -0
  8. package/dist/commonjs/v3/test/test-input-stream-manager.js +192 -0
  9. package/dist/commonjs/v3/test/test-input-stream-manager.js.map +1 -0
  10. package/dist/commonjs/v3/test/test-realtime-streams-manager.d.ts +40 -0
  11. package/dist/commonjs/v3/test/test-realtime-streams-manager.js +139 -0
  12. package/dist/commonjs/v3/test/test-realtime-streams-manager.js.map +1 -0
  13. package/dist/commonjs/v3/test/test-run-metadata-manager.d.ts +31 -0
  14. package/dist/commonjs/v3/test/test-run-metadata-manager.js +86 -0
  15. package/dist/commonjs/v3/test/test-run-metadata-manager.js.map +1 -0
  16. package/dist/commonjs/version.js +1 -1
  17. package/dist/esm/v3/test/index.d.ts +4 -0
  18. package/dist/esm/v3/test/index.js +5 -0
  19. package/dist/esm/v3/test/index.js.map +1 -0
  20. package/dist/esm/v3/test/mock-task-context.d.ts +105 -0
  21. package/dist/esm/v3/test/mock-task-context.js +176 -0
  22. package/dist/esm/v3/test/mock-task-context.js.map +1 -0
  23. package/dist/esm/v3/test/test-input-stream-manager.d.ts +46 -0
  24. package/dist/esm/v3/test/test-input-stream-manager.js +188 -0
  25. package/dist/esm/v3/test/test-input-stream-manager.js.map +1 -0
  26. package/dist/esm/v3/test/test-realtime-streams-manager.d.ts +40 -0
  27. package/dist/esm/v3/test/test-realtime-streams-manager.js +135 -0
  28. package/dist/esm/v3/test/test-realtime-streams-manager.js.map +1 -0
  29. package/dist/esm/v3/test/test-run-metadata-manager.d.ts +31 -0
  30. package/dist/esm/v3/test/test-run-metadata-manager.js +82 -0
  31. package/dist/esm/v3/test/test-run-metadata-manager.js.map +1 -0
  32. package/dist/esm/version.js +1 -1
  33. 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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"}
@@ -1,2 +1,2 @@
1
- export const VERSION = "0.0.0-chat-prerelease-20260417152143";
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-20260417152143",
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",