@agents-at-scale/ark 0.1.67 → 0.1.69

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.
@@ -158,6 +158,7 @@ const defaultArkServices = {
158
158
  helmReleaseName: 'ark-broker',
159
159
  description: 'In-memory storage service with streaming support for Ark queries',
160
160
  enabled: true,
161
+ mandatory: true,
161
162
  category: 'service',
162
163
  chartPath: `${REGISTRY_BASE}/ark-broker:${CHART_VERSION}`,
163
164
  installArgs: [],
@@ -202,6 +203,27 @@ const defaultArkServices = {
202
203
  k8sServicePort: 8639,
203
204
  k8sDeploymentName: 'noah-mcp',
204
205
  },
206
+ 'kubernetes-mcp-server': {
207
+ name: 'kubernetes-mcp-server',
208
+ helmReleaseName: 'kubernetes-mcp-server',
209
+ description: 'Read-only Kubernetes MCP server exposing cluster resources as tools',
210
+ enabled: true,
211
+ category: 'service',
212
+ chartPath: `${getMarketplaceRegistry()}/kubernetes-mcp-server`,
213
+ installArgs: [],
214
+ k8sServiceName: 'kubernetes-mcp-server',
215
+ k8sServicePort: 8080,
216
+ k8sDeploymentName: 'kubernetes-mcp-server',
217
+ },
218
+ 'argo-make-author': {
219
+ name: 'argo-make-author',
220
+ helmReleaseName: 'argo-make-author',
221
+ description: 'Conversational Argo WorkflowTemplate authoring agent',
222
+ enabled: false,
223
+ category: 'service',
224
+ chartPath: `${getMarketplaceRegistry()}/argo-make-author`,
225
+ installArgs: [],
226
+ },
205
227
  };
206
228
  function applyConfigOverrides(defaults) {
207
229
  const config = loadConfig();
@@ -3,6 +3,14 @@ import * as fs from 'fs/promises';
3
3
  import yaml from 'yaml';
4
4
  import { listResources } from '../../lib/kubectl.js';
5
5
  import output from '../../lib/output.js';
6
+ // Argo workflow resources, in dependency order (cluster templates before the
7
+ // namespaced templates that may reference them). These live in Argo CRDs that
8
+ // may not be installed on the source cluster, so they are treated as optional.
9
+ const ARGO_RESOURCE_TYPES = [
10
+ 'clusterworkflowtemplates',
11
+ 'workflowtemplates',
12
+ 'cronworkflows',
13
+ ];
6
14
  // resource types in dependency order so that they can be loaded correctly
7
15
  // by default these will all be exported if not specified; can be overridden with defaultExportTypes in config
8
16
  const RESOURCE_ORDER = [
@@ -13,7 +21,88 @@ const RESOURCE_ORDER = [
13
21
  'teams',
14
22
  'mcpservers',
15
23
  'a2aservers',
24
+ ...ARGO_RESOURCE_TYPES,
25
+ ];
26
+ // resource types whose CRDs may be absent; a missing CRD is warned and skipped
27
+ // rather than failing the whole export
28
+ const OPTIONAL_RESOURCE_TYPES = new Set(ARGO_RESOURCE_TYPES);
29
+ // cluster-scoped types have no namespace to filter on, so a namespace-scoped
30
+ // export skips them rather than sweeping in cluster-wide resources shared across
31
+ // tenants; they are captured by a cluster-wide export (no --namespace)
32
+ const CLUSTER_SCOPED_TYPES = new Set(['clusterworkflowtemplates']);
33
+ const SERVER_MANAGED_METADATA_FIELDS = [
34
+ 'resourceVersion',
35
+ 'uid',
36
+ 'generation',
37
+ 'creationTimestamp',
38
+ 'managedFields',
39
+ 'selfLink',
40
+ 'deletionTimestamp',
41
+ 'deletionGracePeriodSeconds',
42
+ 'ownerReferences',
43
+ 'finalizers',
16
44
  ];
45
+ const LAST_APPLIED_ANNOTATION = 'kubectl.kubernetes.io/last-applied-configuration';
46
+ function isRecord(value) {
47
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
48
+ }
49
+ function errorText(error) {
50
+ const stderr = isRecord(error) && typeof error.stderr === 'string' ? error.stderr : '';
51
+ const message = error instanceof Error ? error.message : String(error);
52
+ return `${stderr}\n${message}`;
53
+ }
54
+ function isResourceTypeNotFoundError(error) {
55
+ const combined = errorText(error);
56
+ return (combined.includes("doesn't have a resource type") ||
57
+ combined.includes('could not find the requested resource'));
58
+ }
59
+ function isForbiddenError(error) {
60
+ const combined = errorText(error);
61
+ return (combined.includes('(Forbidden)') || combined.includes('is forbidden:'));
62
+ }
63
+ function sanitizeResource(resource) {
64
+ const sanitized = { ...resource };
65
+ delete sanitized.status;
66
+ const metadata = { ...resource.metadata };
67
+ for (const field of SERVER_MANAGED_METADATA_FIELDS) {
68
+ delete metadata[field];
69
+ }
70
+ if (isRecord(metadata.annotations)) {
71
+ const annotations = { ...metadata.annotations };
72
+ delete annotations[LAST_APPLIED_ANNOTATION];
73
+ if (Object.keys(annotations).length === 0) {
74
+ delete metadata.annotations;
75
+ }
76
+ else {
77
+ metadata.annotations = annotations;
78
+ }
79
+ }
80
+ sanitized.metadata = metadata;
81
+ return sanitized;
82
+ }
83
+ function isExcludedSecret(resource) {
84
+ const isHelmRelease = resource.type === 'helm.sh/release.v1' &&
85
+ resource.metadata.name.startsWith('sh.helm.release.v1.');
86
+ return (isHelmRelease || resource.type === 'kubernetes.io/service-account-token');
87
+ }
88
+ function hasOwnerReference(resource, ownerKind) {
89
+ return (Array.isArray(resource.metadata.ownerReferences) &&
90
+ resource.metadata.ownerReferences.some((ownerReference) => isRecord(ownerReference) && ownerReference.kind === ownerKind));
91
+ }
92
+ function isControllerManagedResource(resourceType, resource) {
93
+ const labels = isRecord(resource.metadata.labels)
94
+ ? resource.metadata.labels
95
+ : {};
96
+ if (resourceType === 'tools') {
97
+ return (typeof labels['mcp/server'] === 'string' ||
98
+ hasOwnerReference(resource, 'MCPServer'));
99
+ }
100
+ if (resourceType === 'agents') {
101
+ return (typeof labels['a2a/server'] === 'string' ||
102
+ hasOwnerReference(resource, 'A2AServer'));
103
+ }
104
+ return false;
105
+ }
17
106
  async function exportResources(options, config) {
18
107
  try {
19
108
  const allResourceTypes = config.defaultExportTypes || RESOURCE_ORDER;
@@ -28,23 +117,61 @@ async function exportResources(options, config) {
28
117
  output.info(`exporting ark resources to ${outputPath}...`);
29
118
  const allResources = [];
30
119
  let allResourceCount = 0;
120
+ let excludedSecretCount = 0;
121
+ let excludedManagedResourceCount = 0;
31
122
  for (const resourceType of resourceTypes) {
32
123
  if (!RESOURCE_ORDER.includes(resourceType)) {
33
124
  output.warning(`unknown resource type: ${resourceType}, skipping`);
34
125
  continue;
35
126
  }
127
+ if (options.namespace && CLUSTER_SCOPED_TYPES.has(resourceType)) {
128
+ output.info(`skipping cluster-scoped ${resourceType} for namespace-scoped export`);
129
+ continue;
130
+ }
36
131
  output.info(`fetching ${resourceType}...`);
37
- const resources = await listResources(resourceType, {
38
- namespace: options.namespace,
39
- labels: options.labels,
40
- });
132
+ let resources;
133
+ try {
134
+ resources = await listResources(resourceType, {
135
+ namespace: options.namespace,
136
+ labels: options.labels,
137
+ });
138
+ }
139
+ catch (error) {
140
+ if (OPTIONAL_RESOURCE_TYPES.has(resourceType)) {
141
+ if (isResourceTypeNotFoundError(error)) {
142
+ output.warning(`${resourceType} CRD not installed on this cluster, skipping`);
143
+ continue;
144
+ }
145
+ if (isForbiddenError(error)) {
146
+ output.warning(`not authorized to list ${resourceType}, skipping`);
147
+ continue;
148
+ }
149
+ }
150
+ throw error;
151
+ }
41
152
  const resourceCount = resources.length;
42
153
  if (resources.length > 0) {
43
154
  output.success(`found ${resourceCount} ${resourceType}`);
44
- allResources.push(...resources);
45
- allResourceCount += resourceCount;
155
+ let exportableResources = resourceType === 'secrets'
156
+ ? resources.filter((resource) => !isExcludedSecret(resource))
157
+ : resources;
158
+ excludedSecretCount += resourceCount - exportableResources.length;
159
+ const resourceCountAfterSecretFiltering = exportableResources.length;
160
+ exportableResources = exportableResources.filter((resource) => !isControllerManagedResource(resourceType, resource));
161
+ excludedManagedResourceCount +=
162
+ resourceCountAfterSecretFiltering - exportableResources.length;
163
+ allResources.push(...exportableResources.map(sanitizeResource));
164
+ allResourceCount += exportableResources.length;
46
165
  }
47
166
  }
167
+ if (excludedSecretCount > 0) {
168
+ const secretLabel = excludedSecretCount === 1 ? 'secret' : 'secrets';
169
+ output.info(`excluded ${excludedSecretCount} system-managed ${secretLabel}`);
170
+ }
171
+ if (excludedManagedResourceCount > 0) {
172
+ const resourceLabel = excludedManagedResourceCount === 1 ? 'resource' : 'resources';
173
+ output.info(`excluded ${excludedManagedResourceCount} controller-managed ${resourceLabel}`);
174
+ }
48
175
  if (allResourceCount === 0) {
49
176
  output.warning('no resources found to export');
50
177
  return;
@@ -40,6 +40,12 @@ export declare class ArkApiClient {
40
40
  private baseUrl;
41
41
  constructor(arkApiUrl: string);
42
42
  getBaseUrl(): string;
43
+ /**
44
+ * Fetch every page of a cursor-paginated ark-api list endpoint and return
45
+ * the concatenated items. Follows the `continue_token` returned by ark-api
46
+ * until the server reports the last page (`continue_token` null/absent).
47
+ */
48
+ private fetchAllPages;
43
49
  getQueryTargets(): Promise<QueryTarget[]>;
44
50
  getAgents(): Promise<Agent[]>;
45
51
  getModels(): Promise<Model[]>;
@@ -1,3 +1,4 @@
1
+ const PAGE_LIMIT = 100;
1
2
  export class ArkApiClient {
2
3
  baseUrl;
3
4
  constructor(arkApiUrl) {
@@ -6,6 +7,31 @@ export class ArkApiClient {
6
7
  getBaseUrl() {
7
8
  return this.baseUrl;
8
9
  }
10
+ /**
11
+ * Fetch every page of a cursor-paginated ark-api list endpoint and return
12
+ * the concatenated items. Follows the `continue_token` returned by ark-api
13
+ * until the server reports the last page (`continue_token` null/absent).
14
+ */
15
+ async fetchAllPages(path) {
16
+ const items = [];
17
+ let continueToken;
18
+ do {
19
+ const url = new URL(`${this.baseUrl}${path}`);
20
+ url.searchParams.set('limit', String(PAGE_LIMIT));
21
+ if (continueToken) {
22
+ url.searchParams.set('continue', continueToken);
23
+ }
24
+ const response = await fetch(url.toString());
25
+ if (!response.ok) {
26
+ throw new Error(`HTTP error! status: ${response.status}`);
27
+ }
28
+ const data = (await response.json());
29
+ if (data.items)
30
+ items.push(...data.items);
31
+ continueToken = data.continue_token;
32
+ } while (continueToken);
33
+ return items;
34
+ }
9
35
  async getQueryTargets() {
10
36
  try {
11
37
  const targets = [];
@@ -17,17 +43,14 @@ export class ArkApiClient {
17
43
  ];
18
44
  for (const ep of endpoints) {
19
45
  try {
20
- const response = await fetch(`${this.baseUrl}${ep.path}`);
21
- if (response.ok) {
22
- const data = (await response.json());
23
- for (const item of data.items || []) {
24
- targets.push({
25
- id: `${ep.type}/${item.name}`,
26
- name: item.name,
27
- type: ep.type,
28
- description: item.description || item.name,
29
- });
30
- }
46
+ const items = await this.fetchAllPages(ep.path);
47
+ for (const item of items) {
48
+ targets.push({
49
+ id: `${ep.type}/${item.name}`,
50
+ name: item.name,
51
+ type: ep.type,
52
+ description: item.description || item.name,
53
+ });
31
54
  }
32
55
  }
33
56
  catch {
@@ -42,12 +65,7 @@ export class ArkApiClient {
42
65
  }
43
66
  async getAgents() {
44
67
  try {
45
- const response = await fetch(`${this.baseUrl}/v1/agents`);
46
- if (!response.ok) {
47
- throw new Error(`HTTP error! status: ${response.status}`);
48
- }
49
- const data = (await response.json());
50
- return data.items || [];
68
+ return await this.fetchAllPages('/v1/agents');
51
69
  }
52
70
  catch (error) {
53
71
  throw new Error(`Failed to get agents: ${error instanceof Error ? error.message : 'Unknown error'}`, { cause: error });
@@ -55,12 +73,7 @@ export class ArkApiClient {
55
73
  }
56
74
  async getModels() {
57
75
  try {
58
- const response = await fetch(`${this.baseUrl}/v1/models`);
59
- if (!response.ok) {
60
- throw new Error(`HTTP error! status: ${response.status}`);
61
- }
62
- const data = (await response.json());
63
- return data.items || [];
76
+ return await this.fetchAllPages('/v1/models');
64
77
  }
65
78
  catch (error) {
66
79
  throw new Error(`Failed to get models: ${error instanceof Error ? error.message : 'Unknown error'}`, { cause: error });
@@ -68,12 +81,7 @@ export class ArkApiClient {
68
81
  }
69
82
  async getTools() {
70
83
  try {
71
- const response = await fetch(`${this.baseUrl}/v1/tools`);
72
- if (!response.ok) {
73
- throw new Error(`HTTP error! status: ${response.status}`);
74
- }
75
- const data = (await response.json());
76
- return data.items || [];
84
+ return await this.fetchAllPages('/v1/tools');
77
85
  }
78
86
  catch (error) {
79
87
  throw new Error(`Failed to get tools: ${error instanceof Error ? error.message : 'Unknown error'}`, { cause: error });
@@ -81,12 +89,7 @@ export class ArkApiClient {
81
89
  }
82
90
  async getTeams() {
83
91
  try {
84
- const response = await fetch(`${this.baseUrl}/v1/teams`);
85
- if (!response.ok) {
86
- throw new Error(`HTTP error! status: ${response.status}`);
87
- }
88
- const data = (await response.json());
89
- return data.items || [];
92
+ return await this.fetchAllPages('/v1/teams');
90
93
  }
91
94
  catch (error) {
92
95
  throw new Error(`Failed to get teams: ${error instanceof Error ? error.message : 'Unknown error'}`, { cause: error });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agents-at-scale/ark",
3
- "version": "0.1.67",
3
+ "version": "0.1.69",
4
4
  "description": "Ark CLI - Interactive terminal interface for ARK agents",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -44,7 +44,7 @@
44
44
  "dependencies": {
45
45
  "@kubernetes/client-node": "^1.3.0",
46
46
  "@modelcontextprotocol/sdk": "^1.27.1",
47
- "axios": "^1.16.0",
47
+ "axios": "^1.18.0",
48
48
  "chalk": "^4.1.2",
49
49
  "commander": "^12.1.0",
50
50
  "debug": "^4.4.1",
@@ -85,17 +85,20 @@
85
85
  "node": ">=18.0.0"
86
86
  },
87
87
  "overrides": {
88
- "brace-expansion": ">=5.0.7",
88
+ "brace-expansion": ">=5.0.9",
89
+ "ip-address": "^10.3.1",
90
+ "js-yaml": "^4.3.1",
89
91
  "minimatch": "^10.2.3",
90
92
  "rollup": "4.59.0",
91
93
  "hono": "^4.12.25",
92
- "@hono/node-server": "^1.19.13",
94
+ "@hono/node-server": "^2.0.5",
93
95
  "flatted": "^3.4.2",
94
96
  "tar": "^7.5.11",
95
97
  "express-rate-limit": "^8.3.0",
96
- "fast-uri": "^3.1.4",
98
+ "fast-uri": "^4.1.4",
97
99
  "ws": "^8.21.0",
98
100
  "esbuild": "^0.28.1",
99
- "form-data": "^4.0.6"
101
+ "form-data": "^4.0.6",
102
+ "postcss": "^8.5.18"
100
103
  }
101
104
  }
@@ -63,7 +63,7 @@ ENTRYPOINT [ "/bin/bash", "-c", "mcp-proxy --debug --port 8080 --host 0.0.0.0 --
63
63
  {{- end }}
64
64
 
65
65
  {{- else if eq .Values.technology "go" }}
66
- FROM golang:1.26.5-alpine AS go-builder
66
+ FROM golang:1.26.6-alpine AS go-builder
67
67
  {{- if .Values.packageSource }}
68
68
  {{- if eq .Values.packageSource "go-install" }}
69
69
  RUN go install {{ .Values.packageName }}@latest
@@ -192,55 +192,52 @@ wheels = [
192
192
 
193
193
  [[package]]
194
194
  name = "cryptography"
195
- version = "48.0.1"
195
+ version = "50.0.0"
196
196
  source = { registry = "https://pypi.org/simple" }
197
197
  dependencies = [
198
198
  { name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
199
199
  ]
200
- sdist = { url = "https://files.pythonhosted.org/packages/12/45/870e7f4bef50e5f53b9f51d4428aee5290eedf58ba443f16b1ebb7ab8e66/cryptography-48.0.1.tar.gz", hash = "sha256:266f4ee051abb2f725b74ef8072b521ce1feacf685a3364fa6a6b45548db791a", size = 832989, upload-time = "2026-06-09T22:32:31.8Z" }
201
- wheels = [
202
- { url = "https://files.pythonhosted.org/packages/1b/bc/ee4137cbbe105652c0ee4252792b78fc8e7afa4b8e61d9d5dc05a7f45731/cryptography-48.0.1-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:3e4a1a3232eef2e6c732827d5722db29a0cc8b27af2a4d865b094cf954be9ca1", size = 8008324, upload-time = "2026-06-09T22:31:00.702Z" },
203
- { url = "https://files.pythonhosted.org/packages/d5/85/6379d42181bfc713094f081360fc5784d6c816b599d45e7f082502d173ce/cryptography-48.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:32143b24adb918f078134e1e230f1eb8cc04886b92c28b5f0041aaf3e5699225", size = 4696243, upload-time = "2026-06-09T22:32:33.446Z" },
204
- { url = "https://files.pythonhosted.org/packages/9c/87/c85d147b53323c7eb4d850920c8901377323c2a0ff8d79c262d4fee89aa2/cryptography-48.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0d27a5696721ef7a672b8c810f6aded391058e0b9486e63e6d93baf765da691", size = 4713235, upload-time = "2026-06-09T22:31:40.141Z" },
205
- { url = "https://files.pythonhosted.org/packages/79/58/67cbf8cf1ee7c54b439ca07bbecf8362c07afc11a3724fea70f745784add/cryptography-48.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb86ce1af36fe65041b6db9a8bb064ee621a7e5fded0f80d475ec243477cd242", size = 4702323, upload-time = "2026-06-09T22:31:42.191Z" },
206
- { url = "https://files.pythonhosted.org/packages/89/c6/24266ac10c47f6cd2a865f4446062b466da1d1f10b27189eac00e61bf0c9/cryptography-48.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:b024e784ad6c077ee0147b35ea9cbfc1e34e1fd4c1dcca214c2794d73a12df08", size = 5300085, upload-time = "2026-06-09T22:31:58.703Z" },
207
- { url = "https://files.pythonhosted.org/packages/d2/bb/cc4b78784f97efc8c5874c2a9743708d172be6663024b34a0467885ae0c8/cryptography-48.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3752f2dbc8f07a30aad2932c986cea495b03bb554887828225da104f732852b6", size = 4746137, upload-time = "2026-06-09T22:31:31.01Z" },
208
- { url = "https://files.pythonhosted.org/packages/1f/52/0c44de3f5267f8fbe8e835138017522a333436166e406f0db9b9e6e3033f/cryptography-48.0.1-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:bd81490cd5801d755cf97bb68ac191f14b708470b1c7cf4580f669b9c9264cd8", size = 4333867, upload-time = "2026-06-09T22:32:28.096Z" },
209
- { url = "https://files.pythonhosted.org/packages/9a/2e/772d7adbfa931537bc401640b7cac9976bff689bda187833e5d63b428e49/cryptography-48.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:66fd0771e7b9c6dcd44cf1120690d2338d16d72795cf40cae2786a39eba65429", size = 4701805, upload-time = "2026-06-09T22:31:38.284Z" },
210
- { url = "https://files.pythonhosted.org/packages/f8/a3/b06844f303873493c963caf581c04df31c7035e0c1b0f02c4814d319ec80/cryptography-48.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:3fd2ca57062b241c856670b073487d2e86c4637937ca5601e48f97bf8e11fc8f", size = 5258461, upload-time = "2026-06-09T22:31:04.187Z" },
211
- { url = "https://files.pythonhosted.org/packages/9f/13/8b765e2e12b07c74941caadb9d1c8fdc006c4dfbf2b8f2d610519758954d/cryptography-48.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:0ee6ea481db1ab889cba043ec1eda17bb9c1ea79db6722f779c3667f9f70322f", size = 4745488, upload-time = "2026-06-09T22:32:30.07Z" },
212
- { url = "https://files.pythonhosted.org/packages/2e/aa/48972bce55049b32a94f4907eda4d75fa385aad8a39506cc2fc72196ecf0/cryptography-48.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f2ceef93cb096aa3c4cc4b5c94ca6131f9196d28c64d6111533402a9b2054d41", size = 4830256, upload-time = "2026-06-09T22:31:43.868Z" },
213
- { url = "https://files.pythonhosted.org/packages/47/a2/e5079a032fb85cf6005046ca92bbd78b0c82dad2b5751ab8c311659da06f/cryptography-48.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9bd3f92d76217892b15df84ca256c2c113d386fdda7a7d8691aeeced976507c6", size = 4979117, upload-time = "2026-06-09T22:31:05.845Z" },
214
- { url = "https://files.pythonhosted.org/packages/b7/a0/8f50cae9c74e718ed769d63ed5c74bd0ea830c9550a74629cebd1b9c7bc7/cryptography-48.0.1-cp311-abi3-win32.whl", hash = "sha256:b9a32b876490d66c8bcc9963ef220199569748434ab01a9d6aaeabf88e7f5158", size = 3304154, upload-time = "2026-06-09T22:32:16.845Z" },
215
- { url = "https://files.pythonhosted.org/packages/c5/69/0572c77dbace6fef72f33755bd52ea399c71367250d366237f8691826b9e/cryptography-48.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:39489bfca54c7a1f6b297efcd8bc608ab92d16c4ca631b0cad4da46724588b24", size = 3817138, upload-time = "2026-06-09T22:32:00.388Z" },
216
- { url = "https://files.pythonhosted.org/packages/42/06/3e768b4c3bc78201583fa35a0e18f640dd782ff41afba88f8545481a8874/cryptography-48.0.1-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:f817adc181390bd54f2f700107a7419040fb7c1bdf2fc26f36551a06a68c3345", size = 7989830, upload-time = "2026-06-09T22:31:07.8Z" },
217
- { url = "https://files.pythonhosted.org/packages/8a/13/6476736484b94041110c8340a3eb63962fea4975baea8cb4a512adb44d4d/cryptography-48.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d5d30989c6917b478b5817902e85fddaea2261efa8648383d965381ccb9e1ac4", size = 4689201, upload-time = "2026-06-09T22:31:09.745Z" },
218
- { url = "https://files.pythonhosted.org/packages/79/62/65a87f34d2a431546e2509b85d55e8c90df86d668f6731da64d538512ac2/cryptography-48.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:df637c05205ea7c1d7fbcbe54bbfea648a52951155f997af13d895d0ecc96991", size = 4702822, upload-time = "2026-06-09T22:32:24.409Z" },
219
- { url = "https://files.pythonhosted.org/packages/7f/59/810b5204b0a9b10f4b6bc06bd551a8b609803cd931806bc3b71884b225e5/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:869c3b8a53bfe27147832df48b32adadf558249d50e76cb3769d40e986b13265", size = 4694875, upload-time = "2026-06-09T22:32:08.737Z" },
220
- { url = "https://files.pythonhosted.org/packages/24/dc/d8ca05ffea724eec6d232ea6f18e74c269eb6bdfdcc9bfba689790d1325f/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:e361afba8918070d376df76f408a4f67fec0ee9cff81a99e48fe9a233ef59e17", size = 5290385, upload-time = "2026-06-09T22:31:15.212Z" },
221
- { url = "https://files.pythonhosted.org/packages/03/8c/3be6cb4da181f5bb6c19cf560c2359d60644a6b5fc5b57854e528f47b296/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:d069066deead00ac7f090be101be875a06855908f7ec004c27b8fefb4acfb411", size = 4737082, upload-time = "2026-06-09T22:32:22.66Z" },
222
- { url = "https://files.pythonhosted.org/packages/aa/f6/d5f60a5a1434dbfd949e227fd0065d194c7e6b6ac526b17f5c06152b8231/cryptography-48.0.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:09f73a725d582cef64b91281a322cd798d14a33b2b6f2b7ad9531dc336d84c02", size = 4325328, upload-time = "2026-06-09T22:32:10.777Z" },
223
- { url = "https://files.pythonhosted.org/packages/17/b7/ba75dd947a14b6ad907b01ae8f6b5b348cdd1b48142f0063dee9e20c1d9d/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:15254441469dd6bf027039453288e2072124f8b6603563f5d759e1c9b69273fa", size = 4694530, upload-time = "2026-06-09T22:31:53.105Z" },
224
- { url = "https://files.pythonhosted.org/packages/62/29/50d6b9e8aff12d8b67afaeb3569335e32dc83a5723e3bbded24fdac9f809/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:8ace4507d1e6533c125f4fac754f8bb8b6a74c08e92179dabd7e16571a3efbf3", size = 5245046, upload-time = "2026-06-09T22:31:25.774Z" },
225
- { url = "https://files.pythonhosted.org/packages/9f/04/618f4115cfc0add0838c82507aa18a346089428da8653ad38b3ff36f5cb3/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:b4e391975f038e66432328639620a4aff2d307513b004f1ca06d6225bced815c", size = 4736660, upload-time = "2026-06-09T22:32:12.676Z" },
226
- { url = "https://files.pythonhosted.org/packages/24/9c/06e062462a0de28a3b3911322eded4c16deb9f441b1b7575d3dc59488ab5/cryptography-48.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42fcd8e26fe555d9b3577a135f5091fefa0aa4e99129c23fb56787a1bd4ada72", size = 4822229, upload-time = "2026-06-09T22:31:17.062Z" },
227
- { url = "https://files.pythonhosted.org/packages/f4/be/0561971eaaee4b8a0e7d5113c536921063ab91aaf23278ac374eaf881e11/cryptography-48.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1400da5e32a43253392277eac7490a60e497d810a63dd5608d71bbd7af507c9", size = 4966364, upload-time = "2026-06-09T22:31:32.842Z" },
228
- { url = "https://files.pythonhosted.org/packages/a4/27/728c77876f12b000820b69ae490f3c4083775e79e07827e9e60be07ad209/cryptography-48.0.1-cp314-cp314t-win32.whl", hash = "sha256:0df56b056bc17c1b7d6821dfa65216e62bd232d8ab05eb3db44e71d235651471", size = 3278498, upload-time = "2026-06-09T22:31:29.154Z" },
229
- { url = "https://files.pythonhosted.org/packages/06/e3/79a612c6d7b1e6ee0edd43633d53035bec2cfb78c82b76f7864f39e36f34/cryptography-48.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:9de21387aa95e2a895823d0745b430bed4f33503ba9ab5e0b5311f33e37d66d2", size = 3798790, upload-time = "2026-06-09T22:31:56.697Z" },
230
- { url = "https://files.pythonhosted.org/packages/ca/6c/00fa2a95997164c8b2072ce327c23d4ab20809ccc323ea5fab91e53a4bba/cryptography-48.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:4fdc69f8e4316bcf0c8c8ec1f26f285d12e8142d88d96c876a59a03be3f6ae67", size = 7987408, upload-time = "2026-06-09T22:32:20.777Z" },
231
- { url = "https://files.pythonhosted.org/packages/b0/d9/45f309a7e4e5f3f8f121d6d3be9e94024a7726ec598d6e08ae04edb2f04d/cryptography-48.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48fe40804d4caa2288f24e70ca8c64c42dd826da0ad7e4f1b41b2128d679e6c8", size = 4690196, upload-time = "2026-06-09T22:31:54.74Z" },
232
- { url = "https://files.pythonhosted.org/packages/5f/9f/a1bc8bcc798811b8527eb374bbccf30a3f3e806829d967118222bf1125eb/cryptography-48.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:86be3b1b0b6bf09482fb50a979c508d2950ed95f5621ec77f4e385962006b83a", size = 4696782, upload-time = "2026-06-09T22:31:45.615Z" },
233
- { url = "https://files.pythonhosted.org/packages/66/c2/81a4fb4e4373c500bb526bc337ac5719dd31dd15b970b84a238168c6aa08/cryptography-48.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4ab0a343c807bbcd90c971cd1ecf072937cd01847a9e002bef88fb47ac6be577", size = 4696618, upload-time = "2026-06-09T22:31:11.564Z" },
234
- { url = "https://files.pythonhosted.org/packages/e5/0b/aa68b221dde92d09cb29a024ede17550ee21e77a404e59fc093c82bb51e1/cryptography-48.0.1-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9621de99d2da096006b629979efd8ae7eb2d8b822488d0c89ee4000c306c59b1", size = 5289970, upload-time = "2026-06-09T22:31:20.368Z" },
235
- { url = "https://files.pythonhosted.org/packages/78/13/fba657f958d2af66ea959a4ba01212632089249d34af1ae48054136344d7/cryptography-48.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:88c852a0ae366e262e5a1744b685e6a433dc8788dd2a277e418bf4904203609d", size = 4731873, upload-time = "2026-06-09T22:31:22.253Z" },
236
- { url = "https://files.pythonhosted.org/packages/4c/4c/9a964756d24a26b3e34dfcb16f961b89838786e6700b635b0d1e3adff4b6/cryptography-48.0.1-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:43c5835e2cb98c8733d86f57d6fc879b613f5c3478607281c3e36daffc6dd8a6", size = 4330804, upload-time = "2026-06-09T22:31:36.56Z" },
237
- { url = "https://files.pythonhosted.org/packages/4b/0f/a10f3a6eb12950a10e3a874070283aa2dd5875b2bfd15fad8a3e17b3f13e/cryptography-48.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:fe0180af5bf9236518a087e35bf2d9a347d5f5f51e63c579d683ddff424e3d46", size = 4696217, upload-time = "2026-06-09T22:31:13.351Z" },
238
- { url = "https://files.pythonhosted.org/packages/f3/6f/5cd12f951165ea73ef85266775d97e4c763b2474ccfd816dd69d3a18d6f8/cryptography-48.0.1-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:b7a2d1a937a738a881737cec135a38bb61470589b17515b9f73f571d0ae10401", size = 5245252, upload-time = "2026-06-09T22:32:02.193Z" },
239
- { url = "https://files.pythonhosted.org/packages/68/ab/8aaa12e4516ec4464033ab79b6f3b592bd5a92102467c4ace8a0d970203f/cryptography-48.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b74ca3b8e5ecdd833bf6a002ca41b4793bb27fb8f1c06ffaf2643c9e9140e31b", size = 4731388, upload-time = "2026-06-09T22:32:04.019Z" },
240
- { url = "https://files.pythonhosted.org/packages/1b/24/50027ea4dca85ec1f40688f3c24fb32ccacd520583c9592c3cc95628e6fb/cryptography-48.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2c37f2461406063b417837f5f3daab668652acd82423efcd7f0a9f04be972de1", size = 4824186, upload-time = "2026-06-09T22:32:18.707Z" },
241
- { url = "https://files.pythonhosted.org/packages/52/41/04cb5eb17085ade6f50cc611fb657df6a0f5885350de8764ece89c050197/cryptography-48.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:86fe77abb1bd87afb251d4d02ada7ecf53a32cee9b67d976abb2e45a13297475", size = 4964539, upload-time = "2026-06-09T22:31:18.793Z" },
242
- { url = "https://files.pythonhosted.org/packages/36/bf/ed70785c496e89d7e73b7cda2d21f2447fd6d4e821714b8d04ff217fed92/cryptography-48.0.1-cp39-abi3-win32.whl", hash = "sha256:6b2c0c3e6ccf3ade7750f836ef3ee36eea250cc467d45c256895573ac08cc6f1", size = 3282307, upload-time = "2026-06-09T22:30:53.162Z" },
243
- { url = "https://files.pythonhosted.org/packages/b3/ff/371ea7d252656ee1eb6d83eeeef3d1d0c6baf1d6497687d081ea03814670/cryptography-48.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:9a49ca6c81417f6a5edb50375a60cccdd70fa0a91a5211829dbea74eba94d2ac", size = 3793408, upload-time = "2026-06-09T22:32:15.191Z" },
200
+ sdist = { url = "https://files.pythonhosted.org/packages/de/41/6cbdcf9142d00fe82836fbb51e503e58088575cf7a0fe1dbff6695bf0840/cryptography-50.0.0.tar.gz", hash = "sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9", size = 880201, upload-time = "2026-07-31T14:25:10.11Z" }
201
+ wheels = [
202
+ { url = "https://files.pythonhosted.org/packages/c5/5c/59086b4aac5e879d38ddbcf74e4be7ade89cebc3eb199a55da998c3bb46a/cryptography-50.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03", size = 4001252, upload-time = "2026-07-31T14:23:33.331Z" },
203
+ { url = "https://files.pythonhosted.org/packages/57/ef/8f2df13c7216bcad3e1c74e07f6e193d93e998e114f524a53877c9af27ad/cryptography-50.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645", size = 4719554, upload-time = "2026-07-31T14:23:35.611Z" },
204
+ { url = "https://files.pythonhosted.org/packages/d9/41/029086c34d91052fc3b88bcc8056f709a7c915c7a23b235a54eb800b1c97/cryptography-50.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7", size = 4702130, upload-time = "2026-07-31T14:23:37.635Z" },
205
+ { url = "https://files.pythonhosted.org/packages/7d/ff/b6ce0954962e7f7b969f850a883744197bb3910bdfd7b6da162eab7d9f68/cryptography-50.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3", size = 4725244, upload-time = "2026-07-31T14:23:39.471Z" },
206
+ { url = "https://files.pythonhosted.org/packages/06/1e/63a1027cb7fec360a182208e1b7767d5aa1fe57be3d6aa856e69a321edc0/cryptography-50.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f", size = 5342265, upload-time = "2026-07-31T14:23:41.286Z" },
207
+ { url = "https://files.pythonhosted.org/packages/6b/72/a1116d683a6d7ece94590013882515de087edf9ef0e6292aae615a44df73/cryptography-50.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae", size = 4734609, upload-time = "2026-07-31T14:23:43.139Z" },
208
+ { url = "https://files.pythonhosted.org/packages/15/37/36a9c479bbe49acea2636c7fd3360d20f7b7e079c300352011c44850b181/cryptography-50.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a", size = 4356517, upload-time = "2026-07-31T14:23:44.939Z" },
209
+ { url = "https://files.pythonhosted.org/packages/32/98/8a151d64367204cbc63ec65d37502f1d9c53cf4bfc6ec3c532614dbec60d/cryptography-50.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987", size = 4724529, upload-time = "2026-07-31T14:23:46.93Z" },
210
+ { url = "https://files.pythonhosted.org/packages/22/f6/ec13b470172126464a86bf54d2294a46d29837fc51ba3e45d4047946fb5e/cryptography-50.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169", size = 5299852, upload-time = "2026-07-31T14:23:48.851Z" },
211
+ { url = "https://files.pythonhosted.org/packages/da/3a/f05e32c99d440c9bb891ea0e36c9091891e36be5a9a87ab2ee6ea20729f6/cryptography-50.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f", size = 4734462, upload-time = "2026-07-31T14:23:50.861Z" },
212
+ { url = "https://files.pythonhosted.org/packages/ca/dc/bd72b26be8953f80625f63151efd38eee71c76ca6cf591c08ff34615a79e/cryptography-50.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105", size = 4852708, upload-time = "2026-07-31T14:23:52.715Z" },
213
+ { url = "https://files.pythonhosted.org/packages/27/20/c930314a2ab476d15dec966ec87e2e9637bb02b06106b12c0396c57bb603/cryptography-50.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef", size = 5004179, upload-time = "2026-07-31T14:23:54.887Z" },
214
+ { url = "https://files.pythonhosted.org/packages/32/2e/c9db68a0c4bfa28e310707527c0ee3a2bd254104d2e02e68f368e197aa4c/cryptography-50.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30", size = 3840395, upload-time = "2026-07-31T14:23:56.677Z" },
215
+ { url = "https://files.pythonhosted.org/packages/c3/fb/951032a3bf22a5697c83183fb6294a4843772947a70e616c57b3ff5f522e/cryptography-50.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41", size = 3989258, upload-time = "2026-07-31T14:23:58.881Z" },
216
+ { url = "https://files.pythonhosted.org/packages/d4/67/91eb047e69c5e845f2f14b8a2e4a1aab0f283cb885531e9e22c8adb176bc/cryptography-50.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc", size = 4700648, upload-time = "2026-07-31T14:24:00.702Z" },
217
+ { url = "https://files.pythonhosted.org/packages/30/82/85f0f7425c856b9f96459411eb12e74ef72df9caf6f8f15bf23a33ff131f/cryptography-50.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f", size = 4682442, upload-time = "2026-07-31T14:24:02.538Z" },
218
+ { url = "https://files.pythonhosted.org/packages/1a/28/b555a365adff1cca2fbe7b9e487d68a40de6bc67ff2cb587473eb43de0e7/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3", size = 4707596, upload-time = "2026-07-31T14:24:04.394Z" },
219
+ { url = "https://files.pythonhosted.org/packages/72/d8/f52538140cc719df62a01cf87d1c7142318d235817109d6f4054d7c352d6/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533", size = 5314552, upload-time = "2026-07-31T14:24:06.31Z" },
220
+ { url = "https://files.pythonhosted.org/packages/38/14/6120e5bd7c5aa022ad15424ba4d5c5269d0d9448ed4d55e492ea91e3c1c4/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037", size = 4717113, upload-time = "2026-07-31T14:24:08.349Z" },
221
+ { url = "https://files.pythonhosted.org/packages/fa/71/190bf38c3ee2e0f8efc9860ae100c9df4169742eef274b91e7aa1cb133b9/cryptography-50.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f", size = 4338580, upload-time = "2026-07-31T14:24:10.227Z" },
222
+ { url = "https://files.pythonhosted.org/packages/3a/63/504ccfbbe61fd8aa983f7f146399cdf034c72c2fc55f5b2dfdcdcdb20c99/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11", size = 4707038, upload-time = "2026-07-31T14:24:12.169Z" },
223
+ { url = "https://files.pythonhosted.org/packages/01/77/2cf79bbfc4d12ca106437a6e170d6aaa01a373e93093118aaaef0e801bd4/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d", size = 5273110, upload-time = "2026-07-31T14:24:14.38Z" },
224
+ { url = "https://files.pythonhosted.org/packages/e5/45/8aae2972c520145377ea3559a605a899bebe227bf070b33cdb445929a9b9/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c", size = 4716439, upload-time = "2026-07-31T14:24:16.415Z" },
225
+ { url = "https://files.pythonhosted.org/packages/7b/20/4fe50b619a48c2525cc46e2dbc1ac490708d704be5d467bdaac6dc955682/cryptography-50.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c", size = 4837383, upload-time = "2026-07-31T14:24:18.553Z" },
226
+ { url = "https://files.pythonhosted.org/packages/92/91/3a31366e183343d3703f8995c095f5734676bd6938118047e50fcf279eb4/cryptography-50.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95", size = 4985772, upload-time = "2026-07-31T14:24:20.385Z" },
227
+ { url = "https://files.pythonhosted.org/packages/74/9a/02ffe35b2853d121689871eb5dce862092562b3a1ed5cc98f1aaed441506/cryptography-50.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269", size = 3816291, upload-time = "2026-07-31T14:24:22.125Z" },
228
+ { url = "https://files.pythonhosted.org/packages/03/37/73d005be173aff344af30e9fd2a576575cb2391a7101d9cd3842e1fa8cce/cryptography-50.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07", size = 4036009, upload-time = "2026-07-31T14:24:24.122Z" },
229
+ { url = "https://files.pythonhosted.org/packages/ff/c6/7a6202a534e32103a285b7834a120869557fe198d51d7cfe59754c8bda9c/cryptography-50.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3", size = 4745252, upload-time = "2026-07-31T14:24:26.118Z" },
230
+ { url = "https://files.pythonhosted.org/packages/85/4f/0fa8c2f4428198f15d9ff8d63400e27afbf94ce833f6108da1eb3753f945/cryptography-50.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f", size = 4728939, upload-time = "2026-07-31T14:24:27.994Z" },
231
+ { url = "https://files.pythonhosted.org/packages/d1/63/54dd723490ba2dc09b299682c10b38db38f159728bcaae8c591b8af2f22d/cryptography-50.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5", size = 4748483, upload-time = "2026-07-31T14:24:30.254Z" },
232
+ { url = "https://files.pythonhosted.org/packages/1d/dd/7c77d26285cc7f6991efce64a0f5b4f9383bfa5dd8c5033003eaf7db4cdb/cryptography-50.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f", size = 5367599, upload-time = "2026-07-31T14:24:32.457Z" },
233
+ { url = "https://files.pythonhosted.org/packages/46/c9/f60aed34c013f317f92817b6c171c2d22a78270fa41109bd4b08af26b194/cryptography-50.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025", size = 4762647, upload-time = "2026-07-31T14:24:34.599Z" },
234
+ { url = "https://files.pythonhosted.org/packages/be/f3/f9a0173b139372c3a48ed98154b45cc6b9de17c789d5ab552e621c293609/cryptography-50.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a", size = 4385197, upload-time = "2026-07-31T14:24:36.647Z" },
235
+ { url = "https://files.pythonhosted.org/packages/d8/36/83bb81f6e569bc38e1e4a7bc80f29b46bb9601920bc455fc8e888f5d5742/cryptography-50.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b", size = 4748095, upload-time = "2026-07-31T14:24:39.493Z" },
236
+ { url = "https://files.pythonhosted.org/packages/6b/16/d3008eff98c764979865834c3d386d4fd041b5f52e7f34fc29ac1a5eb515/cryptography-50.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708", size = 5325948, upload-time = "2026-07-31T14:24:41.556Z" },
237
+ { url = "https://files.pythonhosted.org/packages/9c/f8/d97f9603efda3888187bfdb893f26c41be4735c10631d05d284ee6b047c4/cryptography-50.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47", size = 4762400, upload-time = "2026-07-31T14:24:43.636Z" },
238
+ { url = "https://files.pythonhosted.org/packages/64/a2/4615c8f7d81a00b1d6e6afe19f694e1543582349fb5f4076f6cb5dc36485/cryptography-50.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9", size = 4878208, upload-time = "2026-07-31T14:24:45.522Z" },
239
+ { url = "https://files.pythonhosted.org/packages/d2/1a/efcfb02f91407149a0dacffffab791f7e19bf6385f63b3666dc8b5e5c9c8/cryptography-50.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7", size = 5037050, upload-time = "2026-07-31T14:24:47.697Z" },
240
+ { url = "https://files.pythonhosted.org/packages/57/30/4a22984d4f1bdfb8c054f07a92bc176b97a3134cc1d6c4b3bffb1f3688b4/cryptography-50.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba", size = 3874135, upload-time = "2026-07-31T14:24:50.085Z" },
244
241
  ]
245
242
 
246
243
  [[package]]
@@ -672,10 +669,10 @@ resolution-markers = [
672
669
  "python_full_version < '3.14' and sys_platform != 'win32'",
673
670
  ]
674
671
  dependencies = [
675
- { name = "annotated-types", marker = "python_full_version < '3.14'" },
676
- { name = "pydantic-core", version = "2.33.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" },
677
- { name = "typing-extensions", marker = "python_full_version < '3.14'" },
678
- { name = "typing-inspection", version = "0.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" },
672
+ { name = "annotated-types" },
673
+ { name = "pydantic-core", version = "2.33.2", source = { registry = "https://pypi.org/simple" } },
674
+ { name = "typing-extensions" },
675
+ { name = "typing-inspection", version = "0.4.1", source = { registry = "https://pypi.org/simple" } },
679
676
  ]
680
677
  sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" }
681
678
  wheels = [
@@ -684,7 +681,7 @@ wheels = [
684
681
 
685
682
  [package.optional-dependencies]
686
683
  email = [
687
- { name = "email-validator", marker = "python_full_version < '3.14'" },
684
+ { name = "email-validator" },
688
685
  ]
689
686
 
690
687
  [[package]]
@@ -696,10 +693,10 @@ resolution-markers = [
696
693
  "python_full_version >= '3.14' and sys_platform != 'win32'",
697
694
  ]
698
695
  dependencies = [
699
- { name = "annotated-types", marker = "python_full_version >= '3.14'" },
700
- { name = "pydantic-core", version = "2.46.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" },
701
- { name = "typing-extensions", marker = "python_full_version >= '3.14'" },
702
- { name = "typing-inspection", version = "0.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" },
696
+ { name = "annotated-types" },
697
+ { name = "pydantic-core", version = "2.46.4", source = { registry = "https://pypi.org/simple" } },
698
+ { name = "typing-extensions" },
699
+ { name = "typing-inspection", version = "0.4.2", source = { registry = "https://pypi.org/simple" } },
703
700
  ]
704
701
  sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" }
705
702
  wheels = [
@@ -708,7 +705,7 @@ wheels = [
708
705
 
709
706
  [package.optional-dependencies]
710
707
  email = [
711
- { name = "email-validator", marker = "python_full_version >= '3.14'" },
708
+ { name = "email-validator" },
712
709
  ]
713
710
 
714
711
  [[package]]
@@ -720,7 +717,7 @@ resolution-markers = [
720
717
  "python_full_version < '3.14' and sys_platform != 'win32'",
721
718
  ]
722
719
  dependencies = [
723
- { name = "typing-extensions", marker = "python_full_version < '3.14'" },
720
+ { name = "typing-extensions" },
724
721
  ]
725
722
  sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" }
726
723
  wheels = [
@@ -766,7 +763,7 @@ resolution-markers = [
766
763
  "python_full_version >= '3.14' and sys_platform != 'win32'",
767
764
  ]
768
765
  dependencies = [
769
- { name = "typing-extensions", marker = "python_full_version >= '3.14'" },
766
+ { name = "typing-extensions" },
770
767
  ]
771
768
  sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" }
772
769
  wheels = [
@@ -1099,8 +1096,8 @@ name = "secretstorage"
1099
1096
  version = "3.5.0"
1100
1097
  source = { registry = "https://pypi.org/simple" }
1101
1098
  dependencies = [
1102
- { name = "cryptography", marker = "sys_platform != 'win32'" },
1103
- { name = "jeepney", marker = "sys_platform != 'win32'" },
1099
+ { name = "cryptography" },
1100
+ { name = "jeepney" },
1104
1101
  ]
1105
1102
  sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" }
1106
1103
  wheels = [
@@ -1170,7 +1167,7 @@ resolution-markers = [
1170
1167
  "python_full_version < '3.14' and sys_platform != 'win32'",
1171
1168
  ]
1172
1169
  dependencies = [
1173
- { name = "typing-extensions", marker = "python_full_version < '3.14'" },
1170
+ { name = "typing-extensions" },
1174
1171
  ]
1175
1172
  sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" }
1176
1173
  wheels = [
@@ -1186,7 +1183,7 @@ resolution-markers = [
1186
1183
  "python_full_version >= '3.14' and sys_platform != 'win32'",
1187
1184
  ]
1188
1185
  dependencies = [
1189
- { name = "typing-extensions", marker = "python_full_version >= '3.14'" },
1186
+ { name = "typing-extensions" },
1190
1187
  ]
1191
1188
  sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" }
1192
1189
  wheels = [