veryfront 0.1.1013 → 0.1.1014
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/esm/deno.js +1 -1
- package/esm/src/agent/hosted/chat-execution-runtime.d.ts.map +1 -1
- package/esm/src/agent/hosted/chat-execution-runtime.js +4 -6
- package/esm/src/agent/hosted/context-budget-manager.d.ts +3 -0
- package/esm/src/agent/hosted/context-budget-manager.d.ts.map +1 -1
- package/esm/src/agent/hosted/context-budget-manager.js +10 -2
- package/esm/src/agent/hosted/durable-chat-run-start.d.ts +3 -0
- package/esm/src/agent/hosted/durable-chat-run-start.d.ts.map +1 -1
- package/esm/src/agent/hosted/durable-chat-run-start.js +6 -1
- package/esm/src/agent/hosted/stream-terminal-error.d.ts.map +1 -1
- package/esm/src/agent/hosted/stream-terminal-error.js +1 -0
- package/esm/src/chat/message-prep.d.ts +18 -0
- package/esm/src/chat/message-prep.d.ts.map +1 -1
- package/esm/src/chat/message-prep.js +352 -2
- package/esm/src/chat/stream-watchdog.d.ts +1 -0
- package/esm/src/chat/stream-watchdog.d.ts.map +1 -1
- package/esm/src/chat/stream-watchdog.js +7 -0
- package/esm/src/server/handlers/dev/framework-candidates.generated.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/framework-candidates.generated.js +3 -2
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
package/esm/deno.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-execution-runtime.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/chat-execution-runtime.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAC9F,OAAO,EAGL,KAAK,+CAA+C,EACpD,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAOlC,OAAO,KAAK,EACV,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,EAE9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EACL,KAAK,oCAAoC,EAK1C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACrC,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EACL,wBAAwB,EAEzB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-execution-runtime.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/chat-execution-runtime.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAC9F,OAAO,EAGL,KAAK,+CAA+C,EACpD,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAOlC,OAAO,KAAK,EACV,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,EAE9B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EACL,KAAK,oCAAoC,EAK1C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACrC,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EACL,wBAAwB,EAEzB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,qCAAqC,CAAC;AAC/F,YAAY,EAAE,mCAAmC,EAAE,MAAM,qCAAqC,CAAC;AAQ/F,6DAA6D;AAC7D,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,aAAa,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;IAClE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,oEAAoE;AACpE,MAAM,WAAW,gCAAgC;IAC/C,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACrE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACrE;AAED,6CAA6C;AAC7C,MAAM,WAAW,6BAA6B;IAC5C,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED,0EAA0E;AAC1E,MAAM,MAAM,qCAAqC,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEhG,uEAAuE;AACvE,MAAM,WAAW,mCAAmC;IAClD,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,gBAAgB,EAAE,mCAAmC,CAAC;IACtD,kBAAkB,EAAE,qCAAqC,CAAC;IAC1D,YAAY,EAAE,6BAA6B,CAAC;IAC5C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,sBAAsB,CAAC;CAChD;AAED,wEAAwE;AACxE,MAAM,WAAW,8CAA8C;IAC7D,KAAK,EAAE,sBAAsB,CAAC;IAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,gBAAgB,EAAE,mCAAmC,CAAC;IACtD,aAAa,EAAE,4BAA4B,CAAC,UAAU,CAAC,CAAC;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7D,wBAAwB,CAAC,EAAE,MAAM,qCAAqC,CAAC;IACvE,kCAAkC,CAAC,EAAE,MAAM,CAAC;IAC5C,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,8DAA8D;AAC9D,MAAM,WAAW,qCAAqC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,aAAa,EAAE,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,6BAA6B,CAAC;IAC1C,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,mCAAmC,CAAC;IAC/C,MAAM,CAAC,EAAE,gCAAgC,CAAC;IAC1C,gCAAgC,CAAC,EAAE,MAAM,CAAC;CAC3C;AAED,2EAA2E;AAC3E,MAAM,WAAW,iDAAiD;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,sBAAsB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,aAAa,EAAE,4BAA4B,CAAC,UAAU,CAAC,CAAC;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,gCAAgC,CAAC;IACjD,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,WAAW,CAAC,EAAE,8CAA8C,CAAC,aAAa,CAAC,CAAC;IAC5E,MAAM,CAAC,EAAE,gCAAgC,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,wBAAwB,CAAC,EAAE,8CAA8C,CACvE,0BAA0B,CAC3B,CAAC;IACF,kCAAkC,CAAC,EAAE,8CAA8C,CACjF,oCAAoC,CACrC,CAAC;IACF,wBAAwB,CAAC,EAAE,8CAA8C,CACvE,0BAA0B,CAC3B,CAAC;IACF,qBAAqB,CAAC,EAAE,+CAA+C,CACrE,uBAAuB,CACxB,CAAC;CACH;AAED,0EAA0E;AAC1E,MAAM,WAAW,sCAAsC;IACrD,YAAY,EAAE,4BAA4B,CAAC;IAC3C,SAAS,EAAE,0BAA0B,CAAC;CACvC;AAED,KAAK,uBAAuB,GAAG,IAAI,CACjC,6BAA6B,CAAC,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC,EAC/E,2BAA2B,GAC3B,qBAAqB,GACrB,aAAa,GACb,uBAAuB,GACvB,sBAAsB,GACtB,SAAS,GACT,aAAa,CAChB,CAAC;AAEF,gDAAgD;AAChD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,oCAAoC,GAC1C,4BAA4B,CAK9B;AAED,+DAA+D;AAC/D,wBAAsB,2CAA2C,CAAC,KAAK,EAAE;IACvE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,gCAAgC,CAAC;CAC3C,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhB;AA8ED,sDAAsD;AACtD,wBAAsB,yCAAyC,CAC7D,KAAK,EAAE,8CAA8C,GACpD,OAAO,CAAC,mCAAmC,CAAC,CAgD9C;AA8DD,yDAAyD;AACzD,wBAAsB,4CAA4C,CAChE,KAAK,EAAE,iDAAiD,GACvD,OAAO,CAAC,sCAAsC,CAAC,CA6BjD;AAED,oDAAoD;AACpD,wBAAgB,uCAAuC,CAAC,KAAK,EAAE;IAC7D,gBAAgB,EAAE,mCAAmC,CAAC;IACtD,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,gCAAgC,CAAC;CAC3C,GAAG,uBAAuB,CA2B1B;AAED,4DAA4D;AAC5D,wBAAgB,0CAA0C,CAAC,KAAK,EAAE;IAChE,eAAe,EAAE,aAAa,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,mCAAmC,CAAC;IACtD,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,gCAAgC,EAAE,MAAM,CAAC;CAC1C,GAAG,CACF,SAAS,EAAE,OAAO,KACf,OAAO,CAAC,+BAA+B,CAAC,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC,CA4BhG;AAED,4DAA4D;AAC5D,wBAAgB,0CAA0C,CAAC,KAAK,EAAE;IAChE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,mCAAmC,CAAC;IACtD,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gCAAgC,EAAE,MAAM,CAAC;CAC1C,GAAG,CACF,SAAS,EAAE,OAAO,KACf,OAAO,CAAC,+BAA+B,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC,CA2BjF;AAmJD,4CAA4C;AAC5C,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,qCAAqC,GAC3C,0BAA0B,CAwH5B"}
|
|
@@ -7,6 +7,7 @@ import { createHostedMirroredUiStream, createMirroredToolChunkState, } from "../
|
|
|
7
7
|
import { finalizeHostedDetached, finalizeHostedResponse, } from "./stream-finalization.js";
|
|
8
8
|
import { getEmptyHostedFinalizedMessageTerminalError, getHostedStreamErrorText, shouldFailEmptyHostedFinalizedMessage, } from "./stream-terminal-error.js";
|
|
9
9
|
import { createChatStreamWatchdog, DEFAULT_CHAT_STREAM_TOOL_RUNNING_TIMEOUT_MS, } from "../../chat/stream-watchdog.js";
|
|
10
|
+
import { unrefTimer } from "../../platform/compat/process.js";
|
|
10
11
|
const INCOMPLETE_TOOL_CALLS_PART_ERROR_TEXT = "Assistant ended before tool execution completed";
|
|
11
12
|
const FINALIZATION_TERMINAL_STATE_FALLBACK_MODEL_ID = "";
|
|
12
13
|
const DEFAULT_STREAM_BOOTSTRAP_KEEPALIVE_INTERVAL_MS = 30_000;
|
|
@@ -56,17 +57,14 @@ function createStreamBootstrapWatchdogKeepalive(input) {
|
|
|
56
57
|
const timeoutMs = resolveStreamBootstrapTimeoutMs(input.timeoutMs);
|
|
57
58
|
const timeoutController = new AbortController();
|
|
58
59
|
const interval = globalThis.setInterval(() => {
|
|
59
|
-
input.rootStreamWatchdog.
|
|
60
|
-
type: "message-metadata",
|
|
61
|
-
messageMetadata: {
|
|
62
|
-
createdAt: new Date().toISOString(),
|
|
63
|
-
},
|
|
64
|
-
});
|
|
60
|
+
input.rootStreamWatchdog.keepAlive();
|
|
65
61
|
}, intervalMs);
|
|
66
62
|
const timeout = globalThis.setTimeout(() => {
|
|
67
63
|
timeoutController.abort(new DOMException(`Chat stream bootstrap timeout after ${timeoutMs}ms`, "AbortError"));
|
|
68
64
|
clearInterval(interval);
|
|
69
65
|
}, timeoutMs);
|
|
66
|
+
unrefTimer(interval);
|
|
67
|
+
unrefTimer(timeout);
|
|
70
68
|
return {
|
|
71
69
|
signal: timeoutController.signal,
|
|
72
70
|
dispose: () => {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type MessageTokenBreakdown } from "../../chat/message-prep.js";
|
|
1
2
|
import type { InferSchema } from "../../extensions/schema/index.js";
|
|
2
3
|
import type { AgentRuntimeMessage } from "../runtime/message-adapter.js";
|
|
3
4
|
export declare const AGENT_RUN_CONTEXT_COMPACTED_EVENT_TYPE: "AGENT_RUN_CONTEXT_COMPACTED";
|
|
@@ -39,6 +40,8 @@ export type ContextBudgetDiagnostics = {
|
|
|
39
40
|
compacted: boolean;
|
|
40
41
|
tokensBefore: number;
|
|
41
42
|
tokensAfter: number;
|
|
43
|
+
beforeBreakdown: MessageTokenBreakdown;
|
|
44
|
+
afterBreakdown: MessageTokenBreakdown;
|
|
42
45
|
tokenBudget: number;
|
|
43
46
|
reserveTokens: number;
|
|
44
47
|
summaryTokens: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-budget-manager.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/context-budget-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context-budget-manager.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/context-budget-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,eAAO,MAAM,sCAAsC,EAAG,6BAAsC,CAAC;AAE7F,eAAO,MAAM,iCAAiC;;GAI7C,CAAC;AAEF,eAAO,MAAM,sCAAsC;;;;;;;;;;;GAkClD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,WAAW,CAChD,UAAU,CAAC,OAAO,iCAAiC,CAAC,CACrD,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,WAAW,CACrD,UAAU,CAAC,OAAO,sCAAsC,CAAC,CAC1D,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;AAE9E,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE;IAC5C,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;IAC3C,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,KAAK,OAAO,CAAC,wBAAwB,CAAC,GAAG,wBAAwB,CAAC;AAEnE,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,gBAAgB,EAAE,uBAAuB,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,qBAAqB,CAAC;IACvC,cAAc,EAAE,qBAAqB,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,uBAAuB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,6BAA6B,CAAC;IAC7C,WAAW,EAAE,wBAAwB,CAAC;CACvC,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI3D;AAgND,mDAAmD;AACnD,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,EACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,0BAA0B,CAAC,CAuGrC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { estimateTokens } from "../../chat/message-prep.js";
|
|
1
|
+
import { estimateMessageTokenBreakdown, estimateTokens, } from "../../chat/message-prep.js";
|
|
2
2
|
import { defineSchema } from "../../schemas/index.js";
|
|
3
3
|
export const AGENT_RUN_CONTEXT_COMPACTED_EVENT_TYPE = "AGENT_RUN_CONTEXT_COMPACTED";
|
|
4
4
|
export const getContextCompactionSummarySchema = defineSchema((v) => v.object({
|
|
@@ -191,14 +191,19 @@ export async function applyContextBudget(messages, options) {
|
|
|
191
191
|
assertValidContextBudgetOptions(options);
|
|
192
192
|
const reason = options.reason ?? "context_window";
|
|
193
193
|
const tokensBefore = getMessageListTokens(messages);
|
|
194
|
+
const beforeBreakdown = estimateMessageTokenBreakdown(messages);
|
|
194
195
|
const usableBudget = getUsableTokenBudget(options);
|
|
195
196
|
if (tokensBefore <= usableBudget) {
|
|
197
|
+
const retainedMessages = [...messages];
|
|
198
|
+
const afterBreakdown = estimateMessageTokenBreakdown(retainedMessages);
|
|
196
199
|
return {
|
|
197
|
-
messages:
|
|
200
|
+
messages: retainedMessages,
|
|
198
201
|
diagnostics: {
|
|
199
202
|
compacted: false,
|
|
200
203
|
tokensBefore,
|
|
201
204
|
tokensAfter: tokensBefore,
|
|
205
|
+
beforeBreakdown,
|
|
206
|
+
afterBreakdown,
|
|
202
207
|
tokenBudget: options.tokenBudget,
|
|
203
208
|
reserveTokens: options.reserveTokens,
|
|
204
209
|
summaryTokens: 0,
|
|
@@ -243,6 +248,7 @@ export async function applyContextBudget(messages, options) {
|
|
|
243
248
|
});
|
|
244
249
|
const compactedMessages = [summaryMessage, ...retainedMessages];
|
|
245
250
|
const tokensAfter = getMessageListTokens(compactedMessages);
|
|
251
|
+
const afterBreakdown = estimateMessageTokenBreakdown(compactedMessages);
|
|
246
252
|
if (tokensAfter > usableBudget) {
|
|
247
253
|
throw new ContextCompactionError("Context compaction result exceeded usable token budget");
|
|
248
254
|
}
|
|
@@ -263,6 +269,8 @@ export async function applyContextBudget(messages, options) {
|
|
|
263
269
|
compacted: true,
|
|
264
270
|
tokensBefore,
|
|
265
271
|
tokensAfter,
|
|
272
|
+
beforeBreakdown,
|
|
273
|
+
afterBreakdown,
|
|
266
274
|
tokenBudget: options.tokenBudget,
|
|
267
275
|
reserveTokens: options.reserveTokens,
|
|
268
276
|
summaryTokens: estimateTokens(summary.text),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ChatUiMessage } from "../../chat/types.js";
|
|
1
2
|
import type { AgUiResumeValue } from "../ag-ui/tool-shared.js";
|
|
2
3
|
import type { DetachedRunTracker } from "../service/detached-run-tracker.js";
|
|
3
4
|
import type { ParsedHostedChatRequest } from "./chat-request-parser.js";
|
|
@@ -50,6 +51,8 @@ export declare function resolveHostedDurableRunSetupErrorResponse(input: {
|
|
|
50
51
|
errorCode: string;
|
|
51
52
|
statusCode: HostedDurableRunSetupErrorStatusCode;
|
|
52
53
|
};
|
|
54
|
+
/** Prepare durable detached-start messages without carrying completed large historical tool inputs. */
|
|
55
|
+
export declare function prepareDetachedStartMessages(messages: ChatUiMessage[]): ChatUiMessage[];
|
|
53
56
|
/** Execute hosted durable chat run. */
|
|
54
57
|
export declare function executeHostedDurableChatRun<TExecution>(input: ExecuteHostedDurableChatRunInput<TExecution>): Promise<Response>;
|
|
55
58
|
//# sourceMappingURL=durable-chat-run-start.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable-chat-run-start.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/durable-chat-run-start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"durable-chat-run-start.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/durable-chat-run-start.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAExE,0EAA0E;AAC1E,MAAM,MAAM,oCAAoC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAErF,2DAA2D;AAC3D,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,iCAAiC,GAAG;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAClE,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,mCAAmC,CAAC,UAAU,IAAI;IAC5D,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,iCAAiC,CAAC,UAAU,IAAI;IAC1D,SAAS,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,gCAAgC,CAAC,UAAU,IAAI;IACzD,GAAG,EAAE,uBAAuB,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,GAAG,EAAE,uBAAuB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACxE,sBAAsB,EAAE,CACtB,KAAK,EAAE,mCAAmC,CAAC,UAAU,CAAC,KACnD,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,iCAAiC,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3F,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,iCAAiC,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5F,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC,CAAC;AA0BF,mEAAmE;AACnE,wBAAgB,yCAAyC,CAAC,KAAK,EAAE;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;CACxB,GAAG;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,oCAAoC,CAAC;CAClD,CAiBA;AAyBD,uGAAuG;AACvG,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAEvF;AA8DD,uCAAuC;AACvC,wBAAsB,2BAA2B,CAAC,UAAU,EAC1D,KAAK,EAAE,gCAAgC,CAAC,UAAU,CAAC,GAClD,OAAO,CAAC,QAAQ,CAAC,CA0DnB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { parseProviderError } from "../../chat/provider-errors.js";
|
|
2
|
+
import { compactHistoricalUiMessageToolInputs } from "../../chat/message-prep.js";
|
|
2
3
|
import { AgUiDetachedStartAcceptedSchema, buildDetachedAgUiStartRequest, executeAgUiDetachedStart, } from "../ag-ui/detached-start.js";
|
|
3
4
|
function readBooleanProperty(input, propertyName) {
|
|
4
5
|
if (!input) {
|
|
@@ -51,6 +52,10 @@ async function parseAcceptedDetachedStartResponse(response) {
|
|
|
51
52
|
duplicate: readBooleanProperty(payloadObject, "duplicate"),
|
|
52
53
|
};
|
|
53
54
|
}
|
|
55
|
+
/** Prepare durable detached-start messages without carrying completed large historical tool inputs. */
|
|
56
|
+
export function prepareDetachedStartMessages(messages) {
|
|
57
|
+
return compactHistoricalUiMessageToolInputs(messages);
|
|
58
|
+
}
|
|
54
59
|
async function executeHostedDurableChatRunStart(input) {
|
|
55
60
|
const { durableRootRun, conversationId } = input.req;
|
|
56
61
|
if (!durableRootRun || !conversationId) {
|
|
@@ -60,7 +65,7 @@ async function executeHostedDurableChatRunStart(input) {
|
|
|
60
65
|
const detachedStartRequest = buildDetachedAgUiStartRequest({
|
|
61
66
|
runId: durableRootRun.runId,
|
|
62
67
|
threadId: conversationId,
|
|
63
|
-
messages: input.req.messages,
|
|
68
|
+
messages: prepareDetachedStartMessages(input.req.messages),
|
|
64
69
|
model: input.req.model,
|
|
65
70
|
forwardedProps: input.req.forwardedProps,
|
|
66
71
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-terminal-error.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/stream-terminal-error.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stream-terminal-error.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/stream-terminal-error.ts"],"names":[],"mappings":"AAyDA,8CAA8C;AAC9C,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAkDF,uCAAuC;AACvC,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,CAErE;AAED,mEAAmE;AACnE,wBAAgB,2CAA2C,CAAC,KAAK,EAAE;IACjE,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B,GAAG,yBAAyB,CAQ5B;AAED,4DAA4D;AAC5D,wBAAgB,qCAAqC,CAAC,KAAK,EAAE;IAC3D,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE;QAAE,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;CAC5C,GAAG,OAAO,CAEV"}
|
|
@@ -34,6 +34,7 @@ function getHostedStreamTimeoutTerminalError(error) {
|
|
|
34
34
|
const normalized = message.toLowerCase();
|
|
35
35
|
const isTimeout = normalized.includes("stream timed out") ||
|
|
36
36
|
normalized.includes("chat stream idle timeout") ||
|
|
37
|
+
normalized.includes("chat stream bootstrap timeout") ||
|
|
37
38
|
normalized.includes("stream timeout");
|
|
38
39
|
if (!isTimeout) {
|
|
39
40
|
return null;
|
|
@@ -5,6 +5,20 @@ export interface PrepareProviderModelMessagesFromUiMessagesOptions {
|
|
|
5
5
|
}
|
|
6
6
|
/** Estimate tokens. */
|
|
7
7
|
export declare function estimateTokens(value: unknown): number;
|
|
8
|
+
/** Approximate token categories for context diagnostics. */
|
|
9
|
+
export type MessageTokenBreakdown = {
|
|
10
|
+
totalTokens: number;
|
|
11
|
+
systemTextTokens: number;
|
|
12
|
+
userContentTokens: number;
|
|
13
|
+
assistantContentTokens: number;
|
|
14
|
+
reasoningTokens: number;
|
|
15
|
+
toolCallInputTokens: number;
|
|
16
|
+
toolResultOutputTokens: number;
|
|
17
|
+
fileTokens: number;
|
|
18
|
+
unknownTokens: number;
|
|
19
|
+
};
|
|
20
|
+
/** Estimate token categories for provider, UI, or runtime messages. */
|
|
21
|
+
export declare function estimateMessageTokenBreakdown(messages: readonly unknown[]): MessageTokenBreakdown;
|
|
8
22
|
/** Compress turn. */
|
|
9
23
|
export declare function compressTurn(messages: ProviderModelMessage[], startIdx: number, endIdx: number): ProviderModelMessage[];
|
|
10
24
|
/** Enforce token budget with turn compression. */
|
|
@@ -23,6 +37,10 @@ export declare function sanitizeProviderModelMessages(messages: ProviderModelMes
|
|
|
23
37
|
export declare function prepareProviderModelMessagesFromUiMessages(messages: ChatUiMessage[], options?: PrepareProviderModelMessagesFromUiMessagesOptions): ProviderModelMessage[];
|
|
24
38
|
/** Mask old tool outputs. */
|
|
25
39
|
export declare function maskOldToolOutputs(messages: ProviderModelMessage[]): ProviderModelMessage[];
|
|
40
|
+
/** Compact large historical tool-call inputs after matching results are available. */
|
|
41
|
+
export declare function compactOldToolInputs(messages: ProviderModelMessage[]): ProviderModelMessage[];
|
|
42
|
+
/** Compact large historical UI-message tool inputs after matching results are available. */
|
|
43
|
+
export declare function compactHistoricalUiMessageToolInputs(messages: ChatUiMessage[]): ChatUiMessage[];
|
|
26
44
|
/** Repair tool pairs. */
|
|
27
45
|
export declare function repairToolPairs(messages: ProviderModelMessage[]): ProviderModelMessage[];
|
|
28
46
|
/** Estimate overhead. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-prep.d.ts","sourceRoot":"","sources":["../../../src/src/chat/message-prep.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AASjC,OAAO,EAKL,KAAK,aAAa,EAGlB,KAAK,oBAAoB,EAE1B,MAAM,YAAY,CAAC;AAMpB,4EAA4E;AAC5E,MAAM,WAAW,iDAAiD;IAChE,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED,uBAAuB;AACvB,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD;AAOD,qBAAqB;AACrB,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,oBAAoB,EAAE,EAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,oBAAoB,EAAE,CAiCxB;AAqCD,kDAAkD;AAClD,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,oBAAoB,EAAE,EAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,oBAAoB,EAAE,CAiExB;
|
|
1
|
+
{"version":3,"file":"message-prep.d.ts","sourceRoot":"","sources":["../../../src/src/chat/message-prep.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,103 @@ const CHARS_PER_TOKEN = 4;
|
|
|
6
6
|
export function estimateTokens(value) {
|
|
7
7
|
return Math.ceil(JSON.stringify(value ?? "").length / CHARS_PER_TOKEN);
|
|
8
8
|
}
|
|
9
|
+
function createEmptyTokenBreakdown(totalTokens) {
|
|
10
|
+
return {
|
|
11
|
+
totalTokens,
|
|
12
|
+
systemTextTokens: 0,
|
|
13
|
+
userContentTokens: 0,
|
|
14
|
+
assistantContentTokens: 0,
|
|
15
|
+
reasoningTokens: 0,
|
|
16
|
+
toolCallInputTokens: 0,
|
|
17
|
+
toolResultOutputTokens: 0,
|
|
18
|
+
fileTokens: 0,
|
|
19
|
+
unknownTokens: 0,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function addPartTokenBreakdown(breakdown, role, part) {
|
|
23
|
+
if (!isRecord(part) || typeof part.type !== "string") {
|
|
24
|
+
breakdown.unknownTokens += estimateTokens(part);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
switch (part.type) {
|
|
28
|
+
case "text": {
|
|
29
|
+
const tokens = estimateTokens(typeof part.text === "string" ? part.text : part);
|
|
30
|
+
if (role === "system")
|
|
31
|
+
breakdown.systemTextTokens += tokens;
|
|
32
|
+
else if (role === "user")
|
|
33
|
+
breakdown.userContentTokens += tokens;
|
|
34
|
+
else if (role === "assistant")
|
|
35
|
+
breakdown.assistantContentTokens += tokens;
|
|
36
|
+
else
|
|
37
|
+
breakdown.unknownTokens += tokens;
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
case "reasoning":
|
|
41
|
+
breakdown.reasoningTokens += estimateTokens(part);
|
|
42
|
+
return;
|
|
43
|
+
case "tool-call":
|
|
44
|
+
case "tool_call":
|
|
45
|
+
case "dynamic-tool":
|
|
46
|
+
breakdown.toolCallInputTokens += estimateTokens("input" in part ? part.input : "args" in part ? part.args : part);
|
|
47
|
+
return;
|
|
48
|
+
case "tool-result":
|
|
49
|
+
case "tool_result":
|
|
50
|
+
breakdown.toolResultOutputTokens += estimateTokens("output" in part ? part.output : "result" in part ? part.result : part);
|
|
51
|
+
return;
|
|
52
|
+
case "file":
|
|
53
|
+
case "image":
|
|
54
|
+
breakdown.fileTokens += estimateTokens(part);
|
|
55
|
+
return;
|
|
56
|
+
default:
|
|
57
|
+
if (part.type.startsWith("tool-")) {
|
|
58
|
+
breakdown.toolCallInputTokens += estimateTokens("input" in part ? part.input : "args" in part ? part.args : part);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
breakdown.unknownTokens += estimateTokens(part);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Estimate token categories for provider, UI, or runtime messages. */
|
|
65
|
+
export function estimateMessageTokenBreakdown(messages) {
|
|
66
|
+
const breakdown = createEmptyTokenBreakdown(estimateTokens(messages));
|
|
67
|
+
for (const message of messages) {
|
|
68
|
+
if (!isRecord(message)) {
|
|
69
|
+
breakdown.unknownTokens += estimateTokens(message);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const role = typeof message.role === "string" ? message.role : "unknown";
|
|
73
|
+
if ("parts" in message && Array.isArray(message.parts)) {
|
|
74
|
+
for (const part of message.parts) {
|
|
75
|
+
addPartTokenBreakdown(breakdown, role, part);
|
|
76
|
+
}
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if ("content" in message) {
|
|
80
|
+
const content = message.content;
|
|
81
|
+
if (typeof content === "string") {
|
|
82
|
+
const tokens = estimateTokens(content);
|
|
83
|
+
if (role === "system")
|
|
84
|
+
breakdown.systemTextTokens += tokens;
|
|
85
|
+
else if (role === "user")
|
|
86
|
+
breakdown.userContentTokens += tokens;
|
|
87
|
+
else if (role === "assistant")
|
|
88
|
+
breakdown.assistantContentTokens += tokens;
|
|
89
|
+
else
|
|
90
|
+
breakdown.unknownTokens += tokens;
|
|
91
|
+
}
|
|
92
|
+
else if (Array.isArray(content)) {
|
|
93
|
+
for (const part of content) {
|
|
94
|
+
addPartTokenBreakdown(breakdown, role, part);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
breakdown.unknownTokens += estimateTokens(content);
|
|
99
|
+
}
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
breakdown.unknownTokens += estimateTokens(message);
|
|
103
|
+
}
|
|
104
|
+
return breakdown;
|
|
105
|
+
}
|
|
9
106
|
function truncate(text, maxLen) {
|
|
10
107
|
if (text.length <= maxLen)
|
|
11
108
|
return text;
|
|
@@ -137,9 +234,38 @@ const DEFAULT_CONTEXT_WINDOW = 200_000;
|
|
|
137
234
|
const DEFAULT_TOKEN_BUDGET = Math.floor(DEFAULT_CONTEXT_WINDOW * BUDGET_RATIO);
|
|
138
235
|
const TOKENS_PER_TOOL = 250;
|
|
139
236
|
const MASK_THRESHOLD = 500;
|
|
237
|
+
const TOOL_INPUT_MASK_THRESHOLD = 1_000;
|
|
238
|
+
const HISTORICAL_TOOL_INPUT_SUMMARY_KIND = "historical_tool_input_summary";
|
|
239
|
+
const WRITE_TOOL_INPUT_NAMES = new Set([
|
|
240
|
+
"create_file",
|
|
241
|
+
"createfile",
|
|
242
|
+
"update_file",
|
|
243
|
+
"updatefile",
|
|
244
|
+
"write_file",
|
|
245
|
+
"writefile",
|
|
246
|
+
"edit",
|
|
247
|
+
]);
|
|
248
|
+
const CHILD_AGENT_TOOL_INPUT_NAMES = new Set(["invoke_agent"]);
|
|
140
249
|
function serializedLength(value) {
|
|
141
250
|
return JSON.stringify(value ?? "").length;
|
|
142
251
|
}
|
|
252
|
+
function serializedValue(value) {
|
|
253
|
+
try {
|
|
254
|
+
return JSON.stringify(value ?? null);
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return String(value);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
function stableHash(value) {
|
|
261
|
+
const text = serializedValue(value);
|
|
262
|
+
let hash = 0x811c9dc5;
|
|
263
|
+
for (let index = 0; index < text.length; index++) {
|
|
264
|
+
hash ^= text.charCodeAt(index);
|
|
265
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
266
|
+
}
|
|
267
|
+
return hash.toString(16).padStart(8, "0");
|
|
268
|
+
}
|
|
143
269
|
function tryParseJson(value) {
|
|
144
270
|
if (typeof value !== "string")
|
|
145
271
|
return value;
|
|
@@ -153,6 +279,130 @@ function tryParseJson(value) {
|
|
|
153
279
|
function isRecord(value) {
|
|
154
280
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
155
281
|
}
|
|
282
|
+
function normalizeToolInputName(toolName) {
|
|
283
|
+
return toolName.toLowerCase().replace(/[^a-z0-9_]/g, "");
|
|
284
|
+
}
|
|
285
|
+
function isWriteToolInput(toolName) {
|
|
286
|
+
return WRITE_TOOL_INPUT_NAMES.has(normalizeToolInputName(toolName));
|
|
287
|
+
}
|
|
288
|
+
function isChildAgentToolInput(toolName) {
|
|
289
|
+
return CHILD_AGENT_TOOL_INPUT_NAMES.has(normalizeToolInputName(toolName));
|
|
290
|
+
}
|
|
291
|
+
function shouldCompactHistoricalToolInput(toolName, input) {
|
|
292
|
+
return isRecord(input) && (isWriteToolInput(toolName) || isChildAgentToolInput(toolName));
|
|
293
|
+
}
|
|
294
|
+
function compactMetadataValue(value) {
|
|
295
|
+
if (typeof value === "string")
|
|
296
|
+
return truncate(value, 200);
|
|
297
|
+
if (typeof value === "number" || typeof value === "boolean")
|
|
298
|
+
return value;
|
|
299
|
+
if (Array.isArray(value)) {
|
|
300
|
+
const compact = value
|
|
301
|
+
.filter((entry) => typeof entry === "string" || typeof entry === "number" || typeof entry === "boolean")
|
|
302
|
+
.slice(0, 20);
|
|
303
|
+
return compact.length > 0 ? compact : undefined;
|
|
304
|
+
}
|
|
305
|
+
if (isRecord(value)) {
|
|
306
|
+
const compact = {};
|
|
307
|
+
for (const [key, entry] of Object.entries(value).slice(0, 20)) {
|
|
308
|
+
if (typeof entry === "string")
|
|
309
|
+
compact[key] = truncate(entry, 200);
|
|
310
|
+
else if (typeof entry === "number" || typeof entry === "boolean")
|
|
311
|
+
compact[key] = entry;
|
|
312
|
+
}
|
|
313
|
+
return Object.keys(compact).length > 0 ? compact : undefined;
|
|
314
|
+
}
|
|
315
|
+
return undefined;
|
|
316
|
+
}
|
|
317
|
+
function copyFirstMetadataField(target, input, outputName, inputNames) {
|
|
318
|
+
for (const name of inputNames) {
|
|
319
|
+
const value = compactMetadataValue(input[name]);
|
|
320
|
+
if (value !== undefined) {
|
|
321
|
+
target[outputName] = value;
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
function copyNamedMetadataFields(target, input, names) {
|
|
327
|
+
for (const name of names) {
|
|
328
|
+
const value = compactMetadataValue(input[name]);
|
|
329
|
+
if (value !== undefined) {
|
|
330
|
+
target[name] = value;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
function compactHistoricalToolInput(toolName, input, charCount) {
|
|
335
|
+
const compact = {
|
|
336
|
+
kind: HISTORICAL_TOOL_INPUT_SUMMARY_KIND,
|
|
337
|
+
toolName,
|
|
338
|
+
originalInputChars: charCount,
|
|
339
|
+
originalInputHash: stableHash(input),
|
|
340
|
+
omitted: "Full historical tool input omitted after the tool completed.",
|
|
341
|
+
};
|
|
342
|
+
if (isWriteToolInput(toolName)) {
|
|
343
|
+
copyFirstMetadataField(compact, input, "path", [
|
|
344
|
+
"path",
|
|
345
|
+
"filePath",
|
|
346
|
+
"file_path",
|
|
347
|
+
"targetPath",
|
|
348
|
+
"target_path",
|
|
349
|
+
"filename",
|
|
350
|
+
]);
|
|
351
|
+
}
|
|
352
|
+
else if (isChildAgentToolInput(toolName)) {
|
|
353
|
+
copyNamedMetadataFields(compact, input, [
|
|
354
|
+
"agent_id",
|
|
355
|
+
"agentId",
|
|
356
|
+
"model",
|
|
357
|
+
"description",
|
|
358
|
+
"tools",
|
|
359
|
+
"max_steps",
|
|
360
|
+
"maxSteps",
|
|
361
|
+
"thinking",
|
|
362
|
+
]);
|
|
363
|
+
}
|
|
364
|
+
return compact;
|
|
365
|
+
}
|
|
366
|
+
function collectHistoricalToolResultIds(messages, beforeIndex) {
|
|
367
|
+
const resultIds = new Set();
|
|
368
|
+
for (let index = 0; index < beforeIndex; index++) {
|
|
369
|
+
const message = messages[index];
|
|
370
|
+
if (!message || !Array.isArray(message.content))
|
|
371
|
+
continue;
|
|
372
|
+
for (const part of message.content) {
|
|
373
|
+
if (isToolResultPart(part)) {
|
|
374
|
+
resultIds.add(part.toolCallId);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return resultIds;
|
|
379
|
+
}
|
|
380
|
+
function isCompletedUiToolPart(part) {
|
|
381
|
+
return isToolLikePart(part) &&
|
|
382
|
+
isRecord(part) &&
|
|
383
|
+
(part.state === "output-available" ||
|
|
384
|
+
part.state === "output-error" ||
|
|
385
|
+
part.state === "output-denied" ||
|
|
386
|
+
part.state === "error" ||
|
|
387
|
+
part.state === "completed");
|
|
388
|
+
}
|
|
389
|
+
function collectHistoricalUiToolResultIds(messages, beforeIndex) {
|
|
390
|
+
const resultIds = new Set();
|
|
391
|
+
for (let index = 0; index < beforeIndex; index++) {
|
|
392
|
+
const message = messages[index];
|
|
393
|
+
if (!message)
|
|
394
|
+
continue;
|
|
395
|
+
for (const part of message.parts) {
|
|
396
|
+
if (!isCompletedUiToolPart(part))
|
|
397
|
+
continue;
|
|
398
|
+
const toolCallId = getToolPartCallId(part);
|
|
399
|
+
if (toolCallId) {
|
|
400
|
+
resultIds.add(toolCallId);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
return resultIds;
|
|
405
|
+
}
|
|
156
406
|
/** Check whether the model supports the file media type. */
|
|
157
407
|
export function isModelSupportedFileMediaType(mediaType) {
|
|
158
408
|
return mediaType.startsWith("image/") || mediaType === "application/pdf" ||
|
|
@@ -249,6 +499,9 @@ function isToolLikePart(part) {
|
|
|
249
499
|
return isRecord(part) && typeof part.type === "string" &&
|
|
250
500
|
(part.type === "dynamic-tool" || part.type === "tool_call" || part.type.startsWith("tool-"));
|
|
251
501
|
}
|
|
502
|
+
function isUiToolInputPart(part) {
|
|
503
|
+
return isToolLikePart(part) && "input" in part;
|
|
504
|
+
}
|
|
252
505
|
function hasToolState(part, state) {
|
|
253
506
|
return isRecord(part) && part.state === state && isToolLikePart(part);
|
|
254
507
|
}
|
|
@@ -454,7 +707,8 @@ export function prepareProviderModelMessagesFromUiMessages(messages, options = {
|
|
|
454
707
|
const patchedMessages = ensureToolCallInputs(dedupeToolHistory(providerModelMessages));
|
|
455
708
|
const sanitized = sanitizeProviderModelMessages(patchedMessages);
|
|
456
709
|
const masked = maskOldToolOutputs(sanitized);
|
|
457
|
-
const
|
|
710
|
+
const compactedInputs = compactOldToolInputs(masked);
|
|
711
|
+
const compacted = enforceTokenBudget(compactedInputs);
|
|
458
712
|
const filtered = filterValidMessages(compacted);
|
|
459
713
|
return repairToolPairs(filtered);
|
|
460
714
|
}
|
|
@@ -755,6 +1009,102 @@ export function maskOldToolOutputs(messages) {
|
|
|
755
1009
|
return copyProviderModelMessageSourceId(msg, { ...msg, content: newContent });
|
|
756
1010
|
});
|
|
757
1011
|
}
|
|
1012
|
+
/** Compact large historical tool-call inputs after matching results are available. */
|
|
1013
|
+
export function compactOldToolInputs(messages) {
|
|
1014
|
+
let lastUserIdx = -1;
|
|
1015
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
1016
|
+
const message = messages[i];
|
|
1017
|
+
if (message?.role === "user") {
|
|
1018
|
+
lastUserIdx = i;
|
|
1019
|
+
break;
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
if (lastUserIdx <= 0)
|
|
1023
|
+
return messages;
|
|
1024
|
+
const historicalResultIds = collectHistoricalToolResultIds(messages, lastUserIdx);
|
|
1025
|
+
let mutated = false;
|
|
1026
|
+
const result = messages.map((msg, idx) => {
|
|
1027
|
+
if (idx >= lastUserIdx || msg.role !== "assistant" || !Array.isArray(msg.content)) {
|
|
1028
|
+
return msg;
|
|
1029
|
+
}
|
|
1030
|
+
let messageMutated = false;
|
|
1031
|
+
const content = msg.content.map((part) => {
|
|
1032
|
+
if (!isToolCallPart(part)) {
|
|
1033
|
+
return part;
|
|
1034
|
+
}
|
|
1035
|
+
if (!historicalResultIds.has(part.toolCallId)) {
|
|
1036
|
+
return part;
|
|
1037
|
+
}
|
|
1038
|
+
if (!shouldCompactHistoricalToolInput(part.toolName, part.input)) {
|
|
1039
|
+
return part;
|
|
1040
|
+
}
|
|
1041
|
+
const charCount = serializedLength(part.input);
|
|
1042
|
+
if (charCount < TOOL_INPUT_MASK_THRESHOLD) {
|
|
1043
|
+
return part;
|
|
1044
|
+
}
|
|
1045
|
+
messageMutated = true;
|
|
1046
|
+
return {
|
|
1047
|
+
...part,
|
|
1048
|
+
input: compactHistoricalToolInput(part.toolName, part.input, charCount),
|
|
1049
|
+
};
|
|
1050
|
+
});
|
|
1051
|
+
if (!messageMutated) {
|
|
1052
|
+
return msg;
|
|
1053
|
+
}
|
|
1054
|
+
mutated = true;
|
|
1055
|
+
return copyProviderModelMessageSourceId(msg, { ...msg, content });
|
|
1056
|
+
});
|
|
1057
|
+
return mutated ? result : messages;
|
|
1058
|
+
}
|
|
1059
|
+
/** Compact large historical UI-message tool inputs after matching results are available. */
|
|
1060
|
+
export function compactHistoricalUiMessageToolInputs(messages) {
|
|
1061
|
+
let lastUserIdx = -1;
|
|
1062
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
1063
|
+
const message = messages[i];
|
|
1064
|
+
if (message?.role === "user") {
|
|
1065
|
+
lastUserIdx = i;
|
|
1066
|
+
break;
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
if (lastUserIdx <= 0)
|
|
1070
|
+
return messages;
|
|
1071
|
+
const historicalResultIds = collectHistoricalUiToolResultIds(messages, lastUserIdx);
|
|
1072
|
+
let mutated = false;
|
|
1073
|
+
const result = messages.map((message, index) => {
|
|
1074
|
+
if (index >= lastUserIdx || message.role !== "assistant") {
|
|
1075
|
+
return message;
|
|
1076
|
+
}
|
|
1077
|
+
let messageMutated = false;
|
|
1078
|
+
const parts = message.parts.map((part) => {
|
|
1079
|
+
if (!isUiToolInputPart(part)) {
|
|
1080
|
+
return part;
|
|
1081
|
+
}
|
|
1082
|
+
const toolCallId = getToolPartCallId(part);
|
|
1083
|
+
if (!toolCallId || !historicalResultIds.has(toolCallId)) {
|
|
1084
|
+
return part;
|
|
1085
|
+
}
|
|
1086
|
+
const toolName = getMessagePartToolName(part);
|
|
1087
|
+
if (!toolName || !shouldCompactHistoricalToolInput(toolName, part.input)) {
|
|
1088
|
+
return part;
|
|
1089
|
+
}
|
|
1090
|
+
const charCount = serializedLength(part.input);
|
|
1091
|
+
if (charCount < TOOL_INPUT_MASK_THRESHOLD) {
|
|
1092
|
+
return part;
|
|
1093
|
+
}
|
|
1094
|
+
messageMutated = true;
|
|
1095
|
+
return {
|
|
1096
|
+
...part,
|
|
1097
|
+
input: compactHistoricalToolInput(toolName, part.input, charCount),
|
|
1098
|
+
};
|
|
1099
|
+
});
|
|
1100
|
+
if (!messageMutated) {
|
|
1101
|
+
return message;
|
|
1102
|
+
}
|
|
1103
|
+
mutated = true;
|
|
1104
|
+
return { ...message, parts };
|
|
1105
|
+
});
|
|
1106
|
+
return mutated ? result : messages;
|
|
1107
|
+
}
|
|
758
1108
|
function createSyntheticToolResult(toolCallId, toolName) {
|
|
759
1109
|
return {
|
|
760
1110
|
type: "tool-result",
|
|
@@ -903,7 +1253,7 @@ export function ensureToolCallInputs(messages) {
|
|
|
903
1253
|
}
|
|
904
1254
|
/** Compact for step. */
|
|
905
1255
|
export function compactForStep(messages, overhead = 0) {
|
|
906
|
-
const compacted = enforceTokenBudget(maskOldToolOutputs(messages), DEFAULT_TOKEN_BUDGET, overhead);
|
|
1256
|
+
const compacted = enforceTokenBudget(compactOldToolInputs(maskOldToolOutputs(messages)), DEFAULT_TOKEN_BUDGET, overhead);
|
|
907
1257
|
let end = compacted.length;
|
|
908
1258
|
while (end > 1 && compacted[end - 1]?.role === "assistant") {
|
|
909
1259
|
end--;
|
|
@@ -41,6 +41,7 @@ export declare function isHeartbeatOnlyMetadataChunk(chunk: ChatUiMessageChunk<M
|
|
|
41
41
|
export declare function createChatStreamWatchdog(options?: ChatStreamWatchdogOptions): {
|
|
42
42
|
signal: AbortSignal;
|
|
43
43
|
readonly lastTimeoutState: ChatStreamWatchdogState | null;
|
|
44
|
+
keepAlive(): void;
|
|
44
45
|
observe(chunk: ChatUiMessageChunk<MessageMetadata>): void;
|
|
45
46
|
dispose(): void;
|
|
46
47
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-watchdog.d.ts","sourceRoot":"","sources":["../../../src/src/chat/stream-watchdog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtE,qDAAqD;AACrD,eAAO,MAAM,mCAAmC,SAAU,CAAC;AAC3D,6DAA6D;AAC7D,eAAO,MAAM,2CAA2C,SAAU,CAAC;AAEnE,0DAA0D;AAC1D,MAAM,MAAM,uBAAuB,GAC/B,kBAAkB,GAClB,sBAAsB,GACtB,cAAc,GACd,gBAAgB,CAAC;AAErB,sCAAsC;AACtC,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,yBAAyB,GAAG;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,OAAO,OAAO,CAAC,UAAU,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,UAAU,CAAC,YAAY,CAAC;CACjD,CAAC;AAEF,gDAAgD;AAChD,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;gBAE5B,KAAK,EAAE,uBAAuB;CAU3C;AAED,6CAA6C;AAC7C,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,CAAC,EAAE;IACT,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,GAAE,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,eAAe,GAAG,sBAAsB,CAG1F,GACA,uBAAuB,CAOzB;AAED,mDAAmD;AACnD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,uBAAuB,EAChC,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,GACxC,OAAO,CAMT;AAED,+CAA+C;AAC/C,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,uBAAuB,EACrC,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,EAC1C,OAAO,CAAC,EAAE,yBAAyB,GAClC,uBAAuB,CA+DzB;AAED,6DAA6D;AAC7D,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,OAAO,CAEhG;AAED,mCAAmC;AACnC,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,yBAAyB;;+BAsChD,uBAAuB,GAAG,IAAI
|
|
1
|
+
{"version":3,"file":"stream-watchdog.d.ts","sourceRoot":"","sources":["../../../src/src/chat/stream-watchdog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtE,qDAAqD;AACrD,eAAO,MAAM,mCAAmC,SAAU,CAAC;AAC3D,6DAA6D;AAC7D,eAAO,MAAM,2CAA2C,SAAU,CAAC;AAEnE,0DAA0D;AAC1D,MAAM,MAAM,uBAAuB,GAC/B,kBAAkB,GAClB,sBAAsB,GACtB,cAAc,GACd,gBAAgB,CAAC;AAErB,sCAAsC;AACtC,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,yBAAyB,GAAG;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,OAAO,OAAO,CAAC,UAAU,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,UAAU,CAAC,YAAY,CAAC;CACjD,CAAC;AAEF,gDAAgD;AAChD,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;gBAE5B,KAAK,EAAE,uBAAuB;CAU3C;AAED,6CAA6C;AAC7C,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,CAAC,EAAE;IACT,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,GAAE,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,eAAe,GAAG,sBAAsB,CAG1F,GACA,uBAAuB,CAOzB;AAED,mDAAmD;AACnD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,uBAAuB,EAChC,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,GACxC,OAAO,CAMT;AAED,+CAA+C;AAC/C,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,uBAAuB,EACrC,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,EAC1C,OAAO,CAAC,EAAE,yBAAyB,GAClC,uBAAuB,CA+DzB;AAED,6DAA6D;AAC7D,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,GAAG,OAAO,CAEhG;AAED,mCAAmC;AACnC,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,yBAAyB;;+BAsChD,uBAAuB,GAAG,IAAI;;mBAWvC,kBAAkB,CAAC,eAAe,CAAC;;EAgBrD"}
|
|
@@ -114,6 +114,13 @@ export function createChatStreamWatchdog(options) {
|
|
|
114
114
|
get lastTimeoutState() {
|
|
115
115
|
return lastTimeoutState;
|
|
116
116
|
},
|
|
117
|
+
keepAlive() {
|
|
118
|
+
if (isLongRunningToolRunning(state, resolvedOptions.longRunningToolNames)) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
state = createChatStreamWatchdogState("response_pending", undefined, resolvedOptions);
|
|
122
|
+
arm();
|
|
123
|
+
},
|
|
117
124
|
observe(chunk) {
|
|
118
125
|
if (isHeartbeatOnlyMetadataChunk(chunk)) {
|
|
119
126
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework-candidates.generated.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/dev/framework-candidates.generated.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"framework-candidates.generated.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/dev/framework-candidates.generated.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAo4bjD,CAAC"}
|
|
@@ -4456,6 +4456,7 @@ export const FRAMEWORK_CANDIDATES = [
|
|
|
4456
4456
|
"UseUploadsRegistryOptions",
|
|
4457
4457
|
"UseUploadsRegistryOptions,",
|
|
4458
4458
|
"UseUploadsRegistryResult",
|
|
4459
|
+
"UseUploadsRegistryResult).isLoading,",
|
|
4459
4460
|
"UseUploadsRegistryResult,",
|
|
4460
4461
|
"Used",
|
|
4461
4462
|
"Useful",
|
|
@@ -5296,6 +5297,7 @@ export const FRAMEWORK_CANDIDATES = [
|
|
|
5296
5297
|
"assertEquals((await",
|
|
5297
5298
|
"assertEquals((first",
|
|
5298
5299
|
"assertEquals((full?.messages[0]?.parts[0]",
|
|
5300
|
+
"assertEquals((latest",
|
|
5299
5301
|
"assertEquals((text",
|
|
5300
5302
|
"assertEquals(await",
|
|
5301
5303
|
"assertEquals(b.get().items.map((f)",
|
|
@@ -5330,7 +5332,6 @@ export const FRAMEWORK_CANDIDATES = [
|
|
|
5330
5332
|
"assertEquals(items.length,",
|
|
5331
5333
|
"assertEquals(items[0]!.id,",
|
|
5332
5334
|
"assertEquals(items[0]!.type,",
|
|
5333
|
-
"assertEquals(latest?.isLoading,",
|
|
5334
5335
|
"assertEquals(matches.length,",
|
|
5335
5336
|
"assertEquals(matches[0]?.title,",
|
|
5336
5337
|
"assertEquals(menu.parentElement,",
|
|
@@ -13976,7 +13977,7 @@ export const FRAMEWORK_CANDIDATES = [
|
|
|
13976
13977
|
"view.get().remove(",
|
|
13977
13978
|
"view.get().save(conversation({",
|
|
13978
13979
|
"view.get().save(fresh);",
|
|
13979
|
-
"view.root.unmount();",
|
|
13980
|
+
"view.root.unmount());",
|
|
13980
13981
|
"view:",
|
|
13981
13982
|
"viewBox",
|
|
13982
13983
|
"viewBox:",
|