@trigger.dev/sdk 0.0.0-prerelease-20260909071038 → 0.0.0-prerelease-20260909121655
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/ai.js +63 -42
- package/dist/commonjs/v3/ai.js.map +1 -1
- package/dist/commonjs/v3/test/mock-chat-agent.js +1 -6
- package/dist/commonjs/v3/test/mock-chat-agent.js.map +1 -1
- package/dist/commonjs/v3/transcriptStorage.d.ts +10 -15
- package/dist/commonjs/v3/transcriptStorage.js +5 -35
- package/dist/commonjs/v3/transcriptStorage.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/v3/ai.js +64 -43
- package/dist/esm/v3/ai.js.map +1 -1
- package/dist/esm/v3/test/mock-chat-agent.js +1 -6
- package/dist/esm/v3/test/mock-chat-agent.js.map +1 -1
- package/dist/esm/v3/transcriptStorage.d.ts +10 -15
- package/dist/esm/v3/transcriptStorage.js +5 -34
- package/dist/esm/v3/transcriptStorage.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +2 -2
package/dist/commonjs/v3/ai.js
CHANGED
|
@@ -888,7 +888,7 @@ async function writeChatCustomAgentClientDataErrorToStream(payload) {
|
|
|
888
888
|
}
|
|
889
889
|
}
|
|
890
890
|
async function reportChatCustomAgentClientDataError(payload, error, options) {
|
|
891
|
-
const errorText = error instanceof Error ? error.message : "An unexpected error occurred";
|
|
891
|
+
const errorText = error instanceof Error && error.message ? error.message : "An unexpected error occurred";
|
|
892
892
|
v3_1.logger.warn("chat.customAgent: clientData validation failed", {
|
|
893
893
|
chatId: payload.chatId,
|
|
894
894
|
trigger: payload.trigger,
|
|
@@ -3986,7 +3986,6 @@ function chatAgent(options) {
|
|
|
3986
3986
|
compaction: {
|
|
3987
3987
|
modelMessages: accumulatedMessages,
|
|
3988
3988
|
throughId,
|
|
3989
|
-
fingerprint: (0, transcriptStorage_js_1.prefixFingerprint)(shadow, throughId),
|
|
3990
3989
|
},
|
|
3991
3990
|
}
|
|
3992
3991
|
: {}),
|
|
@@ -5704,6 +5703,7 @@ function chatAgent(options) {
|
|
|
5704
5703
|
// The onFinish callback fires even on abort/stop, so partial responses
|
|
5705
5704
|
// from stopped generation are captured correctly.
|
|
5706
5705
|
let rawResponseMessage;
|
|
5706
|
+
let responseWasSkipped = false;
|
|
5707
5707
|
if (capturedResponseMessage) {
|
|
5708
5708
|
// Keep the raw message before cleanup for users who want custom handling
|
|
5709
5709
|
rawResponseMessage = capturedResponseMessage;
|
|
@@ -5729,50 +5729,56 @@ function chatAgent(options) {
|
|
|
5729
5729
|
};
|
|
5730
5730
|
locals_js_1.locals.set(chatResponsePartsKey, []);
|
|
5731
5731
|
}
|
|
5732
|
-
|
|
5733
|
-
|
|
5734
|
-
|
|
5735
|
-
|
|
5736
|
-
|
|
5737
|
-
|
|
5738
|
-
|
|
5739
|
-
|
|
5740
|
-
|
|
5741
|
-
|
|
5742
|
-
accumulatedUIMessages[existingIdx]
|
|
5743
|
-
}
|
|
5744
|
-
else {
|
|
5745
|
-
accumulatedUIMessages.push(capturedResponseMessage);
|
|
5746
|
-
}
|
|
5747
|
-
turnNewUIMessages.push(capturedResponseMessage);
|
|
5748
|
-
locals_js_1.locals.set(chatCurrentUIMessagesKey, accumulatedUIMessages);
|
|
5749
|
-
// Record toolCallId → head messageId so a HITL
|
|
5750
|
-
// continuation next turn can recover the head id
|
|
5751
|
-
// even if the AI SDK regenerates it. See
|
|
5752
|
-
// `chatToolCallToMessageIdKey` for the full
|
|
5753
|
-
// rationale (TRI-9137).
|
|
5754
|
-
recordToolCallIdsFromMessage(capturedResponseMessage);
|
|
5755
|
-
try {
|
|
5756
|
-
const responseModelMessages = await toModelMessages([
|
|
5757
|
-
stripProviderMetadata(capturedResponseMessage),
|
|
5758
|
-
]);
|
|
5732
|
+
const responseHasContent = capturedResponseMessage.parts.some((part) => part.type !== "step-start");
|
|
5733
|
+
if (responseHasContent) {
|
|
5734
|
+
// Tool-approval continuations: the AI SDK reuses the trailing
|
|
5735
|
+
// assistant's ID (via originalMessages) so the captured response
|
|
5736
|
+
// carries the same ID as an existing message. Replace in place
|
|
5737
|
+
// instead of pushing a duplicate. For action turns this never
|
|
5738
|
+
// matches because originalMessages is omitted (fresh ID).
|
|
5739
|
+
const existingIdx = capturedResponseMessage.id
|
|
5740
|
+
? accumulatedUIMessages.findIndex((m) => m.id === capturedResponseMessage.id)
|
|
5741
|
+
: -1;
|
|
5742
|
+
const previousAtIdx = existingIdx !== -1 ? accumulatedUIMessages[existingIdx] : undefined;
|
|
5759
5743
|
if (existingIdx !== -1) {
|
|
5760
|
-
|
|
5761
|
-
(await replaceModelRun(accumulatedMessages, previousAtIdx, capturedResponseMessage, steerTailThisTurn));
|
|
5762
|
-
if (!ok) {
|
|
5763
|
-
v3_1.logger.warn("chat.agent: replaced response not found at the model lane tail; reconverting the lane");
|
|
5764
|
-
accumulatedMessages = await toModelMessages(accumulatedUIMessages);
|
|
5765
|
-
laneCompacted = false;
|
|
5766
|
-
laneInjections = [];
|
|
5767
|
-
}
|
|
5744
|
+
accumulatedUIMessages[existingIdx] = capturedResponseMessage;
|
|
5768
5745
|
}
|
|
5769
5746
|
else {
|
|
5770
|
-
|
|
5747
|
+
accumulatedUIMessages.push(capturedResponseMessage);
|
|
5748
|
+
}
|
|
5749
|
+
turnNewUIMessages.push(capturedResponseMessage);
|
|
5750
|
+
locals_js_1.locals.set(chatCurrentUIMessagesKey, accumulatedUIMessages);
|
|
5751
|
+
// Record toolCallId → head messageId so a HITL
|
|
5752
|
+
// continuation next turn can recover the head id
|
|
5753
|
+
// even if the AI SDK regenerates it. See
|
|
5754
|
+
// `chatToolCallToMessageIdKey` for the full
|
|
5755
|
+
// rationale (TRI-9137).
|
|
5756
|
+
recordToolCallIdsFromMessage(capturedResponseMessage);
|
|
5757
|
+
try {
|
|
5758
|
+
const responseModelMessages = await toModelMessages([
|
|
5759
|
+
stripProviderMetadata(capturedResponseMessage),
|
|
5760
|
+
]);
|
|
5761
|
+
if (existingIdx !== -1) {
|
|
5762
|
+
const ok = previousAtIdx !== undefined &&
|
|
5763
|
+
(await replaceModelRun(accumulatedMessages, previousAtIdx, capturedResponseMessage, steerTailThisTurn));
|
|
5764
|
+
if (!ok) {
|
|
5765
|
+
v3_1.logger.warn("chat.agent: replaced response not found at the model lane tail; reconverting the lane");
|
|
5766
|
+
accumulatedMessages = await toModelMessages(accumulatedUIMessages);
|
|
5767
|
+
laneCompacted = false;
|
|
5768
|
+
laneInjections = [];
|
|
5769
|
+
}
|
|
5770
|
+
}
|
|
5771
|
+
else {
|
|
5772
|
+
accumulatedMessages.push(...responseModelMessages);
|
|
5773
|
+
}
|
|
5774
|
+
turnNewModelMessages.push(...responseModelMessages);
|
|
5775
|
+
}
|
|
5776
|
+
catch {
|
|
5777
|
+
// Conversion failed — skip accumulation for this turn
|
|
5771
5778
|
}
|
|
5772
|
-
turnNewModelMessages.push(...responseModelMessages);
|
|
5773
5779
|
}
|
|
5774
|
-
|
|
5775
|
-
|
|
5780
|
+
else {
|
|
5781
|
+
responseWasSkipped = true;
|
|
5776
5782
|
}
|
|
5777
5783
|
}
|
|
5778
5784
|
// If there's no captured response (manual pipe mode) but there are
|
|
@@ -5993,6 +5999,19 @@ function chatAgent(options) {
|
|
|
5993
5999
|
capturedPartialResponse = capturedResponseMessage;
|
|
5994
6000
|
turnCompleteEvent.responseMessage = capturedResponseMessage;
|
|
5995
6001
|
turnCompleteEvent.uiMessages = accumulatedUIMessages;
|
|
6002
|
+
locals_js_1.locals.set(chatCurrentUIMessagesKey, accumulatedUIMessages);
|
|
6003
|
+
}
|
|
6004
|
+
else if (responseWasSkipped) {
|
|
6005
|
+
capturedResponseMessage = {
|
|
6006
|
+
...capturedResponseMessage,
|
|
6007
|
+
parts: [...(capturedResponseMessage.parts ?? []), ...lateParts],
|
|
6008
|
+
};
|
|
6009
|
+
accumulatedUIMessages.push(capturedResponseMessage);
|
|
6010
|
+
turnNewUIMessages.push(capturedResponseMessage);
|
|
6011
|
+
capturedPartialResponse = capturedResponseMessage;
|
|
6012
|
+
turnCompleteEvent.responseMessage = capturedResponseMessage;
|
|
6013
|
+
turnCompleteEvent.uiMessages = accumulatedUIMessages;
|
|
6014
|
+
locals_js_1.locals.set(chatCurrentUIMessagesKey, accumulatedUIMessages);
|
|
5996
6015
|
}
|
|
5997
6016
|
locals_js_1.locals.set(chatResponsePartsKey, []);
|
|
5998
6017
|
}
|
|
@@ -6222,7 +6241,9 @@ function chatAgent(options) {
|
|
|
6222
6241
|
let errorTurnCompleteResult;
|
|
6223
6242
|
try {
|
|
6224
6243
|
await withChatWriter(async (writer) => {
|
|
6225
|
-
const errorText = turnError instanceof Error
|
|
6244
|
+
const errorText = turnError instanceof Error && turnError.message
|
|
6245
|
+
? turnError.message
|
|
6246
|
+
: "An unexpected error occurred";
|
|
6226
6247
|
writer.write({ type: "error", errorText });
|
|
6227
6248
|
});
|
|
6228
6249
|
// Signal turn complete so the client knows this turn is done
|