@superblocksteam/vite-plugin-file-sync 2.0.130-next.1 → 2.0.130-next.3
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/ai-service/agent/prompts/build-base-system-prompt.js +1 -1
- package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.d.ts.map +1 -1
- package/dist/ai-service/agent/tool-message-utils.js +30 -0
- package/dist/ai-service/agent/tool-message-utils.js.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts +11 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.d.ts.map +1 -1
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js +144 -29
- package/dist/ai-service/agent/tools2/tools/exit-plan-mode.js.map +1 -1
- package/dist/ai-service/agent/utils.d.ts.map +1 -1
- package/dist/ai-service/agent/utils.js +6 -1
- package/dist/ai-service/agent/utils.js.map +1 -1
- package/dist/ai-service/app-skills/helpers.d.ts.map +1 -1
- package/dist/ai-service/app-skills/helpers.js +17 -18
- package/dist/ai-service/app-skills/helpers.js.map +1 -1
- package/dist/ai-service/chat/chat-push-metrics.d.ts +12 -0
- package/dist/ai-service/chat/chat-push-metrics.d.ts.map +1 -0
- package/dist/ai-service/chat/chat-push-metrics.js +68 -0
- package/dist/ai-service/chat/chat-push-metrics.js.map +1 -0
- package/dist/ai-service/chat/chat-session-store.d.ts +61 -5
- package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
- package/dist/ai-service/chat/chat-session-store.js +214 -8
- package/dist/ai-service/chat/chat-session-store.js.map +1 -1
- package/dist/ai-service/chat/transcript-budget.d.ts +108 -0
- package/dist/ai-service/chat/transcript-budget.d.ts.map +1 -0
- package/dist/ai-service/chat/transcript-budget.js +175 -0
- package/dist/ai-service/chat/transcript-budget.js.map +1 -0
- package/dist/ai-service/chat/transcript-metrics.d.ts +16 -0
- package/dist/ai-service/chat/transcript-metrics.d.ts.map +1 -0
- package/dist/ai-service/chat/transcript-metrics.js +128 -0
- package/dist/ai-service/chat/transcript-metrics.js.map +1 -0
- package/dist/ai-service/context-download.d.ts.map +1 -1
- package/dist/ai-service/context-download.js +48 -1
- package/dist/ai-service/context-download.js.map +1 -1
- package/dist/ai-service/context-upload.d.ts.map +1 -1
- package/dist/ai-service/context-upload.js +10 -0
- package/dist/ai-service/context-upload.js.map +1 -1
- package/dist/ai-service/index.d.ts.map +1 -1
- package/dist/ai-service/index.js +4 -0
- package/dist/ai-service/index.js.map +1 -1
- package/dist/ai-service/llm/clark-stream-telemetry-sink.d.ts +4 -0
- package/dist/ai-service/llm/clark-stream-telemetry-sink.d.ts.map +1 -0
- package/dist/ai-service/llm/clark-stream-telemetry-sink.js +105 -0
- package/dist/ai-service/llm/clark-stream-telemetry-sink.js.map +1 -0
- package/dist/ai-service/llm/client.d.ts.map +1 -1
- package/dist/ai-service/llm/client.js +63 -39
- package/dist/ai-service/llm/client.js.map +1 -1
- package/dist/ai-service/llm/context-v2/compaction/client-side.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/compaction/client-side.js +10 -1
- package/dist/ai-service/llm/context-v2/compaction/client-side.js.map +1 -1
- package/dist/ai-service/llm/context-v2/context.d.ts +14 -0
- package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/context.js +94 -3
- package/dist/ai-service/llm/context-v2/context.js.map +1 -1
- package/dist/ai-service/llm/context-v2/storage/event-types.d.ts +10 -1
- package/dist/ai-service/llm/context-v2/storage/event-types.d.ts.map +1 -1
- package/dist/ai-service/llm/context-v2/storage/event-types.js +7 -1
- package/dist/ai-service/llm/context-v2/storage/event-types.js.map +1 -1
- package/dist/ai-service/llm/stream/config.d.ts +30 -0
- package/dist/ai-service/llm/stream/config.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/config.js +34 -17
- package/dist/ai-service/llm/stream/config.js.map +1 -1
- package/dist/ai-service/llm/stream/errors.d.ts +10 -1
- package/dist/ai-service/llm/stream/errors.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/errors.js +3 -1
- package/dist/ai-service/llm/stream/errors.js.map +1 -1
- package/dist/ai-service/llm/stream/idle-monitor.d.ts +34 -4
- package/dist/ai-service/llm/stream/idle-monitor.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/idle-monitor.js +90 -6
- package/dist/ai-service/llm/stream/idle-monitor.js.map +1 -1
- package/dist/ai-service/llm/stream/index.d.ts +1 -1
- package/dist/ai-service/llm/stream/index.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/index.js.map +1 -1
- package/dist/ai-service/llm/stream/managed-stream.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/managed-stream.js +11 -0
- package/dist/ai-service/llm/stream/managed-stream.js.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.d.ts +19 -0
- package/dist/ai-service/llm/stream/orchestrator.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/orchestrator.js +387 -33
- package/dist/ai-service/llm/stream/orchestrator.js.map +1 -1
- package/dist/ai-service/llm/stream/retry-engine.d.ts +18 -2
- package/dist/ai-service/llm/stream/retry-engine.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/retry-engine.js +76 -3
- package/dist/ai-service/llm/stream/retry-engine.js.map +1 -1
- package/dist/ai-service/llm/stream/session.d.ts +6 -0
- package/dist/ai-service/llm/stream/session.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/session.js +28 -0
- package/dist/ai-service/llm/stream/session.js.map +1 -1
- package/dist/ai-service/llm/stream/types.d.ts +1 -0
- package/dist/ai-service/llm/stream/types.d.ts.map +1 -1
- package/dist/ai-service/llm/stream/wait-state-tracker.d.ts +54 -0
- package/dist/ai-service/llm/stream/wait-state-tracker.d.ts.map +1 -0
- package/dist/ai-service/llm/stream/wait-state-tracker.js +105 -0
- package/dist/ai-service/llm/stream/wait-state-tracker.js.map +1 -0
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js +13 -7
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +55 -43
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/flush-pending-chat-pushes.d.ts +11 -0
- package/dist/ai-service/state-machine/handlers/flush-pending-chat-pushes.d.ts.map +1 -0
- package/dist/ai-service/state-machine/handlers/flush-pending-chat-pushes.js +11 -0
- package/dist/ai-service/state-machine/handlers/flush-pending-chat-pushes.js.map +1 -0
- package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/llm-generating.js +10 -0
- package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
- package/dist/ai-service/state-machine/helpers/background-chat-record-metrics.d.ts +8 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record-metrics.d.ts.map +1 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record-metrics.js +52 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record-metrics.js.map +1 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record.d.ts +33 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record.d.ts.map +1 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record.js +61 -0
- package/dist/ai-service/state-machine/helpers/background-chat-record.js.map +1 -0
- package/dist/ai-service/state-machine/mocks.d.ts.map +1 -1
- package/dist/ai-service/state-machine/mocks.js +1 -0
- package/dist/ai-service/state-machine/mocks.js.map +1 -1
- package/dist/ai-service/tasks/peer-push.d.ts +7 -4
- package/dist/ai-service/tasks/peer-push.d.ts.map +1 -1
- package/dist/ai-service/tasks/peer-push.js +7 -4
- package/dist/ai-service/tasks/peer-push.js.map +1 -1
- package/dist/migration-templates/app-fullstack/package.json +1 -1
- package/dist/socket-manager.d.ts +2 -1
- package/dist/socket-manager.d.ts.map +1 -1
- package/dist/socket-manager.js +17 -6
- package/dist/socket-manager.js.map +1 -1
- package/dist/util/logger.d.ts +1 -0
- package/dist/util/logger.d.ts.map +1 -1
- package/dist/util/logger.js.map +1 -1
- package/package.json +8 -8
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { StallTimeoutError } from "./errors.js";
|
|
2
2
|
import type { StreamSession } from "./session.js";
|
|
3
|
+
/**
|
|
4
|
+
* An idle budget, either a fixed value or a thunk resolved at arm time. A thunk
|
|
5
|
+
* lets the budget track the CURRENT attempt's model across fallback, so a
|
|
6
|
+
* downgraded model is monitored against its own budget rather than the initial
|
|
7
|
+
* model's. See APPS-4775.
|
|
8
|
+
*/
|
|
9
|
+
export type TimeoutBudget = number | (() => number);
|
|
3
10
|
/**
|
|
4
11
|
* Detects when a stream has stalled (no chunks received within timeout).
|
|
5
12
|
*
|
|
@@ -26,15 +33,33 @@ import type { StreamSession } from "./session.js";
|
|
|
26
33
|
*/
|
|
27
34
|
export interface IdleMonitorOptions {
|
|
28
35
|
session: StreamSession;
|
|
29
|
-
maxIdleTimeMs:
|
|
36
|
+
maxIdleTimeMs: TimeoutBudget;
|
|
30
37
|
/**
|
|
31
38
|
* Budget for the first useful output event in each provider step. Defaults
|
|
32
39
|
* to `maxIdleTimeMs`. Set larger to tolerate server-side context compaction
|
|
33
40
|
* gaps after the compaction start event.
|
|
34
41
|
*/
|
|
35
|
-
firstChunkTimeoutMs?:
|
|
42
|
+
firstChunkTimeoutMs?: TimeoutBudget;
|
|
36
43
|
onStall?: (error: StallTimeoutError) => void;
|
|
37
44
|
onServerCompactionStart?: (blockId: string) => void;
|
|
45
|
+
/**
|
|
46
|
+
* Asked the instant the timer fires. When it returns true the gap is local
|
|
47
|
+
* work (a running tool, a step boundary, or the consumer holding the stream)
|
|
48
|
+
* rather than the provider going silent, so the monitor suppresses the stall
|
|
49
|
+
* and re-arms instead of firing. Returning false lets a genuine provider
|
|
50
|
+
* stall fire. See APPS-4605.
|
|
51
|
+
*/
|
|
52
|
+
shouldPause?: () => boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Called once when a stretch of local-wait suppression begins — the first
|
|
55
|
+
* timer fire that `shouldPause` turns into a re-arm rather than a stall. Not
|
|
56
|
+
* called again until real activity (a chunk, step, or retry) ends the stretch,
|
|
57
|
+
* so a healthy slow tool logs one event, not one per re-arm. This is the only
|
|
58
|
+
* stream-layer signal that a session has entered a long local wait (e.g. a
|
|
59
|
+
* tool that never returns), since no `stream_stall` is emitted for it. See
|
|
60
|
+
* APPS-4605.
|
|
61
|
+
*/
|
|
62
|
+
onPause?: () => void;
|
|
38
63
|
}
|
|
39
64
|
export declare class IdleMonitor {
|
|
40
65
|
private readonly session;
|
|
@@ -42,18 +67,23 @@ export declare class IdleMonitor {
|
|
|
42
67
|
private readonly firstChunkTimeoutMs;
|
|
43
68
|
private readonly onStallCallback?;
|
|
44
69
|
private readonly onServerCompactionStart?;
|
|
70
|
+
private readonly shouldPause?;
|
|
71
|
+
private readonly onPauseCallback?;
|
|
45
72
|
private timer;
|
|
46
73
|
private stallError;
|
|
47
74
|
private stallCallbacks;
|
|
48
75
|
private subscribed;
|
|
49
76
|
private hasReceivedChunk;
|
|
77
|
+
private pausedThisStretch;
|
|
50
78
|
private readonly compactionTextBlockIds;
|
|
79
|
+
private armedBudget;
|
|
51
80
|
constructor(options: IdleMonitorOptions);
|
|
81
|
+
private resolveBudget;
|
|
52
82
|
/**
|
|
53
83
|
* Active budget: the first-chunk budget until useful output arrives, then
|
|
54
|
-
* the inter-chunk idle budget.
|
|
84
|
+
* the inter-chunk idle budget. Resolved against the current model each call.
|
|
55
85
|
*/
|
|
56
|
-
private
|
|
86
|
+
private currentBudget;
|
|
57
87
|
/**
|
|
58
88
|
* Start the idle monitor. Arms the timer and subscribes to session events.
|
|
59
89
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-monitor.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/idle-monitor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"idle-monitor.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/idle-monitor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,aAAa,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,uBAAuB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;IAC5B;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgB;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAqC;IACtE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAA4B;IACrE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAa;IAC9C,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAS;IAGjC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAqB;IAI5D,OAAO,CAAC,WAAW,CAGjB;gBAEU,OAAO,EAAE,kBAAkB;IAWvC,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;;;;;;OAOG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACH,aAAa,IAAI,iBAAiB,GAAG,IAAI;IAIzC;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;IAU9B,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,WAAW,CAQjB;IAEF,OAAO,CAAC,eAAe,CAOrB;IAEF,OAAO,CAAC,WAAW,CAQjB;IAEF,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,SAAS;CAyElB"}
|
|
@@ -6,12 +6,24 @@ export class IdleMonitor {
|
|
|
6
6
|
firstChunkTimeoutMs;
|
|
7
7
|
onStallCallback;
|
|
8
8
|
onServerCompactionStart;
|
|
9
|
+
shouldPause;
|
|
10
|
+
onPauseCallback;
|
|
9
11
|
timer = null;
|
|
10
12
|
stallError = null;
|
|
11
13
|
stallCallbacks = [];
|
|
12
14
|
subscribed = false;
|
|
13
15
|
hasReceivedChunk = false;
|
|
16
|
+
// True once a local-wait suppression stretch has fired its onPause event;
|
|
17
|
+
// reset by real activity (chunk/step/retry) so each stretch logs exactly once.
|
|
18
|
+
pausedThisStretch = false;
|
|
14
19
|
compactionTextBlockIds = new Set();
|
|
20
|
+
// The budget snapshot used when the live timer was armed. fireStall() reports
|
|
21
|
+
// this rather than re-resolving, so the logged budget always matches the timer
|
|
22
|
+
// that actually fired even if the model (and thus the resolver) changed since.
|
|
23
|
+
armedBudget = {
|
|
24
|
+
timeoutMs: 0,
|
|
25
|
+
budgetKind: "first-chunk",
|
|
26
|
+
};
|
|
15
27
|
constructor(options) {
|
|
16
28
|
this.session = options.session;
|
|
17
29
|
this.maxIdleTimeMs = options.maxIdleTimeMs;
|
|
@@ -19,15 +31,26 @@ export class IdleMonitor {
|
|
|
19
31
|
options.firstChunkTimeoutMs ?? options.maxIdleTimeMs;
|
|
20
32
|
this.onStallCallback = options.onStall;
|
|
21
33
|
this.onServerCompactionStart = options.onServerCompactionStart;
|
|
34
|
+
this.shouldPause = options.shouldPause;
|
|
35
|
+
this.onPauseCallback = options.onPause;
|
|
36
|
+
}
|
|
37
|
+
resolveBudget(budget) {
|
|
38
|
+
return typeof budget === "function" ? budget() : budget;
|
|
22
39
|
}
|
|
23
40
|
/**
|
|
24
41
|
* Active budget: the first-chunk budget until useful output arrives, then
|
|
25
|
-
* the inter-chunk idle budget.
|
|
42
|
+
* the inter-chunk idle budget. Resolved against the current model each call.
|
|
26
43
|
*/
|
|
27
|
-
|
|
44
|
+
currentBudget() {
|
|
28
45
|
return this.hasReceivedChunk
|
|
29
|
-
?
|
|
30
|
-
|
|
46
|
+
? {
|
|
47
|
+
timeoutMs: this.resolveBudget(this.maxIdleTimeMs),
|
|
48
|
+
budgetKind: "inter-chunk",
|
|
49
|
+
}
|
|
50
|
+
: {
|
|
51
|
+
timeoutMs: this.resolveBudget(this.firstChunkTimeoutMs),
|
|
52
|
+
budgetKind: "first-chunk",
|
|
53
|
+
};
|
|
31
54
|
}
|
|
32
55
|
/**
|
|
33
56
|
* Start the idle monitor. Arms the timer and subscribes to session events.
|
|
@@ -35,6 +58,7 @@ export class IdleMonitor {
|
|
|
35
58
|
start() {
|
|
36
59
|
this.stallError = null;
|
|
37
60
|
this.hasReceivedChunk = false;
|
|
61
|
+
this.pausedThisStretch = false;
|
|
38
62
|
this.compactionTextBlockIds.clear();
|
|
39
63
|
this.session.resetActivityTimer();
|
|
40
64
|
this.subscribeToEvents();
|
|
@@ -79,6 +103,10 @@ export class IdleMonitor {
|
|
|
79
103
|
this.session.events.on("chunk", this.handleChunk);
|
|
80
104
|
this.session.events.on("step:start", this.handleStepStart);
|
|
81
105
|
this.session.events.on("retry", this.handleRetry);
|
|
106
|
+
// "retry" re-arms while session.provider is still the OLD model; "fallback"
|
|
107
|
+
// fires after the provider switch, so re-arming here picks up the new
|
|
108
|
+
// model's idle budget for the next attempt. See APPS-4775.
|
|
109
|
+
this.session.events.on("fallback", this.handleRetry);
|
|
82
110
|
this.session.events.on("session:complete", this.handleSessionEnd);
|
|
83
111
|
this.session.events.on("session:error", this.handleSessionEnd);
|
|
84
112
|
this.session.events.on("session:abort", this.handleSessionEnd);
|
|
@@ -89,12 +117,14 @@ export class IdleMonitor {
|
|
|
89
117
|
}
|
|
90
118
|
this.stallError = null;
|
|
91
119
|
this.stallCallbacks = [];
|
|
120
|
+
this.pausedThisStretch = false;
|
|
92
121
|
this.armTimer();
|
|
93
122
|
};
|
|
94
123
|
handleStepStart = () => {
|
|
95
124
|
this.hasReceivedChunk = false;
|
|
96
125
|
this.compactionTextBlockIds.clear();
|
|
97
126
|
this.stallError = null;
|
|
127
|
+
this.pausedThisStretch = false;
|
|
98
128
|
this.session.resetActivityTimer();
|
|
99
129
|
this.armTimer();
|
|
100
130
|
};
|
|
@@ -103,6 +133,7 @@ export class IdleMonitor {
|
|
|
103
133
|
this.compactionTextBlockIds.clear();
|
|
104
134
|
this.stallError = null;
|
|
105
135
|
this.stallCallbacks = [];
|
|
136
|
+
this.pausedThisStretch = false;
|
|
106
137
|
this.session.resetActivityTimer();
|
|
107
138
|
this.armTimer();
|
|
108
139
|
};
|
|
@@ -113,9 +144,11 @@ export class IdleMonitor {
|
|
|
113
144
|
if (this.timer !== null) {
|
|
114
145
|
clearTimeout(this.timer);
|
|
115
146
|
}
|
|
147
|
+
// Snapshot the budget once so the fired timer and the reported stall agree.
|
|
148
|
+
this.armedBudget = this.currentBudget();
|
|
116
149
|
this.timer = setTimeout(() => {
|
|
117
150
|
this.fireStall();
|
|
118
|
-
}, this.
|
|
151
|
+
}, this.armedBudget.timeoutMs);
|
|
119
152
|
}
|
|
120
153
|
keepsFirstChunkBudget(chunk) {
|
|
121
154
|
if (chunk.type === "raw" && this.compactionTextBlockIds.size > 0) {
|
|
@@ -142,8 +175,59 @@ export class IdleMonitor {
|
|
|
142
175
|
if (!this.session.isPending()) {
|
|
143
176
|
return;
|
|
144
177
|
}
|
|
178
|
+
// The timer fired on a wall-clock budget, but the gap may be local work —
|
|
179
|
+
// a running tool, a step boundary, or the consumer holding the stream —
|
|
180
|
+
// rather than the provider going silent. Re-check at fire time (state can
|
|
181
|
+
// flip between arming and firing): if we're in a local wait, leave
|
|
182
|
+
// stallError null and any waitForStall() promise pending, and just re-arm
|
|
183
|
+
// so the managed stream stays blocked on the same upstream read instead of
|
|
184
|
+
// surfacing a useless provider retry. A genuine provider silence that
|
|
185
|
+
// follows the local wait still fires on a later tick. See APPS-4605.
|
|
186
|
+
//
|
|
187
|
+
// There is no cap on how long this can keep re-arming: a healthy slow tool
|
|
188
|
+
// is allowed to run for as long as it takes. A tool that hangs forever is
|
|
189
|
+
// bounded externally instead — the parent abortSignal (the dev server
|
|
190
|
+
// request's own timeout / the user navigating away) cascades to
|
|
191
|
+
// "session:abort", which stops the monitor and tears the stream down. The
|
|
192
|
+
// onPause event below makes the long wait observable while it is happening.
|
|
193
|
+
//
|
|
194
|
+
// Guard the callback like the others below: fireStall() runs from a
|
|
195
|
+
// setTimeout, so a throw here would escape as an unhandled exception, the
|
|
196
|
+
// timer would never re-arm, and stall detection would be dead for the rest
|
|
197
|
+
// of the session. On error, fall through and fire the stall — a real stall
|
|
198
|
+
// surfacing is safer than one being silently swallowed.
|
|
199
|
+
let shouldPause = false;
|
|
200
|
+
try {
|
|
201
|
+
shouldPause = this.shouldPause?.() ?? false;
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// A shouldPause failure must not break stall monitoring.
|
|
205
|
+
}
|
|
206
|
+
if (shouldPause) {
|
|
207
|
+
// Emit one onPause event at the start of each suppression stretch so a
|
|
208
|
+
// long local wait (e.g. a tool that never returns) is observable, without
|
|
209
|
+
// logging on every re-arm. The flag clears on the next real chunk/step/
|
|
210
|
+
// retry, so a later stuck stretch emits again.
|
|
211
|
+
if (!this.pausedThisStretch) {
|
|
212
|
+
this.pausedThisStretch = true;
|
|
213
|
+
try {
|
|
214
|
+
this.onPauseCallback?.();
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
// A callback/logging failure must not break stall monitoring.
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
this.armTimer();
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
145
223
|
const idleTime = this.session.getTimeSinceLastActivity();
|
|
146
|
-
this.stallError = new StallTimeoutError(idleTime, this.
|
|
224
|
+
this.stallError = new StallTimeoutError(idleTime, this.armedBudget.timeoutMs, this.armedBudget.budgetKind);
|
|
225
|
+
// Invariant: run onStallCallback before resolving stallCallbacks. Both are
|
|
226
|
+
// synchronous, so both observe session state as it was at the instant of
|
|
227
|
+
// the stall — before the rejected waitForStall() promise propagates (a
|
|
228
|
+
// microtask) into the managed stream's catch and mutates that state. The
|
|
229
|
+
// stall_reason classifier (orchestrator onStall) relies on this to read
|
|
230
|
+
// session.isAwaitingUpstream() while it still reflects the stalled await.
|
|
147
231
|
try {
|
|
148
232
|
this.onStallCallback?.(this.stallError);
|
|
149
233
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-monitor.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/idle-monitor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"idle-monitor.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/idle-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
* ```
|
|
44
44
|
*/
|
|
45
45
|
export { StreamConfig, defaultFirstChunkTimeoutMs } from "./config.js";
|
|
46
|
-
export type { RetryConfigOptions, ProviderType, CoreModelType, FallbackStrategy, FallbackConfigOptions, } from "./config.js";
|
|
46
|
+
export type { RetryConfigOptions, RetryBudget, RetryBudgetResolver, ProviderType, CoreModelType, FallbackStrategy, FallbackConfigOptions, } from "./config.js";
|
|
47
47
|
export type { StreamObserver } from "./observer.js";
|
|
48
48
|
export { StreamOrchestrator } from "./orchestrator.js";
|
|
49
49
|
export { LoggingObserver, LLMObsObserver, ContextObserver, RetryNotificationObserver, wrapToolsForObservability, } from "./observers/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACvE,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACvE,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAavE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managed-stream.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/managed-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAE9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,SAAS,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAE9C,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC9B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,WAAW,GACvB,mBAAmB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"managed-stream.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/managed-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAE9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,SAAS,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAE9C,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC9B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,WAAW,GACvB,mBAAmB,CAAC,CAAC,CAAC,CAkIxB"}
|
|
@@ -50,7 +50,17 @@ export function createManagedStream(source, session, idleMonitor) {
|
|
|
50
50
|
// chunk arrives. See APPS-3460.
|
|
51
51
|
while (true) {
|
|
52
52
|
try {
|
|
53
|
+
// Stamp each iteration so ms_since_last_pull stays fresh across
|
|
54
|
+
// keep-alive loops for stall-log triage.
|
|
55
|
+
session.recordPull();
|
|
56
|
+
// We are now blocked on upstream. If the idle monitor fires while
|
|
57
|
+
// this await is pending, the stall is "network-dark"; once a chunk
|
|
58
|
+
// arrives and we hand off to the consumer, a subsequent stall is
|
|
59
|
+
// "consumer-blocked" (the consumer is holding the stream without
|
|
60
|
+
// pulling). See orchestrator onStall + session.isAwaitingUpstream.
|
|
61
|
+
session.setAwaitingUpstream(true);
|
|
53
62
|
const result = await raceWithStallDetection(iterator.next(), idleMonitor);
|
|
63
|
+
session.setAwaitingUpstream(false);
|
|
54
64
|
if (result.done) {
|
|
55
65
|
closed = true;
|
|
56
66
|
session.finalize("complete");
|
|
@@ -106,6 +116,7 @@ export function createManagedStream(source, session, idleMonitor) {
|
|
|
106
116
|
return;
|
|
107
117
|
}
|
|
108
118
|
catch (error) {
|
|
119
|
+
session.setAwaitingUpstream(false);
|
|
109
120
|
closed = true;
|
|
110
121
|
// no finalization, let wrapWithRetry handle it
|
|
111
122
|
controller.error(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managed-stream.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/managed-stream.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAIhF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,mBAAmB,CAGjC,MAA8B,EAC9B,OAAsB,EACtB,WAAwB;IAExB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;IAChD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAI;QACrC,KAAK,CAAC,IAAI,CAAC,UAAU;YACnB,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;gBACnC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YAED,sEAAsE;YACtE,uEAAuE;YACvE,kEAAkE;YAClE,uEAAuE;YACvE,yEAAyE;YACzE,0DAA0D;YAC1D,wEAAwE;YACxE,wEAAwE;YACxE,qEAAqE;YACrE,iBAAiB;YACjB,4DAA4D;YAC5D,mEAAmE;YACnE,8DAA8D;YAC9D,oEAAoE;YACpE,oEAAoE;YACpE,kEAAkE;YAClE,oCAAoC;YACpC,OAAO,IAAI,EAAE,CAAC;gBACZ,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,QAAQ,CAAC,IAAI,EAAE,EACf,WAAW,CACZ,CAAC;
|
|
1
|
+
{"version":3,"file":"managed-stream.js","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/managed-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,8 @@ export declare class StreamOrchestrator {
|
|
|
54
54
|
private readonly getJwt?;
|
|
55
55
|
constructor(options: StreamOrchestratorOptions);
|
|
56
56
|
execute<TOOLS extends Record<string, Tool>>(options: OrchestratorStreamTextOptions<TOOLS>): Promise<StreamTextResult<TOOLS>>;
|
|
57
|
+
private asAsyncIterableStream;
|
|
58
|
+
private textStreamFromFullStream;
|
|
57
59
|
/**
|
|
58
60
|
* Wraps a fullStream with retry logic. When an error occurs (either thrown or
|
|
59
61
|
* as an error chunk), makes a retry decision and either creates a new stream
|
|
@@ -72,6 +74,14 @@ export declare class StreamOrchestrator {
|
|
|
72
74
|
private startStreamWithRetry;
|
|
73
75
|
private wrapFinalError;
|
|
74
76
|
private startStream;
|
|
77
|
+
/**
|
|
78
|
+
* Wraps each tool's execute so only the live attempt can run it. The Vercel AI
|
|
79
|
+
* SDK auto-executes tools as their calls arrive on the provider stream, and a
|
|
80
|
+
* superseded attempt's stream can still deliver buffered tool calls after we
|
|
81
|
+
* abort it. Throwing AbortedError here ensures a terminal tool's real side
|
|
82
|
+
* effect (e.g. build_finalize) runs once, for the winning attempt only.
|
|
83
|
+
*/
|
|
84
|
+
private guardToolsForAttempt;
|
|
75
85
|
private applyProvider;
|
|
76
86
|
/**
|
|
77
87
|
* Replaces the thinking-related fields on `providerOptions.anthropic` and
|
|
@@ -82,6 +92,15 @@ export declare class StreamOrchestrator {
|
|
|
82
92
|
*/
|
|
83
93
|
private rebuildThinkingOptions;
|
|
84
94
|
private getFallbackReason;
|
|
95
|
+
/**
|
|
96
|
+
* Switch the session to a fallback provider, emit the structured switch log,
|
|
97
|
+
* and fire the "fallback" event. `fastFallback` distinguishes the stall
|
|
98
|
+
* fast-fallback path (a stall left the provider early) from a normal
|
|
99
|
+
* provider-exhaustion fallback, surfaced as a queryable Datadog facet so the
|
|
100
|
+
* fast-fallback behavior is verifiable in production. Error context for the
|
|
101
|
+
* triggering error is carried by the retry log that follows this call.
|
|
102
|
+
*/
|
|
103
|
+
private switchProvider;
|
|
85
104
|
private delay;
|
|
86
105
|
}
|
|
87
106
|
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/orchestrator.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAGxD,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../../src/ai-service/llm/stream/orchestrator.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAGxD,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMpD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,MAAM,6BAA6B,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAC1E,iBAAiB,CAAC,KAAK,CAAC,GAAG;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AA+DJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA2B;gBAEvC,OAAO,EAAE,yBAAyB;IAUxC,OAAO,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAC9C,OAAO,EAAE,6BAA6B,CAAC,KAAK,CAAC,GAC5C,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IA2SnC,OAAO,CAAC,qBAAqB;IA4B7B,OAAO,CAAC,wBAAwB;IAiChC;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAuErB;;;OAGG;YACW,mBAAmB;YA6EnB,oBAAoB;IAuElC,OAAO,CAAC,cAAc;YA6BR,WAAW;IAkFzB;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,aAAa;IA2DrB;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAuE9B,OAAO,CAAC,iBAAiB;IAQzB;;;;;;;OAOG;YACW,cAAc;IAuC5B,OAAO,CAAC,KAAK;CAmBd"}
|