@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.
Files changed (78) hide show
  1. package/README.md +4 -5
  2. package/dist/extensions/spectral-vision-fallback.js +1 -1
  3. package/dist/generated/zeus/const.d.ts.map +1 -1
  4. package/dist/generated/zeus/const.js +2 -0
  5. package/dist/generated/zeus/index.d.ts +8 -0
  6. package/dist/generated/zeus/index.d.ts.map +1 -1
  7. package/dist/memory/hooks/observer-trigger.d.ts.map +1 -1
  8. package/dist/memory/hooks/observer-trigger.js +11 -6
  9. package/dist/memory/observer.d.ts.map +1 -1
  10. package/dist/memory/observer.js +3 -1
  11. package/dist/relay/client.d.ts +40 -4
  12. package/dist/relay/client.d.ts.map +1 -1
  13. package/dist/relay/client.js +351 -180
  14. package/dist/relay/models-fetch.d.ts +3 -3
  15. package/dist/relay/models-fetch.js +3 -3
  16. package/dist/sdk/ai/cache-benchmark/benchmark.d.ts +6 -0
  17. package/dist/sdk/ai/cache-benchmark/benchmark.d.ts.map +1 -0
  18. package/dist/sdk/ai/cache-benchmark/benchmark.js +123 -0
  19. package/dist/sdk/ai/cache-benchmark/index.d.ts +7 -0
  20. package/dist/sdk/ai/cache-benchmark/index.d.ts.map +1 -0
  21. package/dist/sdk/ai/cache-benchmark/index.js +6 -0
  22. package/dist/sdk/ai/cache-benchmark/prefix-cache.d.ts +18 -0
  23. package/dist/sdk/ai/cache-benchmark/prefix-cache.d.ts.map +1 -0
  24. package/dist/sdk/ai/cache-benchmark/prefix-cache.js +60 -0
  25. package/dist/sdk/ai/cache-benchmark/strategies.d.ts +18 -0
  26. package/dist/sdk/ai/cache-benchmark/strategies.d.ts.map +1 -0
  27. package/dist/sdk/ai/cache-benchmark/strategies.js +131 -0
  28. package/dist/sdk/ai/cache-benchmark/synthetic.d.ts +6 -0
  29. package/dist/sdk/ai/cache-benchmark/synthetic.d.ts.map +1 -0
  30. package/dist/sdk/ai/cache-benchmark/synthetic.js +17 -0
  31. package/dist/sdk/ai/cache-benchmark/tokens.d.ts +8 -0
  32. package/dist/sdk/ai/cache-benchmark/tokens.d.ts.map +1 -0
  33. package/dist/sdk/ai/cache-benchmark/tokens.js +22 -0
  34. package/dist/sdk/ai/cache-benchmark/types.d.ts +137 -0
  35. package/dist/sdk/ai/cache-benchmark/types.d.ts.map +1 -0
  36. package/dist/sdk/ai/cache-benchmark/types.js +14 -0
  37. package/dist/sdk/ai/env-api-keys.js +0 -17
  38. package/dist/sdk/ai/models.d.ts.map +1 -1
  39. package/dist/sdk/ai/models.js +10 -0
  40. package/dist/sdk/ai/providers/openai-completions.d.ts +1 -3
  41. package/dist/sdk/ai/providers/openai-completions.d.ts.map +1 -1
  42. package/dist/sdk/ai/providers/openai-completions.js +4 -100
  43. package/dist/sdk/ai/providers/transform-messages.d.ts.map +1 -1
  44. package/dist/sdk/ai/providers/transform-messages.js +35 -0
  45. package/dist/sdk/ai/types.d.ts +2 -4
  46. package/dist/sdk/ai/types.d.ts.map +1 -1
  47. package/dist/sdk/ai/utils/oauth/index.d.ts +1 -2
  48. package/dist/sdk/ai/utils/oauth/index.d.ts.map +1 -1
  49. package/dist/sdk/ai/utils/oauth/index.js +1 -3
  50. package/dist/sdk/coding-agent/core/agent-session.d.ts +2 -0
  51. package/dist/sdk/coding-agent/core/agent-session.d.ts.map +1 -1
  52. package/dist/sdk/coding-agent/core/agent-session.js +3 -4
  53. package/dist/sdk/coding-agent/core/compaction/llm-compaction.d.ts.map +1 -1
  54. package/dist/sdk/coding-agent/core/compaction/llm-compaction.js +2 -1
  55. package/dist/sdk/coding-agent/core/model-registry.d.ts.map +1 -1
  56. package/dist/sdk/coding-agent/core/model-registry.js +0 -1
  57. package/dist/sdk/coding-agent/core/model-resolver.d.ts.map +1 -1
  58. package/dist/sdk/coding-agent/core/model-resolver.js +0 -1
  59. package/dist/sdk/coding-agent/core/provider-display-names.d.ts.map +1 -1
  60. package/dist/sdk/coding-agent/core/provider-display-names.js +0 -2
  61. package/dist/sdk/coding-agent/core/system-prompt.d.ts.map +1 -1
  62. package/dist/sdk/coding-agent/core/system-prompt.js +52 -48
  63. package/dist/sdk/coding-agent/utils/shell.d.ts.map +1 -1
  64. package/dist/sdk/coding-agent/utils/shell.js +10 -0
  65. package/dist/server/agent-bridge.d.ts +6 -6
  66. package/dist/server/agent-bridge.d.ts.map +1 -1
  67. package/dist/server/agent-bridge.js +27 -106
  68. package/dist/server/handlers/sessions.d.ts +1 -0
  69. package/dist/server/handlers/sessions.d.ts.map +1 -1
  70. package/dist/server/handlers/sessions.js +6 -1
  71. package/dist/server/session-stream.d.ts.map +1 -1
  72. package/dist/server/session-stream.js +4 -0
  73. package/dist/server/storage.d.ts +14 -5
  74. package/dist/server/storage.d.ts.map +1 -1
  75. package/dist/server/storage.js +37 -10
  76. package/dist/server/wire.d.ts +1 -0
  77. package/dist/server/wire.d.ts.map +1 -1
  78. 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;AAO7C,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA0KjF"}
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
- process.stderr.write("[obs-mem] turn_end fired\n");
17
+ debugStderr(runtime, "[obs-mem] turn_end fired\n");
13
18
  runtime.ensureConfig(ctx.cwd);
14
19
  if (runtime.config.passive === true) {
15
- process.stderr.write("[obs-mem] passive=true → skipping\n");
20
+ debugStderr(runtime, "[obs-mem] passive=true → skipping\n");
16
21
  return;
17
22
  }
18
23
  if (runtime.observerInFlight) {
19
- process.stderr.write("[obs-mem] observer already in flight → skipping\n");
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
- process.stderr.write(`[obs-mem] tokens since last bound: ${tokens} (threshold: ${runtime.config.observationThresholdTokens})\n`);
29
+ debugStderr(runtime, `[obs-mem] tokens since last bound: ${tokens} (threshold: ${runtime.config.observationThresholdTokens})\n`);
25
30
  if (tokens < runtime.config.observationThresholdTokens) {
26
- process.stderr.write("[obs-mem] below threshold → skipping observer\n");
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
- process.stderr.write(`[obs-mem] chunk capped at ~${accumulated.toLocaleString()} tokens ` +
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,EAAqB,KAAK,UAAU,EAAwC,MAAM,4BAA4B,CAAC;AACjI,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,CAgHjG;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,EAAE,CAEhF"}
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"}
@@ -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
  ? {
@@ -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
- * rely on the backend pings rather than emitting our own (single source
11
- * of liveness, no jitter on our side).
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), force-closes the socket (4001 "watchdog-timeout")
15
- * and triggers a reconnect. Detects silent backend death (Docker OOM
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,SAAS,MAAM,IAAI,CAAC;AA4B3B,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACjD,2DAA2D;IAC3D,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C;;;;OAIG;IACH,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;CAChC;AAED,6EAA6E;AAC7E,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmB;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IACjE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+C;IAE3E,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,mEAAmE;IACnE,OAAO,CAAC,UAAU,CAAK;IACvB,qEAAqE;IACrE,OAAO,CAAC,sBAAsB,CAAK;IACnC,mEAAmE;IACnE,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,SAAS,CAAgB;IACjC,iFAAiF;IACjF,OAAO,CAAC,UAAU,CAAS;IAE3B,qEAAqE;IACrE,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,aAAa,CAA+B;gBAExC,IAAI,EAAE,kBAAkB;IAYpC,kEAAkE;IAClE,OAAO,IAAI,IAAI;IAMf;;;;;;;OAOG;IACH,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO;IAqBzC;;;OAGG;IACH,OAAO,IAAI,IAAI;IA2Bf,OAAO,CAAC,UAAU;IA4LlB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,YAAY;IAOpB;;;;;OAKG;YACW,WAAW;YA8BX,iBAAiB;CAmDhC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/relay/client.ts"],"names":[],"mappings":"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"}