paperclip-plugin-telegram 0.4.0 → 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/dist/manifest.js CHANGED
@@ -1,4 +1,4 @@
1
- import { DEFAULT_CONFIG, PLUGIN_ID, PLUGIN_VERSION, MAX_AGENTS_PER_THREAD } from "./constants.js";
1
+ import { PLUGIN_ID, PLUGIN_VERSION } from "./constants.js";
2
2
  const manifest = {
3
3
  id: PLUGIN_ID,
4
4
  apiVersion: 1,
@@ -31,199 +31,22 @@ const manifest = {
31
31
  "activity.log.write",
32
32
  "metrics.write",
33
33
  "jobs.schedule",
34
+ "instance.settings.register",
35
+ "ui.page.register",
34
36
  ],
35
37
  entrypoints: {
36
38
  worker: "./dist/worker.js",
39
+ ui: "./dist/ui",
37
40
  },
38
- instanceConfigSchema: {
39
- type: "object",
40
- properties: {
41
- // --- Connection ---
42
- telegramBotTokenRef: {
43
- type: "string",
44
- format: "secret-ref",
45
- title: "Telegram Bot Token (secret reference)",
46
- description: "Secret UUID for your Telegram Bot token. Create the secret in Settings > Secrets, then paste its UUID here. Get a token from @BotFather.",
47
- default: DEFAULT_CONFIG.telegramBotTokenRef,
48
- },
49
- paperclipBaseUrl: {
50
- type: "string",
51
- title: "Paperclip API URL (internal)",
52
- description: "Internal URL of the Paperclip API server. Used for API calls (approvals, comments). Keep as localhost for same-server deployments.",
53
- default: DEFAULT_CONFIG.paperclipBaseUrl,
54
- },
55
- paperclipPublicUrl: {
56
- type: "string",
57
- title: "Paperclip Public URL",
58
- description: "Public URL for issue links in Telegram messages (e.g. https://pc.example.com). Falls back to API URL if empty.",
59
- default: DEFAULT_CONFIG.paperclipPublicUrl,
60
- },
61
- // --- Chat routing ---
62
- defaultChatId: {
63
- type: "string",
64
- title: "Default Chat ID (fallback)",
65
- description: "Fallback Telegram chat ID for notifications when no per-company chat is configured. Use /connect in a chat to set per-company routing.",
66
- default: DEFAULT_CONFIG.defaultChatId,
67
- },
68
- approvalsChatId: {
69
- type: "string",
70
- title: "Approvals Chat ID",
71
- description: "Chat ID for approval requests. Falls back to default chat.",
72
- default: DEFAULT_CONFIG.approvalsChatId,
73
- },
74
- errorsChatId: {
75
- type: "string",
76
- title: "Errors Chat ID",
77
- description: "Chat ID for agent error notifications. Falls back to default chat.",
78
- default: DEFAULT_CONFIG.errorsChatId,
79
- },
80
- escalationChatId: {
81
- type: "string",
82
- title: "Escalation Chat ID",
83
- description: "Telegram chat ID where escalations are sent for human review. If empty, escalations are logged but not forwarded.",
84
- default: DEFAULT_CONFIG.escalationChatId,
85
- },
86
- topicRouting: {
87
- type: "boolean",
88
- title: "Forum topic routing",
89
- description: "Map Telegram forum topics to Paperclip projects. Requires the bot to be in a group with forum topics enabled.",
90
- default: DEFAULT_CONFIG.topicRouting,
91
- },
92
- // --- Notifications ---
93
- notifyOnIssueCreated: {
94
- type: "boolean",
95
- title: "Notify on issue created",
96
- default: DEFAULT_CONFIG.notifyOnIssueCreated,
97
- },
98
- notifyOnIssueDone: {
99
- type: "boolean",
100
- title: "Notify on issue completed",
101
- default: DEFAULT_CONFIG.notifyOnIssueDone,
102
- },
103
- notifyOnIssueAssigned: {
104
- type: "boolean",
105
- title: "Notify on issue assignment changes",
106
- description: "Send a message when an existing issue's assigneeUserId or assigneeAgentId changes. Complements notifyOnIssueCreated (which covers initial assignment on creation).",
107
- default: DEFAULT_CONFIG.notifyOnIssueAssigned,
108
- },
109
- onlyNotifyIfAssignedTo: {
110
- type: "string",
111
- title: "Only notify when assigned to this user (user ID)",
112
- description: "Optional. Paste your Paperclip user ID here to restrict assignment notifications to items newly assigned to you. Leave empty to notify on every assignment change. To find your user ID: sign in to Paperclip in a browser and visit /api/cli-auth/me — copy the `userId` field (a string like `mrvhBEpPds85TGeEjlAHviP0VdOHgymm`).",
113
- default: DEFAULT_CONFIG.onlyNotifyIfAssignedTo,
114
- },
115
- notifyOnApprovalCreated: {
116
- type: "boolean",
117
- title: "Notify on approval requested",
118
- default: DEFAULT_CONFIG.notifyOnApprovalCreated,
119
- },
120
- notifyOnAgentError: {
121
- type: "boolean",
122
- title: "Notify on agent error",
123
- default: DEFAULT_CONFIG.notifyOnAgentError,
124
- },
125
- // --- Digest ---
126
- digestMode: {
127
- type: "string",
128
- title: "Digest mode",
129
- description: "off = disabled, daily = once per day, bidaily = twice per day, tridaily = three times per day.",
130
- enum: ["off", "daily", "bidaily", "tridaily"],
131
- default: DEFAULT_CONFIG.digestMode,
132
- },
133
- dailyDigestTime: {
134
- type: "string",
135
- title: "Digest time (HH:MM UTC)",
136
- description: "Time to send the digest. Used for daily mode and first slot of bidaily mode.",
137
- default: DEFAULT_CONFIG.dailyDigestTime,
138
- },
139
- bidailySecondTime: {
140
- type: "string",
141
- title: "Bidaily second time (HH:MM UTC)",
142
- description: "Second digest time for bidaily mode.",
143
- default: DEFAULT_CONFIG.bidailySecondTime,
144
- },
145
- tridailyTimes: {
146
- type: "string",
147
- title: "Tridaily times (HH:MM,HH:MM,HH:MM UTC)",
148
- description: "Three comma-separated times for tridaily mode.",
149
- default: DEFAULT_CONFIG.tridailyTimes,
150
- },
151
- // --- Bot interaction ---
152
- enableCommands: {
153
- type: "boolean",
154
- title: "Enable bot commands",
155
- description: "Allow users to interact with Paperclip via Telegram bot commands (/status, /issues, /agents).",
156
- default: DEFAULT_CONFIG.enableCommands,
157
- },
158
- enableInbound: {
159
- type: "boolean",
160
- title: "Enable inbound message routing",
161
- description: "Route Telegram messages to Paperclip issue comments. Messages sent in reply to a notification get attached to that issue.",
162
- default: DEFAULT_CONFIG.enableInbound,
163
- },
164
- // --- Escalation ---
165
- escalationTimeoutMs: {
166
- type: "number",
167
- title: "Escalation Timeout (ms)",
168
- description: "How long to wait for a human response before taking the default action. Default: 900000 (15 minutes).",
169
- default: DEFAULT_CONFIG.escalationTimeoutMs,
170
- },
171
- escalationDefaultAction: {
172
- type: "string",
173
- title: "Escalation Default Action",
174
- description: "What to do when an escalation times out: defer (do nothing), auto_reply (send suggested reply), or close.",
175
- enum: ["defer", "auto_reply", "close"],
176
- default: DEFAULT_CONFIG.escalationDefaultAction,
177
- },
178
- escalationHoldMessage: {
179
- type: "string",
180
- title: "Escalation Hold Message",
181
- description: "Message sent to the user when their conversation is escalated to a human.",
182
- default: DEFAULT_CONFIG.escalationHoldMessage,
183
- },
184
- // --- Agent sessions ---
185
- maxAgentsPerThread: {
186
- type: "number",
187
- title: "Max Agents Per Thread",
188
- description: "Maximum number of concurrent agent sessions allowed in a single thread.",
189
- default: MAX_AGENTS_PER_THREAD,
190
- },
191
- // --- Media pipeline ---
192
- briefAgentId: {
193
- type: "string",
194
- title: "Brief Agent ID",
195
- description: "Agent ID for processing media intake briefs. Leave empty to disable media pipeline.",
196
- default: DEFAULT_CONFIG.briefAgentId,
197
- },
198
- briefAgentChatIds: {
199
- type: "array",
200
- items: { type: "string" },
201
- title: "Brief Agent Intake Chat IDs",
202
- description: "Telegram chat IDs where media is routed to the Brief Agent. Media in other chats goes to active agent sessions.",
203
- default: DEFAULT_CONFIG.briefAgentChatIds,
204
- },
205
- transcriptionApiKeyRef: {
206
- type: "string",
207
- format: "secret-ref",
208
- title: "Transcription API Key (secret reference)",
209
- description: "Secret UUID for your OpenAI API key used for Whisper transcription. Create the secret in Settings > Secrets, then paste its UUID here.",
210
- default: DEFAULT_CONFIG.transcriptionApiKeyRef,
211
- },
212
- // --- Proactive watches ---
213
- maxSuggestionsPerHourPerCompany: {
214
- type: "number",
215
- title: "Max Suggestions per Hour per Company",
216
- description: "Rate limit for proactive watch suggestions.",
217
- default: DEFAULT_CONFIG.maxSuggestionsPerHourPerCompany,
218
- },
219
- watchDeduplicationWindowMs: {
220
- type: "number",
221
- title: "Watch Deduplication Window (ms)",
222
- description: "Suppress duplicate watch suggestions for the same entity within this window. Default: 86400000 (24 hours).",
223
- default: DEFAULT_CONFIG.watchDeduplicationWindowMs,
224
- },
225
- },
226
- required: ["telegramBotTokenRef"],
41
+ ui: {
42
+ slots: [
43
+ {
44
+ type: "settingsPage",
45
+ id: "telegram-settings",
46
+ displayName: "Telegram Settings",
47
+ exportName: "TelegramSettingsPage",
48
+ },
49
+ ],
227
50
  },
228
51
  jobs: [
229
52
  {
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,QAAQ,GAA8B;IAC1C,EAAE,EAAE,SAAS;IACb,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE,cAAc;IAC3B,WAAW,EACT,iOAAiO;IACnO,MAAM,EAAE,UAAU;IAClB,UAAU,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;IACvC,YAAY,EAAE;QACZ,gBAAgB;QAChB,eAAe;QACf,aAAa;QACb,eAAe;QACf,eAAe;QACf,qBAAqB;QACrB,uBAAuB;QACvB,aAAa;QACb,eAAe;QACf,uBAAuB;QACvB,qBAAqB;QACrB,qBAAqB;QACrB,sBAAsB;QACtB,sBAAsB;QACtB,kBAAkB;QAClB,aAAa;QACb,mBAAmB;QACnB,oBAAoB;QACpB,eAAe;QACf,kBAAkB;QAClB,oBAAoB;QACpB,eAAe;QACf,eAAe;QACf,4BAA4B;QAC5B,kBAAkB;KACnB;IACD,WAAW,EAAE;QACX,MAAM,EAAE,kBAAkB;QAC1B,EAAE,EAAE,WAAW;KAChB;IACD,EAAE,EAAE;QACF,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,cAAc;gBACpB,EAAE,EAAE,mBAAmB;gBACvB,WAAW,EAAE,mBAAmB;gBAChC,UAAU,EAAE,sBAAsB;aACnC;SACF;KACF;IACD,IAAI,EAAE;QACJ;YACE,MAAM,EAAE,uBAAuB;YAC/B,WAAW,EAAE,iBAAiB;YAC9B,WAAW,EAAE,kEAAkE;YAC/E,QAAQ,EAAE,WAAW;SACtB;QACD;YACE,MAAM,EAAE,2BAA2B;YACnC,WAAW,EAAE,2BAA2B;YACxC,WAAW,EAAE,4DAA4D;YACzE,QAAQ,EAAE,WAAW;SACtB;QACD;YACE,MAAM,EAAE,eAAe;YACvB,WAAW,EAAE,yBAAyB;YACtC,WAAW,EAAE,2EAA2E;YACxF,QAAQ,EAAE,cAAc;SACzB;KACF;IACD,KAAK,EAAE;QACL;YACE,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,mBAAmB;YAChC,WAAW,EAAE,0EAA0E;YACvF,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACrC;QACD;YACE,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,kBAAkB;YAC/B,WAAW,EAAE,+CAA+C;YAC5D,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACrC;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EAAE,oBAAoB;YACjC,WAAW,EAAE,wDAAwD;YACrE,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACrC;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,yEAAyE;YACtF,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACrC;KACF;CACF,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PluginContext } from "@paperclipai/plugin-sdk";
2
+ export declare function fetchPaperclipApi(ctx: PluginContext, url: string, init?: RequestInit): Promise<Response>;
3
+ export declare function buildPaperclipAuthHeaders(boardApiToken?: string): Record<string, string>;
@@ -0,0 +1,34 @@
1
+ function isLoopbackUrl(url) {
2
+ try {
3
+ const parsed = new URL(url);
4
+ return ["localhost", "127.0.0.1", "::1", "[::1]"].includes(parsed.hostname);
5
+ }
6
+ catch {
7
+ return false;
8
+ }
9
+ }
10
+ export async function fetchPaperclipApi(ctx, url, init) {
11
+ const response = isLoopbackUrl(url)
12
+ ? await fetch(url, init)
13
+ : await ctx.http.fetch(url, init);
14
+ if (!response.ok) {
15
+ let body = "";
16
+ try {
17
+ body = await response.text();
18
+ }
19
+ catch {
20
+ body = "";
21
+ }
22
+ const detail = body ? `: ${body.slice(0, 300)}` : "";
23
+ throw new Error(`Paperclip API request failed with ${response.status}${detail}`);
24
+ }
25
+ return response;
26
+ }
27
+ export function buildPaperclipAuthHeaders(boardApiToken) {
28
+ return boardApiToken
29
+ ? {
30
+ Authorization: `Bearer ${boardApiToken}`,
31
+ }
32
+ : {};
33
+ }
34
+ //# sourceMappingURL=paperclip-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paperclip-api.js","sourceRoot":"","sources":["../src/paperclip-api.ts"],"names":[],"mappings":"AAEA,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAkB,EAClB,GAAW,EACX,IAAkB;IAElB,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC;QACjC,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;QACxB,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAEpC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,aAAsB;IAEtB,OAAO,aAAa;QAClB,CAAC,CAAC;YACE,aAAa,EAAE,UAAU,aAAa,EAAE;SACzC;QACH,CAAC,CAAC,EAAE,CAAC;AACT,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type PluginSettingsPageProps } from "@paperclipai/plugin-sdk/ui";
2
+ export declare function TelegramSettingsPage({ context }: PluginSettingsPageProps): React.JSX.Element;