@aexol/spectral 0.9.211 → 0.9.215
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/agent/agents.d.ts.map +1 -1
- package/dist/agent/agents.js +40 -0
- package/dist/backend/generated-images.d.ts +90 -0
- package/dist/backend/generated-images.d.ts.map +1 -0
- package/dist/backend/generated-images.js +214 -0
- package/dist/backend/machine-routing.d.ts +25 -0
- package/dist/backend/machine-routing.d.ts.map +1 -0
- package/dist/backend/machine-routing.js +35 -0
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +31 -6
- package/dist/extensions/browser/browser-service.d.ts +75 -1
- package/dist/extensions/browser/browser-service.d.ts.map +1 -1
- package/dist/extensions/browser/browser-service.js +600 -34
- package/dist/extensions/browser/index.d.ts +10 -4
- package/dist/extensions/browser/index.d.ts.map +1 -1
- package/dist/extensions/browser/index.js +44 -5
- package/dist/extensions/browser/stream/stream-tool.d.ts +10 -0
- package/dist/extensions/browser/stream/stream-tool.d.ts.map +1 -1
- package/dist/extensions/browser/stream/stream-tool.js +42 -14
- package/dist/extensions/browser/tools/core.d.ts.map +1 -1
- package/dist/extensions/browser/tools/core.js +63 -2
- package/dist/extensions/desktop-control/index.d.ts +55 -0
- package/dist/extensions/desktop-control/index.d.ts.map +1 -0
- package/dist/extensions/desktop-control/index.js +633 -0
- package/dist/extensions/desktop-control/keys.d.ts +33 -0
- package/dist/extensions/desktop-control/keys.d.ts.map +1 -0
- package/dist/extensions/desktop-control/keys.js +170 -0
- package/dist/extensions/desktop-control/linux.d.ts +26 -0
- package/dist/extensions/desktop-control/linux.d.ts.map +1 -0
- package/dist/extensions/desktop-control/linux.js +195 -0
- package/dist/extensions/desktop-control/macos.d.ts +53 -0
- package/dist/extensions/desktop-control/macos.d.ts.map +1 -0
- package/dist/extensions/desktop-control/macos.js +382 -0
- package/dist/extensions/desktop-control/safety.d.ts +89 -0
- package/dist/extensions/desktop-control/safety.d.ts.map +1 -0
- package/dist/extensions/desktop-control/safety.js +157 -0
- package/dist/extensions/desktop-control/types.d.ts +79 -0
- package/dist/extensions/desktop-control/types.d.ts.map +1 -0
- package/dist/extensions/desktop-control/types.js +10 -0
- package/dist/extensions/desktop-control/windows.d.ts +31 -0
- package/dist/extensions/desktop-control/windows.d.ts.map +1 -0
- package/dist/extensions/desktop-control/windows.js +276 -0
- package/dist/extensions/desktop-screenshot/index.d.ts +103 -0
- package/dist/extensions/desktop-screenshot/index.d.ts.map +1 -1
- package/dist/extensions/desktop-screenshot/index.js +363 -17
- package/dist/extensions/image-generation/index.d.ts.map +1 -1
- package/dist/extensions/image-generation/index.js +133 -34
- package/dist/extensions/seo/index.d.ts.map +1 -1
- package/dist/extensions/seo/index.js +4 -0
- package/dist/extensions/seo/tools/backend-bridge.d.ts +4 -0
- package/dist/extensions/seo/tools/backend-bridge.d.ts.map +1 -0
- package/dist/extensions/seo/tools/backend-bridge.js +378 -0
- package/dist/extensions/seo/tools/full-audit.d.ts +2 -0
- package/dist/extensions/seo/tools/full-audit.d.ts.map +1 -1
- package/dist/extensions/seo/tools/full-audit.js +1 -1
- package/dist/extensions/seo/tools/report.d.ts +10 -0
- package/dist/extensions/seo/tools/report.d.ts.map +1 -1
- package/dist/extensions/seo/tools/report.js +1 -1
- package/dist/extensions/spectral-vision-fallback.d.ts.map +1 -1
- package/dist/extensions/spectral-vision-fallback.js +11 -1
- package/dist/generated/zeus/const.d.ts.map +1 -1
- package/dist/generated/zeus/const.js +148 -4
- package/dist/generated/zeus/index.d.ts +649 -0
- package/dist/generated/zeus/index.d.ts.map +1 -1
- package/dist/mcp/tool-registrar.d.ts.map +1 -1
- package/dist/mcp/tool-registrar.js +5 -2
- package/dist/mcp/types.d.ts +5 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/relay/client.d.ts +11 -0
- package/dist/relay/client.d.ts.map +1 -1
- package/dist/relay/client.js +24 -6
- package/dist/relay/dispatcher.d.ts +12 -1
- package/dist/relay/dispatcher.d.ts.map +1 -1
- package/dist/relay/dispatcher.js +44 -42
- package/dist/sdk/ai/providers/faux.js +1 -1
- package/dist/sdk/ai/providers/openai-completions.d.ts.map +1 -1
- package/dist/sdk/ai/providers/openai-completions.js +57 -16
- package/dist/sdk/ai/providers/openrouter-images.d.ts.map +1 -1
- package/dist/sdk/ai/providers/openrouter-images.js +45 -9
- package/dist/sdk/ai/providers/simple-options.d.ts.map +1 -1
- package/dist/sdk/ai/providers/simple-options.js +2 -0
- package/dist/sdk/ai/types.d.ts +37 -1
- package/dist/sdk/ai/types.d.ts.map +1 -1
- package/dist/sdk/ai/utils/image-source.d.ts +121 -0
- package/dist/sdk/ai/utils/image-source.d.ts.map +1 -0
- package/dist/sdk/ai/utils/image-source.js +410 -0
- package/dist/sdk/coding-agent/core/extensions/native-extensions.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/extensions/native-extensions.js +14 -0
- package/dist/sdk/coding-agent/core/extensions/types.d.ts +9 -0
- package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/system-prompt.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/system-prompt.js +15 -9
- package/dist/sdk/coding-agent/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/sdk/coding-agent/modes/rpc/rpc-mode.js +16 -3
- package/dist/sdk/coding-agent/utils/image-resize.d.ts.map +1 -1
- package/dist/sdk/coding-agent/utils/image-resize.js +7 -3
- package/dist/server/agent-bridge.d.ts +14 -0
- package/dist/server/agent-bridge.d.ts.map +1 -1
- package/dist/server/agent-bridge.js +105 -26
- package/dist/server/handlers/queue.d.ts.map +1 -1
- package/dist/server/handlers/queue.js +11 -34
- package/dist/server/image-attachments.d.ts +109 -0
- package/dist/server/image-attachments.d.ts.map +1 -0
- package/dist/server/image-attachments.js +195 -0
- package/dist/server/session-stream.d.ts +69 -0
- package/dist/server/session-stream.d.ts.map +1 -1
- package/dist/server/session-stream.js +388 -32
- package/dist/server/storage.d.ts.map +1 -1
- package/dist/server/storage.js +10 -31
- package/dist/server/ui/terminal-confirm.d.ts +145 -0
- package/dist/server/ui/terminal-confirm.d.ts.map +1 -0
- package/dist/server/ui/terminal-confirm.js +333 -0
- package/dist/server/wire.d.ts +30 -5
- package/dist/server/wire.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -50,6 +50,7 @@ import { setProjectObsStore } from "../memory/project-observations-store.js";
|
|
|
50
50
|
import { estimateStringTokens } from "../memory/tokens.js";
|
|
51
51
|
import { reflectionContent, reflectionId, } from "../memory/types.js";
|
|
52
52
|
import { humanizeProviderError } from "./error-humanizer.js";
|
|
53
|
+
import { estimateImagesTokens, parseImagesJson, } from "./image-attachments.js";
|
|
53
54
|
/**
|
|
54
55
|
* Extract the `creditsUsed` value from a `token_usage` event embedded in an
|
|
55
56
|
* events JSONL string. Returns `null` if no `token_usage` event is present
|
|
@@ -84,8 +85,68 @@ const MAX_LOOP_ITERATIONS = 100;
|
|
|
84
85
|
// `stream.currentTurn` stays non-null forever. On reconnect, `session_ready`
|
|
85
86
|
// then reports `currentTurn != null`, so landing shows a phantom "streaming"
|
|
86
87
|
// status. This timer clears the stale turn and emits a synthetic `agent_end`
|
|
87
|
-
// after
|
|
88
|
-
|
|
88
|
+
// after 30 minutes of silence on streaming-meaningful events.
|
|
89
|
+
//
|
|
90
|
+
// Configurable via `SPECTRAL_TURN_SILENCE_TIMEOUT_MS`:
|
|
91
|
+
// * unset / empty / not-a-number / negative -> 30 minutes (default)
|
|
92
|
+
// * `0` -> DISABLED, the timer is never armed (official opt-out)
|
|
93
|
+
// * a positive fraction (e.g. `0.5`) is rounded UP to 1ms so it can never
|
|
94
|
+
// accidentally disable the safety net
|
|
95
|
+
// * anything larger than Node's max delay is clamped (see below)
|
|
96
|
+
const DEFAULT_TURN_SILENCE_TIMEOUT_MS = 30 * 60 * 1000;
|
|
97
|
+
/**
|
|
98
|
+
* Node emits `TimeoutOverflowWarning` and fires immediately for delays above
|
|
99
|
+
* this value, so anything larger is clamped to it.
|
|
100
|
+
*/
|
|
101
|
+
const MAX_TIMEOUT_DELAY_MS = 2_147_483_647;
|
|
102
|
+
/**
|
|
103
|
+
* Upper bound on how many times the silence timer may be re-armed instead of
|
|
104
|
+
* closing the turn while a subagent is still running. Guards against a
|
|
105
|
+
* counter stuck at >0 forever (e.g. a `subagent_end` that never arrives after
|
|
106
|
+
* a crash) turning the safety net off permanently.
|
|
107
|
+
* `SPECTRAL_TURN_SILENCE_MAX_REARM=0` means unlimited re-arms.
|
|
108
|
+
*/
|
|
109
|
+
const DEFAULT_TURN_SILENCE_MAX_REARM = 8;
|
|
110
|
+
/**
|
|
111
|
+
* Sanity clamp for `SPECTRAL_TURN_SILENCE_MAX_REARM`. Even with the shortest
|
|
112
|
+
* useful timeout this is days of silence, so a typo like `1e10` cannot keep a
|
|
113
|
+
* hung turn open effectively forever.
|
|
114
|
+
*/
|
|
115
|
+
const MAX_TURN_SILENCE_MAX_REARM = 1000;
|
|
116
|
+
function resolveTurnSilenceTimeoutMs() {
|
|
117
|
+
const raw = process.env.SPECTRAL_TURN_SILENCE_TIMEOUT_MS;
|
|
118
|
+
if (raw === undefined || raw.trim() === "") {
|
|
119
|
+
return DEFAULT_TURN_SILENCE_TIMEOUT_MS;
|
|
120
|
+
}
|
|
121
|
+
const parsed = Number(raw);
|
|
122
|
+
// `0` is the documented way to switch the safety net off entirely.
|
|
123
|
+
if (parsed === 0)
|
|
124
|
+
return 0;
|
|
125
|
+
if (!Number.isFinite(parsed) || parsed < 0) {
|
|
126
|
+
return DEFAULT_TURN_SILENCE_TIMEOUT_MS;
|
|
127
|
+
}
|
|
128
|
+
// `Math.max(1, ...)`: a fractional value such as `0.5` must floor to 1ms,
|
|
129
|
+
// not to 0 — flooring to 0 would silently switch the safety net off.
|
|
130
|
+
return Math.min(Math.max(1, Math.floor(parsed)), MAX_TIMEOUT_DELAY_MS);
|
|
131
|
+
}
|
|
132
|
+
function resolveTurnSilenceMaxRearm() {
|
|
133
|
+
const raw = process.env.SPECTRAL_TURN_SILENCE_MAX_REARM;
|
|
134
|
+
// Empty / whitespace-only must NOT fall through to `Number(...)`, which
|
|
135
|
+
// coerces `""` to `0` and would therefore mean "unlimited re-arms" —
|
|
136
|
+
// i.e. the original "phantom streaming forever" bug.
|
|
137
|
+
if (raw === undefined || raw.trim() === "") {
|
|
138
|
+
return DEFAULT_TURN_SILENCE_MAX_REARM;
|
|
139
|
+
}
|
|
140
|
+
const parsed = Number(raw);
|
|
141
|
+
// `0` is the documented way to allow unlimited re-arms (opt-out of the
|
|
142
|
+
// re-arm budget).
|
|
143
|
+
if (parsed === 0)
|
|
144
|
+
return 0;
|
|
145
|
+
if (!Number.isFinite(parsed) || parsed < 0) {
|
|
146
|
+
return DEFAULT_TURN_SILENCE_MAX_REARM;
|
|
147
|
+
}
|
|
148
|
+
return Math.min(Math.max(1, Math.floor(parsed)), MAX_TURN_SILENCE_MAX_REARM);
|
|
149
|
+
}
|
|
89
150
|
// Streaming-meaningful events that reset the silence timer while a turn is
|
|
90
151
|
// active. Mirrors Fix C on the landing side, but EXCLUDES `token_usage`
|
|
91
152
|
// (arrives post-turn) and excludes terminal/control events handled by their
|
|
@@ -102,7 +163,17 @@ const STREAMING_MEANINGFUL_EVENT_TYPES = new Set([
|
|
|
102
163
|
"tool_result",
|
|
103
164
|
"message_end",
|
|
104
165
|
"subagent_start",
|
|
166
|
+
// WARNING: `subagent_progress` only resets the timer if it is ALSO
|
|
167
|
+
// replayable. The re-arm below lives inside `if (isReplayable(event))`,
|
|
168
|
+
// and `subagent_progress` is deliberately live-only (see `isReplayable`),
|
|
169
|
+
// so this entry is currently inert — `subagent_tool_progress` is the
|
|
170
|
+
// subagent heartbeat that actually works. Do not rely on this entry until
|
|
171
|
+
// the re-arm is hoisted out of the `isReplayable` gate.
|
|
105
172
|
"subagent_progress",
|
|
173
|
+
// `subagent_tool_progress` is the only live signal a subagent emits while
|
|
174
|
+
// it sits inside one long tool call (bash build/test). Without it a busy
|
|
175
|
+
// but "quiet" subagent looks like silence and the turn gets closed.
|
|
176
|
+
"subagent_tool_progress",
|
|
106
177
|
"subagent_end",
|
|
107
178
|
]);
|
|
108
179
|
/**
|
|
@@ -162,7 +233,7 @@ function persistObservationalMemorySnapshot(store, sessionId, bridge) {
|
|
|
162
233
|
function estimateStoredMessageReplayTokens(message) {
|
|
163
234
|
return (estimateStringTokens(message.content) +
|
|
164
235
|
estimateStringTokens(message.events) +
|
|
165
|
-
(message.images
|
|
236
|
+
estimateImagesTokens(message.images));
|
|
166
237
|
}
|
|
167
238
|
function formatCompactionTokenStats(event) {
|
|
168
239
|
const parts = [];
|
|
@@ -747,6 +818,155 @@ export class SessionStreamManager {
|
|
|
747
818
|
}
|
|
748
819
|
await Promise.all(promises);
|
|
749
820
|
}
|
|
821
|
+
/**
|
|
822
|
+
* Hot-reload extension settings (`settings.json`) on every idle, attached
|
|
823
|
+
* session so enabling/disabling a native extension takes effect without
|
|
824
|
+
* restarting the session or waiting for a new session to be created.
|
|
825
|
+
*
|
|
826
|
+
* Busy sessions (in-flight turn, compaction, loop, pending continuation,
|
|
827
|
+
* or a `prompt()` dispatch in progress) are SKIPPED, never queued: the
|
|
828
|
+
* reload swaps the tool registry / extension runner underneath the
|
|
829
|
+
* running turn, so a dispatched tool can resolve against a torn-down
|
|
830
|
+
* runner. Those sessions pick up the new settings the next time a
|
|
831
|
+
* bridge/session is constructed (or on the next explicit refresh while
|
|
832
|
+
* idle, or — via `pendingExtensionsReload` — at their next prompt).
|
|
833
|
+
*
|
|
834
|
+
* Failures are isolated per stream — one broken session (including one
|
|
835
|
+
* whose bridge throws synchronously) must not abort the remaining
|
|
836
|
+
* reloads. Failed streams are re-marked pending so the reload is retried
|
|
837
|
+
* at their next `prompt()`.
|
|
838
|
+
*
|
|
839
|
+
* Concurrent triggers for the same stream share a single reload (the
|
|
840
|
+
* in-flight promise is stored on the stream) — see
|
|
841
|
+
* `reloadStreamExtensions()`.
|
|
842
|
+
*
|
|
843
|
+
* Returns the number of streams reloaded and deferred.
|
|
844
|
+
*/
|
|
845
|
+
async reloadExtensions() {
|
|
846
|
+
let reloaded = 0;
|
|
847
|
+
let deferred = 0;
|
|
848
|
+
const promises = [];
|
|
849
|
+
for (const stream of this.streams.values()) {
|
|
850
|
+
if (!stream.bridge?.reloadExtensions)
|
|
851
|
+
continue;
|
|
852
|
+
// Never reload during an in-flight turn — see the doc comment above.
|
|
853
|
+
// `dispatching` closes the R1 window inside `prompt()` between its
|
|
854
|
+
// idle check and `currentTurn` being armed.
|
|
855
|
+
if (this.isReloadBlocked(stream)) {
|
|
856
|
+
// Skip, don't queue: the change is applied before the next prompt.
|
|
857
|
+
stream.pendingExtensionsReload = true;
|
|
858
|
+
deferred++;
|
|
859
|
+
continue;
|
|
860
|
+
}
|
|
861
|
+
// Shared (already in-flight) reloads are accounted for by the caller
|
|
862
|
+
// that started them — we only wait for them here.
|
|
863
|
+
const shared = stream.reloadingExtensions != null;
|
|
864
|
+
const pending = this.reloadStreamExtensions(stream);
|
|
865
|
+
if (shared) {
|
|
866
|
+
promises.push(Promise.resolve(pending).then(() => undefined));
|
|
867
|
+
continue;
|
|
868
|
+
}
|
|
869
|
+
promises.push(pending.then((result) => {
|
|
870
|
+
if (result.status === "reloaded") {
|
|
871
|
+
reloaded++;
|
|
872
|
+
this.broadcast(stream, {
|
|
873
|
+
type: "agent_notification",
|
|
874
|
+
level: "info",
|
|
875
|
+
system: "extension",
|
|
876
|
+
message: "Extensions reloaded from settings",
|
|
877
|
+
});
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
deferred++;
|
|
881
|
+
if (result.status === "skipped")
|
|
882
|
+
return;
|
|
883
|
+
const err = result.error;
|
|
884
|
+
console.warn(`[spectral] warn: extension reload failed for ${stream.sessionId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
885
|
+
this.broadcast(stream, {
|
|
886
|
+
type: "agent_notification",
|
|
887
|
+
level: "warning",
|
|
888
|
+
system: "extension",
|
|
889
|
+
message: `Extension reload failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
890
|
+
});
|
|
891
|
+
}));
|
|
892
|
+
}
|
|
893
|
+
await Promise.all(promises);
|
|
894
|
+
return { reloaded, deferred };
|
|
895
|
+
}
|
|
896
|
+
/**
|
|
897
|
+
* True when an extension hot-reload must not touch this stream right now:
|
|
898
|
+
* a turn is in flight, a `prompt()` dispatch is in progress (R1), or the
|
|
899
|
+
* session is otherwise busy (compaction, loop, pending continuation).
|
|
900
|
+
*/
|
|
901
|
+
isReloadBlocked(stream) {
|
|
902
|
+
return (stream.currentTurn !== null ||
|
|
903
|
+
stream.dispatching === true ||
|
|
904
|
+
this.computeBusy(stream));
|
|
905
|
+
}
|
|
906
|
+
/**
|
|
907
|
+
* Hot-reload extension settings on ONE stream, deduped.
|
|
908
|
+
*
|
|
909
|
+
* Dedupe (R5): while a reload for this stream is in flight, every caller
|
|
910
|
+
* (REST refresh racing a `config_patch`, or `prompt()`) awaits the same
|
|
911
|
+
* promise, so the session is reloaded exactly once. The slot is released
|
|
912
|
+
* when the reload settles.
|
|
913
|
+
*
|
|
914
|
+
* Never rejects: the outcome is returned so the caller can decide how to
|
|
915
|
+
* notify. On success `pendingExtensionsReload` is cleared (R3); on failure
|
|
916
|
+
* it is re-armed so the reload is retried at the next `prompt()` (R4).
|
|
917
|
+
*/
|
|
918
|
+
reloadStreamExtensions(stream) {
|
|
919
|
+
const inFlight = stream.reloadingExtensions;
|
|
920
|
+
if (inFlight)
|
|
921
|
+
return inFlight;
|
|
922
|
+
const run = (async () => {
|
|
923
|
+
// R2: a bridge whose `start()` hasn't resolved yet has no
|
|
924
|
+
// `AgentSession`, so `reloadExtensions()` would be a silent no-op
|
|
925
|
+
// (counted as reloaded + a false notification) and could interleave
|
|
926
|
+
// with `bindExtensions`. Wait for start first — best-effort, a failed
|
|
927
|
+
// start is handled below.
|
|
928
|
+
if (stream.started !== true) {
|
|
929
|
+
await Promise.resolve(stream.ready).catch(() => undefined);
|
|
930
|
+
}
|
|
931
|
+
if (stream.started !== true) {
|
|
932
|
+
// Start never resolved (still starting, or it failed): there is no
|
|
933
|
+
// session to reload, and the next bridge/session built for this
|
|
934
|
+
// stream reads current settings when it is constructed.
|
|
935
|
+
stream.pendingExtensionsReload = false;
|
|
936
|
+
return { status: "skipped", reason: "bridge not started" };
|
|
937
|
+
}
|
|
938
|
+
// The stream may have become busy while we waited for `start()`.
|
|
939
|
+
if (this.isReloadBlocked(stream)) {
|
|
940
|
+
stream.pendingExtensionsReload = true;
|
|
941
|
+
return { status: "skipped", reason: "session is busy" };
|
|
942
|
+
}
|
|
943
|
+
const reload = stream.bridge?.reloadExtensions;
|
|
944
|
+
if (!reload) {
|
|
945
|
+
return { status: "skipped", reason: "bridge has no reloadExtensions" };
|
|
946
|
+
}
|
|
947
|
+
try {
|
|
948
|
+
// R4: `Promise.resolve().then(...)` so a SYNCHRONOUS throw from
|
|
949
|
+
// reload() becomes a rejection we can isolate to this stream
|
|
950
|
+
// instead of escaping and aborting the whole reload loop.
|
|
951
|
+
await Promise.resolve().then(() => reload.call(stream.bridge));
|
|
952
|
+
}
|
|
953
|
+
catch (err) {
|
|
954
|
+
// Remember it: `prompt()` retries before arming the next turn.
|
|
955
|
+
stream.pendingExtensionsReload = true;
|
|
956
|
+
return { status: "failed", error: err };
|
|
957
|
+
}
|
|
958
|
+
// R3: satisfied — `prompt()` must not redo this reload.
|
|
959
|
+
stream.pendingExtensionsReload = false;
|
|
960
|
+
return { status: "reloaded" };
|
|
961
|
+
})();
|
|
962
|
+
const tracked = run.finally(() => {
|
|
963
|
+
if (stream.reloadingExtensions === tracked) {
|
|
964
|
+
stream.reloadingExtensions = undefined;
|
|
965
|
+
}
|
|
966
|
+
});
|
|
967
|
+
stream.reloadingExtensions = tracked;
|
|
968
|
+
return tracked;
|
|
969
|
+
}
|
|
750
970
|
/**
|
|
751
971
|
* Push a new session-level primary-agent override to the running bridge
|
|
752
972
|
* (if any) without restarting it. The `before_agent_start` hook reads the
|
|
@@ -1016,9 +1236,29 @@ export class SessionStreamManager {
|
|
|
1016
1236
|
async prompt(sessionId, content, modelId, images, reasoningEffort, opts) {
|
|
1017
1237
|
if (this.disposed)
|
|
1018
1238
|
throw new Error("SessionStreamManager disposed");
|
|
1019
|
-
|
|
1239
|
+
const stream = this.streams.get(sessionId);
|
|
1020
1240
|
if (!stream)
|
|
1021
1241
|
throw new Error(`No active stream for session: ${sessionId}`);
|
|
1242
|
+
// R1: make the dispatch visible SYNCHRONOUSLY — before any `await` — so
|
|
1243
|
+
// `reloadExtensions()` can never see this stream as idle inside the
|
|
1244
|
+
// await window below (`await stream.ready`, deferred reload,
|
|
1245
|
+
// `setModel`) i.e. before `currentTurn` is armed. Counts as busy (see
|
|
1246
|
+
// `resolveRunState`). Cleared in the `finally` below — which covers
|
|
1247
|
+
// every exit path (normal arming, every early return, and throws).
|
|
1248
|
+
stream.dispatching = true;
|
|
1249
|
+
try {
|
|
1250
|
+
await this.dispatchPrompt(stream, sessionId, content, modelId, images, reasoningEffort, opts);
|
|
1251
|
+
}
|
|
1252
|
+
finally {
|
|
1253
|
+
stream.dispatching = false;
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1256
|
+
/**
|
|
1257
|
+
* Body of `prompt()` — everything that happens after the stream is
|
|
1258
|
+
* resolved and the dispatch marker is armed. Split out so `prompt()` can
|
|
1259
|
+
* clear the marker in a `finally` (see R1 in `prompt()`).
|
|
1260
|
+
*/
|
|
1261
|
+
async dispatchPrompt(stream, sessionId, content, modelId, images, reasoningEffort, opts) {
|
|
1022
1262
|
// Guard: block new prompts while compaction is running. Compaction
|
|
1023
1263
|
// takes ~1 LLM call (<5 s) and the bridge emits a clear error message
|
|
1024
1264
|
// so the user knows to wait a moment.
|
|
@@ -1077,7 +1317,16 @@ export class SessionStreamManager {
|
|
|
1077
1317
|
};
|
|
1078
1318
|
stream.bridge = this.bridgeFactory(bridgeOpts);
|
|
1079
1319
|
stream.startError = null;
|
|
1080
|
-
|
|
1320
|
+
// A freshly constructed bridge/session already reads current settings,
|
|
1321
|
+
// so any deferred extension reload is satisfied by the rebuild itself.
|
|
1322
|
+
stream.pendingExtensionsReload = false;
|
|
1323
|
+
stream.started = false;
|
|
1324
|
+
stream.ready = stream.bridge
|
|
1325
|
+
.start()
|
|
1326
|
+
.then(() => {
|
|
1327
|
+
stream.started = true;
|
|
1328
|
+
})
|
|
1329
|
+
.catch((err) => {
|
|
1081
1330
|
const e = err instanceof Error ? err : new Error(String(err));
|
|
1082
1331
|
stream.startError = e;
|
|
1083
1332
|
this.broadcast(stream, {
|
|
@@ -1100,6 +1349,35 @@ export class SessionStreamManager {
|
|
|
1100
1349
|
});
|
|
1101
1350
|
return;
|
|
1102
1351
|
}
|
|
1352
|
+
// R5: an extension reload may already be in flight (a `config_patch`
|
|
1353
|
+
// raced this prompt). Wait for it instead of starting a second one.
|
|
1354
|
+
if (stream.reloadingExtensions) {
|
|
1355
|
+
await stream.reloadingExtensions.catch(() => undefined);
|
|
1356
|
+
}
|
|
1357
|
+
// Deferred extension hot-reload: an extension setting changed while this
|
|
1358
|
+
// session was busy, so `reloadExtensions()` skipped it (or it failed).
|
|
1359
|
+
// Apply it now — the bridge is ready and no turn is in flight yet.
|
|
1360
|
+
if (stream.pendingExtensionsReload) {
|
|
1361
|
+
stream.pendingExtensionsReload = false;
|
|
1362
|
+
// This dispatch is the reload's owner: no turn is armed yet, so it is
|
|
1363
|
+
// safe. Drop the marker while we reload — it only exists to keep
|
|
1364
|
+
// CONCURRENT triggers out of this window, not this one.
|
|
1365
|
+
stream.dispatching = false;
|
|
1366
|
+
try {
|
|
1367
|
+
const result = await this.reloadStreamExtensions(stream);
|
|
1368
|
+
if (result.status === "failed") {
|
|
1369
|
+
console.warn(`[spectral] warn: deferred extension reload failed for ${sessionId}: ${result.error instanceof Error
|
|
1370
|
+
? result.error.message
|
|
1371
|
+
: String(result.error)}`);
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
1374
|
+
catch (err) {
|
|
1375
|
+
console.warn(`[spectral] warn: deferred extension reload failed for ${sessionId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
1376
|
+
}
|
|
1377
|
+
finally {
|
|
1378
|
+
stream.dispatching = true;
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
1103
1381
|
// Sticky-model resolution & application. Phase 3 (Available Models
|
|
1104
1382
|
// whitelist). Order:
|
|
1105
1383
|
// a) If envelope carried a `modelId`, use it.
|
|
@@ -1207,6 +1485,9 @@ export class SessionStreamManager {
|
|
|
1207
1485
|
// next-turn events (including the upcoming `message_start`) are not
|
|
1208
1486
|
// rejected. The fence is re-armed if this turn later closes.
|
|
1209
1487
|
stream.closedTurnGeneration = null;
|
|
1488
|
+
// Fresh run: drop any subagent tracking left over from a previous turn
|
|
1489
|
+
// that ended without a matching `subagent_end`.
|
|
1490
|
+
this.resetSubagentTracking(stream);
|
|
1210
1491
|
// New logical run. This is the only place `busy` transitions
|
|
1211
1492
|
// false -> true (loop iterations and auto-dequeue also go through
|
|
1212
1493
|
// `prompt()`). Retries/continuations do NOT bump the generation.
|
|
@@ -1225,6 +1506,8 @@ export class SessionStreamManager {
|
|
|
1225
1506
|
};
|
|
1226
1507
|
stream.pendingContinue = false;
|
|
1227
1508
|
this.emitRunState(stream);
|
|
1509
|
+
// R1: the turn is armed, so `busy` is now carried by `currentTurn`;
|
|
1510
|
+
// `prompt()`'s `finally` clears the dispatch marker.
|
|
1228
1511
|
// 4. Fire spectral. `prompt` resolves on agent_end; errors inside
|
|
1229
1512
|
// AgentBridge are caught and emitted as wire errors. Synchronous throws
|
|
1230
1513
|
// (e.g. disposed bridge, missing session) arrive as a rejected promise
|
|
@@ -1324,6 +1607,9 @@ export class SessionStreamManager {
|
|
|
1324
1607
|
// the synthetic agent_end below isn't later double-emitted by a stale
|
|
1325
1608
|
// timer.
|
|
1326
1609
|
this.clearCurrentTurnSilenceTimer(stream);
|
|
1610
|
+
// The bridge is being torn down, so no `subagent_end` will arrive for any
|
|
1611
|
+
// subagent that is still running. Drop the tracking state.
|
|
1612
|
+
this.resetSubagentTracking(stream);
|
|
1327
1613
|
// Dispose the agent bridge immediately — this tears down spectral's session and
|
|
1328
1614
|
// unsubscribe. The bridge's own event handler is detached; no further
|
|
1329
1615
|
// events will flow. We broadcast agent_end ourselves below.
|
|
@@ -1523,11 +1809,21 @@ export class SessionStreamManager {
|
|
|
1523
1809
|
stream.currentTurnSilenceTimer = null;
|
|
1524
1810
|
}
|
|
1525
1811
|
}
|
|
1812
|
+
/** Clear subagent-in-flight bookkeeping (used by the silence safety net). */
|
|
1813
|
+
resetSubagentTracking(stream) {
|
|
1814
|
+
stream.activeSubagentToolCallIds.clear();
|
|
1815
|
+
stream.currentTurnSilenceRearmCount = 0;
|
|
1816
|
+
}
|
|
1526
1817
|
armCurrentTurnSilenceTimer(stream) {
|
|
1527
1818
|
this.clearCurrentTurnSilenceTimer(stream);
|
|
1819
|
+
const timeoutMs = resolveTurnSilenceTimeoutMs();
|
|
1820
|
+
// `0` (or any disabled value) means the safety net is switched off: never
|
|
1821
|
+
// arm the timer at all.
|
|
1822
|
+
if (timeoutMs <= 0)
|
|
1823
|
+
return;
|
|
1528
1824
|
stream.currentTurnSilenceTimer = setTimeout(() => {
|
|
1529
1825
|
this.handleCurrentTurnSilenceTimeout(stream);
|
|
1530
|
-
},
|
|
1826
|
+
}, timeoutMs);
|
|
1531
1827
|
}
|
|
1532
1828
|
handleCurrentTurnSilenceTimeout(stream) {
|
|
1533
1829
|
stream.currentTurnSilenceTimer = null;
|
|
@@ -1538,8 +1834,36 @@ export class SessionStreamManager {
|
|
|
1538
1834
|
if (stream.currentTurn == null)
|
|
1539
1835
|
return;
|
|
1540
1836
|
const sessionId = stream.sessionId;
|
|
1837
|
+
const maxRearm = resolveTurnSilenceMaxRearm();
|
|
1838
|
+
// Set when the re-arm budget is exhausted while subagents are still
|
|
1839
|
+
// tracked in flight: the turn is closed anyway and the UI needs a
|
|
1840
|
+
// distinguishable signal (see the `error` broadcast below).
|
|
1841
|
+
let stuckSubagentCount = 0;
|
|
1842
|
+
// A subagent is still running. Closing the turn now would flush the
|
|
1843
|
+
// buffer and set `closedTurnGeneration`, which silently discards every
|
|
1844
|
+
// replayable event the subagent emits afterwards (`subagent_end`,
|
|
1845
|
+
// `tool_result`, `message_end`) while it keeps burning tokens. Re-arm
|
|
1846
|
+
// instead, up to a bounded number of times.
|
|
1847
|
+
if (stream.activeSubagentToolCallIds.size > 0) {
|
|
1848
|
+
const unlimited = maxRearm === 0;
|
|
1849
|
+
if (unlimited || stream.currentTurnSilenceRearmCount < maxRearm) {
|
|
1850
|
+
stream.currentTurnSilenceRearmCount += 1;
|
|
1851
|
+
console.warn(`[session-stream] currentTurn silence timeout deferred: ` +
|
|
1852
|
+
`${stream.activeSubagentToolCallIds.size} subagent(s) still active ` +
|
|
1853
|
+
`in session ${sessionId}, re-arming ` +
|
|
1854
|
+
`(${stream.currentTurnSilenceRearmCount}/${unlimited ? "unlimited" : maxRearm})`);
|
|
1855
|
+
this.armCurrentTurnSilenceTimer(stream);
|
|
1856
|
+
return;
|
|
1857
|
+
}
|
|
1858
|
+
stuckSubagentCount = stream.activeSubagentToolCallIds.size;
|
|
1859
|
+
console.warn(`[session-stream] currentTurn silence timeout reached max re-arms ` +
|
|
1860
|
+
`(${maxRearm}) with ${stream.activeSubagentToolCallIds.size} ` +
|
|
1861
|
+
`subagent(s) still active in session ${sessionId}; ` +
|
|
1862
|
+
`closing the turn anyway`);
|
|
1863
|
+
}
|
|
1864
|
+
stream.currentTurnSilenceRearmCount = 0;
|
|
1541
1865
|
console.warn(`[session-stream] currentTurn silence timeout fired ` +
|
|
1542
|
-
`(${
|
|
1866
|
+
`(${resolveTurnSilenceTimeoutMs() / 1000}s without a ` +
|
|
1543
1867
|
`streaming-meaningful event), emitting synthetic agent_end ` +
|
|
1544
1868
|
`for session ${sessionId}`);
|
|
1545
1869
|
const finishedTurn = stream.currentTurn;
|
|
@@ -1547,6 +1871,22 @@ export class SessionStreamManager {
|
|
|
1547
1871
|
stream.lastFlushedEventCount = 0;
|
|
1548
1872
|
stream.currentTurn = null;
|
|
1549
1873
|
stream.closedTurnGeneration = stream.bridgeTurnGeneration;
|
|
1874
|
+
// Distinguish "gave up on a still-running subagent" from a clean
|
|
1875
|
+
// synthetic `agent_end`: without this the UI sees an ordinary turn end
|
|
1876
|
+
// and the subagent's result (which is dropped on the
|
|
1877
|
+
// `closedTurnGeneration` fence) disappears without any explanation.
|
|
1878
|
+
if (stuckSubagentCount > 0) {
|
|
1879
|
+
console.warn(`[session-stream] turn silence timeout exhausted after ${maxRearm} ` +
|
|
1880
|
+
`re-arm(s) while ${stuckSubagentCount} subagent(s) were still ` +
|
|
1881
|
+
`active in session ${sessionId}; their remaining events will be ` +
|
|
1882
|
+
`dropped on the closed-turn fence`);
|
|
1883
|
+
this.broadcast(stream, {
|
|
1884
|
+
type: "error",
|
|
1885
|
+
message: `Turn silence timeout exhausted after ${maxRearm} re-arm(s) while ` +
|
|
1886
|
+
`${stuckSubagentCount} subagent(s) were still active. The turn was ` +
|
|
1887
|
+
`closed and any result they emit from now on will be discarded.`,
|
|
1888
|
+
});
|
|
1889
|
+
}
|
|
1550
1890
|
// Reuse the normal broadcast path so relay subscribers (landing
|
|
1551
1891
|
// WebSocket clients) receive agent_end and stop showing "streaming".
|
|
1552
1892
|
this.broadcast(stream, { type: "agent_end" });
|
|
@@ -1706,6 +2046,8 @@ export class SessionStreamManager {
|
|
|
1706
2046
|
currentTurn: null,
|
|
1707
2047
|
bridgeTurnGeneration: 0,
|
|
1708
2048
|
closedTurnGeneration: null,
|
|
2049
|
+
activeSubagentToolCallIds: new Set(),
|
|
2050
|
+
currentTurnSilenceRearmCount: 0,
|
|
1709
2051
|
runState: {
|
|
1710
2052
|
runId: "",
|
|
1711
2053
|
generation: 0,
|
|
@@ -1792,6 +2134,7 @@ export class SessionStreamManager {
|
|
|
1792
2134
|
},
|
|
1793
2135
|
};
|
|
1794
2136
|
stream.bridge = this.bridgeFactory(bridgeOpts);
|
|
2137
|
+
stream.started = false;
|
|
1795
2138
|
// Subscribe this session to live inter-agent observation messages so the
|
|
1796
2139
|
// browser UI can surface them even before the memory extension injects
|
|
1797
2140
|
// them into the agent context.
|
|
@@ -1831,6 +2174,7 @@ export class SessionStreamManager {
|
|
|
1831
2174
|
stream.ready = stream.bridge
|
|
1832
2175
|
.start()
|
|
1833
2176
|
.then(() => {
|
|
2177
|
+
stream.started = true;
|
|
1834
2178
|
// After spectral has replayed history into its session manager, populate
|
|
1835
2179
|
// context window state from its built-in getContextUsage() estimator.
|
|
1836
2180
|
// Historical sessions need this — without it, the initial
|
|
@@ -1889,6 +2233,24 @@ export class SessionStreamManager {
|
|
|
1889
2233
|
if (dcpLiteEvent) {
|
|
1890
2234
|
stream.lastDcpEvent = dcpLiteEvent;
|
|
1891
2235
|
}
|
|
2236
|
+
// Track in-flight subagents (tracked BEFORE the `closedTurnGeneration`
|
|
2237
|
+
// fence below so a late `subagent_end` can still clear the counter).
|
|
2238
|
+
// The silence timer uses this to avoid closing a turn out from under a
|
|
2239
|
+
// still-working subagent.
|
|
2240
|
+
if (event.type === "subagent_start") {
|
|
2241
|
+
// Runtime payloads from the SDK are not typechecked. Without this guard
|
|
2242
|
+
// a `toolCallId` of `undefined`/`""` would leave the set size pinned at
|
|
2243
|
+
// 1 forever (the matching `subagent_end` could never delete it), which
|
|
2244
|
+
// permanently disables the silence safety net for the whole session.
|
|
2245
|
+
if (event.toolCallId) {
|
|
2246
|
+
stream.activeSubagentToolCallIds.add(event.toolCallId);
|
|
2247
|
+
}
|
|
2248
|
+
}
|
|
2249
|
+
else if (event.type === "subagent_end") {
|
|
2250
|
+
if (event.toolCallId) {
|
|
2251
|
+
stream.activeSubagentToolCallIds.delete(event.toolCallId);
|
|
2252
|
+
}
|
|
2253
|
+
}
|
|
1892
2254
|
// Buffer replayable events into the in-flight turn. We intentionally
|
|
1893
2255
|
// accept events even if currentTurn is null (rare race: spectral emits before
|
|
1894
2256
|
// prompt() opened the turn), in which case we open one defensively so
|
|
@@ -1957,11 +2319,12 @@ export class SessionStreamManager {
|
|
|
1957
2319
|
BATCH_FLUSH_INTERVAL) {
|
|
1958
2320
|
this.flushInFlightTurn(stream);
|
|
1959
2321
|
}
|
|
1960
|
-
// Fix E: reset the
|
|
1961
|
-
//
|
|
1962
|
-
//
|
|
1963
|
-
//
|
|
1964
|
-
//
|
|
2322
|
+
// Fix E: reset the turn silence timer (default 30 minutes, see
|
|
2323
|
+
// `SPECTRAL_TURN_SILENCE_TIMEOUT_MS` / `resolveTurnSilenceTimeoutMs`)
|
|
2324
|
+
// whenever a streaming-meaningful event arrives while a turn is
|
|
2325
|
+
// active. As long as the LLM keeps streaming (even slowly), the timer
|
|
2326
|
+
// keeps resetting. `token_usage` is intentionally excluded (arrives
|
|
2327
|
+
// post-turn and would prevent cleanup of a hung turn).
|
|
1965
2328
|
if (stream.currentTurn &&
|
|
1966
2329
|
STREAMING_MEANINGFUL_EVENT_TYPES.has(event.type)) {
|
|
1967
2330
|
this.armCurrentTurnSilenceTimer(stream);
|
|
@@ -2137,6 +2500,9 @@ export class SessionStreamManager {
|
|
|
2137
2500
|
// Fix E: natural agent_end arrived — cancel the safety-net timer so we
|
|
2138
2501
|
// don't double-emit.
|
|
2139
2502
|
this.clearCurrentTurnSilenceTimer(stream);
|
|
2503
|
+
// Defensive: a `subagent_end` may never arrive (crashed subagent), so
|
|
2504
|
+
// never let the counter stay >0 into the next turn.
|
|
2505
|
+
this.resetSubagentTracking(stream);
|
|
2140
2506
|
// Keep the run busy across the agent_end -> continuation gap when the
|
|
2141
2507
|
// SDK signals it will re-enter the loop (retry, length continuation,
|
|
2142
2508
|
// compact-and-retry). The deferred settle below re-resolves the final
|
|
@@ -2249,6 +2615,9 @@ export class SessionStreamManager {
|
|
|
2249
2615
|
// Fix E: error terminates the turn — cancel the safety-net timer so we
|
|
2250
2616
|
// don't double-emit.
|
|
2251
2617
|
this.clearCurrentTurnSilenceTimer(stream);
|
|
2618
|
+
// Defensive: same as agent_end — a failed turn can leave subagents
|
|
2619
|
+
// without a matching `subagent_end`.
|
|
2620
|
+
this.resetSubagentTracking(stream);
|
|
2252
2621
|
this.runTurnCleanup(failedTurn);
|
|
2253
2622
|
this.settleRunState(stream);
|
|
2254
2623
|
}
|
|
@@ -2273,7 +2642,11 @@ export class SessionStreamManager {
|
|
|
2273
2642
|
flags.retrying ||
|
|
2274
2643
|
flags.compacting ||
|
|
2275
2644
|
flags.looping ||
|
|
2276
|
-
stream.pendingContinue
|
|
2645
|
+
stream.pendingContinue ||
|
|
2646
|
+
// R1: a `prompt()` dispatch is in flight — the turn is not armed yet
|
|
2647
|
+
// (we may still be awaiting `ready`/`setModel`), but the session is
|
|
2648
|
+
// already committed to running work.
|
|
2649
|
+
stream.dispatching === true;
|
|
2277
2650
|
const phase = flags.retrying
|
|
2278
2651
|
? "retrying"
|
|
2279
2652
|
: flags.compacting
|
|
@@ -2410,7 +2783,7 @@ export class SessionStreamManager {
|
|
|
2410
2783
|
const queue = rows.map((r) => ({
|
|
2411
2784
|
id: r.id,
|
|
2412
2785
|
content: r.content,
|
|
2413
|
-
images:
|
|
2786
|
+
images: parseImagesJson(r.images_json),
|
|
2414
2787
|
position: r.position,
|
|
2415
2788
|
createdAt: r.created_at,
|
|
2416
2789
|
}));
|
|
@@ -2443,7 +2816,7 @@ export class SessionStreamManager {
|
|
|
2443
2816
|
// Fire the next prompt. Reuses the sticky model from the just-completed
|
|
2444
2817
|
// turn (persisted by `prompt()` into the sessions.model_id column).
|
|
2445
2818
|
const lastModelId = this.store.getSessionModel(stream.sessionId);
|
|
2446
|
-
this.prompt(stream.sessionId, next.content, lastModelId ?? undefined,
|
|
2819
|
+
this.prompt(stream.sessionId, next.content, lastModelId ?? undefined, parseImagesJson(next.images_json)).catch((err) => {
|
|
2447
2820
|
// Surface any errors from the auto-dequeue prompt (synchronous throws
|
|
2448
2821
|
// before the first await, e.g. disposed manager, missing stream) so
|
|
2449
2822
|
// subscribers see what went wrong instead of a silent dead turn.
|
|
@@ -2457,23 +2830,6 @@ export class SessionStreamManager {
|
|
|
2457
2830
|
return true;
|
|
2458
2831
|
}
|
|
2459
2832
|
}
|
|
2460
|
-
function parseQueueImagesJson(raw) {
|
|
2461
|
-
if (!raw)
|
|
2462
|
-
return undefined;
|
|
2463
|
-
try {
|
|
2464
|
-
const parsed = JSON.parse(raw);
|
|
2465
|
-
if (!Array.isArray(parsed))
|
|
2466
|
-
return undefined;
|
|
2467
|
-
const images = parsed.filter((item) => item !== null &&
|
|
2468
|
-
typeof item === "object" &&
|
|
2469
|
-
typeof item.data === "string" &&
|
|
2470
|
-
typeof item.mimeType === "string");
|
|
2471
|
-
return images.length > 0 ? images : undefined;
|
|
2472
|
-
}
|
|
2473
|
-
catch {
|
|
2474
|
-
return undefined;
|
|
2475
|
-
}
|
|
2476
|
-
}
|
|
2477
2833
|
function isReplayable(event) {
|
|
2478
2834
|
return (event.type === "message_start" ||
|
|
2479
2835
|
event.type === "text_delta" ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/server/storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/server/storage.ts"],"names":[],"mappings":"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"}
|