@outerlayer/cli 0.9.0 → 0.10.1

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.
Files changed (49) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +5 -3
  3. package/dist/build-info.json +1 -1
  4. package/dist/{builder-5DKTBWT3.js → builder-EVO6F2NO.js} +2 -2
  5. package/dist/{check-VJRJ2KQ4.js → check-RBRRI77E.js} +15 -15
  6. package/dist/{chunk-QPPPUKQJ.js → chunk-472KC6JV.js} +1 -1
  7. package/dist/{chunk-YCPV7FN6.js → chunk-4AVAETSU.js} +8 -8
  8. package/dist/{chunk-LBU4CLK5.js → chunk-BREEX2Z7.js} +4 -4
  9. package/dist/{chunk-KWCJLAHQ.js → chunk-DTDZXDQ3.js} +3 -3
  10. package/dist/{chunk-XGCJNSI7.js → chunk-ESZJ5QIC.js} +4 -4
  11. package/dist/{chunk-VMK7I3TB.js → chunk-HKUH5AR2.js} +2 -2
  12. package/dist/chunk-I263FZ3A.js +178 -0
  13. package/dist/{chunk-LTJPX7TX.js → chunk-IU4NZROR.js} +249 -18
  14. package/dist/{chunk-TV36SKEN.js → chunk-JSUUXA5W.js} +1 -1
  15. package/dist/{chunk-OSKO3PAL.js → chunk-KZ5M4QOB.js} +7 -7
  16. package/dist/{chunk-WJBJY5DQ.js → chunk-MC6J453K.js} +2 -2
  17. package/dist/{chunk-XZNO4QED.js → chunk-R2UYH4QV.js} +5 -5
  18. package/dist/{chunk-LYESSQUA.js → chunk-UES67HLJ.js} +2 -2
  19. package/dist/{chunk-ZEQMTBRD.js → chunk-VDI5POCC.js} +80 -2
  20. package/dist/{chunk-FKFGQJNN.js → chunk-VVIRHTH4.js} +1 -1
  21. package/dist/{chunk-543OT6V5.js → chunk-Y6P5XX2B.js} +25 -7
  22. package/dist/{chunk-KPUJGBA4.js → chunk-ZQ5JGHUO.js} +2 -2
  23. package/dist/{cli-7RQYILJT.js → cli-G6TH4YMK.js} +49 -49
  24. package/dist/{command-2LYWVGIK.js → command-LNEFKIVC.js} +9 -9
  25. package/dist/{connect-cmd-MPZWSEKY.js → connect-cmd-5MIUNYAY.js} +3 -3
  26. package/dist/{dist-QY5CL5LB.js → dist-3M3ZMEZF.js} +1 -1
  27. package/dist/{docker-V7B6UKPF.js → docker-GM526LGX.js} +3 -3
  28. package/dist/{doctor-PUAL5LTL.js → doctor-QSV4DYT2.js} +11 -11
  29. package/dist/{emit-artifact-cmd-P3IWNSQY.js → emit-artifact-cmd-VKPW577P.js} +5 -5
  30. package/dist/{emit-criteria-cmd-GOSP6X74.js → emit-criteria-cmd-U2TL6FYY.js} +4 -4
  31. package/dist/{emit-finding-cmd-D554IQKU.js → emit-finding-cmd-TMOOKHPD.js} +4 -4
  32. package/dist/{emit-result-cmd-QACXTIBV.js → emit-result-cmd-GKBVPMU4.js} +5 -5
  33. package/dist/index.js +1 -1
  34. package/dist/{init-TMBE3BRN.js → init-OKCDXEOG.js} +10 -10
  35. package/dist/{init-WX5XE6L3.js → init-ORDCPTFD.js} +10 -10
  36. package/dist/{init-cmd-4FQKQLJ5.js → init-cmd-5TEM2QNH.js} +6 -6
  37. package/dist/{loop-QLL4DKRF.js → loop-ZNUQT736.js} +15 -15
  38. package/dist/{machine-7T7FBSUL.js → machine-TBJKZ6TN.js} +9 -9
  39. package/dist/{session-sender-HVWTYG35.js → session-sender-E3UHGSNV.js} +4 -4
  40. package/dist/{status-SMF5JG2K.js → status-KPDVZMJ6.js} +11 -11
  41. package/dist/{sync-cmd-SLMPCUXO.js → sync-cmd-ULKXCHO2.js} +3 -3
  42. package/dist/{watch-TLM5QN5X.js → watch-IU6NHB4K.js} +3 -3
  43. package/dist/{work-claim-cmd-VSSZDFY5.js → work-claim-cmd-DYD6II56.js} +6 -6
  44. package/dist/{work-cmd-TK4VOOHL.js → work-cmd-ZJY3NA2G.js} +5 -5
  45. package/dist/{work-comment-cmd-VQCG72ZQ.js → work-comment-cmd-34FTLPUO.js} +5 -5
  46. package/dist/{work-open-pr-cmd-ZYOC5SPB.js → work-open-pr-cmd-N2RBDKZ4.js} +16 -8
  47. package/dist/{work-pr-cmd-MX6UO5GO.js → work-pr-cmd-EXTOGBJC.js} +6 -5
  48. package/package.json +1 -1
  49. package/dist/chunk-5MF73XCV.js +0 -103
@@ -21971,15 +21971,15 @@ var ModelRegistryImpl = class {
21971
21971
  };
21972
21972
  var models_default = {
21973
21973
  version: "1.0.0",
21974
- generatedAt: "2026-10-06T05:36:56.720Z",
21974
+ generatedAt: "2026-10-07T05:07:15.321Z",
21975
21975
  sources: {
21976
21976
  litellm: {
21977
- fetchedAt: "2026-10-06T05:36:56.720Z",
21978
- modelCount: 1890
21977
+ fetchedAt: "2026-10-07T05:07:15.321Z",
21978
+ modelCount: 1896
21979
21979
  },
21980
21980
  openrouter: {
21981
- fetchedAt: "2026-10-06T05:36:56.720Z",
21982
- modelCount: 198
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: "image_generation",
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: "image_generation",
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: 125e-8,
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: 3e-6,
56518
- outputCostPerToken: 15e-6,
56519
- cacheReadCostPerToken: 3e-7
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: 9e-8,
57867
- outputCostPerToken: 282e-9
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: "2026-10-03"
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: 131072,
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: 131072,
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-LTJPX7TX.js';
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-VMK7I3TB.js';
4
+ import { senderPidfile } from './chunk-HKUH5AR2.js';
5
5
  import { DOCKERD_LOG } from './chunk-V42JY4F6.js';
6
- import { installScrubContext } from './chunk-543OT6V5.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-LBU4CLK5.js';
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-FKFGQJNN.js';
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-KWCJLAHQ.js';
15
- import { planArtifactUpload } from './chunk-ZEQMTBRD.js';
16
- import { scrubText } from './chunk-LTJPX7TX.js';
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-QPPPUKQJ.js';
4
- import { MIN_ENGINE_MAJOR } from './chunk-LBU4CLK5.js';
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-KWCJLAHQ.js';
5
- import { isLinkedRepository } from './chunk-LYESSQUA.js';
6
- import { sanitizeTerminal } from './chunk-ZEQMTBRD.js';
7
- import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-LTJPX7TX.js';
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-PUAL5LTL.js');
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-ZEQMTBRD.js';
4
- import { remoteLookupFailed } from './chunk-LTJPX7TX.js';
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, existsSync, unlinkSync, readdirSync, readFileSync } from 'fs';
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-TV36SKEN.js';
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-ZEQMTBRD.js';
8
- import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-LTJPX7TX.js';
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
- if (combinedRecords.length > 0 || artifactPlan.held.length > 0) {
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 = artifactPlan.state;
1573
+ const state = livePlan.state;
1560
1574
  const failedOrDroppedThisRun = /* @__PURE__ */ new Set();
1561
1575
  let uploadedCount = 0;
1562
- let heldCount = artifactPlan.held.length;
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 combinedRecords) {
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(`artifact ${name}: blob missing from the spool \u2014 dropping the record`);
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) {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-LYESSQUA.js';
4
- import { resolveRepoIdentity } from './chunk-LTJPX7TX.js';
3
+ import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-UES67HLJ.js';
4
+ import { resolveRepoIdentity } from './chunk-IU4NZROR.js';
5
5
  import { resolveGatewayCredentials } from './chunk-PLMTLGYH.js';
6
6
  import { findGitDirs, readRepoConnection } from './chunk-BJ3KTMDH.js';
7
7
  import { homeFromEnv } from './chunk-VNVZDWO3.js';