@sensigo/realm 0.36.0 → 0.38.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/dist/adapters/adapter-utils.d.ts +31 -0
- package/dist/adapters/adapter-utils.d.ts.map +1 -1
- package/dist/adapters/adapter-utils.js +16 -0
- package/dist/adapters/adapter-utils.js.map +1 -1
- package/dist/adapters/airtable-adapter.d.ts.map +1 -1
- package/dist/adapters/airtable-adapter.js +25 -14
- package/dist/adapters/airtable-adapter.js.map +1 -1
- package/dist/adapters/gorgias-adapter.d.ts.map +1 -1
- package/dist/adapters/gorgias-adapter.js +7 -3
- package/dist/adapters/gorgias-adapter.js.map +1 -1
- package/dist/adapters/notion-adapter.d.ts.map +1 -1
- package/dist/adapters/notion-adapter.js +10 -6
- package/dist/adapters/notion-adapter.js.map +1 -1
- package/dist/adapters/slack-adapter.d.ts.map +1 -1
- package/dist/adapters/slack-adapter.js +8 -2
- package/dist/adapters/slack-adapter.js.map +1 -1
- package/dist/engine/eligibility.d.ts +24 -0
- package/dist/engine/eligibility.d.ts.map +1 -1
- package/dist/engine/eligibility.js +35 -2
- package/dist/engine/eligibility.js.map +1 -1
- package/dist/engine/execution-loop.d.ts.map +1 -1
- package/dist/engine/execution-loop.js +35 -0
- package/dist/engine/execution-loop.js.map +1 -1
- package/dist/engine/run-health.d.ts.map +1 -1
- package/dist/engine/run-health.js +10 -1
- package/dist/engine/run-health.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/types/run-record.d.ts +59 -5
- package/dist/types/run-record.d.ts.map +1 -1
- package/dist/types/workflow-error.d.ts +1 -1
- package/dist/types/workflow-error.d.ts.map +1 -1
- package/dist/types/workflow-error.js.map +1 -1
- package/dist/workflow/diagnostics.d.ts +10 -0
- package/dist/workflow/diagnostics.d.ts.map +1 -1
- package/dist/workflow/diagnostics.js +1 -1
- package/dist/workflow/diagnostics.js.map +1 -1
- package/dist/workflow/structured-output-eligibility.d.ts +20 -3
- package/dist/workflow/structured-output-eligibility.d.ts.map +1 -1
- package/dist/workflow/structured-output-eligibility.js +253 -29
- package/dist/workflow/structured-output-eligibility.js.map +1 -1
- package/dist/workflow/yaml-loader.d.ts.map +1 -1
- package/dist/workflow/yaml-loader.js +32 -1
- package/dist/workflow/yaml-loader.js.map +1 -1
- package/package.json +1 -1
|
@@ -63,6 +63,103 @@ const SUPPORTED_FORMATS = new Set([
|
|
|
63
63
|
const OWN_ROW_KEYWORDS = new Set(['format', 'pattern']);
|
|
64
64
|
/** Keys that are never schema keywords themselves — traversal structure, not gate subjects. */
|
|
65
65
|
const NON_KEYWORD_KEYS = new Set(['properties', 'items', '$defs', 'definitions']);
|
|
66
|
+
/**
|
|
67
|
+
* Issue #313 — the OpenAI profile's keyword allowlist. WIDER than Anthropic's: every keyword
|
|
68
|
+
* Anthropic hard-rejects or silently ignores in the numeric/string-constraint family is
|
|
69
|
+
* first-class here, and `$ref` recursion is supported outright.
|
|
70
|
+
*
|
|
71
|
+
* Provenance (api-facts-lane + MA-executed probes, 2026-08-16): the docs were wrong in BOTH
|
|
72
|
+
* directions for both vendors, so acceptance is probe-anchored, never docs-derived. P2 in
|
|
73
|
+
* particular FLIPPED the expectation — `minLength` is accepted AND enforced (a 2-char answer
|
|
74
|
+
* came back padded to exactly 10 characters: the constrained-decoding signature), the exact
|
|
75
|
+
* opposite of Anthropic's live-proven accept-and-ignore of the same keyword.
|
|
76
|
+
*/
|
|
77
|
+
const OPENAI_SUPPORTED_KEYWORDS = new Set([
|
|
78
|
+
// structural
|
|
79
|
+
'type',
|
|
80
|
+
'properties',
|
|
81
|
+
'items',
|
|
82
|
+
'description',
|
|
83
|
+
'title',
|
|
84
|
+
'required',
|
|
85
|
+
'additionalProperties',
|
|
86
|
+
'$ref',
|
|
87
|
+
'$defs',
|
|
88
|
+
'definitions',
|
|
89
|
+
'default',
|
|
90
|
+
// value constraints — all first-class under OpenAI strict
|
|
91
|
+
'enum',
|
|
92
|
+
'const',
|
|
93
|
+
'anyOf',
|
|
94
|
+
'pattern',
|
|
95
|
+
'format',
|
|
96
|
+
'minLength',
|
|
97
|
+
'maxLength',
|
|
98
|
+
'minimum',
|
|
99
|
+
'maximum',
|
|
100
|
+
'exclusiveMinimum',
|
|
101
|
+
'exclusiveMaximum',
|
|
102
|
+
'multipleOf',
|
|
103
|
+
'minItems',
|
|
104
|
+
'maxItems',
|
|
105
|
+
]);
|
|
106
|
+
/**
|
|
107
|
+
* Issue #313 — the OpenAI profile's HARD rejection set, with PER-MEMBER provenance labels
|
|
108
|
+
* (final-gate correction 1). Misclassifying a member here costs only the safe json_object
|
|
109
|
+
* fallback — never a falsity — which is why the docs-derived members are kept conservative:
|
|
110
|
+
*
|
|
111
|
+
* - `allOf` — 400-EXECUTED (probe P3a: "In context=('properties','x'), 'allOf' is
|
|
112
|
+
* not permitted", param=response_format).
|
|
113
|
+
* - `not` — 400-EXECUTED ("Unsupported keywords ('not',)").
|
|
114
|
+
* - `dependentRequired` — 400-EXECUTED (the keyword is named in the message).
|
|
115
|
+
* - `dependentSchemas` — 400-EXECUTED (the keyword is named in the message).
|
|
116
|
+
* - `if` / `then` / `else` — 400-EXECUTED (fires for if/then AND if/then/else).
|
|
117
|
+
*
|
|
118
|
+
* END STATE: every member is executed against the live API, each 400 naming its own keyword. The
|
|
119
|
+
* class posture (reject-on-unsupported, rather than Anthropic's silent strip) therefore no longer
|
|
120
|
+
* rests on a single confirmed member. This matters because the failure direction is asymmetric: a
|
|
121
|
+
* keyword wrongly present here would cost a SILENT capability loss (fallback to json_object with
|
|
122
|
+
* nobody told), whereas one wrongly absent is caught loudly by the live 400 arm. Adding a member
|
|
123
|
+
* on documentation alone would re-open that hazard — probe first.
|
|
124
|
+
*/
|
|
125
|
+
const OPENAI_UNSUPPORTED_KEYWORDS = new Set([
|
|
126
|
+
'allOf',
|
|
127
|
+
'not',
|
|
128
|
+
'dependentRequired',
|
|
129
|
+
'dependentSchemas',
|
|
130
|
+
'if',
|
|
131
|
+
'then',
|
|
132
|
+
'else',
|
|
133
|
+
]);
|
|
134
|
+
/**
|
|
135
|
+
* Issue #313 — OpenAI's schema size limits, with PER-MEMBER PROVENANCE LABELS (the same
|
|
136
|
+
* discipline the keyword sets above carry, for the same reason: two of these four were executed
|
|
137
|
+
* against the live API and two were read off documentation that has already been wrong in both
|
|
138
|
+
* directions for both vendors).
|
|
139
|
+
*
|
|
140
|
+
* Misclassification cost is asymmetric and worth stating: a limit set too LOW silently withholds
|
|
141
|
+
* strict from a schema the API would have accepted (no error, no signal — the exact class this
|
|
142
|
+
* issue exists to remove), while a limit set too HIGH simply lets the request go and be caught by
|
|
143
|
+
* the live 400 arm, which drops strict, retries, and discloses. That is why the two unprobed
|
|
144
|
+
* members are kept at their documented values rather than tightened defensively.
|
|
145
|
+
*/
|
|
146
|
+
const OPENAI_LIMITS = {
|
|
147
|
+
/** Nesting depth. BOUNDARY-EXECUTED: depth 10 ⇒ 200, depth 11 ⇒ 400 ("11 levels of nesting
|
|
148
|
+
* exceeds limit of 10"). Measured in OBJECT nesting levels — see walkNode. */
|
|
149
|
+
maxDepth: 10,
|
|
150
|
+
/** Total properties across the schema. BOUNDARY-EXECUTED both sides: 5000 ⇒ 200, 5001 ⇒ 400
|
|
151
|
+
* ("5001 parameters exceeds limit of 5000"). */
|
|
152
|
+
maxProperties: 5000,
|
|
153
|
+
/** Total characters across property names, enum values and const values.
|
|
154
|
+
* DOCS-DERIVED-CONSERVATIVE for the 120k figure itself — no exact-boundary cell was
|
|
155
|
+
* constructed. The COUNTED SET, however, is executed fact: descriptions are PROVEN excluded
|
|
156
|
+
* (~135k of description text behind tiny names/enums ⇒ 200), which is why they are not
|
|
157
|
+
* counted here. */
|
|
158
|
+
maxChars: 120_000,
|
|
159
|
+
/** Values in a single enum. BOUNDARY-EXECUTED: 1000 ⇒ 200, 1001 ⇒ 400 (the error names the
|
|
160
|
+
* limit and the received count). */
|
|
161
|
+
maxEnumValues: 1000,
|
|
162
|
+
};
|
|
66
163
|
/**
|
|
67
164
|
* Issue #311: the enforcement-class clause, forked by subject. On the step-output path realm's
|
|
68
165
|
* own Ajv still enforces the keyword after the model answers, so each row keeps its EXISTING
|
|
@@ -141,20 +238,57 @@ function hasDefsCycle(defs) {
|
|
|
141
238
|
}
|
|
142
239
|
/** Recursively walks one schema node, mutating `ctx` with every G1/G2/G4/G5 finding + the G3
|
|
143
240
|
* optional/union counts. `path` is the schema-relative dotted path to THIS node. */
|
|
144
|
-
function walkNode(node, path, ctx) {
|
|
241
|
+
function walkNode(node, path, ctx, depth = 1) {
|
|
145
242
|
if (!isPlainObject(node))
|
|
146
243
|
return;
|
|
244
|
+
const openai = ctx.profile === 'openai';
|
|
245
|
+
// Depth is measured in OBJECT nesting levels — the unit OpenAI's own limit is stated in. A
|
|
246
|
+
// scalar leaf (`{type: 'string'}`) is a nested schema node but not a nested level, so counting
|
|
247
|
+
// every node would reject at 9 real levels and silently cost strict on schemas the API accepts.
|
|
248
|
+
if ((node['type'] === 'object' || node['properties'] !== undefined) && depth > ctx.maxDepthSeen) {
|
|
249
|
+
ctx.maxDepthSeen = depth;
|
|
250
|
+
}
|
|
251
|
+
// issue #313 (OpenAI hard set): keywords the API rejects outright with a 400. Checked BEFORE
|
|
252
|
+
// the generic allowlist walk so they never degrade to the caveat class.
|
|
253
|
+
if (openai) {
|
|
254
|
+
for (const kw of Object.keys(node)) {
|
|
255
|
+
if (!OPENAI_UNSUPPORTED_KEYWORDS.has(kw))
|
|
256
|
+
continue;
|
|
257
|
+
ctx.hardReasons.push({
|
|
258
|
+
code: 'unsupported_keyword',
|
|
259
|
+
path,
|
|
260
|
+
remediation: `'${kw}' at '${path || '(root)'}' is not supported by OpenAI strict mode and is rejected with a 400 — restructure without it (for '${kw}' inside a composition, express the shape directly or use 'anyOf')${fixOwnerHint(ctx.subject)}`,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
// Enum-value cap is per-enum, so it is measured here rather than summed.
|
|
264
|
+
const enumForCap = node['enum'];
|
|
265
|
+
if (Array.isArray(enumForCap) && enumForCap.length > ctx.maxEnumValuesSeen) {
|
|
266
|
+
ctx.maxEnumValuesSeen = enumForCap.length;
|
|
267
|
+
}
|
|
268
|
+
// Character budget: property names + enum values + const values.
|
|
269
|
+
for (const v of Array.isArray(enumForCap) ? enumForCap : []) {
|
|
270
|
+
ctx.charCount += String(v).length;
|
|
271
|
+
}
|
|
272
|
+
if (node['const'] !== undefined)
|
|
273
|
+
ctx.charCount += String(node['const']).length;
|
|
274
|
+
}
|
|
147
275
|
// G2-hard: root self-reference ('#') — the API neither enforces nor cleanly rejects this edge
|
|
148
276
|
// (premise-probe-raw.md §Live-probe: silent-prune when optional, a persistent 503 when
|
|
149
277
|
// required) — it must NEVER fall to the generic caveat class.
|
|
278
|
+
//
|
|
279
|
+
// issue #313: OpenAI supports `$ref` recursion FIRST-CLASS (api-facts lane), so the recursive
|
|
280
|
+
// arm is Anthropic-only. The external-$ref arm applies to BOTH — an unresolvable reference is
|
|
281
|
+
// unresolvable everywhere.
|
|
150
282
|
const ref = node['$ref'];
|
|
151
283
|
if (typeof ref === 'string') {
|
|
152
284
|
if (ref === '#') {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
285
|
+
if (!openai) {
|
|
286
|
+
ctx.hardReasons.push({
|
|
287
|
+
code: 'unsupported_keyword',
|
|
288
|
+
path,
|
|
289
|
+
remediation: `recursive schema at '${path || '(root)'}' ($ref: '#') is not supported — remove the self-reference or restructure without recursion`,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
158
292
|
}
|
|
159
293
|
else if (!ref.startsWith('#')) {
|
|
160
294
|
ctx.hardReasons.push({
|
|
@@ -164,8 +298,10 @@ function walkNode(node, path, ctx) {
|
|
|
164
298
|
});
|
|
165
299
|
}
|
|
166
300
|
}
|
|
167
|
-
// G2-hard: numeric constraints.
|
|
168
|
-
|
|
301
|
+
// G2-hard: numeric constraints. ANTHROPIC ONLY — OpenAI supports the whole numeric-bound
|
|
302
|
+
// family first-class (api-facts lane), so flagging them under 'openai' would reject schemas
|
|
303
|
+
// the API accepts and enforces.
|
|
304
|
+
for (const kw of openai ? [] : ['minimum', 'maximum', 'multipleOf']) {
|
|
169
305
|
if (kw in node) {
|
|
170
306
|
ctx.hardReasons.push({
|
|
171
307
|
code: 'unsupported_keyword',
|
|
@@ -185,8 +321,9 @@ function walkNode(node, path, ctx) {
|
|
|
185
321
|
remediation: `'enum' at '${path || '(root)'}' contains a complex (object/array) member — strict mode only supports string/number/boolean/null enum members`,
|
|
186
322
|
});
|
|
187
323
|
}
|
|
188
|
-
// G4: format.
|
|
189
|
-
|
|
324
|
+
// G4: format. ANTHROPIC ONLY — under OpenAI, `format` is supported and NOT flagged (the
|
|
325
|
+
// profile's deltas are enumerated; inventing a suppression-or-flag beyond them is banned).
|
|
326
|
+
const format = openai ? undefined : node['format'];
|
|
190
327
|
if (typeof format === 'string' && !SUPPORTED_FORMATS.has(format)) {
|
|
191
328
|
ctx.caveats.push({
|
|
192
329
|
code: 'unenforced_format',
|
|
@@ -194,8 +331,10 @@ function walkNode(node, path, ctx) {
|
|
|
194
331
|
remediation: `'format: ${format}' at '${path || '(root)'}' ${enforcementClause(ctx.subject, "is silently ignored or rejected by the API — enforced post-hoc by realm's own validation only")}${fixOwnerHint(ctx.subject)}`,
|
|
195
332
|
});
|
|
196
333
|
}
|
|
197
|
-
// G5: pattern — always a caveat when present, regardless of regex complexity.
|
|
198
|
-
|
|
334
|
+
// G5: pattern — always a caveat when present, regardless of regex complexity. ANTHROPIC ONLY:
|
|
335
|
+
// OpenAI accepts `pattern` and (P2, INFERRED-strong) genuinely enforces it via constrained
|
|
336
|
+
// decoding, so a "realm enforces this post-hoc, the grammar doesn't" caveat would be false.
|
|
337
|
+
if (!openai && typeof node['pattern'] === 'string') {
|
|
199
338
|
ctx.caveats.push({
|
|
200
339
|
code: 'unenforced_pattern',
|
|
201
340
|
path,
|
|
@@ -209,7 +348,13 @@ function walkNode(node, path, ctx) {
|
|
|
209
348
|
continue;
|
|
210
349
|
if (key === 'minimum' || key === 'maximum' || key === 'multipleOf' || key === 'enum')
|
|
211
350
|
continue; // already handled (hard or allowlisted)
|
|
212
|
-
|
|
351
|
+
// issue #313: each profile walks its OWN allowlist. Under 'openai' the hard set was already
|
|
352
|
+
// rejected above, so anything still off-allowlist here is the genuine unknown-keyword class.
|
|
353
|
+
if (openai) {
|
|
354
|
+
if (OPENAI_SUPPORTED_KEYWORDS.has(key) || OPENAI_UNSUPPORTED_KEYWORDS.has(key))
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
357
|
+
else if (STRICT_SUPPORTED_KEYWORDS.has(key))
|
|
213
358
|
continue;
|
|
214
359
|
if (ctx.seenUnenforcedKeywords.has(`${path}:${key}`))
|
|
215
360
|
continue;
|
|
@@ -239,6 +384,12 @@ function walkNode(node, path, ctx) {
|
|
|
239
384
|
: new Set();
|
|
240
385
|
for (const [propName, propSchema] of Object.entries(properties)) {
|
|
241
386
|
const propPath = joinPath(path, `properties.${propName}`);
|
|
387
|
+
ctx.propertyCount += 1;
|
|
388
|
+
if (openai)
|
|
389
|
+
ctx.charCount += propName.length;
|
|
390
|
+
const isNullUnion = isPlainObject(propSchema) &&
|
|
391
|
+
Array.isArray(propSchema['type']) &&
|
|
392
|
+
propSchema['type'].includes('null');
|
|
242
393
|
if (!required.has(propName)) {
|
|
243
394
|
ctx.optionalCount += 1;
|
|
244
395
|
if (isPlainObject(propSchema) &&
|
|
@@ -246,17 +397,30 @@ function walkNode(node, path, ctx) {
|
|
|
246
397
|
(Array.isArray(propSchema['type']) && propSchema['type'].length > 1))) {
|
|
247
398
|
ctx.unionCount += 1;
|
|
248
399
|
}
|
|
400
|
+
// issue #313 (OpenAI): EVERY property must be listed in `required` — probe-derived, the
|
|
401
|
+
// S1 discriminator isolated it from the additionalProperties rule P1 had conflated it
|
|
402
|
+
// with. The sanctioned way to express "may be absent" is a null union + required.
|
|
403
|
+
if (openai) {
|
|
404
|
+
ctx.hardReasons.push({
|
|
405
|
+
code: 'not_all_required',
|
|
406
|
+
path: propPath,
|
|
407
|
+
remediation: `'${propName}' is not listed in 'required' at '${path || 'the schema root'}' — OpenAI strict requires EVERY property to be required. Add it to 'required'; if it genuinely may be absent, keep it required and widen its type to a null union (e.g. type: ['string', 'null']). Measured (gpt-4o, 24 runs): load-bearing fields stayed filled 24/24 under this rewrite, while a low-salience optional shifted to null 21/24 — so consumers must treat null as equivalent to absent${fixOwnerHint(ctx.subject)}`,
|
|
408
|
+
});
|
|
409
|
+
}
|
|
249
410
|
}
|
|
250
|
-
|
|
411
|
+
else if (openai && isNullUnion) {
|
|
412
|
+
ctx.nullUnionCount += 1;
|
|
413
|
+
}
|
|
414
|
+
walkNode(propSchema, propPath, ctx, depth + 1);
|
|
251
415
|
}
|
|
252
416
|
}
|
|
253
417
|
const items = node['items'];
|
|
254
418
|
if (items !== undefined)
|
|
255
|
-
walkNode(items, joinPath(path, 'items'), ctx);
|
|
419
|
+
walkNode(items, joinPath(path, 'items'), ctx, depth + 1);
|
|
256
420
|
for (const branchKey of ['anyOf', 'allOf']) {
|
|
257
421
|
const branches = node[branchKey];
|
|
258
422
|
if (Array.isArray(branches)) {
|
|
259
|
-
branches.forEach((b, i) => walkNode(b, joinPath(path, `${branchKey}[${i}]`), ctx));
|
|
423
|
+
branches.forEach((b, i) => walkNode(b, joinPath(path, `${branchKey}[${i}]`), ctx, depth + 1));
|
|
260
424
|
}
|
|
261
425
|
}
|
|
262
426
|
for (const defsKey of ['$defs', 'definitions']) {
|
|
@@ -299,6 +463,9 @@ export function assessStructuredOutputEligibility(input) {
|
|
|
299
463
|
const subject = phaseB
|
|
300
464
|
? (input.subject ?? 'step_output')
|
|
301
465
|
: 'step_output';
|
|
466
|
+
// Phase A is provider-blind by design (authoring cannot know the drive-time provider), so it
|
|
467
|
+
// always assesses under the default profile — separation in TIME, not a trade-off.
|
|
468
|
+
const profile = phaseB ? (input.profile ?? 'anthropic') : 'anthropic';
|
|
302
469
|
const toolsFlag = phaseB
|
|
303
470
|
? input.tools === true
|
|
304
471
|
: Array.isArray(input.tools) && input.tools.length > 0;
|
|
@@ -377,21 +544,63 @@ export function assessStructuredOutputEligibility(input) {
|
|
|
377
544
|
unionCount: 0,
|
|
378
545
|
seenUnenforcedKeywords: new Set(),
|
|
379
546
|
subject,
|
|
547
|
+
profile,
|
|
548
|
+
maxDepthSeen: 0,
|
|
549
|
+
propertyCount: 0,
|
|
550
|
+
charCount: 0,
|
|
551
|
+
maxEnumValuesSeen: 0,
|
|
552
|
+
nullUnionCount: 0,
|
|
380
553
|
};
|
|
381
554
|
walkNode(schema, '', ctx);
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
555
|
+
// The two size caps below are ANTHROPIC's (G3). OpenAI publishes no strict-count or optional
|
|
556
|
+
// budget at all; its limits are structural size limits, applied instead — see below.
|
|
557
|
+
if (profile === 'anthropic') {
|
|
558
|
+
if (ctx.optionalCount > 24) {
|
|
559
|
+
ctx.hardReasons.push({
|
|
560
|
+
code: 'too_many_optionals',
|
|
561
|
+
path: '',
|
|
562
|
+
remediation: `this schema has ${ctx.optionalCount} optional properties (limit: 24) — reduce the optional-property count or make more fields required`,
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
if (ctx.unionCount > 16) {
|
|
566
|
+
ctx.hardReasons.push({
|
|
567
|
+
code: 'too_many_unions',
|
|
568
|
+
path: '',
|
|
569
|
+
remediation: `this schema has ${ctx.unionCount} union-typed properties (limit: 16) — reduce the anyOf/multi-type property count`,
|
|
570
|
+
});
|
|
571
|
+
}
|
|
388
572
|
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
573
|
+
else {
|
|
574
|
+
// issue #313 — OpenAI's documented size limits (depth boundary and enum-count boundary both
|
|
575
|
+
// executed against the live API; the other two are documented and untested at that scale).
|
|
576
|
+
if (ctx.maxDepthSeen > OPENAI_LIMITS.maxDepth) {
|
|
577
|
+
ctx.hardReasons.push({
|
|
578
|
+
code: 'exceeds_provider_limit',
|
|
579
|
+
path: '',
|
|
580
|
+
remediation: `this schema nests ${ctx.maxDepthSeen} levels deep (OpenAI strict limit: ${OPENAI_LIMITS.maxDepth}) — flatten the deepest branch`,
|
|
581
|
+
});
|
|
582
|
+
}
|
|
583
|
+
if (ctx.propertyCount > OPENAI_LIMITS.maxProperties) {
|
|
584
|
+
ctx.hardReasons.push({
|
|
585
|
+
code: 'exceeds_provider_limit',
|
|
586
|
+
path: '',
|
|
587
|
+
remediation: `this schema declares ${ctx.propertyCount} properties (OpenAI strict limit: ${OPENAI_LIMITS.maxProperties}) — split the schema or drop properties`,
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
if (ctx.charCount > OPENAI_LIMITS.maxChars) {
|
|
591
|
+
ctx.hardReasons.push({
|
|
592
|
+
code: 'exceeds_provider_limit',
|
|
593
|
+
path: '',
|
|
594
|
+
remediation: `this schema's property names, enum values and const values total ${ctx.charCount} characters (OpenAI strict limit: ${OPENAI_LIMITS.maxChars}) — shorten names or reduce enum members`,
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
if (ctx.maxEnumValuesSeen > OPENAI_LIMITS.maxEnumValues) {
|
|
598
|
+
ctx.hardReasons.push({
|
|
599
|
+
code: 'exceeds_provider_limit',
|
|
600
|
+
path: '',
|
|
601
|
+
remediation: `an enum in this schema has ${ctx.maxEnumValuesSeen} values (OpenAI strict limit: ${OPENAI_LIMITS.maxEnumValues}) — reduce the enum or model the field as a plain string`,
|
|
602
|
+
});
|
|
603
|
+
}
|
|
395
604
|
}
|
|
396
605
|
if (ctx.hardReasons.length > 0) {
|
|
397
606
|
return {
|
|
@@ -406,7 +615,18 @@ export function assessStructuredOutputEligibility(input) {
|
|
|
406
615
|
// (benchmark-raw.md §Run 2) — emission propensity is schema-shape-dependent, so this is a
|
|
407
616
|
// general caveat, not a reasoning-specific rule. The nudge additionally names the
|
|
408
617
|
// reasoning-position instance as the sharpest example (validate.ts).
|
|
409
|
-
|
|
618
|
+
// issue #313: G7' is ANTHROPIC-ONLY. Under OpenAI every property must be required, so a
|
|
619
|
+
// schema that reaches this point has no optionals at all and the omission hazard G7' warns
|
|
620
|
+
// about is structurally impossible. What replaces it is the MEASURED null-propensity of
|
|
621
|
+
// null-union properties — a different hazard needing different words and different numbers.
|
|
622
|
+
if (profile === 'openai' && ctx.nullUnionCount > 0) {
|
|
623
|
+
ctx.caveats.push({
|
|
624
|
+
code: 'null_union_emission',
|
|
625
|
+
path: '',
|
|
626
|
+
remediation: `this schema has ${ctx.nullUnionCount} null-union propert${ctx.nullUnionCount === 1 ? 'y' : 'ies'} (the OpenAI-sanctioned way to say "may be absent"). Measured over 24 real inputs: on gpt-4o a load-bearing field stayed filled 24/24 under strict, while a low-salience field shifted to null 21/24 (on gpt-4o-mini, 3/24 vs its own 2/24 unconstrained omission rate) — so a null here means "the model had nothing to say", not "the field is broken". Consumers MUST treat null as equivalent to absent${fixOwnerHint(ctx.subject)}`,
|
|
627
|
+
});
|
|
628
|
+
}
|
|
629
|
+
if (profile === 'anthropic' && ctx.optionalCount > 0) {
|
|
410
630
|
ctx.caveats.push({
|
|
411
631
|
code: 'optional_emission',
|
|
412
632
|
path: '',
|
|
@@ -428,6 +648,10 @@ export function assessStructuredOutputEligibility(input) {
|
|
|
428
648
|
/** Renders a step's structured_output declaration into a plain-English author message, combining
|
|
429
649
|
* every reason's own remediation (`; `-joined) — the shared formatter both the loader's typed
|
|
430
650
|
* error and create_workflow's PRE-register rejection use, so the two surfaces never drift. */
|
|
651
|
+
// Issue #313: the parameter is widened ADDITIVELY to the structural minimum this function has
|
|
652
|
+
// always used, so CAVEATS can feed it too (the drive-time remediation nudge prints for
|
|
653
|
+
// ineligible AND caveated verdicts). Every existing caller passes `StructuredOutputReason[]`,
|
|
654
|
+
// which remains assignable — verified at all three: validate.ts, create-workflow.ts, yaml-loader.ts.
|
|
431
655
|
export function renderIneligibleMessage(reasons) {
|
|
432
656
|
return reasons.map((r) => r.remediation).join('; ');
|
|
433
657
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structured-output-eligibility.js","sourceRoot":"","sources":["../../src/workflow/structured-output-eligibility.ts"],"names":[],"mappings":"AA0GA,SAAS,QAAQ,CAAC,KAAgC;IAChD,OAAO,QAAQ,IAAI,KAAK,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IAC/C,MAAM;IACN,YAAY;IACZ,OAAO;IACP,aAAa;IACb,OAAO;IACP,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,+FAA+F;IAC/F,uFAAuF;IACvF,gGAAgG;IAChG,8FAA8F;IAC9F,0FAA0F;IAC1F,6FAA6F;IAC7F,0FAA0F;IAC1F,MAAM;IACN,aAAa;IACb,SAAS;IACT,UAAU;IACV,sBAAsB;IACtB,QAAQ;IACR,UAAU;CACX,CAAC,CAAC;AAEH,0FAA0F;AAC1F,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,WAAW;IACX,MAAM;IACN,MAAM;IACN,UAAU;IACV,OAAO;IACP,UAAU;IACV,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC,CAAC;AAEH;iGACiG;AACjG,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAExD,+FAA+F;AAC/F,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AAYlF;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,OAAgC,EAAE,gBAAwB;IACnF,OAAO,OAAO,KAAK,WAAW;QAC5B,CAAC,CAAC,+GAA+G;QACjH,CAAC,CAAC,gBAAgB,CAAC;AACvB,CAAC;AAED;2FAC2F;AAC3F,SAAS,YAAY,CAAC,OAAgC;IACpD,OAAO,OAAO,KAAK,WAAW;QAC5B,CAAC,CAAC,gHAAgH;QAClH,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAY;IAC1C,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAChD,CAAC;AAED;kGACkG;AAClG,SAAS,YAAY,CAAC,IAA6B;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAErC,SAAS,aAAa,CAAC,IAAa,EAAE,GAAgB;QACpD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,IAAI;gBAAE,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,OAAO;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,sCAAsC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3D,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;QACxB,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAC;IAChB,MAAM,IAAI,GAAG,CAAC,CAAC;IACf,MAAM,KAAK,GAAG,CAAC,CAAC;IAChB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAiB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAW,EAAE;QACjC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;YACnD,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;qFACqF;AACrF,SAAS,QAAQ,CAAC,IAAa,EAAE,IAAY,EAAE,GAAQ;IACrD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO;IAEjC,8FAA8F;IAC9F,uFAAuF;IACvF,8DAA8D;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAChB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,qBAAqB;gBAC3B,IAAI;gBACJ,WAAW,EAAE,wBAAwB,IAAI,IAAI,QAAQ,6FAA6F;aACnJ,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,qBAAqB;gBAC3B,IAAI;gBACJ,WAAW,EAAE,qBAAqB,IAAI,IAAI,QAAQ,OAAO,GAAG,2FAA2F;aACxJ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,KAAK,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,CAAU,EAAE,CAAC;QAC/D,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;YACf,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,qBAAqB;gBAC3B,IAAI;gBACJ,WAAW,EACT,GAAG,CAAC,OAAO,KAAK,WAAW;oBACzB,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI,QAAQ,oEAAoE,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;oBAChI,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI,QAAQ,4IAA4I;aAClL,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,qBAAqB;YAC3B,IAAI;YACJ,WAAW,EAAE,cAAc,IAAI,IAAI,QAAQ,gHAAgH;SAC5J,CAAC,CAAC;IACL,CAAC;IAED,cAAc;IACd,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,mBAAmB;YACzB,IAAI;YACJ,WAAW,EAAE,YAAY,MAAM,SAAS,IAAI,IAAI,QAAQ,KAAK,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,+FAA+F,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;SAC3N,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,oBAAoB;YAC1B,IAAI;YACJ,WAAW,EAAE,iBAAiB,IAAI,IAAI,QAAQ,KAAK,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,+FAA+F,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;SACjN,CAAC,CAAC;IACL,CAAC;IAED,+FAA+F;IAC/F,uFAAuF;IACvF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACrE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,MAAM;YAAE,SAAS,CAAC,wCAAwC;QACxI,IAAI,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACjD,IAAI,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;YAAE,SAAS;QAC/D,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;QACjD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,oBAAoB;YAC1B,IAAI;YACJ,WAAW,EAAE,IAAI,GAAG,SAAS,IAAI,IAAI,QAAQ,KAAK,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,oFAAoF,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;SACrM,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;QAClE,IAAI,IAAI,CAAC,sBAAsB,CAAC,KAAK,KAAK,EAAE,CAAC;YAC3C,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,+BAA+B;gBACrC,IAAI;gBACJ,WAAW,EAAE,yCAAyC,IAAI,IAAI,iBAAiB,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;aAC/G,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,2FAA2F;IAC3F,mDAAmD;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IACtC,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAa,CAAC;YACvC,CAAC,CAAC,IAAI,GAAG,EAAU,CAAC;QACtB,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAChE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,cAAc,QAAQ,EAAE,CAAC,CAAC;YAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC;gBACvB,IACE,aAAa,CAAC,UAAU,CAAC;oBACzB,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;wBACjC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAK,UAAU,CAAC,MAAM,CAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EACtF,CAAC;oBACD,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;IAEvE,KAAK,MAAM,SAAS,IAAI,CAAC,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,CAAC,OAAO,EAAE,aAAa,CAAU,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,qBAAqB;oBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;oBAC7B,WAAW,EAAE,sCAAsC,OAAO,iBAAiB,IAAI,IAAI,QAAQ,wEAAwE;iBACpK,CAAC,CAAC;YACL,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrD,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iCAAiC,CAC/C,KAAgC;IAEhC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5F,MAAM,OAAO,GAA4B,MAAM;QAC7C,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,aAAa,CAAC;QAClC,CAAC,CAAC,aAAa,CAAC;IAClB,MAAM,SAAS,GAAG,MAAM;QACtB,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI;QACtB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzD,iGAAiG;IACjG,EAAE;IACF,8FAA8F;IAC9F,gGAAgG;IAChG,+FAA+F;IAC/F,8FAA8F;IAC9F,sFAAsF;IACtF,wFAAwF;IACxF,oFAAoF;IACpF,EAAE;IACF,oFAAoF;IACpF,0FAA0F;IAC1F,6FAA6F;IAC7F,kEAAkE;IAClE,EAAE;IACF,0FAA0F;IAC1F,8FAA8F;IAC9F,0FAA0F;IAC1F,uEAAuE;IACvE,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,2BAA2B;wBACjC,IAAI,EAAE,EAAE;wBACR,WAAW,EACT,4IAA4I;qBAC/I;iBACF;aACF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,uBAAuB;YAChC,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,wBAAwB;oBAC9B,IAAI,EAAE,EAAE;oBACR,WAAW,EACT,oSAAoS;iBACvS;aACF;SACF,CAAC;IACJ,CAAC;IAED,2FAA2F;IAC3F,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,EAAE;oBACR,WAAW,EACT,4GAA4G;iBAC/G;aACF;SACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1D,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,EAAE;oBACR,WAAW,EACT,4FAA4F;iBAC/F;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAQ;QACf,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,EAAE;QACX,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;QACb,sBAAsB,EAAE,IAAI,GAAG,EAAE;QACjC,OAAO;KACR,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAE1B,IAAI,GAAG,CAAC,aAAa,GAAG,EAAE,EAAE,CAAC;QAC3B,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,oBAAoB;YAC1B,IAAI,EAAE,EAAE;YACR,WAAW,EAAE,mBAAmB,GAAG,CAAC,aAAa,oGAAoG;SACtJ,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC;QACxB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,EAAE;YACR,WAAW,EAAE,mBAAmB,GAAG,CAAC,UAAU,kFAAkF;SACjI,CAAC,CAAC;IACL,CAAC;IAED,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,GAAG,CAAC,WAAW;YACxB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,cAAc,EAAE,GAAG,CAAC,aAAa;SAClC,CAAC;IACJ,CAAC;IAED,+FAA+F;IAC/F,+FAA+F;IAC/F,0FAA0F;IAC1F,kFAAkF;IAClF,qEAAqE;IACrE,IAAI,GAAG,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,EAAE;YACR,wFAAwF;YACxF,mFAAmF;YACnF,8DAA8D;YAC9D,WAAW,EAAE,0KAA0K,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;SACnN,CAAC,CAAC;IACL,CAAC;IAED,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,uBAAuB;YAChC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,cAAc,EAAE,GAAG,CAAC,aAAa;SAClC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC;AACpE,CAAC;AAED;;+FAE+F;AAC/F,MAAM,UAAU,uBAAuB,CAAC,OAAiC;IACvE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC"}
|
|
1
|
+
{"version":3,"file":"structured-output-eligibility.js","sourceRoot":"","sources":["../../src/workflow/structured-output-eligibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml-loader.d.ts","sourceRoot":"","sources":["../../src/workflow/yaml-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,iCAAiC,CAAC;AAQzC,OAAO,
|
|
1
|
+
{"version":3,"file":"yaml-loader.d.ts","sourceRoot":"","sources":["../../src/workflow/yaml-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,iCAAiC,CAAC;AAQzC,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAyKnE,iFAAiF;AACjF,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAkFjD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUjD;AA4JD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,kBAAkB,CAIpB;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,iBAAiB,GAC3B;IAAE,UAAU,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAE/D;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,kBAAkB,CAMpB;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,iBAAiB,GAC3B;IAAE,UAAU,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAE/D"}
|
|
@@ -6,7 +6,7 @@ import { load } from 'js-yaml';
|
|
|
6
6
|
import { Ajv } from 'ajv';
|
|
7
7
|
import { KNOWN_STEP_KEYS, KNOWN_WORKFLOW_KEYS, KNOWN_RETRY_KEYS, KNOWN_GATE_KEYS, } from '../types/workflow-definition.js';
|
|
8
8
|
import { WorkflowError } from '../types/workflow-error.js';
|
|
9
|
-
import { findUnknownKeys, renderLoaderWarning, resolveSeverity, } from './diagnostics.js';
|
|
9
|
+
import { findUnknownKeys, renderLoaderWarning, resolveSeverity, closestKey, } from './diagnostics.js';
|
|
10
10
|
import { resolveTemplates } from './template-resolver.js';
|
|
11
11
|
import { normalizeTriggerFilter, validateTriggerStructure } from './trigger-schema.js';
|
|
12
12
|
import { splitComparison, isPathShaped } from '../engine/comparison-expr.js';
|
|
@@ -1489,6 +1489,12 @@ function hasUseTemplateInSteps(steps) {
|
|
|
1489
1489
|
* Every leaf must be a non-empty string.
|
|
1490
1490
|
* Maximum depth is 10.
|
|
1491
1491
|
*/
|
|
1492
|
+
/**
|
|
1493
|
+
* Issue #287: the CLOSED set of input_map directives. The whole `$` prefix is reserved — a key
|
|
1494
|
+
* starting with `$` that is not in this set is a load error, which is what keeps the namespace
|
|
1495
|
+
* open for a future escape (e.g. key-doubling) without breaking anyone.
|
|
1496
|
+
*/
|
|
1497
|
+
const SUPPORTED_INPUT_MAP_DIRECTIVES = ['$literal'];
|
|
1492
1498
|
function validateInputMapNode(node, pathDesc, errors, depth) {
|
|
1493
1499
|
if (depth > 10) {
|
|
1494
1500
|
errors.push(`${pathDesc}: exceeded maximum nesting depth of 10`);
|
|
@@ -1513,6 +1519,31 @@ function validateInputMapNode(node, pathDesc, errors, depth) {
|
|
|
1513
1519
|
// is a literal subtree, not a nested template. Return without further validation.
|
|
1514
1520
|
return;
|
|
1515
1521
|
}
|
|
1522
|
+
// issue #287 — the DIRECTIVE GATE. A `$`-prefixed key is unambiguous author intent: nobody
|
|
1523
|
+
// writes a nested-map key starting with `$` by accident. Before this gate, an unknown one was
|
|
1524
|
+
// accepted here, then resolved at runtime as a context PATH, yielding `undefined` — a param
|
|
1525
|
+
// that looked set and was not. That produced a five-week production incident in which an
|
|
1526
|
+
// Airtable query ran UNFILTERED and corrupted 907 records while every step reported success.
|
|
1527
|
+
//
|
|
1528
|
+
// The whole `$` prefix is reserved, not just the known names: erroring on `$$…` today is what
|
|
1529
|
+
// keeps a future key-doubling ESCAPE backward-compatible, so this must stay a prefix check
|
|
1530
|
+
// with no special cases. The wording says "supported directives:" rather than "the only
|
|
1531
|
+
// escape", for the same reason.
|
|
1532
|
+
//
|
|
1533
|
+
// Placed AFTER the `$literal` block so `{$literal, $unknown}` still reports the sibling error
|
|
1534
|
+
// first (that message names the more specific mistake), and BEFORE the nested-object
|
|
1535
|
+
// recursion so the key is judged here rather than descended into.
|
|
1536
|
+
for (const key of Object.keys(obj)) {
|
|
1537
|
+
if (!key.startsWith('$'))
|
|
1538
|
+
continue;
|
|
1539
|
+
const suggestion = closestKey(key, SUPPORTED_INPUT_MAP_DIRECTIVES);
|
|
1540
|
+
errors.push(`${pathDesc}: unknown directive '${key}' — supported directives: $literal.` +
|
|
1541
|
+
(suggestion !== undefined ? ` Did you mean '${suggestion}'?` : '') +
|
|
1542
|
+
` To pass literal data containing $-keys, wrap the subtree in $literal.` +
|
|
1543
|
+
` input_map values are context paths, nested maps, or $literal — templated strings are` +
|
|
1544
|
+
` not supported.`);
|
|
1545
|
+
return;
|
|
1546
|
+
}
|
|
1516
1547
|
// Nested object — recurse.
|
|
1517
1548
|
const entries = Object.entries(obj);
|
|
1518
1549
|
if (entries.length === 0) {
|