agentenkit 0.2.3 → 0.4.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 (216) hide show
  1. package/README.md +34 -14
  2. package/dist/adapters/inline.d.ts +19 -5
  3. package/dist/adapters/inline.d.ts.map +1 -1
  4. package/dist/adapters/inline.js +87 -14
  5. package/dist/adapters/inline.js.map +1 -1
  6. package/dist/adapters/memory.d.ts +65 -3
  7. package/dist/adapters/memory.d.ts.map +1 -1
  8. package/dist/adapters/memory.js +267 -3
  9. package/dist/adapters/memory.js.map +1 -1
  10. package/dist/adapters/prisma.d.ts +125 -18
  11. package/dist/adapters/prisma.d.ts.map +1 -1
  12. package/dist/adapters/prisma.js +308 -67
  13. package/dist/adapters/prisma.js.map +1 -1
  14. package/dist/adapters/qstash.d.ts +15 -2
  15. package/dist/adapters/qstash.d.ts.map +1 -1
  16. package/dist/adapters/qstash.js +31 -14
  17. package/dist/adapters/qstash.js.map +1 -1
  18. package/dist/adapters/redis.d.ts +40 -4
  19. package/dist/adapters/redis.d.ts.map +1 -1
  20. package/dist/adapters/redis.js +265 -20
  21. package/dist/adapters/redis.js.map +1 -1
  22. package/dist/adapters/sqlite.d.ts +52 -2
  23. package/dist/adapters/sqlite.d.ts.map +1 -1
  24. package/dist/adapters/sqlite.js +342 -35
  25. package/dist/adapters/sqlite.js.map +1 -1
  26. package/dist/adapters/stream-scripts.d.ts +49 -0
  27. package/dist/adapters/stream-scripts.d.ts.map +1 -0
  28. package/dist/adapters/stream-scripts.js +150 -0
  29. package/dist/adapters/stream-scripts.js.map +1 -0
  30. package/dist/adapters/upstash.d.ts +20 -0
  31. package/dist/adapters/upstash.d.ts.map +1 -1
  32. package/dist/adapters/upstash.js +29 -0
  33. package/dist/adapters/upstash.js.map +1 -1
  34. package/dist/admin/memory.d.ts +11 -1
  35. package/dist/admin/memory.d.ts.map +1 -1
  36. package/dist/admin/memory.js +83 -14
  37. package/dist/admin/memory.js.map +1 -1
  38. package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts +5 -0
  39. package/dist/admin/migrations/postgres/0002-run-settled-at.d.ts.map +1 -0
  40. package/dist/admin/migrations/postgres/0002-run-settled-at.js +11 -0
  41. package/dist/admin/migrations/postgres/0002-run-settled-at.js.map +1 -0
  42. package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts +5 -0
  43. package/dist/admin/migrations/postgres/0003-run-enqueued-at.d.ts.map +1 -0
  44. package/dist/admin/migrations/postgres/0003-run-enqueued-at.js +15 -0
  45. package/dist/admin/migrations/postgres/0003-run-enqueued-at.js.map +1 -0
  46. package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts +5 -0
  47. package/dist/admin/migrations/postgres/0004-run-settle-claim.d.ts.map +1 -0
  48. package/dist/admin/migrations/postgres/0004-run-settle-claim.js +15 -0
  49. package/dist/admin/migrations/postgres/0004-run-settle-claim.js.map +1 -0
  50. package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts +5 -0
  51. package/dist/admin/migrations/postgres/0005-bigint-counters.d.ts.map +1 -0
  52. package/dist/admin/migrations/postgres/0005-bigint-counters.js +12 -0
  53. package/dist/admin/migrations/postgres/0005-bigint-counters.js.map +1 -0
  54. package/dist/admin/migrations/postgres/index.d.ts.map +1 -1
  55. package/dist/admin/migrations/postgres/index.js +16 -1
  56. package/dist/admin/migrations/postgres/index.js.map +1 -1
  57. package/dist/admin/migrations/runner.d.ts +21 -1
  58. package/dist/admin/migrations/runner.d.ts.map +1 -1
  59. package/dist/admin/migrations/runner.js +41 -4
  60. package/dist/admin/migrations/runner.js.map +1 -1
  61. package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts +5 -0
  62. package/dist/admin/migrations/sqlite/0002-run-settled-at.d.ts.map +1 -0
  63. package/dist/admin/migrations/sqlite/0002-run-settled-at.js +11 -0
  64. package/dist/admin/migrations/sqlite/0002-run-settled-at.js.map +1 -0
  65. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts +5 -0
  66. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.d.ts.map +1 -0
  67. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js +15 -0
  68. package/dist/admin/migrations/sqlite/0003-run-enqueued-at.js.map +1 -0
  69. package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts +5 -0
  70. package/dist/admin/migrations/sqlite/0004-run-settle-claim.d.ts.map +1 -0
  71. package/dist/admin/migrations/sqlite/0004-run-settle-claim.js +15 -0
  72. package/dist/admin/migrations/sqlite/0004-run-settle-claim.js.map +1 -0
  73. package/dist/admin/migrations/sqlite/index.d.ts +2 -2
  74. package/dist/admin/migrations/sqlite/index.d.ts.map +1 -1
  75. package/dist/admin/migrations/sqlite/index.js +17 -3
  76. package/dist/admin/migrations/sqlite/index.js.map +1 -1
  77. package/dist/admin/postgres.d.ts +14 -4
  78. package/dist/admin/postgres.d.ts.map +1 -1
  79. package/dist/admin/postgres.js +131 -36
  80. package/dist/admin/postgres.js.map +1 -1
  81. package/dist/admin/shared.d.ts +19 -0
  82. package/dist/admin/shared.d.ts.map +1 -0
  83. package/dist/admin/shared.js +28 -0
  84. package/dist/admin/shared.js.map +1 -0
  85. package/dist/admin/sqlite.d.ts +9 -1
  86. package/dist/admin/sqlite.d.ts.map +1 -1
  87. package/dist/admin/sqlite.js +112 -29
  88. package/dist/admin/sqlite.js.map +1 -1
  89. package/dist/core/admin.d.ts +28 -6
  90. package/dist/core/admin.d.ts.map +1 -1
  91. package/dist/core/admin.js +92 -23
  92. package/dist/core/admin.js.map +1 -1
  93. package/dist/core/agent.d.ts +7 -4
  94. package/dist/core/agent.d.ts.map +1 -1
  95. package/dist/core/agent.js +15 -11
  96. package/dist/core/agent.js.map +1 -1
  97. package/dist/core/agui.d.ts +17 -0
  98. package/dist/core/agui.d.ts.map +1 -0
  99. package/dist/core/agui.js +69 -0
  100. package/dist/core/agui.js.map +1 -0
  101. package/dist/core/context.d.ts +13 -1
  102. package/dist/core/context.d.ts.map +1 -1
  103. package/dist/core/context.js +70 -19
  104. package/dist/core/context.js.map +1 -1
  105. package/dist/core/deleteThread.d.ts.map +1 -1
  106. package/dist/core/deleteThread.js +33 -4
  107. package/dist/core/deleteThread.js.map +1 -1
  108. package/dist/core/engine.d.ts +41 -11
  109. package/dist/core/engine.d.ts.map +1 -1
  110. package/dist/core/engine.js +855 -352
  111. package/dist/core/engine.js.map +1 -1
  112. package/dist/core/follow.d.ts +63 -1
  113. package/dist/core/follow.d.ts.map +1 -1
  114. package/dist/core/follow.js +293 -16
  115. package/dist/core/follow.js.map +1 -1
  116. package/dist/core/hitl.d.ts +43 -0
  117. package/dist/core/hitl.d.ts.map +1 -1
  118. package/dist/core/hitl.js +163 -35
  119. package/dist/core/hitl.js.map +1 -1
  120. package/dist/core/keys.d.ts +22 -4
  121. package/dist/core/keys.d.ts.map +1 -1
  122. package/dist/core/keys.js +23 -5
  123. package/dist/core/keys.js.map +1 -1
  124. package/dist/core/lease.d.ts +46 -0
  125. package/dist/core/lease.d.ts.map +1 -0
  126. package/dist/core/lease.js +142 -0
  127. package/dist/core/lease.js.map +1 -0
  128. package/dist/core/loop.d.ts +27 -7
  129. package/dist/core/loop.d.ts.map +1 -1
  130. package/dist/core/loop.js +140 -55
  131. package/dist/core/loop.js.map +1 -1
  132. package/dist/core/messages.d.ts +21 -2
  133. package/dist/core/messages.d.ts.map +1 -1
  134. package/dist/core/messages.js +61 -2
  135. package/dist/core/messages.js.map +1 -1
  136. package/dist/core/prune.d.ts +24 -0
  137. package/dist/core/prune.d.ts.map +1 -0
  138. package/dist/core/prune.js +43 -0
  139. package/dist/core/prune.js.map +1 -0
  140. package/dist/core/publish.d.ts +38 -10
  141. package/dist/core/publish.d.ts.map +1 -1
  142. package/dist/core/publish.js +126 -12
  143. package/dist/core/publish.js.map +1 -1
  144. package/dist/core/reclaim.d.ts +8 -1
  145. package/dist/core/reclaim.d.ts.map +1 -1
  146. package/dist/core/reclaim.js +149 -18
  147. package/dist/core/reclaim.js.map +1 -1
  148. package/dist/core/run.d.ts +7 -3
  149. package/dist/core/run.d.ts.map +1 -1
  150. package/dist/core/run.js +95 -35
  151. package/dist/core/run.js.map +1 -1
  152. package/dist/core/segment.d.ts +62 -0
  153. package/dist/core/segment.d.ts.map +1 -0
  154. package/dist/core/segment.js +318 -0
  155. package/dist/core/segment.js.map +1 -0
  156. package/dist/core/settle.d.ts +57 -0
  157. package/dist/core/settle.d.ts.map +1 -0
  158. package/dist/core/settle.js +181 -0
  159. package/dist/core/settle.js.map +1 -0
  160. package/dist/core/snapshot.d.ts +36 -0
  161. package/dist/core/snapshot.d.ts.map +1 -0
  162. package/dist/core/snapshot.js +87 -0
  163. package/dist/core/snapshot.js.map +1 -0
  164. package/dist/core/stop.d.ts +16 -1
  165. package/dist/core/stop.d.ts.map +1 -1
  166. package/dist/core/stop.js +69 -15
  167. package/dist/core/stop.js.map +1 -1
  168. package/dist/core/stream-events.d.ts +184 -0
  169. package/dist/core/stream-events.d.ts.map +1 -0
  170. package/dist/core/stream-events.js +26 -0
  171. package/dist/core/stream-events.js.map +1 -0
  172. package/dist/core/stream.d.ts +29 -0
  173. package/dist/core/stream.d.ts.map +1 -1
  174. package/dist/core/stream.js +79 -0
  175. package/dist/core/stream.js.map +1 -1
  176. package/dist/core/subagent.d.ts +36 -5
  177. package/dist/core/subagent.d.ts.map +1 -1
  178. package/dist/core/subagent.js +117 -22
  179. package/dist/core/subagent.js.map +1 -1
  180. package/dist/core/types.d.ts +197 -11
  181. package/dist/core/types.d.ts.map +1 -1
  182. package/dist/core/types.js +26 -1
  183. package/dist/core/types.js.map +1 -1
  184. package/dist/core/usage.d.ts +53 -5
  185. package/dist/core/usage.d.ts.map +1 -1
  186. package/dist/core/usage.js +170 -47
  187. package/dist/core/usage.js.map +1 -1
  188. package/dist/index.d.ts +16 -11
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +12 -7
  191. package/dist/index.js.map +1 -1
  192. package/dist/ports/admin.d.ts +59 -0
  193. package/dist/ports/admin.d.ts.map +1 -1
  194. package/dist/ports/kv.d.ts +17 -0
  195. package/dist/ports/kv.d.ts.map +1 -1
  196. package/dist/ports/queue.d.ts +87 -7
  197. package/dist/ports/queue.d.ts.map +1 -1
  198. package/dist/ports/queue.js +36 -1
  199. package/dist/ports/queue.js.map +1 -1
  200. package/dist/ports/runtime.d.ts +171 -20
  201. package/dist/ports/runtime.d.ts.map +1 -1
  202. package/dist/ports/storage.d.ts +26 -5
  203. package/dist/ports/storage.d.ts.map +1 -1
  204. package/dist/ports/streams.d.ts +60 -0
  205. package/dist/ports/streams.d.ts.map +1 -0
  206. package/dist/ports/streams.js +20 -0
  207. package/dist/ports/streams.js.map +1 -0
  208. package/dist/pricing.d.ts +5 -0
  209. package/dist/pricing.d.ts.map +1 -1
  210. package/dist/pricing.js +35 -10
  211. package/dist/pricing.js.map +1 -1
  212. package/dist/runtime.d.ts +6 -0
  213. package/dist/runtime.d.ts.map +1 -1
  214. package/dist/runtime.js +144 -46
  215. package/dist/runtime.js.map +1 -1
  216. package/package.json +1 -1
@@ -1,4 +1,13 @@
1
- import { emptyTotals } from '../core/usage.js';
1
+ import { UsageMerger } from '../core/usage.js';
2
+ import { StreamClosedError, StreamGoneError } from '../ports/streams.js';
3
+ import { isStreamEnd } from '../core/stream-events.js';
4
+ import { sleep } from './stream-scripts.js';
5
+ /** A message row without its `seq`: a BigInt, which JSON cannot carry, and
6
+ * an ordering detail no caller needs. */
7
+ function toMessage(row) {
8
+ const { seq: _seq, ...rest } = row ?? {};
9
+ return rest;
10
+ }
2
11
  /** Reference Storage adapter over PostgreSQL/Prisma (schema in the README / spec §2.4). */
3
12
  export class PrismaStorage {
4
13
  prisma;
@@ -20,15 +29,30 @@ export class PrismaStorage {
20
29
  });
21
30
  return res.count > 0;
22
31
  },
32
+ transition: async (threadId, tr) => {
33
+ if (tr.from.length === 0)
34
+ return false;
35
+ // Single conditional UPDATE — the atomicity contract (§3.4). A thread
36
+ // with no run recorded yet (from before the column) matches any run.
37
+ const res = await this.prisma.thread.updateMany({
38
+ where: {
39
+ id: threadId,
40
+ state: { in: tr.from },
41
+ ...(tr.runId ? { OR: [{ runId: tr.runId }, { runId: null }] } : {}),
42
+ },
43
+ data: { state: tr.to, ...(tr.newRunId ? { runId: tr.newRunId } : {}) },
44
+ });
45
+ return res.count > 0;
46
+ },
23
47
  delete: (threadId) =>
24
48
  // One delete — the reference schema cascades to Message, AgentEvent,
25
49
  // TokenUsage and SubagentRun via `onDelete: Cascade` (spec §2.4)
26
50
  this.prisma.thread.delete({ where: { id: threadId } }).then(() => undefined),
27
51
  };
28
52
  messages = {
29
- append: (threadId, m) => this.prisma.message.create({
53
+ append: async (threadId, m) => toMessage(await this.prisma.message.create({
30
54
  data: { threadId, agentId: m.agentId ?? null, role: m.role, content: m.content },
31
- }),
55
+ })),
32
56
  list: (threadId, opts) => this.prisma.message.findMany({
33
57
  // `agentId: null` is a real filter (IS NULL), not an absent one — the
34
58
  // scope is only dropped when the caller omits it entirely.
@@ -36,94 +60,135 @@ export class PrismaStorage {
36
60
  threadId,
37
61
  ...(opts && 'agentId' in opts ? { agentId: opts.agentId } : {}),
38
62
  },
39
- orderBy: { createdAt: 'asc' },
40
- }),
63
+ // By seq, the order they were written: a tool call and its result
64
+ // can share a millisecond, and createdAt would let them swap.
65
+ orderBy: { seq: 'asc' },
66
+ }).then((rows) => rows.map(toMessage)),
41
67
  deleteFrom: async (threadId, messageId) => {
42
- // Delete by id over the same ordering `list` uses, rather than a
43
- // `createdAt >=` range: a run appends several messages inside one
44
- // millisecond, and a range would take neighbours with it.
45
- const rows = await this.prisma.message.findMany({
46
- where: { threadId },
47
- orderBy: { createdAt: 'asc' },
68
+ // One delete over the same order `list` uses: the message and every
69
+ // one written after it.
70
+ const target = await this.prisma.message.findFirst({
71
+ where: { id: messageId, threadId },
72
+ select: { seq: true },
48
73
  });
49
- const from = rows.findIndex((m) => m.id === messageId);
50
- if (from === -1)
74
+ if (!target)
51
75
  return 0;
52
76
  const { count } = await this.prisma.message.deleteMany({
53
- where: { id: { in: rows.slice(from).map((m) => m.id) } },
77
+ where: { threadId, seq: { gte: target.seq } },
54
78
  });
55
79
  return count;
56
80
  },
57
81
  };
58
82
  events = {
83
+ // The seq is the thread's next: read the top one and insert above it.
84
+ // Two appends that read the same top collide on the (threadId, seq)
85
+ // unique index, and the loser tries again.
59
86
  append: async (threadId, event) => {
60
- await this.prisma.agentEvent.create({
61
- data: { threadId, seq: event.seq, type: event.type, payload: event.payload },
62
- });
87
+ for (let attempt = 0;; attempt++) {
88
+ const top = await this.prisma.agentEvent.findFirst({ where: { threadId }, orderBy: { seq: 'desc' } });
89
+ try {
90
+ const row = await this.prisma.agentEvent.create({
91
+ data: {
92
+ threadId, seq: (top?.seq ?? 0) + 1, type: event.type, payload: event.payload ?? null,
93
+ runId: event.runId ?? null,
94
+ ...(event.createdAt ? { createdAt: event.createdAt } : {}),
95
+ },
96
+ });
97
+ return withRun(row);
98
+ }
99
+ catch (err) {
100
+ if (err?.code !== 'P2002' || attempt >= 9)
101
+ throw err;
102
+ }
103
+ }
63
104
  },
64
- listSince: (threadId, sinceSeq) => this.prisma.agentEvent.findMany({
105
+ list: async (threadId, f = {}) => (await this.prisma.agentEvent.findMany({
106
+ where: {
107
+ threadId,
108
+ ...(f.types ? { type: { in: f.types } } : {}),
109
+ ...(f.runId !== undefined ? { runId: f.runId } : {}),
110
+ ...(f.after !== undefined ? { seq: { gt: f.after } } : {}),
111
+ },
112
+ orderBy: { seq: 'asc' },
113
+ ...(f.limit ? { take: f.limit } : {}),
114
+ })).map(withRun),
115
+ listSince: async (threadId, sinceSeq) => (await this.prisma.agentEvent.findMany({
65
116
  where: { threadId, seq: { gt: sinceSeq } },
66
117
  orderBy: { seq: 'asc' },
67
- }),
68
- latest: (threadId, type) => this.prisma.agentEvent.findFirst({
69
- where: { threadId, type },
70
- orderBy: { seq: 'desc' },
71
- }),
72
- listByType: (threadId, type) => this.prisma.agentEvent.findMany({ where: { threadId, type }, orderBy: { seq: 'asc' } }),
118
+ })).map(withRun),
119
+ latest: async (threadId, type) => {
120
+ const row = await this.prisma.agentEvent.findFirst({ where: { threadId, type }, orderBy: { seq: 'desc' } });
121
+ return row && withRun(row);
122
+ },
123
+ listByType: async (threadId, type) => (await this.prisma.agentEvent.findMany({ where: { threadId, type }, orderBy: { seq: 'asc' } })).map(withRun),
124
+ prune: async (types, opts) => {
125
+ // Loosely typed: these reads span every thread, which the narrowed
126
+ // signatures above (one thread at a time) do not cover.
127
+ const events = this.prisma.agentEvent;
128
+ const counts = {};
129
+ if (opts.dryRun) {
130
+ for (const g of await events.groupBy({ by: ['type'], where: { type: { in: types } }, _count: { _all: true } })) {
131
+ counts[g.type] = g._count._all;
132
+ }
133
+ return counts;
134
+ }
135
+ const rows = await events.findMany({
136
+ where: { type: { in: types } }, select: { id: true, type: true }, take: opts.limit,
137
+ });
138
+ if (rows.length === 0)
139
+ return counts;
140
+ await events.deleteMany({ where: { id: { in: rows.map((r) => r.id) } } });
141
+ for (const r of rows)
142
+ counts[r.type] = (counts[r.type] ?? 0) + 1;
143
+ return counts;
144
+ },
73
145
  };
74
146
  usage = {
75
147
  total: async (threadId, filter = {}) => {
76
- const groups = await this.prisma.tokenUsage.groupBy({
77
- by: ['agentId', 'agentName', 'model', 'modelId'],
78
- where: { threadId, ...(filter.runId ? { runId: filter.runId } : {}) },
79
- _sum: {
80
- inputTokens: true, cachedInputTokens: true, cacheWriteInputTokens: true,
81
- outputTokens: true, reasoningTokens: true, totalTokens: true, costMicros: true,
82
- },
83
- _count: true,
84
- });
85
148
  const where = { threadId, ...(filter.runId ? { runId: filter.runId } : {}) };
86
- // The figures a grouped sum cannot carry: which calls were guesses,
87
- // which were never priced, and what unit the money is in. Read
88
- // alongside the groups rather than hardcoded, so a bill can tell
89
- // "spent nothing" from "nobody priced this".
90
- const [estimatedByGroup, unpriced, first] = await Promise.all([
149
+ // Grouped by currency as well, so a group never sums two units. A
150
+ // group with no currency is the unpriced calls.
151
+ const by = ['agentId', 'agentName', 'model', 'modelId', 'costCurrency'];
152
+ const keyOf = (g) => [g.agentId, g.agentName, g.model, g.modelId, g.costCurrency].join('\u0000');
153
+ const [groups, estimatedByGroup] = await Promise.all([
91
154
  this.prisma.tokenUsage.groupBy({
92
- by: ['agentId', 'agentName', 'model', 'modelId'],
93
- where: { ...where, estimated: true },
155
+ by,
156
+ where,
157
+ _sum: {
158
+ inputTokens: true, cachedInputTokens: true, cacheWriteInputTokens: true,
159
+ outputTokens: true, reasoningTokens: true, totalTokens: true, costMicros: true,
160
+ },
94
161
  _count: true,
162
+ _min: { createdAt: true },
95
163
  }),
96
- this.prisma.tokenUsage.count({ where: { ...where, costMicros: null } }),
97
- this.prisma.tokenUsage.findFirst({
98
- where: { ...where, costCurrency: { not: null } },
99
- orderBy: { createdAt: 'asc' },
100
- select: { costCurrency: true },
101
- }),
164
+ // Which calls were guesses: a conditional count a grouped sum cannot
165
+ // carry, read alongside rather than hardcoded.
166
+ this.prisma.tokenUsage.groupBy({ by, where: { ...where, estimated: true }, _count: true }),
102
167
  ]);
103
- const estimatedOf = new Map(estimatedByGroup.map((g) => [`${g.agentId}|${g.agentName}|${g.model}|${g.modelId}`, g._count]));
104
- const out = emptyTotals();
105
- out.unpriced = unpriced;
106
- out.currency = first?.costCurrency ?? undefined;
107
- for (const g of groups) {
168
+ const estimatedOf = new Map(estimatedByGroup.map((g) => [keyOf(g), g._count]));
169
+ // First-seen order, as every other adapter gives it.
170
+ const at = (g) => new Date(g._min?.createdAt ?? 0).getTime();
171
+ const merge = new UsageMerger();
172
+ for (const g of [...groups].sort((a, b) => at(a) - at(b))) {
108
173
  const n = (k) => Number(g._sum[k] ?? 0);
109
- out.inputTokens += n('inputTokens');
110
- out.cachedInputTokens += n('cachedInputTokens');
111
- out.outputTokens += n('outputTokens');
112
- out.totalTokens += n('totalTokens');
113
- out.costMicros += n('costMicros');
114
- out.lines.push({
115
- agentId: g.agentId, agentName: g.agentName, model: g.model, modelId: g.modelId,
116
- inputTokens: n('inputTokens'),
117
- cacheReadInputTokens: n('cachedInputTokens'),
118
- cacheWriteInputTokens: n('cacheWriteInputTokens'),
119
- outputTokens: n('outputTokens'),
120
- reasoningTokens: n('reasoningTokens'),
121
- calls: g._count,
122
- estimated: estimatedOf.get(`${g.agentId}|${g.agentName}|${g.model}|${g.modelId}`) ?? 0,
123
- costMicros: n('costMicros'),
174
+ merge.add({
175
+ line: {
176
+ agentId: g.agentId, agentName: g.agentName, model: g.model, modelId: g.modelId,
177
+ inputTokens: n('inputTokens'),
178
+ cacheReadInputTokens: n('cachedInputTokens'),
179
+ cacheWriteInputTokens: n('cacheWriteInputTokens'),
180
+ outputTokens: n('outputTokens'),
181
+ reasoningTokens: n('reasoningTokens'),
182
+ calls: g._count,
183
+ estimated: estimatedOf.get(keyOf(g)) ?? 0,
184
+ costMicros: n('costMicros'),
185
+ },
186
+ currency: g.costCurrency,
187
+ totalTokens: n('totalTokens'),
188
+ unpriced: g.costCurrency ? 0 : g._count,
124
189
  });
125
190
  }
126
- return out;
191
+ return merge.totals();
127
192
  },
128
193
  record: async (threadId, usage) => {
129
194
  await this.prisma.tokenUsage.create({
@@ -153,4 +218,180 @@ export class PrismaStorage {
153
218
  },
154
219
  };
155
220
  }
221
+ /** A record row as an event: `runId` only when the entry has one, as the
222
+ * other stores and the Go runtime send it. */
223
+ function withRun(row) {
224
+ const { runId, ...rest } = row;
225
+ delete rest.id;
226
+ return runId ? { ...rest, runId } : rest;
227
+ }
228
+ /** RunStreams over Prisma: one RunStream row per stream and one
229
+ * RunStreamEvent row per event, whose autoincrement key is the offset.
230
+ *
231
+ * An append first runs a no-op UPDATE on the stream row where it is still
232
+ * open. That takes the row's lock, so a close waits for the append to
233
+ * commit, or the append finds the stream closed: an event can never land
234
+ * after the end item. Readers in this process wake on its own appends; one
235
+ * in another process sees them on its next poll. */
236
+ export class PrismaRunStreams {
237
+ prisma;
238
+ opts;
239
+ waiters = new Map();
240
+ swept = 0;
241
+ constructor(prisma, opts = {}) {
242
+ this.prisma = prisma;
243
+ this.opts = opts;
244
+ }
245
+ wake(streamId) {
246
+ const set = this.waiters.get(streamId);
247
+ this.waiters.delete(streamId);
248
+ for (const wake of set ?? [])
249
+ wake();
250
+ }
251
+ arm(streamId) {
252
+ let wake;
253
+ const woken = new Promise((resolve) => { wake = resolve; });
254
+ let set = this.waiters.get(streamId);
255
+ if (!set) {
256
+ set = new Set();
257
+ this.waiters.set(streamId, set);
258
+ }
259
+ set.add(wake);
260
+ const disarm = () => {
261
+ const s = this.waiters.get(streamId);
262
+ s?.delete(wake);
263
+ if (s && s.size === 0)
264
+ this.waiters.delete(streamId);
265
+ };
266
+ return { woken, disarm };
267
+ }
268
+ async sweep() {
269
+ if (Date.now() - this.swept < 60_000)
270
+ return;
271
+ this.swept = Date.now();
272
+ const gone = await this.prisma.runStream.findMany({
273
+ where: { expiresAt: { lte: new Date() } }, select: { id: true }, take: 500,
274
+ });
275
+ for (const { id } of gone)
276
+ await this.remove(id);
277
+ }
278
+ remove(streamId) {
279
+ return this.prisma.$transaction(async (tx) => {
280
+ await tx.runStreamEvent.deleteMany({ where: { streamId } });
281
+ await tx.runStream.deleteMany({ where: { id: streamId } });
282
+ });
283
+ }
284
+ async open(streamId, meta, ttlMs) {
285
+ await this.sweep();
286
+ // A row past its expiry is gone: replace it rather than reopen it.
287
+ await this.prisma.runStream.deleteMany({ where: { id: streamId, expiresAt: { lte: new Date() } } });
288
+ try {
289
+ await this.prisma.runStream.create({
290
+ data: { id: streamId, threadId: meta.threadId, runId: meta.runId, closed: false, expiresAt: new Date(Date.now() + ttlMs) },
291
+ });
292
+ }
293
+ catch (err) {
294
+ if (err?.code !== 'P2002')
295
+ throw err; // already open
296
+ }
297
+ }
298
+ /** Locks the stream row inside tx, or says why it cannot. */
299
+ async lock(tx, streamId) {
300
+ const { count } = await tx.runStream.updateMany({
301
+ where: { id: streamId, closed: false, expiresAt: { gt: new Date() } },
302
+ data: { closed: false },
303
+ });
304
+ if (count === 1)
305
+ return 'open';
306
+ const row = await tx.runStream.findUnique({ where: { id: streamId } });
307
+ return row && row.expiresAt > new Date() ? 'closed' : 'gone';
308
+ }
309
+ async append(streamId, events) {
310
+ if (events.length === 0)
311
+ return [];
312
+ const offsets = await this.prisma.$transaction(async (tx) => {
313
+ const state = await this.lock(tx, streamId);
314
+ if (state === 'gone')
315
+ throw new StreamGoneError(streamId);
316
+ if (state === 'closed')
317
+ throw new StreamClosedError(streamId);
318
+ const out = [];
319
+ for (const e of events) {
320
+ const row = await tx.runStreamEvent.create({ data: { streamId, event: JSON.stringify(e) } });
321
+ out.push(String(row.pos));
322
+ }
323
+ return out;
324
+ });
325
+ this.wake(streamId);
326
+ return offsets;
327
+ }
328
+ async close(streamId, end, graceMs) {
329
+ await this.prisma.$transaction(async (tx) => {
330
+ const state = await this.lock(tx, streamId);
331
+ if (state === 'gone')
332
+ throw new StreamGoneError(streamId);
333
+ if (state === 'closed')
334
+ return;
335
+ await tx.runStreamEvent.create({ data: { streamId, event: JSON.stringify(end) } });
336
+ await tx.runStream.updateMany({
337
+ where: { id: streamId },
338
+ data: { closed: true, endEvent: JSON.stringify(end), expiresAt: new Date(Date.now() + graceMs) },
339
+ });
340
+ });
341
+ this.wake(streamId);
342
+ }
343
+ async delete(streamId) {
344
+ await this.remove(streamId);
345
+ this.wake(streamId);
346
+ }
347
+ async page(streamId, after) {
348
+ const row = await this.prisma.runStream.findUnique({ where: { id: streamId } });
349
+ if (!row || row.expiresAt <= new Date())
350
+ return null;
351
+ const rows = await this.prisma.runStreamEvent.findMany({
352
+ where: { streamId, pos: { gt: BigInt(after ?? 0) } },
353
+ orderBy: { pos: 'asc' },
354
+ });
355
+ return {
356
+ meta: { threadId: row.threadId, runId: row.runId },
357
+ closed: row.closed,
358
+ end: row.closed && row.endEvent ? JSON.parse(row.endEvent) : null,
359
+ items: rows.map((r) => ({ ...JSON.parse(r.event), offset: String(r.pos) })),
360
+ };
361
+ }
362
+ async *read(streamId, after, signal) {
363
+ let cursor = after;
364
+ for (;;) {
365
+ if (signal?.aborted)
366
+ return;
367
+ const { woken, disarm } = this.arm(streamId);
368
+ const page = await this.page(streamId, cursor);
369
+ if (!page) {
370
+ disarm();
371
+ throw new StreamGoneError(streamId);
372
+ }
373
+ if (page.items.length > 0)
374
+ disarm();
375
+ for (const item of page.items) {
376
+ yield item;
377
+ cursor = item.offset;
378
+ if (isStreamEnd(item))
379
+ return;
380
+ }
381
+ if (page.items.length > 0)
382
+ continue;
383
+ // Read from past the end item: nothing more will ever come.
384
+ if (page.closed) {
385
+ disarm();
386
+ return;
387
+ }
388
+ await Promise.race([woken, sleep(this.opts.pollMs ?? 250, signal)]);
389
+ disarm();
390
+ }
391
+ }
392
+ async snapshot(streamId, after) {
393
+ const page = await this.page(streamId, after ?? null);
394
+ return page && { meta: page.meta, items: page.items, end: page.end };
395
+ }
396
+ }
156
397
  //# sourceMappingURL=prisma.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../src/adapters/prisma.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prisma.js","sourceRoot":"","sources":["../../src/adapters/prisma.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { EnqueueOptions, Queue } from '../ports/queue.js';
1
+ import { type EnqueueOptions, type Queue, type QueueStats, type QueuedJob } from '../ports/queue.js';
2
2
  import type { RunJob } from '../core/types.js';
3
3
  /** Minimal structural type of the @upstash/qstash (v2) client we use. */
4
4
  export interface QStashLike {
@@ -8,6 +8,7 @@ export interface QStashLike {
8
8
  enqueueJSON(a: {
9
9
  url: string;
10
10
  body: unknown;
11
+ deduplicationId?: string;
11
12
  }): Promise<unknown>;
12
13
  };
13
14
  /** `delay` is in seconds. QStash supports it on publish only — an enqueue
@@ -18,6 +19,7 @@ export interface QStashLike {
18
19
  url: string;
19
20
  body: unknown;
20
21
  delay?: number;
22
+ deduplicationId?: string;
21
23
  }): Promise<unknown>;
22
24
  }
23
25
  export interface QStashQueueOptions {
@@ -26,11 +28,22 @@ export interface QStashQueueOptions {
26
28
  /** Queue name for flow control (§2.8). Defaults to `agent-runs`. */
27
29
  queueName?: string;
28
30
  }
29
- /** Reference Queue adapter over Upstash QStash HTTP queues. */
31
+ /** Reference Queue adapter over Upstash QStash HTTP queues.
32
+ *
33
+ * A job's `key` dedupes on QStash's side (its deduplication id). QStash
34
+ * remembers an id for ten minutes, not for as long as the message waits, so
35
+ * a key reused after that goes out again; every caller treats a second
36
+ * delivery as a no-op. QStash has no priorities, cannot withdraw a message by
37
+ * key, and has no read side: `priority` is ignored, `cancel` does nothing
38
+ * (the delivered job is a correct no-op), and `find` / `stats` throw
39
+ * `UnsupportedError`. */
30
40
  export declare class QStashQueue implements Queue {
31
41
  private readonly client;
32
42
  private readonly opts;
33
43
  constructor(client: QStashLike, opts: QStashQueueOptions);
34
44
  enqueue(job: RunJob, opts?: EnqueueOptions): Promise<void>;
45
+ cancel(_key: string): Promise<void>;
46
+ find(_runId: string): Promise<QueuedJob | null>;
47
+ stats(): Promise<QueueStats>;
35
48
  }
36
49
  //# sourceMappingURL=qstash.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"qstash.d.ts","sourceRoot":"","sources":["../../src/adapters/qstash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,yEAAyE;AACzE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG;QAC/B,WAAW,CAAC,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAClE,CAAC;IACF;;;mCAG+B;IAC/B,WAAW,CAAC,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAClF;AAED,MAAM,WAAW,kBAAkB;IACjC,qFAAqF;IACrF,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,+DAA+D;AAC/D,qBAAa,WAAY,YAAW,KAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAc,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAzC,MAAM,EAAE,UAAU,EAAmB,IAAI,EAAE,kBAAkB;IAE1F,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAiB3D"}
1
+ {"version":3,"file":"qstash.d.ts","sourceRoot":"","sources":["../../src/adapters/qstash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,cAAc,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC1I,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAS/C,yEAAyE;AACzE,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG;QAC/B,WAAW,CAAC,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,OAAO,CAAC;YAAC,eAAe,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC5F,CAAC;IACF;;;mCAG+B;IAC/B,WAAW,CAAC,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5G;AAED,MAAM,WAAW,kBAAkB;IACjC,qFAAqF;IACrF,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;0BAQ0B;AAC1B,qBAAa,WAAY,YAAW,KAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAc,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAzC,MAAM,EAAE,UAAU,EAAmB,IAAI,EAAE,kBAAkB;IAEpF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB1D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAEnC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAI/C,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;CAGnC"}
@@ -1,4 +1,13 @@
1
- /** Reference Queue adapter over Upstash QStash HTTP queues. */
1
+ import { DuplicateJobError, UnsupportedError } from '../ports/queue.js';
2
+ /** Reference Queue adapter over Upstash QStash HTTP queues.
3
+ *
4
+ * A job's `key` dedupes on QStash's side (its deduplication id). QStash
5
+ * remembers an id for ten minutes, not for as long as the message waits, so
6
+ * a key reused after that goes out again; every caller treats a second
7
+ * delivery as a no-op. QStash has no priorities, cannot withdraw a message by
8
+ * key, and has no read side: `priority` is ignored, `cancel` does nothing
9
+ * (the delivered job is a correct no-op), and `find` / `stats` throw
10
+ * `UnsupportedError`. */
2
11
  export class QStashQueue {
3
12
  client;
4
13
  opts;
@@ -6,21 +15,29 @@ export class QStashQueue {
6
15
  this.client = client;
7
16
  this.opts = opts;
8
17
  }
9
- enqueue(job, opts) {
18
+ async enqueue(job, opts) {
19
+ const dedupe = opts?.key ? { deduplicationId: opts.key } : {};
10
20
  // A delayed job goes out as a published message rather than a queued one:
11
21
  // QStash rejects Upstash-Delay on enqueue. The trade is that this one
12
- // message skips the queue's flow control — acceptable for the two things
13
- // that ask for a delay (a HITL expiry and a blocked job's redrive), since
14
- // both are single messages the run lock already serializes.
15
- if (opts?.delaySeconds) {
16
- return this.client
17
- .publishJSON({ url: this.opts.url, body: job, delay: opts.delaySeconds })
18
- .then(() => undefined);
19
- }
20
- return this.client
21
- .queue({ queueName: this.opts.queueName ?? 'agent-runs' })
22
- .enqueueJSON({ url: this.opts.url, body: job })
23
- .then(() => undefined);
22
+ // message skips the queue's flow control — acceptable for the things that
23
+ // ask for a delay (a HITL expiry, a retry backoff, a blocked job's
24
+ // redrive), since the run lock already serializes them.
25
+ const res = (opts?.delaySeconds
26
+ ? await this.client.publishJSON({
27
+ url: this.opts.url, body: job, delay: Math.max(1, Math.ceil(opts.delaySeconds)), ...dedupe,
28
+ })
29
+ : await this.client
30
+ .queue({ queueName: this.opts.queueName ?? 'agent-runs' })
31
+ .enqueueJSON({ url: this.opts.url, body: job, ...dedupe }));
32
+ if (opts?.key && res?.deduplicated)
33
+ throw new DuplicateJobError(opts.key);
34
+ }
35
+ async cancel(_key) { }
36
+ async find(_runId) {
37
+ throw new UnsupportedError('QStashQueue.find');
38
+ }
39
+ async stats() {
40
+ throw new UnsupportedError('QStashQueue.stats');
24
41
  }
25
42
  }
26
43
  //# sourceMappingURL=qstash.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"qstash.js","sourceRoot":"","sources":["../../src/adapters/qstash.ts"],"names":[],"mappings":"AAsBA,+DAA+D;AAC/D,MAAM,OAAO,WAAW;IACO;IAAqC;IAAlE,YAA6B,MAAkB,EAAmB,IAAwB;QAA7D,WAAM,GAAN,MAAM,CAAY;QAAmB,SAAI,GAAJ,IAAI,CAAoB;IAAG,CAAC;IAE9F,OAAO,CAAC,GAAW,EAAE,IAAqB;QACxC,0EAA0E;QAC1E,sEAAsE;QACtE,yEAAyE;QACzE,0EAA0E;QAC1E,4DAA4D;QAC5D,IAAI,IAAI,EAAE,YAAY,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM;iBACf,WAAW,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;iBACxE,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC,MAAM;aACf,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,YAAY,EAAE,CAAC;aACzD,WAAW,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;aAC9C,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"qstash.js","sourceRoot":"","sources":["../../src/adapters/qstash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAoE,MAAM,mBAAmB,CAAC;AA6B1I;;;;;;;;0BAQ0B;AAC1B,MAAM,OAAO,WAAW;IACO;IAAqC;IAAlE,YAA6B,MAAkB,EAAmB,IAAwB;QAA7D,WAAM,GAAN,MAAM,CAAY;QAAmB,SAAI,GAAJ,IAAI,CAAoB;IAAG,CAAC;IAE9F,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,IAAqB;QAC9C,MAAM,MAAM,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,0EAA0E;QAC1E,sEAAsE;QACtE,0EAA0E;QAC1E,mEAAmE;QACnE,wDAAwD;QACxD,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,YAAY;YAC7B,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC5B,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,MAAM;aAC3F,CAAC;YACJ,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM;iBACd,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,YAAY,EAAE,CAAC;iBACzD,WAAW,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,CAA6B,CAAC;QAC9F,IAAI,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,YAAY;YAAE,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,IAAkB,CAAC;IAE5C,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,MAAM,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;IAClD,CAAC;CACF"}