@tetsuo-ai/agenc 0.11.2 → 0.13.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.
|
@@ -1,41 +1,53 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifestVersion": 2,
|
|
3
|
-
"runtimeVersion": "0.
|
|
3
|
+
"runtimeVersion": "0.13.0",
|
|
4
4
|
"releaseRepository": "tetsuo-ai/agenc-releases",
|
|
5
|
-
"releaseTag": "agenc-v0.
|
|
5
|
+
"releaseTag": "agenc-v0.13.0",
|
|
6
6
|
"build": {
|
|
7
|
-
"sourceCommit": "
|
|
8
|
-
"sourceRef": "refs/tags/agenc-v0.
|
|
9
|
-
"sourceDateEpoch":
|
|
10
|
-
"lockfileSha256": "
|
|
7
|
+
"sourceCommit": "929d3ccc9f3d3524704503e28a43fb567147dbe5",
|
|
8
|
+
"sourceRef": "refs/tags/agenc-v0.13.0",
|
|
9
|
+
"sourceDateEpoch": 1785489827,
|
|
10
|
+
"lockfileSha256": "bb806a1a762aed6d1a4beaed8e1a06eb073e3f32bf6215429b6c8016d99b7432",
|
|
11
11
|
"nodeVersion": "v26.5.0",
|
|
12
12
|
"nodeMajor": 26,
|
|
13
13
|
"nodeModuleAbi": "147",
|
|
14
14
|
"nodeApiVersion": "10",
|
|
15
15
|
"npmVersion": "11.17.0",
|
|
16
|
-
"artifactProfile": "release"
|
|
16
|
+
"artifactProfile": "release",
|
|
17
|
+
"releaseCandidate": {
|
|
18
|
+
"workflow": "release-runtime.yml",
|
|
19
|
+
"runId": 30620942433,
|
|
20
|
+
"runAttempt": 1,
|
|
21
|
+
"runUrl": "https://github.com/tetsuo-ai/agenc-core/actions/runs/30620942433",
|
|
22
|
+
"phase": "candidate",
|
|
23
|
+
"sourceRef": "refs/heads/main",
|
|
24
|
+
"evidenceSha256": "70be4e8aaac5a141f96f91d978c5c48a1011688caaeb5edd652ebdbb0638cb48"
|
|
25
|
+
}
|
|
17
26
|
},
|
|
18
27
|
"artifacts": [
|
|
19
28
|
{
|
|
20
29
|
"platform": "darwin",
|
|
21
30
|
"arch": "arm64",
|
|
22
|
-
"runtimeVersion": "0.
|
|
31
|
+
"runtimeVersion": "0.13.0",
|
|
23
32
|
"nodeMajor": 26,
|
|
24
33
|
"nodeModuleAbi": "147",
|
|
25
34
|
"nodeApiVersion": "10",
|
|
26
|
-
"url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.
|
|
27
|
-
"sha256": "
|
|
28
|
-
"bytes":
|
|
29
|
-
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.
|
|
30
|
-
"attestationSha256": "
|
|
31
|
-
"attestationBytes":
|
|
32
|
-
"
|
|
35
|
+
"url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-darwin-arm64-node26-abi147.tar.gz",
|
|
36
|
+
"sha256": "bc770395e0a39cc7a2a9c0b6d14fb9bc2f052333c49aab247583716293259ffe",
|
|
37
|
+
"bytes": 113442270,
|
|
38
|
+
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-darwin-arm64-node26-abi147.tar.gz.sigstore.json",
|
|
39
|
+
"attestationSha256": "04861f183af336e7be27cf8028ff70c3aea5334517a030cc7322a34fe8a9891f",
|
|
40
|
+
"attestationBytes": 11260,
|
|
41
|
+
"buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-darwin-arm64-node26-abi147.tar.gz.build.sigstore.json",
|
|
42
|
+
"buildProvenanceSha256": "04f97d158cd818d306bca1daae1d4e57c6fa5ae8e95d007e2c8775bf7113ea3c",
|
|
43
|
+
"buildProvenanceBytes": 11060,
|
|
44
|
+
"metadataSha256": "171db3c80a8aec9b50697c4f03780c57fe9c7cce6f41e2f227733acf7c539b7c",
|
|
33
45
|
"nativeToolchain": {
|
|
34
46
|
"schemaVersion": 1,
|
|
35
|
-
"builder": "github-hosted:macos-15:macos15:
|
|
47
|
+
"builder": "github-hosted:macos-15:macos15:20260727.0256.1:ARM64",
|
|
36
48
|
"runnerLabel": "macos-15",
|
|
37
49
|
"runnerImage": "macos15",
|
|
38
|
-
"runnerImageVersion": "
|
|
50
|
+
"runnerImageVersion": "20260727.0256.1",
|
|
39
51
|
"runnerArch": "ARM64",
|
|
40
52
|
"cc": "Apple clang version 17.0.0 (clang-1700.0.13.5)",
|
|
41
53
|
"cxx": "Apple clang version 17.0.0 (clang-1700.0.13.5)",
|
|
@@ -59,13 +71,13 @@
|
|
|
59
71
|
"xcode": "Xcode 16.4\nBuild version 16F6",
|
|
60
72
|
"sdk": "15.5"
|
|
61
73
|
},
|
|
62
|
-
"dependencyTreeSha256": "
|
|
63
|
-
"dependencyPackages":
|
|
74
|
+
"dependencyTreeSha256": "afcd562b369a62b9a4a6d0877a93559c5f69f5024c1959c3631f60005b3402e5",
|
|
75
|
+
"dependencyPackages": 467,
|
|
64
76
|
"archiveFormat": "tar+gzip; portable; utf8-byte-order; normalized-mtime",
|
|
65
77
|
"archiveValidation": {
|
|
66
78
|
"policy": "agenc-runtime-archive-v1",
|
|
67
|
-
"entries":
|
|
68
|
-
"uncompressedBytes":
|
|
79
|
+
"entries": 29260,
|
|
80
|
+
"uncompressedBytes": 461165056
|
|
69
81
|
},
|
|
70
82
|
"minimumMacosVersion": "13.5",
|
|
71
83
|
"bins": {
|
|
@@ -76,17 +88,20 @@
|
|
|
76
88
|
{
|
|
77
89
|
"platform": "darwin",
|
|
78
90
|
"arch": "x64",
|
|
79
|
-
"runtimeVersion": "0.
|
|
91
|
+
"runtimeVersion": "0.13.0",
|
|
80
92
|
"nodeMajor": 26,
|
|
81
93
|
"nodeModuleAbi": "147",
|
|
82
94
|
"nodeApiVersion": "10",
|
|
83
|
-
"url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.
|
|
84
|
-
"sha256": "
|
|
85
|
-
"bytes":
|
|
86
|
-
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.
|
|
87
|
-
"attestationSha256": "
|
|
88
|
-
"attestationBytes":
|
|
89
|
-
"
|
|
95
|
+
"url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-darwin-x64-node26-abi147.tar.gz",
|
|
96
|
+
"sha256": "e51de8150181b803ccfabcd071fed0ee52a3710fb877db3c5f440bca717d23f2",
|
|
97
|
+
"bytes": 115171362,
|
|
98
|
+
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-darwin-x64-node26-abi147.tar.gz.sigstore.json",
|
|
99
|
+
"attestationSha256": "fb33580c42d3fdfefaa0a23e8a9364a16f3bc5265062d44f4808f8b9c8a50461",
|
|
100
|
+
"attestationBytes": 11444,
|
|
101
|
+
"buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-darwin-x64-node26-abi147.tar.gz.build.sigstore.json",
|
|
102
|
+
"buildProvenanceSha256": "d52293802b97c4e665ad843169b52900c2c4493754dd26d9157860d17faab028",
|
|
103
|
+
"buildProvenanceBytes": 11103,
|
|
104
|
+
"metadataSha256": "1df2a703caa7c6e8d667dca9b05169c003f11bb0de67e41813847bac55e2be31",
|
|
90
105
|
"nativeToolchain": {
|
|
91
106
|
"schemaVersion": 1,
|
|
92
107
|
"builder": "github-hosted:macos-15-intel:macos15:20260720.0353.1:X64",
|
|
@@ -116,13 +131,13 @@
|
|
|
116
131
|
"xcode": "Xcode 16.4\nBuild version 16F6",
|
|
117
132
|
"sdk": "15.5"
|
|
118
133
|
},
|
|
119
|
-
"dependencyTreeSha256": "
|
|
120
|
-
"dependencyPackages":
|
|
134
|
+
"dependencyTreeSha256": "e9ebc879904e9689d0ac629c45a64ad520e79392783f1ce67b33fb6d3266ed15",
|
|
135
|
+
"dependencyPackages": 467,
|
|
121
136
|
"archiveFormat": "tar+gzip; portable; utf8-byte-order; normalized-mtime",
|
|
122
137
|
"archiveValidation": {
|
|
123
138
|
"policy": "agenc-runtime-archive-v1",
|
|
124
|
-
"entries":
|
|
125
|
-
"uncompressedBytes":
|
|
139
|
+
"entries": 29260,
|
|
140
|
+
"uncompressedBytes": 465160192
|
|
126
141
|
},
|
|
127
142
|
"minimumMacosVersion": "13.5",
|
|
128
143
|
"bins": {
|
|
@@ -133,20 +148,23 @@
|
|
|
133
148
|
{
|
|
134
149
|
"platform": "linux",
|
|
135
150
|
"arch": "arm64",
|
|
136
|
-
"runtimeVersion": "0.
|
|
151
|
+
"runtimeVersion": "0.13.0",
|
|
137
152
|
"nodeMajor": 26,
|
|
138
153
|
"nodeModuleAbi": "147",
|
|
139
154
|
"nodeApiVersion": "10",
|
|
140
|
-
"url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.
|
|
141
|
-
"sha256": "
|
|
142
|
-
"bytes":
|
|
143
|
-
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.
|
|
144
|
-
"attestationSha256": "
|
|
145
|
-
"attestationBytes":
|
|
146
|
-
"
|
|
155
|
+
"url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-linux-arm64-node26-abi147.tar.gz",
|
|
156
|
+
"sha256": "f99ad01fe7e8c28d48536972886d6e74b7b8c81654e53ceb99057c2b13f43332",
|
|
157
|
+
"bytes": 127019738,
|
|
158
|
+
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-linux-arm64-node26-abi147.tar.gz.sigstore.json",
|
|
159
|
+
"attestationSha256": "57b42f490a9e22c4bc640a6bea72e8d260f100e225b650a81b9fff0023548837",
|
|
160
|
+
"attestationBytes": 11405,
|
|
161
|
+
"buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-linux-arm64-node26-abi147.tar.gz.build.sigstore.json",
|
|
162
|
+
"buildProvenanceSha256": "b12f43009745aea93e106a11646cb36217b5cc4b06a48fd56f891343e3c1961f",
|
|
163
|
+
"buildProvenanceBytes": 11154,
|
|
164
|
+
"metadataSha256": "7c3b5124baea1964a71c506d64220cd38466a063762ec0ee95d6e8626bb07902",
|
|
147
165
|
"nativeToolchain": {
|
|
148
166
|
"schemaVersion": 1,
|
|
149
|
-
"builder": "rockylinux@sha256:9794037624aaa6212aeada1d28861ef5e0a935adaf93e4ef79837119f2a2d04c+rpm-content-sha256:
|
|
167
|
+
"builder": "rockylinux@sha256:9794037624aaa6212aeada1d28861ef5e0a935adaf93e4ef79837119f2a2d04c+rpm-content-sha256:530821a9904c1d9162750d564d89e7556575df1cbec0a54bd5029076dc58731d",
|
|
150
168
|
"runnerArch": "ARM64",
|
|
151
169
|
"cc": "gcc (GCC) 12.2.1 20221121 (Red Hat 12.2.1-7)",
|
|
152
170
|
"cxx": "g++ (GCC) 12.2.1 20221121 (Red Hat 12.2.1-7)",
|
|
@@ -167,7 +185,7 @@
|
|
|
167
185
|
"npmDistributionSha256": "b290bbb35b9e72c3ef84edbe041f28c4479c4d9ee79f555817b8caafe7ce4bba",
|
|
168
186
|
"rpmContentInventorySchemaVersion": 1,
|
|
169
187
|
"rpmContentInventoryFormat": "name|epoch|version|release|arch|sha256header|payloaddigest|payloaddigestalgo|rsaheader-pgpsig",
|
|
170
|
-
"rpmContentInventorySha256": "
|
|
188
|
+
"rpmContentInventorySha256": "530821a9904c1d9162750d564d89e7556575df1cbec0a54bd5029076dc58731d",
|
|
171
189
|
"rpmSigningKeyIds": [
|
|
172
190
|
"15af5dac6d745a60"
|
|
173
191
|
],
|
|
@@ -183,13 +201,13 @@
|
|
|
183
201
|
"tar-1.30-11.el8_10"
|
|
184
202
|
]
|
|
185
203
|
},
|
|
186
|
-
"dependencyTreeSha256": "
|
|
187
|
-
"dependencyPackages":
|
|
204
|
+
"dependencyTreeSha256": "522b610453270c1e5e521d504f161f78c4f69636d95e98d3767d131c32a0661b",
|
|
205
|
+
"dependencyPackages": 469,
|
|
188
206
|
"archiveFormat": "tar+gzip; portable; utf8-byte-order; normalized-mtime",
|
|
189
207
|
"archiveValidation": {
|
|
190
208
|
"policy": "agenc-runtime-archive-v1",
|
|
191
|
-
"entries":
|
|
192
|
-
"uncompressedBytes":
|
|
209
|
+
"entries": 29280,
|
|
210
|
+
"uncompressedBytes": 483508224
|
|
193
211
|
},
|
|
194
212
|
"libcFamily": "glibc",
|
|
195
213
|
"minimumGlibcVersion": "2.28",
|
|
@@ -204,20 +222,23 @@
|
|
|
204
222
|
{
|
|
205
223
|
"platform": "linux",
|
|
206
224
|
"arch": "x64",
|
|
207
|
-
"runtimeVersion": "0.
|
|
225
|
+
"runtimeVersion": "0.13.0",
|
|
208
226
|
"nodeMajor": 26,
|
|
209
227
|
"nodeModuleAbi": "147",
|
|
210
228
|
"nodeApiVersion": "10",
|
|
211
|
-
"url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.
|
|
212
|
-
"sha256": "
|
|
213
|
-
"bytes":
|
|
214
|
-
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.
|
|
215
|
-
"attestationSha256": "
|
|
216
|
-
"attestationBytes":
|
|
217
|
-
"
|
|
229
|
+
"url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-linux-x64-node26-abi147.tar.gz",
|
|
230
|
+
"sha256": "8f555ed4063ee1a9473f220b45c192be9d56669f627619f63ad6f8db53adf20f",
|
|
231
|
+
"bytes": 126636274,
|
|
232
|
+
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-linux-x64-node26-abi147.tar.gz.sigstore.json",
|
|
233
|
+
"attestationSha256": "44d494d025bf4d4dc944fec1094c97f9133a1b4935c0fbe678283f37f6d21a24",
|
|
234
|
+
"attestationBytes": 11448,
|
|
235
|
+
"buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-linux-x64-node26-abi147.tar.gz.build.sigstore.json",
|
|
236
|
+
"buildProvenanceSha256": "694ad33bc293ebe076741884d9369f465403614d3d948f4729cf2bc942561a3a",
|
|
237
|
+
"buildProvenanceBytes": 10911,
|
|
238
|
+
"metadataSha256": "11bfeba691b492d9d790c421f91d23d5e89fdba8a70def9a50ab079130b48fa6",
|
|
218
239
|
"nativeToolchain": {
|
|
219
240
|
"schemaVersion": 1,
|
|
220
|
-
"builder": "rockylinux@sha256:9794037624aaa6212aeada1d28861ef5e0a935adaf93e4ef79837119f2a2d04c+rpm-content-sha256:
|
|
241
|
+
"builder": "rockylinux@sha256:9794037624aaa6212aeada1d28861ef5e0a935adaf93e4ef79837119f2a2d04c+rpm-content-sha256:a20edbdbf94e00d0e93ce30f04167861f67b3132f388f06d2c5bb44894b6e613",
|
|
221
242
|
"runnerArch": "X64",
|
|
222
243
|
"cc": "gcc (GCC) 12.2.1 20221121 (Red Hat 12.2.1-7)",
|
|
223
244
|
"cxx": "g++ (GCC) 12.2.1 20221121 (Red Hat 12.2.1-7)",
|
|
@@ -238,7 +259,7 @@
|
|
|
238
259
|
"npmDistributionSha256": "b290bbb35b9e72c3ef84edbe041f28c4479c4d9ee79f555817b8caafe7ce4bba",
|
|
239
260
|
"rpmContentInventorySchemaVersion": 1,
|
|
240
261
|
"rpmContentInventoryFormat": "name|epoch|version|release|arch|sha256header|payloaddigest|payloaddigestalgo|rsaheader-pgpsig",
|
|
241
|
-
"rpmContentInventorySha256": "
|
|
262
|
+
"rpmContentInventorySha256": "a20edbdbf94e00d0e93ce30f04167861f67b3132f388f06d2c5bb44894b6e613",
|
|
242
263
|
"rpmSigningKeyIds": [
|
|
243
264
|
"15af5dac6d745a60"
|
|
244
265
|
],
|
|
@@ -254,13 +275,13 @@
|
|
|
254
275
|
"tar-1.30-11.el8_10"
|
|
255
276
|
]
|
|
256
277
|
},
|
|
257
|
-
"dependencyTreeSha256": "
|
|
258
|
-
"dependencyPackages":
|
|
278
|
+
"dependencyTreeSha256": "0322cf9654f6a5abc7fdd3c6a2ab2d88adb751a42aef1eb7b699ccf58046abcc",
|
|
279
|
+
"dependencyPackages": 469,
|
|
259
280
|
"archiveFormat": "tar+gzip; portable; utf8-byte-order; normalized-mtime",
|
|
260
281
|
"archiveValidation": {
|
|
261
282
|
"policy": "agenc-runtime-archive-v1",
|
|
262
|
-
"entries":
|
|
263
|
-
"uncompressedBytes":
|
|
283
|
+
"entries": 29280,
|
|
284
|
+
"uncompressedBytes": 484626432
|
|
264
285
|
},
|
|
265
286
|
"libcFamily": "glibc",
|
|
266
287
|
"minimumGlibcVersion": "2.28",
|
|
@@ -275,21 +296,24 @@
|
|
|
275
296
|
{
|
|
276
297
|
"platform": "win",
|
|
277
298
|
"arch": "x64",
|
|
278
|
-
"runtimeVersion": "0.
|
|
299
|
+
"runtimeVersion": "0.13.0",
|
|
279
300
|
"nodeMajor": 26,
|
|
280
301
|
"nodeModuleAbi": "147",
|
|
281
302
|
"nodeApiVersion": "10",
|
|
282
|
-
"url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.
|
|
283
|
-
"sha256": "
|
|
284
|
-
"bytes":
|
|
285
|
-
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.
|
|
286
|
-
"attestationSha256": "
|
|
287
|
-
"attestationBytes":
|
|
288
|
-
"
|
|
303
|
+
"url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-win-x64-node26-abi147.tar.gz",
|
|
304
|
+
"sha256": "d37101e2ca68f54007633335e8a0b84d06000e0ce8ce9144923ce4ad8089b079",
|
|
305
|
+
"bytes": 109553706,
|
|
306
|
+
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-win-x64-node26-abi147.tar.gz.sigstore.json",
|
|
307
|
+
"attestationSha256": "8e854c214c3846a33684dacae3c54124701099f4873542110622ffd6a3c531e6",
|
|
308
|
+
"attestationBytes": 11444,
|
|
309
|
+
"buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.13.0/agenc-runtime-0.13.0-win-x64-node26-abi147.tar.gz.build.sigstore.json",
|
|
310
|
+
"buildProvenanceSha256": "952ef68385beea6b89fce1dcbc13e6af8f4e6374f8900a4e9263d1ced7add211",
|
|
311
|
+
"buildProvenanceBytes": 11096,
|
|
312
|
+
"metadataSha256": "4bc8b153b7d75df0939a04bb47774e80e570dd738ff23bbc3e43d1c8d831947a",
|
|
289
313
|
"nativeToolchain": {
|
|
290
314
|
"schemaVersion": 1,
|
|
291
|
-
"builder": "github-hosted:windows-2025:win25-vs2026:20260714.173.1:X64",
|
|
292
|
-
"runnerLabel": "windows-2025",
|
|
315
|
+
"builder": "github-hosted:windows-2025-vs2026:win25-vs2026:20260714.173.1:X64",
|
|
316
|
+
"runnerLabel": "windows-2025-vs2026",
|
|
293
317
|
"runnerImage": "win25-vs2026",
|
|
294
318
|
"runnerImageVersion": "20260714.173.1",
|
|
295
319
|
"runnerArch": "X64",
|
|
@@ -327,13 +351,13 @@
|
|
|
327
351
|
"msvcCompilerSha256": "dc8426b8760d92cf757df3d10b9f0244a95b454ff43194a58161568a0ec70d53",
|
|
328
352
|
"msvcLinkerSha256": "e8c524347b8bc87fba790d254c8a3b902bf1a4b63807093b816d992940af3791"
|
|
329
353
|
},
|
|
330
|
-
"dependencyTreeSha256": "
|
|
331
|
-
"dependencyPackages":
|
|
354
|
+
"dependencyTreeSha256": "c1a68082de5a43c74d9f6fdfb57e700fc405b32a54d409f395178e7da634ffbc",
|
|
355
|
+
"dependencyPackages": 466,
|
|
332
356
|
"archiveFormat": "tar+gzip; portable; utf8-byte-order; normalized-mtime",
|
|
333
357
|
"archiveValidation": {
|
|
334
358
|
"policy": "agenc-runtime-archive-v1",
|
|
335
|
-
"entries":
|
|
336
|
-
"uncompressedBytes":
|
|
359
|
+
"entries": 29299,
|
|
360
|
+
"uncompressedBytes": 425263104
|
|
337
361
|
},
|
|
338
362
|
"bins": {
|
|
339
363
|
"agenc": "node_modules/@tetsuo-ai/runtime/bin/agenc",
|
|
@@ -136,6 +136,62 @@ export function renderGeneratedWrapperContent({
|
|
|
136
136
|
].join("\n");
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
+
// Releases 0.6.2 through 0.10.0 emitted this immutable metadata-v1 shape
|
|
140
|
+
// before standalone installs carried a private Node runtime. Keep the renderer
|
|
141
|
+
// private: it exists only so ownership can be proven by exact full-file
|
|
142
|
+
// reconstruction, never by trusting the historical marker or metadata alone.
|
|
143
|
+
function renderPrePrivateNodeWrapperContent({
|
|
144
|
+
kind,
|
|
145
|
+
nodeBin,
|
|
146
|
+
runtimeBin,
|
|
147
|
+
agencHome,
|
|
148
|
+
}) {
|
|
149
|
+
if (kind !== "posix" && kind !== "cmd") {
|
|
150
|
+
throw new TypeError(`unsupported wrapper kind: ${String(kind)}`);
|
|
151
|
+
}
|
|
152
|
+
const values = { nodeBin, runtimeBin, agencHome };
|
|
153
|
+
validateValues(kind, values);
|
|
154
|
+
const metadata = Buffer.from(JSON.stringify({
|
|
155
|
+
nodeBin,
|
|
156
|
+
runtimeBin,
|
|
157
|
+
agencHome,
|
|
158
|
+
}), "utf8").toString("base64url");
|
|
159
|
+
if (kind === "cmd") {
|
|
160
|
+
const batch = (value) => value.replaceAll("%", "%%");
|
|
161
|
+
return [
|
|
162
|
+
"@echo off",
|
|
163
|
+
"setlocal DisableDelayedExpansion",
|
|
164
|
+
`rem ${CMD_WRAPPER_SIGNATURE} - rewritten on every install/upgrade.`,
|
|
165
|
+
`rem ${WRAPPER_METADATA_PREFIX} ${metadata}`,
|
|
166
|
+
`if not defined AGENC_HOME set "AGENC_HOME=${batch(agencHome)}"`,
|
|
167
|
+
`"${batch(nodeBin)}" "${batch(runtimeBin)}" %*`,
|
|
168
|
+
"",
|
|
169
|
+
].join("\r\n");
|
|
170
|
+
}
|
|
171
|
+
const quote = (value) => `'${value.replaceAll("'", `'"'"'`)}'`;
|
|
172
|
+
return [
|
|
173
|
+
"#!/bin/sh",
|
|
174
|
+
`# ${POSIX_WRAPPER_SIGNATURE} — rewritten on every install/upgrade.`,
|
|
175
|
+
`# ${WRAPPER_METADATA_PREFIX} ${metadata}`,
|
|
176
|
+
'if [ -z "${AGENC_HOME:-}" ]; then',
|
|
177
|
+
` export AGENC_HOME=${quote(agencHome)}`,
|
|
178
|
+
"fi",
|
|
179
|
+
"# Capture one V8 near-heap-limit snapshot unless the operator already configured it.",
|
|
180
|
+
'case " ${NODE_OPTIONS:-} " in',
|
|
181
|
+
" *heapsnapshot-near-heap-limit*)",
|
|
182
|
+
` exec ${quote(nodeBin)} ${quote(runtimeBin)} "$@"`,
|
|
183
|
+
" ;;",
|
|
184
|
+
" *)",
|
|
185
|
+
' mkdir -p "${AGENC_HOME}/oom-snapshots" 2>/dev/null || :',
|
|
186
|
+
` exec ${quote(nodeBin)} --heapsnapshot-near-heap-limit=1 ` +
|
|
187
|
+
'--diagnostic-dir="${AGENC_HOME}/oom-snapshots" ' +
|
|
188
|
+
`${quote(runtimeBin)} "$@"`,
|
|
189
|
+
" ;;",
|
|
190
|
+
"esac",
|
|
191
|
+
"",
|
|
192
|
+
].join("\n");
|
|
193
|
+
}
|
|
194
|
+
|
|
139
195
|
function decodeCanonicalMetadata(encoded) {
|
|
140
196
|
try {
|
|
141
197
|
const bytes = Buffer.from(encoded, "base64url");
|
|
@@ -178,7 +234,12 @@ function parseModern(path, content) {
|
|
|
178
234
|
if (values === undefined) return undefined;
|
|
179
235
|
try {
|
|
180
236
|
const wrapper = { kind, path, ...values };
|
|
181
|
-
|
|
237
|
+
if (renderGeneratedWrapperContent(wrapper) === content) return wrapper;
|
|
238
|
+
if (
|
|
239
|
+
values.nodeLibraryPath === undefined &&
|
|
240
|
+
renderPrePrivateNodeWrapperContent(wrapper) === content
|
|
241
|
+
) return wrapper;
|
|
242
|
+
return undefined;
|
|
182
243
|
} catch {
|
|
183
244
|
return undefined;
|
|
184
245
|
}
|
|
@@ -13,6 +13,9 @@ export interface RuntimeReleaseArtifact {
|
|
|
13
13
|
readonly attestationUrl?: string;
|
|
14
14
|
readonly attestationSha256?: string;
|
|
15
15
|
readonly attestationBytes?: number;
|
|
16
|
+
readonly buildProvenanceUrl?: string;
|
|
17
|
+
readonly buildProvenanceSha256?: string;
|
|
18
|
+
readonly buildProvenanceBytes?: number;
|
|
16
19
|
readonly bins?: {
|
|
17
20
|
readonly agenc?: string;
|
|
18
21
|
readonly node?: string;
|
|
@@ -38,6 +41,7 @@ export const OFFICIAL_RELEASE_REPOSITORY: string;
|
|
|
38
41
|
export const OFFICIAL_SOURCE_REPOSITORY: string;
|
|
39
42
|
export const FROZEN_LEGACY_RUNTIME_VERSION: "0.7.2";
|
|
40
43
|
export const MINIMUM_PRIVATE_NODE_RUNTIME_VERSION: "0.11.2";
|
|
44
|
+
export const MINIMUM_DUAL_PROVENANCE_RUNTIME_VERSION: "0.13.0";
|
|
41
45
|
export const PRIVATE_NODE_BOOTSTRAP_RELEASE_TAG: "agenc-v0.11.2";
|
|
42
46
|
export const OFFICIAL_RELEASE_WORKFLOW: string;
|
|
43
47
|
export const RUNTIME_ATTESTATION_POLICY: Readonly<{
|
|
@@ -47,6 +51,14 @@ export const RUNTIME_ATTESTATION_POLICY: Readonly<{
|
|
|
47
51
|
oidcIssuer: string;
|
|
48
52
|
predicateType: string;
|
|
49
53
|
}>;
|
|
54
|
+
export const RUNTIME_BUILD_PROVENANCE_POLICY: Readonly<{
|
|
55
|
+
repository: string;
|
|
56
|
+
signerWorkflow: string;
|
|
57
|
+
hostname: string;
|
|
58
|
+
oidcIssuer: string;
|
|
59
|
+
predicateType: string;
|
|
60
|
+
sourceRef: "refs/heads/main";
|
|
61
|
+
}>;
|
|
50
62
|
export const PINNED_GITHUB_CLI_VERSION: string;
|
|
51
63
|
export const PINNED_GITHUB_CLI_ARTIFACTS: Readonly<Record<string, Readonly<{
|
|
52
64
|
file: string;
|
|
@@ -54,6 +66,8 @@ export const PINNED_GITHUB_CLI_ARTIFACTS: Readonly<Record<string, Readonly<{
|
|
|
54
66
|
sha256: string;
|
|
55
67
|
bytes: number;
|
|
56
68
|
executable: string;
|
|
69
|
+
executableSha256: string;
|
|
70
|
+
executableBytes: number;
|
|
57
71
|
}>>>;
|
|
58
72
|
export const RUNTIME_MANIFEST_TRUST_MODES: readonly RuntimeManifestTrustMode[];
|
|
59
73
|
|
|
@@ -64,6 +78,13 @@ export function canonicalRuntimeAttestationVerificationArgs(options: {
|
|
|
64
78
|
readonly sourceRef: string;
|
|
65
79
|
}): readonly string[];
|
|
66
80
|
|
|
81
|
+
export function canonicalRuntimeBuildProvenanceVerificationArgs(options: {
|
|
82
|
+
readonly subjectPath: string;
|
|
83
|
+
readonly bundlePath: string;
|
|
84
|
+
readonly sourceCommit: string;
|
|
85
|
+
readonly sourceRef?: "refs/heads/main";
|
|
86
|
+
}): readonly string[];
|
|
87
|
+
|
|
67
88
|
export type LocalFileUrlPlatform =
|
|
68
89
|
| "win"
|
|
69
90
|
| "win32"
|
|
@@ -92,6 +113,26 @@ export function canonicalRuntimeNodeLibrary(platform: string): string | undefine
|
|
|
92
113
|
|
|
93
114
|
export function requireSupportedRuntimeVersion(version: string): string;
|
|
94
115
|
|
|
116
|
+
export function runtimeVersionRequiresDualProvenance(version: string): boolean;
|
|
117
|
+
|
|
118
|
+
export interface RuntimeReleaseCandidateIdentity {
|
|
119
|
+
readonly workflow: "release-runtime.yml";
|
|
120
|
+
readonly runId: number;
|
|
121
|
+
readonly runAttempt: number;
|
|
122
|
+
readonly runUrl: string;
|
|
123
|
+
readonly phase: "candidate";
|
|
124
|
+
readonly sourceRef: "refs/heads/main";
|
|
125
|
+
readonly evidenceSha256: string;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function validateRuntimeReleaseCandidateIdentity<
|
|
129
|
+
T extends RuntimeReleaseCandidateIdentity,
|
|
130
|
+
>(
|
|
131
|
+
value: T | undefined,
|
|
132
|
+
sourceCommit: unknown,
|
|
133
|
+
options?: { readonly required?: boolean },
|
|
134
|
+
): T | undefined;
|
|
135
|
+
|
|
95
136
|
export function canonicalLocalFileUrlToPath(
|
|
96
137
|
value: string,
|
|
97
138
|
platform?: LocalFileUrlPlatform,
|
|
@@ -12,6 +12,7 @@ export const OFFICIAL_RELEASE_REPOSITORY = "tetsuo-ai/agenc-releases";
|
|
|
12
12
|
export const OFFICIAL_SOURCE_REPOSITORY = "tetsuo-ai/agenc-core";
|
|
13
13
|
export const FROZEN_LEGACY_RUNTIME_VERSION = "0.7.2";
|
|
14
14
|
export const MINIMUM_PRIVATE_NODE_RUNTIME_VERSION = "0.11.2";
|
|
15
|
+
export const MINIMUM_DUAL_PROVENANCE_RUNTIME_VERSION = "0.13.0";
|
|
15
16
|
export const PRIVATE_NODE_BOOTSTRAP_RELEASE_TAG =
|
|
16
17
|
`agenc-v${MINIMUM_PRIVATE_NODE_RUNTIME_VERSION}`;
|
|
17
18
|
export const OFFICIAL_RELEASE_WORKFLOW =
|
|
@@ -23,6 +24,10 @@ export const RUNTIME_ATTESTATION_POLICY = Object.freeze({
|
|
|
23
24
|
oidcIssuer: "https://token.actions.githubusercontent.com",
|
|
24
25
|
predicateType: "https://slsa.dev/provenance/v1",
|
|
25
26
|
});
|
|
27
|
+
export const RUNTIME_BUILD_PROVENANCE_POLICY = Object.freeze({
|
|
28
|
+
...RUNTIME_ATTESTATION_POLICY,
|
|
29
|
+
sourceRef: "refs/heads/main",
|
|
30
|
+
});
|
|
26
31
|
export const PINNED_GITHUB_CLI_VERSION = "2.96.0";
|
|
27
32
|
export const PINNED_GITHUB_CLI_ARTIFACTS = Object.freeze({
|
|
28
33
|
"linux-x64": Object.freeze({
|
|
@@ -31,6 +36,8 @@ export const PINNED_GITHUB_CLI_ARTIFACTS = Object.freeze({
|
|
|
31
36
|
sha256: "83d5c2ccad5498f58bf6368acb1ab32588cf43ab3a4b1c301bf36328b1c8bd60",
|
|
32
37
|
bytes: 14652560,
|
|
33
38
|
executable: "gh_2.96.0_linux_amd64/bin/gh",
|
|
39
|
+
executableSha256: "56b8bbbb27b066ecb33dbef9a256dc9d1314adaeff0908a752feba6c34053b40",
|
|
40
|
+
executableBytes: 40722594,
|
|
34
41
|
}),
|
|
35
42
|
"linux-arm64": Object.freeze({
|
|
36
43
|
file: "gh_2.96.0_linux_arm64.tar.gz",
|
|
@@ -38,6 +45,8 @@ export const PINNED_GITHUB_CLI_ARTIFACTS = Object.freeze({
|
|
|
38
45
|
sha256: "06f86ec7103d41993b76cd78072f43595c34aaa56506d971d9860e67140bf909",
|
|
39
46
|
bytes: 13321232,
|
|
40
47
|
executable: "gh_2.96.0_linux_arm64/bin/gh",
|
|
48
|
+
executableSha256: "f903d2fa04ae78ee8f8df0186364d0b92f078d2720053941a47e0a3beaef54f0",
|
|
49
|
+
executableBytes: 37879970,
|
|
41
50
|
}),
|
|
42
51
|
"darwin-x64": Object.freeze({
|
|
43
52
|
file: "gh_2.96.0_macOS_amd64.zip",
|
|
@@ -45,6 +54,8 @@ export const PINNED_GITHUB_CLI_ARTIFACTS = Object.freeze({
|
|
|
45
54
|
sha256: "4bd449df9ad639391bc62b8032546f0fe9edcd8526e06682a4f88abd8c5d163c",
|
|
46
55
|
bytes: 15298430,
|
|
47
56
|
executable: "gh_2.96.0_macOS_amd64/bin/gh",
|
|
57
|
+
executableSha256: "49380b19e758c14ce5509afe0ced58777fe45cfbcd5989941f7314d5f7e468c8",
|
|
58
|
+
executableBytes: 41773632,
|
|
48
59
|
}),
|
|
49
60
|
"darwin-arm64": Object.freeze({
|
|
50
61
|
file: "gh_2.96.0_macOS_arm64.zip",
|
|
@@ -52,6 +63,8 @@ export const PINNED_GITHUB_CLI_ARTIFACTS = Object.freeze({
|
|
|
52
63
|
sha256: "f23a0c37d963aacc3bed703ccbd59b41c5ca22101fab7f00eb2b7cad23aba463",
|
|
53
64
|
bytes: 13950131,
|
|
54
65
|
executable: "gh_2.96.0_macOS_arm64/bin/gh",
|
|
66
|
+
executableSha256: "b1d6c442fde99ca27c04e1e74d624895abe37785f4a3e9e9b684bf7586ce4bc8",
|
|
67
|
+
executableBytes: 38817216,
|
|
55
68
|
}),
|
|
56
69
|
"win-x64": Object.freeze({
|
|
57
70
|
file: "gh_2.96.0_windows_amd64.zip",
|
|
@@ -59,6 +72,8 @@ export const PINNED_GITHUB_CLI_ARTIFACTS = Object.freeze({
|
|
|
59
72
|
sha256: "c2d6acc935cd2f00e2144d7e036d5cd82e6b6bd5594e8c75aa75ef2a4ed6aac3",
|
|
60
73
|
bytes: 14821821,
|
|
61
74
|
executable: "gh_2.96.0_windows_amd64/bin/gh.exe",
|
|
75
|
+
executableSha256: "cd79f16203f1fbe56937c4c96e2b6eadd10549418dcb241d91576ac77af0ac8b",
|
|
76
|
+
executableBytes: 41504056,
|
|
62
77
|
}),
|
|
63
78
|
});
|
|
64
79
|
export const RUNTIME_MANIFEST_TRUST_MODES = Object.freeze([
|
|
@@ -69,17 +84,19 @@ export const RUNTIME_MANIFEST_TRUST_MODES = Object.freeze([
|
|
|
69
84
|
|
|
70
85
|
const TRUST_MODES = new Set(RUNTIME_MANIFEST_TRUST_MODES);
|
|
71
86
|
|
|
72
|
-
|
|
87
|
+
function canonicalRuntimeProvenanceVerificationArgs({
|
|
73
88
|
subjectPath,
|
|
74
89
|
bundlePath,
|
|
75
90
|
sourceCommit,
|
|
76
91
|
sourceRef,
|
|
92
|
+
sourceRefPattern,
|
|
93
|
+
sourceRefError,
|
|
77
94
|
}) {
|
|
78
95
|
if (!/^[0-9a-f]{40,64}$/.test(sourceCommit ?? "")) {
|
|
79
96
|
throw new Error("runtime attestation policy requires an exact source commit");
|
|
80
97
|
}
|
|
81
|
-
if (typeof sourceRef !== "string" || !
|
|
82
|
-
throw new Error(
|
|
98
|
+
if (typeof sourceRef !== "string" || !sourceRefPattern.test(sourceRef)) {
|
|
99
|
+
throw new Error(sourceRefError);
|
|
83
100
|
}
|
|
84
101
|
return [
|
|
85
102
|
"attestation",
|
|
@@ -107,6 +124,40 @@ export function canonicalRuntimeAttestationVerificationArgs({
|
|
|
107
124
|
];
|
|
108
125
|
}
|
|
109
126
|
|
|
127
|
+
export function canonicalRuntimeAttestationVerificationArgs({
|
|
128
|
+
subjectPath,
|
|
129
|
+
bundlePath,
|
|
130
|
+
sourceCommit,
|
|
131
|
+
sourceRef,
|
|
132
|
+
}) {
|
|
133
|
+
return canonicalRuntimeProvenanceVerificationArgs({
|
|
134
|
+
subjectPath,
|
|
135
|
+
bundlePath,
|
|
136
|
+
sourceCommit,
|
|
137
|
+
sourceRef,
|
|
138
|
+
sourceRefPattern: /^refs\/tags\/agenc-v[0-9]+\.[0-9]+\.[0-9]+$/,
|
|
139
|
+
sourceRefError:
|
|
140
|
+
"runtime attestation policy requires the canonical release source ref",
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export function canonicalRuntimeBuildProvenanceVerificationArgs({
|
|
145
|
+
subjectPath,
|
|
146
|
+
bundlePath,
|
|
147
|
+
sourceCommit,
|
|
148
|
+
sourceRef = RUNTIME_BUILD_PROVENANCE_POLICY.sourceRef,
|
|
149
|
+
}) {
|
|
150
|
+
return canonicalRuntimeProvenanceVerificationArgs({
|
|
151
|
+
subjectPath,
|
|
152
|
+
bundlePath,
|
|
153
|
+
sourceCommit,
|
|
154
|
+
sourceRef,
|
|
155
|
+
sourceRefPattern: /^refs\/heads\/main$/,
|
|
156
|
+
sourceRefError:
|
|
157
|
+
"runtime build provenance policy requires the canonical main source ref",
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
|
|
110
161
|
export function requireRuntimeManifestTrustMode(trustMode) {
|
|
111
162
|
if (!TRUST_MODES.has(trustMode)) {
|
|
112
163
|
throw new Error(`agenc: unsupported runtime manifest trust mode ${String(trustMode)}`);
|
|
@@ -162,6 +213,57 @@ export function requireSupportedRuntimeVersion(version) {
|
|
|
162
213
|
return version;
|
|
163
214
|
}
|
|
164
215
|
|
|
216
|
+
export function runtimeVersionRequiresDualProvenance(version) {
|
|
217
|
+
requireSupportedRuntimeVersion(version);
|
|
218
|
+
if (version === FROZEN_LEGACY_RUNTIME_VERSION) return false;
|
|
219
|
+
const actual = version.split("-", 1)[0].split(".").map(Number);
|
|
220
|
+
const minimum = MINIMUM_DUAL_PROVENANCE_RUNTIME_VERSION.split(".").map(Number);
|
|
221
|
+
for (let index = 0; index < minimum.length; index += 1) {
|
|
222
|
+
if (actual[index] > minimum[index]) return true;
|
|
223
|
+
if (actual[index] < minimum[index]) return false;
|
|
224
|
+
}
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const RUNTIME_RELEASE_CANDIDATE_KEYS = Object.freeze([
|
|
229
|
+
"workflow",
|
|
230
|
+
"runId",
|
|
231
|
+
"runAttempt",
|
|
232
|
+
"runUrl",
|
|
233
|
+
"phase",
|
|
234
|
+
"sourceRef",
|
|
235
|
+
"evidenceSha256",
|
|
236
|
+
]);
|
|
237
|
+
|
|
238
|
+
export function validateRuntimeReleaseCandidateIdentity(
|
|
239
|
+
value,
|
|
240
|
+
sourceCommit,
|
|
241
|
+
{ required = false } = {},
|
|
242
|
+
) {
|
|
243
|
+
if (value === undefined && !required) return undefined;
|
|
244
|
+
if (
|
|
245
|
+
value === null ||
|
|
246
|
+
typeof value !== "object" ||
|
|
247
|
+
Array.isArray(value) ||
|
|
248
|
+
Object.keys(value).sort().join("\0") !==
|
|
249
|
+
[...RUNTIME_RELEASE_CANDIDATE_KEYS].sort().join("\0") ||
|
|
250
|
+
value.workflow !== "release-runtime.yml" ||
|
|
251
|
+
!Number.isSafeInteger(value.runId) ||
|
|
252
|
+
value.runId <= 0 ||
|
|
253
|
+
!Number.isSafeInteger(value.runAttempt) ||
|
|
254
|
+
value.runAttempt <= 0 ||
|
|
255
|
+
value.runUrl !==
|
|
256
|
+
`https://github.com/tetsuo-ai/agenc-core/actions/runs/${value.runId}` ||
|
|
257
|
+
value.phase !== "candidate" ||
|
|
258
|
+
value.sourceRef !== RUNTIME_BUILD_PROVENANCE_POLICY.sourceRef ||
|
|
259
|
+
!/^[0-9a-f]{64}$/.test(value.evidenceSha256 ?? "") ||
|
|
260
|
+
!/^[0-9a-f]{40}$/.test(sourceCommit ?? "")
|
|
261
|
+
) {
|
|
262
|
+
throw new Error("agenc: runtime release candidate identity is invalid");
|
|
263
|
+
}
|
|
264
|
+
return value;
|
|
265
|
+
}
|
|
266
|
+
|
|
165
267
|
function localFileUrlUsesWindowsPaths(platform) {
|
|
166
268
|
if (platform === "win" || platform === "win32") return true;
|
|
167
269
|
if (
|
|
@@ -281,7 +383,10 @@ function validateArtifactUrl(manifest, artifact, trustMode) {
|
|
|
281
383
|
if (
|
|
282
384
|
artifact.attestationUrl !== undefined ||
|
|
283
385
|
artifact.attestationSha256 !== undefined ||
|
|
284
|
-
artifact.attestationBytes !== undefined
|
|
386
|
+
artifact.attestationBytes !== undefined ||
|
|
387
|
+
artifact.buildProvenanceUrl !== undefined ||
|
|
388
|
+
artifact.buildProvenanceSha256 !== undefined ||
|
|
389
|
+
artifact.buildProvenanceBytes !== undefined
|
|
285
390
|
) {
|
|
286
391
|
throw new Error("agenc: explicit local runtime artifacts must not declare remote attestations");
|
|
287
392
|
}
|
|
@@ -315,6 +420,31 @@ function validateArtifactUrl(manifest, artifact, trustMode) {
|
|
|
315
420
|
throw new Error("agenc: runtime artifact attestation size is invalid");
|
|
316
421
|
}
|
|
317
422
|
}
|
|
423
|
+
const hasBuildProvenance =
|
|
424
|
+
artifact.buildProvenanceUrl !== undefined ||
|
|
425
|
+
artifact.buildProvenanceSha256 !== undefined ||
|
|
426
|
+
artifact.buildProvenanceBytes !== undefined;
|
|
427
|
+
if (
|
|
428
|
+
(
|
|
429
|
+
trustMode === "official" &&
|
|
430
|
+
runtimeVersionRequiresDualProvenance(manifest.runtimeVersion)
|
|
431
|
+
) ||
|
|
432
|
+
hasBuildProvenance
|
|
433
|
+
) {
|
|
434
|
+
if (artifact.buildProvenanceUrl !== `${artifact.url}.build.sigstore.json`) {
|
|
435
|
+
throw new Error("agenc: runtime artifact build provenance URL is not canonical");
|
|
436
|
+
}
|
|
437
|
+
if (!/^[0-9a-f]{64}$/.test(artifact.buildProvenanceSha256 ?? "")) {
|
|
438
|
+
throw new Error("agenc: runtime artifact build provenance digest is invalid");
|
|
439
|
+
}
|
|
440
|
+
if (
|
|
441
|
+
!Number.isSafeInteger(artifact.buildProvenanceBytes) ||
|
|
442
|
+
artifact.buildProvenanceBytes <= 0 ||
|
|
443
|
+
artifact.buildProvenanceBytes > MAX_RUNTIME_ATTESTATION_BYTES
|
|
444
|
+
) {
|
|
445
|
+
throw new Error("agenc: runtime artifact build provenance size is invalid");
|
|
446
|
+
}
|
|
447
|
+
}
|
|
318
448
|
}
|
|
319
449
|
|
|
320
450
|
export function validateRuntimeReleaseManifest(
|
|
@@ -427,6 +557,15 @@ export function validateRuntimeReleaseManifest(
|
|
|
427
557
|
) {
|
|
428
558
|
throw new Error("agenc: runtime manifest build provenance is invalid");
|
|
429
559
|
}
|
|
560
|
+
validateRuntimeReleaseCandidateIdentity(
|
|
561
|
+
build.releaseCandidate,
|
|
562
|
+
build.sourceCommit,
|
|
563
|
+
{
|
|
564
|
+
required:
|
|
565
|
+
trustMode === "official" &&
|
|
566
|
+
runtimeVersionRequiresDualProvenance(manifest.runtimeVersion),
|
|
567
|
+
},
|
|
568
|
+
);
|
|
430
569
|
for (const artifact of manifest.artifacts) {
|
|
431
570
|
if (
|
|
432
571
|
artifact.nodeMajor !== build.nodeMajor ||
|