@trigger.dev/sdk 0.0.0-prerelease-20260909071038 → 0.0.0-prerelease-streamfix-20260909094302

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 (142) hide show
  1. package/dist/commonjs/imports/ai-runtime-cjs.cjs.map +1 -1
  2. package/dist/commonjs/imports/ai-runtime.js +0 -2
  3. package/dist/commonjs/v3/ai-shared.d.ts +0 -15
  4. package/dist/commonjs/v3/ai-shared.js +1 -35
  5. package/dist/commonjs/v3/ai-shared.js.map +1 -1
  6. package/dist/commonjs/v3/ai.d.ts +25 -275
  7. package/dist/commonjs/v3/ai.js +308 -1283
  8. package/dist/commonjs/v3/ai.js.map +1 -1
  9. package/dist/commonjs/v3/chat-client.d.ts +2 -11
  10. package/dist/commonjs/v3/chat-client.js +111 -227
  11. package/dist/commonjs/v3/chat-client.js.map +1 -1
  12. package/dist/commonjs/v3/chat-react.d.ts +0 -88
  13. package/dist/commonjs/v3/chat-react.js +1 -130
  14. package/dist/commonjs/v3/chat-react.js.map +1 -1
  15. package/dist/commonjs/v3/chat-server.d.ts +6 -42
  16. package/dist/commonjs/v3/chat-server.js +7 -52
  17. package/dist/commonjs/v3/chat-server.js.map +1 -1
  18. package/dist/commonjs/v3/chat.d.ts +10 -92
  19. package/dist/commonjs/v3/chat.js +73 -328
  20. package/dist/commonjs/v3/chat.js.map +1 -1
  21. package/dist/commonjs/v3/sessions.d.ts +2 -15
  22. package/dist/commonjs/v3/sessions.js +1 -12
  23. package/dist/commonjs/v3/sessions.js.map +1 -1
  24. package/dist/commonjs/v3/shared.js +36 -30
  25. package/dist/commonjs/v3/shared.js.map +1 -1
  26. package/dist/commonjs/v3/test/index.d.ts +0 -1
  27. package/dist/commonjs/v3/test/index.js +1 -3
  28. package/dist/commonjs/v3/test/index.js.map +1 -1
  29. package/dist/commonjs/v3/test/mock-chat-agent.d.ts +4 -47
  30. package/dist/commonjs/v3/test/mock-chat-agent.js +4 -115
  31. package/dist/commonjs/v3/test/mock-chat-agent.js.map +1 -1
  32. package/dist/commonjs/v3/test/test-session-handle.js +0 -6
  33. package/dist/commonjs/v3/test/test-session-handle.js.map +1 -1
  34. package/dist/commonjs/version.js +1 -1
  35. package/dist/esm/imports/ai-runtime.d.ts +2 -2
  36. package/dist/esm/imports/ai-runtime.js +2 -2
  37. package/dist/esm/imports/ai-runtime.js.map +1 -1
  38. package/dist/esm/v3/ai-shared.d.ts +0 -15
  39. package/dist/esm/v3/ai-shared.js +0 -33
  40. package/dist/esm/v3/ai-shared.js.map +1 -1
  41. package/dist/esm/v3/ai.d.ts +25 -275
  42. package/dist/esm/v3/ai.js +305 -1275
  43. package/dist/esm/v3/ai.js.map +1 -1
  44. package/dist/esm/v3/chat-client.d.ts +2 -11
  45. package/dist/esm/v3/chat-client.js +112 -228
  46. package/dist/esm/v3/chat-client.js.map +1 -1
  47. package/dist/esm/v3/chat-react.d.ts +0 -88
  48. package/dist/esm/v3/chat-react.js +1 -127
  49. package/dist/esm/v3/chat-react.js.map +1 -1
  50. package/dist/esm/v3/chat-server.d.ts +6 -42
  51. package/dist/esm/v3/chat-server.js +8 -53
  52. package/dist/esm/v3/chat-server.js.map +1 -1
  53. package/dist/esm/v3/chat.d.ts +10 -92
  54. package/dist/esm/v3/chat.js +74 -329
  55. package/dist/esm/v3/chat.js.map +1 -1
  56. package/dist/esm/v3/sessions.d.ts +2 -15
  57. package/dist/esm/v3/sessions.js +1 -11
  58. package/dist/esm/v3/sessions.js.map +1 -1
  59. package/dist/esm/v3/shared.js +23 -17
  60. package/dist/esm/v3/shared.js.map +1 -1
  61. package/dist/esm/v3/test/index.d.ts +0 -1
  62. package/dist/esm/v3/test/index.js +0 -1
  63. package/dist/esm/v3/test/index.js.map +1 -1
  64. package/dist/esm/v3/test/mock-chat-agent.d.ts +4 -47
  65. package/dist/esm/v3/test/mock-chat-agent.js +6 -117
  66. package/dist/esm/v3/test/mock-chat-agent.js.map +1 -1
  67. package/dist/esm/v3/test/test-session-handle.js +0 -6
  68. package/dist/esm/v3/test/test-session-handle.js.map +1 -1
  69. package/dist/esm/version.js +1 -1
  70. package/docs/ai-chat/actions.mdx +23 -55
  71. package/docs/ai-chat/anatomy.mdx +3 -3
  72. package/docs/ai-chat/backend.mdx +48 -125
  73. package/docs/ai-chat/background-injection.mdx +19 -69
  74. package/docs/ai-chat/client-protocol.mdx +4 -5
  75. package/docs/ai-chat/compaction.mdx +7 -13
  76. package/docs/ai-chat/custom-agents.mdx +0 -23
  77. package/docs/ai-chat/fast-starts.mdx +20 -27
  78. package/docs/ai-chat/frontend.mdx +14 -19
  79. package/docs/ai-chat/lifecycle-hooks.mdx +2 -6
  80. package/docs/ai-chat/migrating-from-a-route-handler.mdx +14 -16
  81. package/docs/ai-chat/patterns/database-persistence.mdx +2 -6
  82. package/docs/ai-chat/patterns/persistence-and-replay.mdx +23 -34
  83. package/docs/ai-chat/patterns/skills.mdx +10 -7
  84. package/docs/ai-chat/patterns/version-upgrades.mdx +6 -79
  85. package/docs/ai-chat/pending-messages.mdx +3 -3
  86. package/docs/ai-chat/prompt-caching.mdx +25 -23
  87. package/docs/ai-chat/quick-start.mdx +11 -11
  88. package/docs/ai-chat/reference.mdx +9 -67
  89. package/docs/ai-chat/sessions.mdx +1 -6
  90. package/docs/ai-chat/testing.mdx +1 -2
  91. package/docs/ai-chat/tools.mdx +13 -18
  92. package/docs/ai-chat/upgrade-guide.mdx +2 -2
  93. package/docs/apikeys.mdx +45 -27
  94. package/docs/config/extensions/syncEnvVars.mdx +0 -6
  95. package/docs/deploy-environment-variables.mdx +2 -23
  96. package/docs/deployment/overview.mdx +8 -4
  97. package/docs/deployment/preview-branches.mdx +4 -4
  98. package/docs/deployment/version-skew-protection.mdx +0 -62
  99. package/docs/manual-setup.mdx +7 -7
  100. package/docs/mcp-tools.mdx +0 -9
  101. package/docs/quick-start.mdx +3 -3
  102. package/docs/realtime/auth.mdx +1 -1
  103. package/docs/self-hosting/security.mdx +0 -5
  104. package/docs/tasks/scheduled.mdx +0 -24
  105. package/docs/triggering.mdx +1 -1
  106. package/package.json +4 -4
  107. package/skills/trigger-authoring-chat-agent/SKILL.md +29 -41
  108. package/skills/trigger-chat-agent-advanced/SKILL.md +12 -31
  109. package/dist/commonjs/v3/chatSnapshotIo.d.ts +0 -2
  110. package/dist/commonjs/v3/chatSnapshotIo.js +0 -174
  111. package/dist/commonjs/v3/chatSnapshotIo.js.map +0 -1
  112. package/dist/commonjs/v3/chatVersionSkew.d.ts +0 -12
  113. package/dist/commonjs/v3/chatVersionSkew.js +0 -30
  114. package/dist/commonjs/v3/chatVersionSkew.js.map +0 -1
  115. package/dist/commonjs/v3/externalDeploymentId.d.ts +0 -23
  116. package/dist/commonjs/v3/externalDeploymentId.js +0 -43
  117. package/dist/commonjs/v3/externalDeploymentId.js.map +0 -1
  118. package/dist/commonjs/v3/test/transcript-storage-tests.d.ts +0 -40
  119. package/dist/commonjs/v3/test/transcript-storage-tests.js +0 -258
  120. package/dist/commonjs/v3/test/transcript-storage-tests.js.map +0 -1
  121. package/dist/commonjs/v3/transcriptStorage.d.ts +0 -229
  122. package/dist/commonjs/v3/transcriptStorage.js +0 -321
  123. package/dist/commonjs/v3/transcriptStorage.js.map +0 -1
  124. package/dist/esm/v3/chatSnapshotIo.d.ts +0 -2
  125. package/dist/esm/v3/chatSnapshotIo.js +0 -166
  126. package/dist/esm/v3/chatSnapshotIo.js.map +0 -1
  127. package/dist/esm/v3/chatVersionSkew.d.ts +0 -12
  128. package/dist/esm/v3/chatVersionSkew.js +0 -27
  129. package/dist/esm/v3/chatVersionSkew.js.map +0 -1
  130. package/dist/esm/v3/externalDeploymentId.d.ts +0 -23
  131. package/dist/esm/v3/externalDeploymentId.js +0 -38
  132. package/dist/esm/v3/externalDeploymentId.js.map +0 -1
  133. package/dist/esm/v3/test/transcript-storage-tests.d.ts +0 -40
  134. package/dist/esm/v3/test/transcript-storage-tests.js +0 -255
  135. package/dist/esm/v3/test/transcript-storage-tests.js.map +0 -1
  136. package/dist/esm/v3/transcriptStorage.d.ts +0 -229
  137. package/dist/esm/v3/transcriptStorage.js +0 -309
  138. package/dist/esm/v3/transcriptStorage.js.map +0 -1
  139. package/docs/ai-chat/patterns/native-compaction.mdx +0 -310
  140. package/docs/ai-chat/transcript-storage.mdx +0 -233
  141. package/docs/reports.mdx +0 -157
  142. package/docs/troubleshooting-zod.mdx +0 -158
@@ -1,174 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.__setReadChatSnapshotImplForTests = __setReadChatSnapshotImplForTests;
4
- exports.__setWriteChatSnapshotImplForTests = __setWriteChatSnapshotImplForTests;
5
- exports.readChatSnapshot = readChatSnapshot;
6
- exports.writeChatSnapshot = writeChatSnapshot;
7
- exports.__readChatSnapshotProductionPathForTests = __readChatSnapshotProductionPathForTests;
8
- exports.__writeChatSnapshotProductionPathForTests = __writeChatSnapshotProductionPathForTests;
9
- const v3_1 = require("@trigger.dev/core/v3");
10
- let readChatSnapshotImpl;
11
- function __setReadChatSnapshotImplForTests(impl) {
12
- readChatSnapshotImpl = impl;
13
- }
14
- let writeChatSnapshotImpl;
15
- function __setWriteChatSnapshotImplForTests(impl) {
16
- writeChatSnapshotImpl = impl;
17
- }
18
- /**
19
- * Read the persisted snapshot for a session, in the version 2 shape
20
- * whatever version was stored. Returns `undefined` on:
21
- * - missing object (404 from the presigned GET: fresh session, never persisted)
22
- * - presign failure (network/auth issue)
23
- * - malformed JSON
24
- * - a version this runtime does not know
25
- *
26
- * Always swallows errors via `logger.warn`. The agent boot loop must stay
27
- * available even if S3 hiccups; the worst case is replaying more of
28
- * `session.out` than strictly necessary.
29
- * @internal
30
- */
31
- async function readChatSnapshot(sessionId) {
32
- if (readChatSnapshotImpl) {
33
- const seeded = await readChatSnapshotImpl(sessionId);
34
- return seeded === undefined || seeded === null
35
- ? undefined
36
- : (0, v3_1.parseTranscriptSnapshot)(seeded);
37
- }
38
- const apiClient = v3_1.apiClientManager.clientOrThrow();
39
- let presignedUrl;
40
- try {
41
- const resp = await apiClient.getChatSnapshotUrl(sessionId);
42
- presignedUrl = resp.presignedUrl;
43
- }
44
- catch (error) {
45
- v3_1.logger.warn("chat.agent: snapshot presign (read) failed; continuing without snapshot", {
46
- error: error instanceof Error ? error.message : String(error),
47
- sessionId,
48
- });
49
- return undefined;
50
- }
51
- let response;
52
- try {
53
- response = await fetch(presignedUrl, { method: "GET" });
54
- }
55
- catch (error) {
56
- v3_1.logger.warn("chat.agent: snapshot fetch failed; continuing without snapshot", {
57
- error: error instanceof Error ? error.message : String(error),
58
- sessionId,
59
- });
60
- return undefined;
61
- }
62
- if (response.status === 404) {
63
- return undefined;
64
- }
65
- if (!response.ok) {
66
- v3_1.logger.warn("chat.agent: snapshot fetch returned non-OK; continuing without snapshot", {
67
- status: response.status,
68
- sessionId,
69
- });
70
- return undefined;
71
- }
72
- let parsed;
73
- try {
74
- parsed = await response.json();
75
- }
76
- catch (error) {
77
- v3_1.logger.warn("chat.agent: snapshot JSON parse failed; continuing without snapshot", {
78
- error: error instanceof Error ? error.message : String(error),
79
- sessionId,
80
- });
81
- return undefined;
82
- }
83
- const snapshot = (0, v3_1.parseTranscriptSnapshot)(parsed);
84
- if (!snapshot) {
85
- v3_1.logger.warn("chat.agent: snapshot version/shape mismatch; ignoring", {
86
- version: parsed?.version,
87
- sessionId,
88
- });
89
- return undefined;
90
- }
91
- return snapshot;
92
- }
93
- /**
94
- * Persist the snapshot for a session. Awaited by callers immediately after
95
- * `onTurnComplete`: the agent may suspend right after this point, and
96
- * fire-and-forget promises don't reliably complete on suspend.
97
- *
98
- * Errors are swallowed via `logger.warn`. A failed write means the next
99
- * boot replays slightly more of `session.out` (back to the previous
100
- * snapshot's cursor) instead of failing.
101
- * @internal
102
- */
103
- async function writeChatSnapshot(sessionId, snapshot) {
104
- if (writeChatSnapshotImpl) {
105
- await writeChatSnapshotImpl(sessionId, snapshot);
106
- return;
107
- }
108
- const apiClient = v3_1.apiClientManager.clientOrThrow();
109
- let presignedUrl;
110
- try {
111
- const resp = await apiClient.createChatSnapshotUploadUrl(sessionId);
112
- presignedUrl = resp.presignedUrl;
113
- }
114
- catch (error) {
115
- v3_1.logger.warn("chat.agent: snapshot presign (write) failed; next run will replay further", {
116
- error: error instanceof Error ? error.message : String(error),
117
- sessionId,
118
- });
119
- return;
120
- }
121
- let response;
122
- try {
123
- response = await fetch(presignedUrl, {
124
- method: "PUT",
125
- headers: { "content-type": "application/json" },
126
- body: JSON.stringify(snapshot),
127
- });
128
- }
129
- catch (error) {
130
- v3_1.logger.warn("chat.agent: snapshot upload failed; next run will replay further", {
131
- error: error instanceof Error ? error.message : String(error),
132
- sessionId,
133
- });
134
- return;
135
- }
136
- if (!response.ok) {
137
- v3_1.logger.warn("chat.agent: snapshot upload returned non-OK; next run will replay further", {
138
- status: response.status,
139
- sessionId,
140
- });
141
- }
142
- }
143
- /**
144
- * Test-only entry point that bypasses `__setReadChatSnapshotImplForTests`
145
- * and reaches the real presign + `fetch` + parse path, so tests can drive
146
- * the production code by mocking global `fetch` and the api client.
147
- * @internal
148
- */
149
- async function __readChatSnapshotProductionPathForTests(sessionId) {
150
- const saved = readChatSnapshotImpl;
151
- readChatSnapshotImpl = undefined;
152
- try {
153
- return await readChatSnapshot(sessionId);
154
- }
155
- finally {
156
- readChatSnapshotImpl = saved;
157
- }
158
- }
159
- /**
160
- * Test-only entry point that bypasses `__setWriteChatSnapshotImplForTests`
161
- * and reaches the real presign + `fetch` PUT path.
162
- * @internal
163
- */
164
- async function __writeChatSnapshotProductionPathForTests(sessionId, snapshot) {
165
- const saved = writeChatSnapshotImpl;
166
- writeChatSnapshotImpl = undefined;
167
- try {
168
- await writeChatSnapshot(sessionId, snapshot);
169
- }
170
- finally {
171
- writeChatSnapshotImpl = saved;
172
- }
173
- }
174
- //# sourceMappingURL=chatSnapshotIo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chatSnapshotIo.js","sourceRoot":"","sources":["../../../src/v3/chatSnapshotIo.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- export type ChatVersionSkewPolicy = "follow" | "hold";
2
- export type SessionVersionPin = {
3
- externalDeploymentId?: string | null;
4
- lockToVersion?: string;
5
- };
6
- export type ResolvePinToFollowOptions = {
7
- policy: ChatVersionSkewPolicy | undefined;
8
- deployedExternalId: string | undefined;
9
- upgradeAlreadyRequested: boolean;
10
- readPin: () => Promise<SessionVersionPin | undefined>;
11
- };
12
- export declare function resolvePinToFollow(options: ResolvePinToFollowOptions): Promise<string | undefined>;
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolvePinToFollow = resolvePinToFollow;
4
- const v3_1 = require("@trigger.dev/core/v3");
5
- async function resolvePinToFollow(options) {
6
- if (options.policy === "hold") {
7
- return undefined;
8
- }
9
- if (options.upgradeAlreadyRequested) {
10
- return undefined;
11
- }
12
- if (!options.deployedExternalId) {
13
- return undefined;
14
- }
15
- const [error, pin] = await (0, v3_1.tryCatch)(options.readPin());
16
- if (error || !pin) {
17
- return undefined;
18
- }
19
- if (!pin.externalDeploymentId) {
20
- return undefined;
21
- }
22
- if (pin.lockToVersion) {
23
- return undefined;
24
- }
25
- if (pin.externalDeploymentId === options.deployedExternalId) {
26
- return undefined;
27
- }
28
- return pin.externalDeploymentId;
29
- }
30
- //# sourceMappingURL=chatVersionSkew.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chatVersionSkew.js","sourceRoot":"","sources":["../../../src/v3/chatVersionSkew.ts"],"names":[],"mappings":";;;AAAA,6CAAgD;AAgBzC,KAAK,6BACV,OAAkC;IAElC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,MAAM,IAAA,aAAQ,EAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEvD,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,GAAG,CAAC,oBAAoB,KAAK,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC,oBAAoB,CAAC;AAClC,CAAC"}
@@ -1,23 +0,0 @@
1
- import { type SessionTriggerConfig } from "@trigger.dev/core/v3";
2
- /** Reads an env var unless the scope opted out of ambient context (`inheritContext: false`). */
3
- export declare function scopedEnvVar(name: string): string | undefined;
4
- /**
5
- * Precedence: an explicit value, the client config, `TRIGGER_EXTERNAL_DEPLOYMENT_ID`, then
6
- * platform/CI commit vars when automatic skew protection is on. `null` is an explicit opt-out.
7
- */
8
- export declare function resolveTriggerExternalDeploymentId(explicit?: string | null): string | undefined;
9
- /** A session trigger config as callers write it: the pin is optional, and `null` opts out. */
10
- type TriggerConfigInput = Omit<SessionTriggerConfig, "externalDeploymentId"> & {
11
- externalDeploymentId?: string | null;
12
- };
13
- /**
14
- * Fill in `triggerConfig.externalDeploymentId` on an outgoing session-create body, at each point
15
- * one leaves the SDK. Discovery has to happen here rather than server-side: the commit SHA lives
16
- * in the calling application's runtime, so the caller's build is what selects the agent version.
17
- */
18
- export declare function withResolvedExternalDeploymentId<TBody extends {
19
- triggerConfig: TriggerConfigInput;
20
- }>(body: TBody): TBody & {
21
- triggerConfig: SessionTriggerConfig;
22
- };
23
- export {};
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.scopedEnvVar = scopedEnvVar;
4
- exports.resolveTriggerExternalDeploymentId = resolveTriggerExternalDeploymentId;
5
- exports.withResolvedExternalDeploymentId = withResolvedExternalDeploymentId;
6
- const v3_1 = require("@trigger.dev/core/v3");
7
- /** Reads an env var unless the scope opted out of ambient context (`inheritContext: false`). */
8
- function scopedEnvVar(name) {
9
- const scope = v3_1.sdkScope.getStore();
10
- if (scope && !scope.inheritContext)
11
- return undefined;
12
- return (0, v3_1.getEnvVar)(name);
13
- }
14
- /**
15
- * Precedence: an explicit value, the client config, `TRIGGER_EXTERNAL_DEPLOYMENT_ID`, then
16
- * platform/CI commit vars when automatic skew protection is on. `null` is an explicit opt-out.
17
- */
18
- function resolveTriggerExternalDeploymentId(explicit) {
19
- if (explicit === null)
20
- return undefined;
21
- return (0, v3_1.resolveExternalDeploymentId)({
22
- explicit,
23
- clientConfig: v3_1.apiClientManager.externalDeploymentId,
24
- read: scopedEnvVar,
25
- });
26
- }
27
- /**
28
- * Fill in `triggerConfig.externalDeploymentId` on an outgoing session-create body, at each point
29
- * one leaves the SDK. Discovery has to happen here rather than server-side: the commit SHA lives
30
- * in the calling application's runtime, so the caller's build is what selects the agent version.
31
- */
32
- function withResolvedExternalDeploymentId(body) {
33
- const resolved = resolveTriggerExternalDeploymentId(body.triggerConfig.externalDeploymentId);
34
- const { externalDeploymentId: _omit, ...rest } = body.triggerConfig;
35
- return {
36
- ...body,
37
- triggerConfig: {
38
- ...rest,
39
- ...(resolved ? { externalDeploymentId: resolved } : {}),
40
- },
41
- };
42
- }
43
- //# sourceMappingURL=externalDeploymentId.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"externalDeploymentId.js","sourceRoot":"","sources":["../../../src/v3/externalDeploymentId.ts"],"names":[],"mappings":";;;;;AAAA,6CAM8B;AAE9B,gGAAgG;AAChG,sBAA6B,IAAY;IACvC,MAAM,KAAK,GAAG,aAAQ,CAAC,QAAQ,EAAE,CAAC;IAClC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,cAAc;QAAE,OAAO,SAAS,CAAC;IACrD,OAAO,IAAA,cAAS,EAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,4CAAmD,QAAwB;IACzE,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAExC,OAAO,IAAA,gCAA2B,EAAC;QACjC,QAAQ;QACR,YAAY,EAAE,qBAAgB,CAAC,oBAAoB;QACnD,IAAI,EAAE,YAAY;KACnB,CAAC,CAAC;AACL,CAAC;AAOD;;;;GAIG;AACH,0CAEE,IAAW;IACX,MAAM,QAAQ,GAAG,kCAAkC,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC7F,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;IAEpE,OAAO;QACL,GAAG,IAAI;QACP,aAAa,EAAE;YACb,GAAG,IAAI;YACP,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD;KACF,CAAC;AACJ,CAAC"}
@@ -1,40 +0,0 @@
1
- import { type TranscriptStorage } from "../transcriptStorage.js";
2
- type TestApi = {
3
- describe: (name: string, fn: () => void) => void;
4
- it: (name: string, fn: () => Promise<void> | void) => void;
5
- expect: (actual: unknown) => {
6
- toEqual: (expected: unknown) => void;
7
- toBeNull: () => void;
8
- toBeUndefined: () => void;
9
- toBe: (expected: unknown) => void;
10
- toHaveLength: (length: number) => void;
11
- };
12
- };
13
- export type TranscriptStorageTestOptions = {
14
- /**
15
- * The test framework's `describe`, `it` and `expect`. Defaults to the
16
- * globals a vitest or jest run with `globals: true` provides.
17
- */
18
- api?: TestApi;
19
- /**
20
- * A chat id the storage accepts. Each test appends a suffix so tests do
21
- * not see each other's rows. Defaults to `"transcript-conformance"`.
22
- */
23
- chatId?: string;
24
- /** The `clientData` the storage expects in every scope and context. */
25
- clientData?: unknown;
26
- };
27
- /**
28
- * The contract every `TranscriptStorage` has to meet, as a test suite. Point
29
- * it at a factory for your storage and run it under vitest or jest:
30
- *
31
- * ```ts
32
- * import { runTranscriptStorageTests } from "@trigger.dev/sdk/ai/test";
33
- * runTranscriptStorageTests(() => myTranscriptStorage(testDatabaseUrl));
34
- * ```
35
- *
36
- * The factory runs once per test. Return a fresh, empty storage, or one
37
- * whose chats are isolated by the `chatId` option.
38
- */
39
- export declare function runTranscriptStorageTests<TClientData = unknown>(makeStorage: () => TranscriptStorage<TClientData> | Promise<TranscriptStorage<TClientData>>, options?: TranscriptStorageTestOptions): void;
40
- export {};
@@ -1,258 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runTranscriptStorageTests = runTranscriptStorageTests;
4
- const transcriptStorage_js_1 = require("../transcriptStorage.js");
5
- function message(id, text, role = "user") {
6
- return { id, role, parts: [{ type: "text", text }] };
7
- }
8
- /**
9
- * The contract every `TranscriptStorage` has to meet, as a test suite. Point
10
- * it at a factory for your storage and run it under vitest or jest:
11
- *
12
- * ```ts
13
- * import { runTranscriptStorageTests } from "@trigger.dev/sdk/ai/test";
14
- * runTranscriptStorageTests(() => myTranscriptStorage(testDatabaseUrl));
15
- * ```
16
- *
17
- * The factory runs once per test. Return a fresh, empty storage, or one
18
- * whose chats are isolated by the `chatId` option.
19
- */
20
- function runTranscriptStorageTests(makeStorage, options = {}) {
21
- const globals = globalThis;
22
- const api = options.api ?? {
23
- describe: globals.describe,
24
- it: globals.it,
25
- expect: globals.expect,
26
- };
27
- if (!api.describe || !api.it || !api.expect) {
28
- throw new Error("runTranscriptStorageTests: no test API found. Enable `globals: true` in your test " +
29
- "config or pass `{ api: { describe, it, expect } }`.");
30
- }
31
- const { describe, it, expect } = api;
32
- const baseChatId = options.chatId ?? "transcript-conformance";
33
- const clientData = options.clientData;
34
- const ctx = (chatId, turn = 0) => ({
35
- chatId,
36
- clientData,
37
- turn,
38
- trigger: "submit-message",
39
- runId: "run_conformance",
40
- ctx: {},
41
- });
42
- const scope = (chatId) => ({ chatId, clientData });
43
- const ids = (messages) => messages.map((m) => m.id);
44
- const expected = new WeakMap();
45
- const save = async (storage, context, changeset) => {
46
- let perChat = expected.get(storage);
47
- if (!perChat) {
48
- perChat = new Map();
49
- expected.set(storage, perChat);
50
- }
51
- const transcript = (0, transcriptStorage_js_1.reduceTranscriptChanges)(perChat.get(context.chatId) ?? (0, transcriptStorage_js_1.emptyTranscriptState)(), changeset.changes);
52
- perChat.set(context.chatId, transcript);
53
- await storage.save(context, { ...changeset, transcript });
54
- };
55
- describe("TranscriptStorage conformance", () => {
56
- it("loads an unknown chat as an empty transcript", async () => {
57
- const storage = await makeStorage();
58
- const loaded = await storage.load(scope(`${baseChatId}-empty`));
59
- expect(loaded.messages).toEqual([]);
60
- expect(loaded.state).toBeNull();
61
- expect(loaded.nextCursor).toBeUndefined();
62
- });
63
- it("appends puts in changeset order and replaces a known id in place", async () => {
64
- const storage = await makeStorage();
65
- const chatId = `${baseChatId}-put`;
66
- await save(storage, ctx(chatId), {
67
- reason: "turn-complete",
68
- changes: [
69
- { op: "put", message: message("u1", "one") },
70
- { op: "put", message: message("a1", "two", "assistant") },
71
- { op: "put", message: message("u2", "three") },
72
- ],
73
- });
74
- await save(storage, ctx(chatId, 1), {
75
- reason: "turn-complete",
76
- changes: [{ op: "put", message: message("a1", "two, edited", "assistant") }],
77
- });
78
- const loaded = await storage.load(scope(chatId));
79
- expect(ids(loaded.messages)).toEqual(["u1", "a1", "u2"]);
80
- expect(loaded.messages[1]).toEqual(message("a1", "two, edited", "assistant"));
81
- });
82
- it("removes by id and ignores an unknown id", async () => {
83
- const storage = await makeStorage();
84
- const chatId = `${baseChatId}-remove`;
85
- await save(storage, ctx(chatId), {
86
- reason: "turn-complete",
87
- changes: [
88
- { op: "put", message: message("u1", "one") },
89
- { op: "put", message: message("a1", "two", "assistant") },
90
- { op: "put", message: message("u2", "three") },
91
- ],
92
- });
93
- await save(storage, ctx(chatId, 1), {
94
- reason: "action",
95
- changes: [
96
- { op: "remove", id: "a1" },
97
- { op: "remove", id: "never-existed" },
98
- ],
99
- });
100
- expect(ids((await storage.load(scope(chatId))).messages)).toEqual(["u1", "u2"]);
101
- });
102
- it("truncates after an id and ignores an unknown id", async () => {
103
- const storage = await makeStorage();
104
- const chatId = `${baseChatId}-truncate`;
105
- await save(storage, ctx(chatId), {
106
- reason: "turn-complete",
107
- changes: ["u1", "a1", "u2", "a2"].map((id) => ({
108
- op: "put",
109
- message: message(id, id),
110
- })),
111
- });
112
- await save(storage, ctx(chatId, 1), {
113
- reason: "action",
114
- changes: [{ op: "truncateAfter", afterId: "never-existed" }],
115
- });
116
- expect((await storage.load(scope(chatId))).messages).toHaveLength(4);
117
- await save(storage, ctx(chatId, 1), {
118
- reason: "action",
119
- changes: [{ op: "truncateAfter", afterId: "a1" }],
120
- });
121
- expect(ids((await storage.load(scope(chatId))).messages)).toEqual(["u1", "a1"]);
122
- });
123
- it("appends after a truncate at the end of the transcript", async () => {
124
- const storage = await makeStorage();
125
- const chatId = `${baseChatId}-truncate-append`;
126
- await save(storage, ctx(chatId), {
127
- reason: "turn-complete",
128
- changes: ["u1", "a1", "u2", "a2"].map((id) => ({
129
- op: "put",
130
- message: message(id, id),
131
- })),
132
- });
133
- await save(storage, ctx(chatId, 1), {
134
- reason: "action",
135
- changes: [
136
- { op: "truncateAfter", afterId: "u2" },
137
- { op: "put", message: message("a2b", "regenerated", "assistant") },
138
- ],
139
- });
140
- expect(ids((await storage.load(scope(chatId))).messages)).toEqual(["u1", "a1", "u2", "a2b"]);
141
- });
142
- it("round-trips state and clears it with null", async () => {
143
- const storage = await makeStorage();
144
- const chatId = `${baseChatId}-state`;
145
- await save(storage, ctx(chatId), {
146
- reason: "turn-complete",
147
- changes: [
148
- { op: "put", message: message("u1", "one") },
149
- { op: "state", value: { v: 1, summary: "so far" } },
150
- ],
151
- });
152
- expect((await storage.load(scope(chatId))).state).toEqual({ v: 1, summary: "so far" });
153
- await save(storage, ctx(chatId, 1), {
154
- reason: "turn-complete",
155
- changes: [{ op: "put", message: message("u2", "two") }],
156
- });
157
- expect((await storage.load(scope(chatId))).state).toEqual({ v: 1, summary: "so far" });
158
- await save(storage, ctx(chatId, 2), {
159
- reason: "action",
160
- changes: [{ op: "state", value: null }],
161
- });
162
- expect((await storage.load(scope(chatId))).state).toBeNull();
163
- });
164
- it("keeps the latest cursors it was given", async () => {
165
- const storage = await makeStorage();
166
- const chatId = `${baseChatId}-cursors`;
167
- await save(storage, ctx(chatId), {
168
- reason: "turn-complete",
169
- changes: [{ op: "put", message: message("u1", "one") }],
170
- cursors: { lastOutEventId: "10", lastInEventId: "2" },
171
- });
172
- await save(storage, ctx(chatId, 1), {
173
- reason: "turn-complete",
174
- changes: [{ op: "put", message: message("u2", "two") }],
175
- cursors: { lastOutEventId: "20", lastInEventId: "4" },
176
- });
177
- const loaded = await storage.load(scope(chatId));
178
- expect(loaded.cursors?.lastOutEventId).toBe("20");
179
- expect(loaded.cursors?.lastInEventId).toBe("4");
180
- });
181
- it("keeps a partial answer's non-final status when the storage reports it", async () => {
182
- const storage = await makeStorage();
183
- const chatId = `${baseChatId}-final`;
184
- await save(storage, ctx(chatId), {
185
- reason: "turn-error",
186
- changes: [
187
- { op: "put", message: message("u1", "one") },
188
- { op: "put", message: message("a1", "partial", "assistant"), final: false },
189
- ],
190
- });
191
- const partial = await storage.load(scope(chatId));
192
- if (partial.nonFinalIds !== undefined) {
193
- expect(partial.nonFinalIds).toEqual(["a1"]);
194
- }
195
- await save(storage, ctx(chatId, 1), {
196
- reason: "turn-complete",
197
- changes: [{ op: "put", message: message("a1", "the finished answer", "assistant") }],
198
- });
199
- const finalized = await storage.load(scope(chatId));
200
- expect(ids(finalized.messages)).toEqual(["u1", "a1"]);
201
- if (finalized.nonFinalIds !== undefined) {
202
- expect(finalized.nonFinalIds).toEqual([]);
203
- }
204
- });
205
- it("converges when the same changeset is saved twice", async () => {
206
- const storage = await makeStorage();
207
- const chatId = `${baseChatId}-replay`;
208
- const changeset = {
209
- reason: "turn-complete",
210
- changes: [
211
- { op: "put", message: message("u1", "one") },
212
- { op: "put", message: message("a1", "two", "assistant") },
213
- { op: "state", value: { v: 1 } },
214
- ],
215
- cursors: { lastOutEventId: "7" },
216
- };
217
- await save(storage, ctx(chatId), changeset);
218
- await save(storage, ctx(chatId), changeset);
219
- const loaded = await storage.load(scope(chatId));
220
- expect(ids(loaded.messages)).toEqual(["u1", "a1"]);
221
- expect(loaded.state).toEqual({ v: 1 });
222
- });
223
- it("pages from the most recent message backwards with limit and before", async () => {
224
- const storage = await makeStorage();
225
- const chatId = `${baseChatId}-paging`;
226
- await save(storage, ctx(chatId), {
227
- reason: "turn-complete",
228
- changes: ["m1", "m2", "m3", "m4", "m5"].map((id) => ({
229
- op: "put",
230
- message: message(id, id),
231
- })),
232
- });
233
- const last = await storage.load(scope(chatId), { limit: 2 });
234
- expect(ids(last.messages)).toEqual(["m4", "m5"]);
235
- expect(last.nextCursor).toBe("m4");
236
- const middle = await storage.load(scope(chatId), { limit: 2, before: last.nextCursor });
237
- expect(ids(middle.messages)).toEqual(["m2", "m3"]);
238
- expect(middle.nextCursor).toBe("m2");
239
- const first = await storage.load(scope(chatId), { limit: 2, before: middle.nextCursor });
240
- expect(ids(first.messages)).toEqual(["m1"]);
241
- expect(first.nextCursor).toBeUndefined();
242
- });
243
- it("keeps chats apart", async () => {
244
- const storage = await makeStorage();
245
- await save(storage, ctx(`${baseChatId}-a`), {
246
- reason: "turn-complete",
247
- changes: [{ op: "put", message: message("u1", "in a") }],
248
- });
249
- await save(storage, ctx(`${baseChatId}-b`), {
250
- reason: "turn-complete",
251
- changes: [{ op: "put", message: message("u1", "in b") }],
252
- });
253
- expect((await storage.load(scope(`${baseChatId}-a`))).messages[0]).toEqual(message("u1", "in a"));
254
- expect((await storage.load(scope(`${baseChatId}-b`))).messages[0]).toEqual(message("u1", "in b"));
255
- });
256
- });
257
- }
258
- //# sourceMappingURL=transcript-storage-tests.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcript-storage-tests.js","sourceRoot":"","sources":["../../../../src/v3/test/transcript-storage-tests.ts"],"names":[],"mappings":"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"}