langfx.js 0.1.0-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 +202 -0
  2. package/NOTICE +11 -0
  3. package/README.md +107 -0
  4. package/dist/agentic.d.ts +128 -0
  5. package/dist/agentic.js +265 -0
  6. package/dist/agentic.js.map +1 -0
  7. package/dist/cache.d.ts +32 -0
  8. package/dist/cache.js +135 -0
  9. package/dist/cache.js.map +1 -0
  10. package/dist/cancellation.d.ts +9 -0
  11. package/dist/cancellation.js +70 -0
  12. package/dist/cancellation.js.map +1 -0
  13. package/dist/errors.d.ts +40 -0
  14. package/dist/errors.js +44 -0
  15. package/dist/errors.js.map +1 -0
  16. package/dist/index.d.ts +18 -0
  17. package/dist/index.js +15 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/json-stream.d.ts +73 -0
  20. package/dist/json-stream.js +222 -0
  21. package/dist/json-stream.js.map +1 -0
  22. package/dist/langfunc.d.ts +20 -0
  23. package/dist/langfunc.js +28 -0
  24. package/dist/langfunc.js.map +1 -0
  25. package/dist/language-model.d.ts +78 -0
  26. package/dist/language-model.js +218 -0
  27. package/dist/language-model.js.map +1 -0
  28. package/dist/llms/anthropic.d.ts +30 -0
  29. package/dist/llms/anthropic.js +365 -0
  30. package/dist/llms/anthropic.js.map +1 -0
  31. package/dist/llms/gemini.d.ts +34 -0
  32. package/dist/llms/gemini.js +380 -0
  33. package/dist/llms/gemini.js.map +1 -0
  34. package/dist/llms/images.d.ts +10 -0
  35. package/dist/llms/images.js +43 -0
  36. package/dist/llms/images.js.map +1 -0
  37. package/dist/llms/index.d.ts +7 -0
  38. package/dist/llms/index.js +4 -0
  39. package/dist/llms/index.js.map +1 -0
  40. package/dist/llms/openai.d.ts +30 -0
  41. package/dist/llms/openai.js +398 -0
  42. package/dist/llms/openai.js.map +1 -0
  43. package/dist/llms/transport.d.ts +4 -0
  44. package/dist/llms/transport.js +90 -0
  45. package/dist/llms/transport.js.map +1 -0
  46. package/dist/mapping.d.ts +71 -0
  47. package/dist/mapping.js +190 -0
  48. package/dist/mapping.js.map +1 -0
  49. package/dist/message.d.ts +56 -0
  50. package/dist/message.js +86 -0
  51. package/dist/message.js.map +1 -0
  52. package/dist/python-preview.d.ts +24 -0
  53. package/dist/python-preview.js +368 -0
  54. package/dist/python-preview.js.map +1 -0
  55. package/dist/python-stream.d.ts +15 -0
  56. package/dist/python-stream.js +29 -0
  57. package/dist/python-stream.js.map +1 -0
  58. package/dist/python.d.ts +85 -0
  59. package/dist/python.js +728 -0
  60. package/dist/python.js.map +1 -0
  61. package/dist/query.d.ts +31 -0
  62. package/dist/query.js +151 -0
  63. package/dist/query.js.map +1 -0
  64. package/dist/retry.d.ts +12 -0
  65. package/dist/retry.js +56 -0
  66. package/dist/retry.js.map +1 -0
  67. package/dist/schema/zod.d.ts +4 -0
  68. package/dist/schema/zod.js +7 -0
  69. package/dist/schema/zod.js.map +1 -0
  70. package/dist/schema.d.ts +10 -0
  71. package/dist/schema.js +7 -0
  72. package/dist/schema.js.map +1 -0
  73. package/dist/template.d.ts +14 -0
  74. package/dist/template.js +75 -0
  75. package/dist/template.js.map +1 -0
  76. package/dist/testing/index.d.ts +33 -0
  77. package/dist/testing/index.js +56 -0
  78. package/dist/testing/index.js.map +1 -0
  79. package/dist/tool-call.d.ts +27 -0
  80. package/dist/tool-call.js +16 -0
  81. package/dist/tool-call.js.map +1 -0
  82. package/dist/tools.d.ts +43 -0
  83. package/dist/tools.js +155 -0
  84. package/dist/tools.js.map +1 -0
  85. package/docs/ANTHROPIC.md +43 -0
  86. package/docs/API_DESIGN.md +200 -0
  87. package/docs/GEMINI.md +68 -0
  88. package/docs/IMPLEMENTATION_STATUS.md +77 -0
  89. package/docs/LIVE_TESTING.md +24 -0
  90. package/docs/MAPPING.md +54 -0
  91. package/docs/OPENAI.md +40 -0
  92. package/docs/PORTING_PLAN.md +135 -0
  93. package/docs/PROMPT_PARITY.md +379 -0
  94. package/docs/PYTHON_PROTOCOL.md +109 -0
  95. package/docs/PYTHON_PROTOCOL_PARITY.md +964 -0
  96. package/docs/PYTHON_SCHEMA_EVALUATION.md +93 -0
  97. package/docs/PYTHON_STREAMING_PARITY.md +59 -0
  98. package/docs/RELEASING.md +25 -0
  99. package/docs/RETRIES_AND_CACHE.md +56 -0
  100. package/docs/SESSION_EVENTS.md +40 -0
  101. package/docs/SOURCE_AUDIT.md +133 -0
  102. package/docs/STREAMING.md +76 -0
  103. package/docs/TOOL_STREAMING.md +31 -0
  104. package/package.json +95 -0
@@ -0,0 +1,368 @@
1
+ import { any, parse } from './python.js';
2
+ const NEED = Symbol('token');
3
+ /** Best-effort, factory-free previews. The complete Python parser remains authoritative. */
4
+ export class PythonPreview {
5
+ maxDepth;
6
+ buffer = '';
7
+ scan = 0;
8
+ literal;
9
+ stopped = false;
10
+ current;
11
+ reader;
12
+ constructor(maxDepth) {
13
+ this.maxDepth = maxDepth;
14
+ this.reader = this.root();
15
+ this.reader.next();
16
+ }
17
+ *feed(text, final = false) {
18
+ if (this.stopped)
19
+ return;
20
+ this.buffer += text;
21
+ try {
22
+ while (true) {
23
+ const token = this.token(final);
24
+ if (!token)
25
+ break;
26
+ let next = this.reader.next(token);
27
+ while (!next.done && next.value !== NEED) {
28
+ yield next.value;
29
+ next = this.reader.next();
30
+ }
31
+ if (next.done) {
32
+ this.stopped = true;
33
+ return;
34
+ }
35
+ }
36
+ if (final && !this.literal) {
37
+ let next = this.reader.next(undefined);
38
+ while (!next.done && next.value !== NEED) {
39
+ yield next.value;
40
+ next = this.reader.next();
41
+ }
42
+ this.stopped = true;
43
+ }
44
+ }
45
+ catch {
46
+ // Unsupported preview syntax does not reject otherwise valid Python output.
47
+ this.stopped = true;
48
+ this.buffer = '';
49
+ }
50
+ }
51
+ token(final) {
52
+ if (this.literal)
53
+ return this.stringToken(final);
54
+ if (!this.scan)
55
+ this.buffer = this.buffer.trimStart();
56
+ const b = this.buffer;
57
+ if (!b)
58
+ return undefined;
59
+ if (b[0] === '`') {
60
+ const end = b.indexOf('\n');
61
+ if (end < 0) {
62
+ if (final)
63
+ this.buffer = '';
64
+ return undefined;
65
+ }
66
+ this.buffer = b.slice(end + 1);
67
+ return this.token(final);
68
+ }
69
+ const raw = /^[rR]["']/.test(b), start = raw ? 1 : 0, quote = b[start];
70
+ if (quote === '"' || quote === "'") {
71
+ if (b.length < start + 2 && !final)
72
+ return undefined;
73
+ if (b[start + 1] === quote && b.length < start + 3 && !final)
74
+ return undefined;
75
+ const triple = b.slice(start, start + 3) === quote.repeat(3);
76
+ this.literal = { end: quote.repeat(triple ? 3 : 1), raw, pendingHigh: '' };
77
+ this.buffer = b.slice(start + this.literal.end.length);
78
+ this.scan = 0;
79
+ return { text: '', string: true, decoded: '' };
80
+ }
81
+ if ('()[]{},=:'.includes(b[0])) {
82
+ this.buffer = b.slice(1);
83
+ return { text: b[0] };
84
+ }
85
+ let i = this.scan;
86
+ while (i < b.length && !/[\s()[\]{},=:"'`]/.test(b[i]))
87
+ i++;
88
+ if (!i)
89
+ throw new SyntaxError('Unsupported preview token.');
90
+ if (i === b.length && !final) {
91
+ this.scan = i;
92
+ return undefined;
93
+ }
94
+ this.scan = 0;
95
+ this.buffer = b.slice(i);
96
+ return { text: b.slice(0, i) };
97
+ }
98
+ /** Consume each string code unit once; incomplete escapes remain buffered. */
99
+ stringToken(final) {
100
+ const state = this.literal, b = this.buffer;
101
+ let i = 0, decoded = '', closed = false;
102
+ while (i < b.length) {
103
+ const c = b[i];
104
+ if (c === state.end[0]) {
105
+ if (b.length - i < state.end.length && !final)
106
+ break;
107
+ if (b.startsWith(state.end, i)) {
108
+ i += state.end.length;
109
+ closed = true;
110
+ break;
111
+ }
112
+ }
113
+ if (c === '\0' || state.end.length === 1 && (c === '\n' || c === '\r'))
114
+ throw new SyntaxError('Invalid string character.');
115
+ if (c !== '\\') {
116
+ decoded += c;
117
+ i++;
118
+ continue;
119
+ }
120
+ const escape = b[i + 1];
121
+ if (escape === undefined)
122
+ break;
123
+ if (state.raw) {
124
+ decoded += '\\' + escape;
125
+ i += 2;
126
+ continue;
127
+ }
128
+ const simple = { a: '\x07', v: '\v', n: '\n', r: '\r', t: '\t', b: '\b', f: '\f', '\\': '\\', '"': '"', "'": "'" };
129
+ if (Object.hasOwn(simple, escape)) {
130
+ decoded += simple[escape];
131
+ i += 2;
132
+ }
133
+ else if (escape === '\n')
134
+ i += 2;
135
+ else if (['x', 'u', 'U'].includes(escape)) {
136
+ const length = escape === 'x' ? 2 : escape === 'u' ? 4 : 8;
137
+ if (b.length - i < length + 2)
138
+ break;
139
+ const digits = b.slice(i + 2, i + 2 + length);
140
+ if (!/^[\da-fA-F]+$/.test(digits))
141
+ throw new SyntaxError('Invalid Unicode escape.');
142
+ const point = parseInt(digits, 16);
143
+ if (point > 0x10ffff)
144
+ throw new SyntaxError('Invalid Unicode code point.');
145
+ decoded += String.fromCodePoint(point);
146
+ i += length + 2;
147
+ }
148
+ else if (/[0-7]/.test(escape)) {
149
+ let end = i + 2;
150
+ while (end < b.length && end < i + 4 && /[0-7]/.test(b[end]))
151
+ end++;
152
+ if (end === b.length && end < i + 4 && !final)
153
+ break;
154
+ decoded += String.fromCodePoint(parseInt(b.slice(i + 1, end), 8));
155
+ i = end;
156
+ }
157
+ else
158
+ throw new SyntaxError('Unsupported string escape.');
159
+ }
160
+ this.buffer = b.slice(i);
161
+ decoded = state.pendingHigh + decoded;
162
+ state.pendingHigh = '';
163
+ if (!closed && decoded && /[\uD800-\uDBFF]/.test(decoded.at(-1))) {
164
+ state.pendingHigh = decoded.at(-1);
165
+ decoded = decoded.slice(0, -1);
166
+ }
167
+ if (closed)
168
+ this.literal = undefined;
169
+ if (decoded || closed)
170
+ return { text: '', string: true, decoded };
171
+ // Consumed continuations can expose a delimiter only on a later chunk.
172
+ return undefined;
173
+ }
174
+ *advance() { this.current = yield NEED; }
175
+ *expect(text) {
176
+ if (this.current?.text !== text)
177
+ throw new SyntaxError('Incomplete preview.');
178
+ yield* this.advance();
179
+ }
180
+ *root() {
181
+ yield* this.advance();
182
+ if (this.current?.text === 'output') {
183
+ yield* this.advance();
184
+ yield* this.expect('=');
185
+ }
186
+ yield* this.value(Object.freeze([]), 0);
187
+ }
188
+ *value(path, depth) {
189
+ if (depth > this.maxDepth || !this.current)
190
+ throw new SyntaxError('Preview limit.');
191
+ if (this.current.string) {
192
+ let value = '';
193
+ do {
194
+ const delta = this.current.decoded ?? parse(any, this.current.text);
195
+ value += delta;
196
+ if (path.length && delta)
197
+ yield { type: 'stringFieldDelta', path, delta };
198
+ yield* this.advance();
199
+ } while (this.current?.string);
200
+ return value;
201
+ }
202
+ const token = this.current.text;
203
+ if (token === '[') {
204
+ yield { type: 'objectStart', path, kind: 'array' };
205
+ yield* this.advance();
206
+ const values = [];
207
+ while (this.current?.text !== ']') {
208
+ const child = Object.freeze([...path, values.length]);
209
+ yield { type: 'fieldStart', path: child };
210
+ const value = yield* this.value(child, depth + 1);
211
+ values.push(value);
212
+ yield { type: 'fieldEnd', path: child, value };
213
+ if (this.current?.text === ']')
214
+ break;
215
+ yield* this.expect(',');
216
+ }
217
+ const value = Object.freeze(values);
218
+ yield { type: 'objectEnd', path, kind: 'array', value };
219
+ yield* this.advance();
220
+ return value;
221
+ }
222
+ if (token === '(') {
223
+ yield* this.advance();
224
+ if (this.current?.text === ')')
225
+ return yield* this.sequence(path, depth, ')', 'tuple');
226
+ const first = yield* this.capture(Object.freeze([...path, 0]), depth + 1);
227
+ if (this.current?.text === ')') {
228
+ // Grouping is not a tuple: remove the speculative element index.
229
+ for (const event of first.events) {
230
+ const groupedPath = Object.freeze([...event.path.slice(0, path.length), ...event.path.slice(path.length + 1)]);
231
+ if (event.type !== 'stringFieldDelta' || groupedPath.length)
232
+ yield { ...event, path: groupedPath };
233
+ }
234
+ yield* this.advance();
235
+ return first.value;
236
+ }
237
+ if (this.current?.text !== ',')
238
+ throw new SyntaxError('Invalid tuple.');
239
+ return yield* this.sequence(path, depth, ')', 'tuple', first);
240
+ }
241
+ if (token === '{') {
242
+ yield* this.advance();
243
+ if (this.current?.text === '}')
244
+ return yield* this.object(path, depth);
245
+ const first = yield* this.capture(Object.freeze([...path, 0]), depth + 1);
246
+ if (this.current?.text === ':') {
247
+ if (typeof first.value !== 'string')
248
+ throw new SyntaxError('Invalid dictionary key.');
249
+ return yield* this.object(path, depth, undefined, first.value);
250
+ }
251
+ return yield* this.sequence(path, depth, '}', 'set', first);
252
+ }
253
+ if (/^[A-Za-z][A-Za-z0-9_]*$/.test(token) && !['True', 'False', 'None', 'UNKNOWN'].includes(token)) {
254
+ yield* this.advance();
255
+ if (this.current?.text !== '(')
256
+ throw new SyntaxError('Not a constructor.');
257
+ yield* this.advance();
258
+ if (token === 'set') {
259
+ if (String(this.current?.text) !== ')')
260
+ throw new SyntaxError('Only empty set() is supported.');
261
+ return yield* this.sequence(path, depth, ')', 'set');
262
+ }
263
+ return yield* this.object(path, depth, token);
264
+ }
265
+ const value = parse(any, token);
266
+ yield* this.advance();
267
+ return value;
268
+ }
269
+ /** Delay ambiguous first-element events until a comma or colon resolves the syntax. */
270
+ *capture(path, depth) {
271
+ const reader = this.value(path, depth), events = [];
272
+ let step = reader.next();
273
+ while (!step.done) {
274
+ if (step.value === NEED)
275
+ step = reader.next(yield NEED);
276
+ else {
277
+ events.push(step.value);
278
+ step = reader.next();
279
+ }
280
+ }
281
+ return { value: step.value, events };
282
+ }
283
+ *sequence(path, depth, close, pythonKind, first) {
284
+ yield { type: 'objectStart', path, kind: 'array', pythonKind };
285
+ const values = [], seen = new Set();
286
+ let index = 0;
287
+ const add = (value) => {
288
+ if (pythonKind === 'tuple') {
289
+ values.push(value);
290
+ return;
291
+ }
292
+ if (value !== null && !['number', 'string', 'boolean'].includes(typeof value))
293
+ throw new SyntaxError('Unsupported set element.');
294
+ const key = typeof value === 'boolean' ? Number(value) : value;
295
+ if (!seen.has(key)) {
296
+ seen.add(key);
297
+ values.push(value);
298
+ }
299
+ };
300
+ if (first) {
301
+ add(first.value);
302
+ const child = Object.freeze([...path, index++]);
303
+ yield { type: 'fieldStart', path: child };
304
+ yield* first.events;
305
+ yield { type: 'fieldEnd', path: child, value: first.value };
306
+ if (this.current?.text !== close)
307
+ yield* this.expect(',');
308
+ }
309
+ while (this.current?.text !== close) {
310
+ const child = Object.freeze([...path, index++]);
311
+ yield { type: 'fieldStart', path: child };
312
+ const value = yield* this.value(child, depth + 1);
313
+ add(value);
314
+ yield { type: 'fieldEnd', path: child, value };
315
+ if (this.current?.text === close)
316
+ break;
317
+ yield* this.expect(',');
318
+ }
319
+ Object.freeze(values);
320
+ const value = pythonKind === 'set' ? Object.freeze({ pythonSet: values }) : values;
321
+ yield { type: 'objectEnd', path, kind: 'array', pythonKind, value };
322
+ yield* this.advance();
323
+ return value;
324
+ }
325
+ *object(path, depth, className, firstKey) {
326
+ yield { type: 'objectStart', path, kind: 'object', ...(className ? { pythonClass: className } : {}) };
327
+ const fields = Object.create(null), close = className ? ')' : '}';
328
+ while (this.current?.text !== close) {
329
+ if (!this.current)
330
+ throw new SyntaxError('Missing field.');
331
+ let key;
332
+ if (firstKey !== undefined) {
333
+ key = firstKey;
334
+ firstKey = undefined;
335
+ }
336
+ else if (!className) {
337
+ if (!this.current.string)
338
+ throw new SyntaxError('Invalid dictionary key.');
339
+ key = (yield* this.value(Object.freeze([]), depth + 1));
340
+ }
341
+ else {
342
+ key = this.current.text;
343
+ if (!/^[A-Za-z][A-Za-z0-9_]*$/.test(key))
344
+ throw new SyntaxError('Invalid keyword.');
345
+ yield* this.advance();
346
+ }
347
+ if (Object.hasOwn(fields, key))
348
+ throw new SyntaxError('Duplicate field.');
349
+ if (this.current?.text !== (className ? '=' : ':'))
350
+ throw new SyntaxError('Missing field separator.');
351
+ const child = Object.freeze([...path, key]);
352
+ yield { type: 'fieldStart', path: child };
353
+ yield* this.advance();
354
+ const value = yield* this.value(child, depth + 1);
355
+ fields[key] = value;
356
+ yield { type: 'fieldEnd', path: child, value };
357
+ if (String(this.current?.text) === close)
358
+ break;
359
+ yield* this.expect(',');
360
+ }
361
+ Object.freeze(fields);
362
+ const value = className ? Object.freeze({ pythonClass: className, fields }) : fields;
363
+ yield { type: 'objectEnd', path, kind: 'object', value };
364
+ yield* this.advance();
365
+ return value;
366
+ }
367
+ }
368
+ //# sourceMappingURL=python-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-preview.js","sourceRoot":"","sources":["../src/python-preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { JsonStreamEvent } from './json-stream.js';
2
+ /** Bounded text accumulation; schema parsing and factories run only at completion. */
3
+ export declare class PythonStreamParser {
4
+ private readonly maxChars;
5
+ private chunks;
6
+ private count;
7
+ private readonly preview;
8
+ constructor(maxChars?: number, maxDepth?: number);
9
+ feed(text: string): Generator<JsonStreamEvent | {
10
+ readonly type: 'textDelta';
11
+ readonly delta: string;
12
+ }>;
13
+ finish(): Generator<JsonStreamEvent>;
14
+ get value(): string;
15
+ }
@@ -0,0 +1,29 @@
1
+ import { PythonPreview } from './python-preview.js';
2
+ /** Bounded text accumulation; schema parsing and factories run only at completion. */
3
+ export class PythonStreamParser {
4
+ maxChars;
5
+ chunks = [];
6
+ count = 0;
7
+ preview;
8
+ constructor(maxChars = 1_048_576, maxDepth = 64) {
9
+ this.maxChars = maxChars;
10
+ this.preview = new PythonPreview(maxDepth);
11
+ for (const [name, value, cap] of [['maxChars', maxChars, 1_048_576], ['maxDepth', maxDepth, 64]]) {
12
+ if (!Number.isSafeInteger(value) || value < 1 || value > cap)
13
+ throw new RangeError(`${name} must be a positive integer no greater than ${cap}.`);
14
+ }
15
+ }
16
+ *feed(text) {
17
+ this.count += text.length;
18
+ if (this.count > this.maxChars)
19
+ throw new SyntaxError('Structured output exceeds maxChars.');
20
+ if (text) {
21
+ this.chunks.push(text);
22
+ yield { type: 'textDelta', delta: text };
23
+ yield* this.preview.feed(text);
24
+ }
25
+ }
26
+ *finish() { yield* this.preview.feed('', true); }
27
+ get value() { return this.chunks.join(''); }
28
+ }
29
+ //# sourceMappingURL=python-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-stream.js","sourceRoot":"","sources":["../src/python-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,sFAAsF;AACtF,MAAM,OAAO,kBAAkB;IAIA,QAAQ;IAH7B,MAAM,GAAa,EAAE,CAAC;IACtB,KAAK,GAAG,CAAC,CAAC;IACD,OAAO,CAAgB;IACxC,YAA6B,QAAQ,GAAG,SAAS,EAAE,QAAQ,GAAG,EAAE;wBAAnC,QAAQ;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAU,EAAE,CAAC;YAC1G,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG;gBAAE,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,+CAA+C,GAAG,GAAG,CAAC,CAAC;QACnJ,CAAC;IACH,CAAC;IACD,CAAC,IAAI,CAAC,IAAY;QAChB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,WAAW,CAAC,qCAAqC,CAAC,CAAC;QAC7F,IAAI,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;IACjH,CAAC;IACD,CAAC,MAAM,KAAiC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7E,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CACrD"}
@@ -0,0 +1,85 @@
1
+ import type { Schema, SchemaLike } from './schema.js';
2
+ /** Explicit marker for a value the model cannot provide. */
3
+ export declare const UNKNOWN: unique symbol;
4
+ export type Unknown = typeof UNKNOWN;
5
+ export interface PythonCodec<T> {
6
+ readonly exampleStyles?: Readonly<Record<string, 'compact' | 'expanded'>>;
7
+ readonly references?: Readonly<Record<string, () => SchemaLike<unknown>>>;
8
+ readonly type: string;
9
+ readonly declarations: Readonly<Record<string, string>>;
10
+ decode(value: unknown): T;
11
+ encode(value: T): string;
12
+ }
13
+ export interface PythonSchema<T> extends Schema<T> {
14
+ readonly python: PythonCodec<T>;
15
+ }
16
+ type Value<S> = S extends SchemaLike<infer T> ? T : never;
17
+ export declare const str: PythonSchema<string>;
18
+ export declare const int: PythonSchema<number>;
19
+ export declare const float: PythonSchema<number>;
20
+ export declare const bool: PythonSchema<boolean>;
21
+ export declare const none: PythonSchema<null>;
22
+ export declare function list<T>(item: SchemaLike<T>, options?: {
23
+ minSize?: number;
24
+ maxSize?: number;
25
+ }): PythonSchema<T[]>;
26
+ export declare function dict<T>(item: SchemaLike<T>): PythonSchema<Record<string, T>>;
27
+ /** Try declared alternatives in order, matching Python union validation. */
28
+ export declare function union<const S extends readonly [SchemaLike<unknown>, SchemaLike<unknown>, ...SchemaLike<unknown>[]]>(...schemas: S): PythonSchema<Value<S[number]>>;
29
+ type Fields = Readonly<Record<string, SchemaLike<unknown>>>;
30
+ type FieldValues<F extends Fields> = {
31
+ [K in keyof F]: Value<F[K]>;
32
+ };
33
+ export declare function classSchema<T, const F extends Fields>(options: {
34
+ readonly name: string;
35
+ readonly fields: F;
36
+ readonly defaults?: Partial<FieldValues<F>>;
37
+ readonly description?: string;
38
+ /** Compact constructor repr for explicitly registered dataclass-like values. */
39
+ readonly exampleFormat?: 'compact' | 'expanded';
40
+ readonly fieldDescriptions?: Partial<Record<keyof F, string>>;
41
+ readonly excludeFromPrompt?: readonly (keyof F)[];
42
+ readonly extraFields?: SchemaLike<unknown>;
43
+ /** Factories must be pure: validation can probe union alternatives. */
44
+ readonly create: (fields: FieldValues<F>) => T;
45
+ readonly isInstance: (value: unknown) => value is T;
46
+ readonly decompose: (value: T) => FieldValues<F>;
47
+ }): PythonSchema<T>;
48
+ export declare function schemaText<T>(schema: SchemaLike<T>): string;
49
+ export declare function format<T>(schema: SchemaLike<T>, value: T): string;
50
+ export interface ParseLimits {
51
+ readonly maxChars?: number;
52
+ readonly maxDepth?: number;
53
+ }
54
+ export declare function parse<T>(schema: SchemaLike<T>, text: string, limits?: ParseLimits): T;
55
+ /** Python v2's fenced, assigned, expanded few-shot representation. */
56
+ export declare function formatExample<T>(schema: SchemaLike<T>, value: T): string;
57
+ /** Literal choices preserve their values in both the prompt and local validation. */
58
+ export declare function literal<const V extends readonly [string | number | boolean | null, ...(string | number | boolean | null)[]]>(...values: V): PythonSchema<V[number]>;
59
+ export declare function integer(options?: {
60
+ min?: number;
61
+ max?: number;
62
+ }): PythonSchema<number>;
63
+ export declare function number(options?: {
64
+ min?: number;
65
+ max?: number;
66
+ }): PythonSchema<number>;
67
+ /** Uses JavaScript regex syntax; portable patterns match Python's start-anchored re.match behavior. */
68
+ export declare function string(options?: {
69
+ pattern?: string;
70
+ }): PythonSchema<string>;
71
+ export declare function record<const F extends Fields>(fields: F): PythonSchema<FieldValues<F>>;
72
+ export declare function tuple<const S extends readonly SchemaLike<unknown>[]>(...items: S): PythonSchema<{
73
+ -readonly [K in keyof S]: Value<S[K]>;
74
+ }>;
75
+ /** Explicit allowed subtypes; unlike Python there is no process-wide class registry. */
76
+ export declare function withSubclasses<T>(base: SchemaLike<T>, ...subtypes: readonly SchemaLike<T>[]): PythonSchema<T>;
77
+ /** Arbitrary data literals only: no constructors or executable values. */
78
+ export declare const any: PythonSchema<unknown>;
79
+ /** Named forward reference. Declare the target before rendering/parsing the schema. */
80
+ export declare function lazy<T>(name: string, resolve: () => SchemaLike<T>): PythonSchema<T>;
81
+ /** Opt into UNKNOWN without silently widening all typed query results. */
82
+ export declare function allowUnknown<T>(schema: SchemaLike<T>): PythonSchema<T | Unknown>;
83
+ /** Primitive-valued sets. An explicit item schema adds local element validation. */
84
+ export declare function set<T = unknown>(item?: SchemaLike<T>): PythonSchema<Set<T>>;
85
+ export {};