@lqc123qwe/car-runtime 1.15.2 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SHA256SUMS +1 -1
- package/dist/car-runtime-1.16.0.tgz +0 -0
- package/dist/car-runtime-1.16.0.tgz.sig.bundle +1 -0
- package/dist/cli.js +4 -3
- package/dist/load/config.d.ts +11 -0
- package/dist/load/config.js +24 -2
- package/dist/release-audit.jsonl +4 -4
- package/dist/sbom.json +5 -5
- package/dist/seam.d.ts +1 -1
- package/package.json +1 -1
- package/src/cli.ts +4 -3
- package/src/load/config.ts +33 -2
- package/src/seam.ts +1 -1
- package/dist/car-runtime-1.15.2.tgz +0 -0
- package/dist/car-runtime-1.15.2.tgz.sig.bundle +0 -1
package/dist/SHA256SUMS
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
fe50cba2f8b8eb9846eb19bae11362cde6134b6e30ce71992c70d77a5e962488 car-runtime-1.16.0.tgz
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"base64Signature":"MEUCIADexj3Cyb9dBLWoNp6RTMBXhMCkdJEBbSTHwY4A/uJFAiEAxTXSfDSa6xRLw1SRb8c8qKczOyEXlLEm4yIEN8P8CJA=","cert":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUc1ekNDQm0yZ0F3SUJBZ0lVUHJJdVl0L1R1dkh3UThwbE5xcitEaXUvVCtvd0NnWUlLb1pJemowRUF3TXcKTnpFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUjR3SEFZRFZRUURFeFZ6YVdkemRHOXlaUzFwYm5SbApjbTFsWkdsaGRHVXdIaGNOTWpZeE1ESTBNRGN6TURNeFdoY05Nall4TURJME1EYzBNRE14V2pBQU1Ga3dFd1lICktvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUU1ODhCbTJ3MU5YRUkyTXg0L3hFb0hiNVNjeGNMZW1UZTNHdU0KRHNJeU1PSkVtTXN6NkIxWFVVYnk0UVdQZ29XYmd2STN0Mmw2WGVRdjNLMVVGS09YbzZPQ0JZd3dnZ1dJTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBVEJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREF6QWZCZ05WSFNNRUdEQVdnQlRmCjArblBWaVFSbHZtbzJPa29WYUxHTGhoa1B6QmlCZ05WSFJFQkFmOEVXREJXaGxSb2RIUndjem92TDJkcGRHaDEKWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHpMM0psYkdWaApjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakUyTGpBd09RWUtLd1lCQkFHRHZ6QUJBUVFyYUhSMGNITTZMeTkwCmIydGxiaTVoWTNScGIyNXpMbWRwZEdoMVluVnpaWEpqYjI1MFpXNTBMbU52YlRBVkJnb3JCZ0VFQVlPL01BRUMKQkFkeVpXeGxZWE5sTURZR0Npc0dBUVFCZzc4d0FRTUVLR000WmpZME56WTJaakE1TlRVeU9EVTBPVEV4T1RsawpOakprWVdVd05qTmtZalEzWkRrNE5qZ3dGUVlLS3dZQkJBR0R2ekFCQkFRSGNtVnNaV0Z6WlRBZ0Jnb3JCZ0VFCkFZTy9NQUVGQkJKc2NXTTJNalF2WTJGeUxYSjFiblJwYldVd0hnWUtLd1lCQkFHRHZ6QUJCZ1FRY21WbWN5OTAKWVdkekx6RXVNVFl1TURBN0Jnb3JCZ0VFQVlPL01BRUlCQzBNSzJoMGRIQnpPaTh2ZEc5clpXNHVZV04wYVc5dQpjeTVuYVhSb2RXSjFjMlZ5WTI5dWRHVnVkQzVqYjIwd1pBWUtLd1lCQkFHRHZ6QUJDUVJXREZSb2RIUndjem92CkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHoKTDNKbGJHVmhjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakUyTGpBd09BWUtLd1lCQkFHRHZ6QUJDZ1FxRENoagpPR1kyTkRjMk5tWXdPVFUxTWpnMU5Ea3hNVGs1WkRZeVpHRmxNRFl6WkdJME4yUTVPRFk0TUIwR0Npc0dBUVFCCmc3OHdBUXNFRHd3TloybDBhSFZpTFdodmMzUmxaREExQmdvckJnRUVBWU8vTUFFTUJDY01KV2gwZEhCek9pOHYKWjJsMGFIVmlMbU52YlM5c2NXTTJNalF2WTJGeUxYSjFiblJwYldVd09BWUtLd1lCQkFHRHZ6QUJEUVFxRENoagpPR1kyTkRjMk5tWXdPVFUxTWpnMU5Ea3hNVGs1WkRZeVpHRmxNRFl6WkdJME4yUTVPRFk0TUNBR0Npc0dBUVFCCmc3OHdBUTRFRWd3UWNtVm1jeTkwWVdkekx6RXVNVFl1TURBYUJnb3JCZ0VFQVlPL01BRVBCQXdNQ2pFek5qRXgKT1RJM01UUXdLUVlLS3dZQkJBR0R2ekFCRUFRYkRCbG9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMApNQmdHQ2lzR0FRUUJnNzh3QVJFRUNnd0lOamt5TXpRMU5qUXdaQVlLS3dZQkJBR0R2ekFCRWdSV0RGUm9kSFJ3CmN6b3ZMMmRwZEdoMVlpNWpiMjB2YkhGak5qSTBMMk5oY2kxeWRXNTBhVzFsTHk1bmFYUm9kV0l2ZDI5eWEyWnMKYjNkekwzSmxiR1ZoYzJVdWVXMXNRSEpsWm5NdmRHRm5jeTh4TGpFMkxqQXdPQVlLS3dZQkJBR0R2ekFCRXdRcQpEQ2hqT0dZMk5EYzJObVl3T1RVMU1qZzFORGt4TVRrNVpEWXlaR0ZsTURZelpHSTBOMlE1T0RZNE1CY0dDaXNHCkFRUUJnNzh3QVJRRUNRd0hjbVZzWldGelpUQlpCZ29yQmdFRUFZTy9NQUVWQkVzTVNXaDBkSEJ6T2k4dloybDAKYUhWaUxtTnZiUzlzY1dNMk1qUXZZMkZ5TFhKMWJuUnBiV1V2WVdOMGFXOXVjeTl5ZFc1ekx6UXdNRGMwTXprMQpOelkwTDJGMGRHVnRjSFJ6THpFd0ZnWUtLd1lCQkFHRHZ6QUJGZ1FJREFad2RXSnNhV013VUFZS0t3WUJCQUdECnZ6QUJHQVJDREVCeVpYQnZPbXh4WXpZeU5FQTJPVEl6TkRVMk5DOWpZWEl0Y25WdWRHbHRaVUF4TXpZeE1Ua3kKTnpFME9uSmxaanB5WldaekwzUmhaM012TVM0eE5pNHdNSUdLQmdvckJnRUVBZFo1QWdRQ0JId0VlZ0I0QUhZQQozVDB3YXNiSEVUSmpHUjRjbVdjM0FxSktYcmplUEszL2g0cHlnQzhwN280QUFBR2hiTkdCR1FBQUJBTUFSekJGCkFpQkJqUE1ydndKRUtLRUd2V0ljZXdGRncrU09GWmlaVXhvdlJENllDWEhoTmdJaEFQL295c2VCVU1jamxKSXMKcjFOT0Fvd1VlRXlwS3QvTmgycUlOY0tucHRFNk1Bb0dDQ3FHU000OUJBTURBMmdBTUdVQ01RQ3gwOVAvV3JhbgpCZThNdExSVjUyNlJtYis0aGoyRU5QS3NwUkRDYmcyRm9zWTFIYzlaRFhvMlFtRTdWckRQRFZRQ01EckR4VkVNClM4Y2k5UkxKelpNU0JHV2Fjak80Y2hrYVZGU3k3a3F0SjcxZnRSY2trTm82b0czR2ZGM2Fsc2xsd2c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==","rekorBundle":{"SignedEntryTimestamp":"MEQCIDot8LHVF9v+mf3Fin/ylZudExwX87RgRfaNfyoRQ0GBAiBcYNkPTfERvsHWvfSMeSTgpe+6SHGlXnFN6rBNBj1VCw==","Payload":{"body":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJmZTUwY2JhMmY4YjhlYjk4NDZlYjE5YmFlMTEzNjJjZGU2MTM0YjZlMzBjZTcxOTkyYzcwZDc3YTVlOTYyNDg4In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJQURleGozQ3liOWRCTFdvTnA2UlRNQlhoTUNrZEpFQmJTVEh3WTRBL3VKRkFpRUF4VFhTZkRTYTZ4Ukx3MVNSYjhjOHFLY3pPeUVYbExFbTR5SUVOOFA4Q0pBPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVYzFla05EUW0weVowRjNTVUpCWjBsVlVISkpkVmwwTDFSMWRraDNVVGh3YkU1eGNpdEVhWFV2VkN0dmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFU1RCTlJHTjZUVVJOZUZkb1kwNU5hbGw0VFVSSk1FMUVZekJOUkUxNFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVUxT0RoQ2JUSjNNVTVZUlVreVRYZzBMM2hGYjBoaU5WTmplR05NWlcxVVpUTkhkVTBLUkhOSmVVMVBTa1Z0VFhONk5rSXhXRlZWWW5rMFVWZFFaMjlYWW1kMlNUTjBNbXcyV0dWUmRqTkxNVlZHUzA5WWJ6WlBRMEpaZDNkbloxZEpUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFtbENaMDVXU0ZKRlFrRm1PRVZYUkVKWGFHeFNiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmlTRVpxVG1wSk1Fd3lUbWhqYVRGNVpGYzFNR0ZYTVd4TWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTBwc1lrZFdhQXBqTWxWMVpWY3hjMUZJU214YWJrMTJaRWRHYm1ONU9IaE1ha1V5VEdwQmQwOVJXVXRMZDFsQ1FrRkhSSFo2UVVKQlVWRnlZVWhTTUdOSVRUWk1lVGt3Q21JeWRHeGlhVFZvV1ROU2NHSXlOWHBNYldSd1pFZG9NVmx1Vm5wYVdFcHFZakkxTUZwWE5UQk1iVTUyWWxSQlZrSm5iM0pDWjBWRlFWbFBMMDFCUlVNS1FrRmtlVnBYZUd4WldFNXNUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUjAwMFdtcFpNRTU2V1RKYWFrRTFUbFJWZVU5RVZUQlBWRVY0VDFSc2F3cE9ha3ByV1ZkVmQwNXFUbXRaYWxFeldrUnJORTVxWjNkR1VWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlNHTnRWbk5hVjBaNldsUkJaMEpuYjNKQ1owVkZDa0ZaVHk5TlFVVkdRa0pLYzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMGhuV1V0TGQxbENRa0ZIUkhaNlFVSkNaMUZSWTIxV2JXTjVPVEFLV1Zka2VreDZSWFZOVkZsMVRVUkJOMEpuYjNKQ1owVkZRVmxQTDAxQlJVbENRekJOU3pKb01HUklRbnBQYVRoMlpFYzVjbHBYTkhWWlYwNHdZVmM1ZFFwamVUVnVZVmhTYjJSWFNqRmpNbFo1V1RJNWRXUkhWblZrUXpWcVlqSXdkMXBCV1V0TGQxbENRa0ZIUkhaNlFVSkRVVkpYUkVaU2IyUklVbmRqZW05MkNrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUV3eVRtaGphVEY1WkZjMU1HRlhNV3hNZVRWdVlWaFNiMlJYU1haa01qbDVZVEphYzJJelpIb0tURE5LYkdKSFZtaGpNbFYxWlZjeGMxRklTbXhhYmsxMlpFZEdibU41T0hoTWFrVXlUR3BCZDA5QldVdExkMWxDUWtGSFJIWjZRVUpEWjFGeFJFTm9hZ3BQUjFreVRrUmpNazV0V1hkUFZGVXhUV3BuTVU1RWEzaE5WR3MxV2tSWmVWcEhSbXhOUkZsNldrZEpNRTR5VVRWUFJGazBUVUl3UjBOcGMwZEJVVkZDQ21jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacFRGZG9kbU16VW14YVJFRXhRbWR2Y2tKblJVVkJXVTh2VFVGRlRVSkRZMDFLVjJnd1pFaENlazlwT0hZS1dqSnNNR0ZJVm1sTWJVNTJZbE01YzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMDlCV1V0TGQxbENRa0ZIUkhaNlFVSkVVVkZ4UkVOb2FncFBSMWt5VGtSak1rNXRXWGRQVkZVeFRXcG5NVTVFYTNoTlZHczFXa1JaZVZwSFJteE5SRmw2V2tkSk1FNHlVVFZQUkZrMFRVTkJSME5wYzBkQlVWRkNDbWMzT0hkQlVUUkZSV2QzVVdOdFZtMWplVGt3V1Zka2VreDZSWFZOVkZsMVRVUkJZVUpuYjNKQ1owVkZRVmxQTDAxQlJWQkNRWGROUTJwRmVrNXFSWGdLVDFSSk0wMVVVWGRMVVZsTFMzZFpRa0pCUjBSMmVrRkNSVUZSWWtSQ2JHOWtTRkozWTNwdmRrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUFwTlFtZEhRMmx6UjBGUlVVSm5OemgzUVZKRlJVTm5kMGxPYW10NVRYcFJNVTVxVVhkYVFWbExTM2RaUWtKQlIwUjJla0ZDUldkU1YwUkdVbTlrU0ZKM0NtTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZa2hHYWs1cVNUQk1NazVvWTJreGVXUlhOVEJoVnpGc1RIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTUtZak5rZWt3elNteGlSMVpvWXpKVmRXVlhNWE5SU0Vwc1dtNU5kbVJIUm01amVUaDRUR3BGTWt4cVFYZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjUXBFUTJocVQwZFpNazVFWXpKT2JWbDNUMVJWTVUxcVp6Rk9SR3Q0VFZSck5WcEVXWGxhUjBac1RVUlplbHBIU1RCT01sRTFUMFJaTkUxQ1kwZERhWE5IQ2tGUlVVSm5OemgzUVZKUlJVTlJkMGhqYlZaeldsZEdlbHBVUWxwQ1oyOXlRbWRGUlVGWlR5OU5RVVZXUWtWelRWTlhhREJrU0VKNlQyazRkbG95YkRBS1lVaFdhVXh0VG5aaVV6bHpZMWROTWsxcVVYWlpNa1o1VEZoS01XSnVVbkJpVjFWMldWZE9NR0ZYT1hWamVUbDVaRmMxZWt4NlVYZE5SR013VFhwck1RcE9lbGt3VERKR01HUkhWblJqU0ZKNlRIcEZkMFpuV1V0TGQxbENRa0ZIUkhaNlFVSkdaMUZKUkVGYWQyUlhTbk5oVjAxM1ZVRlpTMHQzV1VKQ1FVZEVDblo2UVVKSFFWSkRSRVZDZVZwWVFuWlBiWGg0V1hwWmVVNUZRVEpQVkVsNlRrUlZNazVET1dwWldFbDBZMjVXZFdSSGJIUmFWVUY0VFhwWmVFMVVhM2tLVG5wRk1FOXVTbXhhYW5CNVdsZGFla3d6VW1oYU0wMTJUVk0wZUU1cE5IZE5TVWRMUW1kdmNrSm5SVVZCWkZvMVFXZFJRMEpJZDBWbFowSTBRVWhaUVFvelZEQjNZWE5pU0VWVVNtcEhValJqYlZkak0wRnhTa3RZY21wbFVFc3pMMmcwY0hsblF6aHdOMjgwUVVGQlIyaGlUa2RDUjFGQlFVSkJUVUZTZWtKR0NrRnBRa0pxVUUxeWRuZEtSVXRMUlVkMlYwbGpaWGRHUm5jclUwOUdXbWxhVlhodmRsSkVObGxEV0Vob1RtZEphRUZRTDI5NWMyVkNWVTFqYW14S1NYTUtjakZPVDBGdmQxVmxSWGx3UzNRdlRtZ3ljVWxPWTB0dWNIUkZOazFCYjBkRFEzRkhVMDAwT1VKQlRVUkJNbWRCVFVkVlEwMVJRM2d3T1ZBdlYzSmhiZ3BDWlRoTmRFeFNWalV5TmxKdFlpczBhR295UlU1UVMzTndVa1JEWW1jeVJtOXpXVEZJWXpsYVJGaHZNbEZ0UlRkV2NrUlFSRlpSUTAxRWNrUjRWa1ZOQ2xNNFkyazVVa3hLZWxwTlUwSkhWMkZqYWs4MFkyaHJZVlpHVTNrM2EzRjBTamN4Wm5SU1kydHJUbTgyYjBjelIyWkdNMkZzYzJ4c2QyYzlQUW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In19fX0=","integratedTime":1792827032,"logIndex":3437295368,"logID":"c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d"}}}
|
package/dist/cli.js
CHANGED
|
@@ -63,8 +63,9 @@ const HELP = `用法: car <command> [args]
|
|
|
63
63
|
CAR_UNSIGNED_ALLOW=1 显式声明豁免(warn 缺签路径计数 confirmed=yes,横幅保留)
|
|
64
64
|
配置文件通道(1.5 起双载体):cwd car.config.ts(export default {…};发现序 ts > json)或
|
|
65
65
|
car.config.json 或 --config <path>;键位 sandbox.unsigned.allow / sandbox.sig.enforce /
|
|
66
|
-
sandbox.sig.trustRoot / llm.* /
|
|
67
|
-
adapterId/keyEnv/priority/weight/maxTokens + probe + maxAttempts;路由决策落链)/
|
|
66
|
+
sandbox.sig.trustRoot / llm.* / modelPool.*(多端点 fallback:endpoints id/baseUrl/model/
|
|
67
|
+
adapterId/keyEnv/priority/weight/maxTokens + probe + maxAttempts;路由决策落链)/ llm.subagent.*
|
|
68
|
+
(子 Agent:model 独立锚点 / maxConcurrent / maxCumulative 护栏上限)/ mcp.servers.*
|
|
68
69
|
(stdio: command/args/env;远程: url/headers,\${ENV_VAR} 引用注入凭据);优先级 flag > env > 配置 > 缺省;未知键 fail-visible`;
|
|
69
70
|
// 进程内热重载会话(ReloadManager 持有 epoch 与实例注册表;同进程连续 reload 语义完整)
|
|
70
71
|
let reloadMgrPromise;
|
|
@@ -244,7 +245,7 @@ async function main() {
|
|
|
244
245
|
console.error('CAR-E-LLM-CONFIG: 真实模型路径需要 baseUrl + model——');
|
|
245
246
|
console.error(' 配置:car.config.ts(export default)或 car.config.json {"llm":{"baseUrl":"https://…","model":"…"}} / env CAR_LLM_BASE_URL+CAR_LLM_MODEL / flag --base-url --model');
|
|
246
247
|
console.error(' anthropic:llm.adapterId "anthropic"(或 --adapter-id anthropic)+ baseUrl https://api.anthropic.com;凭据 ANTHROPIC_API_KEY');
|
|
247
|
-
console.error(' 模型池:
|
|
248
|
+
console.error(' 模型池:modelPool.endpoints(多端点 fallback + health 预检;凭据 keyEnv 引用;路由决策落链)');
|
|
248
249
|
console.error(' 凭据:OPENAI_API_KEY / ANTHROPIC_API_KEY(env fallback 需 CAR_ALLOW_ENV_CREDENTIALS=1 或 llm.allowEnvFallback)或 keychain;诊断:car doctor');
|
|
249
250
|
return 2;
|
|
250
251
|
}
|
package/dist/load/config.d.ts
CHANGED
|
@@ -21,6 +21,17 @@ export interface LlmConfig {
|
|
|
21
21
|
allowEnvFallback?: boolean;
|
|
22
22
|
/** 1.14-S2(K-MP-2 / D-40):历史压缩策略(阈值自动触发判定入参;立即压缩 API 独立可用) */
|
|
23
23
|
compaction?: CompactionConfig;
|
|
24
|
+
/** 1.16-K3(D-K2-2):子 Agent 配置(缺省 = 继承父会话模型锚点 Q-A2 + 宿主护栏常量 Q-A3) */
|
|
25
|
+
subagent?: SubagentConfig;
|
|
26
|
+
}
|
|
27
|
+
/** 1.16-K3(D-K2-2):子 Agent 配置面——宿主编排消费(内核自身不装配编排;schema 只登记键位) */
|
|
28
|
+
export interface SubagentConfig {
|
|
29
|
+
/** 独立子模型锚点(缺省 = 继承父会话现值;modelPool 激活时被池压过——与 llm.model 同口径) */
|
|
30
|
+
model?: string;
|
|
31
|
+
/** 并发子 Agent 上限(正整数;缺省 = 宿主常量 3,Q-A3) */
|
|
32
|
+
maxConcurrent?: number;
|
|
33
|
+
/** 单父会话累计派生上限(正整数;缺省 = 宿主常量 10,Q-A3) */
|
|
34
|
+
maxCumulative?: number;
|
|
24
35
|
}
|
|
25
36
|
/** 1.14-S4(K-POOL-1 / D-42):模型池端点登记(多端点 fallback 候选;凭据仅收 keyEnv 引用) */
|
|
26
37
|
export interface ModelPoolEndpointSpec {
|
package/dist/load/config.js
CHANGED
|
@@ -133,6 +133,18 @@ const rawSchema = z.object({
|
|
|
133
133
|
protectLastTurns: z.number({ invalid_type_error: '必须为正整数', required_error: '必须为正整数' })
|
|
134
134
|
.refine(v => Number.isInteger(v) && v > 0, { message: '必须为正整数' }).optional(),
|
|
135
135
|
}).strict().optional(),
|
|
136
|
+
// 1.16-K3(D-K2-2):子 Agent 配置(model 独立锚点 + 护栏上限;空对象无意义显式拒——禁静默 no-op)
|
|
137
|
+
subagent: z.object({
|
|
138
|
+
model: nonEmptyTrimmed().optional(),
|
|
139
|
+
maxConcurrent: z.number({ invalid_type_error: '必须为正整数', required_error: '必须为正整数' })
|
|
140
|
+
.refine(v => Number.isFinite(v) && Number.isInteger(v) && v > 0, { message: '必须为正整数' })
|
|
141
|
+
.optional(),
|
|
142
|
+
maxCumulative: z.number({ invalid_type_error: '必须为正整数', required_error: '必须为正整数' })
|
|
143
|
+
.refine(v => Number.isFinite(v) && Number.isInteger(v) && v > 0, { message: '必须为正整数' })
|
|
144
|
+
.optional(),
|
|
145
|
+
}).strict()
|
|
146
|
+
.refine(v => Object.keys(v).length > 0, { message: '至少登记一个键(model/maxConcurrent/maxCumulative;无子 Agent 配置需求请移除 llm.subagent 键,行为与 1.15.2 一致)' })
|
|
147
|
+
.optional(),
|
|
136
148
|
}).strict().optional(),
|
|
137
149
|
// 1.14-S4(K-POOL-1 / D-42):模型池登记(多端点 fallback + health + routing/decide 落链)
|
|
138
150
|
modelPool: modelPoolSchema.optional(),
|
|
@@ -140,8 +152,8 @@ const rawSchema = z.object({
|
|
|
140
152
|
servers: z.record(z.string(), mcpServerSchema, { invalid_type_error: '必须为对象(serverId → 启动规格)' }),
|
|
141
153
|
}).strict().optional(),
|
|
142
154
|
}, { invalid_type_error: '配置顶层必须为 JSON 对象' }).strict();
|
|
143
|
-
/** 未登记键提示(渲染层拼 path
|
|
144
|
-
const KEY_SPACES = '登记键位:sandbox.* / llm.* / llm.
|
|
155
|
+
/** 未登记键提示(渲染层拼 path)——与系统设计键位空间同步;D-1 勘误:modelPool 为顶层键(非 llm.modelPool) */
|
|
156
|
+
const KEY_SPACES = '登记键位:sandbox.* / llm.* / modelPool.* / llm.subagent.* / mcp.servers.*';
|
|
145
157
|
/** zod issue → CAR-E-CONFIG 渲染(首个 issue;unrecognized_keys 按键路径展开) */
|
|
146
158
|
function renderIssue(error) {
|
|
147
159
|
const iss = error.issues[0];
|
|
@@ -194,6 +206,16 @@ function parseCarConfig(raw) {
|
|
|
194
206
|
cp.protectLastTurns = d.llm.compaction.protectLastTurns;
|
|
195
207
|
llm.compaction = cp;
|
|
196
208
|
}
|
|
209
|
+
if (d.llm.subagent) {
|
|
210
|
+
const sg = {};
|
|
211
|
+
if (d.llm.subagent.model !== undefined)
|
|
212
|
+
sg.model = d.llm.subagent.model;
|
|
213
|
+
if (d.llm.subagent.maxConcurrent !== undefined)
|
|
214
|
+
sg.maxConcurrent = d.llm.subagent.maxConcurrent;
|
|
215
|
+
if (d.llm.subagent.maxCumulative !== undefined)
|
|
216
|
+
sg.maxCumulative = d.llm.subagent.maxCumulative;
|
|
217
|
+
llm.subagent = sg;
|
|
218
|
+
}
|
|
197
219
|
out.llm = llm;
|
|
198
220
|
}
|
|
199
221
|
if (d.mcp) {
|
package/dist/release-audit.jsonl
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{"stage":"archive","detail":"git archive HEAD → car-runtime-1.
|
|
2
|
-
{"stage":"sha256sums","detail":"SHA256SUMS
|
|
3
|
-
{"stage":"sbom","detail":"55 个组件(运行时依赖 0 项)","ts":
|
|
4
|
-
{"stage":"cosign-keyless","detail":"signed car-runtime-1.
|
|
1
|
+
{"stage":"archive","detail":"git archive HEAD → car-runtime-1.16.0.tgz(398072 bytes,树哈希锚定)","ts":1792827030875}
|
|
2
|
+
{"stage":"sha256sums","detail":"SHA256SUMS fe50cba2f8b8eb98…(裸字节复核通过)","ts":1792827030876}
|
|
3
|
+
{"stage":"sbom","detail":"55 个组件(运行时依赖 0 项)","ts":1792827030883}
|
|
4
|
+
{"stage":"cosign-keyless","detail":"signed car-runtime-1.16.0.tgz (keyless OIDC + Rekor)","ts":1792827034321}
|
package/dist/sbom.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bomFormat": "CAR-SBOM",
|
|
3
3
|
"specVersion": "0.1",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.16.0",
|
|
5
5
|
"components": [
|
|
6
6
|
{
|
|
7
7
|
"type": "file",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
{
|
|
12
12
|
"type": "file",
|
|
13
13
|
"path": "src/cli.ts",
|
|
14
|
-
"sha256": "
|
|
14
|
+
"sha256": "7313438811663fe23b28ed1edfd21c6f4fd45b15d08e68792a95deafdf4aafa6"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"type": "file",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
{
|
|
57
57
|
"type": "file",
|
|
58
58
|
"path": "src/load/config.ts",
|
|
59
|
-
"sha256": "
|
|
59
|
+
"sha256": "86584c58bfb5d458475e474b896de6ffa2f89e7e76364f4bfe9f2f3fd3d2ad75"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
"type": "file",
|
|
@@ -211,7 +211,7 @@
|
|
|
211
211
|
{
|
|
212
212
|
"type": "file",
|
|
213
213
|
"path": "src/seam.ts",
|
|
214
|
-
"sha256": "
|
|
214
|
+
"sha256": "bd0bad44f5dc0da542556146eff1318a30cb5b56eaf682d0350947716db2628a"
|
|
215
215
|
},
|
|
216
216
|
{
|
|
217
217
|
"type": "file",
|
|
@@ -271,7 +271,7 @@
|
|
|
271
271
|
{
|
|
272
272
|
"type": "file",
|
|
273
273
|
"path": "package.json",
|
|
274
|
-
"sha256": "
|
|
274
|
+
"sha256": "dfebc528f18e62971b0d801c0ffccf2fe6cc461ba9b07c7a39a6648009ac424d"
|
|
275
275
|
},
|
|
276
276
|
{
|
|
277
277
|
"type": "file",
|
package/dist/seam.d.ts
CHANGED
|
@@ -49,7 +49,7 @@ export { CredentialService } from './runtime-core/credentials.ts';
|
|
|
49
49
|
export type { LlmAdapter, LlmRequest, LlmChunk } from './runtime-core/types.ts';
|
|
50
50
|
export { mountPlugin } from './load/loader.ts';
|
|
51
51
|
export { Context } from './kernel/context.ts';
|
|
52
|
-
export { loadCarConfig, mergeLlmConfig, mergeSignatureGate, warmCarConfig, type CarConfig, type LlmConfig } from './load/config.ts';
|
|
52
|
+
export { loadCarConfig, mergeLlmConfig, mergeSignatureGate, warmCarConfig, type CarConfig, type LlmConfig, type SubagentConfig } from './load/config.ts';
|
|
53
53
|
export { probeCapabilities, SandboxExecutor } from './sandbox/sandbox.ts';
|
|
54
54
|
export { AuthzService, checkCapability, type Decision, type AuthzRequest, type AuthzDecision, type DeclaredCapabilities } from './authz/authz.ts';
|
|
55
55
|
export { createTelemetryFacade, telemetryConfigFromEnv } from './runtime-core/telemetry.ts';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lqc123qwe/car-runtime",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.16.0",
|
|
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/cli.ts
CHANGED
|
@@ -65,8 +65,9 @@ const HELP = `用法: car <command> [args]
|
|
|
65
65
|
CAR_UNSIGNED_ALLOW=1 显式声明豁免(warn 缺签路径计数 confirmed=yes,横幅保留)
|
|
66
66
|
配置文件通道(1.5 起双载体):cwd car.config.ts(export default {…};发现序 ts > json)或
|
|
67
67
|
car.config.json 或 --config <path>;键位 sandbox.unsigned.allow / sandbox.sig.enforce /
|
|
68
|
-
sandbox.sig.trustRoot / llm.* /
|
|
69
|
-
adapterId/keyEnv/priority/weight/maxTokens + probe + maxAttempts;路由决策落链)/
|
|
68
|
+
sandbox.sig.trustRoot / llm.* / modelPool.*(多端点 fallback:endpoints id/baseUrl/model/
|
|
69
|
+
adapterId/keyEnv/priority/weight/maxTokens + probe + maxAttempts;路由决策落链)/ llm.subagent.*
|
|
70
|
+
(子 Agent:model 独立锚点 / maxConcurrent / maxCumulative 护栏上限)/ mcp.servers.*
|
|
70
71
|
(stdio: command/args/env;远程: url/headers,\${ENV_VAR} 引用注入凭据);优先级 flag > env > 配置 > 缺省;未知键 fail-visible`
|
|
71
72
|
|
|
72
73
|
// 进程内热重载会话(ReloadManager 持有 epoch 与实例注册表;同进程连续 reload 语义完整)
|
|
@@ -232,7 +233,7 @@ async function main(): Promise<number> {
|
|
|
232
233
|
console.error('CAR-E-LLM-CONFIG: 真实模型路径需要 baseUrl + model——')
|
|
233
234
|
console.error(' 配置:car.config.ts(export default)或 car.config.json {"llm":{"baseUrl":"https://…","model":"…"}} / env CAR_LLM_BASE_URL+CAR_LLM_MODEL / flag --base-url --model')
|
|
234
235
|
console.error(' anthropic:llm.adapterId "anthropic"(或 --adapter-id anthropic)+ baseUrl https://api.anthropic.com;凭据 ANTHROPIC_API_KEY')
|
|
235
|
-
console.error(' 模型池:
|
|
236
|
+
console.error(' 模型池:modelPool.endpoints(多端点 fallback + health 预检;凭据 keyEnv 引用;路由决策落链)')
|
|
236
237
|
console.error(' 凭据:OPENAI_API_KEY / ANTHROPIC_API_KEY(env fallback 需 CAR_ALLOW_ENV_CREDENTIALS=1 或 llm.allowEnvFallback)或 keychain;诊断:car doctor')
|
|
237
238
|
return 2
|
|
238
239
|
}
|
package/src/load/config.ts
CHANGED
|
@@ -52,6 +52,18 @@ export interface LlmConfig {
|
|
|
52
52
|
allowEnvFallback?: boolean
|
|
53
53
|
/** 1.14-S2(K-MP-2 / D-40):历史压缩策略(阈值自动触发判定入参;立即压缩 API 独立可用) */
|
|
54
54
|
compaction?: CompactionConfig
|
|
55
|
+
/** 1.16-K3(D-K2-2):子 Agent 配置(缺省 = 继承父会话模型锚点 Q-A2 + 宿主护栏常量 Q-A3) */
|
|
56
|
+
subagent?: SubagentConfig
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** 1.16-K3(D-K2-2):子 Agent 配置面——宿主编排消费(内核自身不装配编排;schema 只登记键位) */
|
|
60
|
+
export interface SubagentConfig {
|
|
61
|
+
/** 独立子模型锚点(缺省 = 继承父会话现值;modelPool 激活时被池压过——与 llm.model 同口径) */
|
|
62
|
+
model?: string
|
|
63
|
+
/** 并发子 Agent 上限(正整数;缺省 = 宿主常量 3,Q-A3) */
|
|
64
|
+
maxConcurrent?: number
|
|
65
|
+
/** 单父会话累计派生上限(正整数;缺省 = 宿主常量 10,Q-A3) */
|
|
66
|
+
maxCumulative?: number
|
|
55
67
|
}
|
|
56
68
|
|
|
57
69
|
/** 1.14-S4(K-POOL-1 / D-42):模型池端点登记(多端点 fallback 候选;凭据仅收 keyEnv 引用) */
|
|
@@ -235,6 +247,18 @@ const rawSchema = z.object({
|
|
|
235
247
|
protectLastTurns: z.number({ invalid_type_error: '必须为正整数', required_error: '必须为正整数' })
|
|
236
248
|
.refine(v => Number.isInteger(v) && v > 0, { message: '必须为正整数' }).optional(),
|
|
237
249
|
}).strict().optional(),
|
|
250
|
+
// 1.16-K3(D-K2-2):子 Agent 配置(model 独立锚点 + 护栏上限;空对象无意义显式拒——禁静默 no-op)
|
|
251
|
+
subagent: z.object({
|
|
252
|
+
model: nonEmptyTrimmed().optional(),
|
|
253
|
+
maxConcurrent: z.number({ invalid_type_error: '必须为正整数', required_error: '必须为正整数' })
|
|
254
|
+
.refine(v => Number.isFinite(v) && Number.isInteger(v) && v > 0, { message: '必须为正整数' })
|
|
255
|
+
.optional(),
|
|
256
|
+
maxCumulative: z.number({ invalid_type_error: '必须为正整数', required_error: '必须为正整数' })
|
|
257
|
+
.refine(v => Number.isFinite(v) && Number.isInteger(v) && v > 0, { message: '必须为正整数' })
|
|
258
|
+
.optional(),
|
|
259
|
+
}).strict()
|
|
260
|
+
.refine(v => Object.keys(v).length > 0, { message: '至少登记一个键(model/maxConcurrent/maxCumulative;无子 Agent 配置需求请移除 llm.subagent 键,行为与 1.15.2 一致)' })
|
|
261
|
+
.optional(),
|
|
238
262
|
}).strict().optional(),
|
|
239
263
|
// 1.14-S4(K-POOL-1 / D-42):模型池登记(多端点 fallback + health + routing/decide 落链)
|
|
240
264
|
modelPool: modelPoolSchema.optional(),
|
|
@@ -243,8 +267,8 @@ const rawSchema = z.object({
|
|
|
243
267
|
}).strict().optional(),
|
|
244
268
|
}, { invalid_type_error: '配置顶层必须为 JSON 对象' }).strict()
|
|
245
269
|
|
|
246
|
-
/** 未登记键提示(渲染层拼 path
|
|
247
|
-
const KEY_SPACES = '登记键位:sandbox.* / llm.* / llm.
|
|
270
|
+
/** 未登记键提示(渲染层拼 path)——与系统设计键位空间同步;D-1 勘误:modelPool 为顶层键(非 llm.modelPool) */
|
|
271
|
+
const KEY_SPACES = '登记键位:sandbox.* / llm.* / modelPool.* / llm.subagent.* / mcp.servers.*'
|
|
248
272
|
|
|
249
273
|
/** zod issue → CAR-E-CONFIG 渲染(首个 issue;unrecognized_keys 按键路径展开) */
|
|
250
274
|
function renderIssue(error: z.ZodError): string {
|
|
@@ -287,6 +311,13 @@ function parseCarConfig(raw: unknown): { config: CarConfig; error?: string } {
|
|
|
287
311
|
if (d.llm.compaction.protectLastTurns !== undefined) cp.protectLastTurns = d.llm.compaction.protectLastTurns
|
|
288
312
|
llm.compaction = cp
|
|
289
313
|
}
|
|
314
|
+
if (d.llm.subagent) {
|
|
315
|
+
const sg: SubagentConfig = {}
|
|
316
|
+
if (d.llm.subagent.model !== undefined) sg.model = d.llm.subagent.model
|
|
317
|
+
if (d.llm.subagent.maxConcurrent !== undefined) sg.maxConcurrent = d.llm.subagent.maxConcurrent
|
|
318
|
+
if (d.llm.subagent.maxCumulative !== undefined) sg.maxCumulative = d.llm.subagent.maxCumulative
|
|
319
|
+
llm.subagent = sg
|
|
320
|
+
}
|
|
290
321
|
out.llm = llm
|
|
291
322
|
}
|
|
292
323
|
if (d.mcp) {
|
package/src/seam.ts
CHANGED
|
@@ -49,7 +49,7 @@ export { CredentialService } from './runtime-core/credentials.ts'
|
|
|
49
49
|
export type { LlmAdapter, LlmRequest, LlmChunk } from './runtime-core/types.ts'
|
|
50
50
|
export { mountPlugin } from './load/loader.ts'
|
|
51
51
|
export { Context } from './kernel/context.ts'
|
|
52
|
-
export { loadCarConfig, mergeLlmConfig, mergeSignatureGate, warmCarConfig, type CarConfig, type LlmConfig } from './load/config.ts'
|
|
52
|
+
export { loadCarConfig, mergeLlmConfig, mergeSignatureGate, warmCarConfig, type CarConfig, type LlmConfig, type SubagentConfig } from './load/config.ts'
|
|
53
53
|
export { probeCapabilities, SandboxExecutor } from './sandbox/sandbox.ts'
|
|
54
54
|
export { AuthzService, checkCapability, type Decision, type AuthzRequest, type AuthzDecision, type DeclaredCapabilities } from './authz/authz.ts'
|
|
55
55
|
export { createTelemetryFacade, telemetryConfigFromEnv } from './runtime-core/telemetry.ts'
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"base64Signature":"MEUCICbvk8lw/0J5k1bnaKNZCM/xgESEFF1qskK5z/7inngoAiEA5582ex8TI6YiJkKaYNPzuIKkUF7S99dxANZb7kpLwLU=","cert":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUc1akNDQm0yZ0F3SUJBZ0lVSzFtZE02eUltaklTQkxGZ29TY2h3VTlJZXUwd0NnWUlLb1pJemowRUF3TXcKTnpFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUjR3SEFZRFZRUURFeFZ6YVdkemRHOXlaUzFwYm5SbApjbTFsWkdsaGRHVXdIaGNOTWpZeE1ESXdNREkwTURJNFdoY05Nall4TURJd01ESTFNREk0V2pBQU1Ga3dFd1lICktvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUwcVF3SVNGV2VndFhBYzI4dzR4dGs3U0lyOFU1TFBKWlBmOHYKbGJvdEFveGszbnI0bWs5YjlLVWRDWmNSRVYzOGdZV0N3YnVkQzZzMXpHMUc4UEJjbGFPQ0JZd3dnZ1dJTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBVEJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREF6QWZCZ05WSFNNRUdEQVdnQlRmCjArblBWaVFSbHZtbzJPa29WYUxHTGhoa1B6QmlCZ05WSFJFQkFmOEVXREJXaGxSb2RIUndjem92TDJkcGRHaDEKWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHpMM0psYkdWaApjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakUxTGpJd09RWUtLd1lCQkFHRHZ6QUJBUVFyYUhSMGNITTZMeTkwCmIydGxiaTVoWTNScGIyNXpMbWRwZEdoMVluVnpaWEpqYjI1MFpXNTBMbU52YlRBVkJnb3JCZ0VFQVlPL01BRUMKQkFkeVpXeGxZWE5sTURZR0Npc0dBUVFCZzc4d0FRTUVLR1F4TWpaa05EUXlNVGt6TUdVMk5HVTNOV00zTmpZMQpNamcwWmpSbVpHWTNZVEpqWkRnNU5qSXdGUVlLS3dZQkJBR0R2ekFCQkFRSGNtVnNaV0Z6WlRBZ0Jnb3JCZ0VFCkFZTy9NQUVGQkJKc2NXTTJNalF2WTJGeUxYSjFiblJwYldVd0hnWUtLd1lCQkFHRHZ6QUJCZ1FRY21WbWN5OTAKWVdkekx6RXVNVFV1TWpBN0Jnb3JCZ0VFQVlPL01BRUlCQzBNSzJoMGRIQnpPaTh2ZEc5clpXNHVZV04wYVc5dQpjeTVuYVhSb2RXSjFjMlZ5WTI5dWRHVnVkQzVqYjIwd1pBWUtLd1lCQkFHRHZ6QUJDUVJXREZSb2RIUndjem92CkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMEwyTmhjaTF5ZFc1MGFXMWxMeTVuYVhSb2RXSXZkMjl5YTJac2IzZHoKTDNKbGJHVmhjMlV1ZVcxc1FISmxabk12ZEdGbmN5OHhMakUxTGpJd09BWUtLd1lCQkFHRHZ6QUJDZ1FxRENoawpNVEkyWkRRME1qRTVNekJsTmpSbE56VmpOelkyTlRJNE5HWTBabVJtTjJFeVkyUTRPVFl5TUIwR0Npc0dBUVFCCmc3OHdBUXNFRHd3TloybDBhSFZpTFdodmMzUmxaREExQmdvckJnRUVBWU8vTUFFTUJDY01KV2gwZEhCek9pOHYKWjJsMGFIVmlMbU52YlM5c2NXTTJNalF2WTJGeUxYSjFiblJwYldVd09BWUtLd1lCQkFHRHZ6QUJEUVFxRENoawpNVEkyWkRRME1qRTVNekJsTmpSbE56VmpOelkyTlRJNE5HWTBabVJtTjJFeVkyUTRPVFl5TUNBR0Npc0dBUVFCCmc3OHdBUTRFRWd3UWNtVm1jeTkwWVdkekx6RXVNVFV1TWpBYUJnb3JCZ0VFQVlPL01BRVBCQXdNQ2pFek5qRXgKT1RJM01UUXdLUVlLS3dZQkJBR0R2ekFCRUFRYkRCbG9kSFJ3Y3pvdkwyZHBkR2gxWWk1amIyMHZiSEZqTmpJMApNQmdHQ2lzR0FRUUJnNzh3QVJFRUNnd0lOamt5TXpRMU5qUXdaQVlLS3dZQkJBR0R2ekFCRWdSV0RGUm9kSFJ3CmN6b3ZMMmRwZEdoMVlpNWpiMjB2YkhGak5qSTBMMk5oY2kxeWRXNTBhVzFsTHk1bmFYUm9kV0l2ZDI5eWEyWnMKYjNkekwzSmxiR1ZoYzJVdWVXMXNRSEpsWm5NdmRHRm5jeTh4TGpFMUxqSXdPQVlLS3dZQkJBR0R2ekFCRXdRcQpEQ2hrTVRJMlpEUTBNakU1TXpCbE5qUmxOelZqTnpZMk5USTROR1kwWm1SbU4yRXlZMlE0T1RZeU1CY0dDaXNHCkFRUUJnNzh3QVJRRUNRd0hjbVZzWldGelpUQlpCZ29yQmdFRUFZTy9NQUVWQkVzTVNXaDBkSEJ6T2k4dloybDAKYUhWaUxtTnZiUzlzY1dNMk1qUXZZMkZ5TFhKMWJuUnBiV1V2WVdOMGFXOXVjeTl5ZFc1ekx6TTVNell3TVRZeApPRFE0TDJGMGRHVnRjSFJ6THpFd0ZnWUtLd1lCQkFHRHZ6QUJGZ1FJREFad2RXSnNhV013VUFZS0t3WUJCQUdECnZ6QUJHQVJDREVCeVpYQnZPbXh4WXpZeU5FQTJPVEl6TkRVMk5DOWpZWEl0Y25WdWRHbHRaVUF4TXpZeE1Ua3kKTnpFME9uSmxaanB5WldaekwzUmhaM012TVM0eE5TNHlNSUdLQmdvckJnRUVBZFo1QWdRQ0JId0VlZ0I0QUhZQQozVDB3YXNiSEVUSmpHUjRjbVdjM0FxSktYcmplUEszL2g0cHlnQzhwN280QUFBR2hWeTZETkFBQUJBTUFSekJGCkFpRUFrcWFVMUZQZVhGSzh1bHlCWmdZTFZvWHZRVnpUdThURnIwb0MwVDFXYWlJQ0lFakRpdDZsVXUyUkZRQkUKS04wMFA3TTZrUGlBK25uN1FwM1l4L09NVjYwbk1Bb0dDQ3FHU000OUJBTURBMmNBTUdRQ01BaDJEOXJPSTQ4bApjMUFrM3lnVG1ybWF3VXRsOW9rd2pVcVJkTjVrSmNMcjNKWjdpd0h3VmtCV1N3Vm5Ja09BVUFJd1NiK2dFK2loCm1FZUo3Q0VBNktmSXJad0dzN2c3UFhPS2tyVFBYQWYzYmFUSHJRRFRDbWFSeExibjd5WWFEelJICi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K","rekorBundle":{"SignedEntryTimestamp":"MEUCIGu7TqDI7QG1De0ED4bg7V58GvGtV+wwmfbPqrwhlx3vAiEAj917MyoFKHsgkZvu/rLtaR4kd1UzZ7MWzVjP+eUHf00=","Payload":{"body":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJlMDgwMGVjMTVkOTRjOGI0ZTY0MTBhOTg2NDJmNGRjNzAzYzIzMzVmYTg1Y2Y3NTQzNjAwM2NjYzI2YTJkMzI3In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJQ2J2azhsdy8wSjVrMWJuYUtOWkNNL3hnRVNFRkYxcXNrSzV6Lzdpbm5nb0FpRUE1NTgyZXg4VEk2WWlKa0thWU5QenVJS2tVRjdTOTlkeEFOWmI3a3BMd0xVPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVYzFha05EUW0weVowRjNTVUpCWjBsVlN6RnRaRTAyZVVsdGFrbFRRa3hHWjI5VFkyaDNWVGxKWlhVd2QwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFU1hkTlJFa3dUVVJKTkZkb1kwNU5hbGw0VFVSSmQwMUVTVEZOUkVrMFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVV3Y1ZGM1NWTkdWMlZuZEZoQll6STRkelI0ZEdzM1UwbHlPRlUxVEZCS1dsQm1PSFlLYkdKdmRFRnZlR3N6Ym5JMGJXczVZamxMVldSRFdtTlNSVll6T0dkWlYwTjNZblZrUXpaek1YcEhNVWM0VUVKamJHRlBRMEpaZDNkbloxZEpUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFtbENaMDVXU0ZKRlFrRm1PRVZYUkVKWGFHeFNiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmlTRVpxVG1wSk1Fd3lUbWhqYVRGNVpGYzFNR0ZYTVd4TWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTBwc1lrZFdhQXBqTWxWMVpWY3hjMUZJU214YWJrMTJaRWRHYm1ONU9IaE1ha1V4VEdwSmQwOVJXVXRMZDFsQ1FrRkhSSFo2UVVKQlVWRnlZVWhTTUdOSVRUWk1lVGt3Q21JeWRHeGlhVFZvV1ROU2NHSXlOWHBNYldSd1pFZG9NVmx1Vm5wYVdFcHFZakkxTUZwWE5UQk1iVTUyWWxSQlZrSm5iM0pDWjBWRlFWbFBMMDFCUlVNS1FrRmtlVnBYZUd4WldFNXNUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUjFGNFRXcGFhMDVFVVhsTlZHdDZUVWRWTWs1SFZUTk9WMDB6VG1wWk1RcE5hbWN3V21wU2JWcEhXVE5aVkVwcVdrUm5OVTVxU1hkR1VWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlNHTnRWbk5hVjBaNldsUkJaMEpuYjNKQ1owVkZDa0ZaVHk5TlFVVkdRa0pLYzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMGhuV1V0TGQxbENRa0ZIUkhaNlFVSkNaMUZSWTIxV2JXTjVPVEFLV1Zka2VreDZSWFZOVkZWMVRXcEJOMEpuYjNKQ1owVkZRVmxQTDAxQlJVbENRekJOU3pKb01HUklRbnBQYVRoMlpFYzVjbHBYTkhWWlYwNHdZVmM1ZFFwamVUVnVZVmhTYjJSWFNqRmpNbFo1V1RJNWRXUkhWblZrUXpWcVlqSXdkMXBCV1V0TGQxbENRa0ZIUkhaNlFVSkRVVkpYUkVaU2IyUklVbmRqZW05MkNrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUV3eVRtaGphVEY1WkZjMU1HRlhNV3hNZVRWdVlWaFNiMlJYU1haa01qbDVZVEphYzJJelpIb0tURE5LYkdKSFZtaGpNbFYxWlZjeGMxRklTbXhhYmsxMlpFZEdibU41T0hoTWFrVXhUR3BKZDA5QldVdExkMWxDUWtGSFJIWjZRVUpEWjFGeFJFTm9hd3BOVkVreVdrUlJNRTFxUlRWTmVrSnNUbXBTYkU1NlZtcE9lbGt5VGxSSk5FNUhXVEJhYlZKdFRqSkZlVmt5VVRSUFZGbDVUVUl3UjBOcGMwZEJVVkZDQ21jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacFRGZG9kbU16VW14YVJFRXhRbWR2Y2tKblJVVkJXVTh2VFVGRlRVSkRZMDFLVjJnd1pFaENlazlwT0hZS1dqSnNNR0ZJVm1sTWJVNTJZbE01YzJOWFRUSk5hbEYyV1RKR2VVeFlTakZpYmxKd1lsZFZkMDlCV1V0TGQxbENRa0ZIUkhaNlFVSkVVVkZ4UkVOb2F3cE5WRWt5V2tSUk1FMXFSVFZOZWtKc1RtcFNiRTU2Vm1wT2Vsa3lUbFJKTkU1SFdUQmFiVkp0VGpKRmVWa3lVVFJQVkZsNVRVTkJSME5wYzBkQlVWRkNDbWMzT0hkQlVUUkZSV2QzVVdOdFZtMWplVGt3V1Zka2VreDZSWFZOVkZWMVRXcEJZVUpuYjNKQ1owVkZRVmxQTDAxQlJWQkNRWGROUTJwRmVrNXFSWGdLVDFSSk0wMVVVWGRMVVZsTFMzZFpRa0pCUjBSMmVrRkNSVUZSWWtSQ2JHOWtTRkozWTNwdmRrd3laSEJrUjJneFdXazFhbUl5TUhaaVNFWnFUbXBKTUFwTlFtZEhRMmx6UjBGUlVVSm5OemgzUVZKRlJVTm5kMGxPYW10NVRYcFJNVTVxVVhkYVFWbExTM2RaUWtKQlIwUjJla0ZDUldkU1YwUkdVbTlrU0ZKM0NtTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZa2hHYWs1cVNUQk1NazVvWTJreGVXUlhOVEJoVnpGc1RIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTUtZak5rZWt3elNteGlSMVpvWXpKVmRXVlhNWE5SU0Vwc1dtNU5kbVJIUm01amVUaDRUR3BGTVV4cVNYZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjUXBFUTJoclRWUkpNbHBFVVRCTmFrVTFUWHBDYkU1cVVteE9lbFpxVG5wWk1rNVVTVFJPUjFrd1dtMVNiVTR5UlhsWk1sRTBUMVJaZVUxQ1kwZERhWE5IQ2tGUlVVSm5OemgzUVZKUlJVTlJkMGhqYlZaeldsZEdlbHBVUWxwQ1oyOXlRbWRGUlVGWlR5OU5RVVZXUWtWelRWTlhhREJrU0VKNlQyazRkbG95YkRBS1lVaFdhVXh0VG5aaVV6bHpZMWROTWsxcVVYWlpNa1o1VEZoS01XSnVVbkJpVjFWMldWZE9NR0ZYT1hWamVUbDVaRmMxZWt4NlRUVk5lbGwzVFZSWmVBcFBSRkUwVERKR01HUkhWblJqU0ZKNlRIcEZkMFpuV1V0TGQxbENRa0ZIUkhaNlFVSkdaMUZKUkVGYWQyUlhTbk5oVjAxM1ZVRlpTMHQzV1VKQ1FVZEVDblo2UVVKSFFWSkRSRVZDZVZwWVFuWlBiWGg0V1hwWmVVNUZRVEpQVkVsNlRrUlZNazVET1dwWldFbDBZMjVXZFdSSGJIUmFWVUY0VFhwWmVFMVVhM2tLVG5wRk1FOXVTbXhhYW5CNVdsZGFla3d6VW1oYU0wMTJUVk0wZUU1VE5IbE5TVWRMUW1kdmNrSm5SVVZCWkZvMVFXZFJRMEpJZDBWbFowSTBRVWhaUVFvelZEQjNZWE5pU0VWVVNtcEhValJqYlZkak0wRnhTa3RZY21wbFVFc3pMMmcwY0hsblF6aHdOMjgwUVVGQlIyaFdlVFpFVGtGQlFVSkJUVUZTZWtKR0NrRnBSVUZyY1dGVk1VWlFaVmhHU3poMWJIbENXbWRaVEZadldIWlJWbnBVZFRoVVJuSXdiME13VkRGWFlXbEpRMGxGYWtScGREWnNWWFV5VWtaUlFrVUtTMDR3TUZBM1RUWnJVR2xCSzI1dU4xRndNMWw0TDA5TlZqWXdiazFCYjBkRFEzRkhVMDAwT1VKQlRVUkJNbU5CVFVkUlEwMUJhREpFT1hKUFNUUTRiQXBqTVVGck0zbG5WRzF5YldGM1ZYUnNPVzlyZDJwVmNWSmtUalZyU21OTWNqTktXamRwZDBoM1ZtdENWMU4zVm01SmEwOUJWVUZKZDFOaUsyZEZLMmxvQ20xRlpVbzNRMFZCTmt0bVNYSmFkMGR6TjJjM1VGaFBTMnR5VkZCWVFXWXpZbUZVU0hKUlJGUkRiV0ZTZUV4aWJqZDVXV0ZFZWxKSUNpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9fX19","integratedTime":1792464029,"logIndex":3329865420,"logID":"c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d"}}}
|