@dexto/core 1.8.12 → 1.9.1

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 (124) hide show
  1. package/dist/approval/manager.cjs +37 -325
  2. package/dist/approval/manager.d.ts +10 -109
  3. package/dist/approval/manager.d.ts.map +1 -1
  4. package/dist/approval/manager.js +37 -316
  5. package/dist/approval/schemas.cjs +8 -51
  6. package/dist/approval/schemas.d.ts +5 -179
  7. package/dist/approval/schemas.d.ts.map +1 -1
  8. package/dist/approval/schemas.js +8 -47
  9. package/dist/approval/types.cjs +0 -6
  10. package/dist/approval/types.d.ts +2 -27
  11. package/dist/approval/types.d.ts.map +1 -1
  12. package/dist/approval/types.js +0 -6
  13. package/dist/context/compaction/strategies/reactive-overflow-compaction.cjs +2 -0
  14. package/dist/context/compaction/strategies/reactive-overflow-compaction.d.ts.map +1 -1
  15. package/dist/context/compaction/strategies/reactive-overflow-compaction.js +2 -0
  16. package/dist/context/content-clone.cjs +55 -10
  17. package/dist/context/content-clone.d.ts +1 -0
  18. package/dist/context/content-clone.d.ts.map +1 -1
  19. package/dist/context/content-clone.js +53 -9
  20. package/dist/context/manager.cjs +25 -4
  21. package/dist/context/manager.d.ts +4 -2
  22. package/dist/context/manager.d.ts.map +1 -1
  23. package/dist/context/manager.js +25 -4
  24. package/dist/context/schemas.cjs +15 -1
  25. package/dist/context/schemas.d.ts.map +1 -1
  26. package/dist/context/schemas.js +15 -1
  27. package/dist/context/types.d.ts +11 -0
  28. package/dist/context/types.d.ts.map +1 -1
  29. package/dist/errors/DextoRuntimeError.cjs +3 -1
  30. package/dist/errors/DextoRuntimeError.d.ts +5 -3
  31. package/dist/errors/DextoRuntimeError.d.ts.map +1 -1
  32. package/dist/errors/DextoRuntimeError.js +3 -1
  33. package/dist/errors/index.d.ts +1 -1
  34. package/dist/errors/index.d.ts.map +1 -1
  35. package/dist/errors/types.d.ts +1 -0
  36. package/dist/errors/types.d.ts.map +1 -1
  37. package/dist/events/index.d.ts +2 -2
  38. package/dist/events/index.d.ts.map +1 -1
  39. package/dist/llm/executor/provider-error.cjs +25 -4
  40. package/dist/llm/executor/provider-error.d.ts.map +1 -1
  41. package/dist/llm/executor/provider-error.js +25 -4
  42. package/dist/llm/executor/stream-processor.cjs +98 -7
  43. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  44. package/dist/llm/executor/stream-processor.js +98 -7
  45. package/dist/llm/executor/turn-executor.cjs +96 -28
  46. package/dist/llm/executor/turn-executor.d.ts +2 -0
  47. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  48. package/dist/llm/executor/turn-executor.js +96 -28
  49. package/dist/llm/providers/local/schemas.d.ts +2 -2
  50. package/dist/llm/services/factory.cjs +3 -2
  51. package/dist/llm/services/factory.d.ts.map +1 -1
  52. package/dist/llm/services/factory.js +3 -2
  53. package/dist/llm/services/types.d.ts +8 -0
  54. package/dist/llm/services/types.d.ts.map +1 -1
  55. package/dist/llm/services/vercel.cjs +6 -1
  56. package/dist/llm/services/vercel.d.ts +3 -2
  57. package/dist/llm/services/vercel.d.ts.map +1 -1
  58. package/dist/llm/services/vercel.js +6 -1
  59. package/dist/session/chat-session.cjs +4 -0
  60. package/dist/session/chat-session.d.ts +2 -1
  61. package/dist/session/chat-session.d.ts.map +1 -1
  62. package/dist/session/chat-session.js +4 -0
  63. package/dist/session/message-queue.cjs +48 -75
  64. package/dist/session/message-queue.d.ts +1 -2
  65. package/dist/session/message-queue.d.ts.map +1 -1
  66. package/dist/session/message-queue.js +48 -75
  67. package/dist/session/session-manager.cjs +14 -32
  68. package/dist/session/session-manager.d.ts +5 -2
  69. package/dist/session/session-manager.d.ts.map +1 -1
  70. package/dist/session/session-manager.js +14 -32
  71. package/dist/storage/approvals/types.cjs +2 -9
  72. package/dist/storage/approvals/types.d.ts +4 -16
  73. package/dist/storage/approvals/types.d.ts.map +1 -1
  74. package/dist/storage/approvals/types.js +2 -8
  75. package/dist/storage/database/types.d.ts +5 -0
  76. package/dist/storage/database/types.d.ts.map +1 -1
  77. package/dist/storage/index.cjs +0 -2
  78. package/dist/storage/index.d.ts +2 -2
  79. package/dist/storage/index.d.ts.map +1 -1
  80. package/dist/storage/index.js +1 -2
  81. package/dist/storage/message-queue/types.d.ts +14 -6
  82. package/dist/storage/message-queue/types.d.ts.map +1 -1
  83. package/dist/storage/stores/backend.cjs +68 -32
  84. package/dist/storage/stores/backend.d.ts +17 -8
  85. package/dist/storage/stores/backend.d.ts.map +1 -1
  86. package/dist/storage/stores/backend.js +69 -33
  87. package/dist/storage/stores/in-memory.cjs +26 -11
  88. package/dist/storage/stores/in-memory.d.ts.map +1 -1
  89. package/dist/storage/stores/in-memory.js +27 -12
  90. package/dist/test-utils/in-memory-storage.cjs +11 -0
  91. package/dist/test-utils/in-memory-storage.js +11 -0
  92. package/dist/test-utils/session-state-stores.cjs +25 -9
  93. package/dist/test-utils/session-state-stores.js +26 -10
  94. package/dist/tools/approval/tool-approval-policy.cjs +87 -0
  95. package/dist/tools/approval/tool-approval-policy.d.ts +34 -0
  96. package/dist/tools/approval/tool-approval-policy.d.ts.map +1 -0
  97. package/dist/tools/approval/tool-approval-policy.js +64 -0
  98. package/dist/tools/error-codes.cjs +0 -1
  99. package/dist/tools/error-codes.d.ts +0 -1
  100. package/dist/tools/error-codes.d.ts.map +1 -1
  101. package/dist/tools/error-codes.js +0 -1
  102. package/dist/tools/errors.cjs +0 -15
  103. package/dist/tools/errors.d.ts +0 -9
  104. package/dist/tools/errors.d.ts.map +1 -1
  105. package/dist/tools/errors.js +0 -15
  106. package/dist/tools/index.cjs +2 -0
  107. package/dist/tools/index.d.ts +1 -1
  108. package/dist/tools/index.d.ts.map +1 -1
  109. package/dist/tools/index.js +5 -1
  110. package/dist/tools/tool-manager.cjs +94 -312
  111. package/dist/tools/tool-manager.d.ts +4 -19
  112. package/dist/tools/tool-manager.d.ts.map +1 -1
  113. package/dist/tools/tool-manager.js +95 -316
  114. package/dist/tools/types.d.ts +10 -9
  115. package/dist/tools/types.d.ts.map +1 -1
  116. package/dist/utils/service-initializer.cjs +3 -0
  117. package/dist/utils/service-initializer.d.ts +2 -1
  118. package/dist/utils/service-initializer.d.ts.map +1 -1
  119. package/dist/utils/service-initializer.js +3 -0
  120. package/package.json +2 -2
  121. package/dist/tools/pattern-utils.cjs +0 -33
  122. package/dist/tools/pattern-utils.d.ts +0 -20
  123. package/dist/tools/pattern-utils.d.ts.map +0 -1
  124. package/dist/tools/pattern-utils.js +0 -10
@@ -49,6 +49,7 @@ class SessionManager {
49
49
  this.sessionLoggerFactory = config.sessionLoggerFactory ?? defaultSessionLoggerFactory;
50
50
  this.languageModelFactory = config.languageModelFactory;
51
51
  this.authResolver = config.authResolver ?? null;
52
+ this.executionControl = config.executionControl;
52
53
  this.logger = logger.createChild(import_types.DextoLogComponent.SESSION);
53
54
  }
54
55
  sessions = /* @__PURE__ */ new Map();
@@ -68,6 +69,7 @@ class SessionManager {
68
69
  sessionLoggerFactory;
69
70
  languageModelFactory;
70
71
  authResolver;
72
+ executionControl;
71
73
  getChatSessionServices() {
72
74
  return {
73
75
  ...this.services,
@@ -75,7 +77,10 @@ class SessionManager {
75
77
  ...this.languageModelFactory !== void 0 && {
76
78
  languageModelFactory: this.languageModelFactory
77
79
  },
78
- authResolver: this.authResolver
80
+ authResolver: this.authResolver,
81
+ ...this.executionControl !== void 0 && {
82
+ executionControl: this.executionControl
83
+ }
79
84
  };
80
85
  }
81
86
  /**
@@ -86,7 +91,6 @@ class SessionManager {
86
91
  if (this.initialized) {
87
92
  return;
88
93
  }
89
- await this.clearPersistedQueuedMessages("startup");
90
94
  await this.restoreSessionsFromStorage();
91
95
  const cleanupIntervalMs = Math.min(this.sessionTTL / 4, 15 * 60 * 1e3);
92
96
  this.cleanupInterval = setInterval(
@@ -130,32 +134,6 @@ class SessionManager {
130
134
  );
131
135
  }
132
136
  }
133
- async clearPersistedQueuedMessages(reason) {
134
- try {
135
- const steerSessionIds = await this.services.steerQueueStore.listSessionIds();
136
- const followUpSessionIds = await this.services.followUpQueueStore.listSessionIds();
137
- const sessionIds = Array.from(/* @__PURE__ */ new Set([...steerSessionIds, ...followUpSessionIds]));
138
- if (sessionIds.length === 0) {
139
- return;
140
- }
141
- await Promise.all(
142
- sessionIds.flatMap((sessionId) => [
143
- this.services.steerQueueStore.delete({ sessionId }),
144
- this.services.followUpQueueStore.delete({ sessionId })
145
- ])
146
- );
147
- const message = `${reason === "startup" ? "Cleared stale pending input state from previous agent run" : "Cleared pending input state during agent shutdown"} (${sessionIds.length} session bucket(s))`;
148
- if (reason === "startup") {
149
- this.logger.info(message);
150
- } else {
151
- this.logger.debug(message);
152
- }
153
- } catch (error) {
154
- this.logger.warn(
155
- `Failed to clear persisted queued follow-up state during ${reason}: ${error instanceof Error ? error.message : String(error)}`
156
- );
157
- }
158
- }
159
137
  /**
160
138
  * Ensures the SessionManager is initialized before operations.
161
139
  */
@@ -481,6 +459,7 @@ class SessionManager {
481
459
  }
482
460
  await this.services.sessionStore.deleteSession({ sessionId });
483
461
  await this.deleteSessionInteractionState(sessionId);
462
+ await this.deleteSessionPendingInput(sessionId);
484
463
  await this.services.conversationStore.clearMessages({ sessionId });
485
464
  this.logger.debug(`Deleted session and conversation history: ${sessionId}`);
486
465
  }
@@ -918,9 +897,13 @@ class SessionManager {
918
897
  this.services.stateManager.clearSessionOverride(sessionId);
919
898
  await Promise.all([
920
899
  this.services.toolManager.deleteSessionState(sessionId),
921
- this.services.approvalManager.deleteSessionState(sessionId),
922
- this.services.steerQueueStore.delete({ sessionId }),
923
- this.services.followUpQueueStore.delete({ sessionId })
900
+ this.services.approvalManager.deleteSessionState(sessionId)
901
+ ]);
902
+ }
903
+ async deleteSessionPendingInput(sessionId) {
904
+ await Promise.all([
905
+ this.services.steerQueueStore.clear({ sessionId }),
906
+ this.services.followUpQueueStore.clear({ sessionId })
924
907
  ]);
925
908
  }
926
909
  evictSessionInteractionState(sessionId) {
@@ -989,7 +972,6 @@ class SessionManager {
989
972
  delete this.cleanupInterval;
990
973
  this.logger.debug("Periodic session cleanup stopped");
991
974
  }
992
- await this.clearPersistedQueuedMessages("shutdown");
993
975
  const sessionIds = Array.from(this.sessions.keys());
994
976
  for (const sessionId of sessionIds) {
995
977
  try {
@@ -8,7 +8,7 @@ import type { ValidatedLLMConfig } from '../llm/schemas.js';
8
8
  import type { HookManager } from '../hooks/manager.js';
9
9
  import type { ApprovalManager } from '../approval/manager.js';
10
10
  import type { TokenUsage } from '@dexto/llm';
11
- import type { LanguageModelFactory } from '../llm/services/types.js';
11
+ import type { LLMExecutionControl, LanguageModelFactory } from '../llm/services/types.js';
12
12
  import type { LlmAuthResolver } from '../llm/auth/index.js';
13
13
  import type { CompactionStrategy } from '../context/compaction/types.js';
14
14
  import { type SessionPromptContributor } from '../systemPrompt/schemas.js';
@@ -61,6 +61,8 @@ export interface SessionManagerConfig {
61
61
  languageModelFactory?: LanguageModelFactory;
62
62
  /** Host hook for resolving runtime provider auth from local/cloud profiles */
63
63
  authResolver?: LlmAuthResolver | null;
64
+ /** Host control for queue continuation behavior. CLI defaults preserve core-owned follow-ups. */
65
+ executionControl?: LLMExecutionControl | undefined;
64
66
  }
65
67
  type PersistedLLMConfig = Omit<ValidatedLLMConfig, 'apiKey'>;
66
68
  export interface SessionData {
@@ -112,6 +114,7 @@ export declare class SessionManager {
112
114
  private readonly sessionLoggerFactory;
113
115
  private readonly languageModelFactory;
114
116
  private readonly authResolver;
117
+ private readonly executionControl;
115
118
  constructor(services: {
116
119
  stateManager: AgentStateManager;
117
120
  systemPromptManager: SystemPromptManager;
@@ -139,7 +142,6 @@ export declare class SessionManager {
139
142
  * This allows sessions to survive application restarts.
140
143
  */
141
144
  private restoreSessionsFromStorage;
142
- private clearPersistedQueuedMessages;
143
145
  /**
144
146
  * Ensures the SessionManager is initialized before operations.
145
147
  */
@@ -297,6 +299,7 @@ export declare class SessionManager {
297
299
  private toPersistedLLMConfig;
298
300
  private setPersistedSessionLLMOverride;
299
301
  private deleteSessionInteractionState;
302
+ private deleteSessionPendingInput;
300
303
  private evictSessionInteractionState;
301
304
  private runWithSessionDataLock;
302
305
  private persistSessionData;
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ class SessionManager {
19
19
  this.sessionLoggerFactory = config.sessionLoggerFactory ?? defaultSessionLoggerFactory;
20
20
  this.languageModelFactory = config.languageModelFactory;
21
21
  this.authResolver = config.authResolver ?? null;
22
+ this.executionControl = config.executionControl;
22
23
  this.logger = logger.createChild(DextoLogComponent.SESSION);
23
24
  }
24
25
  sessions = /* @__PURE__ */ new Map();
@@ -38,6 +39,7 @@ class SessionManager {
38
39
  sessionLoggerFactory;
39
40
  languageModelFactory;
40
41
  authResolver;
42
+ executionControl;
41
43
  getChatSessionServices() {
42
44
  return {
43
45
  ...this.services,
@@ -45,7 +47,10 @@ class SessionManager {
45
47
  ...this.languageModelFactory !== void 0 && {
46
48
  languageModelFactory: this.languageModelFactory
47
49
  },
48
- authResolver: this.authResolver
50
+ authResolver: this.authResolver,
51
+ ...this.executionControl !== void 0 && {
52
+ executionControl: this.executionControl
53
+ }
49
54
  };
50
55
  }
51
56
  /**
@@ -56,7 +61,6 @@ class SessionManager {
56
61
  if (this.initialized) {
57
62
  return;
58
63
  }
59
- await this.clearPersistedQueuedMessages("startup");
60
64
  await this.restoreSessionsFromStorage();
61
65
  const cleanupIntervalMs = Math.min(this.sessionTTL / 4, 15 * 60 * 1e3);
62
66
  this.cleanupInterval = setInterval(
@@ -100,32 +104,6 @@ class SessionManager {
100
104
  );
101
105
  }
102
106
  }
103
- async clearPersistedQueuedMessages(reason) {
104
- try {
105
- const steerSessionIds = await this.services.steerQueueStore.listSessionIds();
106
- const followUpSessionIds = await this.services.followUpQueueStore.listSessionIds();
107
- const sessionIds = Array.from(/* @__PURE__ */ new Set([...steerSessionIds, ...followUpSessionIds]));
108
- if (sessionIds.length === 0) {
109
- return;
110
- }
111
- await Promise.all(
112
- sessionIds.flatMap((sessionId) => [
113
- this.services.steerQueueStore.delete({ sessionId }),
114
- this.services.followUpQueueStore.delete({ sessionId })
115
- ])
116
- );
117
- const message = `${reason === "startup" ? "Cleared stale pending input state from previous agent run" : "Cleared pending input state during agent shutdown"} (${sessionIds.length} session bucket(s))`;
118
- if (reason === "startup") {
119
- this.logger.info(message);
120
- } else {
121
- this.logger.debug(message);
122
- }
123
- } catch (error) {
124
- this.logger.warn(
125
- `Failed to clear persisted queued follow-up state during ${reason}: ${error instanceof Error ? error.message : String(error)}`
126
- );
127
- }
128
- }
129
107
  /**
130
108
  * Ensures the SessionManager is initialized before operations.
131
109
  */
@@ -451,6 +429,7 @@ class SessionManager {
451
429
  }
452
430
  await this.services.sessionStore.deleteSession({ sessionId });
453
431
  await this.deleteSessionInteractionState(sessionId);
432
+ await this.deleteSessionPendingInput(sessionId);
454
433
  await this.services.conversationStore.clearMessages({ sessionId });
455
434
  this.logger.debug(`Deleted session and conversation history: ${sessionId}`);
456
435
  }
@@ -888,9 +867,13 @@ class SessionManager {
888
867
  this.services.stateManager.clearSessionOverride(sessionId);
889
868
  await Promise.all([
890
869
  this.services.toolManager.deleteSessionState(sessionId),
891
- this.services.approvalManager.deleteSessionState(sessionId),
892
- this.services.steerQueueStore.delete({ sessionId }),
893
- this.services.followUpQueueStore.delete({ sessionId })
870
+ this.services.approvalManager.deleteSessionState(sessionId)
871
+ ]);
872
+ }
873
+ async deleteSessionPendingInput(sessionId) {
874
+ await Promise.all([
875
+ this.services.steerQueueStore.clear({ sessionId }),
876
+ this.services.followUpQueueStore.clear({ sessionId })
894
877
  ]);
895
878
  }
896
879
  evictSessionInteractionState(sessionId) {
@@ -959,7 +942,6 @@ class SessionManager {
959
942
  delete this.cleanupInterval;
960
943
  this.logger.debug("Periodic session cleanup stopped");
961
944
  }
962
- await this.clearPersistedQueuedMessages("shutdown");
963
945
  const sessionIds = Array.from(this.sessions.keys());
964
946
  for (const sessionId of sessionIds) {
965
947
  try {
@@ -18,21 +18,14 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var types_exports = {};
20
20
  __export(types_exports, {
21
- PersistedApprovedDirectorySchema: () => PersistedApprovedDirectorySchema,
22
21
  SessionApprovalStateSchema: () => SessionApprovalStateSchema
23
22
  });
24
23
  module.exports = __toCommonJS(types_exports);
25
24
  var import_zod = require("zod");
26
- const PersistedApprovedDirectorySchema = import_zod.z.object({
27
- path: import_zod.z.string(),
28
- type: import_zod.z.enum(["session", "once"])
29
- }).strict();
30
25
  const SessionApprovalStateSchema = import_zod.z.object({
31
- toolPatterns: import_zod.z.record(import_zod.z.string(), import_zod.z.array(import_zod.z.string())).default({}),
32
- approvedDirectories: import_zod.z.array(PersistedApprovedDirectorySchema).default([])
33
- }).strict();
26
+ approvedKeys: import_zod.z.record(import_zod.z.string(), import_zod.z.enum(["session", "once"])).default({})
27
+ }).strip();
34
28
  // Annotate the CommonJS export names for ESM import in node:
35
29
  0 && (module.exports = {
36
- PersistedApprovedDirectorySchema,
37
30
  SessionApprovalStateSchema
38
31
  });
@@ -1,23 +1,11 @@
1
1
  import { z } from 'zod';
2
2
  import type { ApprovalRequest, ApprovalResponse } from '../../approval/types.js';
3
- export declare const PersistedApprovedDirectorySchema: z.ZodObject<{
4
- path: z.ZodString;
5
- type: z.ZodEnum<{
3
+ export declare const SessionApprovalStateSchema: z.ZodObject<{
4
+ approvedKeys: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEnum<{
6
5
  session: "session";
7
6
  once: "once";
8
- }>;
9
- }, z.core.$strict>;
10
- export declare const SessionApprovalStateSchema: z.ZodObject<{
11
- toolPatterns: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
12
- approvedDirectories: z.ZodDefault<z.ZodArray<z.ZodObject<{
13
- path: z.ZodString;
14
- type: z.ZodEnum<{
15
- session: "session";
16
- once: "once";
17
- }>;
18
- }, z.core.$strict>>>;
19
- }, z.core.$strict>;
20
- export type PersistedApprovedDirectory = z.output<typeof PersistedApprovedDirectorySchema>;
7
+ }>>>;
8
+ }, z.core.$strip>;
21
9
  export type SessionApprovalState = z.output<typeof SessionApprovalStateSchema>;
22
10
  export interface ApprovalStore {
23
11
  /** Persist the request if the approval id is not already present. Must not overwrite. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/approvals/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,eAAO,MAAM,gCAAgC;;;;;;kBAKhC,CAAC;AAEd,eAAO,MAAM,0BAA0B;;;;;;;;;kBAK1B,CAAC;AAEd,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAC3F,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC1B,yFAAyF;IACzF,aAAa,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7E,UAAU,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAChF,WAAW,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACvE,2FAA2F;IAC3F,YAAY,CAAC,KAAK,EAAE;QAChB,QAAQ,EAAE,gBAAgB,CAAC;KAC9B,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,UAAU,CAAA;KAAE,CAAC,CAAC;IAC5E,WAAW,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAClF,gBAAgB,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/E,gBAAgB,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,oBAAoB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,kBAAkB,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/approvals/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,eAAO,MAAM,0BAA0B;;;;;iBAI3B,CAAC;AAEb,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC1B,yFAAyF;IACzF,aAAa,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,eAAe,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC7E,UAAU,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAChF,WAAW,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACvE,2FAA2F;IAC3F,YAAY,CAAC,KAAK,EAAE;QAChB,QAAQ,EAAE,gBAAgB,CAAC;KAC9B,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,UAAU,CAAA;KAAE,CAAC,CAAC;IAC5E,WAAW,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IAClF,gBAAgB,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC/E,gBAAgB,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,oBAAoB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,kBAAkB,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE"}
@@ -1,14 +1,8 @@
1
1
  import "../../chunk-C6A6W6XS.js";
2
2
  import { z } from "zod";
3
- const PersistedApprovedDirectorySchema = z.object({
4
- path: z.string(),
5
- type: z.enum(["session", "once"])
6
- }).strict();
7
3
  const SessionApprovalStateSchema = z.object({
8
- toolPatterns: z.record(z.string(), z.array(z.string())).default({}),
9
- approvedDirectories: z.array(PersistedApprovedDirectorySchema).default([])
10
- }).strict();
4
+ approvedKeys: z.record(z.string(), z.enum(["session", "once"])).default({})
5
+ }).strip();
11
6
  export {
12
- PersistedApprovedDirectorySchema,
13
7
  SessionApprovalStateSchema
14
8
  };
@@ -12,6 +12,11 @@ export interface Database {
12
12
  delete(key: string): Promise<void>;
13
13
  list(prefix: string): Promise<string[]>;
14
14
  append<T>(key: string, item: T): Promise<void>;
15
+ /** Atomically replace a list with the updater result for one key. */
16
+ updateList<T, R>(key: string, updater: (items: T[]) => {
17
+ items: T[];
18
+ result: R;
19
+ }): Promise<R>;
15
20
  /** Get a range of items in chronological order (oldest first, matching insertion order) */
16
21
  getRange<T>(key: string, start: number, count: number): Promise<T[]>;
17
22
  connect(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/database/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,QAAQ;IAErB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC5C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGnC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAGxC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,2FAA2F;IAC3F,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAGrE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC;IACvB,YAAY,IAAI,MAAM,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/database/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,QAAQ;IAErB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC5C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAChF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGnC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAGxC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,qEAAqE;IACrE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK;QAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9F,2FAA2F;IAC3F,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAGrE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC;IACvB,YAAY,IAAI,MAAM,CAAC;CAC1B"}
@@ -32,7 +32,6 @@ __export(storage_exports, {
32
32
  DatabaseBackedWorkspaceStore: () => import_backend.DatabaseBackedWorkspaceStore,
33
33
  DatabaseConversationStore: () => import_database.DatabaseConversationStore,
34
34
  InMemoryDextoStores: () => import_in_memory.InMemoryDextoStores,
35
- PersistedApprovedDirectorySchema: () => import_types.PersistedApprovedDirectorySchema,
36
35
  SESSION_FOLLOW_UP_QUEUE_KEY_PREFIX: () => import_backend.SESSION_FOLLOW_UP_QUEUE_KEY_PREFIX,
37
36
  SESSION_STEER_QUEUE_KEY_PREFIX: () => import_backend.SESSION_STEER_QUEUE_KEY_PREFIX,
38
37
  SessionApprovalStateSchema: () => import_types.SessionApprovalStateSchema,
@@ -62,7 +61,6 @@ var import_types = require("./approvals/types.js");
62
61
  DatabaseBackedWorkspaceStore,
63
62
  DatabaseConversationStore,
64
63
  InMemoryDextoStores,
65
- PersistedApprovedDirectorySchema,
66
64
  SESSION_FOLLOW_UP_QUEUE_KEY_PREFIX,
67
65
  SESSION_STEER_QUEUE_KEY_PREFIX,
68
66
  SessionApprovalStateSchema,
@@ -19,8 +19,8 @@ export type { SessionStore } from './sessions/types.js';
19
19
  export type { MemoryStore } from './memories/types.js';
20
20
  export type { WorkspaceStore } from './workspaces/types.js';
21
21
  export type { CustomPromptStore } from './prompts/types.js';
22
- export { PersistedApprovedDirectorySchema, SessionApprovalStateSchema } from './approvals/types.js';
23
- export type { ApprovalStore, PersistedApprovedDirectory, SessionApprovalState, } from './approvals/types.js';
22
+ export { SessionApprovalStateSchema } from './approvals/types.js';
23
+ export type { ApprovalStore, SessionApprovalState } from './approvals/types.js';
24
24
  export type { ToolPreferenceStore } from './tool-preferences/types.js';
25
25
  export type { ToolStateStore } from './tool-state/types.js';
26
26
  export type { SessionMessageQueueStore } from './message-queue/types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACR,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,SAAS,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACH,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,sCAAsC,EACtC,0BAA0B,EAC1B,gCAAgC,EAChC,iCAAiC,EACjC,4BAA4B,EAC5B,4BAA4B,EAC5B,kCAAkC,EAClC,8BAA8B,GACjC,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,gCAAgC,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACpG,YAAY,EACR,aAAa,EACb,0BAA0B,EAC1B,oBAAoB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EACR,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,sBAAsB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACvF,YAAY,EACR,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,kBAAkB,GACrB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACR,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,SAAS,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACH,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,sCAAsC,EACtC,0BAA0B,EAC1B,gCAAgC,EAChC,iCAAiC,EACjC,4BAA4B,EAC5B,4BAA4B,EAC5B,kCAAkC,EAClC,8BAA8B,GACjC,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAChF,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EACR,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,sBAAsB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACvF,YAAY,EACR,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,0BAA0B,EAC1B,wBAAwB,EACxB,kBAAkB,GACrB,MAAM,4BAA4B,CAAC"}
@@ -19,7 +19,7 @@ import {
19
19
  SESSION_STEER_QUEUE_KEY_PREFIX
20
20
  } from "./stores/backend.js";
21
21
  import { DatabaseConversationStore } from "./conversation/database.js";
22
- import { PersistedApprovedDirectorySchema, SessionApprovalStateSchema } from "./approvals/types.js";
22
+ import { SessionApprovalStateSchema } from "./approvals/types.js";
23
23
  export {
24
24
  BackendDextoStores,
25
25
  DatabaseBackedApprovalStore,
@@ -35,7 +35,6 @@ export {
35
35
  DatabaseBackedWorkspaceStore,
36
36
  DatabaseConversationStore,
37
37
  InMemoryDextoStores,
38
- PersistedApprovedDirectorySchema,
39
38
  SESSION_FOLLOW_UP_QUEUE_KEY_PREFIX,
40
39
  SESSION_STEER_QUEUE_KEY_PREFIX,
41
40
  SessionApprovalStateSchema,
@@ -1,14 +1,22 @@
1
1
  import type { QueuedMessage } from '../../session/types.js';
2
2
  export interface SessionMessageQueueStore {
3
- listSessionIds(): Promise<string[]>;
4
- load(input: {
3
+ list(input: {
5
4
  sessionId: string;
6
5
  }): Promise<QueuedMessage[]>;
7
- save(input: {
6
+ append(input: {
8
7
  sessionId: string;
9
- queue: QueuedMessage[];
10
- }): Promise<void>;
11
- delete(input: {
8
+ message: QueuedMessage;
9
+ }): Promise<{
10
+ position: number;
11
+ }>;
12
+ takeAll(input: {
13
+ sessionId: string;
14
+ }): Promise<QueuedMessage[]>;
15
+ remove(input: {
16
+ sessionId: string;
17
+ id: string;
18
+ }): Promise<boolean>;
19
+ clear(input: {
12
20
  sessionId: string;
13
21
  }): Promise<void>;
14
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/message-queue/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,WAAW,wBAAwB;IACrC,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,aAAa,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/message-queue/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,MAAM,WAAW,wBAAwB;IACrC,IAAI,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,OAAO,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,KAAK,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
@@ -45,6 +45,7 @@ const MEMORY_KEY_PREFIX = "memory:item:";
45
45
  const CUSTOM_PROMPT_KEY_PREFIX = "prompt:custom:";
46
46
  const RUNTIME_EVENTS_KEY = "runtime-events";
47
47
  const RUNTIME_EVENTS_LIMIT = 1e4;
48
+ const SESSION_MESSAGE_QUEUE_READ_LIMIT = 1e4;
48
49
  const TOOL_EXECUTION_KEY_PREFIX = "tool-execution:";
49
50
  const TOOL_STATE_KEY_PREFIX = "tool-state:";
50
51
  const WORKSPACE_KEY_PREFIX = "workspace:item:";
@@ -52,8 +53,7 @@ const WORKSPACE_CURRENT_KEY = "workspace:current";
52
53
  const SESSION_STEER_QUEUE_KEY_PREFIX = "session-steer-queue";
53
54
  const SESSION_FOLLOW_UP_QUEUE_KEY_PREFIX = "session-follow-up-queue";
54
55
  const DEFAULT_APPROVAL_STATE = {
55
- toolPatterns: {},
56
- approvedDirectories: []
56
+ approvedKeys: {}
57
57
  };
58
58
  const DEFAULT_TOOL_PREFERENCES = {
59
59
  userAutoApproveTools: [],
@@ -431,51 +431,87 @@ class DatabaseBackedToolPreferenceStore {
431
431
  }
432
432
  }
433
433
  class DatabaseBackedSessionMessageQueueStore {
434
- constructor(database, cache, logger, keyPrefix) {
434
+ constructor(database, logger, keyPrefix) {
435
435
  this.database = database;
436
- this.cache = cache;
437
436
  this.logger = logger;
438
437
  this.keyPrefix = keyPrefix;
439
438
  }
440
- async listSessionIds() {
441
- const prefix = `${this.keyPrefix}:`;
442
- const keys = await this.database.list(prefix);
443
- return keys.map((key) => key.replace(prefix, ""));
439
+ async list(input) {
440
+ return await this.loadQueue(input.sessionId);
444
441
  }
445
- async load(input) {
442
+ async append(input) {
446
443
  const key = this.key(input.sessionId);
447
- const cached = await this.cache.get(key);
448
- const cachedQueue = import_types.QueuedMessagesSchema.safeParse(cached);
449
- if (cachedQueue.success) {
450
- return (0, import_queue_clone.cloneQueuedMessages)(cachedQueue.data);
444
+ const result = await this.database.updateList(
445
+ key,
446
+ (stored) => {
447
+ const queue = this.parseQueue(key, stored);
448
+ const nextQueue = [...queue, (0, import_queue_clone.cloneQueuedMessage)(input.message)];
449
+ return {
450
+ items: nextQueue,
451
+ result: {
452
+ position: nextQueue.length
453
+ }
454
+ };
455
+ }
456
+ );
457
+ return result;
458
+ }
459
+ async takeAll(input) {
460
+ const key = this.key(input.sessionId);
461
+ const queue = await this.database.updateList(key, (stored) => ({
462
+ items: [],
463
+ result: this.parseQueue(key, stored)
464
+ }));
465
+ return queue;
466
+ }
467
+ async remove(input) {
468
+ const key = this.key(input.sessionId);
469
+ const removed = await this.database.updateList(key, (stored) => {
470
+ const queue = this.parseQueue(key, stored);
471
+ const updatedQueue = queue.filter((message) => message.id !== input.id);
472
+ return {
473
+ items: updatedQueue,
474
+ result: updatedQueue.length !== queue.length
475
+ };
476
+ });
477
+ return removed;
478
+ }
479
+ async clear(input) {
480
+ const key = this.key(input.sessionId);
481
+ await this.database.updateList(key, () => ({
482
+ items: [],
483
+ result: void 0
484
+ }));
485
+ }
486
+ async loadQueue(sessionId) {
487
+ const key = this.key(sessionId);
488
+ const stored = [];
489
+ let offset = 0;
490
+ while (true) {
491
+ const page = await this.database.getRange(
492
+ key,
493
+ offset,
494
+ SESSION_MESSAGE_QUEUE_READ_LIMIT
495
+ );
496
+ stored.push(...page);
497
+ if (page.length < SESSION_MESSAGE_QUEUE_READ_LIMIT) {
498
+ break;
499
+ }
500
+ offset += SESSION_MESSAGE_QUEUE_READ_LIMIT;
451
501
  }
452
- const stored = await this.database.get(key);
502
+ return this.parseQueue(key, stored);
503
+ }
504
+ parseQueue(key, stored) {
453
505
  const storedQueue = import_types.QueuedMessagesSchema.safeParse(stored);
454
506
  if (!storedQueue.success) {
455
- if (stored !== void 0) {
507
+ if (stored.length > 0) {
456
508
  this.logger.warn("Invalid persisted message queue encountered; ignoring state", {
457
509
  key
458
510
  });
459
511
  }
460
512
  return [];
461
513
  }
462
- const queue = (0, import_queue_clone.cloneQueuedMessages)(storedQueue.data);
463
- await this.cache.set(key, queue, 3600);
464
- return (0, import_queue_clone.cloneQueuedMessages)(queue);
465
- }
466
- async save(input) {
467
- const key = this.key(input.sessionId);
468
- if (input.queue.length === 0) {
469
- await this.delete({ sessionId: input.sessionId });
470
- return;
471
- }
472
- const queue = (0, import_queue_clone.cloneQueuedMessages)(input.queue);
473
- await this.database.set(key, queue);
474
- await this.cache.set(key, queue, 3600);
475
- }
476
- async delete(input) {
477
- const key = this.key(input.sessionId);
478
- await Promise.all([this.database.delete(key), this.cache.delete(key)]);
514
+ return (0, import_queue_clone.cloneQueuedMessages)(storedQueue.data);
479
515
  }
480
516
  key(sessionId) {
481
517
  return `${this.keyPrefix}:${sessionId}`;
@@ -188,21 +188,30 @@ export declare class DatabaseBackedToolPreferenceStore implements ToolPreference
188
188
  }
189
189
  export declare class DatabaseBackedSessionMessageQueueStore implements SessionMessageQueueStore {
190
190
  private readonly database;
191
- private readonly cache;
192
191
  private readonly logger;
193
192
  private readonly keyPrefix;
194
- constructor(database: Database, cache: Cache, logger: Logger, keyPrefix: SessionMessageQueueKeyPrefix);
195
- listSessionIds(): Promise<string[]>;
196
- load(input: {
193
+ constructor(database: Database, logger: Logger, keyPrefix: SessionMessageQueueKeyPrefix);
194
+ list(input: {
197
195
  sessionId: string;
198
196
  }): Promise<QueuedMessage[]>;
199
- save(input: {
197
+ append(input: {
200
198
  sessionId: string;
201
- queue: QueuedMessage[];
202
- }): Promise<void>;
203
- delete(input: {
199
+ message: QueuedMessage;
200
+ }): Promise<{
201
+ position: number;
202
+ }>;
203
+ takeAll(input: {
204
+ sessionId: string;
205
+ }): Promise<QueuedMessage[]>;
206
+ remove(input: {
207
+ sessionId: string;
208
+ id: string;
209
+ }): Promise<boolean>;
210
+ clear(input: {
204
211
  sessionId: string;
205
212
  }): Promise<void>;
213
+ private loadQueue;
214
+ private parseQueue;
206
215
  private key;
207
216
  }
208
217
  export declare class DatabaseBackedCustomPromptStore implements CustomPromptStore {