@aexol/spectral 0.9.172 → 0.9.174

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/commands/serve.d.ts.map +1 -1
  2. package/dist/commands/serve.js +1 -0
  3. package/dist/memory/config.d.ts +2 -0
  4. package/dist/memory/config.d.ts.map +1 -1
  5. package/dist/memory/config.js +25 -0
  6. package/dist/relay/dispatcher.d.ts +7 -2
  7. package/dist/relay/dispatcher.d.ts.map +1 -1
  8. package/dist/relay/dispatcher.js +25 -18
  9. package/dist/server/handlers/agent-settings.d.ts +6 -0
  10. package/dist/server/handlers/agent-settings.d.ts.map +1 -1
  11. package/dist/server/handlers/agent-settings.js +88 -1
  12. package/dist/server/handlers/paths-autocomplete.d.ts +4 -4
  13. package/dist/server/handlers/paths-autocomplete.d.ts.map +1 -1
  14. package/dist/server/handlers/paths-autocomplete.js +10 -10
  15. package/dist/server/handlers/projects.d.ts +6 -0
  16. package/dist/server/handlers/projects.d.ts.map +1 -1
  17. package/dist/server/handlers/projects.js +18 -0
  18. package/dist/server/handlers/sessions.d.ts +12 -0
  19. package/dist/server/handlers/sessions.d.ts.map +1 -1
  20. package/dist/server/handlers/sessions.js +68 -0
  21. package/dist/server/handlers/settings-lock.d.ts +19 -0
  22. package/dist/server/handlers/settings-lock.d.ts.map +1 -1
  23. package/dist/server/handlers/settings-lock.js +65 -1
  24. package/dist/server/handlers/settings.d.ts +4 -0
  25. package/dist/server/handlers/settings.d.ts.map +1 -1
  26. package/dist/server/handlers/settings.js +38 -2
  27. package/dist/server/sqlite-adapter.d.ts +17 -0
  28. package/dist/server/sqlite-adapter.d.ts.map +1 -1
  29. package/dist/server/sqlite-adapter.js +18 -0
  30. package/dist/server/storage.d.ts +44 -0
  31. package/dist/server/storage.d.ts.map +1 -1
  32. package/dist/server/storage.js +166 -8
  33. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAwBH,OAAO,EAAE,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AAWlE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAmB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAWrE;;;;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,CA4hBlF;AA+DD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAa5E"}
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAwBH,OAAO,EAAE,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AAWlE,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAmB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAWrE;;;;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,CA6hBlF;AA+DD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAa5E"}
@@ -280,6 +280,7 @@ export async function runServe(opts = {}) {
280
280
  void handleRestRequest(frame, {
281
281
  store,
282
282
  manager,
283
+ logger: console,
283
284
  cwd,
284
285
  agentDir: getAgentDir(),
285
286
  publishMetaEvent: deferredPublishMetaEvent,
@@ -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":"AAIA,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;AAaD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAUpF"}
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"}
@@ -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
+ }
@@ -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
- /** Optional logger for unexpected errors. Defaults to console.error. */
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: (...args: unknown[]) => void;
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":"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"}
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/relay/dispatcher.ts"],"names":[],"mappings":"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"}
@@ -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, handleListProjects, handleListSessionsByProject, handleUpdateProject, } from "../server/handlers/projects.js";
55
- import { handleCompactSession, handleCreateSession, handleDeleteSession, handleForkSession, handleRememberAndDeleteSession, handleGetSessionDetail, handleGetSessionMessages, handleGetSessionMemoryDetails, handleGetSessionMemoryStatus, handleUpdateSession, handleGetSessionActiveAgent, handleUpdateSessionActiveAgent, } from "../server/handlers/sessions.js";
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 { handleGetAgentSettings, handleListAgents, handlePutAgentSettings, } from "../server/handlers/agent-settings.js";
58
- import { handleGetSettings, handlePutSettings, } from "../server/handlers/settings.js";
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 = handleListProjects(store);
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.listSessionsByProjectIds(projects.map((p) => p.id));
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.getProject(id);
824
+ const project = await store.getProjectAsync(id);
818
825
  if (project) {
819
- const sessions = store.listSessionsByProject(id);
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 = handleListSessionsByProject(store, id);
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 handleGetSessionDetail(store, id);
918
+ return await handleGetSessionDetailAsync(store, id);
912
919
  case "get_session_active_agent":
913
- return handleGetSessionActiveAgent(store, id);
920
+ return await handleGetSessionActiveAgentAsync(store, id);
914
921
  case "update_session_active_agent":
915
- return handleUpdateSessionActiveAgent(store, id, asObject(body), manager);
922
+ return await handleUpdateSessionActiveAgentAsync(store, id, asObject(body), manager);
916
923
  case "get_session_messages":
917
- return handleGetSessionMessages(store, id, {
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 handleGetSettings(deps.cwd ?? homedir());
1042
+ return await handleGetSettingsAsync(deps.cwd ?? homedir());
1036
1043
  case "put_settings":
1037
- return handlePutSettings(deps.cwd ?? homedir(), asObject(body));
1044
+ return await handlePutSettingsAsync(deps.cwd ?? homedir(), asObject(body));
1038
1045
  case "get_agent_settings":
1039
- return handleGetAgentSettings(deps.cwd ?? homedir(), deps.agentDir);
1046
+ return await handleGetAgentSettingsAsync(deps.cwd ?? homedir(), deps.agentDir);
1040
1047
  case "put_agent_settings":
1041
- return handlePutAgentSettings(deps.cwd ?? homedir(), asObject(body), deps.agentDir);
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":
@@ -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":"AAOA;;;;;;;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;AAkCD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAChB,aAAa,CAQf;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,GAChB,aAAa,CAEf;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,qBAAqB,EAC3B,QAAQ,CAAC,EAAE,MAAM,GAChB,sBAAsB,CAqDxB;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
+ {"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: synchronous, called from the relay-dispatcher hot path.
23
- * fs ops block the event loop for microseconds on local SSDs; the form
24
- * is typed by a single human, so this is perfectly fine.
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,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,CA+B7E"}
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: synchronous, called from the relay-dispatcher hot path.
23
- * fs ops block the event loop for microseconds on local SSDs; the form
24
- * is typed by a single human, so this is perfectly fine.
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 { readdirSync, statSync } from "node:fs";
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 = readdirSync(parentDir, { withFileTypes: true });
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 = statSync(expanded);
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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"}
@@ -31,6 +31,10 @@ export function handleGetProjectObservations(store, id, limit = 30) {
31
31
  export function handleListProjects(store) {
32
32
  return store.listProjects();
33
33
  }
34
+ /** Async relay-path twin of {@link handleListProjects}. */
35
+ export async function handleListProjectsAsync(store) {
36
+ return store.listProjectsAsync();
37
+ }
34
38
  export function handleCreateProject(store, body) {
35
39
  if (typeof body.name !== "string" || !body.name.trim()) {
36
40
  throw new BadRequestError("name (non-empty string) is required");
@@ -50,6 +54,13 @@ export function handleGetProject(store, id) {
50
54
  throw new NotFoundError("Project not found");
51
55
  return project;
52
56
  }
57
+ /** Async relay-path twin of {@link handleGetProject}. */
58
+ export async function handleGetProjectAsync(store, id) {
59
+ const project = await store.getProjectAsync(id);
60
+ if (!project)
61
+ throw new NotFoundError("Project not found");
62
+ return project;
63
+ }
53
64
  export function handleUpdateProject(store, id, body) {
54
65
  const update = {};
55
66
  if (body.name !== undefined) {
@@ -157,6 +168,13 @@ export function handleListSessionsByProject(store, id) {
157
168
  throw new NotFoundError("Project not found");
158
169
  return store.listSessionsByProject(id);
159
170
  }
171
+ /** Async relay-path twin of {@link handleListSessionsByProject}. */
172
+ export async function handleListSessionsByProjectAsync(store, id) {
173
+ const project = await store.getProjectAsync(id);
174
+ if (!project)
175
+ throw new NotFoundError("Project not found");
176
+ return store.listSessionsByProjectAsync(id);
177
+ }
160
178
  export function handleCleanupProjectSessions(store, id, body) {
161
179
  const project = store.getProject(id);
162
180
  if (!project)
@@ -39,14 +39,26 @@ export interface CompactSessionInputRaw {
39
39
  export declare function parseCompactSessionMode(body: unknown): CompactSessionMode;
40
40
  export declare function handleCreateSession(store: SessionStore, body: CreateSessionInputRaw): WireSessionSummary;
41
41
  export declare function handleGetSessionDetail(store: SessionStore, id: string): WireSessionDetail;
42
+ /** Async relay-path twin of {@link handleGetSessionDetail}. */
43
+ export declare function handleGetSessionDetailAsync(store: SessionStore, id: string): Promise<WireSessionDetail>;
42
44
  export declare function handleGetSessionMessages(store: SessionStore, id: string, query: GetSessionMessagesInputRaw): WireSessionDetail;
45
+ /** Async relay-path twin of {@link handleGetSessionMessages}. */
46
+ export declare function handleGetSessionMessagesAsync(store: SessionStore, id: string, query: GetSessionMessagesInputRaw): Promise<WireSessionDetail>;
43
47
  export declare function handleUpdateSession(store: SessionStore, id: string, body: UpdateSessionInputRaw): WireSessionSummary;
44
48
  export declare function handleGetSessionActiveAgent(store: SessionStore, id: string): {
45
49
  activeAgent: string | null;
46
50
  };
51
+ /** Async relay-path twin of {@link handleGetSessionActiveAgent}. */
52
+ export declare function handleGetSessionActiveAgentAsync(store: SessionStore, id: string): Promise<{
53
+ activeAgent: string | null;
54
+ }>;
47
55
  export declare function handleUpdateSessionActiveAgent(store: SessionStore, id: string, body: UpdateSessionAgentInputRaw, manager?: SessionStreamManager): {
48
56
  activeAgent: string | null;
49
57
  };
58
+ /** Async relay-path twin of {@link handleUpdateSessionActiveAgent}. */
59
+ export declare function handleUpdateSessionActiveAgentAsync(store: SessionStore, id: string, body: UpdateSessionAgentInputRaw, manager?: SessionStreamManager): Promise<{
60
+ activeAgent: string | null;
61
+ }>;
50
62
  export declare function handleDeleteSession(store: SessionStore, id: string): void;
51
63
  export declare function handleGetSessionMemoryStatus(store: SessionStore, manager: SessionStreamManager, id: string): WireSessionMemoryStatus;
52
64
  export declare function handleGetSessionMemoryDetails(store: SessionStore, manager: SessionStreamManager, id: string): WireSessionMemoryDetails;
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/sessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/sessions.ts"],"names":[],"mappings":"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"}