aibroker 0.6.1 → 0.6.2
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 +263 -104
- package/dist/adapters/iterm/sessions.d.ts +1 -0
- package/dist/adapters/iterm/sessions.d.ts.map +1 -1
- package/dist/adapters/iterm/sessions.js +23 -0
- package/dist/adapters/iterm/sessions.js.map +1 -1
- package/dist/adapters/pailot/gateway.d.ts.map +1 -1
- package/dist/adapters/pailot/gateway.js +267 -52
- package/dist/adapters/pailot/gateway.js.map +1 -1
- package/dist/aibp/bridge.d.ts +123 -0
- package/dist/aibp/bridge.d.ts.map +1 -0
- package/dist/aibp/bridge.js +363 -0
- package/dist/aibp/bridge.js.map +1 -0
- package/dist/aibp/envelope.d.ts +26 -0
- package/dist/aibp/envelope.d.ts.map +1 -0
- package/dist/aibp/envelope.js +101 -0
- package/dist/aibp/envelope.js.map +1 -0
- package/dist/aibp/index.d.ts +11 -0
- package/dist/aibp/index.d.ts.map +1 -0
- package/dist/aibp/index.js +10 -0
- package/dist/aibp/index.js.map +1 -0
- package/dist/aibp/registry.d.ts +71 -0
- package/dist/aibp/registry.d.ts.map +1 -0
- package/dist/aibp/registry.js +408 -0
- package/dist/aibp/registry.js.map +1 -0
- package/dist/aibp/types.d.ts +91 -0
- package/dist/aibp/types.d.ts.map +1 -0
- package/dist/aibp/types.js +8 -0
- package/dist/aibp/types.js.map +1 -0
- package/dist/core/state.d.ts +12 -0
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +34 -0
- package/dist/core/state.js.map +1 -1
- package/dist/daemon/adapter-registry.d.ts.map +1 -1
- package/dist/daemon/adapter-registry.js +32 -3
- package/dist/daemon/adapter-registry.js.map +1 -1
- package/dist/daemon/command-context.d.ts +4 -0
- package/dist/daemon/command-context.d.ts.map +1 -1
- package/dist/daemon/commands.d.ts.map +1 -1
- package/dist/daemon/commands.js +239 -22
- package/dist/daemon/commands.js.map +1 -1
- package/dist/daemon/core-handlers.d.ts.map +1 -1
- package/dist/daemon/core-handlers.js +276 -15
- package/dist/daemon/core-handlers.js.map +1 -1
- package/dist/daemon/image-context.d.ts +56 -0
- package/dist/daemon/image-context.d.ts.map +1 -0
- package/dist/daemon/image-context.js +116 -0
- package/dist/daemon/image-context.js.map +1 -0
- package/dist/daemon/image-gen/index.d.ts +22 -0
- package/dist/daemon/image-gen/index.d.ts.map +1 -0
- package/dist/daemon/image-gen/index.js +129 -0
- package/dist/daemon/image-gen/index.js.map +1 -0
- package/dist/daemon/image-gen/providers/cloudflare.d.ts +13 -0
- package/dist/daemon/image-gen/providers/cloudflare.d.ts.map +1 -0
- package/dist/daemon/image-gen/providers/cloudflare.js +63 -0
- package/dist/daemon/image-gen/providers/cloudflare.js.map +1 -0
- package/dist/daemon/image-gen/providers/huggingface.d.ts +12 -0
- package/dist/daemon/image-gen/providers/huggingface.d.ts.map +1 -0
- package/dist/daemon/image-gen/providers/huggingface.js +58 -0
- package/dist/daemon/image-gen/providers/huggingface.js.map +1 -0
- package/dist/daemon/image-gen/providers/pollinations.d.ts +11 -0
- package/dist/daemon/image-gen/providers/pollinations.d.ts.map +1 -0
- package/dist/daemon/image-gen/providers/pollinations.js +39 -0
- package/dist/daemon/image-gen/providers/pollinations.js.map +1 -0
- package/dist/daemon/image-gen/providers/replicate.d.ts +9 -0
- package/dist/daemon/image-gen/providers/replicate.d.ts.map +1 -0
- package/dist/daemon/image-gen/providers/replicate.js +158 -0
- package/dist/daemon/image-gen/providers/replicate.js.map +1 -0
- package/dist/daemon/image-gen/types.d.ts +41 -0
- package/dist/daemon/image-gen/types.d.ts.map +1 -0
- package/dist/daemon/image-gen/types.js +5 -0
- package/dist/daemon/image-gen/types.js.map +1 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +157 -4
- package/dist/daemon/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.js +129 -2
- package/dist/mcp/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-13-56).d.ts +0 -49
- package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-13-56).d.ts.map +0 -1
- package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-13-56).js +0 -632
- package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-13-56).js.map +0 -1
- package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-13-59).js +0 -632
- package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-15-36).d.ts +0 -49
- package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-15-36).d.ts.map +0 -1
- package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-15-36).js +0 -614
- package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-15-36).js.map +0 -1
- package/dist/adapters/pailot/gateway (SFConflict mnott 2026-03-06-21-15-46).js +0 -614
- package/dist/adapters/pailot/gateway.d.ts (SFConflict mnott 2026-03-06-21-13-59).map +0 -1
- package/dist/adapters/pailot/gateway.d.ts (SFConflict mnott 2026-03-06-21-15-46).map +0 -1
- package/dist/adapters/pailot/gateway.js (SFConflict mnott 2026-03-06-21-13-59).map +0 -1
- package/dist/adapters/pailot/gateway.js (SFConflict mnott 2026-03-06-21-15-46).map +0 -1
- package/dist/daemon/adapter-registry (SFConflict mnott 2026-03-06-21-15-36).d.ts +0 -63
- package/dist/daemon/adapter-registry (SFConflict mnott 2026-03-06-21-15-36).d.ts.map +0 -1
- package/dist/daemon/adapter-registry (SFConflict mnott 2026-03-06-21-15-36).js +0 -229
- package/dist/daemon/adapter-registry (SFConflict mnott 2026-03-06-21-15-36).js.map +0 -1
- package/dist/daemon/image-gen.d.ts +0 -28
- package/dist/daemon/image-gen.d.ts.map +0 -1
- package/dist/daemon/image-gen.js +0 -97
- package/dist/daemon/image-gen.js.map +0 -1
- package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-13-56).d.ts +0 -12
- package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-13-56).d.ts.map +0 -1
- package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-13-56).js +0 -252
- package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-13-56).js.map +0 -1
- package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-13-59).js +0 -252
- package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-15-36).d.ts +0 -12
- package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-15-36).d.ts.map +0 -1
- package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-15-36).js +0 -240
- package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-15-36).js.map +0 -1
- package/dist/daemon/screenshot (SFConflict mnott 2026-03-06-21-15-46).js +0 -240
- package/dist/daemon/screenshot.d.ts (SFConflict mnott 2026-03-06-21-13-59).map +0 -1
- package/dist/daemon/screenshot.d.ts (SFConflict mnott 2026-03-06-21-15-46).map +0 -1
- package/dist/daemon/screenshot.js (SFConflict mnott 2026-03-06-21-13-59).map +0 -1
- package/dist/daemon/screenshot.js (SFConflict mnott 2026-03-06-21-15-46).map +0 -1
- package/dist/mcp/index (SFConflict mnott 2026-03-06-21-13-56).d.ts +0 -23
- package/dist/mcp/index (SFConflict mnott 2026-03-06-21-13-56).d.ts.map +0 -1
- package/dist/mcp/index (SFConflict mnott 2026-03-06-21-13-56).js +0 -595
- package/dist/mcp/index (SFConflict mnott 2026-03-06-21-13-56).js.map +0 -1
- package/dist/mcp/index (SFConflict mnott 2026-03-06-21-13-59).js +0 -595
- package/dist/mcp/index (SFConflict mnott 2026-03-06-21-15-36).d.ts +0 -23
- package/dist/mcp/index (SFConflict mnott 2026-03-06-21-15-36).d.ts.map +0 -1
- package/dist/mcp/index (SFConflict mnott 2026-03-06-21-15-36).js +0 -592
- package/dist/mcp/index (SFConflict mnott 2026-03-06-21-15-36).js.map +0 -1
- package/dist/mcp/index (SFConflict mnott 2026-03-06-21-15-46).js +0 -592
- package/dist/mcp/index.js (SFConflict mnott 2026-03-06-21-13-59).map +0 -1
- package/dist/mcp/index.js (SFConflict mnott 2026-03-06-21-15-46).map +0 -1
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIBP Plugin Registry — manages plugin connections, channels, and routing.
|
|
3
|
+
*
|
|
4
|
+
* This is the hub's brain. It knows:
|
|
5
|
+
* - Which plugins are registered and their capabilities
|
|
6
|
+
* - Which channels exist and who has joined them
|
|
7
|
+
* - Where to route each message based on dst address
|
|
8
|
+
* - What to buffer when a recipient is offline
|
|
9
|
+
*/
|
|
10
|
+
import { log } from "../core/log.js";
|
|
11
|
+
import * as envelope from "./envelope.js";
|
|
12
|
+
const MAX_OUTBOX = 50;
|
|
13
|
+
const HEARTBEAT_INTERVAL_MS = 30_000;
|
|
14
|
+
const HEARTBEAT_MISS_DEGRADED = 3;
|
|
15
|
+
const HEARTBEAT_MISS_DEAD = 5;
|
|
16
|
+
export class PluginRegistry {
|
|
17
|
+
/** address → connection */
|
|
18
|
+
plugins = new Map();
|
|
19
|
+
/** channel name → membership */
|
|
20
|
+
channels = new Map();
|
|
21
|
+
/** command name → plugin address */
|
|
22
|
+
commands = new Map();
|
|
23
|
+
// -------------------------------------------------------------------------
|
|
24
|
+
// Plugin lifecycle
|
|
25
|
+
// -------------------------------------------------------------------------
|
|
26
|
+
/**
|
|
27
|
+
* Register a plugin. Returns the REGISTER_ACK message to send back,
|
|
28
|
+
* or an ERROR message if registration fails.
|
|
29
|
+
*/
|
|
30
|
+
register(spec, send) {
|
|
31
|
+
const address = this.resolveAddress(spec);
|
|
32
|
+
// Reject duplicate
|
|
33
|
+
if (this.plugins.has(address)) {
|
|
34
|
+
log(`[AIBP] REGISTER rejected: ${address} already registered`);
|
|
35
|
+
return envelope.system("hub:local", address, "ERROR", {
|
|
36
|
+
code: "REGISTER_REJECTED",
|
|
37
|
+
reason: `Plugin address ${address} already registered`,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const plugin = {
|
|
41
|
+
spec,
|
|
42
|
+
address,
|
|
43
|
+
connectedAt: Date.now(),
|
|
44
|
+
missedPings: 0,
|
|
45
|
+
status: "active",
|
|
46
|
+
joinedChannels: new Set(),
|
|
47
|
+
};
|
|
48
|
+
this.plugins.set(address, { plugin, send });
|
|
49
|
+
// Register commands
|
|
50
|
+
if (spec.commands) {
|
|
51
|
+
for (const cmd of spec.commands) {
|
|
52
|
+
this.commands.set(cmd.name, address);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Auto-join declared channels
|
|
56
|
+
for (const ch of spec.channels) {
|
|
57
|
+
this.join(address, ch);
|
|
58
|
+
}
|
|
59
|
+
log(`[AIBP] REGISTER ${spec.type}:${spec.id} → ${address}`);
|
|
60
|
+
const peers = Array.from(this.plugins.keys()).filter((a) => a !== address);
|
|
61
|
+
return envelope.system("hub:local", address, "REGISTER_ACK", {
|
|
62
|
+
assignedAddress: address,
|
|
63
|
+
hubVersion: "0.1",
|
|
64
|
+
peers,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Unregister a plugin (graceful disconnect or crash cleanup).
|
|
69
|
+
*/
|
|
70
|
+
unregister(address, reason = "disconnected") {
|
|
71
|
+
const conn = this.plugins.get(address);
|
|
72
|
+
if (!conn)
|
|
73
|
+
return;
|
|
74
|
+
// Part all joined channels
|
|
75
|
+
for (const ch of conn.plugin.joinedChannels) {
|
|
76
|
+
this.part(address, ch, reason);
|
|
77
|
+
}
|
|
78
|
+
// Remove commands
|
|
79
|
+
if (conn.plugin.spec.commands) {
|
|
80
|
+
for (const cmd of conn.plugin.spec.commands) {
|
|
81
|
+
if (this.commands.get(cmd.name) === address) {
|
|
82
|
+
this.commands.delete(cmd.name);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
this.plugins.delete(address);
|
|
87
|
+
log(`[AIBP] UNREGISTER ${address} (${reason})`);
|
|
88
|
+
// Notify all remaining plugins
|
|
89
|
+
for (const [, other] of this.plugins) {
|
|
90
|
+
other.send(envelope.system("hub:local", other.plugin.address, "PLUGIN_OFFLINE", {
|
|
91
|
+
plugin: address,
|
|
92
|
+
reason,
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// -------------------------------------------------------------------------
|
|
97
|
+
// Channel management
|
|
98
|
+
// -------------------------------------------------------------------------
|
|
99
|
+
/**
|
|
100
|
+
* Join a channel. Creates the channel if it doesn't exist.
|
|
101
|
+
*/
|
|
102
|
+
join(address, channel) {
|
|
103
|
+
let membership = this.channels.get(channel);
|
|
104
|
+
if (!membership) {
|
|
105
|
+
membership = { channel, members: new Set(), outbox: [] };
|
|
106
|
+
this.channels.set(channel, membership);
|
|
107
|
+
}
|
|
108
|
+
membership.members.add(address);
|
|
109
|
+
const conn = this.plugins.get(address);
|
|
110
|
+
if (conn) {
|
|
111
|
+
conn.plugin.joinedChannels.add(channel);
|
|
112
|
+
}
|
|
113
|
+
log(`[AIBP] JOIN ${address} → ${channel} (${membership.members.size} members)`);
|
|
114
|
+
// Drain outbox for this member
|
|
115
|
+
const buffered = membership.outbox.length;
|
|
116
|
+
if (buffered > 0) {
|
|
117
|
+
this.drainOutbox(address, channel);
|
|
118
|
+
}
|
|
119
|
+
return envelope.system("hub:local", address, "JOIN_ACK", {
|
|
120
|
+
channel,
|
|
121
|
+
members: Array.from(membership.members),
|
|
122
|
+
unreadCount: buffered,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Part a channel.
|
|
127
|
+
*/
|
|
128
|
+
part(address, channel, reason = "left") {
|
|
129
|
+
const membership = this.channels.get(channel);
|
|
130
|
+
if (membership) {
|
|
131
|
+
membership.members.delete(address);
|
|
132
|
+
// Clean up empty channels (except persistent session channels)
|
|
133
|
+
if (membership.members.size === 0 && !channel.startsWith("session:")) {
|
|
134
|
+
this.channels.delete(channel);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const conn = this.plugins.get(address);
|
|
138
|
+
if (conn) {
|
|
139
|
+
conn.plugin.joinedChannels.delete(channel);
|
|
140
|
+
}
|
|
141
|
+
log(`[AIBP] PART ${address} ← ${channel} (${reason})`);
|
|
142
|
+
return envelope.system("hub:local", address, "PART_ACK", {
|
|
143
|
+
channel,
|
|
144
|
+
reason,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
// -------------------------------------------------------------------------
|
|
148
|
+
// Message routing — the core of AIBP
|
|
149
|
+
// -------------------------------------------------------------------------
|
|
150
|
+
/**
|
|
151
|
+
* Route a message to its destination.
|
|
152
|
+
*
|
|
153
|
+
* Routing rules:
|
|
154
|
+
* 1. If dst is a direct address (plugin/session/mobile), deliver to that plugin
|
|
155
|
+
* 2. If dst is a channel, fan out to all members
|
|
156
|
+
* 3. If dst is "hub:local", handle as a hub command
|
|
157
|
+
* 4. If dst contains "/" (mesh), forward to bridge plugin
|
|
158
|
+
* 5. If recipient is offline, buffer in outbox
|
|
159
|
+
*/
|
|
160
|
+
route(msg) {
|
|
161
|
+
const { dst } = msg;
|
|
162
|
+
// Mesh routing — forward to the appropriate bridge
|
|
163
|
+
const mesh = envelope.parseMeshAddress(dst);
|
|
164
|
+
if (mesh) {
|
|
165
|
+
this.routeToMesh(msg, mesh.hub, mesh.local);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
// Hub command
|
|
169
|
+
if (dst === "hub:local") {
|
|
170
|
+
this.handleHubMessage(msg);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
// Direct plugin address
|
|
174
|
+
const directConn = this.plugins.get(dst);
|
|
175
|
+
if (directConn) {
|
|
176
|
+
directConn.send(msg);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// Channel fan-out
|
|
180
|
+
const membership = this.channels.get(dst);
|
|
181
|
+
if (membership) {
|
|
182
|
+
this.fanOut(msg, membership);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// Try to match as a session channel
|
|
186
|
+
if (dst.startsWith("session:")) {
|
|
187
|
+
// Auto-create the channel and buffer
|
|
188
|
+
const newMembership = {
|
|
189
|
+
channel: dst,
|
|
190
|
+
members: new Set(),
|
|
191
|
+
outbox: [],
|
|
192
|
+
};
|
|
193
|
+
this.channels.set(dst, newMembership);
|
|
194
|
+
this.bufferMessage(newMembership, msg);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
log(`[AIBP] ROUTE FAIL: no destination for ${dst} (from ${msg.src})`);
|
|
198
|
+
}
|
|
199
|
+
fanOut(msg, membership) {
|
|
200
|
+
membership.lastMessageId = msg.id;
|
|
201
|
+
membership.lastMessageTs = msg.ts;
|
|
202
|
+
let delivered = 0;
|
|
203
|
+
for (const member of membership.members) {
|
|
204
|
+
// Don't echo back to sender
|
|
205
|
+
if (member === msg.src)
|
|
206
|
+
continue;
|
|
207
|
+
const conn = this.plugins.get(member);
|
|
208
|
+
if (conn) {
|
|
209
|
+
conn.send(msg);
|
|
210
|
+
delivered++;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Buffer for offline members who have joined this channel before
|
|
214
|
+
if (delivered === 0 && membership.members.size === 0) {
|
|
215
|
+
this.bufferMessage(membership, msg);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
routeToMesh(msg, hubAddress, localDst) {
|
|
219
|
+
// Extract the hub ID from hub address (e.g., "hub:mac-mini" → "mac-mini")
|
|
220
|
+
const hubId = hubAddress.startsWith("hub:") ? hubAddress.slice(4) : hubAddress;
|
|
221
|
+
// Try to find the specific bridge for this hub first
|
|
222
|
+
const specificBridge = this.plugins.get(`bridge:${hubId}`);
|
|
223
|
+
if (specificBridge) {
|
|
224
|
+
specificBridge.send(msg);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
// Fallback: find any bridge plugin
|
|
228
|
+
for (const [, conn] of this.plugins) {
|
|
229
|
+
if (conn.plugin.spec.type === "bridge") {
|
|
230
|
+
conn.send(msg);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
log(`[AIBP] MESH FAIL: no bridge plugin for ${hubAddress}`);
|
|
235
|
+
}
|
|
236
|
+
handleHubMessage(msg) {
|
|
237
|
+
if (msg.type === "COMMAND") {
|
|
238
|
+
const payload = msg.payload;
|
|
239
|
+
const cmdOwner = this.commands.get(payload.command);
|
|
240
|
+
if (cmdOwner) {
|
|
241
|
+
const conn = this.plugins.get(cmdOwner);
|
|
242
|
+
if (conn) {
|
|
243
|
+
conn.send(msg);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// Built-in hub commands
|
|
248
|
+
this.handleBuiltinCommand(msg, payload.command, payload.args);
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (msg.type === "SYSTEM") {
|
|
252
|
+
const payload = msg.payload;
|
|
253
|
+
if (payload.event === "PING") {
|
|
254
|
+
const conn = this.plugins.get(msg.src);
|
|
255
|
+
if (conn) {
|
|
256
|
+
conn.plugin.lastPing = Date.now();
|
|
257
|
+
conn.plugin.missedPings = 0;
|
|
258
|
+
conn.plugin.status = "active";
|
|
259
|
+
conn.send(envelope.system("hub:local", msg.src, "PONG"));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
handleBuiltinCommand(msg, cmd, args) {
|
|
265
|
+
const src = msg.src;
|
|
266
|
+
switch (cmd) {
|
|
267
|
+
case "list_channels": {
|
|
268
|
+
const channels = Array.from(this.channels.entries()).map(([name, m]) => ({
|
|
269
|
+
name,
|
|
270
|
+
members: m.members.size,
|
|
271
|
+
lastActivity: m.lastMessageTs,
|
|
272
|
+
outboxSize: m.outbox.length,
|
|
273
|
+
}));
|
|
274
|
+
const reply = envelope.system("hub:local", src, "REGISTER_ACK", { channels });
|
|
275
|
+
this.sendTo(src, reply);
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
case "list_plugins": {
|
|
279
|
+
const plugins = Array.from(this.plugins.entries()).map(([addr, c]) => ({
|
|
280
|
+
address: addr,
|
|
281
|
+
type: c.plugin.spec.type,
|
|
282
|
+
name: c.plugin.spec.name,
|
|
283
|
+
status: c.plugin.status,
|
|
284
|
+
channels: Array.from(c.plugin.joinedChannels),
|
|
285
|
+
}));
|
|
286
|
+
const reply = envelope.system("hub:local", src, "REGISTER_ACK", { plugins });
|
|
287
|
+
this.sendTo(src, reply);
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
default:
|
|
291
|
+
log(`[AIBP] Unknown hub command: ${cmd}`);
|
|
292
|
+
this.sendTo(src, envelope.system("hub:local", src, "ERROR", {
|
|
293
|
+
code: "UNKNOWN_COMMAND",
|
|
294
|
+
command: cmd,
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// -------------------------------------------------------------------------
|
|
299
|
+
// Outbox
|
|
300
|
+
// -------------------------------------------------------------------------
|
|
301
|
+
bufferMessage(membership, msg) {
|
|
302
|
+
// Don't buffer typing indicators or pings
|
|
303
|
+
if (msg.type === "TYPING" || msg.type === "SYSTEM")
|
|
304
|
+
return;
|
|
305
|
+
if (membership.outbox.length >= MAX_OUTBOX) {
|
|
306
|
+
membership.outbox.shift(); // Drop oldest
|
|
307
|
+
}
|
|
308
|
+
membership.outbox.push(msg);
|
|
309
|
+
log(`[AIBP] OUTBOX ${msg.dst}: ${membership.outbox.length} buffered`);
|
|
310
|
+
}
|
|
311
|
+
drainOutbox(address, channel) {
|
|
312
|
+
const membership = this.channels.get(channel);
|
|
313
|
+
if (!membership || membership.outbox.length === 0)
|
|
314
|
+
return;
|
|
315
|
+
const conn = this.plugins.get(address);
|
|
316
|
+
if (!conn)
|
|
317
|
+
return;
|
|
318
|
+
const count = membership.outbox.length;
|
|
319
|
+
// Send drain header
|
|
320
|
+
conn.send(envelope.system("hub:local", address, "OUTBOX_DRAIN", {
|
|
321
|
+
channel,
|
|
322
|
+
count,
|
|
323
|
+
summary: `${count} message${count > 1 ? "s" : ""} while offline`,
|
|
324
|
+
}));
|
|
325
|
+
// Deliver buffered messages
|
|
326
|
+
for (const msg of membership.outbox) {
|
|
327
|
+
conn.send(msg);
|
|
328
|
+
}
|
|
329
|
+
membership.outbox = [];
|
|
330
|
+
log(`[AIBP] OUTBOX DRAIN ${channel} → ${address}: ${count} messages`);
|
|
331
|
+
}
|
|
332
|
+
// -------------------------------------------------------------------------
|
|
333
|
+
// Heartbeat monitoring
|
|
334
|
+
// -------------------------------------------------------------------------
|
|
335
|
+
/**
|
|
336
|
+
* Call periodically (e.g., every 30s) to check plugin health.
|
|
337
|
+
*/
|
|
338
|
+
heartbeatCheck() {
|
|
339
|
+
for (const [address, conn] of this.plugins) {
|
|
340
|
+
conn.plugin.missedPings++;
|
|
341
|
+
if (conn.plugin.missedPings >= HEARTBEAT_MISS_DEAD) {
|
|
342
|
+
log(`[AIBP] Plugin dead: ${address} (${conn.plugin.missedPings} missed pings)`);
|
|
343
|
+
this.unregister(address, "heartbeat timeout");
|
|
344
|
+
}
|
|
345
|
+
else if (conn.plugin.missedPings >= HEARTBEAT_MISS_DEGRADED) {
|
|
346
|
+
conn.plugin.status = "degraded";
|
|
347
|
+
log(`[AIBP] Plugin degraded: ${address}`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
// -------------------------------------------------------------------------
|
|
352
|
+
// Queries
|
|
353
|
+
// -------------------------------------------------------------------------
|
|
354
|
+
getPlugin(address) {
|
|
355
|
+
return this.plugins.get(address)?.plugin;
|
|
356
|
+
}
|
|
357
|
+
getChannel(channel) {
|
|
358
|
+
return this.channels.get(channel);
|
|
359
|
+
}
|
|
360
|
+
getPluginByType(type) {
|
|
361
|
+
return Array.from(this.plugins.values())
|
|
362
|
+
.filter((c) => c.plugin.spec.type === type)
|
|
363
|
+
.map((c) => c.plugin);
|
|
364
|
+
}
|
|
365
|
+
getCommandOwner(command) {
|
|
366
|
+
return this.commands.get(command);
|
|
367
|
+
}
|
|
368
|
+
listPlugins() {
|
|
369
|
+
return Array.from(this.plugins.values()).map((c) => c.plugin);
|
|
370
|
+
}
|
|
371
|
+
listChannels() {
|
|
372
|
+
return Array.from(this.channels.values());
|
|
373
|
+
}
|
|
374
|
+
listCommands() {
|
|
375
|
+
return Array.from(this.commands.entries()).map(([name, owner]) => {
|
|
376
|
+
const conn = this.plugins.get(owner);
|
|
377
|
+
const spec = conn?.plugin.spec.commands?.find((c) => c.name === name);
|
|
378
|
+
return { name, owner, spec };
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
// -------------------------------------------------------------------------
|
|
382
|
+
// Internal helpers
|
|
383
|
+
// -------------------------------------------------------------------------
|
|
384
|
+
sendTo(address, msg) {
|
|
385
|
+
const conn = this.plugins.get(address);
|
|
386
|
+
if (conn)
|
|
387
|
+
conn.send(msg);
|
|
388
|
+
}
|
|
389
|
+
resolveAddress(spec) {
|
|
390
|
+
switch (spec.type) {
|
|
391
|
+
case "transport":
|
|
392
|
+
return `transport:${spec.id}`;
|
|
393
|
+
case "terminal":
|
|
394
|
+
return `terminal:${spec.id}`;
|
|
395
|
+
case "mobile":
|
|
396
|
+
return `mobile:${spec.id}`;
|
|
397
|
+
case "bridge":
|
|
398
|
+
return `bridge:${spec.id}`;
|
|
399
|
+
case "mcp":
|
|
400
|
+
return `mcp:${spec.id}`;
|
|
401
|
+
case "hub":
|
|
402
|
+
return `hub:${spec.id}`;
|
|
403
|
+
default:
|
|
404
|
+
return `plugin:${spec.id}`;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/aibp/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIBP — AIBroker Interchange Protocol
|
|
3
|
+
*
|
|
4
|
+
* Canonical types for the protocol. Source of truth is SPEC-aibp-protocol.md.
|
|
5
|
+
* Every message has explicit src/dst addressing — no guessing.
|
|
6
|
+
*/
|
|
7
|
+
export type MessageType = "TEXT" | "VOICE" | "IMAGE" | "COMMAND" | "SYSTEM" | "TYPING" | "STATUS" | "FILE";
|
|
8
|
+
export type SystemEvent = "REGISTER" | "REGISTER_ACK" | "JOIN" | "JOIN_ACK" | "PART" | "PART_ACK" | "PING" | "PONG" | "ERROR" | "SHUTDOWN" | "OUTBOX_DRAIN" | "PLUGIN_OFFLINE";
|
|
9
|
+
export interface TextPayload {
|
|
10
|
+
content: string;
|
|
11
|
+
}
|
|
12
|
+
export interface VoicePayload {
|
|
13
|
+
audioBase64: string;
|
|
14
|
+
transcript: string;
|
|
15
|
+
transcriptConfidence?: number;
|
|
16
|
+
durationMs?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ImagePayload {
|
|
19
|
+
imageBase64: string;
|
|
20
|
+
mimeType: string;
|
|
21
|
+
caption?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface TypingPayload {
|
|
24
|
+
active: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface StatusPayload {
|
|
27
|
+
subject: string;
|
|
28
|
+
state: "idle" | "busy" | "error" | "disconnected";
|
|
29
|
+
summary?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface CommandPayload {
|
|
32
|
+
command: string;
|
|
33
|
+
args: Record<string, unknown>;
|
|
34
|
+
}
|
|
35
|
+
export interface SystemPayload {
|
|
36
|
+
event: SystemEvent;
|
|
37
|
+
[key: string]: unknown;
|
|
38
|
+
}
|
|
39
|
+
export interface FilePayload {
|
|
40
|
+
filename: string;
|
|
41
|
+
mimeType: string;
|
|
42
|
+
dataBase64?: string;
|
|
43
|
+
path?: string;
|
|
44
|
+
sizeBytes?: number;
|
|
45
|
+
}
|
|
46
|
+
export type AibpPayload = TextPayload | VoicePayload | ImagePayload | TypingPayload | StatusPayload | CommandPayload | SystemPayload | FilePayload;
|
|
47
|
+
export interface AibpMessage<P extends AibpPayload = AibpPayload> {
|
|
48
|
+
aibp: "0.1";
|
|
49
|
+
id: string;
|
|
50
|
+
ts: number;
|
|
51
|
+
src: string;
|
|
52
|
+
dst: string;
|
|
53
|
+
type: MessageType;
|
|
54
|
+
payload: P;
|
|
55
|
+
}
|
|
56
|
+
export type PluginType = "transport" | "terminal" | "mobile" | "bridge" | "mcp" | "hub";
|
|
57
|
+
export interface CommandSpec {
|
|
58
|
+
name: string;
|
|
59
|
+
description: string;
|
|
60
|
+
args: string;
|
|
61
|
+
subcommands?: CommandSpec[];
|
|
62
|
+
}
|
|
63
|
+
export interface PluginSpec {
|
|
64
|
+
id: string;
|
|
65
|
+
type: PluginType;
|
|
66
|
+
name: string;
|
|
67
|
+
version?: string;
|
|
68
|
+
capabilities: MessageType[];
|
|
69
|
+
channels: string[];
|
|
70
|
+
commands?: CommandSpec[];
|
|
71
|
+
}
|
|
72
|
+
export interface PluginAuth {
|
|
73
|
+
token?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface ChannelMembership {
|
|
76
|
+
channel: string;
|
|
77
|
+
members: Set<string>;
|
|
78
|
+
lastMessageId?: string;
|
|
79
|
+
lastMessageTs?: number;
|
|
80
|
+
outbox: AibpMessage[];
|
|
81
|
+
}
|
|
82
|
+
export interface RegisteredPlugin {
|
|
83
|
+
spec: PluginSpec;
|
|
84
|
+
address: string;
|
|
85
|
+
connectedAt: number;
|
|
86
|
+
lastPing?: number;
|
|
87
|
+
missedPings: number;
|
|
88
|
+
status: "active" | "degraded" | "dead";
|
|
89
|
+
joinedChannels: Set<string>;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/aibp/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/aibp/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/dist/core/state.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export declare const managedSessions: Map<string, {
|
|
|
14
14
|
export declare const sessionTtyCache: Map<string, string>;
|
|
15
15
|
export declare let activeClientId: string | null;
|
|
16
16
|
export declare let activeItermSessionId: string;
|
|
17
|
+
export declare let lastRoutedSessionId: string;
|
|
18
|
+
export declare function setLastRoutedSessionId(id: string): void;
|
|
17
19
|
export declare function setActiveClientId(id: string | null): void;
|
|
18
20
|
export declare function setActiveItermSessionId(id: string): void;
|
|
19
21
|
export declare function updateSessionTtyCache(entries: Array<{
|
|
@@ -36,6 +38,9 @@ export declare const contactMessageQueues: Map<string, QueuedMessage[]>;
|
|
|
36
38
|
export declare const contactDirectory: Map<string, ContactEntry>;
|
|
37
39
|
export declare let voiceConfig: VoiceConfig;
|
|
38
40
|
export declare function setVoiceConfig(cfg: VoiceConfig): void;
|
|
41
|
+
import type { AibpBridge } from "../aibp/bridge.js";
|
|
42
|
+
export declare function setAibpBridge(bridge: AibpBridge): void;
|
|
43
|
+
export declare function getAibpBridge(): AibpBridge | null;
|
|
39
44
|
export type CommandHandler = (text: string, timestamp: number) => void | Promise<void>;
|
|
40
45
|
export declare let commandHandler: CommandHandler | null;
|
|
41
46
|
export declare function setCommandHandler(handler: CommandHandler | null): void;
|
|
@@ -43,6 +48,13 @@ export type MessageSource = string;
|
|
|
43
48
|
export declare let messageSource: MessageSource;
|
|
44
49
|
export declare function setMessageSource(src: MessageSource): void;
|
|
45
50
|
export declare const sentMessageIds: Set<string | number>;
|
|
51
|
+
export interface MailboxMessage {
|
|
52
|
+
from: string;
|
|
53
|
+
content: string;
|
|
54
|
+
timestamp: number;
|
|
55
|
+
}
|
|
56
|
+
export declare function depositToSessionMailbox(itermSessionId: string, from: string, content: string): void;
|
|
57
|
+
export declare function drainSessionMailbox(itermSessionId: string): MailboxMessage[];
|
|
46
58
|
export declare function dispatchIncomingMessage(body: string, timestamp: number): void;
|
|
47
59
|
export declare function enqueueContactMessage(contactId: string, body: string, timestamp: number): void;
|
|
48
60
|
//# sourceMappingURL=state.d.ts.map
|
package/dist/core/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAI3B,eAAO,MAAM,eAAe,gCAAuC,CAAC;AACpE,eAAO,MAAM,eAAe;UAA2B,MAAM;eAAa,MAAM;EAAK,CAAC;AACtF,eAAO,MAAM,eAAe,qBAA4B,CAAC;AAEzD,eAAO,IAAI,cAAc,EAAE,MAAM,GAAG,IAAW,CAAC;AAChD,eAAO,IAAI,oBAAoB,QAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"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"}
|
package/dist/core/state.js
CHANGED
|
@@ -11,6 +11,13 @@ export const managedSessions = new Map();
|
|
|
11
11
|
export const sessionTtyCache = new Map();
|
|
12
12
|
export let activeClientId = null;
|
|
13
13
|
export let activeItermSessionId = "";
|
|
14
|
+
// Track the session that last received user input from PAILot.
|
|
15
|
+
// Used to tag responses correctly even if the user switches sessions
|
|
16
|
+
// before the response arrives (race condition prevention).
|
|
17
|
+
export let lastRoutedSessionId = "";
|
|
18
|
+
export function setLastRoutedSessionId(id) {
|
|
19
|
+
lastRoutedSessionId = id;
|
|
20
|
+
}
|
|
14
21
|
export function setActiveClientId(id) {
|
|
15
22
|
activeClientId = id;
|
|
16
23
|
}
|
|
@@ -46,6 +53,13 @@ export let voiceConfig = {
|
|
|
46
53
|
export function setVoiceConfig(cfg) {
|
|
47
54
|
voiceConfig = cfg;
|
|
48
55
|
}
|
|
56
|
+
let _aibpBridge = null;
|
|
57
|
+
export function setAibpBridge(bridge) {
|
|
58
|
+
_aibpBridge = bridge;
|
|
59
|
+
}
|
|
60
|
+
export function getAibpBridge() {
|
|
61
|
+
return _aibpBridge;
|
|
62
|
+
}
|
|
49
63
|
export let commandHandler = null;
|
|
50
64
|
export function setCommandHandler(handler) {
|
|
51
65
|
commandHandler = handler;
|
|
@@ -56,6 +70,26 @@ export function setMessageSource(src) {
|
|
|
56
70
|
}
|
|
57
71
|
// ── Self-Echo Suppression ──
|
|
58
72
|
export const sentMessageIds = new Set();
|
|
73
|
+
const sessionMailboxes = new Map();
|
|
74
|
+
const MAX_MAILBOX = 100;
|
|
75
|
+
export function depositToSessionMailbox(itermSessionId, from, content) {
|
|
76
|
+
let queue = sessionMailboxes.get(itermSessionId);
|
|
77
|
+
if (!queue) {
|
|
78
|
+
queue = [];
|
|
79
|
+
sessionMailboxes.set(itermSessionId, queue);
|
|
80
|
+
}
|
|
81
|
+
if (queue.length >= MAX_MAILBOX) {
|
|
82
|
+
queue.shift(); // drop oldest
|
|
83
|
+
}
|
|
84
|
+
queue.push({ from, content, timestamp: Date.now() });
|
|
85
|
+
}
|
|
86
|
+
export function drainSessionMailbox(itermSessionId) {
|
|
87
|
+
const queue = sessionMailboxes.get(itermSessionId);
|
|
88
|
+
if (!queue || queue.length === 0)
|
|
89
|
+
return [];
|
|
90
|
+
const messages = queue.splice(0);
|
|
91
|
+
return messages;
|
|
92
|
+
}
|
|
59
93
|
// ── Message Dispatch ──
|
|
60
94
|
export function dispatchIncomingMessage(body, timestamp) {
|
|
61
95
|
if (!activeClientId)
|
package/dist/core/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,yBAAyB;AAEzB,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,EAA6B,CAAC;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,EAA+C,CAAC;AACtF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEzD,MAAM,CAAC,IAAI,cAAc,GAAkB,IAAI,CAAC;AAChD,MAAM,CAAC,IAAI,oBAAoB,GAAG,EAAE,CAAC;AAErC,MAAM,UAAU,iBAAiB,CAAC,EAAiB;IACjD,cAAc,GAAG,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,EAAU;IAChD,oBAAoB,GAAG,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAA2C;IAC/E,KAAK,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,OAAO,EAAE,CAAC;QAClC,IAAI,GAAG;YAAE,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,qDAAqD;AAErD,MAAM,CAAC,IAAI,iBAAiB,GAOhB,IAAI,CAAC;AAEjB,MAAM,CAAC,IAAI,qBAAqB,GAAG,CAAC,CAAC;AAErC,MAAM,UAAU,oBAAoB,CAClC,IAA8B,EAC9B,IAAY;IAEZ,iBAAiB,GAAG,IAAI,CAAC;IACzB,qBAAqB,GAAG,IAAI,CAAC;AAC/B,CAAC;AAED,uBAAuB;AAEvB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,EAA2B,CAAC;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEvE,0BAA0B;AAE1B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAwB,CAAC;AAEhE,qBAAqB;AAErB,MAAM,CAAC,IAAI,WAAW,GAAgB;IACpC,YAAY,EAAE,UAAU;IACxB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,GAAgB;IAC7C,WAAW,GAAG,GAAG,CAAC;AACpB,CAAC;AAMD,MAAM,CAAC,IAAI,cAAc,GAA0B,IAAI,CAAC;AAExD,MAAM,UAAU,iBAAiB,CAAC,OAA8B;IAC9D,cAAc,GAAG,OAAO,CAAC;AAC3B,CAAC;AAKD,MAAM,CAAC,IAAI,aAAa,GAAkB,UAAU,CAAC;AAErD,MAAM,UAAU,gBAAgB,CAAC,GAAkB;IACjD,aAAa,GAAG,GAAG,CAAC;AACtB,CAAC;AAED,8BAA8B;AAE9B,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"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"}
|