@aexol/spectral 0.9.173 → 0.9.175
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/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +1 -0
- package/dist/extensions/desktop-screenshot/index.d.ts.map +1 -1
- package/dist/extensions/desktop-screenshot/index.js +6 -5
- package/dist/generated/zeus/const.d.ts.map +1 -1
- package/dist/generated/zeus/const.js +6 -2
- package/dist/generated/zeus/index.d.ts +24 -0
- package/dist/generated/zeus/index.d.ts.map +1 -1
- package/dist/memory/config.d.ts +2 -0
- package/dist/memory/config.d.ts.map +1 -1
- package/dist/memory/config.js +25 -0
- package/dist/relay/auto-optimizer.d.ts +1 -1
- package/dist/relay/auto-optimizer.d.ts.map +1 -1
- package/dist/relay/auto-optimizer.js +3 -3
- package/dist/relay/auto-research.d.ts +1 -1
- package/dist/relay/auto-research.d.ts.map +1 -1
- package/dist/relay/auto-research.js +3 -3
- package/dist/relay/dispatcher.d.ts +7 -2
- package/dist/relay/dispatcher.d.ts.map +1 -1
- package/dist/relay/dispatcher.js +27 -20
- package/dist/server/handlers/agent-settings.d.ts +6 -0
- package/dist/server/handlers/agent-settings.d.ts.map +1 -1
- package/dist/server/handlers/agent-settings.js +88 -1
- package/dist/server/handlers/paths-autocomplete.d.ts +4 -4
- package/dist/server/handlers/paths-autocomplete.d.ts.map +1 -1
- package/dist/server/handlers/paths-autocomplete.js +10 -10
- package/dist/server/handlers/projects.d.ts +6 -0
- package/dist/server/handlers/projects.d.ts.map +1 -1
- package/dist/server/handlers/projects.js +18 -0
- package/dist/server/handlers/sessions.d.ts +12 -0
- package/dist/server/handlers/sessions.d.ts.map +1 -1
- package/dist/server/handlers/sessions.js +68 -0
- package/dist/server/handlers/settings-lock.d.ts +19 -0
- package/dist/server/handlers/settings-lock.d.ts.map +1 -1
- package/dist/server/handlers/settings-lock.js +65 -1
- package/dist/server/handlers/settings.d.ts +4 -0
- package/dist/server/handlers/settings.d.ts.map +1 -1
- package/dist/server/handlers/settings.js +38 -2
- package/dist/server/session-stream.d.ts +6 -1
- package/dist/server/session-stream.d.ts.map +1 -1
- package/dist/server/session-stream.js +32 -12
- package/dist/server/sqlite-adapter.d.ts +31 -0
- package/dist/server/sqlite-adapter.d.ts.map +1 -1
- package/dist/server/sqlite-adapter.js +53 -0
- package/dist/server/storage.d.ts +52 -0
- package/dist/server/storage.d.ts.map +1 -1
- package/dist/server/storage.js +178 -8
- package/package.json +1 -1
|
@@ -31,6 +31,10 @@ export function handleGetProjectObservations(store, id, limit = 30) {
|
|
|
31
31
|
export function handleListProjects(store) {
|
|
32
32
|
return store.listProjects();
|
|
33
33
|
}
|
|
34
|
+
/** Async relay-path twin of {@link handleListProjects}. */
|
|
35
|
+
export async function handleListProjectsAsync(store) {
|
|
36
|
+
return store.listProjectsAsync();
|
|
37
|
+
}
|
|
34
38
|
export function handleCreateProject(store, body) {
|
|
35
39
|
if (typeof body.name !== "string" || !body.name.trim()) {
|
|
36
40
|
throw new BadRequestError("name (non-empty string) is required");
|
|
@@ -50,6 +54,13 @@ export function handleGetProject(store, id) {
|
|
|
50
54
|
throw new NotFoundError("Project not found");
|
|
51
55
|
return project;
|
|
52
56
|
}
|
|
57
|
+
/** Async relay-path twin of {@link handleGetProject}. */
|
|
58
|
+
export async function handleGetProjectAsync(store, id) {
|
|
59
|
+
const project = await store.getProjectAsync(id);
|
|
60
|
+
if (!project)
|
|
61
|
+
throw new NotFoundError("Project not found");
|
|
62
|
+
return project;
|
|
63
|
+
}
|
|
53
64
|
export function handleUpdateProject(store, id, body) {
|
|
54
65
|
const update = {};
|
|
55
66
|
if (body.name !== undefined) {
|
|
@@ -157,6 +168,13 @@ export function handleListSessionsByProject(store, id) {
|
|
|
157
168
|
throw new NotFoundError("Project not found");
|
|
158
169
|
return store.listSessionsByProject(id);
|
|
159
170
|
}
|
|
171
|
+
/** Async relay-path twin of {@link handleListSessionsByProject}. */
|
|
172
|
+
export async function handleListSessionsByProjectAsync(store, id) {
|
|
173
|
+
const project = await store.getProjectAsync(id);
|
|
174
|
+
if (!project)
|
|
175
|
+
throw new NotFoundError("Project not found");
|
|
176
|
+
return store.listSessionsByProjectAsync(id);
|
|
177
|
+
}
|
|
160
178
|
export function handleCleanupProjectSessions(store, id, body) {
|
|
161
179
|
const project = store.getProject(id);
|
|
162
180
|
if (!project)
|
|
@@ -39,14 +39,26 @@ export interface CompactSessionInputRaw {
|
|
|
39
39
|
export declare function parseCompactSessionMode(body: unknown): CompactSessionMode;
|
|
40
40
|
export declare function handleCreateSession(store: SessionStore, body: CreateSessionInputRaw): WireSessionSummary;
|
|
41
41
|
export declare function handleGetSessionDetail(store: SessionStore, id: string): WireSessionDetail;
|
|
42
|
+
/** Async relay-path twin of {@link handleGetSessionDetail}. */
|
|
43
|
+
export declare function handleGetSessionDetailAsync(store: SessionStore, id: string): Promise<WireSessionDetail>;
|
|
42
44
|
export declare function handleGetSessionMessages(store: SessionStore, id: string, query: GetSessionMessagesInputRaw): WireSessionDetail;
|
|
45
|
+
/** Async relay-path twin of {@link handleGetSessionMessages}. */
|
|
46
|
+
export declare function handleGetSessionMessagesAsync(store: SessionStore, id: string, query: GetSessionMessagesInputRaw): Promise<WireSessionDetail>;
|
|
43
47
|
export declare function handleUpdateSession(store: SessionStore, id: string, body: UpdateSessionInputRaw): WireSessionSummary;
|
|
44
48
|
export declare function handleGetSessionActiveAgent(store: SessionStore, id: string): {
|
|
45
49
|
activeAgent: string | null;
|
|
46
50
|
};
|
|
51
|
+
/** Async relay-path twin of {@link handleGetSessionActiveAgent}. */
|
|
52
|
+
export declare function handleGetSessionActiveAgentAsync(store: SessionStore, id: string): Promise<{
|
|
53
|
+
activeAgent: string | null;
|
|
54
|
+
}>;
|
|
47
55
|
export declare function handleUpdateSessionActiveAgent(store: SessionStore, id: string, body: UpdateSessionAgentInputRaw, manager?: SessionStreamManager): {
|
|
48
56
|
activeAgent: string | null;
|
|
49
57
|
};
|
|
58
|
+
/** Async relay-path twin of {@link handleUpdateSessionActiveAgent}. */
|
|
59
|
+
export declare function handleUpdateSessionActiveAgentAsync(store: SessionStore, id: string, body: UpdateSessionAgentInputRaw, manager?: SessionStreamManager): Promise<{
|
|
60
|
+
activeAgent: string | null;
|
|
61
|
+
}>;
|
|
50
62
|
export declare function handleDeleteSession(store: SessionStore, id: string): void;
|
|
51
63
|
export declare function handleGetSessionMemoryStatus(store: SessionStore, manager: SessionStreamManager, id: string): WireSessionMemoryStatus;
|
|
52
64
|
export declare function handleGetSessionMemoryDetails(store: SessionStore, manager: SessionStreamManager, id: string): WireSessionMemoryDetails;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/sessions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"
|
|
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
|
+
}
|
|
@@ -286,10 +286,15 @@ export declare class SessionStreamManager {
|
|
|
286
286
|
* initial `session_ready` frame using the returned replay payload (this
|
|
287
287
|
* keeps wire-protocol concerns in the routes layer).
|
|
288
288
|
*
|
|
289
|
+
* The first-attach full-history read goes through the adapter's paged
|
|
290
|
+
* async `queryAll` path so a large multi-MB event-blob scan does not block
|
|
291
|
+
* the Node event loop for the duration of a synchronous `better-sqlite3`
|
|
292
|
+
* `stmt.all()` call.
|
|
293
|
+
*
|
|
289
294
|
* Throws if the session id is unknown in SQLite (caller should turn this
|
|
290
295
|
* into a wire-level error frame + close).
|
|
291
296
|
*/
|
|
292
|
-
attach(sessionId: string, subscriber: Subscriber): AttachResult
|
|
297
|
+
attach(sessionId: string, subscriber: Subscriber): Promise<AttachResult>;
|
|
293
298
|
/**
|
|
294
299
|
* Detach a subscriber. Idempotent. Does NOT dispose the underlying spectral
|
|
295
300
|
* session — even when subscribers reach zero, the in-flight turn must
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-stream.d.ts","sourceRoot":"","sources":["../../src/server/session-stream.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-stream.d.ts","sourceRoot":"","sources":["../../src/server/session-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -551,25 +551,45 @@ export class SessionStreamManager {
|
|
|
551
551
|
* initial `session_ready` frame using the returned replay payload (this
|
|
552
552
|
* keeps wire-protocol concerns in the routes layer).
|
|
553
553
|
*
|
|
554
|
+
* The first-attach full-history read goes through the adapter's paged
|
|
555
|
+
* async `queryAll` path so a large multi-MB event-blob scan does not block
|
|
556
|
+
* the Node event loop for the duration of a synchronous `better-sqlite3`
|
|
557
|
+
* `stmt.all()` call.
|
|
558
|
+
*
|
|
554
559
|
* Throws if the session id is unknown in SQLite (caller should turn this
|
|
555
560
|
* into a wire-level error frame + close).
|
|
556
561
|
*/
|
|
557
|
-
attach(sessionId, subscriber) {
|
|
562
|
+
async attach(sessionId, subscriber) {
|
|
558
563
|
if (this.disposed)
|
|
559
564
|
throw new Error("SessionStreamManager disposed");
|
|
560
|
-
const detail = this.store.getSession(sessionId);
|
|
561
|
-
if (!detail)
|
|
562
|
-
throw new Error(`Unknown sessionId: ${sessionId}`);
|
|
563
|
-
const totalMessageCount = this.store.countMessagesBySession(sessionId);
|
|
564
|
-
const rawHistory = totalMessageCount > UI_HISTORY_TAIL_MESSAGE_LIMIT
|
|
565
|
-
? this.store.getMessagesTail(sessionId, UI_HISTORY_TAIL_MESSAGE_LIMIT)
|
|
566
|
-
: detail.messages;
|
|
567
|
-
const loadedMessageCount = rawHistory.length;
|
|
568
565
|
let stream = this.streams.get(sessionId);
|
|
569
566
|
if (!stream) {
|
|
570
|
-
|
|
567
|
+
// Full history is only required to rehydrate the LLM bridge on first
|
|
568
|
+
// attach. Subsequent attaches (e.g. a second browser tab) read only the
|
|
569
|
+
// bounded UI tail below, avoiding the full multi-MB event-blob scan.
|
|
570
|
+
// Preserve the exact `getSession()` ordering while paging the heavy
|
|
571
|
+
// multi-blob read through the adapter's async trampoline.
|
|
572
|
+
const meta = this.store.getSessionMeta(sessionId);
|
|
573
|
+
if (!meta)
|
|
574
|
+
throw new Error(`Unknown sessionId: ${sessionId}`);
|
|
575
|
+
const messages = await this.store.getMessagesAsync(sessionId);
|
|
576
|
+
stream = this.createStream(sessionId, messages);
|
|
571
577
|
this.streams.set(sessionId, stream);
|
|
572
578
|
}
|
|
579
|
+
else {
|
|
580
|
+
// Validate existence without loading the full message history.
|
|
581
|
+
if (!this.store.getSessionMeta(sessionId)) {
|
|
582
|
+
throw new Error(`Unknown sessionId: ${sessionId}`);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
// Bounded reads for the browser replay payload: message count + the most
|
|
586
|
+
// recent `UI_HISTORY_TAIL_MESSAGE_LIMIT` messages. When the session has
|
|
587
|
+
// fewer than the tail limit, the tail query returns every message,
|
|
588
|
+
// matching the previous `detail.messages` path exactly. The first-attach
|
|
589
|
+
// branch already validated session existence via `getSession()`.
|
|
590
|
+
const totalMessageCount = this.store.countMessagesBySession(sessionId);
|
|
591
|
+
const rawHistory = this.store.getMessagesTail(sessionId, UI_HISTORY_TAIL_MESSAGE_LIMIT);
|
|
592
|
+
const loadedMessageCount = rawHistory.length;
|
|
573
593
|
const activeTurnMessageIds = stream.currentMessageId && stream.currentTurn
|
|
574
594
|
? assistantMessageIdsForTurn(stream.currentTurn)
|
|
575
595
|
: new Set();
|
|
@@ -1601,8 +1621,8 @@ export class SessionStreamManager {
|
|
|
1601
1621
|
cwd,
|
|
1602
1622
|
sessionId,
|
|
1603
1623
|
activePrimaryAgent: this.store.getSessionActiveAgent(sessionId),
|
|
1604
|
-
teamId: this.store.getProject(
|
|
1605
|
-
|
|
1624
|
+
teamId: this.store.getProject(projectId ?? "")?.studioTeamId ??
|
|
1625
|
+
this.machineTeamId,
|
|
1606
1626
|
nativeResponseId: this.store.getSessionNativeResponseId(sessionId) ?? undefined,
|
|
1607
1627
|
agentDir: this.agentDir,
|
|
1608
1628
|
backendUrl: this.backendUrl,
|
|
@@ -23,10 +23,41 @@ export interface SqliteStatement<Params extends unknown[] = unknown[], Row = unk
|
|
|
23
23
|
all(...params: Params): Row[];
|
|
24
24
|
get(...params: Params): Row | undefined;
|
|
25
25
|
run(...params: Params): SqliteRunResult;
|
|
26
|
+
/**
|
|
27
|
+
* Lazy row iterator used by the Node adapter's `queryAll` to page large
|
|
28
|
+
* result sets without materializing them in one native `stmt.all()` call.
|
|
29
|
+
* Bun statements do not expose a compatible iterator; implementations may
|
|
30
|
+
* omit it and callers must fall back to `all`.
|
|
31
|
+
*/
|
|
32
|
+
iterate?(...params: Params): IterableIterator<Row>;
|
|
26
33
|
}
|
|
27
34
|
/** Full SQLite adapter. Mirrors the better-sqlite3 API surface used by SessionStore. */
|
|
28
35
|
export interface SqliteAdapter {
|
|
29
36
|
prepare<Params extends unknown[], Row = unknown>(sql: string): SqliteStatement<Params, Row>;
|
|
37
|
+
/**
|
|
38
|
+
* Off-main-thread query path used by the relay REST dispatcher.
|
|
39
|
+
*
|
|
40
|
+
* Node/better-sqlite3 is synchronous at the native layer, so this wraps
|
|
41
|
+
* the query in a `setImmediate` trampoline that yields to the event loop
|
|
42
|
+
* BEFORE executing the query. This is intentionally a yield rather than a
|
|
43
|
+
* worker-thread offload: it does not remove CPU cost, but it prevents a
|
|
44
|
+
* queue of relay requests from being serialized into one uninterrupted
|
|
45
|
+
* blocking burst, which was what caused each queued request to miss the
|
|
46
|
+
* backend's 30s timeout.
|
|
47
|
+
*
|
|
48
|
+
* Bun does not expose an equivalent promise-based query API, so the Bun
|
|
49
|
+
* adapter falls back to the synchronous `prepare(...).all(...)` path.
|
|
50
|
+
* That keeps the same wire shapes and lets Bun builds remain dependency
|
|
51
|
+
* free.
|
|
52
|
+
*/
|
|
53
|
+
queryAll<Row = unknown>(sql: string, ...params: unknown[]): Promise<Row[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Node-only paged query path. `queryAll` uses this when the statement
|
|
56
|
+
* exposes a lazy iterator so large result sets are read in bounded chunks
|
|
57
|
+
* with an event-loop yield between chunks. Bun has no compatible iterator
|
|
58
|
+
* and falls back to the existing synchronous `all()` trampoline.
|
|
59
|
+
*/
|
|
60
|
+
queryAllPaged<Row = unknown>(sql: string, pageSize: number, ...params: unknown[]): Promise<Row[]>;
|
|
30
61
|
exec(sql: string): void;
|
|
31
62
|
pragma(sql: string): void;
|
|
32
63
|
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;
|
|
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;IACxC;;;;;OAKG;IACH,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;CACpD;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;;;;;OAKG;IACH,aAAa,CAAC,GAAG,GAAG,OAAO,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,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;AA6MD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAK/D"}
|
|
@@ -40,6 +40,47 @@ class NodeSqliteAdapter {
|
|
|
40
40
|
prepare(sql) {
|
|
41
41
|
return new NodeStatement(this.db.prepare(sql));
|
|
42
42
|
}
|
|
43
|
+
queryAll(sql, ...params) {
|
|
44
|
+
return this.queryAllPaged(sql, 200, ...params);
|
|
45
|
+
}
|
|
46
|
+
queryAllPaged(sql, pageSize, ...params) {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
try {
|
|
49
|
+
const stmt = this.db.prepare(sql);
|
|
50
|
+
const iterator = stmt.iterate(...params);
|
|
51
|
+
const rows = [];
|
|
52
|
+
const page = [];
|
|
53
|
+
const safePageSize = Number.isFinite(pageSize) && pageSize > 0
|
|
54
|
+
? Math.floor(pageSize)
|
|
55
|
+
: 200;
|
|
56
|
+
const advance = () => {
|
|
57
|
+
try {
|
|
58
|
+
let next = iterator.next();
|
|
59
|
+
while (!next.done) {
|
|
60
|
+
page.push(next.value);
|
|
61
|
+
if (page.length >= safePageSize) {
|
|
62
|
+
rows.push(...page);
|
|
63
|
+
page.length = 0;
|
|
64
|
+
setImmediate(advance);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
next = iterator.next();
|
|
68
|
+
}
|
|
69
|
+
if (page.length > 0)
|
|
70
|
+
rows.push(...page);
|
|
71
|
+
resolve(rows);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
advance();
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
43
84
|
exec(sql) {
|
|
44
85
|
this.db.exec(sql);
|
|
45
86
|
}
|
|
@@ -96,6 +137,18 @@ class BunSqliteAdapter {
|
|
|
96
137
|
prepare(sql) {
|
|
97
138
|
return new BunStatement(this.db.query(sql));
|
|
98
139
|
}
|
|
140
|
+
queryAll(sql, ...params) {
|
|
141
|
+
// Bun has no native promise-based SQLite query path. This adapter keeps
|
|
142
|
+
// a synchronous fallback so the relay dispatcher can share one async
|
|
143
|
+
// code path across runtimes; see SqliteAdapter.queryAll docs.
|
|
144
|
+
return Promise.resolve(this.db.query(sql).all(...params));
|
|
145
|
+
}
|
|
146
|
+
queryAllPaged(sql, _pageSize, ...params) {
|
|
147
|
+
// Bun does not expose a compatible lazy row iterator. Fall back to the
|
|
148
|
+
// synchronous `.all()` path — the relay dispatcher still shares one async
|
|
149
|
+
// code path and Bun keeps the same wire shapes.
|
|
150
|
+
return Promise.resolve(this.db.query(sql).all(...params));
|
|
151
|
+
}
|
|
99
152
|
exec(sql) {
|
|
100
153
|
this.db.exec(sql);
|
|
101
154
|
}
|