@openwop/openwop-conformance 2.46.35 → 2.46.37
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 +14 -0
- package/README.md +3 -3
- package/coverage.md +5 -6
- package/dist/spec-artifacts.lock.json +2 -2
- package/fixtures/conformance-clarification.json +1 -1
- package/fixtures/conformance-interrupt-form-refused.json +108 -0
- package/fixtures/conformance-interrupt-form-unbound.json +108 -0
- package/fixtures/conformance-interrupt-form.json +107 -0
- package/fixtures/conformance-stream-text.json +1 -2
- package/fixtures.md +20 -5
- package/package.json +2 -2
- package/requirement-aliases.json +98 -1
- package/requirements.json +596 -804
- package/scenario-majors.json +16 -19
- package/schemas/CORPUS-STAMP.json +56 -69
- package/src/lib/callai-attempts-witness.ts +13 -1
- package/src/lib/family-advert-witness.ts +37 -50
- package/src/scenarios/stream-text-fixture.test.ts +13 -5
- package/src/scenarios/v2-clarification-resume-answers.test.ts +66 -0
- package/src/scenarios/v2-envelope-surfaces-absent.test.ts +55 -0
- package/src/scenarios/v2-interrupt-form-rules.test.ts +143 -0
- package/src/scenarios/v2-limits-clarification-rounds-advertisement.test.ts +42 -0
- package/src/scenarios/v2-peer-dependency-declared.test.ts +1 -1
- package/src/scenarios/v2-provider-output-reliability.test.ts +94 -0
- package/src/scenarios/v2-structured-output-advertisement.test.ts +82 -0
- package/src/lib/envelope-schema-static.ts +0 -167
- package/src/scenarios/v2-a2ui-v09-surface.test.ts +0 -323
- package/src/scenarios/v2-ai-envelope-advertisement.test.ts +0 -43
- package/src/scenarios/v2-envelope-contracts-advertisement.test.ts +0 -48
- package/src/scenarios/v2-envelope-reasoning-shape.test.ts +0 -81
- package/src/scenarios/v2-envelope-tier-one-subset-static.test.ts +0 -64
- package/src/scenarios/v2-envelopes-advertisement.test.ts +0 -85
- package/src/scenarios/v2-limits-envelope-caps-advertisement.test.ts +0 -61
package/scenario-majors.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "GENERATED by conformance/scripts/generate-scenario-majors.mjs (RFC 0168 §D.3). Do not edit; add a file to BOTH_MAJORS in the generator to target both majors.",
|
|
3
3
|
"counts": {
|
|
4
|
-
"files":
|
|
4
|
+
"files": 664,
|
|
5
5
|
"v1": 455,
|
|
6
|
-
"v2":
|
|
6
|
+
"v2": 224
|
|
7
7
|
},
|
|
8
8
|
"majors": {
|
|
9
9
|
"a2a-1-0-agent-card.test.ts": [
|
|
@@ -1287,9 +1287,6 @@
|
|
|
1287
1287
|
"v2-a2a-push-delivery.test.ts": [
|
|
1288
1288
|
2
|
|
1289
1289
|
],
|
|
1290
|
-
"v2-a2ui-v09-surface.test.ts": [
|
|
1291
|
-
2
|
|
1292
|
-
],
|
|
1293
1290
|
"v2-advertised-fixtures-exist.test.ts": [
|
|
1294
1291
|
2
|
|
1295
1292
|
],
|
|
@@ -1308,9 +1305,6 @@
|
|
|
1308
1305
|
"v2-agents-fan-out.test.ts": [
|
|
1309
1306
|
2
|
|
1310
1307
|
],
|
|
1311
|
-
"v2-ai-envelope-advertisement.test.ts": [
|
|
1312
|
-
2
|
|
1313
|
-
],
|
|
1314
1308
|
"v2-ai-providers-advertisement.test.ts": [
|
|
1315
1309
|
2
|
|
1316
1310
|
],
|
|
@@ -1380,6 +1374,9 @@
|
|
|
1380
1374
|
"v2-channel-presence-delivery.test.ts": [
|
|
1381
1375
|
2
|
|
1382
1376
|
],
|
|
1377
|
+
"v2-clarification-resume-answers.test.ts": [
|
|
1378
|
+
2
|
|
1379
|
+
],
|
|
1383
1380
|
"v2-client-version-header.test.ts": [
|
|
1384
1381
|
2
|
|
1385
1382
|
],
|
|
@@ -1461,16 +1458,7 @@
|
|
|
1461
1458
|
"v2-enum-growth-rule.test.ts": [
|
|
1462
1459
|
2
|
|
1463
1460
|
],
|
|
1464
|
-
"v2-envelope-
|
|
1465
|
-
2
|
|
1466
|
-
],
|
|
1467
|
-
"v2-envelope-reasoning-shape.test.ts": [
|
|
1468
|
-
2
|
|
1469
|
-
],
|
|
1470
|
-
"v2-envelope-tier-one-subset-static.test.ts": [
|
|
1471
|
-
2
|
|
1472
|
-
],
|
|
1473
|
-
"v2-envelopes-advertisement.test.ts": [
|
|
1461
|
+
"v2-envelope-surfaces-absent.test.ts": [
|
|
1474
1462
|
2
|
|
1475
1463
|
],
|
|
1476
1464
|
"v2-era-2-append-vocabulary.test.ts": [
|
|
@@ -1542,6 +1530,9 @@
|
|
|
1542
1530
|
"v2-interop-trace-context.test.ts": [
|
|
1543
1531
|
2
|
|
1544
1532
|
],
|
|
1533
|
+
"v2-interrupt-form-rules.test.ts": [
|
|
1534
|
+
2
|
|
1535
|
+
],
|
|
1545
1536
|
"v2-interrupt-resolve-terminal.test.ts": [
|
|
1546
1537
|
2
|
|
1547
1538
|
],
|
|
@@ -1557,7 +1548,7 @@
|
|
|
1557
1548
|
"v2-legacy-profiles-absent.test.ts": [
|
|
1558
1549
|
2
|
|
1559
1550
|
],
|
|
1560
|
-
"v2-limits-
|
|
1551
|
+
"v2-limits-clarification-rounds-advertisement.test.ts": [
|
|
1561
1552
|
2
|
|
1562
1553
|
],
|
|
1563
1554
|
"v2-localized-content-delivery.test.ts": [
|
|
@@ -1710,6 +1701,9 @@
|
|
|
1710
1701
|
"v2-provider-conflict.test.ts": [
|
|
1711
1702
|
2
|
|
1712
1703
|
],
|
|
1704
|
+
"v2-provider-output-reliability.test.ts": [
|
|
1705
|
+
2
|
|
1706
|
+
],
|
|
1713
1707
|
"v2-provider-usage-advertisement.test.ts": [
|
|
1714
1708
|
2
|
|
1715
1709
|
],
|
|
@@ -1809,6 +1803,9 @@
|
|
|
1809
1803
|
"v2-stream-sse-projection.test.ts": [
|
|
1810
1804
|
2
|
|
1811
1805
|
],
|
|
1806
|
+
"v2-structured-output-advertisement.test.ts": [
|
|
1807
|
+
2
|
|
1808
|
+
],
|
|
1812
1809
|
"v2-sub-workflow-advertisement.test.ts": [
|
|
1813
1810
|
2
|
|
1814
1811
|
],
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_comment": "Provenance of @openwop/spec-artifacts (RFC 0168 §D.2). files: SHA-256 per file; the conformance suite compares the installed peer against dist/spec-artifacts.lock.json at start.",
|
|
3
3
|
"package": "@openwop/spec-artifacts",
|
|
4
|
-
"version": "2.46.
|
|
5
|
-
"corpusTag": "v2.46.
|
|
4
|
+
"version": "2.46.37",
|
|
5
|
+
"corpusTag": "v2.46.37",
|
|
6
6
|
"files": {
|
|
7
7
|
"api/.redocly.lint-ignore.yaml": "bf5a8350b88a72fa43f59605ed8d903ed24b6cfccda5e45509c9f6ed9ee4e712",
|
|
8
8
|
"api/asyncapi.yaml": "d5ecb9ee6114582be3b1f662c84bfac9ae96dae7bacb853e461168f70a8e1c7d",
|
|
9
9
|
"api/grpc/openwop.proto": "c3e72bb17cba514ee98feb6434e6c9b6ea6795bfd086489ec69fd882dd1ad977",
|
|
10
10
|
"api/openapi.yaml": "ac6de5303872664b78ff419c035915593e01599e02835e777a0123de1baeb398",
|
|
11
11
|
"api/redocly.yaml": "b0604c89b2ca6d5076ec25725c539dad44a741a811fe524439ee6daef8baa09f",
|
|
12
|
-
"api/seams-v2.yaml": "
|
|
13
|
-
"api/v2/asyncapi.yaml": "
|
|
14
|
-
"api/v2/openapi.yaml": "
|
|
12
|
+
"api/seams-v2.yaml": "0e9f90b6f912dfe6fc86ac6b03fa41119518c7c75d2c64c1e36c54cef774236c",
|
|
13
|
+
"api/v2/asyncapi.yaml": "cfdd771f45075a037f91f95a11773f0dbf099e729cb48d5d58b58e84af1b8bbb",
|
|
14
|
+
"api/v2/openapi.yaml": "ee7625192d5093468fdc670ede35ca0621f8cbed53d437ae035c38d5df27bcba",
|
|
15
15
|
"api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
|
|
16
16
|
"schemas/README.md": "276fc1d51eb08e14e9127b9fd27761d7046ee33c12000f3a64a801322db8bf58",
|
|
17
17
|
"schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
|
|
@@ -100,7 +100,6 @@
|
|
|
100
100
|
"schemas/trigger-subscription.schema.json": "e8cddab88f73a7a79bb3b78a60a480a00e16966b76f0e18c21a2aef09b6420ac",
|
|
101
101
|
"schemas/ui-plugin-message.schema.json": "346638babf1f8ea7b161cde75c0038b518cd2cc5bf0631772e20a9b74c96b5dd",
|
|
102
102
|
"schemas/v2/a2a-task-state.schema.json": "1810363e2d9bddb5997923bdac4044cc17c6f46ec5a40515d2ff21d9c82c1ad9",
|
|
103
|
-
"schemas/v2/a2ui-surface-delta-frame.schema.json": "6889c5da3fe7e76cb614038c0eea6774776fa640448558b258eb87fb50cb9b64",
|
|
104
103
|
"schemas/v2/agent-deployment-transition.schema.json": "fe2d56f9d8ccb5503c94f1f4dff8af5a7286cc304802b089d42d665ddefcf111",
|
|
105
104
|
"schemas/v2/agent-deployment.schema.json": "64d5f2848419b6ff797bcf34c0e5f4b05a612c3237d2cf0a034fb41f8b8ebc6b",
|
|
106
105
|
"schemas/v2/agent-eval-suite.schema.json": "a49ad7a232ec781512375001f8d8c70ab073b69ca094f5251dbb30a0bbd972a7",
|
|
@@ -110,18 +109,17 @@
|
|
|
110
109
|
"schemas/v2/agent-ref.schema.json": "3d94801d76f6d4726a1c4f9c7ffc7456d5d73dd054eb0be134f6b1a9cbb7c5e9",
|
|
111
110
|
"schemas/v2/agent-roster-entry.schema.json": "72132a80a3eb305e83727fbf6e105d7bd1790b481231d6ff864fd18d5554fc27",
|
|
112
111
|
"schemas/v2/agent-roster-response.schema.json": "f646b8a5af9ee884e1a86a9c84ec29f10dd3dbb275711ce79db27bee981d4a1d",
|
|
113
|
-
"schemas/v2/ai-envelope.schema.json": "0dc7dfbf032a37239ffd81fc2d67f999a40782ff5074866a56e414164cdee809",
|
|
114
112
|
"schemas/v2/annotation-create.schema.json": "ec32c22a243b343eeb6956a23be2d76ba5b50c8018ec3ec9d6efa5a1d9b0c792",
|
|
115
113
|
"schemas/v2/annotation.schema.json": "eb4813cdaa8e325412cfcaeeee5c8a28f3751c946dec64e546c7ba0ad3aad8d4",
|
|
116
|
-
"schemas/v2/artifact-type-pack-manifest.schema.json": "
|
|
114
|
+
"schemas/v2/artifact-type-pack-manifest.schema.json": "628fa649aed40c8763d1e22daa67c15991618656e152f64e746976f422f4581b",
|
|
117
115
|
"schemas/v2/artifact.schema.json": "85b9dc284d39b99d2a66fa8cbf47f2dd3d8526d3bd6cc411ad315b372de38975",
|
|
118
116
|
"schemas/v2/audit-verify-result.schema.json": "14af8e9283510f0a40e48a2059c929ee44e0fc9fa3cc66a95bfbe90b17c48297",
|
|
119
117
|
"schemas/v2/budget-policy.schema.json": "1de68095db0beb5c7a4be629de26e79f62ebbe748a88d46f36e768edfd1f0d68",
|
|
120
|
-
"schemas/v2/capabilities.schema.json": "
|
|
121
|
-
"schemas/v2/certification-bundle.schema.json": "
|
|
118
|
+
"schemas/v2/capabilities.schema.json": "00aa36d0bbaa51169e7a33090b37b501dd2af1ea2ab5174d28b5b2686a4543a4",
|
|
119
|
+
"schemas/v2/certification-bundle.schema.json": "29d2ff33d8256d8729cd4914e2ecff5ff07afc310264e2db483a9c0ae13df2a6",
|
|
122
120
|
"schemas/v2/channel-presence-payload.schema.json": "fc03df0c20cc12a25f7ee6a47503a4c5931d79fe3d5ff24815e8fd7c1bcb9a87",
|
|
123
121
|
"schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
|
|
124
|
-
"schemas/v2/chat-card-pack-manifest.schema.json": "
|
|
122
|
+
"schemas/v2/chat-card-pack-manifest.schema.json": "32893b146e2ef82d527d695b70007c0cbb897c5775af3141ae9f30e933a56d29",
|
|
125
123
|
"schemas/v2/compact-tool-descriptor.schema.json": "b5c418d72082d5b713bf318212a83397e5be98e56d25ca056302b41b8dd8273b",
|
|
126
124
|
"schemas/v2/compensation-policy.schema.json": "b3c1142637f5bf980f2b0bb67adb47e8cb7abb99a0405a4b6816ccf5d9c089d6",
|
|
127
125
|
"schemas/v2/compensation-projection.schema.json": "f46977c7076347b5473faa8c4bbe73d8321c33b33c98fff2f26ee7cbada4ed98",
|
|
@@ -136,15 +134,7 @@
|
|
|
136
134
|
"schemas/v2/dispatch-config.schema.json": "27cb203d2a5cec90d8eb398569acbd8314ad9b8e231d1acfb8db4aa76f8d8f8b",
|
|
137
135
|
"schemas/v2/effect-ledger-projection.schema.json": "0d118d385a43921118a76888449c5c3c5618eab1b80914b84a0a1b48d18822c1",
|
|
138
136
|
"schemas/v2/effect-seam-manifest.schema.json": "197ef9944ab027a50d1b9352f317cbbc12c8ad955fdb14650fb90477052ffef0",
|
|
139
|
-
"schemas/v2/
|
|
140
|
-
"schemas/v2/envelopes/error.schema.json": "6a11fa3b9d61736fcb5675e6ac9825919aa609dceba13ef5615993d54647802b",
|
|
141
|
-
"schemas/v2/envelopes/media.audio.schema.json": "a422352240a592c12840172e70835729f72b6b21915d14e926b6ffcd5d52a704",
|
|
142
|
-
"schemas/v2/envelopes/media.file.schema.json": "1a6ec46d5b987f5b4a95054f4c04c2dca712409ccaf4bc3ea3c92c0f6e0acd99",
|
|
143
|
-
"schemas/v2/envelopes/media.image.schema.json": "1373a145e4d25c1ea43fbe342a7a71ace370d6344459c2698d7904545ee40789",
|
|
144
|
-
"schemas/v2/envelopes/schema.request.schema.json": "be2c5f7aa881cdd252ccff47ac02193659e1393633a1541f4297383205d384a2",
|
|
145
|
-
"schemas/v2/envelopes/schema.response.schema.json": "d049a081267c06c28879c331b147f3ed821b14ccfd93005c67aff64db0a8c68e",
|
|
146
|
-
"schemas/v2/envelopes/ui.a2ui-surface.schema.json": "e92a2548ba65454c9e0a34f72ea6768d18f59e61fa5da7668d0b2d5baddaddc8",
|
|
147
|
-
"schemas/v2/error-envelope.schema.json": "0e9fe379d2f37d928f247dcca89e7b946a8b90b61a68efa5f3e73deb7d1237db",
|
|
137
|
+
"schemas/v2/error-envelope.schema.json": "5d566a910b715452e99b32876426cd490ef803f2177e3ecbbd1051170d4d4462",
|
|
148
138
|
"schemas/v2/eval-summary.schema.json": "d07f4d116c5410997a81d0bc5387545fb61933a6333c360a26ab8a71c749336b",
|
|
149
139
|
"schemas/v2/export-bundle.schema.json": "bd28905a7729437ab7f2ad8bb33e13a371b2bf5605a7eb2962a0d246de312d69",
|
|
150
140
|
"schemas/v2/form-content-pack-manifest.schema.json": "a1942a124e250a6e9fbdb6b811c5a125e78fbcbcaa46dfc71d0636f24710a339",
|
|
@@ -154,13 +144,14 @@
|
|
|
154
144
|
"schemas/v2/heartbeat-state-changed.schema.json": "eb68d0082aa996650e3a6b8ccf32457f959cebc7e6728cc7c331b9d171a4bef6",
|
|
155
145
|
"schemas/v2/host-event.schema.json": "8ecb5ae218ea6ba71b2aa52905c7851d125d6ca3c5108718739e84b3d6041d02",
|
|
156
146
|
"schemas/v2/ids.schema.json": "65cfaa193be0ca9cf48af39c18c553979e3ec1f7fc04509aaa513b322d7b7e4a",
|
|
147
|
+
"schemas/v2/interrupt-form.schema.json": "b9bb0cc603ef0794a781fdaadcd5d3d6bada72de445e449e3ac6aba0abcfb384",
|
|
157
148
|
"schemas/v2/localized-content-language-settings.schema.json": "3c8350a178037a460f5d87466ccaf9ed5fe3d41497786d2504cc66e42152c8cc",
|
|
158
149
|
"schemas/v2/localized-content-page-response.schema.json": "ef48329749758afb21e4d3cbc3f017abb911f75726819457f35b9f1390332c75",
|
|
159
150
|
"schemas/v2/localized-content-page.schema.json": "72560563cc2956ecc9aa4c04fceaf1f7f08d2c6520b7d1b2fa8e52f9b825d8e7",
|
|
160
151
|
"schemas/v2/localized-content-section.schema.json": "b52cfe36c857c2800f71c480dcd7323e1a29783ecdc9f2440bc8e75a5a034346",
|
|
161
152
|
"schemas/v2/memory-entry.schema.json": "290576ae84f4fef4cdf975932b87963283b11c50ea3d2654b32cd96aa6537c3d",
|
|
162
153
|
"schemas/v2/memory-list-options.schema.json": "01ceb7370c4eacd227d2c9b7e1951ee16650abe26a32dc9d6a8e46a07a39093f",
|
|
163
|
-
"schemas/v2/node-pack-manifest.schema.json": "
|
|
154
|
+
"schemas/v2/node-pack-manifest.schema.json": "b3b733fb0e4e6512c9c15c862bf43295fbb7e6a87ffff720d367ccf436effd7c",
|
|
164
155
|
"schemas/v2/orchestrator-decision.schema.json": "503b9b28109d875ec7a1acccb45447312a6b1c7d5f4175a9f43c8338d37bd1b1",
|
|
165
156
|
"schemas/v2/org-chart-responsibility-view.schema.json": "8a2565e4cdc6737a3946a70799f93642808b92f9c8d56dcdff3a0782053b89a1",
|
|
166
157
|
"schemas/v2/pack-lockfile.schema.json": "2685417702c105146b780cd99154296a46578fbb10d81c8c713348ee26fea898",
|
|
@@ -168,7 +159,7 @@
|
|
|
168
159
|
"schemas/v2/prompt-kind.schema.json": "67251c937a5a91fb97c0422050e808dc0c162a9b8561366814cf87b0a7f62e00",
|
|
169
160
|
"schemas/v2/prompt-pack-manifest.schema.json": "752407469475396ad250085437a6cc6bd56a017ac6d3e52196aecc65dda4e51a",
|
|
170
161
|
"schemas/v2/prompt-ref.schema.json": "8288495bf353fbc158cef6525d16dd1dcd9373941d15ec072044f05d143355d0",
|
|
171
|
-
"schemas/v2/prompt-template.schema.json": "
|
|
162
|
+
"schemas/v2/prompt-template.schema.json": "1c8de5d89a85c9ccd6c4f7571bd27f5d6985e19ff95c4693a9373fad5ef90816",
|
|
172
163
|
"schemas/v2/proposal-apply.schema.json": "eb187cfec8cf9a799d94463c34550fa84879e29bbc201a03b5d6ab58efb398d9",
|
|
173
164
|
"schemas/v2/proposal-list-response.schema.json": "1b5e78fc1e4256dbe6bc866487879deb8f7b9cc18f5bc875db3fde46d79bea02",
|
|
174
165
|
"schemas/v2/proposal-revise.schema.json": "065e75cccd01fcc619e63c25f2a1775adcc24b0467689dca42462ace6bfa1146",
|
|
@@ -190,7 +181,7 @@
|
|
|
190
181
|
"schemas/v2/self-hosted-runner-result-frame.schema.json": "8e739a721f350226f3ffb4af752b4fe0a72016042a7b6f42e16c0487c3c58983",
|
|
191
182
|
"schemas/v2/subject-link.schema.json": "1fc941d6c14af886534009f2ffa6611e2035eb07e30b1df918c50d6bafff026c",
|
|
192
183
|
"schemas/v2/subject.schema.json": "094e981fb20052a911393e219ea5f2065d8b8417b65080a70c5ea99fd960a8fe",
|
|
193
|
-
"schemas/v2/suspend-request.schema.json": "
|
|
184
|
+
"schemas/v2/suspend-request.schema.json": "e02a5b34073d2eab248429a640d99c37904c5998db78202bd5ddd8a20f2c85e7",
|
|
194
185
|
"schemas/v2/tool-descriptor.schema.json": "9bfe8a1ee5ea55d1c23e383d97234d9d6545d833996d7bc30caf075e0a6294bb",
|
|
195
186
|
"schemas/v2/trigger-dead-letter-page.schema.json": "571f8c39b64571bff20d391a6e6e829d4ce470ab790b2b7f810cc4aa40edcbc1",
|
|
196
187
|
"schemas/v2/trigger-event.schema.json": "710ecca8b3ecdad3a532a96768177f062192b24a589a4f798c7eb24bab64b30a",
|
|
@@ -201,7 +192,7 @@
|
|
|
201
192
|
"schemas/v2/webhook-delivery.schema.json": "5f5361ede12098b5c2d685f0aa70fcb07219fd6b68c6ad6af393ca8dd266d56a",
|
|
202
193
|
"schemas/v2/webhook-verification.schema.json": "76e4e0d81143ffd2649bc7adba2aa34f2525e2c4e9f0300a425d908b3163196b",
|
|
203
194
|
"schemas/v2/workflow-chain-pack-manifest.schema.json": "c0e38aa96b029c539415fb7e8a793fd770c3eb5a1b44a818661f9c127c99191b",
|
|
204
|
-
"schemas/v2/workflow-definition.schema.json": "
|
|
195
|
+
"schemas/v2/workflow-definition.schema.json": "84a3776bd6020cbfd7d87d1f4f3ae28211e6d77a9b350d8ce01aa9496a3d9eba",
|
|
205
196
|
"schemas/v2/workload-identity.schema.json": "1f589debfac6d70e0908da511550ec69a27b4bcc8314551cd843b6d923605efc",
|
|
206
197
|
"schemas/v2/workspace-file-create.schema.json": "b6b5260857318c3b67de0231ed15e3a746f525880a763e7b36a7854178dd10d0",
|
|
207
198
|
"schemas/v2/workspace-file.schema.json": "d2ed39e8c229dde33b56905c8df6f8b2ff056c97e1c5f615e3124baa54a6254f",
|
|
@@ -210,63 +201,62 @@
|
|
|
210
201
|
"schemas/workload-identity.schema.json": "64ed93e12cc9f0657e56ff9b8f045e5d68d397df5276d103c07f42c7f34f0579",
|
|
211
202
|
"schemas/workspace-file-create.schema.json": "70a23b92c2958c0165d7d29aea9020a045dc7816af82c80c5f50d0aac19c4856",
|
|
212
203
|
"schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
|
|
213
|
-
"spec/v1/alias-detectors.json": "
|
|
204
|
+
"spec/v1/alias-detectors.json": "202a443678e592a515e33aad7f6ab679a07d8408809f2d4b0f59d156c84ffc65",
|
|
214
205
|
"spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
|
|
215
|
-
"spec/v1/core-standard-manifest.json": "
|
|
216
|
-
"spec/v1/deprecations.json": "
|
|
206
|
+
"spec/v1/core-standard-manifest.json": "8caf784ecfdecf86b84af32c049d0a39badf458bb7403f5499696f267082cc3f",
|
|
207
|
+
"spec/v1/deprecations.json": "901fdab0a7212627f1838cbb06ae7b7204f0dff528299e56d3d938deecea27c1",
|
|
217
208
|
"spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
|
|
218
209
|
"spec/v1/end-of-support.json": "35f0bf3b70fe78b16e2a2fd81a153fc27e703f6c16376c6fe7cdf1f4f2c4e6d4",
|
|
219
210
|
"spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
|
|
220
211
|
"spec/v1/event-codemap.schema.json": "d05933b2e88103aff51a2f774df97b9bda065e0fc88dbd9b114cc47a32189174",
|
|
221
212
|
"spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
|
|
222
|
-
"spec/v1/gaps.json": "
|
|
213
|
+
"spec/v1/gaps.json": "b984976759acb1b8d329a49acfa2425938d7d86cd1433f43c48ab22a6c51e9ca",
|
|
223
214
|
"spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
|
|
224
215
|
"spec/v1/migrations.json": "4c50760be70cb644d02427bcaf5749606700edf4513f423903cf3b1d12f5c300",
|
|
225
216
|
"spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
|
|
226
217
|
"spec/v1/operation-path-manifest.json": "f988f7ebf58ff192e999e2a71192066052f837acc03c91d047d6050ca21a83b0",
|
|
227
218
|
"spec/v1/spec-gaps.json": "ea9612af55bea9dae3e82223d4f714243f8f590b0193f1188257b13491a38afc",
|
|
228
219
|
"spec/v2/README.md": "c58acd84bb67c69043d9f777cbaa16d03e4f0f0a8158d2984526b69981067a14",
|
|
229
|
-
"spec/v2/core/artifact-type-packs.md": "
|
|
230
|
-
"spec/v2/core/capabilities.md": "
|
|
231
|
-
"spec/v2/core/conformance.md": "
|
|
220
|
+
"spec/v2/core/artifact-type-packs.md": "ba5a258ac93b1aa4d74a4464c63a8f72dbbc5d24fd56f34a2c2ce9f464892799",
|
|
221
|
+
"spec/v2/core/capabilities.md": "c0b90bb002cfa1857406e700edbb8099bf5fc6b0c5e18d1f761b0334bdc3106f",
|
|
222
|
+
"spec/v2/core/conformance.md": "2e12b5fceb9cbd1bbf4a536310fe92a4cd44947e48d0466013327c5de202a2d9",
|
|
232
223
|
"spec/v2/core/connection-packs.md": "c80f95bd6a03698f35c72cdb2b46bd973f49203bbd786c26760e35fa86e6f23d",
|
|
233
224
|
"spec/v2/core/conversation.md": "8d6abedf6af408a74577753bfca24719d318e2632e10b45ff5d63bdcf31a8aaa",
|
|
234
|
-
"spec/v2/core/errors.md": "
|
|
235
|
-
"spec/v2/core/events.md": "
|
|
236
|
-
"spec/v2/core/execution.md": "
|
|
237
|
-
"spec/v2/core/form-content-packs.md": "
|
|
238
|
-
"spec/v2/core/headers.md": "
|
|
239
|
-
"spec/v2/core/host-services.md": "
|
|
240
|
-
"spec/v2/core/i18n.md": "
|
|
225
|
+
"spec/v2/core/errors.md": "0ba4fa59f0f3dc025d43147135dabede6c19d583677b761eafe693fc2169352c",
|
|
226
|
+
"spec/v2/core/events.md": "5834308616f2e722e217db776edea37338c283196b6d2a7c241256575ccca825",
|
|
227
|
+
"spec/v2/core/execution.md": "d6e1ab7336a88b7a598a192434f584e6787e60aeeb56fcdbc32fa548cde3086a",
|
|
228
|
+
"spec/v2/core/form-content-packs.md": "d56022c207c8406fed4b2e9501bd14e70a4300e371c0cfc371787899ae0bd997",
|
|
229
|
+
"spec/v2/core/headers.md": "c86c56868db64724ca8e7afd34bff33740deb2612bf77fa09d412a1d6c65f3c6",
|
|
230
|
+
"spec/v2/core/host-services.md": "68fbe359ec9efc453105a225998b8d0dada07ae61bfd05e324dd8649af31261d",
|
|
231
|
+
"spec/v2/core/i18n.md": "19aea08290a7604f36fa8b416ad270cf84e193cc8fa39d85e52015e312a95565",
|
|
241
232
|
"spec/v2/core/idempotency.md": "adbd317a6ebb57c2759c076297b31f67def9e391576bccd0bbea787b13e85872",
|
|
242
|
-
"spec/v2/core/identity.md": "
|
|
243
|
-
"spec/v2/core/interop.md": "
|
|
244
|
-
"spec/v2/core/interrupt.md": "
|
|
245
|
-
"spec/v2/core/node-pack-runtimes.md": "
|
|
246
|
-
"spec/v2/core/oauth.md": "
|
|
247
|
-
"spec/v2/core/overview.md": "
|
|
248
|
-
"spec/v2/core/packs.md": "
|
|
249
|
-
"spec/v2/core/persistence.md": "
|
|
250
|
-
"spec/v2/core/portability.md": "
|
|
251
|
-
"spec/v2/core/replay.md": "
|
|
252
|
-
"spec/v2/core/runs.md": "
|
|
253
|
-
"spec/v2/core/security-defaults.md": "
|
|
254
|
-
"spec/v2/core/storage.md": "
|
|
233
|
+
"spec/v2/core/identity.md": "3447f4bec0e4780a3b32b0039d9a0ae1d85de5a71166a4d7e2d3d68b09d55129",
|
|
234
|
+
"spec/v2/core/interop.md": "78d7944c8955412a570f14b84bf74ed4e0ef5dec6680e1cb538c3329a4aa778b",
|
|
235
|
+
"spec/v2/core/interrupt.md": "3f003b6825ec394ebff1605471fddeabe19aa2c7c370332fb4defd443645f526",
|
|
236
|
+
"spec/v2/core/node-pack-runtimes.md": "0a269d2b36477870d45bdd2e7e34fea9dfd428e2e59e6cc7cbc0c67f3147a9ee",
|
|
237
|
+
"spec/v2/core/oauth.md": "9bdbdc85ad2ff4c1f578730edba3a79a6ce111f0335f90feb06863c8e823a23f",
|
|
238
|
+
"spec/v2/core/overview.md": "593c2ac434952f08c6f552e1b77780541906fe5ffdeb911133f6402075e65e72",
|
|
239
|
+
"spec/v2/core/packs.md": "c46a3bbd8a3a8cfbb6476b88f90d234a45f724aa1f640c9ce6430ba05bacb069",
|
|
240
|
+
"spec/v2/core/persistence.md": "d1767bde0db8038bf6c4f8dc31c4900c67dbd77b4ccc382e99b9f29501b472a3",
|
|
241
|
+
"spec/v2/core/portability.md": "93b9cb8bb85448669df716effb7627236b2bb069f8c5ca7306e8971b9355abfd",
|
|
242
|
+
"spec/v2/core/replay.md": "cf992b8c7f646a79bd0bdd39451cc9d015f7150a3c342c312b2a89d95abe49de",
|
|
243
|
+
"spec/v2/core/runs.md": "f9c26490e52fa69a10c8e98c8a489e3bc8dfbe3effe334bb1793bc9b575f5efe",
|
|
244
|
+
"spec/v2/core/security-defaults.md": "18c9956cae51c3da1def80ce94741ad1fd664a8150701160c6cd0ef367c79749",
|
|
245
|
+
"spec/v2/core/storage.md": "bfcc74526d0f24539188b1c5d1567d8510e80d0b6c39fdc4d19204fcd6fd1f85",
|
|
255
246
|
"spec/v2/core/tool-catalog.md": "d16a9004418719c48301804aefa4d7ab6f41112a4ed83727f552aa1b92b418b0",
|
|
256
|
-
"spec/v2/core/versioning.md": "
|
|
257
|
-
"spec/v2/core/webhooks.md": "
|
|
247
|
+
"spec/v2/core/versioning.md": "f25c64849e9fa7e3ddc976f33c502bbf0e3fdd158c5c2d5730d524b1f8a19bfe",
|
|
248
|
+
"spec/v2/core/webhooks.md": "861284396eb4f445f4b7bec210f07dd2c96d18084f8511371235b98617bf2b90",
|
|
258
249
|
"spec/v2/core/workflow-chain-packs.md": "fdce7a8477e269950a2bac05ee6eddbd66eb0b670b464d00054f7196ec05d29c",
|
|
259
|
-
"spec/v2/corrections.json": "
|
|
260
|
-
"spec/v2/corrections.schema.json": "
|
|
261
|
-
"spec/v2/declaration.json": "
|
|
250
|
+
"spec/v2/corrections.json": "5ee76d1ee87677a86d5d9ee2f477b88fc29f9f9d37611040b9ccb08f8f30fb2d",
|
|
251
|
+
"spec/v2/corrections.schema.json": "02f6a0a9531e657693be311af0f59d6432f3efcf645f56ccbf39e5b141e6b641",
|
|
252
|
+
"spec/v2/declaration.json": "113c50192fdb2bb1b55e35f7f79844442021c6698da47137692db25c2fd870cb",
|
|
262
253
|
"spec/v2/declaration.schema.json": "ef951633e4070899f64828f5cf1b5f4870270a0360f81dbb49b5b4d6cd407550",
|
|
263
254
|
"spec/v2/eos-override.json": "4c72d2f6a658943b01c1de1643cf294642091933af7832f38ee5495df684cb2d",
|
|
264
|
-
"spec/v2/errors.json": "
|
|
255
|
+
"spec/v2/errors.json": "8b4d2ebab569b26f608323ca4c9adaf805ab515286d26532db23fcb97541787f",
|
|
265
256
|
"spec/v2/errors.schema.json": "47404ad53e6147cf9017b813483712466573e419fb33e6c4b6c12d3e7deba1bc",
|
|
266
257
|
"spec/v2/event-codemap.json": "37869a03cdfd8758b57e6f350641a6ebbd383231cebda51f5473ad85f94ab74c",
|
|
267
258
|
"spec/v2/event-codemap.schema.json": "b173f2a9bcc0bf9b62a474ce3b91e1431d597e64fd1560fc58662cd8606eaf9c",
|
|
268
259
|
"spec/v2/ext/README.md": "3f3b5f09f961b65514cea6880c303470d4b133a3615c734ad7f3c28ba2da8117",
|
|
269
|
-
"spec/v2/ext/a2uiSurface/README.md": "5518c7f355262eb7cc584422f4ff8e548f066b211878f969274a3a578127622d",
|
|
270
260
|
"spec/v2/ext/brand/README.md": "aa64eeaa7d091110ff4378842e2a72eaa19feed0016a41fbce5ffb7d9959b4a0",
|
|
271
261
|
"spec/v2/ext/canvas/README.md": "6829ee68ea4fec4dc97990a13289155fd5bb3940aeb4d3a98301c06cee763e51",
|
|
272
262
|
"spec/v2/ext/chat/README.md": "6bcd56f7927f635853c6e6ffc67386ad6cb2f80c7d954197467ba34b3db11b96",
|
|
@@ -286,15 +276,14 @@
|
|
|
286
276
|
"spec/v2/ext/webResearch/README.md": "2771686719161b811c2a50361815a334c58f09e442528fb8e23e4fcdcd42d630",
|
|
287
277
|
"spec/v2/facets/a2a.schema.json": "b68bf5e29e455e46c2ad7cfcccf5963730ec2310ff9db81884550d8df30fd6ef",
|
|
288
278
|
"spec/v2/facets/agents.schema.json": "cc9abae19f500b8a2c6f2b3494284f6f9bb782cde7eec13e4f2f5363a1b44ad5",
|
|
289
|
-
"spec/v2/facets/aiProviders.schema.json": "
|
|
279
|
+
"spec/v2/facets/aiProviders.schema.json": "8bf8a359dc36cc79a93314aaa129822faad6c1ef1183479b924435fbb3699578",
|
|
290
280
|
"spec/v2/facets/auditLogIntegrity.schema.json": "9a7f81320c8f940c6f4129bc7dd895a4063231c5458a717a08c2cbf9bb886c46",
|
|
291
281
|
"spec/v2/facets/auth.schema.json": "7d98bc81a0f7d307460d039eebfebd21388091bfe1d538762583940f94c0bd2a",
|
|
292
282
|
"spec/v2/facets/connections.schema.json": "f998bb206a5814183bb4720cc34fa43b7ab64d61e39a79437b009c589ce8b78e",
|
|
293
|
-
"spec/v2/facets/envelopeStrictness.schema.json": "28be0a27f880bd45ec1222a16155f5e9167bbca57bf0322970fe1eb2654562aa",
|
|
294
283
|
"spec/v2/facets/heartbeat.schema.json": "81d7fa1895a8b0241bd07cf00a7e7905bef0fd14eb3427325261c62eee5746a6",
|
|
295
284
|
"spec/v2/facets/hostEvents.schema.json": "8834c2fde7bc2ba9eb433f22c9d6ec3f9739f44049eecdbf0a05baf2bfa0bb7d",
|
|
296
285
|
"spec/v2/facets/interrupt.schema.json": "2110ef32c3f880bf706475ef4cf8ddf97ff06871b8e6003a5edbcf4439f1fb70",
|
|
297
|
-
"spec/v2/facets/limits.schema.json": "
|
|
286
|
+
"spec/v2/facets/limits.schema.json": "e68327665def83007f2573b413757caa602e82ad347d1b85e9853fea153ffb48",
|
|
298
287
|
"spec/v2/facets/mcp.schema.json": "7060657dfcff170f079beed160e3db7c1d3cc4410cd3cf64863baf6459f781cd",
|
|
299
288
|
"spec/v2/facets/nondeterminismPolicy.schema.json": "e9dfaa32e0778a1a837fdad3b8a0673fccda9579ab08c8bfe9777362dd15e989",
|
|
300
289
|
"spec/v2/facets/oauth.schema.json": "3a0cbe249d3bd5a5982349ae7ba2534776cc958e4a57e0fbeabf2bdab6e99e69",
|
|
@@ -302,25 +291,23 @@
|
|
|
302
291
|
"spec/v2/facets/replay.schema.json": "0a5aefb0108c708c6794fadd533cf256709704c4f16dbf44cd63fa8980c78018",
|
|
303
292
|
"spec/v2/facets/runList.schema.json": "6223e1baaebbb9f4faa71bfe968f8d22b4aa88046d0e43e8d5f56409e7f86e90",
|
|
304
293
|
"spec/v2/facets/sandbox.schema.json": "e75f54486d387b2d089791aa93b5093cd1450f1920753a0f97fc23acdfe978ed",
|
|
305
|
-
"spec/v2/facets/schemaVersions.schema.json": "890d3416c4b66511d51f329abc68e6f467f4338f16807e489fe682999b2b56b9",
|
|
306
|
-
"spec/v2/facets/supportedEnvelopes.schema.json": "644f22cc2236e30a611b5b7f1ba0458ff1925d68b94c514d9672583224e126bd",
|
|
307
294
|
"spec/v2/facets/uiPlugins.schema.json": "1fd3f8440cfb6e4422553a7c4b5f091eb3e10a40da0d43e8b977a18929116758",
|
|
308
295
|
"spec/v2/facets/webhooks.schema.json": "54b576f1d150e28e1642693d846ce471c118e9c521bdf3924185305fbd1d0de4",
|
|
309
296
|
"spec/v2/facets/workflowChainPacks.schema.json": "ea625ce818fbeb746478f00f31f96ee9613d538e4409c258c1bfb517acdeaba9",
|
|
310
|
-
"spec/v2/generated/error-codes.md": "
|
|
297
|
+
"spec/v2/generated/error-codes.md": "430113c79553b05a999d443587a1bc4d5e9db2e14afe1334e293279baf628479",
|
|
311
298
|
"spec/v2/harness-trust-anchors.json": "6007b92eae16a070fbc3777424efb0abfe865fda89d096963109b96282b91205",
|
|
312
299
|
"spec/v2/harness-trust-anchors.schema.json": "372b5d92337c893d3449eff3f6bfd009ac09fdac285296d8bdbe0a08fff9e34c",
|
|
313
|
-
"spec/v2/id-field-bindings.json": "
|
|
300
|
+
"spec/v2/id-field-bindings.json": "3ecb4fa9ca92bed6727db6efbab3903b8119c053649499da6556a853e4180e5d",
|
|
314
301
|
"spec/v2/interop-map.json": "02255dafe7eb55f61ca7f9ae7c21f079d1848a6756991343088975ac9d184b8d",
|
|
315
302
|
"spec/v2/interop-map.schema.json": "0017c882df34ee215e2e0729de051490e09d43aac3d2c949285698ed51832f12",
|
|
316
303
|
"spec/v2/migrations.json": "651954938a1e154c0b6f1e3dd6e105889d30de3bb65789f21de7f77a12869e9e",
|
|
317
304
|
"spec/v2/migrations.schema.json": "b91ade6320ad1b1185c9495b9424f3aa63438ed8e412c45171c227d82c0afd86",
|
|
318
305
|
"spec/v2/path-manifest.json": "20f598f56df460ad3ed50aba3d6bc2933ea16a3c96ce125da1c5dd6989d4155c",
|
|
319
|
-
"spec/v2/peer-dependency-aliases.json": "
|
|
306
|
+
"spec/v2/peer-dependency-aliases.json": "cbf62f551f9295b0ac7ba6cc0466abb153563354a57b0622f3ec6e6689cba47e",
|
|
320
307
|
"spec/v2/profiles.json": "b382b261c7844798575f7c1b37c934f0da19846016a2337d883d4f5ef6e05479",
|
|
321
|
-
"spec/v2/release.json": "
|
|
308
|
+
"spec/v2/release.json": "5a1472ec8741edf34686cb1ba9cd4e9a9d55bf9fbed4394f810cb1f27aeb6723",
|
|
322
309
|
"spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
|
|
323
|
-
"spec/v2/surface-baseline.json": "
|
|
310
|
+
"spec/v2/surface-baseline.json": "4da23801bb48c50267d6e2b392d8f48b7387327de88f5dd03aa66358ce360d88"
|
|
324
311
|
},
|
|
325
|
-
"corpusCommit": "
|
|
312
|
+
"corpusCommit": "44e7d74b70a74de22ee137b5c84f0679f2283549"
|
|
326
313
|
}
|
|
@@ -33,7 +33,7 @@ export const NODE_ID = 'callai-echo';
|
|
|
33
33
|
const DOC_A = 'aiProviders.schema.json §callAccounting.attempts (RFC 0248 §A)';
|
|
34
34
|
const DOC_B = 'aiProviders.schema.json §callAccounting.retryPolicy (RFC 0248 §B)';
|
|
35
35
|
|
|
36
|
-
export interface ScriptEntry { readonly kind: 'invalid-json' | 'truncated' | 'valid'; readonly outputTokens?: number; readonly usage?: false; readonly structuredMode?: 'native' | 'prompt' }
|
|
36
|
+
export interface ScriptEntry { readonly kind: 'invalid-json' | 'truncated' | 'valid' | 'refusal'; readonly outputTokens?: number; readonly usage?: false; readonly structuredMode?: 'native' | 'prompt' }
|
|
37
37
|
export interface Case { readonly request: Record<string, unknown>; readonly script: readonly ScriptEntry[] }
|
|
38
38
|
|
|
39
39
|
const SCHEMA = { type: 'object', properties: { answer: { type: 'string' } }, required: ['answer'] };
|
|
@@ -51,6 +51,12 @@ export const CASES = {
|
|
|
51
51
|
cap: { request: { prompt: 'conformance', responseSchema: SCHEMA, maxTokens: BUDGET, retry: { maxAttempts: 1 } }, script: [{ kind: 'invalid-json', outputTokens: 10 }, { kind: 'valid', outputTokens: 20 }] },
|
|
52
52
|
/** §B.2: truncated, then a reply that fits only a grown budget. */
|
|
53
53
|
growth: { request: { prompt: 'conformance', responseSchema: SCHEMA, maxTokens: BUDGET, retry: { growMaxTokens: false } }, script: [{ kind: 'truncated', outputTokens: BUDGET }, { kind: 'valid', outputTokens: 150 }] },
|
|
54
|
+
/** RFC 0255 §A (host-services.md §Structured output): truncated, then valid. */
|
|
55
|
+
truncation: { request: { prompt: 'conformance', responseSchema: SCHEMA, maxTokens: BUDGET }, script: [{ kind: 'truncated', outputTokens: BUDGET }, { kind: 'valid', outputTokens: 20 }] },
|
|
56
|
+
/** RFC 0255 §A: every reply violates the schema, so the repair budget runs out. */
|
|
57
|
+
exhaustion: { request: { prompt: 'conformance', responseSchema: SCHEMA, maxTokens: BUDGET, retry: { maxAttempts: 2 } }, script: [{ kind: 'invalid-json', outputTokens: 10 }] },
|
|
58
|
+
/** RFC 0255 §A: the provider refuses; a refusal is never retried. */
|
|
59
|
+
refusal: { request: { prompt: 'conformance', responseSchema: SCHEMA, maxTokens: BUDGET }, script: [{ kind: 'refusal' }, { kind: 'valid', outputTokens: 20 }] },
|
|
54
60
|
/** §B.5: maxAttempts out of range. */
|
|
55
61
|
malformed: { request: { prompt: 'conformance', maxTokens: BUDGET, retry: { maxAttempts: 0 } }, script: [{ kind: 'valid', outputTokens: 5 }] },
|
|
56
62
|
} as const satisfies Record<string, Case>;
|
|
@@ -66,6 +72,10 @@ export interface CaseRun {
|
|
|
66
72
|
readonly usage: readonly Record<string, unknown>[];
|
|
67
73
|
readonly exhaustedTotal: number | undefined;
|
|
68
74
|
readonly startedSeq: number | undefined;
|
|
75
|
+
/** Every event `type` of the run, in log order. */
|
|
76
|
+
readonly types: readonly string[];
|
|
77
|
+
/** `cap.breached` payload `kind`s, in log order. */
|
|
78
|
+
readonly capBreachedKinds: readonly unknown[];
|
|
69
79
|
}
|
|
70
80
|
|
|
71
81
|
export interface Finding { readonly ok: boolean; readonly doc: string; readonly message: string }
|
|
@@ -117,6 +127,8 @@ export async function observe(runId: string, status: string): Promise<CaseRun |
|
|
|
117
127
|
usage: of('provider.usage'),
|
|
118
128
|
exhaustedTotal: typeof exhausted?.['totalAttempts'] === 'number' ? exhausted['totalAttempts'] : undefined,
|
|
119
129
|
startedSeq: typeof started?.['sequence'] === 'number' ? started['sequence'] : undefined,
|
|
130
|
+
types: mine.map((e) => String(e['type'])),
|
|
131
|
+
capBreachedKinds: of('cap.breached').map((p) => p['kind']),
|
|
120
132
|
};
|
|
121
133
|
}
|
|
122
134
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The advertisement-shape witness at major 2. Wave 1: the claims-check AI
|
|
3
|
-
* families `
|
|
4
|
-
*
|
|
3
|
+
* families `limits` (`clarificationRounds`), `modelCapabilities` and
|
|
4
|
+
* `aiProviders`, whose structured-output facets came from the `envelopes`
|
|
5
|
+
* family RFC 0255 deleted. Wave 2: the record and facet shapes of `selfHostedRunner`,
|
|
5
6
|
* `credentials`, `authorization`, `providerUsage`, `subWorkflow`, `scheduling`,
|
|
6
|
-
* `artifactTypes`, `
|
|
7
|
+
* `artifactTypes`, `deadLetter` and `portability`. Wave 3: the
|
|
7
8
|
* families no host serves at v2 — `dataResidency`, `multiPartyConversation`,
|
|
8
9
|
* `nodePackRuntimes`, `uiPlugins`, `purposePropagation` and `agentRuntime` get
|
|
9
10
|
* facet legs; `conversationTurnModelProvenance`, `channelPresence`,
|
|
10
|
-
* `nondeterminismPolicy
|
|
11
|
+
* `nondeterminismPolicy` and `promptLibrary` carry no facet
|
|
11
12
|
* a host-binding v2 rule gives meaning to, so they get the record leg only.
|
|
12
13
|
* Wave 4 (suite 2.46.3): the `multiAgent.executionModel` sub-blocks a version
|
|
13
14
|
* level requires and the escalation kind it may name, and `auth.subjectLinkKey`
|
|
@@ -71,12 +72,12 @@ function onFamily(profile: MajorProfile, discovery: unknown, family: string, leg
|
|
|
71
72
|
|
|
72
73
|
/** The record as a whole against its seat in the capabilities schema. Catches every v1 shape v2 retired (`supported`, `selfHosted[]`, the per-provider `authModes` map, …). */
|
|
73
74
|
export type AdvertFamily =
|
|
74
|
-
| '
|
|
75
|
+
| 'modelCapabilities' | 'aiProviders'
|
|
75
76
|
| 'selfHostedRunner' | 'credentials' | 'authorization' | 'providerUsage' | 'subWorkflow'
|
|
76
|
-
| 'scheduling' | 'artifactTypes' | '
|
|
77
|
+
| 'scheduling' | 'artifactTypes' | 'deadLetter' | 'portability'
|
|
77
78
|
| 'dataResidency' | 'conversationTurnModelProvenance' | 'multiPartyConversation' | 'channelPresence'
|
|
78
79
|
| 'nodePackRuntimes' | 'uiPlugins' | 'purposePropagation' | 'nondeterminismPolicy'
|
|
79
|
-
| 'agentRuntime' | 'promptLibrary'
|
|
80
|
+
| 'agentRuntime' | 'promptLibrary'
|
|
80
81
|
| 'multiAgent' | 'auth' | 'agents';
|
|
81
82
|
|
|
82
83
|
export function recordSchemaLeg(profile: MajorProfile, discovery: unknown, family: AdvertFamily, doc: string): AdvertOutcome {
|
|
@@ -84,86 +85,72 @@ export function recordSchemaLeg(profile: MajorProfile, discovery: unknown, famil
|
|
|
84
85
|
}
|
|
85
86
|
|
|
86
87
|
// ---------------------------------------------------------------------------
|
|
87
|
-
//
|
|
88
|
+
// aiProviders structured output — spec/v2/core/host-services.md §Structured output
|
|
88
89
|
// ---------------------------------------------------------------------------
|
|
89
90
|
|
|
90
|
-
const
|
|
91
|
-
const
|
|
91
|
+
const SO_DOC = 'host-services.md §Structured output';
|
|
92
|
+
const SO = '/properties/aiProviders/properties';
|
|
92
93
|
|
|
93
|
-
/** `
|
|
94
|
-
export const
|
|
94
|
+
/** `aiProviders.reasoning`: an object whose `promptDirective` is one of three values. */
|
|
95
|
+
export const structuredOutputReasoningLeg = (p: MajorProfile, d: unknown): AdvertOutcome => onFamily(p, d, 'aiProviders', (rec) => {
|
|
95
96
|
const r = rec['reasoning'];
|
|
96
|
-
if (r === undefined) return inapplicable('the host does not advertise
|
|
97
|
-
const out = [bySchema(`${
|
|
97
|
+
if (r === undefined) return inapplicable('the host does not advertise aiProviders.reasoning (optional)');
|
|
98
|
+
const out = [bySchema(`${SO}/reasoning`, r, SO_DOC, 'aiProviders.reasoning')];
|
|
98
99
|
if (isRecord(r) && r['promptDirective'] !== undefined) {
|
|
99
|
-
out.push({ ok: ['mandatory', 'advisory', 'off'].includes(String(r['promptDirective'])), doc:
|
|
100
|
+
out.push({ ok: ['mandatory', 'advisory', 'off'].includes(String(r['promptDirective'])), doc: SO_DOC, message: `aiProviders.reasoning.promptDirective MUST be mandatory, advisory or off (got ${JSON.stringify(r['promptDirective'])})` });
|
|
100
101
|
}
|
|
101
102
|
return observed(out);
|
|
102
103
|
});
|
|
103
104
|
|
|
104
|
-
/** `
|
|
105
|
-
export const
|
|
105
|
+
/** `aiProviders.tierOneSubsetCompliance`: one of strict, warn, off. */
|
|
106
|
+
export const structuredOutputTierOneLeg = (p: MajorProfile, d: unknown): AdvertOutcome => onFamily(p, d, 'aiProviders', (rec) => {
|
|
106
107
|
const v = rec['tierOneSubsetCompliance'];
|
|
107
|
-
if (v === undefined) return inapplicable('the host does not advertise
|
|
108
|
-
return observed([bySchema(`${
|
|
108
|
+
if (v === undefined) return inapplicable('the host does not advertise aiProviders.tierOneSubsetCompliance (optional)');
|
|
109
|
+
return observed([bySchema(`${SO}/tierOneSubsetCompliance`, v, SO_DOC, 'aiProviders.tierOneSubsetCompliance')]);
|
|
109
110
|
});
|
|
110
111
|
|
|
111
|
-
/** The six reliability events by their v2 names
|
|
112
|
+
/** The six reliability events, by their v2 names. */
|
|
112
113
|
export const RELIABILITY_EVENTS = ['envelope.retry-attempted', 'envelope.retry-exhausted', 'envelope.refusal', 'envelope.truncated', 'envelope.nl-to-format-engaged', 'envelope.recovery-applied'] as const;
|
|
113
|
-
export const RELIABILITY_ALIASES: Readonly<Record<string, string>> = {
|
|
114
|
-
'envelope.retry.attempted': 'envelope.retry-attempted',
|
|
115
|
-
'envelope.retry.exhausted': 'envelope.retry-exhausted',
|
|
116
|
-
'envelope.nlToFormat.engaged': 'envelope.nl-to-format-engaged',
|
|
117
|
-
'envelope.recovery.applied': 'envelope.recovery-applied',
|
|
118
|
-
};
|
|
119
|
-
/** A listed reliability event by its v2 name: an alias folds to its hyphenated equivalent; anything else is returned unchanged. */
|
|
120
|
-
export const canonicalReliabilityEvent = (e: string): string => RELIABILITY_ALIASES[e] ?? e;
|
|
121
114
|
|
|
122
|
-
/**
|
|
123
|
-
|
|
124
|
-
* or v1 alias), and — after folding aliases — includes the two MUST-tier ones;
|
|
125
|
-
* `maxRetryAttempts` is an integer in [1, 16].
|
|
126
|
-
*/
|
|
127
|
-
export const envelopesReliabilityLeg = (p: MajorProfile, d: unknown): AdvertOutcome => onFamily(p, d, 'envelopes', (rec) => {
|
|
115
|
+
/** `aiProviders.reliability`: `events[]` names only reliability events and includes the two MUST-tier ones. */
|
|
116
|
+
export const structuredOutputReliabilityLeg = (p: MajorProfile, d: unknown): AdvertOutcome => onFamily(p, d, 'aiProviders', (rec) => {
|
|
128
117
|
const r = rec['reliability'];
|
|
129
|
-
if (r === undefined) return inapplicable('the host does not advertise
|
|
130
|
-
const out = [bySchema(`${
|
|
118
|
+
if (r === undefined) return inapplicable('the host does not advertise aiProviders.reliability (optional)');
|
|
119
|
+
const out = [bySchema(`${SO}/reliability`, r, SO_DOC, 'aiProviders.reliability')];
|
|
131
120
|
const events = isRecord(r) ? r['events'] : undefined;
|
|
132
121
|
if (!Array.isArray(events)) {
|
|
133
|
-
out.push({ ok: false, doc:
|
|
122
|
+
out.push({ ok: false, doc: SO_DOC, message: `a host advertising aiProviders.reliability MUST list the events it emits in reliability.events[] (got ${JSON.stringify(events)})` });
|
|
134
123
|
return observed(out);
|
|
135
124
|
}
|
|
136
|
-
const canonical = new Set(events.filter((e): e is string => typeof e === 'string').map(canonicalReliabilityEvent));
|
|
137
125
|
for (const e of events) {
|
|
138
|
-
|
|
139
|
-
out.push({ ok: name !== undefined && (RELIABILITY_EVENTS as readonly string[]).includes(name), doc: ENV_DOC, message: `reliability.events[] MUST name only reliability events, by v2 name or v1 alias (got ${JSON.stringify(e)})` });
|
|
126
|
+
out.push({ ok: typeof e === 'string' && (RELIABILITY_EVENTS as readonly string[]).includes(e), doc: SO_DOC, message: `reliability.events[] MUST name only reliability events (got ${JSON.stringify(e)})` });
|
|
140
127
|
}
|
|
141
128
|
for (const must of ['envelope.retry-exhausted', 'envelope.refusal']) {
|
|
142
|
-
out.push({ ok:
|
|
129
|
+
out.push({ ok: events.includes(must), doc: SO_DOC, message: `a host advertising aiProviders.reliability MUST emit and list ${must} (listed: ${JSON.stringify(events)})` });
|
|
143
130
|
}
|
|
144
131
|
return observed(out);
|
|
145
132
|
});
|
|
146
133
|
|
|
147
|
-
/** `
|
|
148
|
-
export const
|
|
134
|
+
/** `aiProviders.reliability.completion`: `distinguishesTruncation` is a boolean; `truncationBudgetMultiplier` a number in [1, 8]. */
|
|
135
|
+
export const structuredOutputCompletionLeg = (p: MajorProfile, d: unknown): AdvertOutcome => onFamily(p, d, 'aiProviders', (rec) => {
|
|
149
136
|
const r = rec['reliability'];
|
|
150
137
|
const c = isRecord(r) ? r['completion'] : undefined;
|
|
151
|
-
if (c === undefined) return inapplicable('the host does not advertise
|
|
152
|
-
const out = [bySchema(`${
|
|
138
|
+
if (c === undefined) return inapplicable('the host does not advertise aiProviders.reliability.completion (optional)');
|
|
139
|
+
const out = [bySchema(`${SO}/reliability/properties/completion`, c, SO_DOC, 'aiProviders.reliability.completion')];
|
|
153
140
|
const dt = isRecord(c) ? c['distinguishesTruncation'] : undefined;
|
|
154
|
-
out.push({ ok: typeof dt === 'boolean', doc:
|
|
141
|
+
out.push({ ok: typeof dt === 'boolean', doc: SO_DOC, message: `reliability.completion.distinguishesTruncation MUST be a boolean (got ${JSON.stringify(dt)})` });
|
|
155
142
|
return observed(out);
|
|
156
143
|
});
|
|
157
144
|
|
|
158
145
|
// ---------------------------------------------------------------------------
|
|
159
|
-
// limits — spec/v2/core/runs.md §Limits: the
|
|
146
|
+
// limits — spec/v2/core/runs.md §Limits: the cap every record carries
|
|
160
147
|
// ---------------------------------------------------------------------------
|
|
161
148
|
|
|
162
|
-
export const
|
|
163
|
-
export type
|
|
149
|
+
export const ALWAYS_CARRIED_CAPS = ['clarificationRounds'] as const;
|
|
150
|
+
export type AlwaysCarriedCap = (typeof ALWAYS_CARRIED_CAPS)[number];
|
|
164
151
|
|
|
165
152
|
/** `limits.<cap>`: present (runs.md: "`limits` always carries" it) and a non-negative integer. */
|
|
166
|
-
export const limitsCapLeg = (p: MajorProfile, d: unknown, cap:
|
|
153
|
+
export const limitsCapLeg = (p: MajorProfile, d: unknown, cap: AlwaysCarriedCap): AdvertOutcome => onFamily(p, d, 'limits', (rec) => {
|
|
167
154
|
const v = rec[cap];
|
|
168
155
|
const doc = 'runs.md §Limits';
|
|
169
156
|
if (v === undefined) return observed([{ ok: false, doc, message: `limits MUST always carry ${cap} (absent)` }]);
|
|
@@ -87,13 +87,21 @@ async function isStreamTextMockAdvertised(): Promise<boolean> {
|
|
|
87
87
|
return Array.isArray(testing?.mockProviders) && testing.mockProviders.includes('stream-text');
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
/**
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Why the fixture gate holds, as RFC 0148 §A names it (openwop#1686: a
|
|
92
|
+
* describe-level skip recorded no disposition). The mock is what makes the
|
|
93
|
+
* fixture runnable, so a host serving the mock without the fixture is blocked;
|
|
94
|
+
* a host serving neither has nothing to stream through and is inapplicable.
|
|
95
|
+
*/
|
|
96
|
+
async function gateWhy(): Promise<readonly [SoftSkipKind, string]> {
|
|
97
|
+
return (await isStreamTextMockAdvertised())
|
|
98
|
+
? ['blocked', `the stream-text mock provider is advertised but the \`${FIXTURE_ID}\` fixture is not`] as const
|
|
99
|
+
: ['inapplicable', `neither the \`${FIXTURE_ID}\` fixture nor the stream-text mock provider is advertised`] as const;
|
|
100
|
+
}
|
|
93
101
|
|
|
94
102
|
describe('stream-text-fixture: messages-mode fold through the stream-text mock (F1)', () => {
|
|
95
103
|
it('delivers the mocked tokens in order, terminates with isLast + meta, and server-closes', async () => {
|
|
96
|
-
if (SKIP_NO_FIXTURE) return softSkip(...
|
|
104
|
+
if (SKIP_NO_FIXTURE) return softSkip(...(await gateWhy()));
|
|
97
105
|
if (!(await isStreamTextMockAdvertised())) {
|
|
98
106
|
// eslint-disable-next-line no-console
|
|
99
107
|
console.warn(
|
|
@@ -196,7 +204,7 @@ describe('stream-text-fixture: messages-mode fold through the stream-text mock (
|
|
|
196
204
|
});
|
|
197
205
|
|
|
198
206
|
it('an unknown mockProvider.id is rejected with 400 unsupported_mock_provider', async () => {
|
|
199
|
-
if (SKIP_NO_FIXTURE) return softSkip(...
|
|
207
|
+
if (SKIP_NO_FIXTURE) return softSkip(...(await gateWhy()));
|
|
200
208
|
if (!(await isStreamTextMockAdvertised())) {
|
|
201
209
|
// eslint-disable-next-line no-console
|
|
202
210
|
console.warn('[stream-text-fixture] stream-text mock not advertised; skipping negative leg');
|