@zhivex-ai/core 1.18.0 → 1.20.0

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 (266) hide show
  1. package/README.md +4 -0
  2. package/dist/agent/approvals.d.ts +7 -0
  3. package/dist/agent/approvals.d.ts.map +1 -0
  4. package/dist/agent/approvals.js +97 -0
  5. package/dist/agent/approvals.js.map +1 -0
  6. package/dist/agent/cancellation.d.ts +4 -0
  7. package/dist/agent/cancellation.d.ts.map +1 -0
  8. package/dist/agent/cancellation.js +69 -0
  9. package/dist/agent/cancellation.js.map +1 -0
  10. package/dist/agent/common.d.ts +20 -0
  11. package/dist/agent/common.d.ts.map +1 -0
  12. package/dist/agent/common.js +150 -0
  13. package/dist/agent/common.js.map +1 -0
  14. package/dist/agent/compaction.d.ts +6 -0
  15. package/dist/agent/compaction.d.ts.map +1 -0
  16. package/dist/agent/compaction.js +156 -0
  17. package/dist/agent/compaction.js.map +1 -0
  18. package/dist/agent/context.d.ts +58 -0
  19. package/dist/agent/context.d.ts.map +1 -0
  20. package/dist/agent/context.js +267 -0
  21. package/dist/agent/context.js.map +1 -0
  22. package/dist/agent/definition.d.ts +4 -0
  23. package/dist/agent/definition.d.ts.map +1 -0
  24. package/dist/agent/definition.js +35 -0
  25. package/dist/agent/definition.js.map +1 -0
  26. package/dist/agent/execution.d.ts +14 -0
  27. package/dist/agent/execution.d.ts.map +1 -0
  28. package/dist/agent/execution.js +1062 -0
  29. package/dist/agent/execution.js.map +1 -0
  30. package/dist/agent/groups.d.ts +3 -0
  31. package/dist/agent/groups.d.ts.map +1 -0
  32. package/dist/agent/groups.js +130 -0
  33. package/dist/agent/groups.js.map +1 -0
  34. package/dist/agent/guardrails.d.ts +4 -0
  35. package/dist/agent/guardrails.d.ts.map +1 -0
  36. package/dist/agent/guardrails.js +29 -0
  37. package/dist/agent/guardrails.js.map +1 -0
  38. package/dist/agent/instance.d.ts +42 -0
  39. package/dist/agent/instance.d.ts.map +1 -0
  40. package/dist/agent/instance.js +82 -0
  41. package/dist/agent/instance.js.map +1 -0
  42. package/dist/agent/lifecycle.d.ts +31 -0
  43. package/dist/agent/lifecycle.d.ts.map +1 -0
  44. package/dist/agent/lifecycle.js +184 -0
  45. package/dist/agent/lifecycle.js.map +1 -0
  46. package/dist/agent/state.d.ts +6 -0
  47. package/dist/agent/state.d.ts.map +1 -0
  48. package/dist/agent/state.js +119 -0
  49. package/dist/agent/state.js.map +1 -0
  50. package/dist/agent/telemetry.d.ts +12 -0
  51. package/dist/agent/telemetry.d.ts.map +1 -0
  52. package/dist/agent/telemetry.js +176 -0
  53. package/dist/agent/telemetry.js.map +1 -0
  54. package/dist/agent/tool-execution.d.ts +6 -0
  55. package/dist/agent/tool-execution.d.ts.map +1 -0
  56. package/dist/agent/tool-execution.js +176 -0
  57. package/dist/agent/tool-execution.js.map +1 -0
  58. package/dist/agent-run-view.d.ts +9 -0
  59. package/dist/agent-run-view.d.ts.map +1 -0
  60. package/dist/agent-run-view.js +42 -0
  61. package/dist/agent-run-view.js.map +1 -0
  62. package/dist/agent-store/file.d.ts +11 -0
  63. package/dist/agent-store/file.d.ts.map +1 -0
  64. package/dist/agent-store/file.js +534 -0
  65. package/dist/agent-store/file.js.map +1 -0
  66. package/dist/agent-store/memory.d.ts +9 -0
  67. package/dist/agent-store/memory.d.ts.map +1 -0
  68. package/dist/agent-store/memory.js +198 -0
  69. package/dist/agent-store/memory.js.map +1 -0
  70. package/dist/agent-store/postgres.d.ts +4 -0
  71. package/dist/agent-store/postgres.d.ts.map +1 -0
  72. package/dist/agent-store/postgres.js +374 -0
  73. package/dist/agent-store/postgres.js.map +1 -0
  74. package/dist/agent-store/shared.d.ts +19 -0
  75. package/dist/agent-store/shared.d.ts.map +1 -0
  76. package/dist/agent-store/shared.js +137 -0
  77. package/dist/agent-store/shared.js.map +1 -0
  78. package/dist/agent-store/sqlite.d.ts +4 -0
  79. package/dist/agent-store/sqlite.d.ts.map +1 -0
  80. package/dist/agent-store/sqlite.js +362 -0
  81. package/dist/agent-store/sqlite.js.map +1 -0
  82. package/dist/agent-store.d.ts +5 -21
  83. package/dist/agent-store.d.ts.map +1 -1
  84. package/dist/agent-store.js +5 -1588
  85. package/dist/agent-store.js.map +1 -1
  86. package/dist/agent.d.ts +6 -57
  87. package/dist/agent.d.ts.map +1 -1
  88. package/dist/agent.js +6 -2631
  89. package/dist/agent.js.map +1 -1
  90. package/dist/agents-entry.d.ts +19 -0
  91. package/dist/agents-entry.d.ts.map +1 -0
  92. package/dist/agents-entry.js +14 -0
  93. package/dist/agents-entry.js.map +1 -0
  94. package/dist/api-stability.d.ts.map +1 -1
  95. package/dist/api-stability.js +1 -0
  96. package/dist/api-stability.js.map +1 -1
  97. package/dist/artifact/file.d.ts +6 -0
  98. package/dist/artifact/file.d.ts.map +1 -0
  99. package/dist/artifact/file.js +380 -0
  100. package/dist/artifact/file.js.map +1 -0
  101. package/dist/artifact/memory.d.ts +3 -0
  102. package/dist/artifact/memory.d.ts.map +1 -0
  103. package/dist/artifact/memory.js +80 -0
  104. package/dist/artifact/memory.js.map +1 -0
  105. package/dist/artifact/postgres.d.ts +3 -0
  106. package/dist/artifact/postgres.d.ts.map +1 -0
  107. package/dist/artifact/postgres.js +283 -0
  108. package/dist/artifact/postgres.js.map +1 -0
  109. package/dist/artifact/shared.d.ts +208 -0
  110. package/dist/artifact/shared.d.ts.map +1 -0
  111. package/dist/artifact/shared.js +523 -0
  112. package/dist/artifact/shared.js.map +1 -0
  113. package/dist/artifact/sqlite.d.ts +3 -0
  114. package/dist/artifact/sqlite.d.ts.map +1 -0
  115. package/dist/artifact/sqlite.js +283 -0
  116. package/dist/artifact/sqlite.js.map +1 -0
  117. package/dist/artifact.d.ts +6 -186
  118. package/dist/artifact.d.ts.map +1 -1
  119. package/dist/artifact.js +6 -1536
  120. package/dist/artifact.js.map +1 -1
  121. package/dist/catalog-contracts.d.ts +52 -0
  122. package/dist/catalog-contracts.d.ts.map +1 -0
  123. package/dist/catalog-contracts.js +250 -0
  124. package/dist/catalog-contracts.js.map +1 -0
  125. package/dist/catalog.d.ts +3 -52
  126. package/dist/catalog.d.ts.map +1 -1
  127. package/dist/catalog.js +3 -249
  128. package/dist/catalog.js.map +1 -1
  129. package/dist/generate-cache-file.d.ts +11 -0
  130. package/dist/generate-cache-file.d.ts.map +1 -0
  131. package/dist/generate-cache-file.js +124 -0
  132. package/dist/generate-cache-file.js.map +1 -0
  133. package/dist/generate-text.d.ts +2 -5
  134. package/dist/generate-text.d.ts.map +1 -1
  135. package/dist/generate-text.js +6 -18
  136. package/dist/generate-text.js.map +1 -1
  137. package/dist/generation-entry.d.ts +6 -0
  138. package/dist/generation-entry.d.ts.map +1 -0
  139. package/dist/generation-entry.js +6 -0
  140. package/dist/generation-entry.js.map +1 -0
  141. package/dist/image-input.d.ts +4 -0
  142. package/dist/image-input.d.ts.map +1 -0
  143. package/dist/image-input.js +26 -0
  144. package/dist/image-input.js.map +1 -0
  145. package/dist/index.d.ts +1 -0
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +1 -0
  148. package/dist/index.js.map +1 -1
  149. package/dist/middleware-runtime.d.ts +35 -0
  150. package/dist/middleware-runtime.d.ts.map +1 -0
  151. package/dist/middleware-runtime.js +532 -0
  152. package/dist/middleware-runtime.js.map +1 -0
  153. package/dist/middleware.d.ts +3 -43
  154. package/dist/middleware.d.ts.map +1 -1
  155. package/dist/middleware.js +3 -653
  156. package/dist/middleware.js.map +1 -1
  157. package/dist/normalize-messages.d.ts +3 -0
  158. package/dist/normalize-messages.d.ts.map +1 -0
  159. package/dist/normalize-messages.js +16 -0
  160. package/dist/normalize-messages.js.map +1 -0
  161. package/dist/provider-entry.d.ts +18 -0
  162. package/dist/provider-entry.d.ts.map +1 -0
  163. package/dist/provider-entry.js +14 -0
  164. package/dist/provider-entry.js.map +1 -0
  165. package/dist/realtime.d.ts +2 -0
  166. package/dist/realtime.d.ts.map +1 -1
  167. package/dist/realtime.js +6 -0
  168. package/dist/realtime.js.map +1 -1
  169. package/dist/store-key.d.ts +3 -0
  170. package/dist/store-key.d.ts.map +1 -0
  171. package/dist/store-key.js +5 -0
  172. package/dist/store-key.js.map +1 -0
  173. package/dist/store-security.d.ts +1 -2
  174. package/dist/store-security.d.ts.map +1 -1
  175. package/dist/store-security.js +2 -4
  176. package/dist/store-security.js.map +1 -1
  177. package/dist/types/agent-state.d.ts +236 -0
  178. package/dist/types/agent-state.d.ts.map +1 -0
  179. package/dist/types/agent-state.js +2 -0
  180. package/dist/types/agent-state.js.map +1 -0
  181. package/dist/types/agents.d.ts +429 -0
  182. package/dist/types/agents.d.ts.map +1 -0
  183. package/dist/types/agents.js +2 -0
  184. package/dist/types/agents.js.map +1 -0
  185. package/dist/types/common.d.ts +179 -0
  186. package/dist/types/common.d.ts.map +1 -0
  187. package/dist/types/common.js +2 -0
  188. package/dist/types/common.js.map +1 -0
  189. package/dist/types/generation.d.ts +109 -0
  190. package/dist/types/generation.d.ts.map +1 -0
  191. package/dist/types/generation.js +2 -0
  192. package/dist/types/generation.js.map +1 -0
  193. package/dist/types/media-data.d.ts +65 -0
  194. package/dist/types/media-data.d.ts.map +1 -0
  195. package/dist/types/media-data.js +2 -0
  196. package/dist/types/media-data.js.map +1 -0
  197. package/dist/types/media.d.ts +141 -0
  198. package/dist/types/media.d.ts.map +1 -0
  199. package/dist/types/media.js +2 -0
  200. package/dist/types/media.js.map +1 -0
  201. package/dist/types/messages.d.ts +84 -0
  202. package/dist/types/messages.d.ts.map +1 -0
  203. package/dist/types/messages.js +2 -0
  204. package/dist/types/messages.js.map +1 -0
  205. package/dist/types/middleware.d.ts +130 -0
  206. package/dist/types/middleware.d.ts.map +1 -0
  207. package/dist/types/middleware.js +2 -0
  208. package/dist/types/middleware.js.map +1 -0
  209. package/dist/types/model-tools.d.ts +409 -0
  210. package/dist/types/model-tools.d.ts.map +1 -0
  211. package/dist/types/model-tools.js +2 -0
  212. package/dist/types/model-tools.js.map +1 -0
  213. package/dist/types/persistence.d.ts +168 -0
  214. package/dist/types/persistence.d.ts.map +1 -0
  215. package/dist/types/persistence.js +2 -0
  216. package/dist/types/persistence.js.map +1 -0
  217. package/dist/types/provider-resources.d.ts +336 -0
  218. package/dist/types/provider-resources.d.ts.map +1 -0
  219. package/dist/types/provider-resources.js +2 -0
  220. package/dist/types/provider-resources.js.map +1 -0
  221. package/dist/types/provider.d.ts +23 -0
  222. package/dist/types/provider.d.ts.map +1 -0
  223. package/dist/types/provider.js +2 -0
  224. package/dist/types/provider.js.map +1 -0
  225. package/dist/types/resource-options.d.ts +88 -0
  226. package/dist/types/resource-options.d.ts.map +1 -0
  227. package/dist/types/resource-options.js +2 -0
  228. package/dist/types/resource-options.js.map +1 -0
  229. package/dist/types/stream.d.ts +70 -0
  230. package/dist/types/stream.d.ts.map +1 -0
  231. package/dist/types/stream.js +2 -0
  232. package/dist/types/stream.js.map +1 -0
  233. package/dist/types/ui.d.ts +110 -0
  234. package/dist/types/ui.d.ts.map +1 -0
  235. package/dist/types/ui.js +2 -0
  236. package/dist/types/ui.js.map +1 -0
  237. package/dist/types.d.ts +16 -2480
  238. package/dist/types.d.ts.map +1 -1
  239. package/dist/ui.d.ts.map +1 -1
  240. package/dist/ui.js +2 -0
  241. package/dist/ui.js.map +1 -1
  242. package/dist/workflow-state-service/file.d.ts +5 -0
  243. package/dist/workflow-state-service/file.d.ts.map +1 -0
  244. package/dist/workflow-state-service/file.js +142 -0
  245. package/dist/workflow-state-service/file.js.map +1 -0
  246. package/dist/workflow-state-service/memory.d.ts +3 -0
  247. package/dist/workflow-state-service/memory.d.ts.map +1 -0
  248. package/dist/workflow-state-service/memory.js +27 -0
  249. package/dist/workflow-state-service/memory.js.map +1 -0
  250. package/dist/workflow-state-service/postgres.d.ts +4 -0
  251. package/dist/workflow-state-service/postgres.d.ts.map +1 -0
  252. package/dist/workflow-state-service/postgres.js +179 -0
  253. package/dist/workflow-state-service/postgres.js.map +1 -0
  254. package/dist/workflow-state-service/shared.d.ts +43 -0
  255. package/dist/workflow-state-service/shared.d.ts.map +1 -0
  256. package/dist/workflow-state-service/shared.js +107 -0
  257. package/dist/workflow-state-service/shared.js.map +1 -0
  258. package/dist/workflow-state-service/sqlite.d.ts +4 -0
  259. package/dist/workflow-state-service/sqlite.d.ts.map +1 -0
  260. package/dist/workflow-state-service/sqlite.js +183 -0
  261. package/dist/workflow-state-service/sqlite.js.map +1 -0
  262. package/dist/workflow-state-service.d.ts +6 -33
  263. package/dist/workflow-state-service.d.ts.map +1 -1
  264. package/dist/workflow-state-service.js +6 -626
  265. package/dist/workflow-state-service.js.map +1 -1
  266. package/package.json +17 -1
@@ -0,0 +1,198 @@
1
+ import { normalizeAgentRunState } from "../agent-state.js";
2
+ import { ConflictError, ValidationError } from "../errors.js";
3
+ import { scopedKey, resolveScope, cloneState, assertLeaseOwner, assertExpectedRevision, nextStoredState, scopePrefix, listStates, validateLeaseOptions, cloneJournalEntry, assertJournalRevision, nextJournalEntry, defaultMemoryKey, defaultMemoryMessages } from "./shared.js";
4
+ const cloneMessages = (messages) => JSON.parse(JSON.stringify(messages));
5
+ export const createInMemoryAgentRunStore = (options = {}) => {
6
+ const states = new Map();
7
+ const idempotencyKeys = new Map();
8
+ const parentRunIds = new Map();
9
+ const leases = new Map();
10
+ const journal = new Map();
11
+ const runKey = (runId, scope) => scopedKey(resolveScope(options.scope, scope), runId);
12
+ const idempotencyKey = (key, scope) => scopedKey(resolveScope(options.scope, scope), key);
13
+ const journalKey = (runId, toolCallId, scope) => `${runKey(runId, scope)}:${toolCallId}`;
14
+ const removeParentIndex = (state) => {
15
+ if (!state?.parentRunId) {
16
+ return;
17
+ }
18
+ const parentKey = scopedKey(resolveScope(options.scope, state.scope), state.parentRunId);
19
+ const children = parentRunIds.get(parentKey);
20
+ children?.delete(runKey(state.runId, state.scope));
21
+ if (children?.size === 0) {
22
+ parentRunIds.delete(parentKey);
23
+ }
24
+ };
25
+ return {
26
+ reconciliationFencing: true,
27
+ load(runId, scope) {
28
+ const state = states.get(runKey(runId, scope));
29
+ return state ? cloneState(normalizeAgentRunState(state)) : undefined;
30
+ },
31
+ findByIdempotencyKey(idempotencyKeyValue, scope) {
32
+ const runId = idempotencyKeys.get(idempotencyKey(idempotencyKeyValue, scope));
33
+ if (!runId) {
34
+ return undefined;
35
+ }
36
+ const state = states.get(runId);
37
+ return state ? cloneState(normalizeAgentRunState(state)) : undefined;
38
+ },
39
+ findByParentRunId(parentRunId, scope) {
40
+ return [...(parentRunIds.get(scopedKey(resolveScope(options.scope, scope), parentRunId)) ?? [])].flatMap((runId) => {
41
+ const state = states.get(runId);
42
+ return state ? [cloneState(normalizeAgentRunState(state))] : [];
43
+ });
44
+ },
45
+ claimIdempotencyKey(state) {
46
+ const scope = resolveScope(options.scope, state.scope);
47
+ const existingRunId = idempotencyKeys.get(idempotencyKey(state.idempotencyKey, scope));
48
+ const existing = existingRunId ? states.get(existingRunId) : undefined;
49
+ if (existing) {
50
+ return { claimed: false, state: cloneState(existing) };
51
+ }
52
+ const normalized = normalizeAgentRunState(state);
53
+ removeParentIndex(states.get(runKey(normalized.runId, scope)));
54
+ const stored = cloneState({ ...normalized, ...(scope ? { scope } : {}) });
55
+ states.set(runKey(normalized.runId, scope), stored);
56
+ idempotencyKeys.set(idempotencyKey(state.idempotencyKey, scope), runKey(normalized.runId, scope));
57
+ if (normalized.parentRunId) {
58
+ const parentKey = scopedKey(scope, normalized.parentRunId);
59
+ const children = parentRunIds.get(parentKey) ?? new Set();
60
+ children.add(runKey(normalized.runId, scope));
61
+ parentRunIds.set(parentKey, children);
62
+ }
63
+ return { claimed: true, state: cloneState(stored) };
64
+ },
65
+ save(state, saveOptions) {
66
+ const scope = resolveScope(options.scope, state.scope);
67
+ assertLeaseOwner(leases.get(runKey(state.runId, scope)), saveOptions?.leaseOwnerId);
68
+ const current = states.get(runKey(state.runId, scope));
69
+ assertExpectedRevision(current, saveOptions?.expectedRevision);
70
+ const normalized = nextStoredState(state, saveOptions);
71
+ removeParentIndex(current);
72
+ states.set(runKey(normalized.runId, scope), cloneState({ ...normalized, ...(scope ? { scope } : {}) }));
73
+ if (normalized.idempotencyKey) {
74
+ const owner = idempotencyKeys.get(idempotencyKey(normalized.idempotencyKey, scope));
75
+ if (owner && owner !== runKey(normalized.runId, scope)) {
76
+ throw new ConflictError("AgentRunState idempotency key conflict.");
77
+ }
78
+ idempotencyKeys.set(idempotencyKey(normalized.idempotencyKey, scope), runKey(normalized.runId, scope));
79
+ }
80
+ if (normalized.parentRunId) {
81
+ const parentKey = scopedKey(scope, normalized.parentRunId);
82
+ const children = parentRunIds.get(parentKey) ?? new Set();
83
+ children.add(runKey(normalized.runId, scope));
84
+ parentRunIds.set(parentKey, children);
85
+ }
86
+ },
87
+ delete(runId, scope) {
88
+ const key = runKey(runId, scope);
89
+ const state = states.get(key);
90
+ if (state?.idempotencyKey) {
91
+ idempotencyKeys.delete(idempotencyKey(state.idempotencyKey, state.scope));
92
+ }
93
+ removeParentIndex(state);
94
+ states.delete(key);
95
+ leases.delete(key);
96
+ for (const journalEntryKey of journal.keys()) {
97
+ if (journalEntryKey.startsWith(`${key}:`))
98
+ journal.delete(journalEntryKey);
99
+ }
100
+ },
101
+ list(listOptions, scope) {
102
+ const prefix = scopePrefix(resolveScope(options.scope, scope));
103
+ return listStates([...states.entries()].filter(([key]) => key.startsWith(prefix)).map(([, state]) => state), listOptions);
104
+ },
105
+ deleteExpired(retention, scope) {
106
+ const prefix = scopePrefix(resolveScope(options.scope, scope));
107
+ const candidates = listStates([...states.entries()].filter(([key]) => key.startsWith(prefix)).map(([, state]) => state), {
108
+ statuses: retention.statuses,
109
+ updatedBefore: retention.before,
110
+ limit: retention.limit ?? 1_000
111
+ }).items;
112
+ for (const state of candidates)
113
+ this.delete?.(state.runId, state.scope);
114
+ return candidates.length;
115
+ },
116
+ acquireLease(runId, leaseOptions, scope) {
117
+ validateLeaseOptions(leaseOptions);
118
+ const key = runKey(runId, scope);
119
+ if (!states.has(key))
120
+ return undefined;
121
+ const now = leaseOptions.now ?? Date.now();
122
+ const current = leases.get(key);
123
+ if (current && current.expiresAt > now && current.ownerId !== leaseOptions.ownerId)
124
+ return undefined;
125
+ const lease = { runId, ownerId: leaseOptions.ownerId, expiresAt: now + leaseOptions.ttlMs };
126
+ leases.set(key, lease);
127
+ return { ...lease };
128
+ },
129
+ renewLease(runId, leaseOptions, scope) {
130
+ validateLeaseOptions(leaseOptions);
131
+ const key = runKey(runId, scope);
132
+ const now = leaseOptions.now ?? Date.now();
133
+ const current = leases.get(key);
134
+ if (!current || current.ownerId !== leaseOptions.ownerId || current.expiresAt <= now)
135
+ return undefined;
136
+ const lease = { runId, ownerId: leaseOptions.ownerId, expiresAt: now + leaseOptions.ttlMs };
137
+ leases.set(key, lease);
138
+ return { ...lease };
139
+ },
140
+ releaseLease(runId, ownerId, scope) {
141
+ const key = runKey(runId, scope);
142
+ if (leases.get(key)?.ownerId !== ownerId)
143
+ return false;
144
+ return leases.delete(key);
145
+ },
146
+ loadToolCall(runId, toolCallId, scope) {
147
+ const entry = journal.get(journalKey(runId, toolCallId, scope));
148
+ return entry ? cloneJournalEntry(entry) : undefined;
149
+ },
150
+ loadToolExecution(runId, toolCallId, scope) {
151
+ return this.loadToolCall?.(runId, toolCallId, scope);
152
+ },
153
+ listToolCalls(runId, scope) {
154
+ const prefix = `${runKey(runId, scope)}:`;
155
+ return [...journal.entries()]
156
+ .filter(([key]) => key.startsWith(prefix))
157
+ .map(([, entry]) => cloneJournalEntry(entry))
158
+ .sort((left, right) => left.updatedAt - right.updatedAt || left.toolCallId.localeCompare(right.toolCallId));
159
+ },
160
+ saveToolCall(entry, journalOptions) {
161
+ const scope = resolveScope(options.scope, entry.scope);
162
+ if (!states.has(runKey(entry.runId, scope)))
163
+ throw new ValidationError("Cannot journal a tool call for an unknown run.");
164
+ assertLeaseOwner(leases.get(runKey(entry.runId, scope)), journalOptions?.leaseOwnerId);
165
+ const key = journalKey(entry.runId, entry.toolCallId, scope);
166
+ const current = journal.get(key);
167
+ assertJournalRevision(current, journalOptions?.expectedRevision);
168
+ const next = nextJournalEntry(entry, journalOptions);
169
+ journal.set(key, next);
170
+ return cloneJournalEntry(next);
171
+ },
172
+ claimToolExecution(entry) {
173
+ const key = journalKey(entry.runId, entry.toolCallId, entry.scope);
174
+ const existing = journal.get(key);
175
+ if (existing)
176
+ return { claimed: false, entry: cloneJournalEntry(existing) };
177
+ const claimed = this.saveToolCall?.({ ...entry, status: "running", revision: 0 });
178
+ return { claimed: true, entry: claimed };
179
+ },
180
+ completeToolExecution(entry, journalOptions) {
181
+ return this.saveToolCall?.({ ...entry, status: entry.status === "failed" ? "failed" : "completed" }, journalOptions);
182
+ }
183
+ };
184
+ };
185
+ export const createInMemoryAgentMemoryStore = (options = {}) => {
186
+ const keyFor = (context) => (options.key ?? defaultMemoryKey)({ ...context, scope: resolveScope(options.scope, context.scope) });
187
+ const selectMessages = options.selectMessages ?? defaultMemoryMessages;
188
+ const memories = new Map(Object.entries(options.initialMessages ?? {}).map(([key, messages]) => [key, cloneMessages(messages)]));
189
+ return {
190
+ load(context) {
191
+ return cloneMessages(memories.get(keyFor(context)) ?? (context.agentId ? options.initialMessages?.[context.agentId] : undefined) ?? []);
192
+ },
193
+ save(context) {
194
+ memories.set(keyFor(context), cloneMessages(selectMessages(context.state)));
195
+ }
196
+ };
197
+ };
198
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/agent-store/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AgentMemoryStore, AgentRunStore, PostgresAgentMemoryStoreOptions, PostgresAgentRunStoreOptions } from "../types.js";
2
+ export declare const createPostgresAgentRunStore: (options: PostgresAgentRunStoreOptions) => AgentRunStore;
3
+ export declare const createPostgresAgentMemoryStore: (options: PostgresAgentMemoryStoreOptions) => AgentMemoryStore;
4
+ //# sourceMappingURL=postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/agent-store/postgres.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,gBAAgB,EAGhB,aAAa,EAIb,+BAA+B,EAC/B,4BAA4B,EAE7B,MAAM,aAAa,CAAC;AA+DrB,eAAO,MAAM,2BAA2B,YAAa,4BAA4B,KAAG,aAuWnF,CAAC;AAEF,eAAO,MAAM,8BAA8B,YAAa,+BAA+B,KAAG,gBAoCzF,CAAC"}
@@ -0,0 +1,374 @@
1
+ import { normalizeAgentRunState } from "../agent-state.js";
2
+ import { ConflictError, ValidationError } from "../errors.js";
3
+ import { assertPostgresClient } from "../postgres-client.js";
4
+ import { validateIdentifier, scopedKey, resolveScope, getRecordField, nextStoredState, scopePrefix, listStates, validateLeaseOptions, cloneJournalEntry, nextJournalEntry, defaultMemoryKey, defaultMemoryMessages } from "./shared.js";
5
+ const isConcurrentPostgresTableCreationConflict = (error) => {
6
+ if (!error || typeof error !== "object")
7
+ return false;
8
+ const record = error;
9
+ return record.code === "23505" &&
10
+ (record.constraint === "pg_type_typname_nsp_index" ||
11
+ record.constraint_name === "pg_type_typname_nsp_index");
12
+ };
13
+ const ensurePostgresTable = (() => {
14
+ const initializedTables = new WeakMap();
15
+ return async (client, tableName, createSql) => {
16
+ let tables = initializedTables.get(client);
17
+ if (!tables) {
18
+ tables = new Map();
19
+ initializedTables.set(client, tables);
20
+ }
21
+ let initialization = tables.get(tableName);
22
+ if (!initialization) {
23
+ initialization = (async () => {
24
+ for (let attempt = 0;; attempt += 1) {
25
+ try {
26
+ await client.query(createSql, []);
27
+ return;
28
+ }
29
+ catch (error) {
30
+ if (!isConcurrentPostgresTableCreationConflict(error) || attempt >= 2) {
31
+ throw error;
32
+ }
33
+ await new Promise((resolve) => setTimeout(resolve, 10 * (attempt + 1)));
34
+ }
35
+ }
36
+ })();
37
+ tables.set(tableName, initialization);
38
+ }
39
+ try {
40
+ await initialization;
41
+ }
42
+ catch (error) {
43
+ if (tables.get(tableName) === initialization) {
44
+ tables.delete(tableName);
45
+ }
46
+ throw error;
47
+ }
48
+ };
49
+ })();
50
+ export const createPostgresAgentRunStore = (options) => {
51
+ assertPostgresClient(options.client);
52
+ const tableName = validateIdentifier(options.tableName ?? "zhivex_agent_runs", "tableName");
53
+ const idempotencyTableName = `${tableName}_idempotency`;
54
+ const parentTableName = `${tableName}_parents`;
55
+ const leaseTableName = `${tableName}_leases`;
56
+ const journalTableName = `${tableName}_tool_journal`;
57
+ const dbKey = (value, scope) => scopedKey(resolveScope(options.scope, scope), value);
58
+ const createSql = `
59
+ CREATE TABLE IF NOT EXISTS ${tableName} (
60
+ run_id TEXT PRIMARY KEY,
61
+ state_json JSONB NOT NULL,
62
+ updated_at_ms BIGINT NOT NULL
63
+ )
64
+ `;
65
+ const createIdempotencySql = `
66
+ CREATE TABLE IF NOT EXISTS ${idempotencyTableName} (
67
+ idempotency_key TEXT PRIMARY KEY,
68
+ run_id TEXT NOT NULL,
69
+ updated_at_ms BIGINT NOT NULL
70
+ )
71
+ `;
72
+ const createParentSql = `
73
+ CREATE TABLE IF NOT EXISTS ${parentTableName} (
74
+ run_id TEXT PRIMARY KEY,
75
+ parent_run_id TEXT NOT NULL,
76
+ updated_at_ms BIGINT NOT NULL
77
+ )
78
+ `;
79
+ const createLeaseSql = `CREATE TABLE IF NOT EXISTS ${leaseTableName} (
80
+ run_key TEXT PRIMARY KEY,
81
+ run_id TEXT NOT NULL,
82
+ owner_id TEXT NOT NULL,
83
+ expires_at_ms BIGINT NOT NULL
84
+ )`;
85
+ const createJournalSql = `CREATE TABLE IF NOT EXISTS ${journalTableName} (
86
+ run_key TEXT NOT NULL,
87
+ tool_call_id TEXT NOT NULL,
88
+ entry_json JSONB NOT NULL,
89
+ revision BIGINT NOT NULL,
90
+ updated_at_ms BIGINT NOT NULL,
91
+ PRIMARY KEY (run_key, tool_call_id)
92
+ )`;
93
+ const createIndexesSql = `
94
+ CREATE INDEX IF NOT EXISTS ${tableName}_updated_idx ON ${tableName} (updated_at_ms DESC, run_id);
95
+ CREATE INDEX IF NOT EXISTS ${parentTableName}_parent_idx ON ${parentTableName} (parent_run_id, updated_at_ms DESC);
96
+ CREATE INDEX IF NOT EXISTS ${leaseTableName}_expiry_idx ON ${leaseTableName} (expires_at_ms);
97
+ CREATE INDEX IF NOT EXISTS ${journalTableName}_run_idx ON ${journalTableName} (run_key, updated_at_ms, tool_call_id)
98
+ `;
99
+ const ensureAllTables = async () => {
100
+ await ensurePostgresTable(options.client, tableName, createSql);
101
+ await ensurePostgresTable(options.client, idempotencyTableName, createIdempotencySql);
102
+ await ensurePostgresTable(options.client, parentTableName, createParentSql);
103
+ await ensurePostgresTable(options.client, leaseTableName, createLeaseSql);
104
+ await ensurePostgresTable(options.client, journalTableName, createJournalSql);
105
+ await ensurePostgresTable(options.client, `${tableName}:indexes`, createIndexesSql);
106
+ };
107
+ return {
108
+ async load(runId, scope) {
109
+ await ensureAllTables();
110
+ const result = await options.client.query(`SELECT state_json FROM ${tableName} WHERE run_id = $1`, [dbKey(runId, scope)]);
111
+ const state = result.rows[0] ? (getRecordField(result.rows[0], ["state_json", "stateJson"]) ?? undefined) : undefined;
112
+ return state ? normalizeAgentRunState(state) : undefined;
113
+ },
114
+ async findByIdempotencyKey(idempotencyKey, scope) {
115
+ await ensureAllTables();
116
+ const result = await options.client.query(`SELECT runs.state_json
117
+ FROM ${tableName} runs
118
+ INNER JOIN ${idempotencyTableName} keys ON keys.run_id = runs.run_id
119
+ WHERE keys.idempotency_key = $1`, [dbKey(idempotencyKey, scope)]);
120
+ const state = result.rows[0] ? (getRecordField(result.rows[0], ["state_json", "stateJson"]) ?? undefined) : undefined;
121
+ return state ? normalizeAgentRunState(state) : undefined;
122
+ },
123
+ async findByParentRunId(parentRunId, scope) {
124
+ await ensureAllTables();
125
+ const result = await options.client.query(`SELECT runs.state_json
126
+ FROM ${tableName} runs
127
+ INNER JOIN ${parentTableName} parents ON parents.run_id = runs.run_id
128
+ WHERE parents.parent_run_id = $1`, [dbKey(parentRunId, scope)]);
129
+ return result.rows.flatMap((row) => {
130
+ const state = getRecordField(row, ["state_json", "stateJson"]) ?? undefined;
131
+ return state ? [normalizeAgentRunState(state)] : [];
132
+ });
133
+ },
134
+ async claimIdempotencyKey(state) {
135
+ await ensureAllTables();
136
+ const scope = resolveScope(options.scope, state.scope);
137
+ const normalized = normalizeAgentRunState({ ...state, ...(scope ? { scope } : {}) });
138
+ const updatedAt = Date.now();
139
+ await options.client.query(`INSERT INTO ${tableName} (run_id, state_json, updated_at_ms)
140
+ VALUES ($1, $2::jsonb, $3)
141
+ ON CONFLICT(run_id) DO NOTHING`, [dbKey(normalized.runId, scope), normalized, updatedAt]);
142
+ const claim = await options.client.query(`INSERT INTO ${idempotencyTableName} (idempotency_key, run_id, updated_at_ms)
143
+ VALUES ($1, $2, $3)
144
+ ON CONFLICT(idempotency_key) DO NOTHING
145
+ RETURNING run_id`, [dbKey(state.idempotencyKey, scope), dbKey(normalized.runId, scope), updatedAt]);
146
+ const claimedRunId = getRecordField(claim.rows[0], ["run_id", "runId"]);
147
+ if (claimedRunId === dbKey(normalized.runId, scope)) {
148
+ if (normalized.parentRunId) {
149
+ await options.client.query(`INSERT INTO ${parentTableName} (run_id, parent_run_id, updated_at_ms)
150
+ VALUES ($1, $2, $3)
151
+ ON CONFLICT(run_id) DO UPDATE SET
152
+ parent_run_id = EXCLUDED.parent_run_id,
153
+ updated_at_ms = EXCLUDED.updated_at_ms`, [dbKey(normalized.runId, scope), dbKey(normalized.parentRunId, scope), updatedAt]);
154
+ }
155
+ return { claimed: true, state: normalized };
156
+ }
157
+ const existing = await options.client.query(`SELECT runs.state_json
158
+ FROM ${tableName} runs
159
+ INNER JOIN ${idempotencyTableName} keys ON keys.run_id = runs.run_id
160
+ WHERE keys.idempotency_key = $1`, [dbKey(state.idempotencyKey, scope)]);
161
+ const existingState = existing.rows[0]
162
+ ? getRecordField(existing.rows[0], ["state_json", "stateJson"])
163
+ : undefined;
164
+ if (!existingState) {
165
+ throw new ConflictError("AgentRunState idempotency claim could not be loaded.");
166
+ }
167
+ if (existingState.runId !== normalized.runId) {
168
+ await options.client.query(`DELETE FROM ${tableName} WHERE run_id = $1`, [dbKey(normalized.runId, scope)]);
169
+ }
170
+ return { claimed: false, state: normalizeAgentRunState(existingState) };
171
+ },
172
+ async save(state, saveOptions) {
173
+ await ensureAllTables();
174
+ const scope = resolveScope(options.scope, state.scope);
175
+ const normalized = nextStoredState(state, saveOptions);
176
+ const stored = { ...normalized, ...(scope ? { scope } : {}) };
177
+ const updatedAt = Date.now();
178
+ if (normalized.idempotencyKey) {
179
+ const owner = await options.client.query(`SELECT run_id FROM ${idempotencyTableName} WHERE idempotency_key = $1`, [dbKey(normalized.idempotencyKey, scope)]);
180
+ const ownerRunId = getRecordField(owner.rows[0], ["run_id", "runId"]);
181
+ if (typeof ownerRunId === "string" && ownerRunId !== dbKey(normalized.runId, scope)) {
182
+ throw new ConflictError("AgentRunState idempotency key conflict.");
183
+ }
184
+ }
185
+ if (saveOptions?.expectedRevision === undefined) {
186
+ await options.client.query(`INSERT INTO ${tableName} (run_id, state_json, updated_at_ms)
187
+ VALUES ($1, $2::jsonb, $3)
188
+ ON CONFLICT(run_id) DO UPDATE SET
189
+ state_json = EXCLUDED.state_json,
190
+ updated_at_ms = EXCLUDED.updated_at_ms`, [dbKey(normalized.runId, scope), stored, updatedAt]);
191
+ }
192
+ else {
193
+ const saved = await options.client.query(`INSERT INTO ${tableName} (run_id, state_json, updated_at_ms)
194
+ VALUES ($1, $2::jsonb, $3)
195
+ ON CONFLICT(run_id) DO UPDATE SET
196
+ state_json = EXCLUDED.state_json,
197
+ updated_at_ms = EXCLUDED.updated_at_ms
198
+ WHERE COALESCE((${tableName}.state_json->>'revision')::bigint, 0) = $4
199
+ RETURNING run_id`, [dbKey(normalized.runId, scope), stored, updatedAt, saveOptions.expectedRevision]);
200
+ if (getRecordField(saved.rows[0], ["run_id", "runId"]) !== dbKey(normalized.runId, scope)) {
201
+ throw new ConflictError("AgentRunState revision conflict.");
202
+ }
203
+ }
204
+ if (normalized.idempotencyKey) {
205
+ await options.client.query(`INSERT INTO ${idempotencyTableName} (idempotency_key, run_id, updated_at_ms)
206
+ VALUES ($1, $2, $3)
207
+ ON CONFLICT(idempotency_key) DO NOTHING`, [dbKey(normalized.idempotencyKey, scope), dbKey(normalized.runId, scope), updatedAt]);
208
+ }
209
+ await options.client.query(`DELETE FROM ${parentTableName} WHERE run_id = $1`, [dbKey(normalized.runId, scope)]);
210
+ if (normalized.parentRunId) {
211
+ await options.client.query(`INSERT INTO ${parentTableName} (run_id, parent_run_id, updated_at_ms)
212
+ VALUES ($1, $2, $3)
213
+ ON CONFLICT(run_id) DO UPDATE SET
214
+ parent_run_id = EXCLUDED.parent_run_id,
215
+ updated_at_ms = EXCLUDED.updated_at_ms`, [dbKey(normalized.runId, scope), dbKey(normalized.parentRunId, scope), updatedAt]);
216
+ }
217
+ },
218
+ async delete(runId, scope) {
219
+ await ensureAllTables();
220
+ const key = dbKey(runId, scope);
221
+ await options.client.query(`WITH deleted_run AS (
222
+ DELETE FROM ${tableName} WHERE run_id = $1 RETURNING run_id
223
+ ), deleted_idempotency AS (
224
+ DELETE FROM ${idempotencyTableName} WHERE run_id = $1 RETURNING run_id
225
+ ), deleted_parent AS (
226
+ DELETE FROM ${parentTableName} WHERE run_id = $1 RETURNING run_id
227
+ ), deleted_lease AS (
228
+ DELETE FROM ${leaseTableName} WHERE run_key = $1 RETURNING run_key
229
+ )
230
+ DELETE FROM ${journalTableName} WHERE run_key = $1`, [key]);
231
+ },
232
+ async list(listOptions, scope) {
233
+ await ensureAllTables();
234
+ const prefix = scopePrefix(resolveScope(options.scope, scope));
235
+ const result = await options.client.query(`SELECT state_json FROM ${tableName} WHERE run_id >= $1 AND run_id < $2`, [prefix, `${prefix}\uffff`]);
236
+ const states = result.rows.flatMap((row) => {
237
+ const state = getRecordField(row, ["state_json", "stateJson"]);
238
+ return state ? [normalizeAgentRunState(state)] : [];
239
+ });
240
+ return listStates(states, listOptions);
241
+ },
242
+ async deleteExpired(retention, scope) {
243
+ const page = await this.list?.({ statuses: retention.statuses, updatedBefore: retention.before, limit: retention.limit ?? 1_000 }, scope);
244
+ for (const state of page.items)
245
+ await this.delete?.(state.runId, state.scope);
246
+ return page.items.length;
247
+ },
248
+ async acquireLease(runId, leaseOptions, scope) {
249
+ validateLeaseOptions(leaseOptions);
250
+ await ensureAllTables();
251
+ const now = leaseOptions.now ?? Date.now();
252
+ const key = dbKey(runId, scope);
253
+ const expiresAt = now + leaseOptions.ttlMs;
254
+ const result = await options.client.query(`INSERT INTO ${leaseTableName} (run_key, run_id, owner_id, expires_at_ms)
255
+ SELECT $1, $2, $3, $4
256
+ WHERE EXISTS (SELECT 1 FROM ${tableName} WHERE run_id = $1)
257
+ ON CONFLICT(run_key) DO UPDATE SET
258
+ owner_id = EXCLUDED.owner_id,
259
+ expires_at_ms = EXCLUDED.expires_at_ms
260
+ WHERE ${leaseTableName}.owner_id = EXCLUDED.owner_id OR ${leaseTableName}.expires_at_ms <= $5
261
+ RETURNING owner_id, expires_at_ms`, [key, runId, leaseOptions.ownerId, expiresAt, now]);
262
+ const owner = getRecordField(result.rows[0], ["owner_id", "ownerId"]);
263
+ return owner === leaseOptions.ownerId ? { runId, ownerId: leaseOptions.ownerId, expiresAt } : undefined;
264
+ },
265
+ async renewLease(runId, leaseOptions, scope) {
266
+ validateLeaseOptions(leaseOptions);
267
+ await ensureAllTables();
268
+ const now = leaseOptions.now ?? Date.now();
269
+ const expiresAt = now + leaseOptions.ttlMs;
270
+ const result = await options.client.query(`UPDATE ${leaseTableName}
271
+ SET expires_at_ms = $3
272
+ WHERE run_key = $1 AND owner_id = $2 AND expires_at_ms > $4
273
+ RETURNING owner_id`, [dbKey(runId, scope), leaseOptions.ownerId, expiresAt, now]);
274
+ return getRecordField(result.rows[0], ["owner_id", "ownerId"]) === leaseOptions.ownerId
275
+ ? { runId, ownerId: leaseOptions.ownerId, expiresAt }
276
+ : undefined;
277
+ },
278
+ async releaseLease(runId, ownerId, scope) {
279
+ await ensureAllTables();
280
+ const result = await options.client.query(`DELETE FROM ${leaseTableName} WHERE run_key = $1 AND owner_id = $2 RETURNING owner_id`, [dbKey(runId, scope), ownerId]);
281
+ return getRecordField(result.rows[0], ["owner_id", "ownerId"]) === ownerId;
282
+ },
283
+ async loadToolCall(runId, toolCallId, scope) {
284
+ await ensureAllTables();
285
+ const result = await options.client.query(`SELECT entry_json FROM ${journalTableName} WHERE run_key = $1 AND tool_call_id = $2`, [dbKey(runId, scope), toolCallId]);
286
+ const entry = getRecordField(result.rows[0], ["entry_json", "entryJson"]);
287
+ return entry && typeof entry === "object" ? cloneJournalEntry(entry) : undefined;
288
+ },
289
+ async loadToolExecution(runId, toolCallId, scope) {
290
+ return this.loadToolCall?.(runId, toolCallId, scope);
291
+ },
292
+ async listToolCalls(runId, scope) {
293
+ await ensureAllTables();
294
+ const result = await options.client.query(`SELECT entry_json FROM ${journalTableName} WHERE run_key = $1 ORDER BY updated_at_ms, tool_call_id`, [dbKey(runId, scope)]);
295
+ return result.rows.flatMap((row) => {
296
+ const entry = getRecordField(row, ["entry_json", "entryJson"]);
297
+ return entry && typeof entry === "object" ? [cloneJournalEntry(entry)] : [];
298
+ });
299
+ },
300
+ async saveToolCall(entry, journalOptions) {
301
+ await ensureAllTables();
302
+ const next = nextJournalEntry(entry, journalOptions);
303
+ const key = dbKey(entry.runId, entry.scope);
304
+ const result = journalOptions?.expectedRevision === undefined
305
+ ? await options.client.query(`INSERT INTO ${journalTableName} (run_key, tool_call_id, entry_json, revision, updated_at_ms)
306
+ VALUES ($1, $2, $3::jsonb, $4, $5)
307
+ ON CONFLICT(run_key, tool_call_id) DO UPDATE SET
308
+ entry_json = EXCLUDED.entry_json,
309
+ revision = EXCLUDED.revision,
310
+ updated_at_ms = EXCLUDED.updated_at_ms
311
+ RETURNING revision`, [key, entry.toolCallId, next, next.revision, next.updatedAt])
312
+ : await options.client.query(`UPDATE ${journalTableName}
313
+ SET entry_json = $3::jsonb,
314
+ revision = $4,
315
+ updated_at_ms = $5
316
+ WHERE run_key = $1 AND tool_call_id = $2 AND revision = $6
317
+ RETURNING revision`, [key, entry.toolCallId, next, next.revision, next.updatedAt, journalOptions.expectedRevision]);
318
+ if (getRecordField(result.rows[0], ["revision"]) === undefined) {
319
+ throw new ConflictError("Agent tool-call journal revision conflict.");
320
+ }
321
+ return next;
322
+ },
323
+ async claimToolExecution(entry) {
324
+ await ensureAllTables();
325
+ const next = nextJournalEntry({ ...entry, status: "running", revision: 0 });
326
+ const result = await options.client.query(`INSERT INTO ${journalTableName} (run_key, tool_call_id, entry_json, revision, updated_at_ms)
327
+ SELECT $1, $2, $3::jsonb, 0, $4
328
+ WHERE EXISTS (SELECT 1 FROM ${tableName} WHERE run_id = $1)
329
+ ON CONFLICT(run_key, tool_call_id) DO NOTHING
330
+ RETURNING entry_json`, [dbKey(entry.runId, entry.scope), entry.toolCallId, next, next.updatedAt]);
331
+ const claimed = getRecordField(result.rows[0], ["entry_json", "entryJson"]);
332
+ if (claimed && typeof claimed === "object")
333
+ return { claimed: true, entry: next };
334
+ const existing = await this.loadToolCall?.(entry.runId, entry.toolCallId, entry.scope);
335
+ if (!existing)
336
+ throw new ValidationError("Cannot journal a tool call for an unknown run.");
337
+ return { claimed: false, entry: existing };
338
+ },
339
+ async completeToolExecution(entry, journalOptions) {
340
+ return this.saveToolCall?.({ ...entry, status: entry.status === "failed" ? "failed" : "completed" }, journalOptions);
341
+ }
342
+ };
343
+ };
344
+ export const createPostgresAgentMemoryStore = (options) => {
345
+ assertPostgresClient(options.client);
346
+ const tableName = validateIdentifier(options.tableName ?? "zhivex_agent_memory", "tableName");
347
+ const keyFor = (context) => (options.key ?? defaultMemoryKey)({ ...context, scope: resolveScope(options.scope, context.scope) });
348
+ const selectMessages = options.selectMessages ?? defaultMemoryMessages;
349
+ const createSql = `
350
+ CREATE TABLE IF NOT EXISTS ${tableName} (
351
+ memory_key TEXT PRIMARY KEY,
352
+ messages_json JSONB NOT NULL,
353
+ updated_at_ms BIGINT NOT NULL
354
+ )
355
+ `;
356
+ return {
357
+ async load(context) {
358
+ await ensurePostgresTable(options.client, tableName, createSql);
359
+ const result = await options.client.query(`SELECT messages_json FROM ${tableName} WHERE memory_key = $1`, [keyFor(context)]);
360
+ return result.rows[0]
361
+ ? (getRecordField(result.rows[0], ["messages_json", "messagesJson"]) ?? [])
362
+ : [];
363
+ },
364
+ async save(context) {
365
+ await ensurePostgresTable(options.client, tableName, createSql);
366
+ await options.client.query(`INSERT INTO ${tableName} (memory_key, messages_json, updated_at_ms)
367
+ VALUES ($1, $2::jsonb, $3)
368
+ ON CONFLICT(memory_key) DO UPDATE SET
369
+ messages_json = EXCLUDED.messages_json,
370
+ updated_at_ms = EXCLUDED.updated_at_ms`, [keyFor(context), selectMessages(context.state), Date.now()]);
371
+ }
372
+ };
373
+ };
374
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/agent-store/postgres.ts"],"names":[],"mappings":"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"}