@nordbyte/nordrelay 0.5.2 → 0.6.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/.env.example +63 -11
- package/README.md +90 -19
- package/dist/access-control.js +1 -0
- package/dist/activity-events.js +44 -0
- package/dist/audit-log.js +40 -2
- package/dist/bot-rendering.js +10 -7
- package/dist/bot.js +458 -5
- package/dist/channel-actions.js +7 -2
- package/dist/channel-adapter.js +34 -7
- package/dist/channel-command-service.js +156 -0
- package/dist/channel-turn-service.js +237 -0
- package/dist/config-metadata.js +78 -13
- package/dist/config.js +77 -7
- package/dist/context-key.js +77 -5
- package/dist/discord-artifacts.js +165 -0
- package/dist/discord-bot.js +2014 -0
- package/dist/discord-channel-runtime.js +133 -0
- package/dist/discord-command-surface.js +119 -0
- package/dist/discord-rate-limit.js +141 -0
- package/dist/index.js +16 -5
- package/dist/job-store.js +127 -0
- package/dist/metrics.js +41 -0
- package/dist/relay-external-activity-monitor.js +47 -6
- package/dist/relay-runtime.js +986 -281
- package/dist/runtime-cache.js +57 -0
- package/dist/session-locks.js +10 -7
- package/dist/support-bundle.js +1 -0
- package/dist/telegram-access-commands.js +15 -2
- package/dist/telegram-access-middleware.js +16 -3
- package/dist/telegram-agent-commands.js +25 -0
- package/dist/telegram-artifact-commands.js +46 -0
- package/dist/telegram-diagnostics-command.js +5 -50
- package/dist/telegram-general-commands.js +2 -6
- package/dist/telegram-operational-commands.js +14 -6
- package/dist/telegram-queue-commands.js +74 -4
- package/dist/telegram-support-command.js +7 -0
- package/dist/telegram-update-commands.js +27 -0
- package/dist/user-management.js +208 -0
- package/dist/web-api-contract.js +9 -0
- package/dist/web-dashboard-access-routes.js +74 -1
- package/dist/web-dashboard-artifact-routes.js +3 -3
- package/dist/web-dashboard-assets.js +2 -0
- package/dist/web-dashboard-pages.js +97 -13
- package/dist/web-dashboard-runtime-routes.js +53 -8
- package/dist/web-dashboard-session-routes.js +27 -20
- package/dist/web-dashboard-ui.js +1 -0
- package/dist/web-dashboard.js +148 -6
- package/dist/web-state.js +33 -2
- package/dist/webui-assets/dashboard.css +75 -1
- package/dist/webui-assets/dashboard.js +358 -47
- package/package.json +3 -1
- package/plugins/nordrelay/scripts/nordrelay.mjs +210 -17
|
@@ -2,6 +2,10 @@ import {} from "./agent.js";
|
|
|
2
2
|
import { getExternalSnapshotForSession } from "./agent-activity.js";
|
|
3
3
|
import { friendlyErrorText } from "./error-messages.js";
|
|
4
4
|
import {} from "./web-state.js";
|
|
5
|
+
const CLI_ACTIVITY_ACTOR = {
|
|
6
|
+
channel: "cli",
|
|
7
|
+
label: "CLI",
|
|
8
|
+
};
|
|
5
9
|
export class RelayExternalActivityMonitor {
|
|
6
10
|
options;
|
|
7
11
|
mirror = null;
|
|
@@ -16,7 +20,9 @@ export class RelayExternalActivityMonitor {
|
|
|
16
20
|
if (!this.mirror) {
|
|
17
21
|
return null;
|
|
18
22
|
}
|
|
19
|
-
const startedAt = this.mirror.startedAt
|
|
23
|
+
const startedAt = this.mirror.startedAt instanceof Date
|
|
24
|
+
? this.mirror.startedAt.toISOString()
|
|
25
|
+
: this.mirror.startedAt ?? new Date().toISOString();
|
|
20
26
|
const startedMs = new Date(startedAt).getTime();
|
|
21
27
|
return {
|
|
22
28
|
id: this.mirror.turnId ?? "cli",
|
|
@@ -75,7 +81,7 @@ export class RelayExternalActivityMonitor {
|
|
|
75
81
|
startedAt: snapshot.activity.startedAt?.toISOString() ?? null,
|
|
76
82
|
};
|
|
77
83
|
if (snapshot.activity.active) {
|
|
78
|
-
this.startExternalTurn(snapshot);
|
|
84
|
+
this.startExternalTurn(snapshot, info);
|
|
79
85
|
}
|
|
80
86
|
return;
|
|
81
87
|
}
|
|
@@ -85,9 +91,9 @@ export class RelayExternalActivityMonitor {
|
|
|
85
91
|
mirror.turnId = snapshot.activity.turnId;
|
|
86
92
|
mirror.startedAt = snapshot.activity.startedAt?.toISOString() ?? null;
|
|
87
93
|
mirror.latestAgentLine = undefined;
|
|
88
|
-
this.startExternalTurn(snapshot);
|
|
94
|
+
this.startExternalTurn(snapshot, info);
|
|
89
95
|
}
|
|
90
|
-
this.broadcastExternalEvents(snapshot, snapshot.events.filter((event) => event.lineNumber > mirror.lastLine));
|
|
96
|
+
this.broadcastExternalEvents(snapshot, snapshot.events.filter((event) => event.lineNumber > mirror.lastLine), info);
|
|
91
97
|
mirror.lastLine = Math.max(mirror.lastLine, snapshot.lineCount);
|
|
92
98
|
mirror.latestStatus = externalStatusLine(snapshot, this.options.queueLength());
|
|
93
99
|
this.options.broadcastStatus(mirror.latestStatus, "info");
|
|
@@ -122,6 +128,7 @@ export class RelayExternalActivityMonitor {
|
|
|
122
128
|
threadId: snapshot.threadId,
|
|
123
129
|
workspace: info.workspace,
|
|
124
130
|
agentId: info.agentId,
|
|
131
|
+
actor: CLI_ACTIVITY_ACTOR,
|
|
125
132
|
prompt: snapshot.latestUserMessage ?? undefined,
|
|
126
133
|
detail: `${snapshot.agentLabel} CLI task ${terminalEvent.status ?? "finished"}.`,
|
|
127
134
|
durationMs: durationFromDates(externalStartedAt, terminalEvent.timestamp),
|
|
@@ -136,7 +143,7 @@ export class RelayExternalActivityMonitor {
|
|
|
136
143
|
}
|
|
137
144
|
mirror.lastLine = Math.max(mirror.lastLine, snapshot.lineCount);
|
|
138
145
|
}
|
|
139
|
-
startExternalTurn(snapshot) {
|
|
146
|
+
startExternalTurn(snapshot, info) {
|
|
140
147
|
const prompt = snapshot.latestUserMessage ?? `${snapshot.agentLabel} CLI task`;
|
|
141
148
|
this.options.chatStore.append({
|
|
142
149
|
threadId: snapshot.threadId,
|
|
@@ -158,11 +165,14 @@ export class RelayExternalActivityMonitor {
|
|
|
158
165
|
status: "running",
|
|
159
166
|
type: "cli_turn_started",
|
|
160
167
|
threadId: snapshot.threadId,
|
|
168
|
+
workspace: info.workspace,
|
|
169
|
+
agentId: info.agentId,
|
|
170
|
+
actor: CLI_ACTIVITY_ACTOR,
|
|
161
171
|
prompt,
|
|
162
172
|
detail: `${snapshot.sourceLabel}: ${snapshot.sourcePath}`,
|
|
163
173
|
});
|
|
164
174
|
}
|
|
165
|
-
broadcastExternalEvents(snapshot, events) {
|
|
175
|
+
broadcastExternalEvents(snapshot, events, info) {
|
|
166
176
|
for (const event of events) {
|
|
167
177
|
if (event.kind === "tool" && event.status === "started") {
|
|
168
178
|
this.options.broadcast({
|
|
@@ -176,6 +186,9 @@ export class RelayExternalActivityMonitor {
|
|
|
176
186
|
status: "running",
|
|
177
187
|
type: "cli_tool_started",
|
|
178
188
|
threadId: snapshot.threadId,
|
|
189
|
+
workspace: info.workspace,
|
|
190
|
+
agentId: info.agentId,
|
|
191
|
+
actor: CLI_ACTIVITY_ACTOR,
|
|
179
192
|
detail: event.toolName ?? "tool",
|
|
180
193
|
});
|
|
181
194
|
}
|
|
@@ -186,6 +199,34 @@ export class RelayExternalActivityMonitor {
|
|
|
186
199
|
toolCallId: `cli-${event.lineNumber}`,
|
|
187
200
|
isError: false,
|
|
188
201
|
});
|
|
202
|
+
this.options.appendActivity({
|
|
203
|
+
source: "cli",
|
|
204
|
+
status: "completed",
|
|
205
|
+
type: "cli_tool_completed",
|
|
206
|
+
threadId: snapshot.threadId,
|
|
207
|
+
workspace: info.workspace,
|
|
208
|
+
agentId: info.agentId,
|
|
209
|
+
actor: CLI_ACTIVITY_ACTOR,
|
|
210
|
+
detail: event.toolName ?? "tool",
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
if (event.kind === "tool" && event.status === "failed") {
|
|
214
|
+
this.options.broadcast({
|
|
215
|
+
type: "tool_end",
|
|
216
|
+
id: snapshot.activity.turnId ?? "cli",
|
|
217
|
+
toolCallId: `cli-${event.lineNumber}`,
|
|
218
|
+
isError: true,
|
|
219
|
+
});
|
|
220
|
+
this.options.appendActivity({
|
|
221
|
+
source: "cli",
|
|
222
|
+
status: "failed",
|
|
223
|
+
type: "cli_tool_failed",
|
|
224
|
+
threadId: snapshot.threadId,
|
|
225
|
+
workspace: info.workspace,
|
|
226
|
+
agentId: info.agentId,
|
|
227
|
+
actor: CLI_ACTIVITY_ACTOR,
|
|
228
|
+
detail: event.toolName ?? "tool",
|
|
229
|
+
});
|
|
189
230
|
}
|
|
190
231
|
}
|
|
191
232
|
}
|