@aexol/spectral 0.9.40 → 0.9.42
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/auth-helper.d.ts.map +1 -1
- package/dist/auth-helper.js +49 -11
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +12 -20
- package/dist/extensions/aexol-mcp.d.ts.map +1 -1
- package/dist/extensions/aexol-mcp.js +53 -1
- package/dist/mcp/init.d.ts +1 -0
- package/dist/mcp/init.d.ts.map +1 -1
- package/dist/mcp/init.js +72 -29
- package/dist/mcp/state.d.ts +7 -0
- package/dist/mcp/state.d.ts.map +1 -1
- package/dist/relay/dispatcher.d.ts +2 -1
- package/dist/relay/dispatcher.d.ts.map +1 -1
- package/dist/relay/dispatcher.js +65 -2
- package/dist/server/handlers/mcp-reload.d.ts +8 -0
- package/dist/server/handlers/mcp-reload.d.ts.map +1 -0
- package/dist/server/handlers/mcp-reload.js +9 -0
- package/dist/server/handlers/projects.d.ts +8 -0
- package/dist/server/handlers/projects.d.ts.map +1 -1
- package/dist/server/handlers/projects.js +11 -0
- package/dist/server/handlers/sessions.d.ts +6 -0
- package/dist/server/handlers/sessions.d.ts.map +1 -1
- package/dist/server/handlers/sessions.js +32 -0
- package/dist/server/session-stream.d.ts +3 -0
- package/dist/server/session-stream.d.ts.map +1 -1
- package/dist/server/session-stream.js +11 -1
- package/dist/server/storage.d.ts +23 -0
- package/dist/server/storage.d.ts.map +1 -1
- package/dist/server/storage.js +62 -1
- package/dist/server/wire.d.ts +12 -0
- package/dist/server/wire.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-helper.d.ts","sourceRoot":"","sources":["../src/auth-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAOrB,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"auth-helper.d.ts","sourceRoot":"","sources":["../src/auth-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAOrB,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8FD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,GAAE,MAAyB,GACnC,OAAO,CAAC,WAAW,CAAC,CA8DtB;AAMD,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAUjD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAkDrE"}
|
package/dist/auth-helper.js
CHANGED
|
@@ -33,6 +33,34 @@ function deriveLandingUrl(backendUrl) {
|
|
|
33
33
|
}
|
|
34
34
|
return DEFAULT_BACKEND_URL;
|
|
35
35
|
}
|
|
36
|
+
function decodeJwtExp(jwt) {
|
|
37
|
+
const parts = jwt.split(".");
|
|
38
|
+
if (parts.length < 2)
|
|
39
|
+
return null;
|
|
40
|
+
try {
|
|
41
|
+
const payloadJson = Buffer.from(parts[1], "base64url").toString("utf8");
|
|
42
|
+
const payload = JSON.parse(payloadJson);
|
|
43
|
+
return typeof payload.exp === "number" ? payload.exp : null;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function isJwtExpired(jwt, skewSec = 60) {
|
|
50
|
+
const exp = decodeJwtExp(jwt);
|
|
51
|
+
if (exp === null)
|
|
52
|
+
return true;
|
|
53
|
+
return Date.now() / 1000 + skewSec >= exp;
|
|
54
|
+
}
|
|
55
|
+
function validateCallbackToken(token) {
|
|
56
|
+
if (!token || token.split(".").length !== 3) {
|
|
57
|
+
return { ok: false, reason: "Authorization callback returned an invalid token format." };
|
|
58
|
+
}
|
|
59
|
+
if (isJwtExpired(token)) {
|
|
60
|
+
return { ok: false, reason: "Authorization callback returned an expired token." };
|
|
61
|
+
}
|
|
62
|
+
return { ok: true };
|
|
63
|
+
}
|
|
36
64
|
/**
|
|
37
65
|
* Start a temporary HTTP server to receive the OAuth callback.
|
|
38
66
|
* Returns the server and a promise that resolves with the JWT token.
|
|
@@ -104,6 +132,10 @@ export async function runOAuthFlow(apiUrl, timeoutMs = OAUTH_TIMEOUT_MS) {
|
|
|
104
132
|
}
|
|
105
133
|
});
|
|
106
134
|
const token = await tokenPromise;
|
|
135
|
+
const validation = validateCallbackToken(token);
|
|
136
|
+
if (!validation.ok) {
|
|
137
|
+
return { ok: false, reason: validation.reason };
|
|
138
|
+
}
|
|
107
139
|
// Save the token, preserving existing config (especially teamApiKey).
|
|
108
140
|
const cfg = existingCfg ?? {
|
|
109
141
|
apiUrl: resolvedApiUrl,
|
|
@@ -159,19 +191,25 @@ export async function ensureAuthenticated() {
|
|
|
159
191
|
const token = existingCfg?.teamApiKey || existingCfg?.userJwt || "";
|
|
160
192
|
// If we have a token, verify it still works
|
|
161
193
|
if (token) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
// Token is still valid
|
|
166
|
-
return { ok: true, config: existingCfg };
|
|
194
|
+
// If the stored user JWT is locally known to be expired, skip the network roundtrip
|
|
195
|
+
if (existingCfg?.userJwt && isJwtExpired(existingCfg.userJwt)) {
|
|
196
|
+
// fall through to OAuth
|
|
167
197
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
198
|
+
else {
|
|
199
|
+
try {
|
|
200
|
+
const client = new AexolMcpClient(apiUrl, token);
|
|
201
|
+
await client.listTools();
|
|
202
|
+
// Token is still valid
|
|
203
|
+
return { ok: true, config: existingCfg };
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
if (!isAuthError(err)) {
|
|
207
|
+
// Non-auth error (network, server down) — don't re-auth, just report
|
|
208
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
209
|
+
return { ok: false, config: existingCfg, reason: `Backend unreachable: ${msg}` };
|
|
210
|
+
}
|
|
211
|
+
// Token is invalid/expired — fall through to OAuth
|
|
173
212
|
}
|
|
174
|
-
// Token is invalid/expired — fall through to OAuth
|
|
175
213
|
}
|
|
176
214
|
}
|
|
177
215
|
// No valid token — run OAuth flow
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAuBH,OAAO,EAAE,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AASlE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAmB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAsBrE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAazD;AAED,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CA6B9D;AAED,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,KAAK,EAAE,YAAY,CAAC;IACpB,wDAAwD;IACxD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,4CAA4C;IAC5C,KAAK,EAAE,WAAW,CAAC;IACnB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAsB,QAAQ,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAuBH,OAAO,EAAE,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AASlE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAmB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAsBrE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAazD;AAED,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CA6B9D;AAED,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,KAAK,EAAE,YAAY,CAAC;IACpB,wDAAwD;IACxD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,4CAA4C;IAC5C,KAAK,EAAE,WAAW,CAAC;IACnB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAsB,QAAQ,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CA0YlF;AAwDD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAa5E"}
|
package/dist/commands/serve.js
CHANGED
|
@@ -239,6 +239,7 @@ export async function runServe(opts = {}) {
|
|
|
239
239
|
agentDir: getAgentDir(),
|
|
240
240
|
publishMetaEvent: deferredPublishMetaEvent,
|
|
241
241
|
mcpState: getLiveMcpState() ?? undefined,
|
|
242
|
+
refreshNativeExtensions: () => refreshNativeExtensionsInfo(cwd, r, registration.record.machineId),
|
|
242
243
|
}).then((response) => {
|
|
243
244
|
r.send(response);
|
|
244
245
|
});
|
|
@@ -298,7 +299,7 @@ export async function runServe(opts = {}) {
|
|
|
298
299
|
r.on("welcome", () => {
|
|
299
300
|
if (!silent)
|
|
300
301
|
process.stdout.write("✓ Relay connected\n");
|
|
301
|
-
|
|
302
|
+
refreshNativeExtensionsInfo(cwd, r, registration.record.machineId).catch(() => { });
|
|
302
303
|
});
|
|
303
304
|
if (!silent) {
|
|
304
305
|
r.on("close", ({ code, reason }) => {
|
|
@@ -488,20 +489,16 @@ export async function runServe(opts = {}) {
|
|
|
488
489
|
// ---------------------------------------------------------------------------
|
|
489
490
|
// Native extension settings helpers
|
|
490
491
|
// ---------------------------------------------------------------------------
|
|
491
|
-
function
|
|
492
|
+
async function refreshNativeExtensionsInfo(cwd, relay, machineId) {
|
|
492
493
|
const settingsManager = SettingsManager.create(cwd, getAgentDir());
|
|
493
|
-
settingsManager.reload()
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
});
|
|
502
|
-
}).catch((err) => {
|
|
503
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
504
|
-
process.stderr.write(`[serve] Failed to broadcast native extensions info: ${msg}\n`);
|
|
494
|
+
await settingsManager.reload();
|
|
495
|
+
const settings = settingsManager.getSettings();
|
|
496
|
+
const disabledNative = new Set(settings.disabledNativeExtensions ?? []);
|
|
497
|
+
const extensions = buildNativeExtensionsInfo(disabledNative);
|
|
498
|
+
relay.send({
|
|
499
|
+
kind: "native_extensions_info",
|
|
500
|
+
machineId,
|
|
501
|
+
extensions,
|
|
505
502
|
});
|
|
506
503
|
}
|
|
507
504
|
async function handleConfigPatch(frame, deps) {
|
|
@@ -528,12 +525,7 @@ async function handleConfigPatch(frame, deps) {
|
|
|
528
525
|
settingsManager.setDisabledNativeExtensions([...disabledNative]);
|
|
529
526
|
await settingsManager.flush();
|
|
530
527
|
// Broadcast updated state back to browsers
|
|
531
|
-
|
|
532
|
-
deps.relay.send({
|
|
533
|
-
kind: "native_extensions_info",
|
|
534
|
-
machineId: deps.machineId,
|
|
535
|
-
extensions,
|
|
536
|
-
});
|
|
528
|
+
await refreshNativeExtensionsInfo(deps.cwd, deps.relay, deps.machineId);
|
|
537
529
|
}
|
|
538
530
|
/**
|
|
539
531
|
* CLI entry point used by `cli.ts`. Surfaces the deprecation warning for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aexol-mcp.d.ts","sourceRoot":"","sources":["../../src/extensions/aexol-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoC,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"aexol-mcp.d.ts","sourceRoot":"","sources":["../../src/extensions/aexol-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoC,MAAM,8BAA8B,CAAC;AA8HnG,wBAA8B,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiShF"}
|
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
*/
|
|
23
23
|
import { getApiUrl, getConfigFile, readConfig } from "../config.js";
|
|
24
24
|
import { AexolMcpClient, AexolMcpError } from "../mcp-client.js";
|
|
25
|
+
import { stat } from "node:fs/promises";
|
|
26
|
+
import { join } from "node:path";
|
|
25
27
|
import { readStudioBinding, writeStudioBinding, deleteStudioBinding, } from "../studio-binding.js";
|
|
26
28
|
/**
|
|
27
29
|
* Render a backend tool result into a single string for ext.
|
|
@@ -79,6 +81,48 @@ function toLabel(name) {
|
|
|
79
81
|
// Studio binding – in-memory cache, refreshed on startup & by local tools
|
|
80
82
|
// ---------------------------------------------------------------------------
|
|
81
83
|
let currentBinding = null;
|
|
84
|
+
let sessionCwd = null;
|
|
85
|
+
let bindingMtimeMs = null;
|
|
86
|
+
/**
|
|
87
|
+
* Re-read the Studio binding file when it changes on disk so that runtime
|
|
88
|
+
* binding changes (e.g. via the /agent UI bind/unbind, or an external edit)
|
|
89
|
+
* propagate to running agent sessions without requiring a CLI restart or a
|
|
90
|
+
* new conversation. The AgentBridge's reloadProjectBindings() refreshes model
|
|
91
|
+
* proxy routing, but the aexol-mcp extension's currentBinding is only read at
|
|
92
|
+
* session_start otherwise. mtime caching keeps the common case (no change) at
|
|
93
|
+
* a single cheap stat() per remote_* call.
|
|
94
|
+
*/
|
|
95
|
+
async function refreshBindingFromDisk() {
|
|
96
|
+
if (!sessionCwd)
|
|
97
|
+
return;
|
|
98
|
+
const bindingFile = join(sessionCwd, ".aexol", "aexol.jsonc");
|
|
99
|
+
let mtimeMs;
|
|
100
|
+
try {
|
|
101
|
+
mtimeMs = (await stat(bindingFile)).mtimeMs;
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
const code = err.code;
|
|
105
|
+
if (code === "ENOENT" || code === "ENOTDIR") {
|
|
106
|
+
if (currentBinding !== null) {
|
|
107
|
+
currentBinding = null;
|
|
108
|
+
bindingMtimeMs = null;
|
|
109
|
+
}
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
// Non-fatal: keep the last known binding.
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (mtimeMs === bindingMtimeMs)
|
|
116
|
+
return;
|
|
117
|
+
try {
|
|
118
|
+
currentBinding = await readStudioBinding(sessionCwd);
|
|
119
|
+
bindingMtimeMs = mtimeMs;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Parse error etc. — keep last known binding, force re-read next time.
|
|
123
|
+
bindingMtimeMs = null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
82
126
|
/**
|
|
83
127
|
* Augment tool-call params with `teamId` and `projectId` from the current
|
|
84
128
|
* Studio binding when they are not already set by the model. Only applies
|
|
@@ -112,8 +156,9 @@ export default async function aexolMcpExtension(ext) {
|
|
|
112
156
|
const client = new AexolMcpClient(apiUrl, token);
|
|
113
157
|
// ---- Load local Studio binding on session start --------------------------
|
|
114
158
|
ext.on("session_start", async (_event, ctx) => {
|
|
159
|
+
sessionCwd = ctx.cwd;
|
|
115
160
|
try {
|
|
116
|
-
|
|
161
|
+
await refreshBindingFromDisk();
|
|
117
162
|
if (currentBinding) {
|
|
118
163
|
const displayName = currentBinding.name ?? currentBinding.projectId;
|
|
119
164
|
process.stderr.write(`[aexol-mcp] Studio binding found: ${displayName} (${currentBinding.projectId})` +
|
|
@@ -179,6 +224,7 @@ export default async function aexolMcpExtension(ext) {
|
|
|
179
224
|
description: tool.description ?? "",
|
|
180
225
|
parameters,
|
|
181
226
|
async execute(_toolCallId, params) {
|
|
227
|
+
await refreshBindingFromDisk();
|
|
182
228
|
const augmented = augmentParams(tool.name, params);
|
|
183
229
|
const res = await client.callTool(tool.name, augmented);
|
|
184
230
|
const text = renderContentToString(res.content);
|
|
@@ -254,7 +300,10 @@ export default async function aexolMcpExtension(ext) {
|
|
|
254
300
|
};
|
|
255
301
|
try {
|
|
256
302
|
await writeStudioBinding(binding, ctx.cwd);
|
|
303
|
+
if (!sessionCwd)
|
|
304
|
+
sessionCwd = ctx.cwd;
|
|
257
305
|
currentBinding = binding;
|
|
306
|
+
bindingMtimeMs = null;
|
|
258
307
|
const displayName = binding.name ?? binding.projectId;
|
|
259
308
|
return {
|
|
260
309
|
content: [{
|
|
@@ -303,7 +352,10 @@ export default async function aexolMcpExtension(ext) {
|
|
|
303
352
|
const projectId = currentBinding.projectId;
|
|
304
353
|
try {
|
|
305
354
|
const deleted = await deleteStudioBinding(ctx.cwd);
|
|
355
|
+
if (!sessionCwd)
|
|
356
|
+
sessionCwd = ctx.cwd;
|
|
306
357
|
currentBinding = null;
|
|
358
|
+
bindingMtimeMs = null;
|
|
307
359
|
if (deleted) {
|
|
308
360
|
return {
|
|
309
361
|
content: [{
|
package/dist/mcp/init.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ExtensionAPI, ExtensionContext } from "../sdk/coding-agent/index.js";
|
|
2
2
|
import type { McpExtensionState } from "./state.js";
|
|
3
3
|
export declare function initializeMcp(ext: ExtensionAPI, ctx: ExtensionContext): Promise<McpExtensionState>;
|
|
4
|
+
export declare function reloadMcpConfig(state: McpExtensionState): Promise<void>;
|
|
4
5
|
export declare function updateServerMetadata(state: McpExtensionState, serverName: string): void;
|
|
5
6
|
export declare function updateMetadataCache(state: McpExtensionState, serverName: string): void;
|
|
6
7
|
export declare function flushMetadataCache(state: McpExtensionState): void;
|
package/dist/mcp/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/mcp/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA0BpD,wBAAsB,aAAa,CACjC,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/mcp/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA0BpD,wBAAsB,aAAa,CACjC,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAgD5B;AAkJD,wBAAsB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC7E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAWvF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CA+BtF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAMjE;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAU9D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhG;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoChG"}
|
package/dist/mcp/init.js
CHANGED
|
@@ -15,14 +15,17 @@ export async function initializeMcp(ext, ctx) {
|
|
|
15
15
|
const config = loadMcpConfig(configPath, ctx.cwd);
|
|
16
16
|
const manager = new McpServerManager();
|
|
17
17
|
const samplingAutoApprove = config.settings?.samplingAutoApprove === true;
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
const samplingConfig = config.settings?.sampling !== false && (ctx.hasUI || samplingAutoApprove)
|
|
19
|
+
? {
|
|
20
20
|
autoApprove: samplingAutoApprove,
|
|
21
21
|
ui: ctx.hasUI ? ctx.ui : undefined,
|
|
22
22
|
modelRegistry: ctx.modelRegistry,
|
|
23
23
|
getCurrentModel: () => ctx.model,
|
|
24
24
|
getSignal: () => ctx.signal,
|
|
25
|
-
}
|
|
25
|
+
}
|
|
26
|
+
: undefined;
|
|
27
|
+
if (samplingConfig) {
|
|
28
|
+
manager.setSamplingConfig(samplingConfig);
|
|
26
29
|
}
|
|
27
30
|
const lifecycle = new McpLifecycleManager(manager);
|
|
28
31
|
const toolMetadata = new Map();
|
|
@@ -43,13 +46,21 @@ export async function initializeMcp(ext, ctx) {
|
|
|
43
46
|
openBrowser: (url) => openUrl(ext, url, process.env.BROWSER),
|
|
44
47
|
ui,
|
|
45
48
|
sendMessage: (message, options) => ext.sendMessage(message, options),
|
|
49
|
+
cwd: ctx.cwd,
|
|
50
|
+
configPath,
|
|
51
|
+
samplingConfig,
|
|
46
52
|
};
|
|
47
53
|
const serverEntries = Object.entries(config.mcpServers);
|
|
48
54
|
if (serverEntries.length === 0) {
|
|
49
55
|
return state;
|
|
50
56
|
}
|
|
51
|
-
|
|
52
|
-
|
|
57
|
+
await bootstrapMcpState(state);
|
|
58
|
+
return state;
|
|
59
|
+
}
|
|
60
|
+
async function bootstrapMcpState(state) {
|
|
61
|
+
const serverEntries = Object.entries(state.config.mcpServers);
|
|
62
|
+
const idleSetting = typeof state.config.settings?.idleTimeout === "number" ? state.config.settings.idleTimeout : 10;
|
|
63
|
+
state.lifecycle.setGlobalIdleTimeout(idleSetting);
|
|
53
64
|
const cachePath = getMetadataCachePath();
|
|
54
65
|
const cacheFileExists = existsSync(cachePath);
|
|
55
66
|
let cache = loadMetadataCache();
|
|
@@ -62,17 +73,17 @@ export async function initializeMcp(ext, ctx) {
|
|
|
62
73
|
cache = { version: 1, servers: {} };
|
|
63
74
|
saveMetadataCache(cache);
|
|
64
75
|
}
|
|
65
|
-
const prefix = config.settings?.toolPrefix ?? "server";
|
|
76
|
+
const prefix = state.config.settings?.toolPrefix ?? "server";
|
|
66
77
|
for (const [name, definition] of serverEntries) {
|
|
67
78
|
const lifecycleMode = definition.lifecycle ?? "lazy";
|
|
68
79
|
const idleOverride = definition.idleTimeout ?? (lifecycleMode === "eager" ? 0 : undefined);
|
|
69
|
-
lifecycle.registerServer(name, definition, idleOverride !== undefined ? { idleTimeout: idleOverride } : undefined);
|
|
80
|
+
state.lifecycle.registerServer(name, definition, idleOverride !== undefined ? { idleTimeout: idleOverride } : undefined);
|
|
70
81
|
if (lifecycleMode === "keep-alive") {
|
|
71
|
-
lifecycle.markKeepAlive(name, definition);
|
|
82
|
+
state.lifecycle.markKeepAlive(name, definition);
|
|
72
83
|
}
|
|
73
84
|
if (cache?.servers?.[name] && isServerCacheValid(cache.servers[name], definition)) {
|
|
74
85
|
const metadata = reconstructToolMetadata(name, cache.servers[name], prefix, definition);
|
|
75
|
-
toolMetadata.set(name, metadata);
|
|
86
|
+
state.toolMetadata.set(name, metadata);
|
|
76
87
|
}
|
|
77
88
|
}
|
|
78
89
|
const startupServers = bootstrapAll
|
|
@@ -81,12 +92,12 @@ export async function initializeMcp(ext, ctx) {
|
|
|
81
92
|
const mode = definition.lifecycle ?? "lazy";
|
|
82
93
|
return mode === "keep-alive" || mode === "eager";
|
|
83
94
|
});
|
|
84
|
-
if (
|
|
85
|
-
|
|
95
|
+
if (state.ui !== undefined && startupServers.length > 0) {
|
|
96
|
+
state.ui.setStatus("mcp", `MCP: connecting to ${startupServers.length} servers...`);
|
|
86
97
|
}
|
|
87
98
|
const results = await parallelLimit(startupServers, 10, async ([name, definition]) => {
|
|
88
99
|
try {
|
|
89
|
-
const connection = await manager.connect(name, definition);
|
|
100
|
+
const connection = await state.manager.connect(name, definition);
|
|
90
101
|
if (connection.status === "needs-auth") {
|
|
91
102
|
return { name, definition, connection: null, error: `OAuth authentication required. Run /mcp-auth ${name}.` };
|
|
92
103
|
}
|
|
@@ -99,42 +110,42 @@ export async function initializeMcp(ext, ctx) {
|
|
|
99
110
|
});
|
|
100
111
|
for (const { name, definition, connection, error } of results) {
|
|
101
112
|
if (error || !connection) {
|
|
102
|
-
if (
|
|
103
|
-
|
|
113
|
+
if (state.ui !== undefined) {
|
|
114
|
+
state.ui.notify(`MCP: Failed to connect to ${name}: ${error}`, "error");
|
|
104
115
|
}
|
|
105
116
|
console.error(`MCP: Failed to connect to ${name}: ${error}`);
|
|
106
117
|
continue;
|
|
107
118
|
}
|
|
108
119
|
const { metadata, failedTools } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);
|
|
109
|
-
toolMetadata.set(name, metadata);
|
|
120
|
+
state.toolMetadata.set(name, metadata);
|
|
110
121
|
updateMetadataCache(state, name);
|
|
111
|
-
if (failedTools.length > 0 &&
|
|
112
|
-
|
|
122
|
+
if (failedTools.length > 0 && state.ui !== undefined) {
|
|
123
|
+
state.ui.notify(`MCP: ${name} - ${failedTools.length} tools skipped`, "warning");
|
|
113
124
|
}
|
|
114
125
|
}
|
|
115
126
|
const connectedCount = results.filter(r => r.connection).length;
|
|
116
127
|
const failedCount = results.filter(r => r.error).length;
|
|
117
|
-
if (
|
|
128
|
+
if (state.ui !== undefined && connectedCount > 0) {
|
|
118
129
|
const totalTools = totalToolCount(state);
|
|
119
130
|
const msg = failedCount > 0
|
|
120
131
|
? `MCP: ${connectedCount}/${startupServers.length} servers connected (${totalTools} tools)`
|
|
121
132
|
: `MCP: ${connectedCount} servers connected (${totalTools} tools)`;
|
|
122
|
-
|
|
133
|
+
state.ui.notify(msg, "info");
|
|
123
134
|
}
|
|
124
135
|
const envDirect = process.env.MCP_DIRECT_TOOLS;
|
|
125
136
|
if (envDirect !== "__none__") {
|
|
126
137
|
const currentCache = loadMetadataCache();
|
|
127
|
-
const missingCacheServers = getMissingConfiguredDirectToolServers(config, currentCache);
|
|
138
|
+
const missingCacheServers = getMissingConfiguredDirectToolServers(state.config, currentCache);
|
|
128
139
|
if (missingCacheServers.length > 0) {
|
|
129
140
|
const bootstrapResults = await parallelLimit(missingCacheServers.filter(name => !results.some(r => r.name === name && r.connection)), 10, async (name) => {
|
|
130
|
-
const definition = config.mcpServers[name];
|
|
141
|
+
const definition = state.config.mcpServers[name];
|
|
131
142
|
try {
|
|
132
|
-
const connection = await manager.connect(name, definition);
|
|
143
|
+
const connection = await state.manager.connect(name, definition);
|
|
133
144
|
if (connection.status === "needs-auth") {
|
|
134
145
|
return { name, ok: false };
|
|
135
146
|
}
|
|
136
147
|
const { metadata } = buildToolMetadata(connection.tools, connection.resources, definition, name, prefix);
|
|
137
|
-
toolMetadata.set(name, metadata);
|
|
148
|
+
state.toolMetadata.set(name, metadata);
|
|
138
149
|
updateMetadataCache(state, name);
|
|
139
150
|
return { name, ok: true };
|
|
140
151
|
}
|
|
@@ -145,24 +156,56 @@ export async function initializeMcp(ext, ctx) {
|
|
|
145
156
|
}
|
|
146
157
|
});
|
|
147
158
|
const bootstrapped = bootstrapResults.filter(r => r.ok).map(r => r.name);
|
|
148
|
-
if (bootstrapped.length > 0 &&
|
|
149
|
-
|
|
159
|
+
if (bootstrapped.length > 0 && state.ui !== undefined) {
|
|
160
|
+
state.ui.notify(`MCP: direct tools for ${bootstrapped.join(", ")} will be available after restart`, "info");
|
|
150
161
|
}
|
|
151
162
|
}
|
|
152
163
|
}
|
|
153
|
-
lifecycle.setReconnectCallback((serverName) => {
|
|
164
|
+
state.lifecycle.setReconnectCallback((serverName) => {
|
|
154
165
|
updateServerMetadata(state, serverName);
|
|
155
166
|
updateMetadataCache(state, serverName);
|
|
156
167
|
state.failureTracker.delete(serverName);
|
|
157
168
|
updateStatusBar(state);
|
|
158
169
|
});
|
|
159
|
-
lifecycle.setIdleShutdownCallback((serverName) => {
|
|
170
|
+
state.lifecycle.setIdleShutdownCallback((serverName) => {
|
|
160
171
|
const idleMinutes = getEffectiveIdleTimeoutMinutes(state, serverName);
|
|
161
172
|
logger.debug(`${serverName} shut down (idle ${idleMinutes}m)`);
|
|
162
173
|
updateStatusBar(state);
|
|
163
174
|
});
|
|
164
|
-
lifecycle.startHealthChecks();
|
|
165
|
-
|
|
175
|
+
state.lifecycle.startHealthChecks();
|
|
176
|
+
}
|
|
177
|
+
export async function reloadMcpConfig(state) {
|
|
178
|
+
if (state.ui) {
|
|
179
|
+
state.ui.setStatus("mcp", "MCP: reloading config...");
|
|
180
|
+
}
|
|
181
|
+
await state.lifecycle.gracefulShutdown();
|
|
182
|
+
const newManager = new McpServerManager();
|
|
183
|
+
if (state.samplingConfig) {
|
|
184
|
+
newManager.setSamplingConfig(state.samplingConfig);
|
|
185
|
+
}
|
|
186
|
+
const newLifecycle = new McpLifecycleManager(newManager);
|
|
187
|
+
state.manager = newManager;
|
|
188
|
+
state.lifecycle = newLifecycle;
|
|
189
|
+
state.toolMetadata.clear();
|
|
190
|
+
state.failureTracker.clear();
|
|
191
|
+
state.uiResourceHandler = new UiResourceHandler(newManager);
|
|
192
|
+
state.config = loadMcpConfig(state.configPath, state.cwd);
|
|
193
|
+
const serverEntries = Object.entries(state.config.mcpServers);
|
|
194
|
+
if (serverEntries.length === 0) {
|
|
195
|
+
if (state.ui) {
|
|
196
|
+
state.ui.setStatus("mcp", undefined);
|
|
197
|
+
state.ui.notify("MCP: config reloaded (no servers configured)", "info");
|
|
198
|
+
}
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
await bootstrapMcpState(state);
|
|
202
|
+
if (state.ui) {
|
|
203
|
+
const totalTools = totalToolCount(state);
|
|
204
|
+
const total = serverEntries.length;
|
|
205
|
+
const connected = state.manager.getAllConnections().size;
|
|
206
|
+
state.ui.notify(`MCP: config reloaded (${connected}/${total} servers, ${totalTools} tools)`, connected === total ? "info" : "warning");
|
|
207
|
+
updateStatusBar(state);
|
|
208
|
+
}
|
|
166
209
|
}
|
|
167
210
|
export function updateServerMetadata(state, serverName) {
|
|
168
211
|
const connection = state.manager.getConnection(serverName);
|
package/dist/mcp/state.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { ExtensionContext } from "../sdk/coding-agent/index.js";
|
|
|
2
2
|
import type { ConsentManager } from "./consent-manager.js";
|
|
3
3
|
import type { McpLifecycleManager } from "./lifecycle.js";
|
|
4
4
|
import type { McpServerManager } from "./server-manager.js";
|
|
5
|
+
import type { ServerSamplingConfig } from "./sampling-handler.js";
|
|
5
6
|
import type { ToolMetadata, McpConfig, UiSessionMessages, UiStreamSummary } from "./types.js";
|
|
6
7
|
import type { UiResourceHandler } from "./ui-resource-handler.js";
|
|
7
8
|
import type { UiServerHandle } from "./ui-server.js";
|
|
@@ -37,5 +38,11 @@ export interface McpExtensionState {
|
|
|
37
38
|
openBrowser: (url: string) => Promise<void>;
|
|
38
39
|
ui?: ExtensionContext["ui"];
|
|
39
40
|
sendMessage?: SendMessageFn;
|
|
41
|
+
/** Working directory used to resolve project-level MCP config files. */
|
|
42
|
+
cwd: string;
|
|
43
|
+
/** Optional explicit MCP config path passed via the --mcp-config flag. */
|
|
44
|
+
configPath?: string;
|
|
45
|
+
/** Sampling configuration kept so a reload can recreate the server manager. */
|
|
46
|
+
samplingConfig?: ServerSamplingConfig;
|
|
40
47
|
}
|
|
41
48
|
//# sourceMappingURL=state.d.ts.map
|
package/dist/mcp/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/mcp/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,EACD,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,IAAI,CAAC;AAEV,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,MAAM,EAAE,SAAS,CAAC;IAClB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,CAAC,EAAE,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/mcp/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,EACD,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,KAChC,IAAI,CAAC;AAEV,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1C,MAAM,EAAE,SAAS,CAAC;IAClB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,mBAAmB,EAAE,kBAAkB,EAAE,CAAC;IAC1C,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC"}
|
|
@@ -48,7 +48,7 @@ import type { RelayClient } from "./client.js";
|
|
|
48
48
|
* `id` is populated when the route had an `:id` placeholder.
|
|
49
49
|
*/
|
|
50
50
|
interface RouteMatch {
|
|
51
|
-
route: "list_projects" | "create_project" | "update_project" | "delete_project" | "bind_studio" | "unbind_studio" | "get_project_observations" | "list_project_sessions" | "create_session" | "get_session" | "update_session" | "delete_session" | "get_session_memory" | "get_session_memory_details" | "compact_session" | "remember_and_delete_session" | "fork_session" | "list_path_autocomplete" | "pick_directory" | "search_project_files" | "enqueue_prompt" | "get_prompt_queue" | "remove_prompt" | "clear_prompt_queue" | "list_mcp_status" | "get_settings" | "put_settings" | "get_agent_settings" | "put_agent_settings" | "list_agents";
|
|
51
|
+
route: "list_projects" | "create_project" | "update_project" | "delete_project" | "bind_studio" | "unbind_studio" | "get_project_observations" | "list_project_sessions" | "cleanup_project_sessions" | "create_session" | "get_session" | "get_session_messages" | "update_session" | "delete_session" | "get_session_memory" | "get_session_memory_details" | "compact_session" | "remember_and_delete_session" | "fork_session" | "list_path_autocomplete" | "pick_directory" | "search_project_files" | "enqueue_prompt" | "get_prompt_queue" | "remove_prompt" | "clear_prompt_queue" | "list_mcp_status" | "reload_mcp_config" | "refresh_native_extensions" | "get_settings" | "put_settings" | "get_agent_settings" | "put_agent_settings" | "list_agents";
|
|
52
52
|
id?: string;
|
|
53
53
|
/** Parsed query params, if the path carried a `?...` suffix. */
|
|
54
54
|
query?: URLSearchParams;
|
|
@@ -102,6 +102,7 @@ export interface RestRequestDeps {
|
|
|
102
102
|
* already committed and the caller deserves the success it asked for).
|
|
103
103
|
*/
|
|
104
104
|
publishMetaEvent?: PublishMetaEvent;
|
|
105
|
+
refreshNativeExtensions?: () => Promise<void>;
|
|
105
106
|
}
|
|
106
107
|
/**
|
|
107
108
|
* Dispatch a `rest_request` frame. Always resolves with a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/relay/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAIH,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACf,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/relay/dispatcher.ts"],"names":[],"mappings":"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"}
|
package/dist/relay/dispatcher.js
CHANGED
|
@@ -41,11 +41,12 @@
|
|
|
41
41
|
import { homedir } from "node:os";
|
|
42
42
|
import { BadRequestError, NotFoundError } from "../server/handlers/errors.js";
|
|
43
43
|
import { handleListMcpStatus } from "../server/handlers/mcp-status.js";
|
|
44
|
+
import { handleReloadMcpConfig } from "../server/handlers/mcp-reload.js";
|
|
44
45
|
import { handlePathAutocomplete } from "../server/handlers/paths-autocomplete.js";
|
|
45
46
|
import { handlePickDirectory } from "../server/handlers/paths-pick-directory.js";
|
|
46
47
|
import { handleSearchProjectFiles } from "../server/handlers/files-search.js";
|
|
47
|
-
import { handleBindStudioProject, handleUnbindStudioProject, handleCreateProject, handleDeleteProject, handleGetProjectObservations, handleListProjects, handleListSessionsByProject, handleUpdateProject, } from "../server/handlers/projects.js";
|
|
48
|
-
import { handleCompactSession, handleCreateSession, handleDeleteSession, handleForkSession, handleRememberAndDeleteSession, handleGetSessionDetail, handleGetSessionMemoryDetails, handleGetSessionMemoryStatus, handleUpdateSession, } from "../server/handlers/sessions.js";
|
|
48
|
+
import { handleBindStudioProject, handleUnbindStudioProject, handleCleanupProjectSessions, handleCreateProject, handleDeleteProject, handleGetProjectObservations, handleListProjects, handleListSessionsByProject, handleUpdateProject, } from "../server/handlers/projects.js";
|
|
49
|
+
import { handleCompactSession, handleCreateSession, handleDeleteSession, handleForkSession, handleRememberAndDeleteSession, handleGetSessionDetail, handleGetSessionMessages, handleGetSessionMemoryDetails, handleGetSessionMemoryStatus, handleUpdateSession, } from "../server/handlers/sessions.js";
|
|
49
50
|
import { handleClearPromptQueue, handleEnqueuePrompt, handleGetPromptQueue, handleRemovePrompt, } from "../server/handlers/queue.js";
|
|
50
51
|
import { handleGetAgentSettings, handleListAgents, handlePutAgentSettings, } from "../server/handlers/agent-settings.js";
|
|
51
52
|
import { handleGetSettings, handlePutSettings, } from "../server/handlers/settings.js";
|
|
@@ -69,6 +70,16 @@ export function matchRoute(method, path) {
|
|
|
69
70
|
return { route: "list_mcp_status" };
|
|
70
71
|
return null;
|
|
71
72
|
}
|
|
73
|
+
if (cleanPath === "/api/mcp-reload") {
|
|
74
|
+
if (method === "POST")
|
|
75
|
+
return { route: "reload_mcp_config" };
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
if (cleanPath === "/api/native-extensions/refresh") {
|
|
79
|
+
if (method === "POST")
|
|
80
|
+
return { route: "refresh_native_extensions" };
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
72
83
|
// /api/settings
|
|
73
84
|
if (cleanPath === "/api/settings") {
|
|
74
85
|
if (method === "GET")
|
|
@@ -164,7 +175,22 @@ export function matchRoute(method, path) {
|
|
|
164
175
|
return { route: "delete_project", id };
|
|
165
176
|
return null;
|
|
166
177
|
}
|
|
178
|
+
// /api/projects/:id/cleanup-sessions
|
|
179
|
+
const projectCleanupMatch = /^\/api\/projects\/([^/]+)\/cleanup-sessions$/.exec(cleanPath);
|
|
180
|
+
if (projectCleanupMatch) {
|
|
181
|
+
const id = decodeURIComponent(projectCleanupMatch[1]);
|
|
182
|
+
if (method === "POST")
|
|
183
|
+
return { route: "cleanup_project_sessions", id };
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
167
186
|
// /api/sessions/:id
|
|
187
|
+
const sessionMessagesMatch = /^\/api\/sessions\/([^/]+)\/messages$/.exec(cleanPath);
|
|
188
|
+
if (sessionMessagesMatch) {
|
|
189
|
+
const id = decodeURIComponent(sessionMessagesMatch[1]);
|
|
190
|
+
if (method === "GET")
|
|
191
|
+
return { route: "get_session_messages", id, query };
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
168
194
|
const sessionMatch = /^\/api\/sessions\/([^/]+)$/.exec(cleanPath);
|
|
169
195
|
if (sessionMatch) {
|
|
170
196
|
const id = decodeURIComponent(sessionMatch[1]);
|
|
@@ -392,6 +418,21 @@ async function dispatchRoute(match, body, deps) {
|
|
|
392
418
|
hasActiveTurn: activeIds.has(s.id),
|
|
393
419
|
}));
|
|
394
420
|
}
|
|
421
|
+
case "cleanup_project_sessions": {
|
|
422
|
+
const result = handleCleanupProjectSessions(store, id, asObject(body));
|
|
423
|
+
// Tear down any in-flight streams for sessions that are being deleted.
|
|
424
|
+
for (const sessionId of result.ids) {
|
|
425
|
+
manager.disposeSessionStream(sessionId);
|
|
426
|
+
}
|
|
427
|
+
for (const sessionId of result.ids) {
|
|
428
|
+
safePublish(publishMetaEvent, logger, {
|
|
429
|
+
type: "session_deleted",
|
|
430
|
+
projectId: id,
|
|
431
|
+
sessionId,
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
return { deleted: result.deleted };
|
|
435
|
+
}
|
|
395
436
|
case "create_session": {
|
|
396
437
|
const session = handleCreateSession(store, asObject(body));
|
|
397
438
|
safePublish(publishMetaEvent, logger, {
|
|
@@ -403,6 +444,12 @@ async function dispatchRoute(match, body, deps) {
|
|
|
403
444
|
}
|
|
404
445
|
case "get_session":
|
|
405
446
|
return handleGetSessionDetail(store, id);
|
|
447
|
+
case "get_session_messages":
|
|
448
|
+
return handleGetSessionMessages(store, id, {
|
|
449
|
+
beforeCreatedAt: match.query?.get("beforeCreatedAt") ?? undefined,
|
|
450
|
+
beforeId: match.query?.get("beforeId") ?? undefined,
|
|
451
|
+
limit: match.query?.get("limit") ?? undefined,
|
|
452
|
+
});
|
|
406
453
|
case "get_session_memory":
|
|
407
454
|
return handleGetSessionMemoryStatus(store, manager, id);
|
|
408
455
|
case "get_session_memory_details":
|
|
@@ -489,6 +536,16 @@ async function dispatchRoute(match, body, deps) {
|
|
|
489
536
|
}
|
|
490
537
|
return handleListMcpStatus(deps.mcpState);
|
|
491
538
|
}
|
|
539
|
+
case "reload_mcp_config": {
|
|
540
|
+
return await handleReloadMcpConfig(deps.mcpState);
|
|
541
|
+
}
|
|
542
|
+
case "refresh_native_extensions": {
|
|
543
|
+
if (!deps.refreshNativeExtensions) {
|
|
544
|
+
return { ok: true };
|
|
545
|
+
}
|
|
546
|
+
await deps.refreshNativeExtensions();
|
|
547
|
+
return { ok: true };
|
|
548
|
+
}
|
|
492
549
|
case "get_settings":
|
|
493
550
|
return handleGetSettings(deps.cwd ?? homedir());
|
|
494
551
|
case "put_settings":
|
|
@@ -694,6 +751,9 @@ export function handleClientMessage(frame, deps) {
|
|
|
694
751
|
type: "session_ready",
|
|
695
752
|
sessionId,
|
|
696
753
|
history: attachResult.history,
|
|
754
|
+
totalMessageCount: attachResult.totalMessageCount,
|
|
755
|
+
loadedMessageCount: attachResult.loadedMessageCount,
|
|
756
|
+
hasEarlierMessages: attachResult.hasEarlierMessages || undefined,
|
|
697
757
|
currentTurn: attachResult.currentTurn,
|
|
698
758
|
forkCompactPending: attachResult.forkCompactPending || undefined,
|
|
699
759
|
contextWindowUsed: attachResult.contextWindowUsed,
|
|
@@ -769,6 +829,9 @@ export function handleSubscribe(frame, deps) {
|
|
|
769
829
|
type: "session_ready",
|
|
770
830
|
sessionId,
|
|
771
831
|
history: attachResult.history,
|
|
832
|
+
totalMessageCount: attachResult.totalMessageCount,
|
|
833
|
+
loadedMessageCount: attachResult.loadedMessageCount,
|
|
834
|
+
hasEarlierMessages: attachResult.hasEarlierMessages || undefined,
|
|
772
835
|
currentTurn: attachResult.currentTurn,
|
|
773
836
|
forkCompactPending: attachResult.forkCompactPending || undefined,
|
|
774
837
|
contextWindowUsed: attachResult.contextWindowUsed,
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { McpExtensionState } from "../../mcp/state.js";
|
|
2
|
+
import { type McpServerStatus } from "./mcp-status.js";
|
|
3
|
+
export interface McpReloadResult {
|
|
4
|
+
reloaded: true;
|
|
5
|
+
servers: McpServerStatus[];
|
|
6
|
+
}
|
|
7
|
+
export declare function handleReloadMcpConfig(state: McpExtensionState | undefined): Promise<McpReloadResult>;
|
|
8
|
+
//# sourceMappingURL=mcp-reload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-reload.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/mcp-reload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE5E,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,iBAAiB,GAAG,SAAS,GACnC,OAAO,CAAC,eAAe,CAAC,CAM1B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { reloadMcpConfig } from "../../mcp/init.js";
|
|
2
|
+
import { handleListMcpStatus } from "./mcp-status.js";
|
|
3
|
+
export async function handleReloadMcpConfig(state) {
|
|
4
|
+
if (!state) {
|
|
5
|
+
return { reloaded: true, servers: [] };
|
|
6
|
+
}
|
|
7
|
+
await reloadMcpConfig(state);
|
|
8
|
+
return { reloaded: true, servers: handleListMcpStatus(state) };
|
|
9
|
+
}
|
|
@@ -76,4 +76,12 @@ export interface UnbindStudioResult {
|
|
|
76
76
|
*/
|
|
77
77
|
export declare function handleUnbindStudioProject(store: SessionStore, id: string): Promise<UnbindStudioResult>;
|
|
78
78
|
export declare function handleListSessionsByProject(store: SessionStore, id: string): WireSessionSummary[];
|
|
79
|
+
export interface CleanupProjectSessionsInputRaw {
|
|
80
|
+
olderThanDays?: unknown;
|
|
81
|
+
}
|
|
82
|
+
export interface CleanupProjectSessionsResult {
|
|
83
|
+
deleted: number;
|
|
84
|
+
ids: string[];
|
|
85
|
+
}
|
|
86
|
+
export declare function handleCleanupProjectSessions(store: SessionStore, id: string, body: CleanupProjectSessionsInputRaw): CleanupProjectSessionsResult;
|
|
79
87
|
//# sourceMappingURL=projects.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/projects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQlE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,KAAK,SAAK,GACT,sBAAsB,EAAE,CAI1B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,EAAE,CAErE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,qBAAqB,GAC1B,WAAW,CAYb;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,WAAW,CAI7E;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,qBAAqB,GAC1B,WAAW,CAwBb;AAED,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,GACT,mBAAmB,CAMrB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA6C3B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,kBAAkB,CAAC,CAkB7B;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,GACT,kBAAkB,EAAE,CAItB"}
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/projects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQlE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,KAAK,SAAK,GACT,sBAAsB,EAAE,CAI1B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,EAAE,CAErE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,qBAAqB,GAC1B,WAAW,CAYb;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,WAAW,CAI7E;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,qBAAqB,GAC1B,WAAW,CAwBb;AAED,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,GACT,mBAAmB,CAMrB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA6C3B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,kBAAkB,CAAC,CAkB7B;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,GACT,kBAAkB,EAAE,CAItB;AAED,MAAM,WAAW,8BAA8B;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,8BAA8B,GACnC,4BAA4B,CAe9B"}
|
|
@@ -157,3 +157,14 @@ export function handleListSessionsByProject(store, id) {
|
|
|
157
157
|
throw new NotFoundError("Project not found");
|
|
158
158
|
return store.listSessionsByProject(id);
|
|
159
159
|
}
|
|
160
|
+
export function handleCleanupProjectSessions(store, id, body) {
|
|
161
|
+
const project = store.getProject(id);
|
|
162
|
+
if (!project)
|
|
163
|
+
throw new NotFoundError("Project not found");
|
|
164
|
+
if (typeof body.olderThanDays !== "number" ||
|
|
165
|
+
!Number.isFinite(body.olderThanDays) ||
|
|
166
|
+
body.olderThanDays < 1) {
|
|
167
|
+
throw new BadRequestError("olderThanDays is required and must be an integer >= 1");
|
|
168
|
+
}
|
|
169
|
+
return store.cleanupProjectSessionsOlderThan(id, body.olderThanDays);
|
|
170
|
+
}
|
|
@@ -19,8 +19,14 @@ export interface CreateSessionInputRaw {
|
|
|
19
19
|
export interface UpdateSessionInputRaw {
|
|
20
20
|
title?: unknown;
|
|
21
21
|
}
|
|
22
|
+
export interface GetSessionMessagesInputRaw {
|
|
23
|
+
beforeCreatedAt?: unknown;
|
|
24
|
+
beforeId?: unknown;
|
|
25
|
+
limit?: unknown;
|
|
26
|
+
}
|
|
22
27
|
export declare function handleCreateSession(store: SessionStore, body: CreateSessionInputRaw): WireSessionSummary;
|
|
23
28
|
export declare function handleGetSessionDetail(store: SessionStore, id: string): WireSessionDetail;
|
|
29
|
+
export declare function handleGetSessionMessages(store: SessionStore, id: string, query: GetSessionMessagesInputRaw): WireSessionDetail;
|
|
24
30
|
export declare function handleUpdateSession(store: SessionStore, id: string, body: UpdateSessionInputRaw): WireSessionSummary;
|
|
25
31
|
export declare function handleDeleteSession(store: SessionStore, id: string): void;
|
|
26
32
|
export declare function handleGetSessionMemoryStatus(store: SessionStore, manager: SessionStreamManager, id: string): WireSessionMemoryStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG3H,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,qBAAqB,GAC1B,kBAAkB,CAQpB;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,GACT,iBAAiB,CAInB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,qBAAqB,GAC1B,kBAAkB,CAOpB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAGzE;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,oBAAoB,EAC7B,EAAE,EAAE,MAAM,GACT,uBAAuB,CAIzB;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,oBAAoB,EAC7B,EAAE,EAAE,MAAM,GACT,wBAAwB,CAI1B;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,oBAAoB,EAC7B,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAUvB;AAED;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,oBAAoB,EAC7B,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAUvB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACxB,kBAAkB,CAKpB"}
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG3H,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AACD,MAAM,WAAW,0BAA0B;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,qBAAqB,GAC1B,kBAAkB,CAQpB;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,GACT,iBAAiB,CAInB;AACD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,0BAA0B,GAChC,iBAAiB,CA+BnB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,qBAAqB,GAC1B,kBAAkB,CAOpB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAGzE;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,oBAAoB,EAC7B,EAAE,EAAE,MAAM,GACT,uBAAuB,CAIzB;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,oBAAoB,EAC7B,EAAE,EAAE,MAAM,GACT,wBAAwB,CAI1B;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,oBAAoB,EAC7B,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAUvB;AAED;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,oBAAoB,EAC7B,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAUvB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACxB,kBAAkB,CAKpB"}
|
|
@@ -26,6 +26,38 @@ export function handleGetSessionDetail(store, id) {
|
|
|
26
26
|
throw new NotFoundError("Session not found");
|
|
27
27
|
return detail;
|
|
28
28
|
}
|
|
29
|
+
export function handleGetSessionMessages(store, id, query) {
|
|
30
|
+
const detail = store.getSession(id);
|
|
31
|
+
if (!detail)
|
|
32
|
+
throw new NotFoundError("Session not found");
|
|
33
|
+
const rawLimit = typeof query.limit === "string" ? Number(query.limit) : Number(query.limit ?? 50);
|
|
34
|
+
const limit = Number.isFinite(rawLimit) ? Math.max(1, Math.min(200, rawLimit)) : 50;
|
|
35
|
+
const beforeCreatedAt = typeof query.beforeCreatedAt === "string" && query.beforeCreatedAt.trim().length > 0
|
|
36
|
+
? Number(query.beforeCreatedAt)
|
|
37
|
+
: typeof query.beforeCreatedAt === "number"
|
|
38
|
+
? query.beforeCreatedAt
|
|
39
|
+
: null;
|
|
40
|
+
if (beforeCreatedAt !== null && !Number.isFinite(beforeCreatedAt)) {
|
|
41
|
+
throw new BadRequestError("beforeCreatedAt must be a valid number");
|
|
42
|
+
}
|
|
43
|
+
const beforeId = typeof query.beforeId === "string" && query.beforeId.trim().length > 0
|
|
44
|
+
? query.beforeId
|
|
45
|
+
: null;
|
|
46
|
+
const messages = store.getMessagesBefore(id, {
|
|
47
|
+
beforeCreatedAt,
|
|
48
|
+
beforeId,
|
|
49
|
+
limit,
|
|
50
|
+
});
|
|
51
|
+
const totalMessageCount = store.countMessagesBySession(id);
|
|
52
|
+
const loadedMessageCount = messages.length;
|
|
53
|
+
return {
|
|
54
|
+
...detail,
|
|
55
|
+
messages,
|
|
56
|
+
totalMessageCount,
|
|
57
|
+
loadedMessageCount,
|
|
58
|
+
hasEarlierMessages: totalMessageCount > loadedMessageCount && messages.length > 0,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
29
61
|
export function handleUpdateSession(store, id, body) {
|
|
30
62
|
if (typeof body.title !== "string") {
|
|
31
63
|
throw new BadRequestError("title (string) is required");
|
|
@@ -153,6 +153,9 @@ export interface SessionMemoryStatus {
|
|
|
153
153
|
}
|
|
154
154
|
export interface AttachResult {
|
|
155
155
|
history: WireMessage[];
|
|
156
|
+
totalMessageCount: number;
|
|
157
|
+
loadedMessageCount: number;
|
|
158
|
+
hasEarlierMessages: boolean;
|
|
156
159
|
currentTurn: InProgressTurnSnapshot | null;
|
|
157
160
|
/** Resolves when the underlying spectral session is ready (or rejects on start failure). */
|
|
158
161
|
ready: Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-stream.d.ts","sourceRoot":"","sources":["../../src/server/session-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAMH,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAejD,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EAEtB,WAAW,EACX,WAAW,EACX,wBAAwB,EAGzB,MAAM,WAAW,CAAC;AAEnB;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,2EAA2E;IAC3E,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,wEAAwE;IACxE,MAAM,IAAI,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,IAAI,IAAI,CAAC;IAChB;;;;;OAKG;IACH,OAAO,CAAC,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD;;;OAGG;IACH,kBAAkB,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACtD;;;;;;OAMG;IACH,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,oBAAoB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC;;;;;OAKG;IACH,wBAAwB,CAAC,IAAI,MAAM,GAAG,SAAS,CAAC;IAChD;;;;OAIG;IACH,eAAe,CAAC,IAAI;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;IACzG,gBAAgB,CAAC,IAAI,KAAK,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;IACH,iBAAiB,CAAC,IAAI;QACpB,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC;QACtE,QAAQ,EAAE;YACR,QAAQ,EAAE,OAAO,CAAC;YAClB,UAAU,EAAE,OAAO,CAAC;YACpB,UAAU,EAAE,OAAO,CAAC;YACpB,MAAM,EAAE,OAAO,CAAC;SACjB,CAAC;KACH,CAAC;CACH;AAED,iDAAiD;AACjD,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,kBAAkB,KAAK,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"session-stream.d.ts","sourceRoot":"","sources":["../../src/server/session-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,6 +66,7 @@ const LOOP_COMPACTION_THRESHOLD_TOKENS = 50_000;
|
|
|
66
66
|
* so the actual context inflation is 3-8× the stored token estimate.
|
|
67
67
|
*/
|
|
68
68
|
const REHYDRATION_TAIL_TOKEN_BUDGET = 20_000;
|
|
69
|
+
const UI_HISTORY_TAIL_MESSAGE_LIMIT = 120;
|
|
69
70
|
/**
|
|
70
71
|
* Number of accumulated wire events before flushing the in-flight turn
|
|
71
72
|
* to SQLite. Batch-persisting means a server crash mid-turn only loses
|
|
@@ -274,6 +275,12 @@ export class SessionStreamManager {
|
|
|
274
275
|
const detail = this.store.getSession(sessionId);
|
|
275
276
|
if (!detail)
|
|
276
277
|
throw new Error(`Unknown sessionId: ${sessionId}`);
|
|
278
|
+
const totalMessageCount = this.store.countMessagesBySession(sessionId);
|
|
279
|
+
const history = totalMessageCount > UI_HISTORY_TAIL_MESSAGE_LIMIT
|
|
280
|
+
? this.store.getMessagesTail(sessionId, UI_HISTORY_TAIL_MESSAGE_LIMIT)
|
|
281
|
+
: detail.messages;
|
|
282
|
+
const loadedMessageCount = history.length;
|
|
283
|
+
const hasEarlierMessages = totalMessageCount > loadedMessageCount;
|
|
277
284
|
let stream = this.streams.get(sessionId);
|
|
278
285
|
if (!stream) {
|
|
279
286
|
stream = this.createStream(sessionId, detail.messages);
|
|
@@ -281,7 +288,10 @@ export class SessionStreamManager {
|
|
|
281
288
|
}
|
|
282
289
|
stream.subscribers.add(subscriber);
|
|
283
290
|
return {
|
|
284
|
-
history
|
|
291
|
+
history,
|
|
292
|
+
totalMessageCount,
|
|
293
|
+
loadedMessageCount,
|
|
294
|
+
hasEarlierMessages,
|
|
285
295
|
currentTurn: stream.currentTurn ? snapshotTurn(stream.currentTurn) : null,
|
|
286
296
|
ready: stream.ready,
|
|
287
297
|
forkCompactPending: stream.forkCompactSourceId != null,
|
package/dist/server/storage.d.ts
CHANGED
|
@@ -88,10 +88,15 @@ export declare class SessionStore {
|
|
|
88
88
|
private stmtDeleteProject;
|
|
89
89
|
private stmtListSessionsByProject;
|
|
90
90
|
private stmtListSessionIdsByProject;
|
|
91
|
+
private stmtListProjectSessionIdsOlderThan;
|
|
92
|
+
private stmtDeleteProjectSessionsOlderThan;
|
|
91
93
|
private stmtGetSession;
|
|
92
94
|
private stmtCreateSession;
|
|
93
95
|
private stmtDeleteSession;
|
|
94
96
|
private stmtListMessages;
|
|
97
|
+
private stmtListMessagesTail;
|
|
98
|
+
private stmtListMessagesBefore;
|
|
99
|
+
private stmtCountMessagesBySession;
|
|
95
100
|
private stmtAppendMessage;
|
|
96
101
|
private stmtDeleteMessage;
|
|
97
102
|
private stmtDeleteMessagesBySession;
|
|
@@ -155,6 +160,14 @@ export declare class SessionStore {
|
|
|
155
160
|
/** Convenience for routes/managers that just need the projectId. */
|
|
156
161
|
getSessionProjectId(id: string): string | null;
|
|
157
162
|
getMessages(sessionId: string): StoredMessage[];
|
|
163
|
+
getMessagesTail(sessionId: string, limit: number): StoredMessage[];
|
|
164
|
+
getMessagesBefore(sessionId: string, opts: {
|
|
165
|
+
beforeCreatedAt: number | null;
|
|
166
|
+
beforeId: string | null;
|
|
167
|
+
limit: number;
|
|
168
|
+
}): StoredMessage[];
|
|
169
|
+
countMessagesBySession(sessionId: string): number;
|
|
170
|
+
private mapMessageRows;
|
|
158
171
|
/**
|
|
159
172
|
* Append a message and bump the session's updated_at in one transaction.
|
|
160
173
|
* Throws if the session doesn't exist (FK violation).
|
|
@@ -181,6 +194,16 @@ export declare class SessionStore {
|
|
|
181
194
|
renameSession(id: string, title: string): WireSessionSummary | null;
|
|
182
195
|
/** Returns true if a row was deleted. Cascades to messages. */
|
|
183
196
|
deleteSession(id: string): boolean;
|
|
197
|
+
/**
|
|
198
|
+
* Delete every session in `projectId` whose `updated_at` is older than
|
|
199
|
+
* `olderThanDays` full days. Returns the affected session ids so the
|
|
200
|
+
* caller can tear down in-flight streams and publish deletion events.
|
|
201
|
+
* Messages and memory snapshots are removed by foreign-key cascades.
|
|
202
|
+
*/
|
|
203
|
+
cleanupProjectSessionsOlderThan(projectId: string, olderThanDays: number): {
|
|
204
|
+
deleted: number;
|
|
205
|
+
ids: string[];
|
|
206
|
+
};
|
|
184
207
|
getSessionMemorySnapshot(sessionId: string): SessionMemorySnapshot | null;
|
|
185
208
|
upsertSessionMemorySnapshot(sessionId: string, snapshot: Omit<SessionMemorySnapshot, "sessionId" | "updatedAt">): void;
|
|
186
209
|
deleteSessionMemorySnapshot(sessionId: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/server/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAUH,OAAO,KAAK,EACV,eAAe,EACf,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,sEAAsE;AACtE,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC;AAExC,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,sBAAsB,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/server/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/server/storage.js
CHANGED
|
@@ -189,11 +189,16 @@ export class SessionStore {
|
|
|
189
189
|
stmtDeleteProject;
|
|
190
190
|
stmtListSessionsByProject;
|
|
191
191
|
stmtListSessionIdsByProject;
|
|
192
|
+
stmtListProjectSessionIdsOlderThan;
|
|
193
|
+
stmtDeleteProjectSessionsOlderThan;
|
|
192
194
|
// Session statements
|
|
193
195
|
stmtGetSession;
|
|
194
196
|
stmtCreateSession;
|
|
195
197
|
stmtDeleteSession;
|
|
196
198
|
stmtListMessages;
|
|
199
|
+
stmtListMessagesTail;
|
|
200
|
+
stmtListMessagesBefore;
|
|
201
|
+
stmtCountMessagesBySession;
|
|
197
202
|
stmtAppendMessage;
|
|
198
203
|
stmtDeleteMessage;
|
|
199
204
|
stmtDeleteMessagesBySession;
|
|
@@ -332,12 +337,34 @@ export class SessionStore {
|
|
|
332
337
|
ORDER BY s.updated_at DESC
|
|
333
338
|
`);
|
|
334
339
|
this.stmtListSessionIdsByProject = this.db.prepare(`SELECT id FROM sessions WHERE project_id = ?`);
|
|
340
|
+
this.stmtListProjectSessionIdsOlderThan = this.db.prepare(`SELECT id FROM sessions WHERE project_id = ? AND updated_at < ?`);
|
|
341
|
+
this.stmtDeleteProjectSessionsOlderThan = this.db.prepare(`DELETE FROM sessions WHERE project_id = ? AND updated_at < ?`);
|
|
335
342
|
// ---- session statements ----------------------------------------------
|
|
336
343
|
this.stmtGetSession = this.db.prepare(`SELECT id, project_id, title, created_at, updated_at FROM sessions WHERE id = ?`);
|
|
337
344
|
this.stmtCreateSession = this.db.prepare(`INSERT INTO sessions (id, project_id, title, created_at, updated_at) VALUES (?, ?, ?, ?, ?)`);
|
|
338
345
|
this.stmtDeleteSession = this.db.prepare(`DELETE FROM sessions WHERE id = ?`);
|
|
339
346
|
this.stmtListMessages = this.db.prepare(`SELECT id, session_id, role, content, events_jsonl, images_json, created_at
|
|
340
347
|
FROM messages WHERE session_id = ? ORDER BY created_at ASC, id ASC`);
|
|
348
|
+
this.stmtListMessagesTail = this.db.prepare(`SELECT id, session_id, role, content, events_jsonl, images_json, created_at
|
|
349
|
+
FROM (
|
|
350
|
+
SELECT id, session_id, role, content, events_jsonl, images_json, created_at
|
|
351
|
+
FROM messages
|
|
352
|
+
WHERE session_id = ?
|
|
353
|
+
ORDER BY created_at DESC, id DESC
|
|
354
|
+
LIMIT ?
|
|
355
|
+
)
|
|
356
|
+
ORDER BY created_at ASC, id ASC`);
|
|
357
|
+
this.stmtListMessagesBefore = this.db.prepare(`SELECT id, session_id, role, content, events_jsonl, images_json, created_at
|
|
358
|
+
FROM (
|
|
359
|
+
SELECT id, session_id, role, content, events_jsonl, images_json, created_at
|
|
360
|
+
FROM messages
|
|
361
|
+
WHERE session_id = ?
|
|
362
|
+
AND (created_at < ? OR (created_at = ? AND id < ?))
|
|
363
|
+
ORDER BY created_at DESC, id DESC
|
|
364
|
+
LIMIT ?
|
|
365
|
+
)
|
|
366
|
+
ORDER BY created_at ASC, id ASC`);
|
|
367
|
+
this.stmtCountMessagesBySession = this.db.prepare(`SELECT COUNT(*) AS count FROM messages WHERE session_id = ?`);
|
|
341
368
|
this.stmtAppendMessage = this.db.prepare(`INSERT OR REPLACE INTO messages (id, session_id, role, content, events_jsonl, images_json, created_at)
|
|
342
369
|
VALUES (?, ?, ?, ?, ?, ?, ?)`);
|
|
343
370
|
this.stmtDeleteMessage = this.db.prepare(`DELETE FROM messages WHERE id = ?`);
|
|
@@ -545,6 +572,9 @@ export class SessionStore {
|
|
|
545
572
|
createdAt: row.created_at,
|
|
546
573
|
updatedAt: row.updated_at,
|
|
547
574
|
messages,
|
|
575
|
+
totalMessageCount: messages.length,
|
|
576
|
+
loadedMessageCount: messages.length,
|
|
577
|
+
hasEarlierMessages: false,
|
|
548
578
|
};
|
|
549
579
|
// Expose the fork-compact flag so the UI can show a special send
|
|
550
580
|
// button for the first message of a forked session.
|
|
@@ -559,7 +589,21 @@ export class SessionStore {
|
|
|
559
589
|
return row ? row.project_id : null;
|
|
560
590
|
}
|
|
561
591
|
getMessages(sessionId) {
|
|
562
|
-
return this.stmtListMessages.all(sessionId)
|
|
592
|
+
return this.mapMessageRows(this.stmtListMessages.all(sessionId));
|
|
593
|
+
}
|
|
594
|
+
getMessagesTail(sessionId, limit) {
|
|
595
|
+
return this.mapMessageRows(this.stmtListMessagesTail.all(sessionId, limit));
|
|
596
|
+
}
|
|
597
|
+
getMessagesBefore(sessionId, opts) {
|
|
598
|
+
if (opts.beforeCreatedAt === null)
|
|
599
|
+
return [];
|
|
600
|
+
return this.mapMessageRows(this.stmtListMessagesBefore.all(sessionId, opts.beforeCreatedAt, opts.beforeCreatedAt, opts.beforeId ?? "\uffff", opts.limit));
|
|
601
|
+
}
|
|
602
|
+
countMessagesBySession(sessionId) {
|
|
603
|
+
return this.stmtCountMessagesBySession.get(sessionId)?.count ?? 0;
|
|
604
|
+
}
|
|
605
|
+
mapMessageRows(rows) {
|
|
606
|
+
return rows.map((r) => {
|
|
563
607
|
const images = parseImagesJson(r.images_json);
|
|
564
608
|
return {
|
|
565
609
|
id: r.id,
|
|
@@ -657,6 +701,23 @@ export class SessionStore {
|
|
|
657
701
|
const info = this.stmtDeleteSession.run(id);
|
|
658
702
|
return info.changes > 0;
|
|
659
703
|
}
|
|
704
|
+
/**
|
|
705
|
+
* Delete every session in `projectId` whose `updated_at` is older than
|
|
706
|
+
* `olderThanDays` full days. Returns the affected session ids so the
|
|
707
|
+
* caller can tear down in-flight streams and publish deletion events.
|
|
708
|
+
* Messages and memory snapshots are removed by foreign-key cascades.
|
|
709
|
+
*/
|
|
710
|
+
cleanupProjectSessionsOlderThan(projectId, olderThanDays) {
|
|
711
|
+
if (olderThanDays < 1) {
|
|
712
|
+
throw new Error("olderThanDays must be at least 1");
|
|
713
|
+
}
|
|
714
|
+
const cutoff = Date.now() - olderThanDays * 24 * 60 * 60 * 1000;
|
|
715
|
+
const ids = this.stmtListProjectSessionIdsOlderThan
|
|
716
|
+
.all(projectId, cutoff)
|
|
717
|
+
.map((r) => r.id);
|
|
718
|
+
const info = this.stmtDeleteProjectSessionsOlderThan.run(projectId, cutoff);
|
|
719
|
+
return { deleted: info.changes, ids };
|
|
720
|
+
}
|
|
660
721
|
// ----------------------------------------------------------------------
|
|
661
722
|
// Observational memory snapshot persistence
|
|
662
723
|
// ----------------------------------------------------------------------
|
package/dist/server/wire.d.ts
CHANGED
|
@@ -76,6 +76,12 @@ export interface WireSessionDetail {
|
|
|
76
76
|
createdAt: number;
|
|
77
77
|
updatedAt: number;
|
|
78
78
|
messages: WireMessage[];
|
|
79
|
+
/** Total number of persisted messages in the session. */
|
|
80
|
+
totalMessageCount?: number;
|
|
81
|
+
/** Number of messages included in this payload. */
|
|
82
|
+
loadedMessageCount?: number;
|
|
83
|
+
/** True when older messages exist but were omitted from this payload. */
|
|
84
|
+
hasEarlierMessages?: boolean;
|
|
79
85
|
/** True when this session was created via "Fork & Compact" and has not yet
|
|
80
86
|
* had its first compaction. The UI uses this to show a special send button
|
|
81
87
|
* for the first message. */
|
|
@@ -163,6 +169,12 @@ export type ServerEvent = {
|
|
|
163
169
|
type: "session_ready";
|
|
164
170
|
sessionId: string;
|
|
165
171
|
history: WireMessage[];
|
|
172
|
+
/** Total number of persisted messages in the session. */
|
|
173
|
+
totalMessageCount?: number;
|
|
174
|
+
/** Number of messages included in this payload. */
|
|
175
|
+
loadedMessageCount?: number;
|
|
176
|
+
/** True when older messages exist but were omitted from this payload. */
|
|
177
|
+
hasEarlierMessages?: boolean;
|
|
166
178
|
/**
|
|
167
179
|
* If a turn is in flight when this WS attached, the buffered events
|
|
168
180
|
* for that turn so the client can rebuild it. `null`/absent when no
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/server/wire.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/server/wire.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aexol/spectral",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.42",
|
|
4
4
|
"description": "AI coding agent for Aexol with relay-based browser access.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
"@silvia-odwyer/photon-node": "^0.3.3",
|
|
76
76
|
"better-sqlite3": "^12.9.0",
|
|
77
77
|
"chalk": "^5.6.2",
|
|
78
|
+
"cheerio": "^1.2.0",
|
|
78
79
|
"cross-spawn": "^7.0.6",
|
|
79
80
|
"diff": "^8.0.0",
|
|
80
81
|
"get-east-asian-width": "^1.3.0",
|