@nolag/agents 0.4.0 → 1.0.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/README.md +61 -17
- package/dist/AgentRoom.d.ts +32 -12
- package/dist/NoLagAgents.d.ts +92 -21
- package/dist/browser.js +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/index.cjs +512 -228
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +512 -228
- package/dist/index.mjs.map +1 -1
- package/dist/types.d.ts +13 -4
- package/dist/utils.d.ts +4 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -14,9 +14,9 @@ NoLag is a real-time messaging platform that handles WebSocket connections, mess
|
|
|
14
14
|
2. Create a new **project** in the portal
|
|
15
15
|
3. Choose the **Agents** blueprint when creating an app — this pre-configures the topics (`tasks`, `results`, `state`, `events`, `inbox`, `tools`, `approval`), rooms, and lobbies your agent workflow needs
|
|
16
16
|
4. Go to the app's **Tokens** page and generate an **actor token** for each agent
|
|
17
|
-
5. Use that token
|
|
17
|
+
5. Use that token to construct the core `@nolag/js-sdk` client, then inject the client into `NoLagAgents`
|
|
18
18
|
|
|
19
|
-
Each token identifies a unique agent (actor) in NoLag. The blueprint handles all the infrastructure setup — you just write your agent logic.
|
|
19
|
+
Each token identifies a unique agent (actor) in NoLag. The blueprint handles all the infrastructure setup — you just write your agent logic. The core client owns the connection; the wrapper attaches to it (see the Lifecycle section).
|
|
20
20
|
|
|
21
21
|
## Install
|
|
22
22
|
|
|
@@ -26,15 +26,27 @@ npm install @nolag/js-sdk @nolag/agents
|
|
|
26
26
|
|
|
27
27
|
## Quick Start
|
|
28
28
|
|
|
29
|
+
The app owns one core NoLag client; wrappers attach to it. Any number of
|
|
30
|
+
wrapper SDKs (agents, chat, notify, ...) can share the same connection as
|
|
31
|
+
long as each uses its own app.
|
|
32
|
+
|
|
29
33
|
```typescript
|
|
34
|
+
import { NoLag } from "@nolag/js-sdk";
|
|
30
35
|
import { NoLagAgents, Handoff } from "@nolag/agents";
|
|
31
36
|
|
|
37
|
+
// One client for the whole app. In a browser, use a token provider so the
|
|
38
|
+
// SDK can mint fresh short-lived client tokens from your backend.
|
|
39
|
+
const client = NoLag(async () => (await (await fetch("/api/nolag-token")).json()).token);
|
|
40
|
+
|
|
32
41
|
// --- Orchestrator ---
|
|
33
|
-
const orchestrator = new NoLagAgents(
|
|
42
|
+
const orchestrator = new NoLagAgents({
|
|
43
|
+
client,
|
|
34
44
|
agentId: "orchestrator-1",
|
|
35
45
|
presence: { name: "orchestrator-1", role: "orchestrator" },
|
|
36
46
|
});
|
|
37
|
-
|
|
47
|
+
|
|
48
|
+
await client.connect(); // the app owns the connection
|
|
49
|
+
await orchestrator.ready(); // wrapper setup done (identity, rooms, lobby)
|
|
38
50
|
|
|
39
51
|
const room = orchestrator.room("default-workflow");
|
|
40
52
|
const handoff = new Handoff(room);
|
|
@@ -46,8 +58,10 @@ const result = await handoff.dispatch("summarize", { text: "..." }, {
|
|
|
46
58
|
});
|
|
47
59
|
console.log("Result:", result?.payload);
|
|
48
60
|
|
|
49
|
-
// --- Worker ---
|
|
50
|
-
const
|
|
61
|
+
// --- Worker (its own client) ---
|
|
62
|
+
const workerClient = NoLag(async () => (await (await fetch("/api/nolag-token")).json()).token);
|
|
63
|
+
const worker = new NoLagAgents({
|
|
64
|
+
client: workerClient,
|
|
51
65
|
agentId: "worker-1",
|
|
52
66
|
presence: {
|
|
53
67
|
name: "worker-1",
|
|
@@ -55,7 +69,9 @@ const worker = new NoLagAgents("WORKER_TOKEN", {
|
|
|
55
69
|
capabilities: ["summarize"],
|
|
56
70
|
},
|
|
57
71
|
});
|
|
58
|
-
|
|
72
|
+
|
|
73
|
+
await workerClient.connect();
|
|
74
|
+
await worker.ready();
|
|
59
75
|
|
|
60
76
|
const workerRoom = worker.room("default-workflow");
|
|
61
77
|
const workerHandoff = new Handoff(workerRoom);
|
|
@@ -64,8 +80,32 @@ workerHandoff.onTask(["summarize"], async (task, respond) => {
|
|
|
64
80
|
const summary = await summarize(task.payload.text);
|
|
65
81
|
respond("success", { summary });
|
|
66
82
|
});
|
|
83
|
+
|
|
84
|
+
// Teardown: the wrapper releases its handlers and topics; the app closes
|
|
85
|
+
// the socket (never the other way around).
|
|
86
|
+
orchestrator.detach();
|
|
87
|
+
client.disconnect();
|
|
67
88
|
```
|
|
68
89
|
|
|
90
|
+
## Lifecycle
|
|
91
|
+
|
|
92
|
+
- **Construction = attach.** The wrapper wires its handlers onto the injected
|
|
93
|
+
client immediately. If the client is already connected, setup runs on the
|
|
94
|
+
next microtask; otherwise it runs when the client's `connect` event fires.
|
|
95
|
+
- **`ready()`** resolves once the first setup completed (identity, configured
|
|
96
|
+
rooms, and — when configured — the lobby). Auth failures surface via your own
|
|
97
|
+
`await client.connect()`, not via `ready()`.
|
|
98
|
+
- **Reconnects are automatic.** The wrapper re-applies room presence and, when
|
|
99
|
+
a lobby is configured, re-hydrates cross-room presence, emitting `reconnected`.
|
|
100
|
+
- **`detach()`** removes exactly this wrapper's handlers and topics and never
|
|
101
|
+
touches the socket. It is terminal: construct a new instance to re-attach.
|
|
102
|
+
Detach while the client is still connected so server-side unsubscribes go
|
|
103
|
+
through. In frameworks, call it from your dispose hook (`onUnmounted`,
|
|
104
|
+
HMR dispose).
|
|
105
|
+
- **One wrapper per (client, app).** Sharing a client across wrappers of
|
|
106
|
+
DIFFERENT apps is the intended pattern; two wrappers on the same app would
|
|
107
|
+
collide on topics and presence (the SDK warns if you do this).
|
|
108
|
+
|
|
69
109
|
## Coordination Patterns
|
|
70
110
|
|
|
71
111
|
### Handoff — Task Dispatch & Results
|
|
@@ -202,35 +242,38 @@ observe.on((event) => {
|
|
|
202
242
|
#### Constructor
|
|
203
243
|
|
|
204
244
|
```typescript
|
|
205
|
-
const agents = new NoLagAgents(
|
|
245
|
+
const agents = new NoLagAgents(options: NoLagAgentsOptions);
|
|
206
246
|
```
|
|
207
247
|
|
|
208
248
|
**Options:**
|
|
209
249
|
|
|
210
250
|
| Option | Type | Default | Description |
|
|
211
251
|
|--------|------|---------|-------------|
|
|
252
|
+
| `client` | `NoLagSocket` | *required* | The injected core NoLag client |
|
|
212
253
|
| `appName` | `string` | `"agents"` | App slug for the agents workflow |
|
|
213
254
|
| `agentId` | `string` | auto-generated | Unique agent ID |
|
|
255
|
+
| `name` | `string` | `agentId` | Display name advertised via presence |
|
|
256
|
+
| `role` | `string` | `"agent"` | Agent role: `orchestrator`, `agent`, `observer`, `human`, `tool-server` |
|
|
214
257
|
| `debug` | `boolean` | `false` | Enable debug logging |
|
|
215
|
-
| `rooms` | `string[]` | `["default-workflow"]` | Rooms to auto-join on
|
|
216
|
-
| `lobby` | `string` | — | Lobby slug for cross-room presence observation |
|
|
217
|
-
| `presence` | `AgentPresenceData` | — | Presence data advertised to other agents |
|
|
218
|
-
| `clientOptions` | `Partial<NoLagOptions>` | — | Additional options passed to `@nolag/js-sdk` |
|
|
258
|
+
| `rooms` | `string[]` | `["default-workflow"]` | Rooms to auto-join on first setup |
|
|
259
|
+
| `lobby` | `string` | — | Lobby slug for cross-room presence observation (optional) |
|
|
260
|
+
| `presence` | `AgentPresenceData` | — | Presence data advertised to other agents (overrides `name`/`role`) |
|
|
219
261
|
|
|
220
262
|
#### Methods
|
|
221
263
|
|
|
222
264
|
| Method | Returns | Description |
|
|
223
265
|
|--------|---------|-------------|
|
|
224
|
-
| `
|
|
225
|
-
| `
|
|
266
|
+
| `ready()` | `Promise<void>` | Resolves when wrapper setup completed |
|
|
267
|
+
| `detach()` | `void` | Release handlers and topics (terminal; never closes the socket) |
|
|
226
268
|
| `room(name)` | `AgentRoom` | Get or create a room (auto-joins if not already joined) |
|
|
227
|
-
| `subscribeLobby(slug)` | `Promise<
|
|
269
|
+
| `subscribeLobby(slug)` | `Promise<LobbyPresenceState>` | Subscribe to a lobby for cross-room presence |
|
|
228
270
|
|
|
229
271
|
#### Properties
|
|
230
272
|
|
|
231
273
|
| Property | Type | Description |
|
|
232
274
|
|----------|------|-------------|
|
|
233
275
|
| `agentId` | `string` | The agent's unique ID |
|
|
276
|
+
| `client` | `NoLagSocket` | The injected core client |
|
|
234
277
|
| `connected` | `boolean` | Whether currently connected |
|
|
235
278
|
| `rooms` | `ReadonlyMap<string, AgentRoom>` | All joined rooms |
|
|
236
279
|
|
|
@@ -238,9 +281,10 @@ const agents = new NoLagAgents(token: string, options?: NoLagAgentsOptions);
|
|
|
238
281
|
|
|
239
282
|
| Event | Payload | Description |
|
|
240
283
|
|-------|---------|-------------|
|
|
241
|
-
| `connected` | — | Connected to NoLag |
|
|
284
|
+
| `connected` | — | Connected to NoLag (first setup complete) |
|
|
242
285
|
| `disconnected` | `reason: string` | Disconnected |
|
|
243
|
-
| `
|
|
286
|
+
| `reconnecting` | — | Connection dropped; reconnect in progress |
|
|
287
|
+
| `reconnected` | — | Reconnected and restored after disconnect |
|
|
244
288
|
| `error` | `Error` | Connection or protocol error |
|
|
245
289
|
|
|
246
290
|
### `AgentRoom`
|
package/dist/AgentRoom.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RoomContext } from "@nolag/js-sdk";
|
|
1
2
|
import { EventEmitter } from "./EventEmitter";
|
|
2
3
|
import type { AgentRoomEvents, TaskEnvelope, ResultEnvelope, AgentPresenceData } from "./types";
|
|
3
4
|
/**
|
|
@@ -20,17 +21,23 @@ export interface ConnectedAgent {
|
|
|
20
21
|
status?: "online" | "offline" | "waking";
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
|
-
* AgentRoom —
|
|
24
|
+
* AgentRoom — a single agent-coordination room (scoped unit).
|
|
24
25
|
*
|
|
25
|
-
*
|
|
26
|
-
* presence-based service discovery, and capability
|
|
26
|
+
* Wraps a RoomContext from @nolag/js-sdk with typed pub/sub for agent
|
|
27
|
+
* coordination topics, presence-based service discovery, and capability
|
|
28
|
+
* routing.
|
|
29
|
+
*
|
|
30
|
+
* Created via `NoLagAgents.room(name)`. Do not instantiate directly. Presence
|
|
31
|
+
* events are routed in by the parent NoLagAgents (which owns the shared
|
|
32
|
+
* client's connection-level presence handlers); the room only wires its own
|
|
33
|
+
* topic handlers on its RoomContext, and cleanup removes exactly those.
|
|
27
34
|
*
|
|
28
35
|
* @example
|
|
29
36
|
* ```typescript
|
|
30
37
|
* const room = agents.room('default-workflow');
|
|
31
38
|
*
|
|
32
39
|
* // Service discovery - see who's connected
|
|
33
|
-
* const
|
|
40
|
+
* const connected = room.getConnectedAgents();
|
|
34
41
|
* const summarizers = room.findAgents('summarize');
|
|
35
42
|
*
|
|
36
43
|
* // Capability-filtered task handler
|
|
@@ -41,12 +48,15 @@ export declare class AgentRoom extends EventEmitter<AgentRoomEvents> {
|
|
|
41
48
|
readonly name: string;
|
|
42
49
|
readonly agentId: string;
|
|
43
50
|
private _roomContext;
|
|
44
|
-
private _client;
|
|
45
51
|
private _log;
|
|
46
52
|
private _presence;
|
|
53
|
+
private _appName;
|
|
54
|
+
private _isConnected;
|
|
47
55
|
/** Registry of connected agents discovered via presence */
|
|
48
56
|
private _agents;
|
|
49
|
-
|
|
57
|
+
private _topicHandlers;
|
|
58
|
+
/** @internal */
|
|
59
|
+
constructor(name: string, roomContext: RoomContext, log: (...args: unknown[]) => void, agentId: string, appName: string, isConnected: () => boolean, presence?: AgentPresenceData);
|
|
50
60
|
/** Get all currently connected agents */
|
|
51
61
|
getConnectedAgents(): ConnectedAgent[];
|
|
52
62
|
/** Find agents that have a specific capability */
|
|
@@ -59,12 +69,8 @@ export declare class AgentRoom extends EventEmitter<AgentRoomEvents> {
|
|
|
59
69
|
setPresence(data: AgentPresenceData): void;
|
|
60
70
|
/** Fetch current presence snapshot for this room */
|
|
61
71
|
fetchPresence(): Promise<ConnectedAgent[]>;
|
|
62
|
-
/**
|
|
63
|
-
* @internal Emit a presence event (used by NoLagAgents for lobby forwarding)
|
|
64
|
-
*/
|
|
65
|
-
_emitPresence(event: 'presenceJoin' | 'presenceLeave' | 'presenceUpdate', actorId: string, data?: AgentPresenceData): void;
|
|
66
72
|
/** Get the underlying RoomContext for advanced usage */
|
|
67
|
-
get context():
|
|
73
|
+
get context(): RoomContext;
|
|
68
74
|
/** Publish to the tasks topic */
|
|
69
75
|
publishTask(envelope: TaskEnvelope): void;
|
|
70
76
|
/** Publish to the results topic — directed to the dispatcher via filter when replyTo is set */
|
|
@@ -84,9 +90,23 @@ export declare class AgentRoom extends EventEmitter<AgentRoomEvents> {
|
|
|
84
90
|
publishTools(data: Record<string, unknown>): void;
|
|
85
91
|
/** Publish to the approval topic (retained) */
|
|
86
92
|
publishApproval(data: Record<string, unknown>): void;
|
|
93
|
+
/** @internal Re-apply local presence after a reconnect (core does not restore it) */
|
|
94
|
+
_updateLocalPresence(): void;
|
|
95
|
+
/** @internal Route a presence:join event in from the parent */
|
|
96
|
+
_handlePresenceJoin(actorId: string, data: Record<string, unknown>): void;
|
|
97
|
+
/** @internal Route a presence:leave event in from the parent */
|
|
98
|
+
_handlePresenceLeave(actorId: string): void;
|
|
99
|
+
/** @internal Route a presence:update event in from the parent */
|
|
100
|
+
_handlePresenceUpdate(actorId: string, data: Record<string, unknown>): void;
|
|
101
|
+
/**
|
|
102
|
+
* @internal Unsubscribe topics (when connected) and remove exactly this
|
|
103
|
+
* room's handler refs. Handler-specific removal only: the client may be
|
|
104
|
+
* shared, and a bare off(topic) would strip other consumers' handlers too.
|
|
105
|
+
*/
|
|
106
|
+
_cleanup(): void;
|
|
107
|
+
private _on;
|
|
87
108
|
private _publish;
|
|
88
109
|
private _toConnectedAgent;
|
|
89
110
|
private _fetchInitialPresence;
|
|
90
|
-
private _wirePresenceListeners;
|
|
91
111
|
private _wireTopicListeners;
|
|
92
112
|
}
|
package/dist/NoLagAgents.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { LobbyPresenceState, NoLagSocket } from "@nolag/js-sdk";
|
|
1
2
|
import { EventEmitter } from "./EventEmitter";
|
|
2
3
|
import { AgentRoom } from "./AgentRoom";
|
|
3
4
|
import type { NoLagAgentsOptions, AgentClientEvents } from "./types";
|
|
@@ -7,53 +8,123 @@ import type { NoLagAgentsOptions, AgentClientEvents } from "./types";
|
|
|
7
8
|
* Provides typed rooms for multi-agent patterns: Handoff, Blackboard,
|
|
8
9
|
* Inbox, Tools, Approval, and Observe.
|
|
9
10
|
*
|
|
11
|
+
* The wrapper NEVER manages the connection. The app owns one core NoLag
|
|
12
|
+
* client (shared by any number of wrappers on distinct apps) and the
|
|
13
|
+
* wrapper attaches to it at construction and releases it via `detach()`.
|
|
14
|
+
*
|
|
10
15
|
* @example
|
|
11
16
|
* ```typescript
|
|
17
|
+
* import { NoLag } from '@nolag/js-sdk';
|
|
12
18
|
* import { NoLagAgents } from '@nolag/agents';
|
|
13
19
|
*
|
|
14
|
-
* const
|
|
20
|
+
* const client = NoLag(async () => (await (await fetch('/api/nolag-token')).json()).token);
|
|
21
|
+
* const agents = new NoLagAgents({
|
|
22
|
+
* client,
|
|
15
23
|
* appName: 'my-workflow',
|
|
16
24
|
* agentId: 'worker-1',
|
|
17
25
|
* presence: { name: 'worker-1', role: 'agent', capabilities: ['summarize'] },
|
|
18
26
|
* });
|
|
19
|
-
*
|
|
27
|
+
*
|
|
28
|
+
* await client.connect(); // the app owns the connection
|
|
29
|
+
* await agents.ready(); // wrapper setup done (identity, rooms, lobby)
|
|
20
30
|
*
|
|
21
31
|
* const room = agents.room('default-workflow');
|
|
22
|
-
* room.
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
32
|
+
* room.on('task', (task) => console.log('New task:', task));
|
|
33
|
+
*
|
|
34
|
+
* agents.detach(); // wrapper releases its handlers and topics
|
|
35
|
+
* client.disconnect(); // the app closes the socket
|
|
26
36
|
* ```
|
|
27
37
|
*/
|
|
28
38
|
export declare class NoLagAgents extends EventEmitter<AgentClientEvents> {
|
|
29
|
-
private _token;
|
|
30
|
-
private _options;
|
|
31
39
|
private _client;
|
|
32
|
-
private
|
|
40
|
+
private _options;
|
|
33
41
|
private _rooms;
|
|
42
|
+
private _lobby;
|
|
34
43
|
private _log;
|
|
35
|
-
private
|
|
36
|
-
|
|
44
|
+
private _epoch;
|
|
45
|
+
private _detached;
|
|
46
|
+
private _isReady;
|
|
47
|
+
private _readyResolve;
|
|
48
|
+
private _readyReject;
|
|
49
|
+
private _readyPromise;
|
|
50
|
+
private _lobbyRefreshTimer;
|
|
51
|
+
private _onConnectRef;
|
|
52
|
+
private _onDisconnectRef;
|
|
53
|
+
private _onReconnectRef;
|
|
54
|
+
private _onErrorRef;
|
|
55
|
+
private _onPresenceJoinRef;
|
|
56
|
+
private _onPresenceLeaveRef;
|
|
57
|
+
private _onPresenceUpdateRef;
|
|
58
|
+
private _onLobbyJoinRef;
|
|
59
|
+
private _onLobbyLeaveRef;
|
|
60
|
+
private _onLobbyUpdateRef;
|
|
61
|
+
constructor(options: NoLagAgentsOptions);
|
|
37
62
|
/** The agent's unique ID */
|
|
38
63
|
get agentId(): string;
|
|
39
|
-
/** Whether the
|
|
64
|
+
/** Whether the underlying connection is established (connected ≠ ready) */
|
|
40
65
|
get connected(): boolean;
|
|
66
|
+
/** The injected core client (owned by the app, not the wrapper) */
|
|
67
|
+
get client(): NoLagSocket;
|
|
41
68
|
/** Map of joined rooms */
|
|
42
69
|
get rooms(): ReadonlyMap<string, AgentRoom>;
|
|
43
|
-
/** Connect to NoLag and join configured rooms */
|
|
44
|
-
connect(): Promise<void>;
|
|
45
70
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
71
|
+
* Resolves once the wrapper's first setup completed (identity, configured
|
|
72
|
+
* rooms and — when configured — the lobby ready; equivalently, once
|
|
73
|
+
* 'connected' has fired). Rejects only if detach() is called before that.
|
|
74
|
+
* Client auth failures surface via the app's own `await client.connect()`.
|
|
75
|
+
*/
|
|
76
|
+
ready(): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Detach from the client: remove every handler this wrapper added,
|
|
79
|
+
* unsubscribe its topics and lobby (when connected), clear state.
|
|
80
|
+
* Terminal and idempotent; never touches the socket. To use agents again,
|
|
81
|
+
* construct a new instance.
|
|
50
82
|
*/
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
83
|
+
detach(): void;
|
|
84
|
+
private _onConnect;
|
|
85
|
+
/**
|
|
86
|
+
* One setup pass per connection epoch. Serves both initial setup (epoch 1)
|
|
87
|
+
* and reconnect restore (epoch > 1). Aborts silently whenever a newer
|
|
88
|
+
* epoch started or the wrapper detached — checked after every await.
|
|
89
|
+
*/
|
|
90
|
+
private _runSetup;
|
|
91
|
+
private _scheduleLobbyRefresh;
|
|
54
92
|
/**
|
|
55
93
|
* Get or create an AgentRoom wrapper.
|
|
56
94
|
* If the room hasn't been joined yet, it will be joined automatically.
|
|
57
95
|
*/
|
|
58
96
|
room(name: string): AgentRoom;
|
|
97
|
+
/**
|
|
98
|
+
* Subscribe to a lobby for cross-room presence observation. Lobby presence
|
|
99
|
+
* events are forwarded into all AgentRooms. Prefer the `lobby` constructor
|
|
100
|
+
* option — this method is for on-demand subscription after ready.
|
|
101
|
+
*
|
|
102
|
+
* Returns the initial presence snapshot.
|
|
103
|
+
*/
|
|
104
|
+
subscribeLobby(lobbySlug: string): Promise<LobbyPresenceState>;
|
|
105
|
+
private _assertUsable;
|
|
106
|
+
private _joinRoomInternal;
|
|
107
|
+
/**
|
|
108
|
+
* On a shared client, presence events from other apps' wrappers arrive on
|
|
109
|
+
* the same connection-level events. Wrappers stamp their presence with a
|
|
110
|
+
* `__scope` (their appName); a mismatched tag means another app's data.
|
|
111
|
+
* Untagged presence is accepted (older peers in this same app).
|
|
112
|
+
*/
|
|
113
|
+
private _foreignScope;
|
|
114
|
+
private _handleRoomPresenceJoin;
|
|
115
|
+
private _handleRoomPresenceLeave;
|
|
116
|
+
private _handleRoomPresenceUpdate;
|
|
117
|
+
/** Rooms a presence event targets: the named room, or all when unscoped. */
|
|
118
|
+
private _targetRooms;
|
|
119
|
+
private _handleLobbyJoin;
|
|
120
|
+
private _handleLobbyLeave;
|
|
121
|
+
private _handleLobbyUpdate;
|
|
122
|
+
/**
|
|
123
|
+
* Reconcile the rooms' agent registries against a fresh lobby snapshot,
|
|
124
|
+
* routing each present actor in as a join. One path for initial hydration,
|
|
125
|
+
* reconnect restore, and the deferred refetch.
|
|
126
|
+
*/
|
|
127
|
+
private _diffHydrateLobby;
|
|
128
|
+
/** Derive presence identity from name/role options when no presence given. */
|
|
129
|
+
private _presenceFromIdentity;
|
|
59
130
|
}
|
package/dist/browser.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{NoLag as e}from"@nolag/js-sdk";class t{constructor(){this._handlers=new Map}on(e,t){return this._handlers.has(e)||this._handlers.set(e,new Set),this._handlers.get(e).add(t),this}off(e,t){return t?this._handlers.get(e)?.delete(t):this._handlers.delete(e),this}removeAllListeners(){return this._handlers.clear(),this}emit(e,...t){const o=this._handlers.get(e);if(o)for(const s of o)try{s(...t)}catch(t){console.error(`Error in ${String(e)} handler:`,t)}}listenerCount(e){return this._handlers.get(e)?.size??0}}const o="tasks",s="results",n="state",r="events",i="inbox",a="tools",c="approval",l=2;class h extends t{constructor(e,t,o,s,n,r){if(super(),this._agents=new Map,this.name=e,this.agentId=n,this._roomContext=t,this._client=o,this._log=s,this._presence=r,this._wireTopicListeners(),this._wirePresenceListeners(),r){const t={protocol:2,...r};this._presence=t,this._log(`setting presence in room ${e}:`,t),this._roomContext.setPresence(t)}this._fetchInitialPresence()}getConnectedAgents(){return Array.from(this._agents.values())}findAgents(e){return Array.from(this._agents.values()).filter(t=>t.capabilities.includes(e))}hasCapability(e){return this.findAgents(e).length>0}getAvailableCapabilities(){const e=new Set;for(const t of this._agents.values())for(const o of t.capabilities)e.add(o);return Array.from(e)}setPresence(e){const t={protocol:2,...e};this._presence=t,this._log(`updating presence in room ${this.name}`),this._roomContext.setPresence(t)}async fetchPresence(){try{return(await this._roomContext.fetchPresence()||[]).map(e=>this._toConnectedAgent(e))}catch{return[]}}_emitPresence(e,t,o){"presenceLeave"===e?this.emit("presenceLeave",t):this.emit(e,t,o||{})}get context(){return this._roomContext}publishTask(e){e.createdBy||(e.createdBy=this.agentId),this._publish(o,e)}publishResult(e){e.completedBy||(e.completedBy=this.agentId),e.replyTo?this._publish(s,e,{filter:e.replyTo}):this._publish(s,e)}publishState(e){e.updatedBy||(e.updatedBy=this.agentId),this._publish(n,e,{retain:!0})}publishEvent(e){e.emittedBy||(e.emittedBy=this.agentId),this._publish(r,e)}publishInbox(e){this._publish(i,e)}publishTools(e){"tool_response"===e?.type&&"string"==typeof e.replyTo&&e.replyTo?this._publish(s,e,{filter:e.replyTo}):this._publish(a,e)}publishApproval(e){this._publish(c,e,{retain:!0})}_publish(e,t,o){this._log(`publish to ${e} in room ${this.name}`),o?this._roomContext.emit(e,t,o):this._roomContext.emit(e,t)}_toConnectedAgent(e){const t=e.presence||e.data||{};return{actorId:e.actorTokenId||e.actorId||"",name:t.name||e.actorTokenId||"",role:t.role||"agent",capabilities:t.capabilities||[],metadata:t.metadata,connectedAt:e.joinedAt||Date.now(),protocol:"number"==typeof t.protocol?t.protocol:1,status:e.status}}async _fetchInitialPresence(){try{const e=await this._roomContext.fetchPresence();if(Array.isArray(e)){for(const t of e){const e=this._toConnectedAgent(t);e.actorId&&this._agents.set(e.actorId,e)}this._log(`discovered ${this._agents.size} agents in room ${this.name}`)}}catch{}}_wirePresenceListeners(){if(!this._client)return;const e=this._client;e.on?.("presence:join",e=>{if(e?.roomId===this.name||!e?.roomId){const t=e?.actorId||e?.actorTokenId,o=e?.data||e?.presence||{};if(t){const e={actorId:t,name:o.name||t,role:o.role||"agent",capabilities:o.capabilities||[],metadata:o.metadata,connectedAt:Date.now(),protocol:"number"==typeof o.protocol?o.protocol:1};this._agents.set(t,e),this._log(`agent joined room ${this.name}:`,e.name,e.capabilities),this.emit("presenceJoin",t,o)}}}),e.on?.("presence:leave",e=>{if(e?.roomId===this.name||!e?.roomId){const t=e?.actorId||e?.actorTokenId;if(t){const e=this._agents.get(t);this._agents.delete(t),this._log(`agent left room ${this.name}:`,e?.name||t),this.emit("presenceLeave",t)}}}),e.on?.("presence:update",e=>{if(e?.roomId===this.name||!e?.roomId){const t=e?.actorId||e?.actorTokenId,o=e?.data||e?.presence||{};if(t){const e=this._agents.get(t),s={actorId:t,name:o.name||e?.name||t,role:o.role||e?.role||"agent",capabilities:o.capabilities||e?.capabilities||[],metadata:o.metadata||e?.metadata,connectedAt:e?.connectedAt||Date.now(),protocol:"number"==typeof o.protocol?o.protocol:e?.protocol??1};this._agents.set(t,s),this.emit("presenceUpdate",t,o)}}})}_wireTopicListeners(){this._roomContext.subscribe(o),this._roomContext.subscribe(a),this._roomContext.subscribe(s,{loadBalance:!1,filters:[this.agentId]});const e=[n,r,i,c];for(const t of e)this._roomContext.subscribe(t,{loadBalance:!1});const t=[{topic:o,event:"task"},{topic:n,event:"stateChange"},{topic:r,event:"event"},{topic:i,event:"inbox"}];for(const{topic:e,event:o}of t)this._roomContext.on(e,t=>{this._log(`received ${e} in room ${this.name}`),this.emit(o,t)});this._roomContext.on(s,e=>{this._log(`received ${s} in room ${this.name}`),"tool_response"===e?.type?this.emit("toolResponse",e):this.emit("result",e)}),this._roomContext.on(c,e=>{this._log(`received ${c} in room ${this.name}`),"approval_response"===e?.type?this.emit("approvalResponse",e):this.emit("approvalRequest",e)}),this._roomContext.on(a,e=>{this._log(`received ${a} in room ${this.name}`),"tool_response"===e?.type?this.emit("toolResponse",e):this.emit("toolRequest",e)})}}function d(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"xxxx-xxxx-xxxx-xxxx".replace(/x/g,()=>Math.floor(16*Math.random()).toString(16))}function p(){return Date.now()}class _ extends t{constructor(e,t={}){var o;super(),this._client=null,this._appContext=null,this._rooms=new Map,this._connected=!1,this._token=e,this._options={appName:t.appName??"agents",agentId:t.agentId??d(),debug:t.debug??!1,rooms:t.rooms??["default-workflow"],lobby:t.lobby,presence:t.presence,clientOptions:t.clientOptions},this._log=(o="NoLagAgents",this._options.debug?(...e)=>{console.log(`[${o}]`,...e)}:(...e)=>{})}get agentId(){return this._options.agentId}get connected(){return this._connected}get rooms(){return this._rooms}async connect(){this._log("connecting..."),this._client=e(this._token,{...this._options.clientOptions}),this._appContext=this._client.setApp(this._options.appName),this._client.on("connected",()=>{this._connected=!0,this._log("connected"),this.emit("connected")}),this._client.on("disconnected",e=>{this._connected=!1,this._log("disconnected:",e),this.emit("disconnected",e)}),this._client.on("reconnected",()=>{this._connected=!0,this._log("reconnected"),this.emit("reconnected")}),this._client.on("error",e=>{this._log("error:",e.message),this.emit("error",e)}),await this._client.connect();for(const e of this._options.rooms)this.room(e);this._options.lobby&&await this.subscribeLobby(this._options.lobby)}async subscribeLobby(e){if(!this._appContext)throw new Error("Not connected. Call connect() before subscribing to lobbies.");this._log(`subscribing to lobby: ${e}`);const t=this._appContext.setLobby(e);this._client.on("lobbyPresence:join",e=>{const t=e?.actorId,o=e?.data||{};if(t){this._log(`lobby presence:join — ${o.name||t}`);for(const e of this._rooms.values()){const s=e._agents;s.has(t)||s.set(t,{actorId:t,name:o.name||t,role:o.role||"agent",capabilities:o.capabilities||[],metadata:o.metadata,connectedAt:Date.now()}),e._emitPresence("presenceJoin",t,o)}}}),this._client.on("lobbyPresence:leave",e=>{const t=e?.actorId;if(t){this._log(`lobby presence:leave — ${t}`);for(const e of this._rooms.values()){e._agents.delete(t),e._emitPresence("presenceLeave",t)}}}),this._client.on("lobbyPresence:update",e=>{const t=e?.actorId,o=e?.data||{};if(t)for(const e of this._rooms.values()){const s=e._agents.get(t);s&&(o.name&&(s.name=o.name),o.role&&(s.role=o.role),o.capabilities&&(s.capabilities=o.capabilities),o.metadata&&(s.metadata=o.metadata)),e._emitPresence("presenceUpdate",t,o)}});try{const e=await t.subscribe();return this._log("lobby subscribed, initial state:",Object.keys(e||{})),e||{}}catch(e){return this._log("lobby subscription failed:",e),{}}}disconnect(){this._log("disconnecting..."),this._client?.disconnect(),this._rooms.clear(),this._client=null,this._appContext=null,this._connected=!1}room(e){let t=this._rooms.get(e);if(t)return t;if(!this._appContext)throw new Error("Not connected. Call connect() before accessing rooms.");this._log(`joining room: ${e}`);const o=this._appContext.setRoom(e);return t=new h(e,o,this._client,this._log,this._options.agentId,this._options.presence),this._rooms.set(e,t),t}}class m extends Error{constructor(e,t){super(`${e} cannot succeed: every relevant agent advertises agents-protocol < 2 [${t.map(e=>`${e.name} (protocol ${e.protocol})`).join(", ")}]. Protocol >= 2 responders direct replies to the requester; older ones broadcast and their replies never reach this SDK's filtered subscription. Upgrade the responders to @nolag/agents >= 0.2.0 / nolag-agents >= 0.3.0. NOTE: 0.2.x/0.3.0 responders DO have directed replies but do not yet advertise protocol — if your responders run those versions, pass { allowLegacyResponders: true }.`),this.name="IncompatibleProtocolError"}}class u{constructor(){this._pending=new Map}register(e,t,o){return new Promise((s,n)=>{let r=null;t&&t>0&&(r=setTimeout(()=>{this._pending.delete(e);n(new Error(`${o??`Correlation ${e}`} timed out after ${t}ms`))},t)),this._pending.set(e,{resolve:s,reject:n,timer:r})})}resolve(e,t){const o=this._pending.get(e);return!!o&&(o.timer&&clearTimeout(o.timer),this._pending.delete(e),o.resolve(t),!0)}reject(e,t){const o=this._pending.get(e);return!!o&&(o.timer&&clearTimeout(o.timer),this._pending.delete(e),o.reject(t),!0)}has(e){return this._pending.has(e)}clear(){for(const[e,t]of this._pending)t.timer&&clearTimeout(t.timer),t.reject(new Error(`Correlation ${e} cancelled`));this._pending.clear()}get size(){return this._pending.size}}function g(e,t,o){return{type:"task",protocol:2,taskId:d(),correlationId:d(),replyTo:o?.replyTo,capability:e,payload:t,tags:o?.tags,priority:o?.priority??"medium",metadata:o?.metadata,createdAt:p(),createdBy:o?.createdBy,timeout:o?.timeout}}function y(e,t,o,s,n,r,i){return{type:"result",protocol:2,correlationId:t,taskId:e,status:o,payload:s,error:n,completedAt:p(),completedBy:r,replyTo:i}}function b(e,t,o,s){return{type:"state",protocol:2,key:e,value:t,version:o,updatedBy:s,updatedAt:p()}}function f(e,t,o,s="info"){return{type:"event",protocol:2,eventId:d(),severity:s,category:e,emittedBy:t,payload:o,timestamp:p()}}function I(e,t,o,s){return{type:"approval_request",protocol:2,requestId:d(),correlationId:d(),action:e,context:t,urgency:s?.urgency??"medium",requestedBy:o,requestedAt:p(),expiresAt:s?.expiresAt}}function v(e,t,o,s,n){return{type:"approval_response",protocol:2,requestId:e,correlationId:t,decision:o,respondedBy:s,reason:n,respondedAt:p()}}function w(e,t,o,s){return{type:"tool_request",protocol:2,requestId:d(),correlationId:d(),replyTo:s?.replyTo,toolName:e,arguments:t,requestedBy:o,requestedAt:p()}}function x(e,t,o,s,n,r,i){return{type:"tool_response",protocol:2,requestId:e,correlationId:t,status:o,result:s,error:n,respondedBy:r,respondedAt:p(),replyTo:i}}class A{constructor(e){this._correlations=new u,this._warnedMixed=!1,this._room=e,this._room.on("result",e=>{this._correlations.resolve(e.correlationId,e)})}async dispatch(e,t,o){if(!o?.allowNoWorkers){const t=this._room.findAgents(e);if(0===(o?.requireOnline?t.filter(e=>void 0===e.status||"online"===e.status):t).length)throw new Error(`No ${o?.requireOnline?"online ":""}agent with capability "${e}" is available. Available capabilities: [${this._room.getAvailableCapabilities().join(", ")}]. Connected agents: ${this._room.getConnectedAgents().length}. Use { allowNoWorkers: true } to dispatch anyway.`)}const s=g(e,t,{...o,createdBy:o?.createdBy??this._room.agentId,replyTo:o?.replyTo??this._room.agentId});if(this._room.publishTask(s),o?.waitForResult){const t=this._room.findAgents(e);if(!o?.allowLegacyResponders&&t.length>0){const o=t.filter(e=>e.protocol>=2);if(0===o.length)throw new m(`Task '${e}' dispatch with waitForResult`,t.map(e=>({name:e.name,protocol:e.protocol})));o.length<t.length&&!this._warnedMixed&&(this._warnedMixed=!0,console.warn(`[nolag-agents] Capability '${e}' has workers on agents-protocol < 2: `+t.filter(e=>e.protocol<2).map(e=>e.name).join(", ")+". Their results may not be delivered — upgrade them."))}return this._correlations.register(s.correlationId,o.timeout,`Task '${e}' dispatch (${t.length} capable worker${1===t.length?"":"s"} visible). Likely causes: worker crashed mid-task, worker on agents-protocol < 2 (results not directed), or the room is not deliverable`)}}onTask(e,t){const o="function"==typeof e?"*":e,s="function"==typeof e?e:t;this._room.on("task",e=>{if("*"!==o&&!o.includes(e.capability))return;s(e,(t,o,s)=>{const n=y(e.taskId,e.correlationId,t,o,s,this._room.agentId,e.replyTo??e.createdBy);this._room.publishResult(n)})})}getCapableAgents(e){return this._room.findAgents(e)}dispose(){this._correlations.clear()}}class T{constructor(e,t){this._room=e,this._agentId=t}send(e,t){const o={messageId:d(),from:this._agentId,to:e,payload:t,createdAt:p()};this._room.publishInbox(o)}onMessage(e){this._room.on("inbox",t=>{const o=t;o.to===this._agentId&&e(o)})}}class ${constructor(e,t){this._state=new Map,this._room=e,this._agentId=t,this._room.on("stateChange",e=>{this._state.set(e.key,e)})}set(e,t){const o=this._state.get(e),s=b(e,t,o?o.version+1:1,this._agentId);this._state.set(e,s),this._room.publishState(s)}get(e){return this._state.get(e)?.value}getEnvelope(e){return this._state.get(e)}getAll(){return this._state}onChange(e,t){this._room.on("stateChange",o=>{o.key===e&&t(o)})}}class C{constructor(e,t){this._room=e,this._emittedBy=t}emit(e,t,o="info"){const s=f(e,this._emittedBy,t,o);this._room.publishEvent(s)}on(e,t){this._room.on("event",o=>{t?.category&&o.category!==t.category||t?.severity&&o.severity!==t.severity||e(o)})}}class k{constructor(e,t){this._correlations=new u,this._room=e,this._agentId=t,this._room.on("approvalResponse",e=>{this._correlations.resolve(e.correlationId,e)})}async request(e,t,o){const s=I(e,t,this._agentId,{urgency:o?.urgency,expiresAt:o?.expiresAt});return this._room.publishApproval(s),this._correlations.register(s.correlationId,o?.timeout)}onRequest(e){this._room.on("approvalRequest",t=>{e(t,(e,o)=>{const s=v(t.requestId,t.correlationId,e,this._agentId,o);this._room.publishApproval(s)})})}dispose(){this._correlations.clear()}}class R{constructor(e,t){this._correlations=new u,this._handlers=new Map,this._warnedMixed=!1,this._room=e,this._agentId=t,this._room.on("toolResponse",e=>{this._correlations.resolve(e.correlationId,e)}),this._room.on("toolRequest",async e=>{const t=this._handlers.get(e.toolName),o=e.replyTo??e.requestedBy;if(!t){if(!this._ownsNamespace(e.toolName))return;const t=x(e.requestId,e.correlationId,"error",null,{code:"NO_HANDLER",message:`Agent '${this._agentId}' has no handler for tool '${e.toolName}'`},this._agentId,o);return void this._room.publishTools(t)}try{const s=await t(e.arguments),n=x(e.requestId,e.correlationId,"success",s,void 0,this._agentId,o);this._room.publishTools(n)}catch(t){const s=x(e.requestId,e.correlationId,"error",null,{code:"TOOL_ERROR",message:t instanceof Error?t.message:String(t)},this._agentId,o);this._room.publishTools(s)}})}register(e,t){this._handlers.set(e,t)}_ownsNamespace(e){if(0===this._handlers.size)return!1;const t=e.includes(".")?e.slice(0,e.indexOf(".")):null;for(const e of this._handlers.keys()){if((e.includes(".")?e.slice(0,e.indexOf(".")):null)===t)return!0}return!1}async invoke(e,t,o){const s=this._room.getConnectedAgents().filter(e=>"tool-server"===e.role);if(!o?.allowLegacyResponders&&s.length>0){const t=s.filter(e=>e.protocol>=2);if(0===t.length)throw new m(`Tool '${e}' invocation`,s.map(e=>({name:e.name,protocol:e.protocol})));t.length<s.length&&!this._warnedMixed&&(this._warnedMixed=!0,console.warn(`[nolag-agents] Room '${this._room.name}' has tool servers on agents-protocol < 2: `+s.filter(e=>e.protocol<2).map(e=>e.name).join(", ")+". Their replies may not be delivered — upgrade them."))}const n=w(e,t,this._agentId,{replyTo:this._room.agentId});this._room.publishTools(n);const r=s.length;return this._correlations.register(n.correlationId,o?.timeout,`Tool '${e}' invocation in room '${this._room.name}' (${r} tool-server${1===r?"":"s"} visible). Likely causes: no agent has this tool registered (pre-0.3.0 responders don't NACK), the responder is offline, or the room is not deliverable (watch the room 'error' events)`)}dispose(){this._correlations.clear(),this._handlers.clear()}}const q={CAPABILITY:"capability",PRIORITY:"priority",ROLE:"role",SEVERITY:"severity",URGENCY:"urgency",TENANT:"tenant"},B={REQUIRES_HUMAN:"requires_human",REQUIRES_AUDIT:"requires_audit"};function E(e,t){return`${e}:${t}`}export{l as AGENTS_PROTOCOL_VERSION,h as AgentRoom,k as Approve,$ as Blackboard,u as CorrelationManager,t as EventEmitter,A as Handoff,T as Inbox,m as IncompatibleProtocolError,_ as NoLagAgents,C as Observe,B as TAG_FLAGS,q as TAG_PREFIX,R as Tools,I as createApprovalRequest,v as createApprovalResponse,f as createEventEnvelope,y as createResultEnvelope,b as createStateEnvelope,g as createTaskEnvelope,w as createToolRequest,x as createToolResponse,E as tag};
|
|
1
|
+
class e{constructor(){this._handlers=new Map}on(e,t){return this._handlers.has(e)||this._handlers.set(e,new Set),this._handlers.get(e).add(t),this}off(e,t){return t?this._handlers.get(e)?.delete(t):this._handlers.delete(e),this}removeAllListeners(){return this._handlers.clear(),this}emit(e,...t){const o=this._handlers.get(e);if(o)for(const s of o)try{s(...t)}catch(t){console.error(`Error in ${String(e)} handler:`,t)}}listenerCount(e){return this._handlers.get(e)?.size??0}}const t="tasks",o="results",s="state",n="events",i="inbox",r="tools",a="approval",c=2;class h extends e{constructor(e,t,o,s,n,i,r){super(),this._agents=new Map,this._topicHandlers=[],this.name=e,this.agentId=s,this._roomContext=t,this._log=o,this._appName=n,this._isConnected=i,this._presence=r,this._wireTopicListeners(),r&&(this._presence={protocol:2,...r},this._log(`setting presence in room ${e}:`,this._presence),this._roomContext.setPresence({...this._presence,__scope:n})),this._fetchInitialPresence()}getConnectedAgents(){return Array.from(this._agents.values())}findAgents(e){return Array.from(this._agents.values()).filter(t=>t.capabilities.includes(e))}hasCapability(e){return this.findAgents(e).length>0}getAvailableCapabilities(){const e=new Set;for(const t of this._agents.values())for(const o of t.capabilities)e.add(o);return Array.from(e)}setPresence(e){this._presence={protocol:2,...e},this._log(`updating presence in room ${this.name}`),this._roomContext.setPresence({...this._presence,__scope:this._appName})}async fetchPresence(){try{return(await this._roomContext.fetchPresence()||[]).map(e=>this._toConnectedAgent(e))}catch{return[]}}get context(){return this._roomContext}publishTask(e){e.createdBy||(e.createdBy=this.agentId),this._publish(t,e)}publishResult(e){e.completedBy||(e.completedBy=this.agentId),e.replyTo?this._publish(o,e,{filter:e.replyTo}):this._publish(o,e)}publishState(e){e.updatedBy||(e.updatedBy=this.agentId),this._publish(s,e,{retain:!0})}publishEvent(e){e.emittedBy||(e.emittedBy=this.agentId),this._publish(n,e)}publishInbox(e){this._publish(i,e)}publishTools(e){"tool_response"===e?.type&&"string"==typeof e.replyTo&&e.replyTo?this._publish(o,e,{filter:e.replyTo}):this._publish(r,e)}publishApproval(e){this._publish(a,e,{retain:!0})}_updateLocalPresence(){this._presence&&this._roomContext.setPresence({...this._presence,__scope:this._appName})}_handlePresenceJoin(e,t){const o=t||{},s={actorId:e,name:o.name||e,role:o.role||"agent",capabilities:o.capabilities||[],metadata:o.metadata,connectedAt:Date.now(),protocol:"number"==typeof o.protocol?o.protocol:1};this._agents.set(e,s),this._log(`agent joined room ${this.name}:`,s.name,s.capabilities),this.emit("presenceJoin",e,o)}_handlePresenceLeave(e){const t=this._agents.get(e);this._agents.delete(e),this._log(`agent left room ${this.name}:`,t?.name||e),this.emit("presenceLeave",e)}_handlePresenceUpdate(e,t){const o=t||{},s=this._agents.get(e),n={actorId:e,name:o.name||s?.name||e,role:o.role||s?.role||"agent",capabilities:o.capabilities||s?.capabilities||[],metadata:o.metadata||s?.metadata,connectedAt:s?.connectedAt||Date.now(),protocol:"number"==typeof o.protocol?o.protocol:s?.protocol??1};this._agents.set(e,n),this.emit("presenceUpdate",e,o)}_cleanup(){if(this._log(`room cleanup: ${this.name}`),this._isConnected()){const e=new Set(this._topicHandlers.map(e=>e.topic));for(const t of e)this._roomContext.unsubscribe(t)}for(const{topic:e,handler:t}of this._topicHandlers)this._roomContext.off(e,t);this._topicHandlers=[],this._agents.clear(),this.removeAllListeners()}_on(e,t){this._topicHandlers.push({topic:e,handler:t}),this._roomContext.on(e,t)}_publish(e,t,o){this._log(`publish to ${e} in room ${this.name}`),o?this._roomContext.emit(e,t,o):this._roomContext.emit(e,t)}_toConnectedAgent(e){const t=e.presence||e.data||{};return{actorId:e.actorTokenId||e.actorId||"",name:t.name||e.actorTokenId||"",role:t.role||"agent",capabilities:t.capabilities||[],metadata:t.metadata,connectedAt:e.joinedAt||Date.now(),protocol:"number"==typeof t.protocol?t.protocol:1,status:e.status}}async _fetchInitialPresence(){try{const e=await this._roomContext.fetchPresence();if(Array.isArray(e)){for(const t of e){const e=this._toConnectedAgent(t);e.actorId&&this._agents.set(e.actorId,e)}this._log(`discovered ${this._agents.size} agents in room ${this.name}`)}}catch{}}_wireTopicListeners(){this._roomContext.subscribe(t),this._roomContext.subscribe(r),this._roomContext.subscribe(o,{loadBalance:!1,filters:[this.agentId]});const e=[s,n,i,a];for(const t of e)this._roomContext.subscribe(t,{loadBalance:!1});const c=[{topic:t,event:"task"},{topic:s,event:"stateChange"},{topic:n,event:"event"},{topic:i,event:"inbox"}];for(const{topic:e,event:t}of c)this._on(e,o=>{this._log(`received ${e} in room ${this.name}`),this.emit(t,o)});this._on(o,e=>{this._log(`received ${o} in room ${this.name}`),"tool_response"===e?.type?this.emit("toolResponse",e):this.emit("result",e)}),this._on(a,e=>{this._log(`received ${a} in room ${this.name}`),"approval_response"===e?.type?this.emit("approvalResponse",e):this.emit("approvalRequest",e)}),this._on(r,e=>{this._log(`received ${r} in room ${this.name}`),"tool_response"===e?.type?this.emit("toolResponse",e):this.emit("toolRequest",e)})}}function l(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"xxxx-xxxx-xxxx-xxxx".replace(/x/g,()=>Math.floor(16*Math.random()).toString(16))}function _(e,t){return t?(...t)=>{console.log(`[${e}]`,...t)}:(...e)=>{}}function d(){return Date.now()}const p=new WeakMap;class u extends e{constructor(e){if(super(),this._rooms=new Map,this._lobby=null,this._epoch=0,this._detached=!1,this._isReady=!1,this._lobbyRefreshTimer=null,this._onConnectRef=()=>this._onConnect(),this._onDisconnectRef=e=>{this._log("disconnected:",e),this.emit("disconnected",e)},this._onReconnectRef=()=>{this._log("reconnecting..."),this.emit("reconnecting")},this._onErrorRef=e=>{this._log("error:",e?.message??e),this.emit("error",e)},this._onPresenceJoinRef=e=>this._handleRoomPresenceJoin(e),this._onPresenceLeaveRef=e=>this._handleRoomPresenceLeave(e),this._onPresenceUpdateRef=e=>this._handleRoomPresenceUpdate(e),this._onLobbyJoinRef=e=>this._handleLobbyJoin(e),this._onLobbyLeaveRef=e=>this._handleLobbyLeave(e),this._onLobbyUpdateRef=e=>this._handleLobbyUpdate(e),!e?.client)throw new TypeError("NoLagAgents requires an injected NoLag client: new NoLagAgents({ client, ... })");this._client=e.client,this._options={appName:e.appName??"agents",agentId:e.agentId??l(),name:e.name,role:e.role,debug:e.debug??!1,rooms:e.rooms??["default-workflow"],lobby:e.lobby,presence:e.presence??this._presenceFromIdentity(e)},this._log=_("NoLagAgents",this._options.debug),this._readyPromise=new Promise((e,t)=>{this._readyResolve=e,this._readyReject=t}),this._readyPromise.catch(()=>{}),function(e,t,o){let s=p.get(e);s||(s=new Map,p.set(e,s));const n=s.get(t);n&&console.warn(`[${o}] Another wrapper (${n}) is already attached to this client for app "${t}". Use one wrapper per (client, app) — detach the other instance first.`),s.set(t,o)}(this._client,this._options.appName,"NoLagAgents"),this._client.on("connect",this._onConnectRef),this._client.on("disconnect",this._onDisconnectRef),this._client.on("reconnect",this._onReconnectRef),this._client.on("error",this._onErrorRef),this._client.on("presence:join",this._onPresenceJoinRef),this._client.on("presence:leave",this._onPresenceLeaveRef),this._client.on("presence:update",this._onPresenceUpdateRef),this._client.on("lobbyPresence:join",this._onLobbyJoinRef),this._client.on("lobbyPresence:leave",this._onLobbyLeaveRef),this._client.on("lobbyPresence:update",this._onLobbyUpdateRef),queueMicrotask(()=>{0===this._epoch&&!this._detached&&this._client.connected&&this._onConnect()})}get agentId(){return this._options.agentId}get connected(){return!this._detached&&this._client.connected}get client(){return this._client}get rooms(){return this._rooms}ready(){return this._readyPromise}detach(){if(!this._detached){this._log("detaching..."),this._detached=!0,this._epoch++,this._lobbyRefreshTimer&&(clearTimeout(this._lobbyRefreshTimer),this._lobbyRefreshTimer=null),this._client.off("connect",this._onConnectRef),this._client.off("disconnect",this._onDisconnectRef),this._client.off("reconnect",this._onReconnectRef),this._client.off("error",this._onErrorRef),this._client.off("presence:join",this._onPresenceJoinRef),this._client.off("presence:leave",this._onPresenceLeaveRef),this._client.off("presence:update",this._onPresenceUpdateRef),this._client.off("lobbyPresence:join",this._onLobbyJoinRef),this._client.off("lobbyPresence:leave",this._onLobbyLeaveRef),this._client.off("lobbyPresence:update",this._onLobbyUpdateRef);for(const e of[...this._rooms.keys()])this._rooms.get(e)._cleanup(),this._rooms.delete(e);if(this._lobby&&this._client.connected)try{this._lobby.unsubscribe()}catch{}var e,t;this._lobby=null,e=this._client,t=this._options.appName,p.get(e)?.delete(t),this._isReady||this._readyReject(new Error("NoLagAgents detached before ready"))}}_onConnect(){this._epoch++,this._runSetup(this._epoch)}async _runSetup(e){const t=()=>e!==this._epoch||this._detached;if(this._log(this._isReady?"restoring after reconnect...":"setting up..."),this._log("agentId:",this._options.agentId,"→ actorId:",this._client.actorId),this._isReady)for(const e of this._rooms.values())e._updateLocalPresence();else for(const e of this._options.rooms)this._joinRoomInternal(e);if(this._options.lobby){this._lobby||(this._lobby=this._client.setApp(this._options.appName).setLobby(this._options.lobby));try{const e=await this._lobby.subscribe();if(t())return;this._diffHydrateLobby(e),this._log("lobby subscribed:",this._options.lobby)}catch(e){if(t())return;this._log("lobby subscription failed:",e)}}t()||(this._isReady?this.emit("reconnected"):(this._isReady=!0,this._readyResolve(),this.emit("connected")),this._options.lobby&&this._scheduleLobbyRefresh(e))}_scheduleLobbyRefresh(e){this._lobbyRefreshTimer&&clearTimeout(this._lobbyRefreshTimer),this._lobbyRefreshTimer=setTimeout(()=>{this._lobbyRefreshTimer=null,e===this._epoch&&!this._detached&&this._client.connected&&this._lobby&&this._lobby.fetchPresence().then(t=>{e!==this._epoch||this._detached||this._diffHydrateLobby(t)}).catch(()=>{})},2e3)}room(e){this._assertUsable();const t=this._rooms.get(e);return t||this._joinRoomInternal(e)}async subscribeLobby(e){this._assertUsable(),this._log(`subscribing to lobby: ${e}`),this._options.lobby=e,this._lobby||(this._lobby=this._client.setApp(this._options.appName).setLobby(e));try{const e=await this._lobby.subscribe();return this._detached||this._diffHydrateLobby(e),e||{}}catch(e){return this._log("lobby subscription failed:",e),{}}}_assertUsable(){if(this._detached)throw new Error("NoLagAgents has been detached — construct a new instance");if(!this._isReady)throw new Error('NoLagAgents not ready — await ready() or the "connected" event')}_joinRoomInternal(e){this._log(`joining room: ${e}`);const t=this._client.setApp(this._options.appName).setRoom(e),o=new h(e,t,_(`AgentRoom:${e}`,this._options.debug),this._options.agentId,this._options.appName,()=>this._client.connected,this._options.presence);return this._rooms.set(e,o),o}_foreignScope(e){const t=e?.__scope;return"string"==typeof t&&t!==this._options.appName}_handleRoomPresenceJoin(e){if(e.actorTokenId===this._client.actorId)return;const t=e.presence||{};if(this._foreignScope(t))return;const o=e.roomId;for(const s of this._targetRooms(o))s._handlePresenceJoin(e.actorTokenId,t)}_handleRoomPresenceLeave(e){if(e.actorTokenId===this._client.actorId)return;const t=e.roomId;for(const o of this._targetRooms(t))o._handlePresenceLeave(e.actorTokenId)}_handleRoomPresenceUpdate(e){if(e.actorTokenId===this._client.actorId)return;const t=e.presence||{};if(this._foreignScope(t))return;const o=e.roomId;for(const s of this._targetRooms(o))s._handlePresenceUpdate(e.actorTokenId,t)}_targetRooms(e){return e&&this._rooms.has(e)?[this._rooms.get(e)]:e?[]:[...this._rooms.values()]}_handleLobbyJoin(e){const{actorId:t,data:o}=e;if(t===this._client.actorId)return;const s=o||{};if(!this._foreignScope(s)){this._log(`lobby presence:join — ${s.name||t}`);for(const e of this._rooms.values())e._handlePresenceJoin(t,s)}}_handleLobbyLeave(e){const{actorId:t,data:o}=e;if(t===this._client.actorId)return;const s=o||{};if(!this._foreignScope(s)){this._log(`lobby presence:leave — ${t}`);for(const e of this._rooms.values())e._handlePresenceLeave(t)}}_handleLobbyUpdate(e){const{actorId:t,data:o}=e;if(t===this._client.actorId)return;const s=o||{};if(!this._foreignScope(s))for(const e of this._rooms.values())e._handlePresenceUpdate(t,s)}_diffHydrateLobby(e){for(const t of Object.keys(e)){const o=e[t];for(const e of Object.keys(o)){if(e===this._client.actorId)continue;const t=o[e],s=t?.presence??t;if(!this._foreignScope(s))for(const t of this._rooms.values())t._handlePresenceJoin(e,s)}}}_presenceFromIdentity(e){if(e.name||e.role)return{name:e.name??e.agentId??"agent",role:e.role??"agent"}}}class m extends Error{constructor(e,t){super(`${e} cannot succeed: every relevant agent advertises agents-protocol < 2 [${t.map(e=>`${e.name} (protocol ${e.protocol})`).join(", ")}]. Protocol >= 2 responders direct replies to the requester; older ones broadcast and their replies never reach this SDK's filtered subscription. Upgrade the responders to @nolag/agents >= 0.2.0 / nolag-agents >= 0.3.0. NOTE: 0.2.x/0.3.0 responders DO have directed replies but do not yet advertise protocol — if your responders run those versions, pass { allowLegacyResponders: true }.`),this.name="IncompatibleProtocolError"}}class g{constructor(){this._pending=new Map}register(e,t,o){return new Promise((s,n)=>{let i=null;t&&t>0&&(i=setTimeout(()=>{this._pending.delete(e);n(new Error(`${o??`Correlation ${e}`} timed out after ${t}ms`))},t)),this._pending.set(e,{resolve:s,reject:n,timer:i})})}resolve(e,t){const o=this._pending.get(e);return!!o&&(o.timer&&clearTimeout(o.timer),this._pending.delete(e),o.resolve(t),!0)}reject(e,t){const o=this._pending.get(e);return!!o&&(o.timer&&clearTimeout(o.timer),this._pending.delete(e),o.reject(t),!0)}has(e){return this._pending.has(e)}clear(){for(const[e,t]of this._pending)t.timer&&clearTimeout(t.timer),t.reject(new Error(`Correlation ${e} cancelled`));this._pending.clear()}get size(){return this._pending.size}}function b(e,t,o){return{type:"task",protocol:2,taskId:l(),correlationId:l(),replyTo:o?.replyTo,capability:e,payload:t,tags:o?.tags,priority:o?.priority??"medium",metadata:o?.metadata,createdAt:d(),createdBy:o?.createdBy,timeout:o?.timeout}}function f(e,t,o,s,n,i,r){return{type:"result",protocol:2,correlationId:t,taskId:e,status:o,payload:s,error:n,completedAt:d(),completedBy:i,replyTo:r}}function y(e,t,o,s){return{type:"state",protocol:2,key:e,value:t,version:o,updatedBy:s,updatedAt:d()}}function I(e,t,o,s="info"){return{type:"event",protocol:2,eventId:l(),severity:s,category:e,emittedBy:t,payload:o,timestamp:d()}}function v(e,t,o,s){return{type:"approval_request",protocol:2,requestId:l(),correlationId:l(),action:e,context:t,urgency:s?.urgency??"medium",requestedBy:o,requestedAt:d(),expiresAt:s?.expiresAt}}function R(e,t,o,s,n){return{type:"approval_response",protocol:2,requestId:e,correlationId:t,decision:o,respondedBy:s,reason:n,respondedAt:d()}}function w(e,t,o,s){return{type:"tool_request",protocol:2,requestId:l(),correlationId:l(),replyTo:s?.replyTo,toolName:e,arguments:t,requestedBy:o,requestedAt:d()}}function T(e,t,o,s,n,i,r){return{type:"tool_response",protocol:2,requestId:e,correlationId:t,status:o,result:s,error:n,respondedBy:i,respondedAt:d(),replyTo:r}}class A{constructor(e){this._correlations=new g,this._warnedMixed=!1,this._room=e,this._room.on("result",e=>{this._correlations.resolve(e.correlationId,e)})}async dispatch(e,t,o){if(!o?.allowNoWorkers){const t=this._room.findAgents(e);if(0===(o?.requireOnline?t.filter(e=>void 0===e.status||"online"===e.status):t).length)throw new Error(`No ${o?.requireOnline?"online ":""}agent with capability "${e}" is available. Available capabilities: [${this._room.getAvailableCapabilities().join(", ")}]. Connected agents: ${this._room.getConnectedAgents().length}. Use { allowNoWorkers: true } to dispatch anyway.`)}const s=b(e,t,{...o,createdBy:o?.createdBy??this._room.agentId,replyTo:o?.replyTo??this._room.agentId});if(this._room.publishTask(s),o?.waitForResult){const t=this._room.findAgents(e);if(!o?.allowLegacyResponders&&t.length>0){const o=t.filter(e=>e.protocol>=2);if(0===o.length)throw new m(`Task '${e}' dispatch with waitForResult`,t.map(e=>({name:e.name,protocol:e.protocol})));o.length<t.length&&!this._warnedMixed&&(this._warnedMixed=!0,console.warn(`[nolag-agents] Capability '${e}' has workers on agents-protocol < 2: `+t.filter(e=>e.protocol<2).map(e=>e.name).join(", ")+". Their results may not be delivered — upgrade them."))}return this._correlations.register(s.correlationId,o.timeout,`Task '${e}' dispatch (${t.length} capable worker${1===t.length?"":"s"} visible). Likely causes: worker crashed mid-task, worker on agents-protocol < 2 (results not directed), or the room is not deliverable`)}}onTask(e,t){const o="function"==typeof e?"*":e,s="function"==typeof e?e:t;this._room.on("task",e=>{if("*"!==o&&!o.includes(e.capability))return;s(e,(t,o,s)=>{const n=f(e.taskId,e.correlationId,t,o,s,this._room.agentId,e.replyTo??e.createdBy);this._room.publishResult(n)})})}getCapableAgents(e){return this._room.findAgents(e)}dispose(){this._correlations.clear()}}class L{constructor(e,t){this._room=e,this._agentId=t}send(e,t){const o={messageId:l(),from:this._agentId,to:e,payload:t,createdAt:d()};this._room.publishInbox(o)}onMessage(e){this._room.on("inbox",t=>{const o=t;o.to===this._agentId&&e(o)})}}class x{constructor(e,t){this._state=new Map,this._room=e,this._agentId=t,this._room.on("stateChange",e=>{this._state.set(e.key,e)})}set(e,t){const o=this._state.get(e),s=y(e,t,o?o.version+1:1,this._agentId);this._state.set(e,s),this._room.publishState(s)}get(e){return this._state.get(e)?.value}getEnvelope(e){return this._state.get(e)}getAll(){return this._state}onChange(e,t){this._room.on("stateChange",o=>{o.key===e&&t(o)})}}class ${constructor(e,t){this._room=e,this._emittedBy=t}emit(e,t,o="info"){const s=I(e,this._emittedBy,t,o);this._room.publishEvent(s)}on(e,t){this._room.on("event",o=>{t?.category&&o.category!==t.category||t?.severity&&o.severity!==t.severity||e(o)})}}class P{constructor(e,t){this._correlations=new g,this._room=e,this._agentId=t,this._room.on("approvalResponse",e=>{this._correlations.resolve(e.correlationId,e)})}async request(e,t,o){const s=v(e,t,this._agentId,{urgency:o?.urgency,expiresAt:o?.expiresAt});return this._room.publishApproval(s),this._correlations.register(s.correlationId,o?.timeout)}onRequest(e){this._room.on("approvalRequest",t=>{e(t,(e,o)=>{const s=R(t.requestId,t.correlationId,e,this._agentId,o);this._room.publishApproval(s)})})}dispose(){this._correlations.clear()}}class C{constructor(e,t){this._correlations=new g,this._handlers=new Map,this._warnedMixed=!1,this._room=e,this._agentId=t,this._room.on("toolResponse",e=>{this._correlations.resolve(e.correlationId,e)}),this._room.on("toolRequest",async e=>{const t=this._handlers.get(e.toolName),o=e.replyTo??e.requestedBy;if(!t){if(!this._ownsNamespace(e.toolName))return;const t=T(e.requestId,e.correlationId,"error",null,{code:"NO_HANDLER",message:`Agent '${this._agentId}' has no handler for tool '${e.toolName}'`},this._agentId,o);return void this._room.publishTools(t)}try{const s=await t(e.arguments),n=T(e.requestId,e.correlationId,"success",s,void 0,this._agentId,o);this._room.publishTools(n)}catch(t){const s=T(e.requestId,e.correlationId,"error",null,{code:"TOOL_ERROR",message:t instanceof Error?t.message:String(t)},this._agentId,o);this._room.publishTools(s)}})}register(e,t){this._handlers.set(e,t)}_ownsNamespace(e){if(0===this._handlers.size)return!1;const t=e.includes(".")?e.slice(0,e.indexOf(".")):null;for(const e of this._handlers.keys()){if((e.includes(".")?e.slice(0,e.indexOf(".")):null)===t)return!0}return!1}async invoke(e,t,o){const s=this._room.getConnectedAgents().filter(e=>"tool-server"===e.role);if(!o?.allowLegacyResponders&&s.length>0){const t=s.filter(e=>e.protocol>=2);if(0===t.length)throw new m(`Tool '${e}' invocation`,s.map(e=>({name:e.name,protocol:e.protocol})));t.length<s.length&&!this._warnedMixed&&(this._warnedMixed=!0,console.warn(`[nolag-agents] Room '${this._room.name}' has tool servers on agents-protocol < 2: `+s.filter(e=>e.protocol<2).map(e=>e.name).join(", ")+". Their replies may not be delivered — upgrade them."))}const n=w(e,t,this._agentId,{replyTo:this._room.agentId});this._room.publishTools(n);const i=s.length;return this._correlations.register(n.correlationId,o?.timeout,`Tool '${e}' invocation in room '${this._room.name}' (${i} tool-server${1===i?"":"s"} visible). Likely causes: no agent has this tool registered (pre-0.3.0 responders don't NACK), the responder is offline, or the room is not deliverable (watch the room 'error' events)`)}dispose(){this._correlations.clear(),this._handlers.clear()}}const k={CAPABILITY:"capability",PRIORITY:"priority",ROLE:"role",SEVERITY:"severity",URGENCY:"urgency",TENANT:"tenant"},N={REQUIRES_HUMAN:"requires_human",REQUIRES_AUDIT:"requires_audit"};function E(e,t){return`${e}:${t}`}export{c as AGENTS_PROTOCOL_VERSION,h as AgentRoom,P as Approve,x as Blackboard,g as CorrelationManager,e as EventEmitter,A as Handoff,L as Inbox,m as IncompatibleProtocolError,u as NoLagAgents,$ as Observe,N as TAG_FLAGS,k as TAG_PREFIX,C as Tools,v as createApprovalRequest,R as createApprovalResponse,I as createEventEnvelope,f as createResultEnvelope,y as createStateEnvelope,b as createTaskEnvelope,w as createToolRequest,T as createToolResponse,E as tag};
|
|
2
2
|
//# sourceMappingURL=browser.js.map
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sources":["../src/EventEmitter.ts","../src/constants.ts","../src/AgentRoom.ts","../src/utils.ts","../src/NoLagAgents.ts","../src/errors.ts","../src/correlation.ts","../src/envelope.ts","../src/patterns/handoff.ts","../src/patterns/inbox.ts","../src/patterns/blackboard.ts","../src/patterns/observe.ts","../src/patterns/approve.ts","../src/patterns/tools.ts","../src/tags.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["EventEmitter","constructor","this","_handlers","Map","on","event","handler","has","set","Set","get","add","off","delete","removeAllListeners","clear","emit","args","handlers","e","console","error","String","listenerCount","size","TOPIC_TASKS","TOPIC_RESULTS","TOPIC_STATE","TOPIC_EVENTS","TOPIC_INBOX","TOPIC_TOOLS","TOPIC_APPROVAL","AGENTS_PROTOCOL_VERSION","AgentRoom","name","roomContext","client","log","agentId","presence","super","_agents","_roomContext","_client","_log","_presence","_wireTopicListeners","_wirePresenceListeners","withProtocol","protocol","setPresence","_fetchInitialPresence","getConnectedAgents","Array","from","values","findAgents","capability","filter","a","capabilities","includes","hasCapability","length","getAvailableCapabilities","caps","agent","cap","data","fetchPresence","map","_toConnectedAgent","_emitPresence","actorId","context","publishTask","envelope","createdBy","_publish","publishResult","completedBy","replyTo","publishState","updatedBy","retain","publishEvent","emittedBy","publishInbox","publishTools","type","publishApproval","topic","options","actor","actorTokenId","role","metadata","connectedAt","joinedAt","Date","now","status","actors","isArray","connected","evt","roomId","id","existing","subscribe","loadBalance","filters","broadcastTopics","simpleMap","generateId","crypto","randomUUID","replace","Math","floor","random","toString","createTimestamp","NoLagAgents","token","prefix","_appContext","_rooms","_connected","_token","_options","appName","debug","rooms","lobby","clientOptions","_args","connect","NoLag","setApp","reason","err","message","roomName","room","subscribeLobby","lobbySlug","Error","setLobby","agents","initialState","Object","keys","disconnect","agentRoom","setRoom","IncompatibleProtocolError","operation","join","CorrelationManager","_pending","register","correlationId","timeoutMs","Promise","resolve","reject","timer","setTimeout","value","entry","clearTimeout","createTaskEnvelope","payload","taskId","tags","priority","createdAt","timeout","createResultEnvelope","completedAt","createStateEnvelope","key","version","updatedAt","createEventEnvelope","category","severity","eventId","timestamp","createApprovalRequest","action","requestedBy","requestId","urgency","requestedAt","expiresAt","createApprovalResponse","decision","respondedBy","respondedAt","createToolRequest","toolName","arguments","createToolResponse","result","Handoff","_correlations","_warnedMixed","_room","dispatch","allowNoWorkers","capable","requireOnline","undefined","waitForResult","allowLegacyResponders","modern","warn","onTask","capabilitiesOrHandler","maybeHandler","task","getCapableAgents","dispose","Inbox","_agentId","send","to","messageId","onMessage","msg","Blackboard","_state","getEnvelope","getAll","onChange","Observe","_emittedBy","Approve","request","onRequest","response","Tools","async","_ownsNamespace","nack","code","ns","slice","indexOf","invoke","servers","serverCount","TAG_PREFIX","CAPABILITY","PRIORITY","ROLE","SEVERITY","URGENCY","TENANT","TAG_FLAGS","REQUIRES_HUMAN","REQUIRES_AUDIT","tag"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser.js","sources":["../src/EventEmitter.ts","../src/constants.ts","../src/AgentRoom.ts","../src/utils.ts","../src/NoLagAgents.ts","../src/errors.ts","../src/correlation.ts","../src/envelope.ts","../src/patterns/handoff.ts","../src/patterns/inbox.ts","../src/patterns/blackboard.ts","../src/patterns/observe.ts","../src/patterns/approve.ts","../src/patterns/tools.ts","../src/tags.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["EventEmitter","constructor","this","_handlers","Map","on","event","handler","has","set","Set","get","add","off","delete","removeAllListeners","clear","emit","args","handlers","e","console","error","String","listenerCount","size","TOPIC_TASKS","TOPIC_RESULTS","TOPIC_STATE","TOPIC_EVENTS","TOPIC_INBOX","TOPIC_TOOLS","TOPIC_APPROVAL","AGENTS_PROTOCOL_VERSION","AgentRoom","name","roomContext","log","agentId","appName","isConnected","presence","super","_agents","_topicHandlers","_roomContext","_log","_appName","_isConnected","_presence","_wireTopicListeners","protocol","setPresence","__scope","_fetchInitialPresence","getConnectedAgents","Array","from","values","findAgents","capability","filter","a","capabilities","includes","hasCapability","length","getAvailableCapabilities","caps","agent","cap","data","fetchPresence","map","_toConnectedAgent","context","publishTask","envelope","createdBy","_publish","publishResult","completedBy","replyTo","publishState","updatedBy","retain","publishEvent","emittedBy","publishInbox","publishTools","type","publishApproval","_updateLocalPresence","_handlePresenceJoin","actorId","d","role","metadata","connectedAt","Date","now","_handlePresenceLeave","_handlePresenceUpdate","existing","_cleanup","topics","t","topic","unsubscribe","_on","push","options","actor","actorTokenId","joinedAt","status","actors","isArray","connected","subscribe","loadBalance","filters","broadcastTopics","simpleMap","generateId","crypto","randomUUID","replace","Math","floor","random","toString","createLogger","prefix","enabled","_args","createTimestamp","wrapperRegistry","WeakMap","NoLagAgents","_rooms","_lobby","_epoch","_detached","_isReady","_lobbyRefreshTimer","_onConnectRef","_onConnect","_onDisconnectRef","reason","_onReconnectRef","_onErrorRef","message","_onPresenceJoinRef","_handleRoomPresenceJoin","_onPresenceLeaveRef","_handleRoomPresenceLeave","_onPresenceUpdateRef","_handleRoomPresenceUpdate","_onLobbyJoinRef","_handleLobbyJoin","_onLobbyLeaveRef","_handleLobbyLeave","_onLobbyUpdateRef","_handleLobbyUpdate","client","TypeError","_client","_options","debug","rooms","lobby","_presenceFromIdentity","_readyPromise","Promise","resolve","reject","_readyResolve","_readyReject","catch","wrapperName","apps","warn","registerWrapper","queueMicrotask","ready","detach","clearTimeout","keys","Error","_runSetup","epoch","stale","room","roomName","_joinRoomInternal","setApp","setLobby","state","_diffHydrateLobby","err","_scheduleLobbyRefresh","setTimeout","then","_assertUsable","subscribeLobby","lobbySlug","setRoom","_foreignScope","scope","roomId","_targetRooms","Object","roomPresence","raw","IncompatibleProtocolError","operation","agents","join","CorrelationManager","_pending","register","correlationId","timeoutMs","timer","value","entry","id","createTaskEnvelope","payload","taskId","tags","priority","createdAt","timeout","createResultEnvelope","completedAt","createStateEnvelope","key","version","updatedAt","createEventEnvelope","category","severity","eventId","timestamp","createApprovalRequest","action","requestedBy","requestId","urgency","requestedAt","expiresAt","createApprovalResponse","decision","respondedBy","respondedAt","createToolRequest","toolName","arguments","createToolResponse","result","Handoff","_correlations","_warnedMixed","_room","dispatch","allowNoWorkers","capable","requireOnline","undefined","waitForResult","allowLegacyResponders","modern","onTask","capabilitiesOrHandler","maybeHandler","task","getCapableAgents","dispose","Inbox","_agentId","send","to","messageId","onMessage","msg","Blackboard","_state","getEnvelope","getAll","onChange","Observe","_emittedBy","Approve","request","onRequest","response","Tools","async","_ownsNamespace","nack","code","ns","slice","indexOf","invoke","servers","serverCount","TAG_PREFIX","CAPABILITY","PRIORITY","ROLE","SEVERITY","URGENCY","TENANT","TAG_FLAGS","REQUIRES_HUMAN","REQUIRES_AUDIT","tag"],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export declare const TOPIC_APPROVAL = "approval";
|
|
|
18
18
|
export declare const DEFAULT_ROOM = "default-workflow";
|
|
19
19
|
/** Lobby for agent activity observation */
|
|
20
20
|
export declare const LOBBY_AGENT_ACTIVITY = "agent-activity";
|
|
21
|
+
/** Delay before the post-setup lobby presence refetch (catches simultaneous joiners) */
|
|
22
|
+
export declare const LOBBY_REFRESH_DELAY_MS = 2000;
|
|
21
23
|
/** Agents-protocol version: 2 = directed replies (filter-routed results),
|
|
22
24
|
* NO_HANDLER NACKs, presence protocol advertisement. Absent/1 = legacy
|
|
23
25
|
* broadcast replies (pre-0.2.0 SDKs). */
|