prefix-safe-json 0.0.1-alpha.2 → 0.0.1-alpha.4
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.
- package/README.md +137 -4
- package/dist/coordinator/diagnostic-codes.d.ts +11 -0
- package/dist/coordinator/diagnostic-codes.d.ts.map +1 -0
- package/dist/coordinator/diagnostic-codes.js +22 -0
- package/dist/coordinator/diagnostic-codes.js.map +1 -0
- package/dist/coordinator/protocol.d.ts +1 -1
- package/dist/coordinator/protocol.d.ts.map +1 -1
- package/dist/gate/decide.d.ts +27 -0
- package/dist/gate/decide.d.ts.map +1 -0
- package/dist/gate/decide.js +138 -0
- package/dist/gate/decide.js.map +1 -0
- package/dist/gate/gate.d.ts +25 -0
- package/dist/gate/gate.d.ts.map +1 -0
- package/dist/gate/gate.js +96 -0
- package/dist/gate/gate.js.map +1 -0
- package/dist/gate/types.d.ts +184 -0
- package/dist/gate/types.d.ts.map +1 -0
- package/dist/gate/types.js +2 -0
- package/dist/gate/types.js.map +1 -0
- package/dist/guard/ai-sdk.d.ts +48 -0
- package/dist/guard/ai-sdk.d.ts.map +1 -0
- package/dist/guard/ai-sdk.js +51 -0
- package/dist/guard/ai-sdk.js.map +1 -0
- package/dist/guard/provider-guard.d.ts +4 -0
- package/dist/guard/provider-guard.d.ts.map +1 -0
- package/dist/guard/provider-guard.js +38 -0
- package/dist/guard/provider-guard.js.map +1 -0
- package/dist/guard/types.d.ts +48 -0
- package/dist/guard/types.d.ts.map +1 -0
- package/dist/guard/types.js +2 -0
- package/dist/guard/types.js.map +1 -0
- package/dist/index.d.ts +20 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/dist/lexer/scanner.d.ts +0 -2
- package/dist/lexer/scanner.d.ts.map +1 -1
- package/dist/lexer/scanner.js +3 -21
- package/dist/lexer/scanner.js.map +1 -1
- package/dist/lexer/states.d.ts +0 -4
- package/dist/lexer/states.d.ts.map +1 -1
- package/dist/lexer/states.js +0 -4
- package/dist/lexer/states.js.map +1 -1
- package/dist/parser.js +26 -53
- package/dist/parser.js.map +1 -1
- package/dist/providers/ai-sdk.d.ts +58 -0
- package/dist/providers/ai-sdk.d.ts.map +1 -0
- package/dist/providers/ai-sdk.js +212 -0
- package/dist/providers/ai-sdk.js.map +1 -0
- package/dist/providers/openai.d.ts +7 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +65 -7
- package/dist/providers/openai.js.map +1 -1
- package/dist/semantic/snapshot.d.ts +11 -4
- package/dist/semantic/snapshot.d.ts.map +1 -1
- package/dist/semantic/snapshot.js +11 -9
- package/dist/semantic/snapshot.js.map +1 -1
- package/package.json +8 -3
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { CONTENT_FILTERED_DIAGNOSTIC_CODE } from "../coordinator/diagnostic-codes.js";
|
|
2
|
+
function toolPartId(part) {
|
|
3
|
+
// "tool-input-start"/"tool-input-delta" carry `id`; "tool-input-end" is
|
|
4
|
+
// documented with `toolCallId`. Reading both defensively means this
|
|
5
|
+
// adapter keeps working correlated-by-ID either way, rather than silently
|
|
6
|
+
// dropping events if one part type uses the other field name.
|
|
7
|
+
return part.id ?? part.toolCallId;
|
|
8
|
+
}
|
|
9
|
+
function stringifyError(error) {
|
|
10
|
+
if (error instanceof Error)
|
|
11
|
+
return error.message;
|
|
12
|
+
if (typeof error === "string")
|
|
13
|
+
return error;
|
|
14
|
+
if (error &&
|
|
15
|
+
typeof error === "object" &&
|
|
16
|
+
"message" in error &&
|
|
17
|
+
typeof error.message === "string") {
|
|
18
|
+
return error.message;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
return JSON.stringify(error);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return String(error);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class AiSdkStreamAdapter {
|
|
28
|
+
provider = "ai-sdk";
|
|
29
|
+
sequence = 0;
|
|
30
|
+
finished = false;
|
|
31
|
+
push(rawEvent) {
|
|
32
|
+
if (this.finished)
|
|
33
|
+
return [];
|
|
34
|
+
const events = [];
|
|
35
|
+
if (!rawEvent || typeof rawEvent !== "object") {
|
|
36
|
+
events.push({
|
|
37
|
+
type: "provider_diagnostic",
|
|
38
|
+
sequence: ++this.sequence,
|
|
39
|
+
provider: this.provider,
|
|
40
|
+
code: "E_PROVIDER_EVENT_MALFORMED",
|
|
41
|
+
severity: "error",
|
|
42
|
+
message: "Raw event is not an object",
|
|
43
|
+
});
|
|
44
|
+
return events;
|
|
45
|
+
}
|
|
46
|
+
// A single permissive cast (rather than narrowing the `AiSdkStreamPart`
|
|
47
|
+
// union directly) matches the other adapters in this directory - their
|
|
48
|
+
// catch-all `{ type: string; [key: string]: unknown }` union member
|
|
49
|
+
// means the compiler can never fully exclude it inside a `switch (type)`
|
|
50
|
+
// case, so property access still needs a shape where every field used
|
|
51
|
+
// below is already optional.
|
|
52
|
+
const part = rawEvent;
|
|
53
|
+
switch (part.type) {
|
|
54
|
+
case "tool-input-start": {
|
|
55
|
+
const id = toolPartId(part);
|
|
56
|
+
if (id === undefined)
|
|
57
|
+
break;
|
|
58
|
+
events.push({
|
|
59
|
+
type: "tool_call_start",
|
|
60
|
+
sequence: ++this.sequence,
|
|
61
|
+
provider: this.provider,
|
|
62
|
+
callRef: { sourceKey: `tool-input:${id}` },
|
|
63
|
+
toolCallId: id,
|
|
64
|
+
name: part.toolName,
|
|
65
|
+
});
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case "tool-input-delta": {
|
|
69
|
+
const id = toolPartId(part);
|
|
70
|
+
if (id === undefined || typeof part.delta !== "string")
|
|
71
|
+
break;
|
|
72
|
+
events.push({
|
|
73
|
+
type: "tool_call_arguments_delta",
|
|
74
|
+
sequence: ++this.sequence,
|
|
75
|
+
provider: this.provider,
|
|
76
|
+
callRef: { sourceKey: `tool-input:${id}` },
|
|
77
|
+
delta: part.delta,
|
|
78
|
+
});
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case "tool-input-end": {
|
|
82
|
+
const id = toolPartId(part);
|
|
83
|
+
if (id === undefined)
|
|
84
|
+
break;
|
|
85
|
+
events.push({
|
|
86
|
+
type: "tool_call_end",
|
|
87
|
+
sequence: ++this.sequence,
|
|
88
|
+
provider: this.provider,
|
|
89
|
+
callRef: { sourceKey: `tool-input:${id}` },
|
|
90
|
+
reason: "complete", // corrected by the stream-level "finish" part below
|
|
91
|
+
});
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case "tool-call": {
|
|
95
|
+
// Intentionally a no-op. This part carries the SDK's own resolved
|
|
96
|
+
// `input` for the call, which - per this library's whole reason for
|
|
97
|
+
// existing (see README's Cline / `fixJson` analysis) - may already
|
|
98
|
+
// be silently repaired from a truncated stream. Trusting it here
|
|
99
|
+
// would reintroduce exactly the problem this adapter exists to
|
|
100
|
+
// avoid. The call's real argument text was already captured
|
|
101
|
+
// verbatim from "tool-input-delta" parts above, byte for byte.
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
case "tool-error": {
|
|
105
|
+
const id = toolPartId(part);
|
|
106
|
+
events.push({
|
|
107
|
+
type: "provider_diagnostic",
|
|
108
|
+
sequence: ++this.sequence,
|
|
109
|
+
provider: this.provider,
|
|
110
|
+
code: "E_PROVIDER_TOOL_ERROR",
|
|
111
|
+
severity: "error",
|
|
112
|
+
message: `Tool "${part.toolName ?? "unknown"}" reported an error: ${stringifyError(part.error)}`,
|
|
113
|
+
...(id !== undefined ? { callRef: { sourceKey: `tool-input:${id}` } } : {}),
|
|
114
|
+
});
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case "finish": {
|
|
118
|
+
const finishReason = part.finishReason;
|
|
119
|
+
let reason = "unknown";
|
|
120
|
+
if (finishReason === "stop" || finishReason === "tool-calls") {
|
|
121
|
+
reason = "complete";
|
|
122
|
+
}
|
|
123
|
+
else if (finishReason === "length") {
|
|
124
|
+
reason = "length";
|
|
125
|
+
}
|
|
126
|
+
else if (finishReason === "content-filter") {
|
|
127
|
+
// Not a generic cancellation: a policy/safety termination should
|
|
128
|
+
// never be blindly retried. Recorded as its own machine-readable
|
|
129
|
+
// diagnostic so the execution gate can reject with reason
|
|
130
|
+
// "content_filtered" instead of the generic "stream_incomplete"
|
|
131
|
+
// it would otherwise fall back to for a "cancelled" end reason.
|
|
132
|
+
reason = "cancelled";
|
|
133
|
+
events.push({
|
|
134
|
+
type: "provider_diagnostic",
|
|
135
|
+
sequence: ++this.sequence,
|
|
136
|
+
provider: this.provider,
|
|
137
|
+
code: CONTENT_FILTERED_DIAGNOSTIC_CODE,
|
|
138
|
+
severity: "error",
|
|
139
|
+
message: "Generation stopped by the model provider's content filter",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else if (finishReason === "error") {
|
|
143
|
+
reason = "provider_error";
|
|
144
|
+
}
|
|
145
|
+
// "other" (and any future/unrecognized literal) intentionally falls
|
|
146
|
+
// through to "unknown" - fail closed on an unclassified reason
|
|
147
|
+
// rather than guessing it means "complete".
|
|
148
|
+
events.push({
|
|
149
|
+
type: "provider_stream_end",
|
|
150
|
+
sequence: ++this.sequence,
|
|
151
|
+
provider: this.provider,
|
|
152
|
+
reason,
|
|
153
|
+
providerReason: finishReason,
|
|
154
|
+
});
|
|
155
|
+
this.finished = true;
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
case "error": {
|
|
159
|
+
events.push({
|
|
160
|
+
type: "provider_stream_end",
|
|
161
|
+
sequence: ++this.sequence,
|
|
162
|
+
provider: this.provider,
|
|
163
|
+
reason: "provider_error",
|
|
164
|
+
providerReason: stringifyError(part.error),
|
|
165
|
+
});
|
|
166
|
+
this.finished = true;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
case "abort": {
|
|
170
|
+
// Present on fullStream across ai@5/6/7 (verified against published
|
|
171
|
+
// type declarations for ai@5.0.240, ai@6.0.259, ai@7.0.70) - the
|
|
172
|
+
// stream was deliberately stopped (e.g. an AbortSignal), not a
|
|
173
|
+
// provider-side failure or a length/content-filter termination.
|
|
174
|
+
// Without this case it would silently fall through to `default`,
|
|
175
|
+
// leaving `finished` false - the adapter would never learn the
|
|
176
|
+
// stream ended, relying entirely on a caller's own finish() meta as
|
|
177
|
+
// the fail-closed backstop. Handling it explicitly here means an
|
|
178
|
+
// aborted stream is normalized the same way regardless of whether
|
|
179
|
+
// the caller remembers to call finish() with an explicit reason.
|
|
180
|
+
events.push({
|
|
181
|
+
type: "provider_stream_end",
|
|
182
|
+
sequence: ++this.sequence,
|
|
183
|
+
provider: this.provider,
|
|
184
|
+
reason: "cancelled",
|
|
185
|
+
providerReason: part.reason,
|
|
186
|
+
});
|
|
187
|
+
this.finished = true;
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
// Unrelated part types (text-delta, reasoning-delta, tool-result,
|
|
191
|
+
// start, start-step, finish-step, etc.) carry no tool-argument or
|
|
192
|
+
// stream-termination information for our purposes and must not crash
|
|
193
|
+
// the adapter.
|
|
194
|
+
default:
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
return events;
|
|
198
|
+
}
|
|
199
|
+
finish(meta) {
|
|
200
|
+
if (this.finished)
|
|
201
|
+
return [];
|
|
202
|
+
this.finished = true;
|
|
203
|
+
return [{
|
|
204
|
+
type: "provider_stream_end",
|
|
205
|
+
sequence: ++this.sequence,
|
|
206
|
+
provider: this.provider,
|
|
207
|
+
reason: meta?.reason ?? "unknown",
|
|
208
|
+
providerReason: meta?.providerReason,
|
|
209
|
+
}];
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=ai-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-sdk.js","sourceRoot":"","sources":["../../src/providers/ai-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,13 @@ export interface OpenAIEvent {
|
|
|
27
27
|
arguments?: string;
|
|
28
28
|
response?: {
|
|
29
29
|
status?: string;
|
|
30
|
+
incomplete_details?: {
|
|
31
|
+
reason?: string;
|
|
32
|
+
};
|
|
33
|
+
error?: {
|
|
34
|
+
code?: string;
|
|
35
|
+
message?: string;
|
|
36
|
+
} | null;
|
|
30
37
|
};
|
|
31
38
|
}
|
|
32
39
|
export declare class OpenAIStreamAdapter implements ProviderStreamAdapter<unknown> {
|
|
@@ -1 +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;
|
|
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;AAIrD,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;QAKhB,kBAAkB,CAAC,EAAE;YACnB,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,CAAC;QAEF,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,GAAG,IAAI,CAAC;KACV,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;IA0O7D,MAAM,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,eAAe,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,yBAAyB,EAAE;CAiB3G"}
|
package/dist/providers/openai.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { OpenAICompatibleStreamAdapter } from "./openai-compatible.js";
|
|
2
|
+
import { CONTENT_FILTERED_DIAGNOSTIC_CODE } from "../coordinator/diagnostic-codes.js";
|
|
2
3
|
export class OpenAIStreamAdapter {
|
|
3
4
|
provider = "openai";
|
|
4
5
|
sequence = 0;
|
|
@@ -40,6 +41,17 @@ export class OpenAIStreamAdapter {
|
|
|
40
41
|
this.finished = true;
|
|
41
42
|
return events;
|
|
42
43
|
}
|
|
44
|
+
if (chunk.type === "response.failed") {
|
|
45
|
+
events.push({
|
|
46
|
+
type: "provider_stream_end",
|
|
47
|
+
sequence: ++this.sequence,
|
|
48
|
+
provider: this.provider,
|
|
49
|
+
reason: "provider_error",
|
|
50
|
+
providerReason: chunk.response?.error?.code ?? "response.failed",
|
|
51
|
+
});
|
|
52
|
+
this.finished = true;
|
|
53
|
+
return events;
|
|
54
|
+
}
|
|
43
55
|
if (chunk.type === "response.output_item.added" && chunk.item?.type === "function_call" && chunk.item.id) {
|
|
44
56
|
events.push({
|
|
45
57
|
type: "tool_call_start",
|
|
@@ -108,13 +120,59 @@ export class OpenAIStreamAdapter {
|
|
|
108
120
|
this.finished = true;
|
|
109
121
|
}
|
|
110
122
|
else if (chunk.type === "response.incomplete") {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
123
|
+
const incompleteReason = chunk.response?.incomplete_details?.reason;
|
|
124
|
+
if (incompleteReason === "max_output_tokens") {
|
|
125
|
+
// An explicit provider-native output-budget signal: a positively
|
|
126
|
+
// observed truncation, not a generic cancellation. Any call still
|
|
127
|
+
// "collecting" when this arrives must fail closed even if its own
|
|
128
|
+
// JSON happens to look syntactically complete (see isExecutable()
|
|
129
|
+
// in parser.ts) - a coincidentally-closed value from a stream the
|
|
130
|
+
// provider itself says it cut short is not confirmation of intent.
|
|
131
|
+
events.push({
|
|
132
|
+
type: "provider_stream_end",
|
|
133
|
+
sequence: ++this.sequence,
|
|
134
|
+
provider: this.provider,
|
|
135
|
+
reason: "length",
|
|
136
|
+
providerReason: incompleteReason,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
else if (incompleteReason === "content_filter") {
|
|
140
|
+
// A policy/safety termination, not a retryable interruption:
|
|
141
|
+
// recorded as its own diagnostic so the execution gate rejects
|
|
142
|
+
// with "content_filtered" instead of the generic "stream_incomplete"
|
|
143
|
+
// a bare "cancelled" end reason would otherwise produce. Mirrors
|
|
144
|
+
// the same finish_reason === "content-filter" handling in
|
|
145
|
+
// ai-sdk.ts.
|
|
146
|
+
events.push({
|
|
147
|
+
type: "provider_diagnostic",
|
|
148
|
+
sequence: ++this.sequence,
|
|
149
|
+
provider: this.provider,
|
|
150
|
+
code: CONTENT_FILTERED_DIAGNOSTIC_CODE,
|
|
151
|
+
severity: "error",
|
|
152
|
+
message: "Generation stopped by the model provider's content filter",
|
|
153
|
+
});
|
|
154
|
+
events.push({
|
|
155
|
+
type: "provider_stream_end",
|
|
156
|
+
sequence: ++this.sequence,
|
|
157
|
+
provider: this.provider,
|
|
158
|
+
reason: "cancelled",
|
|
159
|
+
providerReason: incompleteReason,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// incomplete_details missing, or a reason string this adapter
|
|
164
|
+
// doesn't recognize (e.g. a future OpenAI addition): fail closed
|
|
165
|
+
// on "unknown" rather than mislabeling it as "cancelled", which
|
|
166
|
+
// would wrongly imply a user/API-initiated cancellation instead
|
|
167
|
+
// of an unclassified provider-side termination.
|
|
168
|
+
events.push({
|
|
169
|
+
type: "provider_stream_end",
|
|
170
|
+
sequence: ++this.sequence,
|
|
171
|
+
provider: this.provider,
|
|
172
|
+
reason: "unknown",
|
|
173
|
+
providerReason: incompleteReason ?? chunk.response?.status,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
118
176
|
this.finished = true;
|
|
119
177
|
}
|
|
120
178
|
return events;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { JsonValue
|
|
1
|
+
import type { JsonValue } from "../types.js";
|
|
2
2
|
import type { GrammarFrame } from "../grammar/frame.js";
|
|
3
3
|
/**
|
|
4
4
|
* Maintains the stable value by processing committed events.
|
|
@@ -16,9 +16,17 @@ export declare class SnapshotBuilder {
|
|
|
16
16
|
*/
|
|
17
17
|
private frameNodes;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Integrate a committed value into the stable value.
|
|
20
|
+
* Takes just `{ path, value }` rather than a full `ValueCommittedEvent` -
|
|
21
|
+
* the only two fields this method has ever read - so its four call sites
|
|
22
|
+
* in parser.ts don't need to fabricate a `sequence`/`type`/`operation`/
|
|
23
|
+
* `byteRange` (already reported separately via the real event emitted to
|
|
24
|
+
* `drainEvents()`) purely to satisfy a wider parameter type.
|
|
20
25
|
*/
|
|
21
|
-
processEvent(event:
|
|
26
|
+
processEvent(event: {
|
|
27
|
+
path: string;
|
|
28
|
+
value: JsonValue;
|
|
29
|
+
}): void;
|
|
22
30
|
/**
|
|
23
31
|
* Initialize the root as an object container.
|
|
24
32
|
* `frame` is registered so child containers can find it in O(1).
|
|
@@ -44,6 +52,5 @@ export declare class SnapshotBuilder {
|
|
|
44
52
|
* Get a deep clone of the current stable value.
|
|
45
53
|
*/
|
|
46
54
|
getStableValue(): JsonValue | undefined;
|
|
47
|
-
get hasRootValue(): boolean;
|
|
48
55
|
}
|
|
49
56
|
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/semantic/snapshot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAyB,
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/semantic/snapshot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAyB,MAAM,aAAa,CAAC;AACpE,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;;;;;;;OAOG;IACH,YAAY,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI;IA6C7D;;;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;CASxC"}
|
|
@@ -17,11 +17,14 @@ export class SnapshotBuilder {
|
|
|
17
17
|
*/
|
|
18
18
|
frameNodes = new WeakMap();
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* Integrate a committed value into the stable value.
|
|
21
|
+
* Takes just `{ path, value }` rather than a full `ValueCommittedEvent` -
|
|
22
|
+
* the only two fields this method has ever read - so its four call sites
|
|
23
|
+
* in parser.ts don't need to fabricate a `sequence`/`type`/`operation`/
|
|
24
|
+
* `byteRange` (already reported separately via the real event emitted to
|
|
25
|
+
* `drainEvents()`) purely to satisfy a wider parameter type.
|
|
21
26
|
*/
|
|
22
27
|
processEvent(event) {
|
|
23
|
-
if (event.type !== "value_committed")
|
|
24
|
-
return;
|
|
25
28
|
const { path, value } = event;
|
|
26
29
|
// Parse the JSON Pointer path to navigate to the parent
|
|
27
30
|
const segments = parsePointer(path);
|
|
@@ -132,11 +135,13 @@ export class SnapshotBuilder {
|
|
|
132
135
|
getStableValue() {
|
|
133
136
|
if (!this.hasRoot)
|
|
134
137
|
return undefined;
|
|
138
|
+
// `root` is only ever assigned `{}` (initRootObject) or `[]`
|
|
139
|
+
// (initRootArray) - never a bare scalar (a root-level scalar bypasses
|
|
140
|
+
// SnapshotBuilder entirely; see parser.ts's rootScalarValue) - so this
|
|
141
|
+
// is always genuinely a container once hasRoot is true, not just an
|
|
142
|
+
// assertion of convenience.
|
|
135
143
|
return deepClone(this.root);
|
|
136
144
|
}
|
|
137
|
-
get hasRootValue() {
|
|
138
|
-
return this.hasRoot;
|
|
139
|
-
}
|
|
140
145
|
}
|
|
141
146
|
/**
|
|
142
147
|
* Parse a JSON Pointer string into segments.
|
|
@@ -175,9 +180,6 @@ function safeSet(obj, key, value) {
|
|
|
175
180
|
* well below values maxDepth's type otherwise permits.
|
|
176
181
|
*/
|
|
177
182
|
function deepClone(value) {
|
|
178
|
-
if (value === null || typeof value !== "object") {
|
|
179
|
-
return value;
|
|
180
|
-
}
|
|
181
183
|
const root = Array.isArray(value) ? [] : {};
|
|
182
184
|
const stack = [
|
|
183
185
|
{ src: value, dst: root },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/semantic/snapshot.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAK9E;;;GAGG;AACH,MAAM,OAAO,eAAe;IAClB,IAAI,GAA0B,SAAS,CAAC;IACxC,OAAO,GAAG,KAAK,CAAC;IAExB;;;;;;OAMG;IACK,UAAU,GAAG,IAAI,OAAO,EAA2B,CAAC;IAE5D
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/semantic/snapshot.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prefix-safe-json",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.0.1-alpha.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",
|
|
7
7
|
"streaming",
|
|
8
8
|
"incremental",
|
|
9
9
|
"llm",
|
|
10
|
+
"ai-agents",
|
|
10
11
|
"tool-calling",
|
|
12
|
+
"tool-execution",
|
|
13
|
+
"execution-safety",
|
|
11
14
|
"function-calling",
|
|
12
15
|
"json-repair",
|
|
13
16
|
"json-parser"
|
|
@@ -58,7 +61,9 @@
|
|
|
58
61
|
"validate-corpus": "tsx scripts/validate-corpus.ts",
|
|
59
62
|
"clean": "rimraf dist coverage .vitest",
|
|
60
63
|
"pack:check": "pnpm pack --dry-run",
|
|
61
|
-
"example:anthropic": "node examples/anthropic-truncation-safety.mjs"
|
|
64
|
+
"example:anthropic": "node examples/anthropic-truncation-safety.mjs",
|
|
65
|
+
"example:ai-sdk": "node examples/ai-sdk-execution-gate.mjs",
|
|
66
|
+
"example:ai-sdk-guard": "node examples/ai-sdk-guard.mjs"
|
|
62
67
|
},
|
|
63
68
|
"devDependencies": {
|
|
64
69
|
"@eslint/js": "^9.8.0",
|