@dotsetlabs/dotclaw 1.8.0 → 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/.env.example +6 -0
- package/README.md +14 -7
- package/config-examples/groups/global/CLAUDE.md +6 -14
- package/config-examples/groups/main/CLAUDE.md +8 -39
- package/config-examples/runtime.json +4 -4
- package/container/Dockerfile +20 -2
- package/container/agent-runner/package-lock.json +260 -2
- package/container/agent-runner/package.json +2 -1
- package/container/agent-runner/src/agent-config.ts +57 -8
- package/container/agent-runner/src/browser.ts +180 -0
- package/container/agent-runner/src/container-protocol.ts +5 -0
- package/container/agent-runner/src/id.ts +3 -2
- package/container/agent-runner/src/index.ts +184 -390
- package/container/agent-runner/src/ipc.ts +33 -1
- package/container/agent-runner/src/mcp-client.ts +222 -0
- package/container/agent-runner/src/mcp-registry.ts +163 -0
- package/container/agent-runner/src/skill-loader.ts +375 -0
- package/container/agent-runner/src/tools.ts +260 -32
- package/container/agent-runner/src/tts.ts +61 -0
- package/container/agent-runner/tsconfig.json +1 -0
- package/dist/admin-commands.d.ts.map +1 -1
- package/dist/admin-commands.js +12 -0
- package/dist/admin-commands.js.map +1 -1
- package/dist/agent-execution.d.ts +3 -1
- package/dist/agent-execution.d.ts.map +1 -1
- package/dist/agent-execution.js +21 -0
- package/dist/agent-execution.js.map +1 -1
- package/dist/background-job-classifier.d.ts +1 -1
- package/dist/background-job-classifier.d.ts.map +1 -1
- package/dist/background-jobs.d.ts.map +1 -1
- package/dist/background-jobs.js +30 -10
- package/dist/background-jobs.js.map +1 -1
- package/dist/cli.js +61 -16
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +0 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -3
- package/dist/config.js.map +1 -1
- package/dist/container-protocol.d.ts +5 -0
- package/dist/container-protocol.d.ts.map +1 -1
- package/dist/container-runner.d.ts.map +1 -1
- package/dist/container-runner.js +33 -14
- package/dist/container-runner.js.map +1 -1
- package/dist/dashboard.d.ts +5 -0
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/dashboard.js +11 -5
- package/dist/dashboard.js.map +1 -1
- package/dist/db.d.ts +0 -13
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +41 -70
- package/dist/db.js.map +1 -1
- package/dist/error-messages.d.ts.map +1 -1
- package/dist/error-messages.js +13 -5
- package/dist/error-messages.js.map +1 -1
- package/dist/hooks.d.ts +7 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +93 -0
- package/dist/hooks.js.map +1 -0
- package/dist/id.d.ts.map +1 -1
- package/dist/id.js +2 -1
- package/dist/id.js.map +1 -1
- package/dist/index.js +742 -2793
- package/dist/index.js.map +1 -1
- package/dist/ipc-dispatcher.d.ts +26 -0
- package/dist/ipc-dispatcher.d.ts.map +1 -0
- package/dist/ipc-dispatcher.js +1044 -0
- package/dist/ipc-dispatcher.js.map +1 -0
- package/dist/local-embeddings.d.ts +7 -0
- package/dist/local-embeddings.d.ts.map +1 -0
- package/dist/local-embeddings.js +60 -0
- package/dist/local-embeddings.js.map +1 -0
- package/dist/maintenance.d.ts.map +1 -1
- package/dist/maintenance.js +7 -1
- package/dist/maintenance.js.map +1 -1
- package/dist/memory-embeddings.d.ts +1 -1
- package/dist/memory-embeddings.d.ts.map +1 -1
- package/dist/memory-embeddings.js +59 -31
- package/dist/memory-embeddings.js.map +1 -1
- package/dist/memory-store.d.ts +0 -10
- package/dist/memory-store.d.ts.map +1 -1
- package/dist/memory-store.js +12 -28
- package/dist/memory-store.js.map +1 -1
- package/dist/message-pipeline.d.ts +47 -0
- package/dist/message-pipeline.d.ts.map +1 -0
- package/dist/message-pipeline.js +876 -0
- package/dist/message-pipeline.js.map +1 -0
- package/dist/metrics.d.ts +8 -8
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js.map +1 -1
- package/dist/model-registry.d.ts +0 -14
- package/dist/model-registry.d.ts.map +1 -1
- package/dist/model-registry.js +0 -36
- package/dist/model-registry.js.map +1 -1
- package/dist/orchestration.d.ts +39 -0
- package/dist/orchestration.d.ts.map +1 -0
- package/dist/orchestration.js +136 -0
- package/dist/orchestration.js.map +1 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +2 -0
- package/dist/paths.js.map +1 -1
- package/dist/providers/discord/discord-format.d.ts +16 -0
- package/dist/providers/discord/discord-format.d.ts.map +1 -0
- package/dist/providers/discord/discord-format.js +153 -0
- package/dist/providers/discord/discord-format.js.map +1 -0
- package/dist/providers/discord/discord-provider.d.ts +50 -0
- package/dist/providers/discord/discord-provider.d.ts.map +1 -0
- package/dist/providers/discord/discord-provider.js +604 -0
- package/dist/providers/discord/discord-provider.js.map +1 -0
- package/dist/providers/discord/index.d.ts +4 -0
- package/dist/providers/discord/index.d.ts.map +1 -0
- package/dist/providers/discord/index.js +3 -0
- package/dist/providers/discord/index.js.map +1 -0
- package/dist/providers/registry.d.ts +14 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +49 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/telegram/index.d.ts +4 -0
- package/dist/providers/telegram/index.d.ts.map +1 -0
- package/dist/providers/telegram/index.js +3 -0
- package/dist/providers/telegram/index.js.map +1 -0
- package/dist/providers/telegram/telegram-format.d.ts +3 -0
- package/dist/providers/telegram/telegram-format.d.ts.map +1 -0
- package/dist/providers/telegram/telegram-format.js +215 -0
- package/dist/providers/telegram/telegram-format.js.map +1 -0
- package/dist/providers/telegram/telegram-provider.d.ts +51 -0
- package/dist/providers/telegram/telegram-provider.d.ts.map +1 -0
- package/dist/providers/telegram/telegram-provider.js +824 -0
- package/dist/providers/telegram/telegram-provider.js.map +1 -0
- package/dist/providers/types.d.ts +107 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/request-router.d.ts.map +1 -1
- package/dist/request-router.js +12 -26
- package/dist/request-router.js.map +1 -1
- package/dist/runtime-config.d.ts +70 -6
- package/dist/runtime-config.d.ts.map +1 -1
- package/dist/runtime-config.js +119 -65
- package/dist/runtime-config.js.map +1 -1
- package/dist/skill-manager.d.ts +39 -0
- package/dist/skill-manager.d.ts.map +1 -0
- package/dist/skill-manager.js +286 -0
- package/dist/skill-manager.js.map +1 -0
- package/dist/task-scheduler.d.ts.map +1 -1
- package/dist/task-scheduler.js +56 -11
- package/dist/task-scheduler.js.map +1 -1
- package/dist/telegram-format.d.ts.map +1 -1
- package/dist/telegram-format.js +16 -1
- package/dist/telegram-format.js.map +1 -1
- package/dist/tool-intent-probe.d.ts +11 -0
- package/dist/tool-intent-probe.d.ts.map +1 -0
- package/dist/tool-intent-probe.js +63 -0
- package/dist/tool-intent-probe.js.map +1 -0
- package/dist/tool-policy.d.ts.map +1 -1
- package/dist/tool-policy.js +18 -0
- package/dist/tool-policy.js.map +1 -1
- package/dist/transcription.d.ts +8 -0
- package/dist/transcription.d.ts.map +1 -0
- package/dist/transcription.js +174 -0
- package/dist/transcription.js.map +1 -0
- package/dist/types.d.ts +2 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/workflow-engine.d.ts +51 -0
- package/dist/workflow-engine.d.ts.map +1 -0
- package/dist/workflow-engine.js +281 -0
- package/dist/workflow-engine.js.map +1 -0
- package/dist/workflow-store.d.ts +39 -0
- package/dist/workflow-store.d.ts.map +1 -0
- package/dist/workflow-store.js +173 -0
- package/dist/workflow-store.js.map +1 -0
- package/package.json +15 -3
- package/scripts/bootstrap.js +40 -4
- package/scripts/configure.js +48 -7
- package/scripts/doctor.js +30 -4
- package/scripts/init.js +13 -6
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ProviderName, MessagingProvider } from './types.js';
|
|
2
|
+
export declare class ProviderRegistry {
|
|
3
|
+
private providers;
|
|
4
|
+
register(provider: MessagingProvider): void;
|
|
5
|
+
get(name: ProviderName): MessagingProvider | undefined;
|
|
6
|
+
getProviderForChat(chatId: string): MessagingProvider;
|
|
7
|
+
getAllProviders(): MessagingProvider[];
|
|
8
|
+
has(name: ProviderName): boolean;
|
|
9
|
+
static stripPrefix(chatId: string): string;
|
|
10
|
+
static addPrefix(provider: ProviderName, rawId: string): string;
|
|
11
|
+
static getPrefix(chatId: string): ProviderName;
|
|
12
|
+
static hasPrefix(chatId: string): boolean;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIlE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA8C;IAE/D,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAI3C,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,iBAAiB,GAAG,SAAS;IAItD,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB;IASrD,eAAe,IAAI,iBAAiB,EAAE;IAItC,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAIhC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAK1C,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAI/D,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAY9C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;CAK1C"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const VALID_PREFIXES = new Set(['telegram', 'discord']);
|
|
2
|
+
export class ProviderRegistry {
|
|
3
|
+
providers = new Map();
|
|
4
|
+
register(provider) {
|
|
5
|
+
this.providers.set(provider.name, provider);
|
|
6
|
+
}
|
|
7
|
+
get(name) {
|
|
8
|
+
return this.providers.get(name);
|
|
9
|
+
}
|
|
10
|
+
getProviderForChat(chatId) {
|
|
11
|
+
const prefix = ProviderRegistry.getPrefix(chatId);
|
|
12
|
+
const provider = this.providers.get(prefix);
|
|
13
|
+
if (!provider) {
|
|
14
|
+
throw new Error(`No provider registered for prefix "${prefix}" (chatId: ${chatId})`);
|
|
15
|
+
}
|
|
16
|
+
return provider;
|
|
17
|
+
}
|
|
18
|
+
getAllProviders() {
|
|
19
|
+
return Array.from(this.providers.values());
|
|
20
|
+
}
|
|
21
|
+
has(name) {
|
|
22
|
+
return this.providers.has(name);
|
|
23
|
+
}
|
|
24
|
+
static stripPrefix(chatId) {
|
|
25
|
+
const idx = chatId.indexOf(':');
|
|
26
|
+
return idx >= 0 ? chatId.slice(idx + 1) : chatId;
|
|
27
|
+
}
|
|
28
|
+
static addPrefix(provider, rawId) {
|
|
29
|
+
return `${provider}:${rawId}`;
|
|
30
|
+
}
|
|
31
|
+
static getPrefix(chatId) {
|
|
32
|
+
const idx = chatId.indexOf(':');
|
|
33
|
+
if (idx < 0) {
|
|
34
|
+
throw new Error(`Chat ID "${chatId}" has no provider prefix`);
|
|
35
|
+
}
|
|
36
|
+
const prefix = chatId.slice(0, idx);
|
|
37
|
+
if (!VALID_PREFIXES.has(prefix)) {
|
|
38
|
+
throw new Error(`Unknown provider prefix "${prefix}" in chatId "${chatId}"`);
|
|
39
|
+
}
|
|
40
|
+
return prefix;
|
|
41
|
+
}
|
|
42
|
+
static hasPrefix(chatId) {
|
|
43
|
+
const idx = chatId.indexOf(':');
|
|
44
|
+
if (idx < 0)
|
|
45
|
+
return false;
|
|
46
|
+
return VALID_PREFIXES.has(chatId.slice(0, idx));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAEhE,MAAM,OAAO,gBAAgB;IACnB,SAAS,GAAG,IAAI,GAAG,EAAmC,CAAC;IAE/D,QAAQ,CAAC,QAA2B;QAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,GAAG,CAAC,IAAkB;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,kBAAkB,CAAC,MAAc;QAC/B,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,cAAc,MAAM,GAAG,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG,CAAC,IAAkB;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,MAAc;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,QAAsB,EAAE,KAAa;QACpD,OAAO,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,MAAc;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,YAAY,MAAM,0BAA0B,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,gBAAgB,MAAM,GAAG,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,MAAsB,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,MAAc;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1B,OAAO,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { TelegramProvider, createTelegramProvider } from './telegram-provider.js';
|
|
2
|
+
export type { TelegramProviderConfig } from './telegram-provider.js';
|
|
3
|
+
export { formatTelegramMessage, TELEGRAM_PARSE_MODE } from './telegram-format.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/telegram/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAClF,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/telegram/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram-format.d.ts","sourceRoot":"","sources":["../../../src/providers/telegram/telegram-format.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB,EAAG,MAAe,CAAC;AA0MnD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CA2C/E"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
const TEXT_LENGTH_MARGIN = 200;
|
|
2
|
+
export const TELEGRAM_PARSE_MODE = 'HTML';
|
|
3
|
+
function escapeHtml(text) {
|
|
4
|
+
return text
|
|
5
|
+
.replace(/&/g, '&')
|
|
6
|
+
.replace(/</g, '<')
|
|
7
|
+
.replace(/>/g, '>');
|
|
8
|
+
}
|
|
9
|
+
function escapeHtmlAttribute(text) {
|
|
10
|
+
return escapeHtml(text).replace(/"/g, '"');
|
|
11
|
+
}
|
|
12
|
+
function splitByCodeFences(text) {
|
|
13
|
+
const segments = [];
|
|
14
|
+
const fenceRegex = /```([a-zA-Z0-9_-]+)?\n?([\s\S]*?)```/g;
|
|
15
|
+
let lastIndex = 0;
|
|
16
|
+
let match;
|
|
17
|
+
while ((match = fenceRegex.exec(text)) !== null) {
|
|
18
|
+
if (match.index > lastIndex) {
|
|
19
|
+
segments.push({ type: 'text', content: text.slice(lastIndex, match.index) });
|
|
20
|
+
}
|
|
21
|
+
segments.push({ type: 'code', content: match[2] ?? '' });
|
|
22
|
+
lastIndex = match.index + match[0].length;
|
|
23
|
+
}
|
|
24
|
+
if (lastIndex < text.length) {
|
|
25
|
+
segments.push({ type: 'text', content: text.slice(lastIndex) });
|
|
26
|
+
}
|
|
27
|
+
return segments;
|
|
28
|
+
}
|
|
29
|
+
function splitTextPreservingNewlines(text, maxLength) {
|
|
30
|
+
if (text.length <= maxLength)
|
|
31
|
+
return [text];
|
|
32
|
+
const tokens = text.split(/(\n)/);
|
|
33
|
+
const chunks = [];
|
|
34
|
+
let current = '';
|
|
35
|
+
const pushCurrent = () => {
|
|
36
|
+
if (!current)
|
|
37
|
+
return;
|
|
38
|
+
chunks.push(current);
|
|
39
|
+
current = '';
|
|
40
|
+
};
|
|
41
|
+
for (const token of tokens) {
|
|
42
|
+
if (!token)
|
|
43
|
+
continue;
|
|
44
|
+
if (current.length + token.length <= maxLength) {
|
|
45
|
+
current += token;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
pushCurrent();
|
|
49
|
+
if (token.length > maxLength) {
|
|
50
|
+
const parts = splitLongString(token, maxLength);
|
|
51
|
+
chunks.push(...parts.slice(0, -1));
|
|
52
|
+
current = parts[parts.length - 1] ?? '';
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
current = token;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
pushCurrent();
|
|
59
|
+
return chunks;
|
|
60
|
+
}
|
|
61
|
+
function splitLongString(text, maxLength) {
|
|
62
|
+
const chunks = [];
|
|
63
|
+
for (let i = 0; i < text.length; i += maxLength) {
|
|
64
|
+
chunks.push(text.slice(i, i + maxLength));
|
|
65
|
+
}
|
|
66
|
+
return chunks;
|
|
67
|
+
}
|
|
68
|
+
function normalizeHeadings(text) {
|
|
69
|
+
return text
|
|
70
|
+
.split('\n')
|
|
71
|
+
.map(line => {
|
|
72
|
+
const match = line.match(/^#{1,6}\s+(.*)$/);
|
|
73
|
+
if (!match)
|
|
74
|
+
return line;
|
|
75
|
+
return `**${match[1]}**`;
|
|
76
|
+
})
|
|
77
|
+
.join('\n');
|
|
78
|
+
}
|
|
79
|
+
function formatInlineMarkdownToHtml(text) {
|
|
80
|
+
const placeholders = [];
|
|
81
|
+
const insertToken = (html) => {
|
|
82
|
+
const token = `\u0000${placeholders.length}\u0000`;
|
|
83
|
+
placeholders.push({ token, html });
|
|
84
|
+
return token;
|
|
85
|
+
};
|
|
86
|
+
let working = text;
|
|
87
|
+
// Inline code
|
|
88
|
+
working = working.replace(/`([^`\n]+)`/g, (_match, code) => {
|
|
89
|
+
return insertToken(`<code>${escapeHtml(code)}</code>`);
|
|
90
|
+
});
|
|
91
|
+
// Links
|
|
92
|
+
working = working.replace(/\[([^\]\n]+)\]\(([^)\s]+)\)/g, (_match, label, url) => {
|
|
93
|
+
return insertToken(`<a href="${escapeHtmlAttribute(url)}">${escapeHtml(label)}</a>`);
|
|
94
|
+
});
|
|
95
|
+
// Bold
|
|
96
|
+
working = working.replace(/\*\*([^\n]+?)\*\*/g, (_match, bold) => {
|
|
97
|
+
return insertToken(`<b>${escapeHtml(bold)}</b>`);
|
|
98
|
+
});
|
|
99
|
+
// Strikethrough
|
|
100
|
+
working = working.replace(/~~([^\n]+?)~~/g, (_match, strike) => {
|
|
101
|
+
return insertToken(`<s>${escapeHtml(strike)}</s>`);
|
|
102
|
+
});
|
|
103
|
+
// Italic (asterisks only, avoids underscore collisions with identifiers)
|
|
104
|
+
working = working.replace(/(?<!\*)\*([^*\n]+)\*(?!\*)/g, (_match, italic) => {
|
|
105
|
+
return insertToken(`<i>${escapeHtml(italic)}</i>`);
|
|
106
|
+
});
|
|
107
|
+
working = escapeHtml(working);
|
|
108
|
+
for (const { token, html } of placeholders) {
|
|
109
|
+
working = working.split(token).join(html);
|
|
110
|
+
}
|
|
111
|
+
return working;
|
|
112
|
+
}
|
|
113
|
+
function formatTextChunk(text) {
|
|
114
|
+
const normalized = normalizeHeadings(text);
|
|
115
|
+
return formatInlineMarkdownToHtml(normalized);
|
|
116
|
+
}
|
|
117
|
+
function splitCodeBlock(code, maxLength) {
|
|
118
|
+
const openTag = '<pre><code>';
|
|
119
|
+
const closeTag = '</code></pre>';
|
|
120
|
+
const overhead = openTag.length + closeTag.length;
|
|
121
|
+
const escaped = escapeHtml(code);
|
|
122
|
+
if (escaped.length + overhead <= maxLength) {
|
|
123
|
+
return [`${openTag}${escaped}${closeTag}`];
|
|
124
|
+
}
|
|
125
|
+
const tokens = escaped.split(/(\n)/);
|
|
126
|
+
const chunks = [];
|
|
127
|
+
let current = '';
|
|
128
|
+
const pushCurrent = () => {
|
|
129
|
+
if (!current)
|
|
130
|
+
return;
|
|
131
|
+
chunks.push(`${openTag}${current}${closeTag}`);
|
|
132
|
+
current = '';
|
|
133
|
+
};
|
|
134
|
+
for (const token of tokens) {
|
|
135
|
+
if (!token)
|
|
136
|
+
continue;
|
|
137
|
+
if (current.length + token.length + overhead <= maxLength) {
|
|
138
|
+
current += token;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
pushCurrent();
|
|
142
|
+
if (token.length + overhead > maxLength) {
|
|
143
|
+
const parts = splitLongString(token, maxLength - overhead);
|
|
144
|
+
for (const part of parts) {
|
|
145
|
+
chunks.push(`${openTag}${part}${closeTag}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
current = token;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
pushCurrent();
|
|
153
|
+
return chunks;
|
|
154
|
+
}
|
|
155
|
+
function packPieces(pieces, maxLength) {
|
|
156
|
+
const chunks = [];
|
|
157
|
+
let current = '';
|
|
158
|
+
for (const piece of pieces) {
|
|
159
|
+
if (!piece)
|
|
160
|
+
continue;
|
|
161
|
+
if (!current) {
|
|
162
|
+
current = piece;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (current.length + piece.length <= maxLength) {
|
|
166
|
+
current += piece;
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
chunks.push(current);
|
|
170
|
+
current = piece;
|
|
171
|
+
}
|
|
172
|
+
if (current)
|
|
173
|
+
chunks.push(current);
|
|
174
|
+
return chunks;
|
|
175
|
+
}
|
|
176
|
+
export function formatTelegramMessage(text, maxLength) {
|
|
177
|
+
const normalized = text.replace(/\r\n/g, '\n');
|
|
178
|
+
const segments = splitByCodeFences(normalized);
|
|
179
|
+
const pieces = [];
|
|
180
|
+
const textMaxLength = Math.max(1000, maxLength - TEXT_LENGTH_MARGIN);
|
|
181
|
+
for (const segment of segments) {
|
|
182
|
+
if (segment.type === 'code') {
|
|
183
|
+
pieces.push(...splitCodeBlock(segment.content, maxLength));
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
const rawChunks = splitTextPreservingNewlines(segment.content, textMaxLength);
|
|
187
|
+
for (const chunk of rawChunks) {
|
|
188
|
+
const formatted = formatTextChunk(chunk);
|
|
189
|
+
if (formatted.length <= maxLength) {
|
|
190
|
+
pieces.push(formatted);
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
// Fallback: send escaped plain text to avoid breaking HTML tags
|
|
194
|
+
const plain = escapeHtml(chunk);
|
|
195
|
+
pieces.push(...splitTextPreservingNewlines(plain, maxLength));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const packed = packPieces(pieces, maxLength);
|
|
199
|
+
// Add chunk markers for multi-part responses so users know more is coming
|
|
200
|
+
if (packed.length > 1) {
|
|
201
|
+
for (let i = 0; i < packed.length; i++) {
|
|
202
|
+
const marker = `[${i + 1}/${packed.length}]`;
|
|
203
|
+
// Prepend marker to first line, or add as suffix for very short chunks
|
|
204
|
+
if (i > 0) {
|
|
205
|
+
packed[i] = `${marker}\n${packed[i]}`;
|
|
206
|
+
}
|
|
207
|
+
// Append continuation hint to all but the last chunk
|
|
208
|
+
if (i < packed.length - 1) {
|
|
209
|
+
packed[i] = `${packed[i]}\n<i>${marker} continued…</i>`;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return packed;
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=telegram-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram-format.js","sourceRoot":"","sources":["../../../src/providers/telegram/telegram-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Telegraf } from 'telegraf';
|
|
2
|
+
import type { MessagingProvider, ProviderEventHandlers, ProviderCapabilities, IncomingMessage, SendResult, SendOptions, MediaOptions, VoiceOptions, AudioOptions, BaseOptions, ContactOptions, PollOptions, ButtonRow } from '../types.js';
|
|
3
|
+
import type { RuntimeConfig } from '../../runtime-config.js';
|
|
4
|
+
export interface TelegramProviderConfig {
|
|
5
|
+
token: string;
|
|
6
|
+
handlerTimeoutMs: number;
|
|
7
|
+
sendRetries: number;
|
|
8
|
+
sendRetryDelayMs: number;
|
|
9
|
+
groupsDir: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class TelegramProvider implements MessagingProvider {
|
|
12
|
+
readonly name: "telegram";
|
|
13
|
+
readonly capabilities: ProviderCapabilities;
|
|
14
|
+
private readonly bot;
|
|
15
|
+
private readonly config;
|
|
16
|
+
private connected;
|
|
17
|
+
private botUsername;
|
|
18
|
+
private botId;
|
|
19
|
+
private readonly callbackDataStore;
|
|
20
|
+
private callbackCleanupInterval;
|
|
21
|
+
constructor(config: TelegramProviderConfig);
|
|
22
|
+
get telegrafBot(): Telegraf;
|
|
23
|
+
start(handlers: ProviderEventHandlers): Promise<void>;
|
|
24
|
+
stop(): Promise<void>;
|
|
25
|
+
isConnected(): boolean;
|
|
26
|
+
sendMessage(chatId: string, text: string, opts?: SendOptions): Promise<SendResult>;
|
|
27
|
+
private sendChunk;
|
|
28
|
+
sendPhoto(chatId: string, filePath: string, opts?: MediaOptions): Promise<SendResult>;
|
|
29
|
+
sendDocument(chatId: string, filePath: string, opts?: MediaOptions): Promise<SendResult>;
|
|
30
|
+
sendVoice(chatId: string, filePath: string, opts?: VoiceOptions): Promise<SendResult>;
|
|
31
|
+
sendAudio(chatId: string, filePath: string, opts?: AudioOptions): Promise<SendResult>;
|
|
32
|
+
sendLocation(chatId: string, lat: number, lng: number, opts?: BaseOptions): Promise<SendResult>;
|
|
33
|
+
sendContact(chatId: string, phone: string, name: string, opts?: ContactOptions): Promise<SendResult>;
|
|
34
|
+
sendPoll(chatId: string, question: string, options: string[], opts?: PollOptions): Promise<SendResult>;
|
|
35
|
+
sendButtons(chatId: string, text: string, buttons: ButtonRow[], opts?: BaseOptions): Promise<SendResult>;
|
|
36
|
+
editMessage(chatId: string, messageId: string, text: string): Promise<SendResult>;
|
|
37
|
+
deleteMessage(chatId: string, messageId: string): Promise<SendResult>;
|
|
38
|
+
downloadFile(ref: string, groupFolder: string, filename: string): Promise<{
|
|
39
|
+
path: string | null;
|
|
40
|
+
error?: string;
|
|
41
|
+
}>;
|
|
42
|
+
formatMessage(text: string, maxLength: number): string[];
|
|
43
|
+
setTyping(chatId: string): Promise<void>;
|
|
44
|
+
isBotMentioned(message: IncomingMessage): boolean;
|
|
45
|
+
isBotReplied(message: IncomingMessage): boolean;
|
|
46
|
+
getBotUsername(): string;
|
|
47
|
+
registerCallbackData(chatJid: string, data: string, label: string): string;
|
|
48
|
+
private setupHandlers;
|
|
49
|
+
}
|
|
50
|
+
export declare function createTelegramProvider(runtime: RuntimeConfig, groupsDir: string): TelegramProvider;
|
|
51
|
+
//# sourceMappingURL=telegram-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/telegram/telegram-provider.ts"],"names":[],"mappings":"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"}
|