@leemour/max-cli 0.6.0 → 0.7.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 (204) hide show
  1. package/README.md +8 -0
  2. package/dist/cache/index.d.ts +1 -0
  3. package/dist/cache/index.d.ts.map +1 -1
  4. package/dist/cache/index.js +4 -4
  5. package/dist/cache/index.js.map +1 -1
  6. package/dist/client.d.ts +178 -9
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +764 -34
  9. package/dist/client.js.map +1 -1
  10. package/dist/commands/account.d.ts.map +1 -1
  11. package/dist/commands/account.js +71 -3
  12. package/dist/commands/account.js.map +1 -1
  13. package/dist/commands/chats.d.ts.map +1 -1
  14. package/dist/commands/chats.js +159 -0
  15. package/dist/commands/chats.js.map +1 -1
  16. package/dist/commands/complete.d.ts +10 -0
  17. package/dist/commands/complete.d.ts.map +1 -0
  18. package/dist/commands/complete.js +89 -0
  19. package/dist/commands/complete.js.map +1 -0
  20. package/dist/commands/config.d.ts.map +1 -1
  21. package/dist/commands/config.js +4 -2
  22. package/dist/commands/config.js.map +1 -1
  23. package/dist/commands/contacts.d.ts +3 -0
  24. package/dist/commands/contacts.d.ts.map +1 -1
  25. package/dist/commands/contacts.js +85 -0
  26. package/dist/commands/contacts.js.map +1 -1
  27. package/dist/commands/context.d.ts +8 -1
  28. package/dist/commands/context.d.ts.map +1 -1
  29. package/dist/commands/context.js +26 -6
  30. package/dist/commands/context.js.map +1 -1
  31. package/dist/commands/folders.d.ts +4 -0
  32. package/dist/commands/folders.d.ts.map +1 -0
  33. package/dist/commands/folders.js +76 -0
  34. package/dist/commands/folders.js.map +1 -0
  35. package/dist/commands/inbox.js +2 -2
  36. package/dist/commands/inbox.js.map +1 -1
  37. package/dist/commands/mcp.d.ts +3 -0
  38. package/dist/commands/mcp.d.ts.map +1 -0
  39. package/dist/commands/mcp.js +17 -0
  40. package/dist/commands/mcp.js.map +1 -0
  41. package/dist/commands/messages.d.ts.map +1 -1
  42. package/dist/commands/messages.js +84 -2
  43. package/dist/commands/messages.js.map +1 -1
  44. package/dist/commands/reactions.d.ts.map +1 -1
  45. package/dist/commands/reactions.js +17 -0
  46. package/dist/commands/reactions.js.map +1 -1
  47. package/dist/commands/serve.d.ts +10 -0
  48. package/dist/commands/serve.d.ts.map +1 -0
  49. package/dist/commands/serve.js +50 -0
  50. package/dist/commands/serve.js.map +1 -0
  51. package/dist/commands/session.d.ts.map +1 -1
  52. package/dist/commands/session.js +4 -1
  53. package/dist/commands/session.js.map +1 -1
  54. package/dist/commands/update.d.ts +7 -0
  55. package/dist/commands/update.d.ts.map +1 -0
  56. package/dist/commands/update.js +53 -0
  57. package/dist/commands/update.js.map +1 -0
  58. package/dist/commands/watch.d.ts +9 -0
  59. package/dist/commands/watch.d.ts.map +1 -0
  60. package/dist/commands/watch.js +68 -0
  61. package/dist/commands/watch.js.map +1 -0
  62. package/dist/config.d.ts +16 -1
  63. package/dist/config.d.ts.map +1 -1
  64. package/dist/config.js +27 -4
  65. package/dist/config.js.map +1 -1
  66. package/dist/domain/map.d.ts +8 -1
  67. package/dist/domain/map.d.ts.map +1 -1
  68. package/dist/domain/map.js +42 -1
  69. package/dist/domain/map.js.map +1 -1
  70. package/dist/domain/models.d.ts +47 -0
  71. package/dist/domain/models.d.ts.map +1 -1
  72. package/dist/domain/models.js.map +1 -1
  73. package/dist/generated/client.generated.d.ts +26 -0
  74. package/dist/generated/client.generated.d.ts.map +1 -1
  75. package/dist/generated/client.generated.js +26 -0
  76. package/dist/generated/client.generated.js.map +1 -1
  77. package/dist/generated/opcodes.generated.d.ts +24 -5
  78. package/dist/generated/opcodes.generated.d.ts.map +1 -1
  79. package/dist/generated/opcodes.generated.js +24 -5
  80. package/dist/generated/opcodes.generated.js.map +1 -1
  81. package/dist/generated/operations.generated.d.ts +163 -6
  82. package/dist/generated/operations.generated.d.ts.map +1 -1
  83. package/dist/generated/operations.generated.js +27 -4
  84. package/dist/generated/operations.generated.js.map +1 -1
  85. package/dist/mcp/confirm.d.ts +24 -0
  86. package/dist/mcp/confirm.d.ts.map +1 -0
  87. package/dist/mcp/confirm.js +53 -0
  88. package/dist/mcp/confirm.js.map +1 -0
  89. package/dist/mcp/instructions.d.ts +10 -0
  90. package/dist/mcp/instructions.d.ts.map +1 -0
  91. package/dist/mcp/instructions.js +25 -0
  92. package/dist/mcp/instructions.js.map +1 -0
  93. package/dist/mcp/server.d.ts +23 -0
  94. package/dist/mcp/server.d.ts.map +1 -0
  95. package/dist/mcp/server.js +38 -0
  96. package/dist/mcp/server.js.map +1 -0
  97. package/dist/mcp/session.d.ts +28 -0
  98. package/dist/mcp/session.d.ts.map +1 -0
  99. package/dist/mcp/session.js +91 -0
  100. package/dist/mcp/session.js.map +1 -0
  101. package/dist/mcp/tools.d.ts +8 -0
  102. package/dist/mcp/tools.d.ts.map +1 -0
  103. package/dist/mcp/tools.js +274 -0
  104. package/dist/mcp/tools.js.map +1 -0
  105. package/dist/program.d.ts.map +1 -1
  106. package/dist/program.js +17 -0
  107. package/dist/program.js.map +1 -1
  108. package/dist/protocol/connection.d.ts +10 -8
  109. package/dist/protocol/connection.d.ts.map +1 -1
  110. package/dist/protocol/connection.js +64 -7
  111. package/dist/protocol/connection.js.map +1 -1
  112. package/dist/protocol/frame.d.ts +2 -1
  113. package/dist/protocol/frame.d.ts.map +1 -1
  114. package/dist/protocol/frame.js.map +1 -1
  115. package/dist/rendering/messages.d.ts.map +1 -1
  116. package/dist/rendering/messages.js +17 -9
  117. package/dist/rendering/messages.js.map +1 -1
  118. package/dist/sends/guard.d.ts +3 -2
  119. package/dist/sends/guard.d.ts.map +1 -1
  120. package/dist/sends/guard.js +14 -10
  121. package/dist/sends/guard.js.map +1 -1
  122. package/dist/sends/journal.d.ts +15 -2
  123. package/dist/sends/journal.d.ts.map +1 -1
  124. package/dist/sends/journal.js.map +1 -1
  125. package/dist/server/lines.d.ts +9 -0
  126. package/dist/server/lines.d.ts.map +1 -0
  127. package/dist/server/lines.js +25 -0
  128. package/dist/server/lines.js.map +1 -0
  129. package/dist/server/server-connection.d.ts +35 -0
  130. package/dist/server/server-connection.d.ts.map +1 -0
  131. package/dist/server/server-connection.js +195 -0
  132. package/dist/server/server-connection.js.map +1 -0
  133. package/dist/server/server.d.ts +62 -0
  134. package/dist/server/server.d.ts.map +1 -0
  135. package/dist/server/server.js +297 -0
  136. package/dist/server/server.js.map +1 -0
  137. package/dist/server/start.d.ts +12 -0
  138. package/dist/server/start.d.ts.map +1 -0
  139. package/dist/server/start.js +41 -0
  140. package/dist/server/start.js.map +1 -0
  141. package/dist/server/subscribe.d.ts +9 -0
  142. package/dist/server/subscribe.d.ts.map +1 -0
  143. package/dist/server/subscribe.js +26 -0
  144. package/dist/server/subscribe.js.map +1 -0
  145. package/dist/session/browser.d.ts +1 -1
  146. package/dist/session/browser.d.ts.map +1 -1
  147. package/dist/session/browser.js +86 -59
  148. package/dist/session/browser.js.map +1 -1
  149. package/dist/session/store.d.ts +2 -0
  150. package/dist/session/store.d.ts.map +1 -1
  151. package/dist/session/store.js +4 -0
  152. package/dist/session/store.js.map +1 -1
  153. package/dist/spec/define.d.ts.map +1 -1
  154. package/dist/spec/define.js +14 -1
  155. package/dist/spec/define.js.map +1 -1
  156. package/dist/spec/index.d.ts.map +1 -1
  157. package/dist/spec/index.js +28 -5
  158. package/dist/spec/index.js.map +1 -1
  159. package/dist/spec/operations/account.d.ts +20 -0
  160. package/dist/spec/operations/account.d.ts.map +1 -0
  161. package/dist/spec/operations/account.js +62 -0
  162. package/dist/spec/operations/account.js.map +1 -0
  163. package/dist/spec/operations/chats.d.ts +54 -0
  164. package/dist/spec/operations/chats.d.ts.map +1 -1
  165. package/dist/spec/operations/chats.js +121 -0
  166. package/dist/spec/operations/chats.js.map +1 -1
  167. package/dist/spec/operations/contacts.d.ts +19 -1
  168. package/dist/spec/operations/contacts.d.ts.map +1 -1
  169. package/dist/spec/operations/contacts.js +49 -6
  170. package/dist/spec/operations/contacts.js.map +1 -1
  171. package/dist/spec/operations/folders.d.ts +24 -0
  172. package/dist/spec/operations/folders.d.ts.map +1 -0
  173. package/dist/spec/operations/folders.js +64 -0
  174. package/dist/spec/operations/folders.js.map +1 -0
  175. package/dist/spec/operations/messages.d.ts +44 -6
  176. package/dist/spec/operations/messages.d.ts.map +1 -1
  177. package/dist/spec/operations/messages.js +86 -17
  178. package/dist/spec/operations/messages.js.map +1 -1
  179. package/dist/spec/operations/session.d.ts +7 -0
  180. package/dist/spec/operations/session.d.ts.map +1 -1
  181. package/dist/spec/operations/session.js +17 -0
  182. package/dist/spec/operations/session.js.map +1 -1
  183. package/dist/spec/operations/uploads.d.ts +18 -0
  184. package/dist/spec/operations/uploads.d.ts.map +1 -0
  185. package/dist/spec/operations/uploads.js +35 -0
  186. package/dist/spec/operations/uploads.js.map +1 -0
  187. package/dist/testing/mock-max.d.ts +12 -2
  188. package/dist/testing/mock-max.d.ts.map +1 -1
  189. package/dist/testing/mock-max.js +15 -2
  190. package/dist/testing/mock-max.js.map +1 -1
  191. package/dist/testing/sandbox.js +2 -0
  192. package/dist/testing/sandbox.js.map +1 -1
  193. package/dist/update.d.ts +36 -0
  194. package/dist/update.d.ts.map +1 -0
  195. package/dist/update.js +70 -0
  196. package/dist/update.js.map +1 -0
  197. package/dist/upload.d.ts +10 -0
  198. package/dist/upload.d.ts.map +1 -0
  199. package/dist/upload.js +61 -0
  200. package/dist/upload.js.map +1 -0
  201. package/dist/version.d.ts +1 -1
  202. package/dist/version.js +1 -1
  203. package/package.json +12 -3
  204. package/skills/max-cli/SKILL.md +10 -1
@@ -0,0 +1,28 @@
1
+ import type { MaxClient } from "../client.js";
2
+ import type { CommandContext } from "../commands/context.js";
3
+ export interface SessionOptions {
4
+ /** Close the connection after this long without a call. */
5
+ idleMs?: number;
6
+ /** Log in again after this long, whatever the traffic: the chat list is what the login answered. */
7
+ maxAgeMs?: number;
8
+ now?: () => number;
9
+ }
10
+ /**
11
+ * **One connection for the whole agent session, and never for long** (`NEED-152`).
12
+ *
13
+ * The CLI logs in once per command. Here the process outlives the call, so the connection is kept
14
+ * between calls — and dropped after `idleMs` of quiet, after `maxAgeMs` whatever the traffic, and
15
+ * after any failure that may have been the connection's. The age limit is there because a login
16
+ * answers the chat list and the profile once; without it an agent that keeps talking would read a
17
+ * snapshot that never moves.
18
+ *
19
+ * Calls run **one at a time**. A client may send read-only calls in parallel, and one socket with
20
+ * one `seq` space is not the place to find out whether MAX minds.
21
+ */
22
+ export declare class MaxSession {
23
+ #private;
24
+ constructor(context: CommandContext, { idleMs, maxAgeMs, now }?: SessionOptions);
25
+ use<T>(name: string, body: (client: MaxClient) => Promise<T>): Promise<T>;
26
+ close(): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,cAAc,CAAA;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAI5D,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAWD;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;;gBAWT,OAAO,EAAE,cAAc,EAAE,EAAE,MAAgB,EAAE,QAAkB,EAAE,GAAc,EAAE,GAAE,cAAmB;IAOlH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAMnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAiD7B"}
@@ -0,0 +1,91 @@
1
+ import { isCliError } from "@leemour/cli-core";
2
+ import { openProfileCache } from "../cache/index.js";
3
+ /** The caller's mistake, not the connection's — nothing about the socket is in doubt after these. */
4
+ const HARMLESS = new Set(["validation_error", "not_found", "permission_error", "confirmation_required", "rate_limited"]);
5
+ /**
6
+ * **One connection for the whole agent session, and never for long** (`NEED-152`).
7
+ *
8
+ * The CLI logs in once per command. Here the process outlives the call, so the connection is kept
9
+ * between calls — and dropped after `idleMs` of quiet, after `maxAgeMs` whatever the traffic, and
10
+ * after any failure that may have been the connection's. The age limit is there because a login
11
+ * answers the chat list and the profile once; without it an agent that keeps talking would read a
12
+ * snapshot that never moves.
13
+ *
14
+ * Calls run **one at a time**. A client may send read-only calls in parallel, and one socket with
15
+ * one `seq` space is not the place to find out whether MAX minds.
16
+ */
17
+ export class MaxSession {
18
+ #context;
19
+ #idleMs;
20
+ #maxAgeMs;
21
+ #now;
22
+ #held;
23
+ #idle;
24
+ #queue = Promise.resolve();
25
+ #events = () => { };
26
+ #closed = false;
27
+ constructor(context, { idleMs = 120_000, maxAgeMs = 300_000, now = Date.now } = {}) {
28
+ this.#context = context;
29
+ this.#idleMs = idleMs;
30
+ this.#maxAgeMs = maxAgeMs;
31
+ this.#now = now;
32
+ }
33
+ use(name, body) {
34
+ const turn = this.#queue.then(() => this.#call(name, body));
35
+ this.#queue = turn.catch(() => { });
36
+ return turn;
37
+ }
38
+ async close() {
39
+ this.#closed = true;
40
+ await this.#queue;
41
+ await this.#release();
42
+ }
43
+ async #call(name, body) {
44
+ if (this.#closed)
45
+ throw new Error("the MCP server is shutting down");
46
+ clearTimeout(this.#idle);
47
+ try {
48
+ return await this.#context.run(name, async (events) => {
49
+ this.#events = events ?? (() => { });
50
+ return body(await this.#hold());
51
+ });
52
+ }
53
+ catch (error) {
54
+ if (!(isCliError(error) && HARMLESS.has(error.code)))
55
+ await this.#release();
56
+ throw error;
57
+ }
58
+ finally {
59
+ this.#events = () => { };
60
+ if (this.#held) {
61
+ this.#idle = setTimeout(() => void this.#release(), this.#idleMs);
62
+ this.#idle.unref();
63
+ }
64
+ }
65
+ }
66
+ async #hold() {
67
+ if (this.#held && this.#now() - this.#held.openedAt >= this.#maxAgeMs)
68
+ await this.#release();
69
+ if (this.#held)
70
+ return this.#held.client;
71
+ const { settings, renderer, createClient } = this.#context;
72
+ const cache = await openProfileCache(settings.profile, { onProblem: (message) => renderer.note(message) });
73
+ const client = createClient({ events: (event) => this.#events(event), ...(cache ? { cache } : {}) });
74
+ this.#held = { client, cache, openedAt: this.#now() };
75
+ return client;
76
+ }
77
+ async #release() {
78
+ clearTimeout(this.#idle);
79
+ const held = this.#held;
80
+ this.#held = undefined;
81
+ if (!held)
82
+ return;
83
+ try {
84
+ await held.client.close();
85
+ }
86
+ finally {
87
+ held.cache?.close();
88
+ }
89
+ }
90
+ }
91
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type McpServer } from "@modelcontextprotocol/server";
2
+ import type { MaxSession } from "./session.js";
3
+ export declare const registerTools: (server: McpServer, session: MaxSession, { allowSend, confirmSend, defaultLimit }: {
4
+ allowSend: boolean;
5
+ confirmSend?: boolean;
6
+ defaultLimit: number;
7
+ }) => void;
8
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,SAAS,EAGf,MAAM,8BAA8B,CAAA;AAOrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAgS9C,eAAO,MAAM,aAAa,GACxB,QAAQ,SAAS,EACjB,SAAS,UAAU,EACnB,0CAAkD;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,KACpH,IAgCF,CAAA"}
@@ -0,0 +1,274 @@
1
+ import { CliError, isCliError } from "@leemour/cli-core";
2
+ import { isInputRequiredResult, } from "@modelcontextprotocol/server";
3
+ import { toStandardJsonSchema } from "@valibot/to-json-schema";
4
+ import * as v from "valibot";
5
+ import { maskedProfile } from "../domain/map.js";
6
+ import { confirmer } from "./confirm.js";
7
+ const chat = v.pipe(v.string(), v.minLength(1), v.description("chat id, or part of a chat name"));
8
+ const message = v.pipe(v.string(), v.regex(/^\d+$/), v.description("message id"));
9
+ const limit = v.optional(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(100), v.description("how many")));
10
+ const page = v.optional(v.pipe(v.number(), v.integer(), v.minValue(1), v.description("which page, from 1")));
11
+ const READ = { readOnlyHint: true, destructiveHint: false, openWorldHint: true };
12
+ const WRITE = {
13
+ readOnlyHint: false,
14
+ destructiveHint: true,
15
+ idempotentHint: false,
16
+ openWorldHint: true,
17
+ };
18
+ const APPROVE = { "anthropic/requiresUserInteraction": true };
19
+ /** Typed where it is written; erased here because the SDK checks the arguments against `input` first. */
20
+ const tool = (definition) => definition;
21
+ /** The same envelope `--json` prints for every listing. */
22
+ const envelope = ({ items, hasMore }, pageNumber, pageSize) => ({
23
+ items,
24
+ page: pageNumber,
25
+ limit: pageSize,
26
+ hasMore,
27
+ });
28
+ const window = (args, defaults) => {
29
+ const size = args.limit ?? defaults.limit;
30
+ const number = args.page ?? 1;
31
+ return { size, number, request: { limit: size, offset: (number - 1) * size } };
32
+ };
33
+ const READ_TOOLS = {
34
+ max_account_show: tool({
35
+ title: "Who this is",
36
+ description: "The MAX account this server is logged in as.",
37
+ input: v.object({}),
38
+ annotations: { ...READ, idempotentHint: true },
39
+ // Always masked: an agent has no reason to hold the owner's number (`NEED-209`).
40
+ answer: async (client) => maskedProfile(await client.account.me()),
41
+ }),
42
+ max_chats_list: tool({
43
+ title: "List chats",
44
+ description: "Chats the owner is in, most recent first. Use it to find a chat's id before reading or sending. " +
45
+ "Returns { items, page, limit, hasMore }.",
46
+ input: v.object({
47
+ search: v.optional(v.pipe(v.string(), v.minLength(3), v.description("only chats whose name contains this"))),
48
+ kind: v.optional(v.picklist(["dialog", "group", "channel"])),
49
+ unread: v.optional(v.pipe(v.boolean(), v.description("only chats with unread messages"))),
50
+ limit,
51
+ page,
52
+ }),
53
+ annotations: READ,
54
+ answer: async (client, { search: query, kind, unread, ...paging }, defaults) => {
55
+ const { size, number, request } = window(paging, defaults);
56
+ const found = await client.chats.list({
57
+ ...request,
58
+ ...(query === undefined ? {} : { query }),
59
+ ...(kind === undefined ? {} : { kind }),
60
+ ...(unread === true ? { unread } : {}),
61
+ });
62
+ return envelope(found, number, size);
63
+ },
64
+ }),
65
+ max_chats_show: tool({
66
+ title: "Show a chat",
67
+ description: "One chat: its kind, unread count, last message time and who is in it.",
68
+ input: v.object({ chat }),
69
+ annotations: READ,
70
+ answer: (client, args) => client.chats.show(args.chat),
71
+ }),
72
+ max_contacts_list: tool({
73
+ title: "List contacts",
74
+ description: "People the owner has a one-to-one chat with. Returns { items, page, limit, hasMore }.",
75
+ input: v.object({
76
+ search: v.optional(v.pipe(v.string(), v.minLength(3), v.description("only people whose name contains this"))),
77
+ order: v.optional(v.picklist(["recent", "name"])),
78
+ limit,
79
+ page,
80
+ }),
81
+ annotations: READ,
82
+ answer: async (client, { search: query, order, ...paging }, defaults) => {
83
+ const { size, number, request } = window(paging, defaults);
84
+ const found = await client.contacts.list({
85
+ ...request,
86
+ ...(query === undefined ? {} : { query }),
87
+ ...(order === undefined ? {} : { order }),
88
+ });
89
+ return envelope(found, number, size);
90
+ },
91
+ }),
92
+ max_contacts_show: tool({
93
+ title: "Show a person",
94
+ description: "One person and the chats shared with them.",
95
+ input: v.object({
96
+ person: v.pipe(v.string(), v.minLength(1), v.description("person id, @username, or part of a name")),
97
+ }),
98
+ annotations: READ,
99
+ answer: (client, args) => client.contacts.show(args.person),
100
+ }),
101
+ max_messages_list: tool({
102
+ title: "Read a chat",
103
+ description: "Recent messages in a chat, oldest first. Does not mark anything read. For older messages pass " +
104
+ "`before` = the id of the first item; for newer, `after` = the id of the last. Returns { items, page, limit, hasMore }.",
105
+ input: v.object({
106
+ chat,
107
+ limit,
108
+ before: v.optional(v.pipe(v.string(), v.description("a message id or an ISO 8601 time"))),
109
+ after: v.optional(v.pipe(v.string(), v.description("a message id or an ISO 8601 time; not with before"))),
110
+ }),
111
+ annotations: READ,
112
+ answer: async (client, args, defaults) => {
113
+ if (args.before !== undefined && args.after !== undefined) {
114
+ throw new CliError("validation_error", "before and after are two directions; give one of them");
115
+ }
116
+ const size = args.limit ?? defaults.limit;
117
+ const chatId = await client.chats.resolve(args.chat);
118
+ const anchor = args.after !== undefined
119
+ ? { after: client.messages.moment(args.after, "after") }
120
+ : args.before !== undefined
121
+ ? { before: client.messages.moment(args.before, "before") }
122
+ : {};
123
+ return envelope(await client.messages.list(chatId, { limit: size, ...anchor }), 1, size);
124
+ },
125
+ }),
126
+ max_messages_search: tool({
127
+ title: "Search messages",
128
+ description: "Find messages in what this machine has already read — it never asks MAX, so an empty answer means " +
129
+ '"not in what was read", not "never said". Returns { items, page, limit, hasMore }.',
130
+ input: v.object({
131
+ text: v.pipe(v.string(), v.minLength(3), v.description("what to look for; at least 3 characters")),
132
+ chat: v.optional(v.pipe(v.string(), v.regex(/^-?\d+$/), v.description("only this chat, by id"))),
133
+ limit,
134
+ }),
135
+ annotations: { ...READ, openWorldHint: false },
136
+ answer: async (client, args, defaults) => {
137
+ const size = args.limit ?? defaults.limit;
138
+ const found = await client.messages.search(args.text, {
139
+ limit: size,
140
+ ...(args.chat === undefined ? {} : { chatId: args.chat }),
141
+ });
142
+ return envelope(found, 1, size);
143
+ },
144
+ }),
145
+ max_messages_context: tool({
146
+ title: "Show a message",
147
+ description: "One message by id, and optionally the messages either side of it, oldest first. The one asked for " +
148
+ "carries anchor: true.",
149
+ input: v.object({
150
+ chat,
151
+ message,
152
+ before: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(100))),
153
+ after: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(100))),
154
+ }),
155
+ annotations: READ,
156
+ answer: async (client, args) => {
157
+ const chatId = await client.chats.resolve(args.chat);
158
+ return {
159
+ items: await client.messages.around(chatId, args.message, { before: args.before ?? 0, after: args.after ?? 0 }),
160
+ };
161
+ },
162
+ }),
163
+ };
164
+ /**
165
+ * Registered only with `--allow-send`, so a server started without it has no way to write at all —
166
+ * not a refusal at call time, an absence from the list.
167
+ *
168
+ * `requiresUserInteraction` is Claude Code's: an approval dialog on every call that allow-rules do
169
+ * not skip. Other clients ask by `destructiveHint` or `readOnlyHint`.
170
+ */
171
+ const SEND_TOOLS = {
172
+ max_messages_send: tool({
173
+ title: "Send a message",
174
+ description: "Send one text message as the owner. Only when the owner asked for this exact text to this exact chat. " +
175
+ "A name that matches several chats is refused with the candidates — pick an id, never guess. " +
176
+ "On outcome_unknown, retry with the cid it returns and MAX drops the duplicate.",
177
+ input: v.object({
178
+ chat,
179
+ text: v.pipe(v.string(), v.minLength(1)),
180
+ silent: v.optional(v.pipe(v.boolean(), v.description("deliver without a notification"))),
181
+ cid: v.optional(v.pipe(v.number(), v.integer(), v.description("from an earlier outcome_unknown"))),
182
+ }),
183
+ annotations: WRITE,
184
+ _meta: APPROVE,
185
+ answer: async (client, args) => {
186
+ const chatId = await client.chats.resolve(args.chat);
187
+ return client.messages.send(chatId, args.text, {
188
+ ...(args.cid === undefined ? {} : { cid: args.cid }),
189
+ ...(args.silent === true ? { notify: false } : {}),
190
+ });
191
+ },
192
+ }),
193
+ max_messages_edit: tool({
194
+ title: "Edit a message",
195
+ description: "Replace the text of one of the owner's own messages. Only when the owner asked for this exact change. " +
196
+ "The other person may have read the old text already. Attachments stay.",
197
+ input: v.object({ chat, message, text: v.pipe(v.string(), v.minLength(1)) }),
198
+ annotations: WRITE,
199
+ _meta: APPROVE,
200
+ answer: async (client, args) => client.messages.edit(await client.chats.resolve(args.chat), args.message, args.text),
201
+ }),
202
+ max_messages_forward: tool({
203
+ title: "Forward a message",
204
+ description: "Forward one message to another chat as the owner. Only when the owner asked for this message to this chat. " +
205
+ "On outcome_unknown, retry with the cid it returns and MAX drops the duplicate.",
206
+ input: v.object({
207
+ chat: v.pipe(chat, v.description("the chat the message is in")),
208
+ message,
209
+ to: v.pipe(chat, v.description("the chat to forward it to")),
210
+ cid: v.optional(v.pipe(v.number(), v.integer(), v.description("from an earlier outcome_unknown"))),
211
+ }),
212
+ annotations: WRITE,
213
+ _meta: APPROVE,
214
+ answer: async (client, args) => client.messages.forward(await client.chats.resolve(args.chat), args.message, await client.chats.resolve(args.to), args.cid === undefined ? {} : { cid: args.cid }),
215
+ }),
216
+ max_messages_pin: tool({
217
+ title: "Pin a message",
218
+ description: "Pin one message in a chat, replacing what was pinned. Members are not notified.",
219
+ input: v.object({ chat, message }),
220
+ annotations: WRITE,
221
+ _meta: APPROVE,
222
+ answer: async (client, args) => client.messages.pin(await client.chats.resolve(args.chat), args.message),
223
+ }),
224
+ max_messages_unpin: tool({
225
+ title: "Unpin a message",
226
+ description: "Unpin whatever message is pinned in a chat.",
227
+ input: v.object({ chat }),
228
+ annotations: WRITE,
229
+ _meta: APPROVE,
230
+ answer: async (client, args) => client.messages.pin(await client.chats.resolve(args.chat), null),
231
+ }),
232
+ };
233
+ const answered = (value) => ({
234
+ content: [{ type: "text", text: JSON.stringify(value) }],
235
+ structuredContent: value,
236
+ });
237
+ /** The same object the CLI prints on stderr, so an agent reads one error shape from both. */
238
+ const failed = (error) => {
239
+ const body = isCliError(error)
240
+ ? { code: error.code, message: error.message, ...error.details }
241
+ : { code: "generic_failure", message: error instanceof Error ? error.message : String(error) };
242
+ return {
243
+ content: [{ type: "text", text: JSON.stringify({ error: body }) }],
244
+ structuredContent: { error: body },
245
+ isError: true,
246
+ };
247
+ };
248
+ export const registerTools = (server, session, { allowSend, confirmSend = false, defaultLimit }) => {
249
+ const confirmed = confirmSend ? confirmer() : undefined;
250
+ const tools = {
251
+ ...READ_TOOLS,
252
+ ...(allowSend ? SEND_TOOLS : {}),
253
+ };
254
+ for (const [name, definition] of Object.entries(tools)) {
255
+ server.registerTool(name, {
256
+ title: definition.title,
257
+ description: definition.description,
258
+ inputSchema: toStandardJsonSchema(definition.input),
259
+ annotations: definition.annotations,
260
+ ...(definition._meta ? { _meta: definition._meta } : {}),
261
+ }, async (args, ctx) => {
262
+ try {
263
+ const result = await session.use(name.replace(/^max_/, "mcp ").replaceAll("_", " "), (client) => confirmed && name === "max_messages_send"
264
+ ? confirmed(client, args, ctx)
265
+ : definition.answer(client, args, { limit: defaultLimit }));
266
+ return isInputRequiredResult(result) ? result : answered(result);
267
+ }
268
+ catch (error) {
269
+ return failed(error);
270
+ }
271
+ });
272
+ }
273
+ };
274
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACxG,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAA;AAOnD,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,uBAAuB,CAAA;AAajE,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,mGAAmG;IACnG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,eAAc,cAAmB,KAAG,OA4DjE,CAAA;AAOD;;;;;;GAMG;AACH,eAAO,MAAM,GAAG,GAAU,MAAM,MAAM,EAAE,EAAE,UAAS,UAAe,KAAG,OAAO,CAAC,MAAM,CA+DlF,CAAA"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACxG,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAA;AAQnD,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,uBAAuB,CAAA;AAkBjE,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,mGAAmG;IACnG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,eAAc,cAAmB,KAAG,OAmEjE,CAAA;AAOD;;;;;;GAMG;AACH,eAAO,MAAM,GAAG,GAAU,MAAM,MAAM,EAAE,EAAE,UAAS,UAAe,KAAG,OAAO,CAAC,MAAM,CAmElF,CAAA"}
package/dist/program.js CHANGED
@@ -4,19 +4,25 @@ import { accountCommand } from "./commands/account.js";
4
4
  import { cacheCommand } from "./commands/cache.js";
5
5
  import { chatsCommand } from "./commands/chats.js";
6
6
  import { commandsCommand } from "./commands/commands.js";
7
+ import { completeCommand } from "./commands/complete.js";
7
8
  import { configCommand } from "./commands/config.js";
8
9
  import { contactsCommand } from "./commands/contacts.js";
9
10
  import { provide } from "./commands/context.js";
10
11
  import { doctorCommand } from "./commands/doctor.js";
11
12
  import { inboxCommand } from "./commands/inbox.js";
13
+ import { mcpCommand } from "./commands/mcp.js";
12
14
  import { messagesCommand } from "./commands/messages.js";
13
15
  import { reactionsCommand } from "./commands/reactions.js";
14
16
  import { recipientsCommand } from "./commands/recipients.js";
15
17
  import { runsCommand } from "./commands/runs.js";
16
18
  import { sendsCommand } from "./commands/sends.js";
19
+ import { serveCommand } from "./commands/serve.js";
17
20
  import { sessionCommand } from "./commands/session.js";
18
21
  import { skillCommand } from "./commands/skill.js";
22
+ import { selfUpdateCommand } from "./commands/update.js";
23
+ import { watchCommand } from "./commands/watch.js";
19
24
  import { commandWords, liftProfile } from "./profile.js";
25
+ import { updateNotice } from "./update.js";
20
26
  import { VERSION } from "./version.js";
21
27
  /**
22
28
  * The command tree, built fresh on each call.
@@ -43,6 +49,8 @@ export const createProgram = ({ out, err } = {}) => {
43
49
  .option("--offline", "answer from what was recorded and never connect; fails if nothing was")
44
50
  .option("--record", "keep this run under `max runs` — ids and timings, never message content")
45
51
  .option("--no-record", "do not keep it, whatever the configuration says")
52
+ .option("--serve", "start `max serve` in the background if it is not running (the default)")
53
+ .option("--no-serve", "do not start it; log in on this command's own connection unless one is running")
46
54
  .showHelpAfterError();
47
55
  // One resource per command, one action per subcommand — `max chats list`, `max messages send`.
48
56
  // The shape `braze-cli` uses, and the reason there is no `max send`: an action is never a
@@ -56,12 +64,17 @@ export const createProgram = ({ out, err } = {}) => {
56
64
  program.addCommand(recipientsCommand());
57
65
  program.addCommand(sendsCommand());
58
66
  program.addCommand(inboxCommand());
67
+ program.addCommand(serveCommand());
68
+ program.addCommand(watchCommand());
59
69
  program.addCommand(configCommand());
60
70
  program.addCommand(doctorCommand());
61
71
  program.addCommand(cacheCommand());
62
72
  program.addCommand(runsCommand());
63
73
  program.addCommand(skillCommand());
64
74
  program.addCommand(commandsCommand());
75
+ program.addCommand(selfUpdateCommand());
76
+ program.addCommand(completeCommand(), { hidden: true });
77
+ program.addCommand(mcpCommand());
65
78
  // Depth-first: Commander does not pass `configureOutput` down to a command added with
66
79
  // `addCommand`, so `max messages --help` would write to the real terminal while the top level
67
80
  // wrote to the injected streams — and a test reading stdout would see nothing at all.
@@ -117,8 +130,12 @@ export const run = async (argv, options = {}) => {
117
130
  });
118
131
  return exitCodeFor("validation_error");
119
132
  }
133
+ const notice = updateNotice(rest, { tty: options.tty, environment: options.update });
120
134
  try {
121
135
  await program.parseAsync(rest, { from: "user" });
136
+ const line = await notice;
137
+ if (line)
138
+ streams.diagnostic(line);
122
139
  return process.exitCode === undefined ? 0 : Number(process.exitCode);
123
140
  }
124
141
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,14 @@ export interface ConnectionOptions {
23
23
  timeoutMs?: number;
24
24
  /** Events MAX pushes on its own — messages arriving, presence. Ignored unless a caller cares. */
25
25
  onEvent?: (frame: InboundFrame) => void;
26
+ /**
27
+ * **A connection that stays open**, as `max serve`'s does: it answers MAX's ping and acknowledges
28
+ * a new message the way web.max.ru does (bundle read 2026-09-24), and drops a push it has already
29
+ * seen. Off for a one-shot command, which is gone before either matters.
30
+ */
31
+ live?: boolean;
32
+ /** MAX closed the socket. Not called for our own `close()`. The connection is dead after it. */
33
+ onClose?: (error: Error) => void;
26
34
  /** Injected in tests; defaults to the real `ws` client. */
27
35
  createSocket?: (url: string, origin: string) => WebSocket;
28
36
  }
@@ -31,14 +39,8 @@ export declare class ProtocolError extends Error {
31
39
  readonly payload: Payload | null;
32
40
  constructor(message: string, opcode: number, payload: Payload | null);
33
41
  }
34
- /**
35
- * One WebSocket, one command's worth of work, then closed.
36
- *
37
- * **Everything that could keep the process alive is owned here**: the socket, the per-request
38
- * timers and the listeners. `close()` clears all three, and a command that opens a connection
39
- * closes it in a `finally` — a CLI that prints its result and then hangs is a defect, not a rough
40
- * edge (REQUIREMENTS §18).
41
- */
42
+ /** What a client needs of a connection — so one that goes through `max serve` can stand in. */
43
+ export type Wire = Pick<Connection, "open" | "invoke" | "close">;
42
44
  export declare class Connection {
43
45
  #private;
44
46
  constructor(options?: ConnectionOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/protocol/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAC9B,OAAO,EAAqC,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAA;AAE/F,eAAO,MAAM,iBAAiB,oCAAoC,CAAA;AAClE,iGAAiG;AACjG,eAAO,MAAM,UAAU,uBAAuB,CAAA;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,GAAG,UAAU,CAAA;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iGAAiG;IACjG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACvC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,SAAS,CAAA;CAC1D;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;gBAEpB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;CAMrE;AAED;;;;;;;GAOG;AACH,qBAAa,UAAU;;gBAmBT,OAAO,GAAE,iBAAsB;IAQrC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;;;;;;;;;OAUG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAoCzG;;;;;;;;;OASG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAgD7B"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/protocol/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAC9B,OAAO,EAAqC,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAA;AAE/F,eAAO,MAAM,iBAAiB,oCAAoC,CAAA;AAClE,iGAAiG;AACjG,eAAO,MAAM,UAAU,uBAAuB,CAAA;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,GAAG,UAAU,CAAA;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iGAAiG;IACjG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACvC;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,gGAAgG;IAChG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,2DAA2D;IAC3D,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,SAAS,CAAA;CAC1D;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;gBAEpB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;CAMrE;AAeD,+FAA+F;AAC/F,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;AAEhE,qBAAa,UAAU;;gBAsBT,OAAO,GAAE,iBAAsB;IAUrC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;;;;;;;;;OAUG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAoCzG;;;;;;;;;OASG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAiG7B"}