@leemour/max-cli 0.15.0 → 0.17.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 (249) hide show
  1. package/README.md +56 -37
  2. package/dist/bot/client.d.ts +6 -0
  3. package/dist/bot/client.d.ts.map +1 -1
  4. package/dist/bot/client.js +17 -3
  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 +2 -2
  14. package/dist/bot/keep.d.ts.map +1 -1
  15. package/dist/bot/keep.js +3 -2
  16. package/dist/bot/keep.js.map +1 -1
  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/transport.d.ts +4 -0
  22. package/dist/bot/transport.d.ts.map +1 -1
  23. package/dist/bot/transport.js +43 -3
  24. package/dist/bot/transport.js.map +1 -1
  25. package/dist/bot-mcp/instructions.d.ts +9 -0
  26. package/dist/bot-mcp/instructions.d.ts.map +1 -0
  27. package/dist/bot-mcp/instructions.js +22 -0
  28. package/dist/bot-mcp/instructions.js.map +1 -0
  29. package/dist/bot-mcp/server.d.ts +21 -0
  30. package/dist/bot-mcp/server.d.ts.map +1 -0
  31. package/dist/bot-mcp/server.js +213 -0
  32. package/dist/bot-mcp/server.js.map +1 -0
  33. package/dist/bot-mcp/tools.d.ts +27 -0
  34. package/dist/bot-mcp/tools.d.ts.map +1 -0
  35. package/dist/bot-mcp/tools.js +280 -0
  36. package/dist/bot-mcp/tools.js.map +1 -0
  37. package/dist/client.d.ts +43 -10
  38. package/dist/client.d.ts.map +1 -1
  39. package/dist/client.js +207 -31
  40. package/dist/client.js.map +1 -1
  41. package/dist/commands/account.d.ts.map +1 -1
  42. package/dist/commands/account.js +7 -5
  43. package/dist/commands/account.js.map +1 -1
  44. package/dist/commands/backup.js +1 -1
  45. package/dist/commands/backup.js.map +1 -1
  46. package/dist/commands/bot-check.d.ts +11 -0
  47. package/dist/commands/bot-check.d.ts.map +1 -0
  48. package/dist/commands/bot-check.js +206 -0
  49. package/dist/commands/bot-check.js.map +1 -0
  50. package/dist/commands/bot-comments.d.ts.map +1 -1
  51. package/dist/commands/bot-comments.js +2 -1
  52. package/dist/commands/bot-comments.js.map +1 -1
  53. package/dist/commands/bot-context.d.ts +7 -0
  54. package/dist/commands/bot-context.d.ts.map +1 -1
  55. package/dist/commands/bot-context.js +32 -2
  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.map +1 -1
  62. package/dist/commands/bot-members.js +7 -4
  63. package/dist/commands/bot-members.js.map +1 -1
  64. package/dist/commands/bot-people.d.ts +10 -0
  65. package/dist/commands/bot-people.d.ts.map +1 -0
  66. package/dist/commands/bot-people.js +156 -0
  67. package/dist/commands/bot-people.js.map +1 -0
  68. package/dist/commands/bot-reads.d.ts.map +1 -1
  69. package/dist/commands/bot-reads.js +25 -14
  70. package/dist/commands/bot-reads.js.map +1 -1
  71. package/dist/commands/bot-sends.d.ts.map +1 -1
  72. package/dist/commands/bot-sends.js +6 -5
  73. package/dist/commands/bot-sends.js.map +1 -1
  74. package/dist/commands/bot-setup.d.ts.map +1 -1
  75. package/dist/commands/bot-setup.js +5 -4
  76. package/dist/commands/bot-setup.js.map +1 -1
  77. package/dist/commands/bot-updates.d.ts.map +1 -1
  78. package/dist/commands/bot-updates.js +16 -2
  79. package/dist/commands/bot-updates.js.map +1 -1
  80. package/dist/commands/bot.d.ts.map +1 -1
  81. package/dist/commands/bot.js +13 -4
  82. package/dist/commands/bot.js.map +1 -1
  83. package/dist/commands/chats.d.ts.map +1 -1
  84. package/dist/commands/chats.js +15 -30
  85. package/dist/commands/chats.js.map +1 -1
  86. package/dist/commands/check.d.ts.map +1 -1
  87. package/dist/commands/check.js +7 -6
  88. package/dist/commands/check.js.map +1 -1
  89. package/dist/commands/complete.d.ts.map +1 -1
  90. package/dist/commands/complete.js +27 -3
  91. package/dist/commands/complete.js.map +1 -1
  92. package/dist/commands/config.d.ts.map +1 -1
  93. package/dist/commands/config.js +29 -27
  94. package/dist/commands/config.js.map +1 -1
  95. package/dist/commands/contacts.d.ts.map +1 -1
  96. package/dist/commands/contacts.js +21 -0
  97. package/dist/commands/contacts.js.map +1 -1
  98. package/dist/commands/doctor.d.ts.map +1 -1
  99. package/dist/commands/doctor.js +75 -21
  100. package/dist/commands/doctor.js.map +1 -1
  101. package/dist/commands/export.js +1 -1
  102. package/dist/commands/export.js.map +1 -1
  103. package/dist/commands/folders.d.ts.map +1 -1
  104. package/dist/commands/folders.js +3 -2
  105. package/dist/commands/folders.js.map +1 -1
  106. package/dist/commands/inbox.d.ts.map +1 -1
  107. package/dist/commands/inbox.js +1 -1
  108. package/dist/commands/inbox.js.map +1 -1
  109. package/dist/commands/messages.d.ts.map +1 -1
  110. package/dist/commands/messages.js +9 -11
  111. package/dist/commands/messages.js.map +1 -1
  112. package/dist/commands/models.d.ts.map +1 -1
  113. package/dist/commands/models.js +2 -1
  114. package/dist/commands/models.js.map +1 -1
  115. package/dist/commands/paging.d.ts +17 -1
  116. package/dist/commands/paging.d.ts.map +1 -1
  117. package/dist/commands/paging.js +22 -2
  118. package/dist/commands/paging.js.map +1 -1
  119. package/dist/commands/polls.d.ts +3 -0
  120. package/dist/commands/polls.d.ts.map +1 -0
  121. package/dist/commands/polls.js +103 -0
  122. package/dist/commands/polls.js.map +1 -0
  123. package/dist/commands/recipients.d.ts.map +1 -1
  124. package/dist/commands/recipients.js +3 -2
  125. package/dist/commands/recipients.js.map +1 -1
  126. package/dist/commands/review.d.ts.map +1 -1
  127. package/dist/commands/review.js +1 -1
  128. package/dist/commands/review.js.map +1 -1
  129. package/dist/commands/runs.d.ts.map +1 -1
  130. package/dist/commands/runs.js +4 -3
  131. package/dist/commands/runs.js.map +1 -1
  132. package/dist/commands/sends.d.ts.map +1 -1
  133. package/dist/commands/sends.js +3 -2
  134. package/dist/commands/sends.js.map +1 -1
  135. package/dist/config.d.ts +78 -7
  136. package/dist/config.d.ts.map +1 -1
  137. package/dist/config.js +143 -72
  138. package/dist/config.js.map +1 -1
  139. package/dist/diagnose.d.ts +47 -1
  140. package/dist/diagnose.d.ts.map +1 -1
  141. package/dist/diagnose.js +56 -5
  142. package/dist/diagnose.js.map +1 -1
  143. package/dist/domain/map.d.ts +9 -1
  144. package/dist/domain/map.d.ts.map +1 -1
  145. package/dist/domain/map.js +57 -0
  146. package/dist/domain/map.js.map +1 -1
  147. package/dist/domain/models.d.ts +29 -0
  148. package/dist/domain/models.d.ts.map +1 -1
  149. package/dist/domain/models.js.map +1 -1
  150. package/dist/export.d.ts.map +1 -1
  151. package/dist/export.js +2 -1
  152. package/dist/export.js.map +1 -1
  153. package/dist/generated/client.generated.d.ts +1 -0
  154. package/dist/generated/client.generated.d.ts.map +1 -1
  155. package/dist/generated/client.generated.js +1 -0
  156. package/dist/generated/client.generated.js.map +1 -1
  157. package/dist/generated/opcodes.generated.d.ts +1 -0
  158. package/dist/generated/opcodes.generated.d.ts.map +1 -1
  159. package/dist/generated/opcodes.generated.js +1 -0
  160. package/dist/generated/opcodes.generated.js.map +1 -1
  161. package/dist/generated/operations.generated.d.ts +25 -10
  162. package/dist/generated/operations.generated.d.ts.map +1 -1
  163. package/dist/generated/operations.generated.js +2 -1
  164. package/dist/generated/operations.generated.js.map +1 -1
  165. package/dist/mcp/confirm.d.ts +6 -2
  166. package/dist/mcp/confirm.d.ts.map +1 -1
  167. package/dist/mcp/confirm.js +2 -2
  168. package/dist/mcp/confirm.js.map +1 -1
  169. package/dist/mcp/tools.d.ts.map +1 -1
  170. package/dist/mcp/tools.js +83 -17
  171. package/dist/mcp/tools.js.map +1 -1
  172. package/dist/moderation/check.d.ts +15 -9
  173. package/dist/moderation/check.d.ts.map +1 -1
  174. package/dist/moderation/check.js +14 -45
  175. package/dist/moderation/check.js.map +1 -1
  176. package/dist/moderation/rules.d.ts +57 -7
  177. package/dist/moderation/rules.d.ts.map +1 -1
  178. package/dist/moderation/rules.js +13 -11
  179. package/dist/moderation/rules.js.map +1 -1
  180. package/dist/program.d.ts.map +1 -1
  181. package/dist/program.js +11 -3
  182. package/dist/program.js.map +1 -1
  183. package/dist/rendering/messages.d.ts +6 -1
  184. package/dist/rendering/messages.d.ts.map +1 -1
  185. package/dist/rendering/messages.js +24 -3
  186. package/dist/rendering/messages.js.map +1 -1
  187. package/dist/runs/events.d.ts +5 -2
  188. package/dist/runs/events.d.ts.map +1 -1
  189. package/dist/runs/events.js +4 -1
  190. package/dist/runs/events.js.map +1 -1
  191. package/dist/runs/recording.d.ts +11 -0
  192. package/dist/runs/recording.d.ts.map +1 -1
  193. package/dist/runs/recording.js +28 -12
  194. package/dist/runs/recording.js.map +1 -1
  195. package/dist/sends/guard.d.ts +2 -2
  196. package/dist/sends/guard.d.ts.map +1 -1
  197. package/dist/sends/guard.js +2 -1
  198. package/dist/sends/guard.js.map +1 -1
  199. package/dist/sends/journal.d.ts +2 -2
  200. package/dist/sends/journal.d.ts.map +1 -1
  201. package/dist/sends/journal.js.map +1 -1
  202. package/dist/sends/permissions.d.ts.map +1 -1
  203. package/dist/sends/permissions.js +3 -0
  204. package/dist/sends/permissions.js.map +1 -1
  205. package/dist/server/server-connection.d.ts +8 -1
  206. package/dist/server/server-connection.d.ts.map +1 -1
  207. package/dist/server/server-connection.js +27 -1
  208. package/dist/server/server-connection.js.map +1 -1
  209. package/dist/server/server.d.ts.map +1 -1
  210. package/dist/server/server.js +7 -1
  211. package/dist/server/server.js.map +1 -1
  212. package/dist/server/start.d.ts +1 -1
  213. package/dist/server/start.d.ts.map +1 -1
  214. package/dist/server/start.js +5 -3
  215. package/dist/server/start.js.map +1 -1
  216. package/dist/session/store.d.ts +2 -0
  217. package/dist/session/store.d.ts.map +1 -1
  218. package/dist/session/store.js +5 -1
  219. package/dist/session/store.js.map +1 -1
  220. package/dist/spec/index.d.ts.map +1 -1
  221. package/dist/spec/index.js +2 -1
  222. package/dist/spec/index.js.map +1 -1
  223. package/dist/spec/operations/account.d.ts +3 -0
  224. package/dist/spec/operations/account.d.ts.map +1 -1
  225. package/dist/spec/operations/account.js +5 -1
  226. package/dist/spec/operations/account.js.map +1 -1
  227. package/dist/spec/operations/chats.d.ts +4 -3
  228. package/dist/spec/operations/chats.d.ts.map +1 -1
  229. package/dist/spec/operations/chats.js +12 -7
  230. package/dist/spec/operations/chats.js.map +1 -1
  231. package/dist/spec/operations/contacts.d.ts +8 -3
  232. package/dist/spec/operations/contacts.d.ts.map +1 -1
  233. package/dist/spec/operations/contacts.js +26 -5
  234. package/dist/spec/operations/contacts.js.map +1 -1
  235. package/dist/spec/operations/folders.d.ts.map +1 -1
  236. package/dist/spec/operations/folders.js +1 -0
  237. package/dist/spec/operations/folders.js.map +1 -1
  238. package/dist/spec/operations/messages.d.ts +14 -4
  239. package/dist/spec/operations/messages.d.ts.map +1 -1
  240. package/dist/spec/operations/messages.js +30 -3
  241. package/dist/spec/operations/messages.js.map +1 -1
  242. package/dist/spec/operations/uploads.d.ts +1 -1
  243. package/dist/spec/operations/uploads.d.ts.map +1 -1
  244. package/dist/spec/operations/uploads.js +2 -1
  245. package/dist/spec/operations/uploads.js.map +1 -1
  246. package/dist/version.d.ts +1 -1
  247. package/dist/version.js +1 -1
  248. package/package.json +5 -2
  249. package/skills/max-cli/SKILL.md +19 -9
@@ -1,7 +1,9 @@
1
- import type { Renderer, RenderFormat, Streams } from "@leemour/cli-core";
1
+ import { type Renderer, type RenderFormat, type Streams } from "@leemour/cli-core";
2
2
  import type { Command } from "commander";
3
3
  import type { Settings } from "../config.js";
4
4
  import type { Page } from "../domain/models.js";
5
+ /** Checked while parsing, so the error can quote what was typed rather than the `NaN` it became. */
6
+ export declare const wholeNumber: (flag: string) => (value: string) => number;
5
7
  /**
6
8
  * The three flags every listing shares, so no command invents its own spelling of them.
7
9
  *
@@ -20,6 +22,20 @@ export declare const window: ({ limit, page, all }: Settings) => {
20
22
  limit?: number;
21
23
  offset: number;
22
24
  };
25
+ /**
26
+ * A list with no pages — folders, members, runs, everything a bot lists — in the envelope a paged
27
+ * one uses (`NEED-358`), so an agent reads one shape. `--jsonl` streams it and a person gets the table.
28
+ * `extra` goes beside it: a Bot API list paged by `marker` carries its marker and `hasMore`.
29
+ */
30
+ export declare const renderList: (renderer: Renderer, format: RenderFormat, items: readonly unknown[], extra?: {
31
+ hasMore?: boolean;
32
+ } & Record<string, unknown>) => void;
33
+ export declare const listed: (items: readonly unknown[]) => {
34
+ items: readonly unknown[];
35
+ page: number;
36
+ limit: number;
37
+ hasMore: boolean;
38
+ };
23
39
  /**
24
40
  * **One shape for every listing**, and the caller never has to work out which one it got.
25
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"paging.d.ts","sourceRoot":"","sources":["../../src/commands/paging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,UAAU,YAAa,OAAO,KAAG,OAIF,CAAA;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,yBAA0B,QAAQ,KAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAC3B,CAAA;AAE7D;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,4CAMvB;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,sBACjE,IAAI,CAAC,CAAC,CAAC,SACpB,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,MAAM;AAC7B,4EAA4E;OACrE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,MAAM;AAC7B,0CAA0C;QACnC,MAAM,KACZ,IAuBF,CAAA"}
1
+ {"version":3,"file":"paging.d.ts","sourceRoot":"","sources":["../../src/commands/paging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,oGAAoG;AACpG,eAAO,MAAM,WAAW,SACf,MAAM,aACL,MAAM,KAAG,MAKhB,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,UAAU,YAAa,OAAO,KAAG,OAIF,CAAA;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,yBAA0B,QAAQ,KAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAC3B,CAAA;AAE7D;;;;GAIG;AACH,eAAO,MAAM,UAAU,aACX,QAAQ,UACV,YAAY,SACb,SAAS,OAAO,EAAE,UAClB;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACrD,IAGF,CAAA;AAED,eAAO,MAAM,MAAM,UAAW,SAAS,OAAO,EAAE;;;;;CAA8D,CAAA;AAE9G;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,4CAMvB;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,sBACjE,IAAI,CAAC,CAAC,CAAC,SACpB,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,MAAM;AAC7B,4EAA4E;OACrE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,MAAM;AAC7B,0CAA0C;QACnC,MAAM,KACZ,IAuBF,CAAA"}
@@ -1,3 +1,11 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ /** Checked while parsing, so the error can quote what was typed rather than the `NaN` it became. */
3
+ export const wholeNumber = (flag) => (value) => {
4
+ if (!/^\d+$/.test(value.trim()) || Number(value) < 1) {
5
+ throw new CliError("validation_error", `${flag} takes a whole number from 1 upwards, not "${value}"`);
6
+ }
7
+ return Number(value);
8
+ };
1
9
  /**
2
10
  * The three flags every listing shares, so no command invents its own spelling of them.
3
11
  *
@@ -5,8 +13,8 @@
5
13
  * configured `limit` could never win it; the number lives once, in `resolveSettings`.
6
14
  */
7
15
  export const withPaging = (command) => command
8
- .option("--limit <n>", "how many to show", (value) => Number.parseInt(value, 10))
9
- .option("--page <n>", "which page, starting at 1", (value) => Number.parseInt(value, 10))
16
+ .option("--limit <n>", "how many to show", wholeNumber("--limit"))
17
+ .option("--page <n>", "which page, starting at 1", wholeNumber("--page"))
10
18
  .option("--all", "every row, no paging");
11
19
  /**
12
20
  * Which rows to ask the store for. `--all` means no limit, which the store reads as "everything".
@@ -16,6 +24,18 @@ export const withPaging = (command) => command
16
24
  * CLI that pages this way has this; it is in `--help` rather than engineered away.
17
25
  */
18
26
  export const window = ({ limit, page, all }) => all ? { offset: 0 } : { limit, offset: (page - 1) * limit };
27
+ /**
28
+ * A list with no pages — folders, members, runs, everything a bot lists — in the envelope a paged
29
+ * one uses (`NEED-358`), so an agent reads one shape. `--jsonl` streams it and a person gets the table.
30
+ * `extra` goes beside it: a Bot API list paged by `marker` carries its marker and `hasMore`.
31
+ */
32
+ export const renderList = (renderer, format, items, extra = {}) => {
33
+ if (format === "json")
34
+ renderer.result({ ...listed(items), ...extra });
35
+ else
36
+ renderer.stream(items);
37
+ };
38
+ export const listed = (items) => ({ items, page: 1, limit: items.length, hasMore: false });
19
39
  /**
20
40
  * **One shape for every listing**, and the caller never has to work out which one it got.
21
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"paging.js","sourceRoot":"","sources":["../../src/commands/paging.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAW,EAAE,CACtD,OAAO;KACJ,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;KAChF,MAAM,CAAC,YAAY,EAAE,2BAA2B,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;KACxF,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAA;AAE5C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAY,EAAsC,EAAE,CAC3F,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;AAE7D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,EACE,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,OAAO,GAC4E,EACrF,EAAE,KAAK,EAAE,OAAO,EAAW,EAC3B,IAA6B;AAC7B,4EAA4E;AAC5E,IAA6B;AAC7B,0CAA0C;AAC1C,KAAK,GAAW,EAAE,EACZ,EAAE;IACR,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO;YAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,QAAQ,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC3F,OAAM;IACR,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,QAAQ,CAAC,MAAM,CAAC;YACd,KAAK;YACL,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;YACtC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK;YACnD,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO;YACvC,GAAG,KAAK;SACT,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IAED,IAAI,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;;QAC9B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO;QAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,IAAI,uBAAuB,QAAQ,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAA;AACtH,CAAC,CAAA"}
1
+ {"version":3,"file":"paging.js","sourceRoot":"","sources":["../../src/commands/paging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const pollsCommand: () => Command;
3
+ //# sourceMappingURL=polls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polls.d.ts","sourceRoot":"","sources":["../../src/commands/polls.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAWnC,eAAO,MAAM,YAAY,QAAO,OA+F/B,CAAA"}
@@ -0,0 +1,103 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ import { annotate } from "@leemour/cli-core/commands";
3
+ import { Command } from "commander";
4
+ import { openProfileCache } from "../cache/index.js";
5
+ import { pollLines } from "../rendering/messages.js";
6
+ import { forCommand } from "./context.js";
7
+ const show = ({ renderer, format, streams }, answer) => {
8
+ if (format === "pretty")
9
+ streams.data(`${pollLines(answer.poll).join("\n")}\n`);
10
+ else
11
+ renderer.result(answer);
12
+ };
13
+ export const pollsCommand = () => {
14
+ const command = new Command("polls").description("vote in polls, close your own, create one");
15
+ annotate(command.command("vote"), { mutates: true })
16
+ .argument("<chat>", "chat id, or part of a chat name")
17
+ .argument("<message>", "id of the message that carries the poll")
18
+ .argument("[answers...]", "answer ids, as `messages list` prints them in [brackets]")
19
+ .option("--retract", "take your vote back, where the poll allows it")
20
+ .description("vote in a poll, or take your vote back; the others see it unless the poll is anonymous")
21
+ .action(async function (chat, messageId, answers) {
22
+ const retract = this.opts().retract === true;
23
+ if (retract && answers.length > 0) {
24
+ throw new CliError("validation_error", "`--retract` takes no answers: it removes the vote you have");
25
+ }
26
+ if (!retract && answers.length === 0) {
27
+ throw new CliError("validation_error", "name at least one answer id, or pass `--retract`");
28
+ }
29
+ const context = forCommand(this);
30
+ const cache = await openProfileCache(context.settings.profile, {
31
+ onProblem: (message) => context.renderer.note(message),
32
+ });
33
+ await context.run("polls vote", async (events) => {
34
+ const client = context.createClient({ events, ...(cache ? { cache } : {}) });
35
+ try {
36
+ const chatId = await client.chats.resolve(chat);
37
+ const ids = answers.map((answer) => answer.trim());
38
+ show(context, await client.polls.vote(chatId, messageId.trim(), ids));
39
+ }
40
+ finally {
41
+ await client.close();
42
+ cache?.close();
43
+ }
44
+ });
45
+ });
46
+ annotate(command.command("close"), { mutates: true })
47
+ .argument("<chat>", "chat id, or part of a chat name")
48
+ .argument("<message>", "id of your own message that carries the poll")
49
+ .description("close your own poll; nobody can vote in it after that, and it cannot be reopened")
50
+ .action(async function (chat, messageId) {
51
+ const context = forCommand(this);
52
+ const cache = await openProfileCache(context.settings.profile, {
53
+ onProblem: (message) => context.renderer.note(message),
54
+ });
55
+ await context.run("polls close", async (events) => {
56
+ const client = context.createClient({ events, ...(cache ? { cache } : {}) });
57
+ try {
58
+ const chatId = await client.chats.resolve(chat);
59
+ show(context, await client.polls.close(chatId, messageId.trim()));
60
+ }
61
+ finally {
62
+ await client.close();
63
+ cache?.close();
64
+ }
65
+ });
66
+ });
67
+ annotate(command.command("create"), { mutates: true })
68
+ .argument("<chat>", "chat id, or part of a chat name")
69
+ .argument("<question>", "the question")
70
+ .argument("<answers...>", "two answers or more")
71
+ .option("--multiple", "people may pick several answers")
72
+ .option("--anonymous", "nobody sees who voted for what")
73
+ .option("--revote", "people may change their vote")
74
+ .option("--silent", "send without a notification")
75
+ .description("send a poll to a chat, as a message of its own")
76
+ .action(async function (chat, question, answers) {
77
+ const options = this.opts();
78
+ const context = forCommand(this);
79
+ const cache = await openProfileCache(context.settings.profile, {
80
+ onProblem: (message) => context.renderer.note(message),
81
+ });
82
+ await context.run("polls create", async (events) => {
83
+ const client = context.createClient({ events, ...(cache ? { cache } : {}) });
84
+ try {
85
+ const chatId = await client.chats.resolve(chat);
86
+ const sent = await client.polls.create(chatId, question, answers, {
87
+ multiple: options.multiple === true,
88
+ anonymous: options.anonymous === true,
89
+ revote: options.revote === true,
90
+ ...(options.silent === true ? { notify: false } : {}),
91
+ });
92
+ context.renderer.note("web.max.ru does not show polls: anyone reading this chat in a browser sees «Обновите MAX…»");
93
+ context.renderer.result(sent);
94
+ }
95
+ finally {
96
+ await client.close();
97
+ cache?.close();
98
+ }
99
+ });
100
+ });
101
+ return command;
102
+ };
103
+ //# sourceMappingURL=polls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polls.js","sourceRoot":"","sources":["../../src/commands/polls.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../src/commands/recipients.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAiEpC,CAAA"}
1
+ {"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../src/commands/recipients.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAiEpC,CAAA"}
@@ -2,6 +2,7 @@ import { CliError } from "@leemour/cli-core";
2
2
  import { Command } from "commander";
3
3
  import { RecipientList, recipientsPathFor } from "../sends/recipients.js";
4
4
  import { forCommand } from "./context.js";
5
+ import { renderList } from "./paging.js";
5
6
  /**
6
7
  * The chats this profile may send to. Off until the first `add`; `off` turns it off again.
7
8
  *
@@ -14,10 +15,10 @@ export const recipientsCommand = () => {
14
15
  .command("list")
15
16
  .description("the chats on the list; empty and off until the first add")
16
17
  .action(async function () {
17
- const { settings, renderer, run } = forCommand(this);
18
+ const { settings, renderer, format, run } = forCommand(this);
18
19
  await run("recipients list", async () => {
19
20
  const chats = listFor(settings.profile).read();
20
- renderer.stream(chats ?? []);
21
+ renderList(renderer, format, chats ?? []);
21
22
  if (!chats)
22
23
  renderer.note("the recipient list is off — this profile may send to any chat");
23
24
  else if (chats.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/commands/recipients.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/commands/recipients.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,OA6D3B,CAAA"}
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,OAgE3B,CAAA"}
@@ -12,7 +12,7 @@ import { forCommand } from "./context.js";
12
12
  */
13
13
  export const reviewCommand = () => new Command("review")
14
14
  .description("every message, yours too, in chats that changed since a point — for reviewing who owes what")
15
- .option("--since <id-or-time>", `where the last review ended; ${REVIEW_DAYS} days ago if not given`)
15
+ .option("--since <id-or-time>", `where the last review ended — a message id, ISO 8601 time, or 2h / 1d ago; ${REVIEW_DAYS} days ago if not given`)
16
16
  .option("--transcribe", "transcribe voice messages not heard yet; slow, and the model must be downloaded")
17
17
  .option("--chat <chat>", "only this chat: an id, or part of a chat name")
18
18
  .option("--unanswered [hours]", `only questions to you or a group's admins that nobody answered, asked at least this long ago; ${UNANSWERED_HOURS} hours if not given`)
@@ -1 +1 @@
1
- {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,OA8C9B,CAAA"}
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,OA8C9B,CAAA"}
@@ -2,6 +2,7 @@ import { CliError } from "@leemour/cli-core";
2
2
  import { Command } from "commander";
3
3
  import { findRun, listRuns, readEvents, runsDirFor } from "../runs/run.js";
4
4
  import { outputFor } from "./context.js";
5
+ import { renderList, wholeNumber } from "./paging.js";
5
6
  /**
6
7
  * What this tool did, when it was asked to keep the record.
7
8
  *
@@ -13,12 +14,12 @@ export const runsCommand = () => {
13
14
  command
14
15
  .command("list")
15
16
  .description("recorded runs, newest first")
16
- .option("--limit <n>", "how many to show", (value) => Number.parseInt(value, 10), 20)
17
+ .option("--limit <n>", "how many to show", wholeNumber("--limit"), 20)
17
18
  .action(function () {
18
19
  const options = this.optsWithGlobals();
19
- const { renderer } = outputFor(this);
20
+ const { renderer, format } = outputFor(this);
20
21
  const runs = listRuns(runsDirFor());
21
- renderer.result(runs.slice(0, options.limit));
22
+ renderList(renderer, format, runs.slice(0, options.limit));
22
23
  // An empty list reads as broken otherwise, and the reason is that nothing asked for a
23
24
  // record — recording is off unless it is asked for (`NEED-52`). The explanation is a
24
25
  // diagnostic, so stdout still carries one JSON value and nothing else.
@@ -1 +1 @@
1
- {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sends.d.ts","sourceRoot":"","sources":["../../src/commands/sends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,8FAA8F;AAC9F,eAAO,MAAM,YAAY,QAAO,OAkB/B,CAAA"}
1
+ {"version":3,"file":"sends.d.ts","sourceRoot":"","sources":["../../src/commands/sends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,8FAA8F;AAC9F,eAAO,MAAM,YAAY,QAAO,OAkB/B,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { Command } from "commander";
2
2
  import { SendJournal, sendsPathFor } from "../sends/journal.js";
3
3
  import { forCommand } from "./context.js";
4
+ import { renderList } from "./paging.js";
4
5
  /** Every attempt to send from this profile, kept whatever `--record` says. Never the text. */
5
6
  export const sendsCommand = () => {
6
7
  const command = new Command("sends").description("every attempt to send from this profile — never the text");
@@ -10,10 +11,10 @@ export const sendsCommand = () => {
10
11
  .option("--limit <n>", "how many to show", (value) => Number.parseInt(value, 10), 20)
11
12
  .action(async function () {
12
13
  const { limit } = this.opts();
13
- const { settings, renderer, run } = forCommand(this);
14
+ const { settings, renderer, format, run } = forCommand(this);
14
15
  await run("sends list", async () => {
15
16
  const entries = new SendJournal(sendsPathFor(settings.profile)).entries().reverse();
16
- renderer.stream(entries.slice(0, limit));
17
+ renderList(renderer, format, entries.slice(0, limit));
17
18
  if (entries.length === 0)
18
19
  renderer.note(`profile ${settings.profile} has not tried to send anything`);
19
20
  });
@@ -1 +1 @@
1
- {"version":3,"file":"sends.js","sourceRoot":"","sources":["../../src/commands/sends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,8FAA8F;AAC9F,MAAM,CAAC,MAAM,YAAY,GAAG,GAAY,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,0DAA0D,CAAC,CAAA;IAE5G,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SACpF,MAAM,CAAC,KAAK;QACX,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAqB,CAAA;QAChD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QACpD,MAAM,GAAG,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAA;YACnF,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;YACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,OAAO,iCAAiC,CAAC,CAAA;QACvG,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
1
+ {"version":3,"file":"sends.js","sourceRoot":"","sources":["../../src/commands/sends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,8FAA8F;AAC9F,MAAM,CAAC,MAAM,YAAY,GAAG,GAAY,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,0DAA0D,CAAC,CAAA;IAE5G,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SACpF,MAAM,CAAC,KAAK;QACX,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAqB,CAAA;QAChD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAC5D,MAAM,GAAG,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAA;YACnF,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;YACrD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,OAAO,iCAAiC,CAAC,CAAA;QACvG,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
package/dist/config.d.ts CHANGED
@@ -4,13 +4,13 @@ declare const profileSettings: v.StrictObjectSchema<{
4
4
  limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
5
5
  timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
6
6
  color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
7
- senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
8
7
  /** The run log reads these two; nothing records anything until it exists. */
9
8
  record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
10
9
  keepRunsForDays: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
11
10
  readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
12
11
  allow: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["send", "forward", "reaction", "edit", "pin", "read", "delete", "groups", "contacts", "profile", "folders", "sessions"], (issue: v.PicklistIssue) => string>, (issue: v.BaseIssue<unknown>) => string>, undefined>;
13
12
  sendsPerHour: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
13
+ senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
14
14
  /** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
15
15
  serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
16
16
  }, v.ErrorMessage<v.StrictObjectIssue>>;
@@ -21,13 +21,13 @@ export declare const configSchema: v.StrictObjectSchema<{
21
21
  limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
22
22
  timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
23
23
  color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
24
- senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
25
24
  /** The run log reads these two; nothing records anything until it exists. */
26
25
  record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
27
26
  keepRunsForDays: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
28
27
  readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
29
28
  allow: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["send", "forward", "reaction", "edit", "pin", "read", "delete", "groups", "contacts", "profile", "folders", "sessions"], (issue: v.PicklistIssue) => string>, (issue: v.BaseIssue<unknown>) => string>, undefined>;
30
29
  sendsPerHour: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
30
+ senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
31
31
  /** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
32
32
  serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
33
33
  updateCheck: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
@@ -37,20 +37,77 @@ export declare const configSchema: v.StrictObjectSchema<{
37
37
  limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
38
38
  timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
39
39
  color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
40
- senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
41
40
  /** The run log reads these two; nothing records anything until it exists. */
42
41
  record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
43
42
  keepRunsForDays: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
44
43
  readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
45
44
  allow: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["send", "forward", "reaction", "edit", "pin", "read", "delete", "groups", "contacts", "profile", "folders", "sessions"], (issue: v.PicklistIssue) => string>, (issue: v.BaseIssue<unknown>) => string>, undefined>;
46
45
  sendsPerHour: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
46
+ senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
47
47
  /** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
48
48
  serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
49
49
  }, v.ErrorMessage<v.StrictObjectIssue>>, "has to be an object of profiles, by name">, {}>;
50
+ personal: v.OptionalSchema<v.StrictObjectSchema<{
51
+ defaults: v.OptionalSchema<v.StrictObjectSchema<{
52
+ limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
53
+ timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
54
+ color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
55
+ /** The run log reads these two; nothing records anything until it exists. */
56
+ record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
57
+ keepRunsForDays: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
58
+ readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
59
+ allow: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["send", "forward", "reaction", "edit", "pin", "read", "delete", "groups", "contacts", "profile", "folders", "sessions"], (issue: v.PicklistIssue) => string>, (issue: v.BaseIssue<unknown>) => string>, undefined>;
60
+ sendsPerHour: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
61
+ senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
62
+ /** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
63
+ serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
64
+ }, v.ErrorMessage<v.StrictObjectIssue>>, undefined>;
65
+ profiles: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StrictObjectSchema<{
66
+ limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
67
+ timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
68
+ color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
69
+ /** The run log reads these two; nothing records anything until it exists. */
70
+ record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
71
+ keepRunsForDays: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
72
+ readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
73
+ allow: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["send", "forward", "reaction", "edit", "pin", "read", "delete", "groups", "contacts", "profile", "folders", "sessions"], (issue: v.PicklistIssue) => string>, (issue: v.BaseIssue<unknown>) => string>, undefined>;
74
+ sendsPerHour: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
75
+ senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
76
+ /** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
77
+ serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
78
+ }, v.ErrorMessage<v.StrictObjectIssue>>, "has to be an object of profiles, by name">, undefined>;
79
+ }, v.ErrorMessage<v.StrictObjectIssue>>, undefined>;
80
+ bot: v.OptionalSchema<v.StrictObjectSchema<{
81
+ defaults: v.OptionalSchema<v.StrictObjectSchema<{
82
+ limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
83
+ timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
84
+ color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
85
+ /** The run log reads these two; nothing records anything until it exists. */
86
+ record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
87
+ keepRunsForDays: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
88
+ readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
89
+ allow: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["send", "forward", "reaction", "edit", "pin", "read", "delete", "groups", "contacts", "profile", "folders", "sessions"], (issue: v.PicklistIssue) => string>, (issue: v.BaseIssue<unknown>) => string>, undefined>;
90
+ sendsPerHour: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
91
+ }, v.ErrorMessage<v.StrictObjectIssue>>, undefined>;
92
+ profiles: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StrictObjectSchema<{
93
+ limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
94
+ timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
95
+ color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
96
+ /** The run log reads these two; nothing records anything until it exists. */
97
+ record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
98
+ keepRunsForDays: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
99
+ readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
100
+ allow: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["send", "forward", "reaction", "edit", "pin", "read", "delete", "groups", "contacts", "profile", "folders", "sessions"], (issue: v.PicklistIssue) => string>, (issue: v.BaseIssue<unknown>) => string>, undefined>;
101
+ sendsPerHour: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
102
+ }, v.ErrorMessage<v.StrictObjectIssue>>, "has to be an object of profiles, by name">, undefined>;
103
+ }, v.ErrorMessage<v.StrictObjectIssue>>, undefined>;
50
104
  }, v.ErrorMessage<v.StrictObjectIssue>>;
51
105
  export type Config = v.InferOutput<typeof configSchema>;
106
+ /** Which side of a profile a command speaks for: `max <p> bot …` is the bot, everything else the account. */
107
+ export type ProfileKind = "personal" | "bot";
52
108
  export type ProfileSetting = keyof v.InferOutput<typeof profileSettings>;
53
109
  export declare const PROFILE_SETTINGS: ProfileSetting[];
110
+ export declare const PERSONAL_ONLY_SETTINGS: ProfileSetting[];
54
111
  export declare const DEFAULTS_ONLY_SETTINGS: readonly ["updateCheck", "transcribeModel"];
55
112
  export declare const ALL_SETTINGS: string[];
56
113
  /** Whatever the command line carried. Everything is optional: absent means "not given here". */
@@ -118,15 +175,19 @@ export interface Settings {
118
175
  /** Named in errors and in `max --help`, so a person can find the file that decided this. */
119
176
  configPath: string;
120
177
  configFound: boolean;
178
+ kind: ProfileKind;
121
179
  /** Profiles the configuration file names, whether or not anyone has logged in to them. */
122
180
  configuredProfiles: string[];
123
181
  /** Where each value came from — `max config show` prints it. */
124
182
  sources: Record<SourcedSetting, Source>;
125
183
  }
126
- export type Source = "first word" | "flag" | "MAX_PROFILE" | "MAX_PROFILE_LOCK" | "MAX_TIMEOUT" | "config file" | "config defaults" | "default";
184
+ /** A value from the configuration file names the key it was read from: `config file: bot.profiles.test`. */
185
+ export type Source = "first word" | "flag" | "MAX_PROFILE" | "MAX_PROFILE_LOCK" | "MAX_TIMEOUT" | `config file: ${string}` | "default";
127
186
  export type SourcedSetting = "profile" | "limit" | "timeoutMs" | "commandTimeoutMs" | "color" | "senderColors" | "record" | "serve" | "keepRunsForDays" | "readOnly" | "allow" | "sendsPerHour" | "updateCheck" | "transcribeModel";
128
187
  export interface ResolveOptions {
129
188
  env?: NodeJS.ProcessEnv;
189
+ /** Personal unless the command is under `max bot`. */
190
+ kind?: ProfileKind;
130
191
  /** Tests pass a temporary directory; nothing else should need this. */
131
192
  configDir?: string;
132
193
  }
@@ -144,7 +205,7 @@ export interface ResolveOptions {
144
205
  * `MAX_STATE_DIR` or `MAX_CACHE_DIR` move the whole installation — including which keyring entry
145
206
  * a profile means (`ARCHITECTURE.md` §14).
146
207
  */
147
- export declare const resolveSettings: (flags?: GlobalFlags, { env, configDir }?: ResolveOptions) => Settings;
208
+ export declare const resolveSettings: (flags?: GlobalFlags, { env, configDir, kind }?: ResolveOptions) => Settings;
148
209
  /**
149
210
  * The profile names written in the configuration file.
150
211
  *
@@ -155,6 +216,8 @@ export declare const resolveSettings: (flags?: GlobalFlags, { env, configDir }?:
155
216
  export declare const configuredProfiles: ({ env, configDir }?: ResolveOptions) => string[];
156
217
  /** `30s`, `2m`, `500ms` — the one spelling of a duration, whatever it is for. */
157
218
  export declare const parseDuration: (value: string, source: string) => number;
219
+ /** `30m`, `2h`, `1d` as milliseconds; anything else is `undefined`. */
220
+ export declare const delayMs: (value: string) => number | undefined;
158
221
  /**
159
222
  * Rounded down to the minute: MAX drops the seconds and sends at the start of the minute (measured
160
223
  * 2026-09-24, `FIND-141`), so the time we print is the time it goes. A time without an offset is
@@ -162,14 +225,22 @@ export declare const parseDuration: (value: string, source: string) => number;
162
225
  * unlike `--timeout`: nobody schedules a message 90 seconds ahead.
163
226
  */
164
227
  export declare const sendTime: (value: string, now?: number) => number;
228
+ /** Where `config set` writes: one profile, or everyone, optionally narrowed to one kind. */
229
+ export interface SettingScope {
230
+ profile: string | undefined;
231
+ kind?: ProfileKind | undefined;
232
+ }
233
+ export declare const scopePath: ({ profile, kind }: SettingScope) => string;
234
+ /** The `config set` that writes where a value came from, so a refusal can say what to type. */
235
+ export declare const setCommandFor: (from: Source, profile: string, setting: string) => string;
165
236
  /**
166
237
  * Sets or removes one setting of one profile, or of `defaults`, and writes the file back.
238
+ * `defaultProfile` is the one top-level key, and takes no scope.
167
239
  *
168
240
  * **The value is checked by the same schema that reads the file**, on the whole result, before
169
241
  * anything is written — so `config set` cannot produce a file the next command refuses to load.
170
242
  */
171
- export declare const changeSetting: (path: string, { profile, setting, value }: {
172
- profile: string | undefined;
243
+ export declare const changeSetting: (path: string, { profile, kind, setting, value }: SettingScope & {
173
244
  setting: string;
174
245
  value: string | undefined;
175
246
  }) => unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}