@nolag/agents 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AgentRoom.d.ts +79 -0
- package/dist/EventEmitter.d.ts +16 -0
- package/dist/NoLagAgents.d.ts +59 -0
- package/dist/browser.d.ts +17 -0
- package/dist/browser.js +2 -0
- package/dist/browser.js.map +1 -0
- package/dist/constants.d.ts +20 -0
- package/dist/correlation.d.ts +30 -0
- package/dist/envelope.d.ts +27 -0
- package/dist/index.cjs +1121 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.mjs +1099 -0
- package/dist/index.mjs.map +1 -0
- package/dist/patterns/approve.d.ts +29 -0
- package/dist/patterns/blackboard.d.ts +34 -0
- package/dist/patterns/handoff.d.ts +69 -0
- package/dist/patterns/inbox.d.ts +28 -0
- package/dist/patterns/observe.d.ts +24 -0
- package/dist/patterns/tools.d.ts +29 -0
- package/dist/tags.d.ts +16 -0
- package/dist/types.d.ts +143 -0
- package/dist/utils.d.ts +13 -0
- package/package.json +57 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { EventEmitter } from "./EventEmitter";
|
|
2
|
+
import type { AgentRoomEvents, TaskEnvelope, ResultEnvelope, AgentPresenceData } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* ConnectedAgent — represents an agent discovered via presence.
|
|
5
|
+
*/
|
|
6
|
+
export interface ConnectedAgent {
|
|
7
|
+
actorId: string;
|
|
8
|
+
name: string;
|
|
9
|
+
role: string;
|
|
10
|
+
capabilities: string[];
|
|
11
|
+
metadata?: Record<string, unknown>;
|
|
12
|
+
connectedAt: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* AgentRoom — wraps a RoomContext from @nolag/js-sdk.
|
|
16
|
+
*
|
|
17
|
+
* Provides typed pub/sub for agent coordination topics,
|
|
18
|
+
* presence-based service discovery, and capability routing.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const room = agents.room('default-workflow');
|
|
23
|
+
*
|
|
24
|
+
* // Service discovery - see who's connected
|
|
25
|
+
* const agents = room.getConnectedAgents();
|
|
26
|
+
* const summarizers = room.findAgents('summarize');
|
|
27
|
+
*
|
|
28
|
+
* // Capability-filtered task handler
|
|
29
|
+
* room.on('task', (envelope) => console.log('New task:', envelope));
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class AgentRoom extends EventEmitter<AgentRoomEvents> {
|
|
33
|
+
readonly name: string;
|
|
34
|
+
readonly agentId: string;
|
|
35
|
+
private _roomContext;
|
|
36
|
+
private _client;
|
|
37
|
+
private _log;
|
|
38
|
+
private _presence;
|
|
39
|
+
/** Registry of connected agents discovered via presence */
|
|
40
|
+
private _agents;
|
|
41
|
+
constructor(name: string, roomContext: any, client: any, log: (...args: unknown[]) => void, agentId: string, presence?: AgentPresenceData);
|
|
42
|
+
/** Get all currently connected agents */
|
|
43
|
+
getConnectedAgents(): ConnectedAgent[];
|
|
44
|
+
/** Find agents that have a specific capability */
|
|
45
|
+
findAgents(capability: string): ConnectedAgent[];
|
|
46
|
+
/** Check if any connected agent can handle a capability */
|
|
47
|
+
hasCapability(capability: string): boolean;
|
|
48
|
+
/** Get all capabilities available across connected agents */
|
|
49
|
+
getAvailableCapabilities(): string[];
|
|
50
|
+
/** Update this agent's presence data */
|
|
51
|
+
setPresence(data: AgentPresenceData): void;
|
|
52
|
+
/** Fetch current presence snapshot for this room */
|
|
53
|
+
fetchPresence(): Promise<ConnectedAgent[]>;
|
|
54
|
+
/**
|
|
55
|
+
* @internal Emit a presence event (used by NoLagAgents for lobby forwarding)
|
|
56
|
+
*/
|
|
57
|
+
_emitPresence(event: 'presenceJoin' | 'presenceLeave' | 'presenceUpdate', actorId: string, data?: AgentPresenceData): void;
|
|
58
|
+
/** Get the underlying RoomContext for advanced usage */
|
|
59
|
+
get context(): any;
|
|
60
|
+
/** Publish to the tasks topic */
|
|
61
|
+
publishTask(envelope: TaskEnvelope): void;
|
|
62
|
+
/** Publish to the results topic */
|
|
63
|
+
publishResult(envelope: ResultEnvelope): void;
|
|
64
|
+
/** Publish to the state topic (retained) */
|
|
65
|
+
publishState(data: Record<string, unknown>): void;
|
|
66
|
+
/** Publish to the events topic */
|
|
67
|
+
publishEvent(data: Record<string, unknown>): void;
|
|
68
|
+
/** Publish to the inbox topic */
|
|
69
|
+
publishInbox(data: Record<string, unknown>): void;
|
|
70
|
+
/** Publish to the tools topic */
|
|
71
|
+
publishTools(data: Record<string, unknown>): void;
|
|
72
|
+
/** Publish to the approval topic (retained) */
|
|
73
|
+
publishApproval(data: Record<string, unknown>): void;
|
|
74
|
+
private _publish;
|
|
75
|
+
private _toConnectedAgent;
|
|
76
|
+
private _fetchInitialPresence;
|
|
77
|
+
private _wirePresenceListeners;
|
|
78
|
+
private _wireTopicListeners;
|
|
79
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tiny typed event emitter — framework-agnostic base for NoLagAgents and AgentRoom.
|
|
3
|
+
*
|
|
4
|
+
* EventMap is a record of event name -> tuple of handler arguments.
|
|
5
|
+
* e.g. { task: [TaskEnvelope]; result: [ResultEnvelope] }
|
|
6
|
+
*/
|
|
7
|
+
export declare class EventEmitter<EventMap extends {
|
|
8
|
+
[K in keyof EventMap]: unknown[];
|
|
9
|
+
}> {
|
|
10
|
+
private _handlers;
|
|
11
|
+
on<K extends keyof EventMap>(event: K, handler: (...args: EventMap[K]) => void): this;
|
|
12
|
+
off<K extends keyof EventMap>(event: K, handler?: (...args: EventMap[K]) => void): this;
|
|
13
|
+
removeAllListeners(): this;
|
|
14
|
+
protected emit<K extends keyof EventMap>(event: K, ...args: EventMap[K]): void;
|
|
15
|
+
listenerCount<K extends keyof EventMap>(event: K): number;
|
|
16
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { EventEmitter } from "./EventEmitter";
|
|
2
|
+
import { AgentRoom } from "./AgentRoom";
|
|
3
|
+
import type { NoLagAgentsOptions, AgentClientEvents } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* NoLagAgents — high-level agent coordination SDK built on @nolag/js-sdk.
|
|
6
|
+
*
|
|
7
|
+
* Provides typed rooms for multi-agent patterns: Handoff, Blackboard,
|
|
8
|
+
* Inbox, Tools, Approval, and Observe.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { NoLagAgents } from '@nolag/agents';
|
|
13
|
+
*
|
|
14
|
+
* const agents = new NoLagAgents(token, {
|
|
15
|
+
* appName: 'my-workflow',
|
|
16
|
+
* agentId: 'worker-1',
|
|
17
|
+
* presence: { name: 'worker-1', role: 'agent', capabilities: ['summarize'] },
|
|
18
|
+
* });
|
|
19
|
+
* await agents.connect();
|
|
20
|
+
*
|
|
21
|
+
* const room = agents.room('default-workflow');
|
|
22
|
+
* room.handoff.onTask(['summarize'], async (task, respond) => {
|
|
23
|
+
* const result = await summarize(task.payload);
|
|
24
|
+
* respond('success', { result });
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare class NoLagAgents extends EventEmitter<AgentClientEvents> {
|
|
29
|
+
private _token;
|
|
30
|
+
private _options;
|
|
31
|
+
private _client;
|
|
32
|
+
private _appContext;
|
|
33
|
+
private _rooms;
|
|
34
|
+
private _log;
|
|
35
|
+
private _connected;
|
|
36
|
+
constructor(token: string, options?: NoLagAgentsOptions);
|
|
37
|
+
/** The agent's unique ID */
|
|
38
|
+
get agentId(): string;
|
|
39
|
+
/** Whether the client is connected */
|
|
40
|
+
get connected(): boolean;
|
|
41
|
+
/** Map of joined rooms */
|
|
42
|
+
get rooms(): ReadonlyMap<string, AgentRoom>;
|
|
43
|
+
/** Connect to NoLag and join configured rooms */
|
|
44
|
+
connect(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Subscribe to a lobby for cross-room presence observation.
|
|
47
|
+
* Lobby presence events are forwarded to all AgentRooms.
|
|
48
|
+
*
|
|
49
|
+
* Returns the initial presence snapshot.
|
|
50
|
+
*/
|
|
51
|
+
subscribeLobby(lobbySlug: string): Promise<Record<string, Record<string, unknown>>>;
|
|
52
|
+
/** Disconnect from NoLag */
|
|
53
|
+
disconnect(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Get or create an AgentRoom wrapper.
|
|
56
|
+
* If the room hasn't been joined yet, it will be joined automatically.
|
|
57
|
+
*/
|
|
58
|
+
room(name: string): AgentRoom;
|
|
59
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nolag/agents
|
|
3
|
+
* Multi-agent coordination SDK for Browser and React Native
|
|
4
|
+
*/
|
|
5
|
+
export { NoLagAgents } from "./NoLagAgents";
|
|
6
|
+
export { AgentRoom } from "./AgentRoom";
|
|
7
|
+
export { EventEmitter } from "./EventEmitter";
|
|
8
|
+
export { CorrelationManager } from "./correlation";
|
|
9
|
+
export { Handoff } from "./patterns/handoff";
|
|
10
|
+
export { Inbox } from "./patterns/inbox";
|
|
11
|
+
export { Blackboard } from "./patterns/blackboard";
|
|
12
|
+
export { Observe } from "./patterns/observe";
|
|
13
|
+
export { Approve } from "./patterns/approve";
|
|
14
|
+
export { Tools } from "./patterns/tools";
|
|
15
|
+
export { TAG_PREFIX, TAG_FLAGS, tag } from "./tags";
|
|
16
|
+
export { createTaskEnvelope, createResultEnvelope, createStateEnvelope, createEventEnvelope, createApprovalRequest, createApprovalResponse, createToolRequest, createToolResponse, } from "./envelope";
|
|
17
|
+
export type { NoLagAgentsOptions, TaskEnvelope, ResultEnvelope, StateEnvelope, EventEnvelope, ApprovalRequestEnvelope, ApprovalResponseEnvelope, ToolRequestEnvelope, ToolResponseEnvelope, AgentClientEvents, AgentRoomEvents, } from "./types";
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{NoLag as t}from"@nolag/js-sdk";class e{constructor(){this._handlers=new Map}on(t,e){return this._handlers.has(t)||this._handlers.set(t,new Set),this._handlers.get(t).add(e),this}off(t,e){return e?this._handlers.get(t)?.delete(e):this._handlers.delete(t),this}removeAllListeners(){return this._handlers.clear(),this}emit(t,...e){const s=this._handlers.get(t);if(s)for(const o of s)try{o(...e)}catch(e){console.error(`Error in ${String(t)} handler:`,e)}}listenerCount(t){return this._handlers.get(t)?.size??0}}const s="tasks",o="results",n="state",i="events",r="inbox",a="tools",c="approval";class l extends e{constructor(t,e,s,o,n,i){super(),this._agents=new Map,this.name=t,this.agentId=n,this._roomContext=e,this._client=s,this._log=o,this._presence=i,this._wireTopicListeners(),this._wirePresenceListeners(),i&&(this._log(`setting presence in room ${t}:`,i),this._roomContext.setPresence(i)),this._fetchInitialPresence()}getConnectedAgents(){return Array.from(this._agents.values())}findAgents(t){return Array.from(this._agents.values()).filter(e=>e.capabilities.includes(t))}hasCapability(t){return this.findAgents(t).length>0}getAvailableCapabilities(){const t=new Set;for(const e of this._agents.values())for(const s of e.capabilities)t.add(s);return Array.from(t)}setPresence(t){this._presence=t,this._log(`updating presence in room ${this.name}`),this._roomContext.setPresence(t)}async fetchPresence(){try{return(await this._roomContext.fetchPresence()||[]).map(t=>this._toConnectedAgent(t))}catch{return[]}}_emitPresence(t,e,s){"presenceLeave"===t?this.emit("presenceLeave",e):this.emit(t,e,s||{})}get context(){return this._roomContext}publishTask(t){t.createdBy||(t.createdBy=this.agentId),this._publish(s,t)}publishResult(t){t.completedBy||(t.completedBy=this.agentId),this._publish(o,t)}publishState(t){t.updatedBy||(t.updatedBy=this.agentId),this._publish(n,t,{retain:!0})}publishEvent(t){t.emittedBy||(t.emittedBy=this.agentId),this._publish(i,t)}publishInbox(t){this._publish(r,t)}publishTools(t){this._publish(a,t)}publishApproval(t){this._publish(c,t,{retain:!0})}_publish(t,e,s){this._log(`publish to ${t} in room ${this.name}`),s?this._roomContext.emit(t,e,s):this._roomContext.emit(t,e)}_toConnectedAgent(t){const e=t.presence||t.data||{};return{actorId:t.actorTokenId||t.actorId||"",name:e.name||t.actorTokenId||"",role:e.role||"agent",capabilities:e.capabilities||[],metadata:e.metadata,connectedAt:t.joinedAt||Date.now()}}async _fetchInitialPresence(){try{const t=await this._roomContext.fetchPresence();if(Array.isArray(t)){for(const e of t){const t=this._toConnectedAgent(e);t.actorId&&this._agents.set(t.actorId,t)}this._log(`discovered ${this._agents.size} agents in room ${this.name}`)}}catch{}}_wirePresenceListeners(){if(!this._client)return;const t=this._client;t.on?.("presence:join",t=>{if(t?.roomId===this.name||!t?.roomId){const e=t?.actorId||t?.actorTokenId,s=t?.data||t?.presence||{};if(e){const t={actorId:e,name:s.name||e,role:s.role||"agent",capabilities:s.capabilities||[],metadata:s.metadata,connectedAt:Date.now()};this._agents.set(e,t),this._log(`agent joined room ${this.name}:`,t.name,t.capabilities),this.emit("presenceJoin",e,s)}}}),t.on?.("presence:leave",t=>{if(t?.roomId===this.name||!t?.roomId){const e=t?.actorId||t?.actorTokenId;if(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)}}}),t.on?.("presence:update",t=>{if(t?.roomId===this.name||!t?.roomId){const e=t?.actorId||t?.actorTokenId,s=t?.data||t?.presence||{};if(e){const t=this._agents.get(e),o={actorId:e,name:s.name||t?.name||e,role:s.role||t?.role||"agent",capabilities:s.capabilities||t?.capabilities||[],metadata:s.metadata||t?.metadata,connectedAt:t?.connectedAt||Date.now()};this._agents.set(e,o),this.emit("presenceUpdate",e,s)}}})}_wireTopicListeners(){const t=[s,o,n,i,r,a,c];for(const e of t)this._roomContext.subscribe(e);const e=[{topic:s,event:"task"},{topic:o,event:"result"},{topic:n,event:"stateChange"},{topic:i,event:"event"},{topic:r,event:"inbox"}];for(const{topic:t,event:s}of e)this._roomContext.on(t,e=>{this._log(`received ${t} in room ${this.name}`),this.emit(s,e)});this._roomContext.on(c,t=>{this._log(`received ${c} in room ${this.name}`),"approval_response"===t?.type?this.emit("approvalResponse",t):this.emit("approvalRequest",t)}),this._roomContext.on(a,t=>{this._log(`received ${a} in room ${this.name}`),"tool_response"===t?.type?this.emit("toolResponse",t):this.emit("toolRequest",t)})}}function h(){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 d(){return Date.now()}class p extends e{constructor(t,e={}){var s;super(),this._client=null,this._appContext=null,this._rooms=new Map,this._connected=!1,this._token=t,this._options={appName:e.appName??"agents",agentId:e.agentId??h(),debug:e.debug??!1,rooms:e.rooms??["default-workflow"],lobby:e.lobby,presence:e.presence,clientOptions:e.clientOptions},this._log=(s="NoLagAgents",this._options.debug?(...t)=>{console.log(`[${s}]`,...t)}:(...t)=>{})}get agentId(){return this._options.agentId}get connected(){return this._connected}get rooms(){return this._rooms}async connect(){this._log("connecting..."),this._client=t(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",t=>{this._connected=!1,this._log("disconnected:",t),this.emit("disconnected",t)}),this._client.on("reconnected",()=>{this._connected=!0,this._log("reconnected"),this.emit("reconnected")}),this._client.on("error",t=>{this._log("error:",t.message),this.emit("error",t)}),await this._client.connect();for(const t of this._options.rooms)this.room(t);this._options.lobby&&await this.subscribeLobby(this._options.lobby)}async subscribeLobby(t){if(!this._appContext)throw new Error("Not connected. Call connect() before subscribing to lobbies.");this._log(`subscribing to lobby: ${t}`);const e=this._appContext.setLobby(t);this._client.on("lobbyPresence:join",t=>{const e=t?.actorId,s=t?.data||{};if(e){this._log(`lobby presence:join — ${s.name||e}`);for(const t of this._rooms.values()){const o=t._agents;o.has(e)||o.set(e,{actorId:e,name:s.name||e,role:s.role||"agent",capabilities:s.capabilities||[],metadata:s.metadata,connectedAt:Date.now()}),t._emitPresence("presenceJoin",e,s)}}}),this._client.on("lobbyPresence:leave",t=>{const e=t?.actorId;if(e){this._log(`lobby presence:leave — ${e}`);for(const t of this._rooms.values()){t._agents.delete(e),t._emitPresence("presenceLeave",e)}}}),this._client.on("lobbyPresence:update",t=>{const e=t?.actorId,s=t?.data||{};if(e)for(const t of this._rooms.values()){const o=t._agents.get(e);o&&(s.name&&(o.name=s.name),s.role&&(o.role=s.role),s.capabilities&&(o.capabilities=s.capabilities),s.metadata&&(o.metadata=s.metadata)),t._emitPresence("presenceUpdate",e,s)}});try{const t=await e.subscribe();return this._log("lobby subscribed, initial state:",Object.keys(t||{})),t||{}}catch(t){return this._log("lobby subscription failed:",t),{}}}disconnect(){this._log("disconnecting..."),this._client?.disconnect(),this._rooms.clear(),this._client=null,this._appContext=null,this._connected=!1}room(t){let e=this._rooms.get(t);if(e)return e;if(!this._appContext)throw new Error("Not connected. Call connect() before accessing rooms.");this._log(`joining room: ${t}`);const s=this._appContext.setRoom(t);return e=new l(t,s,this._client,this._log,this._options.agentId,this._options.presence),this._rooms.set(t,e),e}}class _{constructor(){this._pending=new Map}register(t,e){return new Promise((s,o)=>{let n=null;e&&e>0&&(n=setTimeout(()=>{this._pending.delete(t),o(new Error(`Correlation ${t} timed out after ${e}ms`))},e)),this._pending.set(t,{resolve:s,reject:o,timer:n})})}resolve(t,e){const s=this._pending.get(t);return!!s&&(s.timer&&clearTimeout(s.timer),this._pending.delete(t),s.resolve(e),!0)}reject(t,e){const s=this._pending.get(t);return!!s&&(s.timer&&clearTimeout(s.timer),this._pending.delete(t),s.reject(e),!0)}has(t){return this._pending.has(t)}clear(){for(const[t,e]of this._pending)e.timer&&clearTimeout(e.timer),e.reject(new Error(`Correlation ${t} cancelled`));this._pending.clear()}get size(){return this._pending.size}}function m(t,e,s){return{type:"task",taskId:h(),correlationId:h(),replyTo:s?.replyTo,capability:t,payload:e,tags:s?.tags,priority:s?.priority??"medium",metadata:s?.metadata,createdAt:d(),createdBy:s?.createdBy,timeout:s?.timeout}}function u(t,e,s,o,n,i){return{type:"result",correlationId:e,taskId:t,status:s,payload:o,error:n,completedAt:d(),completedBy:i}}function g(t,e,s,o){return{type:"state",key:t,value:e,version:s,updatedBy:o,updatedAt:d()}}function b(t,e,s,o="info"){return{type:"event",eventId:h(),severity:o,category:t,emittedBy:e,payload:s,timestamp:d()}}function y(t,e,s,o){return{type:"approval_request",requestId:h(),correlationId:h(),action:t,context:e,urgency:o?.urgency??"medium",requestedBy:s,requestedAt:d(),expiresAt:o?.expiresAt}}function I(t,e,s,o,n){return{type:"approval_response",requestId:t,correlationId:e,decision:s,respondedBy:o,reason:n,respondedAt:d()}}function f(t,e,s,o){return{type:"tool_request",requestId:h(),correlationId:h(),replyTo:o?.replyTo,toolName:t,arguments:e,requestedBy:s,requestedAt:d()}}function v(t,e,s,o,n,i){return{type:"tool_response",requestId:t,correlationId:e,status:s,result:o,error:n,respondedBy:i,respondedAt:d()}}class x{constructor(t){this._correlations=new _,this._room=t,this._room.on("result",t=>{this._correlations.resolve(t.correlationId,t)})}async dispatch(t,e,s){if(!s?.allowNoWorkers){if(0===this._room.findAgents(t).length)throw new Error(`No agent with capability "${t}" is connected. Available capabilities: [${this._room.getAvailableCapabilities().join(", ")}]. Connected agents: ${this._room.getConnectedAgents().length}. Use { allowNoWorkers: true } to dispatch anyway.`)}const o=m(t,e,{...s,createdBy:this._room.agentId});if(this._room.publishTask(o),s?.waitForResult)return this._correlations.register(o.correlationId,s.timeout)}onTask(t,e){this._room.on("task",s=>{if("*"!==t&&!t.includes(s.capability))return;e(s,(t,e,o)=>{const n=u(s.taskId,s.correlationId,t,e,o,this._room.agentId);this._room.publishResult(n)})})}getCapableAgents(t){return this._room.findAgents(t)}dispose(){this._correlations.clear()}}class A{constructor(t,e){this._room=t,this._agentId=e}send(t,e){const s={messageId:h(),from:this._agentId,to:t,payload:e,createdAt:d()};this._room.publishInbox(s)}onMessage(t){this._room.on("inbox",e=>{const s=e;s.to===this._agentId&&t(s)})}}class w{constructor(t,e){this._state=new Map,this._room=t,this._agentId=e,this._room.on("stateChange",t=>{this._state.set(t.key,t)})}set(t,e){const s=this._state.get(t),o=g(t,e,s?s.version+1:1,this._agentId);this._state.set(t,o),this._room.publishState(o)}get(t){return this._state.get(t)?.value}getEnvelope(t){return this._state.get(t)}getAll(){return this._state}onChange(t,e){this._room.on("stateChange",s=>{s.key===t&&e(s)})}}class C{constructor(t,e){this._room=t,this._emittedBy=e}emit(t,e,s="info"){const o=b(t,this._emittedBy,e,s);this._room.publishEvent(o)}on(t,e){this._room.on("event",s=>{e?.category&&s.category!==e.category||e?.severity&&s.severity!==e.severity||t(s)})}}class T{constructor(t,e){this._correlations=new _,this._room=t,this._agentId=e,this._room.on("approvalResponse",t=>{this._correlations.resolve(t.correlationId,t)})}async request(t,e,s){const o=y(t,e,this._agentId,{urgency:s?.urgency,expiresAt:s?.expiresAt});return this._room.publishApproval(o),this._correlations.register(o.correlationId,s?.timeout)}onRequest(t){this._room.on("approvalRequest",e=>{t(e,(t,s)=>{const o=I(e.requestId,e.correlationId,t,this._agentId,s);this._room.publishApproval(o)})})}dispose(){this._correlations.clear()}}class ${constructor(t,e){this._correlations=new _,this._handlers=new Map,this._room=t,this._agentId=e,this._room.on("toolResponse",t=>{this._correlations.resolve(t.correlationId,t)}),this._room.on("toolRequest",async t=>{const e=this._handlers.get(t.toolName);if(e)try{const s=await e(t.arguments),o=v(t.requestId,t.correlationId,"success",s,void 0,this._agentId);this._room.publishTools(o)}catch(e){const s=v(t.requestId,t.correlationId,"error",null,{code:"TOOL_ERROR",message:e instanceof Error?e.message:String(e)},this._agentId);this._room.publishTools(s)}})}register(t,e){this._handlers.set(t,e)}async invoke(t,e,s){const o=f(t,e,this._agentId);return this._room.publishTools(o),this._correlations.register(o.correlationId,s?.timeout)}dispose(){this._correlations.clear(),this._handlers.clear()}}const k={CAPABILITY:"capability",PRIORITY:"priority",ROLE:"role",SEVERITY:"severity",URGENCY:"urgency",TENANT:"tenant"},R={REQUIRES_HUMAN:"requires_human",REQUIRES_AUDIT:"requires_audit"};function q(t,e){return`${t}:${e}`}export{l as AgentRoom,T as Approve,w as Blackboard,_ as CorrelationManager,e as EventEmitter,x as Handoff,A as Inbox,p as NoLagAgents,C as Observe,R as TAG_FLAGS,k as TAG_PREFIX,$ as Tools,y as createApprovalRequest,I as createApprovalResponse,b as createEventEnvelope,u as createResultEnvelope,g as createStateEnvelope,m as createTaskEnvelope,f as createToolRequest,v as createToolResponse,q as tag};
|
|
2
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sources":["../src/EventEmitter.ts","../src/constants.ts","../src/AgentRoom.ts","../src/utils.ts","../src/NoLagAgents.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],"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","AgentRoom","name","roomContext","client","log","agentId","presence","super","_agents","_roomContext","_client","_log","_presence","_wireTopicListeners","_wirePresenceListeners","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","publishState","updatedBy","retain","publishEvent","emittedBy","publishInbox","publishTools","publishApproval","topic","options","actor","actorTokenId","role","metadata","connectedAt","joinedAt","Date","now","actors","isArray","connected","evt","roomId","id","existing","allTopics","subscribe","simpleMap","type","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","CorrelationManager","_pending","register","correlationId","timeoutMs","Promise","resolve","reject","timer","setTimeout","value","entry","clearTimeout","createTaskEnvelope","payload","taskId","replyTo","tags","priority","createdAt","timeout","createResultEnvelope","status","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","_room","dispatch","allowNoWorkers","join","waitForResult","onTask","task","getCapableAgents","dispose","Inbox","_agentId","send","to","messageId","onMessage","msg","Blackboard","_state","getEnvelope","getAll","onChange","Observe","_emittedBy","Approve","request","onRequest","response","Tools","async","undefined","code","invoke","TAG_PREFIX","CAPABILITY","PRIORITY","ROLE","SEVERITY","URGENCY","TENANT","TAG_FLAGS","REQUIRES_HUMAN","REQUIRES_AUDIT","tag"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Default app name for agent coordination */
|
|
2
|
+
export declare const DEFAULT_APP_NAME = "agents";
|
|
3
|
+
/** Topic name for task dispatch (Handoff pattern) */
|
|
4
|
+
export declare const TOPIC_TASKS = "tasks";
|
|
5
|
+
/** Topic name for task results */
|
|
6
|
+
export declare const TOPIC_RESULTS = "results";
|
|
7
|
+
/** Topic name for shared state (Blackboard pattern) */
|
|
8
|
+
export declare const TOPIC_STATE = "state";
|
|
9
|
+
/** Topic name for observability events (Observe pattern) */
|
|
10
|
+
export declare const TOPIC_EVENTS = "events";
|
|
11
|
+
/** Topic name for per-agent inboxes (Inbox pattern) */
|
|
12
|
+
export declare const TOPIC_INBOX = "inbox";
|
|
13
|
+
/** Topic name for tool invocations (Tools pattern) */
|
|
14
|
+
export declare const TOPIC_TOOLS = "tools";
|
|
15
|
+
/** Topic name for human-in-the-loop approval (Approve pattern) */
|
|
16
|
+
export declare const TOPIC_APPROVAL = "approval";
|
|
17
|
+
/** Default room for agent coordination */
|
|
18
|
+
export declare const DEFAULT_ROOM = "default-workflow";
|
|
19
|
+
/** Lobby for agent activity observation */
|
|
20
|
+
export declare const LOBBY_AGENT_ACTIVITY = "agent-activity";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CorrelationManager — maps correlationIds to pending promises with timeout.
|
|
3
|
+
* Used by Handoff and Tools patterns for request/response correlation.
|
|
4
|
+
*/
|
|
5
|
+
export declare class CorrelationManager<T = unknown> {
|
|
6
|
+
private _pending;
|
|
7
|
+
/**
|
|
8
|
+
* Register a pending correlation. Returns a promise that resolves
|
|
9
|
+
* when `resolve()` is called with the matching correlationId.
|
|
10
|
+
*/
|
|
11
|
+
register(correlationId: string, timeoutMs?: number): Promise<T>;
|
|
12
|
+
/**
|
|
13
|
+
* Resolve a pending correlation with a value.
|
|
14
|
+
* Returns true if the correlationId was found and resolved.
|
|
15
|
+
*/
|
|
16
|
+
resolve(correlationId: string, value: T): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Reject a pending correlation with an error.
|
|
19
|
+
*/
|
|
20
|
+
reject(correlationId: string, error: Error): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a correlationId is pending.
|
|
23
|
+
*/
|
|
24
|
+
has(correlationId: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Cancel all pending correlations.
|
|
27
|
+
*/
|
|
28
|
+
clear(): void;
|
|
29
|
+
get size(): number;
|
|
30
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { TaskEnvelope, ResultEnvelope, StateEnvelope, EventEnvelope, ApprovalRequestEnvelope, ApprovalResponseEnvelope, ToolRequestEnvelope, ToolResponseEnvelope } from "./types";
|
|
2
|
+
export declare function createTaskEnvelope(capability: string, payload: Record<string, unknown>, options?: {
|
|
3
|
+
tags?: string[];
|
|
4
|
+
priority?: TaskEnvelope["priority"];
|
|
5
|
+
timeout?: number;
|
|
6
|
+
replyTo?: string;
|
|
7
|
+
metadata?: Record<string, unknown>;
|
|
8
|
+
createdBy?: string;
|
|
9
|
+
}): TaskEnvelope;
|
|
10
|
+
export declare function createResultEnvelope(taskId: string, correlationId: string, status: ResultEnvelope["status"], payload: Record<string, unknown>, error?: {
|
|
11
|
+
code: string;
|
|
12
|
+
message: string;
|
|
13
|
+
}, completedBy?: string): ResultEnvelope;
|
|
14
|
+
export declare function createStateEnvelope(key: string, value: unknown, version: number, updatedBy: string): StateEnvelope;
|
|
15
|
+
export declare function createEventEnvelope(category: string, emittedBy: string, payload: Record<string, unknown>, severity?: EventEnvelope["severity"]): EventEnvelope;
|
|
16
|
+
export declare function createApprovalRequest(action: string, context: unknown, requestedBy: string, options?: {
|
|
17
|
+
urgency?: ApprovalRequestEnvelope["urgency"];
|
|
18
|
+
expiresAt?: number;
|
|
19
|
+
}): ApprovalRequestEnvelope;
|
|
20
|
+
export declare function createApprovalResponse(requestId: string, correlationId: string, decision: ApprovalResponseEnvelope["decision"], respondedBy: string, reason?: string): ApprovalResponseEnvelope;
|
|
21
|
+
export declare function createToolRequest(toolName: string, args: Record<string, unknown>, requestedBy: string, options?: {
|
|
22
|
+
replyTo?: string;
|
|
23
|
+
}): ToolRequestEnvelope;
|
|
24
|
+
export declare function createToolResponse(requestId: string, correlationId: string, status: ToolResponseEnvelope["status"], result: unknown, error?: {
|
|
25
|
+
code: string;
|
|
26
|
+
message: string;
|
|
27
|
+
}, respondedBy?: string): ToolResponseEnvelope;
|