openclaw-telegram-manager 1.3.11 → 2.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.
- package/README.md +6 -6
- package/dist/commands/archive.js +3 -3
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/doctor-all.d.ts.map +1 -1
- package/dist/commands/doctor-all.js +2 -2
- package/dist/commands/doctor-all.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +3 -7
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +47 -138
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/rename.d.ts +1 -1
- package/dist/commands/rename.d.ts.map +1 -1
- package/dist/commands/rename.js +22 -70
- package/dist/commands/rename.js.map +1 -1
- package/dist/commands/snooze.js +1 -1
- package/dist/commands/snooze.js.map +1 -1
- package/dist/commands/upgrade.js +4 -4
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/capsule.d.ts +8 -2
- package/dist/lib/capsule.d.ts.map +1 -1
- package/dist/lib/capsule.js +25 -19
- package/dist/lib/capsule.js.map +1 -1
- package/dist/lib/include-generator.d.ts +4 -1
- package/dist/lib/include-generator.d.ts.map +1 -1
- package/dist/lib/include-generator.js +7 -4
- package/dist/lib/include-generator.js.map +1 -1
- package/dist/lib/registry.d.ts.map +1 -1
- package/dist/lib/registry.js +11 -2
- package/dist/lib/registry.js.map +1 -1
- package/dist/lib/security.d.ts +2 -11
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +9 -29
- package/dist/lib/security.js.map +1 -1
- package/dist/lib/telegram.d.ts +5 -9
- package/dist/lib/telegram.d.ts.map +1 -1
- package/dist/lib/telegram.js +13 -21
- package/dist/lib/telegram.js.map +1 -1
- package/dist/lib/types.d.ts +9 -1
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +15 -1
- package/dist/lib/types.js.map +1 -1
- package/dist/plugin.js +643 -755
- package/dist/setup.js +1 -1
- package/dist/tool.js +6 -9
- package/dist/tool.js.map +1 -1
- package/package.json +1 -1
- package/skills/tm/SKILL.md +2 -2
package/dist/commands/rename.js
CHANGED
|
@@ -1,27 +1,22 @@
|
|
|
1
|
-
import * as fs from 'node:fs';
|
|
2
|
-
import * as path from 'node:path';
|
|
3
1
|
import { readRegistry, withRegistry } from '../lib/registry.js';
|
|
4
2
|
import { checkAuthorization } from '../lib/auth.js';
|
|
5
|
-
import { topicKey } from '../lib/types.js';
|
|
6
|
-
import {
|
|
3
|
+
import { topicKey, MAX_NAME_LENGTH } from '../lib/types.js';
|
|
4
|
+
import { htmlEscape } from '../lib/security.js';
|
|
7
5
|
import { buildTopicCard } from '../lib/telegram.js';
|
|
8
6
|
import { generateInclude } from '../lib/include-generator.js';
|
|
9
7
|
import { triggerRestart, getConfigWrites } from '../lib/config-restart.js';
|
|
10
8
|
import { appendAudit, buildAuditEntry } from '../lib/audit.js';
|
|
11
|
-
export async function handleRename(ctx,
|
|
9
|
+
export async function handleRename(ctx, newName) {
|
|
12
10
|
const { workspaceDir, configDir, userId, groupId, threadId, rpc, logger } = ctx;
|
|
13
11
|
if (!userId || !groupId || !threadId) {
|
|
14
12
|
return { text: 'Missing context: userId, groupId, or threadId not available.' };
|
|
15
13
|
}
|
|
16
|
-
const
|
|
17
|
-
if (!
|
|
18
|
-
return { text: 'Usage: /tm rename <new-
|
|
14
|
+
const trimmedName = newName.trim();
|
|
15
|
+
if (!trimmedName) {
|
|
16
|
+
return { text: 'Usage: /tm rename <new-name>' };
|
|
19
17
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return {
|
|
23
|
-
text: `Invalid slug "${htmlEscape(trimmedSlug)}". Must match: lowercase letter start, alphanumeric + hyphens, max 50 chars.`,
|
|
24
|
-
};
|
|
18
|
+
if (trimmedName.length > MAX_NAME_LENGTH) {
|
|
19
|
+
return { text: `Name too long (max ${MAX_NAME_LENGTH} characters).` };
|
|
25
20
|
}
|
|
26
21
|
const registry = readRegistry(workspaceDir);
|
|
27
22
|
// Auth check (admin tier)
|
|
@@ -34,61 +29,18 @@ export async function handleRename(ctx, newSlug) {
|
|
|
34
29
|
if (!entry) {
|
|
35
30
|
return { text: 'This topic is not registered. Run /tm init first.' };
|
|
36
31
|
}
|
|
37
|
-
const
|
|
38
|
-
if (
|
|
39
|
-
return { text: `Topic is already named <
|
|
32
|
+
const oldName = entry.name;
|
|
33
|
+
if (oldName === trimmedName) {
|
|
34
|
+
return { text: `Topic is already named <b>${htmlEscape(oldName)}</b>.`, parseMode: 'HTML' };
|
|
40
35
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const oldPath = path.join(projectsBase, oldSlug);
|
|
50
|
-
const newPath = path.join(projectsBase, trimmedSlug);
|
|
51
|
-
// Symlink check on both paths
|
|
52
|
-
if (rejectSymlink(oldPath)) {
|
|
53
|
-
return { text: 'Current capsule directory is a symlink. Aborting for security.' };
|
|
54
|
-
}
|
|
55
|
-
if (rejectSymlink(newPath)) {
|
|
56
|
-
return { text: 'Target capsule directory is a symlink. Aborting for security.' };
|
|
57
|
-
}
|
|
58
|
-
// Collision check: new slug in registry
|
|
59
|
-
const collisionInRegistry = Object.values(registry.topics).some((t) => t.slug === trimmedSlug);
|
|
60
|
-
if (collisionInRegistry) {
|
|
61
|
-
return {
|
|
62
|
-
text: `Slug <code>${htmlEscape(trimmedSlug)}</code> is already used by another topic.`,
|
|
63
|
-
parseMode: 'HTML',
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
// Collision check: new path on disk
|
|
67
|
-
if (fs.existsSync(newPath)) {
|
|
68
|
-
return {
|
|
69
|
-
text: `Directory projects/${htmlEscape(trimmedSlug)}/ already exists on disk.`,
|
|
70
|
-
parseMode: 'HTML',
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
// Rename folder on disk
|
|
74
|
-
if (!fs.existsSync(oldPath)) {
|
|
75
|
-
return { text: `Source capsule directory not found: projects/${htmlEscape(oldSlug)}/` };
|
|
76
|
-
}
|
|
77
|
-
// Rename folder and update registry atomically under lock
|
|
78
|
-
try {
|
|
79
|
-
await withRegistry(workspaceDir, (data) => {
|
|
80
|
-
const topic = data.topics[key];
|
|
81
|
-
if (topic) {
|
|
82
|
-
fs.renameSync(oldPath, newPath);
|
|
83
|
-
topic.slug = trimmedSlug;
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
89
|
-
return { text: `Failed to rename capsule: ${htmlEscape(msg)}` };
|
|
90
|
-
}
|
|
91
|
-
// Regenerate include if configWrites enabled
|
|
36
|
+
// Update name in registry (metadata-only, no filesystem changes)
|
|
37
|
+
await withRegistry(workspaceDir, (data) => {
|
|
38
|
+
const topic = data.topics[key];
|
|
39
|
+
if (topic) {
|
|
40
|
+
topic.name = trimmedName;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
// Regenerate include if configWrites enabled (name appears in systemPrompt)
|
|
92
44
|
let restartMsg = '';
|
|
93
45
|
const configWritesEnabled = await getConfigWrites(ctx.rpc);
|
|
94
46
|
if (configWritesEnabled) {
|
|
@@ -105,10 +57,10 @@ export async function handleRename(ctx, newSlug) {
|
|
|
105
57
|
restartMsg += '\n' + result.fallbackMessage;
|
|
106
58
|
}
|
|
107
59
|
}
|
|
108
|
-
appendAudit(workspaceDir, buildAuditEntry(userId, 'rename',
|
|
109
|
-
const topicCard = buildTopicCard(
|
|
60
|
+
appendAudit(workspaceDir, buildAuditEntry(userId, 'rename', entry.slug, `Renamed from "${oldName}" to "${trimmedName}"`));
|
|
61
|
+
const topicCard = buildTopicCard(trimmedName, entry.slug, entry.type, entry.capsuleVersion);
|
|
110
62
|
return {
|
|
111
|
-
text: `Topic renamed from <
|
|
63
|
+
text: `Topic renamed from <b>${htmlEscape(oldName)}</b> to <b>${htmlEscape(trimmedName)}</b>.\n\n${topicCard}${restartMsg}`,
|
|
112
64
|
parseMode: 'HTML',
|
|
113
65
|
};
|
|
114
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/commands/rename.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/commands/rename.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/snooze.js
CHANGED
|
@@ -45,7 +45,7 @@ export async function handleSnooze(ctx, args) {
|
|
|
45
45
|
});
|
|
46
46
|
appendAudit(workspaceDir, buildAuditEntry(userId, 'snooze', entry.slug, `Snoozed for ${days} days until ${snoozeUntil}`));
|
|
47
47
|
return {
|
|
48
|
-
text: `Topic <
|
|
48
|
+
text: `Topic <b>${htmlEscape(entry.name)}</b> snoozed for ${days} days (until ${htmlEscape(snoozeUntil)}).`,
|
|
49
49
|
parseMode: 'HTML',
|
|
50
50
|
};
|
|
51
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snooze.js","sourceRoot":"","sources":["../../src/commands/snooze.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"snooze.js","sourceRoot":"","sources":["../../src/commands/snooze.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/upgrade.js
CHANGED
|
@@ -22,15 +22,15 @@ export async function handleUpgrade(ctx) {
|
|
|
22
22
|
}
|
|
23
23
|
if (entry.capsuleVersion >= CAPSULE_VERSION) {
|
|
24
24
|
return {
|
|
25
|
-
text: `Topic <
|
|
25
|
+
text: `Topic <b>${htmlEscape(entry.name)}</b> is already at capsule version ${CAPSULE_VERSION}. No upgrade needed.`,
|
|
26
26
|
parseMode: 'HTML',
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
29
|
const projectsBase = path.join(workspaceDir, 'projects');
|
|
30
|
-
const result = upgradeCapsule(projectsBase, entry.slug, entry.type, entry.capsuleVersion);
|
|
30
|
+
const result = upgradeCapsule(projectsBase, entry.slug, entry.name, entry.type, entry.capsuleVersion);
|
|
31
31
|
if (!result.upgraded) {
|
|
32
32
|
return {
|
|
33
|
-
text: `No upgrade needed for <
|
|
33
|
+
text: `No upgrade needed for <b>${htmlEscape(entry.name)}</b>.`,
|
|
34
34
|
parseMode: 'HTML',
|
|
35
35
|
};
|
|
36
36
|
}
|
|
@@ -45,7 +45,7 @@ export async function handleUpgrade(ctx) {
|
|
|
45
45
|
? `\nAdded files: ${result.addedFiles.map((f) => htmlEscape(f)).join(', ')}`
|
|
46
46
|
: '\nNo new files added.';
|
|
47
47
|
return {
|
|
48
|
-
text: `Topic <
|
|
48
|
+
text: `Topic <b>${htmlEscape(entry.name)}</b> upgraded from v${entry.capsuleVersion} to v${result.newVersion}.${addedList}`,
|
|
49
49
|
parseMode: 'HTML',
|
|
50
50
|
};
|
|
51
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAmB;IACrD,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;IAExD,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,8DAA8D,EAAE,CAAC;IAClF,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAE5C,yBAAyB;IACzB,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,iBAAiB,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,mDAAmD,EAAE,CAAC;IACvE,CAAC;IAED,IAAI,KAAK,CAAC,cAAc,IAAI,eAAe,EAAE,CAAC;QAC5C,OAAO;YACL,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE;IACpC,MAAM,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE;QAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IACzG,YAAY,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,YAAY,CAAC,GAAG,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACvG,GAAG,IAAI,CAAC;IACT,eAAe,CAAC,CAAC,GAAG,EAAE;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,GAAG,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;YAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAEjC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;SACnC,GAAG,OAAO,CAAC;YACV,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,WAAW,CAAC,EAAE;gBAAE,QAAQ,CAAC,EAAE;oBAAE,OAAO,CAAC,EAAE,OAAO,CAAA;iBAAE,CAAA;aAAE,CAAC;SACpD,CAAC,CAAC;KACJ,GAAG,IAAI,CAAC;CACV,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE;IACpC,MAAM,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE;QAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IACzG,YAAY,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,YAAY,CAAC,GAAG,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACvG,GAAG,IAAI,CAAC;IACT,eAAe,CAAC,CAAC,GAAG,EAAE;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,OAAO,CAAC,GAAG,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;YAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAEjC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;SACnC,GAAG,OAAO,CAAC;YACV,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,WAAW,CAAC,EAAE;gBAAE,QAAQ,CAAC,EAAE;oBAAE,OAAO,CAAC,EAAE,OAAO,CAAA;iBAAE,CAAA;aAAE,CAAC;SACpD,CAAC,CAAC;KACJ,GAAG,IAAI,CAAC;CACV,GAAG,IAAI,CAgGP"}
|
package/dist/index.js
CHANGED
|
@@ -50,7 +50,7 @@ export default function register(api) {
|
|
|
50
50
|
description: 'Manage Telegram forum topics as deterministic workcells. Sub-commands: init, doctor, list, status, sync, rename, upgrade, snooze, archive, unarchive, help.',
|
|
51
51
|
parameters: Type.Object({
|
|
52
52
|
command: Type.String({
|
|
53
|
-
description: "Sub-command and arguments (e.g., 'init', 'doctor --all', 'rename new-
|
|
53
|
+
description: "Sub-command and arguments (e.g., 'init', 'doctor --all', 'rename new-name')",
|
|
54
54
|
}),
|
|
55
55
|
}),
|
|
56
56
|
async execute(id, params, context) {
|
|
@@ -93,8 +93,16 @@ export default function register(api) {
|
|
|
93
93
|
const reply = {
|
|
94
94
|
text: result.text,
|
|
95
95
|
};
|
|
96
|
+
const telegramData = {};
|
|
96
97
|
if (result.inlineKeyboard) {
|
|
97
|
-
|
|
98
|
+
// OpenClaw expects the raw 2D button array, not the InlineKeyboardMarkup wrapper
|
|
99
|
+
telegramData.buttons = result.inlineKeyboard.inline_keyboard;
|
|
100
|
+
}
|
|
101
|
+
if (result.parseMode) {
|
|
102
|
+
telegramData.parse_mode = result.parseMode;
|
|
103
|
+
}
|
|
104
|
+
if (Object.keys(telegramData).length > 0) {
|
|
105
|
+
reply.channelData = { telegram: telegramData };
|
|
98
106
|
}
|
|
99
107
|
return reply;
|
|
100
108
|
},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/capsule.d.ts
CHANGED
|
@@ -3,8 +3,11 @@ import type { TopicType } from './types.js';
|
|
|
3
3
|
* Scaffold a new capsule directory with base kit + type overlays.
|
|
4
4
|
* Uses fs.mkdirSync with exclusive flag as the atomic reservation mechanism.
|
|
5
5
|
* Throws if the directory already exists (collision).
|
|
6
|
+
*
|
|
7
|
+
* @param slug - stable ID used for directory name
|
|
8
|
+
* @param name - human-readable label used in template headers
|
|
6
9
|
*/
|
|
7
|
-
export declare function scaffoldCapsule(projectsBase: string, slug: string, type: TopicType): void;
|
|
10
|
+
export declare function scaffoldCapsule(projectsBase: string, slug: string, name: string, type: TopicType): void;
|
|
8
11
|
export interface UpgradeResult {
|
|
9
12
|
upgraded: boolean;
|
|
10
13
|
newVersion: number;
|
|
@@ -13,8 +16,11 @@ export interface UpgradeResult {
|
|
|
13
16
|
/**
|
|
14
17
|
* Upgrade an existing capsule to the latest template version.
|
|
15
18
|
* Adds missing files without overwriting existing ones.
|
|
19
|
+
*
|
|
20
|
+
* @param slug - stable ID used for directory name
|
|
21
|
+
* @param name - human-readable label used in template headers
|
|
16
22
|
*/
|
|
17
|
-
export declare function upgradeCapsule(projectsBase: string, slug: string, type: TopicType, currentVersion: number): UpgradeResult;
|
|
23
|
+
export declare function upgradeCapsule(projectsBase: string, slug: string, name: string, type: TopicType, currentVersion: number): UpgradeResult;
|
|
18
24
|
export interface CapsuleValidation {
|
|
19
25
|
missing: string[];
|
|
20
26
|
present: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capsule.d.ts","sourceRoot":"","sources":["../../src/lib/capsule.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAuD5C
|
|
1
|
+
{"version":3,"file":"capsule.d.ts","sourceRoot":"","sources":["../../src/lib/capsule.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAuD5C;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,GACd,IAAI,CAkCN;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,EACf,cAAc,EAAE,MAAM,GACrB,aAAa,CA+Cf;AAID,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,GACd,iBAAiB,CAqBnB"}
|
package/dist/lib/capsule.js
CHANGED
|
@@ -5,21 +5,21 @@ import { jailCheck, rejectSymlink } from './security.js';
|
|
|
5
5
|
// ── Template content (embedded string constants) ───────────────────────
|
|
6
6
|
// These are the source-of-truth defaults, matching src/templates/.
|
|
7
7
|
const BASE_TEMPLATES = {
|
|
8
|
-
'README.md': (
|
|
9
|
-
'STATUS.md': (
|
|
10
|
-
'TODO.md': (
|
|
11
|
-
'COMMANDS.md': (
|
|
12
|
-
'LINKS.md': (
|
|
13
|
-
'CRON.md': (
|
|
14
|
-
'NOTES.md': (
|
|
8
|
+
'README.md': (name) => `# ${name}\n\n_Describe what this topic is about._\n`,
|
|
9
|
+
'STATUS.md': (name) => `# Status: ${name}\n\n## Last done (UTC)\n\n${new Date().toISOString()}\n\n_No work recorded yet._\n\n## Next 3 actions\n\n1. [T-1] _Define first task in TODO.md_\n2. [T-2] _Define second task in TODO.md_\n3. [T-3] _Define third task in TODO.md_\n`,
|
|
10
|
+
'TODO.md': (name) => `# TODO: ${name}\n\n## Backlog\n\n- [T-1] _First task placeholder — replace with actual task_\n- [T-2] _Second task placeholder — replace with actual task_\n- [T-3] _Third task placeholder — replace with actual task_\n\n## Completed\n\n_None yet._\n`,
|
|
11
|
+
'COMMANDS.md': (name) => `# Commands: ${name}\n\n_Build, deploy, test, and other commands for this topic. Kept here so they're not lost on reset._\n`,
|
|
12
|
+
'LINKS.md': (name) => `# Links: ${name}\n\n_URLs, paths, and service endpoints for this topic._\n`,
|
|
13
|
+
'CRON.md': (name) => `# Cron: ${name}\n\n_Cron job IDs and schedules for this topic._\n`,
|
|
14
|
+
'NOTES.md': (name) => `# Notes: ${name}\n\n_Anything worth remembering about this topic._\n`,
|
|
15
15
|
};
|
|
16
16
|
const OVERLAY_TEMPLATES = {
|
|
17
|
-
'ARCHITECTURE.md': (
|
|
18
|
-
'DEPLOY.md': (
|
|
19
|
-
'SOURCES.md': (
|
|
20
|
-
'FINDINGS.md': (
|
|
21
|
-
'CAMPAIGNS.md': (
|
|
22
|
-
'METRICS.md': (
|
|
17
|
+
'ARCHITECTURE.md': (name) => `# Architecture: ${name}\n\n_Components, data flow, dependencies, and design decisions._\n`,
|
|
18
|
+
'DEPLOY.md': (name) => `# Deployment: ${name}\n\n_Environments, deployment steps, rollback procedures, and infra details._\n`,
|
|
19
|
+
'SOURCES.md': (name) => `# Sources: ${name}\n\n_Papers, articles, datasets, APIs, and other reference material._\n`,
|
|
20
|
+
'FINDINGS.md': (name) => `# Findings: ${name}\n\n_Conclusions, insights, data summaries, and recommendations._\n`,
|
|
21
|
+
'CAMPAIGNS.md': (name) => `# Campaigns: ${name}\n\n_Active campaigns, target audiences, channels, timelines, and budgets._\n`,
|
|
22
|
+
'METRICS.md': (name) => `# Metrics: ${name}\n\n_KPIs, conversion rates, engagement stats, and performance data._\n`,
|
|
23
23
|
};
|
|
24
24
|
// ── File permissions ───────────────────────────────────────────────────
|
|
25
25
|
const CAPSULE_FILE_MODE = 0o640;
|
|
@@ -28,8 +28,11 @@ const CAPSULE_FILE_MODE = 0o640;
|
|
|
28
28
|
* Scaffold a new capsule directory with base kit + type overlays.
|
|
29
29
|
* Uses fs.mkdirSync with exclusive flag as the atomic reservation mechanism.
|
|
30
30
|
* Throws if the directory already exists (collision).
|
|
31
|
+
*
|
|
32
|
+
* @param slug - stable ID used for directory name
|
|
33
|
+
* @param name - human-readable label used in template headers
|
|
31
34
|
*/
|
|
32
|
-
export function scaffoldCapsule(projectsBase, slug, type) {
|
|
35
|
+
export function scaffoldCapsule(projectsBase, slug, name, type) {
|
|
33
36
|
const capsuleDir = path.join(projectsBase, slug);
|
|
34
37
|
// Path jail check
|
|
35
38
|
if (!jailCheck(projectsBase, slug)) {
|
|
@@ -46,7 +49,7 @@ export function scaffoldCapsule(projectsBase, slug, type) {
|
|
|
46
49
|
const templateFn = BASE_TEMPLATES[file];
|
|
47
50
|
if (templateFn) {
|
|
48
51
|
const filePath = path.join(capsuleDir, file);
|
|
49
|
-
fs.writeFileSync(filePath, templateFn(
|
|
52
|
+
fs.writeFileSync(filePath, templateFn(name), { mode: CAPSULE_FILE_MODE });
|
|
50
53
|
}
|
|
51
54
|
}
|
|
52
55
|
// Write overlay files for the type
|
|
@@ -55,15 +58,18 @@ export function scaffoldCapsule(projectsBase, slug, type) {
|
|
|
55
58
|
const templateFn = OVERLAY_TEMPLATES[file];
|
|
56
59
|
if (templateFn) {
|
|
57
60
|
const filePath = path.join(capsuleDir, file);
|
|
58
|
-
fs.writeFileSync(filePath, templateFn(
|
|
61
|
+
fs.writeFileSync(filePath, templateFn(name), { mode: CAPSULE_FILE_MODE });
|
|
59
62
|
}
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
/**
|
|
63
66
|
* Upgrade an existing capsule to the latest template version.
|
|
64
67
|
* Adds missing files without overwriting existing ones.
|
|
68
|
+
*
|
|
69
|
+
* @param slug - stable ID used for directory name
|
|
70
|
+
* @param name - human-readable label used in template headers
|
|
65
71
|
*/
|
|
66
|
-
export function upgradeCapsule(projectsBase, slug, type, currentVersion) {
|
|
72
|
+
export function upgradeCapsule(projectsBase, slug, name, type, currentVersion) {
|
|
67
73
|
if (currentVersion >= CAPSULE_VERSION) {
|
|
68
74
|
return { upgraded: false, newVersion: currentVersion, addedFiles: [] };
|
|
69
75
|
}
|
|
@@ -81,7 +87,7 @@ export function upgradeCapsule(projectsBase, slug, type, currentVersion) {
|
|
|
81
87
|
if (!fs.existsSync(filePath)) {
|
|
82
88
|
const templateFn = BASE_TEMPLATES[file];
|
|
83
89
|
if (templateFn) {
|
|
84
|
-
fs.writeFileSync(filePath, templateFn(
|
|
90
|
+
fs.writeFileSync(filePath, templateFn(name), { mode: CAPSULE_FILE_MODE });
|
|
85
91
|
addedFiles.push(file);
|
|
86
92
|
}
|
|
87
93
|
}
|
|
@@ -93,7 +99,7 @@ export function upgradeCapsule(projectsBase, slug, type, currentVersion) {
|
|
|
93
99
|
if (!fs.existsSync(filePath)) {
|
|
94
100
|
const templateFn = OVERLAY_TEMPLATES[file];
|
|
95
101
|
if (templateFn) {
|
|
96
|
-
fs.writeFileSync(filePath, templateFn(
|
|
102
|
+
fs.writeFileSync(filePath, templateFn(name), { mode: CAPSULE_FILE_MODE });
|
|
97
103
|
addedFiles.push(file);
|
|
98
104
|
}
|
|
99
105
|
}
|
package/dist/lib/capsule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capsule.js","sourceRoot":"","sources":["../../src/lib/capsule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAExE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEzD,0EAA0E;AAC1E,mEAAmE;AAEnE,MAAM,cAAc,GAA6C;IAC/D,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,KAAK,IAAI,4CAA4C;IAEvD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,aAAa,IAAI,6BAA6B,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,kLAAkL;IAE1P,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAClB,WAAW,IAAI,2OAA2O;IAE5P,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CACtB,eAAe,IAAI,yGAAyG;IAE9H,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CACnB,YAAY,IAAI,4DAA4D;IAE9E,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAClB,WAAW,IAAI,oDAAoD;IAErE,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CACnB,YAAY,IAAI,sDAAsD;CACzE,CAAC;AAEF,MAAM,iBAAiB,GAA6C;IAClE,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAC1B,mBAAmB,IAAI,oEAAoE;IAE7F,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,iBAAiB,IAAI,iFAAiF;IAExG,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CACrB,cAAc,IAAI,yEAAyE;IAE7F,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CACtB,eAAe,IAAI,qEAAqE;IAE1F,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CACvB,gBAAgB,IAAI,+EAA+E;IAErG,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CACrB,cAAc,IAAI,yEAAyE;CAC9F,CAAC;AAEF,0EAA0E;AAE1E,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,0EAA0E;AAE1E
|
|
1
|
+
{"version":3,"file":"capsule.js","sourceRoot":"","sources":["../../src/lib/capsule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { Registry } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Build the per-topic systemPrompt using absolute paths resolved at generation time.
|
|
4
|
+
*
|
|
5
|
+
* @param name - human-readable display label for identity
|
|
6
|
+
* @param slug - stable ID used for capsule path
|
|
4
7
|
*/
|
|
5
|
-
export declare function getSystemPromptTemplate(slug: string, absoluteWorkspacePath: string): string;
|
|
8
|
+
export declare function getSystemPromptTemplate(name: string, slug: string, absoluteWorkspacePath: string): string;
|
|
6
9
|
/**
|
|
7
10
|
* Compute a SHA256 hash of the registry topics for drift detection.
|
|
8
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"include-generator.d.ts","sourceRoot":"","sources":["../../src/lib/include-generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,YAAY,CAAC;AASlE
|
|
1
|
+
{"version":3,"file":"include-generator.d.ts","sourceRoot":"","sources":["../../src/lib/include-generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,YAAY,CAAC;AASlE;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,GAAG,MAAM,CAqBzG;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,CAGtE;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC/C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2CzB;AAoBD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAChB,IAAI,CAoDN;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
|
@@ -8,9 +8,12 @@ const FILE_MODE = 0o600;
|
|
|
8
8
|
// ── System prompt template ─────────────────────────────────────────────
|
|
9
9
|
/**
|
|
10
10
|
* Build the per-topic systemPrompt using absolute paths resolved at generation time.
|
|
11
|
+
*
|
|
12
|
+
* @param name - human-readable display label for identity
|
|
13
|
+
* @param slug - stable ID used for capsule path
|
|
11
14
|
*/
|
|
12
|
-
export function getSystemPromptTemplate(slug, absoluteWorkspacePath) {
|
|
13
|
-
return `You are the assistant for the Telegram topic: ${
|
|
15
|
+
export function getSystemPromptTemplate(name, slug, absoluteWorkspacePath) {
|
|
16
|
+
return `You are the assistant for the Telegram topic: ${name}.
|
|
14
17
|
|
|
15
18
|
Determinism rules:
|
|
16
19
|
- Source of truth is the project capsule at: ${absoluteWorkspacePath}/projects/${slug}/
|
|
@@ -64,7 +67,7 @@ export function buildIncludeObject(registry, workspaceDir, existingInclude) {
|
|
|
64
67
|
}
|
|
65
68
|
}
|
|
66
69
|
for (const entry of Object.values(registry.topics)) {
|
|
67
|
-
const { groupId, threadId, slug, type, status } = entry;
|
|
70
|
+
const { groupId, threadId, slug, name, type, status } = entry;
|
|
68
71
|
if (!groups[groupId]) {
|
|
69
72
|
groups[groupId] = { topics: {} };
|
|
70
73
|
}
|
|
@@ -73,7 +76,7 @@ export function buildIncludeObject(registry, workspaceDir, existingInclude) {
|
|
|
73
76
|
}
|
|
74
77
|
const isEnabled = status !== 'archived';
|
|
75
78
|
const skills = getSkillsForType(type);
|
|
76
|
-
const systemPrompt = getSystemPromptTemplate(slug, absoluteWorkspacePath);
|
|
79
|
+
const systemPrompt = getSystemPromptTemplate(name, slug, absoluteWorkspacePath);
|
|
77
80
|
groups[groupId].topics[threadId] = {
|
|
78
81
|
enabled: isEnabled,
|
|
79
82
|
skills,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"include-generator.js","sourceRoot":"","sources":["../../src/lib/include-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,0EAA0E;AAE1E,MAAM,gBAAgB,GAAG,yCAAyC,CAAC;AACnE,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB,0EAA0E;AAE1E
|
|
1
|
+
{"version":3,"file":"include-generator.js","sourceRoot":"","sources":["../../src/lib/include-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AAWvD,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AAWvD,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD;AA6CD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAoD3D;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAO1E;AAID;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACrC,OAAO,CAAC,CAAC,CAAC,CAkCZ;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ,CASpE"}
|
package/dist/lib/registry.js
CHANGED
|
@@ -13,8 +13,17 @@ export function registryPath(workspaceDir) {
|
|
|
13
13
|
return path.join(workspaceDir, 'projects', REGISTRY_FILENAME);
|
|
14
14
|
}
|
|
15
15
|
const migrations = {
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
'1_to_2': (data) => {
|
|
17
|
+
const topics = data['topics'];
|
|
18
|
+
if (topics && typeof topics === 'object' && !Array.isArray(topics)) {
|
|
19
|
+
for (const entry of Object.values(topics)) {
|
|
20
|
+
if (!entry['name'] && typeof entry['slug'] === 'string') {
|
|
21
|
+
entry['name'] = entry['slug'];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return data;
|
|
26
|
+
},
|
|
18
27
|
};
|
|
19
28
|
function migrateRegistry(data) {
|
|
20
29
|
const rawVersion = data['version'];
|
package/dist/lib/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,0EAA0E;AAE1E,MAAM,iBAAiB,GAAG,aAAa,CAAC;AACxC,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,0EAA0E;AAE1E,MAAM,UAAU,YAAY,CAAC,YAAoB;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAChE,CAAC;AAMD,MAAM,UAAU,GAAgC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/security.d.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/** Validate a slug against the allowed pattern. */
|
|
2
|
-
export declare function validateSlug(slug: string): boolean;
|
|
3
|
-
/**
|
|
4
|
-
* Sanitize a title into a valid slug.
|
|
5
|
-
* Strip non-alphanumeric (except hyphens), strip dots, collapse
|
|
6
|
-
* consecutive hyphens, trim leading/trailing hyphens, lowercase.
|
|
7
|
-
*/
|
|
8
|
-
export declare function sanitizeSlug(title: string): string;
|
|
9
1
|
/**
|
|
10
2
|
* Jail check: ensure `userPath` resolves within `base`.
|
|
11
3
|
* Returns true if safe, false if the path escapes the base.
|
|
@@ -35,15 +27,14 @@ export declare function validateGroupId(id: string): boolean;
|
|
|
35
27
|
export declare function validateThreadId(id: string): boolean;
|
|
36
28
|
export interface CallbackData {
|
|
37
29
|
action: string;
|
|
38
|
-
slug: string;
|
|
39
30
|
groupId: string;
|
|
40
31
|
threadId: string;
|
|
41
32
|
}
|
|
42
33
|
/**
|
|
43
34
|
* Build callback data string with HMAC signature.
|
|
44
|
-
* Format: tm:<action>:<
|
|
35
|
+
* Format: tm:<action>:<groupId>:<threadId>:<hmac>
|
|
45
36
|
*/
|
|
46
|
-
export declare function buildCallbackData(action: string,
|
|
37
|
+
export declare function buildCallbackData(action: string, groupId: string, threadId: string, secret: string): string;
|
|
47
38
|
/**
|
|
48
39
|
* Parse and verify callback data.
|
|
49
40
|
* Returns the parsed data or null if verification fails.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMvD;AAID;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAWtF;AAWD,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAOD,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpD;AAMD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,CAIR;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACtB,YAAY,GAAG,IAAI,CAmBrB"}
|