@aopslabs/aops 0.3.18 → 0.3.20
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/agent-assets-release/agent-assets/core/387548b990d0cfef6a92805f39d18c2ae6b4bb6b1e42ea42e6c597ea7d207447/manifest.json +2 -2
- package/agent-assets-release/agent-assets/inventory.json +3 -3
- package/agent-assets-release/agent-assets-release.json +8 -8
- package/agent-assets-release/agent-assets-release.sigstore.json +22 -28
- package/dist/commands/community-cockpit.js +24 -4
- package/dist/commands/global-update.js +7 -5
- package/dist/lib/agent-assets/native-fs.js +2 -2
- package/dist/lib/community-cockpit-lifecycle.js +32 -2
- package/native/manifest.json +1 -1
- package/native/qualifications/win32-x64.json +1 -1
- package/native/tui/darwin-arm64/aops-tui +0 -0
- package/native/tui/linux-x64/aops-tui +0 -0
- package/native/tui/win32-x64/aops-tui.exe +0 -0
- package/package.json +1 -1
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"name": "aops",
|
|
11
11
|
"optional": false,
|
|
12
12
|
"packageSha256": "387548b990d0cfef6a92805f39d18c2ae6b4bb6b1e42ea42e6c597ea7d207447",
|
|
13
|
-
"version": "0.3.
|
|
14
|
-
"versionId": "community-core-0.3.
|
|
13
|
+
"version": "0.3.20",
|
|
14
|
+
"versionId": "community-core-0.3.20"
|
|
15
15
|
},
|
|
16
16
|
"gateway": {
|
|
17
17
|
"byteLength": 621,
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"kind": "aops-community-agent-assets-inventory-v1",
|
|
23
23
|
"schemaVersion": 1,
|
|
24
24
|
"source": {
|
|
25
|
-
"commit": "
|
|
25
|
+
"commit": "416b7fa06a743fa09a50213bbef258cfeafb2494",
|
|
26
26
|
"repository": "git+https://github.com/eeemzs/aops-platform",
|
|
27
27
|
"root": "apps/aops-cli/assets/agent-assets"
|
|
28
28
|
}
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"name": "aops",
|
|
12
12
|
"optional": false,
|
|
13
13
|
"packageSha256": "387548b990d0cfef6a92805f39d18c2ae6b4bb6b1e42ea42e6c597ea7d207447",
|
|
14
|
-
"version": "0.3.
|
|
15
|
-
"versionId": "community-core-0.3.
|
|
14
|
+
"version": "0.3.20",
|
|
15
|
+
"versionId": "community-core-0.3.20"
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
{
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
{
|
|
124
124
|
"byteLength": 3978,
|
|
125
125
|
"ref": "agent-assets/core/387548b990d0cfef6a92805f39d18c2ae6b4bb6b1e42ea42e6c597ea7d207447/manifest.json",
|
|
126
|
-
"sha256": "
|
|
126
|
+
"sha256": "c0664cc0151b72059fcd67f434c1833f145a94f2b7f55d2994fa7804f986135c"
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
"byteLength": 621,
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
{
|
|
134
134
|
"byteLength": 926,
|
|
135
135
|
"ref": "agent-assets/inventory.json",
|
|
136
|
-
"sha256": "
|
|
136
|
+
"sha256": "6cc08bf137e92b3566143748de4a9d3642ff9b825940c40cfee8e5826ab47aab"
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
"byteLength": 281,
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
},
|
|
150
150
|
"inventory": {
|
|
151
151
|
"ref": "agent-assets/inventory.json",
|
|
152
|
-
"sha256": "
|
|
152
|
+
"sha256": "6cc08bf137e92b3566143748de4a9d3642ff9b825940c40cfee8e5826ab47aab"
|
|
153
153
|
},
|
|
154
154
|
"kind": "aops-community-agent-assets-release-v1",
|
|
155
155
|
"projection": {
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
},
|
|
159
159
|
"root": "agent-assets",
|
|
160
160
|
"schemaVersion": 1,
|
|
161
|
-
"setSha256": "
|
|
161
|
+
"setSha256": "97d074bdd0c0ecbe83c330a4e35808dcf6c39615a7b7b84e105c7b2d981667e5"
|
|
162
162
|
},
|
|
163
163
|
"evidence": {
|
|
164
164
|
"signature": {
|
|
@@ -166,10 +166,10 @@
|
|
|
166
166
|
}
|
|
167
167
|
},
|
|
168
168
|
"kind": "aops-community-agent-assets-bundle-v1",
|
|
169
|
-
"releaseVersion": "0.3.
|
|
169
|
+
"releaseVersion": "0.3.20",
|
|
170
170
|
"schemaVersion": 1,
|
|
171
171
|
"source": {
|
|
172
|
-
"commit": "
|
|
172
|
+
"commit": "416b7fa06a743fa09a50213bbef258cfeafb2494",
|
|
173
173
|
"repository": "git+https://github.com/eeemzs/aops-platform",
|
|
174
174
|
"root": "apps/aops-cli/assets/agent-assets"
|
|
175
175
|
}
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
"x509CertificateChain": {
|
|
5
5
|
"certificates": [
|
|
6
6
|
{
|
|
7
|
-
"rawBytes": "
|
|
7
|
+
"rawBytes": "MIIHczCCBvmgAwIBAgIUAeyItz3KdmqZ3EmoIuat821ksZkwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwODE1MTE1MzQzWhcNMjYwODE1MTIwMzQzWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBbWc6MKbUWLaLny317diSxLp47FD3rQyYTe+YJjd8L/HoTN+Wimh+a/YWCl9sM25/xeDU4Jgt2sUDDyPQdHR/qOCBhgwggYUMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUoJLvKmwNMTObXdi9hB1a0fFiJv4wHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdAYDVR0RAQH/BGowaIZmaHR0cHM6Ly9naXRodWIuY29tL2VlZW16cy9hb3BzLXBsYXRmb3JtLy5naXRodWIvd29ya2Zsb3dzL3NpZ24tcHVibGljLWFnZW50LWFzc2V0cy55bWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoNDE2YjdmYTA2YTc0M2ZhMDlhNTAyMTNiYmVmMjU4Y2ZlYWZiMjQ5NDAxBgorBgEEAYO/MAEEBCNTaWduIGV4YWN0IHB1YmxpYyBBT1BTIGFnZW50IGFzc2V0czAiBgorBgEEAYO/MAEFBBRlZWVtenMvYW9wcy1wbGF0Zm9ybTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMHYGCisGAQQBg78wAQkEaAxmaHR0cHM6Ly9naXRodWIuY29tL2VlZW16cy9hb3BzLXBsYXRmb3JtLy5naXRodWIvd29ya2Zsb3dzL3NpZ24tcHVibGljLWFnZW50LWFzc2V0cy55bWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoNDE2YjdmYTA2YTc0M2ZhMDlhNTAyMTNiYmVmMjU4Y2ZlYWZiMjQ5NDAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwNwYKKwYBBAGDvzABDAQpDCdodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0wOAYKKwYBBAGDvzABDQQqDCg0MTZiN2ZhMDZhNzQzZmEwOWE1MDIxM2JiZWYyNThjZmVhZmIyNDk0MB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTMxNjI1NTAyNjApBgorBgEEAYO/MAEQBBsMGWh0dHBzOi8vZ2l0aHViLmNvbS9lZWVtenMwGQYKKwYBBAGDvzABEQQLDAkxMDkzMTA3NzQwdgYKKwYBBAGDvzABEgRoDGZodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0vLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1wdWJsaWMtYWdlbnQtYXNzZXRzLnltbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg0MTZiN2ZhMDZhNzQzZmEwOWE1MDIxM2JiZWYyNThjZmVhZmIyNDk0MCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwWwYKKwYBBAGDvzABFQRNDEtodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0vYWN0aW9ucy9ydW5zLzMxODgzMTYyOTg2L2F0dGVtcHRzLzEwFwYKKwYBBAGDvzABFgQJDAdwcml2YXRlMFIGCisGAQQBg78wARgERAxCcmVwbzplZWVtenNAMTA5MzEwNzc0L2FvcHMtcGxhdGZvcm1AMTMxNjI1NTAyNjpyZWY6cmVmcy9oZWFkcy9tYWluMIGJBgorBgEEAdZ5AgQCBHsEeQB3AHUA3T0wasbHETJjGR4cmWc3AqJKXrjePK3/h4pygC8p7o4AAAGgBUVNpAAABAMARjBEAiA1Ct0UQWLm068F0DxMFNOBkHie8Tkd4Iz9zNbaHYLaHwIgYKNp7hsEPfptIs0emfx+R0HA9Yb4cbBOcwRUoOXMfokwCgYIKoZIzj0EAwMDaAAwZQIxAJfw91Gi6inFK0tz3a5W/fHJttJQHtvINMQcP7VeE+nQFwlexUs1kcid92EVuAws7QIwO4J2ceHGAJ5c1ogW4HQU8hsTixnANGvhwQzMu2Tv0XUOP7x/Yk1NEaGVSM5gqdE4"
|
|
8
8
|
}
|
|
9
9
|
]
|
|
10
10
|
},
|
|
11
11
|
"tlogEntries": [
|
|
12
12
|
{
|
|
13
|
-
"logIndex": "
|
|
13
|
+
"logIndex": "2475568654",
|
|
14
14
|
"logId": {
|
|
15
15
|
"keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="
|
|
16
16
|
},
|
|
@@ -18,40 +18,34 @@
|
|
|
18
18
|
"kind": "hashedrekord",
|
|
19
19
|
"version": "0.0.1"
|
|
20
20
|
},
|
|
21
|
-
"integratedTime": "
|
|
21
|
+
"integratedTime": "1786794823",
|
|
22
22
|
"inclusionPromise": {
|
|
23
|
-
"signedEntryTimestamp": "
|
|
23
|
+
"signedEntryTimestamp": "MEYCIQDpzqPs/zOoCZZCJhCBGVv98Q9TMu5/fXyjOnUu1wl2dQIhAJQOj0MPPgtzwCeDgRB6ue0B5eT4kHVfyyPNrk0AAbP3"
|
|
24
24
|
},
|
|
25
25
|
"inclusionProof": {
|
|
26
|
-
"logIndex": "
|
|
27
|
-
"rootHash": "
|
|
28
|
-
"treeSize": "
|
|
26
|
+
"logIndex": "2353664392",
|
|
27
|
+
"rootHash": "oGO/M6mNoEj/mcY6CICpIiywqywA6re9sTJVN4T4reE=",
|
|
28
|
+
"treeSize": "2353664398",
|
|
29
29
|
"hashes": [
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"s5E9cyfPV5iYeoP4ngJ8bEF5+ErZqr5ThFo2awVdIO4=",
|
|
42
|
-
"K1vfg3sJABH0J5LZVXFihxGvE7G/oc8VMVnGIJWGyJ4=",
|
|
43
|
-
"rMc0j4Grkbg91aezLH+VaNa8WInEP33cVjZOfF8d11w=",
|
|
44
|
-
"L1XzmA0JH00/N2sVFkU4WHPKi2wzrlh+VIop3VzmV2s=",
|
|
45
|
-
"0qBvTqmqSnaffENLNDR34y9oY/4UQsDsIQcllDxgne0=",
|
|
46
|
-
"mYkFdqU5C9m3w88wTn9l6UpYo+PI93c232s+vBiBEpM=",
|
|
30
|
+
"9H2Q6EuNEyMME0j6bVueMJGy1gBeRRAJ4MpgZ2087u0=",
|
|
31
|
+
"nihE6py67CrtDUyF3QuKggQkFY4mUkLYIFdikHNmzYI=",
|
|
32
|
+
"sVG/gekBsO2ZPpaKMLi98BvpKcwQU8NFaF6s3fgvoNM=",
|
|
33
|
+
"1EL265i7xgCsxCh/L70SIfIA4Yv3VAHd/XuPZKLJJZI=",
|
|
34
|
+
"jkGNPYHe/tPGvl9eFAbivZ8nN5cMH/Wxcry4dbwJxAk=",
|
|
35
|
+
"2h2zl4tjADG46W61aDa7tApWqUQWFenTQU6xUmkmGos=",
|
|
36
|
+
"8JVVC+HC0O+gTtnbgn0orEiVin4wQBqSiGmcUkTBHRE=",
|
|
37
|
+
"LvZ9Rd9MI8m9m139rRvV1bkOdP90GRP0hMNhcdg6P8g=",
|
|
38
|
+
"DHfoMEZo5Yg6j1ZKrAJOkyISWNcQn+EKBaavTkNjlaI=",
|
|
39
|
+
"84UFTbAGKKS2WEUUQZshN1y9eP0Y0wFh1Qrd8AbLPCA=",
|
|
40
|
+
"1OEC0KMekWr1AbpIDYXYCOXzf6aK8hYAK01U3ypm0is=",
|
|
47
41
|
"ygTG08vB2EEmJQPXRvF5H06Tlac72AkODENK7PhCPkw=",
|
|
48
42
|
"xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="
|
|
49
43
|
],
|
|
50
44
|
"checkpoint": {
|
|
51
|
-
"envelope": "rekor.sigstore.dev - 1193050959916656506\
|
|
45
|
+
"envelope": "rekor.sigstore.dev - 1193050959916656506\n2353664398\noGO/M6mNoEj/mcY6CICpIiywqywA6re9sTJVN4T4reE=\n\n— rekor.sigstore.dev wNI9ajBFAiAOQzOug7/5rZIFaHD7rvwxEZie0NnWTPUizgGg0SBwDgIhAPZfhaQIrt51VaiD3cMjYkg6YxbfzGENwW1rwkd3QzzB\n"
|
|
52
46
|
}
|
|
53
47
|
},
|
|
54
|
-
"canonicalizedBody": "
|
|
48
|
+
"canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI2YTMwMWY1MDhlM2I3NzIwMmY1NzliNjliZDNmZDUwODM2NjdmYzNiNTViY2ZmNjMzZGFjMTYyMzU0NDEyMzVlIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUQ5MGVFbnY2UkxKeXdPc1FmeDJzbnU3Nit0aTBuTEJLVVRlcGIzc3d5Q25BSWhBTkdTcGVYZ1ZySkcxaGlwait5a3hhSnM1dk9nNitna1JwQTZFc3gyNVJZaiIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGpla05EUW5adFowRjNTVUpCWjBsVlFXVjVTWFI2TTB0a2JYRmFNMFZ0YjBsMVlYUTRNakZyYzFwcmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlFUlRGTlZFVXhUWHBSZWxkb1kwNU5hbGwzVDBSRk1VMVVTWGROZWxGNlYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZDWWxkak5rMUxZbFZYVEdGTWJua3pNVGRrYVZONFRIQTBOMFpFTTNKUmVWbFVaU3NLV1VwcVpEaE1MMGh2VkU0clYybHRhQ3RoTDFsWFEydzVjMDB5TlM5NFpVUlZORXBuZERKelZVUkVlVkJSWkVoU0wzRlBRMEpvWjNkbloxbFZUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZ2U2t4MkNrdHRkMDVOVkU5aVdHUnBPV2hDTVdFd1prWnBTblkwZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSQldVUldVakJTUVZGSUwwSkhiM2RoU1ZwdFlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKV2JGcFhNVFpqZVRsb1lqTkNlZ3BNV0VKeldWaFNiV0l6U25STWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTA1d1dqSTBkR05JVm1saVIyeHFURmRHYmxwWE5UQk1WMFo2Q21NeVZqQmplVFUxWWxkNFFXTnRWbTFqZVRsdldsZEdhMk41T1hSWlYyeDFUVVJyUjBOcGMwZEJVVkZDWnpjNGQwRlJSVVZMTW1nd1pFaENlazlwT0hZS1pFYzVjbHBYTkhWWlYwNHdZVmM1ZFdONU5XNWhXRkp2WkZkS01XTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNTSGRaUzB0M1dVSkNRVWRFZG5wQlFncEJaMUZTWkRJNWVXRXlXbk5pTTJSbVdrZHNlbU5IUmpCWk1tZDNUbWRaUzB0M1dVSkNRVWRFZG5wQlFrRjNVVzlPUkVVeVdXcGtiVmxVUVRKWlZHTXdDazB5V21oTlJHeG9UbFJCZVUxVVRtbFpiVlp0VFdwVk5Ga3lXbXhaVjFwcFRXcFJOVTVFUVhoQ1oyOXlRbWRGUlVGWlR5OU5RVVZGUWtOT1ZHRlhaSFVLU1VkV05GbFhUakJKU0VJeFdXMTRjRmw1UWtKVU1VSlVTVWRHYmxwWE5UQkpSMFo2WXpKV01HTjZRV2xDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0pTYkFwYVYxWjBaVzVOZGxsWE9YZGplVEYzWWtkR01GcHRPWGxpVkVGa1FtZHZja0puUlVWQldVOHZUVUZGUjBKQk9YbGFWMXA2VERKb2JGbFhVbnBNTWpGb0NtRlhOSGRQZDFsTFMzZFpRa0pCUjBSMmVrRkNRMEZSZEVSRGRHOWtTRkozWTNwdmRrd3pVblpoTWxaMVRHMUdhbVJIYkhaaWJrMTFXakpzTUdGSVZta0taRmhPYkdOdFRuWmlibEpzWW01UmRWa3lPWFJOU0ZsSFEybHpSMEZSVVVKbk56aDNRVkZyUldGQmVHMWhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESldiRnBYTVRaamVUbG9Zak5DZWt4WVFuTlpXRkp0WWpOS2RFeDVOVzVoV0ZKdlpGZEpkbVF5T1hsaE1scHpZak5rZWt3elRuQmFNalIwQ21OSVZtbGlSMnhxVEZkR2JscFhOVEJNVjBaNll6SldNR041TlRWaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkdkSFEybHpSMEZSVVVJS1p6YzRkMEZSYjBWTFozZHZUa1JGTWxscVpHMVpWRUV5V1ZSak1FMHlXbWhOUkd4b1RsUkJlVTFVVG1sWmJWWnRUV3BWTkZreVdteFpWMXBwVFdwUk5RcE9SRUZrUW1kdmNrSm5SVVZCV1U4dlRVRkZURUpCT0UxRVYyUndaRWRvTVZscE1XOWlNMDR3V2xkUmQwNTNXVXRMZDFsQ1FrRkhSSFo2UVVKRVFWRndDa1JEWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIzVDBGWlMwdDNXVUlLUWtGSFJIWjZRVUpFVVZGeFJFTm5NRTFVV21sT01scG9UVVJhYUU1NlVYcGFiVVYzVDFkRk1VMUVTWGhOTWtwcFdsZFplVTVVYUdwYWJWWm9XbTFKZVFwT1JHc3dUVUk0UjBOcGMwZEJVVkZDWnpjNGQwRlJORVZGVVhkUVkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5RbTlIUTJselIwRlJVVUpuTnpoM0NrRlJPRVZFUVhkTFRWUk5lRTVxU1RGT1ZFRjVUbXBCY0VKbmIzSkNaMFZGUVZsUEwwMUJSVkZDUW5OTlIxZG9NR1JJUW5wUGFUaDJXakpzTUdGSVZta0tURzFPZG1KVE9XeGFWMVowWlc1TmQwZFJXVXRMZDFsQ1FrRkhSSFo2UVVKRlVWRk1SRUZyZUUxRWEzcE5WRUV6VG5wUmQyUm5XVXRMZDFsQ1FrRkhSQXAyZWtGQ1JXZFNiMFJIV205a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIyQ2t4dFpIQmtSMmd4V1drNU0ySXpTbkphYlhoMlpETk5kbU15Ykc1aWFURjNaRmRLYzJGWFRYUlpWMlJzWW01UmRGbFlUbnBhV0ZKNlRHNXNkR0pGUW5rS1dsZGFla3d5YUd4WlYxSjZUREl4YUdGWE5IZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjVVJEWnpCTlZGcHBUakphYUUxRVdtaE9lbEY2V20xRmR3cFBWMFV4VFVSSmVFMHlTbWxhVjFsNVRsUm9hbHB0Vm1oYWJVbDVUa1JyTUUxRFJVZERhWE5IUVZGUlFtYzNPSGRCVWxGRlJYZDNVbVF5T1hsaE1scHpDbUl6WkdaYVIyeDZZMGRHTUZreVozZFhkMWxMUzNkWlFrSkJSMFIyZWtGQ1JsRlNUa1JGZEc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFlLV2xkV2JHSlljSHBNTWtaMlkwaE5kR05IZUdoa1IxcDJZMjB3ZGxsWFRqQmhWemwxWTNrNWVXUlhOWHBNZWsxNFQwUm5lazFVV1hsUFZHY3lUREpHTUFwa1IxWjBZMGhTZWt4NlJYZEdkMWxMUzNkWlFrSkJSMFIyZWtGQ1JtZFJTa1JCWkhkamJXd3lXVmhTYkUxR1NVZERhWE5IUVZGUlFtYzNPSGRCVW1kRkNsSkJlRU5qYlZaM1lucHdiRnBYVm5SbGJrNUJUVlJCTlUxNlJYZE9lbU13VERKR2RtTklUWFJqUjNob1pFZGFkbU50TVVGTlZFMTRUbXBKTVU1VVFYa0tUbXB3ZVZwWFdUWmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFKUjBwQ1oyOXlRbWRGUlVGa1dqVkJaMUZEUWtoelJXVlJRak5CU0ZWQk0xUXdkd3BoYzJKSVJWUktha2RTTkdOdFYyTXpRWEZLUzFoeWFtVlFTek12YURSd2VXZERPSEEzYnpSQlFVRkhaMEpWVms1d1FVRkJRa0ZOUVZKcVFrVkJhVUV4Q2tOME1GVlJWMHh0TURZNFJqQkVlRTFHVGs5Q2EwaHBaVGhVYTJRMFNYbzVlazVpWVVoWlRHRklkMGxuV1V0T2NEZG9jMFZRWm5CMFNYTXdaVzFtZUNzS1VqQklRVGxaWWpSallrSlBZM2RTVlc5UFdFMW1iMnQzUTJkWlNVdHZXa2w2YWpCRlFYZE5SR0ZCUVhkYVVVbDRRVXBtZHpreFIyazJhVzVHU3pCMGVnb3pZVFZYTDJaSVNuUjBTbEZJZEhaSlRrMVJZMUEzVm1WRksyNVJSbmRzWlhoVmN6RnJZMmxrT1RKRlZuVkJkM00zVVVsM1R6UktNbU5sU0VkQlNqVmpDakZ2WjFjMFNGRlZPR2h6VkdsNGJrRk9SM1pvZDFGNlRYVXlWSFl3V0ZWUFVEZDRMMWxyTVU1RllVZFdVMDAxWjNGa1JUUUtMUzB0TFMxRlRrUWdRMFZTVkVsR1NVTkJWRVV0TFMwdExRbz0ifX19fQ=="
|
|
55
49
|
}
|
|
56
50
|
],
|
|
57
51
|
"timestampVerificationData": {}
|
|
@@ -59,8 +53,8 @@
|
|
|
59
53
|
"messageSignature": {
|
|
60
54
|
"messageDigest": {
|
|
61
55
|
"algorithm": "SHA2_256",
|
|
62
|
-
"digest": "/
|
|
56
|
+
"digest": "ajAfUI47dyAvV5tpvT/VCDZn/DtVvP9jPawWI1RBI14="
|
|
63
57
|
},
|
|
64
|
-
"signature": "
|
|
58
|
+
"signature": "MEYCIQD90eEnv6RLJywOsQfx2snu76+ti0nLBKUTepb3swyCnAIhANGSpeXgVrJG1hipj+ykxaJs5vOg6+gkRpA6Esx25RYj"
|
|
65
59
|
}
|
|
66
60
|
}
|
|
@@ -120,10 +120,16 @@ export async function runCommunityCockpitStatus(options) {
|
|
|
120
120
|
const result = await inspectCommunityNativeCockpit(commandSelection(options));
|
|
121
121
|
if (options.json)
|
|
122
122
|
writeResult({ status: 'community-cockpit-status', ...result }, true);
|
|
123
|
-
else
|
|
123
|
+
else {
|
|
124
124
|
writeResult(`Cockpit ${result.runtimeState} (${result.health}) at ${result.origin}; API proxy ${result.serverOrigin}.` +
|
|
125
125
|
`${result.reason ? ` Reason: ${result.reason}` : ''}`);
|
|
126
|
-
|
|
126
|
+
if (result.terminalObservation) {
|
|
127
|
+
writeResult(`Terminal observation: ${result.terminalObservation.classification}; ` +
|
|
128
|
+
`last confirmed ${result.terminalObservation.lastSeenAt}; observed ${result.terminalObservation.observedAt}.` +
|
|
129
|
+
(result.recoverable ? ' Recovery: run "aops cockpit restart".' : ''));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (['crashed', 'unhealthy', 'identity-conflict', 'orphaned'].includes(result.runtimeState))
|
|
127
133
|
process.exitCode = 1;
|
|
128
134
|
}
|
|
129
135
|
export async function runCommunityCockpitHealth(options) {
|
|
@@ -143,10 +149,24 @@ export async function runCommunityCockpitHealth(options) {
|
|
|
143
149
|
}
|
|
144
150
|
export async function runCommunityCockpitLogs(options) {
|
|
145
151
|
const result = readCommunityCockpitLogs({ ...commandSelection(options), tail: Number(options.tail ?? 100) });
|
|
152
|
+
const lifecycle = await inspectCommunityNativeCockpit(commandSelection(options));
|
|
146
153
|
if (options.json)
|
|
147
|
-
writeResult({
|
|
148
|
-
|
|
154
|
+
writeResult({
|
|
155
|
+
status: 'community-cockpit-logs',
|
|
156
|
+
...result,
|
|
157
|
+
runtimeState: lifecycle.runtimeState,
|
|
158
|
+
reason: lifecycle.reason,
|
|
159
|
+
recoverable: lifecycle.recoverable,
|
|
160
|
+
terminalObservation: lifecycle.terminalObservation,
|
|
161
|
+
}, true);
|
|
162
|
+
else {
|
|
163
|
+
if (lifecycle.terminalObservation) {
|
|
164
|
+
writeResult(`Terminal observation: ${lifecycle.terminalObservation.classification}; ` +
|
|
165
|
+
`last confirmed ${lifecycle.terminalObservation.lastSeenAt}; observed ${lifecycle.terminalObservation.observedAt}.` +
|
|
166
|
+
(lifecycle.recoverable ? ' Recovery: run "aops cockpit restart".' : ''));
|
|
167
|
+
}
|
|
149
168
|
writeResult(result.content || 'No detached Cockpit logs are available.');
|
|
169
|
+
}
|
|
150
170
|
}
|
|
151
171
|
function common(command) {
|
|
152
172
|
return command
|
|
@@ -24,6 +24,8 @@ const HEALTH_SAMPLES = 4;
|
|
|
24
24
|
const HEALTH_INTERVAL_MS = 3_000;
|
|
25
25
|
const HEALTH_STARTUP_ATTEMPTS = 30;
|
|
26
26
|
const HEALTH_STARTUP_INTERVAL_MS = 2_000;
|
|
27
|
+
export const GLOBAL_UPDATE_EXECUTOR_MAX_ENTRIES = 50_000;
|
|
28
|
+
const GLOBAL_UPDATE_EXECUTOR_MAX_BYTES = 512 * 1024 * 1024;
|
|
27
29
|
class ChildCommandError extends Error {
|
|
28
30
|
status;
|
|
29
31
|
diagnostic;
|
|
@@ -131,7 +133,7 @@ export function compareStableVersions(left, right) {
|
|
|
131
133
|
function sha256(file) {
|
|
132
134
|
return createHash('sha256').update(readFileSync(file)).digest('hex');
|
|
133
135
|
}
|
|
134
|
-
function executorTreeInventory(executorRoot) {
|
|
136
|
+
export function executorTreeInventory(executorRoot) {
|
|
135
137
|
const root = plainDirectory(executorRoot, 'candidate executor root');
|
|
136
138
|
const records = [];
|
|
137
139
|
let totalBytes = 0;
|
|
@@ -152,12 +154,12 @@ function executorTreeInventory(executorRoot) {
|
|
|
152
154
|
target: target.replace(/\\/gu, '/'),
|
|
153
155
|
resolved: path.relative(root, resolved).replace(/\\/gu, '/'),
|
|
154
156
|
});
|
|
155
|
-
assert.equal(records.length <=
|
|
157
|
+
assert.equal(records.length <= GLOBAL_UPDATE_EXECUTOR_MAX_ENTRIES, true, 'candidate executor entry bound exceeded');
|
|
156
158
|
continue;
|
|
157
159
|
}
|
|
158
160
|
if (stat.isDirectory()) {
|
|
159
161
|
records.push({ path: normalizedRelative, type: 'directory', mode: stat.mode & 0o777 });
|
|
160
|
-
assert.equal(records.length <=
|
|
162
|
+
assert.equal(records.length <= GLOBAL_UPDATE_EXECUTOR_MAX_ENTRIES, true, 'candidate executor entry bound exceeded');
|
|
161
163
|
visit(absolute, relative);
|
|
162
164
|
continue;
|
|
163
165
|
}
|
|
@@ -172,8 +174,8 @@ function executorTreeInventory(executorRoot) {
|
|
|
172
174
|
bytes: stat.size,
|
|
173
175
|
sha256: sha256(canonical),
|
|
174
176
|
});
|
|
175
|
-
assert.equal(records.length <=
|
|
176
|
-
assert.equal(totalBytes <=
|
|
177
|
+
assert.equal(records.length <= GLOBAL_UPDATE_EXECUTOR_MAX_ENTRIES, true, 'candidate executor entry bound exceeded');
|
|
178
|
+
assert.equal(totalBytes <= GLOBAL_UPDATE_EXECUTOR_MAX_BYTES, true, 'candidate executor package byte bound exceeded');
|
|
177
179
|
}
|
|
178
180
|
};
|
|
179
181
|
visit(root, '');
|
|
@@ -543,9 +543,9 @@ function defaultNativeRoot() {
|
|
|
543
543
|
return moduleDirectory.endsWith(`${path.sep}dist`) ? bundled : compiledOrSource;
|
|
544
544
|
}
|
|
545
545
|
function injectedNativeManifestSha256() {
|
|
546
|
-
return typeof "
|
|
546
|
+
return typeof "1ffbe15b7e7471f9cb11b2b122b5e39117a6bc9e2765c4d84c219b8f30a3f2f1" === 'undefined'
|
|
547
547
|
? undefined
|
|
548
|
-
: "
|
|
548
|
+
: "1ffbe15b7e7471f9cb11b2b122b5e39117a6bc9e2765c4d84c219b8f30a3f2f1";
|
|
549
549
|
}
|
|
550
550
|
function sha256(bytes) {
|
|
551
551
|
return createHash('sha256').update(bytes).digest('hex');
|
|
@@ -187,6 +187,24 @@ function statusBase(state, port, serverPort = state.server.publicPort) {
|
|
|
187
187
|
port,
|
|
188
188
|
};
|
|
189
189
|
}
|
|
190
|
+
function terminalObservation(record, observedAt, disappeared = false) {
|
|
191
|
+
const classification = disappeared
|
|
192
|
+
? 'disappeared'
|
|
193
|
+
: record.signal
|
|
194
|
+
? 'signal'
|
|
195
|
+
: record.status === 'exited' && record.exitCode === 0
|
|
196
|
+
? 'clean-exit'
|
|
197
|
+
: record.exitCode !== undefined && record.exitCode !== null
|
|
198
|
+
? 'failed-exit'
|
|
199
|
+
: 'launch-failure';
|
|
200
|
+
return {
|
|
201
|
+
classification,
|
|
202
|
+
lastSeenAt: record.updatedAt,
|
|
203
|
+
observedAt,
|
|
204
|
+
exitCode: record.exitCode ?? null,
|
|
205
|
+
signal: record.signal ?? null,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
190
208
|
async function observeCockpit(params) {
|
|
191
209
|
const record = params.processRecord;
|
|
192
210
|
const identityPresent = existsSync(params.paths.identityPath);
|
|
@@ -203,6 +221,7 @@ async function observeCockpit(params) {
|
|
|
203
221
|
hostAlive: false,
|
|
204
222
|
health: 'not-checked',
|
|
205
223
|
reason: identityPresent ? 'community_cockpit_identity_without_process_record' : null,
|
|
224
|
+
terminalObservation: null,
|
|
206
225
|
};
|
|
207
226
|
}
|
|
208
227
|
const supervisorAlive = params.runtime.processExists(record.pid);
|
|
@@ -218,6 +237,7 @@ async function observeCockpit(params) {
|
|
|
218
237
|
supervisorAlive, hostAlive: record.hostPid ? params.runtime.processExists(record.hostPid) : false,
|
|
219
238
|
health: 'not-checked',
|
|
220
239
|
reason: error instanceof Error ? error.message : 'community_cockpit_identity_invalid',
|
|
240
|
+
terminalObservation: null,
|
|
221
241
|
};
|
|
222
242
|
}
|
|
223
243
|
}
|
|
@@ -231,6 +251,7 @@ async function observeCockpit(params) {
|
|
|
231
251
|
runtimeState: 'stopped', recoverable: true, process: record, identity,
|
|
232
252
|
supervisorAlive: false, hostAlive: false, health: 'not-checked',
|
|
233
253
|
reason: identity ? 'community_cockpit_terminal_identity_stale' : null,
|
|
254
|
+
terminalObservation: terminalObservation(record, record.updatedAt),
|
|
234
255
|
};
|
|
235
256
|
}
|
|
236
257
|
return {
|
|
@@ -238,6 +259,7 @@ async function observeCockpit(params) {
|
|
|
238
259
|
runtimeState: 'identity-conflict', recoverable: false, process: record, identity,
|
|
239
260
|
supervisorAlive, hostAlive, health: 'not-checked',
|
|
240
261
|
reason: 'community_cockpit_terminal_record_with_live_or_unowned_process',
|
|
262
|
+
terminalObservation: null,
|
|
241
263
|
};
|
|
242
264
|
}
|
|
243
265
|
if (!supervisorAlive && !hostAlive) {
|
|
@@ -246,6 +268,7 @@ async function observeCockpit(params) {
|
|
|
246
268
|
runtimeState: 'crashed', recoverable: true, process: record, identity,
|
|
247
269
|
supervisorAlive: false, hostAlive: false, health: 'not-checked',
|
|
248
270
|
reason: 'community_cockpit_process_disappeared',
|
|
271
|
+
terminalObservation: terminalObservation(record, params.now().toISOString(), true),
|
|
249
272
|
};
|
|
250
273
|
}
|
|
251
274
|
if (record.instanceName !== params.state.instanceName) {
|
|
@@ -254,6 +277,7 @@ async function observeCockpit(params) {
|
|
|
254
277
|
runtimeState: 'identity-conflict', recoverable: false, process: record, identity,
|
|
255
278
|
supervisorAlive, hostAlive, health: 'not-checked',
|
|
256
279
|
reason: 'community_cockpit_process_instance_mismatch',
|
|
280
|
+
terminalObservation: null,
|
|
257
281
|
};
|
|
258
282
|
}
|
|
259
283
|
if (!identity) {
|
|
@@ -262,6 +286,7 @@ async function observeCockpit(params) {
|
|
|
262
286
|
runtimeState: 'identity-conflict', recoverable: false, process: record, identity: null,
|
|
263
287
|
supervisorAlive, hostAlive, health: 'not-checked',
|
|
264
288
|
reason: 'community_cockpit_live_process_without_matching_identity',
|
|
289
|
+
terminalObservation: null,
|
|
265
290
|
};
|
|
266
291
|
}
|
|
267
292
|
if (!supervisorAlive && hostAlive) {
|
|
@@ -269,6 +294,7 @@ async function observeCockpit(params) {
|
|
|
269
294
|
...base,
|
|
270
295
|
runtimeState: 'orphaned', recoverable: false, process: record, identity,
|
|
271
296
|
supervisorAlive, hostAlive, health: 'not-checked', reason: 'community_cockpit_host_orphaned',
|
|
297
|
+
terminalObservation: null,
|
|
272
298
|
};
|
|
273
299
|
}
|
|
274
300
|
if (supervisorAlive && !hostAlive) {
|
|
@@ -276,6 +302,7 @@ async function observeCockpit(params) {
|
|
|
276
302
|
...base,
|
|
277
303
|
runtimeState: 'unhealthy', recoverable: false, process: record, identity,
|
|
278
304
|
supervisorAlive, hostAlive, health: 'unhealthy', reason: 'community_cockpit_host_process_missing',
|
|
305
|
+
terminalObservation: null,
|
|
279
306
|
};
|
|
280
307
|
}
|
|
281
308
|
const healthy = await params.runtime.health(`${base.origin}/_aops/cockpit-health`);
|
|
@@ -289,6 +316,7 @@ async function observeCockpit(params) {
|
|
|
289
316
|
hostAlive,
|
|
290
317
|
health: healthy ? 'healthy' : 'unhealthy',
|
|
291
318
|
reason: healthy ? null : 'community_cockpit_health_failed',
|
|
319
|
+
terminalObservation: null,
|
|
292
320
|
};
|
|
293
321
|
}
|
|
294
322
|
export async function inspectCommunityNativeCockpit(params = {}) {
|
|
@@ -302,6 +330,7 @@ export async function inspectCommunityNativeCockpit(params = {}) {
|
|
|
302
330
|
paths,
|
|
303
331
|
processRecord: readProcess(paths),
|
|
304
332
|
runtime: params.runtime ?? communityNativeRuntime,
|
|
333
|
+
now: params.now ?? (() => new Date()),
|
|
305
334
|
});
|
|
306
335
|
}
|
|
307
336
|
function cockpitEnvironment(params) {
|
|
@@ -409,8 +438,9 @@ async function startCommunityNativeCockpitUnlocked(params = {}) {
|
|
|
409
438
|
const state = install.state;
|
|
410
439
|
const paths = resolveCommunityCockpitPaths(params);
|
|
411
440
|
const runtime = params.runtime ?? communityNativeRuntime;
|
|
441
|
+
const now = params.now ?? (() => new Date());
|
|
412
442
|
const prior = readProcess(paths);
|
|
413
|
-
const observed = await observeCockpit({ state, paths, processRecord: prior, runtime });
|
|
443
|
+
const observed = await observeCockpit({ state, paths, processRecord: prior, runtime, now });
|
|
414
444
|
if (observed.runtimeState === 'running') {
|
|
415
445
|
return {
|
|
416
446
|
action: 'already-running', state, paths, process: observed.process,
|
|
@@ -426,7 +456,6 @@ async function startCommunityNativeCockpitUnlocked(params = {}) {
|
|
|
426
456
|
removeControlIfOwned(paths, prior.launchId);
|
|
427
457
|
mkdirSync(paths.logRoot, { recursive: true, mode: 0o700 });
|
|
428
458
|
assertPaths(paths);
|
|
429
|
-
const now = params.now ?? (() => new Date());
|
|
430
459
|
const launchId = (params.createId ?? randomUUID)();
|
|
431
460
|
const startedAt = now().toISOString();
|
|
432
461
|
const handle = await runtime.spawnChild({
|
|
@@ -507,6 +536,7 @@ async function stopCommunityNativeCockpitUnlocked(params = {}) {
|
|
|
507
536
|
paths,
|
|
508
537
|
processRecord: readProcess(paths),
|
|
509
538
|
runtime,
|
|
539
|
+
now,
|
|
510
540
|
});
|
|
511
541
|
if (observed.runtimeState === 'stopped' || observed.runtimeState === 'crashed') {
|
|
512
542
|
return { status: 'already-stopped', state: install.state, process: observed.process };
|
package/native/manifest.json
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"capabilityClass": "windows-ntfs-crash-recoverable-v1",
|
|
43
43
|
"qualification": {
|
|
44
44
|
"relativePath": "qualifications/win32-x64.json",
|
|
45
|
-
"sha256": "
|
|
45
|
+
"sha256": "3ba56b89ad82cba1d2005dc0dda0724cd08395cd40af00a3ed4709c5e63b8938"
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
]
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"filesystem": "NTFS",
|
|
8
8
|
"primitiveProfile": "windows-createfile-flush-movefileex-v1",
|
|
9
9
|
"capabilityClass": "windows-ntfs-crash-recoverable-v1",
|
|
10
|
-
"evidenceSha256": "
|
|
10
|
+
"evidenceSha256": "138d0d5bdd55ac851084a02e829e0b2f4d66ac03cee92ea28da4dcce2f802eab",
|
|
11
11
|
"crashInjectionPoints": [
|
|
12
12
|
"authority-history",
|
|
13
13
|
"authority-current",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|