diff --git a/.i18n-state.json b/.i18n-state.json index e5ef09c2d63b..809c467d6020 100644 --- a/.i18n-state.json +++ b/.i18n-state.json @@ -6715,333 +6715,333 @@ "locales": { "pl": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "35b147f9e83a53385d60de4561f422477704c5ed3f533af9f16c5410de40953e", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "19e8829cda756f7f0285f9a1dc1afc4b80feda3fbd98c327dcb92479ca7bfbd5", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ar": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "d4e8529e416c22f8aed79a11c42f03181869131e33b6a858f2b6a029199770c4", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "abed913d5bce6c385cf7f0d9f59119cfdcffeeac82bae783823532dfc404df12", + "updated_at": "2026-10-10T03:02:50.016Z" }, "cs": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "6d953a149904a64f89f4f3dd5c595e81527644dbbf273019978303c26b7893ab", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "a81bba85c2997f5ade3113834cf1651353c4d8e291de6eb3bf460d0c945d9fa5", + "updated_at": "2026-10-10T03:02:50.016Z" }, "bg": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "753919fd7560236f852174924db016eaa47a812e1dd8c2ae179aea25be654110", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "d6f607d891d0584c9d647c88e53519462f7b161e365e22a0de9f77ba63a70031", + "updated_at": "2026-10-10T03:02:50.016Z" }, "bn": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "ee04e8f1708dff235af9cd2c7265c1a170a6b54deb16f2a60bf693d1f8fd304c", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "00a0c2130a16e08578839e8b06fcba2d66ec172a19ba6a5871c9a4fce9c666e4", + "updated_at": "2026-10-10T03:02:50.016Z" }, "az": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "7a61b5af37ed534bfb07488b57e5eb5933c2e29d57f7df95d07a936dc9221d92", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "429c4b0b333bf5cba949bc82c1217cf142cd75c47a32a3d6c1c3ade838f59db2", + "updated_at": "2026-10-10T03:02:50.016Z" }, "da": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "951b9b0ac193d1805bd7534e937fcb9b1472eb878bf00da771883626dab5ff5a", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "825c0efda78a96f7d4b1c2f24b396f9f88dc0531fda3db4da4b6b80832da6c05", + "updated_at": "2026-10-10T03:02:50.016Z" }, "de": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "64f9948503991166703adf9ebe134def34f140f56be189243df1676db13d1e81", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "c6dbb1d7ed641cc3f724fa5318a9f94a1395de903b770a96c58dc919ef726fac", + "updated_at": "2026-10-10T03:02:50.016Z" }, "es": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "2464055faaef1a504778faf1f45f223a87d82d52f3c902b9decb15a8fb58ced6", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "4e14d9dd15e5cf9bfa5d7efcbf7063151cde18295fbdec1ffde3be027edee70e", + "updated_at": "2026-10-10T03:02:50.016Z" }, "et": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "e67c421588190b5bf12fe102ae8280ac2e986e0285a0e374679f710531bc977a", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "21c29f57ccf8d8b6abf1a92c668b4a48f60db6b534dd4711e977c03ddc17d193", + "updated_at": "2026-10-10T03:02:50.016Z" }, "el": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "a77c3e9ef33b7c1ba155711730f187098a85d5852da35929a13ec184735da540", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "680cc7d9ef2476a95001df70200a8dbff689ec44d19bf6cc23eb7afdd336a400", + "updated_at": "2026-10-10T03:02:50.016Z" }, "am": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "0c099fbc09cbad69d405ca406f0be50c8ed2232e43670d9de02fc67170b4b72d", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "b521b9eefbe5d464e61aaaa6f9d18fdb572c84190c6ab08c784caf138f7345c8", + "updated_at": "2026-10-10T03:02:50.016Z" }, "fr": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "412c9e9492e62464b408a07726ff2ae5d163b84ad1f113f6c23b58616fa9f6db", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "8862e6752423df5216aeb1acb6c52e09328584c7187fb112fcad2e0767443aba", + "updated_at": "2026-10-10T03:02:50.016Z" }, "fa": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "c92da5784b7306ffbccae1bad2f6f689a6c39c6da2ff906ffb71221adeceffc3", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "6941aaf5aee443a01d8b9ff616d55e7ad5b501dd0997a17d33e9c181918ac184", + "updated_at": "2026-10-10T03:02:50.016Z" }, "fi": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "1cdb1886d8f3e0c83d2b53df647d18cf374686b644f4c0f97a8ad46f37dbc5fb", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "c32fe61a9cd9ffde0144d4eb1968da48c2fe9bfab5f56d8ee0027fad71c15eee", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ga": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "fb0f2222e21d871894bad12f04090ed55f3c4164edac605ff695d93adbc72ac0", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "f9d77b4a87f1d982379942c2abf7c5bdcb997b003eb7bf4380ab1a70a960860d", + "updated_at": "2026-10-10T03:02:50.016Z" }, "gu": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "f8fa5ca3c26cc58e19046737db115a70788f68f0294c09c9e686eea5ce69b798", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "334d62021333f70a132171af7ba372b1c27f20cc992637812682ce85c535bd1a", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ha": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "460366f4d67db2c92f70a2064a3362167dbf532af8672ed79bc15b76b754455e", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "9eb0d9446e2ac73d708bb299d16db61491a84a935e9ee7bc2c0a2b3596a88c68", + "updated_at": "2026-10-10T03:02:50.016Z" }, "he": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "9fdbd912efa4be034868cb9c9da1d2d8b9c2d2d9fca81862c3dab46a0fa75b56", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "5ab5dd9ca739de2c2c4639b7acb1a512cd9c5a0b2267307222f216db217f18f8", + "updated_at": "2026-10-10T03:02:50.016Z" }, "hi": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "dfa9e95b05adb2d960b2205371b56e9f44444cce412d0c031a467dc489332468", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "00f1cf922f804867ba20f5650eb59729cc4eb19bac513798a5bfdf475de2d7fd", + "updated_at": "2026-10-10T03:02:50.016Z" }, "hr": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "18dab2f587e42c97d1cf1c2429d76d48f2093f04ce3608521e75a97cc058ce38", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "17b2690f989c434c0bb1076daffb9d8087d69c30876e97383e87477542e4b87a", + "updated_at": "2026-10-10T03:02:50.016Z" }, "hu": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "ca11da4fba4a909c615d012d0fc6ab0edd08ebb8673185c02c64783add8b4eaf", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "13c69e9ae1ce11bf42983c263e75749cc6613f66394c921a5c0a7a0a8969f0a0", + "updated_at": "2026-10-10T03:02:50.016Z" }, "hy": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "6deeb56205bd505ed2f279fba8339aa7eac09b0c9c74f6239325f5690cebae48", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "e854e29a4313a772262781d5048a10a568798655bc951fd235c4be2c8a16dabd", + "updated_at": "2026-10-10T03:02:50.016Z" }, "id": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "a919545a14c0943f92414dbd55335888840920873ebe567b56b11ba55b014c99", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "709c6a8a5224cfbc98963968e86a8814931eee425326290fb745ac08462b420e", + "updated_at": "2026-10-10T03:02:50.016Z" }, "it": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "d3758cb8ec00f198db9c4d7d61ff39f78518f219e0337f2106d11f79859247e2", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "89b8ea3dc4d39de63452c6b6cba82710a35ea8d40a6a26c7da7ab5cac9ebd6b8", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ig": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "87aa496168c355214be8ea9f64e47b7af2487a5b6fb479df33b6874dd8e18df0", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "cb5d172d39fa3f3a2d49e89ae58e0b1b9c5c9e69858cc8cd08c0f20e5be9ddbc", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ja": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "0976f214a97d7bca175f5d5b5dbc12a9ff6fb3abc8dd070697ee34118b765d22", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "5bc7ab2c1779224f26b5cff3354d91c68baa1ed9b83074b55a03276ede4524d3", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ka": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "769c5e2f0214c44a37d5ff2b8e572cf88474ae1f01bc8ec6b40b11e19a2964b1", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "80e04f3d1066aa552b97dd10af066f492758fc7caa6ae8d9b24f5f60d8b32877", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ko": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "1a853bee4c9f9f44d080ef93633536fcec143271ec1176c5e55b45ddd321cf1a", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "c7d89e1f6b1f85d8783e998f5c81b629329ef3a3785e18c90a5ed0f637be9a8d", + "updated_at": "2026-10-10T03:02:50.016Z" }, "kn": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "5e888eb747bab9a4ee77080fedeab9a1250a4e9f8e3e3df6d35c6b3a37a5896f", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "aa3f359d83c6c20cc31aafc8c41a3754f8b8f139dca146753c5e2c0fe9da1863", + "updated_at": "2026-10-10T03:02:50.016Z" }, "km": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "8df15688bca5bd69eb6895652653697cb471d5a4a574dba6da41d64dae40c321", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "840cf7fab5a7080400575ee0b3dddf44ba2acd6356a0d9f37c8d1b7f6c1429b3", + "updated_at": "2026-10-10T03:02:50.016Z" }, "lt": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "e79c516ad0fc48c91e8a34443e1c7e097be75ff0561370e1c93bec2b9efeb17b", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "3337838a3b502c9feef9aa163756efbc600318db562d70b9d6181736f13c5ab8", + "updated_at": "2026-10-10T03:02:50.016Z" }, "lv": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "19b687a408878afc5c3df9246415e9a549765fce8b315f97895d0b935c4bb412", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "867f1323f389a65e5eabdb9ca31df5ff2e0e396d88ed490864fd4d1e364abb18", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ml": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "0f6efae4cc1332194ad6278f692450fa74cb3b22f9afa4de27f14fa9f2a91bf8", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "a8e718db72420d32fd40a5764721784b391e559ab29113a02a5cd422c81fc332", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ms": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "c547d990331a5e80a84caf575915d0d96d163d115a1b74faad24d2564ad321cc", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "ff7ef07c5504dfe18f46f306e36f8731a643c13c2e09ff4760d5b6db2d50712f", + "updated_at": "2026-10-10T03:02:50.016Z" }, "mr": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "ff32e3cb511da43416a9be2943c84ab18333cb6bd6abe8dfb38cc0951e946347", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "05e00a36d998d6b918e3e4f965576240c8f08fc13500c869043ccd486a017b0d", + "updated_at": "2026-10-10T03:02:50.016Z" }, "mt": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "5c81c5d36fd336b92dc9dadaa6f45a10a93296ab159d5b914736b750ca62a586", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "9771530c0cb9d5959f483b23d9a74981a0fa8a123cd139992761b4c422d7cdfe", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ne": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "599f6e960fa87ba8dd3c07b01b4b973da7cb4b984114cf096beae9ee88b1ea42", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "af6c16266b82ac3c3f6f5f96b0134c88526e534b62f1c2a50c57fad758f0951e", + "updated_at": "2026-10-10T03:02:50.016Z" }, "my": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "5e418a12d76fdbe91bbbe983d8cb703d492d0d3f3c314526fb97125be7dab9b7", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "a99820201782237a685ba97ceac38b1b6b0b143e5594805ba262792cdcef0131", + "updated_at": "2026-10-10T03:02:50.016Z" }, "nl": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "aa0858319c20877ea94d1ad5290e305f8e1ecba621a506a01a18579be769426f", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "f535a9c72ccb6816bc3a402758eb65a55cea144ffc7533c6eba851a073b8f135", + "updated_at": "2026-10-10T03:02:50.016Z" }, "no": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "c4ef58c83e54867d970de852ccc5ceebd814d7859527e107ef3b44d4a66de22b", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "67fe1730f7224eb221ba0edfa755666772e5463252ccfba176c708420f665c6e", + "updated_at": "2026-10-10T03:02:50.016Z" }, "phi": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "7b45f231c2b7bf76e4bda9201c46ddf6bef9606943e4e4c3b334214b7f31c480", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "0ed6f631b67c1b4674fc1107fefd5057c3a038c3f3f6590eed91349542511bb1", + "updated_at": "2026-10-10T03:02:50.016Z" }, "pt-BR": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "25a0fed21a9cda2114ef33efb66edfbcf4214fedd21bb6b3d81057be8c52b2b3", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "5df9a04673b0cae30bf0cd9bc4c8447bd935e9f522b54c63a64f48589abe173d", + "updated_at": "2026-10-10T03:02:50.016Z" }, "pt": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "a4cc1af4602c3fb4dae497e0e363ccdec6422f1b856798e0ec393111eee92f9a", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "d70169abd2af9efee129ae414f6472aef80c455b087515a298333c7e7068719a", + "updated_at": "2026-10-10T03:02:50.016Z" }, "pa": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "a08c42997585c768bb63f2310549936aacc7685488a044ffd5c7f52e2950c043", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "0d456fa4b2075a16fc05caea0f545c93875c6ebc7ecdaccc7d6ddc9ee796bf74", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ro": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "11e0ca93753eb4aecd6585c75a6f7a09d37c19c44a3e8ed4a5379bfae39f69e2", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "47fb64b92c54e38be3a2efa8be36367bfb1d70b3cb9bd59163a38c504578cfb8", + "updated_at": "2026-10-10T03:02:50.016Z" }, "or": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "540dbc86b13825f49116e23fa9a7deb2bd6189cb0b08b59edf39d7bb0cd13781", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "b7a074fb104b5b38ebc5771662d230f7b465672d64110a8125f3804c40fe052e", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ru": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "c0ea7f133fd216a4a520d3d662a52addcf7a67b8ccccc190ff62576d54a9216a", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "35a45a80b80a39f72552748b10812813a297667eedf7f54166b1ce2d25f1c659", + "updated_at": "2026-10-10T03:02:50.016Z" }, "sk": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "862605336ea6eec0fb3ce884a97a82d67d78970afc7b8804c30b45498a4a7015", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "07240875e3d87d2f1ea98de44b9f6d96a9536c2a3c205d52b63b3765cf83d432", + "updated_at": "2026-10-10T03:02:50.016Z" }, "si": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "9338da6fe845ffc4f2495680c2faf827c4c4d6b4d1de43d2b614fb594a0726d9", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "951752a8523177a0556fc05a46ec28a51055744ac2a91751c47895eac57560f2", + "updated_at": "2026-10-10T03:02:50.016Z" }, "sl": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "783422c3028a6489370ad495ab3260d5051205c1d28146e11925a136b1804c30", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "c6852e3173ac3e27e0e732c2a4b7e9f05414ce21a0e1e3ea0f1196c5917ed9aa", + "updated_at": "2026-10-10T03:02:50.016Z" }, "sv": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "3afe6b3f0b0b8a410a13c97a3e508ab0f6430c86e7ac1505071d33ce5d2e1ed4", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "20d5804852cb784d34ecf1b31b70ad1351eef6975211ba743c517b54daaca8d5", + "updated_at": "2026-10-10T03:02:50.016Z" }, "sr": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "3324f3c737f35750668fcc92331b623a1209808691f9da88eafa93fe9a6ae97a", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "8864e031e5eafad22b5e7c94639cddec63927e6c8095c9a2eb79ec6df0c8734b", + "updated_at": "2026-10-10T03:02:50.016Z" }, "sw": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "b7cab5b9e8d504d2bf37dc969d50b225ea701a488f627e4e7180351c7dec503b", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "17d992d4078ba1055403314cf132cf3e39922d55d497c54ffde398b326a208ff", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ta": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "e2107026b10695d1b98f1be67bec70f2d475ec0ab992e2785c057ebe59af246b", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "0c323e5a1d8b02e9e82b8d766e782ab4deb8e2fe3e0e07818ac9673839063fa1", + "updated_at": "2026-10-10T03:02:50.016Z" }, "te": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "e6d0b59d1514bc3011cd95f13affa9b1a9366103a9319357f37d05b1f764bd51", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "f9ef7d0e022efaea429343121d0338f144b9ecc4d28cc313e78cd317a005f1bf", + "updated_at": "2026-10-10T03:02:50.016Z" }, "th": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "d42070f4abe1d97a600543462b166e1303aebca7c6d82d7421417dd000b210bc", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "9a665f54b1141e4c4c4b90d46a5ff0e1dc3d7c2c50b8acbd057d846048019bb9", + "updated_at": "2026-10-10T03:02:50.016Z" }, "tr": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "d9549521b5e2c1d9b223b5203861413b97073e3d461a4fc370b7c424e5e05e81", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "623523749938c1c21a1f01d50e5b9f3d239a710d45961d3d1453d2e2ac47531a", + "updated_at": "2026-10-10T03:02:50.016Z" }, "uk-UA": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "58f7cb4bd38ae51290a88c55942e0463898d006e04165c4b413d34c0a61ffe15", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "74dff350b3867a4d9c5cb044cd2865f5acc58a430666699cb07f4b3b1cfdab99", + "updated_at": "2026-10-10T03:02:50.016Z" }, "ur": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "44724a6f1d5b97e92a346eaa0b80e29e6b5731f1a294feae632889b82f21efa4", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "655b99813a0d200a953627171735cb08447ddb7344583cf45bc5233e58e8386d", + "updated_at": "2026-10-10T03:02:50.016Z" }, "vi": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "4faf757e87b48c772bf3d73e62c916336d9ce7b31aad185d147e7cdf5eddefec", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "50b382e676996159f7633b464efe5625c98057427cc0c75285593fcc5ab550b1", + "updated_at": "2026-10-10T03:02:50.016Z" }, "zh-CN": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "4192f3abf8198153c942e7fdf2de9cadbc03b906d92b193d35cef4eb69dd3bda", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "595ed483d753a968edd4db8cc5f5e563b8ae922c4baf8c0246be3c7507d1f052", + "updated_at": "2026-10-10T03:02:50.016Z" }, "uz": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "60b12635a1db764be89a6f916c72a3098f2062a598c1b521fd14f34a28a207f9", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "dcb3aa4d4b515baaf1dbdc8913c9f23202d26fd9ef8cf594025fd2feb656136c", + "updated_at": "2026-10-10T03:02:50.016Z" }, "zh-TW": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "e976c495b9419cc1227c1325244daef3547b1ca7370694878638204f0eb64d96", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "4600d2389c1567fd9cc3bba8d436b7f015c6f16938c979b66957c66b160238ad", + "updated_at": "2026-10-10T03:02:50.016Z" }, "yo": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "4b8e455430888905054d6db368311d2f6bd441db4d9e20e6bb4b5ae378c90b2c", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "7f16db7bf629e56d92cd18803b702271b165e4eac238512b5c7065de40e1811e", + "updated_at": "2026-10-10T03:02:50.016Z" }, "bs": { "source_hash": "5d69aefb81fff9d3a1cb9430f527f25f488643e742ba07f1ce6b512deec02326", - "target_hash": "ba2a54c98000316a2a9b1213b6e52a9c0fc6a7a1ec9efda0b193d0653a282573", - "updated_at": "2026-10-07T21:19:14.074Z" + "target_hash": "33cd3454f7c21893427364a311e6ec077a3d76e0d776c0c4bf8290ea847406c6", + "updated_at": "2026-10-10T03:02:50.016Z" } } }, diff --git a/changelog.d/fixes/15260-kiro-reasoning-liveness.md b/changelog.d/fixes/15260-kiro-reasoning-liveness.md new file mode 100644 index 000000000000..a0dd9954f8c4 --- /dev/null +++ b/changelog.d/fixes/15260-kiro-reasoning-liveness.md @@ -0,0 +1 @@ +- **fix(kiro):** Preserve activity from native signature-only reasoning frames so the stream content watchdog can wait for the answer without exposing signatures. Metadata-only stalls, the active-stream deadline, and client cancellation remain enforced ([#15260](https://github.com/diegosouzapw/OmniRoute/issues/15260)). diff --git a/docs/architecture/RESILIENCE_GUIDE.md b/docs/architecture/RESILIENCE_GUIDE.md index 49ce219cba58..674f3f01040f 100644 --- a/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/architecture/RESILIENCE_GUIDE.md @@ -114,6 +114,12 @@ turn. They are still not model output, so a turn that ends with reasoning only i reported as empty, and a turn that stops reasoning and only sends heartbeats still trips the watchdog. +Kiro's binary `reasoningContentEvent` frames with a non-empty signature preserve this +reasoning activity through the executor as an empty `reasoning_content` delta. The signature is +not forwarded. Metadata, incomplete frames and empty signatures do not restart the +content budget; the independent active-stream timeout and client cancellation still +apply (`open-sse/executors/kiro/reasoning.ts`). + **Terminal states (NOT cooldowns):** - `banned` — set by banned-keyword / account-ban detection (see [BAN_DETECTION](../security/BAN_DETECTION.md)), and by three consecutive upstream per-request refusals (`request_rejected`, e.g. Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); a single refusal only cools the connection down diff --git a/docs/i18n/am/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/am/docs/architecture/RESILIENCE_GUIDE.md index 3c0a149f9cd5..fca7965a2e90 100644 --- a/docs/i18n/am/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/am/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute ሦስት የተለያዩ ግን ተዛማጅ የመቋቋም ዘዴ **የተመሳሳይ ጊዜ ጫና መከላከያ:** በአንድ ጊዜ የሚከሰቱ አለመሳካቶች የማቀዝቀዣ ጊዜውን ከመጠን በላይ እንዳያራዝሙ ወይም `backoffLevel`ን ሁለት ጊዜ እንዳይጨምሩ ይከላከላል። +ባዶ ያልሆነ ፊርማ ያላቸው የKiro ሁለትዮሽ `reasoningContentEvent` ፍሬሞች የማሰብ እንቅስቃሴን በአስፈጻሚው በኩል እንደ ባዶ `reasoning_content` ዴልታ ያስቀጥላሉ። ፊርማው ወደ ደንበኛው አይተላለፍም። ሜታዳታ፣ ያልተሟሉ ፍሬሞች እና ባዶ ፊርማዎች የይዘት መጠበቂያ ጊዜን እንደገና አያስጀምሩም፤ ገለልተኛው የንቁ ዥረት ጊዜ ገደብ እና የደንበኛ ስረዛ አሁንም ተግባራዊ ናቸው። (`open-sse/executors/kiro/reasoning.ts`). + **የመጨረሻ ሁኔታዎች (የማቀዝቀዣ ጊዜያት አይደሉም):** - `banned` — የታገደ ቁልፍ ቃል / የመለያ እገዳ ሲገኝ ይዘጋጃል ([BAN_DETECTION](../security/BAN_DETECTION.md)ን ይመልከቱ)፤ እንዲሁም በሦስት ተከታታይ ከውጫዊው አገልግሎት በእያንዳንዱ ጥያቄ ላይ በሚደርሱ እምቢታዎች (`request_rejected`፣ ለምሳሌ Anthropic OAuth 403 "ጥያቄው አልተፈቀደም" — `open-sse/services/requestRejectedStreak.ts`)፤ አንድ እምቢታ ብቻ ግንኙነቱን ለማቀዝቀዣ ጊዜ ብቻ ያስገባል diff --git a/docs/i18n/ar/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ar/docs/architecture/RESILIENCE_GUIDE.md index 26a86c7d569d..5ccddef18465 100644 --- a/docs/i18n/ar/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ar/docs/architecture/RESILIENCE_GUIDE.md @@ -91,6 +91,8 @@ **آلية منع الاندفاع المتزامن:** تمنع حالات الفشل المتزامنة من إطالة فترة التهدئة أكثر من اللازم أو زيادة `backoffLevel` مرتين. +تحافظ إطارات Kiro الثنائية من نوع `reasoningContentEvent` ذات التوقيع غير الفارغ على نشاط الاستدلال عبر المنفّذ، باستخدام فرق `reasoning_content` فارغ. لا يُمرَّر التوقيع. لا تعيد البيانات الوصفية والإطارات غير المكتملة والتوقيعات الفارغة بدء مهلة المحتوى؛ ويظل حد مدة البث النشط المستقل وإلغاء العميل ساريين. (`open-sse/executors/kiro/reasoning.ts`). + **الحالات النهائية (ليست فترات تهدئة):** - `banned` — تُعيَّن عند اكتشاف كلمة محظورة/حظر حساب (راجع [BAN_DETECTION](../security/BAN_DETECTION.md))، وكذلك بعد ثلاث حالات رفض متتالية من المنبع لكل طلب (`request_rejected`، مثل خطأ Anthropic OAuth ‏403 "الطلب غير مسموح" — `open-sse/services/requestRejectedStreak.ts`)؛ لا يؤدي الرفض الواحد إلا إلى وضع الاتصال في فترة تهدئة diff --git a/docs/i18n/az/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/az/docs/architecture/RESILIENCE_GUIDE.md index a6f06e2cdb94..13d1c67c8133 100644 --- a/docs/i18n/az/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/az/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ Reqressiyadan qorunma testi: `tests/unit/provider-cooldown-window-gate.test.ts`. **Eyni anda sorğu axınının qarşısını alan qoruyucu mexanizm:** paralel xətaların gözləmə müddətini həddən artıq uzatmasının və ya `backoffLevel` dəyərini iki dəfə artırmasının qarşısını alır. +Kiro-nun boş olmayan imzalı ikili `reasoningContentEvent` kadrları icraçı vasitəsilə boş `reasoning_content` deltası kimi mühakimə fəaliyyətini qoruyur. İmza ötürülmür. Metaməlumatlar, natamam kadrlar və boş imzalar məzmun üçün vaxt limitini yenidən başlatmır; aktiv axının ayrıca vaxt limiti və müştərinin ləğvi qüvvədə qalır. (`open-sse/executors/kiro/reasoning.ts`). + **Terminal vəziyyətlər (gözləmə müddəti DEYİL):** - `banned` — qadağan edilmiş açar söz / hesab qadağası aşkarlanması ilə (baxın: [BAN_DETECTION](../security/BAN_DETECTION.md)), həmçinin yuxarı axından hər sorğu üzrə ardıcıl üç imtina ilə təyin edilir (`request_rejected`, məsələn, Anthropic OAuth 403 "Sorğuya icazə verilmir" — `open-sse/services/requestRejectedStreak.ts`); tək bir imtina yalnız bağlantını gözləmə rejiminə keçirir diff --git a/docs/i18n/bg/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/bg/docs/architecture/RESILIENCE_GUIDE.md index 06fe43ccc207..478220a2a6fa 100644 --- a/docs/i18n/bg/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/bg/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute има три отделни, но свързани механизма **Защита срещу лавинообразни едновременни заявки:** предотвратява прекомерното удължаване на периода на изчакване или двойното увеличаване на `backoffLevel` при едновременни грешки. +Двоичните кадри `reasoningContentEvent` на Kiro с непразен подпис запазват активността на разсъждение през изпълнителя като празна делта `reasoning_content`. Подписът не се препраща. Метаданните, непълните кадри и празните подписи не рестартират времевия лимит за съдържание; независимият лимит за продължителността на активния поток и отмяната от клиента остават в сила. (`open-sse/executors/kiro/reasoning.ts`). + **Крайни състояния (НЕ са периоди на изчакване):** - `banned` — задава се при откриване на забранена ключова дума/блокиране на акаунт (вижте [BAN_DETECTION](../security/BAN_DETECTION.md)), както и при три последователни отказа от сървъра за отделна заявка (`request_rejected`, напр. Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); единичен отказ само поставя връзката в период на изчакване diff --git a/docs/i18n/bn/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/bn/docs/architecture/RESILIENCE_GUIDE.md index c8939811a927..2e9c9f622358 100644 --- a/docs/i18n/bn/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/bn/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute-এ তিনটি স্বতন্ত্র কিন্তু স **থান্ডারিং-হার্ড প্রতিরোধ ব্যবস্থা:** সমসাময়িক ব্যর্থতার কারণে কুলডাউন অতিরিক্ত বাড়ানো বা `backoffLevel` দুইবার বৃদ্ধি করা প্রতিরোধ করে। +অখালি স্বাক্ষরযুক্ত Kiro-এর বাইনারি `reasoningContentEvent` ফ্রেমগুলো এক্সিকিউটরের মধ্য দিয়ে খালি `reasoning_content` ডেল্টা হিসেবে যুক্তিচিন্তার সক্রিয়তা বজায় রাখে। স্বাক্ষরটি পাঠানো হয় না। মেটাডেটা, অসম্পূর্ণ ফ্রেম এবং খালি স্বাক্ষর কনটেন্টের জন্য নির্ধারিত সময়সীমা পুনরায় শুরু করে না; সক্রিয় স্ট্রিমের স্বাধীন সময়সীমা এবং ক্লায়েন্টের বাতিলকরণ কার্যকর থাকে। (`open-sse/executors/kiro/reasoning.ts`). + **টার্মিনাল অবস্থা (কুলডাউন নয়):** - `banned` — নিষিদ্ধ-কীওয়ার্ড / অ্যাকাউন্ট-ব্যান শনাক্তকরণ (দেখুন [BAN_DETECTION](../security/BAN_DETECTION.md)) এবং পরপর তিনটি আপস্ট্রিম প্রতি-অনুরোধ প্রত্যাখ্যানের (`request_rejected`, যেমন Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`) ক্ষেত্রে সেট করা হয়; একটি মাত্র প্রত্যাখ্যান শুধু সংযোগটিকে কুলডাউনে রাখে diff --git a/docs/i18n/bs/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/bs/docs/architecture/RESILIENCE_GUIDE.md index 882d87a00c19..ac11cd5a50eb 100644 --- a/docs/i18n/bs/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/bs/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Zaštita od regresije: `tests/unit/provider-cooldown-window-gate.test.ts`. **Zaštita od stampeda zahtjeva:** sprečava da istovremeni kvarovi pretjerano produže hlađenje ili dvaput povećaju `backoffLevel`. +Kiro binarni okviri `reasoningContentEvent` s nepraznim potpisom čuvaju aktivnost rezonovanja kroz izvršitelj kao praznu deltu `reasoning_content`. Potpis se ne prosljeđuje. Metapodaci, nepotpuni okviri i prazni potpisi ne pokreću ponovo vremenski limit za sadržaj; nezavisni limit trajanja aktivnog toka i otkazivanje od strane klijenta ostaju na snazi. (`open-sse/executors/kiro/reasoning.ts`). + **Završna stanja (NISU hlađenja):** - `banned` — postavlja se otkrivanjem zabranjene ključne riječi / zabrane računa (pogledajte [BAN_DETECTION](../security/BAN_DETECTION.md)) i nakon tri uzastopna uzvodna odbijanja pojedinačnih zahtjeva (`request_rejected`, npr. Anthropic OAuth 403 "Zahtjev nije dozvoljen" — `open-sse/services/requestRejectedStreak.ts`); jedno odbijanje samo stavlja vezu na hlađenje diff --git a/docs/i18n/cs/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/cs/docs/architecture/RESILIENCE_GUIDE.md index 15b47f94adbe..caf4fc068677 100644 --- a/docs/i18n/cs/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/cs/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Ochrana proti regresím: `tests/unit/provider-cooldown-window-gate.test.ts`. **Ochrana proti lavinovému souběhu:** zabraňuje tomu, aby souběžná selhání nadměrně prodloužila dobu blokování nebo zvýšila `backoffLevel` vícekrát. +Binární rámce Kiro `reasoningContentEvent` s neprázdným podpisem zachovávají aktivitu uvažování při průchodu executorem jako prázdnou deltu `reasoning_content`. Podpis se nepředává. Metadata, neúplné rámce a prázdné podpisy neobnovují časový limit pro obsah; nezávislý limit délky aktivního streamu a zrušení klientem zůstávají platné. (`open-sse/executors/kiro/reasoning.ts`). + **Koncové stavy (NEJDE o doby blokování):** - `banned` — nastaveno při detekci klíčového slova zákazu / zablokování účtu (viz [BAN_DETECTION](../security/BAN_DETECTION.md)) a při třech po sobě jdoucích odmítnutích jednotlivých požadavků nadřazenou službou (`request_rejected`, např. Anthropic OAuth 403 „Požadavek není povolen“ — `open-sse/services/requestRejectedStreak.ts`); jediné odmítnutí pouze dočasně zablokuje připojení diff --git a/docs/i18n/da/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/da/docs/architecture/RESILIENCE_GUIDE.md index 4fa211f4f063..d58d18010f39 100644 --- a/docs/i18n/da/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/da/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Regressionsbeskyttelse: `tests/unit/provider-cooldown-window-gate.test.ts`. **Beskyttelse mod stampede-effekt:** forhindrer samtidige fejl i at forlænge nedkølingen for meget eller forøge `backoffLevel` to gange. +Kiros binære `reasoningContentEvent`-rammer med en ikke-tom signatur bevarer ræsonneringsaktiviteten gennem eksekutoren som en tom `reasoning_content`-delta. Signaturen videresendes ikke. Metadata, ufuldstændige rammer og tomme signaturer genstarter ikke tidsbudgettet for indhold; den uafhængige tidsgrænse for den aktive stream og klientens annullering gælder stadig. (`open-sse/executors/kiro/reasoning.ts`). + **Terminaltilstande (IKKE nedkølinger):** - `banned` — angives ved registrering af forbudte nøgleord/kontoudelukkelse (se [BAN_DETECTION](../security/BAN_DETECTION.md)) og ved tre på hinanden følgende upstream-afvisninger pr. forespørgsel (`request_rejected`, f.eks. Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); en enkelt afvisning nedkøler kun forbindelsen diff --git a/docs/i18n/de/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/de/docs/architecture/RESILIENCE_GUIDE.md index bea5ef351731..f4090315beef 100644 --- a/docs/i18n/de/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/de/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ Regressionsschutz: `tests/unit/provider-cooldown-window-gate.test.ts`. **Schutz vor einer Anfragelawine:** verhindert, dass gleichzeitige Fehler den Cooldown übermäßig verlängern oder `backoffLevel` doppelt erhöhen. +Binäre `reasoningContentEvent`-Frames von Kiro mit einer nicht leeren Signatur erhalten die Denkaktivität beim Durchlaufen des Executors als leeres `reasoning_content`-Delta. Die Signatur wird nicht weitergegeben. Metadaten, unvollständige Frames und leere Signaturen starten das Zeitbudget für Inhalte nicht neu; das unabhängige Zeitlimit für den aktiven Stream und der Abbruch durch den Client gelten weiterhin. (`open-sse/executors/kiro/reasoning.ts`). + **Endzustände (KEINE Cooldowns):** - `banned` — wird durch die Erkennung gesperrter Schlüsselwörter/Kontensperren (siehe [BAN_DETECTION](../security/BAN_DETECTION.md)) sowie durch drei aufeinanderfolgende vorgelagerte Ablehnungen pro Anfrage gesetzt (`request_rejected`, z. B. Anthropic OAuth 403 „Request not allowed“ — `open-sse/services/requestRejectedStreak.ts`); eine einzelne Ablehnung versetzt die Verbindung lediglich in den Cooldown diff --git a/docs/i18n/el/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/el/docs/architecture/RESILIENCE_GUIDE.md index c9b9ee069ce7..fbccf16ea441 100644 --- a/docs/i18n/el/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/el/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ **Προστασία κατά του φαινομένου thundering herd:** αποτρέπει τις ταυτόχρονες αποτυχίες από το να παρατείνουν υπερβολικά την περίοδο αναμονής ή να αυξήσουν δύο φορές το `backoffLevel`. +Τα δυαδικά πλαίσια `reasoningContentEvent` του Kiro με μη κενή υπογραφή διατηρούν τη δραστηριότητα συλλογισμού μέσω του εκτελεστή ως κενό δέλτα `reasoning_content`. Η υπογραφή δεν προωθείται. Τα μεταδεδομένα, τα ελλιπή πλαίσια και οι κενές υπογραφές δεν επανεκκινούν το χρονικό όριο περιεχομένου· το ανεξάρτητο όριο διάρκειας της ενεργής ροής και η ακύρωση από τον πελάτη εξακολουθούν να ισχύουν. (`open-sse/executors/kiro/reasoning.ts`). + **Τερματικές καταστάσεις (ΟΧΙ περίοδοι αναμονής):** - `banned` — ορίζεται από τον εντοπισμό απαγορευμένης λέξης-κλειδιού / αποκλεισμού λογαριασμού (βλ. [BAN_DETECTION](../security/BAN_DETECTION.md)) και από τρεις διαδοχικές ανάντη απορρίψεις ανά αίτημα (`request_rejected`, π.χ. Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`)· μία μόνο απόρριψη απλώς θέτει τη σύνδεση σε περίοδο αναμονής diff --git a/docs/i18n/es/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/es/docs/architecture/RESILIENCE_GUIDE.md index 4bbe0f98eb38..c0dd9c8acfd9 100644 --- a/docs/i18n/es/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/es/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Protección contra regresiones: `tests/unit/provider-cooldown-window-gate.test.t **Protección contra avalanchas de solicitudes:** evita que los fallos simultáneos prolonguen en exceso el tiempo de espera o incrementen dos veces `backoffLevel`. +Los frames binarios `reasoningContentEvent` de Kiro con una firma no vacía conservan la actividad de razonamiento al pasar por el ejecutor como un delta `reasoning_content` vacío. La firma no se reenvía. Los metadatos, los frames incompletos y las firmas vacías no reinician el plazo para contenido; el límite independiente de duración del flujo activo y la cancelación del cliente siguen vigentes. (`open-sse/executors/kiro/reasoning.ts`). + **Estados terminales (NO son tiempos de espera):** - `banned` — establecido por la detección de palabras clave de bloqueo o de cuentas bloqueadas (consulte [BAN_DETECTION](../security/BAN_DETECTION.md)), así como por tres rechazos consecutivos por solicitud del servicio ascendente (`request_rejected`, p. ej., el error 403 de OAuth de Anthropic «Request not allowed» — `open-sse/services/requestRejectedStreak.ts`); un único rechazo solo pone la conexión en tiempo de espera diff --git a/docs/i18n/et/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/et/docs/architecture/RESILIENCE_GUIDE.md index f1abce7e3c66..6fc706593354 100644 --- a/docs/i18n/et/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/et/docs/architecture/RESILIENCE_GUIDE.md @@ -97,6 +97,8 @@ Regressioonikaitse: `tests/unit/provider-cooldown-window-gate.test.ts`. **Päringutulva vastane kaitse:** takistab samaaegsetel tõrgetel ooteaega liigselt pikendada või `backoffLevel`-it topelt suurendada. +Kiro mittetühja allkirjaga binaarsed `reasoningContentEvent`-kaadrid säilitavad täituri kaudu arutlustegevuse tühja `reasoning_content` deltana. Allkirja edasi ei saadeta. Metaandmed, poolikud kaadrid ja tühjad allkirjad ei taaskäivita sisu ajalimiiti; aktiivse voo sõltumatu ajalimiit ja kliendi tühistamine kehtivad endiselt. (`open-sse/executors/kiro/reasoning.ts`). + **Lõppolekud (EI OLE ooteajad):** - `banned` — määratakse keelatud märksõna / konto blokeerimise tuvastamisel (vt [BAN_DETECTION](../security/BAN_DETECTION.md)) ning kolme järjestikuse ülesvoolu päringupõhise keeldumise korral (`request_rejected`, nt Anthropic OAuth 403 „Request not allowed” — `open-sse/services/requestRejectedStreak.ts`); üksik keeldumine paneb ühenduse ainult ooteajale diff --git a/docs/i18n/fa/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/fa/docs/architecture/RESILIENCE_GUIDE.md index 6fce28d86e1f..aa0684d6d9dd 100644 --- a/docs/i18n/fa/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/fa/docs/architecture/RESILIENCE_GUIDE.md @@ -91,6 +91,8 @@ OmniRoute سه سازوکار تابآوری متمایز اما مرتبط دا **محافظ جلوگیری از هجوم همزمان:** مانع میشود خطاهای همزمان، وقفه را بیشازحد تمدید کنند یا `backoffLevel` را دو بار افزایش دهند. +فریمهای دودویی `reasoningContentEvent` در Kiro که امضای غیرخالی دارند، فعالیت استدلال را هنگام عبور از اجراکننده به صورت دلتای خالی `reasoning_content` حفظ میکنند. امضا ارسال نمیشود. فراداده، فریمهای ناقص و امضاهای خالی مهلت محتوا را از نو آغاز نمیکنند؛ محدودیت زمانی مستقل جریان فعال و لغو از سوی کلاینت همچنان برقرار هستند. (`open-sse/executors/kiro/reasoning.ts`). + **وضعیتهای نهایی (وقفه نیستند):** - `banned` — با تشخیص کلیدواژهٔ مسدودسازی / مسدودشدن حساب تنظیم میشود (به [BAN_DETECTION](../security/BAN_DETECTION.md) مراجعه کنید) و همچنین پس از سه رد متوالی هر درخواست از سمت بالادست (`request_rejected`، برای مثال پاسخ 403 مربوط به Anthropic OAuth با پیام «Request not allowed» — `open-sse/services/requestRejectedStreak.ts`)؛ یک رد منفرد فقط اتصال را وارد وقفه میکند diff --git a/docs/i18n/fi/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/fi/docs/architecture/RESILIENCE_GUIDE.md index 536e8d692127..fb738ba355ca 100644 --- a/docs/i18n/fi/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/fi/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Regressiosuojaus: `tests/unit/provider-cooldown-window-gate.test.ts`. **Samanaikaisten pyyntöryöppyjen esto:** estää samanaikaisia virheitä pidentämästä jäähdytysaikaa liikaa tai kasvattamasta `backoffLevel`-arvoa kahdesti. +Kiron binaariset `reasoningContentEvent`-kehykset, joiden allekirjoitus ei ole tyhjä, säilyttävät päättelyaktiivisuuden suorittimen läpi tyhjänä `reasoning_content`-deltana. Allekirjoitusta ei välitetä. Metatiedot, keskeneräiset kehykset ja tyhjät allekirjoitukset eivät käynnistä sisällön aikarajaa uudelleen; aktiivisen virran erillinen aikaraja ja asiakkaan peruutus pysyvät voimassa. (`open-sse/executors/kiro/reasoning.ts`). + **Lopulliset tilat (EIVÄT jäähdytysaikoja):** - `banned` — asetetaan kielletyn avainsanan / tilin eston tunnistuksen perusteella (katso [BAN_DETECTION](../security/BAN_DETECTION.md)) sekä kolmen peräkkäisen ylävirran pyyntökohtaisen hylkäyksen jälkeen (`request_rejected`, esim. Anthropic OAuth 403 "Pyyntöä ei sallita" — `open-sse/services/requestRejectedStreak.ts`); yksittäinen hylkäys vain asettaa yhteyden jäähdytystilaan diff --git a/docs/i18n/fr/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/fr/docs/architecture/RESILIENCE_GUIDE.md index 948625bc3251..37112bbda4f9 100644 --- a/docs/i18n/fr/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/fr/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Protection contre les régressions : `tests/unit/provider-cooldown-window-gate.t **Protection contre les afflux simultanés :** empêche des échecs simultanés de prolonger excessivement le refroidissement ou de doubler l’incrémentation de `backoffLevel`. +Les trames binaires `reasoningContentEvent` de Kiro avec une signature non vide préservent l’activité de raisonnement à travers l’exécuteur sous forme de delta `reasoning_content` vide. La signature n’est pas transmise. Les métadonnées, les trames incomplètes et les signatures vides ne relancent pas le délai de contenu ; la limite indépendante de durée du flux actif et l’annulation par le client restent applicables. (`open-sse/executors/kiro/reasoning.ts`). + **États terminaux (PAS des refroidissements) :** - `banned` — défini par la détection de mots-clés d’interdiction/de bannissement de compte (voir [BAN_DETECTION](../security/BAN_DETECTION.md)), ainsi que par trois refus consécutifs en amont par requête (`request_rejected`, par exemple Anthropic OAuth 403 « Request not allowed » — `open-sse/services/requestRejectedStreak.ts`) ; un refus unique ne fait que mettre la connexion en refroidissement diff --git a/docs/i18n/ga/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ga/docs/architecture/RESILIENCE_GUIDE.md index ff3b54968579..f155cf72ab30 100644 --- a/docs/i18n/ga/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ga/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Cosaint aischéimnithe: `tests/unit/provider-cooldown-window-gate.test.ts`. **Cosaint ar ró-ualach comhuaineach:** cuireann sí cosc ar theipeanna comhuaineacha an tréimhse mhaolaithe a shíneadh an iomarca nó `backoffLevel` a mhéadú faoi dhó. +Caomhnaíonn frámaí dénártha `reasoningContentEvent` Kiro a bhfuil síniú neamhfholamh acu gníomhaíocht réasúnaíochta tríd an bhfeidhmitheoir mar dheilt fholamh `reasoning_content`. Ní chuirtear an síniú ar aghaidh. Ní atosaíonn meiteashonraí, frámaí neamhiomlána ná sínithe folmha an teorainn ama don ábhar; fanann an teorainn ama neamhspleách don sruth gníomhach agus cealú an chliaint i bhfeidhm. (`open-sse/executors/kiro/reasoning.ts`). + **Staid chríochnaitheacha (NÍ tréimhsí maolaithe iad):** - `banned` — socraítear é trí bhrath eochairfhocail toirmiscthe / toirmisc cuntais (féach [BAN_DETECTION](../security/BAN_DETECTION.md)), agus trí thrí dhiúltú réamhtheachtacha comhleanúnacha in aghaidh na hiarrata (`request_rejected`, m.sh. Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); ní dhéanann aon diúltú aonair ach an nasc a chur i dtréimhse mhaolaithe diff --git a/docs/i18n/gu/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/gu/docs/architecture/RESILIENCE_GUIDE.md index 9454ab77301f..dd046f14abd8 100644 --- a/docs/i18n/gu/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/gu/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute પાસે ત્રણ અલગ પરંતુ પરસ્પર **થન્ડરિંગ-હર્ડ વિરોધી સુરક્ષા:** સમકાલીન નિષ્ફળતાઓને કૂલડાઉન વધુ પડતું લંબાવતાં અથવા `backoffLevel`ને બે વાર વધારતાં અટકાવે છે. +ખાલી ન હોય તેવી સહી ધરાવતા Kiroના બાઇનરી `reasoningContentEvent` ફ્રેમો એક્ઝિક્યુટર દ્વારા ખાલી `reasoning_content` ડેલ્ટા તરીકે તર્કની પ્રવૃત્તિ જાળવે છે. સહી આગળ મોકલવામાં આવતી નથી. મેટાડેટા, અધૂરા ફ્રેમો અને ખાલી સહીઓ સામગ્રી માટેની સમયમર્યાદા ફરી શરૂ કરતા નથી; સક્રિય સ્ટ્રીમની સ્વતંત્ર સમયમર્યાદા અને ક્લાયન્ટ દ્વારા રદ કરવાનું હજી પણ લાગુ પડે છે. (`open-sse/executors/kiro/reasoning.ts`). + **ટર્મિનલ સ્થિતિઓ (કૂલડાઉન્સ નથી):** - `banned` — પ્રતિબંધિત-કીવર્ડ / એકાઉન્ટ-પ્રતિબંધ શોધ દ્વારા સેટ થાય છે ([BAN_DETECTION](../security/BAN_DETECTION.md) જુઓ), અને સતત ત્રણ અપસ્ટ્રીમ પ્રતિ-રિક્વેસ્ટ અસ્વીકૃતિઓ (`request_rejected`, ઉદાહરણ તરીકે Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`) દ્વારા પણ; એક માત્ર અસ્વીકૃતિ ફક્ત કનેક્શનને કૂલડાઉનમાં મૂકે છે diff --git a/docs/i18n/ha/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ha/docs/architecture/RESILIENCE_GUIDE.md index d8b16f6c5d7e..22e4878e7ad7 100644 --- a/docs/i18n/ha/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ha/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Kariyar regression: `tests/unit/provider-cooldown-window-gate.test.ts`. **Kariyar hana turmutsitsin buƙatu:** tana hana gazawa masu faruwa lokaci guda tsawaita lokacin jira fiye da kima ko ƙara `backoffLevel` sau biyu. +Firam ɗin binary `reasoningContentEvent` na Kiro masu sa hannu wanda ba fanko ba suna kiyaye aikin tunani ta cikin mai aiwatarwa a matsayin delta `reasoning_content` fanko. Ba a tura sa hannun gaba. Metadata, firam marasa cika da sa hannu marasa bayanai ba sa sake fara lokacin jiran abun ciki; iyakar lokacin rafi mai aiki mai zaman kanta da sokewar abokin ciniki suna ci gaba da aiki. (`open-sse/executors/kiro/reasoning.ts`). + **Halayen ƙarshe (BA lokutan jira BA):** - `banned` — ana saita shi ta hanyar gano kalmar da aka haramta / haramta asusu (duba [BAN_DETECTION](../security/BAN_DETECTION.md)), da kuma ƙin buƙata sau uku a jere daga uwar garke (`request_rejected`, misali Anthropic OAuth 403 "Ba a yarda da buƙatar ba" — `open-sse/services/requestRejectedStreak.ts`); ƙin guda ɗaya kawai yana sanya haɗin cikin lokacin jira diff --git a/docs/i18n/he/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/he/docs/architecture/RESILIENCE_GUIDE.md index 6415d69ab1f6..862497e73ec8 100644 --- a/docs/i18n/he/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/he/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ **הגנה מפני עומס מתפרץ:** מונעת מכשלים מקביליים להאריך יתר על המידה את תקופת הצינון או להגדיל את `backoffLevel` פעמיים. +מסגרות `reasoningContentEvent` הבינאריות של Kiro עם חתימה שאינה ריקה משמרות את פעילות ההסקה דרך רכיב הביצוע כדלתא ריקה של `reasoning_content`. החתימה אינה מועברת. מטא־נתונים, מסגרות לא שלמות וחתימות ריקות אינם מאתחלים מחדש את תקציב הזמן לתוכן; מגבלת הזמן העצמאית של הזרם הפעיל וביטול מצד הלקוח עדיין חלים. (`open-sse/executors/kiro/reasoning.ts`). + **מצבים סופיים (אינם תקופות צינון):** - `banned` — מוגדר בעקבות זיהוי מילת מפתח של חסימה / חסימת חשבון (ראו [BAN_DETECTION](../security/BAN_DETECTION.md)), וכן בעקבות שלושה סירובים רצופים במעלה הזרם לכל בקשה (`request_rejected`, לדוגמה Anthropic OAuth 403‏ "הבקשה אינה מורשית" — `open-sse/services/requestRejectedStreak.ts`); סירוב יחיד רק מכניס את החיבור לתקופת צינון diff --git a/docs/i18n/hi/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/hi/docs/architecture/RESILIENCE_GUIDE.md index 0f47eafaca4f..d8b00a1092a2 100644 --- a/docs/i18n/hi/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/hi/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute में तीन अलग-अलग लेकिन परस् **एंटी-थंडरिंग-हर्ड सुरक्षा:** समवर्ती विफलताओं को कूलडाउन अत्यधिक बढ़ाने या `backoffLevel` को दो बार बढ़ाने से रोकती है। +गैर-खाली हस्ताक्षर वाले Kiro के बाइनरी `reasoningContentEvent` फ़्रेम एक्ज़ीक्यूटर से गुजरते हुए खाली `reasoning_content` डेल्टा के रूप में तर्क गतिविधि बनाए रखते हैं। हस्ताक्षर आगे नहीं भेजा जाता। मेटाडेटा, अधूरे फ़्रेम और खाली हस्ताक्षर सामग्री की समय-सीमा दोबारा शुरू नहीं करते; सक्रिय स्ट्रीम की स्वतंत्र समय-सीमा और क्लाइंट द्वारा रद्द करना लागू रहते हैं। (`open-sse/executors/kiro/reasoning.ts`). + **टर्मिनल स्थितियाँ (कूलडाउन नहीं):** - `banned` — प्रतिबंधित-कीवर्ड / खाता-प्रतिबंध पहचान द्वारा सेट किया जाता है ([BAN_DETECTION](../security/BAN_DETECTION.md) देखें), और लगातार तीन अपस्ट्रीम प्रति-अनुरोध अस्वीकृतियों (`request_rejected`, जैसे Anthropic OAuth 403 "अनुरोध की अनुमति नहीं है" — `open-sse/services/requestRejectedStreak.ts`) द्वारा भी; एक अकेली अस्वीकृति केवल कनेक्शन को कूलडाउन में डालती है diff --git a/docs/i18n/hr/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/hr/docs/architecture/RESILIENCE_GUIDE.md index b0b049b6b34f..4f24c98b0972 100644 --- a/docs/i18n/hr/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/hr/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Zaštita od regresije: `tests/unit/provider-cooldown-window-gate.test.ts`. **Zaštita od stampeda zahtjeva:** sprječava da istodobni kvarovi prekomjerno produlje razdoblje mirovanja ili dvaput povećaju `backoffLevel`. +Kiro binarni okviri `reasoningContentEvent` s potpisom koji nije prazan čuvaju aktivnost zaključivanja kroz izvršitelj kao praznu deltu `reasoning_content`. Potpis se ne prosljeđuje. Metapodaci, nepotpuni okviri i prazni potpisi ne pokreću ponovno vremensko ograničenje za sadržaj; neovisno ograničenje trajanja aktivnog toka i otkazivanje od strane klijenta ostaju na snazi. (`open-sse/executors/kiro/reasoning.ts`). + **Završna stanja (NISU razdoblja mirovanja):** - `banned` — postavlja se otkrivanjem zabranjene ključne riječi / zabrane računa (pogledajte [BAN_DETECTION](../security/BAN_DETECTION.md)) te nakon tri uzastopna uzvodna odbijanja pojedinačnih zahtjeva (`request_rejected`, npr. Anthropic OAuth 403 „Request not allowed” — `open-sse/services/requestRejectedStreak.ts`); jedno odbijanje samo stavlja vezu u razdoblje mirovanja diff --git a/docs/i18n/hu/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/hu/docs/architecture/RESILIENCE_GUIDE.md index 03c29c1126ee..72190b358a82 100644 --- a/docs/i18n/hu/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/hu/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ Regresszióvédelmi teszt: `tests/unit/provider-cooldown-window-gate.test.ts`. **Kéréshullám elleni védelem:** megakadályozza, hogy az egyidejű hibák túlzottan meghosszabbítsák a várakozási időt, vagy kétszer növeljék a `backoffLevel` értékét. +A Kiro nem üres aláírással rendelkező bináris `reasoningContentEvent` keretei üres `reasoning_content` deltaként őrzik meg a következtetési aktivitást a végrehajtón keresztül. Az aláírást nem továbbítjuk. A metaadatok, a hiányos keretek és az üres aláírások nem indítják újra a tartalomra vonatkozó időkeretet; az aktív adatfolyam független időkorlátja és az ügyfél megszakítása továbbra is érvényes. (`open-sse/executors/kiro/reasoning.ts`). + **Végállapotok (NEM várakozási idők):** - `banned` — tiltott kulcsszó / fióktiltás észlelése állítja be (lásd: [BAN_DETECTION](../security/BAN_DETECTION.md)), illetve három egymást követő, kérésenkénti felsőbb szintű elutasítás (`request_rejected`, például Anthropic OAuth 403 „Request not allowed” — `open-sse/services/requestRejectedStreak.ts`); egyetlen elutasítás csak várakozási állapotba helyezi a kapcsolatot diff --git a/docs/i18n/hy/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/hy/docs/architecture/RESILIENCE_GUIDE.md index a051aa6ab2e3..d43f497a5910 100644 --- a/docs/i18n/hy/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/hy/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ OmniRoute-ն ունի խափանումների նկատմամբ կայունու **Միաժամանակյա հարցումների կուտակման դեմ պաշտպանություն՝** կանխում է, որ միաժամանակյա խափանումները չափազանց երկարացնեն սառեցումը կամ կրկնակի ավելացնեն `backoffLevel`-ը։ +Kiro-ի ոչ դատարկ ստորագրությամբ երկուական `reasoningContentEvent` կադրերը կատարիչի միջով պահպանում են դատողության ակտիվությունը՝ որպես դատարկ `reasoning_content` դելտա։ Ստորագրությունը չի փոխանցվում։ Մետատվյալները, անավարտ կադրերը և դատարկ ստորագրությունները չեն վերագործարկում բովանդակության ժամանակային սահմանաչափը. ակտիվ հոսքի անկախ ժամանակային սահմանաչափը և հաճախորդի չեղարկումը շարունակում են գործել։ (`open-sse/executors/kiro/reasoning.ts`). + **Վերջնական վիճակներ (սառեցումներ ՉԵՆ)՝** - `banned` — սահմանվում է արգելված հիմնաբառի / հաշվի արգելափակման հայտնաբերմամբ (տե՛ս [BAN_DETECTION](../security/BAN_DETECTION.md)), ինչպես նաև սկզբնաղբյուրի՝ յուրաքանչյուր հարցման մակարդակում երեք հաջորդական մերժումներից հետո (`request_rejected`, օրինակ՝ Anthropic OAuth 403 "Հարցումը թույլատրված չէ" — `open-sse/services/requestRejectedStreak.ts`)․ մեկ մերժումը միայն ժամանակավորապես սառեցնում է կապը diff --git a/docs/i18n/id/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/id/docs/architecture/RESILIENCE_GUIDE.md index 04bfcef08b76..ff18913ced31 100644 --- a/docs/i18n/id/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/id/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Pengaman regresi: `tests/unit/provider-cooldown-window-gate.test.ts`. **Pelindung anti-thundering-herd:** mencegah kegagalan serentak memperpanjang cooldown secara berlebihan atau menaikkan `backoffLevel` dua kali. +Frame biner `reasoningContentEvent` Kiro dengan tanda tangan yang tidak kosong mempertahankan aktivitas penalaran melalui eksekutor sebagai delta `reasoning_content` kosong. Tanda tangan tidak diteruskan. Metadata, frame yang belum lengkap, dan tanda tangan kosong tidak memulai ulang batas waktu konten; batas waktu independen untuk aliran aktif dan pembatalan oleh klien tetap berlaku. (`open-sse/executors/kiro/reasoning.ts`). + **Status terminal (BUKAN cooldown):** - `banned` — ditetapkan oleh deteksi kata kunci terlarang / pemblokiran akun (lihat [BAN_DETECTION](../security/BAN_DETECTION.md)), dan oleh tiga penolakan per permintaan dari upstream secara berturut-turut (`request_rejected`, misalnya Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); satu penolakan hanya membuat koneksi memasuki cooldown diff --git a/docs/i18n/ig/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ig/docs/architecture/RESILIENCE_GUIDE.md index e846dd72f755..5a7e388b6d84 100644 --- a/docs/i18n/ig/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ig/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Ihe nchebe megide regression: `tests/unit/provider-cooldown-window-gate.test.ts` **Ihe nche megide thundering herd:** na-egbochi ọdịda ndị na-eme n'otu oge ịgbatị oge nkwụsị karịa oke ma ọ bụ ịgbakwunye `backoffLevel` ugboro abụọ. +Freem binary `reasoningContentEvent` nke Kiro nwere mbinye aka na-adịghị efu na-echekwa ọrụ iche echiche site na onye mmezu dịka delta `reasoning_content` efu. A naghị ebufe mbinye aka ahụ. Metadata, freem na-ezughị ezu na mbinye aka efu anaghị amaliteghachi oge echere ọdịnaya; oke oge nke iyi na-arụ ọrụ nke nọọrọ onwe ya na nkagbu onye ahịa ka na-arụ ọrụ. (`open-sse/executors/kiro/reasoning.ts`). + **Ọnọdụ njedebe (Ọ BỤGHỊ oge nkwụsị):** - `banned` — a na-esetị ya site na nchọpụta banned-keyword / account-ban (lee [BAN_DETECTION](../security/BAN_DETECTION.md)), nakwa site na ọjụjụ atọ sitere upstream n'usoro maka arịrịọ ọ bụla (`request_rejected`, dịka Anthropic OAuth 403 "Anaghị anabata arịrịọ" — `open-sse/services/requestRejectedStreak.ts`); otu ọjụjụ naanị na-etinye njikọ ahụ n'oge nkwụsị diff --git a/docs/i18n/it/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/it/docs/architecture/RESILIENCE_GUIDE.md index 3b6fe92d7859..a919acba0af3 100644 --- a/docs/i18n/it/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/it/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Test di regressione: `tests/unit/provider-cooldown-window-gate.test.ts`. **Protezione anti-thundering-herd:** impedisce che errori simultanei prolunghino eccessivamente il cooldown o incrementino due volte `backoffLevel`. +I frame binari `reasoningContentEvent` di Kiro con una firma non vuota preservano l’attività di ragionamento attraverso l’esecutore come delta `reasoning_content` vuoto. La firma non viene inoltrata. Metadati, frame incompleti e firme vuote non riavviano il tempo concesso per il contenuto; il limite indipendente di durata del flusso attivo e l’annullamento del client restano validi. (`open-sse/executors/kiro/reasoning.ts`). + **Stati terminali (NON cooldown):** - `banned` — impostato dal rilevamento di parole chiave associate al ban o del ban dell'account (vedere [BAN_DETECTION](../security/BAN_DETECTION.md)) e da tre rifiuti consecutivi per richiesta da parte del servizio upstream (`request_rejected`, ad es. OAuth Anthropic 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); un singolo rifiuto si limita ad applicare il cooldown alla connessione diff --git a/docs/i18n/ja/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ja/docs/architecture/RESILIENCE_GUIDE.md index c2121a84f85e..f55c394354c5 100644 --- a/docs/i18n/ja/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ja/docs/architecture/RESILIENCE_GUIDE.md @@ -97,6 +97,8 @@ OmniRoute には、互いに関連しつつも異なる 3 つのレジリエン **サンダリングハード防止ガード:** 同時発生したエラーによってクールダウンが過度に延長されたり、`backoffLevel`が二重にインクリメントされたりすることを防ぐ。 +空でない署名を持つKiroのバイナリ`reasoningContentEvent`フレームは、エグゼキューターを通過する際に空の`reasoning_content`デルタとして推論の活動を保持する。署名自体は転送されない。メタデータ、不完全なフレーム、空の署名はコンテンツ待機時間をリセットしない。アクティブなストリームの独立した時間制限とクライアントによるキャンセルは引き続き有効である。 (`open-sse/executors/kiro/reasoning.ts`). + **終端状態(クールダウンではない):** - `banned` — 禁止キーワード/アカウントBANの検出([BAN_DETECTION](../security/BAN_DETECTION.md)を参照)、および上流によるリクエスト単位の拒否が3回連続した場合(`request_rejected`。例: Anthropic OAuthの403「Request not allowed」— `open-sse/services/requestRejectedStreak.ts`)に設定される。拒否が1回だけの場合は、接続がクールダウンされるだけ diff --git a/docs/i18n/ka/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ka/docs/architecture/RESILIENCE_GUIDE.md index 864985e4e1e8..6d40240eacb4 100644 --- a/docs/i18n/ka/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ka/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ OmniRoute-ს აქვს მდგრადობის სამი გან **ერთდროული მოთხოვნების მოზღვავებისგან დაცვა:** ხელს უშლის პარალელურ შეცდომებს, ზედმეტად გაახანგრძლივონ დაყოვნების პერიოდი ან ორჯერ გაზარდონ `backoffLevel`. +Kiro-ს ორობითი `reasoningContentEvent` კადრები არაცარიელი ხელმოწერით ინარჩუნებენ მსჯელობის აქტივობას შემსრულებლის გავლით, ცარიელი `reasoning_content` დელტის სახით. ხელმოწერა არ გადაიცემა. მეტამონაცემები, არასრული კადრები და ცარიელი ხელმოწერები შიგთავსის დროის ლიმიტს თავიდან არ იწყებენ; აქტიური ნაკადის დამოუკიდებელი დროის ლიმიტი და კლიენტის მიერ გაუქმება კვლავ მოქმედებს. (`open-sse/executors/kiro/reasoning.ts`). + **ტერმინალური მდგომარეობები (არა დაყოვნების პერიოდები):** - `banned` — დგინდება აკრძალული საკვანძო სიტყვის / ანგარიშის აკრძალვის გამოვლენისას (იხილეთ [BAN_DETECTION](../security/BAN_DETECTION.md)), აგრეთვე ზედა დონის სერვერის მიერ ზედიზედ სამი ცალკეული მოთხოვნის უარყოფისას (`request_rejected`, მაგ., Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); ერთი უარყოფა მხოლოდ კავშირის დაყოვნების პერიოდს ააქტიურებს diff --git a/docs/i18n/km/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/km/docs/architecture/RESILIENCE_GUIDE.md index 9352a496257b..a4c08a7ab8b8 100644 --- a/docs/i18n/km/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/km/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ window។ ធាតុកម្រិតការតភ្ជាប់ (`provide **របាំងការពារការសម្រុកសំណើដំណាលគ្នា:** រារាំងកំហុសដែលកើតឡើងដំណាលគ្នាមិនឱ្យពន្យាររយៈពេលរង់ចាំលើសកម្រិត ឬបង្កើន `backoffLevel` ពីរដង។ +ស៊ុមប៊ីណារី `reasoningContentEvent` របស់ Kiro ដែលមានហត្ថលេខាមិនទទេ រក្សាសកម្មភាពនៃការគិតតាមរយៈកម្មវិធីប្រតិបត្តិជាដែលតា `reasoning_content` ទទេ។ ហត្ថលេខាមិនត្រូវបានបញ្ជូនបន្តទេ។ មេតាទិន្នន័យ ស៊ុមមិនពេញលេញ និងហត្ថលេខាទទេ មិនចាប់ផ្តើមពេលវេលារង់ចាំមាតិកាឡើងវិញទេ។ ដែនកំណត់ពេលវេលាឯករាជ្យរបស់ស្ទ្រីមសកម្ម និងការបោះបង់ដោយម៉ាស៊ីនភ្ញៀវ នៅតែមានប្រសិទ្ធភាព។ (`open-sse/executors/kiro/reasoning.ts`). + **ស្ថានភាពបញ្ចប់ (មិនមែនជារយៈពេលរង់ចាំទេ):** - `banned` — កំណត់ដោយការរកឃើញពាក្យគន្លឹះដែលត្រូវបានហាមឃាត់ / ការហាមឃាត់គណនី (សូមមើល [BAN_DETECTION](../security/BAN_DETECTION.md)) និងដោយការបដិសេធក្នុងមួយសំណើពីប្រភពខាងលើចំនួនបីដងជាប់គ្នា (`request_rejected` ឧ. Anthropic OAuth 403 "សំណើមិនត្រូវបានអនុញ្ញាត" — `open-sse/services/requestRejectedStreak.ts`); ការបដិសេធតែមួយលើកគ្រាន់តែដាក់ការតភ្ជាប់ឱ្យស្ថិតក្នុងរយៈពេលរង់ចាំប៉ុណ្ណោះ diff --git a/docs/i18n/kn/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/kn/docs/architecture/RESILIENCE_GUIDE.md index a2086e554935..b2716109fa9c 100644 --- a/docs/i18n/kn/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/kn/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ OmniRoute ಮೂರು ವಿಭಿನ್ನವಾದರೂ ಪರಸ್ಪರ **ಥಂಡರಿಂಗ್-ಹರ್ಡ್ ವಿರೋಧಿ ರಕ್ಷಣೆ:** ಏಕಕಾಲೀನ ವೈಫಲ್ಯಗಳು ಕೂಲ್ಡೌನ್ ಅನ್ನು ಅತಿಯಾಗಿ ವಿಸ್ತರಿಸುವುದನ್ನು ಅಥವಾ `backoffLevel` ಅನ್ನು ಎರಡು ಬಾರಿ ಹೆಚ್ಚಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ. +ಖಾಲಿಯಲ್ಲದ ಸಹಿಯನ್ನು ಹೊಂದಿರುವ Kiroನ ಬೈನರಿ `reasoningContentEvent` ಫ್ರೇಮ್ಗಳು ಎಕ್ಸಿಕ್ಯೂಟರ್ ಮೂಲಕ ಖಾಲಿ `reasoning_content` ಡೆಲ್ಟಾ ರೂಪದಲ್ಲಿ ತಾರ್ಕಿಕ ಚಟುವಟಿಕೆಯನ್ನು ಉಳಿಸುತ್ತವೆ. ಸಹಿಯನ್ನು ಮುಂದಕ್ಕೆ ಕಳುಹಿಸಲಾಗುವುದಿಲ್ಲ. ಮೆಟಾಡೇಟಾ, ಅಪೂರ್ಣ ಫ್ರೇಮ್ಗಳು ಮತ್ತು ಖಾಲಿ ಸಹಿಗಳು ವಿಷಯಕ್ಕಾಗಿ ಕಾಯುವ ಸಮಯ ಮಿತಿಯನ್ನು ಮರುಪ್ರಾರಂಭಿಸುವುದಿಲ್ಲ; ಸಕ್ರಿಯ ಸ್ಟ್ರೀಮ್ನ ಸ್ವತಂತ್ರ ಸಮಯ ಮಿತಿ ಮತ್ತು ಕ್ಲೈಂಟ್ ರದ್ದತಿ ಇನ್ನೂ ಅನ್ವಯಿಸುತ್ತವೆ. (`open-sse/executors/kiro/reasoning.ts`). + **ಅಂತಿಮ ಸ್ಥಿತಿಗಳು (ಕೂಲ್ಡೌನ್ಗಳಲ್ಲ):** - `banned` — ನಿಷೇಧಿತ-ಕೀವರ್ಡ್ / ಖಾತೆ-ನಿಷೇಧ ಪತ್ತೆಹಚ್ಚುವಿಕೆಯಿಂದ ಹೊಂದಿಸಲಾಗುತ್ತದೆ ([BAN_DETECTION](../security/BAN_DETECTION.md) ನೋಡಿ), ಹಾಗೆಯೇ ಸತತ ಮೂರು ಅಪ್ಸ್ಟ್ರೀಮ್ ಪ್ರತಿ-ವಿನಂತಿ ನಿರಾಕರಣೆಗಳಿಂದಲೂ (`request_rejected`, ಉದಾ. Anthropic OAuth 403 "ವಿನಂತಿಗೆ ಅನುಮತಿಯಿಲ್ಲ" — `open-sse/services/requestRejectedStreak.ts`) ಹೊಂದಿಸಲಾಗುತ್ತದೆ; ಒಂದೇ ನಿರಾಕರಣೆಯು ಸಂಪರ್ಕವನ್ನು ಕೇವಲ ಕೂಲ್ಡೌನ್ಗೆ ಒಳಪಡಿಸುತ್ತದೆ diff --git a/docs/i18n/ko/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ko/docs/architecture/RESILIENCE_GUIDE.md index 5a8889b18e47..fa7128e55e02 100644 --- a/docs/i18n/ko/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ko/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ OmniRoute에는 서로 구분되지만 관련성이 있는 세 가지 복원력 **동시 재시도 폭주 방지 가드:** 동시 실패로 인해 쿨다운이 과도하게 연장되거나 `backoffLevel`이 중복 증가하는 것을 방지합니다. +비어 있지 않은 서명이 있는 Kiro의 바이너리 `reasoningContentEvent` 프레임은 실행기를 통과할 때 빈 `reasoning_content` 델타로 추론 활동을 유지합니다. 서명은 전달되지 않습니다. 메타데이터, 불완전한 프레임, 빈 서명은 콘텐츠 대기 시간을 다시 시작하지 않으며, 활성 스트림의 독립적인 시간 제한과 클라이언트 취소는 계속 적용됩니다. (`open-sse/executors/kiro/reasoning.ts`). + **종료 상태(쿨다운 아님):** - `banned` — 차단 키워드/계정 차단 감지([BAN_DETECTION](../security/BAN_DETECTION.md) 참조) 및 업스트림의 요청별 거부가 3회 연속 발생하면 설정됩니다(`request_rejected`, 예: Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`). 한 번의 거부는 연결을 쿨다운 상태로만 전환합니다. diff --git a/docs/i18n/lt/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/lt/docs/architecture/RESILIENCE_GUIDE.md index 5d72db0b27ad..e0e16013869d 100644 --- a/docs/i18n/lt/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/lt/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Regresijos patikra: `tests/unit/provider-cooldown-window-gate.test.ts`. **Apsauga nuo vienalaikių užklausų antplūdžio:** neleidžia lygiagrečioms triktims pernelyg pratęsti atvėsimo laikotarpio ar dukart padidinti `backoffLevel`. +Kiro dvejetainiai `reasoningContentEvent` kadrai su netuščiu parašu išsaugo samprotavimo veiklą per vykdyklę kaip tuščią `reasoning_content` deltą. Parašas neperduodamas. Metaduomenys, neužbaigti kadrai ir tušti parašai nepaleidžia turinio laiko limito iš naujo; nepriklausomas aktyvaus srauto trukmės limitas ir kliento atšaukimas lieka galioti. (`open-sse/executors/kiro/reasoning.ts`). + **Galutinės būsenos (NE atvėsimo laikotarpiai):** - `banned` — nustatoma aptikus uždraustą raktažodį / paskyros blokavimą (žr. [BAN_DETECTION](../security/BAN_DETECTION.md)), taip pat po trijų iš eilės aukštesniojo serverio atsisakymų vykdyti atskiras užklausas (`request_rejected`, pvz., Anthropic OAuth 403 „Request not allowed“ — `open-sse/services/requestRejectedStreak.ts`); po vieno atsisakymo ryšiui tik pritaikomas atvėsimo laikotarpis diff --git a/docs/i18n/lv/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/lv/docs/architecture/RESILIENCE_GUIDE.md index 44cbd893f212..efcf2b575ad1 100644 --- a/docs/i18n/lv/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/lv/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Regresijas aizsardzība: `tests/unit/provider-cooldown-window-gate.test.ts`. **Aizsardzība pret vienlaicīgu pieprasījumu lavīnu:** novērš situāciju, kurā vienlaicīgas kļūmes pārmērīgi pagarina atdzišanas periodu vai divreiz palielina `backoffLevel`. +Kiro binārie `reasoningContentEvent` kadri ar netukšu parakstu saglabā spriešanas aktivitāti caur izpildītāju kā tukšu `reasoning_content` deltu. Paraksts netiek pārsūtīts. Metadati, nepilnīgi kadri un tukši paraksti nesāk no jauna saturam atvēlēto laiku; neatkarīgais aktīvās plūsmas ilguma ierobežojums un klienta atcelšana joprojām darbojas. (`open-sse/executors/kiro/reasoning.ts`). + **Terminālie stāvokļi (NAV atdzišanas periodi):** - `banned` — tiek iestatīts, konstatējot aizliegtu atslēgvārdu/konta aizliegumu (skatiet [BAN_DETECTION](../security/BAN_DETECTION.md)), kā arī pēc trim secīgiem augšupstraumes atteikumiem atsevišķiem pieprasījumiem (`request_rejected`, piem., Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); viens atteikums savienojumam tikai aktivizē atdzišanas periodu diff --git a/docs/i18n/ml/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ml/docs/architecture/RESILIENCE_GUIDE.md index 0bdcae898698..a5bfd72b2605 100644 --- a/docs/i18n/ml/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ml/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute-ന് വ്യത്യസ്തവും എന്നാൽ പര **തണ്ടറിങ്-ഹെർഡ് വിരുദ്ധ സംരക്ഷണം:** ഒരേസമയം സംഭവിക്കുന്ന പരാജയങ്ങൾ കൂൾഡൗൺ അമിതമായി നീട്ടുന്നതോ `backoffLevel` രണ്ടുതവണ വർധിപ്പിക്കുന്നതോ തടയുന്നു. +ശൂന്യമല്ലാത്ത ഒപ്പുള്ള Kiro-യുടെ ബൈനറി `reasoningContentEvent` ഫ്രെയിമുകൾ എക്സിക്യൂട്ടറിലൂടെ ശൂന്യമായ `reasoning_content` ഡെൽറ്റയായി ചിന്താപ്രവർത്തനം നിലനിർത്തുന്നു. ഒപ്പ് കൈമാറുന്നില്ല. മെറ്റാഡാറ്റ, അപൂർണ്ണ ഫ്രെയിമുകൾ, ശൂന്യമായ ഒപ്പുകൾ എന്നിവ ഉള്ളടക്കത്തിനായുള്ള സമയപരിധി വീണ്ടും ആരംഭിക്കുന്നില്ല; സജീവ സ്ട്രീമിന്റെ സ്വതന്ത്ര സമയപരിധിയും ക്ലയന്റ് റദ്ദാക്കലും തുടർന്നും ബാധകമാണ്. (`open-sse/executors/kiro/reasoning.ts`). + **അന്തിമ നിലകൾ (കൂൾഡൗണുകൾ അല്ല):** - `banned` — നിരോധിത കീവേഡ് / അക്കൗണ്ട് നിരോധനം കണ്ടെത്തുമ്പോഴും ([BAN_DETECTION](../security/BAN_DETECTION.md) കാണുക), തുടർച്ചയായി മൂന്ന് അപ്സ്ട്രീം ഓരോ-അഭ്യർത്ഥന നിരസിക്കലുകൾ (`request_rejected`, ഉദാ. Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`) ഉണ്ടാകുമ്പോഴും സജ്ജമാക്കുന്നു; ഒരൊറ്റ നിരസിക്കൽ കണക്ഷനെ കൂൾഡൗണിൽ മാത്രമേ ആക്കൂ diff --git a/docs/i18n/mr/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/mr/docs/architecture/RESILIENCE_GUIDE.md index 96314e31d1c2..d438ce44d3f7 100644 --- a/docs/i18n/mr/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/mr/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute मध्ये तीन स्वतंत्र परंतु प **अँटी-थंडरिंग-हर्ड संरक्षक:** समांतर अपयशांमुळे कूलडाउन गरजेपेक्षा जास्त वाढणे किंवा `backoffLevel` दोनदा वाढवले जाणे प्रतिबंधित करतो. +रिकामी नसलेली स्वाक्षरी असलेले Kiroचे बायनरी `reasoningContentEvent` फ्रेम्स एक्झिक्युटरमधून रिकामा `reasoning_content` डेल्टा म्हणून तर्कक्रिया जपतात. स्वाक्षरी पुढे पाठवली जात नाही. मेटाडेटा, अपूर्ण फ्रेम्स आणि रिकाम्या स्वाक्षऱ्या आशयासाठीची वेळमर्यादा पुन्हा सुरू करत नाहीत; सक्रिय स्ट्रीमची स्वतंत्र वेळमर्यादा आणि क्लायंटकडून रद्द करणे लागू राहते. (`open-sse/executors/kiro/reasoning.ts`). + **टर्मिनल स्थिती (कूलडाउन नाहीत):** - `banned` — बंदी घातलेल्या कीवर्डच्या / खाते-बंदीच्या शोधामुळे सेट होते ([BAN_DETECTION](../security/BAN_DETECTION.md) पहा), तसेच सलग तीन अपस्ट्रीम प्रति-विनंती नकारांमुळे (`request_rejected`, उदा. Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`) सेट होते; एका नकारामुळे केवळ कनेक्शन कूलडाउनमध्ये जाते diff --git a/docs/i18n/ms/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ms/docs/architecture/RESILIENCE_GUIDE.md index 350f0abc53af..b04219485145 100644 --- a/docs/i18n/ms/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ms/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Pelindung regresi: `tests/unit/provider-cooldown-window-gate.test.ts`. **Perlindungan antikumpulan serentak:** menghalang kegagalan serentak daripada memanjangkan tempoh bertenang secara berlebihan atau menokok `backoffLevel` dua kali. +Bingkai binari `reasoningContentEvent` Kiro dengan tandatangan yang tidak kosong mengekalkan aktiviti penaakulan melalui pelaksana sebagai delta `reasoning_content` kosong. Tandatangan tidak diteruskan. Metadata, bingkai tidak lengkap dan tandatangan kosong tidak memulakan semula had masa kandungan; had masa bebas bagi aliran aktif dan pembatalan oleh klien tetap berkuat kuasa. (`open-sse/executors/kiro/reasoning.ts`). + **Keadaan terminal (BUKAN tempoh bertenang):** - `banned` — ditetapkan oleh pengesanan kata kunci larangan / larangan akaun (lihat [BAN_DETECTION](../security/BAN_DETECTION.md)), dan oleh tiga penolakan huluan berturut-turut bagi setiap permintaan (`request_rejected`, misalnya Anthropic OAuth 403 "Permintaan tidak dibenarkan" — `open-sse/services/requestRejectedStreak.ts`); satu penolakan sahaja hanya mengenakan tempoh bertenang pada sambungan diff --git a/docs/i18n/mt/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/mt/docs/architecture/RESILIENCE_GUIDE.md index b68236dee403..a641899e1cda 100644 --- a/docs/i18n/mt/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/mt/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Kontroll kontra rigressjonijiet: `tests/unit/provider-cooldown-window-gate.test. **Protezzjoni kontra thundering herd:** tipprevjeni li fallimenti konkorrenti jestendu żżejjed il-perjodu ta' stennija jew iżidu `backoffLevel` darbtejn. +Il-frejms binarji `reasoningContentEvent` ta’ Kiro b’firma mhux vojta jippreservaw l-attività ta’ raġunament permezz tal-eżekutur bħala delta `reasoning_content` vojta. Il-firma ma tintbagħatx ’il quddiem. Il-metadata, il-frejms mhux kompluti u l-firem vojta ma jerġgħux jibdew il-limitu ta’ ħin għall-kontenut; il-limitu indipendenti għat-tul tal-fluss attiv u l-kanċellazzjoni mill-klijent jibqgħu japplikaw. (`open-sse/executors/kiro/reasoning.ts`). + **Stati terminali (MHUMIEX perjodi ta' stennija):** - `banned` — issettjat permezz tad-detezzjoni ta' keyword ta' projbizzjoni / projbizzjoni tal-kont (ara [BAN_DETECTION](../security/BAN_DETECTION.md)), u minn tliet rifjuti upstream konsekuttivi għal kull talba (`request_rejected`, eż. Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); rifjut wieħed biss ipoġġi l-konnessjoni f'perjodu ta' stennija diff --git a/docs/i18n/my/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/my/docs/architecture/RESILIENCE_GUIDE.md index 7d926cc67f89..7ba95f01f2cc 100644 --- a/docs/i18n/my/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/my/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Regression ကာကွယ်မှု- `tests/unit/provider-cooldown-window-gat **Anti-thundering-herd ကာကွယ်မှု:** တစ်ပြိုင်နက်ဖြစ်ပေါ်သည့် ချို့ယွင်းမှုများကြောင့် cooldown ကို လိုအပ်သည်ထက် ပိုရှည်စေခြင်း သို့မဟုတ် `backoffLevel` ကို နှစ်ကြိမ်တိုးခြင်းမှ ကာကွယ်သည်။ +ဗလာမဟုတ်သော လက်မှတ်ပါဝင်သည့် Kiro ၏ binary `reasoningContentEvent` frame များသည် executor ကို ဖြတ်သန်းရာတွင် ဗလာ `reasoning_content` delta အဖြစ် စဉ်းစားဆင်ခြင်မှု လှုပ်ရှားနေကြောင်းကို ထိန်းသိမ်းပေးသည်။ လက်မှတ်ကို ဆက်လက်ပို့ဆောင်ခြင်း မပြုပါ။ Metadata၊ မပြည့်စုံသော frame များနှင့် ဗလာလက်မှတ်များသည် အကြောင်းအရာစောင့်ဆိုင်းချိန်ကို ပြန်စတင်ခြင်း မပြုပါ။ လက်ရှိအသက်ဝင်နေသော stream အတွက် သီးခြားအချိန်ကန့်သတ်ချက်နှင့် client မှ ပယ်ဖျက်ခြင်းတို့သည် ဆက်လက်အကျိုးသက်ရောက်သည်။ (`open-sse/executors/kiro/reasoning.ts`). + **အဆုံးသတ်အခြေအနေများ (cooldown မဟုတ်ပါ):** - `banned` — banned-keyword / account-ban စစ်ဆေးတွေ့ရှိမှုကြောင့် သတ်မှတ်သည် ([BAN_DETECTION](../security/BAN_DETECTION.md) ကိုကြည့်ပါ)။ ထို့အပြင် request တစ်ခုချင်းအလိုက် upstream ငြင်းပယ်မှု သုံးကြိမ်ဆက်တိုက် (`request_rejected`၊ ဥပမာ Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`) ဖြစ်ပေါ်လျှင်လည်း သတ်မှတ်သည်။ တစ်ကြိမ်တည်း ငြင်းပယ်မှုသည် ချိတ်ဆက်မှုကို cooldown ချထားရုံသာဖြစ်သည် diff --git a/docs/i18n/ne/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ne/docs/architecture/RESILIENCE_GUIDE.md index f20ec9085385..469d8ddaa396 100644 --- a/docs/i18n/ne/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ne/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute मा तीनवटा फरक तर परस्पर सम **थन्डरिङ-हर्ड-विरोधी सुरक्षा:** समवर्ती विफलताहरूले कूलडाउनलाई अत्यधिक लम्ब्याउन वा `backoffLevel` लाई दोहोरो रूपमा बढाउनबाट रोक्छ। +खाली नभएको हस्ताक्षर भएका Kiro का बाइनरी `reasoningContentEvent` फ्रेमहरूले एक्जिक्युटर हुँदै खाली `reasoning_content` डेल्टाका रूपमा तर्क गतिविधि कायम राख्छन्। हस्ताक्षर अगाडि पठाइँदैन। मेटाडेटा, अपूर्ण फ्रेम र खाली हस्ताक्षरहरूले सामग्रीको समयसीमा पुनः सुरु गर्दैनन्; सक्रिय स्ट्रिमको स्वतन्त्र समयसीमा र क्लाइन्टबाट रद्द गर्ने प्रक्रिया लागू रहन्छन्। (`open-sse/executors/kiro/reasoning.ts`). + **अन्तिम अवस्थाहरू (कूलडाउन होइनन्):** - `banned` — प्रतिबन्धित-किवर्ड / खाता-प्रतिबन्ध पहिचानद्वारा सेट गरिन्छ ([BAN_DETECTION](../security/BAN_DETECTION.md) हेर्नुहोस्), साथै लगातार तीनवटा अपस्ट्रिम प्रति-अनुरोध अस्वीकृतिहरूद्वारा (`request_rejected`, जस्तै Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); एउटा मात्र अस्वीकृतिले जडानलाई केवल कूलडाउनमा राख्छ diff --git a/docs/i18n/nl/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/nl/docs/architecture/RESILIENCE_GUIDE.md index 57051b47889a..466279d2fc56 100644 --- a/docs/i18n/nl/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/nl/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ Regressiebeveiliging: `tests/unit/provider-cooldown-window-gate.test.ts`. **Beveiliging tegen een thundering herd:** voorkomt dat gelijktijdige fouten de afkoelperiode buitensporig verlengen of `backoffLevel` dubbel verhogen. +Binaire `reasoningContentEvent`-frames van Kiro met een niet-lege handtekening behouden de redeneeractiviteit door de executor heen als een lege `reasoning_content`-delta. De handtekening wordt niet doorgestuurd. Metadata, onvolledige frames en lege handtekeningen starten het tijdsbudget voor inhoud niet opnieuw; de onafhankelijke tijdslimiet voor de actieve stream en annulering door de client blijven gelden. (`open-sse/executors/kiro/reasoning.ts`). + **Eindstatussen (GEEN afkoelperioden):** - `banned` — ingesteld door detectie van verboden trefwoorden/accountblokkeringen (zie [BAN_DETECTION](../security/BAN_DETECTION.md)), en door drie opeenvolgende upstreamweigeringen per verzoek (`request_rejected`, bijvoorbeeld Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); één weigering activeert alleen een afkoelperiode voor de verbinding diff --git a/docs/i18n/no/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/no/docs/architecture/RESILIENCE_GUIDE.md index a5eaba47b1a1..2134cfda64cf 100644 --- a/docs/i18n/no/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/no/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Regresjonsvern: `tests/unit/provider-cooldown-window-gate.test.ts`. **Beskyttelse mot «thundering herd»:** hindrer at samtidige feil forlenger ventetiden for mye eller øker `backoffLevel` dobbelt. +Kiros binære `reasoningContentEvent`-rammer med en ikke-tom signatur bevarer resonneringsaktiviteten gjennom eksekutoren som en tom `reasoning_content`-delta. Signaturen videresendes ikke. Metadata, ufullstendige rammer og tomme signaturer starter ikke tidsbudsjettet for innhold på nytt; den uavhengige tidsgrensen for den aktive strømmen og klientens avbrytelse gjelder fortsatt. (`open-sse/executors/kiro/reasoning.ts`). + **Terminaltilstander (IKKE ventetider):** - `banned` — angis ved oppdagelse av forbudte nøkkelord / kontosperring (se [BAN_DETECTION](../security/BAN_DETECTION.md)), og ved tre påfølgende avvisninger per forespørsel fra oppstrømstjenesten (`request_rejected`, f.eks. Anthropic OAuth 403 «Request not allowed» — `open-sse/services/requestRejectedStreak.ts`); én enkelt avvisning setter bare tilkoblingen på vent diff --git a/docs/i18n/or/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/or/docs/architecture/RESILIENCE_GUIDE.md index ee7e91795e17..428742da3dcd 100644 --- a/docs/i18n/or/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/or/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute ରେ ତିନୋଟି ପୃଥକ କିନ୍ତୁ ପରସ୍ **ଆଣ୍ଟି-ଥଣ୍ଡରିଂ-ହର୍ଡ ସୁରକ୍ଷା:** ସମସାମୟିକ ବିଫଳତାଗୁଡ଼ିକୁ କୁଲ୍ଡାଉନ୍ ଅତ୍ୟଧିକ ବଢ଼ାଇବା କିମ୍ବା `backoffLevel`କୁ ଦୁଇଥର ବୃଦ୍ଧି କରିବାରୁ ରୋକେ। +ଖାଲି ନଥିବା ସ୍ୱାକ୍ଷର ଥିବା Kiroର ବାଇନାରି `reasoningContentEvent` ଫ୍ରେମଗୁଡ଼ିକ ଏକ୍ଜିକ୍ୟୁଟର ମାଧ୍ୟମରେ ଖାଲି `reasoning_content` ଡେଲ୍ଟା ଭାବରେ ତର୍କ କାର୍ଯ୍ୟକଳାପକୁ ବଜାୟ ରଖନ୍ତି। ସ୍ୱାକ୍ଷର ଆଗକୁ ପଠାଯାଏ ନାହିଁ। ମେଟାଡାଟା, ଅସମ୍ପୂର୍ଣ୍ଣ ଫ୍ରେମ ଏବଂ ଖାଲି ସ୍ୱାକ୍ଷର ବିଷୟବସ୍ତୁ ପାଇଁ ସମୟସୀମାକୁ ପୁନଃ ଆରମ୍ଭ କରନ୍ତି ନାହିଁ; ସକ୍ରିୟ ଷ୍ଟ୍ରିମର ସ୍ୱତନ୍ତ୍ର ସମୟସୀମା ଓ କ୍ଲାଇଣ୍ଟ ଦ୍ୱାରା ବାତିଲ କରିବା ଲାଗୁ ରହେ। (`open-sse/executors/kiro/reasoning.ts`). + **ଟର୍ମିନାଲ୍ ଅବସ୍ଥାଗୁଡ଼ିକ (କୁଲ୍ଡାଉନ୍ ନୁହେଁ):** - `banned` — ନିଷିଦ୍ଧ-କୀୱାର୍ଡ / ଆକାଉଣ୍ଟ-ବ୍ୟାନ୍ ଚିହ୍ନଟକରଣ ([BAN_DETECTION](../security/BAN_DETECTION.md) ଦେଖନ୍ତୁ), ଏବଂ ଲଗାତାର ତିନୋଟି ଅପ୍ଷ୍ଟ୍ରିମ୍ ପ୍ରତି-ଅନୁରୋଧ ପ୍ରତ୍ୟାଖ୍ୟାନ (`request_rejected`, ଯଥା Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`) ଦ୍ୱାରା ସେଟ୍ କରାଯାଏ; ଗୋଟିଏ ପ୍ରତ୍ୟାଖ୍ୟାନ କେବଳ ସଂଯୋଗକୁ କୁଲ୍ଡାଉନ୍ରେ ରଖେ diff --git a/docs/i18n/pa/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/pa/docs/architecture/RESILIENCE_GUIDE.md index 34ff87778a65..4fe04c6fe6af 100644 --- a/docs/i18n/pa/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/pa/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute ਵਿੱਚ ਤਿੰਨ ਵੱਖਰੀਆਂ ਪਰ ਆਪਸ ਵ **ਐਂਟੀ-ਥੰਡਰਿੰਗ-ਹਰਡ ਸੁਰੱਖਿਆ:** ਇੱਕੋ ਸਮੇਂ ਹੋਣ ਵਾਲੀਆਂ ਅਸਫਲਤਾਵਾਂ ਨੂੰ ਕੂਲਡਾਊਨ ਬੇਲੋੜਾ ਵਧਾਉਣ ਜਾਂ `backoffLevel` ਨੂੰ ਦੋ ਵਾਰ ਵਧਾਉਣ ਤੋਂ ਰੋਕਦੀ ਹੈ। +ਖਾਲੀ ਨਾ ਹੋਣ ਵਾਲੇ ਦਸਤਖਤ ਵਾਲੇ Kiro ਦੇ ਬਾਈਨਰੀ `reasoningContentEvent` ਫ੍ਰੇਮ ਐਗਜ਼ੀਕਿਊਟਰ ਰਾਹੀਂ ਖਾਲੀ `reasoning_content` ਡੈਲਟਾ ਵਜੋਂ ਤਰਕ ਦੀ ਸਰਗਰਮੀ ਕਾਇਮ ਰੱਖਦੇ ਹਨ। ਦਸਤਖਤ ਅੱਗੇ ਨਹੀਂ ਭੇਜੇ ਜਾਂਦੇ। ਮੈਟਾਡਾਟਾ, ਅਧੂਰੇ ਫ੍ਰੇਮ ਅਤੇ ਖਾਲੀ ਦਸਤਖਤ ਸਮੱਗਰੀ ਲਈ ਸਮਾਂ ਸੀਮਾ ਮੁੜ ਸ਼ੁਰੂ ਨਹੀਂ ਕਰਦੇ; ਸਰਗਰਮ ਸਟ੍ਰੀਮ ਦੀ ਸੁਤੰਤਰ ਸਮਾਂ ਸੀਮਾ ਅਤੇ ਕਲਾਇੰਟ ਵੱਲੋਂ ਰੱਦ ਕਰਨਾ ਲਾਗੂ ਰਹਿੰਦੇ ਹਨ। (`open-sse/executors/kiro/reasoning.ts`). + **ਟਰਮੀਨਲ ਸਥਿਤੀਆਂ (ਕੂਲਡਾਊਨ ਨਹੀਂ):** - `banned` — ਪਾਬੰਦੀਸ਼ੁਦਾ ਕੀਵਰਡ/ਖਾਤਾ-ਪਾਬੰਦੀ ਪਛਾਣ ਦੁਆਰਾ ਸੈੱਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ([BAN_DETECTION](../security/BAN_DETECTION.md) ਵੇਖੋ), ਅਤੇ ਅੱਪਸਟ੍ਰੀਮ ਵੱਲੋਂ ਪ੍ਰਤੀ-ਬੇਨਤੀ ਲਗਾਤਾਰ ਤਿੰਨ ਇਨਕਾਰਾਂ ਦੁਆਰਾ (`request_rejected`, ਉਦਾਹਰਨ ਵਜੋਂ Anthropic OAuth 403 "ਬੇਨਤੀ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ" — `open-sse/services/requestRejectedStreak.ts`); ਇੱਕੋ ਇਨਕਾਰ ਸਿਰਫ਼ ਕਨੈਕਸ਼ਨ ਨੂੰ ਕੂਲਡਾਊਨ ਵਿੱਚ ਪਾਉਂਦਾ ਹੈ diff --git a/docs/i18n/phi/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/phi/docs/architecture/RESILIENCE_GUIDE.md index 2f9a1ff0efa8..6098dcf933db 100644 --- a/docs/i18n/phi/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/phi/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Regression guard: `tests/unit/provider-cooldown-window-gate.test.ts`. **Pananggalang laban sa thundering herd:** pinipigilan ang magkakasabay na failure na labis na magpahaba ng cooldown o magdoble ng increment sa `backoffLevel`. +Ang mga binary frame na `reasoningContentEvent` ng Kiro na may hindi bakanteng signature ay nagpapanatili ng aktibidad ng pangangatwiran sa executor bilang bakanteng delta na `reasoning_content`. Hindi ipinapasa ang signature. Hindi nire-reset ng metadata, mga hindi kumpletong frame, at mga bakanteng signature ang oras na nakalaan para sa nilalaman; nananatiling umiiral ang hiwalay na limitasyon sa tagal ng aktibong stream at pagkansela ng client. (`open-sse/executors/kiro/reasoning.ts`). + **Mga terminal state (HINDI mga cooldown):** - `banned` — itinatakda ng pagtukoy sa banned-keyword / account-ban (tingnan ang [BAN_DETECTION](../security/BAN_DETECTION.md)), at ng tatlong magkakasunod na upstream na pagtanggi sa bawat request (`request_rejected`, hal. Anthropic OAuth 403 "Hindi pinapayagan ang request" — `open-sse/services/requestRejectedStreak.ts`); ang isang pagtanggi lamang ay naglalagay lang sa koneksyon sa cooldown diff --git a/docs/i18n/pl/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/pl/docs/architecture/RESILIENCE_GUIDE.md index 9e1ba733afe1..828539d79a5a 100644 --- a/docs/i18n/pl/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/pl/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Test zabezpieczający przed regresją: `tests/unit/provider-cooldown-window-gate **Ochrona przed lawiną równoczesnych żądań:** zapobiega nadmiernemu wydłużaniu okresu karencji lub podwójnemu zwiększaniu `backoffLevel` przez równoczesne błędy. +Binarne ramki `reasoningContentEvent` Kiro z niepustą sygnaturą zachowują aktywność rozumowania podczas przejścia przez executor jako pustą deltę `reasoning_content`. Sygnatura nie jest przekazywana dalej. Metadane, niekompletne ramki i puste sygnatury nie uruchamiają ponownie limitu czasu na treść; niezależny limit czasu aktywnego strumienia i anulowanie przez klienta nadal obowiązują. (`open-sse/executors/kiro/reasoning.ts`). + **Stany końcowe (NIE okresy karencji):** - `banned` — ustawiany po wykryciu słowa kluczowego oznaczającego blokadę lub blokady konta (zobacz [BAN_DETECTION](../security/BAN_DETECTION.md)), a także po trzech kolejnych odmowach usługi nadrzędnej dotyczących pojedynczego żądania (`request_rejected`, np. Anthropic OAuth 403 „Request not allowed” — `open-sse/services/requestRejectedStreak.ts`); pojedyncza odmowa jedynie wprowadza połączenie w okres karencji diff --git a/docs/i18n/pt-BR/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/pt-BR/docs/architecture/RESILIENCE_GUIDE.md index 68693c59bb14..ac8bbf0154c9 100644 --- a/docs/i18n/pt-BR/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/pt-BR/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Proteção contra regressão: `tests/unit/provider-cooldown-window-gate.test.ts` **Proteção contra efeito manada:** impede que falhas simultâneas estendam excessivamente o cooldown ou incrementem `backoffLevel` duas vezes. +Os frames binários `reasoningContentEvent` do Kiro com assinatura não vazia preservam a atividade de raciocínio ao passar pelo executor como um delta `reasoning_content` vazio. A assinatura não é encaminhada. Metadados, frames incompletos e assinaturas vazias não reiniciam o prazo para conteúdo; o limite independente de duração do fluxo ativo e o cancelamento pelo cliente continuam valendo. (`open-sse/executors/kiro/reasoning.ts`). + **Estados terminais (NÃO são cooldowns):** - `banned` — definido pela detecção de palavra-chave de banimento/banimento de conta (consulte [BAN_DETECTION](../security/BAN_DETECTION.md)) e por três recusas upstream consecutivas por solicitação (`request_rejected`, por exemplo, OAuth 403 da Anthropic, "Solicitação não permitida" — `open-sse/services/requestRejectedStreak.ts`); uma única recusa apenas coloca a conexão em cooldown diff --git a/docs/i18n/pt/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/pt/docs/architecture/RESILIENCE_GUIDE.md index 3cd397e91205..88c1346e9bc2 100644 --- a/docs/i18n/pt/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/pt/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Proteção contra regressões: `tests/unit/provider-cooldown-window-gate.test.ts **Proteção contra efeito de manada:** impede que falhas simultâneas prolonguem excessivamente o período de espera ou incrementem `backoffLevel` duas vezes. +Os frames binários `reasoningContentEvent` do Kiro com uma assinatura não vazia preservam a atividade de raciocínio ao passar pelo executor como um delta `reasoning_content` vazio. A assinatura não é encaminhada. Metadados, frames incompletos e assinaturas vazias não reiniciam o prazo para conteúdo; o limite independente de duração do fluxo ativo e o cancelamento pelo cliente continuam em vigor. (`open-sse/executors/kiro/reasoning.ts`). + **Estados terminais (NÃO são períodos de espera):** - `banned` — definido pela deteção de palavra-chave proibida / conta banida (consulte [BAN_DETECTION](../security/BAN_DETECTION.md)) e por três recusas consecutivas por pedido do serviço a montante (`request_rejected`, por exemplo, Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); uma única recusa apenas coloca a ligação em período de espera diff --git a/docs/i18n/ro/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ro/docs/architecture/RESILIENCE_GUIDE.md index f928c86bac5c..ec344e44a50f 100644 --- a/docs/i18n/ro/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ro/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ Test de protecție împotriva regresiilor: `tests/unit/provider-cooldown-window- **Protecție anti-thundering-herd:** împiedică erorile concurente să prelungească excesiv perioada de așteptare sau să incrementeze de două ori `backoffLevel`. +Cadrele binare `reasoningContentEvent` Kiro cu o semnătură nevidă păstrează activitatea de raționament prin executor ca deltă `reasoning_content` goală. Semnătura nu este transmisă mai departe. Metadatele, cadrele incomplete și semnăturile goale nu repornesc limita de timp pentru conținut; limita independentă a duratei fluxului activ și anularea de către client rămân în vigoare. (`open-sse/executors/kiro/reasoning.ts`). + **Stări terminale (NU perioade de așteptare):** - `banned` — setată prin detectarea cuvintelor-cheie asociate interdicției/detectarea blocării contului (consultați [BAN_DETECTION](../security/BAN_DETECTION.md)) și prin trei refuzuri consecutive per solicitare din amonte (`request_rejected`, de exemplu, răspunsul Anthropic OAuth 403 „Request not allowed” — `open-sse/services/requestRejectedStreak.ts`); un singur refuz doar plasează conexiunea în perioada de așteptare diff --git a/docs/i18n/ru/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ru/docs/architecture/RESILIENCE_GUIDE.md index da1ec8ff69f9..623f5da1febc 100644 --- a/docs/i18n/ru/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ru/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ OmniRoute имеет три отдельных, но взаимосвязанн **Защита от лавины запросов:** не позволяет одновременным сбоям чрезмерно продлевать период ожидания или дважды увеличивать `backoffLevel`. +Двоичные кадры Kiro `reasoningContentEvent` с непустой подписью сохраняют активность рассуждения при прохождении через исполнитель в виде пустой дельты `reasoning_content`. Подпись не передаётся дальше. Метаданные, неполные кадры и пустые подписи не перезапускают лимит ожидания содержимого; независимый предел длительности активного потока и отмена клиентом продолжают действовать. (`open-sse/executors/kiro/reasoning.ts`). + **Терминальные состояния (НЕ периоды ожидания):** - `banned` — устанавливается при обнаружении ключевого слова блокировки / блокировки учётной записи (см. [BAN_DETECTION](../security/BAN_DETECTION.md)), а также после трёх последовательных отказов вышестоящего сервиса на отдельные запросы (`request_rejected`, например Anthropic OAuth 403 "Запрос не разрешён" — `open-sse/services/requestRejectedStreak.ts`); одиночный отказ лишь переводит подключение в режим ожидания diff --git a/docs/i18n/si/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/si/docs/architecture/RESILIENCE_GUIDE.md index 58eb0e1accea..7a47a362ec21 100644 --- a/docs/i18n/si/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/si/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ OmniRoute සතුව එකිනෙකට වෙනස් නමුත් ස **Anti-thundering-herd ආරක්ෂණය:** සමගාමී අසාර්ථකවීම් cooldown එක අධික ලෙස දිගු කිරීම හෝ `backoffLevel` දෙවරක් වැඩි කිරීම වළක්වයි. +හිස් නොවන අත්සනක් සහිත Kiro හි ද්විමය `reasoningContentEvent` රාමු, ක්‍රියාත්මකකරු හරහා හිස් `reasoning_content` ඩෙල්ටාවක් ලෙස තර්කන ක්‍රියාකාරිත්වය රඳවා ගනී. අත්සන ඉදිරියට යවන්නේ නැත. පාරදත්ත, අසම්පූර්ණ රාමු සහ හිස් අත්සන් අන්තර්ගතය සඳහා කාල සීමාව නැවත ආරම්භ නොකරයි; සක්‍රිය ප්‍රවාහයේ ස්වාධීන කාල සීමාව සහ සේවාලාභියාගේ අවලංගු කිරීම තවමත් අදාළ වේ. (`open-sse/executors/kiro/reasoning.ts`). + **අවසන් තත්ත්ව (cooldown නොවේ):** - `banned` — තහනම්-keyword / account-ban හඳුනාගැනීම මඟින් සකසනු ලැබේ ([BAN_DETECTION](../security/BAN_DETECTION.md) බලන්න), එසේම අඛණ්ඩ upstream එක්-request ප්රතික්ෂේප කිරීම් තුනක් (`request_rejected`, උදා. Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`) මඟින්ද සකසනු ලැබේ; එක් ප්රතික්ෂේප කිරීමක් පමණක් සම්බන්ධතාව cooldown කරයි diff --git a/docs/i18n/sk/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/sk/docs/architecture/RESILIENCE_GUIDE.md index c1d0a1f89c69..7eeeec6a02b5 100644 --- a/docs/i18n/sk/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/sk/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Ochrana proti regresii: `tests/unit/provider-cooldown-window-gate.test.ts`. **Ochrana proti nárazovému súbehu:** zabraňuje tomu, aby súbežné zlyhania nadmerne predĺžili čakaciu lehotu alebo dvakrát zvýšili `backoffLevel`. +Binárne rámce Kiro `reasoningContentEvent` s neprázdnym podpisom zachovávajú aktivitu uvažovania cez vykonávací modul ako prázdnu deltu `reasoning_content`. Podpis sa neposiela ďalej. Metadáta, neúplné rámce a prázdne podpisy nereštartujú časový limit pre obsah; nezávislý limit trvania aktívneho streamu a zrušenie klientom zostávajú v platnosti. (`open-sse/executors/kiro/reasoning.ts`). + **Koncové stavy (NIE čakacie lehoty):** - `banned` — nastavuje sa pri detekcii zakázaného kľúčového slova/zablokovania účtu (pozrite si [BAN_DETECTION](../security/BAN_DETECTION.md)) a po troch po sebe nasledujúcich upstream odmietnutiach jednotlivých požiadaviek (`request_rejected`, napr. Anthropic OAuth 403 „Request not allowed“ — `open-sse/services/requestRejectedStreak.ts`); jedno odmietnutie iba aktivuje čakaciu lehotu pripojenia diff --git a/docs/i18n/sl/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/sl/docs/architecture/RESILIENCE_GUIDE.md index a0cebd2ebf1b..a7d575b8ed35 100644 --- a/docs/i18n/sl/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/sl/docs/architecture/RESILIENCE_GUIDE.md @@ -97,6 +97,8 @@ Varovalo pred regresijami: `tests/unit/provider-cooldown-window-gate.test.ts`. **Zaščita pred stampedom zahtev:** preprečuje, da bi sočasne napake čezmerno podaljšale ohlajanje ali dvakrat povečale `backoffLevel`. +Binarni okvirji Kiro `reasoningContentEvent` z nepraznim podpisom ohranijo dejavnost sklepanja skozi izvajalnik kot prazno delto `reasoning_content`. Podpis se ne posreduje. Metapodatki, nepopolni okvirji in prazni podpisi ne zaženejo znova časovne omejitve za vsebino; neodvisna omejitev trajanja aktivnega toka in preklic odjemalca še vedno veljata. (`open-sse/executors/kiro/reasoning.ts`). + **Končna stanja (NISO ohlajanja):** - `banned` — nastavi se ob zaznavi prepovedane ključne besede/prepovedi računa (glejte [BAN_DETECTION](../security/BAN_DETECTION.md)) in ob treh zaporednih zavrnitvah posamezne zahteve s strani nadrejenega strežnika (`request_rejected`, npr. Anthropic OAuth 403 »Request not allowed« — `open-sse/services/requestRejectedStreak.ts`); posamezna zavrnitev povezavo le začasno ohladi diff --git a/docs/i18n/sr/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/sr/docs/architecture/RESILIENCE_GUIDE.md index b2ddb690bb0b..9d320aaaefea 100644 --- a/docs/i18n/sr/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/sr/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute има три различита, али повезана механи **Заштита од наглог истовременог оптерећења:** спречава да истовремени неуспеси прекомерно продуже период хлађења или двапут увећају `backoffLevel`. +Кирови бинарни оквири `reasoningContentEvent` са непразним потписом чувају активност расуђивања кроз извршилац као празну делту `reasoning_content`. Потпис се не прослеђује. Метаподаци, непотпуни оквири и празни потписи не покрећу поново временско ограничење за садржај; независно ограничење трајања активног тока и отказивање од стране клијента остају на снази. (`open-sse/executors/kiro/reasoning.ts`). + **Коначна стања (НИСУ периоди хлађења):** - `banned` — поставља се откривањем забрањене кључне речи / забране налога (погледајте [BAN_DETECTION](../security/BAN_DETECTION.md)), као и након три узастопна узводна одбијања по захтеву (`request_rejected`, нпр. Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); једно одбијање само ставља везу у период хлађења diff --git a/docs/i18n/sv/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/sv/docs/architecture/RESILIENCE_GUIDE.md index 901fd1a5337d..4e831499dfc7 100644 --- a/docs/i18n/sv/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/sv/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Regressionsskydd: `tests/unit/provider-cooldown-window-gate.test.ts`. **Skydd mot stampede-effekt:** förhindrar att samtidiga fel förlänger väntetiden för mycket eller ökar `backoffLevel` dubbelt. +Kiros binära `reasoningContentEvent`-ramar med en icke-tom signatur bevarar resonemangsaktiviteten genom exekveraren som ett tomt `reasoning_content`-delta. Signaturen vidarebefordras inte. Metadata, ofullständiga ramar och tomma signaturer startar inte om tidsbudgeten för innehåll; den oberoende tidsgränsen för den aktiva strömmen och klientens avbrytande gäller fortfarande. (`open-sse/executors/kiro/reasoning.ts`). + **Sluttillstånd (INTE väntetider):** - `banned` — anges vid identifiering av förbjudna nyckelord/kontoblockering (se [BAN_DETECTION](../security/BAN_DETECTION.md)) och vid tre på varandra följande avvisningar per begäran från uppströmstjänsten (`request_rejected`, t.ex. Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); en enskild avvisning försätter endast anslutningen i vänteläge diff --git a/docs/i18n/sw/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/sw/docs/architecture/RESILIENCE_GUIDE.md index 63eecf4c82d2..29c69a12c664 100644 --- a/docs/i18n/sw/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/sw/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Kinga dhidi ya kurudi kwa hitilafu: `tests/unit/provider-cooldown-window-gate.te **Kinga dhidi ya msongamano wa maombi ya wakati mmoja:** huzuia hitilafu zinazotokea kwa wakati mmoja kuongeza kipindi cha kusubiri kupita kiasi au kuongeza `backoffLevel` mara mbili. +Fremu za binary za Kiro za `reasoningContentEvent` zenye sahihi isiyo tupu huhifadhi shughuli ya kufikiri kupitia kitekelezaji kama delta tupu ya `reasoning_content`. Sahihi haipitishwi. Metadata, fremu zisizokamilika na sahihi tupu hazianzi upya muda wa kusubiri maudhui; kikomo huru cha muda wa mtiririko unaoendelea na kughairi kwa mteja bado vinatumika. (`open-sse/executors/kiro/reasoning.ts`). + **Hali za mwisho (SI vipindi vya kusubiri):** - `banned` — huwekwa na utambuzi wa neno muhimu lililopigwa marufuku / kupigwa marufuku kwa akaunti (angalia [BAN_DETECTION](../security/BAN_DETECTION.md)), na pia na kukataliwa mara tatu mfululizo kwa kila ombi na mfumo wa juu (`request_rejected`, kwa mfano Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); kukataliwa mara moja huweka tu muunganisho katika kipindi cha kusubiri diff --git a/docs/i18n/ta/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ta/docs/architecture/RESILIENCE_GUIDE.md index c2706e8d1a54..1a9c426ab630 100644 --- a/docs/i18n/ta/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ta/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute மூன்று தனித்துவமான, ஆனால் **ஒரே நேரத் திரள் கோரிக்கை எதிர்ப்புப் பாதுகாப்பு:** ஒரே நேரத்தில் ஏற்படும் தோல்விகள் கூல்டவுனை அளவுக்கு அதிகமாக நீட்டிப்பதையோ `backoffLevel`-ஐ இருமுறை அதிகரிப்பதையோ தடுக்கிறது. +காலியாக இல்லாத கையொப்பத்தைக் கொண்ட Kiroவின் பைனரி `reasoningContentEvent` ஃப்ரேம்கள், செயலாக்கி வழியாகக் காலியான `reasoning_content` டெல்டாவாகப் பகுத்தறிவு செயல்பாட்டைப் பாதுகாக்கின்றன. கையொப்பம் அனுப்பப்படுவதில்லை. மெட்டாடேட்டா, முழுமையற்ற ஃப்ரேம்கள் மற்றும் காலியான கையொப்பங்கள் உள்ளடக்கத்திற்கான காலவரம்பை மீண்டும் தொடங்குவதில்லை; செயலில் உள்ள ஸ்ட்ரீமின் தனித்த காலவரம்பும் கிளையன்ட் ரத்துசெய்தலும் தொடர்ந்து பொருந்தும். (`open-sse/executors/kiro/reasoning.ts`). + **இறுதி நிலைகள் (கூல்டவுன்கள் அல்ல):** - `banned` — தடைசெய்யப்பட்ட முக்கியச்சொல் / கணக்குத் தடை கண்டறிதலால் அமைக்கப்படுகிறது ([BAN_DETECTION](../security/BAN_DETECTION.md)-ஐப் பார்க்கவும்), மேலும் தொடர்ச்சியாக ஏற்படும் மூன்று மேல்நிலை ஒவ்வொரு-கோரிக்கை மறுப்புகளாலும் (`request_rejected`, எ.கா. Anthropic OAuth 403 "கோரிக்கை அனுமதிக்கப்படவில்லை" — `open-sse/services/requestRejectedStreak.ts`) அமைக்கப்படுகிறது; ஒரு தனிப்பட்ட மறுப்பு இணைப்பைக் கூல்டவுனில் மட்டுமே வைக்கும் diff --git a/docs/i18n/te/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/te/docs/architecture/RESILIENCE_GUIDE.md index f3ab4a3a5d04..494ba89bfaf3 100644 --- a/docs/i18n/te/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/te/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ OmniRouteలో మూడు విభిన్నమైన, కానీ పర **థండరింగ్-హెర్డ్ నిరోధక రక్షణ:** ఏకకాల వైఫల్యాలు కూల్డౌన్ను అతిగా పొడిగించకుండా లేదా `backoffLevel`ను రెండుసార్లు పెంచకుండా నిరోధిస్తుంది. +ఖాళీ కాని సంతకం ఉన్న Kiro బైనరీ `reasoningContentEvent` ఫ్రేమ్లు ఎగ్జిక్యూటర్ ద్వారా ఖాళీ `reasoning_content` డెల్టాగా తార్కిక కార్యకలాపాన్ని కొనసాగిస్తాయి. సంతకం ముందుకు పంపబడదు. మెటాడేటా, అసంపూర్ణ ఫ్రేమ్లు మరియు ఖాళీ సంతకాలు కంటెంట్కు ఉన్న సమయ పరిమితిని మళ్లీ ప్రారంభించవు; క్రియాశీల స్ట్రీమ్ యొక్క స్వతంత్ర సమయ పరిమితి మరియు క్లయింట్ రద్దు ఇంకా వర్తిస్తాయి. (`open-sse/executors/kiro/reasoning.ts`). + **టెర్మినల్ స్థితులు (కూల్డౌన్లు కావు):** - `banned` — నిషేధిత కీవర్డ్ / ఖాతా నిషేధ గుర్తింపు ద్వారా సెట్ చేయబడుతుంది ([BAN_DETECTION](../security/BAN_DETECTION.md) చూడండి), అలాగే వరుసగా మూడు అప్స్ట్రీమ్ ప్రతి-అభ్యర్థన తిరస్కరణల ద్వారా (`request_rejected`, ఉదా. Anthropic OAuth 403 "అభ్యర్థనకు అనుమతి లేదు" — `open-sse/services/requestRejectedStreak.ts`) సెట్ చేయబడుతుంది; ఒక్క తిరస్కరణ కనెక్షన్ను కూల్డౌన్లో మాత్రమే ఉంచుతుంది diff --git a/docs/i18n/th/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/th/docs/architecture/RESILIENCE_GUIDE.md index 62602ef98535..4fc71f56ce0d 100644 --- a/docs/i18n/th/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/th/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute มีกลไกความยืดหยุ่นที่แต **กลไกป้องกัน thundering herd:** ป้องกันไม่ให้ความล้มเหลวที่เกิดขึ้นพร้อมกันขยายช่วงพักนานเกินไปหรือเพิ่ม `backoffLevel` ซ้ำ +เฟรมไบนารี `reasoningContentEvent` ของ Kiro ที่มีลายเซ็นไม่ว่างจะรักษาสัญญาณการทำงานของการให้เหตุผลผ่านตัวประมวลผลเป็นเดลตา `reasoning_content` ว่าง โดยไม่ส่งต่อลายเซ็น เมทาดาทา เฟรมที่ยังไม่สมบูรณ์ และลายเซ็นว่างจะไม่เริ่มนับเวลารอเนื้อหาใหม่ ส่วนขีดจำกัดเวลาอิสระของสตรีมที่กำลังทำงานและการยกเลิกจากไคลเอนต์ยังคงมีผล (`open-sse/executors/kiro/reasoning.ts`). + **สถานะสิ้นสุด (ไม่ใช่ช่วงพัก):** - `banned` — ตั้งค่าโดยการตรวจจับคีย์เวิร์ดการแบน/การแบนบัญชี (ดู [BAN_DETECTION](../security/BAN_DETECTION.md)) และโดยการที่ upstream ปฏิเสธคำขอรายครั้งติดต่อกันสามครั้ง (`request_rejected` เช่น Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); การปฏิเสธเพียงครั้งเดียวจะทำให้การเชื่อมต่อเข้าสู่ช่วงพักเท่านั้น diff --git a/docs/i18n/tr/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/tr/docs/architecture/RESILIENCE_GUIDE.md index 750a1ea76060..d342b8ae0565 100644 --- a/docs/i18n/tr/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/tr/docs/architecture/RESILIENCE_GUIDE.md @@ -90,6 +90,8 @@ Regresyon koruması: `tests/unit/provider-cooldown-window-gate.test.ts`. **Ani yüklenme önleme koruması:** eşzamanlı hataların bekleme süresini aşırı uzatmasını veya `backoffLevel` değerini iki kez artırmasını önler. +Kiro’nun boş olmayan imzalı ikili `reasoningContentEvent` çerçeveleri, akıl yürütme etkinliğini yürütücü üzerinden boş bir `reasoning_content` deltası olarak korur. İmza iletilmez. Meta veriler, tamamlanmamış çerçeveler ve boş imzalar içerik için süre bütçesini yeniden başlatmaz; etkin akışın bağımsız süre sınırı ve istemci iptali geçerliliğini korur. (`open-sse/executors/kiro/reasoning.ts`). + **Son durumlar (bekleme süreleri DEĞİLDİR):** - `banned` — yasaklı anahtar sözcük/hesap yasağı algılamasıyla (bkz. [BAN_DETECTION](../security/BAN_DETECTION.md)) ve art arda üç yukarı akış istek başına reddiyle (`request_rejected`, ör. Anthropic OAuth 403 "İsteğe izin verilmiyor" — `open-sse/services/requestRejectedStreak.ts`) ayarlanır; tek bir ret yalnızca bağlantıyı beklemeye alır diff --git a/docs/i18n/uk-UA/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/uk-UA/docs/architecture/RESILIENCE_GUIDE.md index 0b224a0cfdfa..8f4217705f38 100644 --- a/docs/i18n/uk-UA/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/uk-UA/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ OmniRoute має три окремі, але взаємопов’язані м **Захист від лавиноподібного навантаження:** запобігає надмірному подовженню періоду очікування або подвійному збільшенню `backoffLevel` через одночасні збої. +Двійкові кадри Kiro `reasoningContentEvent` із непорожнім підписом зберігають активність міркування під час проходження через виконавець як порожню дельту `reasoning_content`. Підпис не передається далі. Метадані, неповні кадри та порожні підписи не перезапускають ліміт очікування вмісту; незалежний ліміт тривалості активного потоку та скасування клієнтом залишаються чинними. (`open-sse/executors/kiro/reasoning.ts`). + **Термінальні стани (НЕ періоди очікування):** - `banned` — установлюється в разі виявлення ключового слова блокування / блокування облікового запису (див. [BAN_DETECTION](../security/BAN_DETECTION.md)), а також після трьох послідовних відмов провайдера для окремих запитів (`request_rejected`, наприклад Anthropic OAuth 403 «Запит не дозволено» — `open-sse/services/requestRejectedStreak.ts`); одна відмова лише переводить підключення в період очікування diff --git a/docs/i18n/ur/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/ur/docs/architecture/RESILIENCE_GUIDE.md index f7a0523fe0a3..a2ef5def02bf 100644 --- a/docs/i18n/ur/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/ur/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ OmniRoute میں لچک پذیری کے تین الگ مگر باہم متعلق **Anti-thundering-herd حفاظتی بندوبست:** بیک وقت ہونے والی ناکامیوں کو کول ڈاؤن ضرورت سے زیادہ بڑھانے یا `backoffLevel` کو دو بار بڑھانے سے روکتا ہے۔ +غیر خالی دستخط والے Kiro کے بائنری `reasoningContentEvent` فریم، ایگزیکیوٹر سے گزرتے ہوئے خالی `reasoning_content` ڈیلٹا کی صورت میں استدلال کی سرگرمی برقرار رکھتے ہیں۔ دستخط آگے نہیں بھیجا جاتا۔ میٹا ڈیٹا، نامکمل فریم اور خالی دستخط مواد کی وقت کی حد دوبارہ شروع نہیں کرتے؛ فعال اسٹریم کی آزاد وقت کی حد اور کلائنٹ کی منسوخی نافذ رہتی ہیں۔ (`open-sse/executors/kiro/reasoning.ts`). + **اختتامی حالتیں (کول ڈاؤن نہیں):** - `banned` — ممنوعہ کلیدی لفظ / اکاؤنٹ پابندی کی شناخت کے ذریعے مقرر ہوتا ہے (دیکھیے [BAN_DETECTION](../security/BAN_DETECTION.md))، نیز مسلسل تین upstream فی-request انکار (`request_rejected`، مثلاً Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`) کے بعد؛ ایک انفرادی انکار صرف کنکشن کو کول ڈاؤن میں ڈالتا ہے diff --git a/docs/i18n/uz/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/uz/docs/architecture/RESILIENCE_GUIDE.md index 2f80cc6718ce..41f9745a3ff2 100644 --- a/docs/i18n/uz/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/uz/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ Regressiyadan himoya: `tests/unit/provider-cooldown-window-gate.test.ts`. **Birdaniga ommaviy qayta urinishdan himoya:** bir vaqtdagi nosozliklar sovish davrini haddan tashqari uzaytirishi yoki `backoffLevel` qiymatini ikki marta oshirishining oldini oladi. +Kiro’ning bo‘sh bo‘lmagan imzoli ikkilik `reasoningContentEvent` kadrlari ijrochi orqali fikrlash faolligini bo‘sh `reasoning_content` deltasi sifatida saqlaydi. Imzo uzatilmaydi. Metama’lumotlar, to‘liq bo‘lmagan kadrlar va bo‘sh imzolar kontent uchun vaqt limitini qayta boshlamaydi; faol oqimning mustaqil vaqt chegarasi va mijozning bekor qilishi amal qilishda davom etadi. (`open-sse/executors/kiro/reasoning.ts`). + **Yakuniy holatlar (sovish davrlari EMAS):** - `banned` — taqiqlangan kalit so‘zi / hisob bloklanishini aniqlash orqali o‘rnatiladi ([BAN_DETECTION](../security/BAN_DETECTION.md) ga qarang), shuningdek, yuqori oqimdagi har bir so‘rov bo‘yicha ketma-ket uchta rad javobidan so‘ng (`request_rejected`, masalan, Anthropic OAuth 403 "So‘rovga ruxsat berilmagan" — `open-sse/services/requestRejectedStreak.ts`); bitta rad javobi ulanishni faqat sovish holatiga o‘tkazadi diff --git a/docs/i18n/vi/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/vi/docs/architecture/RESILIENCE_GUIDE.md index a3198fedbb3a..d528d8953ee4 100644 --- a/docs/i18n/vi/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/vi/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Biện pháp bảo vệ chống hồi quy: `tests/unit/provider-cooldown-window- **Cơ chế bảo vệ chống hiệu ứng đám đông:** ngăn các lỗi đồng thời kéo dài thời gian chờ quá mức hoặc tăng `backoffLevel` hai lần. +Các khung nhị phân `reasoningContentEvent` của Kiro có chữ ký không rỗng duy trì hoạt động suy luận qua bộ thực thi dưới dạng delta `reasoning_content` rỗng. Chữ ký không được chuyển tiếp. Siêu dữ liệu, khung chưa hoàn chỉnh và chữ ký rỗng không đặt lại thời gian chờ nội dung; giới hạn thời gian độc lập của luồng đang hoạt động và thao tác hủy từ máy khách vẫn có hiệu lực. (`open-sse/executors/kiro/reasoning.ts`). + **Trạng thái kết thúc (KHÔNG phải thời gian chờ):** - `banned` — được đặt khi phát hiện từ khóa cấm/tài khoản bị cấm (xem [BAN_DETECTION](../security/BAN_DETECTION.md)), và sau ba lần liên tiếp thượng nguồn từ chối từng yêu cầu (`request_rejected`, ví dụ: Anthropic OAuth 403 "Yêu cầu không được phép" — `open-sse/services/requestRejectedStreak.ts`); một lần từ chối đơn lẻ chỉ đưa kết nối vào thời gian chờ diff --git a/docs/i18n/yo/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/yo/docs/architecture/RESILIENCE_GUIDE.md index 480f0e30585a..be7f1422cf26 100644 --- a/docs/i18n/yo/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/yo/docs/architecture/RESILIENCE_GUIDE.md @@ -96,6 +96,8 @@ Olùṣọ́ ìdènà ìfàsẹ́yìn: `tests/unit/provider-cooldown-window-gate **Ààbò lódì sí ìbẹ̀rẹ̀-pọ̀-lójú-ẹsẹ̀:** ó dènà àwọn ìkùnà tó ṣẹlẹ̀ lẹ́ẹ̀kan náà láti fa àkókò ìsinmi gùn jù tàbí láti fi kún `backoffLevel` lẹ́ẹ̀mejì. +Àwọn férémù alakomeji `reasoningContentEvent` ti Kiro tí ó ní ìbuwọ́lu tí kò ṣófo ń pa ìṣẹ́ ìrònú mọ́ nípasẹ̀ olùṣe gẹ́gẹ́ bí delta `reasoning_content` tó ṣófo. A kò fi ìbuwọ́lu náà ránṣẹ́ síwájú. Metadata, férémù tí kò pé àti ìbuwọ́lu òfo kò tún àkókò ìdúró àkóónú bẹ̀rẹ̀; ààlà àkókò olómìnira fún ìṣàn tó ń ṣiṣẹ́ àti ìfagilé oníbàárà ṣì wà ní ipa. (`open-sse/executors/kiro/reasoning.ts`). + **Àwọn ipò òpin (KÌ Í ṢE àwọn àkókò ìsinmi):** - `banned` — tí a ṣètò nípasẹ̀ ìṣàwárí ọ̀rọ̀ tí a fòfin dè / ìfòfindè àkọọ́lẹ̀ (wo [BAN_DETECTION](../security/BAN_DETECTION.md)), àti nípasẹ̀ ìkọ̀sílẹ̀ ìbéèrè kọ̀ọ̀kan láti upstream lẹ́ẹ̀mẹ́ta tẹ̀ léra (`request_rejected`, àpẹẹrẹ Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`); ìkọ̀sílẹ̀ ẹyọ kan yóò kàn fi ìsopọ̀ náà sínú ìsinmi diff --git a/docs/i18n/zh-CN/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/zh-CN/docs/architecture/RESILIENCE_GUIDE.md index 2b82aeec2d11..49eabfafadb9 100644 --- a/docs/i18n/zh-CN/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/zh-CN/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ OmniRoute 具有三种彼此独立但又相互关联的弹性机制。每种机 **防惊群保护:** 防止并发失败导致冷却时间被过度延长或 `backoffLevel` 被重复递增。 +Kiro 中带有非空签名的二进制 `reasoningContentEvent` 帧,会通过执行器以空的 `reasoning_content` 增量保留推理活动信号,不会转发签名本身。元数据、不完整的帧和空签名不会重新启动内容等待计时;活动流的独立时限和客户端取消仍然有效。 (`open-sse/executors/kiro/reasoning.ts`). + **终止状态(不是冷却):** - `banned` — 由封禁关键词/账户封禁检测设置(参见 [BAN_DETECTION](../security/BAN_DETECTION.md)),也会在上游连续三次拒绝单次请求时设置(`request_rejected`,例如 Anthropic OAuth 403 "Request not allowed" — `open-sse/services/requestRejectedStreak.ts`);单次拒绝只会使连接进入冷却 diff --git a/docs/i18n/zh-TW/docs/architecture/RESILIENCE_GUIDE.md b/docs/i18n/zh-TW/docs/architecture/RESILIENCE_GUIDE.md index 2efcdbce228b..61387e69f165 100644 --- a/docs/i18n/zh-TW/docs/architecture/RESILIENCE_GUIDE.md +++ b/docs/i18n/zh-TW/docs/architecture/RESILIENCE_GUIDE.md @@ -95,6 +95,8 @@ OmniRoute 有三種彼此獨立但相關的韌性機制。每種機制都有不 **防驚群保護機制:** 防止並行失敗過度延長冷卻時間,或重複遞增 `backoffLevel`。 +Kiro 中帶有非空簽章的二進位 `reasoningContentEvent` 框架,會透過執行器以空的 `reasoning_content` 增量保留推理活動訊號,不會轉送簽章本身。中繼資料、不完整的框架和空簽章不會重新啟動內容等待計時;作用中串流的獨立時限和用戶端取消仍然有效。 (`open-sse/executors/kiro/reasoning.ts`). + **終止狀態(不是冷卻):** - `banned` — 由封禁關鍵字/帳戶封禁偵測設定(請參閱 [BAN_DETECTION](../security/BAN_DETECTION.md)),也會由連續三次上游的逐請求拒絕觸發(`request_rejected`,例如 Anthropic OAuth 403「Request not allowed」— `open-sse/services/requestRejectedStreak.ts`);單次拒絕只會讓連線進入冷卻 diff --git a/open-sse/executors/kiro.ts b/open-sse/executors/kiro.ts index b63c3fdcc5e0..efa8c5748f85 100644 --- a/open-sse/executors/kiro.ts +++ b/open-sse/executors/kiro.ts @@ -20,6 +20,7 @@ import { type KiroThinkingState, } from "./kiroThinking.ts"; import { ByteQueue, TEXT_ENCODER, parseEventFrame } from "./kiro/eventstream.ts"; +import { readKiroReasoningText } from "./kiro/reasoning.ts"; import { kiroRuntimeHost, resolveKiroRuntimeRegion } from "../services/kiroRegion.ts"; import { KIRO_TOOL_CALL_WRAPPER, @@ -670,22 +671,9 @@ export class KiroExecutor extends BaseExecutor { const rp = event.payload as Record | undefined; const rt = rp?.reasoningText; if (eventType === "reasoningContentEvent" || rt !== undefined) { - let nativeReasoning = ""; - if (rt && typeof rt === "object") { - const rto = rt as { text?: unknown; Text?: unknown }; - nativeReasoning = - typeof rto.text === "string" - ? rto.text - : typeof rto.Text === "string" - ? rto.Text - : ""; - } else if (typeof rt === "string") { - nativeReasoning = rt; - } else if (typeof rp?.text === "string") { - nativeReasoning = rp.text as string; - } - if (nativeReasoning) { - state.hasReasoningContent = true; + const nativeReasoning = readKiroReasoningText(eventType, rp); + if (nativeReasoning !== undefined) { + if (nativeReasoning) state.hasReasoningContent = true; const reasoningDelta: JsonRecord = (state.reasoningChunkCount ?? 0) === 0 && chunkIndex === 0 ? { role: "assistant", reasoning_content: nativeReasoning } diff --git a/open-sse/executors/kiro/reasoning.ts b/open-sse/executors/kiro/reasoning.ts new file mode 100644 index 000000000000..044902490029 --- /dev/null +++ b/open-sse/executors/kiro/reasoning.ts @@ -0,0 +1,31 @@ +/** Native reasoning text, or an empty delta for opaque reasoning activity. */ +export function readKiroReasoningText( + eventType: string, + payload: Record | undefined +): string | undefined { + const reasoningText = payload?.reasoningText; + let text = ""; + if (reasoningText && typeof reasoningText === "object") { + const value = reasoningText as { text?: unknown; Text?: unknown }; + text = + typeof value.text === "string" + ? value.text + : typeof value.Text === "string" + ? value.Text + : ""; + } else if (typeof reasoningText === "string") { + text = reasoningText; + } else if (typeof payload?.text === "string") { + text = payload.text; + } + if (text) return text; + // Preserve liveness without exposing signatures or claiming visible content. + if ( + eventType === "reasoningContentEvent" && + typeof payload?.signature === "string" && + payload.signature.trim().length > 0 + ) { + return ""; + } + return undefined; +} diff --git a/tests/_helpers/kiroEventStreamFixture.ts b/tests/_helpers/kiroEventStreamFixture.ts new file mode 100644 index 000000000000..ada1f09b6aa2 --- /dev/null +++ b/tests/_helpers/kiroEventStreamFixture.ts @@ -0,0 +1,35 @@ +const encoder = new TextEncoder(); + +// Independent AWS EventStream fixture encoder: big-endian lengths, a type-7 +// event header, JSON payload and both CRC32 checksums. +function crc32(bytes: Uint8Array): number { + let crc = 0xffffffff; + for (const byte of bytes) { + crc ^= byte; + for (let bit = 0; bit < 8; bit++) { + crc = crc & 1 ? 0xedb88320 ^ (crc >>> 1) : crc >>> 1; + } + } + return (crc ^ 0xffffffff) >>> 0; +} + +export function kiroEventFrame(eventType: string, payload: unknown): Uint8Array { + const name = encoder.encode(":event-type"); + const value = encoder.encode(eventType); + const headers = new Uint8Array(1 + name.length + 1 + 2 + value.length); + headers[0] = name.length; + headers.set(name, 1); + headers[1 + name.length] = 7; + new DataView(headers.buffer).setUint16(2 + name.length, value.length, false); + headers.set(value, 4 + name.length); + const body = encoder.encode(JSON.stringify(payload)); + const frame = new Uint8Array(12 + headers.length + body.length + 4); + const view = new DataView(frame.buffer); + view.setUint32(0, frame.length, false); + view.setUint32(4, headers.length, false); + view.setUint32(8, crc32(frame.subarray(0, 8)), false); + frame.set(headers, 12); + frame.set(body, 12 + headers.length); + view.setUint32(frame.length - 4, crc32(frame.subarray(0, frame.length - 4)), false); + return frame; +} diff --git a/tests/unit/kiro-content-stall-15260.test.ts b/tests/unit/kiro-content-stall-15260.test.ts new file mode 100644 index 000000000000..fdc03c1d2e13 --- /dev/null +++ b/tests/unit/kiro-content-stall-15260.test.ts @@ -0,0 +1,403 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import { Socket } from "node:net"; +import os from "node:os"; +import path from "node:path"; +import { performance } from "node:perf_hooks"; +import test from "node:test"; +import { setTimeout as sleep } from "node:timers/promises"; +import { kiroEventFrame } from "../_helpers/kiroEventStreamFixture.ts"; + +const dataDir = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-15260-kiro-")); +Object.assign(process.env, { + DATA_DIR: dataDir, + OMNIROUTE_PLUGINS_DIR: path.join(dataDir, "plugins"), + API_KEY_SECRET: "15260-synthetic-api-secret", + JWT_SECRET: "15260-synthetic-jwt-secret", + APP_LOG_TO_FILE: "false", + DISABLE_SQLITE_AUTO_BACKUP: "true", + KIRO_VERIFY_FULL_CRC: "true", +}); +const originalConnect = Socket.prototype.connect; +const originalFetch = globalThis.fetch; +let socketAttempts = 0; +Socket.prototype.connect = function () { + socketAttempts++; + throw new Error("#15260 fixture forbids network sockets"); +}; +globalThis.fetch = async () => { + throw new Error("#15260 fixture has not installed its upstream response"); +}; + +const { KiroExecutor } = await import("../../open-sse/executors/kiro.ts"); +const { ensureStreamReadiness, createStreamContentWatcher } = + await import("../../open-sse/utils/streamReadiness.ts"); +const { createStreamController, pipeWithDisconnect } = + await import("../../open-sse/utils/streamHandler.ts"); +const { resetDbInstance } = await import("../../src/lib/db/core.ts"); + +const CONTENT_BUDGET_MS = 100; +const ANSWER = "ANSWER_15260"; +type Step = { event: string; payload?: unknown; delayMs?: number; bytes?: Uint8Array }; +type RunOptions = { + activeTimeoutMs?: number; + cancelAfterProgress?: number; + thinkingExpected?: boolean; +}; + +async function runKiroStream(steps: Step[], options: RunOptions = {}) { + const errors: string[] = []; + const errorTimes: number[] = []; + const sentSteps: { event: string; at: number }[] = []; + const snapshots: { text: string; sawContent: boolean; reasoningProgress: number }[] = []; + let startedAt = 0; + let cancelled = 0; + let aborts = 0; + let fetches = 0; + let sourceClosed = false; + let upstream!: ReadableStreamDefaultController; + const controller = createStreamController({ + clientResponseFormat: "openai", + onError(event) { + errors.push(String(event.message)); + errorTimes.push(performance.now() - startedAt); + return true; + }, + }); + controller.signal.addEventListener("abort", () => aborts++); + const body = new ReadableStream({ + start(streamController) { + upstream = streamController; + upstream.enqueue(kiroEventFrame("contextUsageEvent", { contextUsagePercentage: 5 })); + }, + cancel() { + cancelled++; + sourceClosed = true; + }, + }); + globalThis.fetch = async (input, init) => { + assert.match(String(input), /^https:\/\/codewhisperer\.us-east-1\.amazonaws\.com\//); + assert.equal(init?.signal, controller.signal); + fetches++; + return new Response(body, { + headers: { "Content-Type": "application/vnd.amazon.eventstream" }, + }); + }; + + const executed = await new KiroExecutor().execute({ + model: "claude-sonnet-4.6", + body: { + conversationState: { + currentMessage: { + userInputMessage: { + content: options.thinkingExpected + ? "enabledhello" + : "hello", + }, + }, + }, + }, + stream: true, + credentials: { + apiKey: "kiro-15260-fixture-only", + providerSpecificData: { authMethod: "api_key", region: "us-east-1" }, + }, + signal: controller.signal, + }); + const ready = await ensureStreamReadiness(executed.response, { + timeoutMs: 1000, + maxTimeoutMs: 1000, + provider: "kiro", + model: "claude-sonnet-4.6", + }); + assert.equal(ready.ok, true, "the first complete metadata frame must hand off readiness"); + if (!ready.ok) throw new Error("invalid readiness fixture"); + + const stream = pipeWithDisconnect(ready.response, new TransformStream(), controller, { + contentStallTimeoutMs: CONTENT_BUDGET_MS, + stallTimeoutMs: 5000, + activeTimeoutMs: options.activeTimeoutMs ?? 5000, + }); + startedAt = performance.now(); + const producer = (async () => { + try { + for (const step of steps) { + await sleep(step.delayMs ?? 25, undefined, { signal: controller.signal }); + if (sourceClosed || controller.signal.aborted) return; + sentSteps.push({ event: step.event, at: performance.now() - startedAt }); + upstream.enqueue(step.bytes ?? kiroEventFrame(step.event, step.payload)); + } + if (!sourceClosed && !controller.signal.aborted) { + sourceClosed = true; + upstream.close(); + } + } catch (error) { + if (!(error instanceof Error && error.name === "AbortError")) throw error; + } + })(); + let text = ""; + const decoder = new TextDecoder(); + const reader = stream.getReader(); + const watcher = createStreamContentWatcher(); + let finished = false; + try { + while (true) { + const { done, value } = await reader.read(); + if (done) break; + const chunk = decoder.decode(value, { stream: true }); + text += chunk; + watcher.note(chunk); + snapshots.push({ + text: chunk, + sawContent: watcher.sawContent(), + reasoningProgress: watcher.reasoningProgress(), + }); + if ( + options.cancelAfterProgress && + watcher.reasoningProgress() >= options.cancelAfterProgress + ) { + await reader.cancel("synthetic client cancellation"); + break; + } + } + text += decoder.decode(); + watcher.finish(); + await producer; + finished = true; + if (options.cancelAfterProgress) await sleep(CONTENT_BUDGET_MS * 2); + } finally { + await reader.cancel().catch(() => {}); + if (!finished) controller.abort(); + await producer; + } + assert.equal(fetches, 1); + assert.equal(socketAttempts, 0); + return { + text, + errors, + errorTimes, + sentSteps, + snapshots, + cancelled, + aborts, + durationMs: performance.now() - startedAt, + watcher, + }; +} + +test( + "#15260 setup control: real Kiro executor/readiness/watchdog deliver text", + { timeout: 5000 }, + async () => { + const result = await runKiroStream([ + { event: "assistantResponseEvent", payload: { content: ANSWER } }, + { event: "messageStopEvent", payload: {} }, + ]); + assert.deepEqual(result.errors, []); + assert.match(result.text, /ANSWER_15260/); + assert.equal(result.cancelled, 0); + assert.equal(result.aborts, 0); + } +); + +test( + "#15260 Kiro signatures keep the real content watchdog live until the answer", + { timeout: 5000 }, + async () => { + const result = await runKiroStream([ + ...Array.from({ length: 12 }, (_, i) => ({ + event: "reasoningContentEvent", + payload: { signature: `synthetic-signature-${i}` }, + })), + { event: "assistantResponseEvent", payload: { content: ANSWER } }, + { event: "messageStopEvent", payload: {} }, + ]); + console.log( + "KIRO_15260_LIVENESS", + JSON.stringify({ + errors: result.errors, + cancelled: result.cancelled, + durationMs: result.durationMs, + }) + ); + assert.deepEqual(result.errors, [], "active native reasoning must not trigger content stall"); + assert.match(result.text, /ANSWER_15260/); + assert.doesNotMatch(result.text, /synthetic-signature/); + assert.equal(result.cancelled, 0); + assert.equal(result.aborts, 0); + const firstAnswer = result.snapshots.findIndex((entry) => entry.text.includes(ANSWER)); + const reasoning = result.snapshots + .slice(0, firstAnswer) + .filter((entry) => entry.reasoningProgress > 0); + assert.equal(Math.max(...reasoning.map((entry) => entry.reasoningProgress)), 12); + assert.equal( + reasoning.every((entry) => entry.sawContent === false), + true + ); + } +); + +test("#15260 native reasoning text still keeps the watchdog live", { timeout: 5000 }, async () => { + const result = await runKiroStream([ + ...Array.from({ length: 12 }, () => ({ + event: "reasoningContentEvent", + payload: { reasoningText: { text: "thinking" } }, + })), + { event: "assistantResponseEvent", payload: { content: ANSWER } }, + ]); + assert.deepEqual(result.errors, []); + assert.match(result.text, /thinking/); + assert.match(result.text, /ANSWER_15260/); + assert.equal(result.aborts, 0); +}); + +test("#15260 inline thinking still keeps the watchdog live", { timeout: 5000 }, async () => { + const result = await runKiroStream( + [ + { event: "assistantResponseEvent", payload: { content: "" } }, + ...Array.from({ length: 12 }, () => ({ + event: "assistantResponseEvent", + payload: { content: "thinking" }, + })), + { event: "assistantResponseEvent", payload: { content: `${ANSWER}` } }, + ], + { thinkingExpected: true } + ); + assert.deepEqual(result.errors, []); + assert.match(result.text, /reasoning_content/); + assert.match(result.text, /ANSWER_15260/); +}); + +test( + "#15260 fragmented prelude, headers and payload preserve complete reasoning events", + { timeout: 5000 }, + async () => { + const steps: Step[] = []; + for (let i = 0; i < 12; i++) { + const frame = kiroEventFrame("reasoningContentEvent", { + signature: `synthetic-signature-${i}`, + }); + const headerEnd = 12 + new DataView(frame.buffer).getUint32(4, false); + const boundaries = [0, 7, 12, headerEnd, frame.length - 4, frame.length]; + for (let j = 1; j < boundaries.length; j++) { + steps.push({ + event: "fragment", + bytes: frame.slice(boundaries[j - 1], boundaries[j]), + delayMs: 5, + }); + } + } + steps.push({ event: "assistantResponseEvent", payload: { content: ANSWER } }); + const result = await runKiroStream(steps); + assert.deepEqual(result.errors, []); + assert.equal(result.watcher.reasoningProgress(), 12); + assert.match(result.text, /ANSWER_15260/); + assert.doesNotMatch(result.text, /synthetic-signature/); + } +); + +for (const [label, event, payload] of [ + ["metadata", "contextUsageEvent", { contextUsagePercentage: 8 }], + ["unknown event with a signature", "unknownEvent", { signature: "not-reasoning" }], + ["empty reasoning signature", "reasoningContentEvent", { text: "", signature: " " }], +] as const) { + test(`#15260 ${label} does not postpone content stall`, { timeout: 5000 }, async () => { + const result = await runKiroStream(Array.from({ length: 12 }, () => ({ event, payload }))); + assert.equal(result.errors.length, 1); + assert.match(result.errors[0], /stream content stall/); + assert.equal(result.watcher.reasoningProgress(), 0); + assert.equal(result.watcher.sawContent(), false); + assert.equal(result.cancelled, 1); + assert.equal(result.aborts, 1); + }); +} + +test( + "#15260 incomplete and corrupt reasoning frames are not progress", + { timeout: 5000 }, + async () => { + const corrupt = kiroEventFrame("reasoningContentEvent", { signature: "corrupt" }); + corrupt[corrupt.length - 1] ^= 0xff; + const incomplete = kiroEventFrame("reasoningContentEvent", { signature: "incomplete" }); + const result = await runKiroStream([ + { event: "corrupt", bytes: corrupt }, + ...Array.from({ length: 12 }, (_, i) => ({ + event: "incomplete", + bytes: incomplete.slice(i, i + 1), + delayMs: 10, + })), + ]); + assert.equal(result.errors.length, 1); + assert.match(result.errors[0], /stream content stall/); + assert.equal(result.watcher.reasoningProgress(), 0); + assert.equal(result.cancelled, 1); + } +); + +test( + "#15260 metadata after reasoning stops still expires one content budget later", + { timeout: 5000 }, + async () => { + const result = await runKiroStream([ + ...Array.from({ length: 4 }, () => ({ + event: "reasoningContentEvent", + payload: { signature: "synthetic" }, + })), + ...Array.from({ length: 12 }, () => ({ + event: "contextUsageEvent", + payload: { contextUsagePercentage: 8 }, + })), + ]); + assert.equal(result.errors.length, 1); + assert.match(result.errors[0], /stream content stall/); + assert.equal(result.watcher.reasoningProgress(), 4); + const lastProgress = result.sentSteps + .filter((step) => step.event === "reasoningContentEvent") + .at(-1)!; + assert.ok(result.errorTimes[0] - lastProgress.at >= CONTENT_BUDGET_MS - 5); + assert.equal(result.cancelled, 1); + } +); + +test( + "#15260 opaque reasoning cannot extend the independent active timeout", + { timeout: 5000 }, + async () => { + const result = await runKiroStream( + Array.from({ length: 30 }, () => ({ + event: "reasoningContentEvent", + payload: { signature: "synthetic" }, + })), + { activeTimeoutMs: 175 } + ); + assert.deepEqual(result.errors, ["stream active timeout"]); + assert.equal(result.cancelled, 1); + assert.equal(result.aborts, 1); + assert.equal(result.watcher.sawContent(), false); + } +); + +test( + "#15260 client cancellation stops reasoning and clears watchdogs", + { timeout: 5000 }, + async () => { + const result = await runKiroStream( + Array.from({ length: 30 }, () => ({ + event: "reasoningContentEvent", + payload: { signature: "synthetic" }, + })), + { cancelAfterProgress: 2, activeTimeoutMs: 175 } + ); + assert.deepEqual(result.errors, []); + assert.equal(result.cancelled, 1); + assert.equal(result.aborts, 1); + assert.equal(result.watcher.reasoningProgress(), 2); + } +); + +test.after(() => { + globalThis.fetch = originalFetch; + Socket.prototype.connect = originalConnect; + resetDbInstance(); + fs.rmSync(dataDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 100 }); +});