@aexol/spectral 0.9.181 → 0.9.183
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/README.md +4 -5
- package/dist/extensions/spectral-vision-fallback.js +1 -1
- package/dist/generated/zeus/const.d.ts.map +1 -1
- package/dist/generated/zeus/const.js +2 -0
- package/dist/generated/zeus/index.d.ts +8 -0
- package/dist/generated/zeus/index.d.ts.map +1 -1
- package/dist/memory/hooks/observer-trigger.d.ts.map +1 -1
- package/dist/memory/hooks/observer-trigger.js +11 -6
- package/dist/memory/observer.d.ts.map +1 -1
- package/dist/memory/observer.js +3 -1
- package/dist/relay/client.d.ts +40 -4
- package/dist/relay/client.d.ts.map +1 -1
- package/dist/relay/client.js +351 -180
- package/dist/relay/models-fetch.d.ts +3 -3
- package/dist/relay/models-fetch.js +3 -3
- package/dist/sdk/ai/cache-benchmark/benchmark.d.ts +6 -0
- package/dist/sdk/ai/cache-benchmark/benchmark.d.ts.map +1 -0
- package/dist/sdk/ai/cache-benchmark/benchmark.js +123 -0
- package/dist/sdk/ai/cache-benchmark/index.d.ts +7 -0
- package/dist/sdk/ai/cache-benchmark/index.d.ts.map +1 -0
- package/dist/sdk/ai/cache-benchmark/index.js +6 -0
- package/dist/sdk/ai/cache-benchmark/prefix-cache.d.ts +18 -0
- package/dist/sdk/ai/cache-benchmark/prefix-cache.d.ts.map +1 -0
- package/dist/sdk/ai/cache-benchmark/prefix-cache.js +60 -0
- package/dist/sdk/ai/cache-benchmark/strategies.d.ts +18 -0
- package/dist/sdk/ai/cache-benchmark/strategies.d.ts.map +1 -0
- package/dist/sdk/ai/cache-benchmark/strategies.js +131 -0
- package/dist/sdk/ai/cache-benchmark/synthetic.d.ts +6 -0
- package/dist/sdk/ai/cache-benchmark/synthetic.d.ts.map +1 -0
- package/dist/sdk/ai/cache-benchmark/synthetic.js +17 -0
- package/dist/sdk/ai/cache-benchmark/tokens.d.ts +8 -0
- package/dist/sdk/ai/cache-benchmark/tokens.d.ts.map +1 -0
- package/dist/sdk/ai/cache-benchmark/tokens.js +22 -0
- package/dist/sdk/ai/cache-benchmark/types.d.ts +137 -0
- package/dist/sdk/ai/cache-benchmark/types.d.ts.map +1 -0
- package/dist/sdk/ai/cache-benchmark/types.js +14 -0
- package/dist/sdk/ai/env-api-keys.js +0 -17
- package/dist/sdk/ai/models.d.ts.map +1 -1
- package/dist/sdk/ai/models.js +10 -0
- package/dist/sdk/ai/providers/openai-completions.d.ts +1 -3
- package/dist/sdk/ai/providers/openai-completions.d.ts.map +1 -1
- package/dist/sdk/ai/providers/openai-completions.js +4 -100
- package/dist/sdk/ai/providers/transform-messages.d.ts.map +1 -1
- package/dist/sdk/ai/providers/transform-messages.js +35 -0
- package/dist/sdk/ai/types.d.ts +2 -4
- package/dist/sdk/ai/types.d.ts.map +1 -1
- package/dist/sdk/ai/utils/oauth/index.d.ts +1 -2
- package/dist/sdk/ai/utils/oauth/index.d.ts.map +1 -1
- package/dist/sdk/ai/utils/oauth/index.js +1 -3
- package/dist/sdk/coding-agent/core/agent-session.d.ts +2 -0
- package/dist/sdk/coding-agent/core/agent-session.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/agent-session.js +3 -4
- package/dist/sdk/coding-agent/core/compaction/llm-compaction.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/compaction/llm-compaction.js +2 -1
- package/dist/sdk/coding-agent/core/model-registry.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/model-registry.js +0 -1
- package/dist/sdk/coding-agent/core/model-resolver.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/model-resolver.js +0 -1
- package/dist/sdk/coding-agent/core/provider-display-names.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/provider-display-names.js +0 -2
- package/dist/sdk/coding-agent/core/system-prompt.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/system-prompt.js +52 -48
- package/dist/sdk/coding-agent/utils/shell.d.ts.map +1 -1
- package/dist/sdk/coding-agent/utils/shell.js +10 -0
- package/dist/server/agent-bridge.d.ts +6 -6
- package/dist/server/agent-bridge.d.ts.map +1 -1
- package/dist/server/agent-bridge.js +27 -106
- package/dist/server/handlers/sessions.d.ts +1 -0
- package/dist/server/handlers/sessions.d.ts.map +1 -1
- package/dist/server/handlers/sessions.js +6 -1
- package/dist/server/session-stream.d.ts.map +1 -1
- package/dist/server/session-stream.js +4 -0
- package/dist/server/storage.d.ts +14 -5
- package/dist/server/storage.d.ts.map +1 -1
- package/dist/server/storage.js +37 -10
- package/dist/server/wire.d.ts +1 -0
- package/dist/server/wire.d.ts.map +1 -1
- package/package.json +2 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer-trigger.d.ts","sourceRoot":"","sources":["../../../src/memory/hooks/observer-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAWpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"observer-trigger.d.ts","sourceRoot":"","sources":["../../../src/memory/hooks/observer-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAWpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAY7C,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA8KjF"}
|
|
@@ -7,23 +7,28 @@ import { estimateEntryTokens, estimateStringTokens } from "../tokens.js";
|
|
|
7
7
|
import { OBSERVATION_CUSTOM_TYPE, reflectionToPromptLine } from "../types.js";
|
|
8
8
|
import { getProjectObsStore } from "../project-observations-store.js";
|
|
9
9
|
import { relayProjectObservations } from "../inter-agent-relay.js";
|
|
10
|
+
/** Write diagnostic lines only when structured debug logging is enabled. */
|
|
11
|
+
function debugStderr(runtime, message) {
|
|
12
|
+
if (runtime.config.debugLog === true)
|
|
13
|
+
process.stderr.write(message);
|
|
14
|
+
}
|
|
10
15
|
export function registerObserverTrigger(ext, runtime) {
|
|
11
16
|
ext.on("turn_end", (_event, ctx) => {
|
|
12
|
-
|
|
17
|
+
debugStderr(runtime, "[obs-mem] turn_end fired\n");
|
|
13
18
|
runtime.ensureConfig(ctx.cwd);
|
|
14
19
|
if (runtime.config.passive === true) {
|
|
15
|
-
|
|
20
|
+
debugStderr(runtime, "[obs-mem] passive=true → skipping\n");
|
|
16
21
|
return;
|
|
17
22
|
}
|
|
18
23
|
if (runtime.observerInFlight) {
|
|
19
|
-
|
|
24
|
+
debugStderr(runtime, "[obs-mem] observer already in flight → skipping\n");
|
|
20
25
|
return;
|
|
21
26
|
}
|
|
22
27
|
const entries = ctx.sessionManager.getBranch();
|
|
23
28
|
const tokens = rawTokensSinceLastBound(entries);
|
|
24
|
-
|
|
29
|
+
debugStderr(runtime, `[obs-mem] tokens since last bound: ${tokens} (threshold: ${runtime.config.observationThresholdTokens})\n`);
|
|
25
30
|
if (tokens < runtime.config.observationThresholdTokens) {
|
|
26
|
-
|
|
31
|
+
debugStderr(runtime, "[obs-mem] below threshold → skipping observer\n");
|
|
27
32
|
return;
|
|
28
33
|
}
|
|
29
34
|
const lastBoundIdx = lastObservationCoverEndIdx(entries);
|
|
@@ -60,7 +65,7 @@ export function registerObserverTrigger(ext, runtime) {
|
|
|
60
65
|
if (capIdx < chunkEntries.length) {
|
|
61
66
|
chunkEntries = chunkEntries.slice(0, capIdx);
|
|
62
67
|
effectiveCoversUpToId = chunkEntries[capIdx - 1]?.id ?? coversUpToId;
|
|
63
|
-
|
|
68
|
+
debugStderr(runtime, `[obs-mem] chunk capped at ~${accumulated.toLocaleString()} tokens ` +
|
|
64
69
|
`(${chunkEntries.length} source entries); remaining unobserved entries deferred\n`);
|
|
65
70
|
debugLog("observer.chunk_capped", {
|
|
66
71
|
originalCount: rawTailEntriesBetween(entries, coversFromId, coversUpToId).length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../src/memory/observer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../src/memory/observer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA6B,KAAK,UAAU,EAAwC,MAAM,4BAA4B,CAAC;AACzI,OAAO,KAAK,EAAW,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAOzD,OAAO,KAAK,EAAE,iBAAiB,EAAa,MAAM,YAAY,CAAC;AAE/D,UAAU,eAAe;IACxB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AASD,eAAO,MAAM,6BAA6B,mDAAmD,CAAC;AAkC9F,wBAAgB,uBAAuB,CACtC,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAC7C,qBAAqB,EAAE,SAAS,MAAM,EAAE,GACtC,MAAM,EAAE,GAAG,SAAS,CAYtB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,EAAE,GAAG,SAAS,CAAC,CAkHjG;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,EAAE,CAEhF"}
|
package/dist/memory/observer.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { agentLoop } from "../sdk/agent-core/index.js";
|
|
1
|
+
import { agentLoop, uuidv7 } from "../sdk/agent-core/index.js";
|
|
2
2
|
import { Type } from "../sdk/ai/index.js";
|
|
3
3
|
import { hashId } from "./ids.js";
|
|
4
4
|
import { AGENT_LOOP_MAX_TOKENS, boundedMaxTokens } from "./model-budget.js";
|
|
@@ -132,6 +132,8 @@ ${conversation}`;
|
|
|
132
132
|
maxTokens: boundedMaxTokens(model, AGENT_LOOP_MAX_TOKENS),
|
|
133
133
|
convertToLlm: (msgs) => msgs,
|
|
134
134
|
toolExecution: "sequential",
|
|
135
|
+
cacheRetention: "none",
|
|
136
|
+
sessionId: uuidv7(),
|
|
135
137
|
...(reasoning ? { reasoning: "high" } : {}),
|
|
136
138
|
...(effectiveMaxTurns !== undefined
|
|
137
139
|
? {
|
package/dist/relay/client.d.ts
CHANGED
|
@@ -7,12 +7,16 @@
|
|
|
7
7
|
* machine JWT via `Authorization: Bearer <jwt>`.
|
|
8
8
|
* - Reply `{kind:"pong"}` to backend `{kind:"ping"}`. Backend closes
|
|
9
9
|
* `4408 heartbeat-timeout` if it doesn't hear from us within 90s; we
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* keep this app-level reply in addition to the protocol-level heartbeat
|
|
11
|
+
* below.
|
|
12
|
+
* - **Client heartbeat:** additionally emits a protocol-level `ws` ping
|
|
13
|
+
* every `HEARTBEAT_INTERVAL_MS` and requires a `pong` within
|
|
14
|
+
* `HEARTBEAT_TIMEOUT_MS`. This detects a half-open send path (e.g. after
|
|
15
|
+
* laptop sleep/wake) where `readyState` still reports `OPEN`.
|
|
12
16
|
* - **Watchdog timer:** tracks `lastActivityMs` on every received frame /
|
|
13
17
|
* ping. Every 15 s, if no activity within `WATCHDOG_MS` (120 s = 2×
|
|
14
|
-
* backend timeout),
|
|
15
|
-
*
|
|
18
|
+
* backend timeout), terminates the socket and triggers a reconnect.
|
|
19
|
+
* Detects silent backend death (Docker OOM
|
|
16
20
|
* kill, network partition without TCP RST) where the socket stays open
|
|
17
21
|
* but no data flows.
|
|
18
22
|
* - **Pre-reconnect health check:** before opening a new WS, does a quick
|
|
@@ -104,11 +108,19 @@ export declare class RelayClient extends EventEmitter {
|
|
|
104
108
|
private tightLoopWindowStart;
|
|
105
109
|
private reconnectTimer;
|
|
106
110
|
private sendQueue;
|
|
111
|
+
/** Wire currently waiting on a `ws.send` callback. Only one in flight to preserve FIFO. */
|
|
112
|
+
private sendInFlight;
|
|
113
|
+
private sendTimer;
|
|
107
114
|
/** Set true when the WS error handler sees an HTTP 401/403 upgrade rejection. */
|
|
108
115
|
private authFailed;
|
|
109
116
|
/** Timestamp of last received frame / ping — drives the watchdog. */
|
|
110
117
|
private lastActivityMs;
|
|
111
118
|
private watchdogTimer;
|
|
119
|
+
private heartbeatTimer;
|
|
120
|
+
private heartbeatPongTimer;
|
|
121
|
+
private heartbeatPending;
|
|
122
|
+
/** Guards the async window of `scheduleReconnect` (health check). */
|
|
123
|
+
private reconnectInFlight;
|
|
112
124
|
constructor(opts: RelayClientOptions);
|
|
113
125
|
/** Open the connection. Idempotent — calling twice is a no-op. */
|
|
114
126
|
connect(): void;
|
|
@@ -129,6 +141,30 @@ export declare class RelayClient extends EventEmitter {
|
|
|
129
141
|
private openSocket;
|
|
130
142
|
private startWatchdog;
|
|
131
143
|
private stopWatchdog;
|
|
144
|
+
private startHeartbeat;
|
|
145
|
+
private stopHeartbeat;
|
|
146
|
+
private enqueueWire;
|
|
147
|
+
private clearSendInFlight;
|
|
148
|
+
/**
|
|
149
|
+
* Drain the FIFO send queue over the current socket. Exactly one frame is
|
|
150
|
+
* in flight at a time so ordering is preserved. If `ws.send` never calls
|
|
151
|
+
* its callback (half-open socket), the frame stays at the front of the
|
|
152
|
+
* queue and the connection is force-reconnected; the next `open` flushes
|
|
153
|
+
* it again.
|
|
154
|
+
*/
|
|
155
|
+
private flushSendQueue;
|
|
156
|
+
private setTcpKeepAlive;
|
|
157
|
+
/**
|
|
158
|
+
* Tear down a suspected-dead socket and schedule a reconnect immediately.
|
|
159
|
+
* Unlike the `close` path, this does not wait for a (possibly never
|
|
160
|
+
* arriving) `close` event — `terminate()` destroys the socket directly.
|
|
161
|
+
*/
|
|
162
|
+
private forceReconnect;
|
|
163
|
+
/**
|
|
164
|
+
* Single disconnect entry point for both real `close` events and forced
|
|
165
|
+
* reconnects. Ignored for sockets that have already been replaced.
|
|
166
|
+
*/
|
|
167
|
+
private handleDisconnect;
|
|
132
168
|
/**
|
|
133
169
|
* Pre-reconnect health check: quick HTTP GET to `<backendUrl>/health`.
|
|
134
170
|
* Returns true when the backend is reachable (or when no backendUrl is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/relay/client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/relay/client.ts"],"names":[],"mappings":"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"}
|