@agents-at-scale/ark 0.1.64 → 0.1.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/agents/index.js +13 -1
- package/dist/commands/install/index.js +33 -15
- package/dist/commands/mcp/login.js +24 -0
- package/dist/commands/models/kubernetes/manifest-builder.js +30 -18
- package/dist/commands/models/kubernetes/secret-manager.js +18 -8
- package/dist/commands/models/providers/bedrock.d.ts +7 -2
- package/dist/commands/models/providers/bedrock.js +91 -42
- package/dist/commands/query/index.js +11 -1
- package/dist/commands/status/index.js +39 -5
- package/dist/lib/arkApiClient.d.ts +4 -0
- package/dist/lib/arkApiClient.js +3 -0
- package/dist/lib/chatClient.d.ts +2 -0
- package/dist/lib/chatClient.js +25 -1
- package/dist/lib/executeQuery.d.ts +4 -1
- package/dist/lib/executeQuery.js +19 -0
- package/dist/lib/readinessChecks.d.ts +10 -2
- package/dist/lib/readinessChecks.js +93 -4
- package/dist/lib/types.d.ts +5 -0
- package/package.json +7 -5
- package/templates/mcp-server/Dockerfile +1 -1
- package/templates/models/azure.yaml +7 -6
- package/templates/models/claude.yaml +1 -1
- package/templates/models/gemini.yaml +1 -1
- package/templates/models/openai.yaml +1 -1
- package/templates/query/query.template.yaml +3 -3
- package/templates/tool/uv.lock +54 -54
package/dist/lib/chatClient.js
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import { QUERY_ANNOTATIONS } from './constants.js';
|
|
2
|
+
/** Best-effort human-readable error from a failed query's status. */
|
|
3
|
+
function extractQueryError(status) {
|
|
4
|
+
if (!status)
|
|
5
|
+
return 'Query failed';
|
|
6
|
+
if (status.error)
|
|
7
|
+
return status.error;
|
|
8
|
+
if (status.message)
|
|
9
|
+
return status.message;
|
|
10
|
+
const condition = status.conditions?.find((c) => c.message);
|
|
11
|
+
if (condition?.message)
|
|
12
|
+
return condition.message.trim();
|
|
13
|
+
if (status.response?.content)
|
|
14
|
+
return status.response.content;
|
|
15
|
+
return 'Query failed';
|
|
16
|
+
}
|
|
2
17
|
export class ChatClient {
|
|
3
18
|
arkApiClient;
|
|
4
19
|
constructor(arkApiClient) {
|
|
@@ -26,6 +41,7 @@ export class ChatClient {
|
|
|
26
41
|
sessionId: config.sessionId,
|
|
27
42
|
conversationId: config.conversationId,
|
|
28
43
|
timeout: config.queryTimeout,
|
|
44
|
+
parameters: config.parameters,
|
|
29
45
|
...(Object.keys(annotations).length > 0
|
|
30
46
|
? { metadata: { annotations } }
|
|
31
47
|
: {}),
|
|
@@ -72,7 +88,7 @@ export class ChatClient {
|
|
|
72
88
|
onChunk(content, undefined, undefined);
|
|
73
89
|
}
|
|
74
90
|
if (phase === 'error') {
|
|
75
|
-
throw new Error(
|
|
91
|
+
throw new Error(extractQueryError(query.status));
|
|
76
92
|
}
|
|
77
93
|
return content;
|
|
78
94
|
}
|
|
@@ -155,6 +171,14 @@ export class ChatClient {
|
|
|
155
171
|
finally {
|
|
156
172
|
reader.releaseLock();
|
|
157
173
|
}
|
|
174
|
+
// Empty stream (no content, no tool calls) can mean the query errored — surface it.
|
|
175
|
+
if (!fullResponse && toolCallsById.size === 0 && !signal?.aborted) {
|
|
176
|
+
const query = (await this.arkApiClient.getQuery(queryName));
|
|
177
|
+
const phase = query?.status?.phase;
|
|
178
|
+
if (phase === 'error' || phase === 'canceled') {
|
|
179
|
+
throw new Error(extractQueryError(query?.status));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
158
182
|
return fullResponse;
|
|
159
183
|
}
|
|
160
184
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared query execution logic for both universal and resource-specific query commands
|
|
3
3
|
*/
|
|
4
|
-
import type { QueryTarget } from './types.js';
|
|
4
|
+
import type { QueryTarget, QueryParameter } from './types.js';
|
|
5
5
|
export interface QueryOptions {
|
|
6
6
|
targetType: string;
|
|
7
7
|
targetName: string;
|
|
@@ -12,6 +12,7 @@ export interface QueryOptions {
|
|
|
12
12
|
outputFormat?: string;
|
|
13
13
|
sessionId?: string;
|
|
14
14
|
conversationId?: string;
|
|
15
|
+
parameters?: QueryParameter[];
|
|
15
16
|
}
|
|
16
17
|
export declare function executeQuery(options: QueryOptions): Promise<void>;
|
|
17
18
|
/**
|
|
@@ -19,3 +20,5 @@ export declare function executeQuery(options: QueryOptions): Promise<void>;
|
|
|
19
20
|
* Returns QueryTarget or null if invalid
|
|
20
21
|
*/
|
|
21
22
|
export declare function parseTarget(target: string): QueryTarget | null;
|
|
23
|
+
/** Parse repeated `name=value` flags into QueryParameters (mirrors the fark CLI). */
|
|
24
|
+
export declare function parseParameters(parameters: string[]): QueryParameter[];
|
package/dist/lib/executeQuery.js
CHANGED
|
@@ -37,6 +37,7 @@ export async function executeQuery(options) {
|
|
|
37
37
|
sessionId,
|
|
38
38
|
conversationId,
|
|
39
39
|
queryTimeout: options.timeout,
|
|
40
|
+
parameters: options.parameters,
|
|
40
41
|
}, (chunk, toolCalls, arkMetadata) => {
|
|
41
42
|
if (firstOutput) {
|
|
42
43
|
spinner.stop();
|
|
@@ -120,6 +121,9 @@ async function executeQueryWithFormat(options) {
|
|
|
120
121
|
type: options.targetType,
|
|
121
122
|
name: options.targetName,
|
|
122
123
|
},
|
|
124
|
+
...(options.parameters && options.parameters.length > 0
|
|
125
|
+
? { parameters: options.parameters }
|
|
126
|
+
: {}),
|
|
123
127
|
},
|
|
124
128
|
};
|
|
125
129
|
try {
|
|
@@ -172,3 +176,18 @@ export function parseTarget(target) {
|
|
|
172
176
|
name: parts[1],
|
|
173
177
|
};
|
|
174
178
|
}
|
|
179
|
+
/** Parse repeated `name=value` flags into QueryParameters (mirrors the fark CLI). */
|
|
180
|
+
export function parseParameters(parameters) {
|
|
181
|
+
return parameters.map((param) => {
|
|
182
|
+
const idx = param.indexOf('=');
|
|
183
|
+
if (idx === -1) {
|
|
184
|
+
throw new Error(`parameter must be in name=value format, got: ${param}`);
|
|
185
|
+
}
|
|
186
|
+
const name = param.slice(0, idx).trim();
|
|
187
|
+
const value = param.slice(idx + 1).trim();
|
|
188
|
+
if (name === '') {
|
|
189
|
+
throw new Error(`parameter name cannot be empty in: ${param}`);
|
|
190
|
+
}
|
|
191
|
+
return { name, value };
|
|
192
|
+
});
|
|
193
|
+
}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
export type StorageBackend = 'etcd' | 'postgresql';
|
|
2
|
+
export type DetectedBackend = StorageBackend | 'unknown';
|
|
3
|
+
export type BackendStatus = 'etcd' | 'postgresql' | 'not-installed' | 'unreachable' | 'forbidden' | 'undetermined';
|
|
4
|
+
export interface BackendDetection {
|
|
5
|
+
backend: DetectedBackend;
|
|
6
|
+
status: BackendStatus;
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
2
9
|
export interface ReadinessCheckResult {
|
|
3
10
|
name: string;
|
|
4
11
|
passed: boolean;
|
|
@@ -6,5 +13,6 @@ export interface ReadinessCheckResult {
|
|
|
6
13
|
message?: string;
|
|
7
14
|
}
|
|
8
15
|
export type ReadinessProgress = (result: ReadinessCheckResult) => void;
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function
|
|
16
|
+
export declare function describeStorageBackend(): Promise<BackendDetection>;
|
|
17
|
+
export declare function detectStorageBackend(): Promise<DetectedBackend>;
|
|
18
|
+
export declare function runReadinessChecks(timeoutSeconds: number, backend: DetectedBackend, onProgress?: ReadinessProgress): Promise<ReadinessCheckResult[]>;
|
|
@@ -14,9 +14,89 @@ async function runKubectl(args, timeoutMs) {
|
|
|
14
14
|
stderr: result.stderr ?? '',
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
+
function classifyFailure(stderr) {
|
|
18
|
+
if (/not\s*found/i.test(stderr)) {
|
|
19
|
+
return 'not-found';
|
|
20
|
+
}
|
|
21
|
+
if (/forbidden|unauthorized/i.test(stderr)) {
|
|
22
|
+
return 'forbidden';
|
|
23
|
+
}
|
|
24
|
+
if (/connection refused|was refused|no such host|i\/o timeout|timed out|dial tcp|unable to connect|did you specify the right host/i.test(stderr)) {
|
|
25
|
+
return 'unreachable';
|
|
26
|
+
}
|
|
27
|
+
return 'undetermined';
|
|
28
|
+
}
|
|
29
|
+
const DETECT_RETRY_DELAY_MS = 250;
|
|
30
|
+
const DETECT_MAX_RETRIES = 2;
|
|
31
|
+
function isAuthoritativeResult(result) {
|
|
32
|
+
if (result.exitCode === 0) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
return /not\s*found|forbidden/i.test(result.stderr);
|
|
36
|
+
}
|
|
37
|
+
async function probeKubectl(args, timeoutMs, maxRetries = DETECT_MAX_RETRIES) {
|
|
38
|
+
let result = await runKubectl(args, timeoutMs);
|
|
39
|
+
for (let attempt = 0; attempt < maxRetries && !isAuthoritativeResult(result); attempt++) {
|
|
40
|
+
await sleep(DETECT_RETRY_DELAY_MS);
|
|
41
|
+
result = await runKubectl(args, timeoutMs);
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
function unknownFrom(reason) {
|
|
46
|
+
switch (reason) {
|
|
47
|
+
case 'forbidden':
|
|
48
|
+
return {
|
|
49
|
+
backend: 'unknown',
|
|
50
|
+
status: 'forbidden',
|
|
51
|
+
message: 'Access denied reading cluster resources (RBAC) — cannot determine the storage backend.',
|
|
52
|
+
};
|
|
53
|
+
case 'unreachable':
|
|
54
|
+
return {
|
|
55
|
+
backend: 'unknown',
|
|
56
|
+
status: 'unreachable',
|
|
57
|
+
message: 'Cluster is not reachable (connection failed or timed out) — cannot determine the storage backend.',
|
|
58
|
+
};
|
|
59
|
+
default:
|
|
60
|
+
return {
|
|
61
|
+
backend: 'unknown',
|
|
62
|
+
status: 'undetermined',
|
|
63
|
+
message: 'Could not determine the storage backend (unrecognized kubectl error).',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function describeStorageBackend() {
|
|
68
|
+
const crd = await probeKubectl(['get', 'crd', 'agents.ark.mckinsey.com'], 10000);
|
|
69
|
+
if (crd.exitCode === 0) {
|
|
70
|
+
return {
|
|
71
|
+
backend: 'etcd',
|
|
72
|
+
status: 'etcd',
|
|
73
|
+
message: 'ARK is running the etcd (Kubernetes-native) backend; agents are stored as CRDs.',
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const crdReason = classifyFailure(crd.stderr);
|
|
77
|
+
if (crdReason !== 'not-found') {
|
|
78
|
+
return unknownFrom(crdReason);
|
|
79
|
+
}
|
|
80
|
+
const api = await probeKubectl(['get', 'apiservice', 'v1alpha1.ark.mckinsey.com', '-o', 'name'], 10000);
|
|
81
|
+
if (api.exitCode === 0) {
|
|
82
|
+
return {
|
|
83
|
+
backend: 'postgresql',
|
|
84
|
+
status: 'postgresql',
|
|
85
|
+
message: 'ARK is running the PostgreSQL backend; agents are served by the aggregated API server.',
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const apiReason = classifyFailure(api.stderr);
|
|
89
|
+
if (apiReason === 'not-found') {
|
|
90
|
+
return {
|
|
91
|
+
backend: 'unknown',
|
|
92
|
+
status: 'not-installed',
|
|
93
|
+
message: 'ARK is not installed on this cluster (no agents CRD and no aggregated APIService).',
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return unknownFrom(apiReason);
|
|
97
|
+
}
|
|
17
98
|
export async function detectStorageBackend() {
|
|
18
|
-
|
|
19
|
-
return exitCode === 0 ? 'etcd' : 'postgresql';
|
|
99
|
+
return (await describeStorageBackend()).backend;
|
|
20
100
|
}
|
|
21
101
|
async function waitForApiServices(timeoutSeconds) {
|
|
22
102
|
const start = Date.now();
|
|
@@ -64,11 +144,20 @@ async function waitForApiGroup(timeoutSeconds) {
|
|
|
64
144
|
message: 'timed out waiting for ark.mckinsey.com API group',
|
|
65
145
|
};
|
|
66
146
|
}
|
|
67
|
-
export async function runReadinessChecks(timeoutSeconds, onProgress) {
|
|
68
|
-
const backend = await detectStorageBackend();
|
|
147
|
+
export async function runReadinessChecks(timeoutSeconds, backend, onProgress) {
|
|
69
148
|
if (backend === 'etcd') {
|
|
70
149
|
return [];
|
|
71
150
|
}
|
|
151
|
+
if (backend === 'unknown') {
|
|
152
|
+
const result = {
|
|
153
|
+
name: 'Storage backend',
|
|
154
|
+
passed: false,
|
|
155
|
+
durationMs: 0,
|
|
156
|
+
message: 'could not determine storage backend (ARK not installed, cluster unreachable, or access denied)',
|
|
157
|
+
};
|
|
158
|
+
onProgress?.(result);
|
|
159
|
+
return [result];
|
|
160
|
+
}
|
|
72
161
|
const overallStart = Date.now();
|
|
73
162
|
const remaining = () => Math.max(1, timeoutSeconds - Math.floor((Date.now() - overallStart) / 1000));
|
|
74
163
|
const checks = [
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -92,6 +92,10 @@ export interface QueryTarget {
|
|
|
92
92
|
type: string;
|
|
93
93
|
name: string;
|
|
94
94
|
}
|
|
95
|
+
export interface QueryParameter {
|
|
96
|
+
name: string;
|
|
97
|
+
value?: string;
|
|
98
|
+
}
|
|
95
99
|
export interface QueryResponse {
|
|
96
100
|
content?: string;
|
|
97
101
|
a2a?: {
|
|
@@ -124,6 +128,7 @@ export interface Query {
|
|
|
124
128
|
sessionId?: string;
|
|
125
129
|
conversationId?: string;
|
|
126
130
|
timeout?: string;
|
|
131
|
+
parameters?: QueryParameter[];
|
|
127
132
|
};
|
|
128
133
|
status?: QueryStatus;
|
|
129
134
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agents-at-scale/ark",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.66",
|
|
4
4
|
"description": "Ark CLI - Interactive terminal interface for ARK agents",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -85,15 +85,17 @@
|
|
|
85
85
|
"node": ">=18.0.0"
|
|
86
86
|
},
|
|
87
87
|
"overrides": {
|
|
88
|
-
"brace-expansion": ">=5.0.
|
|
88
|
+
"brace-expansion": ">=5.0.7",
|
|
89
89
|
"minimatch": "^10.2.3",
|
|
90
90
|
"rollup": "4.59.0",
|
|
91
|
-
"hono": "^4.12.
|
|
91
|
+
"hono": "^4.12.25",
|
|
92
92
|
"@hono/node-server": "^1.19.13",
|
|
93
93
|
"flatted": "^3.4.2",
|
|
94
94
|
"tar": "^7.5.11",
|
|
95
95
|
"express-rate-limit": "^8.3.0",
|
|
96
|
-
"fast-uri": "^3.1.
|
|
97
|
-
"ws": "^8.
|
|
96
|
+
"fast-uri": "^3.1.3",
|
|
97
|
+
"ws": "^8.21.0",
|
|
98
|
+
"esbuild": "^0.28.1",
|
|
99
|
+
"form-data": "^4.0.6"
|
|
98
100
|
}
|
|
99
101
|
}
|
|
@@ -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.
|
|
66
|
+
FROM golang:1.26.5-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
|
|
@@ -17,17 +17,18 @@ kind: Model
|
|
|
17
17
|
metadata:
|
|
18
18
|
name: {{ .Values.modelName }}
|
|
19
19
|
spec:
|
|
20
|
-
|
|
20
|
+
provider: azure
|
|
21
21
|
model:
|
|
22
22
|
value: gpt-4.1-mini
|
|
23
23
|
config:
|
|
24
24
|
azure:
|
|
25
25
|
baseUrl:
|
|
26
26
|
value: ${AZURE_BASE_URL}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
auth:
|
|
28
|
+
apiKey:
|
|
29
|
+
valueFrom:
|
|
30
|
+
secretKeyRef:
|
|
31
|
+
name: {{ .Values.modelName }}-model-token
|
|
32
|
+
key: token
|
|
32
33
|
apiVersion:
|
|
33
34
|
value: ${AZURE_API_VERSION}
|
|
@@ -8,6 +8,6 @@ metadata:
|
|
|
8
8
|
target: {{ .Values.targetType }}
|
|
9
9
|
spec:
|
|
10
10
|
input: "{{ .Values.inputMessage }}"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
target:
|
|
12
|
+
type: {{ .Values.targetType }}
|
|
13
|
+
name: {{ .Values.targetName }}-{{ .Values.targetType }}
|
package/templates/tool/uv.lock
CHANGED
|
@@ -186,55 +186,55 @@ wheels = [
|
|
|
186
186
|
|
|
187
187
|
[[package]]
|
|
188
188
|
name = "cryptography"
|
|
189
|
-
version = "
|
|
189
|
+
version = "48.0.1"
|
|
190
190
|
source = { registry = "https://pypi.org/simple" }
|
|
191
191
|
dependencies = [
|
|
192
192
|
{ name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
|
|
193
193
|
]
|
|
194
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
195
|
-
wheels = [
|
|
196
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
197
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
198
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
199
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
200
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
201
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
202
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
203
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
204
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
205
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
206
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
207
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
208
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
209
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
210
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
211
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
212
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
213
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
214
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
215
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
216
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
217
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
218
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
219
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
220
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
221
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
222
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
223
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
224
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
225
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
226
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
227
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
228
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
229
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
230
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
231
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
232
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
233
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
234
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
235
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
236
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
237
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
194
|
+
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" }
|
|
195
|
+
wheels = [
|
|
196
|
+
{ 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" },
|
|
197
|
+
{ 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" },
|
|
198
|
+
{ 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" },
|
|
199
|
+
{ 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" },
|
|
200
|
+
{ 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" },
|
|
201
|
+
{ 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" },
|
|
202
|
+
{ 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" },
|
|
203
|
+
{ 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" },
|
|
204
|
+
{ 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" },
|
|
205
|
+
{ 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" },
|
|
206
|
+
{ 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" },
|
|
207
|
+
{ 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" },
|
|
208
|
+
{ 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" },
|
|
209
|
+
{ 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" },
|
|
210
|
+
{ 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" },
|
|
211
|
+
{ 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" },
|
|
212
|
+
{ 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" },
|
|
213
|
+
{ 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" },
|
|
214
|
+
{ 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" },
|
|
215
|
+
{ 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" },
|
|
216
|
+
{ 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" },
|
|
217
|
+
{ 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" },
|
|
218
|
+
{ 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" },
|
|
219
|
+
{ 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" },
|
|
220
|
+
{ 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" },
|
|
221
|
+
{ 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" },
|
|
222
|
+
{ 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" },
|
|
223
|
+
{ 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" },
|
|
224
|
+
{ 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" },
|
|
225
|
+
{ 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" },
|
|
226
|
+
{ 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" },
|
|
227
|
+
{ 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" },
|
|
228
|
+
{ 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" },
|
|
229
|
+
{ 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" },
|
|
230
|
+
{ 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" },
|
|
231
|
+
{ 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" },
|
|
232
|
+
{ 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" },
|
|
233
|
+
{ 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" },
|
|
234
|
+
{ 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" },
|
|
235
|
+
{ 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" },
|
|
236
|
+
{ 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" },
|
|
237
|
+
{ 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" },
|
|
238
238
|
]
|
|
239
239
|
|
|
240
240
|
[[package]]
|
|
@@ -740,11 +740,11 @@ wheels = [
|
|
|
740
740
|
|
|
741
741
|
[[package]]
|
|
742
742
|
name = "pyjwt"
|
|
743
|
-
version = "2.
|
|
743
|
+
version = "2.13.0"
|
|
744
744
|
source = { registry = "https://pypi.org/simple" }
|
|
745
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
745
|
+
sdist = { url = "https://files.pythonhosted.org/packages/3b/81/58d0ac84e1ef3a3843791d6954d94c0b33d526c75eeb1efbce9d0a4c4077/pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423", size = 107515, upload-time = "2026-05-21T19:54:36.618Z" }
|
|
746
746
|
wheels = [
|
|
747
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
747
|
+
{ url = "https://files.pythonhosted.org/packages/a3/5e/ecf12fdb62546d64385c158514e9b2b671f7832108ef2ecd2020ce0af2d1/pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728", size = 31274, upload-time = "2026-05-21T19:54:35.362Z" },
|
|
748
748
|
]
|
|
749
749
|
|
|
750
750
|
[package.optional-dependencies]
|
|
@@ -772,11 +772,11 @@ wheels = [
|
|
|
772
772
|
|
|
773
773
|
[[package]]
|
|
774
774
|
name = "python-multipart"
|
|
775
|
-
version = "0.0.
|
|
775
|
+
version = "0.0.31"
|
|
776
776
|
source = { registry = "https://pypi.org/simple" }
|
|
777
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
777
|
+
sdist = { url = "https://files.pythonhosted.org/packages/64/7e/9b35ad8f3d9ca680f7c87a88f19612fdd8da9796c4d3b46e560ac79dcc4a/python_multipart-0.0.31.tar.gz", hash = "sha256:fc631183bb13e56db3158a4909908dfb2e23565286744e798241e63750e5d680", size = 46689, upload-time = "2026-06-04T08:27:49.014Z" }
|
|
778
778
|
wheels = [
|
|
779
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
779
|
+
{ url = "https://files.pythonhosted.org/packages/5e/1e/7f7f299527a5a8ad90acd5f2f78dfa6c8495c6301a3205106ea68a84de96/python_multipart-0.0.31-py3-none-any.whl", hash = "sha256:8408153d68a9773291fc1da39a8b85a50044bddbabd2dd72e9229776b7b15e28", size = 29996, upload-time = "2026-06-04T08:27:47.804Z" },
|
|
780
780
|
]
|
|
781
781
|
|
|
782
782
|
[[package]]
|
|
@@ -1007,15 +1007,15 @@ wheels = [
|
|
|
1007
1007
|
|
|
1008
1008
|
[[package]]
|
|
1009
1009
|
name = "starlette"
|
|
1010
|
-
version = "
|
|
1010
|
+
version = "1.3.1"
|
|
1011
1011
|
source = { registry = "https://pypi.org/simple" }
|
|
1012
1012
|
dependencies = [
|
|
1013
1013
|
{ name = "anyio" },
|
|
1014
1014
|
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
|
1015
1015
|
]
|
|
1016
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1016
|
+
sdist = { url = "https://files.pythonhosted.org/packages/eb/e3/7c1dc7381d9f8ab7d854328ebfa884e62cb3f3d8549ddfd37c7814f42afa/starlette-1.3.1.tar.gz", hash = "sha256:05d0213193f2fbaae60e2ecb593b4add4262ad4e46536b54abe36f11a71724e0", size = 2703240, upload-time = "2026-06-12T09:23:11.602Z" }
|
|
1017
1017
|
wheels = [
|
|
1018
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1018
|
+
{ url = "https://files.pythonhosted.org/packages/ec/bb/2799cc2ede3ed41131f8975621e7213dfc7ef4acbbaadfa440f32500c370/starlette-1.3.1-py3-none-any.whl", hash = "sha256:c7372aae11c3c3f26a42df7bd626cec2f47d03483d261d369516a615a53714c6", size = 73632, upload-time = "2026-06-12T09:23:10.017Z" },
|
|
1019
1019
|
]
|
|
1020
1020
|
|
|
1021
1021
|
[[package]]
|