@lqc123qwe/car-runtime 1.21.0 → 1.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SHA256SUMS +1 -1
- package/dist/car-runtime-1.21.1.tgz +0 -0
- package/dist/car-runtime-1.21.1.tgz.sig.bundle +1 -0
- package/dist/release-audit.jsonl +4 -4
- package/dist/runtime-core/llm.js +33 -8
- package/dist/sbom.json +3 -3
- package/package.json +1 -1
- package/src/runtime-core/llm.ts +30 -7
- package/dist/car-runtime-1.21.0.tgz +0 -0
- package/dist/car-runtime-1.21.0.tgz.sig.bundle +0 -1
package/dist/SHA256SUMS
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
66bbea0d771ff0a416ece86c703d25f39a4e9e78af767610ba336b01bdb1c9ac car-runtime-1.21.1.tgz
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"base64Signature":"MEUCIQDKONgEM8eAPTGlklJnk7tc5wNDrs/vZpp39jeG81yWtwIgR+tCPl3Djrl8Nk9gpNSZJ+FPXI4ZFp7773VAdr+Fpck=","cert":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUc2RENDQm02Z0F3SUJBZ0lVZEJmS0N4OVhLZllnM3QrVExBMlQzQ3M3WHBJd0NnWUlLb1pJemowRUF3TXcKTnpFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUjR3SEFZRFZRUURFeFZ6YVdkemRHOXlaUzFwYm5SbApjbTFsWkdsaGRHVXdIaGNOTWpZeE1URTBNRFF5TURNMldoY05Nall4TVRFME1EUXpNRE0yV2pBQU1Ga3dFd1lICktvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVSTG9jQzRXNFpuV0ZzMjIvYjA3cllRaW5LMHBVQWhLejFidW4KRFM4ZG02QlVhc2FqUHltK0VVcjBNZWQ5aUJlcjF5cXZuNHFiaHRJQWFkYmtpUXk1emFPQ0JZMHdnZ1dKTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBVEJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREF6QWZCZ05WSFNNRUdEQVdnQlRmCjArblBWaVFSbHZtbzJPa29WYUxHTGhoa1B6QmlCZ05WSFJFQkFmOEVXREJXaGxSb2RIUndjem92TDJkcGRHaDEKWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHpMM0psYkdWaApjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakl4TGpFd09RWUtLd1lCQkFHRHZ6QUJBUVFyYUhSMGNITTZMeTkwCmIydGxiaTVoWTNScGIyNXpMbWRwZEdoMVluVnpaWEpqYjI1MFpXNTBMbU52YlRBVkJnb3JCZ0VFQVlPL01BRUMKQkFkeVpXeGxZWE5sTURZR0Npc0dBUVFCZzc4d0FRTUVLRGc1TURObFpEQTJaVEJoTW1KallqYzVPV1V6TkdJMgpPREE0TldZellqUTFObUZoWWpFM09UZ3dGUVlLS3dZQkJBR0R2ekFCQkFRSGNtVnNaV0Z6WlRBZ0Jnb3JCZ0VFCkFZTy9NQUVGQkJKc2NXTTJNalF2WTJGeUxYSjFiblJwYldVd0hnWUtLd1lCQkFHRHZ6QUJCZ1FRY21WbWN5OTAKWVdkekx6RXVNakV1TVRBN0Jnb3JCZ0VFQVlPL01BRUlCQzBNSzJoMGRIQnpPaTh2ZEc5clpXNHVZV04wYVc5dQpjeTVuYVhSb2RXSjFjMlZ5WTI5dWRHVnVkQzVqYjIwd1pBWUtLd1lCQkFHRHZ6QUJDUVJXREZSb2RIUndjem92CkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHoKTDNKbGJHVmhjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakl4TGpFd09BWUtLd1lCQkFHRHZ6QUJDZ1FxRENnNApPVEF6WldRd05tVXdZVEppWTJJM09UbGxNelJpTmpnd09EVm1NMkkwTlRaaFlXSXhOems0TUIwR0Npc0dBUVFCCmc3OHdBUXNFRHd3TloybDBhSFZpTFdodmMzUmxaREExQmdvckJnRUVBWU8vTUFFTUJDY01KV2gwZEhCek9pOHYKWjJsMGFIVmlMbU52YlM5c2NXTTJNalF2WTJGeUxYSjFiblJwYldVd09BWUtLd1lCQkFHRHZ6QUJEUVFxRENnNApPVEF6WldRd05tVXdZVEppWTJJM09UbGxNelJpTmpnd09EVm1NMkkwTlRaaFlXSXhOems0TUNBR0Npc0dBUVFCCmc3OHdBUTRFRWd3UWNtVm1jeTkwWVdkekx6RXVNakV1TVRBYUJnb3JCZ0VFQVlPL01BRVBCQXdNQ2pFek5qRXgKT1RJM01UUXdLUVlLS3dZQkJBR0R2ekFCRUFRYkRCbG9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMApNQmdHQ2lzR0FRUUJnNzh3QVJFRUNnd0lOamt5TXpRMU5qUXdaQVlLS3dZQkJBR0R2ekFCRWdSV0RGUm9kSFJ3CmN6b3ZMMmRwZEdoMVlpNWpiMjB2YkhGak5qSTBMMk5oY2kxeWRXNTBhVzFsTHk1bmFYUm9kV0l2ZDI5eWEyWnMKYjNkekwzSmxiR1ZoYzJVdWVXMXNRSEpsWm5NdmRHRm5jeTh4TGpJeExqRXdPQVlLS3dZQkJBR0R2ekFCRXdRcQpEQ2c0T1RBelpXUXdObVV3WVRKaVkySTNPVGxsTXpSaU5qZ3dPRFZtTTJJME5UWmhZV0l4TnprNE1CY0dDaXNHCkFRUUJnNzh3QVJRRUNRd0hjbVZzWldGelpUQlpCZ29yQmdFRUFZTy9NQUVWQkVzTVNXaDBkSEJ6T2k4dloybDAKYUhWaUxtTnZiUzlzY1dNMk1qUXZZMkZ5TFhKMWJuUnBiV1V2WVdOMGFXOXVjeTl5ZFc1ekx6UXpOVFUyTVRNNQpNak16TDJGMGRHVnRjSFJ6THpFd0ZnWUtLd1lCQkFHRHZ6QUJGZ1FJREFad2RXSnNhV013VUFZS0t3WUJCQUdECnZ6QUJHQVJDREVCeVpYQnZPbXh4WXpZeU5FQTJPVEl6TkRVMk5DOWpZWEl0Y25WdWRHbHRaVUF4TXpZeE1Ua3kKTnpFME9uSmxaanB5WldaekwzUmhaM012TVM0eU1TNHhNSUdMQmdvckJnRUVBZFo1QWdRQ0JIMEVld0I1QUhjQQozVDB3YXNiSEVUSmpHUjRjbVdjM0FxSktYcmplUEszL2g0cHlnQzhwN280QUFBR2gyRWtyQkFBQUJBTUFTREJHCkFpRUE0eUtpR25lWUhUS1JicjZjNHEwYmM4NXU5RU1FUU1obUtSZWprUlo2dytRQ0lRRFhQMGRRTEVjNEFhV1EKMkhXb002aEZKRE15a291aGJIajE3UHZnVHd5UGJEQUtCZ2dxaGtqT1BRUURBd05vQURCbEFqQk8vdU41VlRxQQpkb3YxcFFFQVFkR3hCNDVKZEw2VHRPRmNMbEd5d0RpWWdsT2RCYnZtZkdkdHlqaDF5V0dXVUtZQ01RQzcrSGJTCmttTHREeGNwOU5TMGZMZkFMNTg5eUtiMXNsOEtVR0FBdlFidEVjNVUvVWNWRmJheXp2c3FBSkZFZGNvPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==","rekorBundle":{"SignedEntryTimestamp":"MEUCICgbmt4S7KuZIcHFx5zOZBAs/O7cmqRY9neWpULg0ib6AiEA/O0LtpinJBhb30rjXIzOagiD8H59yhnPAcUqQXIJwec=","Payload":{"body":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI2NmJiZWEwZDc3MWZmMGE0MTZlY2U4NmM3MDNkMjVmMzlhNGU5ZTc4YWY3Njc2MTBiYTMzNmIwMWJkYjFjOWFjIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUURLT05nRU04ZUFQVEdsa2xKbms3dGM1d05EcnMvdlpwcDM5amVHODF5V3R3SWdSK3RDUGwzRGpybDhOazlncE5TWkorRlBYSTRaRnA3NzczVkFkcitGcGNrPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVYzJSRU5EUW0wMlowRjNTVUpCWjBsVlpFSm1TME40T1ZoTFpsbG5NM1FyVkV4Qk1sUXpRM00zV0hCSmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFVUlRCTlJGRjVUVVJOTWxkb1kwNU5hbGw0VFZSRk1FMUVVWHBOUkUweVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZTVEc5alF6UlhORnB1VjBaek1qSXZZakEzY2xsUmFXNUxNSEJWUVdoTGVqRmlkVzRLUkZNNFpHMDJRbFZoYzJGcVVIbHRLMFZWY2pCTlpXUTVhVUpsY2pGNWNYWnVOSEZpYUhSSlFXRmtZbXRwVVhrMWVtRlBRMEpaTUhkbloxZEtUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFtbENaMDVXU0ZKRlFrRm1PRVZYUkVKWGFHeFNiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmlTRVpxVG1wSk1Fd3lUbWhqYVRGNVpGYzFNR0ZYTVd4TWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTBwc1lrZFdhQXBqTWxWMVpWY3hjMUZJU214YWJrMTJaRWRHYm1ONU9IaE1ha2w0VEdwRmQwOVJXVXRMZDFsQ1FrRkhSSFo2UVVKQlVWRnlZVWhTTUdOSVRUWk1lVGt3Q21JeWRHeGlhVFZvV1ROU2NHSXlOWHBNYldSd1pFZG9NVmx1Vm5wYVdFcHFZakkxTUZwWE5UQk1iVTUyWWxSQlZrSm5iM0pDWjBWRlFWbFBMMDFCUlVNS1FrRmtlVnBYZUd4WldFNXNUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkdjMVRVUk9iRnBFUVRKYVZFSm9UVzFLYWxscVl6VlBWMVY2VGtkSk1ncFBSRUUwVGxkWmVsbHFVVEZPYlVab1dXcEZNMDlVWjNkR1VWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlNHTnRWbk5hVjBaNldsUkJaMEpuYjNKQ1owVkZDa0ZaVHk5TlFVVkdRa0pLYzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMGhuV1V0TGQxbENRa0ZIUkhaNlFVSkNaMUZSWTIxV2JXTjVPVEFLV1Zka2VreDZSWFZOYWtWMVRWUkJOMEpuYjNKQ1owVkZRVmxQTDAxQlJVbENRekJOU3pKb01HUklRbnBQYVRoMlpFYzVjbHBYTkhWWlYwNHdZVmM1ZFFwamVUVnVZVmhTYjJSWFNqRmpNbFo1V1RJNWRXUkhWblZrUXpWcVlqSXdkMXBCV1V0TGQxbENRa0ZIUkhaNlFVSkRVVkpYUkVaU2IyUklVbmRqZW05MkNrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUV3eVRtaGphVEY1WkZjMU1HRlhNV3hNZVRWdVlWaFNiMlJYU1haa01qbDVZVEphYzJJelpIb0tURE5LYkdKSFZtaGpNbFYxWlZjeGMxRklTbXhhYmsxMlpFZEdibU41T0hoTWFrbDRUR3BGZDA5QldVdExkMWxDUWtGSFJIWjZRVUpEWjFGeFJFTm5OQXBQVkVGNldsZFJkMDV0VlhkWlZFcHBXVEpKTTA5VWJHeE5lbEpwVG1wbmQwOUVWbTFOTWtrd1RsUmFhRmxYU1hoT2VtczBUVUl3UjBOcGMwZEJVVkZDQ21jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacFRGZG9kbU16VW14YVJFRXhRbWR2Y2tKblJVVkJXVTh2VFVGRlRVSkRZMDFLVjJnd1pFaENlazlwT0hZS1dqSnNNR0ZJVm1sTWJVNTJZbE01YzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMDlCV1V0TGQxbENRa0ZIUkhaNlFVSkVVVkZ4UkVObk5BcFBWRUY2V2xkUmQwNXRWWGRaVkVwcFdUSkpNMDlVYkd4TmVsSnBUbXBuZDA5RVZtMU5Na2t3VGxSYWFGbFhTWGhPZW1zMFRVTkJSME5wYzBkQlVWRkNDbWMzT0hkQlVUUkZSV2QzVVdOdFZtMWplVGt3V1Zka2VreDZSWFZOYWtWMVRWUkJZVUpuYjNKQ1owVkZRVmxQTDAxQlJWQkNRWGROUTJwRmVrNXFSWGdLVDFSSk0wMVVVWGRMVVZsTFMzZFpRa0pCUjBSMmVrRkNSVUZSWWtSQ2JHOWtTRkozWTNwdmRrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUFwTlFtZEhRMmx6UjBGUlVVSm5OemgzUVZKRlJVTm5kMGxPYW10NVRYcFJNVTVxVVhkYVFWbExTM2RaUWtKQlIwUjJla0ZDUldkU1YwUkdVbTlrU0ZKM0NtTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZa2hHYWs1cVNUQk1NazVvWTJreGVXUlhOVEJoVnpGc1RIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTUtZak5rZWt3elNteGlSMVpvWXpKVmRXVlhNWE5SU0Vwc1dtNU5kbVJIUm01amVUaDRUR3BKZUV4cVJYZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjUXBFUTJjMFQxUkJlbHBYVVhkT2JWVjNXVlJLYVZreVNUTlBWR3hzVFhwU2FVNXFaM2RQUkZadFRUSkpNRTVVV21oWlYwbDRUbnByTkUxQ1kwZERhWE5IQ2tGUlVVSm5OemgzUVZKUlJVTlJkMGhqYlZaeldsZEdlbHBVUWxwQ1oyOXlRbWRGUlVGWlR5OU5RVVZXUWtWelRWTlhhREJrU0VKNlQyazRkbG95YkRBS1lVaFdhVXh0VG5aaVV6bHpZMWROTWsxcVVYWlpNa1o1VEZoS01XSnVVbkJpVjFWMldWZE9NR0ZYT1hWamVUbDVaRmMxZWt4NlVYcE9WRlV5VFZSTk5RcE5hazE2VERKR01HUkhWblJqU0ZKNlRIcEZkMFpuV1V0TGQxbENRa0ZIUkhaNlFVSkdaMUZKUkVGYWQyUlhTbk5oVjAxM1ZVRlpTMHQzV1VKQ1FVZEVDblo2UVVKSFFWSkRSRVZDZVZwWVFuWlBiWGg0V1hwWmVVNUZRVEpQVkVsNlRrUlZNazVET1dwWldFbDBZMjVXZFdSSGJIUmFWVUY0VFhwWmVFMVVhM2tLVG5wRk1FOXVTbXhhYW5CNVdsZGFla3d6VW1oYU0wMTJUVk0wZVUxVE5IaE5TVWRNUW1kdmNrSm5SVVZCWkZvMVFXZFJRMEpJTUVWbGQwSTFRVWhqUVFvelZEQjNZWE5pU0VWVVNtcEhValJqYlZkak0wRnhTa3RZY21wbFVFc3pMMmcwY0hsblF6aHdOMjgwUVVGQlIyZ3lSV3R5UWtGQlFVSkJUVUZUUkVKSENrRnBSVUUwZVV0cFIyNWxXVWhVUzFKaWNqWmpOSEV3WW1NNE5YVTVSVTFGVVUxb2JVdFNaV3ByVWxvMmR5dFJRMGxSUkZoUU1HUlJURVZqTkVGaFYxRUtNa2hYYjAwMmFFWktSRTE1YTI5MWFHSklhakUzVUhablZIZDVVR0pFUVV0Q1oyZHhhR3RxVDFCUlVVUkJkMDV2UVVSQ2JFRnFRazh2ZFU0MVZsUnhRUXBrYjNZeGNGRkZRVkZrUjNoQ05EVktaRXcyVkhSUFJtTk1iRWQ1ZDBScFdXZHNUMlJDWW5adFprZGtkSGxxYURGNVYwZFhWVXRaUTAxUlF6Y3JTR0pUQ210dFRIUkVlR053T1U1VE1HWk1aa0ZNTlRnNWVVdGlNWE5zT0V0VlIwRkJkbEZpZEVWak5WVXZWV05XUm1KaGVYcDJjM0ZCU2taRlpHTnZQUW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In19fX0=","integratedTime":1794630037,"logIndex":3869485684,"logID":"c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d"}}}
|
package/dist/release-audit.jsonl
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{"stage":"archive","detail":"git archive HEAD → car-runtime-1.21.
|
|
2
|
-
{"stage":"sha256sums","detail":"SHA256SUMS
|
|
3
|
-
{"stage":"sbom","detail":"55 个组件(运行时依赖 0 项)","ts":
|
|
4
|
-
{"stage":"cosign-keyless","detail":"signed car-runtime-1.21.
|
|
1
|
+
{"stage":"archive","detail":"git archive HEAD → car-runtime-1.21.1.tgz(437655 bytes,树哈希锚定)","ts":1794630034700}
|
|
2
|
+
{"stage":"sha256sums","detail":"SHA256SUMS 66bbea0d771ff0a4…(裸字节复核通过)","ts":1794630034701}
|
|
3
|
+
{"stage":"sbom","detail":"55 个组件(运行时依赖 0 项)","ts":1794630034707}
|
|
4
|
+
{"stage":"cosign-keyless","detail":"signed car-runtime-1.21.1.tgz (keyless OIDC + Rekor)","ts":1794630037965}
|
package/dist/runtime-core/llm.js
CHANGED
|
@@ -606,12 +606,35 @@ function toAnthropic(req, apiKey, cache) {
|
|
|
606
606
|
turns.push({ role: 'user', content: pendingToolResults });
|
|
607
607
|
pendingToolResults = [];
|
|
608
608
|
};
|
|
609
|
+
// 1.21.1(R-TOKENHUB-1 二分实证):同轮拆分重放合并——投影形态 [assistant(text)][assistant(toolCall)…]
|
|
610
|
+
// 在 tools 声明在场时被 tokenhub 网关严格路径拒绝(400 reasoning_content must be passed back,
|
|
611
|
+
// 与 thinking 是否已在 wire 无关——P-B/P-C vs P-D 四探针二分定案);provider 原始回复 = 单条
|
|
612
|
+
// [thinking?, text?, tool_use…] 消息,合并重放(P-D)过审。合并口径:
|
|
613
|
+
// - 相邻 assistant(toolCall) 聚合(同 turn 多 tool_use 单条);thinking 取首条附加;
|
|
614
|
+
// - 紧邻前驱为 assistant 纯文本消息 → 弹回合并为 [thinking?, text, tool_use…];
|
|
615
|
+
// - 无相邻文本的 toolCall 消息形态不变([thinking?, tool_use])——非工具环链逐字节兼容(D-T5)。
|
|
616
|
+
let pendingTu = null;
|
|
617
|
+
const flushTu = () => {
|
|
618
|
+
if (!pendingTu)
|
|
619
|
+
return;
|
|
620
|
+
const prev = turns[turns.length - 1];
|
|
621
|
+
const { thinkingBlock, toolCalls } = pendingTu;
|
|
622
|
+
if (prev && prev.role === 'assistant' && typeof prev.content === 'string') {
|
|
623
|
+
turns.pop();
|
|
624
|
+
turns.push({ role: 'assistant', content: [...(thinkingBlock ? [thinkingBlock] : []), { type: 'text', text: prev.content }, ...toolCalls] });
|
|
625
|
+
}
|
|
626
|
+
else {
|
|
627
|
+
turns.push({ role: 'assistant', content: [...(thinkingBlock ? [thinkingBlock] : []), ...toolCalls] });
|
|
628
|
+
}
|
|
629
|
+
pendingTu = null;
|
|
630
|
+
};
|
|
609
631
|
for (const m of req.messages) {
|
|
610
632
|
if (m.role === 'system') {
|
|
611
633
|
system.push(typeof m.content === 'string' ? m.content : JSON.stringify(m.content));
|
|
612
634
|
continue;
|
|
613
635
|
}
|
|
614
636
|
if (m.role === 'toolResult') {
|
|
637
|
+
flushTu(); // tool_result 前 = 同轮 assistant 消息收口([text?,tu…] 先于 tool_result 出站)
|
|
615
638
|
const p = m.content;
|
|
616
639
|
pendingToolResults.push({
|
|
617
640
|
type: 'tool_result',
|
|
@@ -621,25 +644,27 @@ function toAnthropic(req, apiKey, cache) {
|
|
|
621
644
|
});
|
|
622
645
|
continue;
|
|
623
646
|
}
|
|
624
|
-
flushToolResults();
|
|
625
647
|
if (m.role === 'assistant' && m.content != null && typeof m.content === 'object' && 'toolCall' in m.content) {
|
|
626
648
|
const tc = m.content.toolCall;
|
|
627
649
|
// 1.21(R-TOKENHUB-1 / D-T4):工具环回传——投影层附加的 thinking(同 turn 原始 assistant
|
|
628
|
-
// 消息的 thinking
|
|
629
|
-
//
|
|
630
|
-
// (D-T5 兼容线,golden 不动)。
|
|
650
|
+
// 消息的 thinking 块)前置重放。1.21.1:thinking 块随合并缓冲进同轮单条消息(见 flushTu 注记);
|
|
651
|
+
// 无 thinking = 1.20 形态。
|
|
631
652
|
const th = m.content.thinking;
|
|
632
653
|
const thinkingBlock = th?.text?.length
|
|
633
654
|
? th.redacted
|
|
634
655
|
? { type: 'redacted_thinking', data: th.text }
|
|
635
656
|
: { type: 'thinking', thinking: th.text, ...(th.signature ? { signature: th.signature } : {}) }
|
|
636
657
|
: undefined;
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
658
|
+
if (!pendingTu)
|
|
659
|
+
pendingTu = { toolCalls: [], ...(thinkingBlock ? { thinkingBlock } : {}) };
|
|
660
|
+
pendingTu.toolCalls.push({ type: 'tool_use', id: tc.id, name: tc.tool, input: tc.args ?? {} });
|
|
661
|
+
continue;
|
|
641
662
|
}
|
|
663
|
+
flushTu();
|
|
664
|
+
flushToolResults();
|
|
665
|
+
turns.push({ role: m.role, content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content) });
|
|
642
666
|
}
|
|
667
|
+
flushTu();
|
|
643
668
|
flushToolResults();
|
|
644
669
|
// 1.20-K1(D-48 P2):滚动断点在白名单命中时挂尾部消息(缺省 1 个)——system 断点(P1)
|
|
645
670
|
// 与消息断点独立,off 时两者俱灭(rollingCacheAllowed 内已连坐)
|
package/dist/sbom.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bomFormat": "CAR-SBOM",
|
|
3
3
|
"specVersion": "0.1",
|
|
4
|
-
"version": "1.21.
|
|
4
|
+
"version": "1.21.1",
|
|
5
5
|
"components": [
|
|
6
6
|
{
|
|
7
7
|
"type": "file",
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
{
|
|
177
177
|
"type": "file",
|
|
178
178
|
"path": "src/runtime-core/llm.ts",
|
|
179
|
-
"sha256": "
|
|
179
|
+
"sha256": "9e481456aa224c468ccdf6b577ce1e1d0c2b91aeeaa2c0f195ee40c779b7da02"
|
|
180
180
|
},
|
|
181
181
|
{
|
|
182
182
|
"type": "file",
|
|
@@ -271,7 +271,7 @@
|
|
|
271
271
|
{
|
|
272
272
|
"type": "file",
|
|
273
273
|
"path": "package.json",
|
|
274
|
-
"sha256": "
|
|
274
|
+
"sha256": "707102222be862dbc4f2d6d5aa3168472401d186934edf95ef21d6cc950ca998"
|
|
275
275
|
},
|
|
276
276
|
{
|
|
277
277
|
"type": "file",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lqc123qwe/car-runtime",
|
|
3
|
-
"version": "1.21.
|
|
3
|
+
"version": "1.21.1",
|
|
4
4
|
"description": "Composable Agent Runtime (CAR) - microkernel plugin system with sandboxed PTC, append-only hashed session log, and MCP host bridge",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
package/src/runtime-core/llm.ts
CHANGED
|
@@ -655,12 +655,33 @@ function toAnthropic(req: LlmRequest, apiKey: string, cache: { rolling: boolean;
|
|
|
655
655
|
turns.push({ role: 'user', content: pendingToolResults })
|
|
656
656
|
pendingToolResults = []
|
|
657
657
|
}
|
|
658
|
+
// 1.21.1(R-TOKENHUB-1 二分实证):同轮拆分重放合并——投影形态 [assistant(text)][assistant(toolCall)…]
|
|
659
|
+
// 在 tools 声明在场时被 tokenhub 网关严格路径拒绝(400 reasoning_content must be passed back,
|
|
660
|
+
// 与 thinking 是否已在 wire 无关——P-B/P-C vs P-D 四探针二分定案);provider 原始回复 = 单条
|
|
661
|
+
// [thinking?, text?, tool_use…] 消息,合并重放(P-D)过审。合并口径:
|
|
662
|
+
// - 相邻 assistant(toolCall) 聚合(同 turn 多 tool_use 单条);thinking 取首条附加;
|
|
663
|
+
// - 紧邻前驱为 assistant 纯文本消息 → 弹回合并为 [thinking?, text, tool_use…];
|
|
664
|
+
// - 无相邻文本的 toolCall 消息形态不变([thinking?, tool_use])——非工具环链逐字节兼容(D-T5)。
|
|
665
|
+
let pendingTu: { toolCalls: Array<{ type: 'tool_use'; id: string; name: string; input: unknown }>; thinkingBlock?: Record<string, unknown> } | null = null
|
|
666
|
+
const flushTu = () => {
|
|
667
|
+
if (!pendingTu) return
|
|
668
|
+
const prev = turns[turns.length - 1]
|
|
669
|
+
const { thinkingBlock, toolCalls } = pendingTu
|
|
670
|
+
if (prev && prev.role === 'assistant' && typeof prev.content === 'string') {
|
|
671
|
+
turns.pop()
|
|
672
|
+
turns.push({ role: 'assistant', content: [...(thinkingBlock ? [thinkingBlock] : []), { type: 'text', text: prev.content }, ...toolCalls] })
|
|
673
|
+
} else {
|
|
674
|
+
turns.push({ role: 'assistant', content: [...(thinkingBlock ? [thinkingBlock] : []), ...toolCalls] })
|
|
675
|
+
}
|
|
676
|
+
pendingTu = null
|
|
677
|
+
}
|
|
658
678
|
for (const m of req.messages) {
|
|
659
679
|
if (m.role === 'system') {
|
|
660
680
|
system.push(typeof m.content === 'string' ? m.content : JSON.stringify(m.content))
|
|
661
681
|
continue
|
|
662
682
|
}
|
|
663
683
|
if (m.role === 'toolResult') {
|
|
684
|
+
flushTu() // tool_result 前 = 同轮 assistant 消息收口([text?,tu…] 先于 tool_result 出站)
|
|
664
685
|
const p = m.content as { id?: string; result?: unknown; error?: string }
|
|
665
686
|
pendingToolResults.push({
|
|
666
687
|
type: 'tool_result',
|
|
@@ -670,24 +691,26 @@ function toAnthropic(req: LlmRequest, apiKey: string, cache: { rolling: boolean;
|
|
|
670
691
|
})
|
|
671
692
|
continue
|
|
672
693
|
}
|
|
673
|
-
flushToolResults()
|
|
674
694
|
if (m.role === 'assistant' && m.content != null && typeof m.content === 'object' && 'toolCall' in (m.content as object)) {
|
|
675
695
|
const tc = (m.content as { toolCall: { id: string; tool: string; args: unknown } }).toolCall
|
|
676
696
|
// 1.21(R-TOKENHUB-1 / D-T4):工具环回传——投影层附加的 thinking(同 turn 原始 assistant
|
|
677
|
-
// 消息的 thinking
|
|
678
|
-
//
|
|
679
|
-
// (D-T5 兼容线,golden 不动)。
|
|
697
|
+
// 消息的 thinking 块)前置重放。1.21.1:thinking 块随合并缓冲进同轮单条消息(见 flushTu 注记);
|
|
698
|
+
// 无 thinking = 1.20 形态。
|
|
680
699
|
const th = (m.content as { thinking?: { text?: string; signature?: string; redacted?: boolean } }).thinking
|
|
681
700
|
const thinkingBlock = th?.text?.length
|
|
682
701
|
? th.redacted
|
|
683
702
|
? { type: 'redacted_thinking', data: th.text }
|
|
684
703
|
: { type: 'thinking', thinking: th.text, ...(th.signature ? { signature: th.signature } : {}) }
|
|
685
704
|
: undefined
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
705
|
+
if (!pendingTu) pendingTu = { toolCalls: [], ...(thinkingBlock ? { thinkingBlock } : {}) }
|
|
706
|
+
pendingTu.toolCalls.push({ type: 'tool_use', id: tc.id, name: tc.tool, input: tc.args ?? {} })
|
|
707
|
+
continue
|
|
689
708
|
}
|
|
709
|
+
flushTu()
|
|
710
|
+
flushToolResults()
|
|
711
|
+
turns.push({ role: m.role, content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content) })
|
|
690
712
|
}
|
|
713
|
+
flushTu()
|
|
691
714
|
flushToolResults()
|
|
692
715
|
// 1.20-K1(D-48 P2):滚动断点在白名单命中时挂尾部消息(缺省 1 个)——system 断点(P1)
|
|
693
716
|
// 与消息断点独立,off 时两者俱灭(rollingCacheAllowed 内已连坐)
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"base64Signature":"MEQCIEr84YFIo6UQdCBqDYqzEn5iofitA9Wtuxx9AqUbuNGZAiBdNvJTODyumJazgvvJunU8HC/jVNGcHjUM9u7quHIyOg==","cert":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUc1ekNDQm0yZ0F3SUJBZ0lVYWV0eWY3L29XeUE3RlVhb1RuV0k0QjYzVU1Vd0NnWUlLb1pJemowRUF3TXcKTnpFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUjR3SEFZRFZRUURFeFZ6YVdkemRHOXlaUzFwYm5SbApjbTFsWkdsaGRHVXdIaGNOTWpZeE1URTBNRE16TlRNM1doY05Nall4TVRFME1ETTBOVE0zV2pBQU1Ga3dFd1lICktvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVpdlNPYnBEY1ZHZjd3Vm0yTWhUajlqbTdmQ0Z2ZGFZeGYrVTcKS2ljbzJLbUdNdWRXRUk4KzJuYmxtQmN6Q0tYNWoyWGMrNDRHTTk0bW5EUkF3OTdZT0tPQ0JZd3dnZ1dJTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBVEJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREF6QWZCZ05WSFNNRUdEQVdnQlRmCjArblBWaVFSbHZtbzJPa29WYUxHTGhoa1B6QmlCZ05WSFJFQkFmOEVXREJXaGxSb2RIUndjem92TDJkcGRHaDEKWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHpMM0psYkdWaApjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakl4TGpBd09RWUtLd1lCQkFHRHZ6QUJBUVFyYUhSMGNITTZMeTkwCmIydGxiaTVoWTNScGIyNXpMbWRwZEdoMVluVnpaWEpqYjI1MFpXNTBMbU52YlRBVkJnb3JCZ0VFQVlPL01BRUMKQkFkeVpXeGxZWE5sTURZR0Npc0dBUVFCZzc4d0FRTUVLRFZsWW1Fd1pHTXpNRGhpT1dWak1qSTVNR1l4Tm1GbApabUV5TVdNNVlUVXlPR1UzTkRReU9EQXdGUVlLS3dZQkJBR0R2ekFCQkFRSGNtVnNaV0Z6WlRBZ0Jnb3JCZ0VFCkFZTy9NQUVGQkJKc2NXTTJNalF2WTJGeUxYSjFiblJwYldVd0hnWUtLd1lCQkFHRHZ6QUJCZ1FRY21WbWN5OTAKWVdkekx6RXVNakV1TURBN0Jnb3JCZ0VFQVlPL01BRUlCQzBNSzJoMGRIQnpPaTh2ZEc5clpXNHVZV04wYVc5dQpjeTVuYVhSb2RXSjFjMlZ5WTI5dWRHVnVkQzVqYjIwd1pBWUtLd1lCQkFHRHZ6QUJDUVJXREZSb2RIUndjem92CkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHoKTDNKbGJHVmhjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakl4TGpBd09BWUtLd1lCQkFHRHZ6QUJDZ1FxRENnMQpaV0poTUdSak16QTRZamxsWXpJeU9UQm1NVFpoWldaaE1qRmpPV0UxTWpobE56UTBNamd3TUIwR0Npc0dBUVFCCmc3OHdBUXNFRHd3TloybDBhSFZpTFdodmMzUmxaREExQmdvckJnRUVBWU8vTUFFTUJDY01KV2gwZEhCek9pOHYKWjJsMGFIVmlMbU52YlM5c2NXTTJNalF2WTJGeUxYSjFiblJwYldVd09BWUtLd1lCQkFHRHZ6QUJEUVFxRENnMQpaV0poTUdSak16QTRZamxsWXpJeU9UQm1NVFpoWldaaE1qRmpPV0UxTWpobE56UTBNamd3TUNBR0Npc0dBUVFCCmc3OHdBUTRFRWd3UWNtVm1jeTkwWVdkekx6RXVNakV1TURBYUJnb3JCZ0VFQVlPL01BRVBCQXdNQ2pFek5qRXgKT1RJM01UUXdLUVlLS3dZQkJBR0R2ekFCRUFRYkRCbG9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMApNQmdHQ2lzR0FRUUJnNzh3QVJFRUNnd0lOamt5TXpRMU5qUXdaQVlLS3dZQkJBR0R2ekFCRWdSV0RGUm9kSFJ3CmN6b3ZMMmRwZEdoMVlpNWpiMjB2YkhGak5qSTBMMk5oY2kxeWRXNTBhVzFsTHk1bmFYUm9kV0l2ZDI5eWEyWnMKYjNkekwzSmxiR1ZoYzJVdWVXMXNRSEpsWm5NdmRHRm5jeTh4TGpJeExqQXdPQVlLS3dZQkJBR0R2ekFCRXdRcQpEQ2cxWldKaE1HUmpNekE0WWpsbFl6SXlPVEJtTVRaaFpXWmhNakZqT1dFMU1qaGxOelEwTWpnd01CY0dDaXNHCkFRUUJnNzh3QVJRRUNRd0hjbVZzWldGelpUQlpCZ29yQmdFRUFZTy9NQUVWQkVzTVNXaDBkSEJ6T2k4dloybDAKYUhWaUxtTnZiUzlzY1dNMk1qUXZZMkZ5TFhKMWJuUnBiV1V2WVdOMGFXOXVjeTl5ZFc1ekx6UXpOVFV5TkRFMwpPVFE0TDJGMGRHVnRjSFJ6THpFd0ZnWUtLd1lCQkFHRHZ6QUJGZ1FJREFad2RXSnNhV013VUFZS0t3WUJCQUdECnZ6QUJHQVJDREVCeVpYQnZPbXh4WXpZeU5FQTJPVEl6TkRVMk5DOWpZWEl0Y25WdWRHbHRaVUF4TXpZeE1Ua3kKTnpFME9uSmxaanB5WldaekwzUmhaM012TVM0eU1TNHdNSUdLQmdvckJnRUVBZFo1QWdRQ0JId0VlZ0I0QUhZQQozVDB3YXNiSEVUSmpHUjRjbVdjM0FxSktYcmplUEszL2g0cHlnQzhwN280QUFBR2gyQi85K0FBQUJBTUFSekJGCkFpRUE2QlpwRnVTK3Y5WVVqZXNxWk02WGFyTXcydDVNbmUxaldSOStkYXVJQ0dJQ0lBSWhPL2h4b0NUQitCdlgKbkVRRmlmNzZvanVtbHlLeWYvckF3V1Rzc3VPMk1Bb0dDQ3FHU000OUJBTURBMmdBTUdVQ01HK2R4dS9BV2tMOQo4QUtiSlhXSXYzMFlGNjk5UGp5cWFDcVhTSUllY25VRzdPZHFXTzRYK2dwb1RNVEc1bXRJcVFJeEFOT0xZRGFZCndTNUhoU0RNcXVLU1M2ODRjL1U2bTlLc0syWmN2RGFrRlZOL1BiZHhCc1Y5cE1ySzZFeEVMblpEb3c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==","rekorBundle":{"SignedEntryTimestamp":"MEUCIB04W7cJqnNa2clZD6iGQQPWdN+4NyyrSfjpxuDJ5cWIAiEAlr/UsHUN8IVr0S/5WeyxAYNKIpQUnHcPyToMjqgz+HA=","Payload":{"body":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI4ZDliZDFmYTRkNDQ3YjI1NWFlNjY4YTUxYmI0NzMzOGJkZThlMzVhZDhjY2FjOTdhYzcyZDJjODkzNjY0MTE1In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJRXI4NFlGSW82VVFkQ0JxRFlxekVuNWlvZml0QTlXdHV4eDlBcVVidU5HWkFpQmROdkpUT0R5dW1KYXpndnZKdW5VOEhDL2pWTkdjSGpVTTl1N3F1SEl5T2c9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVYzFla05EUW0weVowRjNTVUpCWjBsVllXVjBlV1kzTDI5WGVVRTNSbFZoYjFSdVYwazBRall6VlUxVmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFVUlRCTlJFMTZUbFJOTTFkb1kwNU5hbGw0VFZSRk1FMUVUVEJPVkUwelYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZwZGxOUFluQkVZMVpIWmpkM1ZtMHlUV2hVYWpscWJUZG1RMFoyWkdGWmVHWXJWVGNLUzJsamJ6SkxiVWROZFdSWFJVazRLekp1WW14dFFtTjZRMHRZTldveVdHTXJORFJIVFRrMGJXNUVVa0YzT1RkWlQwdFBRMEpaZDNkbloxZEpUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFtbENaMDVXU0ZKRlFrRm1PRVZYUkVKWGFHeFNiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmlTRVpxVG1wSk1Fd3lUbWhqYVRGNVpGYzFNR0ZYTVd4TWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTBwc1lrZFdhQXBqTWxWMVpWY3hjMUZJU214YWJrMTJaRWRHYm1ONU9IaE1ha2w0VEdwQmQwOVJXVXRMZDFsQ1FrRkhSSFo2UVVKQlVWRnlZVWhTTUdOSVRUWk1lVGt3Q21JeWRHeGlhVFZvV1ROU2NHSXlOWHBNYldSd1pFZG9NVmx1Vm5wYVdFcHFZakkxTUZwWE5UQk1iVTUyWWxSQlZrSm5iM0pDWjBWRlFWbFBMMDFCUlVNS1FrRmtlVnBYZUd4WldFNXNUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkZac1dXMUZkMXBIVFhwTlJHaHBUMWRXYWsxcVNUVk5SMWw0VG0xR2JBcGFiVVY1VFZkTk5WbFVWWGxQUjFVelRrUlJlVTlFUVhkR1VWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlNHTnRWbk5hVjBaNldsUkJaMEpuYjNKQ1owVkZDa0ZaVHk5TlFVVkdRa0pLYzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMGhuV1V0TGQxbENRa0ZIUkhaNlFVSkNaMUZSWTIxV2JXTjVPVEFLV1Zka2VreDZSWFZOYWtWMVRVUkJOMEpuYjNKQ1owVkZRVmxQTDAxQlJVbENRekJOU3pKb01HUklRbnBQYVRoMlpFYzVjbHBYTkhWWlYwNHdZVmM1ZFFwamVUVnVZVmhTYjJSWFNqRmpNbFo1V1RJNWRXUkhWblZrUXpWcVlqSXdkMXBCV1V0TGQxbENRa0ZIUkhaNlFVSkRVVkpYUkVaU2IyUklVbmRqZW05MkNrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUV3eVRtaGphVEY1WkZjMU1HRlhNV3hNZVRWdVlWaFNiMlJYU1haa01qbDVZVEphYzJJelpIb0tURE5LYkdKSFZtaGpNbFYxWlZjeGMxRklTbXhhYmsxMlpFZEdibU41T0hoTWFrbDRUR3BCZDA5QldVdExkMWxDUWtGSFJIWjZRVUpEWjFGeFJFTm5NUXBhVjBwb1RVZFNhazE2UVRSWmFteHNXWHBKZVU5VVFtMU5WRnBvV2xkYWFFMXFSbXBQVjBVeFRXcG9iRTU2VVRCTmFtZDNUVUl3UjBOcGMwZEJVVkZDQ21jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacFRGZG9kbU16VW14YVJFRXhRbWR2Y2tKblJVVkJXVTh2VFVGRlRVSkRZMDFLVjJnd1pFaENlazlwT0hZS1dqSnNNR0ZJVm1sTWJVNTJZbE01YzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMDlCV1V0TGQxbENRa0ZIUkhaNlFVSkVVVkZ4UkVObk1RcGFWMHBvVFVkU2FrMTZRVFJaYW14c1dYcEplVTlVUW0xTlZGcG9XbGRhYUUxcVJtcFBWMFV4VFdwb2JFNTZVVEJOYW1kM1RVTkJSME5wYzBkQlVWRkNDbWMzT0hkQlVUUkZSV2QzVVdOdFZtMWplVGt3V1Zka2VreDZSWFZOYWtWMVRVUkJZVUpuYjNKQ1owVkZRVmxQTDAxQlJWQkNRWGROUTJwRmVrNXFSWGdLVDFSSk0wMVVVWGRMVVZsTFMzZFpRa0pCUjBSMmVrRkNSVUZSWWtSQ2JHOWtTRkozWTNwdmRrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUFwTlFtZEhRMmx6UjBGUlVVSm5OemgzUVZKRlJVTm5kMGxPYW10NVRYcFJNVTVxVVhkYVFWbExTM2RaUWtKQlIwUjJla0ZDUldkU1YwUkdVbTlrU0ZKM0NtTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZa2hHYWs1cVNUQk1NazVvWTJreGVXUlhOVEJoVnpGc1RIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTUtZak5rZWt3elNteGlSMVpvWXpKVmRXVlhNWE5SU0Vwc1dtNU5kbVJIUm01amVUaDRUR3BKZUV4cVFYZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjUXBFUTJjeFdsZEthRTFIVW1wTmVrRTBXV3BzYkZsNlNYbFBWRUp0VFZSYWFGcFhXbWhOYWtacVQxZEZNVTFxYUd4T2VsRXdUV3BuZDAxQ1kwZERhWE5IQ2tGUlVVSm5OemgzUVZKUlJVTlJkMGhqYlZaeldsZEdlbHBVUWxwQ1oyOXlRbWRGUlVGWlR5OU5RVVZXUWtWelRWTlhhREJrU0VKNlQyazRkbG95YkRBS1lVaFdhVXh0VG5aaVV6bHpZMWROTWsxcVVYWlpNa1o1VEZoS01XSnVVbkJpVjFWMldWZE9NR0ZYT1hWamVUbDVaRmMxZWt4NlVYcE9WRlY1VGtSRk13cFBWRkUwVERKR01HUkhWblJqU0ZKNlRIcEZkMFpuV1V0TGQxbENRa0ZIUkhaNlFVSkdaMUZKUkVGYWQyUlhTbk5oVjAxM1ZVRlpTMHQzV1VKQ1FVZEVDblo2UVVKSFFWSkRSRVZDZVZwWVFuWlBiWGg0V1hwWmVVNUZRVEpQVkVsNlRrUlZNazVET1dwWldFbDBZMjVXZFdSSGJIUmFWVUY0VFhwWmVFMVVhM2tLVG5wRk1FOXVTbXhhYW5CNVdsZGFla3d6VW1oYU0wMTJUVk0wZVUxVE5IZE5TVWRMUW1kdmNrSm5SVVZCWkZvMVFXZFJRMEpJZDBWbFowSTBRVWhaUVFvelZEQjNZWE5pU0VWVVNtcEhValJqYlZkak0wRnhTa3RZY21wbFVFc3pMMmcwY0hsblF6aHdOMjgwUVVGQlIyZ3lRaTg1SzBGQlFVSkJUVUZTZWtKR0NrRnBSVUUyUWxwd1JuVlRLM1k1V1ZWcVpYTnhXazAyV0dGeVRYY3lkRFZOYm1VeGFsZFNPU3RrWVhWSlEwZEpRMGxCU1doUEwyaDRiME5VUWl0Q2RsZ0tia1ZSUm1sbU56WnZhblZ0YkhsTGVXWXZja0YzVjFSemMzVlBNazFCYjBkRFEzRkhVMDAwT1VKQlRVUkJNbWRCVFVkVlEwMUhLMlI0ZFM5QlYydE1PUW80UVV0aVNsaFhTWFl6TUZsR05qazVVR3A1Y1dGRGNWaFRTVWxsWTI1VlJ6ZFBaSEZYVHpSWUsyZHdiMVJOVkVjMWJYUkpjVkZKZUVGT1QweFpSR0ZaQ25kVE5VaG9VMFJOY1hWTFUxTTJPRFJqTDFVMmJUbExjMHN5V21OMlJHRnJSbFpPTDFCaVpIaENjMVk1Y0UxeVN6WkZlRVZNYmxwRWIzYzlQUW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In19fX0=","integratedTime":1794627338,"logIndex":3868826566,"logID":"c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d"}}}
|