@nordbyte/nordrelay 0.4.0 → 0.5.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 +155 -64
- package/README.md +80 -58
- package/dist/access-control.js +126 -114
- package/dist/agent-feature-matrix.js +42 -0
- package/dist/agent-updates.js +312 -0
- package/dist/bot-rendering.js +838 -0
- package/dist/bot.js +130 -1371
- package/dist/channel-actions.js +372 -0
- package/dist/channel-runtime.js +89 -0
- package/dist/config-metadata.js +238 -0
- package/dist/config.js +0 -58
- package/dist/index.js +8 -0
- package/dist/operations.js +33 -8
- package/dist/relay-runtime.js +159 -31
- package/dist/session-format.js +72 -3
- package/dist/settings-service.js +2 -117
- package/dist/telegram-access-commands.js +123 -0
- package/dist/telegram-access-middleware.js +129 -0
- package/dist/telegram-channel-runtime.js +132 -0
- package/dist/telegram-command-menu.js +54 -0
- package/dist/telegram-output.js +216 -0
- package/dist/telegram-update-commands.js +88 -0
- package/dist/user-management.js +708 -0
- package/dist/web-api-contract.js +56 -0
- package/dist/web-dashboard-assets.js +33 -0
- package/dist/web-dashboard-ui.js +14 -14
- package/dist/web-dashboard.js +649 -369
- package/dist/webui-assets/dashboard.css +919 -0
- package/dist/webui-assets/dashboard.js +1611 -0
- package/package.json +6 -3
- package/plugins/nordrelay/.codex-plugin/plugin.json +1 -1
- package/plugins/nordrelay/commands/remote.md +1 -1
- package/plugins/nordrelay/scripts/nordrelay.mjs +283 -87
- package/plugins/nordrelay/skills/telegram-remote/SKILL.md +1 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { listAgentAdapterDescriptors } from "./agent-adapter.js";
|
|
2
|
+
import { agentLabel } from "./agent.js";
|
|
3
|
+
import { parseAgentUpdateId, renderAgentUpdateJobAction, renderAgentUpdateJobsAction, renderAgentUpdateLogAction, renderAgentUpdatePickerAction, renderSelfUpdateStartedAction, } from "./channel-actions.js";
|
|
4
|
+
import { escapeHTML } from "./format.js";
|
|
5
|
+
import { spawnSelfUpdate } from "./operations.js";
|
|
6
|
+
import { safeReply } from "./telegram-output.js";
|
|
7
|
+
export function registerTelegramUpdateCommands(deps) {
|
|
8
|
+
const { bot, agentUpdates, replyChannelAction, startTelegramAgentUpdate } = deps;
|
|
9
|
+
bot.command("update", async (ctx) => {
|
|
10
|
+
const rawText = ctx.message?.text ?? "";
|
|
11
|
+
const argument = rawText.replace(/^\/update(?:@\w+)?\s*/i, "").trim();
|
|
12
|
+
const tokens = argument.split(/\s+/).filter(Boolean);
|
|
13
|
+
const subcommand = tokens[0]?.toLowerCase();
|
|
14
|
+
if (subcommand === "agents" || subcommand === "agent") {
|
|
15
|
+
const rendered = renderAgentUpdatePickerAction(listAgentAdapterDescriptors());
|
|
16
|
+
await replyChannelAction(ctx, rendered);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (subcommand === "jobs" || subcommand === "status") {
|
|
20
|
+
const rendered = renderAgentUpdateJobsAction(agentUpdates.list());
|
|
21
|
+
await replyChannelAction(ctx, rendered);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (subcommand === "log" && tokens[1]) {
|
|
25
|
+
const rendered = renderAgentUpdateLogAction(agentUpdates.readLog(tokens[1]));
|
|
26
|
+
await replyChannelAction(ctx, rendered);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (subcommand === "cancel" && tokens[1]) {
|
|
30
|
+
const job = agentUpdates.cancel(tokens[1]);
|
|
31
|
+
const rendered = renderAgentUpdateJobAction(job);
|
|
32
|
+
await replyChannelAction(ctx, rendered);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if ((subcommand === "input" || subcommand === "send") && tokens[1] && tokens.slice(2).join(" ").trim()) {
|
|
36
|
+
const job = agentUpdates.sendInput(tokens[1], tokens.slice(2).join(" "));
|
|
37
|
+
const rendered = renderAgentUpdateJobAction(job);
|
|
38
|
+
await replyChannelAction(ctx, rendered);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const requestedAgent = parseAgentUpdateId(subcommand);
|
|
42
|
+
if (requestedAgent) {
|
|
43
|
+
await startTelegramAgentUpdate(ctx, requestedAgent);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (subcommand) {
|
|
47
|
+
const usage = "Unknown update target. Use /update, /update agents, /update jobs, /update <agent>, /update log <id>, /update cancel <id>, or /update input <id> <text>.";
|
|
48
|
+
await safeReply(ctx, escapeHTML(usage), { fallbackText: usage });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const update = spawnSelfUpdate();
|
|
52
|
+
const rendered = renderSelfUpdateStartedAction(update);
|
|
53
|
+
await replyChannelAction(ctx, rendered);
|
|
54
|
+
});
|
|
55
|
+
bot.callbackQuery("upd_jobs", async (ctx) => {
|
|
56
|
+
await ctx.answerCallbackQuery();
|
|
57
|
+
const rendered = renderAgentUpdateJobsAction(agentUpdates.list());
|
|
58
|
+
await replyChannelAction(ctx, rendered);
|
|
59
|
+
});
|
|
60
|
+
bot.callbackQuery(/^upd_agent:(codex|pi|hermes|openclaw|claude-code)$/, async (ctx) => {
|
|
61
|
+
const agentId = ctx.match?.[1];
|
|
62
|
+
if (!agentId) {
|
|
63
|
+
await ctx.answerCallbackQuery();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
await ctx.answerCallbackQuery({ text: `Starting ${agentLabel(agentId)} update...` });
|
|
67
|
+
await startTelegramAgentUpdate(ctx, agentId);
|
|
68
|
+
});
|
|
69
|
+
bot.callbackQuery(/^upd_log:(.+)$/, async (ctx) => {
|
|
70
|
+
const id = ctx.match?.[1];
|
|
71
|
+
await ctx.answerCallbackQuery();
|
|
72
|
+
if (!id) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const rendered = renderAgentUpdateLogAction(agentUpdates.readLog(id));
|
|
76
|
+
await replyChannelAction(ctx, rendered);
|
|
77
|
+
});
|
|
78
|
+
bot.callbackQuery(/^upd_cancel:(.+)$/, async (ctx) => {
|
|
79
|
+
const id = ctx.match?.[1];
|
|
80
|
+
await ctx.answerCallbackQuery({ text: "Cancelling update..." });
|
|
81
|
+
if (!id) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const job = agentUpdates.cancel(id);
|
|
85
|
+
const rendered = renderAgentUpdateJobAction(job);
|
|
86
|
+
await replyChannelAction(ctx, rendered);
|
|
87
|
+
});
|
|
88
|
+
}
|