openclaw-telegram-manager 1.0.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.
Files changed (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +110 -0
  3. package/dist/commands/archive.d.ts +4 -0
  4. package/dist/commands/archive.d.ts.map +1 -0
  5. package/dist/commands/archive.js +71 -0
  6. package/dist/commands/archive.js.map +1 -0
  7. package/dist/commands/doctor-all.d.ts +3 -0
  8. package/dist/commands/doctor-all.d.ts.map +1 -0
  9. package/dist/commands/doctor-all.js +193 -0
  10. package/dist/commands/doctor-all.js.map +1 -0
  11. package/dist/commands/doctor.d.ts +3 -0
  12. package/dist/commands/doctor.d.ts.map +1 -0
  13. package/dist/commands/doctor.js +74 -0
  14. package/dist/commands/doctor.js.map +1 -0
  15. package/dist/commands/help.d.ts +4 -0
  16. package/dist/commands/help.d.ts.map +1 -0
  17. package/dist/commands/help.js +8 -0
  18. package/dist/commands/help.js.map +1 -0
  19. package/dist/commands/init.d.ts +17 -0
  20. package/dist/commands/init.d.ts.map +1 -0
  21. package/dist/commands/init.js +304 -0
  22. package/dist/commands/init.js.map +1 -0
  23. package/dist/commands/list.d.ts +3 -0
  24. package/dist/commands/list.d.ts.map +1 -0
  25. package/dist/commands/list.js +22 -0
  26. package/dist/commands/list.js.map +1 -0
  27. package/dist/commands/rename.d.ts +3 -0
  28. package/dist/commands/rename.d.ts.map +1 -0
  29. package/dist/commands/rename.js +115 -0
  30. package/dist/commands/rename.js.map +1 -0
  31. package/dist/commands/snooze.d.ts +3 -0
  32. package/dist/commands/snooze.d.ts.map +1 -0
  33. package/dist/commands/snooze.js +52 -0
  34. package/dist/commands/snooze.js.map +1 -0
  35. package/dist/commands/status.d.ts +3 -0
  36. package/dist/commands/status.d.ts.map +1 -0
  37. package/dist/commands/status.js +48 -0
  38. package/dist/commands/status.js.map +1 -0
  39. package/dist/commands/sync.d.ts +3 -0
  40. package/dist/commands/sync.d.ts.map +1 -0
  41. package/dist/commands/sync.js +38 -0
  42. package/dist/commands/sync.js.map +1 -0
  43. package/dist/commands/upgrade.d.ts +3 -0
  44. package/dist/commands/upgrade.d.ts.map +1 -0
  45. package/dist/commands/upgrade.js +52 -0
  46. package/dist/commands/upgrade.js.map +1 -0
  47. package/dist/index.d.ts +25 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +30 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/lib/audit.d.ts +12 -0
  52. package/dist/lib/audit.d.ts.map +1 -0
  53. package/dist/lib/audit.js +35 -0
  54. package/dist/lib/audit.js.map +1 -0
  55. package/dist/lib/auth.d.ts +26 -0
  56. package/dist/lib/auth.d.ts.map +1 -0
  57. package/dist/lib/auth.js +73 -0
  58. package/dist/lib/auth.js.map +1 -0
  59. package/dist/lib/capsule.d.ts +27 -0
  60. package/dist/lib/capsule.d.ts.map +1 -0
  61. package/dist/lib/capsule.js +130 -0
  62. package/dist/lib/capsule.js.map +1 -0
  63. package/dist/lib/config-restart.d.ts +23 -0
  64. package/dist/lib/config-restart.d.ts.map +1 -0
  65. package/dist/lib/config-restart.js +129 -0
  66. package/dist/lib/config-restart.js.map +1 -0
  67. package/dist/lib/doctor-checks.d.ts +50 -0
  68. package/dist/lib/doctor-checks.d.ts.map +1 -0
  69. package/dist/lib/doctor-checks.js +421 -0
  70. package/dist/lib/doctor-checks.js.map +1 -0
  71. package/dist/lib/include-generator.d.ts +35 -0
  72. package/dist/lib/include-generator.d.ts.map +1 -0
  73. package/dist/lib/include-generator.js +140 -0
  74. package/dist/lib/include-generator.js.map +1 -0
  75. package/dist/lib/registry.d.ts +27 -0
  76. package/dist/lib/registry.d.ts.map +1 -0
  77. package/dist/lib/registry.js +154 -0
  78. package/dist/lib/registry.js.map +1 -0
  79. package/dist/lib/security.d.ts +57 -0
  80. package/dist/lib/security.d.ts.map +1 -0
  81. package/dist/lib/security.js +133 -0
  82. package/dist/lib/security.js.map +1 -0
  83. package/dist/lib/telegram.d.ts +55 -0
  84. package/dist/lib/telegram.d.ts.map +1 -0
  85. package/dist/lib/telegram.js +254 -0
  86. package/dist/lib/telegram.js.map +1 -0
  87. package/dist/lib/types.d.ts +120 -0
  88. package/dist/lib/types.d.ts.map +1 -0
  89. package/dist/lib/types.js +85 -0
  90. package/dist/lib/types.js.map +1 -0
  91. package/dist/setup.d.ts +3 -0
  92. package/dist/setup.d.ts.map +1 -0
  93. package/dist/setup.js +333 -0
  94. package/dist/setup.js.map +1 -0
  95. package/dist/tool.d.ts +15 -0
  96. package/dist/tool.d.ts.map +1 -0
  97. package/dist/tool.js +201 -0
  98. package/dist/tool.js.map +1 -0
  99. package/openclaw.plugin.json +9 -0
  100. package/package.json +48 -0
  101. package/skills/topic/SKILL.md +35 -0
  102. package/src/commands/archive.ts +89 -0
  103. package/src/commands/doctor-all.ts +243 -0
  104. package/src/commands/doctor.ts +100 -0
  105. package/src/commands/help.ts +11 -0
  106. package/src/commands/init.ts +376 -0
  107. package/src/commands/list.ts +28 -0
  108. package/src/commands/rename.ts +140 -0
  109. package/src/commands/snooze.ts +69 -0
  110. package/src/commands/status.ts +59 -0
  111. package/src/commands/sync.ts +46 -0
  112. package/src/commands/upgrade.ts +64 -0
  113. package/src/index.ts +54 -0
  114. package/src/lib/audit.ts +44 -0
  115. package/src/lib/auth.ts +96 -0
  116. package/src/lib/capsule.ts +206 -0
  117. package/src/lib/config-restart.ts +167 -0
  118. package/src/lib/doctor-checks.ts +639 -0
  119. package/src/lib/include-generator.ts +174 -0
  120. package/src/lib/registry.ts +197 -0
  121. package/src/lib/security.ts +174 -0
  122. package/src/lib/telegram.ts +311 -0
  123. package/src/lib/types.ts +172 -0
  124. package/src/setup.ts +402 -0
  125. package/src/templates/base/COMMANDS.md +3 -0
  126. package/src/templates/base/CRON.md +3 -0
  127. package/src/templates/base/LINKS.md +3 -0
  128. package/src/templates/base/NOTES.md +3 -0
  129. package/src/templates/base/README.md +3 -0
  130. package/src/templates/base/STATUS.md +13 -0
  131. package/src/templates/base/TODO.md +11 -0
  132. package/src/templates/overlays/coding/ARCHITECTURE.md +3 -0
  133. package/src/templates/overlays/coding/DEPLOY.md +3 -0
  134. package/src/templates/overlays/marketing/CAMPAIGNS.md +3 -0
  135. package/src/templates/overlays/marketing/METRICS.md +3 -0
  136. package/src/templates/overlays/research/FINDINGS.md +3 -0
  137. package/src/templates/overlays/research/SOURCES.md +3 -0
  138. package/src/tool.ts +282 -0
package/dist/setup.js ADDED
@@ -0,0 +1,333 @@
1
+ #!/usr/bin/env node
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import * as crypto from 'node:crypto';
5
+ import { execSync } from 'node:child_process';
6
+ import * as readline from 'node:readline';
7
+ // ── Constants ──────────────────────────────────────────────────────────
8
+ const MIN_OPENCLAW_VERSION = '2026.1.0';
9
+ const INCLUDE_FILENAME = 'telegram-manager.generated.groups.json5';
10
+ const REGISTRY_FILENAME = 'topics.json';
11
+ // ── Main ──────────────────────────────────────────────────────────────
12
+ async function main() {
13
+ console.log('openclaw-telegram-manager setup');
14
+ console.log('================================\n');
15
+ // Step 1: Check OpenClaw version
16
+ const version = checkOpenClawVersion();
17
+ console.log(`[1/11] OpenClaw version: ${version}`);
18
+ // Step 2: Locate config directory
19
+ const configDir = locateConfigDir();
20
+ console.log(`[2/11] Config directory: ${configDir}`);
21
+ // Step 3: Check directory permissions
22
+ checkDirPermissions(configDir);
23
+ console.log('[3/11] Directory permissions checked');
24
+ // Step 4: Install plugin
25
+ installPlugin();
26
+ console.log('[4/11] Plugin installation checked');
27
+ // Step 5: Patch openclaw.json with $include reference
28
+ patchConfig(configDir);
29
+ console.log('[5/11] Config patched with $include reference');
30
+ // Step 6: Create workspace directory structure
31
+ const workspaceDir = path.join(configDir, 'workspace');
32
+ const projectsDir = path.join(workspaceDir, 'projects');
33
+ ensureDir(projectsDir);
34
+ console.log(`[6/11] Workspace directory: ${projectsDir}`);
35
+ // Step 7: Initialize empty registry
36
+ initRegistry(projectsDir);
37
+ console.log('[7/11] Registry initialized');
38
+ // Step 8: Create empty generated include
39
+ createEmptyInclude(configDir);
40
+ console.log('[8/11] Empty include file created');
41
+ // Step 9: Optional cron setup
42
+ const isInteractive = process.stdin.isTTY === true;
43
+ const setupCron = isInteractive ? await promptYesNo('Set up daily doctor cron job? [Y/n] ') : true;
44
+ if (setupCron) {
45
+ const groupId = isInteractive
46
+ ? await promptInput('Enter your Telegram group ID (e.g., -1003731538650): ')
47
+ : '';
48
+ setupDoctorCron(configDir, groupId);
49
+ console.log('[9/11] Doctor cron job configured');
50
+ }
51
+ else {
52
+ console.log('[9/11] Skipped cron setup');
53
+ }
54
+ // Step 10: Trigger gateway restart
55
+ triggerRestart(configDir);
56
+ console.log('[10/11] Gateway restart triggered');
57
+ // Step 11: Print summary
58
+ printSummary(configDir, projectsDir);
59
+ console.log('[11/11] Setup complete!\n');
60
+ }
61
+ // ── Step implementations ──────────────────────────────────────────────
62
+ function checkOpenClawVersion() {
63
+ let version;
64
+ try {
65
+ version = execSync('openclaw --version', { encoding: 'utf-8' }).trim();
66
+ }
67
+ catch {
68
+ console.error('Error: OpenClaw not found. Please install OpenClaw (>=2026.1.0) first.');
69
+ process.exit(1);
70
+ }
71
+ // Extract version number (e.g., "openclaw 2026.2.0" -> "2026.2.0")
72
+ const match = version.match(/(\d+\.\d+\.\d+)/);
73
+ if (!match) {
74
+ console.warn(`Warning: Could not parse OpenClaw version from "${version}". Proceeding anyway.`);
75
+ return version;
76
+ }
77
+ const versionStr = match[1];
78
+ if (compareVersions(versionStr, MIN_OPENCLAW_VERSION) < 0) {
79
+ console.error(`Error: OpenClaw ${versionStr} found, but openclaw-telegram-manager requires >=${MIN_OPENCLAW_VERSION}. Please upgrade.`);
80
+ process.exit(1);
81
+ }
82
+ return versionStr;
83
+ }
84
+ function locateConfigDir() {
85
+ // Check environment variable
86
+ const envDir = process.env['OPENCLAW_CONFIG_DIR'];
87
+ if (envDir && fs.existsSync(envDir)) {
88
+ return path.resolve(envDir);
89
+ }
90
+ // Check default location
91
+ const homeDir = process.env['HOME'] ?? process.env['USERPROFILE'] ?? '';
92
+ const defaultDir = path.join(homeDir, '.openclaw');
93
+ if (fs.existsSync(defaultDir)) {
94
+ return defaultDir;
95
+ }
96
+ // Walk up from cwd looking for openclaw.json
97
+ let dir = process.cwd();
98
+ while (dir !== path.dirname(dir)) {
99
+ if (fs.existsSync(path.join(dir, 'openclaw.json'))) {
100
+ return dir;
101
+ }
102
+ dir = path.dirname(dir);
103
+ }
104
+ console.error('Error: Could not find OpenClaw config directory. Set $OPENCLAW_CONFIG_DIR or ensure ~/.openclaw/ exists.');
105
+ process.exit(1);
106
+ }
107
+ function checkDirPermissions(dir) {
108
+ try {
109
+ const stat = fs.statSync(dir);
110
+ const mode = stat.mode;
111
+ const permissions = (mode & 0o777).toString(8);
112
+ // Check for world-writable or group-writable
113
+ if (mode & 0o002) {
114
+ console.warn(`Warning: ${dir} is world-writable (${permissions}). Consider restricting to owner-only (chmod 700).`);
115
+ }
116
+ else if (mode & 0o020) {
117
+ console.warn(`Warning: ${dir} is group-writable (${permissions}). Consider restricting to owner-only (chmod 700).`);
118
+ }
119
+ }
120
+ catch {
121
+ console.warn(`Warning: Could not check permissions for ${dir}.`);
122
+ }
123
+ }
124
+ function installPlugin() {
125
+ try {
126
+ // Check if already installed
127
+ const result = execSync('openclaw plugins list', { encoding: 'utf-8' });
128
+ if (result.includes('openclaw-telegram-manager')) {
129
+ console.log(' Plugin already installed, skipping.');
130
+ return;
131
+ }
132
+ }
133
+ catch {
134
+ // plugins list might not be available, try installing anyway
135
+ }
136
+ try {
137
+ execSync('openclaw plugins install openclaw-telegram-manager', {
138
+ encoding: 'utf-8',
139
+ stdio: 'inherit',
140
+ });
141
+ }
142
+ catch {
143
+ console.warn(' Warning: Could not install plugin via `openclaw plugins install`. You may need to install manually.');
144
+ }
145
+ }
146
+ function patchConfig(configDir) {
147
+ const configPath = path.join(configDir, 'openclaw.json');
148
+ if (!fs.existsSync(configPath)) {
149
+ console.warn(` Warning: ${configPath} not found. Skipping config patch.`);
150
+ return;
151
+ }
152
+ let content;
153
+ try {
154
+ content = fs.readFileSync(configPath, 'utf-8');
155
+ }
156
+ catch (err) {
157
+ console.warn(` Warning: Could not read ${configPath}. Skipping config patch.`);
158
+ return;
159
+ }
160
+ // Check if $include reference already exists
161
+ if (content.includes(INCLUDE_FILENAME)) {
162
+ console.log(' $include reference already present, skipping.');
163
+ return;
164
+ }
165
+ // Parse as JSON (OpenClaw config may be JSON or JSON5)
166
+ let config;
167
+ try {
168
+ config = JSON.parse(content);
169
+ }
170
+ catch {
171
+ // Try a more lenient approach: just check for the string and warn
172
+ console.warn(' Warning: Could not parse openclaw.json as JSON. Please manually add the $include reference.');
173
+ console.warn(` Add to channels.telegram.groups: { "$include": "./${INCLUDE_FILENAME}" }`);
174
+ return;
175
+ }
176
+ // Ensure path exists: channels.telegram.groups
177
+ if (!config['channels'])
178
+ config['channels'] = {};
179
+ const channels = config['channels'];
180
+ if (!channels['telegram'])
181
+ channels['telegram'] = {};
182
+ const telegram = channels['telegram'];
183
+ // Set groups to $include
184
+ telegram['groups'] = { $include: `./${INCLUDE_FILENAME}` };
185
+ // Backup and write
186
+ const bakPath = configPath + '.bak';
187
+ fs.copyFileSync(configPath, bakPath);
188
+ const newContent = JSON.stringify(config, null, 2) + '\n';
189
+ fs.writeFileSync(configPath, newContent, { mode: 0o600 });
190
+ }
191
+ function ensureDir(dir) {
192
+ if (!fs.existsSync(dir)) {
193
+ fs.mkdirSync(dir, { recursive: true });
194
+ }
195
+ }
196
+ function initRegistry(projectsDir) {
197
+ const registryPath = path.join(projectsDir, REGISTRY_FILENAME);
198
+ if (fs.existsSync(registryPath)) {
199
+ console.log(' Registry already exists, skipping initialization.');
200
+ return;
201
+ }
202
+ const callbackSecret = crypto.randomBytes(32).toString('hex');
203
+ const registry = {
204
+ version: 1,
205
+ topicManagerAdmins: [],
206
+ callbackSecret,
207
+ lastDoctorAllRunAt: null,
208
+ maxTopics: 100,
209
+ topics: {},
210
+ };
211
+ fs.writeFileSync(registryPath, JSON.stringify(registry, null, 2) + '\n', {
212
+ mode: 0o600,
213
+ });
214
+ }
215
+ function createEmptyInclude(configDir) {
216
+ const includePath = path.join(configDir, INCLUDE_FILENAME);
217
+ if (fs.existsSync(includePath)) {
218
+ console.log(' Include file already exists, skipping.');
219
+ return;
220
+ }
221
+ const content = [
222
+ '// This file is generated by telegram-manager. Do not hand-edit.',
223
+ '{}',
224
+ '',
225
+ ].join('\n');
226
+ fs.writeFileSync(includePath, content, { mode: 0o600 });
227
+ }
228
+ function setupDoctorCron(configDir, groupId) {
229
+ const cronDir = path.join(configDir, 'cron');
230
+ ensureDir(cronDir);
231
+ const cronJobPath = path.join(cronDir, 'topic-doctor-daily.json');
232
+ if (fs.existsSync(cronJobPath)) {
233
+ console.log(' Cron job already exists, skipping.');
234
+ return;
235
+ }
236
+ const target = groupId
237
+ ? `${groupId}:topic:1`
238
+ : '-100XXXXXXXXXX:topic:1';
239
+ const cronJob = {
240
+ name: 'topic-doctor-daily',
241
+ schedule: { kind: 'cron', expr: '0 9 * * *', tz: 'UTC' },
242
+ sessionTarget: 'isolated',
243
+ payload: {
244
+ kind: 'agentTurn',
245
+ message: 'Run topic doctor health checks on all registered topics. Check the registry at projects/topics.json and evaluate each eligible topic. Post per-topic reports with inline keyboards. If any topic\'s thread returns an API error (deleted/migrated), log it and continue to the next topic.',
246
+ timeoutSeconds: 300,
247
+ },
248
+ delivery: {
249
+ mode: 'announce',
250
+ channel: 'telegram',
251
+ to: target,
252
+ bestEffort: true,
253
+ },
254
+ enabled: true,
255
+ deleteAfterRun: false,
256
+ };
257
+ fs.writeFileSync(cronJobPath, JSON.stringify(cronJob, null, 2) + '\n', {
258
+ mode: 0o600,
259
+ });
260
+ if (!groupId) {
261
+ console.warn(' Warning: No group ID provided. Edit the cron job at:');
262
+ console.warn(` ${cronJobPath}`);
263
+ console.warn(' Replace -100XXXXXXXXXX with your actual group ID.');
264
+ }
265
+ }
266
+ function triggerRestart(configDir) {
267
+ try {
268
+ execSync('openclaw gateway restart', {
269
+ encoding: 'utf-8',
270
+ timeout: 10_000,
271
+ });
272
+ }
273
+ catch {
274
+ console.warn(' Warning: Could not restart gateway. Run `openclaw gateway restart` manually.');
275
+ }
276
+ }
277
+ function printSummary(configDir, projectsDir) {
278
+ console.log('\n================================');
279
+ console.log('Setup complete!\n');
280
+ console.log('What was done:');
281
+ console.log(` - Config directory: ${configDir}`);
282
+ console.log(` - Projects directory: ${projectsDir}`);
283
+ console.log(` - Registry: ${path.join(projectsDir, REGISTRY_FILENAME)}`);
284
+ console.log(` - Include: ${path.join(configDir, INCLUDE_FILENAME)}`);
285
+ console.log('\nNext steps:');
286
+ console.log(' 1. Go to any Telegram forum topic');
287
+ console.log(' 2. Type /topic init');
288
+ console.log(' 3. The topic will be registered and a capsule created');
289
+ console.log('\nFor help: /topic help');
290
+ }
291
+ // ── Helpers ───────────────────────────────────────────────────────────
292
+ function compareVersions(a, b) {
293
+ const aParts = a.split('.').map(Number);
294
+ const bParts = b.split('.').map(Number);
295
+ for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
296
+ const aVal = aParts[i] ?? 0;
297
+ const bVal = bParts[i] ?? 0;
298
+ if (aVal !== bVal)
299
+ return aVal - bVal;
300
+ }
301
+ return 0;
302
+ }
303
+ function promptYesNo(question) {
304
+ return new Promise((resolve) => {
305
+ const rl = readline.createInterface({
306
+ input: process.stdin,
307
+ output: process.stdout,
308
+ });
309
+ rl.question(question, (answer) => {
310
+ rl.close();
311
+ const normalized = answer.trim().toLowerCase();
312
+ resolve(normalized === '' || normalized === 'y' || normalized === 'yes');
313
+ });
314
+ });
315
+ }
316
+ function promptInput(question) {
317
+ return new Promise((resolve) => {
318
+ const rl = readline.createInterface({
319
+ input: process.stdin,
320
+ output: process.stdout,
321
+ });
322
+ rl.question(question, (answer) => {
323
+ rl.close();
324
+ resolve(answer.trim());
325
+ });
326
+ });
327
+ }
328
+ // ── Entry point ───────────────────────────────────────────────────────
329
+ main().catch((err) => {
330
+ console.error('Setup failed:', err instanceof Error ? err.message : String(err));
331
+ process.exit(1);
332
+ });
333
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
package/dist/tool.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import type { CommandResult } from './commands/help.js';
2
+ import type { Logger, RpcInterface } from './lib/config-restart.js';
3
+ export interface ToolDeps {
4
+ logger: Logger;
5
+ configDir: string;
6
+ workspaceDir: string;
7
+ rpc?: RpcInterface | null;
8
+ }
9
+ export interface TopicManagerTool {
10
+ execute(_id: string, params: {
11
+ command: string;
12
+ }, execContext?: Record<string, unknown>): Promise<CommandResult>;
13
+ }
14
+ export declare function createTopicManagerTool(deps: ToolDeps): TopicManagerTool;
15
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAIpE,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3B;AAID,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CACL,GAAG,EAAE,MAAM,EACX,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAC3B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3B;AAID,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,CAiFvE"}
package/dist/tool.js ADDED
@@ -0,0 +1,201 @@
1
+ import { readRegistry, withRegistry } from './lib/registry.js';
2
+ import { parseAndVerifyCallback, htmlEscape } from './lib/security.js';
3
+ import { topicKey } from './lib/types.js';
4
+ import { appendAudit, buildAuditEntry } from './lib/audit.js';
5
+ import { handleInitInteractive, handleInitSlugConfirm, handleInitTypeSelect } from './commands/init.js';
6
+ import { handleDoctor } from './commands/doctor.js';
7
+ import { handleDoctorAll } from './commands/doctor-all.js';
8
+ import { handleList } from './commands/list.js';
9
+ import { handleStatus } from './commands/status.js';
10
+ import { handleSync } from './commands/sync.js';
11
+ import { handleRename } from './commands/rename.js';
12
+ import { handleUpgrade } from './commands/upgrade.js';
13
+ import { handleSnooze } from './commands/snooze.js';
14
+ import { handleArchive, handleUnarchive } from './commands/archive.js';
15
+ import { handleHelp } from './commands/help.js';
16
+ // ── Factory ───────────────────────────────────────────────────────────
17
+ export function createTopicManagerTool(deps) {
18
+ const { logger, configDir, workspaceDir, rpc } = deps;
19
+ return {
20
+ async execute(_id, params, execContext) {
21
+ const commandStr = (params.command ?? '').trim();
22
+ if (!commandStr) {
23
+ return { text: 'No command provided. Try /topic help for available commands.' };
24
+ }
25
+ // Extract context from execution params
26
+ const ctx = buildContext(deps, execContext);
27
+ // Handle tm: callback routing
28
+ if (commandStr.startsWith('tm:')) {
29
+ return handleCallback(commandStr, ctx);
30
+ }
31
+ // Parse sub-command and args
32
+ const { subCommand, args, flags } = parseCommand(commandStr);
33
+ try {
34
+ switch (subCommand) {
35
+ case 'init':
36
+ return await handleInitInteractive(ctx, args);
37
+ case 'doctor':
38
+ if (flags.has('--all') || flags.has('all')) {
39
+ return await handleDoctorAll(ctx);
40
+ }
41
+ return await handleDoctor(ctx);
42
+ case 'doctor-all':
43
+ return await handleDoctorAll(ctx);
44
+ case 'list':
45
+ return await handleList(ctx);
46
+ case 'status':
47
+ return await handleStatus(ctx);
48
+ case 'sync':
49
+ return await handleSync(ctx);
50
+ case 'rename':
51
+ return await handleRename(ctx, args);
52
+ case 'upgrade':
53
+ return await handleUpgrade(ctx);
54
+ case 'snooze':
55
+ return await handleSnooze(ctx, args);
56
+ case 'archive':
57
+ return await handleArchive(ctx);
58
+ case 'unarchive':
59
+ return await handleUnarchive(ctx);
60
+ case 'help':
61
+ return await handleHelp(ctx);
62
+ default:
63
+ return {
64
+ text: `Unknown command: "${htmlEscape(subCommand)}". Try /topic help for available commands.`,
65
+ };
66
+ }
67
+ }
68
+ catch (err) {
69
+ const msg = err instanceof Error ? err.message : String(err);
70
+ logger.error(`[topic_manager] Command "${subCommand}" failed: ${msg}`);
71
+ return {
72
+ text: `Command failed: ${htmlEscape(msg)}`,
73
+ };
74
+ }
75
+ },
76
+ };
77
+ }
78
+ function parseCommand(commandStr) {
79
+ const parts = commandStr.split(/\s+/);
80
+ const subCommand = (parts[0] ?? '').toLowerCase();
81
+ const remaining = parts.slice(1);
82
+ const flags = new Set();
83
+ const argParts = [];
84
+ for (const part of remaining) {
85
+ if (part.startsWith('--')) {
86
+ flags.add(part);
87
+ }
88
+ else {
89
+ argParts.push(part);
90
+ }
91
+ }
92
+ return {
93
+ subCommand,
94
+ args: argParts.join(' '),
95
+ flags,
96
+ };
97
+ }
98
+ // ── Context building ────────────────────────────────────────────────
99
+ function buildContext(deps, execContext) {
100
+ // Extract IDs from the execution context provided by the tool framework
101
+ const groupId = extractString(execContext, 'groupId')
102
+ ?? extractString(execContext, 'chatId')
103
+ ?? extractNestedString(execContext, 'message', 'chat', 'id');
104
+ const threadId = extractString(execContext, 'threadId')
105
+ ?? extractString(execContext, 'messageThreadId')
106
+ ?? extractNestedString(execContext, 'message', 'message_thread_id');
107
+ const userId = extractString(execContext, 'userId')
108
+ ?? extractNestedString(execContext, 'message', 'from', 'id');
109
+ return {
110
+ workspaceDir: deps.workspaceDir,
111
+ configDir: deps.configDir,
112
+ rpc: deps.rpc,
113
+ logger: deps.logger,
114
+ groupId: groupId ?? undefined,
115
+ threadId: threadId ?? undefined,
116
+ userId: userId ?? undefined,
117
+ messageContext: execContext,
118
+ };
119
+ }
120
+ function extractString(obj, key) {
121
+ if (!obj)
122
+ return null;
123
+ const val = obj[key];
124
+ if (val === undefined || val === null)
125
+ return null;
126
+ return String(val);
127
+ }
128
+ function extractNestedString(obj, ...keys) {
129
+ if (!obj)
130
+ return null;
131
+ let current = obj;
132
+ for (const key of keys) {
133
+ if (current === null || current === undefined || typeof current !== 'object')
134
+ return null;
135
+ current = current[key];
136
+ }
137
+ if (current === undefined || current === null)
138
+ return null;
139
+ return String(current);
140
+ }
141
+ // ── Callback handling ───────────────────────────────────────────────
142
+ async function handleCallback(data, ctx) {
143
+ const { workspaceDir, groupId, threadId, userId } = ctx;
144
+ if (!groupId || !threadId || !userId) {
145
+ return { text: 'Cannot verify callback: missing context.' };
146
+ }
147
+ const registry = readRegistry(workspaceDir);
148
+ const parsed = parseAndVerifyCallback(data, registry.callbackSecret, groupId, threadId);
149
+ if (!parsed) {
150
+ return { text: 'Invalid or expired callback.' };
151
+ }
152
+ const { action, slug } = parsed;
153
+ // Init callbacks: topic doesn't exist in registry yet
154
+ const initTypeMap = {
155
+ ic: 'coding',
156
+ ir: 'research',
157
+ im: 'marketing',
158
+ ix: 'custom',
159
+ };
160
+ if (action === 'is') {
161
+ return handleInitSlugConfirm(ctx, slug);
162
+ }
163
+ if (action in initTypeMap) {
164
+ return handleInitTypeSelect(ctx, slug, initTypeMap[action]);
165
+ }
166
+ // Find the topic entry by slug
167
+ const key = topicKey(groupId, threadId);
168
+ const entry = registry.topics[key];
169
+ if (!entry || entry.slug !== slug) {
170
+ return { text: 'Topic not found or slug mismatch.' };
171
+ }
172
+ switch (action) {
173
+ case 'fix':
174
+ return handleCallbackFix(ctx);
175
+ case 'snooze7d':
176
+ return handleSnooze(ctx, '7d');
177
+ case 'snooze30d':
178
+ return handleSnooze(ctx, '30d');
179
+ case 'archive':
180
+ return handleArchive(ctx);
181
+ case 'ignore': {
182
+ // Add the most recent failing check to ignoreChecks
183
+ // For simplicity, we acknowledge the action; the user should specify which check
184
+ return {
185
+ text: `To ignore a specific check, use: /topic snooze or contact an admin. The "Ignore" action requires specifying a check ID.`,
186
+ };
187
+ }
188
+ default:
189
+ return { text: `Unknown callback action: ${htmlEscape(action)}` };
190
+ }
191
+ }
192
+ async function handleCallbackFix(ctx) {
193
+ // "Fix" re-runs doctor, which auto-fixes fixable issues
194
+ // For now, doctor itself identifies fixable issues
195
+ const { userId, workspaceDir } = ctx;
196
+ if (userId) {
197
+ appendAudit(workspaceDir, buildAuditEntry(userId, 'doctor fix', 'callback', 'Fix callback triggered'));
198
+ }
199
+ return handleDoctor(ctx);
200
+ }
201
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": "openclaw-telegram-manager",
3
+ "name": "Telegram Topic Manager",
4
+ "version": "1.0.0",
5
+ "description": "Deterministic Telegram forum topic management for OpenClaw",
6
+ "license": "MIT",
7
+ "slotType": "tool",
8
+ "entry": "./src/index.ts"
9
+ }
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "openclaw-telegram-manager",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "Deterministic Telegram forum topic management for OpenClaw",
6
+ "license": "MIT",
7
+ "repository": "github:jcoulaud/openclaw-telegram-manager",
8
+ "exports": {
9
+ ".": "./src/index.ts",
10
+ "./setup": "./src/setup.ts"
11
+ },
12
+ "bin": {
13
+ "openclaw-telegram-manager": "./dist/setup.js"
14
+ },
15
+ "files": [
16
+ "src/",
17
+ "dist/",
18
+ "skills/",
19
+ "openclaw.plugin.json"
20
+ ],
21
+ "openclaw": {
22
+ "extensions": [
23
+ "./src/index.ts"
24
+ ]
25
+ },
26
+ "peerDependencies": {
27
+ "openclaw": ">=2026.1.0"
28
+ },
29
+ "dependencies": {
30
+ "@sinclair/typebox": "^0.34.48",
31
+ "json5": "^2.2.3",
32
+ "proper-lockfile": "^4.1.2"
33
+ },
34
+ "devDependencies": {
35
+ "@types/node": "^25.2.3",
36
+ "@types/proper-lockfile": "^4.1.4",
37
+ "typescript": "^5.9.3",
38
+ "vitest": "^4.0.18"
39
+ },
40
+ "scripts": {
41
+ "build": "tsc --project tsconfig.build.json",
42
+ "prepublishOnly": "npm run build",
43
+ "test": "vitest run",
44
+ "lint": "tsc --noEmit",
45
+ "audit:deps": "npm audit",
46
+ "postversion": "git push origin main --tags"
47
+ }
48
+ }