@bd7pil/ocrc 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +34 -0
- package/README.md +330 -0
- package/dist/cli/host-backends.js +216 -0
- package/dist/cli/host-backends.js.map +1 -0
- package/dist/cli/host.js +185 -0
- package/dist/cli/host.js.map +1 -0
- package/dist/cli/index.js +67 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.js +68 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/install.js +220 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/pair.js +11 -0
- package/dist/cli/pair.js.map +1 -0
- package/dist/cli/uninstall.js +75 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/connectivity/auth/cf-access.js +20 -0
- package/dist/connectivity/auth/cf-access.js.map +1 -0
- package/dist/connectivity/auth/index.js +2 -0
- package/dist/connectivity/auth/index.js.map +1 -0
- package/dist/connectivity/auth/select.js +19 -0
- package/dist/connectivity/auth/select.js.map +1 -0
- package/dist/connectivity/auth/token.js +157 -0
- package/dist/connectivity/auth/token.js.map +1 -0
- package/dist/connectivity/exposure/cloudflared.js +77 -0
- package/dist/connectivity/exposure/cloudflared.js.map +1 -0
- package/dist/connectivity/exposure/index.js +2 -0
- package/dist/connectivity/exposure/index.js.map +1 -0
- package/dist/connectivity/exposure/providers.js +49 -0
- package/dist/connectivity/exposure/providers.js.map +1 -0
- package/dist/connectivity/pairing.js +29 -0
- package/dist/connectivity/pairing.js.map +1 -0
- package/dist/core/agent/acp-backend.js +539 -0
- package/dist/core/agent/acp-backend.js.map +1 -0
- package/dist/core/agent/acp-connect.js +92 -0
- package/dist/core/agent/acp-connect.js.map +1 -0
- package/dist/core/agent/acp-normalizer.js +81 -0
- package/dist/core/agent/acp-normalizer.js.map +1 -0
- package/dist/core/agent/acp-replay.js +89 -0
- package/dist/core/agent/acp-replay.js.map +1 -0
- package/dist/core/agent/acp-store.js +129 -0
- package/dist/core/agent/acp-store.js.map +1 -0
- package/dist/core/agent/backend.js +2 -0
- package/dist/core/agent/backend.js.map +1 -0
- package/dist/core/agent/diff-util.js +70 -0
- package/dist/core/agent/diff-util.js.map +1 -0
- package/dist/core/agent/event.js +12 -0
- package/dist/core/agent/event.js.map +1 -0
- package/dist/core/agent/opencode-backend.js +598 -0
- package/dist/core/agent/opencode-backend.js.map +1 -0
- package/dist/core/agent/opencode-normalizer.js +69 -0
- package/dist/core/agent/opencode-normalizer.js.map +1 -0
- package/dist/core/agent/registry.js +55 -0
- package/dist/core/agent/registry.js.map +1 -0
- package/dist/core/agent/v2-backend.js +176 -0
- package/dist/core/agent/v2-backend.js.map +1 -0
- package/dist/core/card-bus.js +74 -0
- package/dist/core/card-bus.js.map +1 -0
- package/dist/core/channels.js +95 -0
- package/dist/core/channels.js.map +1 -0
- package/dist/core/history.js +91 -0
- package/dist/core/history.js.map +1 -0
- package/dist/core/list-files.js +50 -0
- package/dist/core/list-files.js.map +1 -0
- package/dist/core/opencode-events.js +29 -0
- package/dist/core/opencode-events.js.map +1 -0
- package/dist/core/primary-election.js +91 -0
- package/dist/core/primary-election.js.map +1 -0
- package/dist/core/push.js +152 -0
- package/dist/core/push.js.map +1 -0
- package/dist/core/relay.js +400 -0
- package/dist/core/relay.js.map +1 -0
- package/dist/core/scheduler.js +150 -0
- package/dist/core/scheduler.js.map +1 -0
- package/dist/core/state.js +222 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/stream-accumulator.js +76 -0
- package/dist/core/stream-accumulator.js.map +1 -0
- package/dist/core/structured-card.js +2 -0
- package/dist/core/structured-card.js.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/opencode/global-events.js +57 -0
- package/dist/opencode/global-events.js.map +1 -0
- package/dist/opencode/list-sessions.js +122 -0
- package/dist/opencode/list-sessions.js.map +1 -0
- package/dist/opencode/submit.js +39 -0
- package/dist/opencode/submit.js.map +1 -0
- package/dist/opencode/workspaces.js +51 -0
- package/dist/opencode/workspaces.js.map +1 -0
- package/dist/plugin/config.js +128 -0
- package/dist/plugin/config.js.map +1 -0
- package/dist/plugin/control-plane.js +133 -0
- package/dist/plugin/control-plane.js.map +1 -0
- package/dist/plugin/entry.js +409 -0
- package/dist/plugin/entry.js.map +1 -0
- package/dist/plugin/v2/event-map.js +193 -0
- package/dist/plugin/v2/event-map.js.map +1 -0
- package/dist/plugin/v2/types.js +15 -0
- package/dist/plugin/v2/types.js.map +1 -0
- package/dist/transport/interface.js +2 -0
- package/dist/transport/interface.js.map +1 -0
- package/dist/transport/telegram/esc.js +9 -0
- package/dist/transport/telegram/esc.js.map +1 -0
- package/dist/transport/telegram/handlers/info-commands.js +101 -0
- package/dist/transport/telegram/handlers/info-commands.js.map +1 -0
- package/dist/transport/telegram/handlers.js +1348 -0
- package/dist/transport/telegram/handlers.js.map +1 -0
- package/dist/transport/telegram/i18n/en.js +538 -0
- package/dist/transport/telegram/i18n/en.js.map +1 -0
- package/dist/transport/telegram/i18n/index.js +83 -0
- package/dist/transport/telegram/i18n/index.js.map +1 -0
- package/dist/transport/telegram/i18n/zh.js +538 -0
- package/dist/transport/telegram/i18n/zh.js.map +1 -0
- package/dist/transport/telegram/index.js +792 -0
- package/dist/transport/telegram/index.js.map +1 -0
- package/dist/transport/telegram/main-keyboard.js +36 -0
- package/dist/transport/telegram/main-keyboard.js.map +1 -0
- package/dist/transport/telegram/managers/abort-suppression-manager.js +33 -0
- package/dist/transport/telegram/managers/abort-suppression-manager.js.map +1 -0
- package/dist/transport/telegram/managers/external-input-suppression-manager.js +51 -0
- package/dist/transport/telegram/managers/external-input-suppression-manager.js.map +1 -0
- package/dist/transport/telegram/managers/interaction-manager.js +254 -0
- package/dist/transport/telegram/managers/interaction-manager.js.map +1 -0
- package/dist/transport/telegram/managers/permission-manager.js +242 -0
- package/dist/transport/telegram/managers/permission-manager.js.map +1 -0
- package/dist/transport/telegram/managers/question-manager.js +191 -0
- package/dist/transport/telegram/managers/question-manager.js.map +1 -0
- package/dist/transport/telegram/managers/rename-manager.js +56 -0
- package/dist/transport/telegram/managers/rename-manager.js.map +1 -0
- package/dist/transport/telegram/menus.js +77 -0
- package/dist/transport/telegram/menus.js.map +1 -0
- package/dist/transport/telegram/permission-flow.js +156 -0
- package/dist/transport/telegram/permission-flow.js.map +1 -0
- package/dist/transport/telegram/question-flow.js +224 -0
- package/dist/transport/telegram/question-flow.js.map +1 -0
- package/dist/transport/telegram/render/block-parser.js +365 -0
- package/dist/transport/telegram/render/block-parser.js.map +1 -0
- package/dist/transport/telegram/render/block-plain-text.js +87 -0
- package/dist/transport/telegram/render/block-plain-text.js.map +1 -0
- package/dist/transport/telegram/render/block-splitter.js +152 -0
- package/dist/transport/telegram/render/block-splitter.js.map +1 -0
- package/dist/transport/telegram/render/chunker.js +71 -0
- package/dist/transport/telegram/render/chunker.js.map +1 -0
- package/dist/transport/telegram/render/limits.js +13 -0
- package/dist/transport/telegram/render/limits.js.map +1 -0
- package/dist/transport/telegram/render/markdown-normalizer.js +102 -0
- package/dist/transport/telegram/render/markdown-normalizer.js.map +1 -0
- package/dist/transport/telegram/render/markdown-to-telegram-v2.js +116 -0
- package/dist/transport/telegram/render/markdown-to-telegram-v2.js.map +1 -0
- package/dist/transport/telegram/render/part-signature.js +14 -0
- package/dist/transport/telegram/render/part-signature.js.map +1 -0
- package/dist/transport/telegram/render/pipeline.js +23 -0
- package/dist/transport/telegram/render/pipeline.js.map +1 -0
- package/dist/transport/telegram/render/rich-blocks.js +311 -0
- package/dist/transport/telegram/render/rich-blocks.js.map +1 -0
- package/dist/transport/telegram/render/text-splitter.js +64 -0
- package/dist/transport/telegram/render/text-splitter.js.map +1 -0
- package/dist/transport/telegram/render/types.js +2 -0
- package/dist/transport/telegram/render/types.js.map +1 -0
- package/dist/transport/telegram/renderer.js +305 -0
- package/dist/transport/telegram/renderer.js.map +1 -0
- package/dist/transport/telegram/streaming/duration-formatter.js +68 -0
- package/dist/transport/telegram/streaming/duration-formatter.js.map +1 -0
- package/dist/transport/telegram/streaming/finalize-assistant-response.js +37 -0
- package/dist/transport/telegram/streaming/finalize-assistant-response.js.map +1 -0
- package/dist/transport/telegram/streaming/response-streamer.js +400 -0
- package/dist/transport/telegram/streaming/response-streamer.js.map +1 -0
- package/dist/transport/telegram/streaming/running-tool-tracker.js +150 -0
- package/dist/transport/telegram/streaming/running-tool-tracker.js.map +1 -0
- package/dist/transport/telegram/streaming/stream-throttle.js +57 -0
- package/dist/transport/telegram/streaming/stream-throttle.js.map +1 -0
- package/dist/transport/telegram/streaming/tool-call-streamer.js +390 -0
- package/dist/transport/telegram/streaming/tool-call-streamer.js.map +1 -0
- package/dist/transport/telegram/streaming-render.js +182 -0
- package/dist/transport/telegram/streaming-render.js.map +1 -0
- package/dist/transport/telegram/types/interaction.js +2 -0
- package/dist/transport/telegram/types/interaction.js.map +1 -0
- package/dist/transport/telegram/types/model.js +25 -0
- package/dist/transport/telegram/types/model.js.map +1 -0
- package/dist/transport/telegram/types/permission.js +2 -0
- package/dist/transport/telegram/types/permission.js.map +1 -0
- package/dist/transport/telegram/types/question.js +2 -0
- package/dist/transport/telegram/types/question.js.map +1 -0
- package/dist/transport/telegram/types/rename.js +2 -0
- package/dist/transport/telegram/types/rename.js.map +1 -0
- package/dist/transport/telegram/types/scheduled-task.js +23 -0
- package/dist/transport/telegram/types/scheduled-task.js.map +1 -0
- package/dist/transport/telegram/types/session.js +2 -0
- package/dist/transport/telegram/types/session.js.map +1 -0
- package/dist/transport/telegram/ui.js +28 -0
- package/dist/transport/telegram/ui.js.map +1 -0
- package/dist/transport/web/index.js +148 -0
- package/dist/transport/web/index.js.map +1 -0
- package/dist/transport/web/middleware/cf-access.js +104 -0
- package/dist/transport/web/middleware/cf-access.js.map +1 -0
- package/dist/transport/web/opencode-config.js +15 -0
- package/dist/transport/web/opencode-config.js.map +1 -0
- package/dist/transport/web/routes/abort.js +12 -0
- package/dist/transport/web/routes/abort.js.map +1 -0
- package/dist/transport/web/routes/approval.js +16 -0
- package/dist/transport/web/routes/approval.js.map +1 -0
- package/dist/transport/web/routes/catalog.js +11 -0
- package/dist/transport/web/routes/catalog.js.map +1 -0
- package/dist/transport/web/routes/channels.js +53 -0
- package/dist/transport/web/routes/channels.js.map +1 -0
- package/dist/transport/web/routes/commands.js +15 -0
- package/dist/transport/web/routes/commands.js.map +1 -0
- package/dist/transport/web/routes/context.js +17 -0
- package/dist/transport/web/routes/context.js.map +1 -0
- package/dist/transport/web/routes/controls.js +34 -0
- package/dist/transport/web/routes/controls.js.map +1 -0
- package/dist/transport/web/routes/create-session.js +21 -0
- package/dist/transport/web/routes/create-session.js.map +1 -0
- package/dist/transport/web/routes/diff.js +7 -0
- package/dist/transport/web/routes/diff.js.map +1 -0
- package/dist/transport/web/routes/files.js +22 -0
- package/dist/transport/web/routes/files.js.map +1 -0
- package/dist/transport/web/routes/logs.js +9 -0
- package/dist/transport/web/routes/logs.js.map +1 -0
- package/dist/transport/web/routes/m8.js +69 -0
- package/dist/transport/web/routes/m8.js.map +1 -0
- package/dist/transport/web/routes/mcp.js +7 -0
- package/dist/transport/web/routes/mcp.js.map +1 -0
- package/dist/transport/web/routes/message.js +32 -0
- package/dist/transport/web/routes/message.js.map +1 -0
- package/dist/transport/web/routes/overrides.js +20 -0
- package/dist/transport/web/routes/overrides.js.map +1 -0
- package/dist/transport/web/routes/question.js +32 -0
- package/dist/transport/web/routes/question.js.map +1 -0
- package/dist/transport/web/routes/rename.js +12 -0
- package/dist/transport/web/routes/rename.js.map +1 -0
- package/dist/transport/web/routes/schedules.js +28 -0
- package/dist/transport/web/routes/schedules.js.map +1 -0
- package/dist/transport/web/routes/session.js +20 -0
- package/dist/transport/web/routes/session.js.map +1 -0
- package/dist/transport/web/routes/sessions.js +25 -0
- package/dist/transport/web/routes/sessions.js.map +1 -0
- package/dist/transport/web/routes/subagents.js +11 -0
- package/dist/transport/web/routes/subagents.js.map +1 -0
- package/dist/transport/web/routes/suggestions.js +7 -0
- package/dist/transport/web/routes/suggestions.js.map +1 -0
- package/dist/transport/web/routes/todo.js +7 -0
- package/dist/transport/web/routes/todo.js.map +1 -0
- package/dist/transport/web/routes/version.js +5 -0
- package/dist/transport/web/routes/version.js.map +1 -0
- package/dist/transport/web/routes/workspaces.js +7 -0
- package/dist/transport/web/routes/workspaces.js.map +1 -0
- package/dist/transport/web/server.js +111 -0
- package/dist/transport/web/server.js.map +1 -0
- package/dist/transport/web/session-summary.js +46 -0
- package/dist/transport/web/session-summary.js.map +1 -0
- package/dist/transport/web/ws-hub.js +83 -0
- package/dist/transport/web/ws-hub.js.map +1 -0
- package/dist/utils/logger.js +105 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/markdown.js +129 -0
- package/dist/utils/markdown.js.map +1 -0
- package/dist/utils/paths.js +18 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/version.js +44 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +91 -0
- package/web/dist/_app/env.js +1 -0
- package/web/dist/_app/immutable/assets/0.DxN3RsuG.css +1 -0
- package/web/dist/_app/immutable/assets/2.BNuGfmZP.css +1 -0
- package/web/dist/_app/immutable/assets/3.CTDprntu.css +1 -0
- package/web/dist/_app/immutable/chunks/BUpwHpMJ.js +1 -0
- package/web/dist/_app/immutable/chunks/BjY4dxcB.js +2 -0
- package/web/dist/_app/immutable/chunks/C2FuqD3s.js +1 -0
- package/web/dist/_app/immutable/chunks/CUHGq08X.js +2 -0
- package/web/dist/_app/immutable/chunks/CWj6FrbW.js +1 -0
- package/web/dist/_app/immutable/chunks/ClvoqtGj.js +1 -0
- package/web/dist/_app/immutable/chunks/DIEDQ_hk.js +1 -0
- package/web/dist/_app/immutable/entry/app.BoRpcVMj.js +2 -0
- package/web/dist/_app/immutable/entry/start.Cj-PQNTq.js +1 -0
- package/web/dist/_app/immutable/nodes/0.y9YEms5p.js +3 -0
- package/web/dist/_app/immutable/nodes/1.CPhhiRM2.js +1 -0
- package/web/dist/_app/immutable/nodes/2.B_c84Mc9.js +1 -0
- package/web/dist/_app/immutable/nodes/3.ClTd0J3D.js +64 -0
- package/web/dist/_app/version.json +1 -0
- package/web/dist/apple-touch-icon.png +0 -0
- package/web/dist/favicon.png +0 -0
- package/web/dist/favicon.svg +17 -0
- package/web/dist/icon-192.png +0 -0
- package/web/dist/icon-512-maskable.png +0 -0
- package/web/dist/icon-512.png +0 -0
- package/web/dist/index.html +73 -0
- package/web/dist/manifest.webmanifest +28 -0
- package/web/dist/service-worker.js +1 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { buildAlignedTableText, toBlockPlainText } from "./block-plain-text.js";
|
|
2
|
+
/** Telegram rejects rich tables wider than this; such tables fall back to preformatted text. */
|
|
3
|
+
const RICH_TABLE_MAX_COLUMNS = 20;
|
|
4
|
+
function toRichTextNodes(nodes) {
|
|
5
|
+
const result = [];
|
|
6
|
+
for (const node of nodes) {
|
|
7
|
+
switch (node.type) {
|
|
8
|
+
case "text":
|
|
9
|
+
if (node.text) {
|
|
10
|
+
result.push(node.text);
|
|
11
|
+
}
|
|
12
|
+
break;
|
|
13
|
+
case "bold":
|
|
14
|
+
result.push({ type: "bold", text: toRichText(node.children) });
|
|
15
|
+
break;
|
|
16
|
+
case "italic":
|
|
17
|
+
result.push({ type: "italic", text: toRichText(node.children) });
|
|
18
|
+
break;
|
|
19
|
+
case "strike":
|
|
20
|
+
result.push({ type: "strikethrough", text: toRichText(node.children) });
|
|
21
|
+
break;
|
|
22
|
+
case "underline":
|
|
23
|
+
result.push({ type: "underline", text: toRichText(node.children) });
|
|
24
|
+
break;
|
|
25
|
+
case "spoiler":
|
|
26
|
+
result.push({ type: "spoiler", text: toRichText(node.children) });
|
|
27
|
+
break;
|
|
28
|
+
case "subscript":
|
|
29
|
+
result.push({ type: "subscript", text: toRichText(node.children) });
|
|
30
|
+
break;
|
|
31
|
+
case "superscript":
|
|
32
|
+
result.push({ type: "superscript", text: toRichText(node.children) });
|
|
33
|
+
break;
|
|
34
|
+
case "marked":
|
|
35
|
+
result.push({ type: "marked", text: toRichText(node.children) });
|
|
36
|
+
break;
|
|
37
|
+
case "code":
|
|
38
|
+
result.push({ type: "code", text: node.text });
|
|
39
|
+
break;
|
|
40
|
+
case "link":
|
|
41
|
+
result.push({ type: "url", text: toRichText(node.text), url: node.url });
|
|
42
|
+
break;
|
|
43
|
+
default: {
|
|
44
|
+
const exhaustiveCheck = node;
|
|
45
|
+
throw new Error(`Unsupported inline node: ${JSON.stringify(exhaustiveCheck)}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
export function toRichText(nodes) {
|
|
52
|
+
const parts = toRichTextNodes(nodes);
|
|
53
|
+
if (parts.length === 0) {
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
56
|
+
if (parts.length === 1) {
|
|
57
|
+
return parts[0] ?? "";
|
|
58
|
+
}
|
|
59
|
+
return parts;
|
|
60
|
+
}
|
|
61
|
+
function taskMarker(checked) {
|
|
62
|
+
if (checked === undefined) {
|
|
63
|
+
return "";
|
|
64
|
+
}
|
|
65
|
+
return checked ? "✅ " : "🔲 ";
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Inline content of an item, for the text form of a list. Only a leading
|
|
69
|
+
* paragraph keeps its formatting; anything else an item holds (a nested list,
|
|
70
|
+
* code, a quote) is appended as indented plain text.
|
|
71
|
+
*/
|
|
72
|
+
function toTextItemNodes(item, indent) {
|
|
73
|
+
const [first, ...rest] = item.blocks;
|
|
74
|
+
const leadingInlines = first?.type === "paragraph" ? first.inlines : [];
|
|
75
|
+
const trailingBlocks = first?.type === "paragraph" ? rest : item.blocks;
|
|
76
|
+
const nodes = [...toRichTextNodes(leadingInlines)];
|
|
77
|
+
for (const block of trailingBlocks) {
|
|
78
|
+
const text = toBlockPlainText(block);
|
|
79
|
+
if (!text) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
nodes.push(`\n${text
|
|
83
|
+
.split("\n")
|
|
84
|
+
.map((line) => `${indent}${line}`)
|
|
85
|
+
.join("\n")}`);
|
|
86
|
+
}
|
|
87
|
+
return nodes;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Lists Telegram cannot render the way the product needs, so they are written
|
|
91
|
+
* out as text: ordered lists because the native one is numbered from zero in
|
|
92
|
+
* Telegram Web, task lists because the native checkbox is not drawn at all and
|
|
93
|
+
* the item state would be lost. Both are client behaviour the API cannot fix —
|
|
94
|
+
* see the plan's Risks section.
|
|
95
|
+
*/
|
|
96
|
+
export function isTextRenderedList(block) {
|
|
97
|
+
return block.ordered || block.items.some((item) => item.checked !== undefined);
|
|
98
|
+
}
|
|
99
|
+
/** The `N. `, `✅ ` or `• ` an item is written out with. */
|
|
100
|
+
export function textListMarker(item, index, ordered, start = 1) {
|
|
101
|
+
const task = taskMarker(item.checked);
|
|
102
|
+
if (ordered) {
|
|
103
|
+
return `${start + index}. ${task}`;
|
|
104
|
+
}
|
|
105
|
+
return task || "• ";
|
|
106
|
+
}
|
|
107
|
+
function toTextListBlock(items, ordered, start) {
|
|
108
|
+
const text = items.flatMap((item, index) => {
|
|
109
|
+
const marker = textListMarker(item, index, ordered, start);
|
|
110
|
+
return [
|
|
111
|
+
index === 0 ? marker : `\n${marker}`,
|
|
112
|
+
...toTextItemNodes(item, " ".repeat(marker.length)),
|
|
113
|
+
];
|
|
114
|
+
});
|
|
115
|
+
return { type: "paragraph", text };
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* A sub-list that is itself written out as text has nothing native to be lifted
|
|
119
|
+
* into: on its own it would start flush left, indistinguishable from its parent.
|
|
120
|
+
* It stays inside the item instead, where it is written out indented — but only
|
|
121
|
+
* while it holds nothing but text, because staying means being flattened, and a
|
|
122
|
+
* code block or a bullet list deeper inside would lose its native form with it.
|
|
123
|
+
*/
|
|
124
|
+
function staysInsideItem(block) {
|
|
125
|
+
if (block.type !== "list" || !isTextRenderedList(block)) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
return block.items.every((item) => item.blocks.every((inner) => inner.type === "paragraph" || staysInsideItem(inner)));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* A list written out as text cannot hold native content, so what an item carries
|
|
132
|
+
* beyond its leading paragraph is lifted out and placed right after the piece it
|
|
133
|
+
* belonged to, where it renders natively. Numbering runs across the pieces, so a
|
|
134
|
+
* sub-list under item 2 does not restart the count at item 3.
|
|
135
|
+
*/
|
|
136
|
+
export function liftTextListContent(blocks) {
|
|
137
|
+
return blocks.flatMap((block) => {
|
|
138
|
+
if (block.type !== "list" || !isTextRenderedList(block)) {
|
|
139
|
+
return [block];
|
|
140
|
+
}
|
|
141
|
+
const result = [];
|
|
142
|
+
let pieceItems = [];
|
|
143
|
+
let start = block.start ?? 1;
|
|
144
|
+
const flushPiece = () => {
|
|
145
|
+
if (pieceItems.length === 0) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
result.push({ type: "list", ordered: block.ordered, items: pieceItems, start });
|
|
149
|
+
start += pieceItems.length;
|
|
150
|
+
pieceItems = [];
|
|
151
|
+
};
|
|
152
|
+
for (const item of block.items) {
|
|
153
|
+
const [first, ...rest] = item.blocks;
|
|
154
|
+
const leading = first?.type === "paragraph" ? [first] : [];
|
|
155
|
+
const trailing = first?.type === "paragraph" ? rest : item.blocks;
|
|
156
|
+
// Lifting starts at the first block that has a native form; keeping the
|
|
157
|
+
// split at one point preserves the order the item was written in.
|
|
158
|
+
const liftFrom = trailing.findIndex((inner) => !staysInsideItem(inner));
|
|
159
|
+
const lifted = liftFrom === -1 ? [] : trailing.slice(liftFrom);
|
|
160
|
+
pieceItems.push({
|
|
161
|
+
...item,
|
|
162
|
+
blocks: [...leading, ...(liftFrom === -1 ? trailing : trailing.slice(0, liftFrom))],
|
|
163
|
+
});
|
|
164
|
+
if (lifted.length > 0) {
|
|
165
|
+
flushPiece();
|
|
166
|
+
result.push(...liftTextListContent(lifted));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
flushPiece();
|
|
170
|
+
return result;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
function toTableCells(rows, align) {
|
|
174
|
+
const columnCount = Math.max(...rows.map((row) => row.length));
|
|
175
|
+
return rows.map((row, rowIndex) => Array.from({ length: columnCount }, (_, columnIndex) => ({
|
|
176
|
+
text: row[columnIndex] ?? "",
|
|
177
|
+
...(rowIndex === 0 ? { is_header: true } : {}),
|
|
178
|
+
align: align?.[columnIndex] ?? "left",
|
|
179
|
+
valign: "top",
|
|
180
|
+
})));
|
|
181
|
+
}
|
|
182
|
+
function toTableBlock(rows, align) {
|
|
183
|
+
const columnCount = Math.max(...rows.map((row) => row.length));
|
|
184
|
+
if (columnCount > RICH_TABLE_MAX_COLUMNS) {
|
|
185
|
+
return { type: "pre", text: buildAlignedTableText(rows) };
|
|
186
|
+
}
|
|
187
|
+
return { type: "table", cells: toTableCells(rows, align), is_bordered: true };
|
|
188
|
+
}
|
|
189
|
+
export function toRichBlock(block) {
|
|
190
|
+
switch (block.type) {
|
|
191
|
+
case "paragraph":
|
|
192
|
+
return { type: "paragraph", text: toRichText(block.inlines) };
|
|
193
|
+
case "heading":
|
|
194
|
+
return {
|
|
195
|
+
type: "heading",
|
|
196
|
+
text: toRichText(block.inlines),
|
|
197
|
+
size: Math.min(6, Math.max(1, Math.floor(block.level))),
|
|
198
|
+
};
|
|
199
|
+
case "blockquote":
|
|
200
|
+
return { type: "blockquote", blocks: block.blocks.map(toRichBlock) };
|
|
201
|
+
case "list":
|
|
202
|
+
return isTextRenderedList(block)
|
|
203
|
+
? toTextListBlock(block.items, block.ordered, block.start ?? 1)
|
|
204
|
+
: {
|
|
205
|
+
type: "list",
|
|
206
|
+
items: block.items.map((item) => ({ blocks: item.blocks.map(toRichBlock) })),
|
|
207
|
+
};
|
|
208
|
+
case "code":
|
|
209
|
+
return { type: "pre", text: block.text, ...(block.language ? { language: block.language } : {}) };
|
|
210
|
+
case "table":
|
|
211
|
+
return block.rows.length > 0
|
|
212
|
+
? toTableBlock(block.rows, block.align)
|
|
213
|
+
: { type: "paragraph", text: "" };
|
|
214
|
+
case "rule":
|
|
215
|
+
return { type: "divider" };
|
|
216
|
+
case "plain":
|
|
217
|
+
return { type: "paragraph", text: block.text };
|
|
218
|
+
default: {
|
|
219
|
+
const exhaustiveCheck = block;
|
|
220
|
+
throw new Error(`Unsupported Telegram block: ${JSON.stringify(exhaustiveCheck)}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
export function createParagraphBlock(text) {
|
|
225
|
+
return { type: "paragraph", text };
|
|
226
|
+
}
|
|
227
|
+
function countRichTextChars(text) {
|
|
228
|
+
if (typeof text === "string") {
|
|
229
|
+
return text.length;
|
|
230
|
+
}
|
|
231
|
+
if (Array.isArray(text)) {
|
|
232
|
+
return text.reduce((total, node) => total + countRichTextChars(node), 0);
|
|
233
|
+
}
|
|
234
|
+
switch (text.type) {
|
|
235
|
+
case "bold":
|
|
236
|
+
case "italic":
|
|
237
|
+
case "underline":
|
|
238
|
+
case "strikethrough":
|
|
239
|
+
case "spoiler":
|
|
240
|
+
case "subscript":
|
|
241
|
+
case "superscript":
|
|
242
|
+
case "marked":
|
|
243
|
+
case "code":
|
|
244
|
+
case "date_time":
|
|
245
|
+
case "text_mention":
|
|
246
|
+
case "url":
|
|
247
|
+
case "email_address":
|
|
248
|
+
case "phone_number":
|
|
249
|
+
case "bank_card_number":
|
|
250
|
+
case "mention":
|
|
251
|
+
case "hashtag":
|
|
252
|
+
case "cashtag":
|
|
253
|
+
case "bot_command":
|
|
254
|
+
case "anchor_link":
|
|
255
|
+
case "reference":
|
|
256
|
+
case "reference_link":
|
|
257
|
+
return countRichTextChars(text.text);
|
|
258
|
+
case "custom_emoji":
|
|
259
|
+
return text.alternative_text.length;
|
|
260
|
+
case "mathematical_expression":
|
|
261
|
+
return text.expression.length;
|
|
262
|
+
case "anchor":
|
|
263
|
+
return text.name.length;
|
|
264
|
+
default:
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Number of blocks Telegram counts towards the per-message block limit.
|
|
270
|
+
* Nested blocks, list items, table rows, and details bodies all count.
|
|
271
|
+
*/
|
|
272
|
+
export function countRichBlocks(block) {
|
|
273
|
+
switch (block.type) {
|
|
274
|
+
case "list":
|
|
275
|
+
return (1 +
|
|
276
|
+
block.items.reduce((total, item) => total + 1 + item.blocks.reduce((sum, b) => sum + countRichBlocks(b), 0), 0));
|
|
277
|
+
case "table":
|
|
278
|
+
return 1 + block.cells.length;
|
|
279
|
+
case "blockquote":
|
|
280
|
+
case "details":
|
|
281
|
+
return 1 + block.blocks.reduce((total, inner) => total + countRichBlocks(inner), 0);
|
|
282
|
+
default:
|
|
283
|
+
return 1;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/** Upper bound of the characters a block contributes to the per-message character limit. */
|
|
287
|
+
export function countRichChars(block) {
|
|
288
|
+
switch (block.type) {
|
|
289
|
+
case "paragraph":
|
|
290
|
+
case "heading":
|
|
291
|
+
case "footer":
|
|
292
|
+
case "pullquote":
|
|
293
|
+
return countRichTextChars(block.text);
|
|
294
|
+
case "pre":
|
|
295
|
+
return countRichTextChars(block.text);
|
|
296
|
+
case "list":
|
|
297
|
+
return block.items.reduce((total, item) => total + item.blocks.reduce((sum, b) => sum + countRichChars(b), 0), 0);
|
|
298
|
+
case "table":
|
|
299
|
+
return block.cells.reduce((total, row) => total + row.reduce((sum, cell) => sum + (cell.text ? countRichTextChars(cell.text) : 0), 0), 0);
|
|
300
|
+
case "blockquote":
|
|
301
|
+
return block.blocks.reduce((total, inner) => total + countRichChars(inner), 0);
|
|
302
|
+
case "details":
|
|
303
|
+
return (countRichTextChars(block.summary) +
|
|
304
|
+
block.blocks.reduce((total, inner) => total + countRichChars(inner), 0));
|
|
305
|
+
case "mathematical_expression":
|
|
306
|
+
return block.expression.length;
|
|
307
|
+
default:
|
|
308
|
+
return 0;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=rich-blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rich-blocks.js","sourceRoot":"","sources":["../../../../src/transport/telegram/render/rich-blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
function isHighSurrogate(codeUnit) {
|
|
2
|
+
return codeUnit >= 0xd800 && codeUnit <= 0xdbff;
|
|
3
|
+
}
|
|
4
|
+
function isLowSurrogate(codeUnit) {
|
|
5
|
+
return codeUnit >= 0xdc00 && codeUnit <= 0xdfff;
|
|
6
|
+
}
|
|
7
|
+
function isSafeUtf16Boundary(text, index) {
|
|
8
|
+
if (index <= 0 || index >= text.length) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
return !(isHighSurrogate(text.charCodeAt(index - 1)) && isLowSurrogate(text.charCodeAt(index)));
|
|
12
|
+
}
|
|
13
|
+
function isWhitespaceBoundary(text, index) {
|
|
14
|
+
const previous = text[index - 1];
|
|
15
|
+
return index > 0 && previous !== undefined && /\s/.test(previous);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Finds the largest safe cut point within `maxLength` of `start`, preferring a
|
|
19
|
+
* line break, then any whitespace, then any UTF-16 safe boundary.
|
|
20
|
+
*/
|
|
21
|
+
function findSplitBoundary(text, start, maxLength) {
|
|
22
|
+
const hardEnd = Math.min(text.length, start + maxLength);
|
|
23
|
+
if (hardEnd >= text.length) {
|
|
24
|
+
return text.length;
|
|
25
|
+
}
|
|
26
|
+
let whitespaceBoundary = null;
|
|
27
|
+
let fallbackBoundary = null;
|
|
28
|
+
for (let index = hardEnd; index > start; index--) {
|
|
29
|
+
if (!isSafeUtf16Boundary(text, index)) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (text[index - 1] === "\n") {
|
|
33
|
+
return index;
|
|
34
|
+
}
|
|
35
|
+
if (whitespaceBoundary === null && isWhitespaceBoundary(text, index)) {
|
|
36
|
+
whitespaceBoundary = index;
|
|
37
|
+
}
|
|
38
|
+
if (fallbackBoundary === null) {
|
|
39
|
+
fallbackBoundary = index;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return whitespaceBoundary ?? fallbackBoundary;
|
|
43
|
+
}
|
|
44
|
+
export function splitTextIntoChunks(text, maxLength) {
|
|
45
|
+
if (!text) {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
const limit = Math.max(1, Math.floor(maxLength));
|
|
49
|
+
if (text.length <= limit) {
|
|
50
|
+
return [text];
|
|
51
|
+
}
|
|
52
|
+
const chunks = [];
|
|
53
|
+
let start = 0;
|
|
54
|
+
while (start < text.length) {
|
|
55
|
+
const end = findSplitBoundary(text, start, limit);
|
|
56
|
+
if (!end || end <= start) {
|
|
57
|
+
throw new Error("Unable to split text on a safe UTF-16 boundary");
|
|
58
|
+
}
|
|
59
|
+
chunks.push(text.slice(start, end));
|
|
60
|
+
start = end;
|
|
61
|
+
}
|
|
62
|
+
return chunks;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=text-splitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-splitter.js","sourceRoot":"","sources":["../../../../src/transport/telegram/render/text-splitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/transport/telegram/render/types.ts"],"names":[],"mappings":""}
|