quoroom 0.1.41 → 0.1.42
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/README.md +13 -30
- package/out/mcp/api-server.js +56 -13
- package/out/mcp/cli.js +358 -220
- package/out/mcp/server.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
|
|
19
19
|
A single agent thinks. A collective decides. We're building the swarm.
|
|
20
20
|
|
|
21
|
-
Queen, Workers, Quorum. Goals, skills, self-modification, wallet — local-first on your machine, with optional cloud
|
|
21
|
+
Queen, Workers, Quorum. Goals, skills, self-modification, wallet — local-first on your machine, with optional cloud swarm runtime on quoroom.io.
|
|
22
22
|
|
|
23
23
|
[Local](https://quoroom.ai) · [Cloud](https://quoroom.io)
|
|
24
24
|
|
|
25
25
|
Local/cloud split:
|
|
26
26
|
- Local app + install surface: `quoroom.ai`
|
|
27
|
-
- Cloud app + API + public rooms +
|
|
27
|
+
- Cloud app + API + public rooms + swarm instances: `quoroom.io`
|
|
28
28
|
|
|
29
29
|
<p align="center">
|
|
30
30
|
<video src="docs/demo.mp4" autoplay loop muted playsinline width="800"></video>
|
|
@@ -41,7 +41,7 @@ Local/cloud split:
|
|
|
41
41
|
Official channels only:
|
|
42
42
|
|
|
43
43
|
- `https://quoroom.ai` (local app/download)
|
|
44
|
-
- `https://quoroom.io` (cloud app/public rooms/
|
|
44
|
+
- `https://quoroom.io` (cloud app/public rooms/swarm instances)
|
|
45
45
|
- `https://github.com/quoroom-ai`
|
|
46
46
|
- Telegram: `@quoroom_ai_bot`
|
|
47
47
|
|
|
@@ -52,7 +52,7 @@ See `TRADEMARKS.md` for full trademark usage terms.
|
|
|
52
52
|
|
|
53
53
|
## Why Quoroom?
|
|
54
54
|
|
|
55
|
-
Run a swarm of AI agents that pursue goals autonomously. The Queen strategizes, a swarm of Workers execute, and the Quorum votes on decisions. Agents learn new skills and modify their own behavior.
|
|
55
|
+
Run a swarm of AI agents that pursue goals autonomously. The Queen strategizes, a swarm of Workers execute, and the Quorum votes on decisions. Agents learn new skills and modify their own behavior. In cloud mode, workers run on the swarm runtime host provisioned for the room on quoroom.io.
|
|
56
56
|
|
|
57
57
|
Continuous autonomous execution is becoming widespread. It's already happening behind closed doors. We believe it should happen in the open — publicly, transparently — so everyone can learn. Quoroom is an experiment: let's see what AI swarms can actually execute.
|
|
58
58
|
|
|
@@ -71,12 +71,12 @@ Quoroom is an open research project exploring autonomous agent collectives. Each
|
|
|
71
71
|
|
|
72
72
|
## This Repo
|
|
73
73
|
|
|
74
|
-
`quoroom-ai/room` is the engine: agent loop, quorum governance, goals, skills, self-modification, wallet,
|
|
74
|
+
`quoroom-ai/room` is the engine: agent loop, quorum governance, goals, skills, self-modification, wallet, memory, task scheduling, MCP server, HTTP/WebSocket API, dashboard UI, and CLI.
|
|
75
75
|
|
|
76
76
|
| Repo | Purpose |
|
|
77
77
|
|------|---------|
|
|
78
78
|
| **room** (this) | Engine + HTTP server + UI |
|
|
79
|
-
| [cloud](https://github.com/quoroom-ai/cloud) | Landing page, public rooms, PostgreSQL,
|
|
79
|
+
| [cloud](https://github.com/quoroom-ai/cloud) | Landing page, public rooms, PostgreSQL, swarm instance infrastructure |
|
|
80
80
|
|
|
81
81
|
---
|
|
82
82
|
|
|
@@ -100,7 +100,7 @@ Quoroom is an open research project exploring autonomous agent collectives. Each
|
|
|
100
100
|
|
|
101
101
|
**On-Chain Identity** — ERC-8004 agent identity on Base. Rooms register as on-chain agents with discoverable metadata. Reputation-ready.
|
|
102
102
|
|
|
103
|
-
**
|
|
103
|
+
**Swarm Runtime (cloud mode)** — Cloud rooms provision a single swarm runtime host. All queen/worker execution runs there; no additional execution routing layer exists.
|
|
104
104
|
|
|
105
105
|
**Task Scheduling** — Recurring (cron), one-time, on-demand, or **webhook-triggered** tasks with session continuity and auto-nudge.
|
|
106
106
|
|
|
@@ -141,10 +141,10 @@ Quoroom is an open research project exploring autonomous agent collectives. Each
|
|
|
141
141
|
│ │ goals · skills · self-mod · memory │ │
|
|
142
142
|
│ └───────────────────────────────────────────┘ │
|
|
143
143
|
│ │
|
|
144
|
-
│ ┌────────┐
|
|
145
|
-
│ │ Wallet │ │
|
|
146
|
-
│ │(EVM) │ │(cloud)
|
|
147
|
-
│ └────────┘
|
|
144
|
+
│ ┌────────┐ ┌──────────────┐ ┌────────────────┐ │
|
|
145
|
+
│ │ Wallet │ │ Swarm Runtime│ │ Task Scheduler │ │
|
|
146
|
+
│ │(EVM) │ │(local/cloud) │ │cron/once/hook │ │
|
|
147
|
+
│ └────────┘ └──────────────┘ └────────────────┘ │
|
|
148
148
|
│ │
|
|
149
149
|
│ ┌──────────────────────────────────────────┐ │
|
|
150
150
|
│ │ Auth: agent token + user token + member │ │
|
|
@@ -383,22 +383,6 @@ The room engine exposes an MCP server over stdio. All tools use the `quoroom_` p
|
|
|
383
383
|
| `quoroom_identity_get` | Get on-chain identity (agentId, registry, URI) |
|
|
384
384
|
| `quoroom_identity_update` | Update on-chain registration metadata |
|
|
385
385
|
|
|
386
|
-
### Stations (cloud mode only)
|
|
387
|
-
|
|
388
|
-
| Tool | Description |
|
|
389
|
-
|------|-------------|
|
|
390
|
-
| `quoroom_station_create` | Provision a cloud station on quoroom.io (cloud mode only) |
|
|
391
|
-
| `quoroom_station_list` | List stations (cloud mode only) |
|
|
392
|
-
| `quoroom_station_status` | Get station status (cloud mode only) |
|
|
393
|
-
| `quoroom_station_start` | Start a stopped station (cloud mode only) |
|
|
394
|
-
| `quoroom_station_stop` | Stop a running station (cloud mode only) |
|
|
395
|
-
| `quoroom_station_exec` | Execute a command on a station (cloud mode only) |
|
|
396
|
-
| `quoroom_station_logs` | View station logs (cloud mode only) |
|
|
397
|
-
| `quoroom_station_delete` | Delete a station (cloud mode only) |
|
|
398
|
-
| `quoroom_station_cancel` | Cancel a pending station (cloud mode only) |
|
|
399
|
-
| `quoroom_station_create_crypto` | Provision a station with crypto payment (cloud mode only) |
|
|
400
|
-
| `quoroom_station_renew_crypto` | Renew a station with crypto payment (cloud mode only) |
|
|
401
|
-
|
|
402
386
|
### Inbox
|
|
403
387
|
|
|
404
388
|
| Tool | Description |
|
|
@@ -518,7 +502,7 @@ room/
|
|
|
518
502
|
│ ├── mcp/ # MCP server (stdio)
|
|
519
503
|
│ │ ├── server.ts # Tool registration
|
|
520
504
|
│ │ ├── db.ts # Database initialization
|
|
521
|
-
│ │ └── tools/ #
|
|
505
|
+
│ │ └── tools/ # 19 tool modules
|
|
522
506
|
│ ├── server/ # HTTP/WebSocket API server
|
|
523
507
|
│ │ ├── index.ts # Server bootstrap (local + cloud mode)
|
|
524
508
|
│ │ ├── router.ts # Request router
|
|
@@ -526,7 +510,7 @@ room/
|
|
|
526
510
|
│ │ ├── access.ts # Role-based access control
|
|
527
511
|
│ │ ├── webhooks.ts # Webhook receiver (no-auth token endpoints)
|
|
528
512
|
│ │ ├── ws.ts # WebSocket real-time events
|
|
529
|
-
│ │ └── routes/ # REST API routes (
|
|
513
|
+
│ │ └── routes/ # REST API routes (19 modules)
|
|
530
514
|
│ ├── ui/ # React SPA dashboard
|
|
531
515
|
│ │ ├── App.tsx # Root component
|
|
532
516
|
│ │ ├── components/ # UI components (32 modules)
|
|
@@ -541,7 +525,6 @@ room/
|
|
|
541
525
|
│ ├── skills.ts # Skill management
|
|
542
526
|
│ ├── wallet.ts # EVM wallet (multi-chain, USDC/USDT)
|
|
543
527
|
│ ├── identity.ts # ERC-8004 on-chain identity
|
|
544
|
-
│ ├── station.ts # Cloud provisioning
|
|
545
528
|
│ ├── task-runner.ts # Task execution engine
|
|
546
529
|
│ ├── model-provider.ts # Multi-provider LLM support
|
|
547
530
|
│ ├── cloud-sync.ts # Cloud registration + heartbeat
|
package/out/mcp/api-server.js
CHANGED
|
@@ -9711,7 +9711,7 @@ var require_package = __commonJS({
|
|
|
9711
9711
|
"package.json"(exports2, module2) {
|
|
9712
9712
|
module2.exports = {
|
|
9713
9713
|
name: "quoroom",
|
|
9714
|
-
version: "0.1.
|
|
9714
|
+
version: "0.1.42",
|
|
9715
9715
|
description: "Open-source local AI agent framework \u2014 Queen, Workers, Quorum. Experimental research tool.",
|
|
9716
9716
|
main: "./out/mcp/server.js",
|
|
9717
9717
|
bin: {
|
|
@@ -27588,11 +27588,39 @@ var CLERK_TOOL_DEFINITIONS = [
|
|
|
27588
27588
|
}
|
|
27589
27589
|
}
|
|
27590
27590
|
},
|
|
27591
|
+
{
|
|
27592
|
+
type: "function",
|
|
27593
|
+
function: {
|
|
27594
|
+
name: "quoroom_start_room",
|
|
27595
|
+
description: "Start full room runtime (queen + workers).",
|
|
27596
|
+
parameters: {
|
|
27597
|
+
type: "object",
|
|
27598
|
+
properties: {
|
|
27599
|
+
roomId: { type: "number", description: "Room ID" },
|
|
27600
|
+
roomName: { type: "string", description: "Room name (alternative to roomId)" }
|
|
27601
|
+
}
|
|
27602
|
+
}
|
|
27603
|
+
}
|
|
27604
|
+
},
|
|
27605
|
+
{
|
|
27606
|
+
type: "function",
|
|
27607
|
+
function: {
|
|
27608
|
+
name: "quoroom_stop_room",
|
|
27609
|
+
description: "Stop full room runtime (queen + workers).",
|
|
27610
|
+
parameters: {
|
|
27611
|
+
type: "object",
|
|
27612
|
+
properties: {
|
|
27613
|
+
roomId: { type: "number", description: "Room ID" },
|
|
27614
|
+
roomName: { type: "string", description: "Room name (alternative to roomId)" }
|
|
27615
|
+
}
|
|
27616
|
+
}
|
|
27617
|
+
}
|
|
27618
|
+
},
|
|
27591
27619
|
{
|
|
27592
27620
|
type: "function",
|
|
27593
27621
|
function: {
|
|
27594
27622
|
name: "quoroom_start_queen",
|
|
27595
|
-
description: "
|
|
27623
|
+
description: "Deprecated alias. Starts full room runtime (queen + workers).",
|
|
27596
27624
|
parameters: {
|
|
27597
27625
|
type: "object",
|
|
27598
27626
|
properties: {
|
|
@@ -27606,7 +27634,7 @@ var CLERK_TOOL_DEFINITIONS = [
|
|
|
27606
27634
|
type: "function",
|
|
27607
27635
|
function: {
|
|
27608
27636
|
name: "quoroom_stop_queen",
|
|
27609
|
-
description: "
|
|
27637
|
+
description: "Deprecated alias. Stops full room runtime (queen + workers).",
|
|
27610
27638
|
parameters: {
|
|
27611
27639
|
type: "object",
|
|
27612
27640
|
properties: {
|
|
@@ -27965,6 +27993,7 @@ async function executeClerkTool(db2, toolName, args, ctx) {
|
|
|
27965
27993
|
const room = resolveRoom(db2, args);
|
|
27966
27994
|
if (!room) return { content: "Error: room not found.", isError: true };
|
|
27967
27995
|
pauseRoom(db2, room.id);
|
|
27996
|
+
setRoomLaunchEnabled(room.id, false);
|
|
27968
27997
|
stopRoomRuntime(db2, room.id, "Room paused by keeper");
|
|
27969
27998
|
return { content: `Paused room "${room.name}" (#${room.id}).` };
|
|
27970
27999
|
}
|
|
@@ -27982,18 +28011,32 @@ async function executeClerkTool(db2, toolName, args, ctx) {
|
|
|
27982
28011
|
deleteRoom2(db2, room.id);
|
|
27983
28012
|
return { content: `Deleted room "${room.name}" (#${room.id}).` };
|
|
27984
28013
|
}
|
|
28014
|
+
case "quoroom_start_room":
|
|
27985
28015
|
case "quoroom_start_queen": {
|
|
27986
|
-
|
|
27987
|
-
|
|
27988
|
-
|
|
27989
|
-
|
|
28016
|
+
const room = resolveRoom(db2, args);
|
|
28017
|
+
if (!room) return { content: "Error: room not found.", isError: true };
|
|
28018
|
+
if (room.status === "stopped") {
|
|
28019
|
+
return { content: `Error: room "${room.name}" is archived (stopped).`, isError: true };
|
|
28020
|
+
}
|
|
28021
|
+
if (!room.queenWorkerId) return { content: `Error: room "${room.name}" has no queen worker.`, isError: true };
|
|
28022
|
+
if (room.status !== "active") {
|
|
28023
|
+
updateRoom(db2, room.id, { status: "active" });
|
|
28024
|
+
}
|
|
28025
|
+
setRoomLaunchEnabled(room.id, true);
|
|
28026
|
+
stopRoomRuntime(db2, room.id, "Runtime reset before room start");
|
|
28027
|
+
triggerAgent(db2, room.id, room.queenWorkerId, { allowColdStart: true });
|
|
28028
|
+
return { content: `Started room runtime for "${room.name}" (#${room.id}).` };
|
|
27990
28029
|
}
|
|
28030
|
+
case "quoroom_stop_room":
|
|
27991
28031
|
case "quoroom_stop_queen": {
|
|
27992
28032
|
const room = resolveRoom(db2, args);
|
|
27993
28033
|
if (!room) return { content: "Error: room not found.", isError: true };
|
|
27994
|
-
|
|
27995
|
-
stopRoomRuntime(db2, room.id, "
|
|
27996
|
-
|
|
28034
|
+
setRoomLaunchEnabled(room.id, false);
|
|
28035
|
+
stopRoomRuntime(db2, room.id, "Room stopped by keeper");
|
|
28036
|
+
if (room.status !== "stopped") {
|
|
28037
|
+
updateRoom(db2, room.id, { status: "paused" });
|
|
28038
|
+
}
|
|
28039
|
+
return { content: `Stopped room runtime for "${room.name}" (#${room.id}).` };
|
|
27997
28040
|
}
|
|
27998
28041
|
case "quoroom_message_room": {
|
|
27999
28042
|
const room = resolveRoom(db2, args);
|
|
@@ -30417,7 +30460,7 @@ function registerRoomRoutes(router) {
|
|
|
30417
30460
|
const roomId = Number(ctx.params.id);
|
|
30418
30461
|
const room = getRoom(ctx.db, roomId);
|
|
30419
30462
|
if (!room) return { status: 404, error: "Room not found" };
|
|
30420
|
-
const pendingEscalations = listEscalations(ctx.db, roomId, "pending").length;
|
|
30463
|
+
const pendingEscalations = listEscalations(ctx.db, roomId, "pending").filter((escalation) => escalation.toAgentId === null && escalation.fromAgentId !== null).length;
|
|
30421
30464
|
const unreadMessages = listRoomMessages(ctx.db, roomId, "unread").length;
|
|
30422
30465
|
const activeVotes = listDecisions(ctx.db, roomId, "voting").length + listDecisions(ctx.db, roomId, "announced").length;
|
|
30423
30466
|
return {
|
|
@@ -32203,7 +32246,7 @@ function semverGt(a, b) {
|
|
|
32203
32246
|
}
|
|
32204
32247
|
function getCurrentVersion() {
|
|
32205
32248
|
try {
|
|
32206
|
-
return true ? "0.1.
|
|
32249
|
+
return true ? "0.1.42" : null.version;
|
|
32207
32250
|
} catch {
|
|
32208
32251
|
return "0.0.0";
|
|
32209
32252
|
}
|
|
@@ -32573,7 +32616,7 @@ var cachedVersion = null;
|
|
|
32573
32616
|
function getVersion3() {
|
|
32574
32617
|
if (cachedVersion) return cachedVersion;
|
|
32575
32618
|
try {
|
|
32576
|
-
cachedVersion = true ? "0.1.
|
|
32619
|
+
cachedVersion = true ? "0.1.42" : null.version;
|
|
32577
32620
|
} catch {
|
|
32578
32621
|
cachedVersion = "unknown";
|
|
32579
32622
|
}
|