@aexol/spectral 0.9.173 → 0.9.175
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +1 -0
- package/dist/extensions/desktop-screenshot/index.d.ts.map +1 -1
- package/dist/extensions/desktop-screenshot/index.js +6 -5
- package/dist/generated/zeus/const.d.ts.map +1 -1
- package/dist/generated/zeus/const.js +6 -2
- package/dist/generated/zeus/index.d.ts +24 -0
- package/dist/generated/zeus/index.d.ts.map +1 -1
- package/dist/memory/config.d.ts +2 -0
- package/dist/memory/config.d.ts.map +1 -1
- package/dist/memory/config.js +25 -0
- package/dist/relay/auto-optimizer.d.ts +1 -1
- package/dist/relay/auto-optimizer.d.ts.map +1 -1
- package/dist/relay/auto-optimizer.js +3 -3
- package/dist/relay/auto-research.d.ts +1 -1
- package/dist/relay/auto-research.d.ts.map +1 -1
- package/dist/relay/auto-research.js +3 -3
- package/dist/relay/dispatcher.d.ts +7 -2
- package/dist/relay/dispatcher.d.ts.map +1 -1
- package/dist/relay/dispatcher.js +27 -20
- package/dist/server/handlers/agent-settings.d.ts +6 -0
- package/dist/server/handlers/agent-settings.d.ts.map +1 -1
- package/dist/server/handlers/agent-settings.js +88 -1
- package/dist/server/handlers/paths-autocomplete.d.ts +4 -4
- package/dist/server/handlers/paths-autocomplete.d.ts.map +1 -1
- package/dist/server/handlers/paths-autocomplete.js +10 -10
- package/dist/server/handlers/projects.d.ts +6 -0
- package/dist/server/handlers/projects.d.ts.map +1 -1
- package/dist/server/handlers/projects.js +18 -0
- package/dist/server/handlers/sessions.d.ts +12 -0
- package/dist/server/handlers/sessions.d.ts.map +1 -1
- package/dist/server/handlers/sessions.js +68 -0
- package/dist/server/handlers/settings-lock.d.ts +19 -0
- package/dist/server/handlers/settings-lock.d.ts.map +1 -1
- package/dist/server/handlers/settings-lock.js +65 -1
- package/dist/server/handlers/settings.d.ts +4 -0
- package/dist/server/handlers/settings.d.ts.map +1 -1
- package/dist/server/handlers/settings.js +38 -2
- package/dist/server/session-stream.d.ts +6 -1
- package/dist/server/session-stream.d.ts.map +1 -1
- package/dist/server/session-stream.js +32 -12
- package/dist/server/sqlite-adapter.d.ts +31 -0
- package/dist/server/sqlite-adapter.d.ts.map +1 -1
- package/dist/server/sqlite-adapter.js +53 -0
- package/dist/server/storage.d.ts +52 -0
- package/dist/server/storage.d.ts.map +1 -1
- package/dist/server/storage.js +178 -8
- package/package.json +1 -1
package/dist/memory/config.d.ts
CHANGED
|
@@ -48,4 +48,6 @@ export declare const DEFAULTS: Config;
|
|
|
48
48
|
export declare function resolveTurnLimits(config: Config): EffectiveTurnLimits;
|
|
49
49
|
export declare function readEnvConfig(env?: NodeJS.ProcessEnv): Partial<Config>;
|
|
50
50
|
export declare function loadConfig(cwd: string, env?: NodeJS.ProcessEnv): Config;
|
|
51
|
+
/** Async twin of {@link loadConfig} for the relay REST path. */
|
|
52
|
+
export declare function loadConfigAsync(cwd: string, env?: NodeJS.ProcessEnv): Promise<Config>;
|
|
51
53
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/memory/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/memory/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAChC,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,4DAA4D;IAC5D,qBAAqB,CAAC,EAAE,SAAS,CAAC;IAClC,wEAAwE;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACtB,0BAA0B,EAAE,MAAM,CAAC;IACnC,yBAAyB,EAAE,MAAM,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,6EAA6E;IAC7E,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mGAAmG;IACnG,wBAAwB,EAAE,MAAM,CAAC;IACjC,4DAA4D;IAC5D,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sDAAsD;IACtD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oFAAoF;IACpF,+BAA+B,EAAE,MAAM,CAAC;IACxC,yEAAyE;IACzE,sBAAsB,EAAE,MAAM,CAAC;IAC/B,0EAA0E;IAC1E,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IACnC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,MAAM,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC;CAC9B;AAcD,eAAO,MAAM,QAAQ,EAAE,MAatB,CAAC;AAsEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAMrE;AAED,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAOnF;AAyBD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAUpF;AAED,gEAAgE;AAChE,wBAAsB,eAAe,CACpC,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|
package/dist/memory/config.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
2
3
|
import { join } from "node:path";
|
|
3
4
|
import { getAgentDir } from "../sdk/coding-agent/index.js";
|
|
4
5
|
export const DEFAULTS = {
|
|
@@ -116,6 +117,19 @@ function readNamespacedConfig(path) {
|
|
|
116
117
|
return {};
|
|
117
118
|
}
|
|
118
119
|
}
|
|
120
|
+
/** Async twin of {@link readNamespacedConfig} for the relay REST path. */
|
|
121
|
+
async function readNamespacedConfigAsync(path) {
|
|
122
|
+
if (!existsSync(path))
|
|
123
|
+
return {};
|
|
124
|
+
try {
|
|
125
|
+
const raw = JSON.parse(await readFile(path, "utf-8"));
|
|
126
|
+
const nested = raw[SETTINGS_KEY];
|
|
127
|
+
return nested && typeof nested === "object" ? normalizeSettingsConfig(nested) : {};
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return {};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
119
133
|
export function loadConfig(cwd, env = process.env) {
|
|
120
134
|
const globalPath = join(getAgentDir(), "settings.json");
|
|
121
135
|
const projectPath = join(cwd, ".spectral", "settings.json");
|
|
@@ -126,3 +140,14 @@ export function loadConfig(cwd, env = process.env) {
|
|
|
126
140
|
...readEnvConfig(env),
|
|
127
141
|
};
|
|
128
142
|
}
|
|
143
|
+
/** Async twin of {@link loadConfig} for the relay REST path. */
|
|
144
|
+
export async function loadConfigAsync(cwd, env = process.env) {
|
|
145
|
+
const globalPath = join(getAgentDir(), "settings.json");
|
|
146
|
+
const projectPath = join(cwd, ".spectral", "settings.json");
|
|
147
|
+
return {
|
|
148
|
+
...DEFAULTS,
|
|
149
|
+
...(await readNamespacedConfigAsync(globalPath)),
|
|
150
|
+
...(await readNamespacedConfigAsync(projectPath)),
|
|
151
|
+
...readEnvConfig(env),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
@@ -37,5 +37,5 @@ export interface AutoOptimizeDeps {
|
|
|
37
37
|
error: (...args: unknown[]) => void;
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
|
-
export declare function handleAutoOptimize(input: AutoOptimizeInput, deps: AutoOptimizeDeps): void
|
|
40
|
+
export declare function handleAutoOptimize(input: AutoOptimizeInput, deps: AutoOptimizeDeps): Promise<void>;
|
|
41
41
|
//# sourceMappingURL=auto-optimizer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-optimizer.d.ts","sourceRoot":"","sources":["../../src/relay/auto-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACX,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;CAClD;AA+UD,
|
|
1
|
+
{"version":3,"file":"auto-optimizer.d.ts","sourceRoot":"","sources":["../../src/relay/auto-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACX,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;CAClD;AA+UD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CAoOf"}
|
|
@@ -278,7 +278,7 @@ async function runQualityGates(projectPath) {
|
|
|
278
278
|
// ---------------------------------------------------------------------------
|
|
279
279
|
// Main handler
|
|
280
280
|
// ---------------------------------------------------------------------------
|
|
281
|
-
export function handleAutoOptimize(input, deps) {
|
|
281
|
+
export async function handleAutoOptimize(input, deps) {
|
|
282
282
|
const { projectId, sessionId, action, approvedItemIds } = input;
|
|
283
283
|
const { store, manager, relay, subscribers } = deps;
|
|
284
284
|
const logger = deps.logger ?? console;
|
|
@@ -318,7 +318,7 @@ export function handleAutoOptimize(input, deps) {
|
|
|
318
318
|
if (!subscriber) {
|
|
319
319
|
subscriber = makeRelaySubscriber(sessionId, relay);
|
|
320
320
|
try {
|
|
321
|
-
manager.attach(sessionId, subscriber);
|
|
321
|
+
await manager.attach(sessionId, subscriber);
|
|
322
322
|
}
|
|
323
323
|
catch (err) {
|
|
324
324
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -462,7 +462,7 @@ export function handleAutoOptimize(input, deps) {
|
|
|
462
462
|
},
|
|
463
463
|
};
|
|
464
464
|
try {
|
|
465
|
-
manager.attach(sessionId, watcher);
|
|
465
|
+
await manager.attach(sessionId, watcher);
|
|
466
466
|
}
|
|
467
467
|
catch (err) {
|
|
468
468
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -60,5 +60,5 @@ export interface AutoResearchExtension {
|
|
|
60
60
|
* the auto-research task through the session's existing AgentBridge. The agent
|
|
61
61
|
* uses the session's model, backend proxy, and all available tools.
|
|
62
62
|
*/
|
|
63
|
-
export declare function handleAutoResearch(input: AutoResearchInput, deps: AutoResearchDeps): void
|
|
63
|
+
export declare function handleAutoResearch(input: AutoResearchInput, deps: AutoResearchDeps): Promise<void>;
|
|
64
64
|
//# sourceMappingURL=auto-research.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-research.d.ts","sourceRoot":"","sources":["../../src/relay/auto-research.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C,oDAAoD;AACpD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjC;0DACsD;IACtD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrC,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;CAClD;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAisBD;;;;;;;;;;;GAWG;AACH,
|
|
1
|
+
{"version":3,"file":"auto-research.d.ts","sourceRoot":"","sources":["../../src/relay/auto-research.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C,oDAAoD;AACpD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjC;0DACsD;IACtD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrC,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;CAClD;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAisBD;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CAsLf"}
|
|
@@ -688,7 +688,7 @@ const AR_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes — generous for LLM-based a
|
|
|
688
688
|
* the auto-research task through the session's existing AgentBridge. The agent
|
|
689
689
|
* uses the session's model, backend proxy, and all available tools.
|
|
690
690
|
*/
|
|
691
|
-
export function handleAutoResearch(input, deps) {
|
|
691
|
+
export async function handleAutoResearch(input, deps) {
|
|
692
692
|
const { projectId, sessionId } = input;
|
|
693
693
|
const { store, manager, relay, subscribers } = deps;
|
|
694
694
|
const logger = deps.logger ?? console;
|
|
@@ -725,7 +725,7 @@ export function handleAutoResearch(input, deps) {
|
|
|
725
725
|
if (!subscriber) {
|
|
726
726
|
subscriber = makeRelaySubscriber(sessionId, relay);
|
|
727
727
|
try {
|
|
728
|
-
manager.attach(sessionId, subscriber);
|
|
728
|
+
await manager.attach(sessionId, subscriber);
|
|
729
729
|
}
|
|
730
730
|
catch (err) {
|
|
731
731
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -795,7 +795,7 @@ export function handleAutoResearch(input, deps) {
|
|
|
795
795
|
},
|
|
796
796
|
};
|
|
797
797
|
try {
|
|
798
|
-
manager.attach(sessionId, watcher);
|
|
798
|
+
await manager.attach(sessionId, watcher);
|
|
799
799
|
}
|
|
800
800
|
catch (err) {
|
|
801
801
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -81,9 +81,14 @@ export interface RestRequestDeps {
|
|
|
81
81
|
cwd?: string;
|
|
82
82
|
/** Agent config dir (`~/.spectral/agent` by default). Passed through to agent-settings persistence. */
|
|
83
83
|
agentDir?: string;
|
|
84
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* Optional logger for unexpected errors and per-request timing.
|
|
86
|
+
* Defaults to `console`; optional methods are guarded so a minimal
|
|
87
|
+
* `{ error }` logger (used by tests) remains valid.
|
|
88
|
+
*/
|
|
85
89
|
logger?: {
|
|
86
|
-
error
|
|
90
|
+
error?: (...args: unknown[]) => void;
|
|
91
|
+
info?: (...args: unknown[]) => void;
|
|
87
92
|
};
|
|
88
93
|
/**
|
|
89
94
|
* Optional MCP extension state. Passed through by `serve.ts` from the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/relay/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAQH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAK/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAkDzD,OAAO,KAAK,EAEV,oBAAoB,EACpB,UAAU,EACX,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAU/C;;;GAGG;AACH,UAAU,UAAU;IAClB,KAAK,EACD,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,eAAe,GACf,0BAA0B,GAC1B,uBAAuB,GACvB,0BAA0B,GAC1B,gBAAgB,GAChB,aAAa,GACb,0BAA0B,GAC1B,6BAA6B,GAC7B,sBAAsB,GACtB,gBAAgB,GAChB,gBAAgB,GAChB,oBAAoB,GACpB,4BAA4B,GAC5B,iBAAiB,GACjB,6BAA6B,GAC7B,cAAc,GACd,wBAAwB,GACxB,gBAAgB,GAChB,gBAAgB,GAChB,oBAAoB,GACpB,sBAAsB,GACtB,gBAAgB,GAChB,kBAAkB,GAClB,eAAe,GACf,oBAAoB,GACpB,iBAAiB,GACjB,mBAAmB,GACnB,2BAA2B,GAC3B,sBAAsB,GACtB,cAAc,GACd,cAAc,GACd,oBAAoB,GACpB,oBAAoB,GACpB,8BAA8B,GAC9B,8BAA8B,GAC9B,cAAc,GACd,aAAa,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,UAAU,GAAG,IAAI,CAgNnB;AAMD;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,6FAA6F;IAC7F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uGAAuG;IACvG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB
|
|
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
|
@@ -51,11 +51,11 @@ import { handleGetHomeDirectory } from "../server/handlers/paths-home.js";
|
|
|
51
51
|
import { handleListDirectory } from "../server/handlers/paths-list.js";
|
|
52
52
|
import { handlePickDirectory } from "../server/handlers/paths-pick-directory.js";
|
|
53
53
|
import { handleSearchProjectFiles } from "../server/handlers/files-search.js";
|
|
54
|
-
import { handleBindStudioProject, handleUnbindStudioProject, handleCleanupProjectSessions, handleCreateProject, handleDeleteProject, handleGetProjectObservations,
|
|
55
|
-
import { handleCompactSession, handleCreateSession, handleDeleteSession, handleForkSession, handleRememberAndDeleteSession,
|
|
54
|
+
import { handleBindStudioProject, handleUnbindStudioProject, handleCleanupProjectSessions, handleCreateProject, handleDeleteProject, handleGetProjectObservations, handleListProjectsAsync, handleListSessionsByProjectAsync, handleUpdateProject, } from "../server/handlers/projects.js";
|
|
55
|
+
import { handleCompactSession, handleCreateSession, handleDeleteSession, handleForkSession, handleRememberAndDeleteSession, handleGetSessionDetailAsync, handleGetSessionMessagesAsync, handleGetSessionMemoryDetails, handleGetSessionMemoryStatus, handleUpdateSession, handleGetSessionActiveAgentAsync, handleUpdateSessionActiveAgentAsync, } from "../server/handlers/sessions.js";
|
|
56
56
|
import { handleClearPromptQueue, handleEnqueuePrompt, handleGetPromptQueue, handleRemovePrompt, } from "../server/handlers/queue.js";
|
|
57
|
-
import {
|
|
58
|
-
import {
|
|
57
|
+
import { handleGetAgentSettingsAsync, handleListAgents, handlePutAgentSettingsAsync, } from "../server/handlers/agent-settings.js";
|
|
58
|
+
import { handleGetSettingsAsync, handlePutSettingsAsync, } from "../server/handlers/settings.js";
|
|
59
59
|
import { handleGetPromptMutationSettings, handlePutPromptMutationSettings, } from "../server/handlers/prompt-mutation-settings.js";
|
|
60
60
|
import { shutdownState } from "../server/shutdown.js";
|
|
61
61
|
import { humanizeProviderError } from "../server/error-humanizer.js";
|
|
@@ -717,8 +717,11 @@ async function startWizardLoginInternal(directory) {
|
|
|
717
717
|
export async function handleRestRequest(frame, deps) {
|
|
718
718
|
const { reqId, method, path, body } = frame;
|
|
719
719
|
const logger = deps.logger ?? console;
|
|
720
|
+
const startedAt = performance.now();
|
|
721
|
+
logger.info?.(`[rest] start machineId=${frame.machineId} method=${method} path=${path} reqId=${reqId}`);
|
|
720
722
|
const match = matchRoute(method, path);
|
|
721
723
|
if (!match) {
|
|
724
|
+
logger.info?.(`[rest] finish machineId=${frame.machineId} method=${method} path=${path} reqId=${reqId} status=404 durationMs=${Math.round(performance.now() - startedAt)}`);
|
|
722
725
|
return {
|
|
723
726
|
kind: "rest_response",
|
|
724
727
|
reqId,
|
|
@@ -728,6 +731,7 @@ export async function handleRestRequest(frame, deps) {
|
|
|
728
731
|
}
|
|
729
732
|
try {
|
|
730
733
|
const result = await dispatchRoute(match, body, deps);
|
|
734
|
+
logger.info?.(`[rest] finish machineId=${frame.machineId} method=${method} path=${path} reqId=${reqId} status=200 durationMs=${Math.round(performance.now() - startedAt)}`);
|
|
731
735
|
return {
|
|
732
736
|
kind: "rest_response",
|
|
733
737
|
reqId,
|
|
@@ -737,6 +741,7 @@ export async function handleRestRequest(frame, deps) {
|
|
|
737
741
|
}
|
|
738
742
|
catch (err) {
|
|
739
743
|
if (err instanceof BadRequestError) {
|
|
744
|
+
logger.info?.(`[rest] finish machineId=${frame.machineId} method=${method} path=${path} reqId=${reqId} status=400 durationMs=${Math.round(performance.now() - startedAt)}`);
|
|
740
745
|
return {
|
|
741
746
|
kind: "rest_response",
|
|
742
747
|
reqId,
|
|
@@ -745,6 +750,7 @@ export async function handleRestRequest(frame, deps) {
|
|
|
745
750
|
};
|
|
746
751
|
}
|
|
747
752
|
if (err instanceof NotFoundError) {
|
|
753
|
+
logger.info?.(`[rest] finish machineId=${frame.machineId} method=${method} path=${path} reqId=${reqId} status=404 durationMs=${Math.round(performance.now() - startedAt)}`);
|
|
748
754
|
return {
|
|
749
755
|
kind: "rest_response",
|
|
750
756
|
reqId,
|
|
@@ -755,6 +761,7 @@ export async function handleRestRequest(frame, deps) {
|
|
|
755
761
|
// Unexpected — log locally so operators can correlate, but only
|
|
756
762
|
// return a sanitized message to the caller.
|
|
757
763
|
logger.error?.(`[dispatcher] unexpected error in ${method} ${path}:`, err);
|
|
764
|
+
logger.info?.(`[rest] finish machineId=${frame.machineId} method=${method} path=${path} reqId=${reqId} status=500 durationMs=${Math.round(performance.now() - startedAt)}`);
|
|
758
765
|
return {
|
|
759
766
|
kind: "rest_response",
|
|
760
767
|
reqId,
|
|
@@ -781,13 +788,13 @@ async function dispatchRoute(match, body, deps) {
|
|
|
781
788
|
switch (match.route) {
|
|
782
789
|
case "list_projects": {
|
|
783
790
|
const activeIds = manager.getActiveTurnSessionIds();
|
|
784
|
-
const projects =
|
|
791
|
+
const projects = await handleListProjectsAsync(store);
|
|
785
792
|
// Batch all per-project session lookups into a SINGLE query (LEFT JOIN +
|
|
786
793
|
// GROUP BY) instead of calling listSessionsByProject(p.id) in a loop,
|
|
787
794
|
// which issued O(projects) queries each with a per-session correlated
|
|
788
795
|
// COUNT(*) subquery and blocked the event loop past the 30s relay
|
|
789
796
|
// deadline on large projects.
|
|
790
|
-
const sessionsByProject = store.
|
|
797
|
+
const sessionsByProject = await store.listSessionsByProjectIdsAsync(projects.map((p) => p.id));
|
|
791
798
|
return projects.map((p) => {
|
|
792
799
|
const sessions = sessionsByProject.get(p.id) ?? [];
|
|
793
800
|
const hasActiveSession = sessions.some((s) => activeIds.has(s.id));
|
|
@@ -814,9 +821,9 @@ async function dispatchRoute(match, body, deps) {
|
|
|
814
821
|
// Order matters: tear down live streams BEFORE the row is gone so
|
|
815
822
|
// the bridges don't try to write to a deleted FK target. Mirrors
|
|
816
823
|
// the ordering the deleted Hono route used.
|
|
817
|
-
const project = store.
|
|
824
|
+
const project = await store.getProjectAsync(id);
|
|
818
825
|
if (project) {
|
|
819
|
-
const sessions = store.
|
|
826
|
+
const sessions = await store.listSessionsByProjectAsync(id);
|
|
820
827
|
manager.disposeProjectStreams(sessions.map((s) => s.id));
|
|
821
828
|
}
|
|
822
829
|
const result = handleDeleteProject(store, id);
|
|
@@ -877,7 +884,7 @@ async function dispatchRoute(match, body, deps) {
|
|
|
877
884
|
}
|
|
878
885
|
case "list_project_sessions": {
|
|
879
886
|
const activeIds = manager.getActiveTurnSessionIds();
|
|
880
|
-
const sessions =
|
|
887
|
+
const sessions = await handleListSessionsByProjectAsync(store, id);
|
|
881
888
|
return sessions.map((s) => ({
|
|
882
889
|
...s,
|
|
883
890
|
hasActiveTurn: activeIds.has(s.id),
|
|
@@ -908,13 +915,13 @@ async function dispatchRoute(match, body, deps) {
|
|
|
908
915
|
return session;
|
|
909
916
|
}
|
|
910
917
|
case "get_session":
|
|
911
|
-
return
|
|
918
|
+
return await handleGetSessionDetailAsync(store, id);
|
|
912
919
|
case "get_session_active_agent":
|
|
913
|
-
return
|
|
920
|
+
return await handleGetSessionActiveAgentAsync(store, id);
|
|
914
921
|
case "update_session_active_agent":
|
|
915
|
-
return
|
|
922
|
+
return await handleUpdateSessionActiveAgentAsync(store, id, asObject(body), manager);
|
|
916
923
|
case "get_session_messages":
|
|
917
|
-
return
|
|
924
|
+
return await handleGetSessionMessagesAsync(store, id, {
|
|
918
925
|
beforeCreatedAt: match.query?.get("beforeCreatedAt") ?? undefined,
|
|
919
926
|
beforeId: match.query?.get("beforeId") ?? undefined,
|
|
920
927
|
limit: match.query?.get("limit") ?? undefined,
|
|
@@ -981,7 +988,7 @@ async function dispatchRoute(match, body, deps) {
|
|
|
981
988
|
}
|
|
982
989
|
case "list_path_autocomplete": {
|
|
983
990
|
const prefix = match.query?.get("prefix") ?? "";
|
|
984
|
-
return handlePathAutocomplete(prefix);
|
|
991
|
+
return await handlePathAutocomplete(prefix);
|
|
985
992
|
}
|
|
986
993
|
case "pick_directory":
|
|
987
994
|
return handlePickDirectory();
|
|
@@ -1032,13 +1039,13 @@ async function dispatchRoute(match, body, deps) {
|
|
|
1032
1039
|
return await (deps.startWizardLogin ?? (() => startWizardLogin(deps.cwd ?? homedir())))();
|
|
1033
1040
|
}
|
|
1034
1041
|
case "get_settings":
|
|
1035
|
-
return
|
|
1042
|
+
return await handleGetSettingsAsync(deps.cwd ?? homedir());
|
|
1036
1043
|
case "put_settings":
|
|
1037
|
-
return
|
|
1044
|
+
return await handlePutSettingsAsync(deps.cwd ?? homedir(), asObject(body));
|
|
1038
1045
|
case "get_agent_settings":
|
|
1039
|
-
return
|
|
1046
|
+
return await handleGetAgentSettingsAsync(deps.cwd ?? homedir(), deps.agentDir);
|
|
1040
1047
|
case "put_agent_settings":
|
|
1041
|
-
return
|
|
1048
|
+
return await handlePutAgentSettingsAsync(deps.cwd ?? homedir(), asObject(body), deps.agentDir);
|
|
1042
1049
|
case "get_prompt_mutation_settings":
|
|
1043
1050
|
return handleGetPromptMutationSettings(deps.cwd ?? homedir(), deps.agentDir);
|
|
1044
1051
|
case "put_prompt_mutation_settings":
|
|
@@ -1321,7 +1328,7 @@ export async function handleClientMessage(frame, deps) {
|
|
|
1321
1328
|
subscriber = makeRelaySubscriber(sessionId, relay);
|
|
1322
1329
|
let attachResult;
|
|
1323
1330
|
try {
|
|
1324
|
-
attachResult = manager.attach(sessionId, subscriber);
|
|
1331
|
+
attachResult = await manager.attach(sessionId, subscriber);
|
|
1325
1332
|
}
|
|
1326
1333
|
catch (err) {
|
|
1327
1334
|
// Unknown session — surface as a ws_event so the browser's stream
|
|
@@ -1401,7 +1408,7 @@ export async function handleSubscribe(frame, deps) {
|
|
|
1401
1408
|
}
|
|
1402
1409
|
let attachResult;
|
|
1403
1410
|
try {
|
|
1404
|
-
attachResult = manager.attach(sessionId, subscriber);
|
|
1411
|
+
attachResult = await manager.attach(sessionId, subscriber);
|
|
1405
1412
|
}
|
|
1406
1413
|
catch (err) {
|
|
1407
1414
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -30,7 +30,11 @@ export interface PutAgentSettingsOutput extends AgentSettings {
|
|
|
30
30
|
* memory config.
|
|
31
31
|
*/
|
|
32
32
|
export declare function loadAgentSettings(cwd: string, agentDir?: string): AgentSettings;
|
|
33
|
+
/** Async twin of {@link loadAgentSettings}. */
|
|
34
|
+
export declare function loadAgentSettingsAsync(cwd: string, agentDir?: string): Promise<AgentSettings>;
|
|
33
35
|
export declare function handleGetAgentSettings(cwd: string, agentDir?: string): AgentSettings;
|
|
36
|
+
/** Async relay-path twin of {@link handleGetAgentSettings}. */
|
|
37
|
+
export declare function handleGetAgentSettingsAsync(cwd: string, agentDir?: string): Promise<AgentSettings>;
|
|
34
38
|
/**
|
|
35
39
|
* Persist a partial update to the `agent` namespace in the **global**
|
|
36
40
|
* `settings.json` (per-machine, matching the existing memory-settings
|
|
@@ -40,6 +44,8 @@ export declare function handleGetAgentSettings(cwd: string, agentDir?: string):
|
|
|
40
44
|
* is a `400 BadRequestError`.
|
|
41
45
|
*/
|
|
42
46
|
export declare function handlePutAgentSettings(cwd: string, body: PutAgentSettingsInput, agentDir?: string): PutAgentSettingsOutput;
|
|
47
|
+
/** Async relay-path twin of {@link handlePutAgentSettings}. */
|
|
48
|
+
export declare function handlePutAgentSettingsAsync(cwd: string, body: PutAgentSettingsInput, agentDir?: string): Promise<PutAgentSettingsOutput>;
|
|
43
49
|
export interface AgentInfo {
|
|
44
50
|
name: string;
|
|
45
51
|
description: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-settings.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/agent-settings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-settings.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/agent-settings.ts"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,wEAAwE;IACxE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,eAAO,MAAM,uBAAuB,EAAE,aAKrC,CAAC;AAKF,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,EAAE,EAAE,IAAI,CAAC;CACV;AAkED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAChB,aAAa,CAQf;AAED,+CAA+C;AAC/C,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CAQxB;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAChB,aAAa,CAEf;AAED,+DAA+D;AAC/D,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CAExB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,EAC3B,QAAQ,CAAC,EAAE,MAAM,GAChB,sBAAsB,CAqDxB;AAED,+DAA+D;AAC/D,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,EAC3B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,sBAAsB,CAAC,CA+CjC;AAMD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd;IAAE,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,CAUzB"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
2
3
|
import { join } from "node:path";
|
|
3
4
|
import { getAgentDir } from "../../sdk/coding-agent/index.js";
|
|
4
5
|
import { discoverAgents } from "../../agent/agents.js";
|
|
5
6
|
import { BadRequestError } from "./errors.js";
|
|
6
|
-
import { withSettingsLock } from "./settings-lock.js";
|
|
7
|
+
import { withSettingsLock, withSettingsLockAsync } from "./settings-lock.js";
|
|
7
8
|
export const AGENT_SETTINGS_DEFAULTS = {
|
|
8
9
|
primaryAgentEnabled: true,
|
|
9
10
|
subagentsEnabled: true,
|
|
@@ -44,6 +45,38 @@ function readAgentNamespace(path) {
|
|
|
44
45
|
return {};
|
|
45
46
|
}
|
|
46
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Async twin of {@link readAgentNamespace} for the relay REST path.
|
|
50
|
+
* Uses `node:fs/promises.readFile` so settings reads yield to the event loop.
|
|
51
|
+
*/
|
|
52
|
+
async function readAgentNamespaceAsync(path) {
|
|
53
|
+
if (!existsSync(path))
|
|
54
|
+
return {};
|
|
55
|
+
try {
|
|
56
|
+
const raw = JSON.parse(await readFile(path, "utf-8"));
|
|
57
|
+
const ns = raw[AGENT_NAMESPACE];
|
|
58
|
+
if (!ns || typeof ns !== "object")
|
|
59
|
+
return {};
|
|
60
|
+
const obj = ns;
|
|
61
|
+
const result = {};
|
|
62
|
+
if (typeof obj.primaryAgentEnabled === "boolean") {
|
|
63
|
+
result.primaryAgentEnabled = obj.primaryAgentEnabled;
|
|
64
|
+
}
|
|
65
|
+
if (typeof obj.subagentsEnabled === "boolean") {
|
|
66
|
+
result.subagentsEnabled = obj.subagentsEnabled;
|
|
67
|
+
}
|
|
68
|
+
if (Array.isArray(obj.disabledSubagents)) {
|
|
69
|
+
result.disabledSubagents = obj.disabledSubagents.filter((s) => typeof s === "string");
|
|
70
|
+
}
|
|
71
|
+
if (obj.activePrimaryAgent === null || typeof obj.activePrimaryAgent === "string") {
|
|
72
|
+
result.activePrimaryAgent = obj.activePrimaryAgent;
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return {};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
47
80
|
/**
|
|
48
81
|
* Load agent settings by merging defaults ← global ← project overrides.
|
|
49
82
|
* Mirrors the precedence pattern used by `loadConfig` for observational
|
|
@@ -58,9 +91,23 @@ export function loadAgentSettings(cwd, agentDir) {
|
|
|
58
91
|
...readAgentNamespace(projectPath),
|
|
59
92
|
};
|
|
60
93
|
}
|
|
94
|
+
/** Async twin of {@link loadAgentSettings}. */
|
|
95
|
+
export async function loadAgentSettingsAsync(cwd, agentDir) {
|
|
96
|
+
const globalPath = join(agentDir ?? getAgentDir(), "settings.json");
|
|
97
|
+
const projectPath = join(cwd, ".spectral", "settings.json");
|
|
98
|
+
return {
|
|
99
|
+
...AGENT_SETTINGS_DEFAULTS,
|
|
100
|
+
...(await readAgentNamespaceAsync(globalPath)),
|
|
101
|
+
...(await readAgentNamespaceAsync(projectPath)),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
61
104
|
export function handleGetAgentSettings(cwd, agentDir) {
|
|
62
105
|
return loadAgentSettings(cwd, agentDir);
|
|
63
106
|
}
|
|
107
|
+
/** Async relay-path twin of {@link handleGetAgentSettings}. */
|
|
108
|
+
export async function handleGetAgentSettingsAsync(cwd, agentDir) {
|
|
109
|
+
return loadAgentSettingsAsync(cwd, agentDir);
|
|
110
|
+
}
|
|
64
111
|
/**
|
|
65
112
|
* Persist a partial update to the `agent` namespace in the **global**
|
|
66
113
|
* `settings.json` (per-machine, matching the existing memory-settings
|
|
@@ -114,6 +161,46 @@ export function handlePutAgentSettings(cwd, body, agentDir) {
|
|
|
114
161
|
// caller sees the effective state, not just what we wrote.
|
|
115
162
|
return { ok: true, ...loadAgentSettings(cwd, agentDir) };
|
|
116
163
|
}
|
|
164
|
+
/** Async relay-path twin of {@link handlePutAgentSettings}. */
|
|
165
|
+
export async function handlePutAgentSettingsAsync(cwd, body, agentDir) {
|
|
166
|
+
const patch = {};
|
|
167
|
+
for (const key of ["primaryAgentEnabled", "subagentsEnabled"]) {
|
|
168
|
+
if (body[key] !== undefined) {
|
|
169
|
+
if (typeof body[key] !== "boolean") {
|
|
170
|
+
throw new BadRequestError(`agent setting "${key}" must be a boolean, got ${typeof body[key]}`);
|
|
171
|
+
}
|
|
172
|
+
patch[key] = body[key];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (body.disabledSubagents !== undefined) {
|
|
176
|
+
if (!Array.isArray(body.disabledSubagents) ||
|
|
177
|
+
!body.disabledSubagents.every((s) => typeof s === "string")) {
|
|
178
|
+
throw new BadRequestError(`agent setting "disabledSubagents" must be a string array`);
|
|
179
|
+
}
|
|
180
|
+
patch.disabledSubagents = body.disabledSubagents;
|
|
181
|
+
}
|
|
182
|
+
if (body.activePrimaryAgent !== undefined) {
|
|
183
|
+
if (body.activePrimaryAgent !== null && typeof body.activePrimaryAgent !== "string") {
|
|
184
|
+
throw new BadRequestError(`agent setting "activePrimaryAgent" must be a string or null`);
|
|
185
|
+
}
|
|
186
|
+
patch.activePrimaryAgent = body.activePrimaryAgent;
|
|
187
|
+
}
|
|
188
|
+
const scope = body.scope === undefined ? "global" : body.scope;
|
|
189
|
+
if (scope !== "global" && scope !== "project") {
|
|
190
|
+
throw new BadRequestError(`agent settings scope must be "global" or "project"`);
|
|
191
|
+
}
|
|
192
|
+
if (Object.keys(patch).length === 0) {
|
|
193
|
+
throw new BadRequestError(`agent settings body must include at least one of: ${[...ALLOWED_KEYS].join(", ")}`);
|
|
194
|
+
}
|
|
195
|
+
await withSettingsLockAsync({
|
|
196
|
+
agentDir,
|
|
197
|
+
settingsPath: scope === "project" ? join(cwd, ".spectral", "settings.json") : undefined,
|
|
198
|
+
namespace: AGENT_NAMESPACE,
|
|
199
|
+
}, (current) => {
|
|
200
|
+
return { ...current, ...patch };
|
|
201
|
+
});
|
|
202
|
+
return { ok: true, ...(await loadAgentSettingsAsync(cwd, agentDir)) };
|
|
203
|
+
}
|
|
117
204
|
export function handleListAgents(cwd, agentDir, teamId) {
|
|
118
205
|
const { agents } = discoverAgents(cwd, "both", agentDir, teamId);
|
|
119
206
|
return {
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
* Symlinks to directories ARE included (readdirSync with withFileTypes
|
|
20
20
|
* returns true for both real dirs and symlink dirs).
|
|
21
21
|
*
|
|
22
|
-
* Thread-safety:
|
|
23
|
-
* fs
|
|
24
|
-
*
|
|
22
|
+
* Thread-safety: called from the relay-dispatcher hot path, so filesystem
|
|
23
|
+
* enumeration uses `node:fs/promises` and yields to the event loop rather
|
|
24
|
+
* than blocking every queued relay request behind a synchronous burst.
|
|
25
25
|
*/
|
|
26
26
|
export interface PathAutocompleteResult {
|
|
27
27
|
suggestions: string[];
|
|
@@ -41,5 +41,5 @@ export interface PathAutocompleteResult {
|
|
|
41
41
|
* prefix="~/projects/sr" → expanded="/Users/alice/projects/sr" (does NOT exist)
|
|
42
42
|
* → starts-with "sr" in /Users/alice/projects/
|
|
43
43
|
*/
|
|
44
|
-
export declare function handlePathAutocomplete(prefix: string): PathAutocompleteResult
|
|
44
|
+
export declare function handlePathAutocomplete(prefix: string): Promise<PathAutocompleteResult>;
|
|
45
45
|
//# sourceMappingURL=paths-autocomplete.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths-autocomplete.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/paths-autocomplete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAgCD;;;;;;;;;;;;;GAaG;AACH,
|
|
1
|
+
{"version":3,"file":"paths-autocomplete.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/paths-autocomplete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAgCD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,sBAAsB,CAAC,CA+BjC"}
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
* Symlinks to directories ARE included (readdirSync with withFileTypes
|
|
20
20
|
* returns true for both real dirs and symlink dirs).
|
|
21
21
|
*
|
|
22
|
-
* Thread-safety:
|
|
23
|
-
* fs
|
|
24
|
-
*
|
|
22
|
+
* Thread-safety: called from the relay-dispatcher hot path, so filesystem
|
|
23
|
+
* enumeration uses `node:fs/promises` and yields to the event loop rather
|
|
24
|
+
* than blocking every queued relay request behind a synchronous burst.
|
|
25
25
|
*/
|
|
26
|
-
import {
|
|
26
|
+
import { readdir, stat } from "node:fs/promises";
|
|
27
27
|
import { join, sep } from "node:path";
|
|
28
28
|
import { expandPath } from "../paths.js";
|
|
29
29
|
/** Maximum number of suggestions returned to the UI. */
|
|
@@ -34,9 +34,9 @@ const MAX_SUGGESTIONS = 10;
|
|
|
34
34
|
*
|
|
35
35
|
* Dotfiles are always excluded. Returns at most `MAX_SUGGESTIONS` entries.
|
|
36
36
|
*/
|
|
37
|
-
function collectSuggestions(parentDir, basenamePrefix) {
|
|
37
|
+
async function collectSuggestions(parentDir, basenamePrefix) {
|
|
38
38
|
try {
|
|
39
|
-
const entries =
|
|
39
|
+
const entries = await readdir(parentDir, { withFileTypes: true });
|
|
40
40
|
return entries
|
|
41
41
|
.filter((e) => e.isDirectory() &&
|
|
42
42
|
e.name.startsWith(basenamePrefix) &&
|
|
@@ -63,14 +63,14 @@ function collectSuggestions(parentDir, basenamePrefix) {
|
|
|
63
63
|
* prefix="~/projects/sr" → expanded="/Users/alice/projects/sr" (does NOT exist)
|
|
64
64
|
* → starts-with "sr" in /Users/alice/projects/
|
|
65
65
|
*/
|
|
66
|
-
export function handlePathAutocomplete(prefix) {
|
|
66
|
+
export async function handlePathAutocomplete(prefix) {
|
|
67
67
|
const expanded = expandPath(prefix);
|
|
68
68
|
// Strategy 1: expanded path is an existing directory → show children.
|
|
69
69
|
try {
|
|
70
|
-
const st =
|
|
70
|
+
const st = await stat(expanded);
|
|
71
71
|
if (st.isDirectory()) {
|
|
72
72
|
const parentDir = expanded.endsWith(sep) ? expanded : expanded + sep;
|
|
73
|
-
const suggestions = collectSuggestions(parentDir, "");
|
|
73
|
+
const suggestions = await collectSuggestions(parentDir, "");
|
|
74
74
|
return { suggestions, expandedPrefix: expanded };
|
|
75
75
|
}
|
|
76
76
|
}
|
|
@@ -91,6 +91,6 @@ export function handlePathAutocomplete(prefix) {
|
|
|
91
91
|
parentDir = expanded.slice(0, lastSep + 1);
|
|
92
92
|
basenamePrefix = expanded.slice(lastSep + 1);
|
|
93
93
|
}
|
|
94
|
-
const suggestions = collectSuggestions(parentDir, basenamePrefix);
|
|
94
|
+
const suggestions = await collectSuggestions(parentDir, basenamePrefix);
|
|
95
95
|
return { suggestions, expandedPrefix: expanded };
|
|
96
96
|
}
|
|
@@ -38,8 +38,12 @@ export interface UpdateProjectInputRaw {
|
|
|
38
38
|
path?: unknown;
|
|
39
39
|
}
|
|
40
40
|
export declare function handleListProjects(store: SessionStore): WireProject[];
|
|
41
|
+
/** Async relay-path twin of {@link handleListProjects}. */
|
|
42
|
+
export declare function handleListProjectsAsync(store: SessionStore): Promise<WireProject[]>;
|
|
41
43
|
export declare function handleCreateProject(store: SessionStore, body: CreateProjectInputRaw): WireProject;
|
|
42
44
|
export declare function handleGetProject(store: SessionStore, id: string): WireProject;
|
|
45
|
+
/** Async relay-path twin of {@link handleGetProject}. */
|
|
46
|
+
export declare function handleGetProjectAsync(store: SessionStore, id: string): Promise<WireProject>;
|
|
43
47
|
export declare function handleUpdateProject(store: SessionStore, id: string, body: UpdateProjectInputRaw): WireProject;
|
|
44
48
|
export interface DeleteProjectResult {
|
|
45
49
|
/** Session ids that belonged to the project (cascade-deleted). */
|
|
@@ -76,6 +80,8 @@ export interface UnbindStudioResult {
|
|
|
76
80
|
*/
|
|
77
81
|
export declare function handleUnbindStudioProject(store: SessionStore, id: string): Promise<UnbindStudioResult>;
|
|
78
82
|
export declare function handleListSessionsByProject(store: SessionStore, id: string): WireSessionSummary[];
|
|
83
|
+
/** Async relay-path twin of {@link handleListSessionsByProject}. */
|
|
84
|
+
export declare function handleListSessionsByProjectAsync(store: SessionStore, id: string): Promise<WireSessionSummary[]>;
|
|
79
85
|
export interface CleanupProjectSessionsInputRaw {
|
|
80
86
|
olderThanDays?: unknown;
|
|
81
87
|
}
|
|
@@ -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;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"}
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/projects.ts"],"names":[],"mappings":"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"}
|