agent-inbox 0.1.6 → 0.1.7
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.md +4 -3
- package/README.md +4 -4
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/jsonrpc/mail-server.d.ts.map +1 -1
- package/dist/jsonrpc/mail-server.js +7 -0
- package/dist/jsonrpc/mail-server.js.map +1 -1
- package/dist/push/notifier.d.ts +16 -8
- package/dist/push/notifier.d.ts.map +1 -1
- package/dist/push/notifier.js +41 -1
- package/dist/push/notifier.js.map +1 -1
- package/dist/registry/warm-registry.d.ts +10 -0
- package/dist/registry/warm-registry.d.ts.map +1 -1
- package/dist/registry/warm-registry.js +41 -1
- package/dist/registry/warm-registry.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +9 -4
- package/src/jsonrpc/mail-server.ts +7 -0
- package/src/push/notifier.ts +52 -11
- package/src/registry/warm-registry.ts +46 -1
- package/src/types.ts +1 -1
- package/test/mail-server.test.ts +16 -0
- package/test/wake.test.ts +330 -0
package/CLAUDE.md
CHANGED
|
@@ -13,7 +13,7 @@ npm test # Run all tests (vitest)
|
|
|
13
13
|
npm run test:watch # Watch mode
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
All tests use vitest. Run the full suite before committing — there are
|
|
16
|
+
All tests use vitest. Run the full suite before committing — there are 256 tests across 18 files. Tests run fast (<2s total).
|
|
17
17
|
|
|
18
18
|
## Project layout
|
|
19
19
|
|
|
@@ -37,7 +37,7 @@ src/
|
|
|
37
37
|
map/map-client.ts MAP SDK wrapper (dynamic import, optional peer dependency)
|
|
38
38
|
mcp/mcp-server.ts MCP tool server (send_message, check_inbox, read_thread, list_agents)
|
|
39
39
|
jsonrpc/mail-server.ts MAP JSON-RPC mail methods
|
|
40
|
-
push/notifier.ts
|
|
40
|
+
push/notifier.ts Inbox file writes + inbox.message event emission
|
|
41
41
|
|
|
42
42
|
test/
|
|
43
43
|
federation/ Federation tests (connection-manager, routing, queue, address, trust, integration, sdk-integration)
|
|
@@ -75,7 +75,8 @@ The `@multi-agent-protocol/sdk` is a peer dependency loaded dynamically in `src/
|
|
|
75
75
|
### Event-driven internals
|
|
76
76
|
|
|
77
77
|
Components communicate via `EventEmitter`. Key events:
|
|
78
|
-
- `message.created` — emitted by router, consumed by traceability
|
|
78
|
+
- `message.created` — emitted by router, consumed by traceability and notifier
|
|
79
|
+
- `inbox.message` — emitted per-recipient by notifier `{ agentId, recipientKind, message }`. Clients subscribe to implement delivery strategy.
|
|
79
80
|
- `federation.route` — emitted when no transport, for testing
|
|
80
81
|
- `federation.message.received` — incoming federation message
|
|
81
82
|
- `federation.broadcast` — broadcast strategy fired
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ Built to work with [claude-code-swarm](https://github.com/alexngai/claude-code-s
|
|
|
10
10
|
- **Threading** — Messages can be grouped by `thread_tag` and linked via `in_reply_to` for conversation threading.
|
|
11
11
|
- **Traceability** — Auto-creates conversations, turns, and threads from messaging events following MAP's mail conventions.
|
|
12
12
|
- **Federation** — Route messages across independent systems via MAP federation. Supports configurable routing strategies (table, broadcast, hierarchical).
|
|
13
|
-
- **Multiple interfaces** — IPC (UNIX socket), MCP tools (stdio), MAP JSON-RPC, and push
|
|
13
|
+
- **Multiple interfaces** — IPC (UNIX socket), MCP tools (stdio), MAP JSON-RPC, and event-based push via `inbox.message` events.
|
|
14
14
|
|
|
15
15
|
## Architecture
|
|
16
16
|
|
|
@@ -152,7 +152,7 @@ src/
|
|
|
152
152
|
jsonrpc/
|
|
153
153
|
mail-server.ts MAP JSON-RPC mail methods
|
|
154
154
|
push/
|
|
155
|
-
notifier.ts
|
|
155
|
+
notifier.ts Inbox file writes + inbox.message event emission
|
|
156
156
|
```
|
|
157
157
|
|
|
158
158
|
## Testing
|
|
@@ -162,7 +162,7 @@ npm test # Run all tests
|
|
|
162
162
|
npm run test:watch # Watch mode
|
|
163
163
|
```
|
|
164
164
|
|
|
165
|
-
|
|
165
|
+
256 tests across 18 test files covering:
|
|
166
166
|
|
|
167
167
|
- Storage (in-memory + SQLite)
|
|
168
168
|
- Message routing and content normalization
|
|
@@ -173,7 +173,7 @@ npm run test:watch # Watch mode
|
|
|
173
173
|
- SDK integration (two-system tests with in-process mock MAP server)
|
|
174
174
|
- MAP JSON-RPC mail methods
|
|
175
175
|
- Warm agent registry lifecycle
|
|
176
|
-
- Push
|
|
176
|
+
- Push model (inbox.message events + inbox file writes)
|
|
177
177
|
|
|
178
178
|
## Development
|
|
179
179
|
|
package/dist/index.d.ts
CHANGED
|
@@ -17,7 +17,8 @@ export { IpcServer } from "./ipc/ipc-server.js";
|
|
|
17
17
|
export { MapClient } from "./map/map-client.js";
|
|
18
18
|
export { InboxMcpServer } from "./mcp/mcp-server.js";
|
|
19
19
|
export { MailJsonRpcServer } from "./jsonrpc/mail-server.js";
|
|
20
|
-
export { PushNotifier, formatInboxMarkdown } from "./push/notifier.js";
|
|
20
|
+
export { PushNotifier, formatInboxMarkdown, parseCommand } from "./push/notifier.js";
|
|
21
|
+
export type { InboxMessageEvent, NotifierConfig, InboxFileEntry } from "./push/notifier.js";
|
|
21
22
|
export { ConnectionManager } from "./federation/connection-manager.js";
|
|
22
23
|
export type { DeliveryResult, IncomingMessageHandler } from "./federation/connection-manager.js";
|
|
23
24
|
export type { MapConnection, MapAgentConnectionClass, IncomingMapMessage } from "./map/map-client.js";
|
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,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -20,7 +20,7 @@ export { IpcServer } from "./ipc/ipc-server.js";
|
|
|
20
20
|
export { MapClient } from "./map/map-client.js";
|
|
21
21
|
export { InboxMcpServer } from "./mcp/mcp-server.js";
|
|
22
22
|
export { MailJsonRpcServer } from "./jsonrpc/mail-server.js";
|
|
23
|
-
export { PushNotifier, formatInboxMarkdown } from "./push/notifier.js";
|
|
23
|
+
export { PushNotifier, formatInboxMarkdown, parseCommand } from "./push/notifier.js";
|
|
24
24
|
export { ConnectionManager } from "./federation/connection-manager.js";
|
|
25
25
|
export { WarmRegistry } from "./registry/warm-registry.js";
|
|
26
26
|
export { RoutingEngine } from "./federation/routing-engine.js";
|
|
@@ -76,7 +76,7 @@ export async function createAgentInbox(opts = {}) {
|
|
|
76
76
|
const router = new MessageRouter(storage, events, config.scope);
|
|
77
77
|
// 4. Traceability layer (subscribes to message.created events)
|
|
78
78
|
const traceability = new TraceabilityLayer(storage, events);
|
|
79
|
-
// 5. Push notifier (per-agent inbox files + webhooks)
|
|
79
|
+
// 5. Push notifier (per-agent inbox files + webhooks + event emission)
|
|
80
80
|
const notifier = new PushNotifier({ inboxDir: defaultInboxDir(), webhooks: opts.webhooks }, storage, events);
|
|
81
81
|
// 6. MAP client (connects first to obtain SDK class for federation)
|
|
82
82
|
const mapClient = new MapClient(storage, router, events);
|
|
@@ -94,11 +94,14 @@ export async function createAgentInbox(opts = {}) {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
// 7. Federation (optional)
|
|
97
|
+
// 7. Registry + Federation (optional)
|
|
98
98
|
let federation = null;
|
|
99
99
|
let registry = null;
|
|
100
|
-
|
|
100
|
+
const needsRegistry = opts.enableFederation || config.federation?.peers?.length;
|
|
101
|
+
if (needsRegistry) {
|
|
101
102
|
registry = new WarmRegistry(storage, events, config.federation?.registry);
|
|
103
|
+
}
|
|
104
|
+
if (opts.enableFederation || config.federation?.peers?.length) {
|
|
102
105
|
const sdkClass = mapClient.getAgentConnectionClass() ?? undefined;
|
|
103
106
|
federation = new ConnectionManager(events, config.federation, {
|
|
104
107
|
sdkClass,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAI3D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-server.d.ts","sourceRoot":"","sources":["../../src/jsonrpc/mail-server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAIjE;;;GAGG;AAEH,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D;AAMD,qBAAa,iBAAiB;IAM1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,WAAW,CAAkC;gBAG3C,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,YAAY;IAM9B,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"mail-server.d.ts","sourceRoot":"","sources":["../../src/jsonrpc/mail-server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAIjE;;;GAGG;AAEH,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D;AAMD,qBAAa,iBAAiB;IAM1B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,WAAW,CAAkC;gBAG3C,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,YAAY;IAM9B,OAAO,CAAC,eAAe;IAiLvB,wEAAwE;IAClE,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAqCtE,sDAAsD;IAChD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDtC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,iDAAiD;IACjD,OAAO,CAAC,kBAAkB;IAc1B,iDAAiD;IACjD,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,SAAS;CAMlB"}
|
|
@@ -54,6 +54,10 @@ export class MailJsonRpcServer {
|
|
|
54
54
|
conv.status = "completed";
|
|
55
55
|
conv.updated_at = new Date().toISOString();
|
|
56
56
|
this.storage.putConversation(conv);
|
|
57
|
+
this.events.emit("mail.closed", {
|
|
58
|
+
conversation_id: conv.id,
|
|
59
|
+
status: conv.status,
|
|
60
|
+
});
|
|
57
61
|
return { ok: true };
|
|
58
62
|
});
|
|
59
63
|
// mail/join — add self as participant
|
|
@@ -284,6 +288,9 @@ export class MailJsonRpcServer {
|
|
|
284
288
|
this.events.on("mail.participant.joined", (data) => {
|
|
285
289
|
this.broadcast("mail.participant.joined", data);
|
|
286
290
|
});
|
|
291
|
+
this.events.on("mail.closed", (data) => {
|
|
292
|
+
this.broadcast("mail.closed", data);
|
|
293
|
+
});
|
|
287
294
|
}
|
|
288
295
|
broadcast(eventType, data) {
|
|
289
296
|
const payload = `event: ${eventType}\ndata: ${JSON.stringify(data)}\n\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-server.js","sourceRoot":"","sources":["../../src/jsonrpc/mail-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mail-server.js","sourceRoot":"","sources":["../../src/jsonrpc/mail-server.ts"],"names":[],"mappings":"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"}
|
package/dist/push/notifier.d.ts
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
|
+
import type { Message, RecipientKind } from "../types.js";
|
|
2
3
|
import type { Storage } from "../storage/interface.js";
|
|
3
4
|
/**
|
|
4
5
|
* Push notification system for Agent Inbox.
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
7
|
+
* Writes per-agent inbox files (NDJSON) and emits events for each recipient.
|
|
8
|
+
* Clients (e.g. claude-code-swarm) subscribe to events and decide how to
|
|
9
|
+
* deliver — wake a dormant agent, nudge an idle TUI, or just let the hook
|
|
10
|
+
* pick it up on the next turn.
|
|
8
11
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* messages into the agent's context as formatted markdown
|
|
12
|
-
* 3. Agent sees new messages at the start of their next turn
|
|
13
|
-
*
|
|
14
|
-
* This class also supports webhook-style push for external consumers.
|
|
12
|
+
* Agent Inbox is a message router, not an orchestrator. Delivery strategy
|
|
13
|
+
* is the client's responsibility.
|
|
15
14
|
*/
|
|
16
15
|
export interface NotifierConfig {
|
|
17
16
|
/** Directory for per-agent inbox files */
|
|
@@ -29,9 +28,16 @@ export interface InboxFileEntry {
|
|
|
29
28
|
importance: string;
|
|
30
29
|
timestamp: string;
|
|
31
30
|
}
|
|
31
|
+
/** Emitted per-recipient when a message is delivered to an agent's inbox */
|
|
32
|
+
export interface InboxMessageEvent {
|
|
33
|
+
agentId: string;
|
|
34
|
+
recipientKind: RecipientKind;
|
|
35
|
+
message: Message;
|
|
36
|
+
}
|
|
32
37
|
export declare class PushNotifier {
|
|
33
38
|
private config;
|
|
34
39
|
private storage;
|
|
40
|
+
private events;
|
|
35
41
|
private webhooks;
|
|
36
42
|
constructor(config: NotifierConfig, storage: Storage, events: EventEmitter);
|
|
37
43
|
private onMessage;
|
|
@@ -44,6 +50,8 @@ export declare class PushNotifier {
|
|
|
44
50
|
/** Fire webhook notification (best-effort) */
|
|
45
51
|
private fireWebhook;
|
|
46
52
|
}
|
|
53
|
+
/** Parse a command string into parts, respecting quotes */
|
|
54
|
+
export declare function parseCommand(cmd: string): string[];
|
|
47
55
|
/** Format inbox entries as markdown for agent context injection */
|
|
48
56
|
export declare function formatInboxMarkdown(entries: InboxFileEntry[]): string;
|
|
49
57
|
//# sourceMappingURL=notifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifier.d.ts","sourceRoot":"","sources":["../../src/push/notifier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"notifier.d.ts","sourceRoot":"","sources":["../../src/push/notifier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,4EAA4E;AAC5E,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,YAAY;IAIrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IALhB,OAAO,CAAC,QAAQ,CAAW;gBAGjB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,YAAY;IAW9B,OAAO,CAAC,SAAS;IAoBjB,wDAAwD;IACxD,OAAO,CAAC,eAAe;IAmBvB,gFAAgF;IAChF,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkCtD,4CAA4C;IAC5C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAMvC,8CAA8C;YAChC,WAAW;CAuB1B;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBlD;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CA0BrE"}
|
package/dist/push/notifier.js
CHANGED
|
@@ -3,10 +3,12 @@ import * as path from "node:path";
|
|
|
3
3
|
export class PushNotifier {
|
|
4
4
|
config;
|
|
5
5
|
storage;
|
|
6
|
+
events;
|
|
6
7
|
webhooks;
|
|
7
8
|
constructor(config, storage, events) {
|
|
8
9
|
this.config = config;
|
|
9
10
|
this.storage = storage;
|
|
11
|
+
this.events = events;
|
|
10
12
|
this.webhooks = config.webhooks ?? [];
|
|
11
13
|
// Subscribe to message.created events
|
|
12
14
|
events.on("message.created", (msg) => this.onMessage(msg));
|
|
@@ -14,9 +16,16 @@ export class PushNotifier {
|
|
|
14
16
|
fs.mkdirSync(config.inboxDir, { recursive: true });
|
|
15
17
|
}
|
|
16
18
|
onMessage(message) {
|
|
17
|
-
// Write to each recipient's per-agent inbox file
|
|
19
|
+
// Write to each recipient's per-agent inbox file and emit event
|
|
18
20
|
for (const recipient of message.recipients) {
|
|
19
21
|
this.writeAgentInbox(recipient.agent_id, message);
|
|
22
|
+
// Emit per-recipient event — clients decide delivery strategy
|
|
23
|
+
const event = {
|
|
24
|
+
agentId: recipient.agent_id,
|
|
25
|
+
recipientKind: recipient.kind,
|
|
26
|
+
message,
|
|
27
|
+
};
|
|
28
|
+
this.events.emit("inbox.message", event);
|
|
20
29
|
}
|
|
21
30
|
// Fire webhooks (best-effort)
|
|
22
31
|
for (const url of this.webhooks) {
|
|
@@ -110,6 +119,37 @@ export class PushNotifier {
|
|
|
110
119
|
}
|
|
111
120
|
}
|
|
112
121
|
}
|
|
122
|
+
/** Parse a command string into parts, respecting quotes */
|
|
123
|
+
export function parseCommand(cmd) {
|
|
124
|
+
const parts = [];
|
|
125
|
+
let current = "";
|
|
126
|
+
let inQuote = null;
|
|
127
|
+
for (const ch of cmd) {
|
|
128
|
+
if (inQuote) {
|
|
129
|
+
if (ch === inQuote) {
|
|
130
|
+
inQuote = null;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
current += ch;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else if (ch === '"' || ch === "'") {
|
|
137
|
+
inQuote = ch;
|
|
138
|
+
}
|
|
139
|
+
else if (ch === " " || ch === "\t") {
|
|
140
|
+
if (current) {
|
|
141
|
+
parts.push(current);
|
|
142
|
+
current = "";
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
current += ch;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (current)
|
|
150
|
+
parts.push(current);
|
|
151
|
+
return parts;
|
|
152
|
+
}
|
|
113
153
|
/** Format inbox entries as markdown for agent context injection */
|
|
114
154
|
export function formatInboxMarkdown(entries) {
|
|
115
155
|
const lines = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifier.js","sourceRoot":"","sources":["../../src/push/notifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"notifier.js","sourceRoot":"","sources":["../../src/push/notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,16 @@ export declare class WarmRegistry {
|
|
|
35
35
|
* Fully remove an agent from the registry.
|
|
36
36
|
*/
|
|
37
37
|
remove(agentId: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Transition an agent to dormant state.
|
|
40
|
+
* Dormant agents are not running — they consume no resources.
|
|
41
|
+
* They can be woken by the push notifier when a matching message arrives.
|
|
42
|
+
*/
|
|
43
|
+
dormant(agentId: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Wake a dormant agent — transitions back to active.
|
|
46
|
+
*/
|
|
47
|
+
wake(agentId: string): boolean;
|
|
38
48
|
/**
|
|
39
49
|
* Check if an agent is routable (active or away).
|
|
40
50
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warm-registry.d.ts","sourceRoot":"","sources":["../../src/registry/warm-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EACV,KAAK,EACL,mBAAmB,EACnB,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAgBvD;;;;;GAKG;AACH,qBAAa,YAAY;IAKrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IALhB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,MAAM,CAAsB;gBAG1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,YAAY,EAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAKvC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAsB/B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAuBpC;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAoBnC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqB7B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAU7B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMpC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAKvD;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,eAAe,CAAA;KAAE,CAAC;IAOtE;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAMxB;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,WAAW;CAUpB"}
|
|
1
|
+
{"version":3,"file":"warm-registry.d.ts","sourceRoot":"","sources":["../../src/registry/warm-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EACV,KAAK,EACL,mBAAmB,EACnB,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAgBvD;;;;;GAKG;AACH,qBAAa,YAAY;IAKrB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IALhB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,MAAM,CAAsB;gBAG1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,YAAY,EAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAKvC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAsB/B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAuBpC;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAoBnC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqB7B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAU7B;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAmBjC;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAkB9B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMpC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAKvD;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,eAAe,CAAA;KAAE,CAAC;IAOtE;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAMxB;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,WAAW;CAUpB"}
|
|
@@ -26,7 +26,7 @@ export class WarmRegistry {
|
|
|
26
26
|
register(agent) {
|
|
27
27
|
const existing = this.entries.get(agent.agent_id);
|
|
28
28
|
if (existing && (existing.warmStatus === "active" || existing.warmStatus === "away")) {
|
|
29
|
-
return false; // ID conflict
|
|
29
|
+
return false; // ID conflict — active/away agents can't be re-registered
|
|
30
30
|
}
|
|
31
31
|
// Clear any existing timers
|
|
32
32
|
if (existing) {
|
|
@@ -117,6 +117,46 @@ export class WarmRegistry {
|
|
|
117
117
|
this.storage.removeAgent(agentId);
|
|
118
118
|
this.events.emit("registry.removed", agentId);
|
|
119
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Transition an agent to dormant state.
|
|
122
|
+
* Dormant agents are not running — they consume no resources.
|
|
123
|
+
* They can be woken by the push notifier when a matching message arrives.
|
|
124
|
+
*/
|
|
125
|
+
dormant(agentId) {
|
|
126
|
+
const entry = this.entries.get(agentId);
|
|
127
|
+
if (!entry)
|
|
128
|
+
return false;
|
|
129
|
+
if (entry.warmStatus === "expired")
|
|
130
|
+
return false;
|
|
131
|
+
this.clearTimers(entry);
|
|
132
|
+
entry.warmStatus = "dormant";
|
|
133
|
+
entry.disconnectedAt = new Date().toISOString();
|
|
134
|
+
const agent = this.storage.getAgent(agentId);
|
|
135
|
+
if (agent) {
|
|
136
|
+
agent.status = "offline";
|
|
137
|
+
this.storage.putAgent(agent);
|
|
138
|
+
}
|
|
139
|
+
this.events.emit("registry.dormant", agentId);
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Wake a dormant agent — transitions back to active.
|
|
144
|
+
*/
|
|
145
|
+
wake(agentId) {
|
|
146
|
+
const entry = this.entries.get(agentId);
|
|
147
|
+
if (!entry || entry.warmStatus !== "dormant")
|
|
148
|
+
return false;
|
|
149
|
+
entry.warmStatus = "active";
|
|
150
|
+
entry.disconnectedAt = undefined;
|
|
151
|
+
const agent = this.storage.getAgent(agentId);
|
|
152
|
+
if (agent) {
|
|
153
|
+
agent.status = "active";
|
|
154
|
+
agent.last_active_at = new Date().toISOString();
|
|
155
|
+
this.storage.putAgent(agent);
|
|
156
|
+
}
|
|
157
|
+
this.events.emit("registry.woken", agentId);
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
120
160
|
/**
|
|
121
161
|
* Check if an agent is routable (active or away).
|
|
122
162
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warm-registry.js","sourceRoot":"","sources":["../../src/registry/warm-registry.ts"],"names":[],"mappings":"AAQA,MAAM,cAAc,GAAwB;IAC1C,aAAa,EAAE,MAAM;IACrB,eAAe,EAAE,SAAS;IAC1B,kBAAkB,EAAE,IAAI;CACzB,CAAC;AAUF;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IAKb;IACA;IALF,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC3C,MAAM,CAAsB;IAEpC,YACU,OAAgB,EAChB,MAAoB,EAC5B,MAAqC;QAF7B,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAc;QAG5B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IACjD,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,KAAY;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,EAAE,CAAC;YACrF,OAAO,KAAK,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"warm-registry.js","sourceRoot":"","sources":["../../src/registry/warm-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -141,7 +141,7 @@ export interface IpcResponse {
|
|
|
141
141
|
error?: string;
|
|
142
142
|
pid?: number;
|
|
143
143
|
}
|
|
144
|
-
export type WarmAgentStatus = "active" | "away" | "expired";
|
|
144
|
+
export type WarmAgentStatus = "active" | "away" | "expired" | "dormant";
|
|
145
145
|
export interface AgentRegistryConfig {
|
|
146
146
|
/** Time after disconnect before away → expired (default: 60000ms) */
|
|
147
147
|
gracePeriodMs: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -23,7 +23,8 @@ export { IpcServer } from "./ipc/ipc-server.js";
|
|
|
23
23
|
export { MapClient } from "./map/map-client.js";
|
|
24
24
|
export { InboxMcpServer } from "./mcp/mcp-server.js";
|
|
25
25
|
export { MailJsonRpcServer } from "./jsonrpc/mail-server.js";
|
|
26
|
-
export { PushNotifier, formatInboxMarkdown } from "./push/notifier.js";
|
|
26
|
+
export { PushNotifier, formatInboxMarkdown, parseCommand } from "./push/notifier.js";
|
|
27
|
+
export type { InboxMessageEvent, NotifierConfig, InboxFileEntry } from "./push/notifier.js";
|
|
27
28
|
export { ConnectionManager } from "./federation/connection-manager.js";
|
|
28
29
|
export type { DeliveryResult, IncomingMessageHandler } from "./federation/connection-manager.js";
|
|
29
30
|
export type { MapConnection, MapAgentConnectionClass, IncomingMapMessage } from "./map/map-client.js";
|
|
@@ -132,7 +133,7 @@ export async function createAgentInbox(
|
|
|
132
133
|
// 4. Traceability layer (subscribes to message.created events)
|
|
133
134
|
const traceability = new TraceabilityLayer(storage, events);
|
|
134
135
|
|
|
135
|
-
// 5. Push notifier (per-agent inbox files + webhooks)
|
|
136
|
+
// 5. Push notifier (per-agent inbox files + webhooks + event emission)
|
|
136
137
|
const notifier = new PushNotifier(
|
|
137
138
|
{ inboxDir: defaultInboxDir(), webhooks: opts.webhooks },
|
|
138
139
|
storage,
|
|
@@ -159,13 +160,17 @@ export async function createAgentInbox(
|
|
|
159
160
|
}
|
|
160
161
|
}
|
|
161
162
|
|
|
162
|
-
// 7. Federation (optional)
|
|
163
|
+
// 7. Registry + Federation (optional)
|
|
163
164
|
let federation: ConnectionManager | null = null;
|
|
164
165
|
let registry: WarmRegistry | null = null;
|
|
165
166
|
|
|
166
|
-
|
|
167
|
+
const needsRegistry = opts.enableFederation || config.federation?.peers?.length;
|
|
168
|
+
|
|
169
|
+
if (needsRegistry) {
|
|
167
170
|
registry = new WarmRegistry(storage, events, config.federation?.registry);
|
|
171
|
+
}
|
|
168
172
|
|
|
173
|
+
if (opts.enableFederation || config.federation?.peers?.length) {
|
|
169
174
|
const sdkClass = mapClient.getAgentConnectionClass() ?? undefined;
|
|
170
175
|
|
|
171
176
|
federation = new ConnectionManager(events, config.federation, {
|
|
@@ -88,6 +88,10 @@ export class MailJsonRpcServer {
|
|
|
88
88
|
conv.status = "completed";
|
|
89
89
|
conv.updated_at = new Date().toISOString();
|
|
90
90
|
this.storage.putConversation(conv);
|
|
91
|
+
this.events.emit("mail.closed", {
|
|
92
|
+
conversation_id: conv.id,
|
|
93
|
+
status: conv.status,
|
|
94
|
+
});
|
|
91
95
|
return { ok: true };
|
|
92
96
|
});
|
|
93
97
|
|
|
@@ -348,6 +352,9 @@ export class MailJsonRpcServer {
|
|
|
348
352
|
this.events.on("mail.participant.joined", (data) => {
|
|
349
353
|
this.broadcast("mail.participant.joined", data);
|
|
350
354
|
});
|
|
355
|
+
this.events.on("mail.closed", (data) => {
|
|
356
|
+
this.broadcast("mail.closed", data);
|
|
357
|
+
});
|
|
351
358
|
}
|
|
352
359
|
|
|
353
360
|
private broadcast(eventType: string, data: unknown): void {
|
package/src/push/notifier.ts
CHANGED
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
import { EventEmitter } from "node:events";
|
|
4
|
-
import type { Message } from "../types.js";
|
|
4
|
+
import type { Message, RecipientKind } from "../types.js";
|
|
5
5
|
import type { Storage } from "../storage/interface.js";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Push notification system for Agent Inbox.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* Writes per-agent inbox files (NDJSON) and emits events for each recipient.
|
|
11
|
+
* Clients (e.g. claude-code-swarm) subscribe to events and decide how to
|
|
12
|
+
* deliver — wake a dormant agent, nudge an idle TUI, or just let the hook
|
|
13
|
+
* pick it up on the next turn.
|
|
12
14
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* messages into the agent's context as formatted markdown
|
|
16
|
-
* 3. Agent sees new messages at the start of their next turn
|
|
17
|
-
*
|
|
18
|
-
* This class also supports webhook-style push for external consumers.
|
|
15
|
+
* Agent Inbox is a message router, not an orchestrator. Delivery strategy
|
|
16
|
+
* is the client's responsibility.
|
|
19
17
|
*/
|
|
20
18
|
|
|
21
19
|
export interface NotifierConfig {
|
|
@@ -36,13 +34,20 @@ export interface InboxFileEntry {
|
|
|
36
34
|
timestamp: string;
|
|
37
35
|
}
|
|
38
36
|
|
|
37
|
+
/** Emitted per-recipient when a message is delivered to an agent's inbox */
|
|
38
|
+
export interface InboxMessageEvent {
|
|
39
|
+
agentId: string;
|
|
40
|
+
recipientKind: RecipientKind;
|
|
41
|
+
message: Message;
|
|
42
|
+
}
|
|
43
|
+
|
|
39
44
|
export class PushNotifier {
|
|
40
45
|
private webhooks: string[];
|
|
41
46
|
|
|
42
47
|
constructor(
|
|
43
48
|
private config: NotifierConfig,
|
|
44
49
|
private storage: Storage,
|
|
45
|
-
events: EventEmitter
|
|
50
|
+
private events: EventEmitter
|
|
46
51
|
) {
|
|
47
52
|
this.webhooks = config.webhooks ?? [];
|
|
48
53
|
|
|
@@ -54,9 +59,17 @@ export class PushNotifier {
|
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
private onMessage(message: Message): void {
|
|
57
|
-
// Write to each recipient's per-agent inbox file
|
|
62
|
+
// Write to each recipient's per-agent inbox file and emit event
|
|
58
63
|
for (const recipient of message.recipients) {
|
|
59
64
|
this.writeAgentInbox(recipient.agent_id, message);
|
|
65
|
+
|
|
66
|
+
// Emit per-recipient event — clients decide delivery strategy
|
|
67
|
+
const event: InboxMessageEvent = {
|
|
68
|
+
agentId: recipient.agent_id,
|
|
69
|
+
recipientKind: recipient.kind,
|
|
70
|
+
message,
|
|
71
|
+
};
|
|
72
|
+
this.events.emit("inbox.message", event);
|
|
60
73
|
}
|
|
61
74
|
|
|
62
75
|
// Fire webhooks (best-effort)
|
|
@@ -153,6 +166,34 @@ export class PushNotifier {
|
|
|
153
166
|
}
|
|
154
167
|
}
|
|
155
168
|
|
|
169
|
+
/** Parse a command string into parts, respecting quotes */
|
|
170
|
+
export function parseCommand(cmd: string): string[] {
|
|
171
|
+
const parts: string[] = [];
|
|
172
|
+
let current = "";
|
|
173
|
+
let inQuote: string | null = null;
|
|
174
|
+
|
|
175
|
+
for (const ch of cmd) {
|
|
176
|
+
if (inQuote) {
|
|
177
|
+
if (ch === inQuote) {
|
|
178
|
+
inQuote = null;
|
|
179
|
+
} else {
|
|
180
|
+
current += ch;
|
|
181
|
+
}
|
|
182
|
+
} else if (ch === '"' || ch === "'") {
|
|
183
|
+
inQuote = ch;
|
|
184
|
+
} else if (ch === " " || ch === "\t") {
|
|
185
|
+
if (current) {
|
|
186
|
+
parts.push(current);
|
|
187
|
+
current = "";
|
|
188
|
+
}
|
|
189
|
+
} else {
|
|
190
|
+
current += ch;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (current) parts.push(current);
|
|
194
|
+
return parts;
|
|
195
|
+
}
|
|
196
|
+
|
|
156
197
|
/** Format inbox entries as markdown for agent context injection */
|
|
157
198
|
export function formatInboxMarkdown(entries: InboxFileEntry[]): string {
|
|
158
199
|
const lines: string[] = [];
|
|
@@ -45,7 +45,7 @@ export class WarmRegistry {
|
|
|
45
45
|
register(agent: Agent): boolean {
|
|
46
46
|
const existing = this.entries.get(agent.agent_id);
|
|
47
47
|
if (existing && (existing.warmStatus === "active" || existing.warmStatus === "away")) {
|
|
48
|
-
return false; // ID conflict
|
|
48
|
+
return false; // ID conflict — active/away agents can't be re-registered
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
// Clear any existing timers
|
|
@@ -151,6 +151,51 @@ export class WarmRegistry {
|
|
|
151
151
|
this.events.emit("registry.removed", agentId);
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Transition an agent to dormant state.
|
|
156
|
+
* Dormant agents are not running — they consume no resources.
|
|
157
|
+
* They can be woken by the push notifier when a matching message arrives.
|
|
158
|
+
*/
|
|
159
|
+
dormant(agentId: string): boolean {
|
|
160
|
+
const entry = this.entries.get(agentId);
|
|
161
|
+
if (!entry) return false;
|
|
162
|
+
if (entry.warmStatus === "expired") return false;
|
|
163
|
+
|
|
164
|
+
this.clearTimers(entry);
|
|
165
|
+
entry.warmStatus = "dormant";
|
|
166
|
+
entry.disconnectedAt = new Date().toISOString();
|
|
167
|
+
|
|
168
|
+
const agent = this.storage.getAgent(agentId);
|
|
169
|
+
if (agent) {
|
|
170
|
+
agent.status = "offline";
|
|
171
|
+
this.storage.putAgent(agent);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
this.events.emit("registry.dormant", agentId);
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Wake a dormant agent — transitions back to active.
|
|
180
|
+
*/
|
|
181
|
+
wake(agentId: string): boolean {
|
|
182
|
+
const entry = this.entries.get(agentId);
|
|
183
|
+
if (!entry || entry.warmStatus !== "dormant") return false;
|
|
184
|
+
|
|
185
|
+
entry.warmStatus = "active";
|
|
186
|
+
entry.disconnectedAt = undefined;
|
|
187
|
+
|
|
188
|
+
const agent = this.storage.getAgent(agentId);
|
|
189
|
+
if (agent) {
|
|
190
|
+
agent.status = "active";
|
|
191
|
+
agent.last_active_at = new Date().toISOString();
|
|
192
|
+
this.storage.putAgent(agent);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
this.events.emit("registry.woken", agentId);
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
|
|
154
199
|
/**
|
|
155
200
|
* Check if an agent is routable (active or away).
|
|
156
201
|
*/
|
package/src/types.ts
CHANGED
|
@@ -161,7 +161,7 @@ export interface IpcResponse {
|
|
|
161
161
|
|
|
162
162
|
// --- Federation ---
|
|
163
163
|
|
|
164
|
-
export type WarmAgentStatus = "active" | "away" | "expired";
|
|
164
|
+
export type WarmAgentStatus = "active" | "away" | "expired" | "dormant";
|
|
165
165
|
|
|
166
166
|
export interface AgentRegistryConfig {
|
|
167
167
|
/** Time after disconnect before away → expired (default: 60000ms) */
|
package/test/mail-server.test.ts
CHANGED
|
@@ -247,6 +247,22 @@ describe("MailJsonRpcServer", () => {
|
|
|
247
247
|
|
|
248
248
|
expect(listener).toHaveBeenCalledOnce();
|
|
249
249
|
});
|
|
250
|
+
|
|
251
|
+
it("should emit mail.closed on mail/close", async () => {
|
|
252
|
+
const listener = vi.fn();
|
|
253
|
+
events.on("mail.closed", listener);
|
|
254
|
+
|
|
255
|
+
const createResp = await rpc("mail/create", { subject: "Test" });
|
|
256
|
+
const convId = (createResp.result as { id: string }).id;
|
|
257
|
+
|
|
258
|
+
await rpc("mail/close", { id: convId });
|
|
259
|
+
|
|
260
|
+
expect(listener).toHaveBeenCalledOnce();
|
|
261
|
+
expect(listener.mock.calls[0][0]).toEqual({
|
|
262
|
+
conversation_id: convId,
|
|
263
|
+
status: "completed",
|
|
264
|
+
});
|
|
265
|
+
});
|
|
250
266
|
});
|
|
251
267
|
|
|
252
268
|
describe("error handling", () => {
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as os from "node:os";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
import { EventEmitter } from "node:events";
|
|
6
|
+
import { InMemoryStorage } from "../src/storage/memory.js";
|
|
7
|
+
import { MessageRouter } from "../src/router/message-router.js";
|
|
8
|
+
import { PushNotifier } from "../src/push/notifier.js";
|
|
9
|
+
import type { InboxMessageEvent } from "../src/push/notifier.js";
|
|
10
|
+
import { WarmRegistry } from "../src/registry/warm-registry.js";
|
|
11
|
+
import { parseCommand } from "../src/push/notifier.js";
|
|
12
|
+
import type { Agent } from "../src/types.js";
|
|
13
|
+
|
|
14
|
+
function makeAgent(id: string, scope = "default"): Agent {
|
|
15
|
+
const now = new Date().toISOString();
|
|
16
|
+
return {
|
|
17
|
+
agent_id: id,
|
|
18
|
+
display_name: id,
|
|
19
|
+
scope,
|
|
20
|
+
status: "active",
|
|
21
|
+
metadata: {},
|
|
22
|
+
registered_at: now,
|
|
23
|
+
last_active_at: now,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
describe("WarmRegistry dormant state", () => {
|
|
28
|
+
let storage: InMemoryStorage;
|
|
29
|
+
let events: EventEmitter;
|
|
30
|
+
let registry: WarmRegistry;
|
|
31
|
+
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
vi.useFakeTimers();
|
|
34
|
+
storage = new InMemoryStorage();
|
|
35
|
+
events = new EventEmitter();
|
|
36
|
+
registry = new WarmRegistry(storage, events, {
|
|
37
|
+
gracePeriodMs: 5000,
|
|
38
|
+
retainExpiredMs: 10000,
|
|
39
|
+
requeueOnReconnect: true,
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
afterEach(() => {
|
|
44
|
+
registry.destroy();
|
|
45
|
+
vi.useRealTimers();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("should transition active agent to dormant", () => {
|
|
49
|
+
registry.register(makeAgent("agent-1"));
|
|
50
|
+
const ok = registry.dormant("agent-1");
|
|
51
|
+
expect(ok).toBe(true);
|
|
52
|
+
expect(registry.getStatus("agent-1")).toBe("dormant");
|
|
53
|
+
expect(registry.isRoutable("agent-1")).toBe(false);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("should transition away agent to dormant", () => {
|
|
57
|
+
registry.register(makeAgent("agent-1"));
|
|
58
|
+
registry.disconnect("agent-1");
|
|
59
|
+
const ok = registry.dormant("agent-1");
|
|
60
|
+
expect(ok).toBe(true);
|
|
61
|
+
expect(registry.getStatus("agent-1")).toBe("dormant");
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("should not transition expired agent to dormant", () => {
|
|
65
|
+
registry.register(makeAgent("agent-1"));
|
|
66
|
+
registry.disconnect("agent-1");
|
|
67
|
+
vi.advanceTimersByTime(6000);
|
|
68
|
+
expect(registry.getStatus("agent-1")).toBe("expired");
|
|
69
|
+
const ok = registry.dormant("agent-1");
|
|
70
|
+
expect(ok).toBe(false);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("should wake a dormant agent back to active", () => {
|
|
74
|
+
registry.register(makeAgent("agent-1"));
|
|
75
|
+
registry.dormant("agent-1");
|
|
76
|
+
const ok = registry.wake("agent-1");
|
|
77
|
+
expect(ok).toBe(true);
|
|
78
|
+
expect(registry.getStatus("agent-1")).toBe("active");
|
|
79
|
+
expect(registry.isRoutable("agent-1")).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it("should not wake a non-dormant agent", () => {
|
|
83
|
+
registry.register(makeAgent("agent-1"));
|
|
84
|
+
expect(registry.wake("agent-1")).toBe(false); // active, not dormant
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it("should emit registry.dormant event", () => {
|
|
88
|
+
const spy = vi.fn();
|
|
89
|
+
events.on("registry.dormant", spy);
|
|
90
|
+
registry.register(makeAgent("agent-1"));
|
|
91
|
+
registry.dormant("agent-1");
|
|
92
|
+
expect(spy).toHaveBeenCalledWith("agent-1");
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it("should emit registry.woken event", () => {
|
|
96
|
+
const spy = vi.fn();
|
|
97
|
+
events.on("registry.woken", spy);
|
|
98
|
+
registry.register(makeAgent("agent-1"));
|
|
99
|
+
registry.dormant("agent-1");
|
|
100
|
+
registry.wake("agent-1");
|
|
101
|
+
expect(spy).toHaveBeenCalledWith("agent-1");
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it("should update storage status to offline when dormant", () => {
|
|
105
|
+
registry.register(makeAgent("agent-1"));
|
|
106
|
+
registry.dormant("agent-1");
|
|
107
|
+
const stored = storage.getAgent("agent-1");
|
|
108
|
+
expect(stored?.status).toBe("offline");
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("should update storage status to active when woken", () => {
|
|
112
|
+
registry.register(makeAgent("agent-1"));
|
|
113
|
+
registry.dormant("agent-1");
|
|
114
|
+
registry.wake("agent-1");
|
|
115
|
+
const stored = storage.getAgent("agent-1");
|
|
116
|
+
expect(stored?.status).toBe("active");
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it("should allow re-registering a dormant agent", () => {
|
|
120
|
+
registry.register(makeAgent("agent-1"));
|
|
121
|
+
registry.dormant("agent-1");
|
|
122
|
+
const ok = registry.register(makeAgent("agent-1"));
|
|
123
|
+
expect(ok).toBe(true);
|
|
124
|
+
expect(registry.getStatus("agent-1")).toBe("active");
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it("should list dormant agents in listEntries", () => {
|
|
128
|
+
registry.register(makeAgent("agent-1"));
|
|
129
|
+
registry.register(makeAgent("agent-2"));
|
|
130
|
+
registry.dormant("agent-1");
|
|
131
|
+
const entries = registry.listEntries();
|
|
132
|
+
const dormant = entries.find((e) => e.agentId === "agent-1");
|
|
133
|
+
expect(dormant?.warmStatus).toBe("dormant");
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("should not list dormant agents in listRoutable", () => {
|
|
137
|
+
registry.register(makeAgent("agent-1"));
|
|
138
|
+
registry.dormant("agent-1");
|
|
139
|
+
expect(registry.listRoutable()).not.toContain("agent-1");
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it("should clear grace timer when going dormant from away", () => {
|
|
143
|
+
registry.register(makeAgent("agent-1"));
|
|
144
|
+
registry.disconnect("agent-1");
|
|
145
|
+
registry.dormant("agent-1");
|
|
146
|
+
// Advancing past grace period should NOT transition to expired
|
|
147
|
+
vi.advanceTimersByTime(6000);
|
|
148
|
+
expect(registry.getStatus("agent-1")).toBe("dormant");
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
describe("PushNotifier inbox.message events", () => {
|
|
153
|
+
let storage: InMemoryStorage;
|
|
154
|
+
let events: EventEmitter;
|
|
155
|
+
let router: MessageRouter;
|
|
156
|
+
let notifier: PushNotifier;
|
|
157
|
+
let tmpDir: string;
|
|
158
|
+
|
|
159
|
+
beforeEach(() => {
|
|
160
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "inbox-wake-test-"));
|
|
161
|
+
storage = new InMemoryStorage();
|
|
162
|
+
events = new EventEmitter();
|
|
163
|
+
router = new MessageRouter(storage, events, "default");
|
|
164
|
+
notifier = new PushNotifier({ inboxDir: tmpDir }, storage, events);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
afterEach(() => {
|
|
168
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it("should emit inbox.message event per recipient", async () => {
|
|
172
|
+
const spy = vi.fn();
|
|
173
|
+
events.on("inbox.message", spy);
|
|
174
|
+
|
|
175
|
+
await router.routeMessage({
|
|
176
|
+
from: "alice",
|
|
177
|
+
to: "bob",
|
|
178
|
+
payload: "hello",
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
182
|
+
expect(spy).toHaveBeenCalledWith(
|
|
183
|
+
expect.objectContaining({
|
|
184
|
+
agentId: "bob",
|
|
185
|
+
recipientKind: "to",
|
|
186
|
+
message: expect.objectContaining({
|
|
187
|
+
sender_id: "alice",
|
|
188
|
+
}),
|
|
189
|
+
})
|
|
190
|
+
);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it("should emit one event per recipient for multi-recipient messages", async () => {
|
|
194
|
+
const spy = vi.fn();
|
|
195
|
+
events.on("inbox.message", spy);
|
|
196
|
+
|
|
197
|
+
await router.routeMessage({
|
|
198
|
+
from: "alice",
|
|
199
|
+
to: [
|
|
200
|
+
{ agent_id: "bob", kind: "to" },
|
|
201
|
+
{ agent_id: "carol", kind: "cc" },
|
|
202
|
+
],
|
|
203
|
+
payload: "hello team",
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
expect(spy).toHaveBeenCalledTimes(2);
|
|
207
|
+
|
|
208
|
+
const calls = spy.mock.calls.map((c: [InboxMessageEvent]) => ({
|
|
209
|
+
agentId: c[0].agentId,
|
|
210
|
+
kind: c[0].recipientKind,
|
|
211
|
+
}));
|
|
212
|
+
expect(calls).toContainEqual({ agentId: "bob", kind: "to" });
|
|
213
|
+
expect(calls).toContainEqual({ agentId: "carol", kind: "cc" });
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
it("should include full message in event", async () => {
|
|
217
|
+
const spy = vi.fn();
|
|
218
|
+
events.on("inbox.message", spy);
|
|
219
|
+
|
|
220
|
+
await router.routeMessage({
|
|
221
|
+
from: "alice",
|
|
222
|
+
to: "bob",
|
|
223
|
+
payload: "urgent fix needed",
|
|
224
|
+
importance: "high",
|
|
225
|
+
threadTag: "critical-bug",
|
|
226
|
+
subject: "Production down",
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
const event: InboxMessageEvent = spy.mock.calls[0][0];
|
|
230
|
+
expect(event.message.importance).toBe("high");
|
|
231
|
+
expect(event.message.thread_tag).toBe("critical-bug");
|
|
232
|
+
expect(event.message.subject).toBe("Production down");
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
it("should write inbox file for each recipient", async () => {
|
|
236
|
+
await router.routeMessage({
|
|
237
|
+
from: "alice",
|
|
238
|
+
to: "bob",
|
|
239
|
+
payload: "wake up!",
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
const filePath = notifier.agentInboxPath("bob");
|
|
243
|
+
expect(fs.existsSync(filePath)).toBe(true);
|
|
244
|
+
const raw = fs.readFileSync(filePath, "utf-8").trim();
|
|
245
|
+
expect(raw).toContain("alice");
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
it("should allow clients to implement their own filtering", async () => {
|
|
249
|
+
// Simulate a client that only cares about high/urgent messages
|
|
250
|
+
const wokenAgents: string[] = [];
|
|
251
|
+
|
|
252
|
+
events.on("inbox.message", (event: InboxMessageEvent) => {
|
|
253
|
+
if (["high", "urgent"].includes(event.message.importance)) {
|
|
254
|
+
wokenAgents.push(event.agentId);
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
// Normal importance — client ignores
|
|
259
|
+
await router.routeMessage({
|
|
260
|
+
from: "alice",
|
|
261
|
+
to: "bob",
|
|
262
|
+
payload: "low priority",
|
|
263
|
+
importance: "normal",
|
|
264
|
+
});
|
|
265
|
+
expect(wokenAgents).toHaveLength(0);
|
|
266
|
+
|
|
267
|
+
// High importance — client acts
|
|
268
|
+
await router.routeMessage({
|
|
269
|
+
from: "alice",
|
|
270
|
+
to: "bob",
|
|
271
|
+
payload: "urgent fix needed",
|
|
272
|
+
importance: "high",
|
|
273
|
+
});
|
|
274
|
+
expect(wokenAgents).toEqual(["bob"]);
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
it("should allow clients to implement cooldown logic", async () => {
|
|
278
|
+
const wokenAgents: string[] = [];
|
|
279
|
+
const lastWake = new Map<string, number>();
|
|
280
|
+
const cooldownMs = 10_000;
|
|
281
|
+
|
|
282
|
+
vi.useFakeTimers();
|
|
283
|
+
|
|
284
|
+
events.on("inbox.message", (event: InboxMessageEvent) => {
|
|
285
|
+
const last = lastWake.get(event.agentId) ?? 0;
|
|
286
|
+
if (Date.now() - last >= cooldownMs) {
|
|
287
|
+
lastWake.set(event.agentId, Date.now());
|
|
288
|
+
wokenAgents.push(event.agentId);
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
// First message — wakes
|
|
293
|
+
await router.routeMessage({ from: "alice", to: "bob", payload: "msg 1" });
|
|
294
|
+
expect(wokenAgents).toHaveLength(1);
|
|
295
|
+
|
|
296
|
+
// Second within cooldown — skipped
|
|
297
|
+
await router.routeMessage({ from: "alice", to: "bob", payload: "msg 2" });
|
|
298
|
+
expect(wokenAgents).toHaveLength(1);
|
|
299
|
+
|
|
300
|
+
// After cooldown — wakes again
|
|
301
|
+
vi.advanceTimersByTime(10_001);
|
|
302
|
+
await router.routeMessage({ from: "alice", to: "bob", payload: "msg 3" });
|
|
303
|
+
expect(wokenAgents).toHaveLength(2);
|
|
304
|
+
|
|
305
|
+
vi.useRealTimers();
|
|
306
|
+
});
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
describe("parseCommand", () => {
|
|
310
|
+
it("should split simple commands", () => {
|
|
311
|
+
expect(parseCommand("echo hello world")).toEqual(["echo", "hello", "world"]);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
it("should handle quoted strings", () => {
|
|
315
|
+
expect(parseCommand('echo "hello world"')).toEqual(["echo", "hello world"]);
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
it("should handle single-quoted strings", () => {
|
|
319
|
+
expect(parseCommand("echo 'hello world'")).toEqual(["echo", "hello world"]);
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
it("should handle empty input", () => {
|
|
323
|
+
expect(parseCommand("")).toEqual([]);
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
it("should handle template variables", () => {
|
|
327
|
+
const cmd = "claude --resume session-123";
|
|
328
|
+
expect(parseCommand(cmd)).toEqual(["claude", "--resume", "session-123"]);
|
|
329
|
+
});
|
|
330
|
+
});
|