@aexol/spectral 0.9.212 → 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/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 +20 -2
- 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 +121 -4
- package/dist/generated/zeus/index.d.ts +527 -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/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 +67 -0
- package/dist/server/session-stream.d.ts.map +1 -1
- package/dist/server/session-stream.js +222 -23
- 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
|
|
@@ -232,7 +233,7 @@ function persistObservationalMemorySnapshot(store, sessionId, bridge) {
|
|
|
232
233
|
function estimateStoredMessageReplayTokens(message) {
|
|
233
234
|
return (estimateStringTokens(message.content) +
|
|
234
235
|
estimateStringTokens(message.events) +
|
|
235
|
-
(message.images
|
|
236
|
+
estimateImagesTokens(message.images));
|
|
236
237
|
}
|
|
237
238
|
function formatCompactionTokenStats(event) {
|
|
238
239
|
const parts = [];
|
|
@@ -817,6 +818,155 @@ export class SessionStreamManager {
|
|
|
817
818
|
}
|
|
818
819
|
await Promise.all(promises);
|
|
819
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
|
+
}
|
|
820
970
|
/**
|
|
821
971
|
* Push a new session-level primary-agent override to the running bridge
|
|
822
972
|
* (if any) without restarting it. The `before_agent_start` hook reads the
|
|
@@ -1086,9 +1236,29 @@ export class SessionStreamManager {
|
|
|
1086
1236
|
async prompt(sessionId, content, modelId, images, reasoningEffort, opts) {
|
|
1087
1237
|
if (this.disposed)
|
|
1088
1238
|
throw new Error("SessionStreamManager disposed");
|
|
1089
|
-
|
|
1239
|
+
const stream = this.streams.get(sessionId);
|
|
1090
1240
|
if (!stream)
|
|
1091
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) {
|
|
1092
1262
|
// Guard: block new prompts while compaction is running. Compaction
|
|
1093
1263
|
// takes ~1 LLM call (<5 s) and the bridge emits a clear error message
|
|
1094
1264
|
// so the user knows to wait a moment.
|
|
@@ -1147,7 +1317,16 @@ export class SessionStreamManager {
|
|
|
1147
1317
|
};
|
|
1148
1318
|
stream.bridge = this.bridgeFactory(bridgeOpts);
|
|
1149
1319
|
stream.startError = null;
|
|
1150
|
-
|
|
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) => {
|
|
1151
1330
|
const e = err instanceof Error ? err : new Error(String(err));
|
|
1152
1331
|
stream.startError = e;
|
|
1153
1332
|
this.broadcast(stream, {
|
|
@@ -1170,6 +1349,35 @@ export class SessionStreamManager {
|
|
|
1170
1349
|
});
|
|
1171
1350
|
return;
|
|
1172
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
|
+
}
|
|
1173
1381
|
// Sticky-model resolution & application. Phase 3 (Available Models
|
|
1174
1382
|
// whitelist). Order:
|
|
1175
1383
|
// a) If envelope carried a `modelId`, use it.
|
|
@@ -1298,6 +1506,8 @@ export class SessionStreamManager {
|
|
|
1298
1506
|
};
|
|
1299
1507
|
stream.pendingContinue = false;
|
|
1300
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.
|
|
1301
1511
|
// 4. Fire spectral. `prompt` resolves on agent_end; errors inside
|
|
1302
1512
|
// AgentBridge are caught and emitted as wire errors. Synchronous throws
|
|
1303
1513
|
// (e.g. disposed bridge, missing session) arrive as a rejected promise
|
|
@@ -1924,6 +2134,7 @@ export class SessionStreamManager {
|
|
|
1924
2134
|
},
|
|
1925
2135
|
};
|
|
1926
2136
|
stream.bridge = this.bridgeFactory(bridgeOpts);
|
|
2137
|
+
stream.started = false;
|
|
1927
2138
|
// Subscribe this session to live inter-agent observation messages so the
|
|
1928
2139
|
// browser UI can surface them even before the memory extension injects
|
|
1929
2140
|
// them into the agent context.
|
|
@@ -1963,6 +2174,7 @@ export class SessionStreamManager {
|
|
|
1963
2174
|
stream.ready = stream.bridge
|
|
1964
2175
|
.start()
|
|
1965
2176
|
.then(() => {
|
|
2177
|
+
stream.started = true;
|
|
1966
2178
|
// After spectral has replayed history into its session manager, populate
|
|
1967
2179
|
// context window state from its built-in getContextUsage() estimator.
|
|
1968
2180
|
// Historical sessions need this — without it, the initial
|
|
@@ -2430,7 +2642,11 @@ export class SessionStreamManager {
|
|
|
2430
2642
|
flags.retrying ||
|
|
2431
2643
|
flags.compacting ||
|
|
2432
2644
|
flags.looping ||
|
|
2433
|
-
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;
|
|
2434
2650
|
const phase = flags.retrying
|
|
2435
2651
|
? "retrying"
|
|
2436
2652
|
: flags.compacting
|
|
@@ -2567,7 +2783,7 @@ export class SessionStreamManager {
|
|
|
2567
2783
|
const queue = rows.map((r) => ({
|
|
2568
2784
|
id: r.id,
|
|
2569
2785
|
content: r.content,
|
|
2570
|
-
images:
|
|
2786
|
+
images: parseImagesJson(r.images_json),
|
|
2571
2787
|
position: r.position,
|
|
2572
2788
|
createdAt: r.created_at,
|
|
2573
2789
|
}));
|
|
@@ -2600,7 +2816,7 @@ export class SessionStreamManager {
|
|
|
2600
2816
|
// Fire the next prompt. Reuses the sticky model from the just-completed
|
|
2601
2817
|
// turn (persisted by `prompt()` into the sessions.model_id column).
|
|
2602
2818
|
const lastModelId = this.store.getSessionModel(stream.sessionId);
|
|
2603
|
-
this.prompt(stream.sessionId, next.content, lastModelId ?? undefined,
|
|
2819
|
+
this.prompt(stream.sessionId, next.content, lastModelId ?? undefined, parseImagesJson(next.images_json)).catch((err) => {
|
|
2604
2820
|
// Surface any errors from the auto-dequeue prompt (synchronous throws
|
|
2605
2821
|
// before the first await, e.g. disposed manager, missing stream) so
|
|
2606
2822
|
// subscribers see what went wrong instead of a silent dead turn.
|
|
@@ -2614,23 +2830,6 @@ export class SessionStreamManager {
|
|
|
2614
2830
|
return true;
|
|
2615
2831
|
}
|
|
2616
2832
|
}
|
|
2617
|
-
function parseQueueImagesJson(raw) {
|
|
2618
|
-
if (!raw)
|
|
2619
|
-
return undefined;
|
|
2620
|
-
try {
|
|
2621
|
-
const parsed = JSON.parse(raw);
|
|
2622
|
-
if (!Array.isArray(parsed))
|
|
2623
|
-
return undefined;
|
|
2624
|
-
const images = parsed.filter((item) => item !== null &&
|
|
2625
|
-
typeof item === "object" &&
|
|
2626
|
-
typeof item.data === "string" &&
|
|
2627
|
-
typeof item.mimeType === "string");
|
|
2628
|
-
return images.length > 0 ? images : undefined;
|
|
2629
|
-
}
|
|
2630
|
-
catch {
|
|
2631
|
-
return undefined;
|
|
2632
|
-
}
|
|
2633
|
-
}
|
|
2634
2833
|
function isReplayable(event) {
|
|
2635
2834
|
return (event.type === "message_start" ||
|
|
2636
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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"}
|
package/dist/server/storage.js
CHANGED
|
@@ -34,6 +34,7 @@ import { mkdirSync, readFileSync } from "node:fs";
|
|
|
34
34
|
import { dirname, join, resolve } from "node:path";
|
|
35
35
|
import { getConfigDir } from "../config.js";
|
|
36
36
|
import { stripJsoncComments } from "../studio-binding.js";
|
|
37
|
+
import { coerceImages, parseImagesJson } from "./image-attachments.js";
|
|
37
38
|
/**
|
|
38
39
|
* Schema version — informational, stamped into every new database.
|
|
39
40
|
*
|
|
@@ -234,35 +235,6 @@ function applyBindingFields(project, rowBinding) {
|
|
|
234
235
|
studioTeamId: binding.teamId,
|
|
235
236
|
};
|
|
236
237
|
}
|
|
237
|
-
/** Tables we own — used by the migration drop step. */
|
|
238
|
-
/** Best-effort parse of the `images_json` column into `ImageAttachment[]`. */
|
|
239
|
-
function parseImagesJson(raw) {
|
|
240
|
-
if (!raw || raw === "")
|
|
241
|
-
return undefined;
|
|
242
|
-
try {
|
|
243
|
-
const parsed = JSON.parse(raw);
|
|
244
|
-
if (!Array.isArray(parsed))
|
|
245
|
-
return undefined;
|
|
246
|
-
const out = [];
|
|
247
|
-
for (const i of parsed) {
|
|
248
|
-
if (i !== null &&
|
|
249
|
-
typeof i === "object" &&
|
|
250
|
-
typeof i.data === "string" &&
|
|
251
|
-
typeof i.mimeType === "string") {
|
|
252
|
-
out.push({
|
|
253
|
-
data: i.data,
|
|
254
|
-
mimeType: i.mimeType,
|
|
255
|
-
width: typeof i.width === "number" ? i.width : undefined,
|
|
256
|
-
height: typeof i.height === "number" ? i.height : undefined,
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
return out.length > 0 ? out : undefined;
|
|
261
|
-
}
|
|
262
|
-
catch {
|
|
263
|
-
return undefined;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
238
|
export class SessionStore {
|
|
267
239
|
path;
|
|
268
240
|
db;
|
|
@@ -1182,7 +1154,14 @@ export class SessionStore {
|
|
|
1182
1154
|
const createdAt = msg.createdAt ?? Date.now();
|
|
1183
1155
|
const eventsJsonl = msg.eventsJsonl ?? "";
|
|
1184
1156
|
const creditsUsed = msg.creditsUsed ?? null;
|
|
1185
|
-
|
|
1157
|
+
// Last line of defence: never persist an attachment that carries neither
|
|
1158
|
+
// a url nor data, and never persist megabytes of inline base64 — both
|
|
1159
|
+
// would bloat the DB and the history replay. Ingress paths reject these
|
|
1160
|
+
// earlier; here we only guarantee the invariant.
|
|
1161
|
+
const storedImages = coerceImages(msg.images, {
|
|
1162
|
+
onReject: (reason) => console.warn(`[spectral] warn: not persisting image for ${sessionId}: ${reason}`),
|
|
1163
|
+
});
|
|
1164
|
+
const imagesJson = storedImages && storedImages.length > 0 ? JSON.stringify(storedImages) : "";
|
|
1186
1165
|
let sequence = 0;
|
|
1187
1166
|
const tx = this.db.transaction(() => {
|
|
1188
1167
|
// Idempotent sequence assignment. A rewrite of the same message id must
|
|
@@ -1203,7 +1182,7 @@ export class SessionStore {
|
|
|
1203
1182
|
events: eventsJsonl,
|
|
1204
1183
|
createdAt,
|
|
1205
1184
|
sequence,
|
|
1206
|
-
...(
|
|
1185
|
+
...(storedImages && storedImages.length > 0 ? { images: storedImages } : {}),
|
|
1207
1186
|
...(creditsUsed != null ? { creditsUsed } : {}),
|
|
1208
1187
|
};
|
|
1209
1188
|
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal-native permission confirmations for `spectral serve`.
|
|
3
|
+
*
|
|
4
|
+
* In serve mode there is no TUI, but extensions (notably desktop-control)
|
|
5
|
+
* still call `ctx.ui.confirm(...)` to gate potentially harmful actions. The
|
|
6
|
+
* user is chatting via the web UI, while `spectral serve` itself runs in a
|
|
7
|
+
* real terminal — so the confirmation is rendered there, on serve's stdout,
|
|
8
|
+
* and answered with a single keypress.
|
|
9
|
+
*
|
|
10
|
+
* Behavior:
|
|
11
|
+
* - Non-TTY stdin: resolves `false` immediately (honest headless deny).
|
|
12
|
+
* - The prompt is a boxed render with a key legend: Enter/y = Allow,
|
|
13
|
+
* n/Esc/q = Deny, Ctrl+C = Deny (consumed as data in raw mode — it must
|
|
14
|
+
* never kill the serve process).
|
|
15
|
+
* - Stdin is put into raw mode for the duration of the prompt and always
|
|
16
|
+
* restored afterwards.
|
|
17
|
+
* - Title and message are sanitized before rendering: ANSI escape sequences
|
|
18
|
+
* and control characters are stripped (newlines collapse to spaces) so a
|
|
19
|
+
* malicious extension cannot inject terminal escapes.
|
|
20
|
+
* - Concurrent confirmations (multiple sessions share one terminal) are
|
|
21
|
+
* serialized through a module-level queue; queued requests print a short
|
|
22
|
+
* "waiting" notice.
|
|
23
|
+
* - Timeouts: `SPECTRAL_CONFIRM_TIMEOUT_MS` env (default 5 min) or the
|
|
24
|
+
* per-dialog `opts.timeout`. On timeout the confirmation resolves `false`.
|
|
25
|
+
* - `onOutcome` reports how the dialog ended exactly once, letting callers
|
|
26
|
+
* (e.g. desktop-control) distinguish an explicit user denial from
|
|
27
|
+
* auto-deny causes (timeout, non-TTY, abort) that must not lock sessions.
|
|
28
|
+
*
|
|
29
|
+
* The prompt logic is pure and takes injectable IO (`write` + `readKey`) so
|
|
30
|
+
* tests run without a TTY.
|
|
31
|
+
*/
|
|
32
|
+
/** Injectable terminal IO for the confirmation prompt. */
|
|
33
|
+
export interface ConfirmPromptIO {
|
|
34
|
+
/** Write text to the terminal (serve's stdout). */
|
|
35
|
+
write(text: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Start listening for the next keypress and pass raw stdin data to
|
|
38
|
+
* `handler`. Returns a cancel function that must detach the listener and
|
|
39
|
+
* restore any terminal state (raw mode).
|
|
40
|
+
*/
|
|
41
|
+
readKey(handler: (data: string) => void): () => void;
|
|
42
|
+
}
|
|
43
|
+
/** Minimal shape of a stdin stream the default IO implementation needs. */
|
|
44
|
+
export interface ConfirmStdin {
|
|
45
|
+
readonly isTTY?: boolean;
|
|
46
|
+
readonly isRaw?: boolean;
|
|
47
|
+
setRawMode?(mode: boolean): unknown;
|
|
48
|
+
on(event: "data", listener: (chunk: Buffer | string) => void): unknown;
|
|
49
|
+
off(event: "data", listener: (chunk: Buffer | string) => void): unknown;
|
|
50
|
+
resume(): unknown;
|
|
51
|
+
}
|
|
52
|
+
export type ConfirmKeyAction = "allow" | "deny" | "ignore";
|
|
53
|
+
/**
|
|
54
|
+
* How a confirmation ended. `deny` is an explicit human decision (deny key);
|
|
55
|
+
* `timeout`, `no_tty` and `cancelled` mean the dialog ended without a user
|
|
56
|
+
* answer. Same values as `ExtensionConfirmOutcome`.
|
|
57
|
+
*/
|
|
58
|
+
export type TerminalConfirmOutcome = "allow" | "deny" | "timeout" | "no_tty" | "cancelled";
|
|
59
|
+
/** Default confirmation timeout: 5 minutes. */
|
|
60
|
+
export declare const DEFAULT_CONFIRM_TIMEOUT_MS = 300000;
|
|
61
|
+
/**
|
|
62
|
+
* Classify a raw keypress. Only single-byte keys are acted on; multi-byte
|
|
63
|
+
* sequences (arrow keys, pastes) are ignored so they can't accidentally
|
|
64
|
+
* answer the prompt.
|
|
65
|
+
*/
|
|
66
|
+
export declare function classifyConfirmKey(data: string): ConfirmKeyAction;
|
|
67
|
+
/**
|
|
68
|
+
* Strip ANSI escape sequences and control characters from extension-provided
|
|
69
|
+
* text. Newlines become spaces (the box renders one wrapped block); every
|
|
70
|
+
* other C0 control character (incl. \r and tab), DEL and C1 are removed, as
|
|
71
|
+
* is any stray ESC left over from an unterminated sequence. Keeps the prompt
|
|
72
|
+
* box and result lines safe against terminal escape injection.
|
|
73
|
+
*/
|
|
74
|
+
export declare function sanitizeConfirmText(text: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* Render the confirmation prompt as a boxed block of text (with trailing
|
|
77
|
+
* newline). Pure — no IO.
|
|
78
|
+
*/
|
|
79
|
+
export declare function renderConfirmBox(title: string, message: string): string;
|
|
80
|
+
/** Read the confirmation timeout from the environment (ms). */
|
|
81
|
+
export declare function parseConfirmTimeoutMs(env?: NodeJS.ProcessEnv): number;
|
|
82
|
+
export interface TerminalConfirmOptions {
|
|
83
|
+
title: string;
|
|
84
|
+
message: string;
|
|
85
|
+
io: ConfirmPromptIO;
|
|
86
|
+
/** Whether stdin is an interactive TTY. Defaults to `process.stdin.isTTY`. */
|
|
87
|
+
isTTY?: boolean;
|
|
88
|
+
/** Timeout in ms. Defaults to `parseConfirmTimeoutMs()` (env-driven). */
|
|
89
|
+
timeoutMs?: number;
|
|
90
|
+
/** AbortSignal to programmatically deny the dialog. */
|
|
91
|
+
signal?: AbortSignal;
|
|
92
|
+
/** Called when the prompt is actually rendered (not while queued). */
|
|
93
|
+
onShown?: () => void;
|
|
94
|
+
/**
|
|
95
|
+
* Called exactly once with the final outcome, before the promise settles.
|
|
96
|
+
* `deny` means an explicit human denial; `timeout`/`no_tty`/`cancelled`
|
|
97
|
+
* are auto-deny causes (no user decision was made).
|
|
98
|
+
*/
|
|
99
|
+
onOutcome?: (outcome: TerminalConfirmOutcome) => void;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Run a single terminal confirmation. Resolves `true` (allow) or `false`
|
|
103
|
+
* (deny / timeout / abort / non-TTY). Never throws.
|
|
104
|
+
*/
|
|
105
|
+
export declare function runTerminalConfirm(options: TerminalConfirmOptions): Promise<boolean>;
|
|
106
|
+
/**
|
|
107
|
+
* Request a terminal confirmation, serialized with all other pending
|
|
108
|
+
* confirmations in this process. Queued requests print a short notice.
|
|
109
|
+
*/
|
|
110
|
+
export declare function requestTerminalConfirm(options: TerminalConfirmOptions): Promise<boolean>;
|
|
111
|
+
/**
|
|
112
|
+
* Default IO bound to the serve process's real terminal: writes to stdout,
|
|
113
|
+
* reads raw keypresses from stdin (entering raw mode for the duration and
|
|
114
|
+
* restoring the previous mode on cancel).
|
|
115
|
+
*/
|
|
116
|
+
export declare function createStdinConfirmIO(stdin?: ConfirmStdin): ConfirmPromptIO;
|
|
117
|
+
/** Wire event shape emitted when a confirm prompt is actually shown. */
|
|
118
|
+
export interface BridgeConfirmNotifyEvent {
|
|
119
|
+
type: "agent_notification";
|
|
120
|
+
message: string;
|
|
121
|
+
level: "info" | "warning" | "error";
|
|
122
|
+
}
|
|
123
|
+
/** Per-dialog options as passed by extensions (`ExtensionUIDialogOptions`). */
|
|
124
|
+
export interface BridgeConfirmDialogOptions {
|
|
125
|
+
/** AbortSignal to programmatically deny the dialog. */
|
|
126
|
+
signal?: AbortSignal;
|
|
127
|
+
/** Per-dialog timeout in ms (auto-deny when it fires). */
|
|
128
|
+
timeout?: number;
|
|
129
|
+
/** Outcome side-channel, forwarded to `runTerminalConfirm.onOutcome`. */
|
|
130
|
+
onOutcome?: (outcome: TerminalConfirmOutcome) => void;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Build the `confirm(title, message, opts?)` implementation used by the
|
|
134
|
+
* serve-mode headless UI context: routes through `requestTerminalConfirm`
|
|
135
|
+
* (cross-session queue), maps `opts.timeout` → `timeoutMs` and
|
|
136
|
+
* `opts.signal` → `signal`, forwards `opts.onOutcome` (auto-deny vs explicit
|
|
137
|
+
* user denial side-channel), and emits an `agent_notification` (level
|
|
138
|
+
* "warning") once the prompt is rendered so web users know to look at the
|
|
139
|
+
* terminal. `io` defaults to the real stdin IO; `isTTY` overrides the TTY
|
|
140
|
+
* probe (defaults to `process.stdin.isTTY`, i.e. headless-safe).
|
|
141
|
+
*/
|
|
142
|
+
export declare function createBridgeConfirm(emit: (event: BridgeConfirmNotifyEvent) => void, io?: ConfirmPromptIO, opts?: {
|
|
143
|
+
isTTY?: boolean;
|
|
144
|
+
}): (title: string, message: string, dialog?: BridgeConfirmDialogOptions) => Promise<boolean>;
|
|
145
|
+
//# sourceMappingURL=terminal-confirm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-confirm.d.ts","sourceRoot":"","sources":["../../../src/server/ui/terminal-confirm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACtD;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;IACvE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;IACxE,MAAM,IAAI,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3D;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3F,+CAA+C;AAC/C,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAgBjE;AAYD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMxD;AAsBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAkBvE;AAED,+DAA+D;AAC/D,wBAAgB,qBAAqB,CACnC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAQR;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,eAAe,CAAC;IACpB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACvD;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,OAAO,CAAC,CA8ElB;AAeD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,OAAO,CAAC,CA4BlB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,GAAE,YAA4B,GAClC,eAAe,CA2CjB;AAWD,wEAAwE;AACxE,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;CACrC;AAED,+EAA+E;AAC/E,MAAM,WAAW,0BAA0B;IACzC,uDAAuD;IACvD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,EAC/C,EAAE,GAAE,eAAwC,EAC5C,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACzB,CACD,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,0BAA0B,KAChC,OAAO,CAAC,OAAO,CAAC,CAsBpB"}
|