prefix-safe-json 0.0.1-alpha.4 → 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 (135) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +2 -2
  3. package/package.json +2 -1
  4. package/dist/coordinator/coordinator.d.ts +0 -53
  5. package/dist/coordinator/coordinator.d.ts.map +0 -1
  6. package/dist/coordinator/coordinator.js +0 -448
  7. package/dist/coordinator/coordinator.js.map +0 -1
  8. package/dist/coordinator/diagnostic-codes.d.ts +0 -11
  9. package/dist/coordinator/diagnostic-codes.d.ts.map +0 -1
  10. package/dist/coordinator/diagnostic-codes.js +0 -22
  11. package/dist/coordinator/diagnostic-codes.js.map +0 -1
  12. package/dist/coordinator/protocol.d.ts +0 -61
  13. package/dist/coordinator/protocol.d.ts.map +0 -1
  14. package/dist/coordinator/protocol.js +0 -2
  15. package/dist/coordinator/protocol.js.map +0 -1
  16. package/dist/coordinator/types.d.ts +0 -104
  17. package/dist/coordinator/types.d.ts.map +0 -1
  18. package/dist/coordinator/types.js +0 -7
  19. package/dist/coordinator/types.js.map +0 -1
  20. package/dist/diagnostics/codes.d.ts +0 -24
  21. package/dist/diagnostics/codes.d.ts.map +0 -1
  22. package/dist/diagnostics/codes.js +0 -28
  23. package/dist/diagnostics/codes.js.map +0 -1
  24. package/dist/diagnostics/factory.d.ts +0 -8
  25. package/dist/diagnostics/factory.d.ts.map +0 -1
  26. package/dist/diagnostics/factory.js +0 -17
  27. package/dist/diagnostics/factory.js.map +0 -1
  28. package/dist/gate/decide.d.ts +0 -27
  29. package/dist/gate/decide.d.ts.map +0 -1
  30. package/dist/gate/decide.js +0 -138
  31. package/dist/gate/decide.js.map +0 -1
  32. package/dist/gate/gate.d.ts +0 -25
  33. package/dist/gate/gate.d.ts.map +0 -1
  34. package/dist/gate/gate.js +0 -96
  35. package/dist/gate/gate.js.map +0 -1
  36. package/dist/gate/types.d.ts +0 -184
  37. package/dist/gate/types.d.ts.map +0 -1
  38. package/dist/gate/types.js +0 -2
  39. package/dist/gate/types.js.map +0 -1
  40. package/dist/grammar/frame.d.ts +0 -58
  41. package/dist/grammar/frame.d.ts.map +0 -1
  42. package/dist/grammar/frame.js +0 -87
  43. package/dist/grammar/frame.js.map +0 -1
  44. package/dist/grammar/pointer.d.ts +0 -10
  45. package/dist/grammar/pointer.d.ts.map +0 -1
  46. package/dist/grammar/pointer.js +0 -20
  47. package/dist/grammar/pointer.js.map +0 -1
  48. package/dist/grammar/stack.d.ts +0 -73
  49. package/dist/grammar/stack.d.ts.map +0 -1
  50. package/dist/grammar/stack.js +0 -168
  51. package/dist/grammar/stack.js.map +0 -1
  52. package/dist/guard/ai-sdk.d.ts +0 -48
  53. package/dist/guard/ai-sdk.d.ts.map +0 -1
  54. package/dist/guard/ai-sdk.js +0 -51
  55. package/dist/guard/ai-sdk.js.map +0 -1
  56. package/dist/guard/provider-guard.d.ts +0 -4
  57. package/dist/guard/provider-guard.d.ts.map +0 -1
  58. package/dist/guard/provider-guard.js +0 -38
  59. package/dist/guard/provider-guard.js.map +0 -1
  60. package/dist/guard/types.d.ts +0 -48
  61. package/dist/guard/types.d.ts.map +0 -1
  62. package/dist/guard/types.js +0 -2
  63. package/dist/guard/types.js.map +0 -1
  64. package/dist/index.d.ts +0 -45
  65. package/dist/index.d.ts.map +0 -1
  66. package/dist/index.js +0 -45
  67. package/dist/index.js.map +0 -1
  68. package/dist/lexer/scanner.d.ts +0 -106
  69. package/dist/lexer/scanner.d.ts.map +0 -1
  70. package/dist/lexer/scanner.js +0 -658
  71. package/dist/lexer/scanner.js.map +0 -1
  72. package/dist/lexer/states.d.ts +0 -31
  73. package/dist/lexer/states.d.ts.map +0 -1
  74. package/dist/lexer/states.js +0 -35
  75. package/dist/lexer/states.js.map +0 -1
  76. package/dist/lexer/tokens.d.ts +0 -22
  77. package/dist/lexer/tokens.d.ts.map +0 -1
  78. package/dist/lexer/tokens.js +0 -22
  79. package/dist/lexer/tokens.js.map +0 -1
  80. package/dist/limits.d.ts +0 -14
  81. package/dist/limits.d.ts.map +0 -1
  82. package/dist/limits.js +0 -23
  83. package/dist/limits.js.map +0 -1
  84. package/dist/parser.d.ts +0 -6
  85. package/dist/parser.d.ts.map +0 -1
  86. package/dist/parser.js +0 -922
  87. package/dist/parser.js.map +0 -1
  88. package/dist/providers/adapter.d.ts +0 -10
  89. package/dist/providers/adapter.d.ts.map +0 -1
  90. package/dist/providers/adapter.js +0 -2
  91. package/dist/providers/adapter.js.map +0 -1
  92. package/dist/providers/ai-sdk.d.ts +0 -58
  93. package/dist/providers/ai-sdk.d.ts.map +0 -1
  94. package/dist/providers/ai-sdk.js +0 -212
  95. package/dist/providers/ai-sdk.js.map +0 -1
  96. package/dist/providers/anthropic.d.ts +0 -45
  97. package/dist/providers/anthropic.d.ts.map +0 -1
  98. package/dist/providers/anthropic.js +0 -112
  99. package/dist/providers/anthropic.js.map +0 -1
  100. package/dist/providers/gemini.d.ts +0 -31
  101. package/dist/providers/gemini.d.ts.map +0 -1
  102. package/dist/providers/gemini.js +0 -94
  103. package/dist/providers/gemini.js.map +0 -1
  104. package/dist/providers/openai-compatible.d.ts +0 -33
  105. package/dist/providers/openai-compatible.d.ts.map +0 -1
  106. package/dist/providers/openai-compatible.js +0 -160
  107. package/dist/providers/openai-compatible.js.map +0 -1
  108. package/dist/providers/openai.d.ts +0 -55
  109. package/dist/providers/openai.d.ts.map +0 -1
  110. package/dist/providers/openai.js +0 -263
  111. package/dist/providers/openai.js.map +0 -1
  112. package/dist/providers/openrouter.d.ts +0 -35
  113. package/dist/providers/openrouter.d.ts.map +0 -1
  114. package/dist/providers/openrouter.js +0 -55
  115. package/dist/providers/openrouter.js.map +0 -1
  116. package/dist/semantic/builder.d.ts +0 -55
  117. package/dist/semantic/builder.d.ts.map +0 -1
  118. package/dist/semantic/builder.js +0 -140
  119. package/dist/semantic/builder.js.map +0 -1
  120. package/dist/semantic/events.d.ts +0 -2
  121. package/dist/semantic/events.d.ts.map +0 -1
  122. package/dist/semantic/events.js +0 -5
  123. package/dist/semantic/events.js.map +0 -1
  124. package/dist/semantic/snapshot.d.ts +0 -56
  125. package/dist/semantic/snapshot.d.ts.map +0 -1
  126. package/dist/semantic/snapshot.js +0 -230
  127. package/dist/semantic/snapshot.js.map +0 -1
  128. package/dist/types.d.ts +0 -156
  129. package/dist/types.d.ts.map +0 -1
  130. package/dist/types.js +0 -5
  131. package/dist/types.js.map +0 -1
  132. package/dist/utf8/decoder.d.ts +0 -53
  133. package/dist/utf8/decoder.d.ts.map +0 -1
  134. package/dist/utf8/decoder.js +0 -323
  135. package/dist/utf8/decoder.js.map +0 -1
package/LICENSE ADDED
@@ -0,0 +1,4 @@
1
+ prefix-safe-json is dual-licensed under either the MIT License
2
+ or the Apache License, Version 2.0, at your option.
3
+
4
+ See LICENSE-MIT and LICENSE-APACHE for the full license texts.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # prefix-safe-json
2
2
 
3
- > ⚠️ **Alpha** — This project is under active development. APIs may change without notice. Do not use in production.
3
+ > **v0.1** — No longer alpha. Core API (`createParser`, `createToolCallStreamCoordinator`, `createToolCallExecutionGate`, `createAiSdkExecutionGuard`) is considered stable; any breaking change will be called out in [CHANGELOG.md](CHANGELOG.md). Raw provider adapters (`OpenAIStreamAdapter` and friends) remain experimental — see [Current Status](#current-status) for what's covered.
4
4
 
5
5
  **Don't execute incomplete AI tool calls.**
6
6
 
@@ -212,7 +212,7 @@ It does **not**:
212
212
  See [`docs/EXECUTION_GATE.md`](docs/EXECUTION_GATE.md#limitations---what-this-does-not-protect-against)
213
213
  for the full list, including known internal limitations.
214
214
 
215
- ## Current Status (Alpha)
215
+ ## Current Status
216
216
 
217
217
  ### Implemented
218
218
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prefix-safe-json",
3
- "version": "0.0.1-alpha.4",
3
+ "version": "0.1.0",
4
4
  "description": "Fail-closed execution integrity for streamed LLM tool calls — reject truncated or unconfirmed arguments before side effects",
5
5
  "keywords": [
6
6
  "json",
@@ -34,6 +34,7 @@
34
34
  },
35
35
  "files": [
36
36
  "dist",
37
+ "LICENSE",
37
38
  "LICENSE-MIT",
38
39
  "LICENSE-APACHE",
39
40
  "README.md"
@@ -1,53 +0,0 @@
1
- import { ParserOptions } from "../types.js";
2
- import { NormalizedToolStreamEvent, StreamEndReason } from "./protocol.js";
3
- import { ToolCallStreamCoordinator, ToolCallCoordinatorSnapshot, ToolCallCoordinatorEvent, ToolCallCoordinatorFinalResult, CoordinatorPushResult, CoordinatorLimits, JsonSchemaLike } from "./types.js";
4
- export declare class DefaultToolCallStreamCoordinator implements ToolCallStreamCoordinator {
5
- private readonly limits;
6
- private readonly parserOptions;
7
- private readonly toolValidators;
8
- private calls;
9
- private sourceKeyToInternalId;
10
- private callCounter;
11
- private eventQueue;
12
- private diagnostics;
13
- private eventsProcessed;
14
- private globalSequence;
15
- private isFinished;
16
- /**
17
- * @param limits Coordinator-level limits (concurrent tool calls, tool name
18
- * size, etc.) — distinct from `parserOptions`, which configures each
19
- * underlying per-call IncrementalJsonParser (limits, repairs). Previously
20
- * there was no way to pass the latter through at all; every parser the
21
- * coordinator created was hardcoded to library defaults.
22
- * @param toolSchemas Optional JSON Schema (draft-07) per tool name. When a
23
- * call for a registered tool reaches outcome "complete", its
24
- * `stableValue` is validated against the schema. Structural
25
- * prefix-safety (no truncated/fabricated values) and schema validity
26
- * are independent concerns — a value can be genuinely complete and
27
- * still not match what the tool declared it needs (wrong type, missing
28
- * required field the model never provided at all). Both must hold for
29
- * `executable` to be true. Schemas are compiled eagerly here so a
30
- * malformed schema fails fast at construction, not mid-stream.
31
- */
32
- constructor(limits?: Partial<CoordinatorLimits>, parserOptions?: ParserOptions, toolSchemas?: Record<string, JsonSchemaLike>);
33
- push(event: NormalizedToolStreamEvent): CoordinatorPushResult;
34
- private handleStart;
35
- private handleIdentity;
36
- private handleNameDelta;
37
- private handleArgumentsDelta;
38
- private handleCallEnd;
39
- private finishCall;
40
- private hasCallConflict;
41
- private handleProviderDiagnostic;
42
- private handleStreamEnd;
43
- private getCall;
44
- private addDiagnostic;
45
- snapshot(): ToolCallCoordinatorSnapshot;
46
- drainEvents(): readonly ToolCallCoordinatorEvent[];
47
- finish(meta?: {
48
- reason?: StreamEndReason;
49
- providerReason?: string;
50
- }): ToolCallCoordinatorFinalResult;
51
- }
52
- export declare function createToolCallStreamCoordinator(limits?: Partial<CoordinatorLimits>, parserOptions?: ParserOptions, toolSchemas?: Record<string, JsonSchemaLike>): ToolCallStreamCoordinator;
53
- //# sourceMappingURL=coordinator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/coordinator/coordinator.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,aAAa,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,yBAAyB,EAAgB,eAAe,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,8BAA8B,EAC9B,qBAAqB,EACrB,iBAAiB,EAIjB,cAAc,EACf,MAAM,YAAY,CAAC;AAyBpB,qBAAa,gCAAiC,YAAW,yBAAyB;IAChF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;IAC1D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAC/D,OAAO,CAAC,KAAK,CAAgD;IAC7D,OAAO,CAAC,qBAAqB,CAAkC;IAC/D,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,UAAU,CAAS;IAE3B;;;;;;;;;;;;;;;OAeG;gBAED,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACnC,aAAa,CAAC,EAAE,aAAa,EAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAa9C,IAAI,CAAC,KAAK,EAAE,yBAAyB,GAAG,qBAAqB;IAgD7D,OAAO,CAAC,WAAW;IAqDnB,OAAO,CAAC,cAAc;IAgDtB,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,UAAU;IAoElB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,aAAa;IASrB,QAAQ,IAAI,2BAA2B;IAmBvC,WAAW,IAAI,SAAS,wBAAwB,EAAE;IAMlD,MAAM,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,eAAe,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,8BAA8B;CAcrG;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACnC,aAAa,CAAC,EAAE,aAAa,EAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAC3C,yBAAyB,CAE3B"}
@@ -1,448 +0,0 @@
1
- import { Ajv } from "ajv";
2
- import { createParser } from "../parser.js";
3
- import { DEFAULT_COORDINATOR_LIMITS } from "./types.js";
4
- class CoordinatorCallState {
5
- internalId;
6
- provider;
7
- toolCallId;
8
- toolIndex;
9
- name;
10
- nameComplete = false;
11
- argumentStreamClosed = false;
12
- parser;
13
- status = "collecting";
14
- schemaValid;
15
- constructor(internalId, provider, parser) {
16
- this.internalId = internalId;
17
- this.provider = provider;
18
- this.parser = parser;
19
- }
20
- }
21
- export class DefaultToolCallStreamCoordinator {
22
- limits;
23
- parserOptions;
24
- toolValidators;
25
- calls = new Map();
26
- sourceKeyToInternalId = new Map();
27
- callCounter = 0;
28
- eventQueue = [];
29
- diagnostics = [];
30
- eventsProcessed = 0;
31
- globalSequence = 0;
32
- isFinished = false;
33
- /**
34
- * @param limits Coordinator-level limits (concurrent tool calls, tool name
35
- * size, etc.) — distinct from `parserOptions`, which configures each
36
- * underlying per-call IncrementalJsonParser (limits, repairs). Previously
37
- * there was no way to pass the latter through at all; every parser the
38
- * coordinator created was hardcoded to library defaults.
39
- * @param toolSchemas Optional JSON Schema (draft-07) per tool name. When a
40
- * call for a registered tool reaches outcome "complete", its
41
- * `stableValue` is validated against the schema. Structural
42
- * prefix-safety (no truncated/fabricated values) and schema validity
43
- * are independent concerns — a value can be genuinely complete and
44
- * still not match what the tool declared it needs (wrong type, missing
45
- * required field the model never provided at all). Both must hold for
46
- * `executable` to be true. Schemas are compiled eagerly here so a
47
- * malformed schema fails fast at construction, not mid-stream.
48
- */
49
- constructor(limits, parserOptions, toolSchemas) {
50
- this.limits = { ...DEFAULT_COORDINATOR_LIMITS, ...limits };
51
- this.parserOptions = parserOptions;
52
- this.toolValidators = new Map();
53
- if (toolSchemas) {
54
- const ajv = new Ajv({ allErrors: true, strict: false });
55
- for (const [toolName, schema] of Object.entries(toolSchemas)) {
56
- this.toolValidators.set(toolName, ajv.compile(schema));
57
- }
58
- }
59
- }
60
- push(event) {
61
- if (this.isFinished) {
62
- this.addDiagnostic({
63
- code: "E_EVENT_AFTER_STREAM_END",
64
- severity: "error",
65
- message: "Event pushed after stream end",
66
- });
67
- return { accepted: false };
68
- }
69
- if (this.eventsProcessed >= this.limits.maxNormalizedEvents) {
70
- this.addDiagnostic({
71
- code: "E_COORDINATOR_LIMIT_EVENTS",
72
- severity: "fatal",
73
- message: "Maximum normalized events exceeded",
74
- });
75
- return { accepted: false };
76
- }
77
- this.eventsProcessed++;
78
- switch (event.type) {
79
- case "tool_call_start":
80
- this.handleStart(event);
81
- break;
82
- case "tool_call_identity":
83
- this.handleIdentity(event);
84
- break;
85
- case "tool_call_name_delta":
86
- this.handleNameDelta(event);
87
- break;
88
- case "tool_call_arguments_delta":
89
- this.handleArgumentsDelta(event);
90
- break;
91
- case "tool_call_end":
92
- this.handleCallEnd(event);
93
- break;
94
- case "provider_diagnostic":
95
- this.handleProviderDiagnostic(event);
96
- break;
97
- case "provider_stream_end":
98
- this.handleStreamEnd(event);
99
- break;
100
- }
101
- return { accepted: true };
102
- }
103
- handleStart(event) {
104
- const sourceKey = event.callRef.sourceKey;
105
- const existingId = this.sourceKeyToInternalId.get(sourceKey);
106
- if (existingId !== undefined) {
107
- this.addDiagnostic({
108
- code: "E_DUPLICATE_TOOL_CALL_START",
109
- severity: "error",
110
- internalId: existingId,
111
- message: `Duplicate start for tool call sourceKey: ${sourceKey}`,
112
- });
113
- return;
114
- }
115
- if (this.calls.size >= this.limits.maxToolCalls) {
116
- this.addDiagnostic({
117
- code: "E_COORDINATOR_LIMIT_CALLS",
118
- severity: "error",
119
- message: "Maximum tool calls exceeded",
120
- });
121
- return;
122
- }
123
- const internalId = `call-${this.callCounter++}`;
124
- this.sourceKeyToInternalId.set(sourceKey, internalId);
125
- const parser = createParser(this.parserOptions);
126
- const call = new CoordinatorCallState(internalId, event.provider, parser);
127
- if (event.toolCallId !== undefined)
128
- call.toolCallId = event.toolCallId;
129
- if (event.toolIndex !== undefined)
130
- call.toolIndex = event.toolIndex;
131
- if (event.name !== undefined)
132
- call.name = event.name;
133
- this.calls.set(internalId, call);
134
- this.eventQueue.push({
135
- type: "tool_call_discovered",
136
- sequence: this.globalSequence++,
137
- internalId,
138
- provider: event.provider,
139
- });
140
- if (event.toolCallId !== undefined || event.toolIndex !== undefined) {
141
- this.eventQueue.push({
142
- type: "tool_call_identity_updated",
143
- sequence: this.globalSequence++,
144
- internalId,
145
- toolCallId: event.toolCallId,
146
- toolIndex: event.toolIndex,
147
- });
148
- }
149
- }
150
- handleIdentity(event) {
151
- const internalId = this.sourceKeyToInternalId.get(event.callRef.sourceKey);
152
- if (!internalId)
153
- return;
154
- const call = this.getCall(internalId);
155
- if (!call)
156
- return;
157
- let changed = false;
158
- if (event.toolCallId !== undefined) {
159
- if (call.toolCallId !== undefined && call.toolCallId !== event.toolCallId) {
160
- this.addDiagnostic({
161
- code: "E_PROVIDER_IDENTITY_CONFLICT",
162
- severity: "error",
163
- internalId: call.internalId,
164
- message: `Conflicting ID: had ${call.toolCallId}, got ${event.toolCallId}`,
165
- });
166
- call.status = "invalid";
167
- }
168
- else if (call.toolCallId === undefined) {
169
- call.toolCallId = event.toolCallId;
170
- changed = true;
171
- }
172
- }
173
- if (event.toolIndex !== undefined) {
174
- if (call.toolIndex !== undefined && call.toolIndex !== event.toolIndex) {
175
- this.addDiagnostic({
176
- code: "E_PROVIDER_INDEX_CONFLICT",
177
- severity: "error",
178
- internalId: call.internalId,
179
- message: `Conflicting index: had ${call.toolIndex}, got ${event.toolIndex}`,
180
- });
181
- call.status = "invalid";
182
- }
183
- else if (call.toolIndex === undefined) {
184
- call.toolIndex = event.toolIndex;
185
- changed = true;
186
- }
187
- }
188
- if (changed) {
189
- this.eventQueue.push({
190
- type: "tool_call_identity_updated",
191
- sequence: this.globalSequence++,
192
- internalId: call.internalId,
193
- toolCallId: call.toolCallId,
194
- toolIndex: call.toolIndex,
195
- });
196
- }
197
- }
198
- handleNameDelta(event) {
199
- const internalId = this.sourceKeyToInternalId.get(event.callRef.sourceKey);
200
- if (!internalId)
201
- return;
202
- const call = this.getCall(internalId);
203
- if (!call)
204
- return;
205
- if (call.status !== "collecting") {
206
- this.addDiagnostic({
207
- code: "E_NAME_DELTA_AFTER_END",
208
- severity: "error",
209
- internalId: call.internalId,
210
- message: "Name delta after call ended",
211
- });
212
- return;
213
- }
214
- call.name = (call.name ?? "") + event.delta;
215
- if (call.name.length > this.limits.maxToolNameBytes) {
216
- this.addDiagnostic({
217
- code: "E_TOOL_NAME_LIMIT",
218
- severity: "error",
219
- internalId: call.internalId,
220
- message: "Tool name exceeded maximum length",
221
- });
222
- call.status = "invalid";
223
- }
224
- this.eventQueue.push({
225
- type: "tool_name_updated",
226
- sequence: event.sequence,
227
- internalId: call.internalId,
228
- name: call.name,
229
- complete: false,
230
- });
231
- }
232
- handleArgumentsDelta(event) {
233
- const internalId = this.sourceKeyToInternalId.get(event.callRef.sourceKey);
234
- if (!internalId)
235
- return;
236
- const call = this.getCall(internalId);
237
- if (!call)
238
- return;
239
- if (call.status !== "collecting") {
240
- this.addDiagnostic({
241
- code: "E_ARGUMENT_DELTA_AFTER_END",
242
- severity: "error",
243
- internalId: call.internalId,
244
- message: "Argument delta after call ended",
245
- });
246
- return;
247
- }
248
- call.parser.push(event.delta);
249
- // Drain parser events and map them to coordinator events
250
- const parserEvents = call.parser.drainEvents();
251
- for (const pe of parserEvents) {
252
- this.eventQueue.push({
253
- type: "tool_argument_event",
254
- sequence: this.globalSequence++,
255
- internalId: call.internalId,
256
- event: pe,
257
- });
258
- }
259
- }
260
- handleCallEnd(event) {
261
- const internalId = this.sourceKeyToInternalId.get(event.callRef.sourceKey);
262
- if (!internalId)
263
- return;
264
- const call = this.getCall(internalId);
265
- if (!call)
266
- return;
267
- if (call.status !== "collecting")
268
- return;
269
- call.nameComplete = true;
270
- call.argumentStreamClosed = true;
271
- if (call.name !== undefined) {
272
- this.eventQueue.push({
273
- type: "tool_name_updated",
274
- sequence: this.globalSequence++,
275
- internalId: call.internalId,
276
- name: call.name,
277
- complete: true,
278
- });
279
- }
280
- else {
281
- this.addDiagnostic({
282
- code: "E_TOOL_NAME_MISSING",
283
- severity: "error",
284
- internalId: call.internalId,
285
- message: "Tool name missing at end",
286
- });
287
- }
288
- }
289
- finishCall(call, reason) {
290
- if (call.status !== "collecting")
291
- return;
292
- // For individual call end, we pass reason to the internal parser
293
- const res = call.parser.finish({ reason });
294
- // Determine the mapped coordinator outcome
295
- let outcome = "invalid";
296
- if (res.outcome === "valid") {
297
- outcome = "complete";
298
- if (call.name === undefined || this.hasCallConflict(call)) {
299
- outcome = "invalid";
300
- }
301
- }
302
- else if (res.outcome === "truncated") {
303
- outcome = "truncated";
304
- }
305
- else if (res.outcome === "salvaged") {
306
- outcome = "salvaged";
307
- }
308
- if (reason === "cancelled")
309
- outcome = "cancelled";
310
- call.status = outcome;
311
- // Drain remaining parser events
312
- const parserEvents = call.parser.drainEvents();
313
- for (const pe of parserEvents) {
314
- this.eventQueue.push({
315
- type: "tool_argument_event",
316
- sequence: this.globalSequence++,
317
- internalId: call.internalId,
318
- event: pe,
319
- });
320
- }
321
- // Schema validation is a separate concern from structural
322
- // prefix-safety: only meaningful once the value is genuinely complete,
323
- // and only for tools with a registered schema.
324
- if (outcome === "complete" && call.name !== undefined) {
325
- const validator = this.toolValidators.get(call.name);
326
- if (validator) {
327
- call.schemaValid = validator(res.stableValue) === true;
328
- if (!call.schemaValid) {
329
- const errors = (validator.errors ?? [])
330
- .map((e) => `${e.instancePath || "<root>"} ${e.message ?? ""}`.trim())
331
- .join("; ");
332
- this.addDiagnostic({
333
- code: "E_SCHEMA_VALIDATION_FAILED",
334
- severity: "error",
335
- internalId: call.internalId,
336
- message: `Tool call arguments for "${call.name}" do not match its schema: ${errors || "unknown validation error"}`,
337
- });
338
- }
339
- }
340
- }
341
- // Determine executable according to Executable Policy — structural
342
- // completeness AND (if a schema is registered) schema validity.
343
- const executable = outcome === "complete" && res.executable && call.schemaValid !== false;
344
- this.eventQueue.push({
345
- type: "tool_call_finished",
346
- sequence: this.globalSequence++,
347
- internalId: call.internalId,
348
- outcome,
349
- executable,
350
- });
351
- }
352
- hasCallConflict(call) {
353
- return this.diagnostics.some(d => d.internalId === call.internalId && (d.severity === "error" || d.severity === "fatal"));
354
- }
355
- handleProviderDiagnostic(event) {
356
- const internalId = event.callRef ? this.sourceKeyToInternalId.get(event.callRef.sourceKey) : undefined;
357
- this.addDiagnostic({
358
- code: event.code,
359
- severity: event.severity,
360
- message: event.message,
361
- internalId,
362
- });
363
- }
364
- handleStreamEnd(event) {
365
- this.isFinished = true;
366
- // Close all open calls
367
- for (const call of this.calls.values()) {
368
- if (call.status === "collecting") {
369
- if (!call.argumentStreamClosed) {
370
- this.addDiagnostic({
371
- code: "E_STREAM_ENDED_WITH_OPEN_CALL",
372
- severity: "error",
373
- internalId: call.internalId,
374
- message: "Stream ended with open call",
375
- });
376
- }
377
- this.finishCall(call, event.reason);
378
- }
379
- }
380
- this.eventQueue.push({
381
- type: "provider_stream_finished",
382
- sequence: this.globalSequence++,
383
- reason: event.reason,
384
- });
385
- }
386
- getCall(internalId) {
387
- const call = this.calls.get(internalId);
388
- if (!call) {
389
- this.addDiagnostic({
390
- code: "E_TOOL_CALL_NOT_FOUND",
391
- severity: "error",
392
- internalId,
393
- message: `Tool call ${internalId} not found`,
394
- });
395
- return undefined;
396
- }
397
- return call;
398
- }
399
- addDiagnostic(diag) {
400
- this.diagnostics.push(diag);
401
- this.eventQueue.push({
402
- type: "coordinator_diagnostic",
403
- sequence: this.globalSequence++,
404
- diagnostic: diag,
405
- });
406
- }
407
- snapshot() {
408
- return {
409
- calls: Array.from(this.calls.values()).map((c) => ({
410
- internalId: c.internalId,
411
- provider: c.provider,
412
- toolCallId: c.toolCallId,
413
- toolIndex: c.toolIndex,
414
- name: c.name,
415
- nameComplete: c.nameComplete,
416
- parser: c.parser.snapshot(),
417
- status: c.status,
418
- schemaValid: c.schemaValid,
419
- })),
420
- diagnostics: [...this.diagnostics],
421
- eventsProcessed: this.eventsProcessed,
422
- isFinished: this.isFinished,
423
- };
424
- }
425
- drainEvents() {
426
- const events = this.eventQueue;
427
- this.eventQueue = [];
428
- return events;
429
- }
430
- finish(meta) {
431
- if (!this.isFinished) {
432
- this.handleStreamEnd({
433
- type: "provider_stream_end",
434
- sequence: this.eventsProcessed + 1,
435
- provider: "unknown",
436
- reason: meta?.reason ?? "unknown",
437
- providerReason: meta?.providerReason,
438
- });
439
- }
440
- return {
441
- calls: this.snapshot().calls,
442
- };
443
- }
444
- }
445
- export function createToolCallStreamCoordinator(limits, parserOptions, toolSchemas) {
446
- return new DefaultToolCallStreamCoordinator(limits, parserOptions, toolSchemas);
447
- }
448
- //# sourceMappingURL=coordinator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/coordinator/coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAoB,MAAM,KAAK,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAOL,0BAA0B,EAI3B,MAAM,YAAY,CAAC;AAEpB,MAAM,oBAAoB;IACf,UAAU,CAAS;IACnB,QAAQ,CAAe;IAEhC,UAAU,CAAU;IACpB,SAAS,CAAU;IAEnB,IAAI,CAAU;IACd,YAAY,GAAY,KAAK,CAAC;IAC9B,oBAAoB,GAAY,KAAK,CAAC;IAE7B,MAAM,CAAwB;IAEvC,MAAM,GAA4B,YAAY,CAAC;IAC/C,WAAW,CAAW;IAEtB,YAAY,UAAkB,EAAE,QAAsB,EAAE,MAA6B;QACnF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,gCAAgC;IAC1B,MAAM,CAAoB;IAC1B,aAAa,CAA4B;IACzC,cAAc,CAAgC;IACvD,KAAK,GAAsC,IAAI,GAAG,EAAE,CAAC;IACrD,qBAAqB,GAAwB,IAAI,GAAG,EAAE,CAAC;IACvD,WAAW,GAAG,CAAC,CAAC;IAChB,UAAU,GAA+B,EAAE,CAAC;IAC5C,WAAW,GAA4B,EAAE,CAAC;IAC1C,eAAe,GAAG,CAAC,CAAC;IACpB,cAAc,GAAG,CAAC,CAAC;IACnB,UAAU,GAAG,KAAK,CAAC;IAE3B;;;;;;;;;;;;;;;OAeG;IACH,YACE,MAAmC,EACnC,aAA6B,EAC7B,WAA4C;QAE5C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,0BAA0B,EAAE,GAAG,MAAM,EAAE,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAChC,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAgC;QACnC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,aAAa,CAAC;gBACjB,IAAI,EAAE,0BAA0B;gBAChC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,+BAA+B;aACzC,CAAC,CAAC;YACH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC5D,IAAI,CAAC,aAAa,CAAC;gBACjB,IAAI,EAAE,4BAA4B;gBAClC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,oCAAoC;aAC9C,CAAC,CAAC;YACH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,iBAAiB;gBACpB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxB,MAAM;YACR,KAAK,oBAAoB;gBACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,sBAAsB;gBACzB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,2BAA2B;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM;YACR,KAAK,eAAe;gBAClB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC1B,MAAM;YACR,KAAK,qBAAqB;gBACxB,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;gBACrC,MAAM;YACR,KAAK,qBAAqB;gBACxB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAM;QACV,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAEO,WAAW,CAAC,KAA8D;QAChF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC;gBACjB,IAAI,EAAE,6BAA6B;gBACnC,QAAQ,EAAE,OAAO;gBACjB,UAAU,EAAE,UAAU;gBACtB,OAAO,EAAE,4CAA4C,SAAS,EAAE;aACjE,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAChD,IAAI,CAAC,aAAa,CAAC;gBACjB,IAAI,EAAE,2BAA2B;gBACjC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,6BAA6B;aACvC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE1E,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACvE,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACpE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAErD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE;YAC/B,UAAU;YACV,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,4BAA4B;gBAClC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE;gBAC/B,UAAU;gBACV,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,KAAiE;QACtF,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;gBAC1E,IAAI,CAAC,aAAa,CAAC;oBACjB,IAAI,EAAE,8BAA8B;oBACpC,QAAQ,EAAE,OAAO;oBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,OAAO,EAAE,uBAAuB,IAAI,CAAC,UAAU,SAAS,KAAK,CAAC,UAAU,EAAE;iBAC3E,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YAC1B,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;gBACnC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;gBACvE,IAAI,CAAC,aAAa,CAAC;oBACjB,IAAI,EAAE,2BAA2B;oBACjC,QAAQ,EAAE,OAAO;oBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,OAAO,EAAE,0BAA0B,IAAI,CAAC,SAAS,SAAS,KAAK,CAAC,SAAS,EAAE;iBAC5E,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YAC1B,CAAC;iBAAM,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACxC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBACjC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,4BAA4B;gBAClC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,KAAmE;QACzF,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC;gBACjB,IAAI,EAAE,wBAAwB;gBAC9B,QAAQ,EAAE,OAAO;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO,EAAE,6BAA6B;aACvC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QAE5C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACpD,IAAI,CAAC,aAAa,CAAC;gBACjB,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE,OAAO;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO,EAAE,mCAAmC;aAC7C,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,mBAAmB;YACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;IAEO,oBAAoB,CAAC,KAAwE;QACnG,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC;gBACjB,IAAI,EAAE,4BAA4B;gBAClC,QAAQ,EAAE,OAAO;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO,EAAE,iCAAiC;aAC3C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE9B,yDAAyD;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC/C,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,KAA4D;QAChF,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY;YAAE,OAAO;QAEzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAEjC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACL,IAAI,CAAC,aAAa,CAAC;gBAClB,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,OAAO;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO,EAAE,0BAA0B;aACpC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,IAA0B,EAAE,MAAuB;QACpE,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY;YAAE,OAAO;QAEzC,iEAAiE;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAE3C,2CAA2C;QAC3C,IAAI,OAAO,GAA4B,SAAS,CAAC;QACjD,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC3B,OAAO,GAAG,UAAU,CAAC;YACrB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,OAAO,GAAG,SAAS,CAAC;YACvB,CAAC;QACJ,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;YACtC,OAAO,GAAG,WAAW,CAAC;QACzB,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACrC,OAAO,GAAG,UAAU,CAAC;QACxB,CAAC;QAED,IAAI,MAAM,KAAK,WAAW;YAAE,OAAO,GAAG,WAAW,CAAC;QAElD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QAEtB,gCAAgC;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC/C,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;QACL,CAAC;QAED,0DAA0D;QAC1D,uEAAuE;QACvE,+CAA+C;QAC/C,IAAI,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACtB,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;yBACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;yBACrE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACd,IAAI,CAAC,aAAa,CAAC;wBACjB,IAAI,EAAE,4BAA4B;wBAClC,QAAQ,EAAE,OAAO;wBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,OAAO,EAAE,4BAA4B,IAAI,CAAC,IAAI,8BAA8B,MAAM,IAAI,0BAA0B,EAAE;qBACnH,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,gEAAgE;QAChE,MAAM,UAAU,GAAG,OAAO,KAAK,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC;QAE1F,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO;YACP,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,IAA0B;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC;IAC5H,CAAC;IAEO,wBAAwB,CAAC,KAAkE;QACjG,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvG,IAAI,CAAC,aAAa,CAAC;YACjB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,KAAkE;QACxF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,uBAAuB;QACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC/B,IAAI,CAAC,aAAa,CAAC;wBACjB,IAAI,EAAE,+BAA+B;wBACrC,QAAQ,EAAE,OAAO;wBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,OAAO,EAAE,6BAA6B;qBACvC,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE;YAC/B,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,UAAkB;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,aAAa,CAAC;gBACjB,IAAI,EAAE,uBAAuB;gBAC7B,QAAQ,EAAE,OAAO;gBACjB,UAAU;gBACV,OAAO,EAAE,aAAa,UAAU,YAAY;aAC7C,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,aAAa,CAAC,IAA2B;QAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,wBAAwB;YAC9B,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE;YAC/B,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjD,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC3B,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAC;YACH,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;YAClC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;IAED,WAAW;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,IAA4D;QACjE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,eAAe,CAAC;gBACnB,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC;gBAClC,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,SAAS;gBACjC,cAAc,EAAE,IAAI,EAAE,cAAc;aACrC,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK;SAC7B,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,+BAA+B,CAC7C,MAAmC,EACnC,aAA6B,EAC7B,WAA4C;IAE5C,OAAO,IAAI,gCAAgC,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AAClF,CAAC"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Emitted (as a stream-wide `provider_diagnostic`, no `callRef`) by a
3
- * provider adapter when the underlying provider reports that generation was
4
- * stopped by a content-safety/policy filter, as opposed to a generic
5
- * cancellation. The execution gate matches on this to return a distinct
6
- * `reason: "content_filtered"` rather than lumping it in with ordinary
7
- * incomplete-stream retries - a policy termination should not be retried
8
- * blindly.
9
- */
10
- export declare const CONTENT_FILTERED_DIAGNOSTIC_CODE = "E_CONTENT_FILTERED";
11
- //# sourceMappingURL=diagnostic-codes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnostic-codes.d.ts","sourceRoot":"","sources":["../../src/coordinator/diagnostic-codes.ts"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AACH,eAAO,MAAM,gCAAgC,uBAAuB,CAAC"}
@@ -1,22 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // Cross-module coordinator-level diagnostic codes.
3
- //
4
- // Most coordinator diagnostics (see coordinator.ts) are inline string
5
- // literals local to wherever they're raised - there's no central registry,
6
- // unlike the parser-level `DiagnosticCode` in diagnostics/codes.ts. This
7
- // file exists only for the handful of codes that a provider adapter raises
8
- // and something *outside* that adapter (e.g. the execution gate) needs to
9
- // recognize by exact code, where a shared constant is safer than either
10
- // module guessing the other's string literal.
11
- // ---------------------------------------------------------------------------
12
- /**
13
- * Emitted (as a stream-wide `provider_diagnostic`, no `callRef`) by a
14
- * provider adapter when the underlying provider reports that generation was
15
- * stopped by a content-safety/policy filter, as opposed to a generic
16
- * cancellation. The execution gate matches on this to return a distinct
17
- * `reason: "content_filtered"` rather than lumping it in with ordinary
18
- * incomplete-stream retries - a policy termination should not be retried
19
- * blindly.
20
- */
21
- export const CONTENT_FILTERED_DIAGNOSTIC_CODE = "E_CONTENT_FILTERED";
22
- //# sourceMappingURL=diagnostic-codes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnostic-codes.js","sourceRoot":"","sources":["../../src/coordinator/diagnostic-codes.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mDAAmD;AACnD,EAAE;AACF,sEAAsE;AACtE,2EAA2E;AAC3E,yEAAyE;AACzE,2EAA2E;AAC3E,0EAA0E;AAC1E,wEAAwE;AACxE,8CAA8C;AAC9C,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,oBAAoB,CAAC"}