@rubytech/create-maxy-code 0.1.583 → 0.1.585

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/config/brand.json +1 -0
  3. package/payload/platform/lib/brand-templating/dist/index.d.ts +13 -7
  4. package/payload/platform/lib/brand-templating/dist/index.d.ts.map +1 -1
  5. package/payload/platform/lib/brand-templating/dist/index.js +44 -29
  6. package/payload/platform/lib/brand-templating/dist/index.js.map +1 -1
  7. package/payload/platform/lib/brand-templating/src/__tests__/brand-templating.test.ts +103 -0
  8. package/payload/platform/lib/brand-templating/src/index.ts +45 -29
  9. package/payload/platform/lib/brand-templating/tsconfig.json +2 -1
  10. package/payload/platform/lib/brand-templating/vitest.config.ts +9 -0
  11. package/payload/platform/lib/telegram-reach/dist/index.d.ts +6 -0
  12. package/payload/platform/lib/telegram-reach/dist/index.d.ts.map +1 -1
  13. package/payload/platform/lib/telegram-reach/dist/index.js +38 -3
  14. package/payload/platform/lib/telegram-reach/dist/index.js.map +1 -1
  15. package/payload/platform/lib/telegram-reach/src/__tests__/telegram-reach.test.ts +54 -2
  16. package/payload/platform/lib/telegram-reach/src/index.ts +38 -4
  17. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +7 -1
  18. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
  19. package/payload/platform/plugins/docs/references/platform.md +2 -0
  20. package/payload/platform/plugins/docs/references/telegram-guide.md +4 -0
  21. package/payload/platform/plugins/telegram/.claude-plugin/plugin.json +1 -1
  22. package/payload/platform/plugins/telegram/PLUGIN.md +3 -7
  23. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-census.test.js +25 -11
  24. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-census.test.js.map +1 -1
  25. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-guard.test.js +41 -5
  26. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-guard.test.js.map +1 -1
  27. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-methods.test.js +9 -3
  28. package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-methods.test.js.map +1 -1
  29. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-business.test.js +14 -3
  30. package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-business.test.js.map +1 -1
  31. package/payload/platform/plugins/telegram/mcp/dist/__tests__/reach-tool.test.js +20 -7
  32. package/payload/platform/plugins/telegram/mcp/dist/__tests__/reach-tool.test.js.map +1 -1
  33. package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.js +2 -31
  34. package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.js.map +1 -1
  35. package/payload/platform/plugins/telegram/mcp/dist/index.js +2 -10
  36. package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -1
  37. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts +10 -3
  38. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts.map +1 -1
  39. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js +29 -16
  40. package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js.map +1 -1
  41. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts +11 -1
  42. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts.map +1 -1
  43. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js +18 -4
  44. package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js.map +1 -1
  45. package/payload/platform/plugins/telegram/mcp/dist/lib/api-guard.d.ts +11 -1
  46. package/payload/platform/plugins/telegram/mcp/dist/lib/api-guard.d.ts.map +1 -1
  47. package/payload/platform/plugins/telegram/mcp/dist/lib/api-guard.js +34 -2
  48. package/payload/platform/plugins/telegram/mcp/dist/lib/api-guard.js.map +1 -1
  49. package/payload/platform/plugins/telegram/mcp/dist/lib/api-methods.d.ts +0 -3
  50. package/payload/platform/plugins/telegram/mcp/dist/lib/api-methods.d.ts.map +1 -1
  51. package/payload/platform/plugins/telegram/mcp/dist/lib/api-methods.js +0 -1
  52. package/payload/platform/plugins/telegram/mcp/dist/lib/api-methods.js.map +1 -1
  53. package/payload/platform/plugins/telegram/mcp/dist/lib/business-window-store.d.ts +7 -4
  54. package/payload/platform/plugins/telegram/mcp/dist/lib/business-window-store.d.ts.map +1 -1
  55. package/payload/platform/plugins/telegram/mcp/dist/lib/business-window-store.js +15 -6
  56. package/payload/platform/plugins/telegram/mcp/dist/lib/business-window-store.js.map +1 -1
  57. package/payload/platform/plugins/telegram/mcp/dist/lib/chat-send-policy.d.ts +3 -2
  58. package/payload/platform/plugins/telegram/mcp/dist/lib/chat-send-policy.d.ts.map +1 -1
  59. package/payload/platform/plugins/telegram/mcp/dist/lib/chat-send-policy.js +3 -2
  60. package/payload/platform/plugins/telegram/mcp/dist/lib/chat-send-policy.js.map +1 -1
  61. package/payload/platform/plugins/telegram/mcp/dist/tools/api.js +8 -0
  62. package/payload/platform/plugins/telegram/mcp/dist/tools/api.js.map +1 -1
  63. package/payload/platform/plugins/telegram/mcp/dist/tools/reach.d.ts.map +1 -1
  64. package/payload/platform/plugins/telegram/mcp/dist/tools/reach.js +6 -1
  65. package/payload/platform/plugins/telegram/mcp/dist/tools/reach.js.map +1 -1
  66. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.d.ts +0 -70
  67. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.d.ts.map +1 -1
  68. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.js +0 -105
  69. package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.js.map +1 -1
  70. package/payload/platform/plugins/telegram/skills/build/SKILL.md +12 -35
  71. package/payload/platform/plugins/telegram/skills/build/references/methods.md +3 -13
  72. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  73. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +0 -1
  74. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  75. package/payload/platform/templates/agents/admin/IDENTITY.md +11 -5
  76. package/payload/server/{chunk-CV6AEMKH.js → chunk-34FPJYHN.js} +1 -1
  77. package/payload/server/{chunk-SKYZG6OT.js → chunk-6AQYMT6C.js} +27 -21
  78. package/payload/server/{chunk-BTXRBXMU.js → chunk-GO3EPIXU.js} +1 -1
  79. package/payload/server/{manager-FQSQSSJ3.js → manager-7BXVB76I.js} +2 -2
  80. package/payload/server/maxy-edge.js +2 -2
  81. package/payload/server/public/operator.html +1 -1
  82. package/payload/server/server.js +305 -297
@@ -15,12 +15,17 @@
15
15
  * re-exports it, so the store that writes a filename and the walk that reads one
16
16
  * cannot disagree.
17
17
  *
18
- * Path-free by construction: the caller passes `storeDir`. The plugin derives it
19
- * from PLATFORM_ROOT and the server from the brand config dir, and neither
20
- * derivation belongs in a library that must not know what a brand is.
18
+ * `collectTelegramReach` takes `storeDir` from its caller, but the DERIVATION of
19
+ * that directory lives here too, in `telegramStoreRoot`. Task 2625 left it to
20
+ * each caller on the grounds that a library must not know what a brand is, and
21
+ * the two callers promptly disagreed: the webhook wrote the brand config dir
22
+ * while `telegram-reach` read the brand install dir, so the tool reported every
23
+ * chat unreachable and named its own live sender as never having messaged
24
+ * (Task 2644). One derivation, for the same reason the filename rule is here.
21
25
  */
22
26
  import { existsSync, readdirSync, readFileSync } from "node:fs";
23
- import { join } from "node:path";
27
+ import { homedir } from "node:os";
28
+ import { join, resolve } from "node:path";
24
29
 
25
30
  /**
26
31
  * Is this a channel key that can safely become a path segment?
@@ -260,3 +265,32 @@ export function collectTelegramReach(input: {
260
265
  });
261
266
  return { bots, storeRows };
262
267
  }
268
+
269
+ /** The brand's config directory NAME, from its own brand.json.
270
+ *
271
+ * Resolved WITHOUT the platform's `paths.ts`, which throws at module init on a
272
+ * brand.json missing a port field. The inbound Telegram webhook imports this
273
+ * path, so a throw here takes delivery down; a brand.json that cannot be read
274
+ * falls back to `.maxy` instead. */
275
+ function configDirName(platformRoot: string): string {
276
+ const brandPath = join(platformRoot, "config", "brand.json");
277
+ if (existsSync(brandPath)) {
278
+ try {
279
+ const parsed = JSON.parse(readFileSync(brandPath, "utf8")) as { configDir?: unknown };
280
+ if (typeof parsed.configDir === "string") return parsed.configDir;
281
+ } catch {
282
+ // A brand.json that will not parse falls back rather than throwing.
283
+ }
284
+ }
285
+ return ".maxy";
286
+ }
287
+
288
+ /** The brand's Telegram message store root, for a given platform root.
289
+ *
290
+ * The ONE derivation of this path. `ui/app/lib/telegram/message-store.ts`
291
+ * writes under it and `plugins/telegram/mcp` reads under it, both through this
292
+ * function, so the writer and the reader cannot name different directories. */
293
+ export function telegramStoreRoot(platformRoot: string): string {
294
+ const brandDir = process.env.MAXY_DIR_OVERRIDE ?? resolve(homedir(), configDirName(platformRoot));
295
+ return join(brandDir, "data", "telegram-messages");
296
+ }
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: platform-architecture
3
3
  description: Use when grounding any documented-surface claim about what Maxy ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
4
- content-hash: sha256:a3d3a8e8121de662b30fd0e2104d7c0529606d1dbd91aaf939cebf45383fa14f
4
+ content-hash: sha256:f5ee0e74131f99f1dc825cde6cde89a84f854b578f81d1f65d16df58e89b352e
5
5
  brand: maxy-code
6
6
  product-name: Maxy
7
7
  ---
@@ -146,6 +146,8 @@ Maxy runs two agents simultaneously:
146
146
 
147
147
  **Admin agent (you)** — full access to all tools and plugins. This is the agent you interact with at your local or remote URL. It can read and write contacts, send Telegram messages, manage your account, and perform any task you have plugins for. Protected by your PIN. Your admin agent runs through your own Claude Code OAuth session — it never bills the Anthropic API. Authentication and SDK details are documented in the developer doc `.docs/platform.md` admin-agent section.
148
148
 
149
+ Your admin agent has a stated purpose, set by your edition of the product. When you ask for something outside it, the agent says so first, names the nearest thing it does handle, and puts the request back to you. Ask again and it does the work; the decision is yours.
150
+
149
151
  **Public agent (visitors)** — read-only access. Handles enquiries from people who reach your public URL. It can answer questions about your business and collect prospect contact details, but it cannot access your private data or take actions.
150
152
 
151
153
  ## Plugins
@@ -2935,6 +2937,10 @@ people who have messaged each one and when they last wrote, and anyone on a bot'
2935
2937
  never messaged. Being on the admin list is not the same as having opened the chat, so those people
2936
2938
  are listed separately as not reachable yet.
2937
2939
 
2940
+ That list is built from the messages already stored on this machine. Every message that arrives is
2941
+ written down, and both the answer to "who can you reach" and the hourly self-check read that same
2942
+ store, so what Maxy tells you and what actually arrived cannot drift apart.
2943
+
2938
2944
  If Maxy ever says a Telegram message cannot be sent, ask it to check that list first.
2939
2945
 
2940
2946
  ## Getting a Chat ID
@@ -9,6 +9,18 @@ Invoked by the admin agent directly.
9
9
 
10
10
  This is the platform's release timeline, newest first. Each entry shows the date it shipped and the version it shipped in, so you can tell the operator how current their install is. To compare, read the installed version from `capabilities-here` and match it against the versions below. Keep answers high level and in plain English; this is a summary, not a full commit log.
11
11
 
12
+ ## 2026-08-09 (0.1.585)
13
+
14
+ - Your assistant now knows what it is for, and says so when you ask it to work outside that. Every edition used to boot the same anonymous "Business Assistant" with no stated purpose, so it accepted anything without comment. Ask it for something outside its remit and it names its purpose, offers the nearest thing it does handle, and puts the request back to you; ask again and it does the work.
15
+ - The estate agency and building contractor editions each describe the work they actually do, while Maxy stays a general personal assistant and second brain, tied to no trade or industry.
16
+ - The assistant no longer assumes you run a business. Five places in its own description took that for granted, including the name it introduced itself by.
17
+
18
+ ## 2026-08-09 (0.1.584)
19
+
20
+ - The assistant can find the Telegram chats it is able to reach. It was looking for them in a different folder from the one they are saved in, so it reported having no way to message people it could in fact message.
21
+ - A long Telegram answer no longer stops partway. When formatting was dropped and the message sent as plain text, it was not being split at the length limit, so anything past that point was lost.
22
+ - The Telegram payment surface has been withdrawn.
23
+
12
24
  ## 2026-08-09 (0.1.583)
13
25
 
14
26
  - A connected Telegram Business account can now be answered. Its customer chats were being received and dropped, so the bot could not see or reply to a single one of them.
@@ -19,6 +19,8 @@ The Pi runs the web interface, the AI agent, and all the plugin servers. When yo
19
19
 
20
20
  **Admin agent (you)** — full access to all tools and plugins. This is the agent you interact with at your local or remote URL. It can read and write contacts, send Telegram messages, manage your account, and perform any task you have plugins for. Protected by your PIN. Your admin agent runs through your own Claude Code OAuth session — it never bills the Anthropic API. Authentication and SDK details are documented in the developer doc `.docs/platform.md` admin-agent section.
21
21
 
22
+ Your admin agent has a stated purpose, set by your edition of the product. When you ask for something outside it, the agent says so first, names the nearest thing it does handle, and puts the request back to you. Ask again and it does the work; the decision is yours.
23
+
22
24
  **Public agent (visitors)** — read-only access. Handles enquiries from people who reach your public URL. It can answer questions about your business and collect prospect contact details, but it cannot access your private data or take actions.
23
25
 
24
26
  ## Plugins
@@ -114,6 +114,10 @@ people who have messaged each one and when they last wrote, and anyone on a bot'
114
114
  never messaged. Being on the admin list is not the same as having opened the chat, so those people
115
115
  are listed separately as not reachable yet.
116
116
 
117
+ That list is built from the messages already stored on this machine. Every message that arrives is
118
+ written down, and both the answer to "who can you reach" and the hourly self-check read that same
119
+ store, so what {{productName}} tells you and what actually arrived cannot drift apart.
120
+
117
121
  If {{productName}} ever says a Telegram message cannot be sent, ask it to check that list first.
118
122
 
119
123
  ## Getting a Chat ID
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "telegram",
3
- "description": "Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent. Ships typed tools for cards, inbound files, forum threads, structured asks, outbound media and payments, reaches every remaining Bot API method through telegram-api, and carries a build skill for authoring cards, in-place edits and Mini App surfaces.",
3
+ "description": "Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent. Ships typed tools for cards, inbound files, forum threads, structured asks and outbound media, reaches every remaining Bot API method through telegram-api, and carries a build skill for authoring cards, in-place edits and Mini App surfaces.",
4
4
  "version": "0.1.0",
5
5
  "author": {
6
6
  "name": "Rubytech LLC"
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: telegram
3
3
  surface: platform
4
- description: Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent. Ships typed tools for cards, inbound files, forum threads, structured asks, outbound media and payments, reaches every remaining Bot API method through telegram-api, and carries a build skill for authoring cards, in-place edits and Mini App surfaces.
4
+ description: Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent. Ships typed tools for cards, inbound files, forum threads, structured asks and outbound media, reaches every remaining Bot API method through telegram-api, and carries a build skill for authoring cards, in-place edits and Mini App surfaces.
5
5
  metadata: {"platform":{"optional":false}}
6
6
  tools:
7
7
  - name: telegram-card
@@ -24,10 +24,6 @@ tools:
24
24
  publicAllowlist: false
25
25
  adminAllowlist: true
26
26
  riskClass: external
27
- - name: telegram-invoice
28
- publicAllowlist: false
29
- adminAllowlist: true
30
- riskClass: external
31
27
  - name: message-history
32
28
  publicAllowlist: false
33
29
  adminAllowlist: false
@@ -96,8 +92,8 @@ Walks users through connecting Telegram bots. Covers bot creation, token configu
96
92
  - Admin routing — restrict a bot to admin-only access via numeric user ID bindings
97
93
  - A straight answer to "who can we message on Telegram right now" — `telegram-reach` lists, per bot, every private chat that has messaged it and every allowlisted admin who has not, so a reachable person is never refused and an unreachable one is named as needing to write first
98
94
  - Checklists on behalf of a connected business account — the identifier Telegram announces once is captured and stored per bot, so `telegram-ask kind=checklist` needs no parameter for it
99
- - Eleven of Telegram's twenty-six update classes reach the agent: messages and edits (with the quoted original when the sender replied), channel posts and their edits, button presses, poll votes, poll closes, reactions, both checkout queries, subscription changes, and block/unblock as a log line
100
- - Stars checkouts complete without a turn in the way the inbound route answers `answerPreCheckoutQuery` itself, because Telegram cancels a transaction unanswered after ten seconds
95
+ - Nine of Telegram's twenty-six update classes reach the agent: messages and edits (with the quoted original when the sender replied), channel posts and their edits, button presses, poll votes, poll closes, reactions, subscription changes, and block/unblock as a log line
96
+ - This install takes no payment inside Telegram. The payment surface was removed: there is no invoice, no payment link and no Stars balance, and `telegram-api` refuses all eight Bot API payment methods. A checkout query from an invoice sent before the removal is logged and left to cancel, never answered and never raised as a turn
101
97
 
102
98
  ## Setup
103
99
 
@@ -4,9 +4,9 @@ import { tmpdir } from "node:os";
4
4
  import { join, resolve } from "node:path";
5
5
  import { bootCensusLine, diffMethods, extractMethodNames, OWNED_METHODS, tallyPassthrough, passthroughCensusLine, } from "../lib/api-census.js";
6
6
  import { BOT_API_METHODS } from "../lib/api-methods.js";
7
+ import { PAYMENT_METHODS } from "../lib/api-guard.js";
7
8
  import { ASK_METHOD } from "../tools/ask.js";
8
9
  import { MEDIA_SEND_METHOD } from "../tools/media-send.js";
9
- import { INVOICE_METHOD } from "../tools/invoice.js";
10
10
  function stubAccount(bots) {
11
11
  const root = mkdtempSync(join(tmpdir(), "tg-census-"));
12
12
  const platformRoot = join(root, "platform");
@@ -20,17 +20,17 @@ describe("bootCensusLine", () => {
20
20
  // The plugin is core now, so it boots on installs that have no bot at all.
21
21
  // Reporting zeros is what makes that visible without anyone reporting it.
22
22
  it("reports zeros without an account rather than throwing", () => {
23
- expect(bootCensusLine("/nope", undefined)).toBe("[telegram-api-census] shipped=185 refused=7 bots=0 withToken=0");
23
+ expect(bootCensusLine("/nope", undefined)).toBe("[telegram-api-census] shipped=177 refused=15 bots=0 withToken=0");
24
24
  });
25
25
  it("reports zeros when account.json is unreadable", () => {
26
- expect(bootCensusLine("/nope", "acct-1")).toBe("[telegram-api-census] shipped=185 refused=7 bots=0 withToken=0");
26
+ expect(bootCensusLine("/nope", "acct-1")).toBe("[telegram-api-census] shipped=177 refused=15 bots=0 withToken=0");
27
27
  });
28
28
  it("counts registered bots and how many carry a token", () => {
29
29
  const platformRoot = stubAccount([
30
30
  { id: "1", role: "admin", token: "1:AAA" },
31
31
  { id: "2", role: "public" },
32
32
  ]);
33
- expect(bootCensusLine(platformRoot, "acct-1")).toBe("[telegram-api-census] shipped=185 refused=7 bots=2 withToken=1");
33
+ expect(bootCensusLine(platformRoot, "acct-1")).toBe("[telegram-api-census] shipped=177 refused=15 bots=2 withToken=1");
34
34
  });
35
35
  });
36
36
  describe("diffMethods", () => {
@@ -71,9 +71,9 @@ describe("extractMethodNames", () => {
71
71
  it("deduplicates a name the page anchors twice", () => {
72
72
  expect(extractMethodNames(REAL + REAL)).toEqual(["sendMessage"]);
73
73
  });
74
- it("finds all 185 on the live page shape, built from the shipped list", () => {
74
+ it("finds all 177 on the live page shape, built from the shipped list", () => {
75
75
  const page = BOT_API_METHODS.map((m) => `<h4><a class="anchor" name="${m.toLowerCase()}"><i class="anchor-icon"></i></a>${m}</h4>`).join("\n");
76
- expect(extractMethodNames(page)).toHaveLength(185);
76
+ expect(extractMethodNames(page)).toHaveLength(177);
77
77
  expect(diffMethods(extractMethodNames(page))).toEqual({ missing: [], added: [] });
78
78
  });
79
79
  });
@@ -93,9 +93,6 @@ describe("OWNED_METHODS", () => {
93
93
  for (const m of Object.values(MEDIA_SEND_METHOD)) {
94
94
  expect(OWNED_METHODS[m]).toBe("telegram-media-send");
95
95
  }
96
- for (const m of Object.values(INVOICE_METHOD)) {
97
- expect(OWNED_METHODS[m]).toBe("telegram-invoice");
98
- }
99
96
  });
100
97
  it("claims nothing no tool implements", () => {
101
98
  // The buckets that stay on telegram-api by design: membership,
@@ -103,14 +100,18 @@ describe("OWNED_METHODS", () => {
103
100
  expect(OWNED_METHODS.pinChatMessage).toBeUndefined();
104
101
  expect(OWNED_METHODS.setMyCommands).toBeUndefined();
105
102
  expect(OWNED_METHODS.sendSticker).toBeUndefined();
103
+ // Task 2636 — no tool owns the payment methods any more. They are refused,
104
+ // not owned: claiming an owner here would assert a tool that was deleted.
105
+ for (const m of PAYMENT_METHODS)
106
+ expect(OWNED_METHODS[m]).toBeUndefined();
106
107
  });
107
108
  it("counts a passthrough call to a newly owned method as owned, not as healthy passthrough", () => {
108
109
  const t = tallyPassthrough([
109
110
  "[telegram-api] op=call callId=aa method=sendPhoto listed=true files=1",
110
- "[telegram-api] op=call callId=bb method=sendInvoice listed=true files=0",
111
+ "[telegram-api] op=call callId=bb method=sendPoll listed=true files=0",
111
112
  "[telegram-api] op=call callId=cc method=pinChatMessage listed=true files=0",
112
113
  ]);
113
- expect(t.owned).toEqual({ sendPhoto: 1, sendInvoice: 1 });
114
+ expect(t.owned).toEqual({ sendPhoto: 1, sendPoll: 1 });
114
115
  expect(t.passthrough).toEqual({ pinChatMessage: 1 });
115
116
  });
116
117
  });
@@ -171,5 +172,18 @@ describe("passthroughCensusLine", () => {
171
172
  writeFileSync(join(dir, "mcp-admin-s1.log.gz"), Buffer.from([0x1f, 0x8b, 0x08]));
172
173
  expect(passthroughCensusLine(dir)).toContain("owned=0 passthrough=0");
173
174
  });
175
+ // Task 2636 — the live page still documents all eight. Without the exclusion
176
+ // the audit would report them as eight NEW Telegram methods on every run, for
177
+ // ever. This is the permanent state from now on, not a transitional one.
178
+ it("does not report the removed payment methods as newly added", () => {
179
+ const d = diffMethods([...BOT_API_METHODS, ...PAYMENT_METHODS]);
180
+ expect(d.added).toEqual([]);
181
+ expect(d.missing).toEqual([]);
182
+ });
183
+ // The exclusion must not blind the audit to anything else.
184
+ it("still reports a genuinely new method as added", () => {
185
+ const d = diffMethods([...BOT_API_METHODS, "sendSomethingBrandNew"]);
186
+ expect(d.added).toEqual(["sendSomethingBrandNew"]);
187
+ });
174
188
  });
175
189
  //# sourceMappingURL=api-census.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-census.test.js","sourceRoot":"","sources":["../../src/__tests__/api-census.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-census.test.js","sourceRoot":"","sources":["../../src/__tests__/api-census.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import { checkMethod } from "../lib/api-guard.js";
2
+ import { checkMethod, PAYMENT_METHODS, REFUSED_COUNT } from "../lib/api-guard.js";
3
3
  import { BOT_API_METHODS } from "../lib/api-methods.js";
4
4
  describe("checkMethod", () => {
5
5
  it("refuses setWebhook, naming the tool that owns webhook state", () => {
@@ -51,19 +51,55 @@ describe("checkMethod", () => {
51
51
  expect(checkMethod("getManagedBotAccessSettings")).toMatchObject({ allowed: true });
52
52
  expect(checkMethod("setManagedBotAccessSettings")).toMatchObject({ allowed: true });
53
53
  });
54
- // Asserting the whole set, not individual names, is what stops an eighth
54
+ // Task 2636 — the payment surface is deleted, so the escape hatch must refuse
55
+ // it. Without this the deletion INVERTS: an unlisted method is allowed, so
56
+ // removing the names from BOT_API_METHODS would make sendInvoice reachable.
57
+ it("refuses every payment method, naming no owner because none exists", () => {
58
+ for (const m of PAYMENT_METHODS) {
59
+ expect(checkMethod(m)).toEqual({
60
+ allowed: false,
61
+ reason: "payments-surface-removed",
62
+ owner: "nothing: this install takes no payment inside Telegram",
63
+ });
64
+ }
65
+ });
66
+ // The list is hand-maintained, so an edit that empties it refuses nothing and
67
+ // reads exactly like a healthy guard — the zero-count trap Task 2557 named.
68
+ // Pinning the eight names literally is what makes that loud.
69
+ it("names all eight payment methods", () => {
70
+ expect(PAYMENT_METHODS.slice().sort()).toEqual([
71
+ "answerPreCheckoutQuery",
72
+ "answerShippingQuery",
73
+ "createInvoiceLink",
74
+ "editUserStarSubscription",
75
+ "getMyStarBalance",
76
+ "getStarTransactions",
77
+ "refundStarPayment",
78
+ "sendInvoice",
79
+ ]);
80
+ });
81
+ // Asserting the whole set, not individual names, is what stops a sixteenth
55
82
  // refusal being added without a decision.
56
- it("refuses exactly seven methods and no more", () => {
57
- const refused = BOT_API_METHODS.filter((m) => !checkMethod(m).allowed);
58
- expect(refused.slice().sort()).toEqual([
83
+ it("refuses exactly fifteen methods and no more", () => {
84
+ const refused = [...BOT_API_METHODS, ...PAYMENT_METHODS].filter((m) => !checkMethod(m).allowed);
85
+ expect([...new Set(refused)].sort()).toEqual([
86
+ "answerPreCheckoutQuery",
87
+ "answerShippingQuery",
59
88
  "close",
89
+ "createInvoiceLink",
60
90
  "deleteWebhook",
91
+ "editUserStarSubscription",
61
92
  "getManagedBotToken",
93
+ "getMyStarBalance",
94
+ "getStarTransactions",
62
95
  "getUpdates",
63
96
  "logOut",
97
+ "refundStarPayment",
64
98
  "replaceManagedBotToken",
99
+ "sendInvoice",
65
100
  "setWebhook",
66
101
  ]);
102
+ expect(REFUSED_COUNT).toBe(15);
67
103
  });
68
104
  it("allows a listed method", () => {
69
105
  expect(checkMethod("editMessageText")).toEqual({ allowed: true, listed: true });
@@ -1 +1 @@
1
- {"version":3,"file":"api-guard.test.js","sourceRoot":"","sources":["../../src/__tests__/api-guard.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-guard.test.js","sourceRoot":"","sources":["../../src/__tests__/api-guard.test.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,13 @@ import { readFileSync } from "node:fs";
3
3
  import { dirname, resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { API_VERSION, BOT_API_METHODS, METHOD_SECTIONS } from "../lib/api-methods.js";
6
+ import { PAYMENT_METHODS } from "../lib/api-guard.js";
6
7
  const HERE = dirname(fileURLToPath(import.meta.url));
7
8
  describe("api-methods", () => {
8
- it("carries the 185 methods of Bot API 10.2", () => {
9
+ it("carries the 177 methods of Bot API 10.2 that this install ships", () => {
9
10
  expect(API_VERSION).toBe("10.2");
10
- expect(BOT_API_METHODS).toHaveLength(185);
11
- expect(new Set(BOT_API_METHODS).size).toBe(185);
11
+ expect(BOT_API_METHODS).toHaveLength(177);
12
+ expect(new Set(BOT_API_METHODS).size).toBe(177);
12
13
  });
13
14
  it("sections partition the method list exactly", () => {
14
15
  const flat = METHOD_SECTIONS.flatMap((s) => s.methods);
@@ -21,5 +22,10 @@ describe("api-methods", () => {
21
22
  const listed = [...md.matchAll(/^- `([a-z][a-zA-Z]+)`/gm)].map((m) => m[1]);
22
23
  expect(listed.slice().sort()).toEqual(BOT_API_METHODS.slice().sort());
23
24
  });
25
+ // Task 2636 — the payment surface was removed, so its methods are not shipped.
26
+ it("ships none of the payment methods", () => {
27
+ for (const m of PAYMENT_METHODS)
28
+ expect(BOT_API_METHODS).not.toContain(m);
29
+ });
24
30
  });
25
31
  //# sourceMappingURL=api-methods.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-methods.test.js","sourceRoot":"","sources":["../../src/__tests__/api-methods.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEtF,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,sEAAsE;IACtE,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,GAAG,YAAY,CACrB,OAAO,CAAC,IAAI,EAAE,6CAA6C,CAAC,EAC5D,OAAO,CACR,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"api-methods.test.js","sourceRoot":"","sources":["../../src/__tests__/api-methods.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,sEAAsE;IACtE,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,GAAG,YAAY,CACrB,OAAO,CAAC,IAAI,EAAE,6CAA6C,CAAC,EAC5D,OAAO,CACR,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,KAAK,MAAM,CAAC,IAAI,eAAe;YAAE,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -12,8 +12,8 @@
12
12
  * The block at the end is the regression that matters: a card into an ORDINARY
13
13
  * chat must build a byte-identical body to the one it built before this task.
14
14
  */
15
- import { describe, expect, it, beforeEach } from "vitest";
16
- import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs";
15
+ import { describe, expect, it, beforeEach, afterEach } from "vitest";
16
+ import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
17
17
  import { tmpdir } from "node:os";
18
18
  import { join } from "node:path";
19
19
  import { telegramCard } from "../tools/card.js";
@@ -23,17 +23,28 @@ const STORED = "STOREDbc0987654321";
23
23
  const CUSTOMER = 12345;
24
24
  let platformRoot;
25
25
  let brandRoot;
26
+ let storeRoot;
26
27
  let accountDir;
27
28
  let lines;
28
29
  beforeEach(() => {
29
30
  brandRoot = mkdtempSync(join(tmpdir(), "brand-biz-window-"));
30
31
  mkdirSync(join(brandRoot, "platform"), { recursive: true });
32
+ // Task 2644 — the conversation store is under the brand CONFIG dir, a
33
+ // different directory from the install root that holds `data/accounts`.
34
+ // Seeding both in one place is what hid the plugin reading a root nothing
35
+ // writes.
36
+ storeRoot = mkdtempSync(join(tmpdir(), "config-biz-window-"));
37
+ process.env.MAXY_DIR_OVERRIDE = storeRoot;
31
38
  accountDir = join(brandRoot, "data", "accounts", ACC);
32
39
  mkdirSync(accountDir, { recursive: true });
33
40
  writeFileSync(join(accountDir, "account.json"), JSON.stringify({ telegram: { bots: [{ id: BOT, role: "admin", token: `${BOT}:SECRET` }] } }), "utf-8");
34
41
  platformRoot = join(brandRoot, "platform");
35
42
  lines = [];
36
43
  });
44
+ afterEach(() => {
45
+ delete process.env.MAXY_DIR_OVERRIDE;
46
+ rmSync(storeRoot, { recursive: true, force: true });
47
+ });
37
48
  function storeConnection(id = STORED) {
38
49
  writeFileSync(join(accountDir, "telegram-business-connection.json"), JSON.stringify({
39
50
  [BOT]: {
@@ -52,7 +63,7 @@ function storeConnection(id = STORED) {
52
63
  * reads; `dateSent` is ours, and the two are deliberately different values here
53
64
  * so a reader of this test cannot confuse them. */
54
65
  function storeInbound(telegramDate, chatId = CUSTOMER) {
55
- const dir = join(brandRoot, "data", "telegram-messages", ACC);
66
+ const dir = join(storeRoot, "data", "telegram-messages", ACC);
56
67
  mkdirSync(dir, { recursive: true });
57
68
  writeFileSync(join(dir, `${BOT}_biz_${chatId}.jsonl`), JSON.stringify({
58
69
  messageId: `telegram:${ACC}:${BOT}:biz:${chatId}:in:77`,
@@ -1 +1 @@
1
- {"version":3,"file":"card-business.test.js","sourceRoot":"","sources":["../../src/__tests__/card-business.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"card-business.test.js","sourceRoot":"","sources":["../../src/__tests__/card-business.test.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ const KIT = "8860040117";
8
8
  const ACC = "2fbdf399";
9
9
  let installRoot;
10
10
  let platformRoot;
11
+ let storeRoot;
11
12
  let lines;
12
13
  const log = (line) => {
13
14
  lines.push(line);
@@ -17,8 +18,11 @@ function writeAccount(bots) {
17
18
  mkdirSync(dir, { recursive: true });
18
19
  writeFileSync(join(dir, "account.json"), JSON.stringify({ telegram: { bots } }), "utf8");
19
20
  }
21
+ /** Seeded under the brand CONFIG dir, which is where the webhook writes
22
+ * (`ui/app/lib/telegram/message-store.ts`). Seeding it under the install root
23
+ * is what let Task 2625 ship green against a directory nothing writes. */
20
24
  function writeInbound() {
21
- const dir = join(installRoot, "data", "telegram-messages", ACC);
25
+ const dir = join(storeRoot, "data", "telegram-messages", ACC);
22
26
  mkdirSync(dir, { recursive: true });
23
27
  writeFileSync(join(dir, `${BOT}_${KIT}.jsonl`), JSON.stringify({
24
28
  messageId: "m1",
@@ -39,10 +43,17 @@ beforeEach(() => {
39
43
  installRoot = mkdtempSync(join(tmpdir(), "tg-reach-tool-"));
40
44
  platformRoot = join(installRoot, "platform");
41
45
  mkdirSync(platformRoot, { recursive: true });
46
+ // The store is a separate temp root, not a child of the install root: the two
47
+ // are different directories in production and a fixture that conflates them
48
+ // cannot tell the reader from the writer.
49
+ storeRoot = mkdtempSync(join(tmpdir(), "tg-reach-store-"));
50
+ process.env.MAXY_DIR_OVERRIDE = storeRoot;
42
51
  lines = [];
43
52
  });
44
53
  afterEach(() => {
54
+ delete process.env.MAXY_DIR_OVERRIDE;
45
55
  rmSync(installRoot, { recursive: true, force: true });
56
+ rmSync(storeRoot, { recursive: true, force: true });
46
57
  });
47
58
  describe("telegramReach", () => {
48
59
  it("refuses by name with no account context, and emits op=refuse", () => {
@@ -71,19 +82,21 @@ describe("telegramReach", () => {
71
82
  writeInbound();
72
83
  telegramReach({ platformRoot, accountId: ACC, log });
73
84
  expect(lines).toContain("[telegram-reach] op=query");
74
- expect(lines).toContain("[telegram-reach] op=result bots=1 chats=1 storeRows=1");
85
+ expect(lines).toContain(`[telegram-reach] op=result bots=1 chats=1 storeRows=1 storeDir=${join(storeRoot, "data", "telegram-messages", ACC)}`);
75
86
  });
76
87
  it("reports an allowlisted admin who has never messaged as not reachable", () => {
77
88
  writeAccount([{ id: BOT, token: `${BOT}:x`, role: "admin", adminUsers: [Number(KIT)] }]);
78
89
  const out = telegramReach({ platformRoot, accountId: ACC, log });
79
90
  expect(out.text).toContain("has never messaged");
80
- expect(lines).toContain("[telegram-reach] op=result bots=1 chats=0 storeRows=0");
91
+ expect(lines).toContain(`[telegram-reach] op=result bots=1 chats=0 storeRows=0 storeDir=${join(storeRoot, "data", "telegram-messages", ACC)}`);
81
92
  });
82
93
  // An account id that escapes the brand root is refused BEFORE the store is
83
- // ever considered: resolveAccountDir and resolveTelegramStoreDir collapse `..`
84
- // identically, so the same id that would refuse the store also hides
85
- // account.json, and listRegisteredBots comes back empty. This pins that
86
- // ordering the tool must never walk a store for a path it would refuse.
94
+ // ever considered. Since Task 2644 the two resolvers anchor at DIFFERENT roots
95
+ // accounts under the brand install dir, the store under the brand config dir
96
+ // so this no longer follows from them collapsing `..` identically. It holds
97
+ // because listRegisteredBots reads account.json first and comes back empty.
98
+ // This pins that ordering: the tool must never walk a store for a path it
99
+ // would refuse.
87
100
  it("refuses an account id that escapes the brand root, before any walk", () => {
88
101
  const escaping = join("..", "..", "..", "escaped");
89
102
  telegramReach({ platformRoot, accountId: escaping, log });
@@ -1 +1 @@
1
- {"version":3,"file":"reach-tool.test.js","sourceRoot":"","sources":["../../src/__tests__/reach-tool.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reach-tool.test.js","sourceRoot":"","sources":["../../src/__tests__/reach-tool.test.ts"],"names":[],"mappings":"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"}