@odience-network/paperclip-plugin-telegram-enhanced 0.2.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/LICENSE +21 -0
- package/README.md +215 -0
- package/dist/acp-bridge.d.ts +35 -0
- package/dist/acp-bridge.js +891 -0
- package/dist/acp-bridge.js.map +1 -0
- package/dist/adapter.d.ts +35 -0
- package/dist/adapter.js +75 -0
- package/dist/adapter.js.map +1 -0
- package/dist/agent-labels.d.ts +12 -0
- package/dist/agent-labels.js +96 -0
- package/dist/agent-labels.js.map +1 -0
- package/dist/allowlist.d.ts +27 -0
- package/dist/allowlist.js +34 -0
- package/dist/allowlist.js.map +1 -0
- package/dist/approval-routing.d.ts +2 -0
- package/dist/approval-routing.js +7 -0
- package/dist/approval-routing.js.map +1 -0
- package/dist/command-registry.d.ts +3 -0
- package/dist/command-registry.js +268 -0
- package/dist/command-registry.js.map +1 -0
- package/dist/commands.d.ts +11 -0
- package/dist/commands.js +516 -0
- package/dist/commands.js.map +1 -0
- package/dist/constants.d.ts +76 -0
- package/dist/constants.js +71 -0
- package/dist/constants.js.map +1 -0
- package/dist/escalation.d.ts +42 -0
- package/dist/escalation.js +252 -0
- package/dist/escalation.js.map +1 -0
- package/dist/file-routing.d.ts +51 -0
- package/dist/file-routing.js +212 -0
- package/dist/file-routing.js.map +1 -0
- package/dist/formatters.d.ts +31 -0
- package/dist/formatters.js +336 -0
- package/dist/formatters.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction-delivery.d.ts +90 -0
- package/dist/interaction-delivery.js +142 -0
- package/dist/interaction-delivery.js.map +1 -0
- package/dist/manifest.d.ts +3 -0
- package/dist/manifest.js +111 -0
- package/dist/manifest.js.map +1 -0
- package/dist/media-pipeline.d.ts +47 -0
- package/dist/media-pipeline.js +162 -0
- package/dist/media-pipeline.js.map +1 -0
- package/dist/notification-filters.d.ts +23 -0
- package/dist/notification-filters.js +93 -0
- package/dist/notification-filters.js.map +1 -0
- package/dist/paperclip-api.d.ts +25 -0
- package/dist/paperclip-api.js +69 -0
- package/dist/paperclip-api.js.map +1 -0
- package/dist/polling-offset.d.ts +22 -0
- package/dist/polling-offset.js +68 -0
- package/dist/polling-offset.js.map +1 -0
- package/dist/secret-ref-validation.d.ts +7 -0
- package/dist/secret-ref-validation.js +49 -0
- package/dist/secret-ref-validation.js.map +1 -0
- package/dist/telegram-api.d.ts +40 -0
- package/dist/telegram-api.js +251 -0
- package/dist/telegram-api.js.map +1 -0
- package/dist/topic-projects.d.ts +2 -0
- package/dist/topic-projects.js +45 -0
- package/dist/topic-projects.js.map +1 -0
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +1446 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/watch-registry.d.ts +9 -0
- package/dist/watch-registry.js +272 -0
- package/dist/watch-registry.js.map +1 -0
- package/dist/worker.d.ts +162 -0
- package/dist/worker.js +1520 -0
- package/dist/worker.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { sendMessage, escapeMarkdownV2, sendChatAction } from "./telegram-api.js";
|
|
2
|
+
import { METRIC_NAMES } from "./constants.js";
|
|
3
|
+
// --- Built-in commands ---
|
|
4
|
+
const BUILTIN_COMMANDS = new Set([
|
|
5
|
+
"status", "issues", "agents", "approve", "help",
|
|
6
|
+
"connect", "connect_topic", "topics", "acp", "commands",
|
|
7
|
+
]);
|
|
8
|
+
// --- Command registry ---
|
|
9
|
+
export async function handleCommandsCommand(ctx, token, chatId, args, messageThreadId, companyId) {
|
|
10
|
+
const parts = args.trim().split(/\s+/);
|
|
11
|
+
const subcommand = parts[0]?.toLowerCase() ?? "";
|
|
12
|
+
switch (subcommand) {
|
|
13
|
+
case "list":
|
|
14
|
+
await listCommands(ctx, token, chatId, messageThreadId, companyId);
|
|
15
|
+
break;
|
|
16
|
+
case "import":
|
|
17
|
+
await importCommand(ctx, token, chatId, parts.slice(1).join(" "), messageThreadId, companyId);
|
|
18
|
+
break;
|
|
19
|
+
case "delete":
|
|
20
|
+
await deleteCommand(ctx, token, chatId, parts[1] ?? "", messageThreadId, companyId);
|
|
21
|
+
break;
|
|
22
|
+
case "run":
|
|
23
|
+
await runCommand(ctx, token, chatId, parts[1] ?? "", parts.slice(2), messageThreadId, companyId);
|
|
24
|
+
break;
|
|
25
|
+
default:
|
|
26
|
+
await sendMessage(ctx, token, chatId, [
|
|
27
|
+
escapeMarkdownV2("\ud83d\udee0\ufe0f") + " *Custom Commands*",
|
|
28
|
+
"",
|
|
29
|
+
`/commands list \\- ${escapeMarkdownV2("Show all custom commands")}`,
|
|
30
|
+
`/commands import <json> \\- ${escapeMarkdownV2("Import a workflow command")}`,
|
|
31
|
+
`/commands delete <name> \\- ${escapeMarkdownV2("Remove a custom command")}`,
|
|
32
|
+
`/commands run <name> [args] \\- ${escapeMarkdownV2("Execute a custom command")}`,
|
|
33
|
+
].join("\n"), { parseMode: "MarkdownV2", messageThreadId });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Check if a command is custom and run it, returns true if handled
|
|
37
|
+
export async function tryCustomCommand(ctx, token, chatId, command, argsStr, messageThreadId, companyId) {
|
|
38
|
+
if (BUILTIN_COMMANDS.has(command))
|
|
39
|
+
return false;
|
|
40
|
+
const resolvedCompanyId = companyId ?? chatId;
|
|
41
|
+
const commands = await getCommandRegistry(ctx, resolvedCompanyId);
|
|
42
|
+
const cmd = commands.find((c) => c.name === command);
|
|
43
|
+
if (!cmd)
|
|
44
|
+
return false;
|
|
45
|
+
const args = argsStr.trim().split(/\s+/).filter(Boolean);
|
|
46
|
+
await executeWorkflow(ctx, token, chatId, cmd, args, messageThreadId, resolvedCompanyId);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
async function listCommands(ctx, token, chatId, messageThreadId, companyId) {
|
|
50
|
+
const resolvedCompanyId = companyId ?? chatId;
|
|
51
|
+
const commands = await getCommandRegistry(ctx, resolvedCompanyId);
|
|
52
|
+
if (commands.length === 0) {
|
|
53
|
+
await sendMessage(ctx, token, chatId, "No custom commands registered. Use /commands import to add one.", { messageThreadId });
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const lines = [
|
|
57
|
+
escapeMarkdownV2("\ud83d\udee0\ufe0f") + " *Custom Commands*",
|
|
58
|
+
"",
|
|
59
|
+
];
|
|
60
|
+
for (const cmd of commands) {
|
|
61
|
+
lines.push(`/${escapeMarkdownV2(cmd.name)} \\- ${escapeMarkdownV2(cmd.description)}`);
|
|
62
|
+
lines.push(` Steps: ${escapeMarkdownV2(String(cmd.steps.length))} \\| Created: ${escapeMarkdownV2(cmd.createdAt.split("T")[0] ?? cmd.createdAt)}`);
|
|
63
|
+
}
|
|
64
|
+
await sendMessage(ctx, token, chatId, lines.join("\n"), {
|
|
65
|
+
parseMode: "MarkdownV2",
|
|
66
|
+
messageThreadId,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
async function importCommand(ctx, token, chatId, jsonStr, messageThreadId, companyId) {
|
|
70
|
+
if (!jsonStr.trim()) {
|
|
71
|
+
await sendMessage(ctx, token, chatId, "Usage: /commands import <json-definition>", { messageThreadId });
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
let definition;
|
|
75
|
+
try {
|
|
76
|
+
definition = JSON.parse(jsonStr);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
await sendMessage(ctx, token, chatId, "Invalid JSON. Please provide a valid command definition.", { messageThreadId });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (!definition.name || !definition.steps || !Array.isArray(definition.steps)) {
|
|
83
|
+
await sendMessage(ctx, token, chatId, "Command definition must have 'name' and 'steps' fields.", { messageThreadId });
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (BUILTIN_COMMANDS.has(definition.name)) {
|
|
87
|
+
await sendMessage(ctx, token, chatId, `Cannot override built-in command: /${definition.name}`, { messageThreadId });
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// Validate steps
|
|
91
|
+
for (const step of definition.steps) {
|
|
92
|
+
if (!step.type || !step.id) {
|
|
93
|
+
await sendMessage(ctx, token, chatId, "Each step must have 'type' and 'id' fields.", { messageThreadId });
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const validTypes = ["fetch_issue", "invoke_agent", "http_request", "send_message", "create_issue", "wait_approval", "set_state"];
|
|
97
|
+
if (!validTypes.includes(step.type)) {
|
|
98
|
+
await sendMessage(ctx, token, chatId, `Invalid step type: ${step.type}. Valid: ${validTypes.join(", ")}`, { messageThreadId });
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const resolvedCompanyId = companyId ?? chatId;
|
|
103
|
+
const commands = await getCommandRegistry(ctx, resolvedCompanyId);
|
|
104
|
+
// Replace existing or add new
|
|
105
|
+
const existingIdx = commands.findIndex((c) => c.name === definition.name);
|
|
106
|
+
const newCmd = {
|
|
107
|
+
name: definition.name,
|
|
108
|
+
description: definition.description ?? "No description",
|
|
109
|
+
steps: definition.steps,
|
|
110
|
+
createdBy: `telegram:${chatId}`,
|
|
111
|
+
createdAt: new Date().toISOString(),
|
|
112
|
+
};
|
|
113
|
+
if (existingIdx >= 0) {
|
|
114
|
+
commands[existingIdx] = newCmd;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
commands.push(newCmd);
|
|
118
|
+
}
|
|
119
|
+
await saveCommandRegistry(ctx, resolvedCompanyId, commands);
|
|
120
|
+
await sendMessage(ctx, token, chatId, `${escapeMarkdownV2("\u2705")} Command /${escapeMarkdownV2(definition.name)} ${existingIdx >= 0 ? "updated" : "imported"} \\(${escapeMarkdownV2(String(definition.steps.length))} steps\\)`, { parseMode: "MarkdownV2", messageThreadId });
|
|
121
|
+
}
|
|
122
|
+
async function deleteCommand(ctx, token, chatId, name, messageThreadId, companyId) {
|
|
123
|
+
if (!name.trim()) {
|
|
124
|
+
await sendMessage(ctx, token, chatId, "Usage: /commands delete <name>", { messageThreadId });
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const resolvedCompanyId = companyId ?? chatId;
|
|
128
|
+
const commands = await getCommandRegistry(ctx, resolvedCompanyId);
|
|
129
|
+
const filtered = commands.filter((c) => c.name !== name);
|
|
130
|
+
if (filtered.length === commands.length) {
|
|
131
|
+
await sendMessage(ctx, token, chatId, `Command /${name} not found.`, { messageThreadId });
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
await saveCommandRegistry(ctx, resolvedCompanyId, filtered);
|
|
135
|
+
await sendMessage(ctx, token, chatId, `${escapeMarkdownV2("\ud83d\uddd1\ufe0f")} Command /${escapeMarkdownV2(name)} deleted.`, { parseMode: "MarkdownV2", messageThreadId });
|
|
136
|
+
}
|
|
137
|
+
async function runCommand(ctx, token, chatId, name, args, messageThreadId, companyId) {
|
|
138
|
+
const resolvedCompanyId = companyId ?? chatId;
|
|
139
|
+
const commands = await getCommandRegistry(ctx, resolvedCompanyId);
|
|
140
|
+
const cmd = commands.find((c) => c.name === name);
|
|
141
|
+
if (!cmd) {
|
|
142
|
+
await sendMessage(ctx, token, chatId, `Command /${name} not found.`, { messageThreadId });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
await executeWorkflow(ctx, token, chatId, cmd, args, messageThreadId, resolvedCompanyId);
|
|
146
|
+
}
|
|
147
|
+
// --- Workflow executor ---
|
|
148
|
+
async function executeWorkflow(ctx, token, chatId, cmd, args, messageThreadId, companyId) {
|
|
149
|
+
await sendChatAction(ctx, token, chatId);
|
|
150
|
+
await ctx.metrics.write(METRIC_NAMES.commandsExecuted, 1);
|
|
151
|
+
const results = [];
|
|
152
|
+
for (const step of cmd.steps) {
|
|
153
|
+
try {
|
|
154
|
+
const result = await executeStep(ctx, token, chatId, step, args, results, messageThreadId, companyId);
|
|
155
|
+
results.push({ stepId: step.id, result: result ?? "" });
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
ctx.logger.error("Workflow step failed", { command: cmd.name, stepId: step.id, error: String(err) });
|
|
159
|
+
await sendMessage(ctx, token, chatId, `Step "${step.name ?? step.id}" failed: ${String(err)}`, { messageThreadId });
|
|
160
|
+
return; // Stop execution on failure
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
ctx.logger.info("Workflow completed", { command: cmd.name, steps: results.length });
|
|
164
|
+
}
|
|
165
|
+
async function executeStep(ctx, token, chatId, step, args, prevResults, messageThreadId, companyId) {
|
|
166
|
+
const interpolate = (template) => {
|
|
167
|
+
let result = template;
|
|
168
|
+
// Replace {{arg0}}, {{arg1}}, etc.
|
|
169
|
+
for (let i = 0; i < args.length; i++) {
|
|
170
|
+
result = result.replace(new RegExp(`\\{\\{arg${i}\\}\\}`, "g"), args[i]);
|
|
171
|
+
}
|
|
172
|
+
result = result.replace(/\{\{args\}\}/g, args.join(" "));
|
|
173
|
+
// Replace {{prev.result}}, {{step_id.result}}
|
|
174
|
+
if (prevResults.length > 0) {
|
|
175
|
+
const lastResult = prevResults[prevResults.length - 1];
|
|
176
|
+
result = result.replace(/\{\{prev\.result\}\}/g, lastResult.result);
|
|
177
|
+
}
|
|
178
|
+
for (const prev of prevResults) {
|
|
179
|
+
result = result.replace(new RegExp(`\\{\\{${prev.stepId}\\.result\\}\\}`, "g"), prev.result);
|
|
180
|
+
}
|
|
181
|
+
return result;
|
|
182
|
+
};
|
|
183
|
+
switch (step.type) {
|
|
184
|
+
case "fetch_issue": {
|
|
185
|
+
const issueId = interpolate(step.issueId);
|
|
186
|
+
const issue = await ctx.issues.get(issueId, companyId);
|
|
187
|
+
if (!issue)
|
|
188
|
+
return JSON.stringify({ error: "Issue not found", issueId });
|
|
189
|
+
return JSON.stringify({ id: issue.id, title: issue.title, status: issue.status });
|
|
190
|
+
}
|
|
191
|
+
case "invoke_agent": {
|
|
192
|
+
const prompt = interpolate(step.prompt);
|
|
193
|
+
const { runId } = await ctx.agents.invoke(step.agentId, companyId, {
|
|
194
|
+
prompt,
|
|
195
|
+
reason: `custom_command:${step.id}`,
|
|
196
|
+
});
|
|
197
|
+
return runId;
|
|
198
|
+
}
|
|
199
|
+
case "http_request": {
|
|
200
|
+
const url = interpolate(step.url);
|
|
201
|
+
const body = step.body ? interpolate(step.body) : undefined;
|
|
202
|
+
const res = await ctx.http.fetch(url, {
|
|
203
|
+
method: step.method,
|
|
204
|
+
headers: step.headers ? Object.fromEntries(Object.entries(step.headers).map(([k, v]) => [k, interpolate(v)])) : undefined,
|
|
205
|
+
body,
|
|
206
|
+
});
|
|
207
|
+
const data = await res.text();
|
|
208
|
+
return data;
|
|
209
|
+
}
|
|
210
|
+
case "send_message": {
|
|
211
|
+
const text = interpolate(step.text);
|
|
212
|
+
await sendMessage(ctx, token, chatId, text, { messageThreadId });
|
|
213
|
+
return "sent";
|
|
214
|
+
}
|
|
215
|
+
case "create_issue": {
|
|
216
|
+
const title = interpolate(step.title);
|
|
217
|
+
const description = step.description ? interpolate(step.description) : undefined;
|
|
218
|
+
const issue = await ctx.issues.create({
|
|
219
|
+
companyId,
|
|
220
|
+
title,
|
|
221
|
+
description,
|
|
222
|
+
projectId: step.projectId,
|
|
223
|
+
assigneeAgentId: step.assigneeAgentId,
|
|
224
|
+
});
|
|
225
|
+
if (step.assigneeAgentId) {
|
|
226
|
+
await ctx.issues.update(issue.id, { status: "todo" }, companyId);
|
|
227
|
+
}
|
|
228
|
+
return issue.id;
|
|
229
|
+
}
|
|
230
|
+
case "wait_approval": {
|
|
231
|
+
const prompt = interpolate(step.prompt);
|
|
232
|
+
const approvalId = `cmd_approval_${Date.now()}`;
|
|
233
|
+
await sendMessage(ctx, token, chatId, prompt, {
|
|
234
|
+
messageThreadId,
|
|
235
|
+
inlineKeyboard: [
|
|
236
|
+
[
|
|
237
|
+
{ text: "Approve", callback_data: `cmd_approve_${approvalId}` },
|
|
238
|
+
{ text: "Reject", callback_data: `cmd_reject_${approvalId}` },
|
|
239
|
+
],
|
|
240
|
+
],
|
|
241
|
+
});
|
|
242
|
+
// Store approval state - workflow will be continued by callback handler
|
|
243
|
+
await ctx.state.set({ scopeKind: "instance", stateKey: `cmd_approval_${approvalId}` }, { status: "pending", createdAt: Date.now() });
|
|
244
|
+
return "awaiting_approval";
|
|
245
|
+
}
|
|
246
|
+
case "set_state": {
|
|
247
|
+
const key = interpolate(step.key);
|
|
248
|
+
const value = interpolate(step.value);
|
|
249
|
+
await ctx.state.set({ scopeKind: "company", scopeId: companyId, stateKey: key }, value);
|
|
250
|
+
return value;
|
|
251
|
+
}
|
|
252
|
+
default:
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// --- State helpers ---
|
|
257
|
+
async function getCommandRegistry(ctx, companyId) {
|
|
258
|
+
const commands = await ctx.state.get({
|
|
259
|
+
scopeKind: "company",
|
|
260
|
+
scopeId: companyId,
|
|
261
|
+
stateKey: `commands_${companyId}`,
|
|
262
|
+
});
|
|
263
|
+
return commands ?? [];
|
|
264
|
+
}
|
|
265
|
+
async function saveCommandRegistry(ctx, companyId, commands) {
|
|
266
|
+
await ctx.state.set({ scopeKind: "company", scopeId: companyId, stateKey: `commands_${companyId}` }, commands);
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=command-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../src/command-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PluginContext, PluginEvent } from "@paperclipai/plugin-sdk";
|
|
2
|
+
type BotCommand = {
|
|
3
|
+
command: string;
|
|
4
|
+
description: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const BOT_COMMANDS: BotCommand[];
|
|
7
|
+
export declare function handleCommand(ctx: PluginContext, token: string, chatId: string, command: string, args: string, messageThreadId?: number, baseUrl?: string, publicUrl?: string, companyId?: string, boardApiToken?: string, maxAgentsPerThread?: number): Promise<void>;
|
|
8
|
+
export declare function handleConnectTopic(ctx: PluginContext, token: string, chatId: string, args: string, messageThreadId?: number): Promise<void>;
|
|
9
|
+
export declare function getTopicForProject(ctx: PluginContext, chatId: string, projectName?: string): Promise<number | undefined>;
|
|
10
|
+
export declare function resolveNotificationThreadId(ctx: PluginContext, chatId: string, event: PluginEvent, topicRouting: boolean): Promise<number | undefined>;
|
|
11
|
+
export {};
|