@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.
@@ -117,6 +117,6 @@
117
117
  },
118
118
  "schemaVersion": 1,
119
119
  "standard": "aops-community-core-v1",
120
- "version": "0.3.18",
121
- "versionId": "community-core-0.3.18"
120
+ "version": "0.3.20",
121
+ "versionId": "community-core-0.3.20"
122
122
  }
@@ -10,8 +10,8 @@
10
10
  "name": "aops",
11
11
  "optional": false,
12
12
  "packageSha256": "387548b990d0cfef6a92805f39d18c2ae6b4bb6b1e42ea42e6c597ea7d207447",
13
- "version": "0.3.18",
14
- "versionId": "community-core-0.3.18"
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": "9625e4bb91ced6a1f3883eaa8f1c1b61003dab49",
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.18",
15
- "versionId": "community-core-0.3.18"
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": "779e586e3a308fdcb2807dcc3a7f0e169b70d8ebff1f23bc27d785f03fd124b1"
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": "d7fa6b1266894d6730ca688be6e696ae613c3ea1bc57ea2198158060192aa9e7"
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": "d7fa6b1266894d6730ca688be6e696ae613c3ea1bc57ea2198158060192aa9e7"
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": "08aca523632b9f6a46843a744fb08120b9efd34ef90694dd636c12275ba39204"
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.18",
169
+ "releaseVersion": "0.3.20",
170
170
  "schemaVersion": 1,
171
171
  "source": {
172
- "commit": "9625e4bb91ced6a1f3883eaa8f1c1b61003dab49",
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": "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"
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": "2468930510",
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": "1786740573",
21
+ "integratedTime": "1786794823",
22
22
  "inclusionPromise": {
23
- "signedEntryTimestamp": "MEYCIQDhORlKgbFD7fA5gLwoultbfLUWyUmn1ygQV8tjcW7BHAIhALIHSkMod4Y+tvnhcq3mWvrbmvA6spp7uAf30ynpc32a"
23
+ "signedEntryTimestamp": "MEYCIQDpzqPs/zOoCZZCJhCBGVv98Q9TMu5/fXyjOnUu1wl2dQIhAJQOj0MPPgtzwCeDgRB6ue0B5eT4kHVfyyPNrk0AAbP3"
24
24
  },
25
25
  "inclusionProof": {
26
- "logIndex": "2347026248",
27
- "rootHash": "RtUFOrRHoskbD5PYp854fA66uRpkhbwg4SZb418qtvg=",
28
- "treeSize": "2347026263",
26
+ "logIndex": "2353664392",
27
+ "rootHash": "oGO/M6mNoEj/mcY6CICpIiywqywA6re9sTJVN4T4reE=",
28
+ "treeSize": "2353664398",
29
29
  "hashes": [
30
- "SSA8HXZ1E1sc4aNG7TE5iZgLHBmE6D+z+oVvNIJqtUw=",
31
- "9A/j0m2YOudeWtOnw3MNwPo9ZZqPjBpYJzMPlmkyNBs=",
32
- "h1eISEt3cSqISIkMgwDZ2JRH6ER+w9An4OUJSwylnn0=",
33
- "d1XqpyxCg04G4HL2h+qukpDDv34QR8/jzImmTxMlRZI=",
34
- "RuKhiSwwkfjDlmEsSalCg+qJcEWVuagaxrlJvY4A5rs=",
35
- "iQeZiZPGfDs4CDmrAuDHJpo7p3elMeYaNtIhhb5OERA=",
36
- "dqn2aDir33pkavJtjAWCfWBLVTKbFzfE7AJ3Y9lSwGI=",
37
- "uVSnQwhY9bumTQrrHHW/XFcSOHDmb6Gr0G0J5lemSFc=",
38
- "7lgnNTxg6FwbJv2J184+C9emUBzg6fryouoYogqxb6M=",
39
- "phs23xXNQ9VojvixMwpgiHO7GZg0yOYjcK8K3ZQh960=",
40
- "QxfKGVNfBgdLBO8hfscwuCykK1JsG4ehf/aNkLm6GL8=",
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\n2347026263\nRtUFOrRHoskbD5PYp854fA66uRpkhbwg4SZb418qtvg=\n\n— rekor.sigstore.dev wNI9ajBFAiAjECxzEY+qYNfPo226KB7MDGYSGJGw5AliWON1FirLUgIhAPDcs7rzExG0WeuKtYSujkJvybVIYWPpBw+HYxYFkyn0\n"
45
+ "envelope": "rekor.sigstore.dev - 1193050959916656506\n2353664398\noGO/M6mNoEj/mcY6CICpIiywqywA6re9sTJVN4T4reE=\n\n— rekor.sigstore.dev wNI9ajBFAiAOQzOug7/5rZIFaHD7rvwxEZie0NnWTPUizgGg0SBwDgIhAPZfhaQIrt51VaiD3cMjYkg6YxbfzGENwW1rwkd3QzzB\n"
52
46
  }
53
47
  },
54
- "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJmZGQwM2U4YTNmZDEyNTU2MzI1MzI4OGY2OWQ1ODlkYjRiOWJjZDg4ZDhkOTllYTkwZmU4ODRhOGQ1MTI1N2QzIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJQTh3UzVqdWNQb0xWU0tTNlg0anNoWGVPN0k1VDZTSWtrT0RGc0craVowdEFpQjdTSklucDR0cU80V2kwTXh1Wkt3RXJIdGVlSXBjUG4rcTRBOGROMW1SVWc9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGpla05EUW5aeFowRjNTVUpCWjBsVlpHVk9ZVGRLVWtkVE4wZEZOMGxyTkU5UFdUSm1WRGxwZG1kSmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlFUlRCTmFrRXdUMVJOZWxkb1kwNU5hbGwzVDBSRk1FMXFRVEZQVkUxNlYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZ4WXpsdUx5OWtZVE5hV1hwMFdDdEdURFUxY25kdVpEWklTVXRTTURSU05tTkNkMmdLWkRadk9FVnFXVmh5YTNnM1ZHVXdZa2cyU0RGbFZWVkNkVmx3UW5SS1pVTkZTRkI1Tm1rME1sUk1XVWRSYzBsYVFuRlBRMEpvYTNkbloxbFdUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlY2TWpjeENtbGhhVkpUVkRoVGVGSTNUbVZRZDIxMlJHSTFkbU5OZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSQldVUldVakJTUVZGSUwwSkhiM2RoU1ZwdFlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKV2JGcFhNVFpqZVRsb1lqTkNlZ3BNV0VKeldWaFNiV0l6U25STWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTA1d1dqSTBkR05JVm1saVIyeHFURmRHYmxwWE5UQk1WMFo2Q21NeVZqQmplVFUxWWxkNFFXTnRWbTFqZVRsdldsZEdhMk41T1hSWlYyeDFUVVJyUjBOcGMwZEJVVkZDWnpjNGQwRlJSVVZMTW1nd1pFaENlazlwT0hZS1pFYzVjbHBYTkhWWlYwNHdZVmM1ZFdONU5XNWhXRkp2WkZkS01XTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNTSGRaUzB0M1dVSkNRVWRFZG5wQlFncEJaMUZTWkRJNWVXRXlXbk5pTTJSbVdrZHNlbU5IUmpCWk1tZDNUbWRaUzB0M1dVSkNRVWRFZG5wQlFrRjNVVzlQVkZsNVRsZFZNRmx0U1RWTlYwNXNDbHBFV21oTlYxbDZUMFJuZWxwWFJtaFBSMWw0V1hwR2FVNXFSWGROUkU1cldWZEpNRTlVUVhoQ1oyOXlRbWRGUlVGWlR5OU5RVVZGUWtOT1ZHRlhaSFVLU1VkV05GbFhUakJKU0VJeFdXMTRjRmw1UWtKVU1VSlVTVWRHYmxwWE5UQkpSMFo2WXpKV01HTjZRV2xDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0pTYkFwYVYxWjBaVzVOZGxsWE9YZGplVEYzWWtkR01GcHRPWGxpVkVGa1FtZHZja0puUlVWQldVOHZUVUZGUjBKQk9YbGFWMXA2VERKb2JGbFhVbnBNTWpGb0NtRlhOSGRQZDFsTFMzZFpRa0pCUjBSMmVrRkNRMEZSZEVSRGRHOWtTRkozWTNwdmRrd3pVblpoTWxaMVRHMUdhbVJIYkhaaWJrMTFXakpzTUdGSVZta0taRmhPYkdOdFRuWmlibEpzWW01UmRWa3lPWFJOU0ZsSFEybHpSMEZSVVVKbk56aDNRVkZyUldGQmVHMWhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESldiRnBYTVRaamVUbG9Zak5DZWt4WVFuTlpXRkp0WWpOS2RFeDVOVzVoV0ZKdlpGZEpkbVF5T1hsaE1scHpZak5rZWt3elRuQmFNalIwQ21OSVZtbGlSMnhxVEZkR2JscFhOVEJNVjBaNll6SldNR041TlRWaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkdkSFEybHpSMEZSVVVJS1p6YzRkMEZSYjBWTFozZHZUMVJaZVU1WFZUQlpiVWsxVFZkT2JGcEVXbWhOVjFsNlQwUm5lbHBYUm1oUFIxbDRXWHBHYVU1cVJYZE5SRTVyV1ZkSk1BcFBWRUZrUW1kdmNrSm5SVVZCV1U4dlRVRkZURUpCT0UxRVYyUndaRWRvTVZscE1XOWlNMDR3V2xkUmQwNTNXVXRMZDFsQ1FrRkhSSFo2UVVKRVFWRndDa1JEWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIzVDBGWlMwdDNXVUlLUWtGSFJIWjZRVUpFVVZGeFJFTm5OVTVxU1RGYVZGSnBXV3ByZUZreVZtdE9iVVY0V21wTk5FOUVUbXhaVjBVMFdtcEdhazFYU1RKTlZFRjNUVEpTYUFwWmFsRTFUVUk0UjBOcGMwZEJVVkZDWnpjNGQwRlJORVZGVVhkUVkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5RbTlIUTJselIwRlJVVUpuTnpoM0NrRlJPRVZFUVhkTFRWUk5lRTVxU1RGT1ZFRjVUbXBCY0VKbmIzSkNaMFZGUVZsUEwwMUJSVkZDUW5OTlIxZG9NR1JJUW5wUGFUaDJXakpzTUdGSVZta0tURzFPZG1KVE9XeGFWMVowWlc1TmQwZFJXVXRMZDFsQ1FrRkhSSFo2UVVKRlVWRk1SRUZyZUUxRWEzcE5WRUV6VG5wUmQyUm5XVXRMZDFsQ1FrRkhSQXAyZWtGQ1JXZFNiMFJIV205a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIyQ2t4dFpIQmtSMmd4V1drNU0ySXpTbkphYlhoMlpETk5kbU15Ykc1aWFURjNaRmRLYzJGWFRYUlpWMlJzWW01UmRGbFlUbnBhV0ZKNlRHNXNkR0pGUW5rS1dsZGFla3d5YUd4WlYxSjZUREl4YUdGWE5IZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjVVJEWnpWT2Fra3hXbFJTYVZscWEzaFpNbFpyVG0xRmVBcGFhazAwVDBST2JGbFhSVFJhYWtacVRWZEpNazFVUVhkTk1sSm9XV3BSTlUxRFJVZERhWE5IUVZGUlFtYzNPSGRCVWxGRlJYZDNVbVF5T1hsaE1scHpDbUl6WkdaYVIyeDZZMGRHTUZreVozZFhkMWxMUzNkWlFrSkJSMFIyZWtGQ1JsRlNUa1JGZEc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFlLV2xkV2JHSlljSHBNTWtaMlkwaE5kR05IZUdoa1IxcDJZMjB3ZGxsWFRqQmhWemwxWTNrNWVXUlhOWHBNZWsxNFQwUk5OVTVxUVROUFJGazBUREpHTUFwa1IxWjBZMGhTZWt4NlJYZEdkMWxMUzNkWlFrSkJSMFIyZWtGQ1JtZFJTa1JCWkhkamJXd3lXVmhTYkUxR1NVZERhWE5IUVZGUlFtYzNPSGRCVW1kRkNsSkJlRU5qYlZaM1lucHdiRnBYVm5SbGJrNUJUVlJCTlUxNlJYZE9lbU13VERKR2RtTklUWFJqUjNob1pFZGFkbU50TVVGTlZFMTRUbXBKTVU1VVFYa0tUbXB3ZVZwWFdUWmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFKUjB0Q1oyOXlRbWRGUlVGa1dqVkJaMUZEUWtoM1JXVm5RalJCU0ZsQk0xUXdkd3BoYzJKSVJWUktha2RTTkdOdFYyTXpRWEZLUzFoeWFtVlFTek12YURSd2VXZERPSEEzYnpSQlFVRkhaMEZuYlVWWVowRkJRa0ZOUVZKNlFrWkJhVVZCQ21sTU5IbHRXalV4V1RoM1dtVnFjbk5GT0dFd0t6QkNSa3RaTjI1MWVFWkZNRTFCZUhGeFRWcGxabXREU1VOdFduaHJRbTFRYWs5UGVWTmthMmxuVWtJS1kyRlBaMjl0WlVsamFuVjJVMlZtUm5seGRtRjNhMUE1VFVGdlIwTkRjVWRUVFRRNVFrRk5SRUV5WTBGTlIxRkRUVUpKVG5BemNFTnBRVzVXTjFWWUx3cFdSR0kwYUU1VVlUQlNSVkpqY3paSlZubDFlR1pFY0cxbVEySkdhMmhVVDJwMll6a3pja280T0hoSk4wNW5NMHhXZDBsM1EwMU1iVlZWTW1veFdtbENDbGsyUjBwRmVFWTBZemRyZFZOTE4wSkRjMFpOWVZWcWJHSXZla0poYnpSb1RrUlpRVU5YUjFwUlYwODBibEJ6V25vMmVtMEtMUzB0TFMxRlRrUWdRMFZTVkVsR1NVTkJWRVV0TFMwdExRbz0ifX19fQ=="
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": "/dA+ij/RJVYyUyiPadWJ20ubzYjY2Z6pD+iEqNUSV9M="
56
+ "digest": "ajAfUI47dyAvV5tpvT/VCDZn/DtVvP9jPawWI1RBI14="
63
57
  },
64
- "signature": "MEQCIA8wS5jucPoLVSKS6X4jshXeO7I5T6SIkkODFsG+iZ0tAiB7SJInp4tqO4Wi0MxuZKwErHteeIpcPn+q4A8dN1mRUg=="
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
- if (['unhealthy', 'identity-conflict', 'orphaned'].includes(result.runtimeState))
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({ status: 'community-cockpit-logs', ...result }, true);
148
- else
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 <= 20_000, true, 'candidate executor entry bound exceeded');
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 <= 20_000, true, 'candidate executor entry bound exceeded');
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 <= 20_000, true, 'candidate executor entry bound exceeded');
176
- assert.equal(totalBytes <= 512 * 1024 * 1024, true, 'candidate executor package byte bound exceeded');
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 "859b976094fe8cde402fd4ff8b48716df0360ce7e30e698f43b6515216f4c95f" === 'undefined'
546
+ return typeof "1ffbe15b7e7471f9cb11b2b122b5e39117a6bc9e2765c4d84c219b8f30a3f2f1" === 'undefined'
547
547
  ? undefined
548
- : "859b976094fe8cde402fd4ff8b48716df0360ce7e30e698f43b6515216f4c95f";
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 };
@@ -42,7 +42,7 @@
42
42
  "capabilityClass": "windows-ntfs-crash-recoverable-v1",
43
43
  "qualification": {
44
44
  "relativePath": "qualifications/win32-x64.json",
45
- "sha256": "57572099d109ed36bd889f2b9f68a1b3bb4b02d31dc776ac9bd1e40c05c83693"
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": "8f3be9ab0d760a626f18989308788bd3f590169212bf5ba56cfc255c1c845f89",
10
+ "evidenceSha256": "138d0d5bdd55ac851084a02e829e0b2f4d66ac03cee92ea28da4dcce2f802eab",
11
11
  "crashInjectionPoints": [
12
12
  "authority-history",
13
13
  "authority-current",
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aopslabs/aops",
3
- "version": "0.3.18",
3
+ "version": "0.3.20",
4
4
  "type": "module",
5
5
  "description": "AOPS CLI and terminal setup application.",
6
6
  "aopsDockerServerVersion": "0.2.15",