@amalgm/chat 0.1.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 (183) hide show
  1. package/PURPOSE.md +107 -0
  2. package/README.md +41 -0
  3. package/dist/contract/chat-input.d.ts +144 -0
  4. package/dist/contract/chat-input.d.ts.map +1 -0
  5. package/dist/contract/chat-input.js +261 -0
  6. package/dist/contract/chat-input.js.map +1 -0
  7. package/dist/contract/create.d.ts +191 -0
  8. package/dist/contract/create.d.ts.map +1 -0
  9. package/dist/contract/create.js +249 -0
  10. package/dist/contract/create.js.map +1 -0
  11. package/dist/contract/freeze.d.ts +85 -0
  12. package/dist/contract/freeze.d.ts.map +1 -0
  13. package/dist/contract/freeze.js +151 -0
  14. package/dist/contract/freeze.js.map +1 -0
  15. package/dist/contract/harnesses.d.ts +21 -0
  16. package/dist/contract/harnesses.d.ts.map +1 -0
  17. package/dist/contract/harnesses.js +39 -0
  18. package/dist/contract/harnesses.js.map +1 -0
  19. package/dist/contract/index.d.ts +17 -0
  20. package/dist/contract/index.d.ts.map +1 -0
  21. package/dist/contract/index.js +17 -0
  22. package/dist/contract/index.js.map +1 -0
  23. package/dist/contract/input.d.ts +45 -0
  24. package/dist/contract/input.d.ts.map +1 -0
  25. package/dist/contract/input.js +78 -0
  26. package/dist/contract/input.js.map +1 -0
  27. package/dist/contract/models.d.ts +57 -0
  28. package/dist/contract/models.d.ts.map +1 -0
  29. package/dist/contract/models.js +380 -0
  30. package/dist/contract/models.js.map +1 -0
  31. package/dist/contract/payload-merge.d.ts +76 -0
  32. package/dist/contract/payload-merge.d.ts.map +1 -0
  33. package/dist/contract/payload-merge.js +215 -0
  34. package/dist/contract/payload-merge.js.map +1 -0
  35. package/dist/events/constructors.d.ts +53 -0
  36. package/dist/events/constructors.d.ts.map +1 -0
  37. package/dist/events/constructors.js +217 -0
  38. package/dist/events/constructors.js.map +1 -0
  39. package/dist/events/index.d.ts +12 -0
  40. package/dist/events/index.d.ts.map +1 -0
  41. package/dist/events/index.js +12 -0
  42. package/dist/events/index.js.map +1 -0
  43. package/dist/events/schema.d.ts +455 -0
  44. package/dist/events/schema.d.ts.map +1 -0
  45. package/dist/events/schema.js +228 -0
  46. package/dist/events/schema.js.map +1 -0
  47. package/dist/events/tool-display.d.ts +22 -0
  48. package/dist/events/tool-display.d.ts.map +1 -0
  49. package/dist/events/tool-display.js +60 -0
  50. package/dist/events/tool-display.js.map +1 -0
  51. package/dist/events/tool-shape.d.ts +48 -0
  52. package/dist/events/tool-shape.d.ts.map +1 -0
  53. package/dist/events/tool-shape.js +225 -0
  54. package/dist/events/tool-shape.js.map +1 -0
  55. package/dist/index.d.ts +27 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +26 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/normalizers/claude.d.ts +628 -0
  60. package/dist/normalizers/claude.d.ts.map +1 -0
  61. package/dist/normalizers/claude.js +603 -0
  62. package/dist/normalizers/claude.js.map +1 -0
  63. package/dist/normalizers/codex.d.ts +352 -0
  64. package/dist/normalizers/codex.d.ts.map +1 -0
  65. package/dist/normalizers/codex.js +485 -0
  66. package/dist/normalizers/codex.js.map +1 -0
  67. package/dist/normalizers/cursor.d.ts +34 -0
  68. package/dist/normalizers/cursor.d.ts.map +1 -0
  69. package/dist/normalizers/cursor.js +197 -0
  70. package/dist/normalizers/cursor.js.map +1 -0
  71. package/dist/normalizers/index.d.ts +13 -0
  72. package/dist/normalizers/index.d.ts.map +1 -0
  73. package/dist/normalizers/index.js +13 -0
  74. package/dist/normalizers/index.js.map +1 -0
  75. package/dist/normalizers/opencode.d.ts +81 -0
  76. package/dist/normalizers/opencode.d.ts.map +1 -0
  77. package/dist/normalizers/opencode.js +640 -0
  78. package/dist/normalizers/opencode.js.map +1 -0
  79. package/dist/normalizers/pi.d.ts +28 -0
  80. package/dist/normalizers/pi.d.ts.map +1 -0
  81. package/dist/normalizers/pi.js +160 -0
  82. package/dist/normalizers/pi.js.map +1 -0
  83. package/dist/ports.d.ts +14 -0
  84. package/dist/ports.d.ts.map +1 -0
  85. package/dist/ports.js +7 -0
  86. package/dist/ports.js.map +1 -0
  87. package/dist/transcript/index.d.ts +14 -0
  88. package/dist/transcript/index.d.ts.map +1 -0
  89. package/dist/transcript/index.js +12 -0
  90. package/dist/transcript/index.js.map +1 -0
  91. package/dist/transcript/message-reducer.d.ts +167 -0
  92. package/dist/transcript/message-reducer.d.ts.map +1 -0
  93. package/dist/transcript/message-reducer.js +400 -0
  94. package/dist/transcript/message-reducer.js.map +1 -0
  95. package/dist/transcript/part-accumulator.d.ts +24 -0
  96. package/dist/transcript/part-accumulator.d.ts.map +1 -0
  97. package/dist/transcript/part-accumulator.js +30 -0
  98. package/dist/transcript/part-accumulator.js.map +1 -0
  99. package/dist/transcript/tool-display.d.ts +14 -0
  100. package/dist/transcript/tool-display.d.ts.map +1 -0
  101. package/dist/transcript/tool-display.js +125 -0
  102. package/dist/transcript/tool-display.js.map +1 -0
  103. package/dist/transcript/tool-shape.d.ts +34 -0
  104. package/dist/transcript/tool-shape.d.ts.map +1 -0
  105. package/dist/transcript/tool-shape.js +216 -0
  106. package/dist/transcript/tool-shape.js.map +1 -0
  107. package/dist/turns/index.d.ts +11 -0
  108. package/dist/turns/index.d.ts.map +1 -0
  109. package/dist/turns/index.js +11 -0
  110. package/dist/turns/index.js.map +1 -0
  111. package/dist/turns/queries.d.ts +36 -0
  112. package/dist/turns/queries.d.ts.map +1 -0
  113. package/dist/turns/queries.js +37 -0
  114. package/dist/turns/queries.js.map +1 -0
  115. package/dist/turns/replay.d.ts +105 -0
  116. package/dist/turns/replay.d.ts.map +1 -0
  117. package/dist/turns/replay.js +163 -0
  118. package/dist/turns/replay.js.map +1 -0
  119. package/dist/turns/status.d.ts +49 -0
  120. package/dist/turns/status.d.ts.map +1 -0
  121. package/dist/turns/status.js +56 -0
  122. package/dist/turns/status.js.map +1 -0
  123. package/dist/turns/turn-store.d.ts +109 -0
  124. package/dist/turns/turn-store.d.ts.map +1 -0
  125. package/dist/turns/turn-store.js +169 -0
  126. package/dist/turns/turn-store.js.map +1 -0
  127. package/dist/usage/finalize.d.ts +57 -0
  128. package/dist/usage/finalize.d.ts.map +1 -0
  129. package/dist/usage/finalize.js +139 -0
  130. package/dist/usage/finalize.js.map +1 -0
  131. package/dist/usage/index.d.ts +11 -0
  132. package/dist/usage/index.d.ts.map +1 -0
  133. package/dist/usage/index.js +11 -0
  134. package/dist/usage/index.js.map +1 -0
  135. package/dist/usage/model-catalog.d.ts +50 -0
  136. package/dist/usage/model-catalog.d.ts.map +1 -0
  137. package/dist/usage/model-catalog.js +344 -0
  138. package/dist/usage/model-catalog.js.map +1 -0
  139. package/dist/usage/normalize.d.ts +103 -0
  140. package/dist/usage/normalize.d.ts.map +1 -0
  141. package/dist/usage/normalize.js +71 -0
  142. package/dist/usage/normalize.js.map +1 -0
  143. package/dist/usage/ports.d.ts +141 -0
  144. package/dist/usage/ports.d.ts.map +1 -0
  145. package/dist/usage/ports.js +113 -0
  146. package/dist/usage/ports.js.map +1 -0
  147. package/dist/usage/tokens.d.ts +79 -0
  148. package/dist/usage/tokens.d.ts.map +1 -0
  149. package/dist/usage/tokens.js +98 -0
  150. package/dist/usage/tokens.js.map +1 -0
  151. package/dist/warm/client-cache.d.ts +47 -0
  152. package/dist/warm/client-cache.d.ts.map +1 -0
  153. package/dist/warm/client-cache.js +48 -0
  154. package/dist/warm/client-cache.js.map +1 -0
  155. package/dist/warm/envelope-cache.d.ts +79 -0
  156. package/dist/warm/envelope-cache.d.ts.map +1 -0
  157. package/dist/warm/envelope-cache.js +85 -0
  158. package/dist/warm/envelope-cache.js.map +1 -0
  159. package/dist/warm/index.d.ts +16 -0
  160. package/dist/warm/index.d.ts.map +1 -0
  161. package/dist/warm/index.js +11 -0
  162. package/dist/warm/index.js.map +1 -0
  163. package/dist/warm/payload.d.ts +137 -0
  164. package/dist/warm/payload.d.ts.map +1 -0
  165. package/dist/warm/payload.js +112 -0
  166. package/dist/warm/payload.js.map +1 -0
  167. package/dist/warm/revision.d.ts +70 -0
  168. package/dist/warm/revision.d.ts.map +1 -0
  169. package/dist/warm/revision.js +63 -0
  170. package/dist/warm/revision.js.map +1 -0
  171. package/dist/warm/store-policy.d.ts +57 -0
  172. package/dist/warm/store-policy.d.ts.map +1 -0
  173. package/dist/warm/store-policy.js +89 -0
  174. package/dist/warm/store-policy.js.map +1 -0
  175. package/dist/wire/frames.d.ts +208 -0
  176. package/dist/wire/frames.d.ts.map +1 -0
  177. package/dist/wire/frames.js +245 -0
  178. package/dist/wire/frames.js.map +1 -0
  179. package/dist/wire/index.d.ts +7 -0
  180. package/dist/wire/index.d.ts.map +1 -0
  181. package/dist/wire/index.js +7 -0
  182. package/dist/wire/index.js.map +1 -0
  183. package/package.json +72 -0
@@ -0,0 +1,455 @@
1
+ /**
2
+ * Canonical amalgm event grammar — engine `chat-core/event-schema.js`
3
+ * (239 lines) ported byte-exact on zod v4 (engine pins zod ^4.4.3; this
4
+ * package pins the same major+minor so validation output and issue
5
+ * messages match).
6
+ *
7
+ * The discriminated union over `type` is the product's spine: every native
8
+ * harness event is normalized into one of these twelve shapes before it
9
+ * touches the wire, the reducer, or the transcript.
10
+ */
11
+ import { z } from 'zod';
12
+ /** Engine event-schema.js:17-40 — 21 kinds including the legacy ACP-ish tail. */
13
+ declare const toolKind: z.ZodEnum<{
14
+ unknown: "unknown";
15
+ web_search: "web_search";
16
+ browser: "browser";
17
+ file_read: "file_read";
18
+ file_write: "file_write";
19
+ file_edit: "file_edit";
20
+ bash: "bash";
21
+ subagent: "subagent";
22
+ mcp: "mcp";
23
+ question: "question";
24
+ todo: "todo";
25
+ read: "read";
26
+ edit: "edit";
27
+ delete: "delete";
28
+ move: "move";
29
+ search: "search";
30
+ execute: "execute";
31
+ think: "think";
32
+ fetch: "fetch";
33
+ switch_mode: "switch_mode";
34
+ other: "other";
35
+ }>;
36
+ export declare const usageSnapshot: z.ZodObject<{
37
+ tokenList: z.ZodObject<{
38
+ input: z.ZodNumber;
39
+ output: z.ZodNumber;
40
+ cacheRead: z.ZodNumber;
41
+ cacheWrite: z.ZodNumber;
42
+ thought: z.ZodNumber;
43
+ total: z.ZodNumber;
44
+ }, z.core.$strict>;
45
+ cumulativeTokenList: z.ZodNullable<z.ZodObject<{
46
+ input: z.ZodNumber;
47
+ output: z.ZodNumber;
48
+ cacheRead: z.ZodNumber;
49
+ cacheWrite: z.ZodNumber;
50
+ thought: z.ZodNumber;
51
+ total: z.ZodNumber;
52
+ }, z.core.$strict>>;
53
+ previousCumulativeTokenList: z.ZodNullable<z.ZodObject<{
54
+ input: z.ZodNumber;
55
+ output: z.ZodNumber;
56
+ cacheRead: z.ZodNumber;
57
+ cacheWrite: z.ZodNumber;
58
+ thought: z.ZodNumber;
59
+ total: z.ZodNumber;
60
+ }, z.core.$strict>>;
61
+ inputTokens: z.ZodNumber;
62
+ outputTokens: z.ZodNumber;
63
+ cacheReadTokens: z.ZodNumber;
64
+ cacheWriteTokens: z.ZodNumber;
65
+ thoughtTokens: z.ZodNumber;
66
+ inputContextSize: z.ZodNumber;
67
+ contextUsedTokens: z.ZodNullable<z.ZodNumber>;
68
+ contextLimit: z.ZodNullable<z.ZodNumber>;
69
+ usedTokens: z.ZodNullable<z.ZodNumber>;
70
+ lastUsedTokens: z.ZodNullable<z.ZodNumber>;
71
+ maxTokens: z.ZodNullable<z.ZodNumber>;
72
+ totalProcessedTokens: z.ZodNullable<z.ZodNumber>;
73
+ costUsd: z.ZodNullable<z.ZodNumber>;
74
+ marketCostUsd: z.ZodNullable<z.ZodNumber>;
75
+ operation: z.ZodString;
76
+ billable: z.ZodBoolean;
77
+ source: z.ZodString;
78
+ exact: z.ZodBoolean;
79
+ }, z.core.$strict>;
80
+ declare const compactionTrigger: z.ZodEnum<{
81
+ auto: "auto";
82
+ manual: "manual";
83
+ model_triggered: "model_triggered";
84
+ }>;
85
+ export declare const amalgmEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
86
+ ts: z.ZodNumber;
87
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
88
+ raw: z.ZodOptional<z.ZodObject<{
89
+ source: z.ZodString;
90
+ method: z.ZodOptional<z.ZodString>;
91
+ payload: z.ZodOptional<z.ZodUnknown>;
92
+ }, z.core.$strict>>;
93
+ type: z.ZodLiteral<"text.delta">;
94
+ text: z.ZodString;
95
+ streamKind: z.ZodOptional<z.ZodLiteral<"text">>;
96
+ }, z.core.$strict>, z.ZodObject<{
97
+ ts: z.ZodNumber;
98
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
99
+ raw: z.ZodOptional<z.ZodObject<{
100
+ source: z.ZodString;
101
+ method: z.ZodOptional<z.ZodString>;
102
+ payload: z.ZodOptional<z.ZodUnknown>;
103
+ }, z.core.$strict>>;
104
+ type: z.ZodLiteral<"text.boundary">;
105
+ streamKind: z.ZodOptional<z.ZodLiteral<"text">>;
106
+ itemId: z.ZodOptional<z.ZodString>;
107
+ reason: z.ZodOptional<z.ZodString>;
108
+ }, z.core.$strict>, z.ZodObject<{
109
+ ts: z.ZodNumber;
110
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
111
+ raw: z.ZodOptional<z.ZodObject<{
112
+ source: z.ZodString;
113
+ method: z.ZodOptional<z.ZodString>;
114
+ payload: z.ZodOptional<z.ZodUnknown>;
115
+ }, z.core.$strict>>;
116
+ type: z.ZodLiteral<"reasoning.delta">;
117
+ text: z.ZodString;
118
+ streamKind: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"reasoning">, z.ZodLiteral<"plan">]>>;
119
+ }, z.core.$strict>, z.ZodObject<{
120
+ ts: z.ZodNumber;
121
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
122
+ raw: z.ZodOptional<z.ZodObject<{
123
+ source: z.ZodString;
124
+ method: z.ZodOptional<z.ZodString>;
125
+ payload: z.ZodOptional<z.ZodUnknown>;
126
+ }, z.core.$strict>>;
127
+ type: z.ZodLiteral<"tool.started">;
128
+ toolCallId: z.ZodString;
129
+ toolName: z.ZodString;
130
+ name: z.ZodOptional<z.ZodString>;
131
+ kind: z.ZodOptional<z.ZodEnum<{
132
+ unknown: "unknown";
133
+ web_search: "web_search";
134
+ browser: "browser";
135
+ file_read: "file_read";
136
+ file_write: "file_write";
137
+ file_edit: "file_edit";
138
+ bash: "bash";
139
+ subagent: "subagent";
140
+ mcp: "mcp";
141
+ question: "question";
142
+ todo: "todo";
143
+ read: "read";
144
+ edit: "edit";
145
+ delete: "delete";
146
+ move: "move";
147
+ search: "search";
148
+ execute: "execute";
149
+ think: "think";
150
+ fetch: "fetch";
151
+ switch_mode: "switch_mode";
152
+ other: "other";
153
+ }>>;
154
+ title: z.ZodOptional<z.ZodString>;
155
+ detail: z.ZodOptional<z.ZodString>;
156
+ input: z.ZodRecord<z.ZodString, z.ZodUnknown>;
157
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
158
+ timing: z.ZodOptional<z.ZodObject<{
159
+ startedAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
160
+ completedAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
161
+ elapsedMs: z.ZodOptional<z.ZodNumber>;
162
+ }, z.core.$loose>>;
163
+ data: z.ZodOptional<z.ZodUnknown>;
164
+ itemType: z.ZodOptional<z.ZodLiteral<"tool">>;
165
+ }, z.core.$strict>, z.ZodObject<{
166
+ ts: z.ZodNumber;
167
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
168
+ raw: z.ZodOptional<z.ZodObject<{
169
+ source: z.ZodString;
170
+ method: z.ZodOptional<z.ZodString>;
171
+ payload: z.ZodOptional<z.ZodUnknown>;
172
+ }, z.core.$strict>>;
173
+ type: z.ZodLiteral<"tool.updated">;
174
+ toolCallId: z.ZodString;
175
+ toolName: z.ZodOptional<z.ZodString>;
176
+ name: z.ZodOptional<z.ZodString>;
177
+ kind: z.ZodOptional<z.ZodEnum<{
178
+ unknown: "unknown";
179
+ web_search: "web_search";
180
+ browser: "browser";
181
+ file_read: "file_read";
182
+ file_write: "file_write";
183
+ file_edit: "file_edit";
184
+ bash: "bash";
185
+ subagent: "subagent";
186
+ mcp: "mcp";
187
+ question: "question";
188
+ todo: "todo";
189
+ read: "read";
190
+ edit: "edit";
191
+ delete: "delete";
192
+ move: "move";
193
+ search: "search";
194
+ execute: "execute";
195
+ think: "think";
196
+ fetch: "fetch";
197
+ switch_mode: "switch_mode";
198
+ other: "other";
199
+ }>>;
200
+ title: z.ZodOptional<z.ZodString>;
201
+ detail: z.ZodOptional<z.ZodString>;
202
+ inputDelta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
203
+ outputDelta: z.ZodOptional<z.ZodUnknown>;
204
+ output: z.ZodOptional<z.ZodUnknown>;
205
+ error: z.ZodOptional<z.ZodObject<{
206
+ message: z.ZodString;
207
+ code: z.ZodOptional<z.ZodString>;
208
+ details: z.ZodOptional<z.ZodUnknown>;
209
+ }, z.core.$loose>>;
210
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
211
+ timing: z.ZodOptional<z.ZodObject<{
212
+ startedAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
213
+ completedAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
214
+ elapsedMs: z.ZodOptional<z.ZodNumber>;
215
+ }, z.core.$loose>>;
216
+ data: z.ZodOptional<z.ZodUnknown>;
217
+ status: z.ZodOptional<z.ZodEnum<{
218
+ error: "error";
219
+ in_progress: "in_progress";
220
+ completed: "completed";
221
+ failed: "failed";
222
+ }>>;
223
+ itemType: z.ZodOptional<z.ZodLiteral<"tool">>;
224
+ }, z.core.$strict>, z.ZodObject<{
225
+ ts: z.ZodNumber;
226
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
227
+ raw: z.ZodOptional<z.ZodObject<{
228
+ source: z.ZodString;
229
+ method: z.ZodOptional<z.ZodString>;
230
+ payload: z.ZodOptional<z.ZodUnknown>;
231
+ }, z.core.$strict>>;
232
+ type: z.ZodLiteral<"tool.completed">;
233
+ toolCallId: z.ZodString;
234
+ toolName: z.ZodOptional<z.ZodString>;
235
+ name: z.ZodOptional<z.ZodString>;
236
+ kind: z.ZodOptional<z.ZodEnum<{
237
+ unknown: "unknown";
238
+ web_search: "web_search";
239
+ browser: "browser";
240
+ file_read: "file_read";
241
+ file_write: "file_write";
242
+ file_edit: "file_edit";
243
+ bash: "bash";
244
+ subagent: "subagent";
245
+ mcp: "mcp";
246
+ question: "question";
247
+ todo: "todo";
248
+ read: "read";
249
+ edit: "edit";
250
+ delete: "delete";
251
+ move: "move";
252
+ search: "search";
253
+ execute: "execute";
254
+ think: "think";
255
+ fetch: "fetch";
256
+ switch_mode: "switch_mode";
257
+ other: "other";
258
+ }>>;
259
+ title: z.ZodOptional<z.ZodString>;
260
+ detail: z.ZodOptional<z.ZodString>;
261
+ input: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
262
+ output: z.ZodOptional<z.ZodUnknown>;
263
+ result: z.ZodOptional<z.ZodUnknown>;
264
+ error: z.ZodOptional<z.ZodObject<{
265
+ message: z.ZodString;
266
+ code: z.ZodOptional<z.ZodString>;
267
+ details: z.ZodOptional<z.ZodUnknown>;
268
+ }, z.core.$loose>>;
269
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
270
+ timing: z.ZodOptional<z.ZodObject<{
271
+ startedAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
272
+ completedAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
273
+ elapsedMs: z.ZodOptional<z.ZodNumber>;
274
+ }, z.core.$loose>>;
275
+ data: z.ZodOptional<z.ZodUnknown>;
276
+ isError: z.ZodBoolean;
277
+ itemType: z.ZodOptional<z.ZodLiteral<"tool">>;
278
+ }, z.core.$strict>, z.ZodObject<{
279
+ ts: z.ZodNumber;
280
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
281
+ raw: z.ZodOptional<z.ZodObject<{
282
+ source: z.ZodString;
283
+ method: z.ZodOptional<z.ZodString>;
284
+ payload: z.ZodOptional<z.ZodUnknown>;
285
+ }, z.core.$strict>>;
286
+ type: z.ZodLiteral<"usage.final">;
287
+ usage: z.ZodObject<{
288
+ tokenList: z.ZodObject<{
289
+ input: z.ZodNumber;
290
+ output: z.ZodNumber;
291
+ cacheRead: z.ZodNumber;
292
+ cacheWrite: z.ZodNumber;
293
+ thought: z.ZodNumber;
294
+ total: z.ZodNumber;
295
+ }, z.core.$strict>;
296
+ cumulativeTokenList: z.ZodNullable<z.ZodObject<{
297
+ input: z.ZodNumber;
298
+ output: z.ZodNumber;
299
+ cacheRead: z.ZodNumber;
300
+ cacheWrite: z.ZodNumber;
301
+ thought: z.ZodNumber;
302
+ total: z.ZodNumber;
303
+ }, z.core.$strict>>;
304
+ previousCumulativeTokenList: z.ZodNullable<z.ZodObject<{
305
+ input: z.ZodNumber;
306
+ output: z.ZodNumber;
307
+ cacheRead: z.ZodNumber;
308
+ cacheWrite: z.ZodNumber;
309
+ thought: z.ZodNumber;
310
+ total: z.ZodNumber;
311
+ }, z.core.$strict>>;
312
+ inputTokens: z.ZodNumber;
313
+ outputTokens: z.ZodNumber;
314
+ cacheReadTokens: z.ZodNumber;
315
+ cacheWriteTokens: z.ZodNumber;
316
+ thoughtTokens: z.ZodNumber;
317
+ inputContextSize: z.ZodNumber;
318
+ contextUsedTokens: z.ZodNullable<z.ZodNumber>;
319
+ contextLimit: z.ZodNullable<z.ZodNumber>;
320
+ usedTokens: z.ZodNullable<z.ZodNumber>;
321
+ lastUsedTokens: z.ZodNullable<z.ZodNumber>;
322
+ maxTokens: z.ZodNullable<z.ZodNumber>;
323
+ totalProcessedTokens: z.ZodNullable<z.ZodNumber>;
324
+ costUsd: z.ZodNullable<z.ZodNumber>;
325
+ marketCostUsd: z.ZodNullable<z.ZodNumber>;
326
+ operation: z.ZodString;
327
+ billable: z.ZodBoolean;
328
+ source: z.ZodString;
329
+ exact: z.ZodBoolean;
330
+ }, z.core.$strict>;
331
+ }, z.core.$strict>, z.ZodObject<{
332
+ ts: z.ZodNumber;
333
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
334
+ raw: z.ZodOptional<z.ZodObject<{
335
+ source: z.ZodString;
336
+ method: z.ZodOptional<z.ZodString>;
337
+ payload: z.ZodOptional<z.ZodUnknown>;
338
+ }, z.core.$strict>>;
339
+ type: z.ZodLiteral<"compaction.started">;
340
+ trigger: z.ZodEnum<{
341
+ auto: "auto";
342
+ manual: "manual";
343
+ model_triggered: "model_triggered";
344
+ }>;
345
+ }, z.core.$strict>, z.ZodObject<{
346
+ ts: z.ZodNumber;
347
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
348
+ raw: z.ZodOptional<z.ZodObject<{
349
+ source: z.ZodString;
350
+ method: z.ZodOptional<z.ZodString>;
351
+ payload: z.ZodOptional<z.ZodUnknown>;
352
+ }, z.core.$strict>>;
353
+ type: z.ZodLiteral<"compaction.finished">;
354
+ trigger: z.ZodEnum<{
355
+ auto: "auto";
356
+ manual: "manual";
357
+ model_triggered: "model_triggered";
358
+ }>;
359
+ preTokens: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
360
+ postTokens: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
361
+ durationMs: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
362
+ }, z.core.$strict>, z.ZodObject<{
363
+ ts: z.ZodNumber;
364
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
365
+ raw: z.ZodOptional<z.ZodObject<{
366
+ source: z.ZodString;
367
+ method: z.ZodOptional<z.ZodString>;
368
+ payload: z.ZodOptional<z.ZodUnknown>;
369
+ }, z.core.$strict>>;
370
+ type: z.ZodLiteral<"warning">;
371
+ message: z.ZodString;
372
+ requestedModel: z.ZodOptional<z.ZodString>;
373
+ }, z.core.$strict>, z.ZodObject<{
374
+ ts: z.ZodNumber;
375
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
376
+ raw: z.ZodOptional<z.ZodObject<{
377
+ source: z.ZodString;
378
+ method: z.ZodOptional<z.ZodString>;
379
+ payload: z.ZodOptional<z.ZodUnknown>;
380
+ }, z.core.$strict>>;
381
+ type: z.ZodLiteral<"error">;
382
+ message: z.ZodString;
383
+ }, z.core.$strict>, z.ZodObject<{
384
+ ts: z.ZodNumber;
385
+ providerSessionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
386
+ raw: z.ZodOptional<z.ZodObject<{
387
+ source: z.ZodString;
388
+ method: z.ZodOptional<z.ZodString>;
389
+ payload: z.ZodOptional<z.ZodUnknown>;
390
+ }, z.core.$strict>>;
391
+ type: z.ZodLiteral<"done">;
392
+ stopReason: z.ZodString;
393
+ usage: z.ZodOptional<z.ZodObject<{
394
+ tokenList: z.ZodObject<{
395
+ input: z.ZodNumber;
396
+ output: z.ZodNumber;
397
+ cacheRead: z.ZodNumber;
398
+ cacheWrite: z.ZodNumber;
399
+ thought: z.ZodNumber;
400
+ total: z.ZodNumber;
401
+ }, z.core.$strict>;
402
+ cumulativeTokenList: z.ZodNullable<z.ZodObject<{
403
+ input: z.ZodNumber;
404
+ output: z.ZodNumber;
405
+ cacheRead: z.ZodNumber;
406
+ cacheWrite: z.ZodNumber;
407
+ thought: z.ZodNumber;
408
+ total: z.ZodNumber;
409
+ }, z.core.$strict>>;
410
+ previousCumulativeTokenList: z.ZodNullable<z.ZodObject<{
411
+ input: z.ZodNumber;
412
+ output: z.ZodNumber;
413
+ cacheRead: z.ZodNumber;
414
+ cacheWrite: z.ZodNumber;
415
+ thought: z.ZodNumber;
416
+ total: z.ZodNumber;
417
+ }, z.core.$strict>>;
418
+ inputTokens: z.ZodNumber;
419
+ outputTokens: z.ZodNumber;
420
+ cacheReadTokens: z.ZodNumber;
421
+ cacheWriteTokens: z.ZodNumber;
422
+ thoughtTokens: z.ZodNumber;
423
+ inputContextSize: z.ZodNumber;
424
+ contextUsedTokens: z.ZodNullable<z.ZodNumber>;
425
+ contextLimit: z.ZodNullable<z.ZodNumber>;
426
+ usedTokens: z.ZodNullable<z.ZodNumber>;
427
+ lastUsedTokens: z.ZodNullable<z.ZodNumber>;
428
+ maxTokens: z.ZodNullable<z.ZodNumber>;
429
+ totalProcessedTokens: z.ZodNullable<z.ZodNumber>;
430
+ costUsd: z.ZodNullable<z.ZodNumber>;
431
+ marketCostUsd: z.ZodNullable<z.ZodNumber>;
432
+ operation: z.ZodString;
433
+ billable: z.ZodBoolean;
434
+ source: z.ZodString;
435
+ exact: z.ZodBoolean;
436
+ }, z.core.$strict>>;
437
+ }, z.core.$strict>], "type">;
438
+ export type AmalgmEvent = z.infer<typeof amalgmEventSchema>;
439
+ export type UsageSnapshot = z.infer<typeof usageSnapshot>;
440
+ export type ToolKind = z.infer<typeof toolKind>;
441
+ export type CompactionTrigger = z.infer<typeof compactionTrigger>;
442
+ /**
443
+ * Additive export (the engine keeps the enum module-private): the tool-kind
444
+ * vocabulary, exposed because `src/events` owns the grammar's vocabularies.
445
+ */
446
+ export { toolKind as toolKindSchema };
447
+ /**
448
+ * Engine event-schema.js:221-228. Returns the parsed event or throws
449
+ * `Invalid Amalgm event <type>: <path>: <message>[; ...]` — the exact
450
+ * engine error string.
451
+ */
452
+ export declare function validateAmalgmEvent(value: unknown): AmalgmEvent;
453
+ /** Engine event-schema.js:230-232. */
454
+ export declare function validateAmalgmEvents(events: unknown[]): AmalgmEvent[];
455
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/events/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,iFAAiF;AACjF,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;EAuBZ,CAAC;AA6BH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAsBf,CAAC;AAgGZ,QAAA,MAAM,iBAAiB;;;;EAAgD,CAAC;AAexE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAa5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAC1D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAChD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE;;;GAGG;AACH,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,CAAC;AAMtC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAO/D;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAErE"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Canonical amalgm event grammar — engine `chat-core/event-schema.js`
3
+ * (239 lines) ported byte-exact on zod v4 (engine pins zod ^4.4.3; this
4
+ * package pins the same major+minor so validation output and issue
5
+ * messages match).
6
+ *
7
+ * The discriminated union over `type` is the product's spine: every native
8
+ * harness event is normalized into one of these twelve shapes before it
9
+ * touches the wire, the reducer, or the transcript.
10
+ */
11
+ import { z } from 'zod';
12
+ const positiveNumber = z.number().finite().positive();
13
+ const nonNegativeNumber = z.number().finite().min(0);
14
+ const nullablePositiveNumber = positiveNumber.nullable();
15
+ const providerSessionId = z.string().nullable().optional();
16
+ const unknownRecord = z.record(z.string(), z.unknown());
17
+ const rawEnvelope = z.object({
18
+ source: z.string().min(1),
19
+ method: z.string().min(1).optional(),
20
+ payload: z.unknown().optional(),
21
+ }).strict();
22
+ /** Engine event-schema.js:17-40 — 21 kinds including the legacy ACP-ish tail. */
23
+ const toolKind = z.enum([
24
+ 'web_search',
25
+ 'browser',
26
+ 'file_read',
27
+ 'file_write',
28
+ 'file_edit',
29
+ 'bash',
30
+ 'subagent',
31
+ 'mcp',
32
+ 'question',
33
+ 'todo',
34
+ 'unknown',
35
+ // Legacy ACP-ish kinds still emitted by older callers.
36
+ 'read',
37
+ 'edit',
38
+ 'delete',
39
+ 'move',
40
+ 'search',
41
+ 'execute',
42
+ 'think',
43
+ 'fetch',
44
+ 'switch_mode',
45
+ 'other',
46
+ ]);
47
+ const toolTiming = z.object({
48
+ startedAt: z.union([z.string(), z.number()]).optional(),
49
+ completedAt: z.union([z.string(), z.number()]).optional(),
50
+ elapsedMs: nonNegativeNumber.optional(),
51
+ }).passthrough();
52
+ const toolError = z.object({
53
+ message: z.string(),
54
+ code: z.string().optional(),
55
+ details: z.unknown().optional(),
56
+ }).passthrough();
57
+ const baseEvent = z.object({
58
+ ts: z.number().finite(),
59
+ providerSessionId,
60
+ raw: rawEnvelope.optional(),
61
+ }).passthrough();
62
+ const tokenList = z.object({
63
+ input: nonNegativeNumber,
64
+ output: nonNegativeNumber,
65
+ cacheRead: nonNegativeNumber,
66
+ cacheWrite: nonNegativeNumber,
67
+ thought: nonNegativeNumber,
68
+ total: nonNegativeNumber,
69
+ }).strict();
70
+ export const usageSnapshot = z.object({
71
+ tokenList,
72
+ cumulativeTokenList: tokenList.nullable(),
73
+ previousCumulativeTokenList: tokenList.nullable(),
74
+ inputTokens: nonNegativeNumber,
75
+ outputTokens: nonNegativeNumber,
76
+ cacheReadTokens: nonNegativeNumber,
77
+ cacheWriteTokens: nonNegativeNumber,
78
+ thoughtTokens: nonNegativeNumber,
79
+ inputContextSize: nonNegativeNumber,
80
+ contextUsedTokens: nullablePositiveNumber,
81
+ contextLimit: nullablePositiveNumber,
82
+ usedTokens: nullablePositiveNumber,
83
+ lastUsedTokens: nullablePositiveNumber,
84
+ maxTokens: nullablePositiveNumber,
85
+ totalProcessedTokens: nullablePositiveNumber,
86
+ costUsd: z.number().finite().nullable(),
87
+ marketCostUsd: z.number().finite().nullable(),
88
+ operation: z.string().min(1),
89
+ billable: z.boolean(),
90
+ source: z.string().min(1),
91
+ exact: z.boolean(),
92
+ }).strict();
93
+ const textDeltaEvent = baseEvent.extend({
94
+ type: z.literal('text.delta'),
95
+ text: z.string(),
96
+ streamKind: z.literal('text').optional(),
97
+ }).strict();
98
+ const textBoundaryEvent = baseEvent.extend({
99
+ type: z.literal('text.boundary'),
100
+ streamKind: z.literal('text').optional(),
101
+ itemId: z.string().optional(),
102
+ reason: z.string().optional(),
103
+ }).strict();
104
+ const reasoningDeltaEvent = baseEvent.extend({
105
+ type: z.literal('reasoning.delta'),
106
+ text: z.string(),
107
+ streamKind: z.union([z.literal('reasoning'), z.literal('plan')]).optional(),
108
+ }).strict();
109
+ const toolStartedEvent = baseEvent.extend({
110
+ type: z.literal('tool.started'),
111
+ toolCallId: z.string(),
112
+ toolName: z.string().min(1),
113
+ name: z.string().min(1).optional(),
114
+ kind: toolKind.optional(),
115
+ title: z.string().optional(),
116
+ detail: z.string().optional(),
117
+ input: unknownRecord,
118
+ metadata: unknownRecord.optional(),
119
+ timing: toolTiming.optional(),
120
+ data: z.unknown().optional(),
121
+ itemType: z.literal('tool').optional(),
122
+ }).strict();
123
+ const toolUpdatedEvent = baseEvent.extend({
124
+ type: z.literal('tool.updated'),
125
+ toolCallId: z.string(),
126
+ toolName: z.string().optional(),
127
+ name: z.string().optional(),
128
+ kind: toolKind.optional(),
129
+ title: z.string().optional(),
130
+ detail: z.string().optional(),
131
+ inputDelta: unknownRecord.optional(),
132
+ outputDelta: z.unknown().optional(),
133
+ output: z.unknown().optional(),
134
+ error: toolError.optional(),
135
+ metadata: unknownRecord.optional(),
136
+ timing: toolTiming.optional(),
137
+ data: z.unknown().optional(),
138
+ status: z.enum(['in_progress', 'completed', 'failed', 'error']).optional(),
139
+ itemType: z.literal('tool').optional(),
140
+ }).strict();
141
+ const toolCompletedEvent = baseEvent.extend({
142
+ type: z.literal('tool.completed'),
143
+ toolCallId: z.string(),
144
+ toolName: z.string().optional(),
145
+ name: z.string().optional(),
146
+ kind: toolKind.optional(),
147
+ title: z.string().optional(),
148
+ detail: z.string().optional(),
149
+ input: unknownRecord.optional(),
150
+ output: z.unknown().optional(),
151
+ result: z.unknown().optional(),
152
+ error: toolError.optional(),
153
+ metadata: unknownRecord.optional(),
154
+ timing: toolTiming.optional(),
155
+ data: z.unknown().optional(),
156
+ isError: z.boolean(),
157
+ itemType: z.literal('tool').optional(),
158
+ }).strict();
159
+ const usageFinalEvent = baseEvent.extend({
160
+ type: z.literal('usage.final'),
161
+ usage: usageSnapshot,
162
+ }).strict();
163
+ const warningEvent = baseEvent.extend({
164
+ type: z.literal('warning'),
165
+ message: z.string(),
166
+ requestedModel: z.string().optional(),
167
+ }).strict();
168
+ const errorEvent = baseEvent.extend({
169
+ type: z.literal('error'),
170
+ message: z.string(),
171
+ }).strict();
172
+ const doneEvent = baseEvent.extend({
173
+ type: z.literal('done'),
174
+ stopReason: z.string(),
175
+ usage: usageSnapshot.optional(),
176
+ }).strict();
177
+ const compactionTrigger = z.enum(['auto', 'manual', 'model_triggered']);
178
+ const compactionStartedEvent = baseEvent.extend({
179
+ type: z.literal('compaction.started'),
180
+ trigger: compactionTrigger,
181
+ }).strict();
182
+ const compactionFinishedEvent = baseEvent.extend({
183
+ type: z.literal('compaction.finished'),
184
+ trigger: compactionTrigger,
185
+ preTokens: nullablePositiveNumber.optional(),
186
+ postTokens: nullablePositiveNumber.optional(),
187
+ durationMs: nullablePositiveNumber.optional(),
188
+ }).strict();
189
+ export const amalgmEventSchema = z.discriminatedUnion('type', [
190
+ textDeltaEvent,
191
+ textBoundaryEvent,
192
+ reasoningDeltaEvent,
193
+ toolStartedEvent,
194
+ toolUpdatedEvent,
195
+ toolCompletedEvent,
196
+ usageFinalEvent,
197
+ compactionStartedEvent,
198
+ compactionFinishedEvent,
199
+ warningEvent,
200
+ errorEvent,
201
+ doneEvent,
202
+ ]);
203
+ /**
204
+ * Additive export (the engine keeps the enum module-private): the tool-kind
205
+ * vocabulary, exposed because `src/events` owns the grammar's vocabularies.
206
+ */
207
+ export { toolKind as toolKindSchema };
208
+ function formatZodIssue(issue) {
209
+ return `${issue.path.join('.') || '<event>'}: ${issue.message}`;
210
+ }
211
+ /**
212
+ * Engine event-schema.js:221-228. Returns the parsed event or throws
213
+ * `Invalid Amalgm event <type>: <path>: <message>[; ...]` — the exact
214
+ * engine error string.
215
+ */
216
+ export function validateAmalgmEvent(value) {
217
+ const parsed = amalgmEventSchema.safeParse(value);
218
+ if (parsed.success)
219
+ return parsed.data;
220
+ const type = value && typeof value === 'object' ? value.type : typeof value;
221
+ const details = parsed.error.issues.map(formatZodIssue).join('; ');
222
+ throw new Error(`Invalid Amalgm event ${String(type || 'unknown')}: ${details}`);
223
+ }
224
+ /** Engine event-schema.js:230-232. */
225
+ export function validateAmalgmEvents(events) {
226
+ return events.map(validateAmalgmEvent);
227
+ }
228
+ //# sourceMappingURL=schema.js.map