lightning-sdk 2025.7.31__py3-none-any.whl → 2025.8.6rc0__py3-none-any.whl

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.
lightning_sdk/__init__.py CHANGED
@@ -32,6 +32,6 @@ __all__ = [
32
32
  "User",
33
33
  ]
34
34
 
35
- __version__ = "2025.07.31"
35
+ __version__ = "2025.08.06rc0"
36
36
  _check_version_and_prompt_upgrade(__version__)
37
37
  _set_tqdm_envvars_noninteractive()
@@ -103,7 +103,7 @@ class ExecHealthCheck(HealthCheck):
103
103
  self,
104
104
  command: str,
105
105
  initial_delay_seconds: int = 0,
106
- failure_threshold: int = 600,
106
+ failure_threshold: int = 3600,
107
107
  interval_seconds: int = 1,
108
108
  timeout_seconds: int = 30,
109
109
  ) -> None:
@@ -132,7 +132,7 @@ class HttpHealthCheck(HealthCheck):
132
132
  path: str,
133
133
  port: float,
134
134
  initial_delay_seconds: int = 0,
135
- failure_threshold: int = 600,
135
+ failure_threshold: int = 3600,
136
136
  interval_seconds: int = 1,
137
137
  timeout_seconds: int = 30,
138
138
  ) -> None:
@@ -538,10 +538,10 @@ def to_health_check(
538
538
  # Use Default health check if none is provided
539
539
  if not health_check:
540
540
  return V1JobHealthCheckConfig(
541
- failure_threshold=600,
541
+ failure_threshold=3600,
542
542
  initial_delay_seconds=0,
543
543
  interval_seconds=1,
544
- timeout_seconds=600,
544
+ timeout_seconds=60,
545
545
  )
546
546
 
547
547
  health_check_config = V1JobHealthCheckConfig(
@@ -574,6 +574,7 @@ def to_spec(
574
574
  include_credentials: Optional[bool] = None,
575
575
  cloudspace_id: Optional[None] = None,
576
576
  max_runtime: Optional[int] = None,
577
+ machine_image_version: Optional[str] = None,
577
578
  ) -> V1JobSpec:
578
579
  if cloud_account is None:
579
580
  raise ValueError("The cloud account should be defined.")
@@ -607,6 +608,7 @@ def to_spec(
607
608
  quantity=quantity,
608
609
  include_credentials=include_credentials,
609
610
  cloudspace_id=cloudspace_id,
611
+ machine_image_version=machine_image_version,
610
612
  **optional_spec_kwargs,
611
613
  )
612
614
 
@@ -288,6 +288,7 @@ class JobApiV2:
288
288
  artifacts_local: Optional[str], # deprecated in favor of path_mappings
289
289
  artifacts_remote: Optional[str], # deprecated in favor of path_mappings)
290
290
  max_runtime: Optional[int] = None,
291
+ machine_image_version: Optional[str] = None,
291
292
  ) -> ProjectIdJobsBody:
292
293
  env_vars = []
293
294
  if env is not None:
@@ -322,6 +323,7 @@ class JobApiV2:
322
323
  image_cluster_credentials=cloud_account_auth,
323
324
  image_secret_ref=image_credentials or "",
324
325
  path_mappings=path_mappings_list,
326
+ machine_image_version=machine_image_version,
325
327
  **optional_spec_kwargs,
326
328
  )
327
329
  return ProjectIdJobsBody(name=name, spec=spec)
@@ -129,6 +129,7 @@ class MMTApiV2:
129
129
  artifacts_local: Optional[str], # deprecated in favor of path_mappings
130
130
  artifacts_remote: Optional[str], # deprecated in favor of path_mappings
131
131
  max_runtime: Optional[int] = None,
132
+ machine_image_version: Optional[str] = None,
132
133
  ) -> ProjectIdMultimachinejobsBody:
133
134
  env_vars = []
134
135
  if env is not None:
@@ -163,6 +164,7 @@ class MMTApiV2:
163
164
  image_cluster_credentials=cloud_account_auth,
164
165
  image_secret_ref=image_credentials or "",
165
166
  path_mappings=path_mappings_list,
167
+ machine_image_version=machine_image_version,
166
168
  **optional_spec_kwargs,
167
169
  )
168
170
  return ProjectIdMultimachinejobsBody(
@@ -76,6 +76,7 @@ class PipelineApi:
76
76
  parent_resource_id=parent_pipeline_id or "",
77
77
  resource_type=V1ScheduleResourceType.PIPELINE,
78
78
  timezone=schedule.timezone,
79
+ parallel_runs=schedule.parallel_runs or False,
79
80
  )
80
81
 
81
82
  self._client.schedules_service_create_schedule(body, teamspace.id)
@@ -171,14 +171,18 @@ class Deployment:
171
171
  if self._is_created:
172
172
  raise RuntimeError("This deployment has already been started.")
173
173
 
174
+ machine_image_version = None
175
+
174
176
  if isinstance(studio, Studio):
175
177
  cloudspace_id = studio._studio.id
176
178
  cloud_account = studio._studio.cluster_id
179
+ machine_image_version = studio._studio.machine_image_version
177
180
 
178
181
  if isinstance(studio, str):
179
182
  studio = Studio(studio)
180
183
  cloudspace_id = studio._studio.id
181
184
  cloud_account = studio._studio.cluster_id
185
+ machine_image_version = studio._studio.machine_image_version
182
186
 
183
187
  if cloud_account is None:
184
188
  cloud_account = _resolve_deprecated_cluster(cloud_account, cluster)
@@ -233,6 +237,7 @@ class Deployment:
233
237
  include_credentials=include_credentials if include_credentials is not None else True,
234
238
  cloudspace_id=cloudspace_id,
235
239
  max_runtime=max_runtime,
240
+ machine_image_version=machine_image_version,
236
241
  ),
237
242
  strategy=to_strategy(release_strategy),
238
243
  ),
@@ -43,14 +43,7 @@ class Auth:
43
43
  for key in Keys:
44
44
  setattr(self, key.suffix, os.environ.get(key.value, None))
45
45
 
46
- # used by authenticate method
47
- self._with_env_var = bool(self.user_id and self.api_key)
48
- if self.api_key and not self.user_id:
49
- raise ValueError(
50
- f"{Keys.USER_ID.value} is missing from env variables. "
51
- "To use env vars for authentication both "
52
- f"{Keys.USER_ID.value} and {Keys.API_KEY.value} should be set."
53
- )
46
+ self._with_env_var = bool(self.api_key)
54
47
 
55
48
  def load(self) -> bool:
56
49
  """Load credentials from disk and update properties with credentials.
@@ -79,7 +79,7 @@ class PipelinePrinter:
79
79
 
80
80
  for schedule in self._schedules:
81
81
  self._print(
82
- f" - '{schedule.name}' runs on cron schedule: `{schedule.cron_expression} in timezone {schedule.timezone or 'UTC'}`" # noqa: E501
82
+ f" - '{schedule.name}' runs on cron schedule: `{schedule.cron_expression} in timezone {schedule.timezone or 'UTC'}` with parallel_runs={schedule.parallel_runs or False}" # noqa: E501
83
83
  )
84
84
 
85
85
  def _print_footer(self) -> None:
@@ -846,6 +846,14 @@ _TIMEZONES_TYPE = Literal[
846
846
 
847
847
  @dataclass
848
848
  class Schedule:
849
+ # The cron expression used for the schedule to execute upon
849
850
  cron_expression: str
851
+
852
+ # The name of the schedule
850
853
  name: Optional[str] = None
854
+
855
+ # The timezone used by the schedule. Default to UTC
851
856
  timezone: Optional[_TIMEZONES_TYPE] = None
857
+
858
+ # Whether the schedule is allowed to create multiple running pipeline at the same time. Default is False
859
+ parallel_runs: Optional[bool] = None
@@ -59,6 +59,7 @@ class DeploymentStep:
59
59
  include_credentials: Optional[bool] = None,
60
60
  max_runtime: Optional[int] = None,
61
61
  wait_for: Optional[Union[str, List[str]]] = DEFAULT,
62
+ cloud_provider: Optional[Union["CloudProvider", str]] = None,
62
63
  ) -> None:
63
64
  self.name = name
64
65
  self.studio = _get_studio(studio)
@@ -99,11 +100,28 @@ class DeploymentStep:
99
100
  self.include_credentials = include_credentials or True
100
101
  self.max_runtime = max_runtime
101
102
  self.wait_for = wait_for
103
+ self.cloud_provider = cloud_provider
102
104
 
103
105
  def to_proto(
104
106
  self, teamspace: "Teamspace", cloud_account: str, shared_filesystem: Union[bool, V1SharedFilesystem]
105
107
  ) -> V1PipelineStep:
106
- _validate_cloud_account(cloud_account, self.cloud_account, shared_filesystem)
108
+ machine_image_version = None
109
+
110
+ studio = _get_studio(self.studio)
111
+ if isinstance(studio, Studio):
112
+ machine_image_version = studio._studio.machine_image_version
113
+
114
+ if self.cloud_account is None:
115
+ self.cloud_account = studio.cloud_account
116
+ elif studio.cloud_account != self.cloud_account:
117
+ raise ValueError("The provided cloud account doesn't match the studio")
118
+
119
+ resolved_cloud_account = CloudAccountApi().resolve_cloud_account(
120
+ teamspace.id, self.cloud_account, self.cloud_provider, teamspace.default_cloud_account
121
+ )
122
+
123
+ _validate_cloud_account(cloud_account, resolved_cloud_account, shared_filesystem)
124
+
107
125
  return V1PipelineStep(
108
126
  name=self.name,
109
127
  type=V1PipelineStepType.DEPLOYMENT,
@@ -127,6 +145,7 @@ class DeploymentStep:
127
145
  cloudspace_id=self.studio._studio.id if self.studio else None,
128
146
  include_credentials=self.include_credentials,
129
147
  max_runtime=self.max_runtime,
148
+ machine_image_version=machine_image_version,
130
149
  ),
131
150
  strategy=to_strategy(self.release_strategy),
132
151
  ),
@@ -186,8 +205,12 @@ class JobStep:
186
205
  def to_proto(
187
206
  self, teamspace: "Teamspace", cloud_account: str, shared_filesystem: Union[bool, V1SharedFilesystem]
188
207
  ) -> V1PipelineStep:
208
+ machine_image_version = None
209
+
189
210
  studio = _get_studio(self.studio)
190
211
  if isinstance(studio, Studio):
212
+ machine_image_version = studio._studio.machine_image_version
213
+
191
214
  if self.cloud_account is None:
192
215
  self.cloud_account = studio.cloud_account
193
216
  elif studio.cloud_account != self.cloud_account:
@@ -215,6 +238,7 @@ class JobStep:
215
238
  artifacts_local=None,
216
239
  artifacts_remote=None,
217
240
  max_runtime=self.max_runtime,
241
+ machine_image_version=machine_image_version,
218
242
  )
219
243
 
220
244
  return V1PipelineStep(
@@ -277,8 +301,12 @@ class MMTStep:
277
301
  def to_proto(
278
302
  self, teamspace: "Teamspace", cloud_account: str, shared_filesystem: Union[bool, V1SharedFilesystem]
279
303
  ) -> V1PipelineStep:
304
+ machine_image_version = None
305
+
280
306
  studio = _get_studio(self.studio)
281
307
  if isinstance(studio, Studio):
308
+ machine_image_version = studio._studio.machine_image_version
309
+
282
310
  if self.cloud_account is None:
283
311
  self.cloud_account = studio.cloud_account
284
312
  elif studio.cloud_account != self.cloud_account:
@@ -303,6 +331,7 @@ class MMTStep:
303
331
  artifacts_local=None, # deprecated in favor of path_mappings
304
332
  artifacts_remote=None, # deprecated in favor of path_mappings
305
333
  max_runtime=self.max_runtime,
334
+ machine_image_version=machine_image_version,
306
335
  )
307
336
 
308
337
  return V1PipelineStep(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lightning_sdk
3
- Version: 2025.7.31
3
+ Version: 2025.8.6rc0
4
4
  Summary: SDK to develop using Lightning AI Studios
5
5
  Author-email: Lightning-AI <justus@lightning.ai>
6
6
  License: MIT License
@@ -1,5 +1,5 @@
1
1
  docs/source/conf.py,sha256=r8yX20eC-4mHhMTd0SbQb5TlSWHhO6wnJ0VJ_FBFpag,13249
2
- lightning_sdk/__init__.py,sha256=zd8VwazBksgrSLucvSt3QkOCRfmRiifF-n4_dC4jV98,1145
2
+ lightning_sdk/__init__.py,sha256=I-NEEYsT0l2oHbX8ai0KlhtH5pqVw2A_Hh4oJP29_6o,1148
3
3
  lightning_sdk/agents.py,sha256=ly6Ma1j0ZgGPFyvPvMN28JWiB9dATIstFa5XM8pMi6I,1577
4
4
  lightning_sdk/ai_hub.py,sha256=iI1vNhgcz_Ff1c3rN1ogN7dK-r-HXRj6NMtS2cA14UA,6925
5
5
  lightning_sdk/base_studio.py,sha256=_Pwwl37R9GRd7t-f2kO5aQXiLNrP4sUtUNht2ZkP8LE,3678
@@ -22,14 +22,14 @@ lightning_sdk/api/agents_api.py,sha256=G47TbFo9kYqnBMqdw2RW-lfS1VAUBSXDmzs6fpIEM
22
22
  lightning_sdk/api/ai_hub_api.py,sha256=azqDZ-PzasVAcoQHno7k7OO_xFOHQ4NDozxF8jEh83Y,7864
23
23
  lightning_sdk/api/base_studio_api.py,sha256=3R8tucZX2e9yKHBcY2rWFRP4dxqLrC6H75vdBDkH0ck,3617
24
24
  lightning_sdk/api/cloud_account_api.py,sha256=Rxet7QuXjzkeAok-_azvB0r_koO7K-NioAldmFVsibs,8223
25
- lightning_sdk/api/deployment_api.py,sha256=ys9HspgKMTehF_h8IIxXO51UNXRjqgPPVctSp0m1iAE,24748
26
- lightning_sdk/api/job_api.py,sha256=I1ks0g1WrLZa7aN0fZz_LSa_lJmma1XYs7Cz-gaw5CY,16300
25
+ lightning_sdk/api/deployment_api.py,sha256=v2AfoTDkQ-1CBh75FOjFkRpf6yc3U_edDy43uYSn19I,24852
26
+ lightning_sdk/api/job_api.py,sha256=7spFPyotlSQ0Krx6WymslnpSQaaeOmFkydvhtg6p0Ic,16410
27
27
  lightning_sdk/api/license_api.py,sha256=XV3RhefyPQDYjwY9AaBZe4rByZTEAnsvLDxcdm9q0Wo,2438
28
28
  lightning_sdk/api/lit_container_api.py,sha256=jCJVwd-3MNjejL9FyvH89pzt-SeG3G8qCJD16iTMJAQ,11454
29
29
  lightning_sdk/api/llm_api.py,sha256=oc3OB1l0Jca5Nc6MAkfI-Nq-42hXJkgmkSqn22J4TeA,9261
30
- lightning_sdk/api/mmt_api.py,sha256=FQSEbe2Pui5amqnNTyo3FJbfNGaAr6bsYSF5fUGs8FI,10589
30
+ lightning_sdk/api/mmt_api.py,sha256=hIBsGiJ2qn5UjcHDxP5WUyKGT_AIFfpSHrQVwg0afBw,10699
31
31
  lightning_sdk/api/org_api.py,sha256=Ze3z_ATVrukobujV5YdC42DKj45Vuwl7X52q_Vr-o3U,803
32
- lightning_sdk/api/pipeline_api.py,sha256=t8QiFxExXJB-LzsFmDTJB-IXjiNw_F77B33iYKpiGzk,4554
32
+ lightning_sdk/api/pipeline_api.py,sha256=rJYp_FN7uUjC5xbc6K67l2eRSmVuOkijd5i8Nm5BF7I,4621
33
33
  lightning_sdk/api/studio_api.py,sha256=LbZQ2HtOHNcLXLtrOtG1jhkqNOhqfelBxIQy6lSbirQ,32306
34
34
  lightning_sdk/api/teamspace_api.py,sha256=CsaaxmaLmTRIRwu37wtQ3quGYql62HJT3BZJ3Q-1d9c,16854
35
35
  lightning_sdk/api/user_api.py,sha256=sL7RIjjtmZmvCZWx7BBZslhj1BeNh4Idn-RVcdmf7M0,2598
@@ -65,7 +65,7 @@ lightning_sdk/cli/deploy/_auth.py,sha256=ccIzl0W9hJtFmhdEAn1xcBGIHQfO4d_k8grTbq4
65
65
  lightning_sdk/cli/deploy/devbox.py,sha256=HOQMWehwaveawVTyBDaZhNZs_NL5g4RCWs_lf0hIW5U,6800
66
66
  lightning_sdk/cli/deploy/serve.py,sha256=K2e7gz1gg_UTr0j5FuI1_EKRa0t6hRaoHGpwFAXRSso,15040
67
67
  lightning_sdk/deployment/__init__.py,sha256=dXsa4psDzFYFklsq3JC-2V_L4FQjGZnQAf-ZiVlqG9c,545
68
- lightning_sdk/deployment/deployment.py,sha256=qFmuFw96kcEp6dubvhDeaDc2n9ylpNCwLL1_ImtQ3O0,21526
68
+ lightning_sdk/deployment/deployment.py,sha256=7Sk4ORKmgMDk7Owpk_q-89ws8-Y9orX0jRZF99tNv1E,21775
69
69
  lightning_sdk/job/__init__.py,sha256=1MxjQ6rHkyUHCypSW9RuXuVMVH11WiqhIXcU2LCFMwE,64
70
70
  lightning_sdk/job/base.py,sha256=GAE7wvTH9e_F9bU8sogT88EMCP4D0d1deZMeVmBtWTE,20856
71
71
  lightning_sdk/job/job.py,sha256=jPlW3u34lJ6tpszm-Q6EHzWrfMIpQfM7-z8UCFFVyaE,14780
@@ -75,7 +75,7 @@ lightning_sdk/job/work.py,sha256=aRknNDja-96qQaYw0fNboEGtOZCmvztYEzUPxLNAt8g,245
75
75
  lightning_sdk/lightning_cloud/__init__.py,sha256=o91SMAlwr4Ke5ESe8fHjqXcj31_h7rT-MlFoXA-n2EI,173
76
76
  lightning_sdk/lightning_cloud/__version__.py,sha256=lOfmWHtjmiuSG28TbKQqd2B3nwmSGOlKVFwhaj_cRJk,23
77
77
  lightning_sdk/lightning_cloud/env.py,sha256=XZXpF4sD9jlB8DY0herTy_8XiUJuDVjxy5APjRD2_aU,1379
78
- lightning_sdk/lightning_cloud/login.py,sha256=k4iE5qLUMB8_VeQa1sNz7jPCWLOV5S7j9Q776J7ZXhY,7631
78
+ lightning_sdk/lightning_cloud/login.py,sha256=HGfixrD_j5pifen3KvnYGmTE3ZeR-z8AXN3aSN0x73U,7275
79
79
  lightning_sdk/lightning_cloud/rest_client.py,sha256=K2J_QXihpbp5tVzs9PzffgMCQY1NeH5tRpuJBYj27vU,7125
80
80
  lightning_sdk/lightning_cloud/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
81
  lightning_sdk/lightning_cloud/cli/__main__.py,sha256=aHrigVV0qIp74MuYTdN6uO8a9Xp6E1aOwdR8w1fG-7c,688
@@ -1098,9 +1098,9 @@ lightning_sdk/mmt/v1.py,sha256=tIMp7Oy5243LEExbLEAm8frKqffdiNA5WjvTdr4NOio,8858
1098
1098
  lightning_sdk/mmt/v2.py,sha256=8DDXYpr5U1Nh8IlMRl3ePBartqh1At_-FcTQ-gsvQEw,10869
1099
1099
  lightning_sdk/pipeline/__init__.py,sha256=Sja_0NJ8vgh-2ThSVP3WDI9a9qghrWd21LkaQp4Zsp8,378
1100
1100
  lightning_sdk/pipeline/pipeline.py,sha256=A11Q_bRhiQm89n-VcdaXBJsvK8Yb_EY_IijOGnBmPoI,6163
1101
- lightning_sdk/pipeline/printer.py,sha256=j8Upm9xpq94pl95oRcLiyd-_EEAH6JQAtI-n0gn4Zfg,4775
1102
- lightning_sdk/pipeline/schedule.py,sha256=lC_r3s46bEfY_TLeHvCGdy-Ivc7vyJmtbyA9hdzFp8g,19755
1103
- lightning_sdk/pipeline/steps.py,sha256=H2emV6ZURRAlK7TeHvos9KXvbphYOi7U6PyBoqigZoU,13013
1101
+ lightning_sdk/pipeline/printer.py,sha256=fsewFE_nnI-x5KscviYvQbKgNcgMyn-uT0UWlArGn-8,4828
1102
+ lightning_sdk/pipeline/schedule.py,sha256=J6lfjeuUMqGhX6xo6-qIliyi7KmB4e8BimTKJh7cJXY,20059
1103
+ lightning_sdk/pipeline/steps.py,sha256=wCpZr8MOXCEWJ3_WMwtuxMpqAG6ZT8ep2vnA9Jhl8hs,14164
1104
1104
  lightning_sdk/pipeline/utils.py,sha256=3L7UgY78w2VAVSQmelQNnz_X9zJdFo1NJBtez221ge0,3923
1105
1105
  lightning_sdk/services/__init__.py,sha256=wi1yv0SCnfJub5tOq8y9SblK3-CEseHJuvH-HmtAy7U,229
1106
1106
  lightning_sdk/services/file_endpoint.py,sha256=we5HC_o74J4Y6fSP_31jIizi_I_1FO_Rb2qblspD9eE,7855
@@ -1111,9 +1111,9 @@ lightning_sdk/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
1111
1111
  lightning_sdk/utils/dynamic.py,sha256=glUTO1JC9APtQ6Gr9SO02a3zr56-sPAXM5C3NrTpgyQ,1959
1112
1112
  lightning_sdk/utils/enum.py,sha256=h2JRzqoBcSlUdanFHmkj_j5DleBHAu1esQYUsdNI-hU,4106
1113
1113
  lightning_sdk/utils/resolve.py,sha256=JjHwWNQq375d1JBcVkJrZWkcTehvuTxF2h6awvSUDoo,8094
1114
- lightning_sdk-2025.7.31.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1115
- lightning_sdk-2025.7.31.dist-info/METADATA,sha256=RTmD3mQQ4f25eo8UyjSep5m19VtrPUSC-H8IUHyC8Og,4108
1116
- lightning_sdk-2025.7.31.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1117
- lightning_sdk-2025.7.31.dist-info/entry_points.txt,sha256=msB9PJWIJ784dX-OP8by51d4IbKYH3Fj1vCuA9oXjHY,68
1118
- lightning_sdk-2025.7.31.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1119
- lightning_sdk-2025.7.31.dist-info/RECORD,,
1114
+ lightning_sdk-2025.8.6rc0.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1115
+ lightning_sdk-2025.8.6rc0.dist-info/METADATA,sha256=e_zqAI7G1vHn8qXPosKEI2zyIKCuX_9zW1ux7RjYCK4,4110
1116
+ lightning_sdk-2025.8.6rc0.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1117
+ lightning_sdk-2025.8.6rc0.dist-info/entry_points.txt,sha256=msB9PJWIJ784dX-OP8by51d4IbKYH3Fj1vCuA9oXjHY,68
1118
+ lightning_sdk-2025.8.6rc0.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1119
+ lightning_sdk-2025.8.6rc0.dist-info/RECORD,,