arkitekt-next 0.8.12__py3-none-any.whl → 0.8.13__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.

Potentially problematic release.


This version of arkitekt-next might be problematic. Click here for more details.

@@ -6,6 +6,7 @@ from typing import List, Optional
6
6
 
7
7
 
8
8
  class Requirement(BaseModel):
9
+ key: str
9
10
  service: str
10
11
  """ The service is the service that will be used to fill the key, it will be used to find the correct instance. It needs to fullfill
11
12
  the reverse domain naming scheme"""
@@ -15,41 +16,48 @@ class Requirement(BaseModel):
15
16
  """ The description is a human readable description of the requirement. Will be show to the user when asking for the requirement."""
16
17
 
17
18
 
18
- def build_default_requirements() -> dict[str, Requirement]:
19
- return {
20
- "lok": Requirement(
19
+ def build_default_requirements() -> List[Requirement]:
20
+ return [
21
+ Requirement(
22
+ key="lok",
21
23
  service="live.arkitekt_next.lok",
22
24
  description="An instance of ArkitektNext Lok to authenticate the user",
23
25
  ),
24
- "rekuest": Requirement(
26
+ Requirement(
27
+ key="rekuest",
25
28
  service="live.arkitekt_next.rekuest",
26
29
  description="An instance of ArkitektNext Rekuest to assign to nodes",
27
30
  ),
28
- "kabinet": Requirement(
31
+ Requirement(
32
+ key="kabinet",
29
33
  service="live.arkitekt_next.kabinet",
30
34
  description="An instance of ArkitektNext Kabinet to retrieve nodes from",
31
35
  ),
32
- "mikro": Requirement(
36
+ Requirement(
37
+ key="mikro",
33
38
  service="live.arkitekt_next.mikro",
34
39
  description="An instance of ArkitektNext Mikro to make requests to the user's data",
35
40
  optional=True,
36
41
  ),
37
- "fluss": Requirement(
42
+ Requirement(
43
+ key="fluss",
38
44
  service="live.arkitekt_next.fluss",
39
45
  description="An instance of ArkitektNext Fluss to make requests to the user's data",
40
46
  optional=False,
41
47
  ),
42
- "port": Requirement(
48
+ Requirement(
49
+ key="port",
43
50
  service="live.arkitekt_next.port",
44
51
  description="An instance of ArkitektNext Fluss to make requests to the user's data",
45
52
  optional=True,
46
53
  ),
47
- "datalayer": Requirement(
54
+ Requirement(
55
+ key="datalayer",
48
56
  service="live.arkitekt_next.datalayer",
49
57
  description="An instance of ArkitektNext Datalayer to make requests to the user's data",
50
58
  optional=False,
51
59
  ),
52
- }
60
+ ]
53
61
 
54
62
 
55
63
  class Manifest(BaseModel):
@@ -75,7 +83,7 @@ class Manifest(BaseModel):
75
83
  """ Scopes that this app should request from the user """
76
84
  logo: Optional[str]
77
85
  """ A URL to the logo of the app TODO: We should enforce this to be a http URL as local paths won't work """
78
- requirements: Optional[dict[str, Requirement]] = Field(
86
+ requirements: Optional[List[Requirement]] = Field(
79
87
  default_factory=build_default_requirements
80
88
  )
81
89
  """ Requirements that this app has TODO: What are the requirements? """
@@ -66,10 +66,10 @@ def requirements(
66
66
  logo=manifest.logo,
67
67
  )
68
68
 
69
- x = {
70
- key: item.model_dump(by_alias=True)
71
- for key, item in app.manifest.requirements.items()
72
- }
69
+ x = [
70
+ item.model_dump(by_alias=True)
71
+ for item in app.manifest.requirements
72
+ ]
73
73
  if machine_readable:
74
74
  print("--START_REQUIREMENTS--" + json.dumps(x) + "--END_REQUIREMENTS--")
75
75
 
@@ -6,7 +6,7 @@ import subprocess
6
6
  import uuid
7
7
  from arkitekt_next.cli.io import generate_build
8
8
  from click import Context
9
- from arkitekt_next.cli.types import Flavour, Inspection
9
+ from arkitekt_next.cli.types import Flavour, InspectionInput
10
10
  import yaml
11
11
  from typing import Dict, Optional
12
12
  import json
@@ -51,7 +51,7 @@ def build_flavour(flavour_name: str, flavour: Flavour) -> str:
51
51
  return build_id
52
52
 
53
53
 
54
- def inspect_docker_container(build_id: str) -> Inspection:
54
+ def inspect_docker_container(build_id: str) -> InspectionInput:
55
55
  try:
56
56
  # Run 'docker inspect' with the container ID or name
57
57
  result = subprocess.run(
@@ -173,12 +173,12 @@ def inspect_requirements(build_id: str) -> Dict[str, Requirement]:
173
173
  raise InspectionError(f"An error occurred: {e.stdout + e.stderr}") from e
174
174
 
175
175
 
176
- def inspect_build(build_id: str) -> Inspection:
176
+ def inspect_build(build_id: str) -> InspectionInput:
177
177
  size, size_root_fs = inspect_docker_container(build_id)
178
178
  templates = inspect_templates(build_id)
179
179
  requirements = inspect_requirements(build_id)
180
180
 
181
- return Inspection(size=size, templates=templates, requirements=requirements)
181
+ return InspectionInput(size=size, templates=templates, requirements=requirements)
182
182
 
183
183
 
184
184
  def get_flavours(ctx: Context, select: Optional[str] = None) -> Dict[str, Flavour]:
arkitekt_next/cli/io.py CHANGED
@@ -2,14 +2,14 @@ from arkitekt_next.utils import create_arkitekt_next_folder
2
2
  import os
3
3
  from typing import Optional, List, Dict
4
4
  from arkitekt_next.cli.types import (
5
- Inspection,
6
5
  Manifest,
7
6
  Build,
8
7
  BuildsConfigFile,
9
- Deployment,
10
8
  Flavour,
11
9
  DeploymentsConfigFile,
12
10
  )
11
+ from kabinet.api.schema import InspectionInput, AppImageInput
12
+
13
13
  import yaml
14
14
  import json
15
15
  import rich_click as click
@@ -120,7 +120,7 @@ def generate_build(
120
120
  flavour_name: str,
121
121
  flavour: Flavour,
122
122
  manifest: Manifest,
123
- inspection: Optional[Inspection],
123
+ inspection: Optional[InspectionInput],
124
124
  ) -> Build:
125
125
  """Generates a build from a builder, build_id and manifest
126
126
 
@@ -201,7 +201,7 @@ def generate_deployment(
201
201
  deployment_run: str,
202
202
  build: Build,
203
203
  image: str,
204
- ) -> Deployment:
204
+ ) -> AppImageInput:
205
205
  """Generates a deployment from a build and an image
206
206
 
207
207
  Parameters
@@ -225,10 +225,10 @@ def generate_deployment(
225
225
 
226
226
  config_file = os.path.join(path, "deployments.yaml")
227
227
 
228
- deployment = Deployment(
228
+ deployment = AppImageInput(
229
229
  build_id=build.build_id,
230
230
  manifest=build.manifest,
231
- flavour=build.flavour,
231
+ flavour_name=build.flavour,
232
232
  selectors=build.selectors,
233
233
  inspection=build.inspection,
234
234
  image=image,
@@ -237,15 +237,16 @@ def generate_deployment(
237
237
  if os.path.exists(config_file):
238
238
  with open(config_file, "r") as file:
239
239
  config = DeploymentsConfigFile(**yaml.safe_load(file))
240
- config.deployments.append(deployment)
241
- config.latest_deployment_run = deployment_run
240
+ config.app_images.append(deployment)
241
+ config.latest_app_image = deployment.release_id
242
242
  else:
243
243
  config = DeploymentsConfigFile(deployments=[deployment])
244
- config.latest_deployment_run = deployment_run
244
+ config.app_images = deployment_run
245
+ config.latest_app_image = deployment.release_id
245
246
 
246
247
  with open(config_file, "w") as file:
247
248
  yaml.safe_dump(
248
- json.loads(config.json(exclude_none=True, by_alias=True)),
249
+ json.loads(config.model_dump_json(exclude_none=True, by_alias=True)),
249
250
  file,
250
251
  sort_keys=True,
251
252
  )
@@ -9,6 +9,7 @@ from arkitekt_next.base_models import Requirement
9
9
  from string import Formatter
10
10
  import os
11
11
 
12
+ from kabinet.api.schema import AppImageInput, InspectionInput, SelectorInput
12
13
  from rekuest_next.api.schema import TemplateInput
13
14
 
14
15
  ALLOWED_BUILDER_KEYS = [
@@ -73,152 +74,8 @@ class SelectorType(str, Enum):
73
74
  LABEL = "label"
74
75
 
75
76
 
76
- class BaseSelector(BaseModel):
77
- """A selector is a way to describe a flavours preference for a
78
- compute node. It contains the node_id, the selector and the flavour_id.
79
- """
80
-
81
- required: bool = True
82
-
83
- class Config:
84
- extra = "forbid"
85
-
86
- def build_docker_params(self) -> List[str]:
87
- """Builds the docker params for this selector
88
-
89
- Should return a list of strings that can be used as docker params
90
- If the selector is not required, it should return an empty list
91
-
92
- Returns
93
- -------
94
- List[str]
95
- The docker params for this selector
96
- """
97
- return []
98
-
99
- def build_arkitekt_next_params(self) -> List[str]:
100
- """Builds the arkitekt_next params for this selector
101
-
102
- Returns
103
- -------
104
- List[str]
105
- The docker params for this selector
106
- """
107
- return []
108
-
109
-
110
- class RAMSelector(BaseSelector):
111
- """A selector is a way to describe a flavours preference for a
112
- compute node. It contains the node_id, the selector and the flavour_id.
113
- """
114
-
115
- type: Literal["ram"]
116
- min: int
117
-
118
-
119
- class CPUSelector(BaseSelector):
120
- """A selector is a way to describe a flavours preference for a
121
- compute node. It contains the node_id, the selector and the flavour_id.
122
- """
123
-
124
- type: Literal["cpu"]
125
- min: int
126
- frequency: Optional[int] = None
127
-
128
-
129
- class CudaSelector(BaseSelector):
130
- """A selector is a way to describe a flavours preference for a
131
- compute node. It contains the node_id, the selector and the flavour_id.
132
- """
133
-
134
- type: Literal["cuda"]
135
- frequency: Optional[int] = Field(default=None, description="The frequency in MHz")
136
- memory: Optional[int] = Field(default=None, description="The memory in MB")
137
- architecture: Optional[str] = Field(
138
- default=None, description="The architecture of the GPU"
139
- )
140
- compute_capability: str = Field(
141
- default="3.5", description="The minimum compute capability"
142
- )
143
- cuda_cores: Optional[int] = None
144
- cuda_version: str = Field(default="10.2", description="The minimum cuda version")
145
-
146
- def build_docker_params(self) -> List[str]:
147
- """Builds the docker params for this selector
148
-
149
- Should return a list of strings that can be used as docker params
150
- If the selector is not required, it should return an empty list
151
-
152
- Returns
153
- -------
154
- List[str]
155
- The docker params for this selector
156
- """
157
- return [
158
- "--gpus",
159
- "all",
160
- ]
161
-
162
-
163
- class RocmSelector(BaseSelector):
164
- """A selector is a way to describe a flavours preference for a
165
- compute node. It contains the node_id, the selector and the flavour_id.
166
- """
167
-
168
- type: Literal["rocm"]
169
- min: int
170
- frequency: Optional[int] = None
171
- memory: Optional[int] = None
172
- architecture: Optional[str] = None
173
- compute_capability: Optional[str] = None
174
- cuda_cores: Optional[int] = None
175
- cuda_version: Optional[str] = None
176
-
177
- def build_docker_params(self) -> List[str]:
178
- """Builds the docker params for this selector"""
179
-
180
- return [
181
- "--device=/dev/kfd",
182
- "--device=/dev/dri",
183
- "--group-add",
184
- "video",
185
- "--cap-add=SYS_PTRACE",
186
- "--security-opt",
187
- "seccomp=unconfined",
188
- ]
189
-
190
-
191
- class LabelSelector(BaseSelector):
192
- """A selector is a way to describe a flavours preference for a
193
- compute node. It contains the node_id, the selector and the flavour_id.
194
- """
195
-
196
- type: Literal["label"]
197
- key: str
198
- value: str
199
-
200
-
201
- class ServiceSelector(BaseSelector):
202
- """A service selector is a way to describe a flavours preference for a
203
- service. It contains the service_id,
204
- """
205
-
206
- type: Literal["service"]
207
-
208
-
209
- Selector = Union[
210
- RAMSelector, CPUSelector, CudaSelector, RocmSelector, LabelSelector, ServiceSelector
211
- ]
212
-
213
-
214
- class Inspection(BaseModel):
215
- templates: List[TemplateInput]
216
- requirements: Dict[str, Requirement]
217
- size: int
218
-
219
-
220
77
  class Flavour(BaseModel):
221
- selectors: List[Selector]
78
+ selectors: List[SelectorInput]
222
79
  description: str = Field(default="")
223
80
  dockerfile: str = Field(default="Dockerfile")
224
81
  build_command: List[str] = Field(
@@ -264,46 +121,6 @@ class Flavour(BaseModel):
264
121
  )
265
122
 
266
123
 
267
- class Deployment(BaseModel):
268
- """A deployment is a Release of a Build.
269
- It contains the build_id, the manifest, the builder, the definitions, the image and the deployed_at timestamp.
270
-
271
-
272
-
273
- """
274
-
275
- deployment_run: str = Field(
276
- default_factory=lambda: str(uuid.uuid4()),
277
- description="The unique identifier of the deployment run",
278
- )
279
-
280
- deployment_id: str = Field(
281
- default_factory=lambda: str(uuid.uuid4()),
282
- description="The unique identifier of the deployment",
283
- )
284
- manifest: Manifest = Field(description="The manifest of the app that was deployed")
285
- selectors: List[Selector] = Field(
286
- description="The selectors are used to place this image on the nodes",
287
- default_factory=list,
288
- )
289
- flavour: str = Field(
290
- description="The flavour that was used to build this deployment",
291
- default="vanilla",
292
- )
293
- build_id: str = Field(
294
- description="The build_id of the build that was deployed. Is referenced in the build.yaml file."
295
- )
296
- inspection: Optional[Inspection] = Field(
297
- description="The inspection of the build that was deployed"
298
- )
299
- image: str = Field(
300
- description="The docker image that was built for this deployment"
301
- )
302
- deployed_at: datetime.datetime = Field(
303
- default_factory=datetime.datetime.now,
304
- description="The timestamp of the deployment",
305
- )
306
-
307
124
 
308
125
  class DeploymentsConfigFile(BaseModel):
309
126
  """The ConfigFile is a pydantic model that represents the deployments.yaml file
@@ -315,16 +132,16 @@ class DeploymentsConfigFile(BaseModel):
315
132
  _description_
316
133
  """
317
134
 
318
- deployments: List[Deployment] = []
319
- latest_deployment_run: Optional[str] = None
135
+ app_images: List[AppImageInput] = []
136
+ latest_app_image: Optional[str] = None
320
137
 
321
138
 
322
139
  class Build(BaseModel):
323
140
  build_run: str
324
141
  build_id: str
325
- inspection: Optional[Inspection] = None
142
+ inspection: Optional[InspectionInput] = None
326
143
  description: str = Field(default="")
327
- selectors: List[Selector] = Field(default_factory=list)
144
+ selectors: List[SelectorInput] = Field(default_factory=list)
328
145
  flavour: str = Field(default="vanilla")
329
146
  manifest: Manifest
330
147
  build_at: datetime.datetime = Field(default_factory=datetime.datetime.now)
@@ -19,12 +19,11 @@ class Registration(BaseModel):
19
19
  builder: Callable[[Herre, Fakts, Params], object]
20
20
 
21
21
 
22
- basic_requirements = {
23
- "lok": Requirement(
22
+ basic_requirements = [Requirement(
23
+ key="lok",
24
24
  service="live.arkitekt.lok",
25
25
  description="An instance of ArkitektNext Lok to authenticate the user",
26
- ),
27
- }
26
+ )]
28
27
 
29
28
 
30
29
  class ServiceBuilderRegistry:
@@ -39,7 +38,7 @@ class ServiceBuilderRegistry:
39
38
  requirement: Requirement,
40
39
  ):
41
40
  self.service_builders[name] = service_builder
42
- self.requirements[name] = requirement
41
+ self.requirements.append(requirement)
43
42
 
44
43
  def get(self, name):
45
44
  return self.services.get(name)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: arkitekt-next
3
- Version: 0.8.12
3
+ Version: 0.8.13
4
4
  Summary: client for the arkitekt_next platform
5
5
  License: MIT
6
6
  Author: jhnnsrs
@@ -20,20 +20,20 @@ Requires-Dist: blok (>=0.0.19) ; (python_version >= "3.9" and python_version < "
20
20
  Requires-Dist: cryptography (>=40.0.8) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "blok")
21
21
  Requires-Dist: dokker (>=1.0.0)
22
22
  Requires-Dist: fakts (>=1.0.0)
23
- Requires-Dist: fluss-next (>=0.1.86) ; extra == "all"
23
+ Requires-Dist: fluss-next (>=0.1.87) ; extra == "all"
24
24
  Requires-Dist: herre (>=1.0.0)
25
- Requires-Dist: kabinet (>=0.1.25) ; (python_version >= "3.9" and python_version < "4.0") and (extra == "all")
25
+ Requires-Dist: kabinet (>=0.1.26) ; (python_version >= "3.9" and python_version < "4.0") and (extra == "all")
26
26
  Requires-Dist: koil (>=1.0.0)
27
- Requires-Dist: lovekit (>=0.1.12) ; (python_version >= "3.10" and python_version < "4.0") and (extra == "all")
28
- Requires-Dist: mikro-next (>=0.1.41) ; (python_version >= "3.10" and python_version < "4.0") and (extra == "all")
27
+ Requires-Dist: lovekit (>=0.1.13) ; (python_version >= "3.10" and python_version < "4.0") and (extra == "all")
28
+ Requires-Dist: mikro-next (>=0.1.42) ; (python_version >= "3.10" and python_version < "4.0") and (extra == "all")
29
29
  Requires-Dist: namegenerator (>=1.0.6) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "blok")
30
30
  Requires-Dist: netifaces (>=0.11.0) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "blok")
31
- Requires-Dist: reaktion-next (>=0.1.76) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "all")
32
- Requires-Dist: rekuest-next (>=0.2.34) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "cli" or extra == "all")
31
+ Requires-Dist: reaktion-next (>=0.1.77) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "all")
32
+ Requires-Dist: rekuest-next (>=0.2.35) ; (python_version >= "3.8" and python_version < "4.0") and (extra == "cli" or extra == "all")
33
33
  Requires-Dist: rich-click (>=1.6.1) ; extra == "cli" or extra == "all"
34
34
  Requires-Dist: semver (>=3.0.1) ; extra == "cli" or extra == "all"
35
35
  Requires-Dist: turms (>=0.6.0) ; (python_version >= "3.9" and python_version < "4.0") and (extra == "cli" or extra == "all")
36
- Requires-Dist: unlok-next (>=0.1.80) ; python_version >= "3.8" and python_version < "4.0"
36
+ Requires-Dist: unlok-next (>=0.1.81) ; python_version >= "3.8" and python_version < "4.0"
37
37
  Requires-Dist: watchfiles (>=0.18.1) ; extra == "cli" or extra == "all"
38
38
  Description-Content-Type: text/markdown
39
39
 
@@ -8,7 +8,7 @@ arkitekt_next/apps/service/grant_registry.py,sha256=3om8YoVf_HFWEJbpjQCin1Zvm8Sz
8
8
  arkitekt_next/apps/service/herre.py,sha256=IS3L2daljVBMqJAV0KEq3dWS7-OnmhWXYxtthgGGGMs,766
9
9
  arkitekt_next/apps/service/herre_qt.py,sha256=f24DmAc7z4UfRaShXmmtt8psSnKlS7yCJODilX_gof4,1634
10
10
  arkitekt_next/apps/types.py,sha256=jgqRDUHc34up_4hGUwlg_1yDH6A5pG6QRLaKQfmj-no,1276
11
- arkitekt_next/base_models.py,sha256=w1R5wiwyyGj1_SgSARRpdTsO4E82Uu3d-8FYXauTETA,4473
11
+ arkitekt_next/base_models.py,sha256=cSkQH5kxebQPDCxytz9GS5kT660VhcP9-e5Y_GB64Rk,4588
12
12
  arkitekt_next/bloks/__init__.py,sha256=_4EeR63d6avQUWLG4mK2n_FvogTPQ_Jx6f2_RvNbWeA,29
13
13
  arkitekt_next/bloks/admin.py,sha256=mRTfjIR1vsfY1ghgjWLjKYFAOh1pGCmQ_IEt2QOR3og,1353
14
14
  arkitekt_next/bloks/arkitekt.py,sha256=ZyyHocaoPPCBZnbpBCkDzB2woXb1-ZbENr51UFERn2Q,1546
@@ -59,11 +59,11 @@ arkitekt_next/cli/commands/init/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
59
59
  arkitekt_next/cli/commands/init/main.py,sha256=1ZbZDBECZRxlcnulycdS15s-uQ5ngx4xP3T1v-gkJ3U,5435
60
60
  arkitekt_next/cli/commands/inspect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
61
  arkitekt_next/cli/commands/inspect/main.py,sha256=Bu1vAZudkFCtjDnZAB8yQLDt-UKY9pJGhLBlEfDqtkw,626
62
- arkitekt_next/cli/commands/inspect/requirements.py,sha256=Pj1akKhEtlbtat7Ug2UbqXYbDeYXubW35uKRoOew6wc,1902
62
+ arkitekt_next/cli/commands/inspect/requirements.py,sha256=rCwCRLNB2aNKC7jqljGHtDp8uSgz4fKIseQiYyb6nDo,1884
63
63
  arkitekt_next/cli/commands/inspect/templates.py,sha256=f_jzqvwLGhfcRcHr1bxUR248H-ylkTyF6Y1bygNg2ls,2290
64
64
  arkitekt_next/cli/commands/inspect/variables.py,sha256=LonDlbS2qH1v-jD6RfEhTv-mxmgeBMKqD3oO2iDJRjE,2698
65
65
  arkitekt_next/cli/commands/kabinet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- arkitekt_next/cli/commands/kabinet/build.py,sha256=Yr368xRyIXrD7bZ-NI-NFoXGU5ulydQ_SSyFFoU_cRw,8677
66
+ arkitekt_next/cli/commands/kabinet/build.py,sha256=pMVRNUdkVc-uu0YKNzKWXlDNNyAJKAaB0JuBFw0H6Uw,8697
67
67
  arkitekt_next/cli/commands/kabinet/init.py,sha256=YcxXlMick7Xd2XUjmA9vyku0QDGACw1PEWpfJum42E8,3600
68
68
  arkitekt_next/cli/commands/kabinet/main.py,sha256=U5EWekRTsMZZ34abWFfwilhzrd-zZtpZbl8RsLN_bC8,1008
69
69
  arkitekt_next/cli/commands/kabinet/publish.py,sha256=uPgDAlo-NBTL6wLyNWX55JJ7T5ZcRNKMLd9RRbhOod4,3568
@@ -87,7 +87,7 @@ arkitekt_next/cli/constants.py,sha256=ONXKA8LRxXQkOQ56ZElVMZSTiaIH1LE_ikmUUKem98
87
87
  arkitekt_next/cli/dockerfiles/vanilla.dockerfile,sha256=0ujdG22rZ6v2n5TMHNA4HR5f1PP9KJvAQORz-DGHBpo,184
88
88
  arkitekt_next/cli/errors.py,sha256=zLTjaCbun6qM2nTldjyZd-DvykqKn5A3Gn80uYdx7Vc,93
89
89
  arkitekt_next/cli/inspect.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
90
- arkitekt_next/cli/io.py,sha256=uRhq3SCI-sCiRp9TXK_hFqu5xub1h49XNixFqybHCpc,6821
90
+ arkitekt_next/cli/io.py,sha256=GrzLKMiIaDjwyzYLZ28hlbMc7rwQZupFUCDquiWiE6o,6925
91
91
  arkitekt_next/cli/main.py,sha256=Ua7sq_OfC491F6r6zNs_oEiR4jVOsZwxLpX0ZXR0Jk0,2227
92
92
  arkitekt_next/cli/options.py,sha256=hSKdSYabK1MuioBRUsADjQIPSp9H2YeczmcyAsFUprI,3791
93
93
  arkitekt_next/cli/schemas/fluss.schema.graphql,sha256=MqrSpOxtWO9kWFCoUn9ySBPhIH3XozFiqrQl2zjEbiQ,35803
@@ -107,7 +107,7 @@ arkitekt_next/cli/schemas/unlok.schema.graphql,sha256=fXR846snIBIqkuQ-PlYnSkQjkF
107
107
  arkitekt_next/cli/templates/filter.py,sha256=mD2jdNEXrZNagC_8WtuTisGJrGIbJDSylCvh19cF49I,650
108
108
  arkitekt_next/cli/templates/simple.py,sha256=IbcThJ5LryXVFQUdzxfHQCtzSNxEQWTxbD__Ygxsp4M,1171
109
109
  arkitekt_next/cli/texts.py,sha256=6qK9amHXXHRnXPOgto9QVyl3lwwmWOebL673xFfrUUk,680
110
- arkitekt_next/cli/types.py,sha256=LLn9Z4_5OQPJO_kpqtN33pVzhWf-9HyvKDAUGpx8Dg8,10521
110
+ arkitekt_next/cli/types.py,sha256=Pn6LLj0XjyMBOqyTj3ZnvNvwY8-Ci-KFSW6qza4sIQQ,5215
111
111
  arkitekt_next/cli/ui.py,sha256=BR_AOsBIIHwojI5otBzT_560-ep5Dw1xAHKsO2zOOJQ,3493
112
112
  arkitekt_next/cli/utils.py,sha256=rl1hfQIVzepLHPN_ZWuvfVH-IIVqcSfiFGyfNtL1XCo,445
113
113
  arkitekt_next/cli/validators.py,sha256=XkLrOrDzBJwcG1keTawa_NJPt3QIBhb5KjepeH4N1KA,719
@@ -129,11 +129,11 @@ arkitekt_next/qt/builders.py,sha256=9YnKuC2z4xOV_BmW3_rPZmI-77dfBuT1UhaaQBC07ds,
129
129
  arkitekt_next/qt/magic_bar.py,sha256=pC6vLG7ttsRw-MkPIL2HacGOWD1jzhg4jQG5qnGmvcg,18354
130
130
  arkitekt_next/qt/types.py,sha256=nzTHjzzb8iIlYRBWUYiMqPWYqkhSSnbZ2Wps32iEjbs,4129
131
131
  arkitekt_next/qt/utils.py,sha256=MgBPtPmCSBkIuATov3UgREESwxAHh77lWNNxyE7Qs48,773
132
- arkitekt_next/service_registry.py,sha256=oU1RrvNuDbLutvCS05OhbpKMP8d8gKaRU1ldu-OrWDk,3583
132
+ arkitekt_next/service_registry.py,sha256=x3pzr3dJSI2hjMGNZa3F7boW-6N7K53acjdLTkg4kc8,3588
133
133
  arkitekt_next/tqdm.py,sha256=lQcJI5Q6Py7Gy88hOCiJujjPEEGd8G2k1mOVJJ6oYe8,1531
134
134
  arkitekt_next/utils.py,sha256=QETdzn_GIMSw6LdaXL89bqvqp9MGwEBK8Lj54MpnMwc,2396
135
- arkitekt_next-0.8.12.dist-info/LICENSE,sha256=YZ2oRjC248t-GpoEyw7J13vwKYNG6zhYMaEAix6EzF0,1089
136
- arkitekt_next-0.8.12.dist-info/METADATA,sha256=X9uaFC7UJyNHzmKjNaP2dAb760gUNvrwIZARXUJifLM,6062
137
- arkitekt_next-0.8.12.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
138
- arkitekt_next-0.8.12.dist-info/entry_points.txt,sha256=-hxikQx4xZ6TiOnWVDOlTN_kcAISgGFvTHXIchsCHSc,60
139
- arkitekt_next-0.8.12.dist-info/RECORD,,
135
+ arkitekt_next-0.8.13.dist-info/LICENSE,sha256=YZ2oRjC248t-GpoEyw7J13vwKYNG6zhYMaEAix6EzF0,1089
136
+ arkitekt_next-0.8.13.dist-info/METADATA,sha256=cg182RS4KnU09458ixCVY5d9NrGBsr1EUXWt7DVuVNw,6062
137
+ arkitekt_next-0.8.13.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
138
+ arkitekt_next-0.8.13.dist-info/entry_points.txt,sha256=-hxikQx4xZ6TiOnWVDOlTN_kcAISgGFvTHXIchsCHSc,60
139
+ arkitekt_next-0.8.13.dist-info/RECORD,,