@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.
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +1 -0
- 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/dispatcher.d.ts +7 -2
- package/dist/relay/dispatcher.d.ts.map +1 -1
- package/dist/relay/dispatcher.js +25 -18
- 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/sqlite-adapter.d.ts +17 -0
- package/dist/server/sqlite-adapter.d.ts.map +1 -1
- package/dist/server/sqlite-adapter.js +18 -0
- package/dist/server/storage.d.ts +44 -0
- package/dist/server/storage.d.ts.map +1 -1
- package/dist/server/storage.js +166 -8
- 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":"
|
|
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;
|
|
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
|
}
|
package/dist/server/storage.d.ts
CHANGED
|
@@ -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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"}
|