@electric-agent/studio 1.7.0 → 1.12.0
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/api-schemas.d.ts +225 -0
- package/dist/api-schemas.d.ts.map +1 -0
- package/dist/api-schemas.js +95 -0
- package/dist/api-schemas.js.map +1 -0
- package/dist/bridge/claude-code-base.d.ts +121 -0
- package/dist/bridge/claude-code-base.d.ts.map +1 -0
- package/dist/bridge/claude-code-base.js +263 -0
- package/dist/bridge/claude-code-base.js.map +1 -0
- package/dist/bridge/claude-code-docker.d.ts +13 -73
- package/dist/bridge/claude-code-docker.d.ts.map +1 -1
- package/dist/bridge/claude-code-docker.js +91 -302
- package/dist/bridge/claude-code-docker.js.map +1 -1
- package/dist/bridge/claude-code-sprites.d.ts +12 -59
- package/dist/bridge/claude-code-sprites.d.ts.map +1 -1
- package/dist/bridge/claude-code-sprites.js +88 -281
- package/dist/bridge/claude-code-sprites.js.map +1 -1
- package/dist/bridge/claude-md-generator.d.ts +10 -1
- package/dist/bridge/claude-md-generator.d.ts.map +1 -1
- package/dist/bridge/claude-md-generator.js +47 -98
- package/dist/bridge/claude-md-generator.js.map +1 -1
- package/dist/bridge/codex-docker.d.ts +56 -51
- package/dist/bridge/codex-docker.js +222 -230
- package/dist/bridge/codex-json-parser.d.ts +11 -11
- package/dist/bridge/codex-json-parser.js +231 -238
- package/dist/bridge/codex-md-generator.d.ts +3 -3
- package/dist/bridge/codex-md-generator.js +42 -32
- package/dist/bridge/codex-sprites.d.ts +50 -45
- package/dist/bridge/codex-sprites.js +212 -222
- package/dist/bridge/daytona.d.ts +25 -25
- package/dist/bridge/daytona.js +131 -136
- package/dist/bridge/docker-stdio.d.ts +21 -21
- package/dist/bridge/docker-stdio.js +126 -132
- package/dist/bridge/hosted.d.ts +3 -2
- package/dist/bridge/hosted.d.ts.map +1 -1
- package/dist/bridge/hosted.js +4 -0
- package/dist/bridge/hosted.js.map +1 -1
- package/dist/bridge/message-parser.d.ts +24 -0
- package/dist/bridge/message-parser.d.ts.map +1 -0
- package/dist/bridge/message-parser.js +39 -0
- package/dist/bridge/message-parser.js.map +1 -0
- package/dist/bridge/role-skills.d.ts +25 -0
- package/dist/bridge/role-skills.d.ts.map +1 -0
- package/dist/bridge/role-skills.js +120 -0
- package/dist/bridge/role-skills.js.map +1 -0
- package/dist/bridge/room-messaging-skill.d.ts +11 -0
- package/dist/bridge/room-messaging-skill.d.ts.map +1 -0
- package/dist/bridge/room-messaging-skill.js +41 -0
- package/dist/bridge/room-messaging-skill.js.map +1 -0
- package/dist/bridge/sprites.d.ts +22 -22
- package/dist/bridge/sprites.js +123 -128
- package/dist/bridge/types.d.ts +4 -10
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/client/assets/index-BfvQSMwH.css +1 -0
- package/dist/client/assets/index-CiwD5LkP.js +235 -0
- package/dist/client/index.html +2 -2
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/invite-code.d.ts +5 -0
- package/dist/invite-code.d.ts.map +1 -0
- package/dist/invite-code.js +14 -0
- package/dist/invite-code.js.map +1 -0
- package/dist/project-utils.d.ts.map +1 -1
- package/dist/project-utils.js.map +1 -1
- package/dist/registry.d.ts +11 -4
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +1 -1
- package/dist/registry.js.map +1 -1
- package/dist/room-router.d.ts +73 -0
- package/dist/room-router.d.ts.map +1 -0
- package/dist/room-router.js +345 -0
- package/dist/room-router.js.map +1 -0
- package/dist/sandbox/docker.d.ts.map +1 -1
- package/dist/sandbox/docker.js +5 -6
- package/dist/sandbox/docker.js.map +1 -1
- package/dist/sandbox/index.d.ts +0 -1
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +0 -1
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/sprites.d.ts.map +1 -1
- package/dist/sandbox/sprites.js +40 -10
- package/dist/sandbox/sprites.js.map +1 -1
- package/dist/sandbox/types.d.ts +4 -2
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/server.d.ts +12 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +761 -346
- package/dist/server.js.map +1 -1
- package/dist/session-auth.d.ts +9 -0
- package/dist/session-auth.d.ts.map +1 -1
- package/dist/session-auth.js +30 -0
- package/dist/session-auth.js.map +1 -1
- package/dist/sessions.d.ts +1 -1
- package/dist/streams.d.ts +2 -6
- package/dist/streams.d.ts.map +1 -1
- package/dist/streams.js +6 -17
- package/dist/streams.js.map +1 -1
- package/dist/validate.d.ts +10 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +24 -0
- package/dist/validate.js.map +1 -0
- package/package.json +6 -9
- package/dist/client/assets/index-D5-jqAV-.js +0 -234
- package/dist/client/assets/index-YyyiO26y.css +0 -1
package/dist/client/index.html
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
<link rel="icon" type="image/svg+xml" href="/img/brand/favicon.svg" />
|
|
8
8
|
<link rel="icon" type="image/png" href="/img/brand/favicon.png" />
|
|
9
9
|
<link rel="shortcut icon" href="/favicon.ico" />
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-CiwD5LkP.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BfvQSMwH.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
14
14
|
<div id="root"></div>
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
export { ActiveSessions } from "./active-sessions.js";
|
|
2
2
|
export { createGate, rejectAllGates, resolveGate } from "./gate.js";
|
|
3
|
+
export { generateInviteCode } from "./invite-code.js";
|
|
3
4
|
export { resolveProjectDir } from "./project-utils.js";
|
|
5
|
+
export type { RoomEntry } from "./registry.js";
|
|
4
6
|
export type { RoomInfo } from "./room-registry.js";
|
|
5
7
|
export { RoomRegistry } from "./room-registry.js";
|
|
6
8
|
export { createApp, startWebServer } from "./server.js";
|
|
7
|
-
export { deriveSessionToken, validateSessionToken } from "./session-auth.js";
|
|
9
|
+
export { deriveHookToken, deriveSessionToken, validateHookToken, validateSessionToken, } from "./session-auth.js";
|
|
8
10
|
export type { SessionInfo } from "./sessions.js";
|
|
9
11
|
export { addSession, cleanupStaleSessions, deleteSession, getSession, readSessionIndex, updateSessionInfo, } from "./sessions.js";
|
|
10
|
-
export { generateInviteCode } from "./shared-sessions.js";
|
|
11
12
|
export type { StreamConfig, StreamConnectionInfo } from "./streams.js";
|
|
12
|
-
export {
|
|
13
|
+
export { getRoomStreamConnectionInfo, getStreamConfig, getStreamConnectionInfo, } from "./streams.js";
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EACN,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACtE,OAAO,EACN,2BAA2B,EAC3B,eAAe,EACf,uBAAuB,GACvB,MAAM,cAAc,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { ActiveSessions } from "./active-sessions.js";
|
|
2
2
|
export { createGate, rejectAllGates, resolveGate } from "./gate.js";
|
|
3
|
+
export { generateInviteCode } from "./invite-code.js";
|
|
3
4
|
export { resolveProjectDir } from "./project-utils.js";
|
|
4
5
|
export { RoomRegistry } from "./room-registry.js";
|
|
5
6
|
export { createApp, startWebServer } from "./server.js";
|
|
6
|
-
export { deriveSessionToken, validateSessionToken } from "./session-auth.js";
|
|
7
|
+
export { deriveHookToken, deriveSessionToken, validateHookToken, validateSessionToken, } from "./session-auth.js";
|
|
7
8
|
export { addSession, cleanupStaleSessions, deleteSession, getSession, readSessionIndex, updateSessionInfo, } from "./sessions.js";
|
|
8
|
-
export {
|
|
9
|
-
export { getSharedStreamConnectionInfo, getStreamConfig, getStreamConnectionInfo, getStreamEnvVars, } from "./streams.js";
|
|
9
|
+
export { getRoomStreamConnectionInfo, getStreamConfig, getStreamConnectionInfo, } from "./streams.js";
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GACpB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACN,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,eAAe,CAAA;AAEtB,OAAO,EACN,2BAA2B,EAC3B,eAAe,EACf,uBAAuB,GACvB,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-code.d.ts","sourceRoot":"","sources":["../src/invite-code.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAQ3C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Generate a cryptographically random 8-char invite code (e.g. "ABCD-1234").
|
|
4
|
+
*/
|
|
5
|
+
export function generateInviteCode() {
|
|
6
|
+
const chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"; // No ambiguous chars (0/O, 1/I)
|
|
7
|
+
const bytes = crypto.randomBytes(8);
|
|
8
|
+
let code = "";
|
|
9
|
+
for (let i = 0; i < 8; i++) {
|
|
10
|
+
code += chars[bytes[i] % chars.length];
|
|
11
|
+
}
|
|
12
|
+
return `${code.slice(0, 4)}-${code.slice(4)}`;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=invite-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-code.js","sourceRoot":"","sources":["../src/invite-code.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC;;GAEG;AACH,MAAM,UAAU,kBAAkB;IACjC,MAAM,KAAK,GAAG,kCAAkC,CAAA,CAAC,gCAAgC;IACjF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACnC,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AAC9C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-utils.d.ts","sourceRoot":"","sources":["../src/project-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-utils.d.ts","sourceRoot":"","sources":["../src/project-utils.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACV;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAI7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-utils.js","sourceRoot":"","sources":["../src/project-utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"project-utils.js","sourceRoot":"","sources":["../src/project-utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAChC,OAAe,EACf,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,MAAM,EAAE,CAAA;IACtC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAA;AAClF,CAAC"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import type { SessionInfo } from "./sessions.js";
|
|
2
|
-
import type { SharedSessionEntry } from "./shared-sessions.js";
|
|
3
2
|
import { type StreamConfig } from "./streams.js";
|
|
3
|
+
export interface RoomEntry {
|
|
4
|
+
id: string;
|
|
5
|
+
/** 8-char random invite code (e.g. "ABCD-1234") */
|
|
6
|
+
code: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
revoked: boolean;
|
|
10
|
+
}
|
|
4
11
|
/**
|
|
5
12
|
* In-memory registry backed by a Durable Streams log.
|
|
6
13
|
*
|
|
@@ -44,9 +51,9 @@ export declare class Registry {
|
|
|
44
51
|
* Durably map a transcript path to an EA session ID.
|
|
45
52
|
*/
|
|
46
53
|
mapTranscriptToSession(transcriptPath: string, sessionId: string): Promise<void>;
|
|
47
|
-
addRoom(entry:
|
|
48
|
-
getRoom(id: string):
|
|
49
|
-
getRoomByCode(code: string):
|
|
54
|
+
addRoom(entry: RoomEntry): Promise<void>;
|
|
55
|
+
getRoom(id: string): RoomEntry | undefined;
|
|
56
|
+
getRoomByCode(code: string): RoomEntry | undefined;
|
|
50
57
|
revokeRoom(id: string): Promise<boolean>;
|
|
51
58
|
}
|
|
52
59
|
//# sourceMappingURL=registry.d.ts.map
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAA6B,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAI3E,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CAChB;AAYD;;;;;GAKG;AACH,qBAAa,QAAQ;IACpB,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,mBAAmB,CAA4B;IACvD,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO;IAIP;;;OAGG;WACU,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyB5D,oDAAoD;YACtC,OAAO;IAwBrB,iEAAiE;IACjE,OAAO,CAAC,UAAU;IAgClB,4DAA4D;YAC9C,MAAM;IAOd,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/C,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUjD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI/C,YAAY,IAAI,WAAW,EAAE;IAI7B;;;OAGG;IACH,oBAAoB,CAAC,WAAW,SAAqB,GAAG,MAAM;IAqB9D;;;OAGG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOlE;;OAEG;IACG,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhF,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI1C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI5C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAS9C"}
|
package/dist/registry.js
CHANGED
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RoomRouter — routes agent-to-agent messages through a shared durable stream.
|
|
3
|
+
*
|
|
4
|
+
* Watches a room's durable stream for AgentMessage events and delivers them
|
|
5
|
+
* to recipient agents via their session bridges. Supports optional per-agent
|
|
6
|
+
* gating where a human must approve outbound messages before they reach the room.
|
|
7
|
+
*/
|
|
8
|
+
import type { SessionBridge } from "./bridge/types.js";
|
|
9
|
+
import { type StreamConfig } from "./streams.js";
|
|
10
|
+
export interface RoomParticipant {
|
|
11
|
+
sessionId: string;
|
|
12
|
+
name: string;
|
|
13
|
+
role?: string;
|
|
14
|
+
bridge: SessionBridge;
|
|
15
|
+
}
|
|
16
|
+
export interface RoomRouterOptions {
|
|
17
|
+
/** Maximum rounds before the room auto-closes (default: 20) */
|
|
18
|
+
maxRounds?: number;
|
|
19
|
+
}
|
|
20
|
+
export declare class RoomRouter {
|
|
21
|
+
readonly roomId: string;
|
|
22
|
+
private readonly roomName;
|
|
23
|
+
private readonly streamConfig;
|
|
24
|
+
private readonly maxRounds;
|
|
25
|
+
private readonly _participants;
|
|
26
|
+
private _state;
|
|
27
|
+
private _roundCount;
|
|
28
|
+
private cancelSubscription;
|
|
29
|
+
private stream;
|
|
30
|
+
constructor(roomId: string, roomName: string, streamConfig: StreamConfig, options?: RoomRouterOptions);
|
|
31
|
+
get participants(): RoomParticipant[];
|
|
32
|
+
get state(): "active" | "closed";
|
|
33
|
+
get roundCount(): number;
|
|
34
|
+
/**
|
|
35
|
+
* Add an agent to the room.
|
|
36
|
+
* Reads stream history for discovery context, sends discovery prompt to agent.
|
|
37
|
+
*/
|
|
38
|
+
addParticipant(participant: RoomParticipant, gated?: boolean): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Remove an agent from the room.
|
|
41
|
+
*/
|
|
42
|
+
removeParticipant(sessionId: string): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Send a message to the room stream (from human, API, or system).
|
|
45
|
+
*/
|
|
46
|
+
sendMessage(from: string, body: string, to?: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Called by the server when an agent produces assistant_message output.
|
|
49
|
+
* Parses for @room messages and handles gating/delivery.
|
|
50
|
+
*/
|
|
51
|
+
handleAgentOutput(sessionId: string, text: string): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Start watching the room stream for new messages and routing them.
|
|
54
|
+
*/
|
|
55
|
+
start(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Close the room.
|
|
58
|
+
*/
|
|
59
|
+
close(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Deliver a message to recipient agent(s) via their bridges.
|
|
62
|
+
*/
|
|
63
|
+
private deliverMessage;
|
|
64
|
+
/**
|
|
65
|
+
* Read the room stream history (non-live) for discovery context.
|
|
66
|
+
*/
|
|
67
|
+
private readStreamHistory;
|
|
68
|
+
/**
|
|
69
|
+
* Build the discovery prompt sent to an agent when it joins the room.
|
|
70
|
+
*/
|
|
71
|
+
private buildDiscoveryPrompt;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=room-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-router.d.ts","sourceRoot":"","sources":["../src/room-router.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAA+B,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AAE7E,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,aAAa,CAAA;CACrB;AAED,MAAM,WAAW,iBAAiB;IACjC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAOD,qBAAa,UAAU;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAElC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyC;IACvE,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,MAAM,CAAe;gBAG5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,iBAAiB;IAiB5B,IAAI,YAAY,IAAI,eAAe,EAAE,CAEpC;IAED,IAAI,KAAK,IAAI,QAAQ,GAAG,QAAQ,CAE/B;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;OAGG;IACG,cAAc,CAAC,WAAW,EAAE,eAAe,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAqChF;;OAEG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBzD;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAazE;;;OAGG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyDvE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;YACW,cAAc;IAqC5B;;OAEG;YACW,iBAAiB;IAwE/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAgD5B"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RoomRouter — routes agent-to-agent messages through a shared durable stream.
|
|
3
|
+
*
|
|
4
|
+
* Watches a room's durable stream for AgentMessage events and delivers them
|
|
5
|
+
* to recipient agents via their session bridges. Supports optional per-agent
|
|
6
|
+
* gating where a human must approve outbound messages before they reach the room.
|
|
7
|
+
*/
|
|
8
|
+
import crypto from "node:crypto";
|
|
9
|
+
import { DurableStream } from "@durable-streams/client";
|
|
10
|
+
import { ts } from "@electric-agent/protocol";
|
|
11
|
+
import { parseRoomMessage } from "./bridge/message-parser.js";
|
|
12
|
+
import { createGate } from "./gate.js";
|
|
13
|
+
import { getRoomStreamConnectionInfo } from "./streams.js";
|
|
14
|
+
export class RoomRouter {
|
|
15
|
+
roomId;
|
|
16
|
+
roomName;
|
|
17
|
+
streamConfig;
|
|
18
|
+
maxRounds;
|
|
19
|
+
_participants = new Map();
|
|
20
|
+
_state = "active";
|
|
21
|
+
_roundCount = 0;
|
|
22
|
+
cancelSubscription = null;
|
|
23
|
+
stream;
|
|
24
|
+
constructor(roomId, roomName, streamConfig, options) {
|
|
25
|
+
this.roomId = roomId;
|
|
26
|
+
this.roomName = roomName;
|
|
27
|
+
this.streamConfig = streamConfig;
|
|
28
|
+
this.maxRounds = options?.maxRounds ?? 20;
|
|
29
|
+
const conn = getRoomStreamConnectionInfo(roomId, streamConfig);
|
|
30
|
+
this.stream = new DurableStream({
|
|
31
|
+
url: conn.url,
|
|
32
|
+
headers: conn.headers,
|
|
33
|
+
contentType: "application/json",
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
// --- Public API ---
|
|
37
|
+
get participants() {
|
|
38
|
+
return [...this._participants.values()];
|
|
39
|
+
}
|
|
40
|
+
get state() {
|
|
41
|
+
return this._state;
|
|
42
|
+
}
|
|
43
|
+
get roundCount() {
|
|
44
|
+
return this._roundCount;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Add an agent to the room.
|
|
48
|
+
* Reads stream history for discovery context, sends discovery prompt to agent.
|
|
49
|
+
*/
|
|
50
|
+
async addParticipant(participant, gated = false) {
|
|
51
|
+
const internal = { ...participant, gated };
|
|
52
|
+
this._participants.set(participant.sessionId, internal);
|
|
53
|
+
// Read stream history for discovery context (non-live replay)
|
|
54
|
+
const { roster, recentMessages } = await this.readStreamHistory();
|
|
55
|
+
// Emit participant_joined to room stream
|
|
56
|
+
const joinEvent = {
|
|
57
|
+
type: "participant_joined",
|
|
58
|
+
participant: { id: participant.sessionId, displayName: participant.name },
|
|
59
|
+
ts: ts(),
|
|
60
|
+
};
|
|
61
|
+
await this.stream.append(JSON.stringify(joinEvent));
|
|
62
|
+
// Build and send discovery prompt
|
|
63
|
+
const prompt = this.buildDiscoveryPrompt(participant, roster, recentMessages);
|
|
64
|
+
await participant.bridge.sendCommand({
|
|
65
|
+
command: "iterate",
|
|
66
|
+
request: prompt,
|
|
67
|
+
});
|
|
68
|
+
// Notify other participants that this agent joined
|
|
69
|
+
const roleSuffix = participant.role ? ` (${participant.role})` : "";
|
|
70
|
+
for (const p of this._participants.values()) {
|
|
71
|
+
if (p.sessionId !== participant.sessionId) {
|
|
72
|
+
const joinMsg = `${participant.name}${roleSuffix} has joined the room.`;
|
|
73
|
+
await p.bridge.emit({
|
|
74
|
+
type: "user_prompt",
|
|
75
|
+
message: joinMsg,
|
|
76
|
+
sender: "system",
|
|
77
|
+
ts: ts(),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove an agent from the room.
|
|
84
|
+
*/
|
|
85
|
+
async removeParticipant(sessionId) {
|
|
86
|
+
const participant = this._participants.get(sessionId);
|
|
87
|
+
if (!participant)
|
|
88
|
+
return;
|
|
89
|
+
this._participants.delete(sessionId);
|
|
90
|
+
const leaveEvent = {
|
|
91
|
+
type: "participant_left",
|
|
92
|
+
participantId: sessionId,
|
|
93
|
+
ts: ts(),
|
|
94
|
+
};
|
|
95
|
+
await this.stream.append(JSON.stringify(leaveEvent));
|
|
96
|
+
// Notify remaining participants that this agent left
|
|
97
|
+
const roleSuffix = participant.role ? ` (${participant.role})` : "";
|
|
98
|
+
for (const p of this._participants.values()) {
|
|
99
|
+
await p.bridge.emit({
|
|
100
|
+
type: "user_prompt",
|
|
101
|
+
message: `${participant.name}${roleSuffix} has left the room.`,
|
|
102
|
+
sender: "system",
|
|
103
|
+
ts: ts(),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Send a message to the room stream (from human, API, or system).
|
|
109
|
+
*/
|
|
110
|
+
async sendMessage(from, body, to) {
|
|
111
|
+
if (this._state === "closed")
|
|
112
|
+
return;
|
|
113
|
+
const event = {
|
|
114
|
+
type: "agent_message",
|
|
115
|
+
from,
|
|
116
|
+
...(to ? { to } : {}),
|
|
117
|
+
body,
|
|
118
|
+
ts: ts(),
|
|
119
|
+
};
|
|
120
|
+
await this.stream.append(JSON.stringify(event));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Called by the server when an agent produces assistant_message output.
|
|
124
|
+
* Parses for @room messages and handles gating/delivery.
|
|
125
|
+
*/
|
|
126
|
+
async handleAgentOutput(sessionId, text) {
|
|
127
|
+
if (this._state === "closed")
|
|
128
|
+
return;
|
|
129
|
+
const participant = this._participants.get(sessionId);
|
|
130
|
+
if (!participant)
|
|
131
|
+
return;
|
|
132
|
+
const knownNames = [...this._participants.values()]
|
|
133
|
+
.filter((p) => p.sessionId !== sessionId)
|
|
134
|
+
.map((p) => p.name);
|
|
135
|
+
const parsed = parseRoomMessage(text, participant.name, knownNames);
|
|
136
|
+
if (!parsed)
|
|
137
|
+
return; // Agent chose silence
|
|
138
|
+
let finalBody = parsed.body;
|
|
139
|
+
const isGateRequest = parsed.isGateRequest;
|
|
140
|
+
// Gated agent or explicit gate request: block until human approves
|
|
141
|
+
if (participant.gated || isGateRequest) {
|
|
142
|
+
const gateId = `room-msg-${crypto.randomUUID()}`;
|
|
143
|
+
// Emit gate event on the agent's session stream
|
|
144
|
+
await participant.bridge.emit({
|
|
145
|
+
type: "outbound_message_gate",
|
|
146
|
+
gateId,
|
|
147
|
+
roomId: this.roomId,
|
|
148
|
+
to: parsed.to,
|
|
149
|
+
body: parsed.body,
|
|
150
|
+
ts: ts(),
|
|
151
|
+
});
|
|
152
|
+
// Block until human resolves
|
|
153
|
+
const resolution = await createGate(sessionId, gateId);
|
|
154
|
+
// Emit resolution on agent's session stream for replay
|
|
155
|
+
await participant.bridge.emit({
|
|
156
|
+
type: "outbound_message_gate_resolved",
|
|
157
|
+
gateId,
|
|
158
|
+
action: resolution.action,
|
|
159
|
+
editedBody: resolution.editedBody,
|
|
160
|
+
ts: ts(),
|
|
161
|
+
});
|
|
162
|
+
if (resolution.action === "drop")
|
|
163
|
+
return;
|
|
164
|
+
if (resolution.action === "edit" && resolution.editedBody) {
|
|
165
|
+
finalBody = resolution.editedBody;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Append message to room stream
|
|
169
|
+
await this.sendMessage(participant.name, finalBody, parsed.to);
|
|
170
|
+
this._roundCount++;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Start watching the room stream for new messages and routing them.
|
|
174
|
+
*/
|
|
175
|
+
async start() {
|
|
176
|
+
const conn = getRoomStreamConnectionInfo(this.roomId, this.streamConfig);
|
|
177
|
+
const reader = new DurableStream({
|
|
178
|
+
url: conn.url,
|
|
179
|
+
headers: conn.headers,
|
|
180
|
+
contentType: "application/json",
|
|
181
|
+
});
|
|
182
|
+
const response = await reader.stream({
|
|
183
|
+
offset: "-1",
|
|
184
|
+
live: true,
|
|
185
|
+
});
|
|
186
|
+
this.cancelSubscription = response.subscribeJson((batch) => {
|
|
187
|
+
for (const item of batch.items) {
|
|
188
|
+
if (item.type === "agent_message") {
|
|
189
|
+
this.deliverMessage(item).catch((err) => {
|
|
190
|
+
console.error(`[room-router] delivery error:`, err);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
if (item.type === "room_closed") {
|
|
194
|
+
this._state = "closed";
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Close the room.
|
|
201
|
+
*/
|
|
202
|
+
close() {
|
|
203
|
+
this._state = "closed";
|
|
204
|
+
if (this.cancelSubscription) {
|
|
205
|
+
this.cancelSubscription();
|
|
206
|
+
this.cancelSubscription = null;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Deliver a message to recipient agent(s) via their bridges.
|
|
211
|
+
*/
|
|
212
|
+
async deliverMessage(msg) {
|
|
213
|
+
if (this._state === "closed")
|
|
214
|
+
return;
|
|
215
|
+
const deliverTo = [];
|
|
216
|
+
if (msg.to) {
|
|
217
|
+
// Direct message: find the specific recipient by name
|
|
218
|
+
const recipient = [...this._participants.values()].find((p) => p.name === msg.to);
|
|
219
|
+
if (recipient)
|
|
220
|
+
deliverTo.push(recipient);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// Broadcast: deliver to all except sender
|
|
224
|
+
for (const p of this._participants.values()) {
|
|
225
|
+
if (p.name !== msg.from)
|
|
226
|
+
deliverTo.push(p);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const prompt = `Message from ${msg.from}:\n\n${msg.body}`;
|
|
230
|
+
await Promise.all(deliverTo.map(async (p) => {
|
|
231
|
+
try {
|
|
232
|
+
// Emit the incoming message to the agent's session stream
|
|
233
|
+
// so it's visible in the session UI
|
|
234
|
+
await p.bridge.emit({
|
|
235
|
+
type: "user_prompt",
|
|
236
|
+
message: msg.body,
|
|
237
|
+
sender: msg.from,
|
|
238
|
+
ts: ts(),
|
|
239
|
+
});
|
|
240
|
+
await p.bridge.sendCommand({ command: "iterate", request: prompt });
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
console.error(`[room-router] failed to deliver to ${p.name}:`, err);
|
|
244
|
+
}
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Read the room stream history (non-live) for discovery context.
|
|
249
|
+
*/
|
|
250
|
+
async readStreamHistory() {
|
|
251
|
+
const roster = [];
|
|
252
|
+
const leftIds = new Set();
|
|
253
|
+
const messages = [];
|
|
254
|
+
try {
|
|
255
|
+
const conn = getRoomStreamConnectionInfo(this.roomId, this.streamConfig);
|
|
256
|
+
const reader = new DurableStream({
|
|
257
|
+
url: conn.url,
|
|
258
|
+
headers: conn.headers,
|
|
259
|
+
contentType: "application/json",
|
|
260
|
+
});
|
|
261
|
+
const response = await reader.stream({
|
|
262
|
+
offset: "-1",
|
|
263
|
+
live: false,
|
|
264
|
+
});
|
|
265
|
+
// Read all available messages from the stream
|
|
266
|
+
await new Promise((resolve) => {
|
|
267
|
+
const cancel = response.subscribeJson((batch) => {
|
|
268
|
+
for (const item of batch.items) {
|
|
269
|
+
if (item.type === "participant_joined" && item.participant) {
|
|
270
|
+
const p = item.participant;
|
|
271
|
+
if (!leftIds.has(p.id)) {
|
|
272
|
+
// Find role from our internal participants if available
|
|
273
|
+
const internal = this._participants.get(p.id);
|
|
274
|
+
roster.push({
|
|
275
|
+
name: p.displayName,
|
|
276
|
+
role: internal?.role,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (item.type === "participant_left" && item.participantId) {
|
|
281
|
+
leftIds.add(item.participantId);
|
|
282
|
+
}
|
|
283
|
+
if (item.type === "agent_message") {
|
|
284
|
+
messages.push({
|
|
285
|
+
from: item.from,
|
|
286
|
+
body: item.body,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// Non-live stream: once we get a batch, check if there are more
|
|
291
|
+
// For now, resolve after first batch since non-live streams
|
|
292
|
+
// deliver all available data
|
|
293
|
+
cancel();
|
|
294
|
+
resolve();
|
|
295
|
+
});
|
|
296
|
+
// If there's nothing in the stream, resolve after a short timeout
|
|
297
|
+
setTimeout(() => {
|
|
298
|
+
cancel();
|
|
299
|
+
resolve();
|
|
300
|
+
}, 1000);
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
catch (err) {
|
|
304
|
+
console.error(`[room-router] failed to read stream history:`, err);
|
|
305
|
+
}
|
|
306
|
+
// Only return the last 10 messages
|
|
307
|
+
const recentMessages = messages.slice(-10);
|
|
308
|
+
return { roster, recentMessages };
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Build the discovery prompt sent to an agent when it joins the room.
|
|
312
|
+
*/
|
|
313
|
+
buildDiscoveryPrompt(self, roster, recentMessages) {
|
|
314
|
+
const others = roster.filter((p) => p.name !== self.name);
|
|
315
|
+
const lines = [
|
|
316
|
+
`You have joined room "${this.roomName}".`,
|
|
317
|
+
`Your name in this room: ${self.name}`,
|
|
318
|
+
];
|
|
319
|
+
if (self.role) {
|
|
320
|
+
lines.push(`Your role: ${self.role}`);
|
|
321
|
+
lines.push(`Read .claude/skills/role/SKILL.md for your role-specific guidelines.`);
|
|
322
|
+
}
|
|
323
|
+
lines.push("");
|
|
324
|
+
if (others.length > 0) {
|
|
325
|
+
lines.push("Other participants:");
|
|
326
|
+
for (const p of others) {
|
|
327
|
+
lines.push(`- ${p.name}${p.role ? ` (${p.role})` : ""}`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
lines.push("No other participants yet.");
|
|
332
|
+
}
|
|
333
|
+
lines.push("");
|
|
334
|
+
if (recentMessages.length > 0) {
|
|
335
|
+
lines.push("Recent conversation:");
|
|
336
|
+
for (const m of recentMessages) {
|
|
337
|
+
lines.push(`[${m.from}]: ${m.body}`);
|
|
338
|
+
}
|
|
339
|
+
lines.push("");
|
|
340
|
+
}
|
|
341
|
+
lines.push("To send a message: @room <your message> (broadcast) or @<name> <message> (direct).", "Place your @room message at the END of your response, after completing any work.", "If you have nothing to say, finish without @room — your turn ends silently.", "To request human input: @room GATE: <question>", "", "IMPORTANT: You just joined this room — greet the other participants with a brief @room message introducing yourself.");
|
|
342
|
+
return lines.join("\n");
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=room-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-router.js","sourceRoot":"","sources":["../src/room-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/sandbox/docker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,iBAAiB,EACjB,SAAS,EAET,aAAa,EACb,eAAe,EACf,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/sandbox/docker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,iBAAiB,EACjB,SAAS,EAET,aAAa,EACb,eAAe,EACf,MAAM,YAAY,CAAA;AA4LnB,qBAAa,qBAAsB,YAAW,eAAe;IAC5D,QAAQ,CAAC,OAAO,EAAG,QAAQ,CAAS;IAEpC,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,aAAa,CAAyC;IAE9D,OAAO,CAAC,QAAQ;IAMV,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IAsD3E,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnD,gEAAgE;IAChE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMhD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,IAAI,IAAI,aAAa,EAAE;IAIvB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAOjC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqDhE,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkBzE,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBjD,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBhD,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBrD,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA8DxE,cAAc,CACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAChF,OAAO,CAAC,aAAa,CAAC;CA8BzB"}
|