@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,245 @@
1
+ /**
2
+ * Wire projection — engine `chat-core/sse.js` (206 lines) ported byte-exact:
3
+ * amalgm events → the ACP-shaped `AgentStreamEvent` the browser consumes,
4
+ * SSE frame strings, frame id numbering, and the PromptUsage projection.
5
+ *
6
+ * Everything here is pure. The engine's `writeSseHeaders(res)` is the one
7
+ * host-side effect; its header set is exported as a constant and the
8
+ * res-writing helper takes a structural `writeHead` target so hosts can
9
+ * pass their own response object (no `node:http` import).
10
+ */
11
+ import { toolKind as canonicalToolKind } from '../transcript/tool-shape.js';
12
+ import { totalUsageTokens } from '../usage/tokens.js';
13
+ /**
14
+ * Engine sse.js:6-41. Project any usage-ish record into PromptUsage.
15
+ * `totalTokens` obeys the token-total law (`usage.js:123-127`, ported at
16
+ * `src/usage/tokens.ts`): tokenList.total, else inputContextSize, else the
17
+ * sum of the four non-thought buckets.
18
+ */
19
+ export function toPromptUsage(usage) {
20
+ if (!usage)
21
+ return undefined;
22
+ const totalTokens = totalUsageTokens(usage);
23
+ const tokenList = usage['tokenList'] || {
24
+ input: Number(usage['inputTokens'] || 0),
25
+ output: Number(usage['outputTokens'] || 0),
26
+ cacheRead: Number(usage['cacheReadTokens'] || 0),
27
+ cacheWrite: Number(usage['cacheWriteTokens'] || 0),
28
+ thought: Number(usage['thoughtTokens'] || 0),
29
+ total: totalTokens,
30
+ };
31
+ return {
32
+ tokenList,
33
+ cumulativeTokenList: usage['cumulativeTokenList'] ?? null,
34
+ previousCumulativeTokenList: usage['previousCumulativeTokenList'] ?? null,
35
+ inputTokens: Number(tokenList.input || 0),
36
+ outputTokens: Number(tokenList.output || 0),
37
+ cacheReadTokens: Number(tokenList.cacheRead || 0),
38
+ cacheWriteTokens: Number(tokenList.cacheWrite || 0),
39
+ thoughtTokens: Number(tokenList.thought || 0),
40
+ inputContextSize: usage['inputContextSize'] ?? tokenList.total ?? totalTokens,
41
+ totalTokens,
42
+ contextUsedTokens: usage['contextUsedTokens'] ?? usage['inputContextSize'] ?? tokenList.total ?? null,
43
+ contextLimit: usage['contextLimit'] ?? null,
44
+ usedTokens: usage['usedTokens'] ?? usage['contextUsedTokens'] ?? usage['inputContextSize'] ?? tokenList.total ?? null,
45
+ lastUsedTokens: usage['lastUsedTokens'] ?? usage['contextUsedTokens'] ?? usage['inputContextSize'] ?? tokenList.total ?? null,
46
+ maxTokens: usage['maxTokens'] ?? usage['contextLimit'] ?? null,
47
+ totalProcessedTokens: usage['totalProcessedTokens'] ?? null,
48
+ costUsd: usage['costUsd'] ?? null,
49
+ marketCostUsd: usage['marketCostUsd'] ?? null,
50
+ operation: usage['operation'],
51
+ billable: usage['billable'] !== false,
52
+ source: usage['source'],
53
+ exact: usage['exact'] === true,
54
+ };
55
+ }
56
+ /** Engine sse.js:43-46. Rounded context occupancy; non-positive → 0. */
57
+ function usageContextUsed(usage) {
58
+ const parsed = Number(usage?.['inputContextSize'] ?? usage?.['tokenList']?.total ?? usage?.['contextUsedTokens'] ?? usage?.['usedTokens']);
59
+ return Number.isFinite(parsed) && parsed > 0 ? Math.round(parsed) : 0;
60
+ }
61
+ /** Engine sse.js:48-51. */
62
+ function usageContextLimit(usage) {
63
+ const parsed = Number(usage?.['contextLimit'] ?? usage?.['maxTokens']);
64
+ return Number.isFinite(parsed) && parsed > 0 ? Math.round(parsed) : 0;
65
+ }
66
+ /** Engine sse.js:53-63. Legacy ACP-ish kind fallback layered over the canonical classifier. */
67
+ function toolKind(name) {
68
+ const clean = String(name || '').toLowerCase();
69
+ const canonical = canonicalToolKind(name);
70
+ if (canonical && canonical !== 'unknown')
71
+ return canonical;
72
+ if (clean.includes('bash') || clean.includes('command'))
73
+ return 'execute';
74
+ if (clean.includes('read'))
75
+ return 'read';
76
+ if (clean.includes('edit') || clean.includes('write') || clean.includes('file'))
77
+ return 'edit';
78
+ if (clean.includes('grep') || clean.includes('glob') || clean.includes('search'))
79
+ return 'search';
80
+ if (clean.includes('fetch'))
81
+ return 'fetch';
82
+ return 'other';
83
+ }
84
+ /** Engine sse.js:65-181. The amalgm-event → AgentStreamEvent projection; unknown types become `session_info_update`. */
85
+ export function toAgentStreamEvent(e, context = {}) {
86
+ if (e['type'] === 'text.delta') {
87
+ return { _type: 'update', eventTimestamp: e['ts'], sessionUpdate: 'agent_message_chunk', content: { type: 'text', text: e['text'] || '' } };
88
+ }
89
+ if (e['type'] === 'text.boundary') {
90
+ return { _type: 'update', eventTimestamp: e['ts'], sessionUpdate: 'agent_message_boundary', itemId: e['itemId'] || null, reason: e['reason'] || null };
91
+ }
92
+ if (e['type'] === 'reasoning.delta') {
93
+ return { _type: 'update', eventTimestamp: e['ts'], sessionUpdate: 'agent_thought_chunk', content: { type: 'text', text: e['text'] || '' } };
94
+ }
95
+ if (e['type'] === 'tool.started') {
96
+ return {
97
+ _type: 'update',
98
+ eventTimestamp: e['ts'],
99
+ sessionUpdate: 'tool_call',
100
+ toolCallId: e['toolCallId'],
101
+ toolName: e['toolName'] || e['name'],
102
+ title: e['title'] || e['toolName'],
103
+ kind: e['kind'] || toolKind(e['toolName']),
104
+ status: 'in_progress',
105
+ rawInput: e['input'] || {},
106
+ metadata: e['metadata'] || undefined,
107
+ timing: e['timing'] || undefined,
108
+ };
109
+ }
110
+ if (e['type'] === 'tool.updated') {
111
+ return {
112
+ _type: 'update',
113
+ eventTimestamp: e['ts'],
114
+ sessionUpdate: 'tool_call_update',
115
+ toolCallId: e['toolCallId'],
116
+ toolName: e['toolName'] || e['name'],
117
+ title: e['title'] || null,
118
+ kind: e['kind'] || null,
119
+ status: e['status'] || 'in_progress',
120
+ rawInput: e['inputDelta'] || undefined,
121
+ rawOutput: e['outputDelta'] ?? e['output'] ?? undefined,
122
+ error: e['error'] || undefined,
123
+ metadata: e['metadata'] || undefined,
124
+ timing: e['timing'] || undefined,
125
+ };
126
+ }
127
+ if (e['type'] === 'tool.completed') {
128
+ return {
129
+ _type: 'update',
130
+ eventTimestamp: e['ts'],
131
+ sessionUpdate: 'tool_call_update',
132
+ toolCallId: e['toolCallId'],
133
+ toolName: e['toolName'] || e['name'],
134
+ title: e['title'] || null,
135
+ kind: e['kind'] || null,
136
+ status: e['isError'] ? 'failed' : 'completed',
137
+ rawInput: e['input'] || undefined,
138
+ rawOutput: e['output'] ?? e['result'] ?? '',
139
+ error: e['error'] || undefined,
140
+ metadata: e['metadata'] || undefined,
141
+ timing: e['timing'] || undefined,
142
+ };
143
+ }
144
+ if (e['type'] === 'usage.final') {
145
+ const usage = toPromptUsage(e['usage']);
146
+ const contextUsed = usageContextUsed(e['usage']);
147
+ const contextLimit = usageContextLimit(e['usage']);
148
+ const fallbackTotal = usage?.totalTokens || 0;
149
+ return {
150
+ _type: 'update',
151
+ eventTimestamp: e['ts'],
152
+ sessionUpdate: 'usage_update',
153
+ used: contextUsed || fallbackTotal,
154
+ size: contextLimit || null,
155
+ inputContextSize: usage?.inputContextSize ?? undefined,
156
+ cost: usage?.costUsd != null ? { amount: usage.costUsd, currency: 'USD' } : null,
157
+ usage,
158
+ };
159
+ }
160
+ if (e['type'] === 'compaction.started') {
161
+ return {
162
+ _type: 'update',
163
+ eventTimestamp: e['ts'],
164
+ sessionUpdate: 'compaction_boundary',
165
+ phase: 'started',
166
+ trigger: e['trigger'] || 'auto',
167
+ };
168
+ }
169
+ if (e['type'] === 'compaction.finished') {
170
+ return {
171
+ _type: 'update',
172
+ eventTimestamp: e['ts'],
173
+ sessionUpdate: 'compaction_boundary',
174
+ phase: 'finished',
175
+ trigger: e['trigger'] || 'auto',
176
+ preTokens: e['preTokens'] ?? null,
177
+ postTokens: e['postTokens'] ?? null,
178
+ durationMs: e['durationMs'] ?? null,
179
+ };
180
+ }
181
+ if (e['type'] === 'warning') {
182
+ return {
183
+ _type: 'model_error',
184
+ error: e['message'] || 'Runtime warning',
185
+ requestedModel: e['requestedModel'] || '',
186
+ eventTimestamp: e['ts'],
187
+ };
188
+ }
189
+ if (e['type'] === 'error')
190
+ return { _type: 'error', message: e['message'] || 'Unknown error', eventTimestamp: e['ts'] };
191
+ if (e['type'] === 'done') {
192
+ return {
193
+ _type: 'complete',
194
+ codeSessionId: context.sessionId,
195
+ providerSessionId: e['providerSessionId'] || context.providerSessionId || null,
196
+ stopReason: e['stopReason'] || 'end_turn',
197
+ usage: toPromptUsage(context.usage || e['usage']),
198
+ eventTimestamp: e['ts'],
199
+ };
200
+ }
201
+ return { _type: 'update', eventTimestamp: e['ts'], sessionUpdate: 'session_info_update' };
202
+ }
203
+ /** Engine sse.js:183-185. One SSE data frame: `data: <json>\n\n`. */
204
+ export function frameFor(e, context) {
205
+ return `data: ${JSON.stringify(toAgentStreamEvent(e, context))}\n\n`;
206
+ }
207
+ /** Engine sse.js:187-189. */
208
+ export function titleFrame({ sessionId, title }) {
209
+ return `data: ${JSON.stringify({ _type: 'title_generated', sessionId, title })}\n\n`;
210
+ }
211
+ /**
212
+ * Engine sse.js:191-196. Frame id numbering law: prepend `id: <n>\n` only
213
+ * for non-negative integers (Number-coerced), and never double-stamp a
214
+ * frame that already starts with `id:`.
215
+ */
216
+ export function withSseId(frame, id) {
217
+ const cleanId = Number(id);
218
+ if (!Number.isInteger(cleanId) || cleanId < 0)
219
+ return frame;
220
+ if (String(frame || '').startsWith('id:'))
221
+ return frame;
222
+ return `id: ${cleanId}\n${frame}`;
223
+ }
224
+ /** Engine sse.js:199-203 status code. */
225
+ export const SSE_STATUS_CODE = 200;
226
+ /** Engine sse.js:199-203 header set, exported for hosts that write headers themselves. */
227
+ export const SSE_HEADERS = Object.freeze({
228
+ 'Content-Type': 'text/event-stream',
229
+ 'Cache-Control': 'no-cache, no-transform',
230
+ Connection: 'keep-alive',
231
+ });
232
+ /**
233
+ * Engine sse.js:198-204. HOST-SIDE EFFECT: writes the SSE status + headers
234
+ * to the supplied response object. Pure with respect to imports — the
235
+ * response is injected; hosts on non-Node stacks should use
236
+ * {@link SSE_HEADERS} / {@link SSE_STATUS_CODE} directly.
237
+ */
238
+ export function writeSseHeaders(res) {
239
+ res.writeHead(SSE_STATUS_CODE, {
240
+ 'Content-Type': 'text/event-stream',
241
+ 'Cache-Control': 'no-cache, no-transform',
242
+ Connection: 'keep-alive',
243
+ });
244
+ }
245
+ //# sourceMappingURL=frames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/wire/frames.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `@amalgm/chat/wire` — the SSE wire projection (engine `chat-core/sse.js`):
3
+ * amalgm events → ACP-shaped AgentStreamEvent frames, frame id numbering,
4
+ * PromptUsage projection, and the SSE header contract.
5
+ */
6
+ export { toAgentStreamEvent, toPromptUsage, frameFor, titleFrame, withSseId, writeSseHeaders, SSE_HEADERS, SSE_STATUS_CODE, type AmalgmEventLike, type StreamContext, type PromptUsage, type PromptTokenList, type AgentStreamEvent, type AgentMessageChunkFrame, type AgentMessageBoundaryFrame, type AgentThoughtChunkFrame, type ToolCallFrame, type ToolCallUpdateFrame, type UsageUpdateFrame, type CompactionStartedFrame, type CompactionFinishedFrame, type SessionInfoUpdateFrame, type ModelErrorFrame, type ErrorFrame, type CompleteFrame, type TitleGeneratedFrame, type SseHeadTarget, } from './frames.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wire/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `@amalgm/chat/wire` — the SSE wire projection (engine `chat-core/sse.js`):
3
+ * amalgm events → ACP-shaped AgentStreamEvent frames, frame id numbering,
4
+ * PromptUsage projection, and the SSE header contract.
5
+ */
6
+ export { toAgentStreamEvent, toPromptUsage, frameFor, titleFrame, withSseId, writeSseHeaders, SSE_HEADERS, SSE_STATUS_CODE, } from './frames.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wire/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,eAAe,GAoBhB,MAAM,aAAa,CAAC"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@amalgm/chat",
3
+ "version": "0.1.0",
4
+ "description": "The Amalgm chat SDK — the conversation pipeline's laws: turns, messages, streaming assembly, event normalization, and transcript truth, behind host-injected adapters.",
5
+ "type": "module",
6
+ "license": "UNLICENSED",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/amalgm-inc/amalgm-chat.git"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "default": "./dist/index.js"
18
+ },
19
+ "./events": {
20
+ "types": "./dist/events/index.d.ts",
21
+ "default": "./dist/events/index.js"
22
+ },
23
+ "./wire": {
24
+ "types": "./dist/wire/index.d.ts",
25
+ "default": "./dist/wire/index.js"
26
+ },
27
+ "./transcript": {
28
+ "types": "./dist/transcript/index.d.ts",
29
+ "default": "./dist/transcript/index.js"
30
+ },
31
+ "./turns": {
32
+ "types": "./dist/turns/index.d.ts",
33
+ "default": "./dist/turns/index.js"
34
+ },
35
+ "./contract": {
36
+ "types": "./dist/contract/index.d.ts",
37
+ "default": "./dist/contract/index.js"
38
+ },
39
+ "./warm": {
40
+ "types": "./dist/warm/index.d.ts",
41
+ "default": "./dist/warm/index.js"
42
+ },
43
+ "./usage": {
44
+ "types": "./dist/usage/index.d.ts",
45
+ "default": "./dist/usage/index.js"
46
+ },
47
+ "./normalizers": {
48
+ "types": "./dist/normalizers/index.d.ts",
49
+ "default": "./dist/normalizers/index.js"
50
+ }
51
+ },
52
+ "files": [
53
+ "dist",
54
+ "PURPOSE.md"
55
+ ],
56
+ "engines": {
57
+ "node": ">=18"
58
+ },
59
+ "scripts": {
60
+ "build": "tsc -p tsconfig.json",
61
+ "test": "npm run build && node --test tests/",
62
+ "test:parity": "npm run build && node --test tests/parity/"
63
+ },
64
+ "dependencies": {
65
+ "@anthropic-ai/claude-agent-sdk": "^0.3.206",
66
+ "@opencode-ai/sdk": "^1.17.6",
67
+ "zod": "^4.4.3"
68
+ },
69
+ "devDependencies": {
70
+ "typescript": "^5.7.3"
71
+ }
72
+ }