@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.
Files changed (48) hide show
  1. package/dist/commands/serve.d.ts.map +1 -1
  2. package/dist/commands/serve.js +1 -0
  3. package/dist/extensions/desktop-screenshot/index.d.ts.map +1 -1
  4. package/dist/extensions/desktop-screenshot/index.js +6 -5
  5. package/dist/generated/zeus/const.d.ts.map +1 -1
  6. package/dist/generated/zeus/const.js +6 -2
  7. package/dist/generated/zeus/index.d.ts +24 -0
  8. package/dist/generated/zeus/index.d.ts.map +1 -1
  9. package/dist/memory/config.d.ts +2 -0
  10. package/dist/memory/config.d.ts.map +1 -1
  11. package/dist/memory/config.js +25 -0
  12. package/dist/relay/auto-optimizer.d.ts +1 -1
  13. package/dist/relay/auto-optimizer.d.ts.map +1 -1
  14. package/dist/relay/auto-optimizer.js +3 -3
  15. package/dist/relay/auto-research.d.ts +1 -1
  16. package/dist/relay/auto-research.d.ts.map +1 -1
  17. package/dist/relay/auto-research.js +3 -3
  18. package/dist/relay/dispatcher.d.ts +7 -2
  19. package/dist/relay/dispatcher.d.ts.map +1 -1
  20. package/dist/relay/dispatcher.js +27 -20
  21. package/dist/server/handlers/agent-settings.d.ts +6 -0
  22. package/dist/server/handlers/agent-settings.d.ts.map +1 -1
  23. package/dist/server/handlers/agent-settings.js +88 -1
  24. package/dist/server/handlers/paths-autocomplete.d.ts +4 -4
  25. package/dist/server/handlers/paths-autocomplete.d.ts.map +1 -1
  26. package/dist/server/handlers/paths-autocomplete.js +10 -10
  27. package/dist/server/handlers/projects.d.ts +6 -0
  28. package/dist/server/handlers/projects.d.ts.map +1 -1
  29. package/dist/server/handlers/projects.js +18 -0
  30. package/dist/server/handlers/sessions.d.ts +12 -0
  31. package/dist/server/handlers/sessions.d.ts.map +1 -1
  32. package/dist/server/handlers/sessions.js +68 -0
  33. package/dist/server/handlers/settings-lock.d.ts +19 -0
  34. package/dist/server/handlers/settings-lock.d.ts.map +1 -1
  35. package/dist/server/handlers/settings-lock.js +65 -1
  36. package/dist/server/handlers/settings.d.ts +4 -0
  37. package/dist/server/handlers/settings.d.ts.map +1 -1
  38. package/dist/server/handlers/settings.js +38 -2
  39. package/dist/server/session-stream.d.ts +6 -1
  40. package/dist/server/session-stream.d.ts.map +1 -1
  41. package/dist/server/session-stream.js +32 -12
  42. package/dist/server/sqlite-adapter.d.ts +31 -0
  43. package/dist/server/sqlite-adapter.d.ts.map +1 -1
  44. package/dist/server/sqlite-adapter.js +53 -0
  45. package/dist/server/storage.d.ts +52 -0
  46. package/dist/server/storage.d.ts.map +1 -1
  47. package/dist/server/storage.js +178 -8
  48. package/package.json +1 -1
@@ -85,8 +85,10 @@ export declare class SessionStore {
85
85
  readonly path: string;
86
86
  private db;
87
87
  private closed;
88
+ private readonly stmtListProjectsSQL;
88
89
  private stmtListProjects;
89
90
  private stmtGetProject;
91
+ private stmtCountSessionsByProject;
90
92
  private stmtCreateProject;
91
93
  private stmtUpdateProject;
92
94
  private stmtSetProjectStudioBinding;
@@ -142,10 +144,20 @@ export declare class SessionStore {
142
144
  constructor(path: string);
143
145
  /** Smoke check: returns the names of the tables in the DB. */
144
146
  listTables(): string[];
147
+ /** Shared row→WireProject mapping for the synchronous and async list paths. */
148
+ private mapProjectRowsWithCount;
145
149
  listProjects(): WireProject[];
150
+ /**
151
+ * Async twin of {@link listProjects}. Uses the adapter's `queryAll`
152
+ * trampoline so the Node adapter yields to the event loop before the
153
+ * potentially-large aggregate query runs. Wire shape is identical.
154
+ */
155
+ listProjectsAsync(): Promise<WireProject[]>;
146
156
  createProject(input: CreateProjectInput): WireProject;
147
157
  /** Returns null if not found. */
148
158
  getProject(id: string): WireProject | null;
159
+ /** Async twin of {@link getProject}. */
160
+ getProjectAsync(id: string): Promise<WireProject | null>;
149
161
  setProjectStudioBinding(id: string, binding: StudioBinding | null): WireProject | null;
150
162
  /**
151
163
  * Update a project's name and/or path. At least one must be provided.
@@ -166,6 +178,8 @@ export declare class SessionStore {
166
178
  };
167
179
  /** Sessions belonging to a single project, newest-first. */
168
180
  listSessionsByProject(projectId: string): WireSessionSummary[];
181
+ /** Async twin of {@link listSessionsByProject}. */
182
+ listSessionsByProjectAsync(projectId: string): Promise<WireSessionSummary[]>;
169
183
  /**
170
184
  * Batched variant of {@link listSessionsByProject} for many projects at once.
171
185
  *
@@ -184,6 +198,14 @@ export declare class SessionStore {
184
198
  * no sessions map to an empty array.
185
199
  */
186
200
  listSessionsByProjectIds(projectIds: string[]): Map<string, WireSessionSummary[]>;
201
+ /**
202
+ * Async twin of {@link listSessionsByProjectIds}. Runs the same single
203
+ * LEFT JOIN + GROUP BY query through the adapter trampoline so large
204
+ * aggregate reads yield to the event loop. Returns an identical Map with
205
+ * every requested project id present (empty arrays for projects with no
206
+ * sessions) and identical per-project `updated_at DESC` ordering.
207
+ */
208
+ listSessionsByProjectIdsAsync(projectIds: string[]): Promise<Map<string, WireSessionSummary[]>>;
187
209
  createSession(input: CreateSessionInput): WireSessionSummary;
188
210
  /** Returns null if not found. */
189
211
  getSession(id: string): WireSessionDetail | null;
@@ -201,6 +223,24 @@ export declare class SessionStore {
201
223
  createdAt: number;
202
224
  updatedAt: number;
203
225
  } | null;
226
+ /** Async twin of {@link getSessionMeta}. */
227
+ getSessionMetaAsync(id: string): Promise<{
228
+ id: string;
229
+ projectId: string;
230
+ title: string;
231
+ createdAt: number;
232
+ updatedAt: number;
233
+ } | null>;
234
+ /** Async twin of {@link getMessages} with a caller-supplied bound. */
235
+ getMessagesTailAsync(sessionId: string, limit: number): Promise<StoredMessage[]>;
236
+ /**
237
+ * Non-blocking full-history read used by the WS `attach()` first-attach
238
+ * path. The Node adapter pages the result set with an event-loop yield
239
+ * between pages (see `SqliteAdapter.queryAll`), while the Bun adapter
240
+ * falls back to its synchronous `.all()` path. Row order and wire shape
241
+ * are identical to the synchronous `getMessages()`.
242
+ */
243
+ getMessagesAsync(sessionId: string): Promise<StoredMessage[]>;
204
244
  getMessages(sessionId: string): StoredMessage[];
205
245
  getMessagesTail(sessionId: string, limit: number): StoredMessage[];
206
246
  getMessagesBefore(sessionId: string, opts: {
@@ -208,7 +248,15 @@ export declare class SessionStore {
208
248
  beforeId: string | null;
209
249
  limit: number;
210
250
  }): StoredMessage[];
251
+ /** Async twin of {@link getMessagesBefore}. */
252
+ getMessagesBeforeAsync(sessionId: string, opts: {
253
+ beforeCreatedAt: number | null;
254
+ beforeId: string | null;
255
+ limit: number;
256
+ }): Promise<StoredMessage[]>;
211
257
  countMessagesBySession(sessionId: string): number;
258
+ /** Async twin of {@link countMessagesBySession}. */
259
+ countMessagesBySessionAsync(sessionId: string): Promise<number>;
212
260
  private mapMessageRows;
213
261
  /**
214
262
  * Append a message and bump the session's updated_at in one transaction.
@@ -275,6 +323,8 @@ export declare class SessionStore {
275
323
  */
276
324
  setSessionModel(sessionId: string, modelId: string | null): void;
277
325
  getSessionActiveAgent(sessionId: string): string | null;
326
+ /** Async twin of {@link getSessionActiveAgent}. */
327
+ getSessionActiveAgentAsync(sessionId: string): Promise<string | null>;
278
328
  setSessionActiveAgent(sessionId: string, agentName: string | null): void;
279
329
  /**
280
330
  * Get the persisted reasoningEffort for a session, or null if none
@@ -307,6 +357,8 @@ export declare class SessionStore {
307
357
  * was not forked or has already been compacted.
308
358
  */
309
359
  getForkCompactSource(sessionId: string): string | null;
360
+ /** Async twin of {@link getForkCompactSource}. */
361
+ getForkCompactSourceAsync(sessionId: string): Promise<string | null>;
310
362
  /**
311
363
  * Clear the fork-compact flag after compaction completes (or fails).
312
364
  * Idempotent-safe.
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/server/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/server/storage.ts"],"names":[],"mappings":"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"}
@@ -190,8 +190,16 @@ export class SessionStore {
190
190
  db;
191
191
  closed = false;
192
192
  // Project statements
193
+ stmtListProjectsSQL = `
194
+ SELECT p.id, p.name, p.path, p.created_at, p.updated_at,
195
+ p.studio_project_id, p.studio_project_name, p.studio_team_id,
196
+ (SELECT COUNT(*) FROM sessions s WHERE s.project_id = p.id) AS session_count
197
+ FROM projects p
198
+ ORDER BY p.updated_at DESC
199
+ `;
193
200
  stmtListProjects;
194
201
  stmtGetProject;
202
+ stmtCountSessionsByProject;
195
203
  stmtCreateProject;
196
204
  stmtUpdateProject;
197
205
  stmtSetProjectStudioBinding;
@@ -375,6 +383,7 @@ export class SessionStore {
375
383
  ORDER BY p.updated_at DESC
376
384
  `);
377
385
  this.stmtGetProject = this.db.prepare(`SELECT id, name, path, created_at, updated_at, studio_project_id, studio_project_name, studio_team_id FROM projects WHERE id = ?`);
386
+ this.stmtCountSessionsByProject = this.db.prepare(`SELECT COUNT(*) AS count FROM sessions WHERE project_id = ?`);
378
387
  this.stmtCreateProject = this.db.prepare(`INSERT INTO projects (id, name, path, created_at, updated_at) VALUES (?, ?, ?, ?, ?)`);
379
388
  this.stmtUpdateProject = this.db.prepare(`UPDATE projects SET name = ?, path = ?, updated_at = ? WHERE id = ?`);
380
389
  this.stmtSetProjectStudioBinding = this.db.prepare(`UPDATE projects SET studio_project_id = ?, studio_project_name = ?, studio_team_id = ?, updated_at = ? WHERE id = ?`);
@@ -500,11 +509,9 @@ export class SessionStore {
500
509
  .all();
501
510
  return rows.map((r) => r.name);
502
511
  }
503
- // ----------------------------------------------------------------------
504
- // Projects
505
- // ----------------------------------------------------------------------
506
- listProjects() {
507
- return this.stmtListProjects.all().map((r) => {
512
+ /** Shared row→WireProject mapping for the synchronous and async list paths. */
513
+ mapProjectRowsWithCount(rows) {
514
+ return rows.map((r) => {
508
515
  const project = {
509
516
  id: r.id,
510
517
  name: r.name,
@@ -523,6 +530,21 @@ export class SessionStore {
523
530
  return applyBindingFields(project, rowBinding);
524
531
  });
525
532
  }
533
+ // ----------------------------------------------------------------------
534
+ // Projects
535
+ // ----------------------------------------------------------------------
536
+ listProjects() {
537
+ return this.mapProjectRowsWithCount(this.stmtListProjects.all());
538
+ }
539
+ /**
540
+ * Async twin of {@link listProjects}. Uses the adapter's `queryAll`
541
+ * trampoline so the Node adapter yields to the event loop before the
542
+ * potentially-large aggregate query runs. Wire shape is identical.
543
+ */
544
+ async listProjectsAsync() {
545
+ const rows = await this.db.queryAll(this.stmtListProjectsSQL);
546
+ return this.mapProjectRowsWithCount(rows);
547
+ }
526
548
  createProject(input) {
527
549
  const id = input.id ?? randomUUID();
528
550
  const name = input.name.trim() || "Untitled project";
@@ -543,15 +565,40 @@ export class SessionStore {
543
565
  const row = this.stmtGetProject.get(id);
544
566
  if (!row)
545
567
  return null;
546
- // Re-fetch with count to keep the wire shape consistent. Cheap.
547
- const withCount = this.stmtListProjects.all().find((r) => r.id === id);
568
+ const withCount = this.stmtCountSessionsByProject.get(id);
548
569
  const project = {
549
570
  id: row.id,
550
571
  name: row.name,
551
572
  path: row.path,
552
573
  createdAt: row.created_at,
553
574
  updatedAt: row.updated_at,
554
- sessionCount: withCount?.session_count ?? 0,
575
+ sessionCount: withCount?.count ?? 0,
576
+ };
577
+ const rowBinding = row.studio_project_id
578
+ ? {
579
+ projectId: row.studio_project_id,
580
+ ...(row.studio_project_name ? { name: row.studio_project_name } : {}),
581
+ ...(row.studio_team_id ? { teamId: row.studio_team_id } : {}),
582
+ }
583
+ : null;
584
+ return applyBindingFields(project, rowBinding);
585
+ }
586
+ /** Async twin of {@link getProject}. */
587
+ async getProjectAsync(id) {
588
+ const rows = await this.db.queryAll(`SELECT id, name, path, created_at, updated_at,
589
+ studio_project_id, studio_project_name, studio_team_id
590
+ FROM projects WHERE id = ?`, id);
591
+ const row = rows[0];
592
+ if (!row)
593
+ return null;
594
+ const countRows = await this.db.queryAll(`SELECT COUNT(*) AS count FROM sessions WHERE project_id = ?`, id);
595
+ const project = {
596
+ id: row.id,
597
+ name: row.name,
598
+ path: row.path,
599
+ createdAt: row.created_at,
600
+ updatedAt: row.updated_at,
601
+ sessionCount: countRows[0]?.count ?? 0,
555
602
  };
556
603
  const rowBinding = row.studio_project_id
557
604
  ? {
@@ -607,6 +654,22 @@ export class SessionStore {
607
654
  messageCount: r.message_count,
608
655
  }));
609
656
  }
657
+ /** Async twin of {@link listSessionsByProject}. */
658
+ async listSessionsByProjectAsync(projectId) {
659
+ const rows = await this.db.queryAll(`SELECT s.id, s.project_id, s.title, s.created_at, s.updated_at,
660
+ (SELECT COUNT(*) FROM messages m WHERE m.session_id = s.id) AS message_count
661
+ FROM sessions s
662
+ WHERE s.project_id = ?
663
+ ORDER BY s.updated_at DESC`, projectId);
664
+ return rows.map((r) => ({
665
+ id: r.id,
666
+ projectId: r.project_id,
667
+ title: r.title,
668
+ createdAt: r.created_at,
669
+ updatedAt: r.updated_at,
670
+ messageCount: r.message_count,
671
+ }));
672
+ }
610
673
  /**
611
674
  * Batched variant of {@link listSessionsByProject} for many projects at once.
612
675
  *
@@ -654,6 +717,42 @@ export class SessionStore {
654
717
  }
655
718
  return result;
656
719
  }
720
+ /**
721
+ * Async twin of {@link listSessionsByProjectIds}. Runs the same single
722
+ * LEFT JOIN + GROUP BY query through the adapter trampoline so large
723
+ * aggregate reads yield to the event loop. Returns an identical Map with
724
+ * every requested project id present (empty arrays for projects with no
725
+ * sessions) and identical per-project `updated_at DESC` ordering.
726
+ */
727
+ async listSessionsByProjectIdsAsync(projectIds) {
728
+ const result = new Map();
729
+ for (const id of projectIds)
730
+ result.set(id, []);
731
+ if (projectIds.length === 0)
732
+ return result;
733
+ const placeholders = projectIds.map(() => "?").join(", ");
734
+ const rows = await this.db.queryAll(`SELECT s.id, s.project_id, s.title, s.created_at, s.updated_at,
735
+ COUNT(m.id) AS message_count
736
+ FROM sessions s
737
+ LEFT JOIN messages m ON m.session_id = s.id
738
+ WHERE s.project_id IN (${placeholders})
739
+ GROUP BY s.id, s.project_id, s.title, s.created_at, s.updated_at
740
+ ORDER BY s.updated_at DESC, s.created_at DESC, s.id DESC`, ...projectIds);
741
+ for (const r of rows) {
742
+ const list = result.get(r.project_id);
743
+ if (!list)
744
+ continue;
745
+ list.push({
746
+ id: r.id,
747
+ projectId: r.project_id,
748
+ title: r.title,
749
+ createdAt: r.created_at,
750
+ updatedAt: r.updated_at,
751
+ messageCount: r.message_count,
752
+ });
753
+ }
754
+ return result;
755
+ }
657
756
  // ----------------------------------------------------------------------
658
757
  // Sessions
659
758
  // ----------------------------------------------------------------------
@@ -727,6 +826,46 @@ export class SessionStore {
727
826
  updatedAt: row.updated_at,
728
827
  };
729
828
  }
829
+ /** Async twin of {@link getSessionMeta}. */
830
+ async getSessionMetaAsync(id) {
831
+ const rows = await this.db.queryAll(`SELECT id, project_id, title, created_at, updated_at
832
+ FROM sessions WHERE id = ?`, id);
833
+ const row = rows[0];
834
+ if (!row)
835
+ return null;
836
+ return {
837
+ id: row.id,
838
+ projectId: row.project_id,
839
+ title: row.title,
840
+ createdAt: row.created_at,
841
+ updatedAt: row.updated_at,
842
+ };
843
+ }
844
+ /** Async twin of {@link getMessages} with a caller-supplied bound. */
845
+ async getMessagesTailAsync(sessionId, limit) {
846
+ const rows = await this.db.queryAll(`SELECT id, session_id, role, content, events_jsonl, images_json, credits_used, created_at
847
+ FROM (
848
+ SELECT id, session_id, role, content, events_jsonl, images_json, credits_used, created_at
849
+ FROM messages
850
+ WHERE session_id = ?
851
+ ORDER BY created_at DESC, id DESC
852
+ LIMIT ?
853
+ )
854
+ ORDER BY created_at ASC, id ASC`, sessionId, limit);
855
+ return this.mapMessageRows(rows);
856
+ }
857
+ /**
858
+ * Non-blocking full-history read used by the WS `attach()` first-attach
859
+ * path. The Node adapter pages the result set with an event-loop yield
860
+ * between pages (see `SqliteAdapter.queryAll`), while the Bun adapter
861
+ * falls back to its synchronous `.all()` path. Row order and wire shape
862
+ * are identical to the synchronous `getMessages()`.
863
+ */
864
+ async getMessagesAsync(sessionId) {
865
+ const rows = await this.db.queryAll(`SELECT id, session_id, role, content, events_jsonl, images_json, credits_used, created_at
866
+ FROM messages WHERE session_id = ? ORDER BY created_at ASC, id ASC`, sessionId);
867
+ return this.mapMessageRows(rows);
868
+ }
730
869
  getMessages(sessionId) {
731
870
  return this.mapMessageRows(this.stmtListMessages.all(sessionId));
732
871
  }
@@ -738,9 +877,30 @@ export class SessionStore {
738
877
  return [];
739
878
  return this.mapMessageRows(this.stmtListMessagesBefore.all(sessionId, opts.beforeCreatedAt, opts.beforeCreatedAt, opts.beforeId ?? "\uffff", opts.limit));
740
879
  }
880
+ /** Async twin of {@link getMessagesBefore}. */
881
+ async getMessagesBeforeAsync(sessionId, opts) {
882
+ if (opts.beforeCreatedAt === null)
883
+ return [];
884
+ const rows = await this.db.queryAll(`SELECT id, session_id, role, content, events_jsonl, images_json, credits_used, created_at
885
+ FROM (
886
+ SELECT id, session_id, role, content, events_jsonl, images_json, credits_used, created_at
887
+ FROM messages
888
+ WHERE session_id = ?
889
+ AND (created_at < ? OR (created_at = ? AND id < ?))
890
+ ORDER BY created_at DESC, id DESC
891
+ LIMIT ?
892
+ )
893
+ ORDER BY created_at ASC, id ASC`, sessionId, opts.beforeCreatedAt, opts.beforeCreatedAt, opts.beforeId ?? "\uffff", opts.limit);
894
+ return this.mapMessageRows(rows);
895
+ }
741
896
  countMessagesBySession(sessionId) {
742
897
  return this.stmtCountMessagesBySession.get(sessionId)?.count ?? 0;
743
898
  }
899
+ /** Async twin of {@link countMessagesBySession}. */
900
+ async countMessagesBySessionAsync(sessionId) {
901
+ const rows = await this.db.queryAll(`SELECT COUNT(*) AS count FROM messages WHERE session_id = ?`, sessionId);
902
+ return rows[0]?.count ?? 0;
903
+ }
744
904
  mapMessageRows(rows) {
745
905
  return rows.map((r) => {
746
906
  const images = parseImagesJson(r.images_json);
@@ -952,6 +1112,11 @@ export class SessionStore {
952
1112
  getSessionActiveAgent(sessionId) {
953
1113
  return this.stmtGetSessionActiveAgent.get(sessionId)?.active_agent ?? null;
954
1114
  }
1115
+ /** Async twin of {@link getSessionActiveAgent}. */
1116
+ async getSessionActiveAgentAsync(sessionId) {
1117
+ const rows = await this.db.queryAll(`SELECT active_agent FROM sessions WHERE id = ?`, sessionId);
1118
+ return rows[0]?.active_agent ?? null;
1119
+ }
955
1120
  setSessionActiveAgent(sessionId, agentName) {
956
1121
  this.stmtSetSessionActiveAgent.run(agentName, sessionId);
957
1122
  }
@@ -1035,6 +1200,11 @@ export class SessionStore {
1035
1200
  const row = this.stmtGetForkCompactSource.get(sessionId);
1036
1201
  return row?.fork_compact_source_id ?? null;
1037
1202
  }
1203
+ /** Async twin of {@link getForkCompactSource}. */
1204
+ async getForkCompactSourceAsync(sessionId) {
1205
+ const rows = await this.db.queryAll(`SELECT fork_compact_source_id FROM sessions WHERE id = ?`, sessionId);
1206
+ return rows[0]?.fork_compact_source_id ?? null;
1207
+ }
1038
1208
  /**
1039
1209
  * Clear the fork-compact flag after compaction completes (or fails).
1040
1210
  * Idempotent-safe.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aexol/spectral",
3
- "version": "0.9.173",
3
+ "version": "0.9.175",
4
4
  "description": "AI coding agent for Aexol with relay-based browser access.",
5
5
  "type": "module",
6
6
  "private": false,