@namzu/sdk 5.2.0 → 6.0.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.
- package/CHANGELOG.md +104 -0
- package/dist/provider/__tests__/strict-schema.test.js +50 -2
- package/dist/provider/__tests__/strict-schema.test.js.map +1 -1
- package/dist/provider/__tests__/vendor-detail.test.d.ts +2 -0
- package/dist/provider/__tests__/vendor-detail.test.d.ts.map +1 -0
- package/dist/provider/__tests__/vendor-detail.test.js +89 -0
- package/dist/provider/__tests__/vendor-detail.test.js.map +1 -0
- package/dist/provider/errors.d.ts +38 -5
- package/dist/provider/errors.d.ts.map +1 -1
- package/dist/provider/errors.js +107 -5
- package/dist/provider/errors.js.map +1 -1
- package/dist/provider/strict-schema.d.ts.map +1 -1
- package/dist/provider/strict-schema.js +64 -8
- package/dist/provider/strict-schema.js.map +1 -1
- package/dist/public-runtime.d.ts +3 -0
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +6 -0
- package/dist/public-runtime.js.map +1 -1
- package/dist/registry/tool/__tests__/dialect.test.d.ts +2 -0
- package/dist/registry/tool/__tests__/dialect.test.d.ts.map +1 -0
- package/dist/registry/tool/__tests__/dialect.test.js +143 -0
- package/dist/registry/tool/__tests__/dialect.test.js.map +1 -0
- package/dist/registry/tool/dialect.d.ts +50 -0
- package/dist/registry/tool/dialect.d.ts.map +1 -0
- package/dist/registry/tool/dialect.js +131 -0
- package/dist/registry/tool/dialect.js.map +1 -0
- package/dist/registry/toolset/catalog.d.ts.map +1 -1
- package/dist/registry/toolset/catalog.js +10 -5
- package/dist/registry/toolset/catalog.js.map +1 -1
- package/dist/runtime/query/__tests__/stream-recovery.test.js +6 -0
- package/dist/runtime/query/__tests__/stream-recovery.test.js.map +1 -1
- package/dist/runtime/query/result.d.ts.map +1 -1
- package/dist/runtime/query/result.js +6 -0
- package/dist/runtime/query/result.js.map +1 -1
- package/dist/types/provider/error.d.ts +20 -4
- package/dist/types/provider/error.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/provider/__tests__/strict-schema.test.ts +58 -2
- package/src/provider/__tests__/vendor-detail.test.ts +107 -0
- package/src/provider/errors.ts +106 -5
- package/src/provider/strict-schema.ts +65 -8
- package/src/public-runtime.ts +7 -0
- package/src/registry/tool/__tests__/dialect.test.ts +197 -0
- package/src/registry/tool/dialect.ts +136 -0
- package/src/registry/toolset/catalog.ts +10 -5
- package/src/runtime/query/__tests__/stream-recovery.test.ts +6 -0
- package/src/runtime/query/result.ts +6 -0
- package/src/types/provider/error.ts +20 -4
|
@@ -27,12 +27,21 @@
|
|
|
27
27
|
* A deny-list rather than an allow-list, deliberately. An allow-list would have
|
|
28
28
|
* to enumerate every annotation a schema may carry — `description`, `title`,
|
|
29
29
|
* `examples`, vendor extensions — and would refuse a schema for saying
|
|
30
|
-
* something harmless.
|
|
31
|
-
*
|
|
30
|
+
* something harmless. Each entry names what to write instead.
|
|
31
|
+
*
|
|
32
|
+
* MEASURED against the live API, not read off a page. The first version of this
|
|
33
|
+
* list was derived from documentation and was wrong in both directions: it
|
|
34
|
+
* refused `minLength`/`maxLength`, which the wire accepts, and it permitted
|
|
35
|
+
* `prefixItems`, which the wire rejects. A deny-list nobody probed is a guess
|
|
36
|
+
* with a confident tone, and this one would have refused working tools while
|
|
37
|
+
* still letting a broken one through.
|
|
38
|
+
*
|
|
39
|
+
* The probe lives in the live contract test; run it against a new model before
|
|
40
|
+
* trusting this list on that model.
|
|
32
41
|
*/
|
|
33
42
|
const NO_CONDITIONALS = 'strict mode has no conditional schemas; flatten the object';
|
|
34
43
|
const NO_NUMERIC_BOUNDS = 'numeric bounds are not in the subset; enforce at execution';
|
|
35
|
-
const
|
|
44
|
+
const NO_ARRAY_BOUNDS = 'array bounds are not in the subset; enforce at execution';
|
|
36
45
|
// A Map rather than an object literal, because one of the keys is `then`: an
|
|
37
46
|
// ordinary object carrying a `then` property is a thenable, and awaiting it
|
|
38
47
|
// anywhere would silently call the string. The lint rule that says so is
|
|
@@ -48,16 +57,38 @@ const UNSUPPORTED = new Map([
|
|
|
48
57
|
['exclusiveMinimum', NO_NUMERIC_BOUNDS],
|
|
49
58
|
['exclusiveMaximum', NO_NUMERIC_BOUNDS],
|
|
50
59
|
['multipleOf', NO_NUMERIC_BOUNDS],
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
60
|
+
// `minLength`/`maxLength` are NOT here. The first version of this list put
|
|
61
|
+
// them here on documentation alone, and measurement says the wire accepts
|
|
62
|
+
// both — so the list was refusing tools that would have worked. A deny-list
|
|
63
|
+
// derived from prose and never probed is a guess with a confident tone.
|
|
64
|
+
// `minItems` is NOT a flat denial — see MIN_ITEMS_ALLOWED below. The wire
|
|
65
|
+
// accepts 0 and 1 and refuses everything above, naming the value in the
|
|
66
|
+
// error, so a blanket entry here would refuse `.nonempty()` on a schema the
|
|
67
|
+
// wire would have taken.
|
|
68
|
+
['maxItems', NO_ARRAY_BOUNDS],
|
|
69
|
+
['uniqueItems', NO_ARRAY_BOUNDS],
|
|
70
|
+
// The other direction of the same mistake: this was missing, and it is the
|
|
71
|
+
// one that interacts with the dialect conversion. A tuple becomes
|
|
72
|
+
// `prefixItems` for the 2020-12 wire — and strict rejects `prefixItems`
|
|
73
|
+
// outright, so a tool that is BOTH strict AND tuple-shaped cannot be
|
|
74
|
+
// expressed at all. Better to say that at registration than to convert a
|
|
75
|
+
// schema into a different rejection.
|
|
76
|
+
['prefixItems', 'strict arrays take one `items` schema; a tuple cannot be expressed'],
|
|
56
77
|
['patternProperties', 'name the properties explicitly'],
|
|
57
78
|
['propertyNames', 'name the properties explicitly'],
|
|
58
79
|
['dependentSchemas', 'flatten the object and validate at execution'],
|
|
59
80
|
['dependentRequired', 'flatten the object and validate at execution'],
|
|
60
81
|
]);
|
|
82
|
+
/**
|
|
83
|
+
* The only `minItems` values the strict subset admits.
|
|
84
|
+
*
|
|
85
|
+
* Measured: `minItems: 0` and `minItems: 1` are accepted, `minItems: 2` comes
|
|
86
|
+
* back *"For 'array' type, 'minItems' values other than 0 or 1 are not
|
|
87
|
+
* supported"*. So the constraint is on the VALUE, not the keyword, and that is
|
|
88
|
+
* the whole difference between refusing a required-non-empty array — the
|
|
89
|
+
* ordinary spelling of `z.array(...).nonempty()` — and letting it through.
|
|
90
|
+
*/
|
|
91
|
+
const MIN_ITEMS_ALLOWED = new Set([0, 1]);
|
|
61
92
|
/**
|
|
62
93
|
* Every place a schema leaves the strict subset, with its exact path.
|
|
63
94
|
*
|
|
@@ -89,6 +120,31 @@ export function findStrictSchemaViolations(schema, path = '') {
|
|
|
89
120
|
});
|
|
90
121
|
continue;
|
|
91
122
|
}
|
|
123
|
+
// A tuple in the OTHER spelling. This check runs at registration, on the
|
|
124
|
+
// schema as rendered — which is draft-07, where a tuple is `items: [a,
|
|
125
|
+
// b]` — while the wire sees the 2020-12 `prefixItems` the driver
|
|
126
|
+
// converts it to. So a `prefixItems` entry alone never fires on the
|
|
127
|
+
// path that produces tuples, and the entry added to catch this case was
|
|
128
|
+
// dead for exactly the case it was added for.
|
|
129
|
+
//
|
|
130
|
+
// Both spellings mean the same thing and strict admits neither, so this
|
|
131
|
+
// names the tuple rather than the dialect it happens to be written in.
|
|
132
|
+
if (keyword === 'items' && Array.isArray(value)) {
|
|
133
|
+
found.push({
|
|
134
|
+
path: here,
|
|
135
|
+
keyword,
|
|
136
|
+
remedy: 'strict arrays take one `items` schema; a tuple cannot be expressed',
|
|
137
|
+
});
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (keyword === 'minItems' && typeof value === 'number' && !MIN_ITEMS_ALLOWED.has(value)) {
|
|
141
|
+
found.push({
|
|
142
|
+
path: here,
|
|
143
|
+
keyword,
|
|
144
|
+
remedy: 'strict accepts `minItems` of 0 or 1 only; enforce a larger bound at execution',
|
|
145
|
+
});
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
92
148
|
found.push(...findStrictSchemaViolations(value, here));
|
|
93
149
|
}
|
|
94
150
|
return found;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strict-schema.js","sourceRoot":"","sources":["../../src/provider/strict-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH
|
|
1
|
+
{"version":3,"file":"strict-schema.js","sourceRoot":"","sources":["../../src/provider/strict-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/public-runtime.d.ts
CHANGED
|
@@ -16,6 +16,9 @@ export { resolveTaskModel } from './router/task-router.js';
|
|
|
16
16
|
export { assertThinkingUnsupported } from './provider/thinking-support.js';
|
|
17
17
|
export { modelVersionAtLeast, parseVersionedModelId } from './provider/model-version.js';
|
|
18
18
|
export { assertStrictSchema, findStrictSchemaViolations } from './provider/strict-schema.js';
|
|
19
|
+
export { findDraft07Only, toSchemaDialect } from './registry/tool/dialect.js';
|
|
20
|
+
export type { JsonSchemaDialect } from './registry/tool/dialect.js';
|
|
21
|
+
export { renderToolSchema } from './registry/tool/schema.js';
|
|
19
22
|
export type { StrictSchemaViolation } from './provider/strict-schema.js';
|
|
20
23
|
export type { ModelIdGrammar, ModelVersion } from './provider/model-version.js';
|
|
21
24
|
export { drainQuery, query } from './runtime/query/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-runtime.d.ts","sourceRoot":"","sources":["../src/public-runtime.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACtB,MAAM,qBAAqB,CAAA;AAI5B,cAAc,sBAAsB,CAAA;AAIpC,OAAO,EACN,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,WAAW,EACX,kBAAkB,GAClB,MAAM,wBAAwB,CAAA;AAE/B,cAAc,oBAAoB,CAAA;AAIlC,cAAc,eAAe,CAAA;AAI7B,OAAO,EACN,cAAc,EACd,aAAa,EACb,UAAU,EACV,SAAS,GACT,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EACN,mBAAmB,EACnB,uBAAuB,GACvB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAI9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAG1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAK1E,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAGxF,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"public-runtime.d.ts","sourceRoot":"","sources":["../src/public-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/public-runtime.js
CHANGED
|
@@ -39,6 +39,12 @@ export { modelVersionAtLeast, parseVersionedModelId } from './provider/model-ver
|
|
|
39
39
|
// Strict tool input is a SUBSET of JSON Schema, and a keyword outside it makes
|
|
40
40
|
// the vendor reject the whole request rather than degrade one field.
|
|
41
41
|
export { assertStrictSchema, findStrictSchemaViolations } from './provider/strict-schema.js';
|
|
42
|
+
// A tool has one schema; what changes per provider is the DIALECT the wire
|
|
43
|
+
// parses, which is the wire's property. Rendered once, converted at the driver.
|
|
44
|
+
export { findDraft07Only, toSchemaDialect } from './registry/tool/dialect.js';
|
|
45
|
+
// The renderer itself, so a driver or a contract test can ask what a tool will
|
|
46
|
+
// actually put on the wire without reaching into the registry.
|
|
47
|
+
export { renderToolSchema } from './registry/tool/schema.js';
|
|
42
48
|
export { drainQuery, query } from './runtime/query/index.js';
|
|
43
49
|
// Mid-run guidance. A host holds the channel and the loop drains it at the
|
|
44
50
|
// tool-result boundary; see the module for why that is the only legal slot.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-runtime.js","sourceRoot":"","sources":["../src/public-runtime.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,wEAAwE;AACxE,wEAAwE;AACxE,8DAA8D;AAC9D,8DAA8D;AAC9D,EAAE;AACF,2EAA2E;AAC3E,2DAA2D;AAE3D,4EAA4E;AAE5E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACtB,MAAM,qBAAqB,CAAA;AAE5B,4EAA4E;AAE5E,cAAc,sBAAsB,CAAA;AAEpC,4EAA4E;AAE5E,OAAO,EACN,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,WAAW,EACX,kBAAkB,GAClB,MAAM,wBAAwB,CAAA;AAE/B,cAAc,oBAAoB,CAAA;AAElC,4EAA4E;AAE5E,cAAc,eAAe,CAAA;AAE7B,4EAA4E;AAE5E,OAAO,EACN,cAAc,EACd,aAAa,EACb,UAAU,EACV,SAAS,GACT,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAU,MAAM,mBAAmB,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EACN,mBAAmB,EACnB,uBAAuB,GACvB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE9D,4EAA4E;AAE5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,uEAAuE;AACvE,wEAAwE;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,6EAA6E;AAC7E,2EAA2E;AAC3E,2EAA2E;AAC3E,kEAAkE;AAClE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACxF,+EAA+E;AAC/E,qEAAqE;AACrE,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"public-runtime.js","sourceRoot":"","sources":["../src/public-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.test.d.ts","sourceRoot":"","sources":["../../../../src/registry/tool/__tests__/dialect.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { findDraft07Only, toSchemaDialect } from '../dialect.js';
|
|
4
|
+
import { renderToolSchema } from '../schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* The mechanism, tested in the kernel that owns it.
|
|
7
|
+
*
|
|
8
|
+
* The drivers each have their own test proving the conversion reaches their
|
|
9
|
+
* wire. This one is about the conversion itself: what it rewrites, what it
|
|
10
|
+
* deliberately leaves alone, and the two properties the prompt cache depends
|
|
11
|
+
* on — a stable reference and a frozen result.
|
|
12
|
+
*/
|
|
13
|
+
describe('saying a schema in the dialect a wire parses', () => {
|
|
14
|
+
it('moves a tuple from `items` to `prefixItems`', () => {
|
|
15
|
+
const draft07 = {
|
|
16
|
+
type: 'object',
|
|
17
|
+
properties: {
|
|
18
|
+
range: {
|
|
19
|
+
type: 'array',
|
|
20
|
+
items: [{ type: 'integer' }, { type: 'integer' }],
|
|
21
|
+
minItems: 2,
|
|
22
|
+
maxItems: 2,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
expect(toSchemaDialect(draft07, '2020-12')).toEqual({
|
|
27
|
+
type: 'object',
|
|
28
|
+
properties: {
|
|
29
|
+
range: {
|
|
30
|
+
type: 'array',
|
|
31
|
+
prefixItems: [{ type: 'integer' }, { type: 'integer' }],
|
|
32
|
+
minItems: 2,
|
|
33
|
+
maxItems: 2,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
it('leaves a homogeneous array alone, where `items` means the same thing', () => {
|
|
39
|
+
// The distinction the whole conversion turns on: `items` is only a
|
|
40
|
+
// tuple when it holds an ARRAY of schemas. One schema means "every
|
|
41
|
+
// element", which both dialects spell identically.
|
|
42
|
+
const schema = { type: 'array', items: { type: 'string' } };
|
|
43
|
+
expect(toSchemaDialect(schema, '2020-12')).toEqual(schema);
|
|
44
|
+
});
|
|
45
|
+
it('turns `additionalItems` into the 2020-12 `items`', () => {
|
|
46
|
+
// `additionalItems` only ever qualified an array-form `items` — it says
|
|
47
|
+
// what the elements AFTER the tuple look like. 2020-12 gave that job to
|
|
48
|
+
// `items` once `prefixItems` holds the positional schemas.
|
|
49
|
+
const converted = toSchemaDialect({
|
|
50
|
+
type: 'array',
|
|
51
|
+
items: [{ type: 'integer' }],
|
|
52
|
+
additionalItems: { type: 'string' },
|
|
53
|
+
}, '2020-12');
|
|
54
|
+
expect(converted).toEqual({
|
|
55
|
+
type: 'array',
|
|
56
|
+
prefixItems: [{ type: 'integer' }],
|
|
57
|
+
items: { type: 'string' },
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
it('drops `additionalItems: false`, which both dialects already imply', () => {
|
|
61
|
+
// Not a lossy shortcut: once `prefixItems` is set, a closed tuple is the
|
|
62
|
+
// default in 2020-12, so emitting `items: false` would add a byte to
|
|
63
|
+
// every request to say what was already true.
|
|
64
|
+
expect(toSchemaDialect({ type: 'array', items: [{ type: 'integer' }], additionalItems: false }, '2020-12')).toEqual({ type: 'array', prefixItems: [{ type: 'integer' }] });
|
|
65
|
+
});
|
|
66
|
+
it('ignores `additionalItems` with no tuple to qualify', () => {
|
|
67
|
+
// Meaningless in draft-07 too, so carrying it forward would be inventing
|
|
68
|
+
// a constraint the author did not write.
|
|
69
|
+
expect(toSchemaDialect({ type: 'array', items: { type: 'string' }, additionalItems: { type: 'integer' } }, '2020-12')).toEqual({ type: 'array', items: { type: 'string' } });
|
|
70
|
+
});
|
|
71
|
+
it('converts a tuple nested inside another tuple', () => {
|
|
72
|
+
const converted = toSchemaDialect({ type: 'array', items: [{ type: 'array', items: [{ type: 'integer' }] }] }, '2020-12');
|
|
73
|
+
expect(converted.prefixItems?.[0]).toEqual({
|
|
74
|
+
type: 'array',
|
|
75
|
+
prefixItems: [{ type: 'integer' }],
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
it('hands back the very same object for draft-07', () => {
|
|
79
|
+
// Not an equal object — the SAME one. The tools block sits at position 0
|
|
80
|
+
// of the prompt-cache prefix, so a driver that speaks draft-07 must not
|
|
81
|
+
// pay an allocation or risk a differently-ordered copy per request.
|
|
82
|
+
const schema = { type: 'object' };
|
|
83
|
+
expect(toSchemaDialect(schema, 'draft-07')).toBe(schema);
|
|
84
|
+
});
|
|
85
|
+
it('returns the same converted object every time it is asked', () => {
|
|
86
|
+
// Same reason. Conversion runs once per schema per dialect; a fresh
|
|
87
|
+
// object each iteration would invalidate the cache for the whole run
|
|
88
|
+
// even though the bytes were equal.
|
|
89
|
+
const schema = { type: 'array', items: [{ type: 'integer' }] };
|
|
90
|
+
expect(toSchemaDialect(schema, '2020-12')).toBe(toSchemaDialect(schema, '2020-12'));
|
|
91
|
+
});
|
|
92
|
+
it('freezes what it hands out, all the way down', () => {
|
|
93
|
+
// A caller that mutates a cached schema would poison every later render,
|
|
94
|
+
// and the symptom would be a silently invalidated prompt cache rather
|
|
95
|
+
// than an error. Freezing turns that into a throw at the mutation site.
|
|
96
|
+
const converted = toSchemaDialect({ type: 'object', properties: { a: { type: 'array', items: [{ type: 'integer' }] } } }, '2020-12');
|
|
97
|
+
expect(Object.isFrozen(converted)).toBe(true);
|
|
98
|
+
expect(Object.isFrozen(converted.properties.a)).toBe(true);
|
|
99
|
+
expect(Object.isFrozen(converted.properties.a.prefixItems)).toBe(true);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe('finding what a 2020-12 wire will refuse', () => {
|
|
103
|
+
it('names the path to an array-form `items`', () => {
|
|
104
|
+
expect(findDraft07Only({
|
|
105
|
+
type: 'object',
|
|
106
|
+
properties: { range: { type: 'array', items: [{ type: 'integer' }] } },
|
|
107
|
+
})).toEqual(['properties.range.items']);
|
|
108
|
+
});
|
|
109
|
+
it('names `additionalItems` too', () => {
|
|
110
|
+
expect(findDraft07Only({ additionalItems: false })).toEqual(['additionalItems']);
|
|
111
|
+
});
|
|
112
|
+
it('walks into arrays, indexing the branch', () => {
|
|
113
|
+
expect(findDraft07Only({
|
|
114
|
+
anyOf: [{ type: 'string' }, { type: 'array', items: [{ type: 'integer' }] }],
|
|
115
|
+
})).toEqual(['anyOf[1].items']);
|
|
116
|
+
});
|
|
117
|
+
it('does not descend into a tuple it has already reported', () => {
|
|
118
|
+
// Reporting the tuple and then each of its positional schemas would
|
|
119
|
+
// turn one fixable finding into a list nobody reads.
|
|
120
|
+
expect(findDraft07Only({ type: 'array', items: [{ type: 'integer' }, { type: 'string' }] })).toEqual(['items']);
|
|
121
|
+
});
|
|
122
|
+
it('says nothing about a schema that is already 2020-12', () => {
|
|
123
|
+
expect(findDraft07Only({
|
|
124
|
+
type: 'array',
|
|
125
|
+
prefixItems: [{ type: 'integer' }],
|
|
126
|
+
items: { type: 'string' },
|
|
127
|
+
})).toEqual([]);
|
|
128
|
+
});
|
|
129
|
+
it('tolerates the leaves', () => {
|
|
130
|
+
expect(findDraft07Only(null)).toEqual([]);
|
|
131
|
+
expect(findDraft07Only('a string')).toEqual([]);
|
|
132
|
+
expect(findDraft07Only(42)).toEqual([]);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe('the round trip a real tool takes', () => {
|
|
136
|
+
it('renders a Zod tuple as draft-07 and converts it clean', () => {
|
|
137
|
+
// The actual defect, end to end: this is what `read.readRange` is.
|
|
138
|
+
const rendered = renderToolSchema(z.object({ readRange: z.tuple([z.number(), z.number()]).optional() }));
|
|
139
|
+
expect(findDraft07Only(rendered)).not.toEqual([]);
|
|
140
|
+
expect(findDraft07Only(toSchemaDialect(rendered, '2020-12'))).toEqual([]);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
//# sourceMappingURL=dialect.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.test.js","sourceRoot":"","sources":["../../../../src/registry/tool/__tests__/dialect.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dialect a wire speaks, and how to say the same schema in it.
|
|
3
|
+
*
|
|
4
|
+
* A tool has one Zod schema. What changes between providers is not the tool —
|
|
5
|
+
* it is the JSON Schema dialect the wire parses, which is a property of the
|
|
6
|
+
* wire. So the shape is rendered once, canonically, and each driver converts
|
|
7
|
+
* at the boundary where it knows which wire it is about to talk to.
|
|
8
|
+
*
|
|
9
|
+
* This exists because that layering was missing and it cost a production
|
|
10
|
+
* outage. `renderToolSchema` emits draft-07 (zod-to-json-schema's
|
|
11
|
+
* `jsonSchema7` target), every driver forwarded it verbatim, and one of the
|
|
12
|
+
* wires namzu speaks requires draft 2020-12. Measured against that live
|
|
13
|
+
* endpoint:
|
|
14
|
+
*
|
|
15
|
+
* | tool schema | result |
|
|
16
|
+
* |--------------------------------|-----------------------------------------|
|
|
17
|
+
* | `items: [a, b]` (draft-07) | 400 — "must match JSON Schema draft 2020-12" |
|
|
18
|
+
* | `prefixItems: [a, b]` (2020-12)| accepted |
|
|
19
|
+
* | `items: { a }` | accepted |
|
|
20
|
+
*
|
|
21
|
+
* The failure is NOT about strict tool use. It fires with strict validation
|
|
22
|
+
* unset, and with it on the dialect error arrives *before* the strict-subset
|
|
23
|
+
* error — so a guard scoped to strict misses it entirely. One was, and did.
|
|
24
|
+
*
|
|
25
|
+
* Which wires want which dialect is the drivers' knowledge, not this file's:
|
|
26
|
+
* the vocabulary lives beside the wire that speaks it, and only the mechanism
|
|
27
|
+
* lives here.
|
|
28
|
+
*
|
|
29
|
+
* Only the conversions namzu can actually emit are implemented. The renderer
|
|
30
|
+
* runs with `$refStrategy: 'none'`, so there are no `$ref`/`definitions` to
|
|
31
|
+
* rewrite; a construct that cannot appear is not worth code that cannot be
|
|
32
|
+
* tested.
|
|
33
|
+
*/
|
|
34
|
+
/** Which spelling of JSON Schema a wire accepts. */
|
|
35
|
+
export type JsonSchemaDialect = 'draft-07' | '2020-12';
|
|
36
|
+
/**
|
|
37
|
+
* Say this schema in the dialect the wire parses.
|
|
38
|
+
*
|
|
39
|
+
* Returns the input unchanged — same reference — when nothing needs saying
|
|
40
|
+
* differently, so the common case costs one map lookup and no allocation.
|
|
41
|
+
*/
|
|
42
|
+
export declare function toSchemaDialect(schema: Record<string, unknown>, dialect: JsonSchemaDialect): Record<string, unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* Whether a schema still carries a construct the 2020-12 wire refuses.
|
|
45
|
+
*
|
|
46
|
+
* Exported so a test can sweep every shipped tool without reaching into the
|
|
47
|
+
* conversion, and so a driver can assert rather than hope.
|
|
48
|
+
*/
|
|
49
|
+
export declare function findDraft07Only(schema: unknown, path?: string): string[];
|
|
50
|
+
//# sourceMappingURL=dialect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../../src/registry/tool/dialect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,oDAAoD;AACpD,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,SAAS,CAAA;AAetD;;;;;GAKG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,iBAAiB,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,SAAK,GAAG,MAAM,EAAE,CAsBpE"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dialect a wire speaks, and how to say the same schema in it.
|
|
3
|
+
*
|
|
4
|
+
* A tool has one Zod schema. What changes between providers is not the tool —
|
|
5
|
+
* it is the JSON Schema dialect the wire parses, which is a property of the
|
|
6
|
+
* wire. So the shape is rendered once, canonically, and each driver converts
|
|
7
|
+
* at the boundary where it knows which wire it is about to talk to.
|
|
8
|
+
*
|
|
9
|
+
* This exists because that layering was missing and it cost a production
|
|
10
|
+
* outage. `renderToolSchema` emits draft-07 (zod-to-json-schema's
|
|
11
|
+
* `jsonSchema7` target), every driver forwarded it verbatim, and one of the
|
|
12
|
+
* wires namzu speaks requires draft 2020-12. Measured against that live
|
|
13
|
+
* endpoint:
|
|
14
|
+
*
|
|
15
|
+
* | tool schema | result |
|
|
16
|
+
* |--------------------------------|-----------------------------------------|
|
|
17
|
+
* | `items: [a, b]` (draft-07) | 400 — "must match JSON Schema draft 2020-12" |
|
|
18
|
+
* | `prefixItems: [a, b]` (2020-12)| accepted |
|
|
19
|
+
* | `items: { a }` | accepted |
|
|
20
|
+
*
|
|
21
|
+
* The failure is NOT about strict tool use. It fires with strict validation
|
|
22
|
+
* unset, and with it on the dialect error arrives *before* the strict-subset
|
|
23
|
+
* error — so a guard scoped to strict misses it entirely. One was, and did.
|
|
24
|
+
*
|
|
25
|
+
* Which wires want which dialect is the drivers' knowledge, not this file's:
|
|
26
|
+
* the vocabulary lives beside the wire that speaks it, and only the mechanism
|
|
27
|
+
* lives here.
|
|
28
|
+
*
|
|
29
|
+
* Only the conversions namzu can actually emit are implemented. The renderer
|
|
30
|
+
* runs with `$refStrategy: 'none'`, so there are no `$ref`/`definitions` to
|
|
31
|
+
* rewrite; a construct that cannot appear is not worth code that cannot be
|
|
32
|
+
* tested.
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* Rendered schemas are memoized and deeply frozen, so their identity is
|
|
36
|
+
* stable for the life of the tool — which makes them a sound `WeakMap` key.
|
|
37
|
+
*
|
|
38
|
+
* Converting per request would re-walk every tool's tree on every iteration,
|
|
39
|
+
* which is the waste `renderToolSchema`'s own cache exists to remove, and it
|
|
40
|
+
* would hand a fresh object to the wire each time. The tools block renders at
|
|
41
|
+
* position 0 of the prompt-cache prefix, so a differently-ordered but equal
|
|
42
|
+
* object still invalidates the cache for the whole run. Caching the conversion
|
|
43
|
+
* keeps the bytes identical across iterations.
|
|
44
|
+
*/
|
|
45
|
+
const CONVERTED = new Map();
|
|
46
|
+
/**
|
|
47
|
+
* Say this schema in the dialect the wire parses.
|
|
48
|
+
*
|
|
49
|
+
* Returns the input unchanged — same reference — when nothing needs saying
|
|
50
|
+
* differently, so the common case costs one map lookup and no allocation.
|
|
51
|
+
*/
|
|
52
|
+
export function toSchemaDialect(schema, dialect) {
|
|
53
|
+
if (dialect === 'draft-07')
|
|
54
|
+
return schema;
|
|
55
|
+
let cache = CONVERTED.get(dialect);
|
|
56
|
+
if (!cache) {
|
|
57
|
+
cache = new WeakMap();
|
|
58
|
+
CONVERTED.set(dialect, cache);
|
|
59
|
+
}
|
|
60
|
+
const hit = cache.get(schema);
|
|
61
|
+
if (hit)
|
|
62
|
+
return hit;
|
|
63
|
+
const converted = to2020(schema);
|
|
64
|
+
const frozen = deepFreeze(converted);
|
|
65
|
+
cache.set(schema, frozen);
|
|
66
|
+
return frozen;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Whether a schema still carries a construct the 2020-12 wire refuses.
|
|
70
|
+
*
|
|
71
|
+
* Exported so a test can sweep every shipped tool without reaching into the
|
|
72
|
+
* conversion, and so a driver can assert rather than hope.
|
|
73
|
+
*/
|
|
74
|
+
export function findDraft07Only(schema, path = '') {
|
|
75
|
+
if (Array.isArray(schema)) {
|
|
76
|
+
return schema.flatMap((item, i) => findDraft07Only(item, `${path}[${i}]`));
|
|
77
|
+
}
|
|
78
|
+
if (typeof schema !== 'object' || schema === null)
|
|
79
|
+
return [];
|
|
80
|
+
const node = schema;
|
|
81
|
+
const found = [];
|
|
82
|
+
// A tuple. In draft-07 the positional schemas live in `items`; 2020-12
|
|
83
|
+
// moved them to `prefixItems` and kept `items` for the rest, so the array
|
|
84
|
+
// form is not merely old — it means something else now, and the wire
|
|
85
|
+
// rejects the whole request rather than one field.
|
|
86
|
+
if (Array.isArray(node.items))
|
|
87
|
+
found.push(`${path ? `${path}.` : ''}items`);
|
|
88
|
+
// `additionalItems` only ever qualified an array-form `items`; 2020-12
|
|
89
|
+
// spells that `items`.
|
|
90
|
+
if ('additionalItems' in node)
|
|
91
|
+
found.push(`${path ? `${path}.` : ''}additionalItems`);
|
|
92
|
+
for (const [key, value] of Object.entries(node)) {
|
|
93
|
+
if (key === 'items' && Array.isArray(value))
|
|
94
|
+
continue;
|
|
95
|
+
found.push(...findDraft07Only(value, path ? `${path}.${key}` : key));
|
|
96
|
+
}
|
|
97
|
+
return found;
|
|
98
|
+
}
|
|
99
|
+
function to2020(value) {
|
|
100
|
+
if (Array.isArray(value))
|
|
101
|
+
return value.map(to2020);
|
|
102
|
+
if (typeof value !== 'object' || value === null)
|
|
103
|
+
return value;
|
|
104
|
+
const node = value;
|
|
105
|
+
const out = {};
|
|
106
|
+
for (const [key, child] of Object.entries(node)) {
|
|
107
|
+
if (key === 'items' && Array.isArray(child)) {
|
|
108
|
+
out.prefixItems = child.map(to2020);
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (key === 'additionalItems') {
|
|
112
|
+
// Only meaningful alongside an array-form `items`, where 2020-12
|
|
113
|
+
// calls the same thing `items`. `false` is the default in both
|
|
114
|
+
// dialects once `prefixItems` is set, so it carries nothing.
|
|
115
|
+
if (Array.isArray(node.items) && child !== false)
|
|
116
|
+
out.items = to2020(child);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
out[key] = to2020(child);
|
|
120
|
+
}
|
|
121
|
+
return out;
|
|
122
|
+
}
|
|
123
|
+
function deepFreeze(value) {
|
|
124
|
+
if (typeof value !== 'object' || value === null || Object.isFrozen(value))
|
|
125
|
+
return value;
|
|
126
|
+
for (const key of Object.keys(value)) {
|
|
127
|
+
deepFreeze(value[key]);
|
|
128
|
+
}
|
|
129
|
+
return Object.freeze(value);
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=dialect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../../src/registry/tool/dialect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/registry/toolset/catalog.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/registry/toolset/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,KAAK,EACX,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,MAAM,8BAA8B,CAAA;AAGrC,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAA;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAAG;QACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;CACD;AAmBD,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,KAAK,CAAsC;IAEnD,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIxC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAOjD,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA8B1C,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI7C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIrD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAInD,WAAW,IAAI,UAAU,EAAE;IAI3B,YAAY,IAAI,iBAAiB,EAAE;IAInC,SAAS,IAAI,gBAAgB,EAAE;IAI/B,QAAQ,IAAI,mBAAmB;IAQ/B,iBAAiB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,gBAAgB,EAAE;IAK1E,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,uBAAuB,EAAE;IAmC7F,UAAU,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;KAAO,GAAG,aAAa,EAAE;CAO5F;AAED,wBAAgB,6BAA6B,CAC5C,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,GAAE,8BAAmC,GAC1C,WAAW,CAwBb;AAED,wBAAgB,4BAA4B,CAC3C,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE;IACN,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CACtC,GACC,gBAAgB,CAgBlB;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,gBAAgB,GAAG,eAAe,CASvF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { renderToolSchema } from '../tool/schema.js';
|
|
2
2
|
const DEFAULT_HOST_SOURCE = {
|
|
3
3
|
id: 'host-tools',
|
|
4
4
|
kind: 'host_tool',
|
|
@@ -179,11 +179,16 @@ function toolDefinitionToLLMTool(definition) {
|
|
|
179
179
|
function: {
|
|
180
180
|
name: definition.name,
|
|
181
181
|
description: definition.description,
|
|
182
|
+
// Through `renderToolSchema`, not a second inline conversion. The
|
|
183
|
+
// options were already identical, so this was not a different
|
|
184
|
+
// rendering — it was the same rendering without the guarantees:
|
|
185
|
+
// no `$schema` stripping (that key rides in the tools block, which
|
|
186
|
+
// sits at position 0 inside the prompt-cache prefix), no memoization,
|
|
187
|
+
// and no freeze. Two paths that agree today are two paths that can
|
|
188
|
+
// disagree tomorrow, and a tool reaching the wire through the catalog
|
|
189
|
+
// rather than the registry is not a different tool.
|
|
182
190
|
parameters: (definition.modelInputSchema ? structuredClone(definition.modelInputSchema) : undefined) ??
|
|
183
|
-
|
|
184
|
-
target: 'jsonSchema7',
|
|
185
|
-
$refStrategy: 'none',
|
|
186
|
-
}),
|
|
191
|
+
renderToolSchema(definition.inputSchema),
|
|
187
192
|
},
|
|
188
193
|
};
|
|
189
194
|
}
|