prefix-safe-json 0.0.1-alpha.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 (104) hide show
  1. package/LICENSE-APACHE +114 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +169 -0
  4. package/dist/coordinator/coordinator.d.ts +43 -0
  5. package/dist/coordinator/coordinator.d.ts.map +1 -0
  6. package/dist/coordinator/coordinator.js +407 -0
  7. package/dist/coordinator/coordinator.js.map +1 -0
  8. package/dist/coordinator/protocol.d.ts +61 -0
  9. package/dist/coordinator/protocol.d.ts.map +1 -0
  10. package/dist/coordinator/protocol.js +2 -0
  11. package/dist/coordinator/protocol.js.map +1 -0
  12. package/dist/coordinator/types.d.ts +84 -0
  13. package/dist/coordinator/types.d.ts.map +1 -0
  14. package/dist/coordinator/types.js +7 -0
  15. package/dist/coordinator/types.js.map +1 -0
  16. package/dist/diagnostics/codes.d.ts +24 -0
  17. package/dist/diagnostics/codes.d.ts.map +1 -0
  18. package/dist/diagnostics/codes.js +28 -0
  19. package/dist/diagnostics/codes.js.map +1 -0
  20. package/dist/diagnostics/factory.d.ts +8 -0
  21. package/dist/diagnostics/factory.d.ts.map +1 -0
  22. package/dist/diagnostics/factory.js +17 -0
  23. package/dist/diagnostics/factory.js.map +1 -0
  24. package/dist/grammar/frame.d.ts +58 -0
  25. package/dist/grammar/frame.d.ts.map +1 -0
  26. package/dist/grammar/frame.js +87 -0
  27. package/dist/grammar/frame.js.map +1 -0
  28. package/dist/grammar/pointer.d.ts +10 -0
  29. package/dist/grammar/pointer.d.ts.map +1 -0
  30. package/dist/grammar/pointer.js +20 -0
  31. package/dist/grammar/pointer.js.map +1 -0
  32. package/dist/grammar/stack.d.ts +73 -0
  33. package/dist/grammar/stack.d.ts.map +1 -0
  34. package/dist/grammar/stack.js +168 -0
  35. package/dist/grammar/stack.js.map +1 -0
  36. package/dist/index.d.ts +27 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +27 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/lexer/scanner.d.ts +108 -0
  41. package/dist/lexer/scanner.d.ts.map +1 -0
  42. package/dist/lexer/scanner.js +676 -0
  43. package/dist/lexer/scanner.js.map +1 -0
  44. package/dist/lexer/states.d.ts +35 -0
  45. package/dist/lexer/states.d.ts.map +1 -0
  46. package/dist/lexer/states.js +39 -0
  47. package/dist/lexer/states.js.map +1 -0
  48. package/dist/lexer/tokens.d.ts +22 -0
  49. package/dist/lexer/tokens.d.ts.map +1 -0
  50. package/dist/lexer/tokens.js +22 -0
  51. package/dist/lexer/tokens.js.map +1 -0
  52. package/dist/limits.d.ts +14 -0
  53. package/dist/limits.d.ts.map +1 -0
  54. package/dist/limits.js +23 -0
  55. package/dist/limits.js.map +1 -0
  56. package/dist/parser.d.ts +6 -0
  57. package/dist/parser.d.ts.map +1 -0
  58. package/dist/parser.js +949 -0
  59. package/dist/parser.js.map +1 -0
  60. package/dist/providers/adapter.d.ts +10 -0
  61. package/dist/providers/adapter.d.ts.map +1 -0
  62. package/dist/providers/adapter.js +2 -0
  63. package/dist/providers/adapter.js.map +1 -0
  64. package/dist/providers/anthropic.d.ts +45 -0
  65. package/dist/providers/anthropic.d.ts.map +1 -0
  66. package/dist/providers/anthropic.js +112 -0
  67. package/dist/providers/anthropic.js.map +1 -0
  68. package/dist/providers/gemini.d.ts +31 -0
  69. package/dist/providers/gemini.d.ts.map +1 -0
  70. package/dist/providers/gemini.js +94 -0
  71. package/dist/providers/gemini.js.map +1 -0
  72. package/dist/providers/openai-compatible.d.ts +33 -0
  73. package/dist/providers/openai-compatible.d.ts.map +1 -0
  74. package/dist/providers/openai-compatible.js +160 -0
  75. package/dist/providers/openai-compatible.js.map +1 -0
  76. package/dist/providers/openai.d.ts +48 -0
  77. package/dist/providers/openai.d.ts.map +1 -0
  78. package/dist/providers/openai.js +205 -0
  79. package/dist/providers/openai.js.map +1 -0
  80. package/dist/providers/openrouter.d.ts +35 -0
  81. package/dist/providers/openrouter.d.ts.map +1 -0
  82. package/dist/providers/openrouter.js +55 -0
  83. package/dist/providers/openrouter.js.map +1 -0
  84. package/dist/semantic/builder.d.ts +55 -0
  85. package/dist/semantic/builder.d.ts.map +1 -0
  86. package/dist/semantic/builder.js +140 -0
  87. package/dist/semantic/builder.js.map +1 -0
  88. package/dist/semantic/events.d.ts +2 -0
  89. package/dist/semantic/events.d.ts.map +1 -0
  90. package/dist/semantic/events.js +5 -0
  91. package/dist/semantic/events.js.map +1 -0
  92. package/dist/semantic/snapshot.d.ts +49 -0
  93. package/dist/semantic/snapshot.d.ts.map +1 -0
  94. package/dist/semantic/snapshot.js +228 -0
  95. package/dist/semantic/snapshot.js.map +1 -0
  96. package/dist/types.d.ts +156 -0
  97. package/dist/types.d.ts.map +1 -0
  98. package/dist/types.js +5 -0
  99. package/dist/types.js.map +1 -0
  100. package/dist/utf8/decoder.d.ts +53 -0
  101. package/dist/utf8/decoder.d.ts.map +1 -0
  102. package/dist/utf8/decoder.js +318 -0
  103. package/dist/utf8/decoder.js.map +1 -0
  104. package/package.json +79 -0
@@ -0,0 +1,407 @@
1
+ import { createParser } from "../parser.js";
2
+ import { DEFAULT_COORDINATOR_LIMITS } from "./types.js";
3
+ class CoordinatorCallState {
4
+ internalId;
5
+ provider;
6
+ toolCallId;
7
+ toolIndex;
8
+ name;
9
+ nameComplete = false;
10
+ argumentStreamClosed = false;
11
+ parser;
12
+ status = "collecting";
13
+ constructor(internalId, provider, parser) {
14
+ this.internalId = internalId;
15
+ this.provider = provider;
16
+ this.parser = parser;
17
+ }
18
+ }
19
+ export class DefaultToolCallStreamCoordinator {
20
+ limits;
21
+ parserOptions;
22
+ calls = new Map();
23
+ sourceKeyToInternalId = new Map();
24
+ callCounter = 0;
25
+ eventQueue = [];
26
+ diagnostics = [];
27
+ eventsProcessed = 0;
28
+ globalSequence = 0;
29
+ isFinished = false;
30
+ /**
31
+ * @param limits Coordinator-level limits (concurrent tool calls, tool name
32
+ * size, etc.) — distinct from `parserOptions`, which configures each
33
+ * underlying per-call IncrementalJsonParser (limits, repairs). Previously
34
+ * there was no way to pass the latter through at all; every parser the
35
+ * coordinator created was hardcoded to library defaults.
36
+ */
37
+ constructor(limits, parserOptions) {
38
+ this.limits = { ...DEFAULT_COORDINATOR_LIMITS, ...limits };
39
+ this.parserOptions = parserOptions;
40
+ }
41
+ push(event) {
42
+ if (this.isFinished) {
43
+ this.addDiagnostic({
44
+ code: "E_EVENT_AFTER_STREAM_END",
45
+ severity: "error",
46
+ message: "Event pushed after stream end",
47
+ });
48
+ return { accepted: false };
49
+ }
50
+ if (this.eventsProcessed >= this.limits.maxNormalizedEvents) {
51
+ this.addDiagnostic({
52
+ code: "E_COORDINATOR_LIMIT_EVENTS",
53
+ severity: "fatal",
54
+ message: "Maximum normalized events exceeded",
55
+ });
56
+ return { accepted: false };
57
+ }
58
+ this.eventsProcessed++;
59
+ switch (event.type) {
60
+ case "tool_call_start":
61
+ this.handleStart(event);
62
+ break;
63
+ case "tool_call_identity":
64
+ this.handleIdentity(event);
65
+ break;
66
+ case "tool_call_name_delta":
67
+ this.handleNameDelta(event);
68
+ break;
69
+ case "tool_call_arguments_delta":
70
+ this.handleArgumentsDelta(event);
71
+ break;
72
+ case "tool_call_end":
73
+ this.handleCallEnd(event);
74
+ break;
75
+ case "provider_diagnostic":
76
+ this.handleProviderDiagnostic(event);
77
+ break;
78
+ case "provider_stream_end":
79
+ this.handleStreamEnd(event);
80
+ break;
81
+ }
82
+ return { accepted: true };
83
+ }
84
+ handleStart(event) {
85
+ const sourceKey = event.callRef.sourceKey;
86
+ const existingId = this.sourceKeyToInternalId.get(sourceKey);
87
+ if (existingId !== undefined) {
88
+ this.addDiagnostic({
89
+ code: "E_DUPLICATE_TOOL_CALL_START",
90
+ severity: "error",
91
+ internalId: existingId,
92
+ message: `Duplicate start for tool call sourceKey: ${sourceKey}`,
93
+ });
94
+ return;
95
+ }
96
+ if (this.calls.size >= this.limits.maxToolCalls) {
97
+ this.addDiagnostic({
98
+ code: "E_COORDINATOR_LIMIT_CALLS",
99
+ severity: "error",
100
+ message: "Maximum tool calls exceeded",
101
+ });
102
+ return;
103
+ }
104
+ const internalId = `call-${this.callCounter++}`;
105
+ this.sourceKeyToInternalId.set(sourceKey, internalId);
106
+ const parser = createParser(this.parserOptions);
107
+ const call = new CoordinatorCallState(internalId, event.provider, parser);
108
+ if (event.toolCallId !== undefined)
109
+ call.toolCallId = event.toolCallId;
110
+ if (event.toolIndex !== undefined)
111
+ call.toolIndex = event.toolIndex;
112
+ if (event.name !== undefined)
113
+ call.name = event.name;
114
+ this.calls.set(internalId, call);
115
+ this.eventQueue.push({
116
+ type: "tool_call_discovered",
117
+ sequence: this.globalSequence++,
118
+ internalId,
119
+ provider: event.provider,
120
+ });
121
+ if (event.toolCallId !== undefined || event.toolIndex !== undefined) {
122
+ this.eventQueue.push({
123
+ type: "tool_call_identity_updated",
124
+ sequence: this.globalSequence++,
125
+ internalId,
126
+ toolCallId: event.toolCallId,
127
+ toolIndex: event.toolIndex,
128
+ });
129
+ }
130
+ }
131
+ handleIdentity(event) {
132
+ const internalId = this.sourceKeyToInternalId.get(event.callRef.sourceKey);
133
+ if (!internalId)
134
+ return;
135
+ const call = this.getCall(internalId);
136
+ if (!call)
137
+ return;
138
+ let changed = false;
139
+ if (event.toolCallId !== undefined) {
140
+ if (call.toolCallId !== undefined && call.toolCallId !== event.toolCallId) {
141
+ this.addDiagnostic({
142
+ code: "E_PROVIDER_IDENTITY_CONFLICT",
143
+ severity: "error",
144
+ internalId: call.internalId,
145
+ message: `Conflicting ID: had ${call.toolCallId}, got ${event.toolCallId}`,
146
+ });
147
+ call.status = "invalid";
148
+ }
149
+ else if (call.toolCallId === undefined) {
150
+ call.toolCallId = event.toolCallId;
151
+ changed = true;
152
+ }
153
+ }
154
+ if (event.toolIndex !== undefined) {
155
+ if (call.toolIndex !== undefined && call.toolIndex !== event.toolIndex) {
156
+ this.addDiagnostic({
157
+ code: "E_PROVIDER_INDEX_CONFLICT",
158
+ severity: "error",
159
+ internalId: call.internalId,
160
+ message: `Conflicting index: had ${call.toolIndex}, got ${event.toolIndex}`,
161
+ });
162
+ call.status = "invalid";
163
+ }
164
+ else if (call.toolIndex === undefined) {
165
+ call.toolIndex = event.toolIndex;
166
+ changed = true;
167
+ }
168
+ }
169
+ if (changed) {
170
+ this.eventQueue.push({
171
+ type: "tool_call_identity_updated",
172
+ sequence: this.globalSequence++,
173
+ internalId: call.internalId,
174
+ toolCallId: call.toolCallId,
175
+ toolIndex: call.toolIndex,
176
+ });
177
+ }
178
+ }
179
+ handleNameDelta(event) {
180
+ const internalId = this.sourceKeyToInternalId.get(event.callRef.sourceKey);
181
+ if (!internalId)
182
+ return;
183
+ const call = this.getCall(internalId);
184
+ if (!call)
185
+ return;
186
+ if (call.status !== "collecting") {
187
+ this.addDiagnostic({
188
+ code: "E_NAME_DELTA_AFTER_END",
189
+ severity: "error",
190
+ internalId: call.internalId,
191
+ message: "Name delta after call ended",
192
+ });
193
+ return;
194
+ }
195
+ call.name = (call.name ?? "") + event.delta;
196
+ if (call.name.length > this.limits.maxToolNameBytes) {
197
+ this.addDiagnostic({
198
+ code: "E_TOOL_NAME_LIMIT",
199
+ severity: "error",
200
+ internalId: call.internalId,
201
+ message: "Tool name exceeded maximum length",
202
+ });
203
+ call.status = "invalid";
204
+ }
205
+ this.eventQueue.push({
206
+ type: "tool_name_updated",
207
+ sequence: event.sequence,
208
+ internalId: call.internalId,
209
+ name: call.name,
210
+ complete: false,
211
+ });
212
+ }
213
+ handleArgumentsDelta(event) {
214
+ const internalId = this.sourceKeyToInternalId.get(event.callRef.sourceKey);
215
+ if (!internalId)
216
+ return;
217
+ const call = this.getCall(internalId);
218
+ if (!call)
219
+ return;
220
+ if (call.status !== "collecting") {
221
+ this.addDiagnostic({
222
+ code: "E_ARGUMENT_DELTA_AFTER_END",
223
+ severity: "error",
224
+ internalId: call.internalId,
225
+ message: "Argument delta after call ended",
226
+ });
227
+ return;
228
+ }
229
+ call.parser.push(event.delta);
230
+ // Drain parser events and map them to coordinator events
231
+ const parserEvents = call.parser.drainEvents();
232
+ for (const pe of parserEvents) {
233
+ this.eventQueue.push({
234
+ type: "tool_argument_event",
235
+ sequence: this.globalSequence++,
236
+ internalId: call.internalId,
237
+ event: pe,
238
+ });
239
+ }
240
+ }
241
+ handleCallEnd(event) {
242
+ const internalId = this.sourceKeyToInternalId.get(event.callRef.sourceKey);
243
+ if (!internalId)
244
+ return;
245
+ const call = this.getCall(internalId);
246
+ if (!call)
247
+ return;
248
+ if (call.status !== "collecting")
249
+ return;
250
+ call.nameComplete = true;
251
+ call.argumentStreamClosed = true;
252
+ if (call.name !== undefined) {
253
+ this.eventQueue.push({
254
+ type: "tool_name_updated",
255
+ sequence: this.globalSequence++,
256
+ internalId: call.internalId,
257
+ name: call.name,
258
+ complete: true,
259
+ });
260
+ }
261
+ else {
262
+ this.addDiagnostic({
263
+ code: "E_TOOL_NAME_MISSING",
264
+ severity: "error",
265
+ internalId: call.internalId,
266
+ message: "Tool name missing at end",
267
+ });
268
+ }
269
+ }
270
+ finishCall(call, reason) {
271
+ if (call.status !== "collecting")
272
+ return;
273
+ // For individual call end, we pass reason to the internal parser
274
+ const res = call.parser.finish({ reason });
275
+ // Determine the mapped coordinator outcome
276
+ let outcome = "invalid";
277
+ if (res.outcome === "valid") {
278
+ outcome = "complete";
279
+ if (call.name === undefined || this.hasCallConflict(call)) {
280
+ outcome = "invalid";
281
+ }
282
+ }
283
+ else if (res.outcome === "truncated") {
284
+ outcome = "truncated";
285
+ }
286
+ else if (res.outcome === "salvaged") {
287
+ outcome = "salvaged";
288
+ }
289
+ if (reason === "cancelled")
290
+ outcome = "cancelled";
291
+ call.status = outcome;
292
+ // Drain remaining parser events
293
+ const parserEvents = call.parser.drainEvents();
294
+ for (const pe of parserEvents) {
295
+ this.eventQueue.push({
296
+ type: "tool_argument_event",
297
+ sequence: this.globalSequence++,
298
+ internalId: call.internalId,
299
+ event: pe,
300
+ });
301
+ }
302
+ // Determine executable according to Executable Policy
303
+ const executable = outcome === "complete" && res.executable;
304
+ this.eventQueue.push({
305
+ type: "tool_call_finished",
306
+ sequence: this.globalSequence++,
307
+ internalId: call.internalId,
308
+ outcome,
309
+ executable,
310
+ });
311
+ }
312
+ hasCallConflict(call) {
313
+ return this.diagnostics.some(d => d.internalId === call.internalId && (d.severity === "error" || d.severity === "fatal"));
314
+ }
315
+ handleProviderDiagnostic(event) {
316
+ const internalId = event.callRef ? this.sourceKeyToInternalId.get(event.callRef.sourceKey) : undefined;
317
+ this.addDiagnostic({
318
+ code: event.code,
319
+ severity: event.severity,
320
+ message: event.message,
321
+ internalId,
322
+ });
323
+ }
324
+ handleStreamEnd(event) {
325
+ this.isFinished = true;
326
+ // Close all open calls
327
+ for (const call of this.calls.values()) {
328
+ if (call.status === "collecting") {
329
+ if (!call.argumentStreamClosed) {
330
+ this.addDiagnostic({
331
+ code: "E_STREAM_ENDED_WITH_OPEN_CALL",
332
+ severity: "error",
333
+ internalId: call.internalId,
334
+ message: "Stream ended with open call",
335
+ });
336
+ }
337
+ this.finishCall(call, event.reason);
338
+ }
339
+ }
340
+ this.eventQueue.push({
341
+ type: "provider_stream_finished",
342
+ sequence: this.globalSequence++,
343
+ reason: event.reason,
344
+ });
345
+ }
346
+ getCall(internalId) {
347
+ const call = this.calls.get(internalId);
348
+ if (!call) {
349
+ this.addDiagnostic({
350
+ code: "E_TOOL_CALL_NOT_FOUND",
351
+ severity: "error",
352
+ internalId,
353
+ message: `Tool call ${internalId} not found`,
354
+ });
355
+ return undefined;
356
+ }
357
+ return call;
358
+ }
359
+ addDiagnostic(diag) {
360
+ this.diagnostics.push(diag);
361
+ this.eventQueue.push({
362
+ type: "coordinator_diagnostic",
363
+ sequence: this.globalSequence++,
364
+ diagnostic: diag,
365
+ });
366
+ }
367
+ snapshot() {
368
+ return {
369
+ calls: Array.from(this.calls.values()).map((c) => ({
370
+ internalId: c.internalId,
371
+ provider: c.provider,
372
+ toolCallId: c.toolCallId,
373
+ toolIndex: c.toolIndex,
374
+ name: c.name,
375
+ nameComplete: c.nameComplete,
376
+ parser: c.parser.snapshot(),
377
+ status: c.status,
378
+ })),
379
+ diagnostics: [...this.diagnostics],
380
+ eventsProcessed: this.eventsProcessed,
381
+ isFinished: this.isFinished,
382
+ };
383
+ }
384
+ drainEvents() {
385
+ const events = this.eventQueue;
386
+ this.eventQueue = [];
387
+ return events;
388
+ }
389
+ finish(meta) {
390
+ if (!this.isFinished) {
391
+ this.handleStreamEnd({
392
+ type: "provider_stream_end",
393
+ sequence: this.eventsProcessed + 1,
394
+ provider: "unknown",
395
+ reason: meta?.reason ?? "unknown",
396
+ providerReason: meta?.providerReason,
397
+ });
398
+ }
399
+ return {
400
+ calls: this.snapshot().calls,
401
+ };
402
+ }
403
+ }
404
+ export function createToolCallStreamCoordinator(limits, parserOptions) {
405
+ return new DefaultToolCallStreamCoordinator(limits, parserOptions);
406
+ }
407
+ //# sourceMappingURL=coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/coordinator/coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ export type ProviderName = "openai" | "anthropic" | "gemini" | "openrouter" | "openai-compatible" | "unknown";
2
+ export interface NormalizedEventBase {
3
+ /**
4
+ * Deterministic sequence number assigned by the stream coordinator.
5
+ */
6
+ readonly sequence: number;
7
+ readonly provider: ProviderName;
8
+ readonly rawEventType?: string;
9
+ readonly providerRequestId?: string;
10
+ }
11
+ export type NormalizedToolStreamEvent = ToolCallStartEvent | ToolCallIdentityEvent | ToolCallNameDeltaEvent | ToolCallArgumentsDeltaEvent | ToolCallEndEvent | ProviderDiagnosticEvent | ProviderStreamEndEvent;
12
+ export interface ToolCallStartEvent extends NormalizedEventBase {
13
+ readonly type: "tool_call_start";
14
+ readonly callRef: ProviderCallRef;
15
+ readonly toolCallId?: string;
16
+ readonly toolIndex?: number;
17
+ readonly name?: string;
18
+ }
19
+ export interface ToolCallIdentityEvent extends NormalizedEventBase {
20
+ readonly type: "tool_call_identity";
21
+ readonly callRef: ProviderCallRef;
22
+ readonly toolCallId?: string;
23
+ readonly toolIndex?: number;
24
+ }
25
+ export interface ToolCallNameDeltaEvent extends NormalizedEventBase {
26
+ readonly type: "tool_call_name_delta";
27
+ readonly callRef: ProviderCallRef;
28
+ readonly delta: string;
29
+ }
30
+ export interface ToolCallArgumentsDeltaEvent extends NormalizedEventBase {
31
+ readonly type: "tool_call_arguments_delta";
32
+ readonly callRef: ProviderCallRef;
33
+ readonly delta: string | Uint8Array;
34
+ }
35
+ export type StreamEndReason = "complete" | "length" | "cancelled" | "provider_error" | "network_error" | "unknown";
36
+ export interface ToolCallEndEvent extends NormalizedEventBase {
37
+ readonly type: "tool_call_end";
38
+ readonly callRef: ProviderCallRef;
39
+ readonly reason: StreamEndReason;
40
+ readonly providerReason?: string;
41
+ }
42
+ export interface ProviderDiagnosticEvent extends NormalizedEventBase {
43
+ readonly type: "provider_diagnostic";
44
+ readonly code: string;
45
+ readonly severity: "info" | "warning" | "error" | "fatal";
46
+ readonly message: string;
47
+ readonly callRef?: ProviderCallRef;
48
+ }
49
+ export interface ProviderStreamEndEvent extends NormalizedEventBase {
50
+ readonly type: "provider_stream_end";
51
+ readonly reason: StreamEndReason;
52
+ readonly providerReason?: string;
53
+ }
54
+ export interface ProviderCallRef {
55
+ /**
56
+ * Deterministic provider-local identity.
57
+ * e.g. "content-block:0"
58
+ */
59
+ readonly sourceKey: string;
60
+ }
61
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/coordinator/protocol.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,mBAAmB,GACnB,SAAS,CAAC;AAEd,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,MAAM,yBAAyB,GACjC,kBAAkB,GAClB,qBAAqB,GACrB,sBAAsB,GACtB,2BAA2B,GAC3B,gBAAgB,GAChB,uBAAuB,GACvB,sBAAsB,CAAC;AAE3B,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAElC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAElC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;CACrC;AAED,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,QAAQ,GACR,WAAW,GACX,gBAAgB,GAChB,eAAe,GACf,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;CACpC;AAED,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/coordinator/protocol.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import { ParserSnapshot, ParserEvent } from "../types.js";
2
+ import { NormalizedToolStreamEvent, ProviderName, StreamEndReason } from "./protocol.js";
3
+ export interface CoordinatorLimits {
4
+ readonly maxToolCalls: number;
5
+ readonly maxToolNameBytes: number;
6
+ readonly maxTrailingDataBytes: number;
7
+ readonly maxNormalizedEvents: number;
8
+ }
9
+ export declare const DEFAULT_COORDINATOR_LIMITS: CoordinatorLimits;
10
+ export interface ToolCallState {
11
+ readonly internalId: string;
12
+ readonly provider: ProviderName;
13
+ readonly toolCallId?: string;
14
+ readonly toolIndex?: number;
15
+ readonly name?: string;
16
+ readonly nameComplete: boolean;
17
+ readonly parser: ParserSnapshot;
18
+ readonly status: "collecting" | "complete" | "truncated" | "salvaged" | "invalid" | "cancelled";
19
+ }
20
+ export interface ToolCallCoordinatorSnapshot {
21
+ readonly calls: readonly ToolCallState[];
22
+ readonly diagnostics: readonly CoordinatorDiagnostic[];
23
+ readonly eventsProcessed: number;
24
+ readonly isFinished: boolean;
25
+ }
26
+ export type ToolCallCoordinatorEvent = {
27
+ readonly type: "tool_call_discovered";
28
+ readonly sequence: number;
29
+ readonly internalId: string;
30
+ readonly provider: ProviderName;
31
+ } | {
32
+ readonly type: "tool_call_identity_updated";
33
+ readonly sequence: number;
34
+ readonly internalId: string;
35
+ readonly toolCallId?: string;
36
+ readonly toolIndex?: number;
37
+ } | {
38
+ readonly type: "tool_name_updated";
39
+ readonly sequence: number;
40
+ readonly internalId: string;
41
+ readonly name: string;
42
+ readonly complete: boolean;
43
+ } | {
44
+ readonly type: "tool_argument_event";
45
+ readonly sequence: number;
46
+ readonly internalId: string;
47
+ readonly event: ParserEvent;
48
+ } | {
49
+ readonly type: "tool_call_finished";
50
+ readonly sequence: number;
51
+ readonly internalId: string;
52
+ readonly outcome: "complete" | "truncated" | "salvaged" | "invalid" | "cancelled";
53
+ readonly executable: boolean;
54
+ } | {
55
+ readonly type: "coordinator_diagnostic";
56
+ readonly sequence: number;
57
+ readonly diagnostic: CoordinatorDiagnostic;
58
+ } | {
59
+ readonly type: "provider_stream_finished";
60
+ readonly sequence: number;
61
+ readonly reason: StreamEndReason;
62
+ };
63
+ export interface CoordinatorDiagnostic {
64
+ readonly code: string;
65
+ readonly severity: "info" | "warning" | "error" | "fatal";
66
+ readonly message: string;
67
+ readonly internalId?: string;
68
+ }
69
+ export interface CoordinatorPushResult {
70
+ readonly accepted: boolean;
71
+ }
72
+ export interface ToolCallCoordinatorFinalResult {
73
+ readonly calls: readonly ToolCallState[];
74
+ }
75
+ export interface ToolCallStreamCoordinator {
76
+ push(event: NormalizedToolStreamEvent): CoordinatorPushResult;
77
+ snapshot(): ToolCallCoordinatorSnapshot;
78
+ drainEvents(): readonly ToolCallCoordinatorEvent[];
79
+ finish(meta?: {
80
+ reason?: StreamEndReason;
81
+ providerReason?: string;
82
+ }): ToolCallCoordinatorFinalResult;
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/coordinator/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export const DEFAULT_COORDINATOR_LIMITS = {
2
+ maxToolCalls: 128,
3
+ maxToolNameBytes: 1024,
4
+ maxTrailingDataBytes: 65536,
5
+ maxNormalizedEvents: 100000,
6
+ };
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/coordinator/types.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,0BAA0B,GAAsB;IAC3D,YAAY,EAAE,GAAG;IACjB,gBAAgB,EAAE,IAAI;IACtB,oBAAoB,EAAE,KAAK;IAC3B,mBAAmB,EAAE,MAAM;CAC5B,CAAC"}
@@ -0,0 +1,24 @@
1
+ /** All known diagnostic codes. */
2
+ export declare const DiagnosticCode: {
3
+ readonly E_UNEXPECTED_TOKEN: "E_UNEXPECTED_TOKEN";
4
+ readonly E_DUPLICATE_KEY: "E_DUPLICATE_KEY";
5
+ readonly E_INCOMPLETE_UTF8: "E_INCOMPLETE_UTF8";
6
+ readonly E_INVALID_UTF8: "E_INVALID_UTF8";
7
+ readonly E_INCOMPLETE_UNICODE_ESCAPE: "E_INCOMPLETE_UNICODE_ESCAPE";
8
+ readonly E_INVALID_UNICODE_ESCAPE: "E_INVALID_UNICODE_ESCAPE";
9
+ readonly E_UNPAIRED_SURROGATE: "E_UNPAIRED_SURROGATE";
10
+ readonly E_UNTERMINATED_STRING: "E_UNTERMINATED_STRING";
11
+ readonly E_INCOMPLETE_NUMBER: "E_INCOMPLETE_NUMBER";
12
+ readonly E_INCOMPLETE_LITERAL: "E_INCOMPLETE_LITERAL";
13
+ readonly E_TRAILING_DATA: "E_TRAILING_DATA";
14
+ readonly E_STREAM_TRUNCATED: "E_STREAM_TRUNCATED";
15
+ readonly E_LIMIT_DEPTH: "E_LIMIT_DEPTH";
16
+ readonly E_LIMIT_INPUT_BYTES: "E_LIMIT_INPUT_BYTES";
17
+ readonly E_LIMIT_STRING_BYTES: "E_LIMIT_STRING_BYTES";
18
+ readonly E_LIMIT_EVENT_QUEUE: "E_LIMIT_EVENT_QUEUE";
19
+ readonly E_PUSH_AFTER_FINISH: "E_PUSH_AFTER_FINISH";
20
+ readonly W_RAW_CONTROL_CHARACTER: "W_RAW_CONTROL_CHARACTER";
21
+ readonly W_TRAILING_TEXT_ISOLATED: "W_TRAILING_TEXT_ISOLATED";
22
+ };
23
+ export type DiagnosticCodeValue = (typeof DiagnosticCode)[keyof typeof DiagnosticCode];
24
+ //# sourceMappingURL=codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../src/diagnostics/codes.ts"],"names":[],"mappings":"AAIA,kCAAkC;AAClC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;CAuBjB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Diagnostic codes
3
+ // ---------------------------------------------------------------------------
4
+ /** All known diagnostic codes. */
5
+ export const DiagnosticCode = {
6
+ // --- Errors ---
7
+ E_UNEXPECTED_TOKEN: "E_UNEXPECTED_TOKEN",
8
+ E_DUPLICATE_KEY: "E_DUPLICATE_KEY",
9
+ E_INCOMPLETE_UTF8: "E_INCOMPLETE_UTF8",
10
+ E_INVALID_UTF8: "E_INVALID_UTF8",
11
+ E_INCOMPLETE_UNICODE_ESCAPE: "E_INCOMPLETE_UNICODE_ESCAPE",
12
+ E_INVALID_UNICODE_ESCAPE: "E_INVALID_UNICODE_ESCAPE",
13
+ E_UNPAIRED_SURROGATE: "E_UNPAIRED_SURROGATE",
14
+ E_UNTERMINATED_STRING: "E_UNTERMINATED_STRING",
15
+ E_INCOMPLETE_NUMBER: "E_INCOMPLETE_NUMBER",
16
+ E_INCOMPLETE_LITERAL: "E_INCOMPLETE_LITERAL",
17
+ E_TRAILING_DATA: "E_TRAILING_DATA",
18
+ E_STREAM_TRUNCATED: "E_STREAM_TRUNCATED",
19
+ E_LIMIT_DEPTH: "E_LIMIT_DEPTH",
20
+ E_LIMIT_INPUT_BYTES: "E_LIMIT_INPUT_BYTES",
21
+ E_LIMIT_STRING_BYTES: "E_LIMIT_STRING_BYTES",
22
+ E_LIMIT_EVENT_QUEUE: "E_LIMIT_EVENT_QUEUE",
23
+ E_PUSH_AFTER_FINISH: "E_PUSH_AFTER_FINISH",
24
+ // --- Warnings ---
25
+ W_RAW_CONTROL_CHARACTER: "W_RAW_CONTROL_CHARACTER",
26
+ W_TRAILING_TEXT_ISOLATED: "W_TRAILING_TEXT_ISOLATED",
27
+ };
28
+ //# sourceMappingURL=codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codes.js","sourceRoot":"","sources":["../../src/diagnostics/codes.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,kCAAkC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,iBAAiB;IACjB,kBAAkB,EAAE,oBAAoB;IACxC,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,2BAA2B,EAAE,6BAA6B;IAC1D,wBAAwB,EAAE,0BAA0B;IACpD,oBAAoB,EAAE,sBAAsB;IAC5C,qBAAqB,EAAE,uBAAuB;IAC9C,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,sBAAsB;IAC5C,eAAe,EAAE,iBAAiB;IAClC,kBAAkB,EAAE,oBAAoB;IACxC,aAAa,EAAE,eAAe;IAC9B,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,sBAAsB;IAC5C,mBAAmB,EAAE,qBAAqB;IAC1C,mBAAmB,EAAE,qBAAqB;IAE1C,mBAAmB;IACnB,uBAAuB,EAAE,yBAAyB;IAClD,wBAAwB,EAAE,0BAA0B;CAC5C,CAAC"}