Spaces:
Sleeping
Sleeping
Update
Browse files- .dockerignore +4 -6
- Dockerfile +5 -3
- client/js/dist/index.js +17 -17
- client/js/dist/index.js.map +0 -0
- client/js/dist/robotics/consumer.d.ts +2 -2
- client/js/dist/robotics/core.d.ts +1 -1
- client/js/dist/robotics/factory.d.ts +3 -3
- client/js/dist/robotics/producer.d.ts +2 -2
- client/js/dist/video/consumer.d.ts +2 -2
- client/js/dist/video/core.d.ts +1 -1
- client/js/dist/video/factory.d.ts +3 -3
- client/js/dist/video/producer.d.ts +2 -2
- client/js/dist/video/types.d.ts +0 -1
- demo/bun.lock +1 -1
- demo/package.json +1 -1
- demo/src/lib/settings.svelte.ts +2 -2
- demo/src/routes/[workspaceId]/+page.svelte +1 -1
- demo/src/routes/[workspaceId]/robotics/+page.svelte +1 -1
- demo/src/routes/[workspaceId]/robotics/consumer/+page.svelte +1 -1
- demo/src/routes/[workspaceId]/robotics/producer/+page.svelte +3 -54
- demo/src/routes/[workspaceId]/video/+page.svelte +1 -1
- demo/src/routes/[workspaceId]/video/consumer/+page.svelte +1 -1
- demo/src/routes/[workspaceId]/video/producer/+page.svelte +3 -3
- server/uv.lock +103 -72
.dockerignore
CHANGED
@@ -5,16 +5,13 @@
|
|
5 |
**/yarn-error.log*
|
6 |
**/.pnpm-debug.log*
|
7 |
|
8 |
-
|
9 |
**/.bun
|
10 |
|
11 |
-
|
12 |
**/dist/
|
13 |
**/build/
|
14 |
**/.next/
|
15 |
**/.svelte-kit/
|
16 |
|
17 |
-
|
18 |
**/.env
|
19 |
**/.env.local
|
20 |
**/.env.development.local
|
@@ -30,8 +27,6 @@
|
|
30 |
**/downloads/
|
31 |
**/eggs/
|
32 |
**/.eggs/
|
33 |
-
**/lib/
|
34 |
-
**/lib64/
|
35 |
**/parts/
|
36 |
**/sdist/
|
37 |
**/var/
|
@@ -95,4 +90,7 @@
|
|
95 |
**/docs/
|
96 |
|
97 |
**/.github/
|
98 |
-
**/.gitlab-ci.yml
|
|
|
|
|
|
|
|
5 |
**/yarn-error.log*
|
6 |
**/.pnpm-debug.log*
|
7 |
|
|
|
8 |
**/.bun
|
9 |
|
|
|
10 |
**/dist/
|
11 |
**/build/
|
12 |
**/.next/
|
13 |
**/.svelte-kit/
|
14 |
|
|
|
15 |
**/.env
|
16 |
**/.env.local
|
17 |
**/.env.development.local
|
|
|
27 |
**/downloads/
|
28 |
**/eggs/
|
29 |
**/.eggs/
|
|
|
|
|
30 |
**/parts/
|
31 |
**/sdist/
|
32 |
**/var/
|
|
|
90 |
**/docs/
|
91 |
|
92 |
**/.github/
|
93 |
+
**/.gitlab-ci.yml
|
94 |
+
|
95 |
+
# Force include demo source lib (contains UI components & settings)
|
96 |
+
!demo/src/lib/**
|
Dockerfile
CHANGED
@@ -5,12 +5,15 @@ FROM oven/bun:1-alpine AS frontend-builder
|
|
5 |
ARG PUBLIC_TRANSPORT_SERVER_URL=https://blanchon-robothub-transportserver.hf.space/api
|
6 |
ENV PUBLIC_TRANSPORT_SERVER_URL=${PUBLIC_TRANSPORT_SERVER_URL}
|
7 |
|
|
|
|
|
|
|
8 |
WORKDIR /app
|
9 |
|
10 |
# Install git for dependencies that might need it
|
11 |
RUN apk add --no-cache git
|
12 |
|
13 |
-
# Copy package files for better caching
|
14 |
COPY client/js/package.json client/js/tsconfig.json* ./client/js/
|
15 |
COPY demo/package.json demo/tsconfig.json* demo/svelte.config.js* ./demo/
|
16 |
|
@@ -45,8 +48,7 @@ ENV PYTHONUNBUFFERED=1 \
|
|
45 |
PYTHONDONTWRITEBYTECODE=1 \
|
46 |
UV_SYSTEM_PYTHON=1 \
|
47 |
UV_COMPILE_BYTECODE=1 \
|
48 |
-
UV_CACHE_DIR=/tmp/uv-cache
|
49 |
-
PORT=8000
|
50 |
|
51 |
# Install system dependencies needed for video processing
|
52 |
RUN apt-get update && apt-get install -y \
|
|
|
5 |
ARG PUBLIC_TRANSPORT_SERVER_URL=https://blanchon-robothub-transportserver.hf.space/api
|
6 |
ENV PUBLIC_TRANSPORT_SERVER_URL=${PUBLIC_TRANSPORT_SERVER_URL}
|
7 |
|
8 |
+
ARG PORT=8000
|
9 |
+
ENV PORT=${PORT}
|
10 |
+
|
11 |
WORKDIR /app
|
12 |
|
13 |
# Install git for dependencies that might need it
|
14 |
RUN apk add --no-cache git
|
15 |
|
16 |
+
# Copy client and demo package files for better caching
|
17 |
COPY client/js/package.json client/js/tsconfig.json* ./client/js/
|
18 |
COPY demo/package.json demo/tsconfig.json* demo/svelte.config.js* ./demo/
|
19 |
|
|
|
48 |
PYTHONDONTWRITEBYTECODE=1 \
|
49 |
UV_SYSTEM_PYTHON=1 \
|
50 |
UV_COMPILE_BYTECODE=1 \
|
51 |
+
UV_CACHE_DIR=/tmp/uv-cache
|
|
|
52 |
|
53 |
# Install system dependencies needed for video processing
|
54 |
RUN apt-get update && apt-get install -y \
|
client/js/dist/index.js
CHANGED
@@ -232,7 +232,7 @@ class RoboticsClientCore extends import__.default {
|
|
232 |
onErrorCallback = null;
|
233 |
onConnectedCallback = null;
|
234 |
onDisconnectedCallback = null;
|
235 |
-
constructor(baseUrl
|
236 |
super();
|
237 |
this.baseUrl = baseUrl.replace(/\/$/, "");
|
238 |
this.apiBase = `${this.baseUrl}/robotics`;
|
@@ -427,7 +427,7 @@ class RoboticsClientCore extends import__.default {
|
|
427 |
}
|
428 |
// src/robotics/producer.ts
|
429 |
class RoboticsProducer extends RoboticsClientCore {
|
430 |
-
constructor(baseUrl
|
431 |
super(baseUrl, options);
|
432 |
}
|
433 |
async connect(workspaceId, roomId, participantId) {
|
@@ -479,7 +479,7 @@ class RoboticsProducer extends RoboticsClientCore {
|
|
479 |
console.warn(`Unknown message type for producer: ${message.type}`);
|
480 |
}
|
481 |
}
|
482 |
-
static async createAndConnect(baseUrl
|
483 |
const producer = new RoboticsProducer(baseUrl);
|
484 |
const roomData = await producer.createRoom(workspaceId, roomId);
|
485 |
const connected = await producer.connect(roomData.workspaceId, roomData.roomId, participantId);
|
@@ -496,7 +496,7 @@ class RoboticsProducer extends RoboticsClientCore {
|
|
496 |
class RoboticsConsumer extends RoboticsClientCore {
|
497 |
onStateSyncCallback = null;
|
498 |
onJointUpdateCallback = null;
|
499 |
-
constructor(baseUrl
|
500 |
super(baseUrl, options);
|
501 |
}
|
502 |
async connect(workspaceId, roomId, participantId) {
|
@@ -547,7 +547,7 @@ class RoboticsConsumer extends RoboticsClientCore {
|
|
547 |
}
|
548 |
this.emit("jointUpdate", message.data);
|
549 |
}
|
550 |
-
static async createAndConnect(workspaceId, roomId, baseUrl
|
551 |
const consumer = new RoboticsConsumer(baseUrl);
|
552 |
const connected = await consumer.connect(workspaceId, roomId, participantId);
|
553 |
if (!connected) {
|
@@ -557,7 +557,7 @@ class RoboticsConsumer extends RoboticsClientCore {
|
|
557 |
}
|
558 |
}
|
559 |
// src/robotics/factory.ts
|
560 |
-
function createClient(role, baseUrl
|
561 |
if (role === "producer") {
|
562 |
return new RoboticsProducer(baseUrl, options);
|
563 |
}
|
@@ -566,7 +566,7 @@ function createClient(role, baseUrl = "http://localhost:8000", options = {}) {
|
|
566 |
}
|
567 |
throw new Error(`Invalid role: ${role}. Must be 'producer' or 'consumer'`);
|
568 |
}
|
569 |
-
async function createProducerClient(baseUrl
|
570 |
const producer = new RoboticsProducer(baseUrl, options);
|
571 |
const roomData = await producer.createRoom(workspaceId, roomId);
|
572 |
const connected = await producer.connect(roomData.workspaceId, roomData.roomId, participantId);
|
@@ -575,7 +575,7 @@ async function createProducerClient(baseUrl = "http://localhost:8000", workspace
|
|
575 |
}
|
576 |
return producer;
|
577 |
}
|
578 |
-
async function createConsumerClient(workspaceId, roomId, baseUrl
|
579 |
const consumer = new RoboticsConsumer(baseUrl, options);
|
580 |
const connected = await consumer.connect(workspaceId, roomId, participantId);
|
581 |
if (!connected) {
|
@@ -612,7 +612,7 @@ class VideoClientCore extends import__.default {
|
|
612 |
onErrorCallback = null;
|
613 |
onConnectedCallback = null;
|
614 |
onDisconnectedCallback = null;
|
615 |
-
constructor(baseUrl
|
616 |
super();
|
617 |
this.baseUrl = baseUrl.replace(/\/$/, "");
|
618 |
this.apiBase = `${this.baseUrl}/video`;
|
@@ -983,7 +983,7 @@ class VideoClientCore extends import__.default {
|
|
983 |
// src/video/producer.ts
|
984 |
class VideoProducer extends VideoClientCore {
|
985 |
consumerConnections = new Map;
|
986 |
-
constructor(baseUrl
|
987 |
super(baseUrl, options);
|
988 |
}
|
989 |
async connect(workspaceId, roomId, participantId) {
|
@@ -1275,7 +1275,7 @@ class VideoProducer extends VideoClientCore {
|
|
1275 |
this.websocket.send(JSON.stringify(message));
|
1276 |
this.emit("streamStopped");
|
1277 |
}
|
1278 |
-
static async createAndConnect(baseUrl
|
1279 |
const producer = new VideoProducer(baseUrl);
|
1280 |
const roomData = await producer.createRoom(workspaceId, roomId);
|
1281 |
const connected = await producer.connect(roomData.workspaceId, roomData.roomId, participantId);
|
@@ -1299,7 +1299,7 @@ class VideoConsumer extends VideoClientCore {
|
|
1299 |
onStreamStatsCallback = null;
|
1300 |
iceCandidateQueue = [];
|
1301 |
hasRemoteDescription = false;
|
1302 |
-
constructor(baseUrl
|
1303 |
super(baseUrl, options);
|
1304 |
}
|
1305 |
async connect(workspaceId, roomId, participantId) {
|
@@ -1563,7 +1563,7 @@ class VideoConsumer extends VideoClientCore {
|
|
1563 |
}
|
1564 |
this.emit("streamStats", message.stats);
|
1565 |
}
|
1566 |
-
static async createAndConnect(workspaceId, roomId, baseUrl
|
1567 |
const consumer = new VideoConsumer(baseUrl);
|
1568 |
const connected = await consumer.connect(workspaceId, roomId, participantId);
|
1569 |
if (!connected) {
|
@@ -1585,7 +1585,7 @@ class VideoConsumer extends VideoClientCore {
|
|
1585 |
}
|
1586 |
}
|
1587 |
// src/video/factory.ts
|
1588 |
-
function createClient2(role, baseUrl
|
1589 |
if (role === "producer") {
|
1590 |
return new VideoProducer(baseUrl, options);
|
1591 |
}
|
@@ -1594,7 +1594,7 @@ function createClient2(role, baseUrl = "http://localhost:8000", options = {}) {
|
|
1594 |
}
|
1595 |
throw new Error(`Invalid role: ${role}. Must be 'producer' or 'consumer'`);
|
1596 |
}
|
1597 |
-
async function createProducerClient2(baseUrl
|
1598 |
const producer = new VideoProducer(baseUrl, options);
|
1599 |
const roomData = await producer.createRoom(workspaceId, roomId);
|
1600 |
const connected = await producer.connect(roomData.workspaceId, roomData.roomId, participantId);
|
@@ -1603,7 +1603,7 @@ async function createProducerClient2(baseUrl = "http://localhost:8000", workspac
|
|
1603 |
}
|
1604 |
return producer;
|
1605 |
}
|
1606 |
-
async function createConsumerClient2(workspaceId, roomId, baseUrl
|
1607 |
const consumer = new VideoConsumer(baseUrl, options);
|
1608 |
const connected = await consumer.connect(workspaceId, roomId, participantId);
|
1609 |
if (!connected) {
|
@@ -1619,5 +1619,5 @@ export {
|
|
1619 |
VERSION
|
1620 |
};
|
1621 |
|
1622 |
-
//# debugId=
|
1623 |
//# sourceMappingURL=index.js.map
|
|
|
232 |
onErrorCallback = null;
|
233 |
onConnectedCallback = null;
|
234 |
onDisconnectedCallback = null;
|
235 |
+
constructor(baseUrl, options = {}) {
|
236 |
super();
|
237 |
this.baseUrl = baseUrl.replace(/\/$/, "");
|
238 |
this.apiBase = `${this.baseUrl}/robotics`;
|
|
|
427 |
}
|
428 |
// src/robotics/producer.ts
|
429 |
class RoboticsProducer extends RoboticsClientCore {
|
430 |
+
constructor(baseUrl, options = {}) {
|
431 |
super(baseUrl, options);
|
432 |
}
|
433 |
async connect(workspaceId, roomId, participantId) {
|
|
|
479 |
console.warn(`Unknown message type for producer: ${message.type}`);
|
480 |
}
|
481 |
}
|
482 |
+
static async createAndConnect(baseUrl, workspaceId, roomId, participantId) {
|
483 |
const producer = new RoboticsProducer(baseUrl);
|
484 |
const roomData = await producer.createRoom(workspaceId, roomId);
|
485 |
const connected = await producer.connect(roomData.workspaceId, roomData.roomId, participantId);
|
|
|
496 |
class RoboticsConsumer extends RoboticsClientCore {
|
497 |
onStateSyncCallback = null;
|
498 |
onJointUpdateCallback = null;
|
499 |
+
constructor(baseUrl, options = {}) {
|
500 |
super(baseUrl, options);
|
501 |
}
|
502 |
async connect(workspaceId, roomId, participantId) {
|
|
|
547 |
}
|
548 |
this.emit("jointUpdate", message.data);
|
549 |
}
|
550 |
+
static async createAndConnect(workspaceId, roomId, baseUrl, participantId) {
|
551 |
const consumer = new RoboticsConsumer(baseUrl);
|
552 |
const connected = await consumer.connect(workspaceId, roomId, participantId);
|
553 |
if (!connected) {
|
|
|
557 |
}
|
558 |
}
|
559 |
// src/robotics/factory.ts
|
560 |
+
function createClient(role, baseUrl, options = {}) {
|
561 |
if (role === "producer") {
|
562 |
return new RoboticsProducer(baseUrl, options);
|
563 |
}
|
|
|
566 |
}
|
567 |
throw new Error(`Invalid role: ${role}. Must be 'producer' or 'consumer'`);
|
568 |
}
|
569 |
+
async function createProducerClient(baseUrl, workspaceId, roomId, participantId, options = {}) {
|
570 |
const producer = new RoboticsProducer(baseUrl, options);
|
571 |
const roomData = await producer.createRoom(workspaceId, roomId);
|
572 |
const connected = await producer.connect(roomData.workspaceId, roomData.roomId, participantId);
|
|
|
575 |
}
|
576 |
return producer;
|
577 |
}
|
578 |
+
async function createConsumerClient(workspaceId, roomId, baseUrl, participantId, options = {}) {
|
579 |
const consumer = new RoboticsConsumer(baseUrl, options);
|
580 |
const connected = await consumer.connect(workspaceId, roomId, participantId);
|
581 |
if (!connected) {
|
|
|
612 |
onErrorCallback = null;
|
613 |
onConnectedCallback = null;
|
614 |
onDisconnectedCallback = null;
|
615 |
+
constructor(baseUrl, options = {}) {
|
616 |
super();
|
617 |
this.baseUrl = baseUrl.replace(/\/$/, "");
|
618 |
this.apiBase = `${this.baseUrl}/video`;
|
|
|
983 |
// src/video/producer.ts
|
984 |
class VideoProducer extends VideoClientCore {
|
985 |
consumerConnections = new Map;
|
986 |
+
constructor(baseUrl, options = {}) {
|
987 |
super(baseUrl, options);
|
988 |
}
|
989 |
async connect(workspaceId, roomId, participantId) {
|
|
|
1275 |
this.websocket.send(JSON.stringify(message));
|
1276 |
this.emit("streamStopped");
|
1277 |
}
|
1278 |
+
static async createAndConnect(baseUrl, workspaceId, roomId, participantId) {
|
1279 |
const producer = new VideoProducer(baseUrl);
|
1280 |
const roomData = await producer.createRoom(workspaceId, roomId);
|
1281 |
const connected = await producer.connect(roomData.workspaceId, roomData.roomId, participantId);
|
|
|
1299 |
onStreamStatsCallback = null;
|
1300 |
iceCandidateQueue = [];
|
1301 |
hasRemoteDescription = false;
|
1302 |
+
constructor(baseUrl, options = {}) {
|
1303 |
super(baseUrl, options);
|
1304 |
}
|
1305 |
async connect(workspaceId, roomId, participantId) {
|
|
|
1563 |
}
|
1564 |
this.emit("streamStats", message.stats);
|
1565 |
}
|
1566 |
+
static async createAndConnect(workspaceId, roomId, baseUrl, participantId) {
|
1567 |
const consumer = new VideoConsumer(baseUrl);
|
1568 |
const connected = await consumer.connect(workspaceId, roomId, participantId);
|
1569 |
if (!connected) {
|
|
|
1585 |
}
|
1586 |
}
|
1587 |
// src/video/factory.ts
|
1588 |
+
function createClient2(role, baseUrl, options = {}) {
|
1589 |
if (role === "producer") {
|
1590 |
return new VideoProducer(baseUrl, options);
|
1591 |
}
|
|
|
1594 |
}
|
1595 |
throw new Error(`Invalid role: ${role}. Must be 'producer' or 'consumer'`);
|
1596 |
}
|
1597 |
+
async function createProducerClient2(baseUrl, workspaceId, roomId, participantId, options = {}) {
|
1598 |
const producer = new VideoProducer(baseUrl, options);
|
1599 |
const roomData = await producer.createRoom(workspaceId, roomId);
|
1600 |
const connected = await producer.connect(roomData.workspaceId, roomData.roomId, participantId);
|
|
|
1603 |
}
|
1604 |
return producer;
|
1605 |
}
|
1606 |
+
async function createConsumerClient2(workspaceId, roomId, baseUrl, participantId, options = {}) {
|
1607 |
const consumer = new VideoConsumer(baseUrl, options);
|
1608 |
const connected = await consumer.connect(workspaceId, roomId, participantId);
|
1609 |
if (!connected) {
|
|
|
1619 |
VERSION
|
1620 |
};
|
1621 |
|
1622 |
+
//# debugId=836AB17011247B3F64756E2164756E21
|
1623 |
//# sourceMappingURL=index.js.map
|
client/js/dist/index.js.map
CHANGED
The diff for this file is too large to render.
See raw diff
|
|
client/js/dist/robotics/consumer.d.ts
CHANGED
@@ -6,7 +6,7 @@ import type { WebSocketMessage, ClientOptions, JointUpdateCallback, StateSyncCal
|
|
6 |
export declare class RoboticsConsumer extends RoboticsClientCore {
|
7 |
private onStateSyncCallback;
|
8 |
private onJointUpdateCallback;
|
9 |
-
constructor(baseUrl
|
10 |
connect(workspaceId: string, roomId: string, participantId?: string): Promise<boolean>;
|
11 |
getStateSyncAsync(): Promise<Record<string, number>>;
|
12 |
onStateSync(callback: StateSyncCallback): void;
|
@@ -17,5 +17,5 @@ export declare class RoboticsConsumer extends RoboticsClientCore {
|
|
17 |
/**
|
18 |
* Create a consumer and automatically connect to a room
|
19 |
*/
|
20 |
-
static createAndConnect(workspaceId: string, roomId: string, baseUrl
|
21 |
}
|
|
|
6 |
export declare class RoboticsConsumer extends RoboticsClientCore {
|
7 |
private onStateSyncCallback;
|
8 |
private onJointUpdateCallback;
|
9 |
+
constructor(baseUrl: string, options?: ClientOptions);
|
10 |
connect(workspaceId: string, roomId: string, participantId?: string): Promise<boolean>;
|
11 |
getStateSyncAsync(): Promise<Record<string, number>>;
|
12 |
onStateSync(callback: StateSyncCallback): void;
|
|
|
17 |
/**
|
18 |
* Create a consumer and automatically connect to a room
|
19 |
*/
|
20 |
+
static createAndConnect(workspaceId: string, roomId: string, baseUrl: string, participantId?: string): Promise<RoboticsConsumer>;
|
21 |
}
|
client/js/dist/robotics/core.d.ts
CHANGED
@@ -17,7 +17,7 @@ export declare class RoboticsClientCore extends EventEmitter {
|
|
17 |
protected onErrorCallback: ErrorCallback | null;
|
18 |
protected onConnectedCallback: ConnectedCallback | null;
|
19 |
protected onDisconnectedCallback: DisconnectedCallback | null;
|
20 |
-
constructor(baseUrl
|
21 |
listRooms(workspaceId: string): Promise<RoomInfo[]>;
|
22 |
createRoom(workspaceId?: string, roomId?: string): Promise<{
|
23 |
workspaceId: string;
|
|
|
17 |
protected onErrorCallback: ErrorCallback | null;
|
18 |
protected onConnectedCallback: ConnectedCallback | null;
|
19 |
protected onDisconnectedCallback: DisconnectedCallback | null;
|
20 |
+
constructor(baseUrl: string, options?: ClientOptions);
|
21 |
listRooms(workspaceId: string): Promise<RoomInfo[]>;
|
22 |
createRoom(workspaceId?: string, roomId?: string): Promise<{
|
23 |
workspaceId: string;
|
client/js/dist/robotics/factory.d.ts
CHANGED
@@ -7,12 +7,12 @@ import type { ParticipantRole, ClientOptions } from './types.js';
|
|
7 |
/**
|
8 |
* Factory function to create the appropriate client based on role
|
9 |
*/
|
10 |
-
export declare function createClient(role: ParticipantRole, baseUrl
|
11 |
/**
|
12 |
* Create and connect a producer client
|
13 |
*/
|
14 |
-
export declare function createProducerClient(baseUrl
|
15 |
/**
|
16 |
* Create and connect a consumer client
|
17 |
*/
|
18 |
-
export declare function createConsumerClient(workspaceId: string, roomId: string, baseUrl
|
|
|
7 |
/**
|
8 |
* Factory function to create the appropriate client based on role
|
9 |
*/
|
10 |
+
export declare function createClient(role: ParticipantRole, baseUrl: string, options?: ClientOptions): RoboticsProducer | RoboticsConsumer;
|
11 |
/**
|
12 |
* Create and connect a producer client
|
13 |
*/
|
14 |
+
export declare function createProducerClient(baseUrl: string, workspaceId?: string, roomId?: string, participantId?: string, options?: ClientOptions): Promise<RoboticsProducer>;
|
15 |
/**
|
16 |
* Create and connect a consumer client
|
17 |
*/
|
18 |
+
export declare function createConsumerClient(workspaceId: string, roomId: string, baseUrl: string, participantId?: string, options?: ClientOptions): Promise<RoboticsConsumer>;
|
client/js/dist/robotics/producer.d.ts
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
import { RoboticsClientCore } from './core.js';
|
5 |
import type { JointData, WebSocketMessage, ClientOptions } from './types.js';
|
6 |
export declare class RoboticsProducer extends RoboticsClientCore {
|
7 |
-
constructor(baseUrl
|
8 |
connect(workspaceId: string, roomId: string, participantId?: string): Promise<boolean>;
|
9 |
sendJointUpdate(joints: JointData[]): Promise<void>;
|
10 |
sendStateSync(state: Record<string, number>): Promise<void>;
|
@@ -13,7 +13,7 @@ export declare class RoboticsProducer extends RoboticsClientCore {
|
|
13 |
/**
|
14 |
* Create a room and automatically connect as producer
|
15 |
*/
|
16 |
-
static createAndConnect(baseUrl
|
17 |
/**
|
18 |
* Get the current room ID (useful when auto-created)
|
19 |
*/
|
|
|
4 |
import { RoboticsClientCore } from './core.js';
|
5 |
import type { JointData, WebSocketMessage, ClientOptions } from './types.js';
|
6 |
export declare class RoboticsProducer extends RoboticsClientCore {
|
7 |
+
constructor(baseUrl: string, options?: ClientOptions);
|
8 |
connect(workspaceId: string, roomId: string, participantId?: string): Promise<boolean>;
|
9 |
sendJointUpdate(joints: JointData[]): Promise<void>;
|
10 |
sendStateSync(state: Record<string, number>): Promise<void>;
|
|
|
13 |
/**
|
14 |
* Create a room and automatically connect as producer
|
15 |
*/
|
16 |
+
static createAndConnect(baseUrl: string, workspaceId?: string, roomId?: string, participantId?: string): Promise<RoboticsProducer>;
|
17 |
/**
|
18 |
* Get the current room ID (useful when auto-created)
|
19 |
*/
|
client/js/dist/video/consumer.d.ts
CHANGED
@@ -13,7 +13,7 @@ export declare class VideoConsumer extends VideoClientCore {
|
|
13 |
private onStreamStatsCallback;
|
14 |
private iceCandidateQueue;
|
15 |
private hasRemoteDescription;
|
16 |
-
constructor(baseUrl
|
17 |
connect(workspaceId: string, roomId: string, participantId?: string): Promise<boolean>;
|
18 |
startReceiving(): Promise<void>;
|
19 |
stopReceiving(): Promise<void>;
|
@@ -40,7 +40,7 @@ export declare class VideoConsumer extends VideoClientCore {
|
|
40 |
/**
|
41 |
* Create a consumer and automatically connect to a room
|
42 |
*/
|
43 |
-
static createAndConnect(workspaceId: string, roomId: string, baseUrl
|
44 |
/**
|
45 |
* Get the video element for displaying the remote stream
|
46 |
*/
|
|
|
13 |
private onStreamStatsCallback;
|
14 |
private iceCandidateQueue;
|
15 |
private hasRemoteDescription;
|
16 |
+
constructor(baseUrl: string, options?: ClientOptions);
|
17 |
connect(workspaceId: string, roomId: string, participantId?: string): Promise<boolean>;
|
18 |
startReceiving(): Promise<void>;
|
19 |
stopReceiving(): Promise<void>;
|
|
|
40 |
/**
|
41 |
* Create a consumer and automatically connect to a room
|
42 |
*/
|
43 |
+
static createAndConnect(workspaceId: string, roomId: string, baseUrl: string, participantId?: string): Promise<VideoConsumer>;
|
44 |
/**
|
45 |
* Get the video element for displaying the remote stream
|
46 |
*/
|
client/js/dist/video/core.d.ts
CHANGED
@@ -21,7 +21,7 @@ export declare class VideoClientCore extends EventEmitter {
|
|
21 |
protected onErrorCallback: ErrorCallback | null;
|
22 |
protected onConnectedCallback: ConnectedCallback | null;
|
23 |
protected onDisconnectedCallback: DisconnectedCallback | null;
|
24 |
-
constructor(baseUrl
|
25 |
listRooms(workspaceId: string): Promise<RoomInfo[]>;
|
26 |
createRoom(workspaceId?: string, roomId?: string, config?: VideoConfig, recoveryConfig?: RecoveryConfig): Promise<{
|
27 |
workspaceId: string;
|
|
|
21 |
protected onErrorCallback: ErrorCallback | null;
|
22 |
protected onConnectedCallback: ConnectedCallback | null;
|
23 |
protected onDisconnectedCallback: DisconnectedCallback | null;
|
24 |
+
constructor(baseUrl: string, options?: ClientOptions);
|
25 |
listRooms(workspaceId: string): Promise<RoomInfo[]>;
|
26 |
createRoom(workspaceId?: string, roomId?: string, config?: VideoConfig, recoveryConfig?: RecoveryConfig): Promise<{
|
27 |
workspaceId: string;
|
client/js/dist/video/factory.d.ts
CHANGED
@@ -7,12 +7,12 @@ import type { ParticipantRole, ClientOptions } from './types.js';
|
|
7 |
/**
|
8 |
* Factory function to create the appropriate client based on role
|
9 |
*/
|
10 |
-
export declare function createClient(role: ParticipantRole, baseUrl
|
11 |
/**
|
12 |
* Create and connect a producer client
|
13 |
*/
|
14 |
-
export declare function createProducerClient(baseUrl
|
15 |
/**
|
16 |
* Create and connect a consumer client
|
17 |
*/
|
18 |
-
export declare function createConsumerClient(workspaceId: string, roomId: string, baseUrl
|
|
|
7 |
/**
|
8 |
* Factory function to create the appropriate client based on role
|
9 |
*/
|
10 |
+
export declare function createClient(role: ParticipantRole, baseUrl: string, options?: ClientOptions): VideoProducer | VideoConsumer;
|
11 |
/**
|
12 |
* Create and connect a producer client
|
13 |
*/
|
14 |
+
export declare function createProducerClient(baseUrl: string, workspaceId?: string, roomId?: string, participantId?: string, options?: ClientOptions): Promise<VideoProducer>;
|
15 |
/**
|
16 |
* Create and connect a consumer client
|
17 |
*/
|
18 |
+
export declare function createConsumerClient(workspaceId: string, roomId: string, baseUrl: string, participantId?: string, options?: ClientOptions): Promise<VideoConsumer>;
|
client/js/dist/video/producer.d.ts
CHANGED
@@ -5,7 +5,7 @@ import { VideoClientCore } from './core.js';
|
|
5 |
import type { WebSocketMessage, ClientOptions, VideoConfig } from './types.js';
|
6 |
export declare class VideoProducer extends VideoClientCore {
|
7 |
private consumerConnections;
|
8 |
-
constructor(baseUrl
|
9 |
connect(workspaceId: string, roomId: string, participantId?: string): Promise<boolean>;
|
10 |
private connectToExistingConsumers;
|
11 |
private createPeerConnectionForConsumer;
|
@@ -28,7 +28,7 @@ export declare class VideoProducer extends VideoClientCore {
|
|
28 |
/**
|
29 |
* Create a room and automatically connect as producer
|
30 |
*/
|
31 |
-
static createAndConnect(baseUrl
|
32 |
/**
|
33 |
* Get the current room ID (useful when auto-created)
|
34 |
*/
|
|
|
5 |
import type { WebSocketMessage, ClientOptions, VideoConfig } from './types.js';
|
6 |
export declare class VideoProducer extends VideoClientCore {
|
7 |
private consumerConnections;
|
8 |
+
constructor(baseUrl: string, options?: ClientOptions);
|
9 |
connect(workspaceId: string, roomId: string, participantId?: string): Promise<boolean>;
|
10 |
private connectToExistingConsumers;
|
11 |
private createPeerConnectionForConsumer;
|
|
|
28 |
/**
|
29 |
* Create a room and automatically connect as producer
|
30 |
*/
|
31 |
+
static createAndConnect(baseUrl: string, workspaceId?: string, roomId?: string, participantId?: string): Promise<VideoProducer>;
|
32 |
/**
|
33 |
* Get the current room ID (useful when auto-created)
|
34 |
*/
|
client/js/dist/video/types.d.ts
CHANGED
@@ -1,6 +1,5 @@
|
|
1 |
/**
|
2 |
* Type definitions for RobotHub TransportServer Video Client
|
3 |
-
* ✅ Fully synchronized with server-side models.py
|
4 |
*/
|
5 |
export type ParticipantRole = 'producer' | 'consumer';
|
6 |
export type MessageType = 'frame_update' | 'video_config_update' | 'stream_started' | 'stream_stopped' | 'recovery_triggered' | 'heartbeat' | 'heartbeat_ack' | 'emergency_stop' | 'joined' | 'error' | 'participant_joined' | 'participant_left' | 'webrtc_offer' | 'webrtc_answer' | 'webrtc_ice' | 'status_update' | 'stream_stats';
|
|
|
1 |
/**
|
2 |
* Type definitions for RobotHub TransportServer Video Client
|
|
|
3 |
*/
|
4 |
export type ParticipantRole = 'producer' | 'consumer';
|
5 |
export type MessageType = 'frame_update' | 'video_config_update' | 'stream_started' | 'stream_stopped' | 'recovery_triggered' | 'heartbeat' | 'heartbeat_ack' | 'emergency_stop' | 'joined' | 'error' | 'participant_joined' | 'participant_left' | 'webrtc_offer' | 'webrtc_answer' | 'webrtc_ice' | 'status_update' | 'stream_stats';
|
demo/bun.lock
CHANGED
@@ -25,7 +25,7 @@
|
|
25 |
"tailwindcss": "^4.0.0",
|
26 |
"typescript": "^5.0.0",
|
27 |
"typescript-eslint": "^8.20.0",
|
28 |
-
"vite": "
|
29 |
},
|
30 |
},
|
31 |
},
|
|
|
25 |
"tailwindcss": "^4.0.0",
|
26 |
"typescript": "^5.0.0",
|
27 |
"typescript-eslint": "^8.20.0",
|
28 |
+
"vite": "6.3.5",
|
29 |
},
|
30 |
},
|
31 |
},
|
demo/package.json
CHANGED
@@ -32,7 +32,7 @@
|
|
32 |
"tailwindcss": "^4.0.0",
|
33 |
"typescript": "^5.0.0",
|
34 |
"typescript-eslint": "^8.20.0",
|
35 |
-
"vite": "
|
36 |
},
|
37 |
"dependencies": {
|
38 |
"@robothub/transport-server-client": "file:../client/js"
|
|
|
32 |
"tailwindcss": "^4.0.0",
|
33 |
"typescript": "^5.0.0",
|
34 |
"typescript-eslint": "^8.20.0",
|
35 |
+
"vite": "7.0.0"
|
36 |
},
|
37 |
"dependencies": {
|
38 |
"@robothub/transport-server-client": "file:../client/js"
|
demo/src/lib/settings.svelte.ts
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
import {
|
2 |
|
3 |
interface Settings {
|
4 |
transportServerUrl: string;
|
5 |
}
|
6 |
|
7 |
export const settings: Settings = $state({
|
8 |
-
transportServerUrl: PUBLIC_TRANSPORT_SERVER_URL ?? 'http://localhost:8000'
|
9 |
});
|
|
|
1 |
+
import { env } from '$env/dynamic/public';
|
2 |
|
3 |
interface Settings {
|
4 |
transportServerUrl: string;
|
5 |
}
|
6 |
|
7 |
export const settings: Settings = $state({
|
8 |
+
transportServerUrl: env.PUBLIC_TRANSPORT_SERVER_URL ?? 'http://localhost:8000'
|
9 |
});
|
demo/src/routes/[workspaceId]/+page.svelte
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
import { onMount } from 'svelte';
|
3 |
import { robotics, video } from '@robothub/transport-server-client';
|
4 |
import type { robotics as roboticsTypes, video as videoTypes } from '@robothub/transport-server-client';
|
5 |
-
import { settings } from '$lib/settings.svelte
|
6 |
|
7 |
|
8 |
// Get data from load function
|
|
|
2 |
import { onMount } from 'svelte';
|
3 |
import { robotics, video } from '@robothub/transport-server-client';
|
4 |
import type { robotics as roboticsTypes, video as videoTypes } from '@robothub/transport-server-client';
|
5 |
+
import { settings } from '$lib/settings.svelte';
|
6 |
|
7 |
|
8 |
// Get data from load function
|
demo/src/routes/[workspaceId]/robotics/+page.svelte
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
import { onMount } from 'svelte';
|
3 |
import { robotics } from '@robothub/transport-server-client';
|
4 |
import type { robotics as roboticsTypes } from '@robothub/transport-server-client';
|
5 |
-
import { settings } from '$lib/settings.svelte
|
6 |
|
7 |
|
8 |
// Get data from load function
|
|
|
2 |
import { onMount } from 'svelte';
|
3 |
import { robotics } from '@robothub/transport-server-client';
|
4 |
import type { robotics as roboticsTypes } from '@robothub/transport-server-client';
|
5 |
+
import { settings } from '$lib/settings.svelte';
|
6 |
|
7 |
|
8 |
// Get data from load function
|
demo/src/routes/[workspaceId]/robotics/consumer/+page.svelte
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
import { onMount } from 'svelte';
|
3 |
import { robotics } from '@robothub/transport-server-client';
|
4 |
import type { robotics as roboticsTypes } from '@robothub/transport-server-client';
|
5 |
-
import { settings } from '$lib/settings.svelte
|
6 |
|
7 |
|
8 |
// Get data from load function
|
|
|
2 |
import { onMount } from 'svelte';
|
3 |
import { robotics } from '@robothub/transport-server-client';
|
4 |
import type { robotics as roboticsTypes } from '@robothub/transport-server-client';
|
5 |
+
import { settings } from '$lib/settings.svelte';
|
6 |
|
7 |
|
8 |
// Get data from load function
|
demo/src/routes/[workspaceId]/robotics/producer/+page.svelte
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<script lang="ts">
|
2 |
import { onMount } from 'svelte';
|
3 |
import { robotics } from '@robothub/transport-server-client';
|
4 |
-
import { settings } from '$lib/settings.svelte
|
5 |
|
6 |
|
7 |
// Get data from load function
|
@@ -439,9 +439,9 @@
|
|
439 |
{@const limits = jointLimits[jointName as JointName]}
|
440 |
<div class="rounded border bg-gray-50 p-4">
|
441 |
<div class="mb-2 flex items-center justify-between">
|
442 |
-
<
|
443 |
{jointName.replace(/([A-Z])/g, ' $1').replace(/^./, (str) => str.toUpperCase())}
|
444 |
-
</
|
445 |
<span class="font-mono text-sm font-bold text-blue-600">
|
446 |
{value.toFixed(1)}°
|
447 |
</span>
|
@@ -515,54 +515,3 @@
|
|
515 |
</div>
|
516 |
{/if}
|
517 |
</div>
|
518 |
-
|
519 |
-
<style>
|
520 |
-
.robot-slider {
|
521 |
-
-webkit-appearance: none;
|
522 |
-
appearance: none;
|
523 |
-
height: 8px;
|
524 |
-
border-radius: 4px;
|
525 |
-
background: #e5e7eb;
|
526 |
-
outline: none;
|
527 |
-
transition: background 0.3s ease;
|
528 |
-
}
|
529 |
-
|
530 |
-
.robot-slider:hover {
|
531 |
-
background: #d1d5db;
|
532 |
-
}
|
533 |
-
|
534 |
-
.robot-slider::-webkit-slider-thumb {
|
535 |
-
-webkit-appearance: none;
|
536 |
-
appearance: none;
|
537 |
-
width: 24px;
|
538 |
-
height: 24px;
|
539 |
-
border-radius: 50%;
|
540 |
-
background: #3b82f6;
|
541 |
-
cursor: pointer;
|
542 |
-
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
543 |
-
transition: all 0.2s ease;
|
544 |
-
}
|
545 |
-
|
546 |
-
.robot-slider::-webkit-slider-thumb:hover {
|
547 |
-
background: #2563eb;
|
548 |
-
transform: scale(1.1);
|
549 |
-
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
|
550 |
-
}
|
551 |
-
|
552 |
-
.robot-slider::-moz-range-thumb {
|
553 |
-
width: 24px;
|
554 |
-
height: 24px;
|
555 |
-
border-radius: 50%;
|
556 |
-
background: #3b82f6;
|
557 |
-
cursor: pointer;
|
558 |
-
border: none;
|
559 |
-
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
560 |
-
transition: all 0.2s ease;
|
561 |
-
}
|
562 |
-
|
563 |
-
.robot-slider::-moz-range-thumb:hover {
|
564 |
-
background: #2563eb;
|
565 |
-
transform: scale(1.1);
|
566 |
-
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
|
567 |
-
}
|
568 |
-
</style>
|
|
|
1 |
<script lang="ts">
|
2 |
import { onMount } from 'svelte';
|
3 |
import { robotics } from '@robothub/transport-server-client';
|
4 |
+
import { settings } from '$lib/settings.svelte';
|
5 |
|
6 |
|
7 |
// Get data from load function
|
|
|
439 |
{@const limits = jointLimits[jointName as JointName]}
|
440 |
<div class="rounded border bg-gray-50 p-4">
|
441 |
<div class="mb-2 flex items-center justify-between">
|
442 |
+
<div class="font-mono text-sm font-medium capitalize text-gray-700">
|
443 |
{jointName.replace(/([A-Z])/g, ' $1').replace(/^./, (str) => str.toUpperCase())}
|
444 |
+
</div>
|
445 |
<span class="font-mono text-sm font-bold text-blue-600">
|
446 |
{value.toFixed(1)}°
|
447 |
</span>
|
|
|
515 |
</div>
|
516 |
{/if}
|
517 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
demo/src/routes/[workspaceId]/video/+page.svelte
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
import { onMount } from 'svelte';
|
3 |
import { video } from '@robothub/transport-server-client';
|
4 |
import type { video as videoTypes } from '@robothub/transport-server-client';
|
5 |
-
import { settings } from '$lib/settings.svelte
|
6 |
|
7 |
|
8 |
// Get data from load function
|
|
|
2 |
import { onMount } from 'svelte';
|
3 |
import { video } from '@robothub/transport-server-client';
|
4 |
import type { video as videoTypes } from '@robothub/transport-server-client';
|
5 |
+
import { settings } from '$lib/settings.svelte';
|
6 |
|
7 |
|
8 |
// Get data from load function
|
demo/src/routes/[workspaceId]/video/consumer/+page.svelte
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<script lang="ts">
|
2 |
import { onMount } from 'svelte';
|
3 |
import { video } from '@robothub/transport-server-client';
|
4 |
-
import { settings } from '$lib/settings.svelte
|
5 |
|
6 |
|
7 |
// Get data from load function
|
|
|
1 |
<script lang="ts">
|
2 |
import { onMount } from 'svelte';
|
3 |
import { video } from '@robothub/transport-server-client';
|
4 |
+
import { settings } from '$lib/settings.svelte';
|
5 |
|
6 |
|
7 |
// Get data from load function
|
demo/src/routes/[workspaceId]/video/producer/+page.svelte
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<script lang="ts">
|
2 |
import { onMount } from 'svelte';
|
3 |
import { video } from '@robothub/transport-server-client';
|
4 |
-
import { settings } from '$lib/settings.svelte
|
5 |
|
6 |
|
7 |
// Get data from load function
|
@@ -416,9 +416,9 @@
|
|
416 |
|
417 |
<!-- Quality Presets -->
|
418 |
<div>
|
419 |
-
<
|
420 |
Quality Presets
|
421 |
-
</
|
422 |
<div class="grid grid-cols-1 gap-2">
|
423 |
{#each qualityPresets as preset}
|
424 |
<button
|
|
|
1 |
<script lang="ts">
|
2 |
import { onMount } from 'svelte';
|
3 |
import { video } from '@robothub/transport-server-client';
|
4 |
+
import { settings } from '$lib/settings.svelte';
|
5 |
|
6 |
|
7 |
// Get data from load function
|
|
|
416 |
|
417 |
<!-- Quality Presets -->
|
418 |
<div>
|
419 |
+
<div class="mb-2 block font-mono text-sm font-medium text-gray-700">
|
420 |
Quality Presets
|
421 |
+
</div>
|
422 |
<div class="grid grid-cols-1 gap-2">
|
423 |
{#each qualityPresets as preset}
|
424 |
<button
|
server/uv.lock
CHANGED
@@ -144,44 +144,44 @@ wheels = [
|
|
144 |
|
145 |
[[package]]
|
146 |
name = "coverage"
|
147 |
-
version = "7.
|
148 |
-
source = { registry = "https://pypi.org/simple" }
|
149 |
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
150 |
-
wheels = [
|
151 |
-
{ url = "https://files.pythonhosted.org/packages/
|
152 |
-
{ url = "https://files.pythonhosted.org/packages/
|
153 |
-
{ url = "https://files.pythonhosted.org/packages/
|
154 |
-
{ url = "https://files.pythonhosted.org/packages/
|
155 |
-
{ url = "https://files.pythonhosted.org/packages/
|
156 |
-
{ url = "https://files.pythonhosted.org/packages/
|
157 |
-
{ url = "https://files.pythonhosted.org/packages/
|
158 |
-
{ url = "https://files.pythonhosted.org/packages/
|
159 |
-
{ url = "https://files.pythonhosted.org/packages/
|
160 |
-
{ url = "https://files.pythonhosted.org/packages/
|
161 |
-
{ url = "https://files.pythonhosted.org/packages/
|
162 |
-
{ url = "https://files.pythonhosted.org/packages/
|
163 |
-
{ url = "https://files.pythonhosted.org/packages/
|
164 |
-
{ url = "https://files.pythonhosted.org/packages/
|
165 |
-
{ url = "https://files.pythonhosted.org/packages/
|
166 |
-
{ url = "https://files.pythonhosted.org/packages/
|
167 |
-
{ url = "https://files.pythonhosted.org/packages/
|
168 |
-
{ url = "https://files.pythonhosted.org/packages/
|
169 |
-
{ url = "https://files.pythonhosted.org/packages/
|
170 |
-
{ url = "https://files.pythonhosted.org/packages/
|
171 |
-
{ url = "https://files.pythonhosted.org/packages/
|
172 |
-
{ url = "https://files.pythonhosted.org/packages/
|
173 |
-
{ url = "https://files.pythonhosted.org/packages/
|
174 |
-
{ url = "https://files.pythonhosted.org/packages/
|
175 |
-
{ url = "https://files.pythonhosted.org/packages/
|
176 |
-
{ url = "https://files.pythonhosted.org/packages/
|
177 |
-
{ url = "https://files.pythonhosted.org/packages/
|
178 |
-
{ url = "https://files.pythonhosted.org/packages/
|
179 |
-
{ url = "https://files.pythonhosted.org/packages/
|
180 |
-
{ url = "https://files.pythonhosted.org/packages/
|
181 |
-
{ url = "https://files.pythonhosted.org/packages/
|
182 |
-
{ url = "https://files.pythonhosted.org/packages/
|
183 |
-
{ url = "https://files.pythonhosted.org/packages/
|
184 |
-
{ url = "https://files.pythonhosted.org/packages/
|
185 |
]
|
186 |
|
187 |
[[package]]
|
@@ -476,11 +476,11 @@ wheels = [
|
|
476 |
|
477 |
[[package]]
|
478 |
name = "pygments"
|
479 |
-
version = "2.19.
|
480 |
source = { registry = "https://pypi.org/simple" }
|
481 |
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
482 |
wheels = [
|
483 |
-
{ url = "https://files.pythonhosted.org/packages/
|
484 |
]
|
485 |
|
486 |
[[package]]
|
@@ -561,11 +561,11 @@ wheels = [
|
|
561 |
|
562 |
[[package]]
|
563 |
name = "python-dotenv"
|
564 |
-
version = "1.1.
|
565 |
source = { registry = "https://pypi.org/simple" }
|
566 |
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
567 |
wheels = [
|
568 |
-
{ url = "https://files.pythonhosted.org/packages/
|
569 |
]
|
570 |
|
571 |
[[package]]
|
@@ -721,38 +721,69 @@ wheels = [
|
|
721 |
|
722 |
[[package]]
|
723 |
name = "watchfiles"
|
724 |
-
version = "1.0
|
725 |
source = { registry = "https://pypi.org/simple" }
|
726 |
dependencies = [
|
727 |
{ name = "anyio" },
|
728 |
]
|
729 |
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
730 |
-
wheels = [
|
731 |
-
{ url = "https://files.pythonhosted.org/packages/
|
732 |
-
{ url = "https://files.pythonhosted.org/packages/
|
733 |
-
{ url = "https://files.pythonhosted.org/packages/
|
734 |
-
{ url = "https://files.pythonhosted.org/packages/
|
735 |
-
{ url = "https://files.pythonhosted.org/packages/
|
736 |
-
{ url = "https://files.pythonhosted.org/packages/
|
737 |
-
{ url = "https://files.pythonhosted.org/packages/
|
738 |
-
{ url = "https://files.pythonhosted.org/packages/
|
739 |
-
{ url = "https://files.pythonhosted.org/packages/
|
740 |
-
{ url = "https://files.pythonhosted.org/packages/
|
741 |
-
{ url = "https://files.pythonhosted.org/packages/
|
742 |
-
{ url = "https://files.pythonhosted.org/packages/
|
743 |
-
{ url = "https://files.pythonhosted.org/packages/
|
744 |
-
{ url = "https://files.pythonhosted.org/packages/
|
745 |
-
{ url = "https://files.pythonhosted.org/packages/
|
746 |
-
{ url = "https://files.pythonhosted.org/packages/
|
747 |
-
{ url = "https://files.pythonhosted.org/packages/
|
748 |
-
{ url = "https://files.pythonhosted.org/packages/
|
749 |
-
{ url = "https://files.pythonhosted.org/packages/
|
750 |
-
{ url = "https://files.pythonhosted.org/packages/
|
751 |
-
{ url = "https://files.pythonhosted.org/packages/
|
752 |
-
{ url = "https://files.pythonhosted.org/packages/
|
753 |
-
{ url = "https://files.pythonhosted.org/packages/
|
754 |
-
{ url = "https://files.pythonhosted.org/packages/
|
755 |
-
{ url = "https://files.pythonhosted.org/packages/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
756 |
]
|
757 |
|
758 |
[[package]]
|
|
|
144 |
|
145 |
[[package]]
|
146 |
name = "coverage"
|
147 |
+
version = "7.9.1"
|
148 |
+
source = { registry = "https://pypi.org/simple" }
|
149 |
+
sdist = { url = "https://files.pythonhosted.org/packages/e7/e0/98670a80884f64578f0c22cd70c5e81a6e07b08167721c7487b4d70a7ca0/coverage-7.9.1.tar.gz", hash = "sha256:6cf43c78c4282708a28e466316935ec7489a9c487518a77fa68f716c67909cec", size = 813650, upload-time = "2025-06-13T13:02:28.627Z" }
|
150 |
+
wheels = [
|
151 |
+
{ url = "https://files.pythonhosted.org/packages/68/d9/7f66eb0a8f2fce222de7bdc2046ec41cb31fe33fb55a330037833fb88afc/coverage-7.9.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8de12b4b87c20de895f10567639c0797b621b22897b0af3ce4b4e204a743626", size = 212336, upload-time = "2025-06-13T13:01:10.909Z" },
|
152 |
+
{ url = "https://files.pythonhosted.org/packages/20/20/e07cb920ef3addf20f052ee3d54906e57407b6aeee3227a9c91eea38a665/coverage-7.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5add197315a054e92cee1b5f686a2bcba60c4c3e66ee3de77ace6c867bdee7cb", size = 212571, upload-time = "2025-06-13T13:01:12.518Z" },
|
153 |
+
{ url = "https://files.pythonhosted.org/packages/78/f8/96f155de7e9e248ca9c8ff1a40a521d944ba48bec65352da9be2463745bf/coverage-7.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:600a1d4106fe66f41e5d0136dfbc68fe7200a5cbe85610ddf094f8f22e1b0300", size = 246377, upload-time = "2025-06-13T13:01:14.87Z" },
|
154 |
+
{ url = "https://files.pythonhosted.org/packages/3e/cf/1d783bd05b7bca5c10ded5f946068909372e94615a4416afadfe3f63492d/coverage-7.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a876e4c3e5a2a1715a6608906aa5a2e0475b9c0f68343c2ada98110512ab1d8", size = 243394, upload-time = "2025-06-13T13:01:16.23Z" },
|
155 |
+
{ url = "https://files.pythonhosted.org/packages/02/dd/e7b20afd35b0a1abea09fb3998e1abc9f9bd953bee548f235aebd2b11401/coverage-7.9.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81f34346dd63010453922c8e628a52ea2d2ccd73cb2487f7700ac531b247c8a5", size = 245586, upload-time = "2025-06-13T13:01:17.532Z" },
|
156 |
+
{ url = "https://files.pythonhosted.org/packages/4e/38/b30b0006fea9d617d1cb8e43b1bc9a96af11eff42b87eb8c716cf4d37469/coverage-7.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:888f8eee13f2377ce86d44f338968eedec3291876b0b8a7289247ba52cb984cd", size = 245396, upload-time = "2025-06-13T13:01:19.164Z" },
|
157 |
+
{ url = "https://files.pythonhosted.org/packages/31/e4/4d8ec1dc826e16791f3daf1b50943e8e7e1eb70e8efa7abb03936ff48418/coverage-7.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9969ef1e69b8c8e1e70d591f91bbc37fc9a3621e447525d1602801a24ceda898", size = 243577, upload-time = "2025-06-13T13:01:22.433Z" },
|
158 |
+
{ url = "https://files.pythonhosted.org/packages/25/f4/b0e96c5c38e6e40ef465c4bc7f138863e2909c00e54a331da335faf0d81a/coverage-7.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:60c458224331ee3f1a5b472773e4a085cc27a86a0b48205409d364272d67140d", size = 244809, upload-time = "2025-06-13T13:01:24.143Z" },
|
159 |
+
{ url = "https://files.pythonhosted.org/packages/8a/65/27e0a1fa5e2e5079bdca4521be2f5dabf516f94e29a0defed35ac2382eb2/coverage-7.9.1-cp312-cp312-win32.whl", hash = "sha256:5f646a99a8c2b3ff4c6a6e081f78fad0dde275cd59f8f49dc4eab2e394332e74", size = 214724, upload-time = "2025-06-13T13:01:25.435Z" },
|
160 |
+
{ url = "https://files.pythonhosted.org/packages/9b/a8/d5b128633fd1a5e0401a4160d02fa15986209a9e47717174f99dc2f7166d/coverage-7.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:30f445f85c353090b83e552dcbbdad3ec84c7967e108c3ae54556ca69955563e", size = 215535, upload-time = "2025-06-13T13:01:27.861Z" },
|
161 |
+
{ url = "https://files.pythonhosted.org/packages/a3/37/84bba9d2afabc3611f3e4325ee2c6a47cd449b580d4a606b240ce5a6f9bf/coverage-7.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:af41da5dca398d3474129c58cb2b106a5d93bbb196be0d307ac82311ca234342", size = 213904, upload-time = "2025-06-13T13:01:29.202Z" },
|
162 |
+
{ url = "https://files.pythonhosted.org/packages/d0/a7/a027970c991ca90f24e968999f7d509332daf6b8c3533d68633930aaebac/coverage-7.9.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:31324f18d5969feef7344a932c32428a2d1a3e50b15a6404e97cba1cc9b2c631", size = 212358, upload-time = "2025-06-13T13:01:30.909Z" },
|
163 |
+
{ url = "https://files.pythonhosted.org/packages/f2/48/6aaed3651ae83b231556750280682528fea8ac7f1232834573472d83e459/coverage-7.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0c804506d624e8a20fb3108764c52e0eef664e29d21692afa375e0dd98dc384f", size = 212620, upload-time = "2025-06-13T13:01:32.256Z" },
|
164 |
+
{ url = "https://files.pythonhosted.org/packages/6c/2a/f4b613f3b44d8b9f144847c89151992b2b6b79cbc506dee89ad0c35f209d/coverage-7.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef64c27bc40189f36fcc50c3fb8f16ccda73b6a0b80d9bd6e6ce4cffcd810bbd", size = 245788, upload-time = "2025-06-13T13:01:33.948Z" },
|
165 |
+
{ url = "https://files.pythonhosted.org/packages/04/d2/de4fdc03af5e4e035ef420ed26a703c6ad3d7a07aff2e959eb84e3b19ca8/coverage-7.9.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4fe2348cc6ec372e25adec0219ee2334a68d2f5222e0cba9c0d613394e12d86", size = 243001, upload-time = "2025-06-13T13:01:35.285Z" },
|
166 |
+
{ url = "https://files.pythonhosted.org/packages/f5/e8/eed18aa5583b0423ab7f04e34659e51101135c41cd1dcb33ac1d7013a6d6/coverage-7.9.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34ed2186fe52fcc24d4561041979a0dec69adae7bce2ae8d1c49eace13e55c43", size = 244985, upload-time = "2025-06-13T13:01:36.712Z" },
|
167 |
+
{ url = "https://files.pythonhosted.org/packages/17/f8/ae9e5cce8885728c934eaa58ebfa8281d488ef2afa81c3dbc8ee9e6d80db/coverage-7.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:25308bd3d00d5eedd5ae7d4357161f4df743e3c0240fa773ee1b0f75e6c7c0f1", size = 245152, upload-time = "2025-06-13T13:01:39.303Z" },
|
168 |
+
{ url = "https://files.pythonhosted.org/packages/5a/c8/272c01ae792bb3af9b30fac14d71d63371db227980682836ec388e2c57c0/coverage-7.9.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73e9439310f65d55a5a1e0564b48e34f5369bee943d72c88378f2d576f5a5751", size = 243123, upload-time = "2025-06-13T13:01:40.727Z" },
|
169 |
+
{ url = "https://files.pythonhosted.org/packages/8c/d0/2819a1e3086143c094ab446e3bdf07138527a7b88cb235c488e78150ba7a/coverage-7.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37ab6be0859141b53aa89412a82454b482c81cf750de4f29223d52268a86de67", size = 244506, upload-time = "2025-06-13T13:01:42.184Z" },
|
170 |
+
{ url = "https://files.pythonhosted.org/packages/8b/4e/9f6117b89152df7b6112f65c7a4ed1f2f5ec8e60c4be8f351d91e7acc848/coverage-7.9.1-cp313-cp313-win32.whl", hash = "sha256:64bdd969456e2d02a8b08aa047a92d269c7ac1f47e0c977675d550c9a0863643", size = 214766, upload-time = "2025-06-13T13:01:44.482Z" },
|
171 |
+
{ url = "https://files.pythonhosted.org/packages/27/0f/4b59f7c93b52c2c4ce7387c5a4e135e49891bb3b7408dcc98fe44033bbe0/coverage-7.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:be9e3f68ca9edb897c2184ad0eee815c635565dbe7a0e7e814dc1f7cbab92c0a", size = 215568, upload-time = "2025-06-13T13:01:45.772Z" },
|
172 |
+
{ url = "https://files.pythonhosted.org/packages/09/1e/9679826336f8c67b9c39a359352882b24a8a7aee48d4c9cad08d38d7510f/coverage-7.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:1c503289ffef1d5105d91bbb4d62cbe4b14bec4d13ca225f9c73cde9bb46207d", size = 213939, upload-time = "2025-06-13T13:01:47.087Z" },
|
173 |
+
{ url = "https://files.pythonhosted.org/packages/bb/5b/5c6b4e7a407359a2e3b27bf9c8a7b658127975def62077d441b93a30dbe8/coverage-7.9.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0b3496922cb5f4215bf5caaef4cf12364a26b0be82e9ed6d050f3352cf2d7ef0", size = 213079, upload-time = "2025-06-13T13:01:48.554Z" },
|
174 |
+
{ url = "https://files.pythonhosted.org/packages/a2/22/1e2e07279fd2fd97ae26c01cc2186e2258850e9ec125ae87184225662e89/coverage-7.9.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9565c3ab1c93310569ec0d86b017f128f027cab0b622b7af288696d7ed43a16d", size = 213299, upload-time = "2025-06-13T13:01:49.997Z" },
|
175 |
+
{ url = "https://files.pythonhosted.org/packages/14/c0/4c5125a4b69d66b8c85986d3321520f628756cf524af810baab0790c7647/coverage-7.9.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2241ad5dbf79ae1d9c08fe52b36d03ca122fb9ac6bca0f34439e99f8327ac89f", size = 256535, upload-time = "2025-06-13T13:01:51.314Z" },
|
176 |
+
{ url = "https://files.pythonhosted.org/packages/81/8b/e36a04889dda9960be4263e95e777e7b46f1bb4fc32202612c130a20c4da/coverage-7.9.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bb5838701ca68b10ebc0937dbd0eb81974bac54447c55cd58dea5bca8451029", size = 252756, upload-time = "2025-06-13T13:01:54.403Z" },
|
177 |
+
{ url = "https://files.pythonhosted.org/packages/98/82/be04eff8083a09a4622ecd0e1f31a2c563dbea3ed848069e7b0445043a70/coverage-7.9.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b30a25f814591a8c0c5372c11ac8967f669b97444c47fd794926e175c4047ece", size = 254912, upload-time = "2025-06-13T13:01:56.769Z" },
|
178 |
+
{ url = "https://files.pythonhosted.org/packages/0f/25/c26610a2c7f018508a5ab958e5b3202d900422cf7cdca7670b6b8ca4e8df/coverage-7.9.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2d04b16a6062516df97969f1ae7efd0de9c31eb6ebdceaa0d213b21c0ca1a683", size = 256144, upload-time = "2025-06-13T13:01:58.19Z" },
|
179 |
+
{ url = "https://files.pythonhosted.org/packages/c5/8b/fb9425c4684066c79e863f1e6e7ecebb49e3a64d9f7f7860ef1688c56f4a/coverage-7.9.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7931b9e249edefb07cd6ae10c702788546341d5fe44db5b6108a25da4dca513f", size = 254257, upload-time = "2025-06-13T13:01:59.645Z" },
|
180 |
+
{ url = "https://files.pythonhosted.org/packages/93/df/27b882f54157fc1131e0e215b0da3b8d608d9b8ef79a045280118a8f98fe/coverage-7.9.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:52e92b01041151bf607ee858e5a56c62d4b70f4dac85b8c8cb7fb8a351ab2c10", size = 255094, upload-time = "2025-06-13T13:02:01.37Z" },
|
181 |
+
{ url = "https://files.pythonhosted.org/packages/41/5f/cad1c3dbed8b3ee9e16fa832afe365b4e3eeab1fb6edb65ebbf745eabc92/coverage-7.9.1-cp313-cp313t-win32.whl", hash = "sha256:684e2110ed84fd1ca5f40e89aa44adf1729dc85444004111aa01866507adf363", size = 215437, upload-time = "2025-06-13T13:02:02.905Z" },
|
182 |
+
{ url = "https://files.pythonhosted.org/packages/99/4d/fad293bf081c0e43331ca745ff63673badc20afea2104b431cdd8c278b4c/coverage-7.9.1-cp313-cp313t-win_amd64.whl", hash = "sha256:437c576979e4db840539674e68c84b3cda82bc824dd138d56bead1435f1cb5d7", size = 216605, upload-time = "2025-06-13T13:02:05.638Z" },
|
183 |
+
{ url = "https://files.pythonhosted.org/packages/1f/56/4ee027d5965fc7fc126d7ec1187529cc30cc7d740846e1ecb5e92d31b224/coverage-7.9.1-cp313-cp313t-win_arm64.whl", hash = "sha256:18a0912944d70aaf5f399e350445738a1a20b50fbea788f640751c2ed9208b6c", size = 214392, upload-time = "2025-06-13T13:02:07.642Z" },
|
184 |
+
{ url = "https://files.pythonhosted.org/packages/08/b8/7ddd1e8ba9701dea08ce22029917140e6f66a859427406579fd8d0ca7274/coverage-7.9.1-py3-none-any.whl", hash = "sha256:66b974b145aa189516b6bf2d8423e888b742517d37872f6ee4c5be0073bd9a3c", size = 204000, upload-time = "2025-06-13T13:02:27.173Z" },
|
185 |
]
|
186 |
|
187 |
[[package]]
|
|
|
476 |
|
477 |
[[package]]
|
478 |
name = "pygments"
|
479 |
+
version = "2.19.2"
|
480 |
source = { registry = "https://pypi.org/simple" }
|
481 |
+
sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" }
|
482 |
wheels = [
|
483 |
+
{ url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" },
|
484 |
]
|
485 |
|
486 |
[[package]]
|
|
|
561 |
|
562 |
[[package]]
|
563 |
name = "python-dotenv"
|
564 |
+
version = "1.1.1"
|
565 |
source = { registry = "https://pypi.org/simple" }
|
566 |
+
sdist = { url = "https://files.pythonhosted.org/packages/f6/b0/4bc07ccd3572a2f9df7e6782f52b0c6c90dcbb803ac4a167702d7d0dfe1e/python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab", size = 41978, upload-time = "2025-06-24T04:21:07.341Z" }
|
567 |
wheels = [
|
568 |
+
{ url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556, upload-time = "2025-06-24T04:21:06.073Z" },
|
569 |
]
|
570 |
|
571 |
[[package]]
|
|
|
721 |
|
722 |
[[package]]
|
723 |
name = "watchfiles"
|
724 |
+
version = "1.1.0"
|
725 |
source = { registry = "https://pypi.org/simple" }
|
726 |
dependencies = [
|
727 |
{ name = "anyio" },
|
728 |
]
|
729 |
+
sdist = { url = "https://files.pythonhosted.org/packages/2a/9a/d451fcc97d029f5812e898fd30a53fd8c15c7bbd058fd75cfc6beb9bd761/watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575", size = 94406, upload-time = "2025-06-15T19:06:59.42Z" }
|
730 |
+
wheels = [
|
731 |
+
{ url = "https://files.pythonhosted.org/packages/f6/b8/858957045a38a4079203a33aaa7d23ea9269ca7761c8a074af3524fbb240/watchfiles-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9dc001c3e10de4725c749d4c2f2bdc6ae24de5a88a339c4bce32300a31ede179", size = 402339, upload-time = "2025-06-15T19:05:24.516Z" },
|
732 |
+
{ url = "https://files.pythonhosted.org/packages/80/28/98b222cca751ba68e88521fabd79a4fab64005fc5976ea49b53fa205d1fa/watchfiles-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9ba68ec283153dead62cbe81872d28e053745f12335d037de9cbd14bd1877f5", size = 394409, upload-time = "2025-06-15T19:05:25.469Z" },
|
733 |
+
{ url = "https://files.pythonhosted.org/packages/86/50/dee79968566c03190677c26f7f47960aff738d32087087bdf63a5473e7df/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130fc497b8ee68dce163e4254d9b0356411d1490e868bd8790028bc46c5cc297", size = 450939, upload-time = "2025-06-15T19:05:26.494Z" },
|
734 |
+
{ url = "https://files.pythonhosted.org/packages/40/45/a7b56fb129700f3cfe2594a01aa38d033b92a33dddce86c8dfdfc1247b72/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50a51a90610d0845a5931a780d8e51d7bd7f309ebc25132ba975aca016b576a0", size = 457270, upload-time = "2025-06-15T19:05:27.466Z" },
|
735 |
+
{ url = "https://files.pythonhosted.org/packages/b5/c8/fa5ef9476b1d02dc6b5e258f515fcaaecf559037edf8b6feffcbc097c4b8/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc44678a72ac0910bac46fa6a0de6af9ba1355669b3dfaf1ce5f05ca7a74364e", size = 483370, upload-time = "2025-06-15T19:05:28.548Z" },
|
736 |
+
{ url = "https://files.pythonhosted.org/packages/98/68/42cfcdd6533ec94f0a7aab83f759ec11280f70b11bfba0b0f885e298f9bd/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a543492513a93b001975ae283a51f4b67973662a375a403ae82f420d2c7205ee", size = 598654, upload-time = "2025-06-15T19:05:29.997Z" },
|
737 |
+
{ url = "https://files.pythonhosted.org/packages/d3/74/b2a1544224118cc28df7e59008a929e711f9c68ce7d554e171b2dc531352/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac164e20d17cc285f2b94dc31c384bc3aa3dd5e7490473b3db043dd70fbccfd", size = 478667, upload-time = "2025-06-15T19:05:31.172Z" },
|
738 |
+
{ url = "https://files.pythonhosted.org/packages/8c/77/e3362fe308358dc9f8588102481e599c83e1b91c2ae843780a7ded939a35/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7590d5a455321e53857892ab8879dce62d1f4b04748769f5adf2e707afb9d4f", size = 452213, upload-time = "2025-06-15T19:05:32.299Z" },
|
739 |
+
{ url = "https://files.pythonhosted.org/packages/6e/17/c8f1a36540c9a1558d4faf08e909399e8133599fa359bf52ec8fcee5be6f/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:37d3d3f7defb13f62ece99e9be912afe9dd8a0077b7c45ee5a57c74811d581a4", size = 626718, upload-time = "2025-06-15T19:05:33.415Z" },
|
740 |
+
{ url = "https://files.pythonhosted.org/packages/26/45/fb599be38b4bd38032643783d7496a26a6f9ae05dea1a42e58229a20ac13/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7080c4bb3efd70a07b1cc2df99a7aa51d98685be56be6038c3169199d0a1c69f", size = 623098, upload-time = "2025-06-15T19:05:34.534Z" },
|
741 |
+
{ url = "https://files.pythonhosted.org/packages/a1/e7/fdf40e038475498e160cd167333c946e45d8563ae4dd65caf757e9ffe6b4/watchfiles-1.1.0-cp312-cp312-win32.whl", hash = "sha256:cbcf8630ef4afb05dc30107bfa17f16c0896bb30ee48fc24bf64c1f970f3b1fd", size = 279209, upload-time = "2025-06-15T19:05:35.577Z" },
|
742 |
+
{ url = "https://files.pythonhosted.org/packages/3f/d3/3ae9d5124ec75143bdf088d436cba39812122edc47709cd2caafeac3266f/watchfiles-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cbd949bdd87567b0ad183d7676feb98136cde5bb9025403794a4c0db28ed3a47", size = 292786, upload-time = "2025-06-15T19:05:36.559Z" },
|
743 |
+
{ url = "https://files.pythonhosted.org/packages/26/2f/7dd4fc8b5f2b34b545e19629b4a018bfb1de23b3a496766a2c1165ca890d/watchfiles-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:0a7d40b77f07be87c6faa93d0951a0fcd8cbca1ddff60a1b65d741bac6f3a9f6", size = 284343, upload-time = "2025-06-15T19:05:37.5Z" },
|
744 |
+
{ url = "https://files.pythonhosted.org/packages/d3/42/fae874df96595556a9089ade83be34a2e04f0f11eb53a8dbf8a8a5e562b4/watchfiles-1.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5007f860c7f1f8df471e4e04aaa8c43673429047d63205d1630880f7637bca30", size = 402004, upload-time = "2025-06-15T19:05:38.499Z" },
|
745 |
+
{ url = "https://files.pythonhosted.org/packages/fa/55/a77e533e59c3003d9803c09c44c3651224067cbe7fb5d574ddbaa31e11ca/watchfiles-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20ecc8abbd957046f1fe9562757903f5eaf57c3bce70929fda6c7711bb58074a", size = 393671, upload-time = "2025-06-15T19:05:39.52Z" },
|
746 |
+
{ url = "https://files.pythonhosted.org/packages/05/68/b0afb3f79c8e832e6571022611adbdc36e35a44e14f129ba09709aa4bb7a/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2f0498b7d2a3c072766dba3274fe22a183dbea1f99d188f1c6c72209a1063dc", size = 449772, upload-time = "2025-06-15T19:05:40.897Z" },
|
747 |
+
{ url = "https://files.pythonhosted.org/packages/ff/05/46dd1f6879bc40e1e74c6c39a1b9ab9e790bf1f5a2fe6c08b463d9a807f4/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239736577e848678e13b201bba14e89718f5c2133dfd6b1f7846fa1b58a8532b", size = 456789, upload-time = "2025-06-15T19:05:42.045Z" },
|
748 |
+
{ url = "https://files.pythonhosted.org/packages/8b/ca/0eeb2c06227ca7f12e50a47a3679df0cd1ba487ea19cf844a905920f8e95/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff4b8d89f444f7e49136dc695599a591ff769300734446c0a86cba2eb2f9895", size = 482551, upload-time = "2025-06-15T19:05:43.781Z" },
|
749 |
+
{ url = "https://files.pythonhosted.org/packages/31/47/2cecbd8694095647406645f822781008cc524320466ea393f55fe70eed3b/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b0a02a91762c08f7264e2e79542f76870c3040bbc847fb67410ab81474932a", size = 597420, upload-time = "2025-06-15T19:05:45.244Z" },
|
750 |
+
{ url = "https://files.pythonhosted.org/packages/d9/7e/82abc4240e0806846548559d70f0b1a6dfdca75c1b4f9fa62b504ae9b083/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29e7bc2eee15cbb339c68445959108803dc14ee0c7b4eea556400131a8de462b", size = 477950, upload-time = "2025-06-15T19:05:46.332Z" },
|
751 |
+
{ url = "https://files.pythonhosted.org/packages/25/0d/4d564798a49bf5482a4fa9416dea6b6c0733a3b5700cb8a5a503c4b15853/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9481174d3ed982e269c090f780122fb59cee6c3796f74efe74e70f7780ed94c", size = 451706, upload-time = "2025-06-15T19:05:47.459Z" },
|
752 |
+
{ url = "https://files.pythonhosted.org/packages/81/b5/5516cf46b033192d544102ea07c65b6f770f10ed1d0a6d388f5d3874f6e4/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:80f811146831c8c86ab17b640801c25dc0a88c630e855e2bef3568f30434d52b", size = 625814, upload-time = "2025-06-15T19:05:48.654Z" },
|
753 |
+
{ url = "https://files.pythonhosted.org/packages/0c/dd/7c1331f902f30669ac3e754680b6edb9a0dd06dea5438e61128111fadd2c/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:60022527e71d1d1fda67a33150ee42869042bce3d0fcc9cc49be009a9cded3fb", size = 622820, upload-time = "2025-06-15T19:05:50.088Z" },
|
754 |
+
{ url = "https://files.pythonhosted.org/packages/1b/14/36d7a8e27cd128d7b1009e7715a7c02f6c131be9d4ce1e5c3b73d0e342d8/watchfiles-1.1.0-cp313-cp313-win32.whl", hash = "sha256:32d6d4e583593cb8576e129879ea0991660b935177c0f93c6681359b3654bfa9", size = 279194, upload-time = "2025-06-15T19:05:51.186Z" },
|
755 |
+
{ url = "https://files.pythonhosted.org/packages/25/41/2dd88054b849aa546dbeef5696019c58f8e0774f4d1c42123273304cdb2e/watchfiles-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:f21af781a4a6fbad54f03c598ab620e3a77032c5878f3d780448421a6e1818c7", size = 292349, upload-time = "2025-06-15T19:05:52.201Z" },
|
756 |
+
{ url = "https://files.pythonhosted.org/packages/c8/cf/421d659de88285eb13941cf11a81f875c176f76a6d99342599be88e08d03/watchfiles-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:5366164391873ed76bfdf618818c82084c9db7fac82b64a20c44d335eec9ced5", size = 283836, upload-time = "2025-06-15T19:05:53.265Z" },
|
757 |
+
{ url = "https://files.pythonhosted.org/packages/45/10/6faf6858d527e3599cc50ec9fcae73590fbddc1420bd4fdccfebffeedbc6/watchfiles-1.1.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:17ab167cca6339c2b830b744eaf10803d2a5b6683be4d79d8475d88b4a8a4be1", size = 400343, upload-time = "2025-06-15T19:05:54.252Z" },
|
758 |
+
{ url = "https://files.pythonhosted.org/packages/03/20/5cb7d3966f5e8c718006d0e97dfe379a82f16fecd3caa7810f634412047a/watchfiles-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:328dbc9bff7205c215a7807da7c18dce37da7da718e798356212d22696404339", size = 392916, upload-time = "2025-06-15T19:05:55.264Z" },
|
759 |
+
{ url = "https://files.pythonhosted.org/packages/8c/07/d8f1176328fa9e9581b6f120b017e286d2a2d22ae3f554efd9515c8e1b49/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7208ab6e009c627b7557ce55c465c98967e8caa8b11833531fdf95799372633", size = 449582, upload-time = "2025-06-15T19:05:56.317Z" },
|
760 |
+
{ url = "https://files.pythonhosted.org/packages/66/e8/80a14a453cf6038e81d072a86c05276692a1826471fef91df7537dba8b46/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8f6f72974a19efead54195bc9bed4d850fc047bb7aa971268fd9a8387c89011", size = 456752, upload-time = "2025-06-15T19:05:57.359Z" },
|
761 |
+
{ url = "https://files.pythonhosted.org/packages/5a/25/0853b3fe0e3c2f5af9ea60eb2e781eade939760239a72c2d38fc4cc335f6/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d181ef50923c29cf0450c3cd47e2f0557b62218c50b2ab8ce2ecaa02bd97e670", size = 481436, upload-time = "2025-06-15T19:05:58.447Z" },
|
762 |
+
{ url = "https://files.pythonhosted.org/packages/fe/9e/4af0056c258b861fbb29dcb36258de1e2b857be4a9509e6298abcf31e5c9/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adb4167043d3a78280d5d05ce0ba22055c266cf8655ce942f2fb881262ff3cdf", size = 596016, upload-time = "2025-06-15T19:05:59.59Z" },
|
763 |
+
{ url = "https://files.pythonhosted.org/packages/c5/fa/95d604b58aa375e781daf350897aaaa089cff59d84147e9ccff2447c8294/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5701dc474b041e2934a26d31d39f90fac8a3dee2322b39f7729867f932b1d4", size = 476727, upload-time = "2025-06-15T19:06:01.086Z" },
|
764 |
+
{ url = "https://files.pythonhosted.org/packages/65/95/fe479b2664f19be4cf5ceeb21be05afd491d95f142e72d26a42f41b7c4f8/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b067915e3c3936966a8607f6fe5487df0c9c4afb85226613b520890049deea20", size = 451864, upload-time = "2025-06-15T19:06:02.144Z" },
|
765 |
+
{ url = "https://files.pythonhosted.org/packages/d3/8a/3c4af14b93a15ce55901cd7a92e1a4701910f1768c78fb30f61d2b79785b/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:9c733cda03b6d636b4219625a4acb5c6ffb10803338e437fb614fef9516825ef", size = 625626, upload-time = "2025-06-15T19:06:03.578Z" },
|
766 |
+
{ url = "https://files.pythonhosted.org/packages/da/f5/cf6aa047d4d9e128f4b7cde615236a915673775ef171ff85971d698f3c2c/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:cc08ef8b90d78bfac66f0def80240b0197008e4852c9f285907377b2947ffdcb", size = 622744, upload-time = "2025-06-15T19:06:05.066Z" },
|
767 |
+
{ url = "https://files.pythonhosted.org/packages/2c/00/70f75c47f05dea6fd30df90f047765f6fc2d6eb8b5a3921379b0b04defa2/watchfiles-1.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9974d2f7dc561cce3bb88dfa8eb309dab64c729de85fba32e98d75cf24b66297", size = 402114, upload-time = "2025-06-15T19:06:06.186Z" },
|
768 |
+
{ url = "https://files.pythonhosted.org/packages/53/03/acd69c48db4a1ed1de26b349d94077cca2238ff98fd64393f3e97484cae6/watchfiles-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c68e9f1fcb4d43798ad8814c4c1b61547b014b667216cb754e606bfade587018", size = 393879, upload-time = "2025-06-15T19:06:07.369Z" },
|
769 |
+
{ url = "https://files.pythonhosted.org/packages/2f/c8/a9a2a6f9c8baa4eceae5887fecd421e1b7ce86802bcfc8b6a942e2add834/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95ab1594377effac17110e1352989bdd7bdfca9ff0e5eeccd8c69c5389b826d0", size = 450026, upload-time = "2025-06-15T19:06:08.476Z" },
|
770 |
+
{ url = "https://files.pythonhosted.org/packages/fe/51/d572260d98388e6e2b967425c985e07d47ee6f62e6455cefb46a6e06eda5/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fba9b62da882c1be1280a7584ec4515d0a6006a94d6e5819730ec2eab60ffe12", size = 457917, upload-time = "2025-06-15T19:06:09.988Z" },
|
771 |
+
{ url = "https://files.pythonhosted.org/packages/c6/2d/4258e52917bf9f12909b6ec314ff9636276f3542f9d3807d143f27309104/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3434e401f3ce0ed6b42569128b3d1e3af773d7ec18751b918b89cd49c14eaafb", size = 483602, upload-time = "2025-06-15T19:06:11.088Z" },
|
772 |
+
{ url = "https://files.pythonhosted.org/packages/84/99/bee17a5f341a4345fe7b7972a475809af9e528deba056f8963d61ea49f75/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa257a4d0d21fcbca5b5fcba9dca5a78011cb93c0323fb8855c6d2dfbc76eb77", size = 596758, upload-time = "2025-06-15T19:06:12.197Z" },
|
773 |
+
{ url = "https://files.pythonhosted.org/packages/40/76/e4bec1d59b25b89d2b0716b41b461ed655a9a53c60dc78ad5771fda5b3e6/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd1b3879a578a8ec2076c7961076df540b9af317123f84569f5a9ddee64ce92", size = 477601, upload-time = "2025-06-15T19:06:13.391Z" },
|
774 |
+
{ url = "https://files.pythonhosted.org/packages/1f/fa/a514292956f4a9ce3c567ec0c13cce427c158e9f272062685a8a727d08fc/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc7a30eeb0e20ecc5f4bd113cd69dcdb745a07c68c0370cea919f373f65d9e", size = 451936, upload-time = "2025-06-15T19:06:14.656Z" },
|
775 |
+
{ url = "https://files.pythonhosted.org/packages/32/5d/c3bf927ec3bbeb4566984eba8dd7a8eb69569400f5509904545576741f88/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:891c69e027748b4a73847335d208e374ce54ca3c335907d381fde4e41661b13b", size = 626243, upload-time = "2025-06-15T19:06:16.232Z" },
|
776 |
+
{ url = "https://files.pythonhosted.org/packages/e6/65/6e12c042f1a68c556802a84d54bb06d35577c81e29fba14019562479159c/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:12fe8eaffaf0faa7906895b4f8bb88264035b3f0243275e0bf24af0436b27259", size = 623073, upload-time = "2025-06-15T19:06:17.457Z" },
|
777 |
+
{ url = "https://files.pythonhosted.org/packages/89/ab/7f79d9bf57329e7cbb0a6fd4c7bd7d0cee1e4a8ef0041459f5409da3506c/watchfiles-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bfe3c517c283e484843cb2e357dd57ba009cff351edf45fb455b5fbd1f45b15f", size = 400872, upload-time = "2025-06-15T19:06:18.57Z" },
|
778 |
+
{ url = "https://files.pythonhosted.org/packages/df/d5/3f7bf9912798e9e6c516094db6b8932df53b223660c781ee37607030b6d3/watchfiles-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9ccbf1f129480ed3044f540c0fdbc4ee556f7175e5ab40fe077ff6baf286d4e", size = 392877, upload-time = "2025-06-15T19:06:19.55Z" },
|
779 |
+
{ url = "https://files.pythonhosted.org/packages/0d/c5/54ec7601a2798604e01c75294770dbee8150e81c6e471445d7601610b495/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba0e3255b0396cac3cc7bbace76404dd72b5438bf0d8e7cefa2f79a7f3649caa", size = 449645, upload-time = "2025-06-15T19:06:20.66Z" },
|
780 |
+
{ url = "https://files.pythonhosted.org/packages/0a/04/c2f44afc3b2fce21ca0b7802cbd37ed90a29874f96069ed30a36dfe57c2b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4281cd9fce9fc0a9dbf0fc1217f39bf9cf2b4d315d9626ef1d4e87b84699e7e8", size = 457424, upload-time = "2025-06-15T19:06:21.712Z" },
|
781 |
+
{ url = "https://files.pythonhosted.org/packages/9f/b0/eec32cb6c14d248095261a04f290636da3df3119d4040ef91a4a50b29fa5/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d2404af8db1329f9a3c9b79ff63e0ae7131986446901582067d9304ae8aaf7f", size = 481584, upload-time = "2025-06-15T19:06:22.777Z" },
|
782 |
+
{ url = "https://files.pythonhosted.org/packages/d1/e2/ca4bb71c68a937d7145aa25709e4f5d68eb7698a25ce266e84b55d591bbd/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e78b6ed8165996013165eeabd875c5dfc19d41b54f94b40e9fff0eb3193e5e8e", size = 596675, upload-time = "2025-06-15T19:06:24.226Z" },
|
783 |
+
{ url = "https://files.pythonhosted.org/packages/a1/dd/b0e4b7fb5acf783816bc950180a6cd7c6c1d2cf7e9372c0ea634e722712b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:249590eb75ccc117f488e2fabd1bfa33c580e24b96f00658ad88e38844a040bb", size = 477363, upload-time = "2025-06-15T19:06:25.42Z" },
|
784 |
+
{ url = "https://files.pythonhosted.org/packages/69/c4/088825b75489cb5b6a761a4542645718893d395d8c530b38734f19da44d2/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05686b5487cfa2e2c28ff1aa370ea3e6c5accfe6435944ddea1e10d93872147", size = 452240, upload-time = "2025-06-15T19:06:26.552Z" },
|
785 |
+
{ url = "https://files.pythonhosted.org/packages/10/8c/22b074814970eeef43b7c44df98c3e9667c1f7bf5b83e0ff0201b0bd43f9/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d0e10e6f8f6dc5762adee7dece33b722282e1f59aa6a55da5d493a97282fedd8", size = 625607, upload-time = "2025-06-15T19:06:27.606Z" },
|
786 |
+
{ url = "https://files.pythonhosted.org/packages/32/fa/a4f5c2046385492b2273213ef815bf71a0d4c1943b784fb904e184e30201/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:af06c863f152005c7592df1d6a7009c836a247c9d8adb78fef8575a5a98699db", size = 623315, upload-time = "2025-06-15T19:06:29.076Z" },
|
787 |
]
|
788 |
|
789 |
[[package]]
|