@rubytech/create-maxy-code 0.1.596 → 0.1.598
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/installer-settings-permissions.test.js +54 -0
- package/dist/__tests__/output-style-seed.test.js +23 -0
- package/dist/index.js +24 -0
- package/dist/permissions-seed.js +11 -2
- package/package.json +1 -1
- package/payload/platform/lib/routine-templates/dist/roster.d.ts +1 -1
- package/payload/platform/lib/routine-templates/dist/roster.d.ts.map +1 -1
- package/payload/platform/lib/routine-templates/dist/roster.js +22 -1
- package/payload/platform/lib/routine-templates/dist/roster.js.map +1 -1
- package/payload/platform/lib/routine-templates/src/__tests__/roster.test.ts +0 -0
- package/payload/platform/lib/routine-templates/src/__tests__/seed.test.ts +16 -0
- package/payload/platform/lib/routine-templates/src/roster.ts +24 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +11 -12
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +11 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +6 -5
- package/payload/platform/plugins/docs/references/settings.md +4 -6
- package/payload/platform/plugins/email/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/email/PLUGIN.md +2 -2
- package/payload/platform/plugins/email/mcp/dist/__tests__/imap-drafts.test.js +45 -1
- package/payload/platform/plugins/email/mcp/dist/__tests__/imap-drafts.test.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/index.js +5 -4
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +6 -4
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js +42 -4
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-fetch-body.d.ts +2 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-fetch-body.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-fetch-body.js +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-fetch-body.js.map +1 -1
- package/payload/platform/plugins/email/references/email-reference.md +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js +40 -12
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +85 -63
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js +61 -3
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js +122 -2
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts +26 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js +73 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts +5 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.js +101 -8
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +13 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/output-style-audit.d.ts +42 -0
- package/payload/platform/services/claude-session-manager/dist/output-style-audit.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/output-style-audit.js +98 -0
- package/payload/platform/services/claude-session-manager/dist/output-style-audit.js.map +1 -0
- package/payload/platform/templates/output-styles/plain-assistant.md +50 -0
- package/payload/server/public/activity.html +6 -6
- package/payload/server/public/agents.html +5 -5
- package/payload/server/public/assets/{AdminLoginScreens-dBZJlMbp.js → AdminLoginScreens-B3W6J6Bl.js} +1 -1
- package/payload/server/public/assets/AdminLoginScreens-B3W6J6Bl.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-B3W6J6Bl.js.gz +0 -0
- package/payload/server/public/assets/{AdminShell-D94sgtsb.js → AdminShell-C3R-vMZ5.js} +1 -1
- package/payload/server/public/assets/AdminShell-C3R-vMZ5.js.br +0 -0
- package/payload/server/public/assets/AdminShell-C3R-vMZ5.js.gz +0 -0
- package/payload/server/public/assets/{activity-D6NEUvT7.js → activity-tzv68iBs.js} +1 -1
- package/payload/server/public/assets/activity-tzv68iBs.js.br +0 -0
- package/payload/server/public/assets/activity-tzv68iBs.js.gz +0 -0
- package/payload/server/public/assets/{admin-BluqXSKn.js → admin-CzW_9jm3.js} +1 -1
- package/payload/server/public/assets/admin-CzW_9jm3.js.br +0 -0
- package/payload/server/public/assets/admin-CzW_9jm3.js.gz +0 -0
- package/payload/server/public/assets/{agents-D_6V66dr.js → agents-DUZfeY3X.js} +1 -1
- package/payload/server/public/assets/agents-DUZfeY3X.js.br +0 -0
- package/payload/server/public/assets/agents-DUZfeY3X.js.gz +0 -0
- package/payload/server/public/assets/{browser-Bz9s6ztS.js → browser-DwLaXqjO.js} +1 -1
- package/payload/server/public/assets/browser-DwLaXqjO.js.br +0 -0
- package/payload/server/public/assets/browser-DwLaXqjO.js.gz +0 -0
- package/payload/server/public/assets/{calendar-D5OCrmwA.js → calendar-Cli8Qjl9.js} +1 -1
- package/payload/server/public/assets/calendar-Cli8Qjl9.js.br +0 -0
- package/payload/server/public/assets/calendar-Cli8Qjl9.js.gz +0 -0
- package/payload/server/public/assets/chat-ByAgBgm1.js +1 -0
- package/payload/server/public/assets/chat-ByAgBgm1.js.br +1 -0
- package/payload/server/public/assets/chat-ByAgBgm1.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-BIYVnwvk.js +1 -0
- package/payload/server/public/assets/chevron-left-BIYVnwvk.js.br +0 -0
- package/payload/server/public/assets/clock-Dzy79hq3.js +1 -0
- package/payload/server/public/assets/clock-Dzy79hq3.js.br +0 -0
- package/payload/server/public/assets/clock-Dzy79hq3.js.gz +0 -0
- package/payload/server/public/assets/{copy-CXBu2lHL.js → copy-yhhwfEbQ.js} +1 -1
- package/payload/server/public/assets/copy-yhhwfEbQ.js.br +0 -0
- package/payload/server/public/assets/copy-yhhwfEbQ.js.gz +0 -0
- package/payload/server/public/assets/data-CsMMki2A.js +1 -0
- package/payload/server/public/assets/data-CsMMki2A.js.br +0 -0
- package/payload/server/public/assets/data-CsMMki2A.js.gz +0 -0
- package/payload/server/public/assets/{field-D4fXu_SP.js → field-jg0YQNDy.js} +1 -1
- package/payload/server/public/assets/field-jg0YQNDy.js.br +0 -0
- package/payload/server/public/assets/field-jg0YQNDy.js.gz +0 -0
- package/payload/server/public/assets/{file-text-BxZ1UMcQ.js → file-text-D0EdW7h4.js} +1 -1
- package/payload/server/public/assets/file-text-D0EdW7h4.js.br +0 -0
- package/payload/server/public/assets/file-text-D0EdW7h4.js.gz +0 -0
- package/payload/server/public/assets/{graph-DMleOCBZ.js → graph--AUr4uBc.js} +1 -1
- package/payload/server/public/assets/graph--AUr4uBc.js.br +0 -0
- package/payload/server/public/assets/graph--AUr4uBc.js.gz +0 -0
- package/payload/server/public/assets/{graph-labels-BHapdrTm.js → graph-labels-DM0CiAX1.js} +1 -1
- package/payload/server/public/assets/graph-labels-DM0CiAX1.js.br +0 -0
- package/payload/server/public/assets/graph-labels-DM0CiAX1.js.gz +0 -0
- package/payload/server/public/assets/{jsx-runtime-gqFnq1MC.css → jsx-runtime-lfcjzaWi.css} +1 -1
- package/payload/server/public/assets/jsx-runtime-lfcjzaWi.css.br +0 -0
- package/payload/server/public/assets/{jsx-runtime-gqFnq1MC.css.gz → jsx-runtime-lfcjzaWi.css.gz} +0 -0
- package/payload/server/public/assets/{operator-BpZTRiga.js → operator-CNYKStFX.js} +1 -1
- package/payload/server/public/assets/operator-CNYKStFX.js.br +0 -0
- package/payload/server/public/assets/operator-CNYKStFX.js.gz +0 -0
- package/payload/server/public/assets/{page-CsHWZZ0U.js → page-DSsEpl8J.js} +2 -2
- package/payload/server/public/assets/page-DSsEpl8J.js.br +0 -0
- package/payload/server/public/assets/page-DSsEpl8J.js.gz +0 -0
- package/payload/server/public/assets/{page-Dczx6CPP.js → page-DjhmwxnY.js} +1 -1
- package/payload/server/public/assets/page-DjhmwxnY.js.br +0 -0
- package/payload/server/public/assets/page-DjhmwxnY.js.gz +0 -0
- package/payload/server/public/assets/play-DhZlml5b.js +1 -0
- package/payload/server/public/assets/play-DhZlml5b.js.br +0 -0
- package/payload/server/public/assets/play-DhZlml5b.js.gz +0 -0
- package/payload/server/public/assets/{public-BzpELWaZ.js → public-7gXDqCog.js} +1 -1
- package/payload/server/public/assets/public-7gXDqCog.js.br +0 -0
- package/payload/server/public/assets/public-7gXDqCog.js.gz +0 -0
- package/payload/server/public/assets/{rotate-ccw-Bkpst1na.js → rotate-ccw-DhqNTPpo.js} +1 -1
- package/payload/server/public/assets/rotate-ccw-DhqNTPpo.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-DhqNTPpo.js.gz +0 -0
- package/payload/server/public/assets/{routines-Cmuf8pPP.js → routines-CWEuQ7Gl.js} +1 -1
- package/payload/server/public/assets/routines-CWEuQ7Gl.js.br +0 -0
- package/payload/server/public/assets/routines-CWEuQ7Gl.js.gz +0 -0
- package/payload/server/public/assets/{skills-Bfq3Pbw-.js → skills-pb_3BdOl.js} +1 -1
- package/payload/server/public/assets/skills-pb_3BdOl.js.br +0 -0
- package/payload/server/public/assets/skills-pb_3BdOl.js.gz +0 -0
- package/payload/server/public/assets/{tasks-nyWLrolq.js → tasks-BQm4boat.js} +1 -1
- package/payload/server/public/assets/tasks-BQm4boat.js.br +0 -0
- package/payload/server/public/assets/tasks-BQm4boat.js.gz +0 -0
- package/payload/server/public/assets/{triangle-alert-DkENIQJ6.js → triangle-alert-d7yjaIqv.js} +1 -1
- package/payload/server/public/assets/triangle-alert-d7yjaIqv.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-d7yjaIqv.js.gz +0 -0
- package/payload/server/public/assets/{useCopyFeedback-DmNjbXe9.js → useCopyFeedback-CZ6Qhfkj.js} +1 -1
- package/payload/server/public/assets/useCopyFeedback-CZ6Qhfkj.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-CZ6Qhfkj.js.gz +0 -0
- package/payload/server/public/assets/{useMediaQuery-DL-C1y_F.js → useMediaQuery-R1smYLx4.js} +1 -1
- package/payload/server/public/assets/useMediaQuery-R1smYLx4.js.br +0 -0
- package/payload/server/public/assets/useMediaQuery-R1smYLx4.js.gz +0 -0
- package/payload/server/public/assets/{useVoiceRecorder-DseLVULD.js → useVoiceRecorder-DM1v6sRa.js} +1 -1
- package/payload/server/public/assets/useVoiceRecorder-DM1v6sRa.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-DM1v6sRa.js.gz +0 -0
- package/payload/server/public/assets/{wrench-C7tdp6z9.js → wrench-DL1pbaCs.js} +1 -1
- package/payload/server/public/assets/wrench-DL1pbaCs.js.br +0 -0
- package/payload/server/public/assets/wrench-DL1pbaCs.js.gz +0 -0
- package/payload/server/public/browser.html +5 -5
- package/payload/server/public/calendar.html +8 -8
- package/payload/server/public/chat.html +14 -14
- package/payload/server/public/data.html +12 -12
- package/payload/server/public/field.html +3 -3
- package/payload/server/public/graph.html +10 -10
- package/payload/server/public/index.html +14 -14
- package/payload/server/public/operator.html +16 -16
- package/payload/server/public/public.html +14 -14
- package/payload/server/public/routines.html +8 -8
- package/payload/server/public/skills.html +6 -6
- package/payload/server/public/tasks.html +7 -7
- package/payload/server/server.js +140 -6
- package/payload/server/public/assets/AdminLoginScreens-dBZJlMbp.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-dBZJlMbp.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-D94sgtsb.js.br +0 -0
- package/payload/server/public/assets/AdminShell-D94sgtsb.js.gz +0 -0
- package/payload/server/public/assets/activity-D6NEUvT7.js.br +0 -0
- package/payload/server/public/assets/activity-D6NEUvT7.js.gz +0 -0
- package/payload/server/public/assets/admin-BluqXSKn.js.br +0 -0
- package/payload/server/public/assets/admin-BluqXSKn.js.gz +0 -0
- package/payload/server/public/assets/agents-D_6V66dr.js.br +0 -0
- package/payload/server/public/assets/agents-D_6V66dr.js.gz +0 -0
- package/payload/server/public/assets/browser-Bz9s6ztS.js.br +0 -0
- package/payload/server/public/assets/browser-Bz9s6ztS.js.gz +0 -0
- package/payload/server/public/assets/calendar-D5OCrmwA.js.br +0 -0
- package/payload/server/public/assets/calendar-D5OCrmwA.js.gz +0 -0
- package/payload/server/public/assets/chat-CjlbEzZ-.js +0 -1
- package/payload/server/public/assets/chat-CjlbEzZ-.js.br +0 -1
- package/payload/server/public/assets/chat-CjlbEzZ-.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-b_r2jNvg.js +0 -1
- package/payload/server/public/assets/chevron-left-b_r2jNvg.js.br +0 -0
- package/payload/server/public/assets/clock-D8tMbEZD.js +0 -1
- package/payload/server/public/assets/clock-D8tMbEZD.js.br +0 -0
- package/payload/server/public/assets/clock-D8tMbEZD.js.gz +0 -0
- package/payload/server/public/assets/copy-CXBu2lHL.js.br +0 -0
- package/payload/server/public/assets/copy-CXBu2lHL.js.gz +0 -0
- package/payload/server/public/assets/data-ChHg_Lq9.js +0 -1
- package/payload/server/public/assets/data-ChHg_Lq9.js.br +0 -0
- package/payload/server/public/assets/data-ChHg_Lq9.js.gz +0 -0
- package/payload/server/public/assets/field-D4fXu_SP.js.br +0 -0
- package/payload/server/public/assets/field-D4fXu_SP.js.gz +0 -0
- package/payload/server/public/assets/file-text-BxZ1UMcQ.js.br +0 -0
- package/payload/server/public/assets/file-text-BxZ1UMcQ.js.gz +0 -0
- package/payload/server/public/assets/graph-DMleOCBZ.js.br +0 -0
- package/payload/server/public/assets/graph-DMleOCBZ.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-BHapdrTm.js.br +0 -0
- package/payload/server/public/assets/graph-labels-BHapdrTm.js.gz +0 -0
- package/payload/server/public/assets/jsx-runtime-gqFnq1MC.css.br +0 -0
- package/payload/server/public/assets/operator-BpZTRiga.js.br +0 -0
- package/payload/server/public/assets/operator-BpZTRiga.js.gz +0 -0
- package/payload/server/public/assets/page-CsHWZZ0U.js.br +0 -0
- package/payload/server/public/assets/page-CsHWZZ0U.js.gz +0 -0
- package/payload/server/public/assets/page-Dczx6CPP.js.br +0 -0
- package/payload/server/public/assets/page-Dczx6CPP.js.gz +0 -0
- package/payload/server/public/assets/play-D_xdb6gy.js +0 -1
- package/payload/server/public/assets/play-D_xdb6gy.js.br +0 -0
- package/payload/server/public/assets/play-D_xdb6gy.js.gz +0 -0
- package/payload/server/public/assets/public-BzpELWaZ.js.br +0 -0
- package/payload/server/public/assets/public-BzpELWaZ.js.gz +0 -0
- package/payload/server/public/assets/rotate-ccw-Bkpst1na.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-Bkpst1na.js.gz +0 -0
- package/payload/server/public/assets/routines-Cmuf8pPP.js.br +0 -0
- package/payload/server/public/assets/routines-Cmuf8pPP.js.gz +0 -0
- package/payload/server/public/assets/skills-Bfq3Pbw-.js.br +0 -0
- package/payload/server/public/assets/skills-Bfq3Pbw-.js.gz +0 -0
- package/payload/server/public/assets/tasks-nyWLrolq.js.br +0 -0
- package/payload/server/public/assets/tasks-nyWLrolq.js.gz +0 -0
- package/payload/server/public/assets/triangle-alert-DkENIQJ6.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-DkENIQJ6.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-DmNjbXe9.js.br +0 -1
- package/payload/server/public/assets/useCopyFeedback-DmNjbXe9.js.gz +0 -0
- package/payload/server/public/assets/useMediaQuery-DL-C1y_F.js.br +0 -0
- package/payload/server/public/assets/useMediaQuery-DL-C1y_F.js.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-DseLVULD.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-DseLVULD.js.gz +0 -0
- package/payload/server/public/assets/wrench-C7tdp6z9.js.br +0 -0
- package/payload/server/public/assets/wrench-C7tdp6z9.js.gz +0 -0
- /package/payload/server/public/assets/{jsx-runtime-BcrVQeV-.js → jsx-runtime-BtDK2X5t.js} +0 -0
- /package/payload/server/public/assets/{jsx-runtime-BcrVQeV-.js.br → jsx-runtime-BtDK2X5t.js.br} +0 -0
- /package/payload/server/public/assets/{jsx-runtime-BcrVQeV-.js.gz → jsx-runtime-BtDK2X5t.js.gz} +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { describe, expect, it, beforeEach } from "vitest";
|
|
1
|
+
import { describe, expect, it, beforeEach, afterEach } from "vitest";
|
|
2
2
|
import { mkdtempSync, mkdirSync, writeFileSync, readFileSync } from "node:fs";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { telegramCard } from "../tools/card.js";
|
|
6
6
|
import { runPinned } from "../lib/public-pin.js";
|
|
7
7
|
import { cardKey, readCardId } from "../lib/card-store.js";
|
|
8
|
-
import { resolveAccountDir } from "../lib/account-write.js";
|
|
8
|
+
import { resolveAccountDir, resolveTelegramStoreDir } from "../lib/account-write.js";
|
|
9
9
|
import { buttonLabelKey, readButtonLabel, } from "../../../../../lib/telegram-button-labels/dist/index.js";
|
|
10
|
+
import { channelKeyToFileStem } from "../../../../../lib/telegram-reach/dist/index.js";
|
|
10
11
|
const ACC = "acc-1";
|
|
11
12
|
const BOT = "111";
|
|
12
13
|
let platformRoot;
|
|
@@ -41,7 +42,26 @@ const notModified = {
|
|
|
41
42
|
beforeEach(() => {
|
|
42
43
|
platformRoot = install();
|
|
43
44
|
lines = [];
|
|
45
|
+
// Task 2677 — burial reads the Telegram message store under telegramStoreRoot,
|
|
46
|
+
// which honours MAXY_DIR_OVERRIDE. Point every test at a fresh temp dir so a
|
|
47
|
+
// burial check reads an empty store (buried=false, behaviour unchanged) rather
|
|
48
|
+
// than the real home, and so the burial tests below seed into a known place.
|
|
49
|
+
process.env.MAXY_DIR_OVERRIDE = mkdtempSync(join(tmpdir(), "tg-store-"));
|
|
44
50
|
});
|
|
51
|
+
afterEach(() => {
|
|
52
|
+
delete process.env.MAXY_DIR_OVERRIDE;
|
|
53
|
+
});
|
|
54
|
+
/** Seed one inbound row into the message store the burial check reads, through
|
|
55
|
+
* the SAME resolver the check uses so the fixture and the reader agree on the
|
|
56
|
+
* path. */
|
|
57
|
+
function seedInbound(chatId, telegramMessageId) {
|
|
58
|
+
const resolved = resolveTelegramStoreDir(platformRoot, ACC);
|
|
59
|
+
if (!resolved.ok)
|
|
60
|
+
throw new Error(resolved.error);
|
|
61
|
+
mkdirSync(resolved.dir, { recursive: true });
|
|
62
|
+
const file = join(resolved.dir, `${channelKeyToFileStem(`${BOT}:${chatId}`)}.jsonl`);
|
|
63
|
+
writeFileSync(file, JSON.stringify({ messageId: `telegram:${ACC}:${BOT}:${chatId}:in:${telegramMessageId}`, body: "hi" }) + "\n", "utf-8");
|
|
64
|
+
}
|
|
45
65
|
function deps(fetchImpl) {
|
|
46
66
|
return {
|
|
47
67
|
platformRoot,
|
|
@@ -351,6 +371,106 @@ describe("telegramCard — the outbound chat gate (Task 2617)", () => {
|
|
|
351
371
|
expect(calls).toEqual([]);
|
|
352
372
|
});
|
|
353
373
|
});
|
|
374
|
+
// Task 2677 — the message id and outcome the follower parses out of result.text
|
|
375
|
+
// to write the operator-surface store row. runPinned forwards only result.text,
|
|
376
|
+
// so the token IS the only channel these cross the process boundary on.
|
|
377
|
+
describe("telegramCard — result message id and card-result token (Task 2677)", () => {
|
|
378
|
+
it("returns the sent message id and appends the card-result token", async () => {
|
|
379
|
+
const { fetchImpl } = recorder([sent(4242)]);
|
|
380
|
+
const out = await telegramCard({ botId: BOT, chatId: 222, text: "hi" }, deps(fetchImpl));
|
|
381
|
+
expect(out.outcome).toBe("sent");
|
|
382
|
+
expect(out.messageId).toBe(4242);
|
|
383
|
+
expect(out.text).toMatch(/card-result: outcome=sent messageId=4242$/);
|
|
384
|
+
});
|
|
385
|
+
it("carries the reused id on an edit", async () => {
|
|
386
|
+
const first = recorder([sent(500)]);
|
|
387
|
+
await telegramCard({ botId: BOT, chatId: 222, key: "j", text: "one" }, deps(first.fetchImpl));
|
|
388
|
+
const second = recorder([sent(500)]);
|
|
389
|
+
const out = await telegramCard({ botId: BOT, chatId: 222, key: "j", text: "two" }, deps(second.fetchImpl));
|
|
390
|
+
expect(out.outcome).toBe("edited");
|
|
391
|
+
expect(out.messageId).toBe(500);
|
|
392
|
+
expect(out.text).toMatch(/card-result: outcome=edited messageId=500$/);
|
|
393
|
+
});
|
|
394
|
+
it("emits messageId=none and no id on a refused send", async () => {
|
|
395
|
+
const { fetchImpl } = recorder([
|
|
396
|
+
{ ok: false, error_code: 403, description: "Forbidden: bot was blocked by the user" },
|
|
397
|
+
]);
|
|
398
|
+
const out = await telegramCard({ botId: BOT, chatId: 222, text: "hi" }, deps(fetchImpl));
|
|
399
|
+
expect(out.outcome).toBe("none");
|
|
400
|
+
expect(out.messageId).toBeUndefined();
|
|
401
|
+
expect(out.text).toMatch(/card-result: outcome=none messageId=none$/);
|
|
402
|
+
});
|
|
403
|
+
it("does not append a token when the card never reached Telegram (unknown bot)", async () => {
|
|
404
|
+
const { fetchImpl } = recorder([]);
|
|
405
|
+
const out = await telegramCard({ botId: "999", chatId: 222, text: "hi" }, deps(fetchImpl));
|
|
406
|
+
expect(out.text).not.toContain("card-result:");
|
|
407
|
+
});
|
|
408
|
+
});
|
|
409
|
+
// Task 2677 — a keyed card whose stored id sits below the chat's newest inbound id
|
|
410
|
+
// is buried above the customer's later messages, so it is deleted and reposted at
|
|
411
|
+
// the bottom. A refused delete falls back to edit-in-place.
|
|
412
|
+
describe("telegramCard — buried-card repost (Task 2677)", () => {
|
|
413
|
+
it("reposts a buried keyed card: delete old, send new, re-store the new id", async () => {
|
|
414
|
+
const first = recorder([sent(100)]);
|
|
415
|
+
await telegramCard({ botId: BOT, chatId: 222, key: "k", text: "v1" }, deps(first.fetchImpl));
|
|
416
|
+
seedInbound(222, 150); // the customer wrote after the card (150 > 100)
|
|
417
|
+
const second = recorder([{ ok: true, result: true }, sent(200)]); // deleteMessage ok, then sendMessage
|
|
418
|
+
const out = await telegramCard({ botId: BOT, chatId: 222, key: "k", text: "v2" }, deps(second.fetchImpl));
|
|
419
|
+
expect(second.calls.map((c) => c.method)).toEqual(["deleteMessage", "sendMessage"]);
|
|
420
|
+
expect(second.calls[0]?.body).toMatchObject({ chat_id: 222, message_id: 100 });
|
|
421
|
+
expect(out.outcome).toBe("sent");
|
|
422
|
+
expect(out.messageId).toBe(200);
|
|
423
|
+
expect(readCardId(platformRoot, ACC, cardKey(BOT, 222, "k"))).toBe(200);
|
|
424
|
+
expect(lines.join("\n")).toContain("op=card-position callId=abcd1234 cardId=100 newestInboundId=150 buried=true");
|
|
425
|
+
});
|
|
426
|
+
it("edits in place when the card is still at the bottom", async () => {
|
|
427
|
+
const first = recorder([sent(100)]);
|
|
428
|
+
await telegramCard({ botId: BOT, chatId: 222, key: "k", text: "v1" }, deps(first.fetchImpl));
|
|
429
|
+
seedInbound(222, 50); // an older inbound; the card (100) is below it
|
|
430
|
+
const second = recorder([sent(100)]);
|
|
431
|
+
const out = await telegramCard({ botId: BOT, chatId: 222, key: "k", text: "v2" }, deps(second.fetchImpl));
|
|
432
|
+
expect(second.calls.map((c) => c.method)).toEqual(["editMessageText"]);
|
|
433
|
+
expect(out.outcome).toBe("edited");
|
|
434
|
+
expect(lines.join("\n")).toContain("buried=false");
|
|
435
|
+
});
|
|
436
|
+
it("falls back to edit-in-place when the delete is refused", async () => {
|
|
437
|
+
const first = recorder([sent(100)]);
|
|
438
|
+
await telegramCard({ botId: BOT, chatId: 222, key: "k", text: "v1" }, deps(first.fetchImpl));
|
|
439
|
+
seedInbound(222, 150);
|
|
440
|
+
const second = recorder([
|
|
441
|
+
{ ok: false, error_code: 400, description: "Bad Request: message can't be deleted for everyone" },
|
|
442
|
+
sent(100),
|
|
443
|
+
]);
|
|
444
|
+
const out = await telegramCard({ botId: BOT, chatId: 222, key: "k", text: "v2" }, deps(second.fetchImpl));
|
|
445
|
+
expect(second.calls.map((c) => c.method)).toEqual(["deleteMessage", "editMessageText"]);
|
|
446
|
+
expect(out.outcome).toBe("edited");
|
|
447
|
+
expect(lines.join("\n")).toContain("op=card-repost callId=abcd1234 cardId=100 deleteOk=false fallback=true");
|
|
448
|
+
});
|
|
449
|
+
it("never checks burial for a keyless card (always a fresh send)", async () => {
|
|
450
|
+
seedInbound(222, 150);
|
|
451
|
+
const rec = recorder([sent(1)]);
|
|
452
|
+
await telegramCard({ botId: BOT, chatId: 222, text: "one-off" }, deps(rec.fetchImpl));
|
|
453
|
+
expect(rec.calls.map((c) => c.method)).toEqual(["sendMessage"]);
|
|
454
|
+
expect(lines.join("\n")).not.toContain("op=card-position");
|
|
455
|
+
});
|
|
456
|
+
it("forgets the key when a repost deletes the old card but the fresh send is refused", async () => {
|
|
457
|
+
const first = recorder([sent(100)]);
|
|
458
|
+
await telegramCard({ botId: BOT, chatId: 222, key: "k", text: "v1" }, deps(first.fetchImpl));
|
|
459
|
+
seedInbound(222, 150);
|
|
460
|
+
// deleteMessage ok, then the fresh sendMessage is refused.
|
|
461
|
+
const second = recorder([
|
|
462
|
+
{ ok: true, result: true },
|
|
463
|
+
{ ok: false, error_code: 403, description: "Forbidden: bot was blocked by the user" },
|
|
464
|
+
]);
|
|
465
|
+
const out = await telegramCard({ botId: BOT, chatId: 222, key: "k", text: "v2" }, deps(second.fetchImpl));
|
|
466
|
+
expect(second.calls.map((c) => c.method)).toEqual(["deleteMessage", "sendMessage"]);
|
|
467
|
+
expect(out.outcome).toBe("none");
|
|
468
|
+
// The old card is gone and the send failed, so the dead id is forgotten: a
|
|
469
|
+
// later keyed call posts fresh rather than editing a deleted message.
|
|
470
|
+
expect(readCardId(platformRoot, ACC, cardKey(BOT, 222, "k"))).toBeNull();
|
|
471
|
+
expect(lines.join("\n")).toContain("op=card-repost-orphan callId=abcd1234 cardId=100 reason=send-refused");
|
|
472
|
+
});
|
|
473
|
+
});
|
|
354
474
|
// Task 2666 — the pin reaches Telegram, asserted through `runPinned` because
|
|
355
475
|
// that chokepoint is what applies it; the tool itself never calls the pin.
|
|
356
476
|
// The bot axis is asserted by naming an UNREGISTERED bot: unpinned that is the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-tool.test.js","sourceRoot":"","sources":["../../src/__tests__/card-tool.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"card-tool.test.js","sourceRoot":"","sources":["../../src/__tests__/card-tool.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,12 @@ export declare function readCardId(platformRoot: string, accountId: string, k: s
|
|
|
17
17
|
* schedule. Every surviving key keeps its own id and timestamp, the same promise
|
|
18
18
|
* persistTelegramBot makes for bot entries. */
|
|
19
19
|
export declare function writeCardId(platformRoot: string, accountId: string, k: string, messageId: number, now?: number): void;
|
|
20
|
+
/** Task 2677 — forget the id this key names, so the next keyed call posts a fresh
|
|
21
|
+
* card instead of editing a message that no longer exists. Used when a buried
|
|
22
|
+
* repost deleted the old card but the follow-up send failed: the chat has no card
|
|
23
|
+
* and the stored id is dead, so keeping it would edit-not-found on every later
|
|
24
|
+
* call. A no-op when the key is absent or the account dir escapes the install. */
|
|
25
|
+
export declare function clearCardId(platformRoot: string, accountId: string, k: string): void;
|
|
20
26
|
export declare const CARD_CENSUS_TAG = "[telegram-card-census]";
|
|
21
27
|
/** The standing check for this store, emitted once at MCP boot.
|
|
22
28
|
*
|
|
@@ -57,4 +63,24 @@ export declare const CARD_CENSUS_TAG = "[telegram-card-census]";
|
|
|
57
63
|
* one account's. Per-account attribution would need an accountId on the
|
|
58
64
|
* `op=card` and `op=delivered` lines, which neither carries today. */
|
|
59
65
|
export declare function cardCensusLine(platformRoot: string, accountId: string | undefined, logDir?: string): string;
|
|
66
|
+
/** Task 2677 — the newest Telegram message id among stored INBOUND rows for this
|
|
67
|
+
* bot+chat, or null when the store file is absent or holds no numeric inbound id.
|
|
68
|
+
*
|
|
69
|
+
* Reads the SAME message store the UI inbound route writes, resolved through
|
|
70
|
+
* `resolveTelegramStoreDir` — the Task 2644-unified `telegramStoreRoot` path, so
|
|
71
|
+
* this reader cannot name a directory the writer does not. That is why no cursor
|
|
72
|
+
* file is needed: the burial input already exists on disk.
|
|
73
|
+
*
|
|
74
|
+
* The inbound row's id key is `…:in:<telegramMessageId>` (routes/telegram.ts),
|
|
75
|
+
* optionally suffixed `:edit:<date>` for an edited message. Only a purely numeric
|
|
76
|
+
* suffix is a real Telegram id and comparable to a card id; a `:in:<ISO>` fallback
|
|
77
|
+
* (an update with no message id) is skipped. The `:edit:` suffix is ignored — it
|
|
78
|
+
* is still the same message.
|
|
79
|
+
*
|
|
80
|
+
* The channel key is `${botId}:${chatId}`, correct for a DM and a group (the store
|
|
81
|
+
* subject is the chat for a group and the sender for a DM, and a DM's sender id
|
|
82
|
+
* equals its chat id). A business chat's `:biz:` key is not read here; burial
|
|
83
|
+
* callers pass a non-business chat. Never throws: a read failure returns whatever
|
|
84
|
+
* was found so far, because a burial check must never take the card send down. */
|
|
85
|
+
export declare function newestInboundMessageId(platformRoot: string, accountId: string, botId: string, chatId: string | number): number | null;
|
|
60
86
|
//# sourceMappingURL=card-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-store.d.ts","sourceRoot":"","sources":["../../src/lib/card-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"card-store.d.ts","sourceRoot":"","sources":["../../src/lib/card-store.ts"],"names":[],"mappings":"AAaA;;eAEe;AACf,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnF;AAOD;;;mFAGmF;AACnF,eAAO,MAAM,WAAW,QAA0B,CAAC;AAwCnD;;2EAE2E;AAC3E,wBAAgB,UAAU,CACxB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,MAAM,EACT,GAAG,GAAE,MAAmB,GACvB,MAAM,GAAG,IAAI,CAMf;AAED;;;;gDAIgD;AAChD,wBAAgB,WAAW,CACzB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,MAAM,EACT,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAmB,GACvB,IAAI,CASN;AAED;;;;mFAImF;AACnF,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAOpF;AAED,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEAqCuE;AACvE,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAgBR;AAED;;;;;;;;;;;;;;;;;;mFAkBmF;AACnF,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GAAG,MAAM,GACtB,MAAM,GAAG,IAAI,CA2Bf"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { existsSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { resolveAccountDir } from "./account-write.js";
|
|
3
|
+
import { resolveAccountDir, resolveTelegramStoreDir } from "./account-write.js";
|
|
4
4
|
import { cardRatioFromLogs } from "./card-ratio.js";
|
|
5
|
+
import { channelKeyToFileStem, isStorableChannelKey, } from "../../../../../lib/telegram-reach/dist/index.js";
|
|
5
6
|
/** Runtime state, so a file of its own rather than a key inside account.json,
|
|
6
7
|
* which holds configuration. Same directory, same brand containment. */
|
|
7
8
|
const FILE = "telegram-cards.json";
|
|
@@ -81,6 +82,21 @@ export function writeCardId(platformRoot, accountId, k, messageId, now = Date.no
|
|
|
81
82
|
kept[k] = { id: messageId, at: now };
|
|
82
83
|
writeFileSync(path, JSON.stringify(kept, null, 2) + "\n", "utf-8");
|
|
83
84
|
}
|
|
85
|
+
/** Task 2677 — forget the id this key names, so the next keyed call posts a fresh
|
|
86
|
+
* card instead of editing a message that no longer exists. Used when a buried
|
|
87
|
+
* repost deleted the old card but the follow-up send failed: the chat has no card
|
|
88
|
+
* and the stored id is dead, so keeping it would edit-not-found on every later
|
|
89
|
+
* call. A no-op when the key is absent or the account dir escapes the install. */
|
|
90
|
+
export function clearCardId(platformRoot, accountId, k) {
|
|
91
|
+
const path = storePath(platformRoot, accountId);
|
|
92
|
+
if (!path || !existsSync(path))
|
|
93
|
+
return;
|
|
94
|
+
const all = readAll(path);
|
|
95
|
+
if (!(k in all))
|
|
96
|
+
return;
|
|
97
|
+
delete all[k];
|
|
98
|
+
writeFileSync(path, JSON.stringify(all, null, 2) + "\n", "utf-8");
|
|
99
|
+
}
|
|
84
100
|
export const CARD_CENSUS_TAG = "[telegram-card-census]";
|
|
85
101
|
/** The standing check for this store, emitted once at MCP boot.
|
|
86
102
|
*
|
|
@@ -138,4 +154,60 @@ export function cardCensusLine(platformRoot, accountId, logDir) {
|
|
|
138
154
|
const ratio = cardRatioFromLogs(logDir);
|
|
139
155
|
return `${CARD_CENSUS_TAG} keys=${keys} bytes=${bytes} cardsWithButtons=${ratio.cardsWithButtons} turns=${ratio.turns}`;
|
|
140
156
|
}
|
|
157
|
+
/** Task 2677 — the newest Telegram message id among stored INBOUND rows for this
|
|
158
|
+
* bot+chat, or null when the store file is absent or holds no numeric inbound id.
|
|
159
|
+
*
|
|
160
|
+
* Reads the SAME message store the UI inbound route writes, resolved through
|
|
161
|
+
* `resolveTelegramStoreDir` — the Task 2644-unified `telegramStoreRoot` path, so
|
|
162
|
+
* this reader cannot name a directory the writer does not. That is why no cursor
|
|
163
|
+
* file is needed: the burial input already exists on disk.
|
|
164
|
+
*
|
|
165
|
+
* The inbound row's id key is `…:in:<telegramMessageId>` (routes/telegram.ts),
|
|
166
|
+
* optionally suffixed `:edit:<date>` for an edited message. Only a purely numeric
|
|
167
|
+
* suffix is a real Telegram id and comparable to a card id; a `:in:<ISO>` fallback
|
|
168
|
+
* (an update with no message id) is skipped. The `:edit:` suffix is ignored — it
|
|
169
|
+
* is still the same message.
|
|
170
|
+
*
|
|
171
|
+
* The channel key is `${botId}:${chatId}`, correct for a DM and a group (the store
|
|
172
|
+
* subject is the chat for a group and the sender for a DM, and a DM's sender id
|
|
173
|
+
* equals its chat id). A business chat's `:biz:` key is not read here; burial
|
|
174
|
+
* callers pass a non-business chat. Never throws: a read failure returns whatever
|
|
175
|
+
* was found so far, because a burial check must never take the card send down. */
|
|
176
|
+
export function newestInboundMessageId(platformRoot, accountId, botId, chatId) {
|
|
177
|
+
const resolved = resolveTelegramStoreDir(platformRoot, accountId);
|
|
178
|
+
if (!resolved.ok)
|
|
179
|
+
return null;
|
|
180
|
+
const channelKey = `${botId}:${chatId}`;
|
|
181
|
+
if (!isStorableChannelKey(channelKey))
|
|
182
|
+
return null;
|
|
183
|
+
const file = join(resolved.dir, `${channelKeyToFileStem(channelKey)}.jsonl`);
|
|
184
|
+
if (!existsSync(file))
|
|
185
|
+
return null;
|
|
186
|
+
let newest = null;
|
|
187
|
+
try {
|
|
188
|
+
for (const line of readFileSync(file, "utf-8").split("\n")) {
|
|
189
|
+
if (!line.trim())
|
|
190
|
+
continue;
|
|
191
|
+
let mid;
|
|
192
|
+
try {
|
|
193
|
+
mid = JSON.parse(line).messageId;
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (typeof mid !== "string")
|
|
199
|
+
continue;
|
|
200
|
+
const m = /:in:(\d+)(?::|$)/.exec(mid);
|
|
201
|
+
if (!m)
|
|
202
|
+
continue;
|
|
203
|
+
const id = Number(m[1]);
|
|
204
|
+
if (Number.isFinite(id) && (newest === null || id > newest))
|
|
205
|
+
newest = id;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return newest;
|
|
210
|
+
}
|
|
211
|
+
return newest;
|
|
212
|
+
}
|
|
141
213
|
//# sourceMappingURL=card-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-store.js","sourceRoot":"","sources":["../../src/lib/card-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"card-store.js","sourceRoot":"","sources":["../../src/lib/card-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,11 @@ export interface CardResult {
|
|
|
35
35
|
text: string;
|
|
36
36
|
isError: boolean;
|
|
37
37
|
outcome: "sent" | "edited" | "unchanged" | "none";
|
|
38
|
+
/** Task 2677 — the Telegram message id this card now lives at: the new id on a
|
|
39
|
+
* send or repost, the reused id on an edit. Absent on every path that never
|
|
40
|
+
* reached Telegram. Encoded into `text` too (the follower reads only `text`
|
|
41
|
+
* back off the session JSONL), so the two must always agree. */
|
|
42
|
+
messageId?: number;
|
|
38
43
|
}
|
|
39
44
|
/** Post a card, or edit the one this key already names.
|
|
40
45
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/tools/card.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAuB,KAAK,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAmBzF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;IAC/C,OAAO,CAAC,EAAE,yBAAyB,EAAE,EAAE,CAAC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;0EAKsE;IACtE,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf;;6EAEyE;IACzE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/tools/card.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAuB,KAAK,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAmBzF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;IAC/C,OAAO,CAAC,EAAE,yBAAyB,EAAE,EAAE,CAAC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;0EAKsE;IACtE,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf;;6EAEyE;IACzE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IAClD;;;qEAGiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD;;;;;gCAKgC;AAChC,wBAAsB,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAqTrF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { callBotApi } from "../lib/bot-api.js";
|
|
2
2
|
import { listRegisteredBots, resolveBotToken } from "../lib/account-token.js";
|
|
3
3
|
import { buildInlineKeyboard } from "../lib/telegram.js";
|
|
4
|
-
import { cardKey, readCardId, writeCardId } from "../lib/card-store.js";
|
|
4
|
+
import { cardKey, clearCardId, newestInboundMessageId, readCardId, writeCardId } from "../lib/card-store.js";
|
|
5
5
|
import { resolveAccountDir } from "../lib/account-write.js";
|
|
6
6
|
import { buttonLabelKey, writeButtonLabels, } from "../../../../../lib/telegram-button-labels/dist/index.js";
|
|
7
7
|
import { gateChatSend } from "../lib/chat-send-policy.js";
|
|
@@ -9,6 +9,16 @@ import { readBusinessConnection } from "../lib/business-connection-store.js";
|
|
|
9
9
|
import { businessChannelKey, newestInboundTelegramDate, businessWindowVerdict, businessWindowRefusal, } from "../lib/business-window-store.js";
|
|
10
10
|
const TAG = "[telegram-tools]";
|
|
11
11
|
const TOOL = "telegram-card";
|
|
12
|
+
/** Task 2677 — the machine-readable trailer the native follower parses out of the
|
|
13
|
+
* card's `tool_result` text to write the operator-surface store row. `runPinned`
|
|
14
|
+
* forwards only `result.text`, so this line IS the only channel the message id and
|
|
15
|
+
* the outcome cross the plugin→ui process boundary on. Appended only on the
|
|
16
|
+
* post-send returns; every early return (no account, no bot, gate/window refusal,
|
|
17
|
+
* network throw) omits it, so the follower writes no row for a card that never
|
|
18
|
+
* reached Telegram. Grammar is fixed and mirrored by the follower's parser. */
|
|
19
|
+
function cardResultToken(outcome, messageId) {
|
|
20
|
+
return `card-result: outcome=${outcome} messageId=${messageId ?? "none"}`;
|
|
21
|
+
}
|
|
12
22
|
/** Telegram's answer when the new text and markup match the old. It is a no-op,
|
|
13
23
|
* not a failure to retry, and an idempotent card re-post is the normal case
|
|
14
24
|
* rather than an error. This is the ONE place this plugin does not relay
|
|
@@ -111,8 +121,53 @@ export async function telegramCard(p, deps) {
|
|
|
111
121
|
...(markup ? { reply_markup: markup } : {}),
|
|
112
122
|
...(p.disablePreview ? { link_preview_options: { is_disabled: true } } : {}),
|
|
113
123
|
};
|
|
114
|
-
|
|
115
|
-
|
|
124
|
+
// Task 2677 — a keyed non-business card whose stored id sits below the chat's
|
|
125
|
+
// newest inbound id is buried above the customer's later messages. Delete it and
|
|
126
|
+
// post fresh so it returns to the bottom; a refused delete (Telegram's ~48h
|
|
127
|
+
// window) falls back to edit-in-place. Keyless cards never reach here (`stored`
|
|
128
|
+
// is null) and business cards are excluded — a business chat's own reply window
|
|
129
|
+
// governs its edits, and a delete+repost there is different semantics.
|
|
130
|
+
let buried = false;
|
|
131
|
+
if (stored !== null && !connectionId) {
|
|
132
|
+
const newestInbound = newestInboundMessageId(deps.platformRoot, deps.accountId, p.botId, p.chatId);
|
|
133
|
+
buried = newestInbound !== null && newestInbound > stored;
|
|
134
|
+
log(`${TAG} op=card-position callId=${callId} cardId=${stored} ` +
|
|
135
|
+
`newestInboundId=${newestInbound ?? "none"} buried=${buried}`);
|
|
136
|
+
}
|
|
137
|
+
let method;
|
|
138
|
+
let body;
|
|
139
|
+
// Task 2677 — true once the old card has been deleted and a fresh send is in
|
|
140
|
+
// flight. If that send then fails, the chat has no card and the stored id is
|
|
141
|
+
// dead, so the key is cleared below rather than left to edit-not-found forever.
|
|
142
|
+
let deletedOld = false;
|
|
143
|
+
if (stored === null) {
|
|
144
|
+
method = "sendMessage";
|
|
145
|
+
body = common;
|
|
146
|
+
}
|
|
147
|
+
else if (buried) {
|
|
148
|
+
const del = await callBotApi(token, "deleteMessage", {
|
|
149
|
+
chat_id: p.chatId,
|
|
150
|
+
message_id: stored,
|
|
151
|
+
...(connectionId ? { business_connection_id: connectionId } : {}),
|
|
152
|
+
}, { ...(deps.fetchImpl ? { fetchImpl: deps.fetchImpl } : {}) }).catch(() => ({ ok: false }));
|
|
153
|
+
log(`${TAG} op=card-repost callId=${callId} cardId=${stored} deleteOk=${del.ok} fallback=${!del.ok}`);
|
|
154
|
+
if (del.ok) {
|
|
155
|
+
method = "sendMessage";
|
|
156
|
+
body = common;
|
|
157
|
+
deletedOld = true;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// The old card could not be deleted, so editing it in place is the only way
|
|
161
|
+
// its new words reach the chat at all. It stays buried, but a buried card
|
|
162
|
+
// with the right text beats a silent turn.
|
|
163
|
+
method = "editMessageText";
|
|
164
|
+
body = { ...common, message_id: stored };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
method = "editMessageText";
|
|
169
|
+
body = { ...common, message_id: stored };
|
|
170
|
+
}
|
|
116
171
|
log(`${TAG} op=call tool=${TOOL} method=${method} callId=${callId} botId=${p.botId}`);
|
|
117
172
|
let envelope;
|
|
118
173
|
try {
|
|
@@ -123,6 +178,13 @@ export async function telegramCard(p, deps) {
|
|
|
123
178
|
catch (err) {
|
|
124
179
|
const reason = err instanceof Error ? err.message : String(err);
|
|
125
180
|
log(`${TAG} op=error callId=${callId} tool=${TOOL} method=${method} reason="${reason}"`);
|
|
181
|
+
// The old card is already deleted and this send never landed, so the stored
|
|
182
|
+
// id names a message that no longer exists. Forget it, or every later keyed
|
|
183
|
+
// call edits a dead id.
|
|
184
|
+
if (deletedOld && p.key) {
|
|
185
|
+
clearCardId(deps.platformRoot, deps.accountId, cardKey(p.botId, p.chatId, p.key));
|
|
186
|
+
log(`${TAG} op=card-repost-orphan callId=${callId} cardId=${stored} reason=send-threw`);
|
|
187
|
+
}
|
|
126
188
|
return {
|
|
127
189
|
ok: false,
|
|
128
190
|
isError: true,
|
|
@@ -132,19 +194,28 @@ export async function telegramCard(p, deps) {
|
|
|
132
194
|
}
|
|
133
195
|
let outcome;
|
|
134
196
|
let sendError = null;
|
|
197
|
+
// Task 2677 — the message id the card now lives at, threaded to the two returns
|
|
198
|
+
// below and into the follower-parsed token. A send or repost yields Telegram's
|
|
199
|
+
// new id; an edit reuses `stored`.
|
|
200
|
+
let resultMessageId;
|
|
135
201
|
if (envelope.ok) {
|
|
136
|
-
|
|
202
|
+
// Task 2677 — `method`, not `stored === null`: a repost is a `sendMessage` on a
|
|
203
|
+
// keyed card whose `stored` is non-null, and its outcome is a fresh send.
|
|
204
|
+
const wasSend = method === "sendMessage";
|
|
205
|
+
outcome = wasSend ? "sent" : "edited";
|
|
137
206
|
const id = envelope.result?.message_id;
|
|
138
207
|
// An edit refreshes the entry's timestamp as well as a first post writing
|
|
139
208
|
// it. The store ages a key out after CARD_TTL_MS UNTOUCHED (card-store.ts);
|
|
140
209
|
// without this a card edited every day would still expire seven days after
|
|
141
|
-
// it was created, mid-life.
|
|
210
|
+
// it was created, mid-life. On a repost `wasSend` is true and `id` is the NEW
|
|
211
|
+
// message id, so the key is re-pointed at the reposted card.
|
|
142
212
|
if (p.key) {
|
|
143
|
-
const toStore =
|
|
213
|
+
const toStore = wasSend ? (typeof id === "number" ? id : null) : stored;
|
|
144
214
|
if (toStore !== null) {
|
|
145
215
|
writeCardId(deps.platformRoot, deps.accountId, cardKey(p.botId, p.chatId, p.key), toStore);
|
|
146
216
|
}
|
|
147
217
|
}
|
|
218
|
+
resultMessageId = wasSend ? (typeof id === "number" ? id : undefined) : stored ?? undefined;
|
|
148
219
|
// Task 2673 — what each button SAID, so an operator reading the conversation
|
|
149
220
|
// sees the wording and not the callback code. Written only on a send that
|
|
150
221
|
// Telegram accepted: a refused card put no keyboard in front of anyone, and
|
|
@@ -167,10 +238,19 @@ export async function telegramCard(p, deps) {
|
|
|
167
238
|
}
|
|
168
239
|
else if ((envelope.description ?? "").includes(NOT_MODIFIED)) {
|
|
169
240
|
outcome = "unchanged";
|
|
241
|
+
// The card is already on the chat at its stored id; the row the follower
|
|
242
|
+
// wrote for it still stands, so report the id it lives at.
|
|
243
|
+
resultMessageId = stored ?? undefined;
|
|
170
244
|
}
|
|
171
245
|
else {
|
|
172
246
|
outcome = "none";
|
|
173
247
|
sendError = `Telegram refused ${method} (${envelope.error_code ?? "no code"}): ${envelope.description ?? "no description"}`;
|
|
248
|
+
// Same orphan case as the network throw above: the old card was deleted and
|
|
249
|
+
// this fresh send was refused, so the stored id is dead. Forget it.
|
|
250
|
+
if (deletedOld && p.key) {
|
|
251
|
+
clearCardId(deps.platformRoot, deps.accountId, cardKey(p.botId, p.chatId, p.key));
|
|
252
|
+
log(`${TAG} op=card-repost-orphan callId=${callId} cardId=${stored} reason=send-refused`);
|
|
253
|
+
}
|
|
174
254
|
}
|
|
175
255
|
log(`${TAG} op=result callId=${callId} tool=${TOOL} method=${method} ok=${envelope.ok || outcome === "unchanged"} ` +
|
|
176
256
|
`errorCode=${envelope.error_code ?? "-"} description="${envelope.description ?? ""}"`);
|
|
@@ -200,11 +280,18 @@ export async function telegramCard(p, deps) {
|
|
|
200
280
|
}
|
|
201
281
|
}
|
|
202
282
|
if (sendError || answerError) {
|
|
283
|
+
// The card itself may still have posted (a send that succeeded but whose
|
|
284
|
+
// answerCallbackQuery failed), so carry the id and the token: a card on the
|
|
285
|
+
// chat is a row the operator must see even when the ack did not land. On a
|
|
286
|
+
// pure send refusal `outcome` is `none` and the follower writes nothing.
|
|
203
287
|
return {
|
|
204
288
|
ok: false,
|
|
205
289
|
isError: true,
|
|
206
290
|
outcome,
|
|
207
|
-
|
|
291
|
+
...(resultMessageId !== undefined ? { messageId: resultMessageId } : {}),
|
|
292
|
+
text: [sendError, answerError].filter(Boolean).join(" ") +
|
|
293
|
+
"\n\n" +
|
|
294
|
+
cardResultToken(outcome, resultMessageId),
|
|
208
295
|
};
|
|
209
296
|
}
|
|
210
297
|
const said = outcome === "unchanged"
|
|
@@ -212,6 +299,12 @@ export async function telegramCard(p, deps) {
|
|
|
212
299
|
: outcome === "edited"
|
|
213
300
|
? `Card edited in place (message ${stored}).`
|
|
214
301
|
: `Card sent to ${p.chatId}.`;
|
|
215
|
-
return {
|
|
302
|
+
return {
|
|
303
|
+
ok: true,
|
|
304
|
+
isError: false,
|
|
305
|
+
outcome,
|
|
306
|
+
...(resultMessageId !== undefined ? { messageId: resultMessageId } : {}),
|
|
307
|
+
text: said + "\n\n" + cardResultToken(outcome, resultMessageId),
|
|
308
|
+
};
|
|
216
309
|
}
|
|
217
310
|
//# sourceMappingURL=card.js.map
|