@aexol/spectral 0.9.172 → 0.9.174

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 (33) hide show
  1. package/dist/commands/serve.d.ts.map +1 -1
  2. package/dist/commands/serve.js +1 -0
  3. package/dist/memory/config.d.ts +2 -0
  4. package/dist/memory/config.d.ts.map +1 -1
  5. package/dist/memory/config.js +25 -0
  6. package/dist/relay/dispatcher.d.ts +7 -2
  7. package/dist/relay/dispatcher.d.ts.map +1 -1
  8. package/dist/relay/dispatcher.js +25 -18
  9. package/dist/server/handlers/agent-settings.d.ts +6 -0
  10. package/dist/server/handlers/agent-settings.d.ts.map +1 -1
  11. package/dist/server/handlers/agent-settings.js +88 -1
  12. package/dist/server/handlers/paths-autocomplete.d.ts +4 -4
  13. package/dist/server/handlers/paths-autocomplete.d.ts.map +1 -1
  14. package/dist/server/handlers/paths-autocomplete.js +10 -10
  15. package/dist/server/handlers/projects.d.ts +6 -0
  16. package/dist/server/handlers/projects.d.ts.map +1 -1
  17. package/dist/server/handlers/projects.js +18 -0
  18. package/dist/server/handlers/sessions.d.ts +12 -0
  19. package/dist/server/handlers/sessions.d.ts.map +1 -1
  20. package/dist/server/handlers/sessions.js +68 -0
  21. package/dist/server/handlers/settings-lock.d.ts +19 -0
  22. package/dist/server/handlers/settings-lock.d.ts.map +1 -1
  23. package/dist/server/handlers/settings-lock.js +65 -1
  24. package/dist/server/handlers/settings.d.ts +4 -0
  25. package/dist/server/handlers/settings.d.ts.map +1 -1
  26. package/dist/server/handlers/settings.js +38 -2
  27. package/dist/server/sqlite-adapter.d.ts +17 -0
  28. package/dist/server/sqlite-adapter.d.ts.map +1 -1
  29. package/dist/server/sqlite-adapter.js +18 -0
  30. package/dist/server/storage.d.ts +44 -0
  31. package/dist/server/storage.d.ts.map +1 -1
  32. package/dist/server/storage.js +166 -8
  33. package/package.json +1 -1
@@ -47,6 +47,22 @@ export function handleGetSessionDetail(store, id) {
47
47
  ...(store.getForkCompactSource(id) ? { forkCompactPending: true } : {}),
48
48
  };
49
49
  }
50
+ /** Async relay-path twin of {@link handleGetSessionDetail}. */
51
+ export async function handleGetSessionDetailAsync(store, id) {
52
+ const meta = await store.getSessionMetaAsync(id);
53
+ if (!meta)
54
+ throw new NotFoundError("Session not found");
55
+ return {
56
+ ...meta,
57
+ messages: [],
58
+ totalMessageCount: 0,
59
+ loadedMessageCount: 0,
60
+ hasEarlierMessages: false,
61
+ ...(await store.getForkCompactSourceAsync(id)
62
+ ? { forkCompactPending: true }
63
+ : {}),
64
+ };
65
+ }
50
66
  export function handleGetSessionMessages(store, id, query) {
51
67
  const meta = store.getSessionMeta(id);
52
68
  if (!meta)
@@ -80,6 +96,40 @@ export function handleGetSessionMessages(store, id, query) {
80
96
  hasEarlierMessages: totalMessageCount > loadedMessageCount && projectedMessages.length > 0,
81
97
  };
82
98
  }
99
+ /** Async relay-path twin of {@link handleGetSessionMessages}. */
100
+ export async function handleGetSessionMessagesAsync(store, id, query) {
101
+ const meta = await store.getSessionMetaAsync(id);
102
+ if (!meta)
103
+ throw new NotFoundError("Session not found");
104
+ const rawLimit = typeof query.limit === "string" ? Number(query.limit) : Number(query.limit ?? 50);
105
+ const limit = Number.isFinite(rawLimit) ? Math.max(1, Math.min(200, rawLimit)) : 50;
106
+ const beforeCreatedAt = typeof query.beforeCreatedAt === "string" && query.beforeCreatedAt.trim().length > 0
107
+ ? Number(query.beforeCreatedAt)
108
+ : typeof query.beforeCreatedAt === "number"
109
+ ? query.beforeCreatedAt
110
+ : null;
111
+ if (beforeCreatedAt !== null && !Number.isFinite(beforeCreatedAt)) {
112
+ throw new BadRequestError("beforeCreatedAt must be a valid number");
113
+ }
114
+ const beforeId = typeof query.beforeId === "string" && query.beforeId.trim().length > 0
115
+ ? query.beforeId
116
+ : null;
117
+ const messages = await store.getMessagesBeforeAsync(id, {
118
+ beforeCreatedAt,
119
+ beforeId,
120
+ limit,
121
+ });
122
+ const projectedMessages = projectHistoryForReplay(messages);
123
+ const totalMessageCount = store.countMessagesBySession(id);
124
+ const loadedMessageCount = projectedMessages.length;
125
+ return {
126
+ ...meta,
127
+ messages: projectedMessages,
128
+ totalMessageCount,
129
+ loadedMessageCount,
130
+ hasEarlierMessages: totalMessageCount > loadedMessageCount && projectedMessages.length > 0,
131
+ };
132
+ }
83
133
  export function handleUpdateSession(store, id, body) {
84
134
  if (typeof body.title !== "string") {
85
135
  throw new BadRequestError("title (string) is required");
@@ -94,6 +144,12 @@ export function handleGetSessionActiveAgent(store, id) {
94
144
  throw new NotFoundError("Session not found");
95
145
  return { activeAgent: store.getSessionActiveAgent(id) };
96
146
  }
147
+ /** Async relay-path twin of {@link handleGetSessionActiveAgent}. */
148
+ export async function handleGetSessionActiveAgentAsync(store, id) {
149
+ if (!await store.getSessionMetaAsync(id))
150
+ throw new NotFoundError("Session not found");
151
+ return { activeAgent: await store.getSessionActiveAgentAsync(id) };
152
+ }
97
153
  export function handleUpdateSessionActiveAgent(store, id, body, manager) {
98
154
  if (!store.getSession(id))
99
155
  throw new NotFoundError("Session not found");
@@ -108,6 +164,18 @@ export function handleUpdateSessionActiveAgent(store, id, body, manager) {
108
164
  manager?.updateActivePrimaryAgent(id, nextAgent);
109
165
  return { activeAgent: store.getSessionActiveAgent(id) };
110
166
  }
167
+ /** Async relay-path twin of {@link handleUpdateSessionActiveAgent}. */
168
+ export async function handleUpdateSessionActiveAgentAsync(store, id, body, manager) {
169
+ if (!await store.getSessionMetaAsync(id))
170
+ throw new NotFoundError("Session not found");
171
+ if (body.activeAgent !== null && body.activeAgent !== undefined && typeof body.activeAgent !== "string") {
172
+ throw new BadRequestError("activeAgent must be a string, null, or omitted");
173
+ }
174
+ const nextAgent = body.activeAgent === undefined ? null : body.activeAgent;
175
+ store.setSessionActiveAgent(id, nextAgent);
176
+ manager?.updateActivePrimaryAgent(id, nextAgent);
177
+ return { activeAgent: await store.getSessionActiveAgentAsync(id) };
178
+ }
111
179
  export function handleDeleteSession(store, id) {
112
180
  const deleted = store.deleteSession(id);
113
181
  if (!deleted)
@@ -7,6 +7,13 @@ import { BadRequestError } from "./errors.js";
7
7
  * agent) cannot interleave and corrupt the file.
8
8
  */
9
9
  export declare function acquireLockSyncWithRetry(path: string): () => void;
10
+ /**
11
+ * Async twin of {@link acquireLockSyncWithRetry}. Uses `proper-lockfile`'s
12
+ * promise API and sleeps between `ELOCKED` attempts instead of busy-waiting
13
+ * so the relay event loop stays responsive while another request holds the
14
+ * settings lock.
15
+ */
16
+ export declare function acquireLockWithRetry(path: string): Promise<() => Promise<void>>;
10
17
  /**
11
18
  * Resolve the `settings.json` path for a given agent directory.
12
19
  * Falls back to the default agent dir (`~/.spectral/agent`) when
@@ -32,6 +39,18 @@ export declare function withSettingsLock(opts: {
32
39
  settingsPath?: string;
33
40
  namespace: string;
34
41
  }, fn: (current: Record<string, unknown>) => Record<string, unknown> | undefined): void;
42
+ /**
43
+ * Async twin of {@link withSettingsLock} for the relay REST path.
44
+ *
45
+ * Reads and writes through `node:fs/promises` and acquires the lock
46
+ * asynchronously so the event loop is never blocked while waiting on
47
+ * another settings write.
48
+ */
49
+ export declare function withSettingsLockAsync(opts: {
50
+ agentDir?: string;
51
+ settingsPath?: string;
52
+ namespace: string;
53
+ }, fn: (current: Record<string, unknown>) => Record<string, unknown> | undefined): Promise<void>;
35
54
  /** Re-exported for handler convenience. */
36
55
  export { BadRequestError };
37
56
  //# sourceMappingURL=settings-lock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-lock.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/settings-lock.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,IAAI,CAsBjE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACrE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5E,IAAI,CA4BN;AAED,2CAA2C;AAC3C,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"settings-lock.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/settings-lock.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,IAAI,CAqBjE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAoBrF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACrE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5E,IAAI,CA4BN;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACrE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5E,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED,2CAA2C;AAC3C,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
3
  import { dirname, join } from "node:path";
3
4
  import lockfile from "proper-lockfile";
4
5
  import { getAgentDir } from "../../sdk/coding-agent/index.js";
@@ -27,8 +28,34 @@ export function acquireLockSyncWithRetry(path) {
27
28
  }
28
29
  lastError = error;
29
30
  const start = Date.now();
30
- while (Date.now() - start < delayMs) {
31
+ while (Date.now() - start < delayMs) { }
32
+ }
33
+ }
34
+ throw lastError ?? new Error("Failed to acquire settings lock");
35
+ }
36
+ /**
37
+ * Async twin of {@link acquireLockSyncWithRetry}. Uses `proper-lockfile`'s
38
+ * promise API and sleeps between `ELOCKED` attempts instead of busy-waiting
39
+ * so the relay event loop stays responsive while another request holds the
40
+ * settings lock.
41
+ */
42
+ export async function acquireLockWithRetry(path) {
43
+ const maxAttempts = 10;
44
+ const delayMs = 20;
45
+ let lastError;
46
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
47
+ try {
48
+ return await lockfile.lock(path, { realpath: false });
49
+ }
50
+ catch (error) {
51
+ const code = typeof error === "object" && error !== null && "code" in error
52
+ ? String(error.code)
53
+ : undefined;
54
+ if (code !== "ELOCKED" || attempt === maxAttempts) {
55
+ throw error;
31
56
  }
57
+ lastError = error;
58
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
32
59
  }
33
60
  }
34
61
  throw lastError ?? new Error("Failed to acquire settings lock");
@@ -85,5 +112,42 @@ export function withSettingsLock(opts, fn) {
85
112
  }
86
113
  }
87
114
  }
115
+ /**
116
+ * Async twin of {@link withSettingsLock} for the relay REST path.
117
+ *
118
+ * Reads and writes through `node:fs/promises` and acquires the lock
119
+ * asynchronously so the event loop is never blocked while waiting on
120
+ * another settings write.
121
+ */
122
+ export async function withSettingsLockAsync(opts, fn) {
123
+ const path = opts.settingsPath ?? settingsFilePath(opts.agentDir);
124
+ const dir = dirname(path);
125
+ let release;
126
+ try {
127
+ const fileExists = existsSync(path);
128
+ if (fileExists) {
129
+ release = await acquireLockWithRetry(path);
130
+ }
131
+ const raw = fileExists ? await readFile(path, "utf-8") : "{}";
132
+ const parsed = JSON.parse(raw);
133
+ const ns = (parsed[opts.namespace] ?? {});
134
+ const next = fn(ns);
135
+ if (next !== undefined) {
136
+ parsed[opts.namespace] = { ...ns, ...next };
137
+ if (!existsSync(dir)) {
138
+ await mkdir(dir, { recursive: true });
139
+ }
140
+ if (!release) {
141
+ release = await acquireLockWithRetry(path);
142
+ }
143
+ await writeFile(path, JSON.stringify(parsed, null, 2), "utf-8");
144
+ }
145
+ }
146
+ finally {
147
+ if (release) {
148
+ await release();
149
+ }
150
+ }
151
+ }
88
152
  /** Re-exported for handler convenience. */
89
153
  export { BadRequestError };
@@ -32,5 +32,9 @@ export interface GetSettingsOutput {
32
32
  debugLog: boolean;
33
33
  }
34
34
  export declare function handleGetSettings(cwd: string): GetSettingsOutput;
35
+ /** Async relay-path twin of {@link handleGetSettings}. */
36
+ export declare function handleGetSettingsAsync(cwd: string): Promise<GetSettingsOutput>;
35
37
  export declare function handlePutSettings(cwd: string, body: PutSettingsInput): PutSettingsOutput;
38
+ /** Async relay-path twin of {@link handlePutSettings}. */
39
+ export declare function handlePutSettingsAsync(cwd: string, body: PutSettingsInput): Promise<PutSettingsOutput>;
36
40
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/settings.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAChC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AACD,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,IAAI,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAEjC,0BAA0B,EAAE,MAAM,CAAC;IACnC,yBAAyB,EAAE,MAAM,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAElC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,CAAC;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,+BAA+B,EAAE,MAAM,CAAC;IACxC,sBAAsB,EAAE,MAAM,CAAC;IAE/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,MAAM,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAE/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAuDD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAqBhE;AAsBD,wBAAgB,iBAAiB,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,gBAAgB,GACpB,iBAAiB,CAanB"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/settings.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAChC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AACD,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,IAAI,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAEjC,0BAA0B,EAAE,MAAM,CAAC;IACnC,yBAAyB,EAAE,MAAM,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAElC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,CAAC;IACjC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,+BAA+B,EAAE,MAAM,CAAC;IACxC,sBAAsB,EAAE,MAAM,CAAC;IAE/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,MAAM,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAE/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAuDD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAqBhE;AAED,0DAA0D;AAC1D,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqBpF;AAsBD,wBAAgB,iBAAiB,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,gBAAgB,GACpB,iBAAiB,CAanB;AAED,0DAA0D;AAC1D,wBAAsB,sBAAsB,CAC3C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,gBAAgB,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAa5B"}
@@ -1,6 +1,6 @@
1
- import { loadConfig, resolveTurnLimits } from "../../memory/config.js";
1
+ import { loadConfig, loadConfigAsync, resolveTurnLimits } from "../../memory/config.js";
2
2
  import { BadRequestError } from "./errors.js";
3
- import { withSettingsLock } from "./settings-lock.js";
3
+ import { withSettingsLock, withSettingsLockAsync } from "./settings-lock.js";
4
4
  const MIN_TOKENS = 1_000;
5
5
  const MAX_TOKENS = 1_000_000;
6
6
  const MIN_ITERATION = 1;
@@ -62,6 +62,29 @@ export function handleGetSettings(cwd) {
62
62
  debugLog: config.debugLog,
63
63
  };
64
64
  }
65
+ /** Async relay-path twin of {@link handleGetSettings}. */
66
+ export async function handleGetSettingsAsync(cwd) {
67
+ const config = await loadConfigAsync(cwd);
68
+ const turnLimits = resolveTurnLimits(config);
69
+ return {
70
+ observationThresholdTokens: config.observationThresholdTokens,
71
+ compactionThresholdTokens: config.compactionThresholdTokens,
72
+ reflectionThresholdTokens: config.reflectionThresholdTokens,
73
+ dcpNudgeMinRawTokens: config.dcpNudgeMinRawTokens,
74
+ dcpNudgeMinContextTokens: config.dcpNudgeMinContextTokens,
75
+ dcpNudgeContextPercent: config.dcpNudgeContextPercent,
76
+ dcpNudgeTurnInterval: config.dcpNudgeTurnInterval,
77
+ dcpInRunNudgeIterationThreshold: config.dcpInRunNudgeIterationThreshold,
78
+ dcpInRunNudgeFrequency: config.dcpInRunNudgeFrequency,
79
+ observerMaxTurnsPerRun: turnLimits.observerMaxTurnsPerRun,
80
+ observerMaxChunkTokens: config.observerMaxChunkTokens ?? 30_000,
81
+ reflectorMaxTurnsPerPass: turnLimits.reflectorMaxTurnsPerPass,
82
+ prunerMaxTurnsPerPass: turnLimits.prunerMaxTurnsPerPass,
83
+ compactionMaxToolCalls: config.compactionMaxToolCalls ?? turnLimits.reflectorMaxTurnsPerPass,
84
+ passive: config.passive,
85
+ debugLog: config.debugLog,
86
+ };
87
+ }
65
88
  function validateValue(meta, value) {
66
89
  if (meta.kind === "boolean") {
67
90
  if (typeof value !== "boolean") {
@@ -91,3 +114,16 @@ export function handlePutSettings(cwd, body) {
91
114
  });
92
115
  return { ok: true, key, value };
93
116
  }
117
+ /** Async relay-path twin of {@link handlePutSettings}. */
118
+ export async function handlePutSettingsAsync(cwd, body) {
119
+ if (typeof body.key !== "string" || !ALLOWED_KEYS.has(body.key)) {
120
+ throw new BadRequestError(`settings key must be one of: ${[...ALLOWED_KEYS].join(", ")}`);
121
+ }
122
+ const key = body.key;
123
+ const meta = SETTING_META[key];
124
+ const value = validateValue(meta, body.value);
125
+ await withSettingsLockAsync({ namespace: "observational-memory" }, (current) => {
126
+ return { ...current, [key]: value };
127
+ });
128
+ return { ok: true, key, value };
129
+ }
@@ -27,6 +27,23 @@ export interface SqliteStatement<Params extends unknown[] = unknown[], Row = unk
27
27
  /** Full SQLite adapter. Mirrors the better-sqlite3 API surface used by SessionStore. */
28
28
  export interface SqliteAdapter {
29
29
  prepare<Params extends unknown[], Row = unknown>(sql: string): SqliteStatement<Params, Row>;
30
+ /**
31
+ * Off-main-thread query path used by the relay REST dispatcher.
32
+ *
33
+ * Node/better-sqlite3 is synchronous at the native layer, so this wraps
34
+ * the query in a `setImmediate` trampoline that yields to the event loop
35
+ * BEFORE executing the query. This is intentionally a yield rather than a
36
+ * worker-thread offload: it does not remove CPU cost, but it prevents a
37
+ * queue of relay requests from being serialized into one uninterrupted
38
+ * blocking burst, which was what caused each queued request to miss the
39
+ * backend's 30s timeout.
40
+ *
41
+ * Bun does not expose an equivalent promise-based query API, so the Bun
42
+ * adapter falls back to the synchronous `prepare(...).all(...)` path.
43
+ * That keeps the same wire shapes and lets Bun builds remain dependency
44
+ * free.
45
+ */
46
+ queryAll<Row = unknown>(sql: string, ...params: unknown[]): Promise<Row[]>;
30
47
  exec(sql: string): void;
31
48
  pragma(sql: string): void;
32
49
  transaction<T>(fn: () => T): () => T;
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../src/server/sqlite-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAcH,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe,CAC9B,MAAM,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,EACpC,GAAG,GAAG,OAAO;IAEb,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;IAC9B,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;IACxC,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC;CACzC;AAED,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,MAAM,SAAS,OAAO,EAAE,EAAE,GAAG,GAAG,OAAO,EAC7C,GAAG,EAAE,MAAM,GACV,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;IACrC,KAAK,IAAI,IAAI,CAAC;CACf;AAkID;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAK/D"}
1
+ {"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../src/server/sqlite-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAcH,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe,CAC9B,MAAM,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,EACpC,GAAG,GAAG,OAAO;IAEb,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;IAC9B,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;IACxC,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC;CACzC;AAED,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,MAAM,SAAS,OAAO,EAAE,EAAE,GAAG,GAAG,OAAO,EAC7C,GAAG,EAAE,MAAM,GACV,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,GAAG,GAAG,OAAO,EACpB,GAAG,EAAE,MAAM,EACX,GAAG,MAAM,EAAE,OAAO,EAAE,GACnB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;IACrC,KAAK,IAAI,IAAI,CAAC;CACf;AA6JD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAK/D"}
@@ -40,6 +40,18 @@ class NodeSqliteAdapter {
40
40
  prepare(sql) {
41
41
  return new NodeStatement(this.db.prepare(sql));
42
42
  }
43
+ queryAll(sql, ...params) {
44
+ return new Promise((resolve, reject) => {
45
+ setImmediate(() => {
46
+ try {
47
+ resolve(this.db.prepare(sql).all(...params));
48
+ }
49
+ catch (err) {
50
+ reject(err instanceof Error ? err : new Error(String(err)));
51
+ }
52
+ });
53
+ });
54
+ }
43
55
  exec(sql) {
44
56
  this.db.exec(sql);
45
57
  }
@@ -96,6 +108,12 @@ class BunSqliteAdapter {
96
108
  prepare(sql) {
97
109
  return new BunStatement(this.db.query(sql));
98
110
  }
111
+ queryAll(sql, ...params) {
112
+ // Bun has no native promise-based SQLite query path. This adapter keeps
113
+ // a synchronous fallback so the relay dispatcher can share one async
114
+ // code path across runtimes; see SqliteAdapter.queryAll docs.
115
+ return Promise.resolve(this.db.query(sql).all(...params));
116
+ }
99
117
  exec(sql) {
100
118
  this.db.exec(sql);
101
119
  }
@@ -85,8 +85,10 @@ export declare class SessionStore {
85
85
  readonly path: string;
86
86
  private db;
87
87
  private closed;
88
+ private readonly stmtListProjectsSQL;
88
89
  private stmtListProjects;
89
90
  private stmtGetProject;
91
+ private stmtCountSessionsByProject;
90
92
  private stmtCreateProject;
91
93
  private stmtUpdateProject;
92
94
  private stmtSetProjectStudioBinding;
@@ -142,10 +144,20 @@ export declare class SessionStore {
142
144
  constructor(path: string);
143
145
  /** Smoke check: returns the names of the tables in the DB. */
144
146
  listTables(): string[];
147
+ /** Shared row→WireProject mapping for the synchronous and async list paths. */
148
+ private mapProjectRowsWithCount;
145
149
  listProjects(): WireProject[];
150
+ /**
151
+ * Async twin of {@link listProjects}. Uses the adapter's `queryAll`
152
+ * trampoline so the Node adapter yields to the event loop before the
153
+ * potentially-large aggregate query runs. Wire shape is identical.
154
+ */
155
+ listProjectsAsync(): Promise<WireProject[]>;
146
156
  createProject(input: CreateProjectInput): WireProject;
147
157
  /** Returns null if not found. */
148
158
  getProject(id: string): WireProject | null;
159
+ /** Async twin of {@link getProject}. */
160
+ getProjectAsync(id: string): Promise<WireProject | null>;
149
161
  setProjectStudioBinding(id: string, binding: StudioBinding | null): WireProject | null;
150
162
  /**
151
163
  * Update a project's name and/or path. At least one must be provided.
@@ -166,6 +178,8 @@ export declare class SessionStore {
166
178
  };
167
179
  /** Sessions belonging to a single project, newest-first. */
168
180
  listSessionsByProject(projectId: string): WireSessionSummary[];
181
+ /** Async twin of {@link listSessionsByProject}. */
182
+ listSessionsByProjectAsync(projectId: string): Promise<WireSessionSummary[]>;
169
183
  /**
170
184
  * Batched variant of {@link listSessionsByProject} for many projects at once.
171
185
  *
@@ -184,6 +198,14 @@ export declare class SessionStore {
184
198
  * no sessions map to an empty array.
185
199
  */
186
200
  listSessionsByProjectIds(projectIds: string[]): Map<string, WireSessionSummary[]>;
201
+ /**
202
+ * Async twin of {@link listSessionsByProjectIds}. Runs the same single
203
+ * LEFT JOIN + GROUP BY query through the adapter trampoline so large
204
+ * aggregate reads yield to the event loop. Returns an identical Map with
205
+ * every requested project id present (empty arrays for projects with no
206
+ * sessions) and identical per-project `updated_at DESC` ordering.
207
+ */
208
+ listSessionsByProjectIdsAsync(projectIds: string[]): Promise<Map<string, WireSessionSummary[]>>;
187
209
  createSession(input: CreateSessionInput): WireSessionSummary;
188
210
  /** Returns null if not found. */
189
211
  getSession(id: string): WireSessionDetail | null;
@@ -201,6 +223,16 @@ export declare class SessionStore {
201
223
  createdAt: number;
202
224
  updatedAt: number;
203
225
  } | null;
226
+ /** Async twin of {@link getSessionMeta}. */
227
+ getSessionMetaAsync(id: string): Promise<{
228
+ id: string;
229
+ projectId: string;
230
+ title: string;
231
+ createdAt: number;
232
+ updatedAt: number;
233
+ } | null>;
234
+ /** Async twin of {@link getMessages} with a caller-supplied bound. */
235
+ getMessagesTailAsync(sessionId: string, limit: number): Promise<StoredMessage[]>;
204
236
  getMessages(sessionId: string): StoredMessage[];
205
237
  getMessagesTail(sessionId: string, limit: number): StoredMessage[];
206
238
  getMessagesBefore(sessionId: string, opts: {
@@ -208,7 +240,15 @@ export declare class SessionStore {
208
240
  beforeId: string | null;
209
241
  limit: number;
210
242
  }): StoredMessage[];
243
+ /** Async twin of {@link getMessagesBefore}. */
244
+ getMessagesBeforeAsync(sessionId: string, opts: {
245
+ beforeCreatedAt: number | null;
246
+ beforeId: string | null;
247
+ limit: number;
248
+ }): Promise<StoredMessage[]>;
211
249
  countMessagesBySession(sessionId: string): number;
250
+ /** Async twin of {@link countMessagesBySession}. */
251
+ countMessagesBySessionAsync(sessionId: string): Promise<number>;
212
252
  private mapMessageRows;
213
253
  /**
214
254
  * Append a message and bump the session's updated_at in one transaction.
@@ -275,6 +315,8 @@ export declare class SessionStore {
275
315
  */
276
316
  setSessionModel(sessionId: string, modelId: string | null): void;
277
317
  getSessionActiveAgent(sessionId: string): string | null;
318
+ /** Async twin of {@link getSessionActiveAgent}. */
319
+ getSessionActiveAgentAsync(sessionId: string): Promise<string | null>;
278
320
  setSessionActiveAgent(sessionId: string, agentName: string | null): void;
279
321
  /**
280
322
  * Get the persisted reasoningEffort for a session, or null if none
@@ -307,6 +349,8 @@ export declare class SessionStore {
307
349
  * was not forked or has already been compacted.
308
350
  */
309
351
  getForkCompactSource(sessionId: string): string | null;
352
+ /** Async twin of {@link getForkCompactSource}. */
353
+ getForkCompactSourceAsync(sessionId: string): Promise<string | null>;
310
354
  /**
311
355
  * Clear the fork-compact flag after compaction completes (or fails).
312
356
  * Idempotent-safe.
@@ -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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"}