@bitkyc08/opencodex 2.34.0 → 2.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/gui/dist/assets/{index-C4TMRloX.js → index-DNdRKXK9.js} +11 -11
  2. package/gui/dist/index.html +1 -1
  3. package/package.json +3 -1
  4. package/src/adapters/base.ts +26 -0
  5. package/src/adapters/cursor/catalog.ts +541 -0
  6. package/src/adapters/cursor/cursor-errors.ts +15 -0
  7. package/src/adapters/cursor/discovery.ts +34 -41
  8. package/src/adapters/cursor/envelope-echo.ts +128 -0
  9. package/src/adapters/cursor/request-builder.ts +19 -12
  10. package/src/adapters/cursor/tool-definitions.ts +2 -1
  11. package/src/adapters/cursor/tool-result-normalize.ts +23 -31
  12. package/src/adapters/cursor.ts +21 -2
  13. package/src/adapters/exec-tool-result-normalize.ts +99 -0
  14. package/src/adapters/google-antigravity-replay.ts +71 -2
  15. package/src/adapters/google-antigravity-wire.ts +5 -0
  16. package/src/adapters/google.ts +15 -1
  17. package/src/adapters/kiro-constants.ts +12 -0
  18. package/src/adapters/kiro.ts +128 -11
  19. package/src/adapters/openai-chat.ts +16 -2
  20. package/src/adapters/openai-responses.ts +15 -2
  21. package/src/adapters/run-turn-queue.ts +36 -1
  22. package/src/adapters/tool-catalog-nudge.ts +2 -1
  23. package/src/adapters/xai-web-search.ts +10 -14
  24. package/src/claude/outbound.ts +14 -3
  25. package/src/cli/access.ts +46 -3
  26. package/src/cli/account-api.ts +84 -15
  27. package/src/cli/account-extended.ts +261 -28
  28. package/src/cli/account-main.ts +12 -12
  29. package/src/cli/account.ts +40 -10
  30. package/src/cli/agent.ts +8 -1
  31. package/src/cli/capabilities-command.ts +94 -0
  32. package/src/cli/capabilities.ts +496 -0
  33. package/src/cli/claude-desktop.ts +31 -11
  34. package/src/cli/dispatch.ts +195 -27
  35. package/src/cli/doctor.ts +100 -1
  36. package/src/cli/help.ts +11 -2
  37. package/src/cli/index.ts +19 -3
  38. package/src/cli/inspect.ts +230 -0
  39. package/src/cli/observe.ts +11 -3
  40. package/src/cli/registry.ts +34 -2
  41. package/src/cli/runtime-api.ts +51 -7
  42. package/src/cli/status.ts +16 -0
  43. package/src/cli/storage.ts +234 -0
  44. package/src/cli/system-command.ts +16 -0
  45. package/src/cli/usage-report.ts +52 -2
  46. package/src/cli/version-skew.ts +46 -0
  47. package/src/codex/account-label.ts +21 -0
  48. package/src/codex/catalog/provider-fetch.ts +4 -0
  49. package/src/codex/transition-state.ts +12 -3
  50. package/src/compatibility/openai-responses.ts +9 -1
  51. package/src/generated/compatibility-version.json +95 -59
  52. package/src/integrations/ownership-policy.ts +24 -5
  53. package/src/integrations/ownership.ts +36 -2
  54. package/src/integrations/state.ts +40 -7
  55. package/src/integrations/writer.ts +21 -3
  56. package/src/lib/admin-secrets.ts +24 -0
  57. package/src/lib/errors.ts +25 -1
  58. package/src/lib/service-secrets.ts +15 -0
  59. package/src/oauth/store.ts +14 -5
  60. package/src/providers/label.ts +34 -1
  61. package/src/responses/turn-termination.ts +107 -0
  62. package/src/server/management/logs-usage-routes.ts +0 -16
  63. package/src/server/management/route-registry.ts +311 -0
  64. package/src/server/proxy-liveness.ts +27 -4
  65. package/src/server/request-log.ts +29 -1
  66. package/src/server/responses/core.ts +80 -0
  67. package/src/service.ts +34 -0
  68. package/src/storage/policy-job.ts +14 -4
  69. package/src/storage/policy.ts +88 -23
  70. package/src/usage/log.ts +44 -4
  71. package/src/usage/summary.ts +10 -0
@@ -10,7 +10,7 @@
10
10
  },
11
11
  {
12
12
  "path": "package.json",
13
- "sha256": "2fde0f72e356fc3d7b6d94175855383a3af5e731101821f6ca0f86fec8d7dfb9"
13
+ "sha256": "7e689925c98460b6a36ffe4f7985bd67143f8d55396fef1fe4d9bae57bbef7ec"
14
14
  },
15
15
  {
16
16
  "path": "scripts/model-metadata.source.json",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  {
44
44
  "path": "src/adapters/base.ts",
45
- "sha256": "858067e7562a2a4ac9a52f40a1bf1e4189e99e8695aa610de2ea43eb36446d8a"
45
+ "sha256": "a7d585f6dfdf07086971fcd93184da1df6ad55fb88e5a3b6777acf6884246947"
46
46
  },
47
47
  {
48
48
  "path": "src/adapters/client-fingerprint.ts",
@@ -58,7 +58,7 @@
58
58
  },
59
59
  {
60
60
  "path": "src/adapters/cursor.ts",
61
- "sha256": "e480eea4ad25f03ec20c2566955390b23a97655619fab5c2b0ad2f1801bd5990"
61
+ "sha256": "d148091a1fe0767a0af1e272ea4d09d41c94a35af3e18dc765eafd9e518eb072"
62
62
  },
63
63
  {
64
64
  "path": "src/adapters/cursor/arg-codec.ts",
@@ -72,17 +72,21 @@
72
72
  "path": "src/adapters/cursor/call-id.ts",
73
73
  "sha256": "85f777eeaae5336851ab9752b638974851dc5e9b687f945f8cc503dde4e7efdf"
74
74
  },
75
+ {
76
+ "path": "src/adapters/cursor/catalog.ts",
77
+ "sha256": "cd9025f58358858f39b2648aebc16233edce33e1451679639eb264631500283b"
78
+ },
75
79
  {
76
80
  "path": "src/adapters/cursor/checkpoint-store.ts",
77
81
  "sha256": "44985c12b4424fed06b376a66ed271cf1b4b5a146b0a539293412e56aeef4a00"
78
82
  },
79
83
  {
80
84
  "path": "src/adapters/cursor/cursor-errors.ts",
81
- "sha256": "b5fb1069d88bf53b4f6de84017646c99452681c22a1bf4abbf6f4b2465a13be4"
85
+ "sha256": "d01201aa672560005136079cf22e79603f91c9efa51648690907ed063fa8376c"
82
86
  },
83
87
  {
84
88
  "path": "src/adapters/cursor/discovery.ts",
85
- "sha256": "40346eab4c211a631a329535102e4f228d2b3d4b005abc4ebb34c5033e772e01"
89
+ "sha256": "605686c4232fb56411626e3c36f86dd2c9166613963075d1dcf9af601ba991b4"
86
90
  },
87
91
  {
88
92
  "path": "src/adapters/cursor/effort-map.ts",
@@ -90,7 +94,7 @@
90
94
  },
91
95
  {
92
96
  "path": "src/adapters/cursor/envelope-echo.ts",
93
- "sha256": "db342228d6398dba2351cb629f962fbc7860293b8ecaa71991103fef07172624"
97
+ "sha256": "837f3742957fc5b931dd489555d4b24954aa2b5caff938ae6f870975601aaf39"
94
98
  },
95
99
  {
96
100
  "path": "src/adapters/cursor/exec-policy.ts",
@@ -186,7 +190,7 @@
186
190
  },
187
191
  {
188
192
  "path": "src/adapters/cursor/request-builder.ts",
189
- "sha256": "92a39b3563aada4a2e47a9ec91a8ed6a89ff1f710ff309371937ea4c071771a9"
193
+ "sha256": "60fee37d28116e7a209678e52ab828c7c77c6e44d07c70d2f97e910cc6e3b3ef"
190
194
  },
191
195
  {
192
196
  "path": "src/adapters/cursor/thread-continuity.ts",
@@ -194,11 +198,11 @@
194
198
  },
195
199
  {
196
200
  "path": "src/adapters/cursor/tool-definitions.ts",
197
- "sha256": "c1e7f0cd96e99d92e072ac473a93fe484dbe1ec305fd0d4fe93befb54e8f8fdf"
201
+ "sha256": "10aba9489b34126287c1160452cb0a9d281f563a05be31255ed3a789b4bf6930"
198
202
  },
199
203
  {
200
204
  "path": "src/adapters/cursor/tool-result-normalize.ts",
201
- "sha256": "bc30f10d0a043cb9c9ce9f7d0f77cf80ffaf41cefec075d975d70522d5059ebc"
205
+ "sha256": "08de68d14426ea524e8fa3b94035a5022a037e3c1fcb807d845b1a29abf4f062"
202
206
  },
203
207
  {
204
208
  "path": "src/adapters/cursor/transport-retry.ts",
@@ -212,13 +216,17 @@
212
216
  "path": "src/adapters/cursor/types.ts",
213
217
  "sha256": "a8d45b8556a0d1542035b654414841bf61e677fb4d19321e71cc9acee623a48e"
214
218
  },
219
+ {
220
+ "path": "src/adapters/exec-tool-result-normalize.ts",
221
+ "sha256": "c722b8c8ae879754ec794bec7d6ffc61f7dd052fcbfdc16a4133e35b7f0c1e7c"
222
+ },
215
223
  {
216
224
  "path": "src/adapters/google-antigravity-replay.ts",
217
- "sha256": "dcb1ef77e7ab24b4ec5867b93a4f5e4d5278eb59f6864bf0628032fe1d37c23d"
225
+ "sha256": "1d730dfea9db3bd42a0718cf0264788d84a73e04716ace61d64ec9369ef7ee20"
218
226
  },
219
227
  {
220
228
  "path": "src/adapters/google-antigravity-wire.ts",
221
- "sha256": "671fc197b9ab46800b64a4d51dec8b80c82e9cf841bb2c244f1087a8de592009"
229
+ "sha256": "5865b21ff20181703f9e02091441902f5a87bd141670669286f2daad0dc4261c"
222
230
  },
223
231
  {
224
232
  "path": "src/adapters/google-errors.ts",
@@ -242,7 +250,7 @@
242
250
  },
243
251
  {
244
252
  "path": "src/adapters/google.ts",
245
- "sha256": "a3cbcc694bf78c946c182b382744636141fc8c6e0182fb1ac93e07e282e8e1da"
253
+ "sha256": "96e83c41c588f5b04658b4a69f804e987912f7033de0aa7938a84c8cf4bf642a"
246
254
  },
247
255
  {
248
256
  "path": "src/adapters/identity.ts",
@@ -254,7 +262,7 @@
254
262
  },
255
263
  {
256
264
  "path": "src/adapters/kiro-constants.ts",
257
- "sha256": "9cc26857a7723e3a2763af8b2d32a717069f107a4e95f06e910d0ecde3bcc3e7"
265
+ "sha256": "4067f26cb61daf58c2452ae7b670e1a6d0144fbb780d3b207fc2afaed8f59c52"
258
266
  },
259
267
  {
260
268
  "path": "src/adapters/kiro-errors.ts",
@@ -294,7 +302,7 @@
294
302
  },
295
303
  {
296
304
  "path": "src/adapters/kiro.ts",
297
- "sha256": "0d6b6a0f1729f10a5412147f272f92bed01344b79985ea5f40279ef4f6a12acd"
305
+ "sha256": "fb0b4e8af70d9b0075dcd9f7173faecb9c421adf7585a215e990b570cba7b5d4"
298
306
  },
299
307
  {
300
308
  "path": "src/adapters/mimo-free.ts",
@@ -306,7 +314,7 @@
306
314
  },
307
315
  {
308
316
  "path": "src/adapters/openai-chat.ts",
309
- "sha256": "7df854f323fe8670826bf785e7f706b590f3135ec4b9df0ecfec47b050dac606"
317
+ "sha256": "3465fa1500f38c87b5f982d1ec46e21908ac8d1c35d5022cb6d2467d87ce4b27"
310
318
  },
311
319
  {
312
320
  "path": "src/adapters/openai-responses-url.ts",
@@ -314,7 +322,7 @@
314
322
  },
315
323
  {
316
324
  "path": "src/adapters/openai-responses.ts",
317
- "sha256": "0eebe2fba8be3a94136b12c561cfcdeaaae177b6470a04415cbb83fc11fedac7"
325
+ "sha256": "68144ef18effe08093d2ee3653bd8ac3cb94a6f594c02298f3612e3c30a96863"
318
326
  },
319
327
  {
320
328
  "path": "src/adapters/registry.ts",
@@ -326,7 +334,7 @@
326
334
  },
327
335
  {
328
336
  "path": "src/adapters/run-turn-queue.ts",
329
- "sha256": "7599ccc46be13507bdec6e27095092efb0b6d84976bcffe0cca972ce08a6da62"
337
+ "sha256": "31b12f11c9c35f3e499c418bf943762f299755d8a68d7bba9fa9371fa5684a43"
330
338
  },
331
339
  {
332
340
  "path": "src/adapters/tool-call-id.ts",
@@ -334,7 +342,7 @@
334
342
  },
335
343
  {
336
344
  "path": "src/adapters/tool-catalog-nudge.ts",
337
- "sha256": "1d32120812b42da60ed24aceecd30fcf94fd2d5cb0a1e65d9fc9198512706b34"
345
+ "sha256": "2f9871474d27ce4224f3a67f822d7200705f41c3bd384a949ebd0907ed838a36"
338
346
  },
339
347
  {
340
348
  "path": "src/adapters/upstream-http-error.ts",
@@ -346,7 +354,7 @@
346
354
  },
347
355
  {
348
356
  "path": "src/adapters/xai-web-search.ts",
349
- "sha256": "4faee031b25e97d2d2131b3f93995b913fd318f318bf066beaa1638fcf8876d4"
357
+ "sha256": "ae910b995207acb29b3ea27324c45267e19a9b8b68e117f258acc931058c3e3c"
350
358
  },
351
359
  {
352
360
  "path": "src/bridge.ts",
@@ -422,7 +430,7 @@
422
430
  },
423
431
  {
424
432
  "path": "src/claude/outbound.ts",
425
- "sha256": "66e88a3492cc6676a4cafb8a08b1767598d830a159d5877e3b7109853ad2963c"
433
+ "sha256": "81e95583b79412ef5111d4f1eb1bef1e64c24a5b69e04011472c0552ee39b677"
426
434
  },
427
435
  {
428
436
  "path": "src/cli.ts",
@@ -430,11 +438,11 @@
430
438
  },
431
439
  {
432
440
  "path": "src/cli/access.ts",
433
- "sha256": "c2a5f7c72741b687aa67bc7fc47ed8f3e2ea78ec693be649a475e1f0ec5f5ea0"
441
+ "sha256": "8bb5b549ab34c949ea0e63afb4c7f7d27df700b68d3cec7953c4bc01bde03940"
434
442
  },
435
443
  {
436
444
  "path": "src/cli/account-api.ts",
437
- "sha256": "692d7e3995ef582c88793c767b4b5ac483be897051626f30716f7c447b855b15"
445
+ "sha256": "b8af0245b0f066d5000622bf72ad5c70982338204b760be851743ca0bca78e4e"
438
446
  },
439
447
  {
440
448
  "path": "src/cli/account-auth.ts",
@@ -446,15 +454,15 @@
446
454
  },
447
455
  {
448
456
  "path": "src/cli/account-extended.ts",
449
- "sha256": "5f7436b6593adac306a6dd7b20f42043002f3b6888b7c31be9ba328b1608e9fb"
457
+ "sha256": "842779d11787f358ac06056fac66d86625fa2b9a69ea58b3da404606ec78ae1f"
450
458
  },
451
459
  {
452
460
  "path": "src/cli/account-main.ts",
453
- "sha256": "056dff0b1ffefc1ad59f4822bc354e41f31b0c05ac2dad1ce5425f5dbcc5c9ce"
461
+ "sha256": "b9b2aba9b8e43bf73b6bc69d183b971ca626077a73a1293febc07c74bd54ce9f"
454
462
  },
455
463
  {
456
464
  "path": "src/cli/account.ts",
457
- "sha256": "25a349ba85417b1da78a51f31c1230eb22fce5610d86d92a161fc062885850ce"
465
+ "sha256": "45c32df94e4b1bb036bc2920b45f372d37ed13bf190bdc3734cdb4488d98d838"
458
466
  },
459
467
  {
460
468
  "path": "src/cli/agent-driven.ts",
@@ -462,12 +470,20 @@
462
470
  },
463
471
  {
464
472
  "path": "src/cli/agent.ts",
465
- "sha256": "c3286d93182fd523bb09337431e2224c96c9c5a345029cc1dff76519842d5f06"
473
+ "sha256": "2f57c73c65010955b15d62638781cd6f211639294d06f921373c5e8e6c4bd692"
466
474
  },
467
475
  {
468
476
  "path": "src/cli/alias.ts",
469
477
  "sha256": "ed2d470ab353004c32d4e02a41b6a74da845d4e17c451692e9627a1b3e9f601c"
470
478
  },
479
+ {
480
+ "path": "src/cli/capabilities-command.ts",
481
+ "sha256": "c1101d205b90889f5b988d29976e6e69eaea8a964be086810e63544c38e69065"
482
+ },
483
+ {
484
+ "path": "src/cli/capabilities.ts",
485
+ "sha256": "04ff7d2272b8e2c2186eb227f3b87131dfa1d207eb328a1599bf6cea018446da"
486
+ },
471
487
  {
472
488
  "path": "src/cli/catalog-prewarm.ts",
473
489
  "sha256": "e8361fe04f7f97615b6446e91e1e11b0372f90e14cbcebf7ab5792949e1bf266"
@@ -478,7 +494,7 @@
478
494
  },
479
495
  {
480
496
  "path": "src/cli/claude-desktop.ts",
481
- "sha256": "edc5fcaf62acdeaafac905bbe84fb5527cbe38d4729d4e94cff29cb7b2b4bf2f"
497
+ "sha256": "605dc19f301e421bdfc72befc1e72487bbe1d7f8d0f182a0c0c0f34592b8ca4c"
482
498
  },
483
499
  {
484
500
  "path": "src/cli/claude.ts",
@@ -510,11 +526,11 @@
510
526
  },
511
527
  {
512
528
  "path": "src/cli/dispatch.ts",
513
- "sha256": "ca23b47604f3f891e16d6bdf103aa71c5fc4e85f1c6f62177178f3540ee72e2b"
529
+ "sha256": "06d982ffba1599a6c8cd897144565b6d71053152b450fd87b76616c15662cedf"
514
530
  },
515
531
  {
516
532
  "path": "src/cli/doctor.ts",
517
- "sha256": "3809a5be6f5223ffcfc9225187dcca8e1f4be0b01d281126fe3722f89a754767"
533
+ "sha256": "b6617c36cce2c004634fd3d9b19a3c50f8ea643b377af85e212f7ef0e4851a1f"
518
534
  },
519
535
  {
520
536
  "path": "src/cli/ensure-desired-integrations.ts",
@@ -526,16 +542,20 @@
526
542
  },
527
543
  {
528
544
  "path": "src/cli/help.ts",
529
- "sha256": "f454affc4966633ece245fe7c0904d11992a50aca2ee54cac4278d680666d4ea"
545
+ "sha256": "20961bb9dfe9a3ae92c0fcb4cdf35bce6c59e0fda8b818c0e0a7bce94e02f086"
530
546
  },
531
547
  {
532
548
  "path": "src/cli/index.ts",
533
- "sha256": "64b43bdeed4ba242bfbf2531f49da3dc2c2292ed2a6a0cef0bb93cbc1222075e"
549
+ "sha256": "b578f2e3b93710b90c738351cf36ed826457e3cb36473ad2c81ab4da75efcca5"
534
550
  },
535
551
  {
536
552
  "path": "src/cli/init.ts",
537
553
  "sha256": "9eeb5b5916c35f5c3994b6ef3dd6e230b30c05605c7d463ff0a604635639cef2"
538
554
  },
555
+ {
556
+ "path": "src/cli/inspect.ts",
557
+ "sha256": "8d20a779a72d5b17d73d13e33b790fbb62e3978823dda439766895c0818a8b99"
558
+ },
539
559
  {
540
560
  "path": "src/cli/integrations.ts",
541
561
  "sha256": "5c54432f2b8c53d83f4b40d72a2922745b095c1c0280fe6188f6b9af33f891bb"
@@ -566,7 +586,7 @@
566
586
  },
567
587
  {
568
588
  "path": "src/cli/observe.ts",
569
- "sha256": "b5f4b46f0eac04df27c82efccf975e8c36c5cde2d71274d5f061d3e5903c4e83"
589
+ "sha256": "4f9b8ce65ff93276837379e91481467ae09bbbce095c02df16048f8fe84f0d98"
570
590
  },
571
591
  {
572
592
  "path": "src/cli/opencode.ts",
@@ -586,7 +606,7 @@
586
606
  },
587
607
  {
588
608
  "path": "src/cli/registry.ts",
589
- "sha256": "a7a276d1a58256170a915a0e8e201db39c53f5d534f92a0f8846656727ddaf38"
609
+ "sha256": "c9b10b4fa58d95956910b538c298c06677ff813a5ba7854d47982cde49de1839"
590
610
  },
591
611
  {
592
612
  "path": "src/cli/root.ts",
@@ -598,7 +618,7 @@
598
618
  },
599
619
  {
600
620
  "path": "src/cli/runtime-api.ts",
601
- "sha256": "2ddea9c613c25ca34a7c1daecac8e21315dd4a98542a5c4833c0aaf63c745f6b"
621
+ "sha256": "cd62d2653ee662e6fea4151e45fcd167f57e06820529659ddc904f89c210c2d0"
602
622
  },
603
623
  {
604
624
  "path": "src/cli/star-prompt.ts",
@@ -610,11 +630,15 @@
610
630
  },
611
631
  {
612
632
  "path": "src/cli/status.ts",
613
- "sha256": "809fe8cf65f422b1405c67a4a5739f79d988f8b421d8bdb8003c9dffd4c51d56"
633
+ "sha256": "88a35f3de7ef2340ac451469e70f149903ec2b46d936543ef3aca8dadcc01a9a"
634
+ },
635
+ {
636
+ "path": "src/cli/storage.ts",
637
+ "sha256": "81791fa7d55e814fc819908a0a4b58736dc485abd4ba5410c9b27e3064fac007"
614
638
  },
615
639
  {
616
640
  "path": "src/cli/system-command.ts",
617
- "sha256": "932f7bb02e3ad4a42eb1728e75f9d0b13d64173eeeb043be1a2d12775495e53b"
641
+ "sha256": "dbea2c1db4cf6e0a42696feabeb3fb1cfd73d668a7a998d45811eb0469e863ff"
618
642
  },
619
643
  {
620
644
  "path": "src/cli/system-restart-client.ts",
@@ -626,12 +650,16 @@
626
650
  },
627
651
  {
628
652
  "path": "src/cli/usage-report.ts",
629
- "sha256": "2e20d647bd24195ee6177b18bc8314d02247c4df13c68ffc5d7444569160ebf9"
653
+ "sha256": "0c590155ff4c4dbb39ea0a91160abf54a1b70e24060eb792df27a36fba98637a"
630
654
  },
631
655
  {
632
656
  "path": "src/cli/v2.ts",
633
657
  "sha256": "bee42074b6cf31c207ce9c08f6d3bf68a9c725dfb39df9abdea09e45fa25ddb2"
634
658
  },
659
+ {
660
+ "path": "src/cli/version-skew.ts",
661
+ "sha256": "5c9cde92783d944bf918600dbb1892bf9ef1102c535a3cbcf25cfde1e5420db8"
662
+ },
635
663
  {
636
664
  "path": "src/clients/config-export.ts",
637
665
  "sha256": "9689b83c97115820171f697838b7535836cfa82b4ec82e07f317f08642bba962"
@@ -642,7 +670,7 @@
642
670
  },
643
671
  {
644
672
  "path": "src/codex/account-label.ts",
645
- "sha256": "7475f09c67f548a8f09e5597c3677a8da6cc330ae9e27b793e67da6a74d26b1b"
673
+ "sha256": "b48a6a2385a8da93679bc8deca761d9b798b7483d0b768553800371a5499a29e"
646
674
  },
647
675
  {
648
676
  "path": "src/codex/account-lifecycle.ts",
@@ -762,7 +790,7 @@
762
790
  },
763
791
  {
764
792
  "path": "src/codex/catalog/provider-fetch.ts",
765
- "sha256": "ef0d30e53b49206d2571a8a2c7070f8129a22606d0a3b1fa4cbeffc71dd577fe"
793
+ "sha256": "7bef7939572c7e66c3970ce15aacf5a18a36ed571fb68515a20f0f85f022f4d6"
766
794
  },
767
795
  {
768
796
  "path": "src/codex/catalog/sync.ts",
@@ -1062,7 +1090,7 @@
1062
1090
  },
1063
1091
  {
1064
1092
  "path": "src/codex/transition-state.ts",
1065
- "sha256": "d33c50794fdea103362868e02d892025164a7e31030a6f0d9d96fd9842637c09"
1093
+ "sha256": "cfa8b2c3c0e161a542416f1f4f88f3f2e229d5c0b6d4c3ef9cad389413dbd6f2"
1066
1094
  },
1067
1095
  {
1068
1096
  "path": "src/codex/upstream-host-health.ts",
@@ -1114,7 +1142,7 @@
1114
1142
  },
1115
1143
  {
1116
1144
  "path": "src/compatibility/openai-responses.ts",
1117
- "sha256": "bec435b3fff28b19fec79f6fe73b3ca5b7242aa7a193439d7e98cbeedbfd5485"
1145
+ "sha256": "c76aefec425a6c9b2360899216863ca97e7a88cf9ce76e7154fb1df7b168c0f7"
1118
1146
  },
1119
1147
  {
1120
1148
  "path": "src/config.ts",
@@ -1242,11 +1270,11 @@
1242
1270
  },
1243
1271
  {
1244
1272
  "path": "src/integrations/ownership-policy.ts",
1245
- "sha256": "22d6ab3de370c177c095e3d0a25148899e3d91329d7c1f5760265c244fca6a1b"
1273
+ "sha256": "1079d8fad8d4cf3adb1700f12e3c9497ec0ad3d9acd0d140c05a8675cff68f35"
1246
1274
  },
1247
1275
  {
1248
1276
  "path": "src/integrations/ownership.ts",
1249
- "sha256": "0b81bca5558e31ffef30b93c2c135ae31234ab1634dda488d8f5ffb285552f83"
1277
+ "sha256": "974d740dc6deab816726879b1d814a660769dce39b2d4856e41c4d0de05ca150"
1250
1278
  },
1251
1279
  {
1252
1280
  "path": "src/integrations/registry.ts",
@@ -1258,7 +1286,7 @@
1258
1286
  },
1259
1287
  {
1260
1288
  "path": "src/integrations/state.ts",
1261
- "sha256": "d98c0e384fa3226ab798b7d9f2da257640deabb4d35da11dd6baae34d8ecc5de"
1289
+ "sha256": "2bc3d2dc60f22636b48c49ec43b88a5f6ab494d92c36a15b803eaa2c526243b6"
1262
1290
  },
1263
1291
  {
1264
1292
  "path": "src/integrations/store.ts",
@@ -1270,7 +1298,7 @@
1270
1298
  },
1271
1299
  {
1272
1300
  "path": "src/integrations/writer.ts",
1273
- "sha256": "25f819c8c576bb2598ecae4084cd2f7c2d1f72f616c4638d5061ac79ef2280f6"
1301
+ "sha256": "73f1d7d44c9141f98a3cc0058acff871ec26b23cb28e75f0270d8fdc531451da"
1274
1302
  },
1275
1303
  {
1276
1304
  "path": "src/lab/artifacts/sanitize.ts",
@@ -1754,7 +1782,7 @@
1754
1782
  },
1755
1783
  {
1756
1784
  "path": "src/lib/admin-secrets.ts",
1757
- "sha256": "779f1ebba088b017945acafd2d1ee960ae95b93065cddb00eba0f6b26a395fa2"
1785
+ "sha256": "4a2b0b36bbde05e58046c89d4b9a9a5ae5948b8329e71eabb365f81f519a88f9"
1758
1786
  },
1759
1787
  {
1760
1788
  "path": "src/lib/admission.ts",
@@ -1818,7 +1846,7 @@
1818
1846
  },
1819
1847
  {
1820
1848
  "path": "src/lib/errors.ts",
1821
- "sha256": "72a1ab2921043966c892e5e8c1a02680f7cc28b3870683985b8833ae5d66e9c5"
1849
+ "sha256": "9a59dc302cbac429d6b848834ac5b9b4f30916fd147775dd3126adde4e24485e"
1822
1850
  },
1823
1851
  {
1824
1852
  "path": "src/lib/eventstream-decoder.ts",
@@ -1930,7 +1958,7 @@
1930
1958
  },
1931
1959
  {
1932
1960
  "path": "src/lib/service-secrets.ts",
1933
- "sha256": "53e83f9865943855c0a5489a9f9fafceb52ca63913fe5a84e4ba1ae83cea095f"
1961
+ "sha256": "2294a011014c249adea0571a1b8e9ce51d76b7c59e654bf9795f360d7ee1b53e"
1934
1962
  },
1935
1963
  {
1936
1964
  "path": "src/lib/shadow-call.ts",
@@ -2130,7 +2158,7 @@
2130
2158
  },
2131
2159
  {
2132
2160
  "path": "src/oauth/store.ts",
2133
- "sha256": "d68c60975ba91aadda30d5a75bcabdad7f265115b280b32cd046aaffaac256a2"
2161
+ "sha256": "09f641d62444259d984d38a6c192d10036c44e2e31b4effa5b62262d55bdcea4"
2134
2162
  },
2135
2163
  {
2136
2164
  "path": "src/oauth/token-guardian.ts",
@@ -2222,7 +2250,7 @@
2222
2250
  },
2223
2251
  {
2224
2252
  "path": "src/providers/label.ts",
2225
- "sha256": "89977ce42ab3de1554dc03ee913281cdcc6829f15ec7ea73343bb5c0d8eec5c5"
2253
+ "sha256": "3685972fdf521fba31a9a7b87fb8a8543969749ae8ff82c51268f84090977c40"
2226
2254
  },
2227
2255
  {
2228
2256
  "path": "src/providers/model-discovery-limits.ts",
@@ -2384,6 +2412,10 @@
2384
2412
  "path": "src/responses/truncated-stop-reason.ts",
2385
2413
  "sha256": "44a1876c045a63f9275410fb9169d2c47ce0c1de309e9cc00a0f51c72698a6dd"
2386
2414
  },
2415
+ {
2416
+ "path": "src/responses/turn-termination.ts",
2417
+ "sha256": "bdfad46010472abd180a2807d54b92795ec5d318607f97dc5c3cc59727e764e3"
2418
+ },
2387
2419
  {
2388
2420
  "path": "src/router.ts",
2389
2421
  "sha256": "f41d54d6fcdb416b2a1702ba1fb905bac67846ed4bfa1b9f6b654c53454e6a89"
@@ -2610,7 +2642,7 @@
2610
2642
  },
2611
2643
  {
2612
2644
  "path": "src/server/management/logs-usage-routes.ts",
2613
- "sha256": "560160c3f7b7b83db17205ee7761e62772154b04304e1db4da6482b3e93cb722"
2645
+ "sha256": "95585f99a0685fc677f32481eeb917b1af04209bcb4f3ea740ab19c2e77fe44f"
2614
2646
  },
2615
2647
  {
2616
2648
  "path": "src/server/management/model-routes.ts",
@@ -2640,6 +2672,10 @@
2640
2672
  "path": "src/server/management/request-history-routes.ts",
2641
2673
  "sha256": "cdc658830f272b3e92151c2cf0a1c2130618075972b9390bf8b263500aae4afb"
2642
2674
  },
2675
+ {
2676
+ "path": "src/server/management/route-registry.ts",
2677
+ "sha256": "6d9d6628c71c43f6b4ca5eb8bf2e7c42bdb69badc0cd5575b69fdb2ec41130e3"
2678
+ },
2643
2679
  {
2644
2680
  "path": "src/server/management/routing-analytics-routes.ts",
2645
2681
  "sha256": "d6cff11ef0a4844095c4b6008b2dfe745ee3c3c5d3ef02fd70518cfee15c6258"
@@ -2702,7 +2738,7 @@
2702
2738
  },
2703
2739
  {
2704
2740
  "path": "src/server/proxy-liveness.ts",
2705
- "sha256": "3c48d0c5eb15dd97c11f723d0919bbf78944c5364020933122ee8f304bbc889d"
2741
+ "sha256": "1ef9fc2322b9a6fbda72c90b99251b4f04da18a2fa0e49ec5a2d924d84db5de8"
2706
2742
  },
2707
2743
  {
2708
2744
  "path": "src/server/readiness.ts",
@@ -2726,7 +2762,7 @@
2726
2762
  },
2727
2763
  {
2728
2764
  "path": "src/server/request-log.ts",
2729
- "sha256": "c3e99a322bf89ecdecabcebd8949dd3e7fc4b4fbf968427058851d5b2f50c6b1"
2765
+ "sha256": "631e0f53d55d6ad925f5d4ad069d9f1211aeae15304fe0739ae47bbb6d91c927"
2730
2766
  },
2731
2767
  {
2732
2768
  "path": "src/server/responses-custom-tool-repair.ts",
@@ -2798,7 +2834,7 @@
2798
2834
  },
2799
2835
  {
2800
2836
  "path": "src/server/responses/core.ts",
2801
- "sha256": "56e7cd24b8fde6c7a56bba31259d7469cbcc4a8598e5daa465033ef832846318"
2837
+ "sha256": "604404b10991069ff3018c80877d43161d948d5ca8b34980a45d57660360a382"
2802
2838
  },
2803
2839
  {
2804
2840
  "path": "src/server/responses/empty-completion-guard.ts",
@@ -2886,7 +2922,7 @@
2886
2922
  },
2887
2923
  {
2888
2924
  "path": "src/service.ts",
2889
- "sha256": "9be297cab5c0b059030e2b60c0954420b0b43b4586039ea6792e66d7a5a9ea7f"
2925
+ "sha256": "a71c0a0e31116fb982601bb6711f28ad9581e1fb774c42fd9a93d68e9b1b56c2"
2890
2926
  },
2891
2927
  {
2892
2928
  "path": "src/sidecar/auth.ts",
@@ -2910,7 +2946,7 @@
2910
2946
  },
2911
2947
  {
2912
2948
  "path": "src/storage/policy-job.ts",
2913
- "sha256": "25b014d6b188505ab713640bb9ba223807d33c4258d15450a7b3397adec1f4bc"
2949
+ "sha256": "6c2da43d4aef0c5cc0fa10e70148c0e5c98666629f32e785c274e69daf448263"
2914
2950
  },
2915
2951
  {
2916
2952
  "path": "src/storage/policy-scheduler.ts",
@@ -2922,7 +2958,7 @@
2922
2958
  },
2923
2959
  {
2924
2960
  "path": "src/storage/policy.ts",
2925
- "sha256": "64df434d0bc5fb2c9f9ef3cada20c34a439f1bd658a23c251b3b17cdadf4412d"
2961
+ "sha256": "b9192dd06aacfa90f263a86c7dcc62da4a9f1a640f9fd44df0c5bc37a6ae6113"
2926
2962
  },
2927
2963
  {
2928
2964
  "path": "src/storage/restore-job.ts",
@@ -3058,11 +3094,11 @@
3058
3094
  },
3059
3095
  {
3060
3096
  "path": "src/usage/log.ts",
3061
- "sha256": "155923e57b26437f352eb19775836143ba9e625b8d67d5686e49312e4c422399"
3097
+ "sha256": "918b48085fdb42773fda28e532a756c351de2c6c52b01068af979b130fc4ef1e"
3062
3098
  },
3063
3099
  {
3064
3100
  "path": "src/usage/summary.ts",
3065
- "sha256": "e5cfee86cbef527fcfaee7b381a40818c1428a770ba31e8c1fee104c5527b8e4"
3101
+ "sha256": "16275a6650c10b3162bd9e6dc134f0406365bceb43e16231dd185c7244cf51b7"
3066
3102
  },
3067
3103
  {
3068
3104
  "path": "src/usage/totals.ts",
@@ -12,7 +12,7 @@ import {
12
12
  type ManagedContribution,
13
13
  type ManagedFragment,
14
14
  } from "../clients/config-export";
15
- import { canonicalContribution, fingerprint } from "./ownership";
15
+ import { canonicalContribution, fingerprint, semanticContribution } from "./ownership";
16
16
 
17
17
  type JsonObject = Record<string, unknown>;
18
18
 
@@ -124,11 +124,10 @@ export function validRefreshablePaths(
124
124
  });
125
125
  }
126
126
 
127
- /** Fingerprint a contribution after removing only its explicitly refreshable paths. */
128
- export function protectedContributionFingerprint(
127
+ function contributionWithoutRefreshablePaths(
129
128
  contribution: ManagedContribution,
130
129
  refreshablePaths: readonly (readonly string[])[],
131
- ): string {
130
+ ): ManagedContribution {
132
131
  const fragments = contribution.fragments.map(cloneFragment);
133
132
  for (const refreshablePath of refreshablePaths) {
134
133
  for (const fragment of fragments) {
@@ -137,5 +136,25 @@ export function protectedContributionFingerprint(
137
136
  break;
138
137
  }
139
138
  }
140
- return fingerprint(canonicalContribution({ ...contribution, fragments }));
139
+ return { ...contribution, fragments };
140
+ }
141
+
142
+ /** Fingerprint a contribution after removing only its explicitly refreshable paths. */
143
+ export function protectedContributionFingerprint(
144
+ contribution: ManagedContribution,
145
+ refreshablePaths: readonly (readonly string[])[],
146
+ ): string {
147
+ return fingerprint(canonicalContribution(
148
+ contributionWithoutRefreshablePaths(contribution, refreshablePaths),
149
+ ));
150
+ }
151
+
152
+ /** Semantic protected fingerprint that ignores JSON object-key order only. */
153
+ export function semanticProtectedContributionFingerprint(
154
+ contribution: ManagedContribution,
155
+ refreshablePaths: readonly (readonly string[])[],
156
+ ): string {
157
+ return fingerprint(semanticContribution(
158
+ contributionWithoutRefreshablePaths(contribution, refreshablePaths),
159
+ ));
141
160
  }
@@ -22,8 +22,38 @@ export function fingerprint(text: string): string {
22
22
  }
23
23
 
24
24
  /**
25
- * Canonical bytes of a contribution. Fragments are sorted by path so two builds
26
- * of the same contribution hash identically regardless of emission order.
25
+ * Canonicalize JSON object members recursively for semantic comparisons.
26
+ * Arrays stay ordered because their position can carry configuration meaning.
27
+ */
28
+ function semanticJsonValue(value: unknown): unknown {
29
+ if (Array.isArray(value)) return value.map(semanticJsonValue);
30
+ if (value === null || typeof value !== "object") return value;
31
+
32
+ const record = value as Record<string, unknown>;
33
+ return Object.fromEntries(
34
+ Object.keys(record)
35
+ .sort()
36
+ .map(key => [key, semanticJsonValue(record[key])]),
37
+ );
38
+ }
39
+
40
+ /**
41
+ * Stable semantic bytes of a contribution. Third-party clients may
42
+ * re-serialize JSON object members in a different order; that formatting-only
43
+ * rewrite must not look like a protected-value edit.
44
+ */
45
+ export function semanticContribution(contribution: ManagedContribution): string {
46
+ const sorted = [...contribution.fragments].sort((a, b) => {
47
+ const left = a.path.join("\u0000");
48
+ const right = b.path.join("\u0000");
49
+ return left < right ? -1 : left > right ? 1 : 0;
50
+ });
51
+ return JSON.stringify(sorted.map(fragment => [fragment.path, semanticJsonValue(fragment.value)]));
52
+ }
53
+
54
+ /**
55
+ * Legacy-compatible bytes used by existing persisted fingerprints. Fragment
56
+ * paths are stable, while nested object insertion order remains exact.
27
57
  */
28
58
  export function canonicalContribution(contribution: ManagedContribution): string {
29
59
  const sorted = [...contribution.fragments].sort((a, b) => {
@@ -41,11 +71,15 @@ export interface OwnershipRecord {
41
71
  fileFingerprint: string;
42
72
  /** Hash of our contribution — detects catalog/port drift. */
43
73
  blockFingerprint: string;
74
+ /** Key-order-independent companion for JSON clients that normalize objects. */
75
+ semanticBlockFingerprint?: string;
44
76
  /**
45
77
  * Hash of the fields the client must not rewrite. Present only when a
46
78
  * client has explicitly declared runtime-derived paths below.
47
79
  */
48
80
  protectedBlockFingerprint?: string;
81
+ /** Key-order-independent companion to `protectedBlockFingerprint`. */
82
+ semanticProtectedBlockFingerprint?: string;
49
83
  /**
50
84
  * Exact document paths a client may derive after apply. These are recorded
51
85
  * per operation so later catalog changes cannot widen an older grant.