agent-relay 1.0.7 → 1.0.9
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 +176 -6
- package/dist/bridge/config.d.ts +41 -0
- package/dist/bridge/config.d.ts.map +1 -0
- package/dist/bridge/config.js +143 -0
- package/dist/bridge/config.js.map +1 -0
- package/dist/bridge/index.d.ts +10 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +10 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/multi-project-client.d.ts +99 -0
- package/dist/bridge/multi-project-client.d.ts.map +1 -0
- package/dist/bridge/multi-project-client.js +386 -0
- package/dist/bridge/multi-project-client.js.map +1 -0
- package/dist/bridge/spawner.d.ts +46 -0
- package/dist/bridge/spawner.d.ts.map +1 -0
- package/dist/bridge/spawner.js +223 -0
- package/dist/bridge/spawner.js.map +1 -0
- package/dist/bridge/types.d.ts +55 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +6 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/bridge/utils.d.ts +30 -0
- package/dist/bridge/utils.d.ts.map +1 -0
- package/dist/bridge/utils.js +54 -0
- package/dist/bridge/utils.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +906 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/daemon/agent-registry.d.ts +60 -0
- package/dist/daemon/agent-registry.d.ts.map +1 -0
- package/dist/daemon/agent-registry.js +163 -0
- package/dist/daemon/agent-registry.js.map +1 -0
- package/dist/daemon/connection.d.ts +33 -1
- package/dist/daemon/connection.d.ts.map +1 -1
- package/dist/daemon/connection.js +86 -11
- package/dist/daemon/connection.js.map +1 -1
- package/dist/daemon/index.d.ts +2 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +2 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/registry.d.ts +9 -0
- package/dist/daemon/registry.d.ts.map +1 -0
- package/dist/daemon/registry.js +9 -0
- package/dist/daemon/registry.js.map +1 -0
- package/dist/daemon/router.d.ts +61 -2
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +219 -4
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/server.d.ts +9 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +135 -16
- package/dist/daemon/server.js.map +1 -1
- package/dist/dashboard/metrics.d.ts +105 -0
- package/dist/dashboard/metrics.d.ts.map +1 -0
- package/dist/dashboard/metrics.js +192 -0
- package/dist/dashboard/metrics.js.map +1 -0
- package/dist/dashboard/needs-attention.d.ts +24 -0
- package/dist/dashboard/needs-attention.d.ts.map +1 -0
- package/dist/dashboard/needs-attention.js +78 -0
- package/dist/dashboard/needs-attention.js.map +1 -0
- package/dist/dashboard/public/bridge.html +1272 -0
- package/dist/dashboard/public/index.html +2094 -347
- package/dist/dashboard/public/js/app.js +184 -0
- package/dist/dashboard/public/js/app.js.map +7 -0
- package/dist/dashboard/public/metrics.html +999 -0
- package/dist/dashboard/server.d.ts +14 -1
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +689 -16
- package/dist/dashboard/server.js.map +1 -1
- package/dist/dashboard/start.js +1 -1
- package/dist/dashboard/start.js.map +1 -1
- package/dist/dashboard-v2/index.d.ts +10 -0
- package/dist/dashboard-v2/index.d.ts.map +1 -0
- package/dist/dashboard-v2/index.js +54 -0
- package/dist/dashboard-v2/index.js.map +1 -0
- package/dist/dashboard-v2/lib/api.d.ts +95 -0
- package/dist/dashboard-v2/lib/api.d.ts.map +1 -0
- package/dist/dashboard-v2/lib/api.js +270 -0
- package/dist/dashboard-v2/lib/api.js.map +1 -0
- package/dist/dashboard-v2/lib/colors.d.ts +61 -0
- package/dist/dashboard-v2/lib/colors.d.ts.map +1 -0
- package/dist/dashboard-v2/lib/colors.js +198 -0
- package/dist/dashboard-v2/lib/colors.js.map +1 -0
- package/dist/dashboard-v2/lib/hierarchy.d.ts +74 -0
- package/dist/dashboard-v2/lib/hierarchy.d.ts.map +1 -0
- package/dist/dashboard-v2/lib/hierarchy.js +196 -0
- package/dist/dashboard-v2/lib/hierarchy.js.map +1 -0
- package/dist/dashboard-v2/types/index.d.ts +154 -0
- package/dist/dashboard-v2/types/index.d.ts.map +1 -0
- package/dist/dashboard-v2/types/index.js +6 -0
- package/dist/dashboard-v2/types/index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/protocol/types.d.ts +15 -1
- package/dist/protocol/types.d.ts.map +1 -1
- package/dist/storage/adapter.d.ts +74 -1
- package/dist/storage/adapter.d.ts.map +1 -1
- package/dist/storage/adapter.js +39 -0
- package/dist/storage/adapter.js.map +1 -1
- package/dist/storage/sqlite-adapter.d.ts +92 -1
- package/dist/storage/sqlite-adapter.d.ts.map +1 -1
- package/dist/storage/sqlite-adapter.js +615 -47
- package/dist/storage/sqlite-adapter.js.map +1 -1
- package/dist/utils/agent-config.d.ts +45 -0
- package/dist/utils/agent-config.d.ts.map +1 -0
- package/dist/utils/agent-config.js +118 -0
- package/dist/utils/agent-config.js.map +1 -0
- package/dist/utils/project-namespace.d.ts.map +1 -1
- package/dist/utils/project-namespace.js +22 -1
- package/dist/utils/project-namespace.js.map +1 -1
- package/dist/wrapper/client.d.ts +30 -3
- package/dist/wrapper/client.d.ts.map +1 -1
- package/dist/wrapper/client.js +85 -9
- package/dist/wrapper/client.js.map +1 -1
- package/dist/wrapper/parser.d.ts +127 -4
- package/dist/wrapper/parser.d.ts.map +1 -1
- package/dist/wrapper/parser.js +622 -86
- package/dist/wrapper/parser.js.map +1 -1
- package/dist/wrapper/tmux-wrapper.d.ts +136 -10
- package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
- package/dist/wrapper/tmux-wrapper.js +599 -79
- package/dist/wrapper/tmux-wrapper.js.map +1 -1
- package/docs/AGENTS.md +132 -27
- package/docs/ARCHITECTURE_DECISIONS.md +175 -0
- package/docs/CHANGELOG.md +1 -1
- package/docs/COMPETITIVE_ANALYSIS.md +897 -0
- package/docs/DESIGN_BRIDGE_STAFFING.md +878 -0
- package/docs/DESIGN_V2.md +1079 -0
- package/docs/INTEGRATION-GUIDE.md +926 -0
- package/docs/MONETIZATION.md +1679 -0
- package/docs/PROPOSAL-trajectories.md +1582 -0
- package/docs/PROTOCOL.md +3 -3
- package/docs/SCALING_ANALYSIS.md +280 -0
- package/docs/TMUX_IMPLEMENTATION_NOTES.md +9 -9
- package/docs/TMUX_IMPROVEMENTS.md +968 -0
- package/docs/agent-relay-snippet.md +61 -0
- package/docs/competitive-analysis-mcp-agent-mail.md +389 -0
- package/docs/dashboard-v2-plan.md +179 -0
- package/package.json +10 -3
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derive which agents currently need attention based on message history.
|
|
3
|
+
*
|
|
4
|
+
* Heuristic:
|
|
5
|
+
* - Track the most recent inbound message to an agent for each conversation key.
|
|
6
|
+
* - Conversation key is thread ID if present, otherwise the counterparty agent.
|
|
7
|
+
* - Track the most recent outbound message from the agent for the same key.
|
|
8
|
+
* - An agent needs attention if their latest inbound message for any key is newer
|
|
9
|
+
* than their latest outbound message for that key.
|
|
10
|
+
*/
|
|
11
|
+
// Only consider messages from the last 30 minutes for "needs attention"
|
|
12
|
+
const ATTENTION_WINDOW_MS = 30 * 60 * 1000;
|
|
13
|
+
function updateLatest(map, agent, key, ts) {
|
|
14
|
+
const agentMap = map.get(agent) ?? new Map();
|
|
15
|
+
const prev = agentMap.get(key) ?? -Infinity;
|
|
16
|
+
if (ts > prev) {
|
|
17
|
+
agentMap.set(key, ts);
|
|
18
|
+
map.set(agent, agentMap);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Compute which agents have pending inbound messages they haven't answered.
|
|
23
|
+
* Only considers messages within the attention window (last 30 minutes).
|
|
24
|
+
*/
|
|
25
|
+
export function computeNeedsAttention(messages) {
|
|
26
|
+
const latestInbound = new Map(); // agent -> (key -> ts)
|
|
27
|
+
const latestOutbound = new Map(); // agent -> (key -> ts)
|
|
28
|
+
const now = Date.now();
|
|
29
|
+
const cutoffTime = now - ATTENTION_WINDOW_MS;
|
|
30
|
+
for (const message of messages) {
|
|
31
|
+
const ts = Date.parse(message.timestamp);
|
|
32
|
+
if (Number.isNaN(ts))
|
|
33
|
+
continue;
|
|
34
|
+
// Detect broadcasts: either explicit isBroadcast flag or to === '*'
|
|
35
|
+
const isBroadcast = message.isBroadcast || message.to === '*';
|
|
36
|
+
// Inbound: messages directed to a specific agent (ignore broadcasts)
|
|
37
|
+
// Note: isBroadcast indicates the message was originally a broadcast, even though
|
|
38
|
+
// the 'to' field is set to the individual recipient for storage purposes
|
|
39
|
+
if (message.to && !isBroadcast) {
|
|
40
|
+
const inboundKey = message.thread ? `thread:${message.thread}` : `sender:${message.from}`;
|
|
41
|
+
updateLatest(latestInbound, message.to, inboundKey, ts);
|
|
42
|
+
}
|
|
43
|
+
// Outbound: track replies by thread (preferred) or by target agent
|
|
44
|
+
// Also treat broadcasts as clearing attention for all prior senders
|
|
45
|
+
if (message.from) {
|
|
46
|
+
const outboundKey = message.thread
|
|
47
|
+
? `thread:${message.thread}`
|
|
48
|
+
: (message.to && !isBroadcast)
|
|
49
|
+
? `sender:${message.to}`
|
|
50
|
+
: null;
|
|
51
|
+
if (outboundKey) {
|
|
52
|
+
updateLatest(latestOutbound, message.from, outboundKey, ts);
|
|
53
|
+
}
|
|
54
|
+
// Broadcasts clear attention: agent is actively participating
|
|
55
|
+
// Track as a "catch-all" outbound timestamp for this agent
|
|
56
|
+
if (isBroadcast) {
|
|
57
|
+
updateLatest(latestOutbound, message.from, '__broadcast__', ts);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const needsAttention = new Set();
|
|
62
|
+
latestInbound.forEach((keyMap, agent) => {
|
|
63
|
+
keyMap.forEach((inboundTs, key) => {
|
|
64
|
+
// Skip if inbound message is too old (outside attention window)
|
|
65
|
+
if (inboundTs < cutoffTime)
|
|
66
|
+
return;
|
|
67
|
+
const outboundTs = latestOutbound.get(agent)?.get(key) ?? -Infinity;
|
|
68
|
+
// Also check if agent sent a broadcast after the inbound message
|
|
69
|
+
const broadcastTs = latestOutbound.get(agent)?.get('__broadcast__') ?? -Infinity;
|
|
70
|
+
const latestReply = Math.max(outboundTs, broadcastTs);
|
|
71
|
+
if (inboundTs > latestReply) {
|
|
72
|
+
needsAttention.add(agent);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
return needsAttention;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=needs-attention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"needs-attention.js","sourceRoot":"","sources":["../../src/dashboard/needs-attention.ts"],"names":[],"mappings":"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"}
|