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,48 @@
1
+ import { ProviderName, NormalizedToolStreamEvent, StreamEndReason } from "../coordinator/protocol.js";
2
+ import { ProviderStreamAdapter } from "./adapter.js";
3
+ interface OpenAIFunctionCallDelta {
4
+ name?: string;
5
+ arguments?: string;
6
+ }
7
+ interface OpenAIChoice {
8
+ delta?: {
9
+ function_call?: OpenAIFunctionCallDelta;
10
+ tool_calls?: unknown;
11
+ };
12
+ finish_reason?: string | null;
13
+ }
14
+ export interface OpenAIEvent {
15
+ choices?: OpenAIChoice[];
16
+ type?: string;
17
+ output_index?: number;
18
+ item?: {
19
+ type?: string;
20
+ id?: string;
21
+ call_id?: string;
22
+ name?: string;
23
+ arguments?: string;
24
+ };
25
+ item_id?: string;
26
+ delta?: string;
27
+ arguments?: string;
28
+ response?: {
29
+ status?: string;
30
+ };
31
+ }
32
+ export declare class OpenAIStreamAdapter implements ProviderStreamAdapter<unknown> {
33
+ readonly provider: ProviderName;
34
+ private sequence;
35
+ private compatibleAdapter;
36
+ private hasLegacyFunctionCall;
37
+ private legacySourceKey;
38
+ private accumulatedArguments;
39
+ private receivedDeltas;
40
+ private finished;
41
+ push(rawEvent: unknown): readonly NormalizedToolStreamEvent[];
42
+ finish(meta?: {
43
+ reason?: StreamEndReason;
44
+ providerReason?: string;
45
+ }): readonly NormalizedToolStreamEvent[];
46
+ }
47
+ export {};
48
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACtG,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAGrD,UAAU,uBAAuB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE;QACN,aAAa,CAAC,EAAE,uBAAuB,CAAC;QACxC,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,qBAAa,mBAAoB,YAAW,qBAAqB,CAAC,OAAO,CAAC;IACxE,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAY;IAC3C,OAAO,CAAC,QAAQ,CAAK;IAGrB,OAAO,CAAC,iBAAiB,CAAuC;IAGhE,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,eAAe,CAA0B;IAGjD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,cAAc,CAAqB;IAE3C,OAAO,CAAC,QAAQ,CAAS;IAEzB,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,yBAAyB,EAAE;IAkL7D,MAAM,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,eAAe,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,yBAAyB,EAAE;CAiB3G"}
@@ -0,0 +1,205 @@
1
+ import { OpenAICompatibleStreamAdapter } from "./openai-compatible.js";
2
+ export class OpenAIStreamAdapter {
3
+ provider = "openai";
4
+ sequence = 0;
5
+ // Delegating tool_calls format to compatible adapter
6
+ compatibleAdapter = new OpenAICompatibleStreamAdapter();
7
+ // For function_call (legacy)
8
+ hasLegacyFunctionCall = false;
9
+ legacySourceKey = "legacy-function-call";
10
+ // For Responses API
11
+ accumulatedArguments = new Map();
12
+ receivedDeltas = new Set();
13
+ finished = false;
14
+ push(rawEvent) {
15
+ if (this.finished)
16
+ return [];
17
+ const events = [];
18
+ if (!rawEvent || typeof rawEvent !== "object") {
19
+ events.push({
20
+ type: "provider_diagnostic",
21
+ sequence: ++this.sequence,
22
+ provider: this.provider,
23
+ code: "E_PROVIDER_EVENT_MALFORMED",
24
+ severity: "error",
25
+ message: "Raw event is not an object",
26
+ });
27
+ return events;
28
+ }
29
+ const chunk = rawEvent;
30
+ // Handle Responses API
31
+ if (chunk.type?.startsWith("response.") || chunk.type === "error") {
32
+ if (chunk.type === "error") {
33
+ events.push({
34
+ type: "provider_stream_end",
35
+ sequence: ++this.sequence,
36
+ provider: this.provider,
37
+ reason: "provider_error",
38
+ providerReason: "error",
39
+ });
40
+ this.finished = true;
41
+ return events;
42
+ }
43
+ if (chunk.type === "response.output_item.added" && chunk.item?.type === "function_call" && chunk.item.id) {
44
+ events.push({
45
+ type: "tool_call_start",
46
+ sequence: ++this.sequence,
47
+ provider: this.provider,
48
+ callRef: { sourceKey: `output-item:${chunk.item.id}` },
49
+ toolCallId: chunk.item.call_id,
50
+ name: chunk.item.name,
51
+ });
52
+ }
53
+ else if (chunk.type === "response.function_call_arguments.delta" && chunk.item_id && chunk.delta) {
54
+ this.receivedDeltas.add(chunk.item_id);
55
+ const acc = this.accumulatedArguments.get(chunk.item_id) ?? "";
56
+ this.accumulatedArguments.set(chunk.item_id, acc + chunk.delta);
57
+ events.push({
58
+ type: "tool_call_arguments_delta",
59
+ sequence: ++this.sequence,
60
+ provider: this.provider,
61
+ callRef: { sourceKey: `output-item:${chunk.item_id}` },
62
+ delta: chunk.delta,
63
+ });
64
+ }
65
+ else if (chunk.type === "response.function_call_arguments.done" && chunk.item_id && chunk.arguments !== undefined) {
66
+ const acc = this.accumulatedArguments.get(chunk.item_id) ?? "";
67
+ const hasDeltas = this.receivedDeltas.has(chunk.item_id);
68
+ if (!hasDeltas && chunk.arguments.length > 0) {
69
+ // No deltas, just final arguments.
70
+ events.push({
71
+ type: "tool_call_arguments_delta",
72
+ sequence: ++this.sequence,
73
+ provider: this.provider,
74
+ callRef: { sourceKey: `output-item:${chunk.item_id}` },
75
+ delta: chunk.arguments,
76
+ });
77
+ this.accumulatedArguments.set(chunk.item_id, chunk.arguments);
78
+ }
79
+ else if (hasDeltas && chunk.arguments !== acc) {
80
+ events.push({
81
+ type: "provider_diagnostic",
82
+ sequence: ++this.sequence,
83
+ provider: this.provider,
84
+ callRef: { sourceKey: `output-item:${chunk.item_id}` },
85
+ code: "E_FINAL_ARGUMENTS_CONFLICT",
86
+ severity: "error",
87
+ message: "Final arguments do not match accumulated deltas",
88
+ });
89
+ }
90
+ }
91
+ else if (chunk.type === "response.output_item.done" && chunk.item?.id) {
92
+ events.push({
93
+ type: "tool_call_end",
94
+ sequence: ++this.sequence,
95
+ provider: this.provider,
96
+ callRef: { sourceKey: `output-item:${chunk.item.id}` },
97
+ reason: "complete", // Default complete for item done
98
+ });
99
+ }
100
+ else if (chunk.type === "response.completed") {
101
+ events.push({
102
+ type: "provider_stream_end",
103
+ sequence: ++this.sequence,
104
+ provider: this.provider,
105
+ reason: "complete",
106
+ providerReason: chunk.response?.status,
107
+ });
108
+ this.finished = true;
109
+ }
110
+ else if (chunk.type === "response.incomplete") {
111
+ events.push({
112
+ type: "provider_stream_end",
113
+ sequence: ++this.sequence,
114
+ provider: this.provider,
115
+ reason: "cancelled", // Incomplete treated as cancelled
116
+ providerReason: chunk.response?.status,
117
+ });
118
+ this.finished = true;
119
+ }
120
+ return events;
121
+ }
122
+ // Check if it's the standard tool_calls format
123
+ if (chunk.choices?.[0]?.delta?.tool_calls !== undefined) {
124
+ // Delegate to OpenAICompatibleStreamAdapter
125
+ const compatibleEvents = this.compatibleAdapter.push(rawEvent);
126
+ // Map provider name to "openai"
127
+ return compatibleEvents.map(e => ({ ...e, provider: this.provider, sequence: ++this.sequence }));
128
+ }
129
+ // Handle legacy function_call format
130
+ if (Array.isArray(chunk.choices)) {
131
+ for (const choice of chunk.choices) {
132
+ if (choice.delta?.function_call) {
133
+ const fc = choice.delta.function_call;
134
+ if (!this.hasLegacyFunctionCall) {
135
+ this.hasLegacyFunctionCall = true;
136
+ events.push({
137
+ type: "tool_call_start",
138
+ sequence: ++this.sequence,
139
+ provider: this.provider,
140
+ callRef: { sourceKey: this.legacySourceKey },
141
+ toolIndex: 0,
142
+ name: fc.name,
143
+ });
144
+ }
145
+ else if (fc.name) {
146
+ events.push({
147
+ type: "tool_call_name_delta",
148
+ sequence: ++this.sequence,
149
+ provider: this.provider,
150
+ callRef: { sourceKey: this.legacySourceKey },
151
+ delta: fc.name,
152
+ });
153
+ }
154
+ if (fc.arguments) {
155
+ events.push({
156
+ type: "tool_call_arguments_delta",
157
+ sequence: ++this.sequence,
158
+ provider: this.provider,
159
+ callRef: { sourceKey: this.legacySourceKey },
160
+ delta: fc.arguments,
161
+ });
162
+ }
163
+ }
164
+ if (choice.finish_reason != null) {
165
+ let reason = "unknown";
166
+ if (choice.finish_reason === "stop" || choice.finish_reason === "function_call" || choice.finish_reason === "tool_calls") {
167
+ reason = "complete";
168
+ }
169
+ else if (choice.finish_reason === "length") {
170
+ reason = "length";
171
+ }
172
+ else if (choice.finish_reason === "cancelled") {
173
+ reason = "cancelled";
174
+ }
175
+ events.push({
176
+ type: "provider_stream_end",
177
+ sequence: ++this.sequence,
178
+ provider: this.provider,
179
+ reason,
180
+ providerReason: choice.finish_reason,
181
+ });
182
+ this.finished = true;
183
+ }
184
+ }
185
+ }
186
+ return events;
187
+ }
188
+ finish(meta) {
189
+ if (this.finished)
190
+ return [];
191
+ this.finished = true;
192
+ const compatibleEvents = this.compatibleAdapter.finish(meta);
193
+ if (compatibleEvents.length > 0 && !this.hasLegacyFunctionCall) {
194
+ return compatibleEvents.map(e => ({ ...e, provider: this.provider, sequence: ++this.sequence }));
195
+ }
196
+ return [{
197
+ type: "provider_stream_end",
198
+ sequence: ++this.sequence,
199
+ provider: this.provider,
200
+ reason: meta?.reason ?? "unknown",
201
+ providerReason: meta?.providerReason,
202
+ }];
203
+ }
204
+ }
205
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { ProviderName, NormalizedToolStreamEvent, StreamEndReason } from "../coordinator/protocol.js";
2
+ import { ProviderStreamAdapter } from "./adapter.js";
3
+ export interface OpenRouterChoice {
4
+ index?: number;
5
+ delta?: {
6
+ tool_calls?: Array<{
7
+ index?: number;
8
+ id?: string;
9
+ type?: string;
10
+ function?: {
11
+ name?: string;
12
+ arguments?: string;
13
+ };
14
+ }>;
15
+ reasoning?: string;
16
+ };
17
+ finish_reason?: string | null;
18
+ error?: unknown;
19
+ }
20
+ export interface OpenRouterEvent {
21
+ choices?: OpenRouterChoice[];
22
+ error?: unknown;
23
+ }
24
+ export declare class OpenRouterStreamAdapter implements ProviderStreamAdapter<unknown> {
25
+ readonly provider: ProviderName;
26
+ private sequence;
27
+ private compatibleAdapter;
28
+ private finished;
29
+ push(rawEvent: unknown): readonly NormalizedToolStreamEvent[];
30
+ finish(meta?: {
31
+ reason?: StreamEndReason;
32
+ providerReason?: string;
33
+ }): readonly NormalizedToolStreamEvent[];
34
+ }
35
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACtG,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAGrD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,KAAK,CAAC;YACjB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,EAAE,CAAC,EAAE,MAAM,CAAC;YACZ,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,QAAQ,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAC;gBAAC,SAAS,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SAClD,CAAC,CAAC;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,uBAAwB,YAAW,qBAAqB,CAAC,OAAO,CAAC;IAC5E,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAK;IAGrB,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,QAAQ,CAAS;IAEzB,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,yBAAyB,EAAE;IA4C7D,MAAM,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,eAAe,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,yBAAyB,EAAE;CAO3G"}
@@ -0,0 +1,55 @@
1
+ import { OpenAICompatibleStreamAdapter } from "./openai-compatible.js";
2
+ export class OpenRouterStreamAdapter {
3
+ provider = "openrouter";
4
+ sequence = 0;
5
+ // Delegate standard tool_call formats to compatible adapter
6
+ compatibleAdapter = new OpenAICompatibleStreamAdapter();
7
+ finished = false;
8
+ push(rawEvent) {
9
+ if (this.finished)
10
+ return [];
11
+ const events = [];
12
+ if (!rawEvent || typeof rawEvent !== "object") {
13
+ events.push({
14
+ type: "provider_diagnostic",
15
+ sequence: ++this.sequence,
16
+ provider: this.provider,
17
+ code: "E_PROVIDER_EVENT_MALFORMED",
18
+ severity: "error",
19
+ message: "Raw event is not an object",
20
+ });
21
+ return events;
22
+ }
23
+ const chunk = rawEvent;
24
+ // Check for provider-level errors
25
+ if (chunk.error) {
26
+ events.push({
27
+ type: "provider_diagnostic",
28
+ sequence: ++this.sequence,
29
+ provider: this.provider,
30
+ code: "E_PROVIDER_ERROR",
31
+ severity: "error",
32
+ message: typeof chunk.error === "string" ? chunk.error : JSON.stringify(chunk.error)
33
+ });
34
+ const compatibleEvents = this.compatibleAdapter.finish({ reason: "provider_error", providerReason: "error" });
35
+ for (const e of compatibleEvents) {
36
+ events.push({ ...e, provider: this.provider, sequence: ++this.sequence });
37
+ }
38
+ this.finished = true;
39
+ return events;
40
+ }
41
+ const compatibleEvents = this.compatibleAdapter.push(chunk);
42
+ for (const e of compatibleEvents) {
43
+ events.push({ ...e, provider: this.provider, sequence: ++this.sequence });
44
+ }
45
+ return events;
46
+ }
47
+ finish(meta) {
48
+ if (this.finished)
49
+ return [];
50
+ this.finished = true;
51
+ const compatibleEvents = this.compatibleAdapter.finish(meta);
52
+ return compatibleEvents.map(e => ({ ...e, provider: this.provider, sequence: ++this.sequence }));
53
+ }
54
+ }
55
+ //# sourceMappingURL=openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAsBvE,MAAM,OAAO,uBAAuB;IACzB,QAAQ,GAAiB,YAAY,CAAC;IACvC,QAAQ,GAAG,CAAC,CAAC;IAErB,4DAA4D;IACpD,iBAAiB,GAAG,IAAI,6BAA6B,EAAE,CAAC;IACxD,QAAQ,GAAG,KAAK,CAAC;IAEzB,IAAI,CAAC,QAAiB;QACpB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,MAAM,GAAgC,EAAE,CAAC;QAE/C,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,4BAA4B;gBAClC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,4BAA4B;aACtC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,QAA2B,CAAC;QAE1C,kCAAkC;QAClC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;aACrF,CAAC,CAAC;YACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9G,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO,MAAM,CAAC;QACjB,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,IAA4D;QACjE,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACnG,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ import type { ParserEvent, JsonValue, Diagnostic, RepairAction } from "../types.js";
2
+ /**
3
+ * Manages the monotonic event queue.
4
+ * Events are never retracted once emitted.
5
+ */
6
+ export declare class EventBuilder {
7
+ private queue;
8
+ private sequence;
9
+ private maxQueued;
10
+ private terminal;
11
+ constructor(maxQueuedEvents: number);
12
+ /** Current sequence number. */
13
+ get currentSequence(): number;
14
+ get isTerminal(): boolean;
15
+ /** Number of events in the queue. */
16
+ get queueLength(): number;
17
+ /**
18
+ * Emit a value_committed event.
19
+ */
20
+ emitValueCommitted(path: string, value: JsonValue, byteRange: readonly [number, number]): void;
21
+ /**
22
+ * Emit a container_closed event.
23
+ */
24
+ emitContainerClosed(path: string, container: "object" | "array"): void;
25
+ /**
26
+ * Emit a repair_applied event.
27
+ */
28
+ emitRepairApplied(repair: RepairAction): void;
29
+ /**
30
+ * Emit a diagnostic event.
31
+ */
32
+ emitDiagnostic(diagnostic: Diagnostic): void;
33
+ /**
34
+ * Emit a document_complete event.
35
+ */
36
+ emitDocumentComplete(executable: boolean): void;
37
+ /**
38
+ * Emit a stream_finished event.
39
+ */
40
+ emitStreamFinished(outcome: "valid" | "truncated" | "salvaged" | "invalid"): void;
41
+ /**
42
+ * Drain all pending events and clear the queue.
43
+ * Returns a frozen array.
44
+ */
45
+ drain(): readonly ParserEvent[];
46
+ /**
47
+ * Get the number of events emitted during the current push cycle.
48
+ * Call resetPushCount() before push processing.
49
+ */
50
+ private pushEmitCount;
51
+ resetPushCount(): void;
52
+ get emittedDuringPush(): number;
53
+ private enqueue;
54
+ }
55
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/semantic/builder.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;gBAEb,eAAe,EAAE,MAAM;IAInC,+BAA+B;IAC/B,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,qCAAqC;IACrC,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,IAAI;IAWP;;OAEG;IACH,mBAAmB,CACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,QAAQ,GAAG,OAAO,GAC5B,IAAI;IASP;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAQ7C;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAQ5C;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAQ/C;;OAEG;IACH,kBAAkB,CAChB,OAAO,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GACtD,IAAI;IAQP;;;OAGG;IACH,KAAK,IAAI,SAAS,WAAW,EAAE;IAM/B;;;OAGG;IACH,OAAO,CAAC,aAAa,CAAK;IAE1B,cAAc,IAAI,IAAI;IAItB,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,OAAO,CAAC,OAAO;CAwBhB"}
@@ -0,0 +1,140 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Semantic Event Builder
3
+ // ---------------------------------------------------------------------------
4
+ //
5
+ // Accumulates parser events and manages the event queue.
6
+ // Events are emitted monotonically with increasing sequence numbers.
7
+ // drainEvents() returns pending events and clears the queue.
8
+ // ---------------------------------------------------------------------------
9
+ /**
10
+ * Manages the monotonic event queue.
11
+ * Events are never retracted once emitted.
12
+ */
13
+ export class EventBuilder {
14
+ queue = [];
15
+ sequence = 0;
16
+ maxQueued;
17
+ terminal = false;
18
+ constructor(maxQueuedEvents) {
19
+ this.maxQueued = maxQueuedEvents;
20
+ }
21
+ /** Current sequence number. */
22
+ get currentSequence() {
23
+ return this.sequence;
24
+ }
25
+ get isTerminal() {
26
+ return this.terminal;
27
+ }
28
+ /** Number of events in the queue. */
29
+ get queueLength() {
30
+ return this.queue.length;
31
+ }
32
+ /**
33
+ * Emit a value_committed event.
34
+ */
35
+ emitValueCommitted(path, value, byteRange) {
36
+ this.enqueue({
37
+ type: "value_committed",
38
+ sequence: this.sequence++,
39
+ path,
40
+ operation: "add",
41
+ value,
42
+ byteRange,
43
+ });
44
+ }
45
+ /**
46
+ * Emit a container_closed event.
47
+ */
48
+ emitContainerClosed(path, container) {
49
+ this.enqueue({
50
+ type: "container_closed",
51
+ sequence: this.sequence++,
52
+ path,
53
+ container,
54
+ });
55
+ }
56
+ /**
57
+ * Emit a repair_applied event.
58
+ */
59
+ emitRepairApplied(repair) {
60
+ this.enqueue({
61
+ type: "repair_applied",
62
+ sequence: this.sequence++,
63
+ repair,
64
+ });
65
+ }
66
+ /**
67
+ * Emit a diagnostic event.
68
+ */
69
+ emitDiagnostic(diagnostic) {
70
+ this.enqueue({
71
+ type: "diagnostic",
72
+ sequence: this.sequence++,
73
+ diagnostic,
74
+ });
75
+ }
76
+ /**
77
+ * Emit a document_complete event.
78
+ */
79
+ emitDocumentComplete(executable) {
80
+ this.enqueue({
81
+ type: "document_complete",
82
+ sequence: this.sequence++,
83
+ executable,
84
+ });
85
+ }
86
+ /**
87
+ * Emit a stream_finished event.
88
+ */
89
+ emitStreamFinished(outcome) {
90
+ this.enqueue({
91
+ type: "stream_finished",
92
+ sequence: this.sequence++,
93
+ outcome,
94
+ });
95
+ }
96
+ /**
97
+ * Drain all pending events and clear the queue.
98
+ * Returns a frozen array.
99
+ */
100
+ drain() {
101
+ const events = this.queue;
102
+ this.queue = [];
103
+ return Object.freeze(events);
104
+ }
105
+ /**
106
+ * Get the number of events emitted during the current push cycle.
107
+ * Call resetPushCount() before push processing.
108
+ */
109
+ pushEmitCount = 0;
110
+ resetPushCount() {
111
+ this.pushEmitCount = 0;
112
+ }
113
+ get emittedDuringPush() {
114
+ return this.pushEmitCount;
115
+ }
116
+ enqueue(event) {
117
+ if (this.terminal)
118
+ return; // Stop accepting semantic progress, don't report as emitted
119
+ if (this.queue.length >= this.maxQueued) {
120
+ this.terminal = true;
121
+ // Emit terminal diagnostic if capacity theoretically permitted (i.e. we just push one more)
122
+ this.queue.push({
123
+ type: "diagnostic",
124
+ sequence: this.sequence++,
125
+ diagnostic: {
126
+ code: "E_LIMIT_EVENT_QUEUE",
127
+ severity: "fatal",
128
+ byteOffset: 0, // Event builder doesn't track exact byte offset
129
+ recoverable: false,
130
+ message: "Event queue capacity exceeded",
131
+ }
132
+ });
133
+ this.pushEmitCount++;
134
+ return;
135
+ }
136
+ this.queue.push(event);
137
+ this.pushEmitCount++;
138
+ }
139
+ }
140
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/semantic/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type { ParserEvent, ValueCommittedEvent, ContainerClosedEvent, RepairAppliedEvent, DiagnosticEvent, DocumentCompleteEvent, StreamFinishedEvent, } from "../types.js";
2
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/semantic/events.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Semantic event types — re-exported for convenience
3
+ // ---------------------------------------------------------------------------
4
+ export {};
5
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/semantic/events.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,qDAAqD;AACrD,8EAA8E"}
@@ -0,0 +1,49 @@
1
+ import type { JsonValue, ParserEvent } from "../types.js";
2
+ import type { GrammarFrame } from "../grammar/frame.js";
3
+ /**
4
+ * Maintains the stable value by processing committed events.
5
+ * Only committed values appear in the stable value.
6
+ */
7
+ export declare class SnapshotBuilder {
8
+ private root;
9
+ private hasRoot;
10
+ /**
11
+ * Maps each open container's grammar frame to its corresponding node in
12
+ * the stable-value tree, so a newly-opened child container can attach
13
+ * directly to its parent in O(1) via initContainerForFrame() instead of
14
+ * re-parsing a JSON Pointer path string and re-walking from the root on
15
+ * every single container open (see initContainerForFrame).
16
+ */
17
+ private frameNodes;
18
+ /**
19
+ * Process a value_committed event and integrate it into the stable value.
20
+ */
21
+ processEvent(event: ParserEvent): void;
22
+ /**
23
+ * Initialize the root as an object container.
24
+ * `frame` is registered so child containers can find it in O(1).
25
+ */
26
+ initRootObject(frame?: GrammarFrame): void;
27
+ /**
28
+ * Initialize the root as an array container.
29
+ * `frame` is registered so child containers can find it in O(1).
30
+ */
31
+ initRootArray(frame?: GrammarFrame): void;
32
+ /**
33
+ * Initialize a nested container for the given (already-pushed) grammar
34
+ * frame, attaching it directly to its parent's node.
35
+ *
36
+ * Uses frame._parent/_segment (see grammar/frame.ts) plus the frameNodes
37
+ * map instead of re-parsing frame.path and walking the tree from the
38
+ * root on every call — that walk is O(depth), and calling it once for
39
+ * every one of N nested containers made opening N levels cost O(N^2)
40
+ * total, independent of the grammar-stack path-string fix.
41
+ */
42
+ initContainerForFrame(frame: GrammarFrame, type: "object" | "array"): void;
43
+ /**
44
+ * Get a deep clone of the current stable value.
45
+ */
46
+ getStableValue(): JsonValue | undefined;
47
+ get hasRootValue(): boolean;
48
+ }
49
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/semantic/snapshot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAyB,WAAW,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,OAAO,CAAS;IAExB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,CAA0C;IAE5D;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IA+CtC;;;OAGG;IACH,cAAc,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI;IAQ1C;;;OAGG;IACH,aAAa,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI;IAQzC;;;;;;;;;OASG;IACH,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI;IA2B1E;;OAEG;IACH,cAAc,IAAI,SAAS,GAAG,SAAS;IAKvC,IAAI,YAAY,IAAI,OAAO,CAE1B;CACF"}