@leemour/max-cli 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/README.md +43 -9
  2. package/dist/bot/client.d.ts +7 -1
  3. package/dist/bot/client.d.ts.map +1 -1
  4. package/dist/bot/client.js +19 -5
  5. package/dist/bot/client.js.map +1 -1
  6. package/dist/bot/input.d.ts.map +1 -1
  7. package/dist/bot/input.js +7 -4
  8. package/dist/bot/input.js.map +1 -1
  9. package/dist/bot/joins.d.ts +26 -0
  10. package/dist/bot/joins.d.ts.map +1 -0
  11. package/dist/bot/joins.js +56 -0
  12. package/dist/bot/joins.js.map +1 -0
  13. package/dist/bot/keep.d.ts +25 -0
  14. package/dist/bot/keep.d.ts.map +1 -0
  15. package/dist/bot/keep.js +97 -0
  16. package/dist/bot/keep.js.map +1 -0
  17. package/dist/bot/map.d.ts +5 -2
  18. package/dist/bot/map.d.ts.map +1 -1
  19. package/dist/bot/map.js +7 -1
  20. package/dist/bot/map.js.map +1 -1
  21. package/dist/bot/registry.d.ts +3 -0
  22. package/dist/bot/registry.d.ts.map +1 -1
  23. package/dist/bot/registry.js +27 -10
  24. package/dist/bot/registry.js.map +1 -1
  25. package/dist/bot/uploads.d.ts +34 -0
  26. package/dist/bot/uploads.d.ts.map +1 -0
  27. package/dist/bot/uploads.js +122 -0
  28. package/dist/bot/uploads.js.map +1 -0
  29. package/dist/bot-mcp/instructions.d.ts +9 -0
  30. package/dist/bot-mcp/instructions.d.ts.map +1 -0
  31. package/dist/bot-mcp/instructions.js +22 -0
  32. package/dist/bot-mcp/instructions.js.map +1 -0
  33. package/dist/bot-mcp/server.d.ts +21 -0
  34. package/dist/bot-mcp/server.d.ts.map +1 -0
  35. package/dist/bot-mcp/server.js +199 -0
  36. package/dist/bot-mcp/server.js.map +1 -0
  37. package/dist/bot-mcp/tools.d.ts +27 -0
  38. package/dist/bot-mcp/tools.d.ts.map +1 -0
  39. package/dist/bot-mcp/tools.js +280 -0
  40. package/dist/bot-mcp/tools.js.map +1 -0
  41. package/dist/client.d.ts +44 -4
  42. package/dist/client.d.ts.map +1 -1
  43. package/dist/client.js +232 -41
  44. package/dist/client.js.map +1 -1
  45. package/dist/commands/bot-check.d.ts +11 -0
  46. package/dist/commands/bot-check.d.ts.map +1 -0
  47. package/dist/commands/bot-check.js +206 -0
  48. package/dist/commands/bot-check.js.map +1 -0
  49. package/dist/commands/bot-comments.d.ts +4 -0
  50. package/dist/commands/bot-comments.d.ts.map +1 -0
  51. package/dist/commands/bot-comments.js +97 -0
  52. package/dist/commands/bot-comments.js.map +1 -0
  53. package/dist/commands/bot-context.d.ts +9 -3
  54. package/dist/commands/bot-context.d.ts.map +1 -1
  55. package/dist/commands/bot-context.js +38 -15
  56. package/dist/commands/bot-context.js.map +1 -1
  57. package/dist/commands/bot-mcp.d.ts +3 -0
  58. package/dist/commands/bot-mcp.d.ts.map +1 -0
  59. package/dist/commands/bot-mcp.js +69 -0
  60. package/dist/commands/bot-mcp.js.map +1 -0
  61. package/dist/commands/bot-members.d.ts +12 -0
  62. package/dist/commands/bot-members.d.ts.map +1 -0
  63. package/dist/commands/bot-members.js +136 -0
  64. package/dist/commands/bot-members.js.map +1 -0
  65. package/dist/commands/bot-people.d.ts +10 -0
  66. package/dist/commands/bot-people.d.ts.map +1 -0
  67. package/dist/commands/bot-people.js +156 -0
  68. package/dist/commands/bot-people.js.map +1 -0
  69. package/dist/commands/bot-reads.d.ts.map +1 -1
  70. package/dist/commands/bot-reads.js +56 -8
  71. package/dist/commands/bot-reads.js.map +1 -1
  72. package/dist/commands/bot-sends.d.ts +5 -0
  73. package/dist/commands/bot-sends.d.ts.map +1 -1
  74. package/dist/commands/bot-sends.js +56 -11
  75. package/dist/commands/bot-sends.js.map +1 -1
  76. package/dist/commands/bot-setup.d.ts +5 -0
  77. package/dist/commands/bot-setup.d.ts.map +1 -0
  78. package/dist/commands/bot-setup.js +107 -0
  79. package/dist/commands/bot-setup.js.map +1 -0
  80. package/dist/commands/bot-updates.d.ts +3 -0
  81. package/dist/commands/bot-updates.d.ts.map +1 -0
  82. package/dist/commands/bot-updates.js +196 -0
  83. package/dist/commands/bot-updates.js.map +1 -0
  84. package/dist/commands/bot.d.ts.map +1 -1
  85. package/dist/commands/bot.js +21 -1
  86. package/dist/commands/bot.js.map +1 -1
  87. package/dist/commands/chats.d.ts.map +1 -1
  88. package/dist/commands/chats.js +19 -6
  89. package/dist/commands/chats.js.map +1 -1
  90. package/dist/commands/check.d.ts +8 -0
  91. package/dist/commands/check.d.ts.map +1 -0
  92. package/dist/commands/check.js +64 -0
  93. package/dist/commands/check.js.map +1 -0
  94. package/dist/commands/context.d.ts +5 -0
  95. package/dist/commands/context.d.ts.map +1 -1
  96. package/dist/commands/context.js +5 -1
  97. package/dist/commands/context.js.map +1 -1
  98. package/dist/commands/hearing.d.ts +25 -0
  99. package/dist/commands/hearing.d.ts.map +1 -0
  100. package/dist/commands/hearing.js +41 -0
  101. package/dist/commands/hearing.js.map +1 -0
  102. package/dist/commands/inbox.d.ts.map +1 -1
  103. package/dist/commands/inbox.js +19 -3
  104. package/dist/commands/inbox.js.map +1 -1
  105. package/dist/commands/mcp.d.ts +1 -0
  106. package/dist/commands/mcp.d.ts.map +1 -1
  107. package/dist/commands/mcp.js +7 -4
  108. package/dist/commands/mcp.js.map +1 -1
  109. package/dist/commands/messages.d.ts.map +1 -1
  110. package/dist/commands/messages.js +21 -5
  111. package/dist/commands/messages.js.map +1 -1
  112. package/dist/commands/paging.d.ts +3 -1
  113. package/dist/commands/paging.d.ts.map +1 -1
  114. package/dist/commands/paging.js +4 -1
  115. package/dist/commands/paging.js.map +1 -1
  116. package/dist/commands/polls.d.ts +3 -0
  117. package/dist/commands/polls.d.ts.map +1 -0
  118. package/dist/commands/polls.js +103 -0
  119. package/dist/commands/polls.js.map +1 -0
  120. package/dist/commands/review.d.ts.map +1 -1
  121. package/dist/commands/review.js +5 -7
  122. package/dist/commands/review.js.map +1 -1
  123. package/dist/domain/map.d.ts +9 -1
  124. package/dist/domain/map.d.ts.map +1 -1
  125. package/dist/domain/map.js +57 -0
  126. package/dist/domain/map.js.map +1 -1
  127. package/dist/domain/models.d.ts +33 -0
  128. package/dist/domain/models.d.ts.map +1 -1
  129. package/dist/domain/models.js.map +1 -1
  130. package/dist/generated/client.generated.d.ts +2 -0
  131. package/dist/generated/client.generated.d.ts.map +1 -1
  132. package/dist/generated/client.generated.js +2 -0
  133. package/dist/generated/client.generated.js.map +1 -1
  134. package/dist/generated/opcodes.generated.d.ts +2 -0
  135. package/dist/generated/opcodes.generated.d.ts.map +1 -1
  136. package/dist/generated/opcodes.generated.js +2 -0
  137. package/dist/generated/opcodes.generated.js.map +1 -1
  138. package/dist/generated/operations.generated.d.ts +24 -3
  139. package/dist/generated/operations.generated.d.ts.map +1 -1
  140. package/dist/generated/operations.generated.js +4 -2
  141. package/dist/generated/operations.generated.js.map +1 -1
  142. package/dist/mcp/confirm.d.ts +6 -2
  143. package/dist/mcp/confirm.d.ts.map +1 -1
  144. package/dist/mcp/confirm.js +2 -2
  145. package/dist/mcp/confirm.js.map +1 -1
  146. package/dist/mcp/instructions.d.ts +2 -1
  147. package/dist/mcp/instructions.d.ts.map +1 -1
  148. package/dist/mcp/instructions.js +2 -1
  149. package/dist/mcp/instructions.js.map +1 -1
  150. package/dist/mcp/server.d.ts +2 -1
  151. package/dist/mcp/server.d.ts.map +1 -1
  152. package/dist/mcp/server.js +4 -1
  153. package/dist/mcp/server.js.map +1 -1
  154. package/dist/mcp/tools.d.ts +5 -1
  155. package/dist/mcp/tools.d.ts.map +1 -1
  156. package/dist/mcp/tools.js +187 -12
  157. package/dist/mcp/tools.js.map +1 -1
  158. package/dist/moderation/check.d.ts +105 -0
  159. package/dist/moderation/check.d.ts.map +1 -0
  160. package/dist/moderation/check.js +313 -0
  161. package/dist/moderation/check.js.map +1 -0
  162. package/dist/program.d.ts.map +1 -1
  163. package/dist/program.js +2 -0
  164. package/dist/program.js.map +1 -1
  165. package/dist/rendering/messages.d.ts +6 -1
  166. package/dist/rendering/messages.d.ts.map +1 -1
  167. package/dist/rendering/messages.js +24 -3
  168. package/dist/rendering/messages.js.map +1 -1
  169. package/dist/review.d.ts +10 -4
  170. package/dist/review.d.ts.map +1 -1
  171. package/dist/review.js +35 -53
  172. package/dist/review.js.map +1 -1
  173. package/dist/sends/journal.d.ts +1 -1
  174. package/dist/sends/journal.d.ts.map +1 -1
  175. package/dist/server/server-connection.d.ts +8 -1
  176. package/dist/server/server-connection.d.ts.map +1 -1
  177. package/dist/server/server-connection.js +27 -1
  178. package/dist/server/server-connection.js.map +1 -1
  179. package/dist/server/server.d.ts.map +1 -1
  180. package/dist/server/server.js +2 -1
  181. package/dist/server/server.js.map +1 -1
  182. package/dist/server/start.d.ts +1 -1
  183. package/dist/server/start.d.ts.map +1 -1
  184. package/dist/server/start.js +5 -3
  185. package/dist/server/start.js.map +1 -1
  186. package/dist/session/store.d.ts +2 -0
  187. package/dist/session/store.d.ts.map +1 -1
  188. package/dist/session/store.js +2 -0
  189. package/dist/session/store.js.map +1 -1
  190. package/dist/spec/index.d.ts.map +1 -1
  191. package/dist/spec/index.js +4 -2
  192. package/dist/spec/index.js.map +1 -1
  193. package/dist/spec/operations/chats.d.ts.map +1 -1
  194. package/dist/spec/operations/chats.js +3 -1
  195. package/dist/spec/operations/chats.js.map +1 -1
  196. package/dist/spec/operations/messages.d.ts +13 -3
  197. package/dist/spec/operations/messages.d.ts.map +1 -1
  198. package/dist/spec/operations/messages.js +37 -6
  199. package/dist/spec/operations/messages.js.map +1 -1
  200. package/dist/spec/operations/uploads.d.ts +13 -0
  201. package/dist/spec/operations/uploads.d.ts.map +1 -1
  202. package/dist/spec/operations/uploads.js +21 -0
  203. package/dist/spec/operations/uploads.js.map +1 -1
  204. package/dist/transcribe/index.d.ts +36 -1
  205. package/dist/transcribe/index.d.ts.map +1 -1
  206. package/dist/transcribe/index.js +91 -14
  207. package/dist/transcribe/index.js.map +1 -1
  208. package/dist/upload.d.ts +3 -0
  209. package/dist/upload.d.ts.map +1 -1
  210. package/dist/upload.js +13 -7
  211. package/dist/upload.js.map +1 -1
  212. package/dist/version.d.ts +1 -1
  213. package/dist/version.js +1 -1
  214. package/dist/voice.d.ts +9 -0
  215. package/dist/voice.d.ts.map +1 -0
  216. package/dist/voice.js +36 -0
  217. package/dist/voice.js.map +1 -0
  218. package/package.json +6 -2
  219. package/skills/max-cli/SKILL.md +17 -5
@@ -0,0 +1,206 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { CliError, writeSecurely } from "@leemour/cli-core";
4
+ import { annotate } from "@leemour/cli-core/commands";
5
+ import { Command } from "commander";
6
+ import { JoinLog } from "../bot/joins.js";
7
+ import { forget } from "../bot/keep.js";
8
+ import { botsDirectory } from "../bot/registry.js";
9
+ import { describe, finish, judge, MAX_ACTIONS, } from "../moderation/check.js";
10
+ import { defaultRules, ModerationRules, moderationPathFor, RULE_KEYS } from "../moderation/rules.js";
11
+ import { botContext } from "./bot-context.js";
12
+ import { chatIdOf } from "./bot-reads.js";
13
+ import { guardedCall, operation } from "./bot-sends.js";
14
+ import { environmentOf } from "./context.js";
15
+ const FIRST_LOOK_MS = 24 * 3_600_000;
16
+ const PAGE = 100;
17
+ const READ_AT_MOST = 2000;
18
+ /**
19
+ * `max <bot> bot chats check` — the group check of `max chats check`, done by the bot (plan
20
+ * `2026-09-27-bot-moderation-plan.md`). Removing bans unless `--no-ban` (`NEED-336`); joins come
21
+ * from what `bot updates watch` kept (`NEED-338`); account age and join requests are not in the
22
+ * Bot API, so those rules never fire here.
23
+ */
24
+ export const botCheckCommand = () => annotate(new Command("check"), { mutates: true })
25
+ .argument("<chat>", "chat id, or the title of a chat this bot has seen")
26
+ .option("--since <time>", "judge what came after this ISO 8601 time; the saved point stays")
27
+ .option("--dry-run", "judge and plan; do nothing")
28
+ .option("--allow-dangerous", "do what a rule at consent level flag asks: delete messages, remove people")
29
+ .option("--no-ban", "remove without banning; by default a removed person cannot come back by the link")
30
+ .option("--max-actions <n>", `at most this many actions in one check; ${MAX_ACTIONS} if not given`)
31
+ .description("judge a group's new messages and joins by its rules, and act as they allow — as the bot")
32
+ .action(async function (chat) {
33
+ const context = botContext(this);
34
+ const options = this.opts();
35
+ const maxActions = options.maxActions === undefined ? MAX_ACTIONS : Number(options.maxActions);
36
+ if (!Number.isInteger(maxActions) || maxActions < 0) {
37
+ throw new CliError("validation_error", `--max-actions takes a whole number — got ${options.maxActions}`);
38
+ }
39
+ const explicit = options.since === undefined ? undefined : Date.parse(options.since);
40
+ if (explicit !== undefined && Number.isNaN(explicit)) {
41
+ throw new CliError("validation_error", `--since takes an ISO 8601 time — got ${options.since}`);
42
+ }
43
+ const client = context.authenticated();
44
+ const self = (await client.me()).user_id;
45
+ context.registry.rememberBot(self);
46
+ const chatId = chatIdOf(chat, context.registry);
47
+ const title = context.registry.list().find((one) => one.id === chatId)?.title ?? null;
48
+ const profile = context.settings.profile;
49
+ const saved = new ModerationRules(moderationPathFor(profile)).read(chatId);
50
+ const rules = saved ?? defaultRules(title);
51
+ const points = botPoints(profile);
52
+ const point = points.read(chatId);
53
+ const since = explicit ?? (point === undefined ? Date.now() - FIRST_LOOK_MS : Date.parse(point));
54
+ const found = await gather(context, client, self, chatId, since);
55
+ const prepared = {
56
+ chatId,
57
+ title,
58
+ rules,
59
+ found,
60
+ findings: judge({ ...found, rules, now: Date.now() }),
61
+ explicit: explicit !== undefined,
62
+ notes: [...(saved ? [] : [`${title ?? chatId} has no rules yet — the defaults only report`]), ...found.notes],
63
+ };
64
+ const interactive = environmentOf(this).interactive ?? (process.stdin.isTTY === true && process.stderr.isTTY === true);
65
+ const { rows, notes } = await finish(moderator(context, self, options.ban), points, prepared, {
66
+ allowDangerous: options.allowDangerous === true,
67
+ dryRun: options.dryRun === true,
68
+ maxActions,
69
+ ...(interactive
70
+ ? {
71
+ confirm: async (finding) => /^y(es)?$/i.test((await context.ask(`${describe(finding)}? [y/N] `)).trim()),
72
+ }
73
+ : {}),
74
+ });
75
+ context.renderer.stream(context.format === "pretty" ? rows.map(pretty) : rows);
76
+ for (const note of notes)
77
+ context.streams.diagnostic(note);
78
+ });
79
+ /**
80
+ * New messages since `since`, oldest first. MAX answers newest first (`BUG-59`), so this walks back
81
+ * with `before` until a page comes short; past `READ_AT_MOST` only the newest are judged.
82
+ */
83
+ const readSince = async (client, self, chatId, since) => {
84
+ const read = new Map();
85
+ let before;
86
+ while (read.size < READ_AT_MOST) {
87
+ const answer = (await client.call(operation("getMessages"), {
88
+ query: {
89
+ chat_id: chatId,
90
+ count: String(PAGE),
91
+ after: String(since),
92
+ ...(before === undefined ? {} : { before: String(before) }),
93
+ },
94
+ }));
95
+ const page = (answer?.messages ?? []).map((raw) => client.decodeMessage(raw, self));
96
+ for (const message of page)
97
+ read.set(message.id, message);
98
+ const oldest = page.at(-1);
99
+ if (page.length < PAGE || !oldest)
100
+ return { messages: oldestFirst(read), more: false };
101
+ before = Date.parse(oldest.timestamp);
102
+ }
103
+ return { messages: oldestFirst(read), more: true };
104
+ };
105
+ const oldestFirst = (read) => [...read.values()].sort((a, b) => Date.parse(a.timestamp) - Date.parse(b.timestamp));
106
+ const gather = async (context, client, self, chatId, since) => {
107
+ const notes = [];
108
+ const { messages, more } = await readSince(client, self, chatId, since);
109
+ if (more)
110
+ notes.push(`more than ${READ_AT_MOST} messages since ${new Date(since).toISOString()} — only the newest were judged`);
111
+ const admins = (await client.call(operation("getAdmins"), { path: { chatId } }));
112
+ const answerers = new Set((admins?.members ?? []).map((member) => String(member.user_id)));
113
+ const log = JoinLog.for(context.settings.profile);
114
+ if (!log.kept())
115
+ notes.push("no joins kept for this bot — run `bot updates watch` to have them judged");
116
+ const joined = log
117
+ .read()
118
+ .filter((entry) => entry.chatId === chatId && entry.event === "add" && entry.at > since)
119
+ .map((entry) => ({ id: entry.userId, name: entry.name, username: null, registeredAt: null, lastSeenAt: null }));
120
+ return {
121
+ messages: messages,
122
+ joined,
123
+ requests: [],
124
+ answerers,
125
+ until: messages.at(-1)?.timestamp ?? null,
126
+ more,
127
+ notes,
128
+ };
129
+ };
130
+ const moderator = (context, self, ban) => ({
131
+ deleteMessage: async (chatId, messageId) => {
132
+ await guardedCall(context, operation("deleteMessage"), { query: { message_id: messageId } });
133
+ await forget(self, [{ chatId, messageId }], context.streams.diagnostic);
134
+ },
135
+ removePerson: async (chatId, personId) => {
136
+ await guardedCall(context, operation("removeMember"), {
137
+ path: { chatId },
138
+ query: { user_id: personId, ...(ban ? { block: "true" } : {}) },
139
+ });
140
+ },
141
+ });
142
+ /** Beside the bot's other state, one file per bot profile. */
143
+ const botPoints = (profile) => {
144
+ const path = join(botsDirectory(), "checks", `${profile}.json`);
145
+ const all = () => existsSync(path)
146
+ ? (JSON.parse(readFileSync(path, "utf8")).points ?? {})
147
+ : {};
148
+ return {
149
+ read: (chatId) => all()[chatId],
150
+ write: (chatId, at) => writeSecurely(path, `${JSON.stringify({ points: { ...all(), [chatId]: at } })}\n`, 0o600),
151
+ };
152
+ };
153
+ const pretty = (row) => ({
154
+ what: row.kind,
155
+ who: row.personName ?? row.personId,
156
+ rule: row.rule,
157
+ action: row.action,
158
+ outcome: row.outcome,
159
+ ...(row.reason ? { why: row.reason } : {}),
160
+ });
161
+ /** The same rules file as `max chats rules`, the chat named the bot's way. */
162
+ export const botRulesCommand = () => {
163
+ const command = new Command("rules").description("a chat's moderation rules for this bot, kept on this machine");
164
+ const show = (context, chatId, rules) => {
165
+ const saved = rules.read(chatId);
166
+ const title = context.registry.list().find((one) => one.id === chatId)?.title ?? null;
167
+ context.renderer.result({
168
+ chatId,
169
+ title,
170
+ file: rules.path,
171
+ saved: saved !== undefined,
172
+ rules: saved ?? defaultRules(title),
173
+ });
174
+ };
175
+ const target = (command, chat) => {
176
+ const context = botContext(command, { offline: true });
177
+ const chatId = chatIdOf(chat, context.registry);
178
+ const title = context.registry.list().find((one) => one.id === chatId)?.title ?? null;
179
+ return { context, chatId, title, rules: new ModerationRules(moderationPathFor(context.settings.profile)) };
180
+ };
181
+ command
182
+ .command("show <chat>")
183
+ .description("the chat's rules; the defaults, marked not saved, if it has none yet")
184
+ .action(function (chat) {
185
+ const { context, chatId, rules } = target(this, chat);
186
+ show(context, chatId, rules);
187
+ });
188
+ command
189
+ .command("set <chat> <key> <value>")
190
+ .description(`change one rule — ${RULE_KEYS.join(", ")}`)
191
+ .action(function (chat, key, value) {
192
+ const { context, chatId, title, rules } = target(this, chat);
193
+ rules.set(chatId, title, key, value);
194
+ show(context, chatId, rules);
195
+ });
196
+ command
197
+ .command("unset <chat> <key>")
198
+ .description("put one rule back to its default")
199
+ .action(function (chat, key) {
200
+ const { context, chatId, title, rules } = target(this, chat);
201
+ rules.unset(chatId, title, key);
202
+ show(context, chatId, rules);
203
+ });
204
+ return command;
205
+ };
206
+ //# sourceMappingURL=bot-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-check.js","sourceRoot":"","sources":["../../src/commands/bot-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ export declare const commentsCommand: () => Command;
3
+ export declare const callbacksCommand: () => Command;
4
+ //# sourceMappingURL=bot-comments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-comments.d.ts","sourceRoot":"","sources":["../../src/commands/bot-comments.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAW3C,eAAO,MAAM,eAAe,QAAO,OAoElC,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,OA4BnC,CAAA"}
@@ -0,0 +1,97 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ import { annotate } from "@leemour/cli-core/commands";
3
+ import { Command, Option } from "commander";
4
+ import { plainJson } from "../bot/transport.js";
5
+ import { botContext } from "./bot-context.js";
6
+ import { checked } from "./bot-members.js";
7
+ import { guardedCall, operation, textOf } from "./bot-sends.js";
8
+ const format = () => new Option("--format <format>", "how the text is marked up").choices(["markdown", "html"]);
9
+ const commentBody = (id, text, format) => checked(id, JSON.stringify({ text: textOf(text), ...(format ? { format } : {}) }));
10
+ export const commentsCommand = () => {
11
+ const command = new Command("comments").description("comments under a channel post — each command takes the post's message id (mid.…) first");
12
+ command
13
+ .command("list <message>")
14
+ .description("the comments under a post, newest last")
15
+ .option("--limit <n>", "how many, up to 100", (value) => Number.parseInt(value, 10))
16
+ .action(async function (message) {
17
+ const context = botContext(this);
18
+ const limit = context.settings.limit;
19
+ if (limit > 100)
20
+ throw new CliError("validation_error", "MAX gives at most 100 at a time — --limit 100");
21
+ const answer = await context.authenticated().call(operation("getComments"), {
22
+ path: { messageId: message },
23
+ query: { count: String(limit) },
24
+ });
25
+ context.renderer.result(plainJson(answer)?.messages ?? []);
26
+ });
27
+ command
28
+ .command("get <message> <comment>")
29
+ .description("one comment under a post")
30
+ .action(async function (message, comment) {
31
+ const context = botContext(this);
32
+ const answer = await context.authenticated().call(operation("getCommentById"), {
33
+ path: { messageId: message, commentId: comment },
34
+ });
35
+ context.renderer.result(plainJson(answer));
36
+ });
37
+ annotate(command.command("send <message> <text>"), { mutates: true })
38
+ .description("comment under a post as the bot; - reads stdin")
39
+ .addOption(format())
40
+ .action(async function (message, text) {
41
+ const context = botContext(this);
42
+ const answer = await guardedCall(context, operation("sendComment"), {
43
+ path: { messageId: message },
44
+ body: commentBody("sendComment", text, this.opts().format),
45
+ });
46
+ context.renderer.result(plainJson(answer));
47
+ });
48
+ annotate(command.command("edit <message> <comment> <text>"), { mutates: true })
49
+ .description("replace the text of a comment the bot wrote; - reads stdin")
50
+ .addOption(format())
51
+ .action(async function (message, comment, text) {
52
+ const context = botContext(this);
53
+ const answer = await guardedCall(context, operation("editComment"), {
54
+ path: { messageId: message },
55
+ query: { comment_id: comment },
56
+ body: commentBody("editComment", text, this.opts().format),
57
+ });
58
+ context.renderer.result(plainJson(answer) ?? { success: true });
59
+ });
60
+ annotate(command.command("delete <message> <comment>"), { mutates: true })
61
+ .description("delete a comment under a post")
62
+ .action(async function (message, comment) {
63
+ const context = botContext(this);
64
+ const answer = await guardedCall(context, operation("deleteComment"), {
65
+ path: { messageId: message },
66
+ query: { comment_id: comment },
67
+ });
68
+ context.renderer.result(plainJson(answer) ?? { success: true });
69
+ });
70
+ return command;
71
+ };
72
+ export const callbacksCommand = () => {
73
+ const command = new Command("callbacks").description("answers to the buttons people press under the bot's messages");
74
+ annotate(command.command("answer <callback>"), { mutates: true })
75
+ .description("answer a pressed button by its callback id: --notification shows the person a one-time note, " +
76
+ "--text replaces the message the button was on")
77
+ .option("--text <text>", "the message's new text; - reads stdin")
78
+ .option("--notification <text>", "a note only the person who pressed sees")
79
+ .action(async function (callback) {
80
+ const context = botContext(this);
81
+ const options = this.opts();
82
+ if (options.text === undefined && options.notification === undefined) {
83
+ throw new CliError("validation_error", "an answer needs --text, --notification, or both");
84
+ }
85
+ const body = JSON.stringify({
86
+ ...(options.text === undefined ? {} : { message: { text: textOf(options.text) } }),
87
+ ...(options.notification === undefined ? {} : { notification: options.notification }),
88
+ });
89
+ const answer = await guardedCall(context, operation("answerOnCallback"), {
90
+ query: { callback_id: callback },
91
+ body: checked("answerOnCallback", body),
92
+ });
93
+ context.renderer.result(plainJson(answer) ?? { success: true });
94
+ });
95
+ return command;
96
+ };
97
+ //# sourceMappingURL=bot-comments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-comments.js","sourceRoot":"","sources":["../../src/commands/bot-comments.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,10 @@ import { BotTokenStore } from "../bot/auth.js";
4
4
  import { BotApiClient } from "../bot/client.js";
5
5
  import { ChatRegistry } from "../bot/registry.js";
6
6
  import { type Settings } from "../config.js";
7
- export declare const botContext: (command: Command) => {
7
+ /** `offline` is for the reads the local copy can answer; every other command still refuses the flag. */
8
+ export declare const botContext: (command: Command, { offline: answersOffline }?: {
9
+ offline?: boolean;
10
+ }) => {
8
11
  settings: Settings;
9
12
  renderer: import("@leemour/cli-core").Renderer;
10
13
  streams: import("@leemour/cli-core").Streams;
@@ -12,9 +15,12 @@ export declare const botContext: (command: Command) => {
12
15
  color: boolean;
13
16
  store: BotTokenStore;
14
17
  registry: ChatRegistry;
15
- client: (token: string) => BotApiClient;
18
+ client: (token: string, stop?: AbortSignal) => BotApiClient;
16
19
  ask: import("./context.js").Ask;
17
- authenticated: () => BotApiClient;
20
+ authenticated: (stop?: AbortSignal) => BotApiClient;
21
+ signal: AbortSignal | undefined;
22
+ uploadFetch: () => import("@leemour/cli-core/http").FetchLike;
23
+ offline: boolean;
18
24
  };
19
25
  /** The personal account's `readOnly` and `allow` hold for the bot too; a prompt was waived (`NEED-304`), a refusal was not. */
20
26
  export declare const assertAllowed: (operation: ManifestOperation, settings: Settings) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"bot-context.d.ts","sourceRoot":"","sources":["../../src/commands/bot-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AAM/E,eAAO,MAAM,UAAU,YAAa,OAAO;;;;;;;;oBAYlB,MAAM;;;CAsB9B,CAAA;AAED,+HAA+H;AAC/H,eAAO,MAAM,aAAa,cAAe,iBAAiB,YAAY,QAAQ,KAAG,IAkBhF,CAAA"}
1
+ {"version":3,"file":"bot-context.d.ts","sourceRoot":"","sources":["../../src/commands/bot-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AAM/E,wGAAwG;AACxG,eAAO,MAAM,UAAU,YAAa,OAAO,gCAAuC;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;;;;oBAe9E,MAAM,SAAS,WAAW;;2BAanB,WAAW;;;;CA2B1C,CAAA;AAED,+HAA+H;AAC/H,eAAO,MAAM,aAAa,cAAe,iBAAiB,YAAY,QAAQ,KAAG,IAkBhF,CAAA"}
@@ -3,16 +3,20 @@ import { BotTokenStore } from "../bot/auth.js";
3
3
  import { BotApiClient } from "../bot/client.js";
4
4
  import { BOT_PERMISSIONS } from "../bot/permissions.js";
5
5
  import { ChatRegistry } from "../bot/registry.js";
6
+ import { botFetch } from "../bot/transport.js";
6
7
  import { resolveSettings } from "../config.js";
7
8
  import { resolveOutput } from "../output.js";
8
9
  import { asFirstWord } from "../profile.js";
9
10
  import { readSecret } from "../session/prompt.js";
10
11
  import { environmentOf } from "./context.js";
11
- export const botContext = (command) => {
12
+ /** `offline` is for the reads the local copy can answer; every other command still refuses the flag. */
13
+ export const botContext = (command, { offline: answersOffline = false } = {}) => {
12
14
  const environment = environmentOf(command);
13
15
  const flags = command.optsWithGlobals();
14
- if (flags.offline)
15
- throw new CliError("validation_error", "max bot always asks MAX; --offline cannot apply to it");
16
+ const offline = flags.offline === true;
17
+ if (offline && !answersOffline) {
18
+ throw new CliError("validation_error", `--offline reads the local copy; \`${command.name()}\` has to ask MAX`);
19
+ }
16
20
  const settings = resolveSettings(flags);
17
21
  const { renderer, streams, format, color } = resolveOutput({
18
22
  ...settings,
@@ -20,25 +24,44 @@ export const botContext = (command) => {
20
24
  ...(environment.tty === undefined ? {} : { tty: environment.tty }),
21
25
  });
22
26
  const store = environment.botStore?.(settings.profile) ?? new BotTokenStore({ profile: settings.profile });
23
- const signal = settings.commandTimeoutMs === undefined ? undefined : AbortSignal.timeout(settings.commandTimeoutMs);
24
- const client = (token) => new BotApiClient({
25
- token,
26
- ...(environment.botFetch ? { fetch: environment.botFetch } : {}),
27
- ...(environment.botUrl ? { baseUrl: environment.botUrl } : {}),
28
- ...(settings.timeoutMs === undefined ? {} : { timeoutMs: settings.timeoutMs }),
29
- ...(environment.botRetry ? { retry: environment.botRetry } : {}),
30
- ...(signal ? { signal } : {}),
31
- });
27
+ const deadline = settings.commandTimeoutMs === undefined ? undefined : AbortSignal.timeout(settings.commandTimeoutMs);
28
+ const client = (token, stop) => {
29
+ const signal = deadline && stop ? AbortSignal.any([deadline, stop]) : (deadline ?? stop);
30
+ return new BotApiClient({
31
+ token,
32
+ ...(environment.botFetch ? { fetch: environment.botFetch } : {}),
33
+ ...(environment.botUrl ? { baseUrl: environment.botUrl } : {}),
34
+ ...(settings.timeoutMs === undefined ? {} : { timeoutMs: settings.timeoutMs }),
35
+ ...(environment.botRetry ? { retry: environment.botRetry } : {}),
36
+ ...(signal ? { signal } : {}),
37
+ });
38
+ };
32
39
  const ask = environment.ask ?? ((prompt) => readSecret(prompt, { echo: false }));
33
- const authenticated = () => {
40
+ /** `stop` is for a command that runs until told to — `updates watch` — and ends its request in flight. */
41
+ const authenticated = (stop) => {
34
42
  const stored = store.read();
35
43
  if (!stored) {
36
44
  throw new CliError("authentication_error", `no bot token for profile "${settings.profile}" — run \`max ${asFirstWord(settings.profile)}bot auth set\``);
37
45
  }
38
- return client(stored.token);
46
+ return client(stored.token, stop);
39
47
  };
40
48
  const registry = environment.botRegistry?.(settings.profile) ?? new ChatRegistry(settings.profile);
41
- return { settings, renderer, streams, format, color, store, registry, client, ask, authenticated };
49
+ const uploadFetch = () => environment.botFetch ?? botFetch();
50
+ return {
51
+ settings,
52
+ renderer,
53
+ streams,
54
+ format,
55
+ color,
56
+ store,
57
+ registry,
58
+ client,
59
+ ask,
60
+ authenticated,
61
+ signal: deadline,
62
+ uploadFetch,
63
+ offline,
64
+ };
42
65
  };
43
66
  /** The personal account's `readOnly` and `allow` hold for the bot too; a prompt was waived (`NEED-304`), a refusal was not. */
44
67
  export const assertAllowed = (operation, settings) => {
@@ -1 +1 @@
1
- {"version":3,"file":"bot-context.js","sourceRoot":"","sources":["../../src/commands/bot-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot-context.js","sourceRoot":"","sources":["../../src/commands/bot-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG5C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAoB,eAAe,EAAiB,MAAM,cAAc,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,wGAAwG;AACxG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,KAAK,EAAE,GAA0B,EAAE,EAAE,EAAE;IAC9G,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,EAAuC,CAAA;IAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,IAAI,CAAA;IACtC,IAAI,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;QAC/B,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,qCAAqC,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAA;IAChH,CAAC;IACD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC;QACzD,GAAG,QAAQ;QACX,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC;KACnE,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IAC1G,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IACrH,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,IAAkB,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAA;QACxF,OAAO,IAAI,YAAY,CAAC;YACtB,KAAK;YACL,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;YAC9E,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CAAC,CAAA;IACJ,CAAC,CAAA;IACD,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC,MAAc,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IACxF,0GAA0G;IAC1G,MAAM,aAAa,GAAG,CAAC,IAAkB,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,QAAQ,CAChB,sBAAsB,EACtB,6BAA6B,QAAQ,CAAC,OAAO,iBAAiB,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAC5G,CAAA;QACH,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC,CAAA;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAClG,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAA;IAC5D,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,MAAM;QACN,KAAK;QACL,KAAK;QACL,QAAQ;QACR,MAAM;QACN,GAAG;QACH,aAAa;QACb,MAAM,EAAE,QAAQ;QAChB,WAAW;QACX,OAAO;KACR,CAAA;AACH,CAAC,CAAA;AAED,+HAA+H;AAC/H,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAA4B,EAAE,QAAkB,EAAQ,EAAE;IACtF,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM;QAAE,OAAM;IACvC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,WAAW,QAAQ,CAAC,OAAO,qCAAqC,QAAQ,CAAC,OAAO,CAAC,QAAQ,MAAM;YAC7F,kBAAkB,SAAS,CAAC,OAAO,SAAS,CAC/C,CAAA;IACH,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK;QAAE,OAAM;IAC3B,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAChD,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,WAAW,QAAQ,CAAC,OAAO,mBAAmB,UAAU,IAAI,SAAS,CAAC,OAAO,GAAG;YAC9E,WAAW,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,eAAe,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,CAC5F,CAAA;IACH,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const botMcpCommand: () => Command;
3
+ //# sourceMappingURL=bot-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-mcp.d.ts","sourceRoot":"","sources":["../../src/commands/bot-mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiCnC,eAAO,MAAM,aAAa,QAAO,OA+DhC,CAAA"}
@@ -0,0 +1,69 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ import { Command } from "commander";
3
+ import { ownScript } from "../install.js";
4
+ import { botContext } from "./bot-context.js";
5
+ import { environmentOf } from "./context.js";
6
+ import { serverEntry } from "./mcp.js";
7
+ const withFlags = (command) => command
8
+ .option("--allow-send", "offer the tools that write as the bot; without it the server can only read")
9
+ .option("--confirm-send", "show the owner every write in a form from the server first")
10
+ .option("--allow-delete", "offer the tools that delete messages and comments; it cannot be undone")
11
+ .option("--allow-moderate", "offer max_bot_chats_check and adding and removing members — the bot acts on a group's rules");
12
+ const checked = (flags) => {
13
+ if (flags.confirmSend && !flags.allowSend && !flags.allowDelete && !flags.allowModerate) {
14
+ throw new CliError("validation_error", "`--confirm-send` confirms writes, and without `--allow-send`, `--allow-delete` or `--allow-moderate` there are none");
15
+ }
16
+ return flags;
17
+ };
18
+ export const botMcpCommand = () => {
19
+ const command = withFlags(new Command("mcp").description("serve this bot to an agent over MCP, on stdin and stdout — `claude mcp add sales-bot -- max sales bot mcp`")).action(async function () {
20
+ const flags = checked(this.opts());
21
+ const context = botContext(this);
22
+ context.authenticated();
23
+ // Loaded here: every other command would otherwise pay for the SDK.
24
+ const [{ serveBotOverStdio }, { run }] = await Promise.all([
25
+ import("../bot-mcp/server.js"),
26
+ import("../program.js"),
27
+ ]);
28
+ await serveBotOverStdio({
29
+ profile: context.settings.profile,
30
+ allowSend: flags.allowSend === true,
31
+ confirmSend: flags.confirmSend === true,
32
+ allowDelete: flags.allowDelete === true,
33
+ allowModerate: flags.allowModerate === true,
34
+ ...(context.settings.allow ? { permitted: context.settings.allow } : {}),
35
+ run,
36
+ environment: environmentOf(this),
37
+ }, context.streams.diagnostic);
38
+ });
39
+ command.addCommand(withFlags(new Command("config").description("print the mcpServers entry for Claude Desktop, Cursor and others, with full paths; writes nothing")).action(function () {
40
+ const flags = checked(this.optsWithGlobals());
41
+ const { renderer, settings, format, streams } = botContext(this);
42
+ const entry = serverEntry({
43
+ profile: settings.profile,
44
+ flags: {},
45
+ execPath: process.execPath,
46
+ scriptPath: ownScript(),
47
+ env: process.env,
48
+ });
49
+ const [name, server] = Object.entries(entry.config.mcpServers)[0];
50
+ const flagArgs = [
51
+ ["allowSend", "--allow-send"],
52
+ ["confirmSend", "--confirm-send"],
53
+ ["allowDelete", "--allow-delete"],
54
+ ["allowModerate", "--allow-moderate"],
55
+ ]
56
+ .filter(([key]) => flags[key] === true)
57
+ .map(([, flag]) => flag);
58
+ const args = server.args.flatMap((arg) => (arg === "mcp" ? ["bot", "mcp", ...flagArgs] : [arg]));
59
+ const config = { mcpServers: { [name.replace(/^max/, "max-bot")]: { ...server, args } } };
60
+ if (format === "pretty")
61
+ streams.data(JSON.stringify(config, null, 2));
62
+ else
63
+ renderer.result(config);
64
+ if (entry.warning)
65
+ renderer.note(entry.warning);
66
+ }));
67
+ return command;
68
+ };
69
+ //# sourceMappingURL=bot-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-mcp.js","sourceRoot":"","sources":["../../src/commands/bot-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * User ids as JSON numbers with exactly the digits typed: the schema says int64, and `Number`
4
+ * would turn an id above 2^53 into somebody else's.
5
+ */
6
+ export declare const userIdsJson: (ids: readonly string[]) => string;
7
+ /** A friendly command's body meets the same schema check as one given to `max bot api`. */
8
+ export declare const checked: (id: string, text: string) => string;
9
+ export declare const membersCommand: () => Command;
10
+ export declare const ADMIN_PERMISSIONS: readonly ["read_all_messages", "add_remove_members", "add_admins", "change_chat_info", "pin_message", "edit_link", "write", "edit", "delete", "can_call", "view_stats"];
11
+ export declare const adminsCommand: () => Command;
12
+ //# sourceMappingURL=bot-members.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-members.d.ts","sourceRoot":"","sources":["../../src/commands/bot-members.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC;;;GAGG;AACH,eAAO,MAAM,WAAW,QAAS,SAAS,MAAM,EAAE,KAAG,MAKpD,CAAA;AAED,2FAA2F;AAC3F,eAAO,MAAM,OAAO,OAAQ,MAAM,QAAQ,MAAM,KAAG,MAAgD,CAAA;AAYnG,eAAO,MAAM,cAAc,QAAO,OA4CjC,CAAA;AAED,eAAO,MAAM,iBAAiB,YAC5B,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,OAAO,EACP,MAAM,EACN,QAAQ,EACR,UAAU,EACV,YAAY,CACJ,CAAA;AAkBV,eAAO,MAAM,aAAa,QAAO,OA2ChC,CAAA"}