agent-comms 8.14.2 → 8.15.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 +16 -0
- package/dist/core/comms-store.d.ts +2 -0
- package/dist/core/comms-store.d.ts.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/room-messaging.d.ts +1 -5
- package/dist/core/room-messaging.d.ts.map +1 -1
- package/dist/core/room-messaging.js.map +1 -1
- package/dist/test/mesh-store-durable-send.integration.test.d.ts +2 -0
- package/dist/test/mesh-store-durable-send.integration.test.d.ts.map +1 -0
- package/dist/test/mesh-store-durable-send.integration.test.js +56 -0
- package/dist/test/mesh-store-durable-send.integration.test.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -426,6 +426,22 @@ When an agent's status changes (active / idle / busy / offline), all rooms it be
|
|
|
426
426
|
- Graceful shutdown
|
|
427
427
|
- Stale agent cleanup (the elected coordinator's PID probe)
|
|
428
428
|
|
|
429
|
+
## Durable room sends from the library
|
|
430
|
+
|
|
431
|
+
Library callers can opt a room message into the sender's local room-notice log:
|
|
432
|
+
|
|
433
|
+
```ts
|
|
434
|
+
import type { SendRoomMessageOptions } from "agent-comms";
|
|
435
|
+
|
|
436
|
+
const options: SendRoomMessageOptions = { durable: true };
|
|
437
|
+
await store.sendRoomMessage(roomId, senderId, "Keep this message", options);
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
`MeshStore` records a signed room-notice in the sender's own log only when `durable` is `true`.
|
|
441
|
+
This only writes the notice locally: nothing currently announces or fetches these room-notice
|
|
442
|
+
entries. Automatic offline catch-up still needs a catch-up policy and bridge wiring.
|
|
443
|
+
`FileStore` ignores the option because it already persists every message.
|
|
444
|
+
|
|
429
445
|
## Delivery status and read receipts
|
|
430
446
|
|
|
431
447
|
Messages carry a `readBy` field tracking which agents have consumed them. Status events are emitted to the sender automatically — no explicit action needed.
|
|
@@ -11,6 +11,8 @@ import type { AgentIdentity, DeliveryEvent, DmMessage, MessageDelivery, Room, Ro
|
|
|
11
11
|
export interface SendRoomMessageOptions {
|
|
12
12
|
replyTo?: string | undefined;
|
|
13
13
|
streamingBehavior?: StreamingBehavior | undefined;
|
|
14
|
+
/** When true, `MeshStore` also records the message as a signed room-notice in the sender's own log for offline catch-up. `FileStore` ignores it, since it already persists every message. */
|
|
15
|
+
durable?: boolean | undefined;
|
|
14
16
|
}
|
|
15
17
|
/** What became of a room message for one specific member of that room. Delivery is per member because a room send fans out one directed request each, and a member that is unreachable right now is independent of every other. */
|
|
16
18
|
export interface MemberDelivery {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comms-store.d.ts","sourceRoot":"","sources":["../../src/core/comms-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,SAAS,EACT,eAAe,EACf,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"comms-store.d.ts","sourceRoot":"","sources":["../../src/core/comms-store.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Core protocol: types, store interface, tool handler.
|
|
5
5
|
* Bridges (pi extension, Claude Code channel) are in ../bridges/.
|
|
6
6
|
*/
|
|
7
|
-
export type { CommsStore } from "./comms-store.js";
|
|
7
|
+
export type { CommsStore, SendRoomMessageOptions } from "./comms-store.js";
|
|
8
8
|
export { FileStore, CommsError } from "./store.js";
|
|
9
9
|
export { MeshStore } from "./mesh-store.js";
|
|
10
10
|
export { CommsTool } from "./tool.js";
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EACL,6BAA6B,EAC7B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,cAAc,YAAY,CAAC;AAC3B,YAAY,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
|
|
@@ -18,10 +18,6 @@ export interface RoomMessagingDeps {
|
|
|
18
18
|
resolveRoomId: (roomIdOrName: string) => string;
|
|
19
19
|
resolveAgent: (id: string) => Promise<AgentIdentity | undefined>;
|
|
20
20
|
}
|
|
21
|
-
/** RoomMessaging's own richer sendRoomMessage options, extending the public CommsStore-facing SendRoomMessageOptions with durable -- see sendRoomMessage's own doc comment for what durable means. */
|
|
22
|
-
export interface RoomMessagingSendOptions extends SendRoomMessageOptions {
|
|
23
|
-
durable?: boolean;
|
|
24
|
-
}
|
|
25
21
|
export declare class RoomMessaging {
|
|
26
22
|
private readonly deps;
|
|
27
23
|
constructor(deps: RoomMessagingDeps);
|
|
@@ -32,7 +28,7 @@ export declare class RoomMessaging {
|
|
|
32
28
|
*
|
|
33
29
|
* Returns the message alongside one delivery state per remote member, so the caller can tell who actually received it from who it is merely queued for. A member that refuses the message outright raises: a refusal is the member's settled answer, not a state to report as pending, and a fan-out whose members cannot all be reported honestly is not a successful send.
|
|
34
30
|
*/
|
|
35
|
-
sendRoomMessage(roomIdOrName: string, from: string, content: string, options?:
|
|
31
|
+
sendRoomMessage(roomIdOrName: string, from: string, content: string, options?: SendRoomMessageOptions): Promise<SentRoomMessage>;
|
|
36
32
|
readRoomMessages(roomIdOrName: string, since?: string): Promise<RoomMessage[]>;
|
|
37
33
|
/**
|
|
38
34
|
* Sends a DM via the same wire-authenticated room.send fan-out sendRoomMessage uses (P3.5): a DM is just a dm-shaped room path with exactly one other member, so it rides the identical mechanism rather than a separate one. Self-DM is the one exception -- a purely local scratchpad note that never leaves the process, so it needs no token and no wire round trip at all, and is delivered the moment it is recorded.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-messaging.d.ts","sourceRoot":"","sources":["../../src/core/room-messaging.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EAET,IAAI,EACJ,WAAW,EACX,iBAAiB,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,MAAM,EACN,eAAe,EACf,sBAAsB,EACvB,MAAM,kBAAkB,CAAC;AAW1B,wuBAAwuB;AACxuB,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACrC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9B,eAAe,EAAE,MAAM,iBAAiB,CAAC;IACzC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;IAC5D,6PAA6P;IAC7P,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,+SAA+S;IAC/S,aAAa,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;CAClE;AAED,
|
|
1
|
+
{"version":3,"file":"room-messaging.d.ts","sourceRoot":"","sources":["../../src/core/room-messaging.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EAET,IAAI,EACJ,WAAW,EACX,iBAAiB,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,MAAM,EACN,eAAe,EACf,sBAAsB,EACvB,MAAM,kBAAkB,CAAC;AAW1B,wuBAAwuB;AACxuB,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACrC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9B,eAAe,EAAE,MAAM,iBAAiB,CAAC;IACzC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;IAC5D,6PAA6P;IAC7P,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,+SAA+S;IAC/S,aAAa,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;CAClE;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,iBAAiB;IAEpD;;;;;;OAMG;IACG,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,eAAe,CAAC;IA+ErB,gBAAgB,CACpB,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,EAAE,CAAC;IAQzB;;;;OAIG;IACG,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,OAAO,CAAC,MAAM,CAAC;IA6DlB,2QAA2Q;YAC7P,iBAAiB;CAgBhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-messaging.js","sourceRoot":"","sources":["../../src/core/room-messaging.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAoBpD,gPAAgP;AAChP,SAAS,mBAAmB,CAC1B,OAAmE;IAEnE,OAAO,OAAO,CAAC,IAAI,KAAK,WAAW;QACjC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;QACzB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACnD,CAAC;
|
|
1
|
+
{"version":3,"file":"room-messaging.js","sourceRoot":"","sources":["../../src/core/room-messaging.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mesh-store-durable-send.integration.test.d.ts","sourceRoot":"","sources":["../../src/test/mesh-store-durable-send.integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as os from "node:os";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { decode, cdeDecodeOptions } from "cbor2";
|
|
6
|
+
import { createNodeFsStorage } from "wire-mesh-core/adapters/node-fs-storage";
|
|
7
|
+
import { createSystemClock } from "wire-mesh-core/adapters/system-clock";
|
|
8
|
+
import { readEntries } from "wire-mesh-core/domain/data-sync";
|
|
9
|
+
import { bytesFromHex } from "wire-mesh-core/domain/device-id";
|
|
10
|
+
import { createRevocationView } from "wire-mesh-core/domain/revocation-view";
|
|
11
|
+
import { verifyRoomNotice } from "wire-mesh-core/domain/room";
|
|
12
|
+
import { createBridgeMesh, loadIdentityForFront, releaseIdentityLock, } from "../core/index.js";
|
|
13
|
+
import { oplogDirFor } from "../core/identity-store.js";
|
|
14
|
+
import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
15
|
+
describe("public room-send durability", () => {
|
|
16
|
+
it.each([undefined, false, true])("records a notice only when durable is true (received %j)", async (durable) => {
|
|
17
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "mesh-durable-"));
|
|
18
|
+
const slot = { harness: "durable-test", cwd: root, dataDir: root };
|
|
19
|
+
const mesh = await createBridgeMesh(slot, {
|
|
20
|
+
fetchLatestVersion: async () => undefined,
|
|
21
|
+
});
|
|
22
|
+
try {
|
|
23
|
+
const store = mesh.store;
|
|
24
|
+
const room = await store.createRoom({
|
|
25
|
+
name: "durable-room",
|
|
26
|
+
type: "public",
|
|
27
|
+
owner: mesh.store.peerId,
|
|
28
|
+
description: "",
|
|
29
|
+
});
|
|
30
|
+
const options = { durable };
|
|
31
|
+
const sent = await store.sendRoomMessage(room.id, mesh.store.peerId, "public durable message", options);
|
|
32
|
+
expect(sent.message.content).toBe("public durable message");
|
|
33
|
+
const entries = await readEntries(createNodeFsStorage({ dir: oplogDirFor(slot) }), Uint8Array.from(bytesFromHex(mesh.store.peerId)), 0);
|
|
34
|
+
expect(entries).toHaveLength(durable === true ? 1 : 0);
|
|
35
|
+
if (entries[0] !== undefined) {
|
|
36
|
+
const notice = decode(entries[0], cdeDecodeOptions);
|
|
37
|
+
const verdict = await verifyRoomNotice(notice, {
|
|
38
|
+
identity: await toIdentityPort(loadIdentityForFront(slot)),
|
|
39
|
+
clock: createSystemClock(),
|
|
40
|
+
revocation: createRevocationView(),
|
|
41
|
+
});
|
|
42
|
+
expect(verdict.ok).toBe(true);
|
|
43
|
+
if (!verdict.ok)
|
|
44
|
+
return;
|
|
45
|
+
expect(verdict.claims.room).toBe(room.id);
|
|
46
|
+
expect(new TextDecoder().decode(verdict.claims.content)).toBe(sent.message.content);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
await mesh.store.shutdown();
|
|
51
|
+
releaseIdentityLock(slot);
|
|
52
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=mesh-store-durable-send.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mesh-store-durable-send.integration.test.js","sourceRoot":"","sources":["../../src/test/mesh-store-durable-send.integration.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED