agent-comms 4.1.10 → 4.3.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +5 -1
- package/dist/bridges/cc-peer/approval-commands.d.ts +26 -0
- package/dist/bridges/cc-peer/approval-commands.d.ts.map +1 -0
- package/dist/bridges/cc-peer/approval-commands.js +56 -0
- package/dist/bridges/cc-peer/approval-commands.js.map +1 -0
- package/dist/bridges/cc-peer/bridge.d.ts +2 -0
- package/dist/bridges/cc-peer/bridge.d.ts.map +1 -1
- package/dist/bridges/cc-peer/bridge.js +16 -8
- package/dist/bridges/cc-peer/bridge.js.map +1 -1
- package/dist/bridges/cc-peer/default-front.d.ts +2 -0
- package/dist/bridges/cc-peer/default-front.d.ts.map +1 -1
- package/dist/bridges/cc-peer/default-front.js +1 -0
- package/dist/bridges/cc-peer/default-front.js.map +1 -1
- package/dist/bridges/cc-peer/front-relay.d.ts +2 -0
- package/dist/bridges/cc-peer/front-relay.d.ts.map +1 -1
- package/dist/bridges/cc-peer/front-relay.js +17 -9
- package/dist/bridges/cc-peer/front-relay.js.map +1 -1
- package/dist/bridges/cc-peer/front-runtime.d.ts +2 -0
- package/dist/bridges/cc-peer/front-runtime.d.ts.map +1 -1
- package/dist/bridges/cc-peer/front-runtime.js +2 -0
- package/dist/bridges/cc-peer/front-runtime.js.map +1 -1
- package/dist/bridges/cc-peer/run.d.ts.map +1 -1
- package/dist/bridges/cc-peer/run.js +5 -1
- package/dist/bridges/cc-peer/run.js.map +1 -1
- package/dist/bridges/user/web/dist/mesh-worker.js +1 -1
- package/dist/bridges/user/web/dist/sw.js +1 -1
- package/dist/core/bridge.d.ts +4 -0
- package/dist/core/bridge.d.ts.map +1 -1
- package/dist/core/bridge.js +19 -0
- package/dist/core/bridge.js.map +1 -1
- package/dist/core/dm-grant-actions.d.ts +20 -0
- package/dist/core/dm-grant-actions.d.ts.map +1 -0
- package/dist/core/dm-grant-actions.js +49 -0
- package/dist/core/dm-grant-actions.js.map +1 -0
- package/dist/core/identity-store.d.ts +16 -0
- package/dist/core/identity-store.d.ts.map +1 -1
- package/dist/core/identity-store.js +5 -3
- package/dist/core/identity-store.js.map +1 -1
- package/dist/core/token-text.d.ts +9 -0
- package/dist/core/token-text.d.ts.map +1 -0
- package/dist/core/token-text.js +24 -0
- package/dist/core/token-text.js.map +1 -0
- package/dist/core/tool.d.ts +7 -0
- package/dist/core/tool.d.ts.map +1 -1
- package/dist/core/tool.js +7 -0
- package/dist/core/tool.js.map +1 -1
- package/dist/core/types.d.ts +20 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +7 -0
- package/dist/core/types.js.map +1 -1
- package/dist/test/cc-peer-approval-commands.unit.test.d.ts +2 -0
- package/dist/test/cc-peer-approval-commands.unit.test.d.ts.map +1 -0
- package/dist/test/cc-peer-approval-commands.unit.test.js +110 -0
- package/dist/test/cc-peer-approval-commands.unit.test.js.map +1 -0
- package/dist/test/cc-peer-bridge.unit.test.js +107 -0
- package/dist/test/cc-peer-bridge.unit.test.js.map +1 -1
- package/dist/test/cc-peer-front-relay.unit.test.js +113 -0
- package/dist/test/cc-peer-front-relay.unit.test.js.map +1 -1
- package/dist/test/cc-peer-fronted-approval.integration.test.d.ts +5 -0
- package/dist/test/cc-peer-fronted-approval.integration.test.d.ts.map +1 -0
- package/dist/test/cc-peer-fronted-approval.integration.test.js +125 -0
- package/dist/test/cc-peer-fronted-approval.integration.test.js.map +1 -0
- package/dist/test/dm-grant-actions.unit.test.d.ts +2 -0
- package/dist/test/dm-grant-actions.unit.test.d.ts.map +1 -0
- package/dist/test/dm-grant-actions.unit.test.js +72 -0
- package/dist/test/dm-grant-actions.unit.test.js.map +1 -0
- package/dist/test/dm-grant-tool.integration.test.d.ts +5 -0
- package/dist/test/dm-grant-tool.integration.test.d.ts.map +1 -0
- package/dist/test/dm-grant-tool.integration.test.js +145 -0
- package/dist/test/dm-grant-tool.integration.test.js.map +1 -0
- package/dist/test/token-text.unit.test.d.ts +2 -0
- package/dist/test/token-text.unit.test.d.ts.map +1 -0
- package/dist/test/token-text.unit.test.js +46 -0
- package/dist/test/token-text.unit.test.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/ExaDev/agent-comms)
|
|
4
4
|
[](https://www.npmjs.com/package/agent-comms)
|
|
5
|
-
[](https://github.com/ExaDev/agent-comms/releases/tag/v4.3.0)
|
|
6
6
|
[](https://github.com/ExaDev/agent-comms/actions)
|
|
7
7
|
|
|
8
8
|
Cross-harness communication mesh for LLM agents: rooms, DMs, presence, and visibility over TCP with zero filesystem dependencies.
|
|
@@ -163,6 +163,8 @@ cc-peer allows one peer per process, so `bridge cc-peer` lends its own peer to t
|
|
|
163
163
|
|
|
164
164
|
Claude Code itself decides whether a message from another local process reaches a session. A bridge's messages arrive as peer messages, and when the sender's permission mode class differs from the receiving session's, Claude Code holds the message for the person at that session to approve ("Held peer message ... set \"crossSessionInbound\" to \"accept\""). Until they approve it or set `crossSessionInbound` to `accept` in their Claude Code settings, nothing from the mesh reaches that session.
|
|
165
165
|
|
|
166
|
+
A session reached only through cc-peer has no agent-comms tool, so it can't call `room_accept` or `room_reject`. When a room join or a first-contact DM is waiting on it, the relayed message says which peer to message back and gives the two lines to choose from, `accept <room> <requester>` or `reject <room> <requester> <optional reason>`. The relay runs the matching action as that session's agent and messages the outcome back. Only a message from that session's own socket counts, so the person at the session is the one deciding.
|
|
167
|
+
|
|
166
168
|
The fronted session can reply, not just receive. A message with a single originating mesh agent (a DM or a room message) materialises a lazy, per-correspondent reply alias via `cc-peer`'s own `AliasPool` (the `cc-peer/alias-pool` subpath) — a real, natively-discoverable local peer the session can address the way it addresses any other local `cc-peer` peer. Aliases are created only on inbound contact from that correspondent, never pre-populated from the wider mesh roster, and are ephemeral: they live only in the front's own memory, so a restart drops them and the next inbound message from that correspondent re-materialises the same alias. A reply landing on an alias the front no longer recognises (e.g. after a restart) is reported back into the session as a clear error rather than silently dropped.
|
|
167
169
|
|
|
168
170
|
## Adding a new harness
|
|
@@ -280,6 +282,8 @@ The web server (whichever port `tryStartWebServer` picked for that bridge) then
|
|
|
280
282
|
|
|
281
283
|
The first `dm` to an agent asks that agent for access before anything is sent: the call waits while the recipient's agent is told about the request (a `room_join_request` event, listed by `room_pending`) and answers it with `room_accept` or `room_reject`. Once accepted, later messages go straight through, and the recipient's own replies need no second decision. A refused request, or one nobody answers within the approval window, makes `dm` fail and nothing is recorded as sent.
|
|
282
284
|
|
|
285
|
+
To let a device DM you without deciding on the spot, admit it ahead of time. `dm_admit` with that device's id returns a grant and the exact call to make with it; the sender then calls `dm_use_grant` with your device id and the grant, and their first DM goes through with no decision at your end. `dm_revoke` withdraws it. A grant only works for the device it was minted for.
|
|
286
|
+
|
|
283
287
|
## Room types
|
|
284
288
|
|
|
285
289
|
| Type | Discovery | Join | Read history |
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lets a cc-peer session answer a room join or first-contact DM request. A session reached only through cc-peer (no agent-comms tool of its own) cannot call room_accept or room_reject, so the relayed request tells it exactly what to message back, and the relay runs the same tool action when that message arrives. The person at the session decides: only a message from that session's own socket ever reaches its relay.
|
|
3
|
+
*/
|
|
4
|
+
import type { CommsContext, CommsTool } from "../../core/tool.js";
|
|
5
|
+
import type { DeliveryEvent } from "../../core/types.js";
|
|
6
|
+
export type ApprovalCommand = {
|
|
7
|
+
kind: "accept";
|
|
8
|
+
room: string;
|
|
9
|
+
requesterId: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: "reject";
|
|
12
|
+
room: string;
|
|
13
|
+
requesterId: string;
|
|
14
|
+
reason?: string;
|
|
15
|
+
};
|
|
16
|
+
/** The command a message body is, or undefined when it is not a well-formed one. */
|
|
17
|
+
export declare function parseApprovalCommand(body: string): ApprovalCommand | undefined;
|
|
18
|
+
/** Renders a delivery event for a cc-peer session. A join request carries the instructions for answering it through `peerName`, the peer the session should message; every other event renders as the shared formatter does. */
|
|
19
|
+
export declare function formatCcPeerDelivery(event: DeliveryEvent, peerName: string): string;
|
|
20
|
+
export interface AnswerJoinRequestDeps {
|
|
21
|
+
tool: Pick<CommsTool, "handle">;
|
|
22
|
+
ctx: Readonly<CommsContext>;
|
|
23
|
+
}
|
|
24
|
+
/** Runs the room_accept or room_reject the command asks for as this session's own agent, and returns the tool's own text so the session learns what happened, including why a decision failed. */
|
|
25
|
+
export declare function answerJoinRequest(deps: Readonly<AnswerJoinRequestDeps>, command: Readonly<ApprovalCommand>): Promise<string>;
|
|
26
|
+
//# sourceMappingURL=approval-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-commands.d.ts","sourceRoot":"","sources":["../../../src/bridges/cc-peer/approval-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAWzD,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,oFAAoF;AACpF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GACX,eAAe,GAAG,SAAS,CAgB7B;AAED,gOAAgO;AAChO,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,MAAM,GACf,MAAM,CAQR;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,GAAG,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CAC7B;AAED,kMAAkM;AAClM,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACrC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,CAgBjB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lets a cc-peer session answer a room join or first-contact DM request. A session reached only through cc-peer (no agent-comms tool of its own) cannot call room_accept or room_reject, so the relayed request tells it exactly what to message back, and the relay runs the same tool action when that message arrives. The person at the session decides: only a message from that session's own socket ever reaches its relay.
|
|
3
|
+
*/
|
|
4
|
+
import { buildAction, formatDeliveryEvent } from "../../core/bridge.js";
|
|
5
|
+
/** A device-id is a 64-character lowercase hex SHA-256 digest. */
|
|
6
|
+
const DEVICE_ID_HEX = "[0-9a-f]{64}";
|
|
7
|
+
/** `accept <room> <requester>` or `reject <room> <requester> [reason]`, the whole message and nothing else, so an ordinary message that merely mentions the word is never mistaken for a decision. */
|
|
8
|
+
const APPROVAL_COMMAND = new RegExp(`^\\s*(accept|reject)\\s+(\\S+)\\s+(${DEVICE_ID_HEX})(?:\\s+(\\S[\\s\\S]*?))?\\s*$`, "i");
|
|
9
|
+
/** The command a message body is, or undefined when it is not a well-formed one. */
|
|
10
|
+
export function parseApprovalCommand(body) {
|
|
11
|
+
const match = APPROVAL_COMMAND.exec(body);
|
|
12
|
+
if (match === null)
|
|
13
|
+
return undefined;
|
|
14
|
+
const [, verb, room, requesterId, reason] = match;
|
|
15
|
+
if (verb === undefined || room === undefined || requesterId === undefined) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
if (verb.toLowerCase() === "accept") {
|
|
19
|
+
return { kind: "accept", room, requesterId: requesterId.toLowerCase() };
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
kind: "reject",
|
|
23
|
+
room,
|
|
24
|
+
requesterId: requesterId.toLowerCase(),
|
|
25
|
+
...(reason !== undefined ? { reason } : {}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Renders a delivery event for a cc-peer session. A join request carries the instructions for answering it through `peerName`, the peer the session should message; every other event renders as the shared formatter does. */
|
|
29
|
+
export function formatCcPeerDelivery(event, peerName) {
|
|
30
|
+
if (event.type !== "room_join_request")
|
|
31
|
+
return formatDeliveryEvent(event);
|
|
32
|
+
return [
|
|
33
|
+
`${event.requesterId} is asking to join ${event.room}.`,
|
|
34
|
+
`To answer, send the peer "${peerName}" one of these messages:`,
|
|
35
|
+
`accept ${event.room} ${event.requesterId}`,
|
|
36
|
+
`reject ${event.room} ${event.requesterId} <optional reason>`,
|
|
37
|
+
].join("\n");
|
|
38
|
+
}
|
|
39
|
+
/** Runs the room_accept or room_reject the command asks for as this session's own agent, and returns the tool's own text so the session learns what happened, including why a decision failed. */
|
|
40
|
+
export async function answerJoinRequest(deps, command) {
|
|
41
|
+
const action = command.kind === "accept"
|
|
42
|
+
? buildAction({
|
|
43
|
+
action: "room_accept",
|
|
44
|
+
room: command.room,
|
|
45
|
+
requesterId: command.requesterId,
|
|
46
|
+
})
|
|
47
|
+
: buildAction({
|
|
48
|
+
action: "room_reject",
|
|
49
|
+
room: command.room,
|
|
50
|
+
requesterId: command.requesterId,
|
|
51
|
+
...(command.reason !== undefined ? { reason: command.reason } : {}),
|
|
52
|
+
});
|
|
53
|
+
const result = await deps.tool.handle(deps.ctx, action);
|
|
54
|
+
return result.content;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=approval-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-commands.js","sourceRoot":"","sources":["../../../src/bridges/cc-peer/approval-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAIxE,kEAAkE;AAClE,MAAM,aAAa,GAAG,cAAc,CAAC;AAErC,sMAAsM;AACtM,MAAM,gBAAgB,GAAG,IAAI,MAAM,CACjC,sCAAsC,aAAa,gCAAgC,EACnF,GAAG,CACJ,CAAC;AAMF,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAClC,IAAY;IAEZ,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAClD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC1E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;IAC1E,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,IAAI;QACJ,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE;QACtC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,gOAAgO;AAChO,MAAM,UAAU,oBAAoB,CAClC,KAAoB,EACpB,QAAgB;IAEhB,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB;QAAE,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC1E,OAAO;QACL,GAAG,KAAK,CAAC,WAAW,sBAAsB,KAAK,CAAC,IAAI,GAAG;QACvD,6BAA6B,QAAQ,0BAA0B;QAC/D,UAAU,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE;QAC3C,UAAU,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,oBAAoB;KAC9D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAOD,kMAAkM;AAClM,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAqC,EACrC,OAAkC;IAElC,MAAM,MAAM,GACV,OAAO,CAAC,IAAI,KAAK,QAAQ;QACvB,CAAC,CAAC,WAAW,CAAC;YACV,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;QACJ,CAAC,CAAC,WAAW,CAAC;YACV,MAAM,EAAE,aAAa;YACrB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC,CAAC;IACT,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
|
|
@@ -52,6 +52,8 @@ export interface CcPeerBridgeDeps {
|
|
|
52
52
|
roomId: string;
|
|
53
53
|
target: Readonly<CcPeerRef>;
|
|
54
54
|
cwd: string;
|
|
55
|
+
/** The name this bridge's peer is registered under, which the target is told to message to answer a join request. */
|
|
56
|
+
peerName: string;
|
|
55
57
|
/** Whether an inbound message was sent by the target session. Only those are posted into the project room: the peer may be shared with the default front, whose fronted sessions message it as well, and those belong to the front's own relay. */
|
|
56
58
|
isFromTarget: (message: Readonly<CcPeerInboundMessage>) => Promise<boolean>;
|
|
57
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../src/bridges/cc-peer/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../src/bridges/cc-peer/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAOpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,gOAAgO;AAChO,MAAM,MAAM,SAAS,GACnB;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,oIAAoI;AACpI,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oIAAoI;AACpI,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,CACF,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,KAAK,IAAI,KAClD,IAAI,CAAC;IACV,IAAI,EAAE,CACJ,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC3B,IAAI,EAAE,MAAM,KACT,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjC;AAED,iNAAiN;AACjN,MAAM,WAAW,iBAAiB;IAChC,UAAU,EACN,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GACjE,SAAS,CAAC;IACd,8IAA8I;IAC9I,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC/C;AAED,uFAAuF;AACvF,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,2IAA2I;AAC3I,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC3B,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GACjC,OAAO,CAIT;AAED,mTAAmT;AACnT,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC3B,UAAU,EAAE,MAAM,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,GACtD,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAU/D;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,qHAAqH;IACrH,QAAQ,EAAE,MAAM,CAAC;IACjB,mPAAmP;IACnP,YAAY,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7E;AAED,oSAAoS;AACpS,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAwCvE"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* The wiring itself (wireCcPeerBridge) is dependency-injected and deliberately separate from the real CcPeer/MeshStore construction in run.ts, so it can be tested against a fake CcPeer without a real local Claude Code session.
|
|
7
7
|
*/
|
|
8
8
|
import { buildAction } from "../../core/bridge.js";
|
|
9
|
-
import {
|
|
9
|
+
import { answerJoinRequest, formatCcPeerDelivery, parseApprovalCommand, } from "./approval-commands.js";
|
|
10
10
|
/** Whether a roster entry is the session a target ref addresses. An address target names the session's own `uds:<socket path>` address. */
|
|
11
11
|
export function targetMatchesEntry(target, entry) {
|
|
12
12
|
if ("pid" in target)
|
|
@@ -33,24 +33,32 @@ export function wireCcPeerBridge(deps) {
|
|
|
33
33
|
void (async () => {
|
|
34
34
|
if (!(await deps.isFromTarget(m)))
|
|
35
35
|
return;
|
|
36
|
+
const ctx = {
|
|
37
|
+
agentId: deps.agentId,
|
|
38
|
+
harness: "cc-peer",
|
|
39
|
+
cwd: deps.cwd,
|
|
40
|
+
pid: process.pid,
|
|
41
|
+
};
|
|
42
|
+
// A well-formed accept or reject is the target's decision on a waiting join request, not something to post into the project room.
|
|
43
|
+
const decision = parseApprovalCommand(m.body);
|
|
44
|
+
if (decision !== undefined) {
|
|
45
|
+
const text = await answerJoinRequest({ tool: deps.tool, ctx }, decision);
|
|
46
|
+
await deps.peer.send(deps.target, text);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
36
49
|
const sender = m.fromName ?? m.from ?? "unknown";
|
|
37
50
|
const action = buildAction({
|
|
38
51
|
action: "send",
|
|
39
52
|
room: deps.roomId,
|
|
40
53
|
content: `${sender}: ${m.body}`,
|
|
41
54
|
});
|
|
42
|
-
await deps.tool.handle(
|
|
43
|
-
agentId: deps.agentId,
|
|
44
|
-
harness: "cc-peer",
|
|
45
|
-
cwd: deps.cwd,
|
|
46
|
-
pid: process.pid,
|
|
47
|
-
}, action);
|
|
55
|
+
await deps.tool.handle(ctx, action);
|
|
48
56
|
})().catch((error) => {
|
|
49
57
|
deps.store.onError?.(error instanceof Error ? error : new Error(String(error)));
|
|
50
58
|
});
|
|
51
59
|
});
|
|
52
60
|
deps.store.onDelivery = (_targetId, event) => {
|
|
53
|
-
void deps.peer.send(deps.target,
|
|
61
|
+
void deps.peer.send(deps.target, formatCcPeerDelivery(event, deps.peerName));
|
|
54
62
|
};
|
|
55
63
|
}
|
|
56
64
|
//# sourceMappingURL=bridge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/bridges/cc-peer/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/bridges/cc-peer/bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export interface WireDefaultCcPeerFrontOptions {
|
|
|
12
12
|
hubUrl?: string | undefined;
|
|
13
13
|
/** The cc-peer peer this process already owns, lent to the front instead of it creating a second one -- see CreateDefaultCcPeerFrontOptions.peer. */
|
|
14
14
|
peer?: CreateDefaultCcPeerFrontOptions["peer"];
|
|
15
|
+
/** The name the lent peer is registered under -- see CreateDefaultCcPeerFrontOptions.peerName. */
|
|
16
|
+
peerName?: CreateDefaultCcPeerFrontOptions["peerName"];
|
|
15
17
|
/** Sessions this process already relays by other means -- see CreateDefaultCcPeerFrontOptions.excludeSession. */
|
|
16
18
|
excludeSession?: CreateDefaultCcPeerFrontOptions["excludeSession"];
|
|
17
19
|
/** Builds the front itself -- defaults to the real createDefaultCcPeerFront. Overridable so this function's own start/stop wiring against store.onCoordinatorRoleChanged is testable without a real CcPeer/local Claude Code session. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-front.d.ts","sourceRoot":"","sources":["../../../src/bridges/cc-peer/default-front.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,WAAW,6BAA6B;IAC5C,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,qJAAqJ;IACrJ,IAAI,CAAC,EAAE,+BAA+B,CAAC,MAAM,CAAC,CAAC;IAC/C,iHAAiH;IACjH,cAAc,CAAC,EAAE,+BAA+B,CAAC,gBAAgB,CAAC,CAAC;IACnE,yOAAyO;IACzO,WAAW,CAAC,EACR,CAAC,CACC,OAAO,EAAE,QAAQ,CAAC,+BAA+B,CAAC,KAC/C,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,GAC/D,SAAS,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAC3C,OAAO,GAAE,QAAQ,CAAC,6BAA6B,CAAM,GACpD,CAAC,aAAa,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"default-front.d.ts","sourceRoot":"","sources":["../../../src/bridges/cc-peer/default-front.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,WAAW,6BAA6B;IAC5C,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,qJAAqJ;IACrJ,IAAI,CAAC,EAAE,+BAA+B,CAAC,MAAM,CAAC,CAAC;IAC/C,kGAAkG;IAClG,QAAQ,CAAC,EAAE,+BAA+B,CAAC,UAAU,CAAC,CAAC;IACvD,iHAAiH;IACjH,cAAc,CAAC,EAAE,+BAA+B,CAAC,gBAAgB,CAAC,CAAC;IACnE,yOAAyO;IACzO,WAAW,CAAC,EACR,CAAC,CACC,OAAO,EAAE,QAAQ,CAAC,+BAA+B,CAAC,KAC/C,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,GAC/D,SAAS,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EAC3C,OAAO,GAAE,QAAQ,CAAC,6BAA6B,CAAM,GACpD,CAAC,aAAa,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAoB3C"}
|
|
@@ -13,6 +13,7 @@ export function wireDefaultCcPeerFront(store, options = {}) {
|
|
|
13
13
|
coordinatorPort: options.coordinatorPort,
|
|
14
14
|
hubUrl: options.hubUrl,
|
|
15
15
|
peer: options.peer,
|
|
16
|
+
peerName: options.peerName,
|
|
16
17
|
excludeSession: options.excludeSession,
|
|
17
18
|
onError: (error) => {
|
|
18
19
|
store.onError?.(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-front.js","sourceRoot":"","sources":["../../../src/bridges/cc-peer/default-front.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,wBAAwB,GAEzB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"default-front.js","sourceRoot":"","sources":["../../../src/bridges/cc-peer/default-front.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,wBAAwB,GAEzB,MAAM,oBAAoB,CAAC;AAqB5B;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAA2C,EAC3C,UAAmD,EAAE;IAErD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,wBAAwB,CAAC;IACpE,MAAM,KAAK,GAAG,WAAW,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,KAAK,EAAE,aAAsB,EAAE,EAAE;QACtC,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -35,6 +35,8 @@ export interface FrontedRelayRecord extends FrontedSessionRecord {
|
|
|
35
35
|
}
|
|
36
36
|
export interface BuildFrontedSessionRecordDeps {
|
|
37
37
|
entry: Readonly<CcPeerRosterEntryLike>;
|
|
38
|
+
/** The name the shared peer is registered under, which a session is told to message to answer a join request. */
|
|
39
|
+
peerName: string;
|
|
38
40
|
agentId: string;
|
|
39
41
|
roomId: string;
|
|
40
42
|
store: FrontRelayStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"front-relay.d.ts","sourceRoot":"","sources":["../../../src/bridges/cc-peer/front-relay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"front-relay.d.ts","sourceRoot":"","sources":["../../../src/bridges/cc-peer/front-relay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAwB,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnE,gMAAgM;AAChM,MAAM,WAAW,eAAe;IAC9B,UAAU,EACN,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GACjE,SAAS,CAAC;IACd,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,mQAAmQ;AACnQ,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CACJ,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC3B,IAAI,EAAE,MAAM,KACT,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjC;AAED,iWAAiW;AACjW,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,wKAAwK;AACxK,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACvC,iHAAiH;IACjH,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,eAAe,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,cAAc,EAAE,wBAAwB,CAAC;CAC1C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,QAAQ,CAAC,6BAA6B,CAAC,GAC5C,kBAAkB,CAyFpB;AAED,0UAA0U;AAC1U,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,GAC9D,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -3,15 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Reuses CcPeerRef/CcPeerInboundMessage from bridge.ts rather than redeclaring them -- the wire shape a shared front-wide peer speaks is identical to the one-shot bridge command's own peer, just addressed by pid instead of a fixed target.
|
|
5
5
|
*/
|
|
6
|
-
import { buildAction
|
|
6
|
+
import { buildAction } from "../../core/bridge.js";
|
|
7
|
+
import { answerJoinRequest, formatCcPeerDelivery, parseApprovalCommand, } from "./approval-commands.js";
|
|
7
8
|
import { correspondentForEvent } from "./reply-aliases.js";
|
|
8
9
|
/**
|
|
9
10
|
* Wires both relay directions for one fronted session and returns the record CcPeerFront tracks it under. Mesh-to-session: store.onDelivery sends the formatted event to this session's own pid via the shared peer -- for an event with a single originating correspondent (a dm or room_message, per correspondentForEvent), it first materialises a reply alias for that correspondent and mentions it in the delivered body, so the session can address a reply to that specific correspondent the way it addresses any other local peer (agent-comms#158). Session-to-mesh: the returned handleInbound (called by the front's shared "message" listener once it's matched this record by socket path) posts the message into this session's own project room, exactly as wireCcPeerBridge's own peer.on("message") handler does for the one-shot bridge command; handleAliasReply (called once CcPeerFront has resolved an inbound alias message to its correspondent) instead sends a mesh DM to that correspondent, as this session's own agentId; notifyStaleAlias delivers a clear error back into the session for a reply on an alias the directory no longer recognises.
|
|
10
11
|
*/
|
|
11
12
|
export function buildFrontedSessionRecord(deps) {
|
|
12
|
-
const { entry, agentId, roomId, store, tool, peer, aliasPool, aliasDirectory, } = deps;
|
|
13
|
+
const { entry, peerName, agentId, roomId, store, tool, peer, aliasPool, aliasDirectory, } = deps;
|
|
13
14
|
store.onDelivery = async (_targetId, event) => {
|
|
14
|
-
const body =
|
|
15
|
+
const body = formatCcPeerDelivery(event, peerName);
|
|
15
16
|
const correspondentId = correspondentForEvent(event);
|
|
16
17
|
if (correspondentId === undefined) {
|
|
17
18
|
await peer.send({ pid: entry.pid }, body);
|
|
@@ -35,18 +36,25 @@ export function buildFrontedSessionRecord(deps) {
|
|
|
35
36
|
roomId,
|
|
36
37
|
store,
|
|
37
38
|
handleInbound: (message) => {
|
|
39
|
+
const ctx = {
|
|
40
|
+
agentId,
|
|
41
|
+
harness: "claude-code",
|
|
42
|
+
cwd: entry.cwd,
|
|
43
|
+
pid: process.pid,
|
|
44
|
+
};
|
|
45
|
+
// A well-formed accept or reject is the session's decision on a waiting join request, not something to post into the project room.
|
|
46
|
+
const decision = parseApprovalCommand(message.body);
|
|
47
|
+
if (decision !== undefined) {
|
|
48
|
+
void answerJoinRequest({ tool, ctx }, decision).then(async (text) => peer.send({ pid: entry.pid }, text));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
38
51
|
const sender = message.fromName ?? message.from ?? "unknown";
|
|
39
52
|
const action = buildAction({
|
|
40
53
|
action: "send",
|
|
41
54
|
room: roomId,
|
|
42
55
|
content: `${sender}: ${message.body}`,
|
|
43
56
|
});
|
|
44
|
-
void tool.handle(
|
|
45
|
-
agentId,
|
|
46
|
-
harness: "claude-code",
|
|
47
|
-
cwd: entry.cwd,
|
|
48
|
-
pid: process.pid,
|
|
49
|
-
}, action);
|
|
57
|
+
void tool.handle(ctx, action);
|
|
50
58
|
},
|
|
51
59
|
handleAliasReply: (correspondentId, message) => {
|
|
52
60
|
const action = buildAction({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"front-relay.js","sourceRoot":"","sources":["../../../src/bridges/cc-peer/front-relay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"front-relay.js","sourceRoot":"","sources":["../../../src/bridges/cc-peer/front-relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,8 @@ export interface CreateDefaultCcPeerFrontOptions {
|
|
|
20
20
|
onError?: ((error: Error) => void) | undefined;
|
|
21
21
|
/** The cc-peer peer this process already owns, when it has one. cc-peer allows one peer per process, so a process that runs its own (the one-shot `bridge cc-peer` command) must lend it here rather than let the front try to create a second. The front only borrows it: it never stops it, and registers its inbound listener on it once. Without this the front creates and owns its own peer. */
|
|
22
22
|
peer?: FrontCcPeer | undefined;
|
|
23
|
+
/** The name the shared peer is registered under, which fronted sessions are told to message to answer a join request. Defaults to the front's own peer name; a host process that lends its own peer names it here. */
|
|
24
|
+
peerName?: string | undefined;
|
|
23
25
|
/** Sessions this process already relays by other means, which the front must therefore leave alone. */
|
|
24
26
|
excludeSession?: ((entry: Readonly<CcPeerRosterEntryLike>) => boolean) | undefined;
|
|
25
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"front-runtime.d.ts","sourceRoot":"","sources":["../../../src/bridges/cc-peer/front-runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAO1B,gKAAgK;AAChK,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAAC;IACxD,EAAE,EAAE,CACF,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,KAAK,IAAI,KACxD,OAAO,CAAC;IACb,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C,sYAAsY;IACtY,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,uGAAuG;IACvG,cAAc,CAAC,EACb,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,qBAAqB,CAAC,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CACrE;AAOD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,QAAQ,CAAC,+BAA+B,CAAM,GACtD,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"front-runtime.d.ts","sourceRoot":"","sources":["../../../src/bridges/cc-peer/front-runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAO1B,gKAAgK;AAChK,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC,CAAC;IACxD,EAAE,EAAE,CACF,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,KAAK,IAAI,KACxD,OAAO,CAAC;IACb,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/C,sYAAsY;IACtY,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,sNAAsN;IACtN,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,uGAAuG;IACvG,cAAc,CAAC,EACb,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,qBAAqB,CAAC,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CACrE;AAOD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,QAAQ,CAAC,+BAA+B,CAAM,GACtD,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,CA8FzD"}
|
|
@@ -23,6 +23,7 @@ function defaultSessionName(entry) {
|
|
|
23
23
|
*/
|
|
24
24
|
export function createDefaultCcPeerFront(options = {}) {
|
|
25
25
|
const borrowedPeer = options.peer;
|
|
26
|
+
const peerName = options.peerName ?? FRONT_PEER_NAME;
|
|
26
27
|
let aliasPool;
|
|
27
28
|
const aliasDirectory = new ReplyAliasDirectory();
|
|
28
29
|
const front = new CcPeerFront({
|
|
@@ -96,6 +97,7 @@ export function createDefaultCcPeerFront(options = {}) {
|
|
|
96
97
|
const roomId = await ensureProjectRoom(store, reg.agentId, entry.cwd);
|
|
97
98
|
return buildFrontedSessionRecord({
|
|
98
99
|
entry,
|
|
100
|
+
peerName,
|
|
99
101
|
agentId: reg.agentId,
|
|
100
102
|
roomId,
|
|
101
103
|
store,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"front-runtime.js","sourceRoot":"","sources":["../../../src/bridges/cc-peer/front-runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EACL,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,cAAc,GACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GAGrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,kPAAkP;AAClP,MAAM,eAAe,GAAG,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"front-runtime.js","sourceRoot":"","sources":["../../../src/bridges/cc-peer/front-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/bridges/cc-peer/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/bridges/cc-peer/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4CH,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAmDzC"}
|
|
@@ -13,6 +13,8 @@ import { wireDefaultCcPeerFront } from "./default-front.js";
|
|
|
13
13
|
const PID_FLAG_PREFIX = "--pid=";
|
|
14
14
|
/** argv layout for `node cli.js bridge cc-peer <target-arg>`: index 0/1 are the node binary and script path, 2 is "bridge", 3 is the bridge id ("cc-peer") itself -- this bridge's own args start one past that. */
|
|
15
15
|
const BRIDGE_ARGS_START_INDEX = 4;
|
|
16
|
+
/** The name this command registers its one cc-peer peer under, which the target session is told to message to answer a join request. */
|
|
17
|
+
const BRIDGE_PEER_NAME = "agent-comms-bridge";
|
|
16
18
|
function parseTarget(argv) {
|
|
17
19
|
const arg = argv[0];
|
|
18
20
|
if (arg === undefined || arg === "") {
|
|
@@ -33,12 +35,13 @@ export async function run() {
|
|
|
33
35
|
const target = parseTarget(process.argv.slice(BRIDGE_ARGS_START_INDEX));
|
|
34
36
|
const identitySlot = { harness: "cc-peer", cwd: process.cwd() };
|
|
35
37
|
// cc-peer allows one peer per process, so this is the only one: the default front borrows it below rather than creating its own, and the front leaves this bridge's own target alone since the relay below already covers it.
|
|
36
|
-
const peer = await CcPeer.create({ name:
|
|
38
|
+
const peer = await CcPeer.create({ name: BRIDGE_PEER_NAME });
|
|
37
39
|
const { store, tool } = await createBridgeMesh(identitySlot);
|
|
38
40
|
store.onError = createMeshErrorReporter();
|
|
39
41
|
store.getCcPeerVersion = () => CC_PEER_VERSION;
|
|
40
42
|
store.onCoordinatorRoleChanged = wireDefaultCcPeerFront(store, {
|
|
41
43
|
peer,
|
|
44
|
+
peerName: BRIDGE_PEER_NAME,
|
|
42
45
|
excludeSession: (entry) => targetMatchesEntry(target, entry),
|
|
43
46
|
});
|
|
44
47
|
const reg = await ensureRegistered({
|
|
@@ -56,6 +59,7 @@ export async function run() {
|
|
|
56
59
|
roomId,
|
|
57
60
|
target,
|
|
58
61
|
cwd: process.cwd(),
|
|
62
|
+
peerName: BRIDGE_PEER_NAME,
|
|
59
63
|
isFromTarget: createTargetSenderMatcher(target, async () => peer.roster()),
|
|
60
64
|
});
|
|
61
65
|
await store.init();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/bridges/cc-peer/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,GAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,eAAe,GAAG,QAAQ,CAAC;AACjC,oNAAoN;AACpN,MAAM,uBAAuB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/bridges/cc-peer/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,GAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,eAAe,GAAG,QAAQ,CAAC;AACjC,oNAAoN;AACpN,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,wIAAwI;AACxI,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAE9C,SAAS,WAAW,CAAC,IAAuB;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CACX,+DAA+D,CAChE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG;IACvB,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAExE,MAAM,YAAY,GAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;IAC9E,8NAA8N;IAC9N,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC7D,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC7D,KAAK,CAAC,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,KAAK,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC;IAC/C,KAAK,CAAC,wBAAwB,GAAG,sBAAsB,CAAC,KAAK,EAAE;QAC7D,IAAI;QACJ,QAAQ,EAAE,gBAAgB;QAC1B,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC;KAC7D,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC;QACjC,KAAK;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,gBAAgB;KAC9B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE1E,gBAAgB,CAAC;QACf,KAAK;QACL,IAAI;QACJ,IAAI;QACJ,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM;QACN,MAAM;QACN,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,QAAQ,EAAE,gBAAgB;QAC1B,YAAY,EAAE,yBAAyB,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;KAC3E,CAAC,CAAC;IAEH,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAEnB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,KAAK,QAAQ,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,KAAK,QAAQ,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,QAAQ;QACrB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAClC,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|