@outerlayer/cli 0.10.0 → 0.10.2
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/CHANGELOG.md +14 -0
- package/dist/{agent-setup-ODTDC3US.js → agent-setup-YEFN74Y4.js} +6 -3
- package/dist/build-info.json +1 -1
- package/dist/{builder-5DKTBWT3.js → builder-EVO6F2NO.js} +2 -2
- package/dist/{check-VJRJ2KQ4.js → check-NQYQHITZ.js} +16 -16
- package/dist/{chunk-QPPPUKQJ.js → chunk-472KC6JV.js} +1 -1
- package/dist/{chunk-47RS42OZ.js → chunk-A56PYPDF.js} +11 -4
- package/dist/{chunk-LBU4CLK5.js → chunk-BREEX2Z7.js} +4 -4
- package/dist/{chunk-KWCJLAHQ.js → chunk-DTDZXDQ3.js} +3 -3
- package/dist/{chunk-YCPV7FN6.js → chunk-ERHJETKP.js} +20 -18
- package/dist/{chunk-XGCJNSI7.js → chunk-ESZJ5QIC.js} +4 -4
- package/dist/{chunk-VMK7I3TB.js → chunk-HKUH5AR2.js} +2 -2
- package/dist/{chunk-5K3IUOPJ.js → chunk-I263FZ3A.js} +2 -2
- package/dist/{chunk-LTJPX7TX.js → chunk-IU4NZROR.js} +249 -18
- package/dist/{chunk-TV36SKEN.js → chunk-JSUUXA5W.js} +1 -1
- package/dist/{chunk-OSKO3PAL.js → chunk-KZ5M4QOB.js} +7 -7
- package/dist/{chunk-WJBJY5DQ.js → chunk-MC6J453K.js} +2 -2
- package/dist/{chunk-XZNO4QED.js → chunk-R2UYH4QV.js} +5 -5
- package/dist/{chunk-LYESSQUA.js → chunk-UES67HLJ.js} +2 -2
- package/dist/{chunk-ZEQMTBRD.js → chunk-VDI5POCC.js} +80 -2
- package/dist/{chunk-FKFGQJNN.js → chunk-VVIRHTH4.js} +1 -1
- package/dist/{chunk-543OT6V5.js → chunk-Y6P5XX2B.js} +25 -7
- package/dist/{chunk-ABIWDUMS.js → chunk-YETTWTAY.js} +4 -4
- package/dist/{chunk-KPUJGBA4.js → chunk-ZQ5JGHUO.js} +2 -2
- package/dist/{cli-77URFYI7.js → cli-ZCWMJCEK.js} +52 -52
- package/dist/{command-2LYWVGIK.js → command-LNEFKIVC.js} +9 -9
- package/dist/{connect-cmd-MPZWSEKY.js → connect-cmd-5MIUNYAY.js} +3 -3
- package/dist/{dist-QY5CL5LB.js → dist-3M3ZMEZF.js} +1 -1
- package/dist/{docker-V7B6UKPF.js → docker-GM526LGX.js} +3 -3
- package/dist/{doctor-PUAL5LTL.js → doctor-QSV4DYT2.js} +11 -11
- package/dist/{emit-artifact-cmd-P3IWNSQY.js → emit-artifact-cmd-VKPW577P.js} +5 -5
- package/dist/{emit-criteria-cmd-GOSP6X74.js → emit-criteria-cmd-U2TL6FYY.js} +4 -4
- package/dist/{emit-finding-cmd-D554IQKU.js → emit-finding-cmd-TMOOKHPD.js} +4 -4
- package/dist/{emit-result-cmd-QACXTIBV.js → emit-result-cmd-GKBVPMU4.js} +5 -5
- package/dist/index.js +1 -1
- package/dist/{init-WX5XE6L3.js → init-MJ2PO2VQ.js} +11 -11
- package/dist/{init-TMBE3BRN.js → init-OKCDXEOG.js} +10 -10
- package/dist/{init-cmd-4FQKQLJ5.js → init-cmd-5TEM2QNH.js} +6 -6
- package/dist/{loop-QLL4DKRF.js → loop-DBF3UJAD.js} +16 -16
- package/dist/{machine-7T7FBSUL.js → machine-TBJKZ6TN.js} +9 -9
- package/dist/mcp-install-cmd-XZARXNYT.js +9 -0
- package/dist/{real-deps-LS64D3M6.js → real-deps-KNNBQC75.js} +1 -1
- package/dist/{session-sender-HVWTYG35.js → session-sender-E3UHGSNV.js} +4 -4
- package/dist/{status-SMF5JG2K.js → status-KPDVZMJ6.js} +11 -11
- package/dist/{sync-cmd-SLMPCUXO.js → sync-cmd-ULKXCHO2.js} +3 -3
- package/dist/{watch-TLM5QN5X.js → watch-IU6NHB4K.js} +3 -3
- package/dist/{work-claim-cmd-VSSZDFY5.js → work-claim-cmd-DYD6II56.js} +6 -6
- package/dist/{work-cmd-TK4VOOHL.js → work-cmd-ZJY3NA2G.js} +5 -5
- package/dist/{work-comment-cmd-VQCG72ZQ.js → work-comment-cmd-34FTLPUO.js} +5 -5
- package/dist/{work-open-pr-cmd-YESMWATB.js → work-open-pr-cmd-N2RBDKZ4.js} +6 -6
- package/dist/{work-pr-cmd-6TMSCO3Q.js → work-pr-cmd-EXTOGBJC.js} +5 -5
- package/package.json +1 -1
- package/dist/mcp-install-cmd-4AQMSIGY.js +0 -9
|
@@ -21971,15 +21971,15 @@ var ModelRegistryImpl = class {
|
|
|
21971
21971
|
};
|
|
21972
21972
|
var models_default = {
|
|
21973
21973
|
version: "1.0.0",
|
|
21974
|
-
generatedAt: "2026-10-
|
|
21974
|
+
generatedAt: "2026-10-07T05:07:15.321Z",
|
|
21975
21975
|
sources: {
|
|
21976
21976
|
litellm: {
|
|
21977
|
-
fetchedAt: "2026-10-
|
|
21978
|
-
modelCount:
|
|
21977
|
+
fetchedAt: "2026-10-07T05:07:15.321Z",
|
|
21978
|
+
modelCount: 1896
|
|
21979
21979
|
},
|
|
21980
21980
|
openrouter: {
|
|
21981
|
-
fetchedAt: "2026-10-
|
|
21982
|
-
modelCount:
|
|
21981
|
+
fetchedAt: "2026-10-07T05:07:15.321Z",
|
|
21982
|
+
modelCount: 199
|
|
21983
21983
|
}
|
|
21984
21984
|
},
|
|
21985
21985
|
models: {
|
|
@@ -31529,7 +31529,7 @@ var models_default = {
|
|
|
31529
31529
|
"deep-research-pro-preview-12-2025": {
|
|
31530
31530
|
provider: "google",
|
|
31531
31531
|
displayName: "Deep Research Pro Preview 12 2025",
|
|
31532
|
-
mode: "
|
|
31532
|
+
mode: "chat",
|
|
31533
31533
|
source: "litellm",
|
|
31534
31534
|
pricing: {
|
|
31535
31535
|
inputCostPerToken: 2e-6,
|
|
@@ -35588,7 +35588,8 @@ var models_default = {
|
|
|
35588
35588
|
},
|
|
35589
35589
|
context: {
|
|
35590
35590
|
maxInputTokens: 512
|
|
35591
|
-
}
|
|
35591
|
+
},
|
|
35592
|
+
deprecationDate: "2026-10-07"
|
|
35592
35593
|
},
|
|
35593
35594
|
"BAAI/bge-base-en-v1.5": {
|
|
35594
35595
|
provider: "together_ai",
|
|
@@ -37282,7 +37283,7 @@ var models_default = {
|
|
|
37282
37283
|
"vertex_ai/deep-research-pro-preview-12-2025": {
|
|
37283
37284
|
provider: "google",
|
|
37284
37285
|
displayName: "Vertex Ai/deep Research Pro Preview 12 2025",
|
|
37285
|
-
mode: "
|
|
37286
|
+
mode: "chat",
|
|
37286
37287
|
source: "litellm",
|
|
37287
37288
|
pricing: {
|
|
37288
37289
|
inputCostPerToken: 2e-6,
|
|
@@ -41838,7 +41839,8 @@ var models_default = {
|
|
|
41838
41839
|
context: {
|
|
41839
41840
|
maxInputTokens: 40960,
|
|
41840
41841
|
maxOutputTokens: 40960
|
|
41841
|
-
}
|
|
41842
|
+
},
|
|
41843
|
+
deprecationDate: "2026-10-07"
|
|
41842
41844
|
},
|
|
41843
41845
|
"accounts/fireworks/models/qwen3-next-80b-a3b-instruct": {
|
|
41844
41846
|
provider: "fireworks_ai",
|
|
@@ -52800,6 +52802,7 @@ var models_default = {
|
|
|
52800
52802
|
pdfInput: true,
|
|
52801
52803
|
webSearch: true
|
|
52802
52804
|
},
|
|
52805
|
+
deprecationDate: "2026-11-19",
|
|
52803
52806
|
supportedParameters: [
|
|
52804
52807
|
"max_tokens",
|
|
52805
52808
|
"temperature",
|
|
@@ -54809,6 +54812,7 @@ var models_default = {
|
|
|
54809
54812
|
pdfInput: true,
|
|
54810
54813
|
webSearch: true
|
|
54811
54814
|
},
|
|
54815
|
+
deprecationDate: "2027-01-28",
|
|
54812
54816
|
supportedParameters: [
|
|
54813
54817
|
"max_tokens",
|
|
54814
54818
|
"temperature",
|
|
@@ -55476,7 +55480,7 @@ var models_default = {
|
|
|
55476
55480
|
mode: "chat",
|
|
55477
55481
|
source: "litellm",
|
|
55478
55482
|
pricing: {
|
|
55479
|
-
inputCostPerToken:
|
|
55483
|
+
inputCostPerToken: 2e-6,
|
|
55480
55484
|
outputCostPerToken: 6e-6,
|
|
55481
55485
|
cacheReadCostPerToken: 5e-7,
|
|
55482
55486
|
tiers: [
|
|
@@ -56514,9 +56518,9 @@ var models_default = {
|
|
|
56514
56518
|
mode: "chat",
|
|
56515
56519
|
source: "litellm",
|
|
56516
56520
|
pricing: {
|
|
56517
|
-
inputCostPerToken:
|
|
56518
|
-
outputCostPerToken:
|
|
56519
|
-
cacheReadCostPerToken:
|
|
56521
|
+
inputCostPerToken: 27e-7,
|
|
56522
|
+
outputCostPerToken: 135e-7,
|
|
56523
|
+
cacheReadCostPerToken: 27e-8
|
|
56520
56524
|
},
|
|
56521
56525
|
context: {
|
|
56522
56526
|
maxInputTokens: 1048576
|
|
@@ -57863,8 +57867,8 @@ var models_default = {
|
|
|
57863
57867
|
mode: "chat",
|
|
57864
57868
|
source: "litellm",
|
|
57865
57869
|
pricing: {
|
|
57866
|
-
inputCostPerToken:
|
|
57867
|
-
outputCostPerToken:
|
|
57870
|
+
inputCostPerToken: 15e-8,
|
|
57871
|
+
outputCostPerToken: 47e-8
|
|
57868
57872
|
},
|
|
57869
57873
|
context: {
|
|
57870
57874
|
maxInputTokens: 1e6
|
|
@@ -58167,7 +58171,7 @@ var models_default = {
|
|
|
58167
58171
|
promptCaching: true,
|
|
58168
58172
|
reasoning: true
|
|
58169
58173
|
},
|
|
58170
|
-
deprecationDate: "
|
|
58174
|
+
deprecationDate: "2027-04-16"
|
|
58171
58175
|
},
|
|
58172
58176
|
"us-gov-west-1/nvidia.nemotron-nano-3-30b": {
|
|
58173
58177
|
provider: "bedrock",
|
|
@@ -63658,7 +63662,7 @@ var models_default = {
|
|
|
63658
63662
|
outputCostPerToken: 12e-6
|
|
63659
63663
|
},
|
|
63660
63664
|
context: {
|
|
63661
|
-
maxInputTokens:
|
|
63665
|
+
maxInputTokens: 1048576,
|
|
63662
63666
|
maxOutputTokens: 65536
|
|
63663
63667
|
},
|
|
63664
63668
|
capabilities: {
|
|
@@ -63679,7 +63683,7 @@ var models_default = {
|
|
|
63679
63683
|
outputCostPerToken: 12e-6
|
|
63680
63684
|
},
|
|
63681
63685
|
context: {
|
|
63682
|
-
maxInputTokens:
|
|
63686
|
+
maxInputTokens: 1048576,
|
|
63683
63687
|
maxOutputTokens: 65536
|
|
63684
63688
|
},
|
|
63685
63689
|
capabilities: {
|
|
@@ -65960,6 +65964,233 @@ var models_default = {
|
|
|
65960
65964
|
audioInput: true,
|
|
65961
65965
|
audioOutput: true
|
|
65962
65966
|
}
|
|
65967
|
+
},
|
|
65968
|
+
"us/gpt-6.1-sol": {
|
|
65969
|
+
provider: "azure",
|
|
65970
|
+
displayName: "Us/gpt 6.1 Sol",
|
|
65971
|
+
mode: "chat",
|
|
65972
|
+
source: "litellm",
|
|
65973
|
+
pricing: {
|
|
65974
|
+
inputCostPerToken: 22e-7,
|
|
65975
|
+
outputCostPerToken: 11e-6,
|
|
65976
|
+
cacheCreationCostPerToken: 275e-8,
|
|
65977
|
+
cacheReadCostPerToken: 11e-8,
|
|
65978
|
+
tiers: [
|
|
65979
|
+
{
|
|
65980
|
+
aboveInputTokens: 272e3,
|
|
65981
|
+
cacheCreationCostPerToken: 55e-7,
|
|
65982
|
+
cacheReadCostPerToken: 22e-8,
|
|
65983
|
+
inputCostPerToken: 44e-7,
|
|
65984
|
+
outputCostPerToken: 165e-7
|
|
65985
|
+
}
|
|
65986
|
+
]
|
|
65987
|
+
},
|
|
65988
|
+
context: {
|
|
65989
|
+
maxInputTokens: 922e3,
|
|
65990
|
+
maxOutputTokens: 128e3
|
|
65991
|
+
},
|
|
65992
|
+
capabilities: {
|
|
65993
|
+
vision: true,
|
|
65994
|
+
functionCalling: true,
|
|
65995
|
+
parallelFunctionCalling: true,
|
|
65996
|
+
structuredOutput: true,
|
|
65997
|
+
promptCaching: true,
|
|
65998
|
+
reasoning: true,
|
|
65999
|
+
pdfInput: true,
|
|
66000
|
+
webSearch: true
|
|
66001
|
+
},
|
|
66002
|
+
deprecationDate: "2028-03-11"
|
|
66003
|
+
},
|
|
66004
|
+
"eu/gpt-6.1-sol": {
|
|
66005
|
+
provider: "azure",
|
|
66006
|
+
displayName: "Eu/gpt 6.1 Sol",
|
|
66007
|
+
mode: "chat",
|
|
66008
|
+
source: "litellm",
|
|
66009
|
+
pricing: {
|
|
66010
|
+
inputCostPerToken: 24e-7,
|
|
66011
|
+
outputCostPerToken: 12e-6,
|
|
66012
|
+
cacheCreationCostPerToken: 3e-6,
|
|
66013
|
+
cacheReadCostPerToken: 12e-8,
|
|
66014
|
+
tiers: [
|
|
66015
|
+
{
|
|
66016
|
+
aboveInputTokens: 272e3,
|
|
66017
|
+
cacheCreationCostPerToken: 6e-6,
|
|
66018
|
+
cacheReadCostPerToken: 24e-8,
|
|
66019
|
+
inputCostPerToken: 48e-7,
|
|
66020
|
+
outputCostPerToken: 18e-6
|
|
66021
|
+
}
|
|
66022
|
+
]
|
|
66023
|
+
},
|
|
66024
|
+
context: {
|
|
66025
|
+
maxInputTokens: 922e3,
|
|
66026
|
+
maxOutputTokens: 128e3
|
|
66027
|
+
},
|
|
66028
|
+
capabilities: {
|
|
66029
|
+
vision: true,
|
|
66030
|
+
functionCalling: true,
|
|
66031
|
+
parallelFunctionCalling: true,
|
|
66032
|
+
structuredOutput: true,
|
|
66033
|
+
promptCaching: true,
|
|
66034
|
+
reasoning: true,
|
|
66035
|
+
pdfInput: true,
|
|
66036
|
+
webSearch: true
|
|
66037
|
+
},
|
|
66038
|
+
deprecationDate: "2028-03-11"
|
|
66039
|
+
},
|
|
66040
|
+
"apac/gpt-6.1-sol": {
|
|
66041
|
+
provider: "azure",
|
|
66042
|
+
displayName: "Apac/gpt 6.1 Sol",
|
|
66043
|
+
mode: "chat",
|
|
66044
|
+
source: "litellm",
|
|
66045
|
+
pricing: {
|
|
66046
|
+
inputCostPerToken: 24e-7,
|
|
66047
|
+
outputCostPerToken: 12e-6,
|
|
66048
|
+
cacheCreationCostPerToken: 3e-6,
|
|
66049
|
+
cacheReadCostPerToken: 12e-8,
|
|
66050
|
+
tiers: [
|
|
66051
|
+
{
|
|
66052
|
+
aboveInputTokens: 272e3,
|
|
66053
|
+
cacheCreationCostPerToken: 6e-6,
|
|
66054
|
+
cacheReadCostPerToken: 24e-8,
|
|
66055
|
+
inputCostPerToken: 48e-7,
|
|
66056
|
+
outputCostPerToken: 18e-6
|
|
66057
|
+
}
|
|
66058
|
+
]
|
|
66059
|
+
},
|
|
66060
|
+
context: {
|
|
66061
|
+
maxInputTokens: 922e3,
|
|
66062
|
+
maxOutputTokens: 128e3
|
|
66063
|
+
},
|
|
66064
|
+
capabilities: {
|
|
66065
|
+
vision: true,
|
|
66066
|
+
functionCalling: true,
|
|
66067
|
+
parallelFunctionCalling: true,
|
|
66068
|
+
structuredOutput: true,
|
|
66069
|
+
promptCaching: true,
|
|
66070
|
+
reasoning: true,
|
|
66071
|
+
pdfInput: true,
|
|
66072
|
+
webSearch: true
|
|
66073
|
+
},
|
|
66074
|
+
deprecationDate: "2028-03-11"
|
|
66075
|
+
},
|
|
66076
|
+
"mistral-large-4": {
|
|
66077
|
+
provider: "mistral",
|
|
66078
|
+
displayName: "Mistral Large 4",
|
|
66079
|
+
mode: "chat",
|
|
66080
|
+
source: "litellm",
|
|
66081
|
+
pricing: {
|
|
66082
|
+
inputCostPerToken: 68e-8,
|
|
66083
|
+
outputCostPerToken: 209e-8,
|
|
66084
|
+
cacheReadCostPerToken: 68e-9
|
|
66085
|
+
},
|
|
66086
|
+
context: {
|
|
66087
|
+
maxInputTokens: 524288
|
|
66088
|
+
},
|
|
66089
|
+
capabilities: {
|
|
66090
|
+
vision: true,
|
|
66091
|
+
functionCalling: true,
|
|
66092
|
+
structuredOutput: true,
|
|
66093
|
+
promptCaching: true,
|
|
66094
|
+
reasoning: true
|
|
66095
|
+
}
|
|
66096
|
+
},
|
|
66097
|
+
"mistral-large-4-0": {
|
|
66098
|
+
provider: "mistral",
|
|
66099
|
+
displayName: "Mistral Large 4 0",
|
|
66100
|
+
mode: "chat",
|
|
66101
|
+
source: "litellm",
|
|
66102
|
+
pricing: {
|
|
66103
|
+
inputCostPerToken: 68e-8,
|
|
66104
|
+
outputCostPerToken: 209e-8,
|
|
66105
|
+
cacheReadCostPerToken: 68e-9
|
|
66106
|
+
},
|
|
66107
|
+
context: {
|
|
66108
|
+
maxInputTokens: 524288
|
|
66109
|
+
},
|
|
66110
|
+
capabilities: {
|
|
66111
|
+
vision: true,
|
|
66112
|
+
functionCalling: true,
|
|
66113
|
+
structuredOutput: true,
|
|
66114
|
+
promptCaching: true,
|
|
66115
|
+
reasoning: true
|
|
66116
|
+
}
|
|
66117
|
+
},
|
|
66118
|
+
"gemini-nano-banana-2.1": {
|
|
66119
|
+
provider: "google",
|
|
66120
|
+
displayName: "Google: Nano Banana 2.1",
|
|
66121
|
+
mode: "image_generation",
|
|
66122
|
+
source: "litellm",
|
|
66123
|
+
pricing: {
|
|
66124
|
+
inputCostPerToken: 15e-7,
|
|
66125
|
+
outputCostPerToken: 75e-7,
|
|
66126
|
+
cacheReadCostPerToken: 15e-8
|
|
66127
|
+
},
|
|
66128
|
+
context: {
|
|
66129
|
+
maxInputTokens: 131072,
|
|
66130
|
+
maxOutputTokens: 32768
|
|
66131
|
+
},
|
|
66132
|
+
capabilities: {
|
|
66133
|
+
vision: true,
|
|
66134
|
+
functionCalling: false,
|
|
66135
|
+
structuredOutput: false,
|
|
66136
|
+
promptCaching: true,
|
|
66137
|
+
reasoning: true,
|
|
66138
|
+
pdfInput: true,
|
|
66139
|
+
webSearch: true
|
|
66140
|
+
},
|
|
66141
|
+
supportedParameters: [
|
|
66142
|
+
"max_tokens",
|
|
66143
|
+
"temperature",
|
|
66144
|
+
"top_p"
|
|
66145
|
+
]
|
|
66146
|
+
},
|
|
66147
|
+
"vertex_ai/gemini-nano-banana-2.1": {
|
|
66148
|
+
provider: "google",
|
|
66149
|
+
displayName: "Vertex Ai/gemini Nano Banana 2.1",
|
|
66150
|
+
mode: "image_generation",
|
|
66151
|
+
source: "litellm",
|
|
66152
|
+
pricing: {
|
|
66153
|
+
inputCostPerToken: 15e-7,
|
|
66154
|
+
outputCostPerToken: 75e-7,
|
|
66155
|
+
cacheReadCostPerToken: 15e-8
|
|
66156
|
+
},
|
|
66157
|
+
context: {
|
|
66158
|
+
maxInputTokens: 131072,
|
|
66159
|
+
maxOutputTokens: 32768
|
|
66160
|
+
},
|
|
66161
|
+
capabilities: {
|
|
66162
|
+
vision: true,
|
|
66163
|
+
functionCalling: false,
|
|
66164
|
+
structuredOutput: false,
|
|
66165
|
+
promptCaching: true,
|
|
66166
|
+
reasoning: true,
|
|
66167
|
+
pdfInput: true,
|
|
66168
|
+
webSearch: true
|
|
66169
|
+
}
|
|
66170
|
+
},
|
|
66171
|
+
"in.moonshotai.kimi-k3": {
|
|
66172
|
+
provider: "bedrock",
|
|
66173
|
+
displayName: "In.moonshotai.kimi K3",
|
|
66174
|
+
mode: "chat",
|
|
66175
|
+
source: "litellm",
|
|
66176
|
+
pricing: {
|
|
66177
|
+
inputCostPerToken: 33e-7,
|
|
66178
|
+
outputCostPerToken: 165e-7,
|
|
66179
|
+
cacheCreationCostPerToken: 4125e-9,
|
|
66180
|
+
cacheReadCostPerToken: 33e-8
|
|
66181
|
+
},
|
|
66182
|
+
context: {
|
|
66183
|
+
maxInputTokens: 1e6,
|
|
66184
|
+
maxOutputTokens: 131072
|
|
66185
|
+
},
|
|
66186
|
+
capabilities: {
|
|
66187
|
+
vision: true,
|
|
66188
|
+
functionCalling: true,
|
|
66189
|
+
structuredOutput: true,
|
|
66190
|
+
promptCaching: true,
|
|
66191
|
+
reasoning: true,
|
|
66192
|
+
audioInput: false
|
|
66193
|
+
}
|
|
65963
66194
|
}
|
|
65964
66195
|
}
|
|
65965
66196
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { BUILDKIT_IMAGE } from './chunk-CX22S5BA.js';
|
|
4
|
-
import { compareVersions } from './chunk-
|
|
4
|
+
import { compareVersions } from './chunk-IU4NZROR.js';
|
|
5
5
|
import { parseSize } from './chunk-7RQ73DLO.js';
|
|
6
6
|
import { JOB_MOUNT, GATEWAY_PORT, GATEWAY_SOCKET, CLAUDE_PORT, CLAUDE_SOCKET, RELAY_PORT, DESTINATION_BASE_PORT } from './chunk-M6G7TJVF.js';
|
|
7
7
|
import { runnerDir } from './chunk-ZM2IMMYN.js';
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { writeJobFile, readJobFile } from './chunk-T6OIJQRT.js';
|
|
4
|
-
import { senderPidfile } from './chunk-
|
|
4
|
+
import { senderPidfile } from './chunk-HKUH5AR2.js';
|
|
5
5
|
import { DOCKERD_LOG } from './chunk-V42JY4F6.js';
|
|
6
|
-
import { installScrubContext } from './chunk-
|
|
7
|
-
import { AssetError, describeCallFailure, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, refusalCode, resolveAgentUser, AgentUserError, runBuildSteps, removeStagedContext, stageGovernedContext, shellQuote, createRunnerLog, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, formatDuration, retrySend, formatClock, containerSenderCommand, syncInContainer, copyTranscriptsFromContainer, GH_CONFIG_YML, ghHostsYml, ADDED_USER, isLiteralAddress, signalInContainer, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript } from './chunk-
|
|
6
|
+
import { installScrubContext } from './chunk-Y6P5XX2B.js';
|
|
7
|
+
import { AssetError, describeCallFailure, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, refusalCode, resolveAgentUser, AgentUserError, runBuildSteps, removeStagedContext, stageGovernedContext, shellQuote, createRunnerLog, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, formatDuration, retrySend, formatClock, containerSenderCommand, syncInContainer, copyTranscriptsFromContainer, GH_CONFIG_YML, ghHostsYml, ADDED_USER, isLiteralAddress, signalInContainer, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript } from './chunk-BREEX2Z7.js';
|
|
8
8
|
import { readBranchHead, diffBetween, fetchCommit } from './chunk-3FMPZPJQ.js';
|
|
9
9
|
import { isSameProcess, startTimeOf } from './chunk-N5FOE5PS.js';
|
|
10
|
-
import { childEnvironment } from './chunk-
|
|
10
|
+
import { childEnvironment } from './chunk-VVIRHTH4.js';
|
|
11
11
|
import { CLAUDE_CODE_VERSION } from './chunk-CX22S5BA.js';
|
|
12
12
|
import { waitForAgent, vmExecArgs } from './chunk-6CXYORUS.js';
|
|
13
13
|
import { socketPathProblem, vsockLinks, linkVsockSockets } from './chunk-S6IUUNCD.js';
|
|
14
|
-
import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-
|
|
15
|
-
import { planArtifactUpload } from './chunk-
|
|
16
|
-
import { scrubText } from './chunk-
|
|
14
|
+
import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-DTDZXDQ3.js';
|
|
15
|
+
import { planArtifactUpload } from './chunk-VDI5POCC.js';
|
|
16
|
+
import { scrubText } from './chunk-IU4NZROR.js';
|
|
17
17
|
import { isBuiltinContainer, isBuiltinProcess, isBuiltinVm, DEFAULT_CHECK_TIME_LIMIT_MINUTES } from './chunk-M2PBLRB7.js';
|
|
18
18
|
import { parseSize } from './chunk-7RQ73DLO.js';
|
|
19
19
|
import { claudeCredential, buildEnvironment, JOB_MOUNT, CHECKOUT_DIR, parseIsolation, proxyEnvironment, containerLocalAddress, destinationEnvironment, CLAUDE_CREDENTIAL_VARIABLES, builtInEnvironment, startBuildServices, BUILT_IN_NAMES, AGENT_CREDENTIAL_MISSING, sharedUserEnvironment, headerVariables, withTunnelRecord, RELAY_PORT, checkEnvironment, EVAL_INPUT_DIR } from './chunk-M6G7TJVF.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-
|
|
4
|
-
import { MIN_ENGINE_MAJOR } from './chunk-
|
|
3
|
+
import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-472KC6JV.js';
|
|
4
|
+
import { MIN_ENGINE_MAJOR } from './chunk-BREEX2Z7.js';
|
|
5
5
|
import { RUNNER_DIR_MODE, runnerDir, RUNNER_FILE_MODE } from './chunk-ZM2IMMYN.js';
|
|
6
6
|
import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
7
7
|
import { dirname } from 'path';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { readStatuslineState, STATE_FRESH_MS } from './chunk-F47JBIAW.js';
|
|
4
|
-
import { resolveCredentials, getJson, WorkCommandError } from './chunk-
|
|
5
|
-
import { isLinkedRepository } from './chunk-
|
|
6
|
-
import { sanitizeTerminal } from './chunk-
|
|
7
|
-
import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-
|
|
4
|
+
import { resolveCredentials, getJson, WorkCommandError } from './chunk-DTDZXDQ3.js';
|
|
5
|
+
import { isLinkedRepository } from './chunk-UES67HLJ.js';
|
|
6
|
+
import { sanitizeTerminal } from './chunk-VDI5POCC.js';
|
|
7
|
+
import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-IU4NZROR.js';
|
|
8
8
|
import { C } from './chunk-YRYMNBGQ.js';
|
|
9
9
|
import { readSettings, settingsPath, isOurStatuslineSlot, statuslineWrappedOriginal, REGISTERED_EVENTS, isOurHookCommand, ourCommandBins, cliBinResolvable, ourDirectScriptBins, wrappedOriginalCommand } from './chunk-5QRP3MVS.js';
|
|
10
10
|
import { readPin, readContextManifest, readDegraded, readSourceCache } from './chunk-BMX3L7CR.js';
|
|
@@ -1016,7 +1016,7 @@ async function gatherDoctorChecks() {
|
|
|
1016
1016
|
const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
|
|
1017
1017
|
checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
|
|
1018
1018
|
} else if (hasRunnerBlock(configPath)) {
|
|
1019
|
-
const { runnerHostChecks } = await import('./doctor-
|
|
1019
|
+
const { runnerHostChecks } = await import('./doctor-QSV4DYT2.js');
|
|
1020
1020
|
const hooks = (() => {
|
|
1021
1021
|
try {
|
|
1022
1022
|
return loadRunnerConfig(configPath).hooks;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { sanitizeTerminal } from './chunk-
|
|
4
|
-
import { remoteLookupFailed } from './chunk-
|
|
3
|
+
import { sanitizeTerminal } from './chunk-VDI5POCC.js';
|
|
4
|
+
import { remoteLookupFailed } from './chunk-IU4NZROR.js';
|
|
5
5
|
import { DEFAULT_DASHBOARD } from './chunk-USO2DKBD.js';
|
|
6
6
|
import { resolveGatewayCredentials } from './chunk-PLMTLGYH.js';
|
|
7
7
|
import { readCloudConfig } from './chunk-EABW6AJQ.js';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { ArtifactTombstoneRecordSchema, ArtifactSpoolRecordSchema } from './chunk-YT35WGIP.js';
|
|
4
4
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
5
|
-
import { mkdirSync, appendFileSync, writeFileSync, renameSync,
|
|
5
|
+
import { mkdirSync, appendFileSync, writeFileSync, renameSync, unlinkSync, existsSync, readdirSync, readFileSync, statSync } from 'fs';
|
|
6
6
|
import { join, dirname } from 'path';
|
|
7
7
|
|
|
8
8
|
createRequire(import.meta.url);
|
|
@@ -15,6 +15,9 @@ function artifactBlobsDir(home = homeFromEnv()) {
|
|
|
15
15
|
function artifactsStatePath(home = homeFromEnv()) {
|
|
16
16
|
return join(home, ".outerlayer", "spool", "artifacts.state.json");
|
|
17
17
|
}
|
|
18
|
+
function artifactsLockPath(home = homeFromEnv()) {
|
|
19
|
+
return join(home, ".outerlayer", "spool", "artifacts.lock");
|
|
20
|
+
}
|
|
18
21
|
var ARTIFACT_RETRY_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1e3;
|
|
19
22
|
function appendArtifactRecord(record, home = homeFromEnv()) {
|
|
20
23
|
const path = artifactsSpoolPath(home);
|
|
@@ -239,6 +242,81 @@ function writeArtifactSpoolState(state, home = homeFromEnv()) {
|
|
|
239
242
|
return false;
|
|
240
243
|
}
|
|
241
244
|
}
|
|
245
|
+
var ARTIFACT_LOCK_STALE_MS = 30 * 60 * 1e3;
|
|
246
|
+
var ARTIFACT_LOCK_WAIT_MS = 2 * 60 * 1e3;
|
|
247
|
+
var ARTIFACT_LOCK_POLL_MS = 250;
|
|
248
|
+
function processIsAlive(pid) {
|
|
249
|
+
try {
|
|
250
|
+
process.kill(pid, 0);
|
|
251
|
+
return true;
|
|
252
|
+
} catch (err) {
|
|
253
|
+
return err.code === "EPERM";
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
function artifactLockIsStale(path, nowMs, isAlive) {
|
|
257
|
+
let raw;
|
|
258
|
+
let mtimeMs;
|
|
259
|
+
try {
|
|
260
|
+
raw = readFileSync(path, "utf8");
|
|
261
|
+
mtimeMs = statSync(path).mtimeMs;
|
|
262
|
+
} catch {
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
if (nowMs - mtimeMs > ARTIFACT_LOCK_STALE_MS) return true;
|
|
266
|
+
try {
|
|
267
|
+
const pid = JSON.parse(raw).pid;
|
|
268
|
+
return typeof pid === "number" && !isAlive(pid);
|
|
269
|
+
} catch {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
async function acquireArtifactSpoolLock(home = homeFromEnv(), opts = {}) {
|
|
274
|
+
const path = artifactsLockPath(home);
|
|
275
|
+
const waitMs = opts.waitMs ?? ARTIFACT_LOCK_WAIT_MS;
|
|
276
|
+
const sleep = opts.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
277
|
+
const isAlive = opts.isAlive ?? processIsAlive;
|
|
278
|
+
const now = opts.now ?? Date.now;
|
|
279
|
+
const deadline = now() + waitMs;
|
|
280
|
+
try {
|
|
281
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
282
|
+
} catch (err) {
|
|
283
|
+
return { ok: false, reason: `cannot create ${dirname(path)}: ${String(err)}` };
|
|
284
|
+
}
|
|
285
|
+
for (; ; ) {
|
|
286
|
+
try {
|
|
287
|
+
writeFileSync(path, JSON.stringify({ pid: process.pid, t: (/* @__PURE__ */ new Date()).toISOString() }), { flag: "wx" });
|
|
288
|
+
let released = false;
|
|
289
|
+
return {
|
|
290
|
+
ok: true,
|
|
291
|
+
// Once only: a second unlink could remove a lock another sync has
|
|
292
|
+
// taken since.
|
|
293
|
+
release: () => {
|
|
294
|
+
if (released) return;
|
|
295
|
+
released = true;
|
|
296
|
+
try {
|
|
297
|
+
unlinkSync(path);
|
|
298
|
+
} catch {
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
} catch (err) {
|
|
303
|
+
if (err.code !== "EEXIST") {
|
|
304
|
+
return { ok: false, reason: `cannot create ${path}: ${String(err)}` };
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (artifactLockIsStale(path, now(), isAlive)) {
|
|
308
|
+
try {
|
|
309
|
+
unlinkSync(path);
|
|
310
|
+
} catch {
|
|
311
|
+
}
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
if (now() >= deadline) {
|
|
315
|
+
return { ok: false, reason: `another outerlayer sync has held ${path} for longer than ${Math.round(waitMs / 1e3)}s` };
|
|
316
|
+
}
|
|
317
|
+
await sleep(ARTIFACT_LOCK_POLL_MS);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
242
320
|
function migrateLegacyArtifactSidecars(home = homeFromEnv()) {
|
|
243
321
|
if (existsSync(artifactsStatePath(home))) return;
|
|
244
322
|
const paths = legacySidecarPaths(home);
|
|
@@ -380,4 +458,4 @@ function resolveArtifactTurnIndex(turns, filename) {
|
|
|
380
458
|
return found;
|
|
381
459
|
}
|
|
382
460
|
|
|
383
|
-
export { ARTIFACT_RETRY_MAX_AGE_MS, appendArtifactRecord, appendArtifactTombstone, artifactBlobsDir, artifactsSpoolPath, artifactsStatePath, findPendingArtifactRecord, isArtifactTombstoned, localArtifactIds, migrateLegacyArtifactSidecars, neededArtifactShas, planArtifactUpload, readEffectiveArtifactSpoolState, reclaimUnneededArtifactBlobs, resolveArtifactTurnIndex, sanitizeTerminal, writeArtifactSpoolState };
|
|
461
|
+
export { ARTIFACT_RETRY_MAX_AGE_MS, acquireArtifactSpoolLock, appendArtifactRecord, appendArtifactTombstone, artifactBlobsDir, artifactsSpoolPath, artifactsStatePath, findPendingArtifactRecord, isArtifactTombstoned, localArtifactIds, migrateLegacyArtifactSidecars, neededArtifactShas, planArtifactUpload, readEffectiveArtifactSpoolState, reclaimUnneededArtifactBlobs, resolveArtifactTurnIndex, sanitizeTerminal, writeArtifactSpoolState };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { RecipeError } from './chunk-QOZKPLVJ.js';
|
|
4
|
-
import { trackImageBuild, isOutOfMemory, ensureBuilder } from './chunk-
|
|
4
|
+
import { trackImageBuild, isOutOfMemory, ensureBuilder } from './chunk-JSUUXA5W.js';
|
|
5
5
|
import { spawn } from 'child_process';
|
|
6
6
|
import { existsSync, mkdirSync, createWriteStream, rmSync, readFileSync } from 'fs';
|
|
7
7
|
import { join, dirname } from 'path';
|
|
@@ -4,8 +4,8 @@ import { LaunchFilter } from './chunk-HHJDN6AU.js';
|
|
|
4
4
|
import { RepoFilter } from './chunk-TBT347UY.js';
|
|
5
5
|
import { hookExecSpoolPath } from './chunk-F7CU5ABH.js';
|
|
6
6
|
import { applyReportedCost } from './chunk-BKO6JEZI.js';
|
|
7
|
-
import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-
|
|
8
|
-
import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-
|
|
7
|
+
import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, acquireArtifactSpoolLock, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-VDI5POCC.js';
|
|
8
|
+
import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-IU4NZROR.js';
|
|
9
9
|
import { C } from './chunk-YRYMNBGQ.js';
|
|
10
10
|
import { readLaunchSpoolState, launchStatusIsDecisive, launchedItemsBySession, launchesPath } from './chunk-GQD22KKN.js';
|
|
11
11
|
import { readLatestProvenanceForSession, readContextProvenance } from './chunk-ZJSNLVCE.js';
|
|
@@ -1553,20 +1553,34 @@ ${C.yellow}!${C.reset} batch ${shippedBatches + 1}/${batches.length} accounting
|
|
|
1553
1553
|
}
|
|
1554
1554
|
let artifactsUploaded;
|
|
1555
1555
|
let artifactsHeld;
|
|
1556
|
-
|
|
1556
|
+
const artifactLock = combinedRecords.length > 0 || artifactPlan.held.length > 0 ? await acquireArtifactSpoolLock(home, { waitMs: opts.artifactLockWaitMs }) : void 0;
|
|
1557
|
+
if (artifactLock !== void 0 && !artifactLock.ok) {
|
|
1558
|
+
artifactsUploaded = 0;
|
|
1559
|
+
artifactsHeld = combinedRecords.length + artifactPlan.held.length;
|
|
1560
|
+
if (!opts.quiet) {
|
|
1561
|
+
process.stderr.write(
|
|
1562
|
+
`${C.yellow}!${C.reset} artifacts not attempted: ${artifactLock.reason} \u2014 ${artifactsHeld} record(s) stay queued for the next sync
|
|
1563
|
+
`
|
|
1564
|
+
);
|
|
1565
|
+
}
|
|
1566
|
+
}
|
|
1567
|
+
const releaseArtifactLock = artifactLock?.ok === true ? artifactLock.release : () => {
|
|
1568
|
+
};
|
|
1569
|
+
const livePlan = artifactLock?.ok === true ? planArtifactUpload({ home }) : void 0;
|
|
1570
|
+
if (livePlan !== void 0) {
|
|
1557
1571
|
const artifactEndpoint = new URL("/v1/artifacts", url).toString();
|
|
1558
1572
|
const nowMs = Date.now();
|
|
1559
|
-
const state =
|
|
1573
|
+
const state = livePlan.state;
|
|
1560
1574
|
const failedOrDroppedThisRun = /* @__PURE__ */ new Set();
|
|
1561
1575
|
let uploadedCount = 0;
|
|
1562
|
-
let heldCount =
|
|
1576
|
+
let heldCount = livePlan.held.length;
|
|
1563
1577
|
let droppedCount = 0;
|
|
1564
1578
|
const warn = (message) => {
|
|
1565
1579
|
if (!opts.quiet) process.stderr.write(`${C.yellow}!${C.reset} ${message}
|
|
1566
1580
|
`);
|
|
1567
1581
|
};
|
|
1568
1582
|
let unauthorized;
|
|
1569
|
-
for (const { record } of
|
|
1583
|
+
for (const { record } of livePlan.candidates) {
|
|
1570
1584
|
const name = sanitizeTerminal(record.filename);
|
|
1571
1585
|
const holdReason = artifactHoldReason(record.sessionId);
|
|
1572
1586
|
if (holdReason !== void 0) {
|
|
@@ -1597,7 +1611,9 @@ ${C.yellow}!${C.reset} batch ${shippedBatches + 1}/${batches.length} accounting
|
|
|
1597
1611
|
reachedServer: true
|
|
1598
1612
|
});
|
|
1599
1613
|
failedOrDroppedThisRun.add(record.artifactId);
|
|
1600
|
-
warn(
|
|
1614
|
+
warn(
|
|
1615
|
+
`artifact ${name} (${record.artifactId}): blob missing from the spool \u2014 ${join(artifactBlobsDir(home), record.sha256)} does not exist; dropping the record`
|
|
1616
|
+
);
|
|
1601
1617
|
droppedCount += 1;
|
|
1602
1618
|
continue;
|
|
1603
1619
|
}
|
|
@@ -1738,11 +1754,13 @@ ${C.yellow}!${C.reset} batch ${shippedBatches + 1}/${batches.length} accounting
|
|
|
1738
1754
|
);
|
|
1739
1755
|
}
|
|
1740
1756
|
reclaimUnneededArtifactBlobs(home, neededArtifactShas(home, state));
|
|
1757
|
+
releaseArtifactLock();
|
|
1741
1758
|
if (unauthorized) {
|
|
1742
1759
|
failureContext();
|
|
1743
1760
|
throw unauthorized;
|
|
1744
1761
|
}
|
|
1745
1762
|
}
|
|
1763
|
+
releaseArtifactLock();
|
|
1746
1764
|
if (shippedBatches === batches.length && (opts.url || opts.apiKey || opts.appId)) {
|
|
1747
1765
|
if (isLoopbackUrl(url)) {
|
|
1748
1766
|
if (!opts.quiet) {
|
|
@@ -34,17 +34,17 @@ async function fetchTarballDigest(url, fetchImpl) {
|
|
|
34
34
|
}
|
|
35
35
|
async function fetchProvenance(version, fetchImpl) {
|
|
36
36
|
const response = await get(`${REGISTRY_URL}/-/npm/v1/attestations/${PACKAGE_PATH}@${encodeURIComponent(version)}`, fetchImpl);
|
|
37
|
-
if (response.status === 404) return
|
|
37
|
+
if (response.status === 404) return { kind: "absent" };
|
|
38
38
|
if (!response.ok) throw new Error(`the registry answered HTTP ${response.status} for the attestations of ${PACKAGE_NAME}@${version}`);
|
|
39
39
|
const body = await response.json();
|
|
40
40
|
const slsa = (body.attestations ?? []).find((a) => a.predicateType === SLSA_PREDICATE);
|
|
41
41
|
const payload = slsa?.bundle?.dsseEnvelope?.payload;
|
|
42
|
-
if (typeof payload !== "string") return
|
|
42
|
+
if (typeof payload !== "string") return { kind: "unreadable" };
|
|
43
43
|
const statement = JSON.parse(Buffer.from(payload, "base64").toString("utf8"));
|
|
44
44
|
const workflow = statement.predicate?.buildDefinition?.externalParameters?.workflow;
|
|
45
45
|
const subjectSha512 = statement.subject?.[0]?.digest?.sha512;
|
|
46
|
-
if (typeof workflow?.repository !== "string" || typeof workflow.path !== "string" || typeof subjectSha512 !== "string") return
|
|
47
|
-
return { repository: workflow.repository, workflowPath: workflow.path, subjectSha512 };
|
|
46
|
+
if (typeof workflow?.repository !== "string" || typeof workflow.path !== "string" || typeof subjectSha512 !== "string") return { kind: "unreadable" };
|
|
47
|
+
return { kind: "found", repository: workflow.repository, workflowPath: workflow.path, subjectSha512 };
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
// src/runner/update/npm.ts
|